From 7e7b18e8fc83fa25131cfac1c94bd83fbf6cd243 Mon Sep 17 00:00:00 2001 From: John Harrison Date: Wed, 1 Nov 2023 18:52:23 -0700 Subject: [PATCH] Switch edwards25519 operations to divstep-based modular inverse This replaces the inlined variant of "bignum_modinv" with code from "bignum_inv_p25519" in all "edwards25519_scalarmul*" functions. Again, there are consequential changes related to the slightly different amount of temporary storage needed by bignum_inv_p25519. --- arm/Makefile | 8 +- arm/curve25519/edwards25519_scalarmulbase.S | 1387 +++-- .../edwards25519_scalarmulbase_alt.S | 1387 +++-- arm/curve25519/edwards25519_scalarmuldouble.S | 1401 +++-- .../edwards25519_scalarmuldouble_alt.S | 1401 +++-- arm/proofs/edwards25519_scalarmulbase.ml | 2464 +++++---- arm/proofs/edwards25519_scalarmulbase_alt.ml | 2465 +++++---- arm/proofs/edwards25519_scalarmuldouble.ml | 1812 +++++-- .../edwards25519_scalarmuldouble_alt.ml | 1815 +++++-- x86/Makefile | 8 +- x86/curve25519/edwards25519_scalarmulbase.S | 1877 +++++-- .../edwards25519_scalarmulbase_alt.S | 1877 +++++-- x86/curve25519/edwards25519_scalarmuldouble.S | 2005 +++++-- .../edwards25519_scalarmuldouble_alt.S | 2005 +++++-- x86/proofs/edwards25519_encode.ml | 1 - x86/proofs/edwards25519_scalarmulbase.ml | 4379 +++++++++------ x86/proofs/edwards25519_scalarmulbase_alt.ml | 4691 ++++++++++------- x86/proofs/edwards25519_scalarmuldouble.ml | 3211 +++++++---- .../edwards25519_scalarmuldouble_alt.ml | 3212 +++++++---- .../curve25519/edwards25519_scalarmulbase.S | 1877 +++++-- .../edwards25519_scalarmulbase_alt.S | 1877 +++++-- .../curve25519/edwards25519_scalarmuldouble.S | 2005 +++++-- .../edwards25519_scalarmuldouble_alt.S | 2005 +++++-- 23 files changed, 31416 insertions(+), 13754 deletions(-) diff --git a/arm/Makefile b/arm/Makefile index f3804c0f..0e6fa5cb 100644 --- a/arm/Makefile +++ b/arm/Makefile @@ -379,10 +379,10 @@ curve25519/curve25519_x25519base.correct: curve25519/bignum_inv_p25519.o proofs/ curve25519/curve25519_x25519base_alt.correct: curve25519/bignum_inv_p25519.o proofs/curve25519_x25519base_alt.ml curve25519/curve25519_x25519base_alt.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/curve25519_x25519base_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ curve25519/curve25519_x25519base_byte.correct: curve25519/bignum_inv_p25519.o proofs/curve25519_x25519base_byte.ml curve25519/curve25519_x25519base_byte.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/curve25519_x25519base_byte.ml";;') | $(HOLLIGHT) 2>&1) >$@ curve25519/curve25519_x25519base_byte_alt.correct: curve25519/bignum_inv_p25519.o proofs/curve25519_x25519base_byte_alt.ml curve25519/curve25519_x25519base_byte_alt.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/curve25519_x25519base_byte_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ -curve25519/edwards25519_scalarmulbase.correct: generic/bignum_modinv.o proofs/edwards25519_scalarmulbase.ml curve25519/edwards25519_scalarmulbase.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/edwards25519_scalarmulbase.ml";;') | $(HOLLIGHT) 2>&1) >$@ -curve25519/edwards25519_scalarmulbase_alt.correct: generic/bignum_modinv.o proofs/edwards25519_scalarmulbase_alt.ml curve25519/edwards25519_scalarmulbase_alt.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/edwards25519_scalarmulbase_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ -curve25519/edwards25519_scalarmuldouble.correct: generic/bignum_modinv.o proofs/edwards25519_scalarmuldouble.ml curve25519/edwards25519_scalarmuldouble.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/edwards25519_scalarmuldouble.ml";;') | $(HOLLIGHT) 2>&1) >$@ -curve25519/edwards25519_scalarmuldouble_alt.correct: generic/bignum_modinv.o proofs/edwards25519_scalarmuldouble_alt.ml curve25519/edwards25519_scalarmuldouble_alt.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/edwards25519_scalarmuldouble_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ +curve25519/edwards25519_scalarmulbase.correct: curve25519/bignum_inv_p25519.o proofs/edwards25519_scalarmulbase.ml curve25519/edwards25519_scalarmulbase.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/edwards25519_scalarmulbase.ml";;') | $(HOLLIGHT) 2>&1) >$@ +curve25519/edwards25519_scalarmulbase_alt.correct: curve25519/bignum_inv_p25519.o proofs/edwards25519_scalarmulbase_alt.ml curve25519/edwards25519_scalarmulbase_alt.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/edwards25519_scalarmulbase_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ +curve25519/edwards25519_scalarmuldouble.correct: curve25519/bignum_inv_p25519.o proofs/edwards25519_scalarmuldouble.ml curve25519/edwards25519_scalarmuldouble.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/edwards25519_scalarmuldouble.ml";;') | $(HOLLIGHT) 2>&1) >$@ +curve25519/edwards25519_scalarmuldouble_alt.correct: curve25519/bignum_inv_p25519.o proofs/edwards25519_scalarmuldouble_alt.ml curve25519/edwards25519_scalarmuldouble_alt.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/edwards25519_scalarmuldouble_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ generic/bignum_modexp.correct: generic/bignum_amontifier.correct generic/bignum_amontmul.correct generic/bignum_demont.correct generic/bignum_mux.correct proofs/bignum_modexp.ml generic/bignum_modexp.o ; (cd ..; (echo 'loadt "arm/proofs/base.ml";;'; echo 'loadt "arm/proofs/bignum_modexp.ml";;') | $(HOLLIGHT) 2>&1) >$@ # All other other instances are standalone diff --git a/arm/curve25519/edwards25519_scalarmulbase.S b/arm/curve25519/edwards25519_scalarmulbase.S index 6ca09248..8c9d0f91 100644 --- a/arm/curve25519/edwards25519_scalarmulbase.S +++ b/arm/curve25519/edwards25519_scalarmulbase.S @@ -956,346 +956,1045 @@ edwards25519_scalarmulbase_scalarloop: // (X,Y,Z,W) back to the affine form (x,y) = (X/Z,Y/Z). This means // first calling the modular inverse to get w_3 = 1/z_3. - mov x0, 4 - add x1, w_3 - add x2, z_3 - adr x3, edwards25519_scalarmulbase_p_25519 - add x4, tmpspace - -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "arm/generic/bignum_modinv.S". - - lsl x10, x0, #3 - add x21, x4, x10 - add x22, x21, x10 - mov x10, xzr -edwards25519_scalarmulbase_copyloop: - ldr x11, [x2, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - str x11, [x21, x10, lsl #3] - str x12, [x22, x10, lsl #3] - str x12, [x4, x10, lsl #3] - str xzr, [x1, x10, lsl #3] - add x10, x10, #0x1 - cmp x10, x0 - b.cc edwards25519_scalarmulbase_copyloop - ldr x11, [x4] - sub x12, x11, #0x1 - str x12, [x4] - lsl x20, x11, #2 - sub x20, x11, x20 - eor x20, x20, #0x2 - mov x12, #0x1 - madd x12, x11, x20, x12 - mul x11, x12, x12 - madd x20, x12, x20, x20 - mul x12, x11, x11 - madd x20, x11, x20, x20 - mul x11, x12, x12 - madd x20, x12, x20, x20 - madd x20, x11, x20, x20 - lsl x2, x0, #7 -edwards25519_scalarmulbase_outerloop: - add x10, x2, #0x3f - lsr x5, x10, #6 - cmp x5, x0 - csel x5, x0, x5, cs - mov x13, xzr - mov x15, xzr - mov x14, xzr - mov x16, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmulbase_toploop: - ldr x11, [x21, x10, lsl #3] - ldr x12, [x22, x10, lsl #3] - orr x17, x11, x12 - cmp x17, xzr - and x17, x19, x13 - csel x15, x17, x15, ne - and x17, x19, x14 - csel x16, x17, x16, ne - csel x13, x11, x13, ne - csel x14, x12, x14, ne - csetm x19, ne - add x10, x10, #0x1 - cmp x10, x5 - b.cc edwards25519_scalarmulbase_toploop - orr x11, x13, x14 - clz x12, x11 - negs x17, x12 - lsl x13, x13, x12 - csel x15, x15, xzr, ne - lsl x14, x14, x12 - csel x16, x16, xzr, ne - lsr x15, x15, x17 - lsr x16, x16, x17 - orr x13, x13, x15 - orr x14, x14, x16 - ldr x15, [x21] - ldr x16, [x22] - mov x6, #0x1 - mov x7, xzr - mov x8, xzr - mov x9, #0x1 - mov x10, #0x3a - tst x15, #0x1 -edwards25519_scalarmulbase_innerloop: - csel x11, x14, xzr, ne - csel x12, x16, xzr, ne - csel x17, x8, xzr, ne - csel x19, x9, xzr, ne - ccmp x13, x14, #0x2, ne - sub x11, x13, x11 - sub x12, x15, x12 - csel x14, x14, x13, cs - cneg x11, x11, cc - csel x16, x16, x15, cs - cneg x15, x12, cc - csel x8, x8, x6, cs - csel x9, x9, x7, cs - tst x12, #0x2 - add x6, x6, x17 - add x7, x7, x19 - lsr x13, x11, #1 - lsr x15, x15, #1 - add x8, x8, x8 - add x9, x9, x9 - sub x10, x10, #0x1 - cbnz x10, edwards25519_scalarmulbase_innerloop - mov x13, xzr - mov x14, xzr - mov x17, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmulbase_congloop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - mul x15, x6, x11 - mul x16, x7, x12 - adds x15, x15, x13 - umulh x13, x6, x11 - adc x13, x13, xzr - adds x15, x15, x16 - extr x17, x15, x17, #58 - str x17, [x4, x10, lsl #3] - mov x17, x15 - umulh x15, x7, x12 - adc x13, x13, x15 - mul x15, x8, x11 - mul x16, x9, x12 - adds x15, x15, x14 - umulh x14, x8, x11 - adc x14, x14, xzr - adds x15, x15, x16 - extr x19, x15, x19, #58 - str x19, [x1, x10, lsl #3] - mov x19, x15 - umulh x15, x9, x12 - adc x14, x14, x15 - add x10, x10, #0x1 - cmp x10, x0 - b.cc edwards25519_scalarmulbase_congloop - extr x13, x13, x17, #58 - extr x14, x14, x19, #58 - ldr x11, [x4] - mul x17, x11, x20 - ldr x12, [x3] - mul x15, x17, x12 - umulh x16, x17, x12 - adds x11, x11, x15 - mov x10, #0x1 - sub x11, x0, #0x1 - cbz x11, edwards25519_scalarmulbase_wmontend -edwards25519_scalarmulbase_wmontloop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x4, x10, lsl #3] - mul x15, x17, x11 - adcs x12, x12, x16 - umulh x16, x17, x11 - adc x16, x16, xzr - adds x12, x12, x15 - sub x15, x10, #0x1 - str x12, [x4, x15, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_wmontloop -edwards25519_scalarmulbase_wmontend: - adcs x16, x16, x13 - adc x13, xzr, xzr - sub x15, x10, #0x1 - str x16, [x4, x15, lsl #3] - negs x10, xzr -edwards25519_scalarmulbase_wcmploop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - sbcs xzr, x11, x12 - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_wcmploop - sbcs xzr, x13, xzr - csetm x13, cs - negs x10, xzr -edwards25519_scalarmulbase_wcorrloop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - and x12, x12, x13 - sbcs x11, x11, x12 - str x11, [x4, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_wcorrloop - ldr x11, [x1] - mul x17, x11, x20 - ldr x12, [x3] - mul x15, x17, x12 - umulh x16, x17, x12 - adds x11, x11, x15 - mov x10, #0x1 - sub x11, x0, #0x1 - cbz x11, edwards25519_scalarmulbase_zmontend -edwards25519_scalarmulbase_zmontloop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - mul x15, x17, x11 - adcs x12, x12, x16 - umulh x16, x17, x11 - adc x16, x16, xzr - adds x12, x12, x15 - sub x15, x10, #0x1 - str x12, [x1, x15, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_zmontloop -edwards25519_scalarmulbase_zmontend: - adcs x16, x16, x14 - adc x14, xzr, xzr - sub x15, x10, #0x1 - str x16, [x1, x15, lsl #3] - negs x10, xzr -edwards25519_scalarmulbase_zcmploop: - ldr x11, [x1, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - sbcs xzr, x11, x12 - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_zcmploop - sbcs xzr, x14, xzr - csetm x14, cs - negs x10, xzr -edwards25519_scalarmulbase_zcorrloop: - ldr x11, [x1, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - and x12, x12, x14 - sbcs x11, x11, x12 - str x11, [x1, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_zcorrloop - mov x13, xzr - mov x14, xzr - mov x17, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmulbase_crossloop: - ldr x11, [x21, x10, lsl #3] - ldr x12, [x22, x10, lsl #3] - mul x15, x6, x11 - mul x16, x7, x12 - adds x15, x15, x13 - umulh x13, x6, x11 - adc x13, x13, xzr - subs x15, x15, x16 - str x15, [x21, x10, lsl #3] - umulh x15, x7, x12 - sub x17, x15, x17 - sbcs x13, x13, x17 - csetm x17, cc - mul x15, x8, x11 - mul x16, x9, x12 - adds x15, x15, x14 - umulh x14, x8, x11 - adc x14, x14, xzr - subs x15, x15, x16 - str x15, [x22, x10, lsl #3] - umulh x15, x9, x12 - sub x19, x15, x19 - sbcs x14, x14, x19 - csetm x19, cc - add x10, x10, #0x1 - cmp x10, x5 - b.cc edwards25519_scalarmulbase_crossloop - cmn x17, x17 - ldr x15, [x21] - mov x10, xzr - sub x6, x5, #0x1 - cbz x6, edwards25519_scalarmulbase_negskip1 -edwards25519_scalarmulbase_negloop1: - add x11, x10, #0x8 - ldr x12, [x21, x11] - extr x15, x12, x15, #58 - eor x15, x15, x17 - adcs x15, x15, xzr - str x15, [x21, x10] - mov x15, x12 - add x10, x10, #0x8 - sub x6, x6, #0x1 - cbnz x6, edwards25519_scalarmulbase_negloop1 -edwards25519_scalarmulbase_negskip1: - extr x15, x13, x15, #58 - eor x15, x15, x17 - adcs x15, x15, xzr - str x15, [x21, x10] - cmn x19, x19 - ldr x15, [x22] - mov x10, xzr - sub x6, x5, #0x1 - cbz x6, edwards25519_scalarmulbase_negskip2 -edwards25519_scalarmulbase_negloop2: - add x11, x10, #0x8 - ldr x12, [x22, x11] - extr x15, x12, x15, #58 - eor x15, x15, x19 - adcs x15, x15, xzr - str x15, [x22, x10] - mov x15, x12 - add x10, x10, #0x8 - sub x6, x6, #0x1 - cbnz x6, edwards25519_scalarmulbase_negloop2 -edwards25519_scalarmulbase_negskip2: - extr x15, x14, x15, #58 - eor x15, x15, x19 - adcs x15, x15, xzr - str x15, [x22, x10] - mov x10, xzr - cmn x17, x17 -edwards25519_scalarmulbase_wfliploop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x4, x10, lsl #3] - and x11, x11, x17 - eor x12, x12, x17 - adcs x11, x11, x12 - str x11, [x4, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_wfliploop - mvn x19, x19 - mov x10, xzr - cmn x19, x19 -edwards25519_scalarmulbase_zfliploop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - and x11, x11, x19 - eor x12, x12, x19 - adcs x11, x11, x12 - str x11, [x1, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_zfliploop - subs x2, x2, #0x3a - b.hi edwards25519_scalarmulbase_outerloop + add x0, w_3 + add x1, z_3 + +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "arm/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 128 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, w_3, x_3 +// and y_3. + + mov x20, x0 + mov x10, #0xffffffffffffffed + mov x11, #0xffffffffffffffff + stp x10, x11, [sp] + mov x12, #0x7fffffffffffffff + stp x11, x12, [sp, #16] + ldp x2, x3, [x1] + ldp x4, x5, [x1, #16] + mov x7, #0x13 + lsr x6, x5, #63 + madd x6, x7, x6, x7 + adds x2, x2, x6 + adcs x3, x3, xzr + adcs x4, x4, xzr + orr x5, x5, #0x8000000000000000 + adcs x5, x5, xzr + csel x6, x7, xzr, cc + subs x2, x2, x6 + sbcs x3, x3, xzr + sbcs x4, x4, xzr + sbc x5, x5, xzr + and x5, x5, #0x7fffffffffffffff + stp x2, x3, [sp, #32] + stp x4, x5, [sp, #48] + stp xzr, xzr, [sp, #64] + stp xzr, xzr, [sp, #80] + mov x10, #0x2099 + movk x10, #0x7502, lsl #16 + movk x10, #0x9e23, lsl #32 + movk x10, #0xa0f9, lsl #48 + mov x11, #0x2595 + movk x11, #0x1d13, lsl #16 + movk x11, #0x8f3f, lsl #32 + movk x11, #0xa8c6, lsl #48 + mov x12, #0x5242 + movk x12, #0x5ac, lsl #16 + movk x12, #0x8938, lsl #32 + movk x12, #0x6c6c, lsl #48 + mov x13, #0x615 + movk x13, #0x4177, lsl #16 + movk x13, #0x8b2, lsl #32 + movk x13, #0x2765, lsl #48 + stp x10, x11, [sp, #96] + stp x12, x13, [sp, #112] + mov x21, #0xa + mov x22, #0x1 + b edwards25519_scalarmulbase_invmidloop +edwards25519_scalarmulbase_invloop: + cmp x10, xzr + csetm x14, mi + cneg x10, x10, mi + cmp x11, xzr + csetm x15, mi + cneg x11, x11, mi + cmp x12, xzr + csetm x16, mi + cneg x12, x12, mi + cmp x13, xzr + csetm x17, mi + cneg x13, x13, mi + and x0, x10, x14 + and x1, x11, x15 + add x9, x0, x1 + and x0, x12, x16 + and x1, x13, x17 + add x19, x0, x1 + ldr x7, [sp] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #32] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + adc x2, x2, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x5, x19, x0 + adc x3, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x7, [sp, #8] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #40] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + adc x6, x6, x1 + extr x4, x2, x4, #59 + str x4, [sp] + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x3, x3, x0 + adc x4, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x3, x3, x0 + adc x4, x4, x1 + extr x5, x3, x5, #59 + str x5, [sp, #32] + ldr x7, [sp, #16] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #48] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + adc x5, x5, x1 + extr x2, x6, x2, #59 + str x2, [sp, #8] + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x4, x4, x0 + adc x2, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x4, x4, x0 + adc x2, x2, x1 + extr x3, x4, x3, #59 + str x3, [sp, #40] + ldr x7, [sp, #24] + eor x1, x7, x14 + asr x3, x1, #63 + and x3, x3, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #56] + eor x1, x8, x15 + asr x0, x1, #63 + and x0, x0, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x5, x6, #59 + str x6, [sp, #16] + extr x5, x3, x5, #59 + str x5, [sp, #24] + eor x1, x7, x16 + asr x5, x1, #63 + and x5, x5, x12 + neg x5, x5 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x2, x2, x0 + adc x5, x5, x1 + eor x1, x8, x17 + asr x0, x1, #63 + and x0, x0, x13 + sub x5, x5, x0 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x2, x2, x0 + adc x5, x5, x1 + extr x4, x2, x4, #59 + str x4, [sp, #48] + extr x2, x5, x2, #59 + str x2, [sp, #56] + ldr x7, [sp, #64] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #96] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + str x4, [sp, #64] + adc x2, x2, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x5, x19, x0 + adc x3, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x5, x5, x0 + str x5, [sp, #96] + adc x3, x3, x1 + ldr x7, [sp, #72] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #104] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + str x2, [sp, #72] + adc x6, x6, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x3, x3, x0 + adc x4, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x3, x3, x0 + str x3, [sp, #104] + adc x4, x4, x1 + ldr x7, [sp, #80] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #112] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + str x6, [sp, #80] + adc x5, x5, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x4, x4, x0 + adc x2, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x4, x4, x0 + str x4, [sp, #112] + adc x2, x2, x1 + ldr x7, [sp, #88] + eor x1, x7, x14 + and x3, x14, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #120] + eor x1, x8, x15 + and x0, x15, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x3, x5, #63 + ldp x0, x1, [sp, #64] + add x6, x6, x3, asr #63 + mov x3, #0x13 + mul x4, x6, x3 + add x5, x5, x6, lsl #63 + smulh x3, x6, x3 + ldr x6, [sp, #80] + adds x0, x0, x4 + adcs x1, x1, x3 + asr x3, x3, #63 + adcs x6, x6, x3 + adc x5, x5, x3 + stp x0, x1, [sp, #64] + stp x6, x5, [sp, #80] + eor x1, x7, x16 + and x5, x16, x12 + neg x5, x5 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x2, x2, x0 + adc x5, x5, x1 + eor x1, x8, x17 + and x0, x17, x13 + sub x5, x5, x0 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x2, x2, x0 + adc x5, x5, x1 + extr x6, x5, x2, #63 + ldp x0, x1, [sp, #96] + add x6, x6, x5, asr #63 + mov x5, #0x13 + mul x4, x6, x5 + add x2, x2, x6, lsl #63 + smulh x5, x6, x5 + ldr x3, [sp, #112] + adds x0, x0, x4 + adcs x1, x1, x5 + asr x5, x5, #63 + adcs x3, x3, x5 + adc x2, x2, x5 + stp x0, x1, [sp, #96] + stp x3, x2, [sp, #112] +edwards25519_scalarmulbase_invmidloop: + mov x1, x22 + ldr x2, [sp] + ldr x3, [sp, #32] + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x8, x4, #0x100, lsl #12 + sbfx x8, x8, #21, #21 + mov x11, #0x100000 + add x11, x11, x11, lsl #21 + add x9, x4, x11 + asr x9, x9, #42 + add x10, x5, #0x100, lsl #12 + sbfx x10, x10, #21, #21 + add x11, x5, x11 + asr x11, x11, #42 + mul x6, x8, x2 + mul x7, x9, x3 + mul x2, x10, x2 + mul x3, x11, x3 + add x4, x6, x7 + add x5, x2, x3 + asr x2, x4, #20 + asr x3, x5, #20 + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x12, x4, #0x100, lsl #12 + sbfx x12, x12, #21, #21 + mov x15, #0x100000 + add x15, x15, x15, lsl #21 + add x13, x4, x15 + asr x13, x13, #42 + add x14, x5, #0x100, lsl #12 + sbfx x14, x14, #21, #21 + add x15, x5, x15 + asr x15, x15, #42 + mul x6, x12, x2 + mul x7, x13, x3 + mul x2, x14, x2 + mul x3, x15, x3 + add x4, x6, x7 + add x5, x2, x3 + asr x2, x4, #20 + asr x3, x5, #20 + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + mul x2, x12, x8 + mul x3, x12, x9 + mul x6, x14, x8 + mul x7, x14, x9 + madd x8, x13, x10, x2 + madd x9, x13, x11, x3 + madd x16, x15, x10, x6 + madd x17, x15, x11, x7 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x12, x4, #0x100, lsl #12 + sbfx x12, x12, #22, #21 + mov x15, #0x100000 + add x15, x15, x15, lsl #21 + add x13, x4, x15 + asr x13, x13, #43 + add x14, x5, #0x100, lsl #12 + sbfx x14, x14, #22, #21 + add x15, x5, x15 + asr x15, x15, #43 + mneg x2, x12, x8 + mneg x3, x12, x9 + mneg x4, x14, x8 + mneg x5, x14, x9 + msub x10, x13, x16, x2 + msub x11, x13, x17, x3 + msub x12, x15, x16, x4 + msub x13, x15, x17, x5 + mov x22, x1 + subs x21, x21, #0x1 + b.ne edwards25519_scalarmulbase_invloop + ldr x0, [sp] + ldr x1, [sp, #32] + mul x0, x0, x10 + madd x1, x1, x11, x0 + asr x0, x1, #63 + cmp x10, xzr + csetm x14, mi + cneg x10, x10, mi + eor x14, x14, x0 + cmp x11, xzr + csetm x15, mi + cneg x11, x11, mi + eor x15, x15, x0 + cmp x12, xzr + csetm x16, mi + cneg x12, x12, mi + eor x16, x16, x0 + cmp x13, xzr + csetm x17, mi + cneg x13, x13, mi + eor x17, x17, x0 + and x0, x10, x14 + and x1, x11, x15 + add x9, x0, x1 + ldr x7, [sp, #64] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #96] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + str x4, [sp, #64] + adc x2, x2, x1 + ldr x7, [sp, #72] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #104] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + str x2, [sp, #72] + adc x6, x6, x1 + ldr x7, [sp, #80] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #112] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + str x6, [sp, #80] + adc x5, x5, x1 + ldr x7, [sp, #88] + eor x1, x7, x14 + and x3, x14, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #120] + eor x1, x8, x15 + and x0, x15, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x3, x5, #63 + ldp x0, x1, [sp, #64] + tst x3, x3 + cinc x6, x6, pl + mov x3, #0x13 + mul x4, x6, x3 + add x5, x5, x6, lsl #63 + smulh x6, x6, x3 + ldr x2, [sp, #80] + adds x0, x0, x4 + adcs x1, x1, x6 + asr x6, x6, #63 + adcs x2, x2, x6 + adcs x5, x5, x6 + csel x3, x3, xzr, mi + subs x0, x0, x3 + sbcs x1, x1, xzr + sbcs x2, x2, xzr + sbc x5, x5, xzr + and x5, x5, #0x7fffffffffffffff + mov x4, x20 + stp x0, x1, [x4] + stp x2, x5, [x4, #16] // The final result is x = X * inv(Z), y = Y * inv(Z). // These are the only operations in the whole computation that @@ -1322,14 +2021,6 @@ edwards25519_scalarmulbase_zfliploop: // .section .rodata // **************************************************************************** -// The modulus p_25519 = 2^255 - 19, for the modular inverse - -edwards25519_scalarmulbase_p_25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // 0 * B = 0 and 2^251 * B in extended-projective coordinates // but with Z = 1 assumed and hence left out, so they are (X,Y,T) only. diff --git a/arm/curve25519/edwards25519_scalarmulbase_alt.S b/arm/curve25519/edwards25519_scalarmulbase_alt.S index e8dd9114..03e5598f 100644 --- a/arm/curve25519/edwards25519_scalarmulbase_alt.S +++ b/arm/curve25519/edwards25519_scalarmulbase_alt.S @@ -798,346 +798,1045 @@ edwards25519_scalarmulbase_alt_scalarloop: // (X,Y,Z,W) back to the affine form (x,y) = (X/Z,Y/Z). This means // first calling the modular inverse to get w_3 = 1/z_3. - mov x0, 4 - add x1, w_3 - add x2, z_3 - adr x3, edwards25519_scalarmulbase_alt_p_25519 - add x4, tmpspace - -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "arm/generic/bignum_modinv.S". - - lsl x10, x0, #3 - add x21, x4, x10 - add x22, x21, x10 - mov x10, xzr -edwards25519_scalarmulbase_alt_copyloop: - ldr x11, [x2, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - str x11, [x21, x10, lsl #3] - str x12, [x22, x10, lsl #3] - str x12, [x4, x10, lsl #3] - str xzr, [x1, x10, lsl #3] - add x10, x10, #0x1 - cmp x10, x0 - b.cc edwards25519_scalarmulbase_alt_copyloop - ldr x11, [x4] - sub x12, x11, #0x1 - str x12, [x4] - lsl x20, x11, #2 - sub x20, x11, x20 - eor x20, x20, #0x2 - mov x12, #0x1 - madd x12, x11, x20, x12 - mul x11, x12, x12 - madd x20, x12, x20, x20 - mul x12, x11, x11 - madd x20, x11, x20, x20 - mul x11, x12, x12 - madd x20, x12, x20, x20 - madd x20, x11, x20, x20 - lsl x2, x0, #7 -edwards25519_scalarmulbase_alt_outerloop: - add x10, x2, #0x3f - lsr x5, x10, #6 - cmp x5, x0 - csel x5, x0, x5, cs - mov x13, xzr - mov x15, xzr - mov x14, xzr - mov x16, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmulbase_alt_toploop: - ldr x11, [x21, x10, lsl #3] - ldr x12, [x22, x10, lsl #3] - orr x17, x11, x12 - cmp x17, xzr - and x17, x19, x13 - csel x15, x17, x15, ne - and x17, x19, x14 - csel x16, x17, x16, ne - csel x13, x11, x13, ne - csel x14, x12, x14, ne - csetm x19, ne - add x10, x10, #0x1 - cmp x10, x5 - b.cc edwards25519_scalarmulbase_alt_toploop - orr x11, x13, x14 - clz x12, x11 - negs x17, x12 - lsl x13, x13, x12 - csel x15, x15, xzr, ne - lsl x14, x14, x12 - csel x16, x16, xzr, ne - lsr x15, x15, x17 - lsr x16, x16, x17 - orr x13, x13, x15 - orr x14, x14, x16 - ldr x15, [x21] - ldr x16, [x22] - mov x6, #0x1 - mov x7, xzr - mov x8, xzr - mov x9, #0x1 - mov x10, #0x3a - tst x15, #0x1 -edwards25519_scalarmulbase_alt_innerloop: - csel x11, x14, xzr, ne - csel x12, x16, xzr, ne - csel x17, x8, xzr, ne - csel x19, x9, xzr, ne - ccmp x13, x14, #0x2, ne - sub x11, x13, x11 - sub x12, x15, x12 - csel x14, x14, x13, cs - cneg x11, x11, cc - csel x16, x16, x15, cs - cneg x15, x12, cc - csel x8, x8, x6, cs - csel x9, x9, x7, cs - tst x12, #0x2 - add x6, x6, x17 - add x7, x7, x19 - lsr x13, x11, #1 - lsr x15, x15, #1 - add x8, x8, x8 - add x9, x9, x9 - sub x10, x10, #0x1 - cbnz x10, edwards25519_scalarmulbase_alt_innerloop - mov x13, xzr - mov x14, xzr - mov x17, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmulbase_alt_congloop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - mul x15, x6, x11 - mul x16, x7, x12 - adds x15, x15, x13 - umulh x13, x6, x11 - adc x13, x13, xzr - adds x15, x15, x16 - extr x17, x15, x17, #58 - str x17, [x4, x10, lsl #3] - mov x17, x15 - umulh x15, x7, x12 - adc x13, x13, x15 - mul x15, x8, x11 - mul x16, x9, x12 - adds x15, x15, x14 - umulh x14, x8, x11 - adc x14, x14, xzr - adds x15, x15, x16 - extr x19, x15, x19, #58 - str x19, [x1, x10, lsl #3] - mov x19, x15 - umulh x15, x9, x12 - adc x14, x14, x15 - add x10, x10, #0x1 - cmp x10, x0 - b.cc edwards25519_scalarmulbase_alt_congloop - extr x13, x13, x17, #58 - extr x14, x14, x19, #58 - ldr x11, [x4] - mul x17, x11, x20 - ldr x12, [x3] - mul x15, x17, x12 - umulh x16, x17, x12 - adds x11, x11, x15 - mov x10, #0x1 - sub x11, x0, #0x1 - cbz x11, edwards25519_scalarmulbase_alt_wmontend -edwards25519_scalarmulbase_alt_wmontloop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x4, x10, lsl #3] - mul x15, x17, x11 - adcs x12, x12, x16 - umulh x16, x17, x11 - adc x16, x16, xzr - adds x12, x12, x15 - sub x15, x10, #0x1 - str x12, [x4, x15, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_alt_wmontloop -edwards25519_scalarmulbase_alt_wmontend: - adcs x16, x16, x13 - adc x13, xzr, xzr - sub x15, x10, #0x1 - str x16, [x4, x15, lsl #3] - negs x10, xzr -edwards25519_scalarmulbase_alt_wcmploop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - sbcs xzr, x11, x12 - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_alt_wcmploop - sbcs xzr, x13, xzr - csetm x13, cs - negs x10, xzr -edwards25519_scalarmulbase_alt_wcorrloop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - and x12, x12, x13 - sbcs x11, x11, x12 - str x11, [x4, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_alt_wcorrloop - ldr x11, [x1] - mul x17, x11, x20 - ldr x12, [x3] - mul x15, x17, x12 - umulh x16, x17, x12 - adds x11, x11, x15 - mov x10, #0x1 - sub x11, x0, #0x1 - cbz x11, edwards25519_scalarmulbase_alt_zmontend -edwards25519_scalarmulbase_alt_zmontloop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - mul x15, x17, x11 - adcs x12, x12, x16 - umulh x16, x17, x11 - adc x16, x16, xzr - adds x12, x12, x15 - sub x15, x10, #0x1 - str x12, [x1, x15, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_alt_zmontloop -edwards25519_scalarmulbase_alt_zmontend: - adcs x16, x16, x14 - adc x14, xzr, xzr - sub x15, x10, #0x1 - str x16, [x1, x15, lsl #3] - negs x10, xzr -edwards25519_scalarmulbase_alt_zcmploop: - ldr x11, [x1, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - sbcs xzr, x11, x12 - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_alt_zcmploop - sbcs xzr, x14, xzr - csetm x14, cs - negs x10, xzr -edwards25519_scalarmulbase_alt_zcorrloop: - ldr x11, [x1, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - and x12, x12, x14 - sbcs x11, x11, x12 - str x11, [x1, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_alt_zcorrloop - mov x13, xzr - mov x14, xzr - mov x17, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmulbase_alt_crossloop: - ldr x11, [x21, x10, lsl #3] - ldr x12, [x22, x10, lsl #3] - mul x15, x6, x11 - mul x16, x7, x12 - adds x15, x15, x13 - umulh x13, x6, x11 - adc x13, x13, xzr - subs x15, x15, x16 - str x15, [x21, x10, lsl #3] - umulh x15, x7, x12 - sub x17, x15, x17 - sbcs x13, x13, x17 - csetm x17, cc - mul x15, x8, x11 - mul x16, x9, x12 - adds x15, x15, x14 - umulh x14, x8, x11 - adc x14, x14, xzr - subs x15, x15, x16 - str x15, [x22, x10, lsl #3] - umulh x15, x9, x12 - sub x19, x15, x19 - sbcs x14, x14, x19 - csetm x19, cc - add x10, x10, #0x1 - cmp x10, x5 - b.cc edwards25519_scalarmulbase_alt_crossloop - cmn x17, x17 - ldr x15, [x21] - mov x10, xzr - sub x6, x5, #0x1 - cbz x6, edwards25519_scalarmulbase_alt_negskip1 -edwards25519_scalarmulbase_alt_negloop1: - add x11, x10, #0x8 - ldr x12, [x21, x11] - extr x15, x12, x15, #58 - eor x15, x15, x17 - adcs x15, x15, xzr - str x15, [x21, x10] - mov x15, x12 - add x10, x10, #0x8 - sub x6, x6, #0x1 - cbnz x6, edwards25519_scalarmulbase_alt_negloop1 -edwards25519_scalarmulbase_alt_negskip1: - extr x15, x13, x15, #58 - eor x15, x15, x17 - adcs x15, x15, xzr - str x15, [x21, x10] - cmn x19, x19 - ldr x15, [x22] - mov x10, xzr - sub x6, x5, #0x1 - cbz x6, edwards25519_scalarmulbase_alt_negskip2 -edwards25519_scalarmulbase_alt_negloop2: - add x11, x10, #0x8 - ldr x12, [x22, x11] - extr x15, x12, x15, #58 - eor x15, x15, x19 - adcs x15, x15, xzr - str x15, [x22, x10] - mov x15, x12 - add x10, x10, #0x8 - sub x6, x6, #0x1 - cbnz x6, edwards25519_scalarmulbase_alt_negloop2 -edwards25519_scalarmulbase_alt_negskip2: - extr x15, x14, x15, #58 - eor x15, x15, x19 - adcs x15, x15, xzr - str x15, [x22, x10] - mov x10, xzr - cmn x17, x17 -edwards25519_scalarmulbase_alt_wfliploop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x4, x10, lsl #3] - and x11, x11, x17 - eor x12, x12, x17 - adcs x11, x11, x12 - str x11, [x4, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_alt_wfliploop - mvn x19, x19 - mov x10, xzr - cmn x19, x19 -edwards25519_scalarmulbase_alt_zfliploop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - and x11, x11, x19 - eor x12, x12, x19 - adcs x11, x11, x12 - str x11, [x1, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmulbase_alt_zfliploop - subs x2, x2, #0x3a - b.hi edwards25519_scalarmulbase_alt_outerloop + add x0, w_3 + add x1, z_3 + +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "arm/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 128 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, w_3, x_3 +// and y_3. + + mov x20, x0 + mov x10, #0xffffffffffffffed + mov x11, #0xffffffffffffffff + stp x10, x11, [sp] + mov x12, #0x7fffffffffffffff + stp x11, x12, [sp, #16] + ldp x2, x3, [x1] + ldp x4, x5, [x1, #16] + mov x7, #0x13 + lsr x6, x5, #63 + madd x6, x7, x6, x7 + adds x2, x2, x6 + adcs x3, x3, xzr + adcs x4, x4, xzr + orr x5, x5, #0x8000000000000000 + adcs x5, x5, xzr + csel x6, x7, xzr, cc + subs x2, x2, x6 + sbcs x3, x3, xzr + sbcs x4, x4, xzr + sbc x5, x5, xzr + and x5, x5, #0x7fffffffffffffff + stp x2, x3, [sp, #32] + stp x4, x5, [sp, #48] + stp xzr, xzr, [sp, #64] + stp xzr, xzr, [sp, #80] + mov x10, #0x2099 + movk x10, #0x7502, lsl #16 + movk x10, #0x9e23, lsl #32 + movk x10, #0xa0f9, lsl #48 + mov x11, #0x2595 + movk x11, #0x1d13, lsl #16 + movk x11, #0x8f3f, lsl #32 + movk x11, #0xa8c6, lsl #48 + mov x12, #0x5242 + movk x12, #0x5ac, lsl #16 + movk x12, #0x8938, lsl #32 + movk x12, #0x6c6c, lsl #48 + mov x13, #0x615 + movk x13, #0x4177, lsl #16 + movk x13, #0x8b2, lsl #32 + movk x13, #0x2765, lsl #48 + stp x10, x11, [sp, #96] + stp x12, x13, [sp, #112] + mov x21, #0xa + mov x22, #0x1 + b edwards25519_scalarmulbase_alt_invmidloop +edwards25519_scalarmulbase_alt_invloop: + cmp x10, xzr + csetm x14, mi + cneg x10, x10, mi + cmp x11, xzr + csetm x15, mi + cneg x11, x11, mi + cmp x12, xzr + csetm x16, mi + cneg x12, x12, mi + cmp x13, xzr + csetm x17, mi + cneg x13, x13, mi + and x0, x10, x14 + and x1, x11, x15 + add x9, x0, x1 + and x0, x12, x16 + and x1, x13, x17 + add x19, x0, x1 + ldr x7, [sp] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #32] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + adc x2, x2, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x5, x19, x0 + adc x3, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x7, [sp, #8] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #40] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + adc x6, x6, x1 + extr x4, x2, x4, #59 + str x4, [sp] + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x3, x3, x0 + adc x4, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x3, x3, x0 + adc x4, x4, x1 + extr x5, x3, x5, #59 + str x5, [sp, #32] + ldr x7, [sp, #16] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #48] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + adc x5, x5, x1 + extr x2, x6, x2, #59 + str x2, [sp, #8] + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x4, x4, x0 + adc x2, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x4, x4, x0 + adc x2, x2, x1 + extr x3, x4, x3, #59 + str x3, [sp, #40] + ldr x7, [sp, #24] + eor x1, x7, x14 + asr x3, x1, #63 + and x3, x3, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #56] + eor x1, x8, x15 + asr x0, x1, #63 + and x0, x0, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x5, x6, #59 + str x6, [sp, #16] + extr x5, x3, x5, #59 + str x5, [sp, #24] + eor x1, x7, x16 + asr x5, x1, #63 + and x5, x5, x12 + neg x5, x5 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x2, x2, x0 + adc x5, x5, x1 + eor x1, x8, x17 + asr x0, x1, #63 + and x0, x0, x13 + sub x5, x5, x0 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x2, x2, x0 + adc x5, x5, x1 + extr x4, x2, x4, #59 + str x4, [sp, #48] + extr x2, x5, x2, #59 + str x2, [sp, #56] + ldr x7, [sp, #64] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #96] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + str x4, [sp, #64] + adc x2, x2, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x5, x19, x0 + adc x3, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x5, x5, x0 + str x5, [sp, #96] + adc x3, x3, x1 + ldr x7, [sp, #72] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #104] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + str x2, [sp, #72] + adc x6, x6, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x3, x3, x0 + adc x4, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x3, x3, x0 + str x3, [sp, #104] + adc x4, x4, x1 + ldr x7, [sp, #80] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #112] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + str x6, [sp, #80] + adc x5, x5, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x4, x4, x0 + adc x2, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x4, x4, x0 + str x4, [sp, #112] + adc x2, x2, x1 + ldr x7, [sp, #88] + eor x1, x7, x14 + and x3, x14, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #120] + eor x1, x8, x15 + and x0, x15, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x3, x5, #63 + ldp x0, x1, [sp, #64] + add x6, x6, x3, asr #63 + mov x3, #0x13 + mul x4, x6, x3 + add x5, x5, x6, lsl #63 + smulh x3, x6, x3 + ldr x6, [sp, #80] + adds x0, x0, x4 + adcs x1, x1, x3 + asr x3, x3, #63 + adcs x6, x6, x3 + adc x5, x5, x3 + stp x0, x1, [sp, #64] + stp x6, x5, [sp, #80] + eor x1, x7, x16 + and x5, x16, x12 + neg x5, x5 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x2, x2, x0 + adc x5, x5, x1 + eor x1, x8, x17 + and x0, x17, x13 + sub x5, x5, x0 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x2, x2, x0 + adc x5, x5, x1 + extr x6, x5, x2, #63 + ldp x0, x1, [sp, #96] + add x6, x6, x5, asr #63 + mov x5, #0x13 + mul x4, x6, x5 + add x2, x2, x6, lsl #63 + smulh x5, x6, x5 + ldr x3, [sp, #112] + adds x0, x0, x4 + adcs x1, x1, x5 + asr x5, x5, #63 + adcs x3, x3, x5 + adc x2, x2, x5 + stp x0, x1, [sp, #96] + stp x3, x2, [sp, #112] +edwards25519_scalarmulbase_alt_invmidloop: + mov x1, x22 + ldr x2, [sp] + ldr x3, [sp, #32] + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x8, x4, #0x100, lsl #12 + sbfx x8, x8, #21, #21 + mov x11, #0x100000 + add x11, x11, x11, lsl #21 + add x9, x4, x11 + asr x9, x9, #42 + add x10, x5, #0x100, lsl #12 + sbfx x10, x10, #21, #21 + add x11, x5, x11 + asr x11, x11, #42 + mul x6, x8, x2 + mul x7, x9, x3 + mul x2, x10, x2 + mul x3, x11, x3 + add x4, x6, x7 + add x5, x2, x3 + asr x2, x4, #20 + asr x3, x5, #20 + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x12, x4, #0x100, lsl #12 + sbfx x12, x12, #21, #21 + mov x15, #0x100000 + add x15, x15, x15, lsl #21 + add x13, x4, x15 + asr x13, x13, #42 + add x14, x5, #0x100, lsl #12 + sbfx x14, x14, #21, #21 + add x15, x5, x15 + asr x15, x15, #42 + mul x6, x12, x2 + mul x7, x13, x3 + mul x2, x14, x2 + mul x3, x15, x3 + add x4, x6, x7 + add x5, x2, x3 + asr x2, x4, #20 + asr x3, x5, #20 + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + mul x2, x12, x8 + mul x3, x12, x9 + mul x6, x14, x8 + mul x7, x14, x9 + madd x8, x13, x10, x2 + madd x9, x13, x11, x3 + madd x16, x15, x10, x6 + madd x17, x15, x11, x7 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x12, x4, #0x100, lsl #12 + sbfx x12, x12, #22, #21 + mov x15, #0x100000 + add x15, x15, x15, lsl #21 + add x13, x4, x15 + asr x13, x13, #43 + add x14, x5, #0x100, lsl #12 + sbfx x14, x14, #22, #21 + add x15, x5, x15 + asr x15, x15, #43 + mneg x2, x12, x8 + mneg x3, x12, x9 + mneg x4, x14, x8 + mneg x5, x14, x9 + msub x10, x13, x16, x2 + msub x11, x13, x17, x3 + msub x12, x15, x16, x4 + msub x13, x15, x17, x5 + mov x22, x1 + subs x21, x21, #0x1 + b.ne edwards25519_scalarmulbase_alt_invloop + ldr x0, [sp] + ldr x1, [sp, #32] + mul x0, x0, x10 + madd x1, x1, x11, x0 + asr x0, x1, #63 + cmp x10, xzr + csetm x14, mi + cneg x10, x10, mi + eor x14, x14, x0 + cmp x11, xzr + csetm x15, mi + cneg x11, x11, mi + eor x15, x15, x0 + cmp x12, xzr + csetm x16, mi + cneg x12, x12, mi + eor x16, x16, x0 + cmp x13, xzr + csetm x17, mi + cneg x13, x13, mi + eor x17, x17, x0 + and x0, x10, x14 + and x1, x11, x15 + add x9, x0, x1 + ldr x7, [sp, #64] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #96] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + str x4, [sp, #64] + adc x2, x2, x1 + ldr x7, [sp, #72] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #104] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + str x2, [sp, #72] + adc x6, x6, x1 + ldr x7, [sp, #80] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #112] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + str x6, [sp, #80] + adc x5, x5, x1 + ldr x7, [sp, #88] + eor x1, x7, x14 + and x3, x14, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #120] + eor x1, x8, x15 + and x0, x15, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x3, x5, #63 + ldp x0, x1, [sp, #64] + tst x3, x3 + cinc x6, x6, pl + mov x3, #0x13 + mul x4, x6, x3 + add x5, x5, x6, lsl #63 + smulh x6, x6, x3 + ldr x2, [sp, #80] + adds x0, x0, x4 + adcs x1, x1, x6 + asr x6, x6, #63 + adcs x2, x2, x6 + adcs x5, x5, x6 + csel x3, x3, xzr, mi + subs x0, x0, x3 + sbcs x1, x1, xzr + sbcs x2, x2, xzr + sbc x5, x5, xzr + and x5, x5, #0x7fffffffffffffff + mov x4, x20 + stp x0, x1, [x4] + stp x2, x5, [x4, #16] // The final result is x = X * inv(Z), y = Y * inv(Z). // These are the only operations in the whole computation that @@ -1164,14 +1863,6 @@ edwards25519_scalarmulbase_alt_zfliploop: // .section .rodata // **************************************************************************** -// The modulus p_25519 = 2^255 - 19, for the modular inverse - -edwards25519_scalarmulbase_alt_p_25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // 0 * B = 0 and 2^251 * B in extended-projective coordinates // but with Z = 1 assumed and hence left out, so they are (X,Y,T) only. diff --git a/arm/curve25519/edwards25519_scalarmuldouble.S b/arm/curve25519/edwards25519_scalarmuldouble.S index cd760f12..00ea37ea 100644 --- a/arm/curve25519/edwards25519_scalarmuldouble.S +++ b/arm/curve25519/edwards25519_scalarmuldouble.S @@ -57,14 +57,14 @@ #define scalar sp, #(0*NUMSIZE) #define bscalar sp, #(1*NUMSIZE) -#define acc sp, #(2*NUMSIZE) -#define acc_x sp, #(2*NUMSIZE) -#define acc_y sp, #(3*NUMSIZE) -#define acc_z sp, #(4*NUMSIZE) -#define acc_w sp, #(5*NUMSIZE) +#define btabent sp, #(2*NUMSIZE) +#define acc sp, #(5*NUMSIZE) +#define acc_x sp, #(5*NUMSIZE) +#define acc_y sp, #(6*NUMSIZE) +#define acc_z sp, #(7*NUMSIZE) +#define acc_w sp, #(8*NUMSIZE) -#define tabent sp, #(6*NUMSIZE) -#define btabent sp, #(10*NUMSIZE) +#define tabent sp, #(9*NUMSIZE) #define tab sp, #(13*NUMSIZE) @@ -1872,347 +1872,1044 @@ edwards25519_scalarmuldouble_loop: // Modular inverse setup - mov x0, #4 - add x1, tabent - add x2, acc+64 - adr x3, edwards25519_scalarmuldouble_p25519 - add x4, btabent - -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "arm/generic/bignum_modinv.S". - -edwards25519_scalarmuldouble_modinv: - lsl x10, x0, #3 - add x21, x4, x10 - add x22, x21, x10 - mov x10, xzr -edwards25519_scalarmuldouble_copyloop: - ldr x11, [x2, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - str x11, [x21, x10, lsl #3] - str x12, [x22, x10, lsl #3] - str x12, [x4, x10, lsl #3] - str xzr, [x1, x10, lsl #3] - add x10, x10, #0x1 - cmp x10, x0 - b.cc edwards25519_scalarmuldouble_copyloop - ldr x11, [x4] - sub x12, x11, #0x1 - str x12, [x4] - lsl x20, x11, #2 - sub x20, x11, x20 - eor x20, x20, #0x2 - mov x12, #0x1 - madd x12, x11, x20, x12 - mul x11, x12, x12 - madd x20, x12, x20, x20 - mul x12, x11, x11 - madd x20, x11, x20, x20 - mul x11, x12, x12 - madd x20, x12, x20, x20 - madd x20, x11, x20, x20 - lsl x2, x0, #7 -edwards25519_scalarmuldouble_outerloop: - add x10, x2, #0x3f - lsr x5, x10, #6 - cmp x5, x0 - csel x5, x0, x5, cs - mov x13, xzr - mov x15, xzr - mov x14, xzr - mov x16, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmuldouble_toploop: - ldr x11, [x21, x10, lsl #3] - ldr x12, [x22, x10, lsl #3] - orr x17, x11, x12 - cmp x17, xzr - and x17, x19, x13 - csel x15, x17, x15, ne - and x17, x19, x14 - csel x16, x17, x16, ne - csel x13, x11, x13, ne - csel x14, x12, x14, ne - csetm x19, ne - add x10, x10, #0x1 - cmp x10, x5 - b.cc edwards25519_scalarmuldouble_toploop - orr x11, x13, x14 - clz x12, x11 - negs x17, x12 - lsl x13, x13, x12 - csel x15, x15, xzr, ne - lsl x14, x14, x12 - csel x16, x16, xzr, ne - lsr x15, x15, x17 - lsr x16, x16, x17 - orr x13, x13, x15 - orr x14, x14, x16 - ldr x15, [x21] - ldr x16, [x22] - mov x6, #0x1 - mov x7, xzr - mov x8, xzr - mov x9, #0x1 - mov x10, #0x3a - tst x15, #0x1 -edwards25519_scalarmuldouble_innerloop: - csel x11, x14, xzr, ne - csel x12, x16, xzr, ne - csel x17, x8, xzr, ne - csel x19, x9, xzr, ne - ccmp x13, x14, #0x2, ne - sub x11, x13, x11 - sub x12, x15, x12 - csel x14, x14, x13, cs - cneg x11, x11, cc - csel x16, x16, x15, cs - cneg x15, x12, cc - csel x8, x8, x6, cs - csel x9, x9, x7, cs - tst x12, #0x2 - add x6, x6, x17 - add x7, x7, x19 - lsr x13, x11, #1 - lsr x15, x15, #1 - add x8, x8, x8 - add x9, x9, x9 - sub x10, x10, #0x1 - cbnz x10, edwards25519_scalarmuldouble_innerloop - mov x13, xzr - mov x14, xzr - mov x17, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmuldouble_congloop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - mul x15, x6, x11 - mul x16, x7, x12 - adds x15, x15, x13 - umulh x13, x6, x11 - adc x13, x13, xzr - adds x15, x15, x16 - extr x17, x15, x17, #58 - str x17, [x4, x10, lsl #3] - mov x17, x15 - umulh x15, x7, x12 - adc x13, x13, x15 - mul x15, x8, x11 - mul x16, x9, x12 - adds x15, x15, x14 - umulh x14, x8, x11 - adc x14, x14, xzr - adds x15, x15, x16 - extr x19, x15, x19, #58 - str x19, [x1, x10, lsl #3] - mov x19, x15 - umulh x15, x9, x12 - adc x14, x14, x15 - add x10, x10, #0x1 - cmp x10, x0 - b.cc edwards25519_scalarmuldouble_congloop - extr x13, x13, x17, #58 - extr x14, x14, x19, #58 - ldr x11, [x4] - mul x17, x11, x20 - ldr x12, [x3] - mul x15, x17, x12 - umulh x16, x17, x12 - adds x11, x11, x15 - mov x10, #0x1 - sub x11, x0, #0x1 - cbz x11, edwards25519_scalarmuldouble_wmontend -edwards25519_scalarmuldouble_wmontloop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x4, x10, lsl #3] - mul x15, x17, x11 - adcs x12, x12, x16 - umulh x16, x17, x11 - adc x16, x16, xzr - adds x12, x12, x15 - sub x15, x10, #0x1 - str x12, [x4, x15, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_wmontloop -edwards25519_scalarmuldouble_wmontend: - adcs x16, x16, x13 - adc x13, xzr, xzr - sub x15, x10, #0x1 - str x16, [x4, x15, lsl #3] - negs x10, xzr -edwards25519_scalarmuldouble_wcmploop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - sbcs xzr, x11, x12 - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_wcmploop - sbcs xzr, x13, xzr - csetm x13, cs - negs x10, xzr -edwards25519_scalarmuldouble_wcorrloop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - and x12, x12, x13 - sbcs x11, x11, x12 - str x11, [x4, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_wcorrloop - ldr x11, [x1] - mul x17, x11, x20 - ldr x12, [x3] - mul x15, x17, x12 - umulh x16, x17, x12 - adds x11, x11, x15 - mov x10, #0x1 - sub x11, x0, #0x1 - cbz x11, edwards25519_scalarmuldouble_zmontend -edwards25519_scalarmuldouble_zmontloop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - mul x15, x17, x11 - adcs x12, x12, x16 - umulh x16, x17, x11 - adc x16, x16, xzr - adds x12, x12, x15 - sub x15, x10, #0x1 - str x12, [x1, x15, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_zmontloop -edwards25519_scalarmuldouble_zmontend: - adcs x16, x16, x14 - adc x14, xzr, xzr - sub x15, x10, #0x1 - str x16, [x1, x15, lsl #3] - negs x10, xzr -edwards25519_scalarmuldouble_zcmploop: - ldr x11, [x1, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - sbcs xzr, x11, x12 - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_zcmploop - sbcs xzr, x14, xzr - csetm x14, cs - negs x10, xzr -edwards25519_scalarmuldouble_zcorrloop: - ldr x11, [x1, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - and x12, x12, x14 - sbcs x11, x11, x12 - str x11, [x1, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_zcorrloop - mov x13, xzr - mov x14, xzr - mov x17, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmuldouble_crossloop: - ldr x11, [x21, x10, lsl #3] - ldr x12, [x22, x10, lsl #3] - mul x15, x6, x11 - mul x16, x7, x12 - adds x15, x15, x13 - umulh x13, x6, x11 - adc x13, x13, xzr - subs x15, x15, x16 - str x15, [x21, x10, lsl #3] - umulh x15, x7, x12 - sub x17, x15, x17 - sbcs x13, x13, x17 - csetm x17, cc - mul x15, x8, x11 - mul x16, x9, x12 - adds x15, x15, x14 - umulh x14, x8, x11 - adc x14, x14, xzr - subs x15, x15, x16 - str x15, [x22, x10, lsl #3] - umulh x15, x9, x12 - sub x19, x15, x19 - sbcs x14, x14, x19 - csetm x19, cc - add x10, x10, #0x1 - cmp x10, x5 - b.cc edwards25519_scalarmuldouble_crossloop - cmn x17, x17 - ldr x15, [x21] - mov x10, xzr - sub x6, x5, #0x1 - cbz x6, edwards25519_scalarmuldouble_negskip1 -edwards25519_scalarmuldouble_negloop1: - add x11, x10, #0x8 - ldr x12, [x21, x11] - extr x15, x12, x15, #58 - eor x15, x15, x17 - adcs x15, x15, xzr - str x15, [x21, x10] - mov x15, x12 - add x10, x10, #0x8 - sub x6, x6, #0x1 - cbnz x6, edwards25519_scalarmuldouble_negloop1 -edwards25519_scalarmuldouble_negskip1: - extr x15, x13, x15, #58 - eor x15, x15, x17 - adcs x15, x15, xzr - str x15, [x21, x10] - cmn x19, x19 - ldr x15, [x22] - mov x10, xzr - sub x6, x5, #0x1 - cbz x6, edwards25519_scalarmuldouble_negskip2 -edwards25519_scalarmuldouble_negloop2: - add x11, x10, #0x8 - ldr x12, [x22, x11] - extr x15, x12, x15, #58 - eor x15, x15, x19 - adcs x15, x15, xzr - str x15, [x22, x10] - mov x15, x12 - add x10, x10, #0x8 - sub x6, x6, #0x1 - cbnz x6, edwards25519_scalarmuldouble_negloop2 -edwards25519_scalarmuldouble_negskip2: - extr x15, x14, x15, #58 - eor x15, x15, x19 - adcs x15, x15, xzr - str x15, [x22, x10] - mov x10, xzr - cmn x17, x17 -edwards25519_scalarmuldouble_wfliploop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x4, x10, lsl #3] - and x11, x11, x17 - eor x12, x12, x17 - adcs x11, x11, x12 - str x11, [x4, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_wfliploop - mvn x19, x19 - mov x10, xzr - cmn x19, x19 -edwards25519_scalarmuldouble_zfliploop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - and x11, x11, x19 - eor x12, x12, x19 - adcs x11, x11, x12 - str x11, [x1, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_zfliploop - subs x2, x2, #0x3a - b.hi edwards25519_scalarmuldouble_outerloop + add x0, tabent + add x1, acc+64 + +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "arm/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 128 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, acc, tabent. + + mov x20, x0 + mov x10, #0xffffffffffffffed + mov x11, #0xffffffffffffffff + stp x10, x11, [sp] + mov x12, #0x7fffffffffffffff + stp x11, x12, [sp, #16] + ldp x2, x3, [x1] + ldp x4, x5, [x1, #16] + mov x7, #0x13 + lsr x6, x5, #63 + madd x6, x7, x6, x7 + adds x2, x2, x6 + adcs x3, x3, xzr + adcs x4, x4, xzr + orr x5, x5, #0x8000000000000000 + adcs x5, x5, xzr + csel x6, x7, xzr, cc + subs x2, x2, x6 + sbcs x3, x3, xzr + sbcs x4, x4, xzr + sbc x5, x5, xzr + and x5, x5, #0x7fffffffffffffff + stp x2, x3, [sp, #32] + stp x4, x5, [sp, #48] + stp xzr, xzr, [sp, #64] + stp xzr, xzr, [sp, #80] + mov x10, #0x2099 + movk x10, #0x7502, lsl #16 + movk x10, #0x9e23, lsl #32 + movk x10, #0xa0f9, lsl #48 + mov x11, #0x2595 + movk x11, #0x1d13, lsl #16 + movk x11, #0x8f3f, lsl #32 + movk x11, #0xa8c6, lsl #48 + mov x12, #0x5242 + movk x12, #0x5ac, lsl #16 + movk x12, #0x8938, lsl #32 + movk x12, #0x6c6c, lsl #48 + mov x13, #0x615 + movk x13, #0x4177, lsl #16 + movk x13, #0x8b2, lsl #32 + movk x13, #0x2765, lsl #48 + stp x10, x11, [sp, #96] + stp x12, x13, [sp, #112] + mov x21, #0xa + mov x22, #0x1 + b edwards25519_scalarmuldouble_invmidloop +edwards25519_scalarmuldouble_invloop: + cmp x10, xzr + csetm x14, mi + cneg x10, x10, mi + cmp x11, xzr + csetm x15, mi + cneg x11, x11, mi + cmp x12, xzr + csetm x16, mi + cneg x12, x12, mi + cmp x13, xzr + csetm x17, mi + cneg x13, x13, mi + and x0, x10, x14 + and x1, x11, x15 + add x9, x0, x1 + and x0, x12, x16 + and x1, x13, x17 + add x19, x0, x1 + ldr x7, [sp] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #32] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + adc x2, x2, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x5, x19, x0 + adc x3, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x7, [sp, #8] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #40] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + adc x6, x6, x1 + extr x4, x2, x4, #59 + str x4, [sp] + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x3, x3, x0 + adc x4, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x3, x3, x0 + adc x4, x4, x1 + extr x5, x3, x5, #59 + str x5, [sp, #32] + ldr x7, [sp, #16] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #48] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + adc x5, x5, x1 + extr x2, x6, x2, #59 + str x2, [sp, #8] + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x4, x4, x0 + adc x2, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x4, x4, x0 + adc x2, x2, x1 + extr x3, x4, x3, #59 + str x3, [sp, #40] + ldr x7, [sp, #24] + eor x1, x7, x14 + asr x3, x1, #63 + and x3, x3, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #56] + eor x1, x8, x15 + asr x0, x1, #63 + and x0, x0, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x5, x6, #59 + str x6, [sp, #16] + extr x5, x3, x5, #59 + str x5, [sp, #24] + eor x1, x7, x16 + asr x5, x1, #63 + and x5, x5, x12 + neg x5, x5 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x2, x2, x0 + adc x5, x5, x1 + eor x1, x8, x17 + asr x0, x1, #63 + and x0, x0, x13 + sub x5, x5, x0 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x2, x2, x0 + adc x5, x5, x1 + extr x4, x2, x4, #59 + str x4, [sp, #48] + extr x2, x5, x2, #59 + str x2, [sp, #56] + ldr x7, [sp, #64] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #96] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + str x4, [sp, #64] + adc x2, x2, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x5, x19, x0 + adc x3, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x5, x5, x0 + str x5, [sp, #96] + adc x3, x3, x1 + ldr x7, [sp, #72] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #104] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + str x2, [sp, #72] + adc x6, x6, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x3, x3, x0 + adc x4, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x3, x3, x0 + str x3, [sp, #104] + adc x4, x4, x1 + ldr x7, [sp, #80] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #112] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + str x6, [sp, #80] + adc x5, x5, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x4, x4, x0 + adc x2, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x4, x4, x0 + str x4, [sp, #112] + adc x2, x2, x1 + ldr x7, [sp, #88] + eor x1, x7, x14 + and x3, x14, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #120] + eor x1, x8, x15 + and x0, x15, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x3, x5, #63 + ldp x0, x1, [sp, #64] + add x6, x6, x3, asr #63 + mov x3, #0x13 + mul x4, x6, x3 + add x5, x5, x6, lsl #63 + smulh x3, x6, x3 + ldr x6, [sp, #80] + adds x0, x0, x4 + adcs x1, x1, x3 + asr x3, x3, #63 + adcs x6, x6, x3 + adc x5, x5, x3 + stp x0, x1, [sp, #64] + stp x6, x5, [sp, #80] + eor x1, x7, x16 + and x5, x16, x12 + neg x5, x5 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x2, x2, x0 + adc x5, x5, x1 + eor x1, x8, x17 + and x0, x17, x13 + sub x5, x5, x0 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x2, x2, x0 + adc x5, x5, x1 + extr x6, x5, x2, #63 + ldp x0, x1, [sp, #96] + add x6, x6, x5, asr #63 + mov x5, #0x13 + mul x4, x6, x5 + add x2, x2, x6, lsl #63 + smulh x5, x6, x5 + ldr x3, [sp, #112] + adds x0, x0, x4 + adcs x1, x1, x5 + asr x5, x5, #63 + adcs x3, x3, x5 + adc x2, x2, x5 + stp x0, x1, [sp, #96] + stp x3, x2, [sp, #112] +edwards25519_scalarmuldouble_invmidloop: + mov x1, x22 + ldr x2, [sp] + ldr x3, [sp, #32] + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x8, x4, #0x100, lsl #12 + sbfx x8, x8, #21, #21 + mov x11, #0x100000 + add x11, x11, x11, lsl #21 + add x9, x4, x11 + asr x9, x9, #42 + add x10, x5, #0x100, lsl #12 + sbfx x10, x10, #21, #21 + add x11, x5, x11 + asr x11, x11, #42 + mul x6, x8, x2 + mul x7, x9, x3 + mul x2, x10, x2 + mul x3, x11, x3 + add x4, x6, x7 + add x5, x2, x3 + asr x2, x4, #20 + asr x3, x5, #20 + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x12, x4, #0x100, lsl #12 + sbfx x12, x12, #21, #21 + mov x15, #0x100000 + add x15, x15, x15, lsl #21 + add x13, x4, x15 + asr x13, x13, #42 + add x14, x5, #0x100, lsl #12 + sbfx x14, x14, #21, #21 + add x15, x5, x15 + asr x15, x15, #42 + mul x6, x12, x2 + mul x7, x13, x3 + mul x2, x14, x2 + mul x3, x15, x3 + add x4, x6, x7 + add x5, x2, x3 + asr x2, x4, #20 + asr x3, x5, #20 + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + mul x2, x12, x8 + mul x3, x12, x9 + mul x6, x14, x8 + mul x7, x14, x9 + madd x8, x13, x10, x2 + madd x9, x13, x11, x3 + madd x16, x15, x10, x6 + madd x17, x15, x11, x7 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x12, x4, #0x100, lsl #12 + sbfx x12, x12, #22, #21 + mov x15, #0x100000 + add x15, x15, x15, lsl #21 + add x13, x4, x15 + asr x13, x13, #43 + add x14, x5, #0x100, lsl #12 + sbfx x14, x14, #22, #21 + add x15, x5, x15 + asr x15, x15, #43 + mneg x2, x12, x8 + mneg x3, x12, x9 + mneg x4, x14, x8 + mneg x5, x14, x9 + msub x10, x13, x16, x2 + msub x11, x13, x17, x3 + msub x12, x15, x16, x4 + msub x13, x15, x17, x5 + mov x22, x1 + subs x21, x21, #0x1 + b.ne edwards25519_scalarmuldouble_invloop + ldr x0, [sp] + ldr x1, [sp, #32] + mul x0, x0, x10 + madd x1, x1, x11, x0 + asr x0, x1, #63 + cmp x10, xzr + csetm x14, mi + cneg x10, x10, mi + eor x14, x14, x0 + cmp x11, xzr + csetm x15, mi + cneg x11, x11, mi + eor x15, x15, x0 + cmp x12, xzr + csetm x16, mi + cneg x12, x12, mi + eor x16, x16, x0 + cmp x13, xzr + csetm x17, mi + cneg x13, x13, mi + eor x17, x17, x0 + and x0, x10, x14 + and x1, x11, x15 + add x9, x0, x1 + ldr x7, [sp, #64] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #96] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + str x4, [sp, #64] + adc x2, x2, x1 + ldr x7, [sp, #72] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #104] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + str x2, [sp, #72] + adc x6, x6, x1 + ldr x7, [sp, #80] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #112] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + str x6, [sp, #80] + adc x5, x5, x1 + ldr x7, [sp, #88] + eor x1, x7, x14 + and x3, x14, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #120] + eor x1, x8, x15 + and x0, x15, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x3, x5, #63 + ldp x0, x1, [sp, #64] + tst x3, x3 + cinc x6, x6, pl + mov x3, #0x13 + mul x4, x6, x3 + add x5, x5, x6, lsl #63 + smulh x6, x6, x3 + ldr x2, [sp, #80] + adds x0, x0, x4 + adcs x1, x1, x6 + asr x6, x6, #63 + adcs x2, x2, x6 + adcs x5, x5, x6 + csel x3, x3, xzr, mi + subs x0, x0, x3 + sbcs x1, x1, xzr + sbcs x2, x2, xzr + sbc x5, x5, xzr + and x5, x5, #0x7fffffffffffffff + mov x4, x20 + stp x0, x1, [x4] + stp x2, x5, [x4, #16] // Store result. Note that these are the only reductions mod 2^255-19 @@ -2330,14 +3027,6 @@ edwards25519_scalarmuldouble_pepadd: // .section .rodata // **************************************************************************** -// The modulus p_25519 = 2^255 - 19, for the modular inverse - -edwards25519_scalarmuldouble_p25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // Precomputed table of multiples of generator for edwards25519 // all in precomputed extended-projective (y-x,x+y,2*d*x*y) triples. diff --git a/arm/curve25519/edwards25519_scalarmuldouble_alt.S b/arm/curve25519/edwards25519_scalarmuldouble_alt.S index c8fe77c3..ad05eae1 100644 --- a/arm/curve25519/edwards25519_scalarmuldouble_alt.S +++ b/arm/curve25519/edwards25519_scalarmuldouble_alt.S @@ -57,14 +57,14 @@ #define scalar sp, #(0*NUMSIZE) #define bscalar sp, #(1*NUMSIZE) -#define acc sp, #(2*NUMSIZE) -#define acc_x sp, #(2*NUMSIZE) -#define acc_y sp, #(3*NUMSIZE) -#define acc_z sp, #(4*NUMSIZE) -#define acc_w sp, #(5*NUMSIZE) +#define btabent sp, #(2*NUMSIZE) +#define acc sp, #(5*NUMSIZE) +#define acc_x sp, #(5*NUMSIZE) +#define acc_y sp, #(6*NUMSIZE) +#define acc_z sp, #(7*NUMSIZE) +#define acc_w sp, #(8*NUMSIZE) -#define tabent sp, #(6*NUMSIZE) -#define btabent sp, #(10*NUMSIZE) +#define tabent sp, #(9*NUMSIZE) #define tab sp, #(13*NUMSIZE) @@ -1656,347 +1656,1044 @@ edwards25519_scalarmuldouble_alt_loop: // Modular inverse setup - mov x0, #4 - add x1, tabent - add x2, acc+64 - adr x3, edwards25519_scalarmuldouble_alt_p25519 - add x4, btabent - -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "arm/generic/bignum_modinv.S". - -edwards25519_scalarmuldouble_alt_modinv: - lsl x10, x0, #3 - add x21, x4, x10 - add x22, x21, x10 - mov x10, xzr -edwards25519_scalarmuldouble_alt_copyloop: - ldr x11, [x2, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - str x11, [x21, x10, lsl #3] - str x12, [x22, x10, lsl #3] - str x12, [x4, x10, lsl #3] - str xzr, [x1, x10, lsl #3] - add x10, x10, #0x1 - cmp x10, x0 - b.cc edwards25519_scalarmuldouble_alt_copyloop - ldr x11, [x4] - sub x12, x11, #0x1 - str x12, [x4] - lsl x20, x11, #2 - sub x20, x11, x20 - eor x20, x20, #0x2 - mov x12, #0x1 - madd x12, x11, x20, x12 - mul x11, x12, x12 - madd x20, x12, x20, x20 - mul x12, x11, x11 - madd x20, x11, x20, x20 - mul x11, x12, x12 - madd x20, x12, x20, x20 - madd x20, x11, x20, x20 - lsl x2, x0, #7 -edwards25519_scalarmuldouble_alt_outerloop: - add x10, x2, #0x3f - lsr x5, x10, #6 - cmp x5, x0 - csel x5, x0, x5, cs - mov x13, xzr - mov x15, xzr - mov x14, xzr - mov x16, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmuldouble_alt_toploop: - ldr x11, [x21, x10, lsl #3] - ldr x12, [x22, x10, lsl #3] - orr x17, x11, x12 - cmp x17, xzr - and x17, x19, x13 - csel x15, x17, x15, ne - and x17, x19, x14 - csel x16, x17, x16, ne - csel x13, x11, x13, ne - csel x14, x12, x14, ne - csetm x19, ne - add x10, x10, #0x1 - cmp x10, x5 - b.cc edwards25519_scalarmuldouble_alt_toploop - orr x11, x13, x14 - clz x12, x11 - negs x17, x12 - lsl x13, x13, x12 - csel x15, x15, xzr, ne - lsl x14, x14, x12 - csel x16, x16, xzr, ne - lsr x15, x15, x17 - lsr x16, x16, x17 - orr x13, x13, x15 - orr x14, x14, x16 - ldr x15, [x21] - ldr x16, [x22] - mov x6, #0x1 - mov x7, xzr - mov x8, xzr - mov x9, #0x1 - mov x10, #0x3a - tst x15, #0x1 -edwards25519_scalarmuldouble_alt_innerloop: - csel x11, x14, xzr, ne - csel x12, x16, xzr, ne - csel x17, x8, xzr, ne - csel x19, x9, xzr, ne - ccmp x13, x14, #0x2, ne - sub x11, x13, x11 - sub x12, x15, x12 - csel x14, x14, x13, cs - cneg x11, x11, cc - csel x16, x16, x15, cs - cneg x15, x12, cc - csel x8, x8, x6, cs - csel x9, x9, x7, cs - tst x12, #0x2 - add x6, x6, x17 - add x7, x7, x19 - lsr x13, x11, #1 - lsr x15, x15, #1 - add x8, x8, x8 - add x9, x9, x9 - sub x10, x10, #0x1 - cbnz x10, edwards25519_scalarmuldouble_alt_innerloop - mov x13, xzr - mov x14, xzr - mov x17, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmuldouble_alt_congloop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - mul x15, x6, x11 - mul x16, x7, x12 - adds x15, x15, x13 - umulh x13, x6, x11 - adc x13, x13, xzr - adds x15, x15, x16 - extr x17, x15, x17, #58 - str x17, [x4, x10, lsl #3] - mov x17, x15 - umulh x15, x7, x12 - adc x13, x13, x15 - mul x15, x8, x11 - mul x16, x9, x12 - adds x15, x15, x14 - umulh x14, x8, x11 - adc x14, x14, xzr - adds x15, x15, x16 - extr x19, x15, x19, #58 - str x19, [x1, x10, lsl #3] - mov x19, x15 - umulh x15, x9, x12 - adc x14, x14, x15 - add x10, x10, #0x1 - cmp x10, x0 - b.cc edwards25519_scalarmuldouble_alt_congloop - extr x13, x13, x17, #58 - extr x14, x14, x19, #58 - ldr x11, [x4] - mul x17, x11, x20 - ldr x12, [x3] - mul x15, x17, x12 - umulh x16, x17, x12 - adds x11, x11, x15 - mov x10, #0x1 - sub x11, x0, #0x1 - cbz x11, edwards25519_scalarmuldouble_alt_wmontend -edwards25519_scalarmuldouble_alt_wmontloop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x4, x10, lsl #3] - mul x15, x17, x11 - adcs x12, x12, x16 - umulh x16, x17, x11 - adc x16, x16, xzr - adds x12, x12, x15 - sub x15, x10, #0x1 - str x12, [x4, x15, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_alt_wmontloop -edwards25519_scalarmuldouble_alt_wmontend: - adcs x16, x16, x13 - adc x13, xzr, xzr - sub x15, x10, #0x1 - str x16, [x4, x15, lsl #3] - negs x10, xzr -edwards25519_scalarmuldouble_alt_wcmploop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - sbcs xzr, x11, x12 - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_alt_wcmploop - sbcs xzr, x13, xzr - csetm x13, cs - negs x10, xzr -edwards25519_scalarmuldouble_alt_wcorrloop: - ldr x11, [x4, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - and x12, x12, x13 - sbcs x11, x11, x12 - str x11, [x4, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_alt_wcorrloop - ldr x11, [x1] - mul x17, x11, x20 - ldr x12, [x3] - mul x15, x17, x12 - umulh x16, x17, x12 - adds x11, x11, x15 - mov x10, #0x1 - sub x11, x0, #0x1 - cbz x11, edwards25519_scalarmuldouble_alt_zmontend -edwards25519_scalarmuldouble_alt_zmontloop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - mul x15, x17, x11 - adcs x12, x12, x16 - umulh x16, x17, x11 - adc x16, x16, xzr - adds x12, x12, x15 - sub x15, x10, #0x1 - str x12, [x1, x15, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_alt_zmontloop -edwards25519_scalarmuldouble_alt_zmontend: - adcs x16, x16, x14 - adc x14, xzr, xzr - sub x15, x10, #0x1 - str x16, [x1, x15, lsl #3] - negs x10, xzr -edwards25519_scalarmuldouble_alt_zcmploop: - ldr x11, [x1, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - sbcs xzr, x11, x12 - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_alt_zcmploop - sbcs xzr, x14, xzr - csetm x14, cs - negs x10, xzr -edwards25519_scalarmuldouble_alt_zcorrloop: - ldr x11, [x1, x10, lsl #3] - ldr x12, [x3, x10, lsl #3] - and x12, x12, x14 - sbcs x11, x11, x12 - str x11, [x1, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_alt_zcorrloop - mov x13, xzr - mov x14, xzr - mov x17, xzr - mov x19, xzr - mov x10, xzr -edwards25519_scalarmuldouble_alt_crossloop: - ldr x11, [x21, x10, lsl #3] - ldr x12, [x22, x10, lsl #3] - mul x15, x6, x11 - mul x16, x7, x12 - adds x15, x15, x13 - umulh x13, x6, x11 - adc x13, x13, xzr - subs x15, x15, x16 - str x15, [x21, x10, lsl #3] - umulh x15, x7, x12 - sub x17, x15, x17 - sbcs x13, x13, x17 - csetm x17, cc - mul x15, x8, x11 - mul x16, x9, x12 - adds x15, x15, x14 - umulh x14, x8, x11 - adc x14, x14, xzr - subs x15, x15, x16 - str x15, [x22, x10, lsl #3] - umulh x15, x9, x12 - sub x19, x15, x19 - sbcs x14, x14, x19 - csetm x19, cc - add x10, x10, #0x1 - cmp x10, x5 - b.cc edwards25519_scalarmuldouble_alt_crossloop - cmn x17, x17 - ldr x15, [x21] - mov x10, xzr - sub x6, x5, #0x1 - cbz x6, edwards25519_scalarmuldouble_alt_negskip1 -edwards25519_scalarmuldouble_alt_negloop1: - add x11, x10, #0x8 - ldr x12, [x21, x11] - extr x15, x12, x15, #58 - eor x15, x15, x17 - adcs x15, x15, xzr - str x15, [x21, x10] - mov x15, x12 - add x10, x10, #0x8 - sub x6, x6, #0x1 - cbnz x6, edwards25519_scalarmuldouble_alt_negloop1 -edwards25519_scalarmuldouble_alt_negskip1: - extr x15, x13, x15, #58 - eor x15, x15, x17 - adcs x15, x15, xzr - str x15, [x21, x10] - cmn x19, x19 - ldr x15, [x22] - mov x10, xzr - sub x6, x5, #0x1 - cbz x6, edwards25519_scalarmuldouble_alt_negskip2 -edwards25519_scalarmuldouble_alt_negloop2: - add x11, x10, #0x8 - ldr x12, [x22, x11] - extr x15, x12, x15, #58 - eor x15, x15, x19 - adcs x15, x15, xzr - str x15, [x22, x10] - mov x15, x12 - add x10, x10, #0x8 - sub x6, x6, #0x1 - cbnz x6, edwards25519_scalarmuldouble_alt_negloop2 -edwards25519_scalarmuldouble_alt_negskip2: - extr x15, x14, x15, #58 - eor x15, x15, x19 - adcs x15, x15, xzr - str x15, [x22, x10] - mov x10, xzr - cmn x17, x17 -edwards25519_scalarmuldouble_alt_wfliploop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x4, x10, lsl #3] - and x11, x11, x17 - eor x12, x12, x17 - adcs x11, x11, x12 - str x11, [x4, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_alt_wfliploop - mvn x19, x19 - mov x10, xzr - cmn x19, x19 -edwards25519_scalarmuldouble_alt_zfliploop: - ldr x11, [x3, x10, lsl #3] - ldr x12, [x1, x10, lsl #3] - and x11, x11, x19 - eor x12, x12, x19 - adcs x11, x11, x12 - str x11, [x1, x10, lsl #3] - add x10, x10, #0x1 - sub x11, x10, x0 - cbnz x11, edwards25519_scalarmuldouble_alt_zfliploop - subs x2, x2, #0x3a - b.hi edwards25519_scalarmuldouble_alt_outerloop + add x0, tabent + add x1, acc+64 + +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "arm/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 128 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, acc, tabent. + + mov x20, x0 + mov x10, #0xffffffffffffffed + mov x11, #0xffffffffffffffff + stp x10, x11, [sp] + mov x12, #0x7fffffffffffffff + stp x11, x12, [sp, #16] + ldp x2, x3, [x1] + ldp x4, x5, [x1, #16] + mov x7, #0x13 + lsr x6, x5, #63 + madd x6, x7, x6, x7 + adds x2, x2, x6 + adcs x3, x3, xzr + adcs x4, x4, xzr + orr x5, x5, #0x8000000000000000 + adcs x5, x5, xzr + csel x6, x7, xzr, cc + subs x2, x2, x6 + sbcs x3, x3, xzr + sbcs x4, x4, xzr + sbc x5, x5, xzr + and x5, x5, #0x7fffffffffffffff + stp x2, x3, [sp, #32] + stp x4, x5, [sp, #48] + stp xzr, xzr, [sp, #64] + stp xzr, xzr, [sp, #80] + mov x10, #0x2099 + movk x10, #0x7502, lsl #16 + movk x10, #0x9e23, lsl #32 + movk x10, #0xa0f9, lsl #48 + mov x11, #0x2595 + movk x11, #0x1d13, lsl #16 + movk x11, #0x8f3f, lsl #32 + movk x11, #0xa8c6, lsl #48 + mov x12, #0x5242 + movk x12, #0x5ac, lsl #16 + movk x12, #0x8938, lsl #32 + movk x12, #0x6c6c, lsl #48 + mov x13, #0x615 + movk x13, #0x4177, lsl #16 + movk x13, #0x8b2, lsl #32 + movk x13, #0x2765, lsl #48 + stp x10, x11, [sp, #96] + stp x12, x13, [sp, #112] + mov x21, #0xa + mov x22, #0x1 + b edwards25519_scalarmuldouble_alt_invmidloop +edwards25519_scalarmuldouble_alt_invloop: + cmp x10, xzr + csetm x14, mi + cneg x10, x10, mi + cmp x11, xzr + csetm x15, mi + cneg x11, x11, mi + cmp x12, xzr + csetm x16, mi + cneg x12, x12, mi + cmp x13, xzr + csetm x17, mi + cneg x13, x13, mi + and x0, x10, x14 + and x1, x11, x15 + add x9, x0, x1 + and x0, x12, x16 + and x1, x13, x17 + add x19, x0, x1 + ldr x7, [sp] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #32] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + adc x2, x2, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x5, x19, x0 + adc x3, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x7, [sp, #8] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #40] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + adc x6, x6, x1 + extr x4, x2, x4, #59 + str x4, [sp] + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x3, x3, x0 + adc x4, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x3, x3, x0 + adc x4, x4, x1 + extr x5, x3, x5, #59 + str x5, [sp, #32] + ldr x7, [sp, #16] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #48] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + adc x5, x5, x1 + extr x2, x6, x2, #59 + str x2, [sp, #8] + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x4, x4, x0 + adc x2, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x4, x4, x0 + adc x2, x2, x1 + extr x3, x4, x3, #59 + str x3, [sp, #40] + ldr x7, [sp, #24] + eor x1, x7, x14 + asr x3, x1, #63 + and x3, x3, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #56] + eor x1, x8, x15 + asr x0, x1, #63 + and x0, x0, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x5, x6, #59 + str x6, [sp, #16] + extr x5, x3, x5, #59 + str x5, [sp, #24] + eor x1, x7, x16 + asr x5, x1, #63 + and x5, x5, x12 + neg x5, x5 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x2, x2, x0 + adc x5, x5, x1 + eor x1, x8, x17 + asr x0, x1, #63 + and x0, x0, x13 + sub x5, x5, x0 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x2, x2, x0 + adc x5, x5, x1 + extr x4, x2, x4, #59 + str x4, [sp, #48] + extr x2, x5, x2, #59 + str x2, [sp, #56] + ldr x7, [sp, #64] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #96] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + str x4, [sp, #64] + adc x2, x2, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x5, x19, x0 + adc x3, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x5, x5, x0 + str x5, [sp, #96] + adc x3, x3, x1 + ldr x7, [sp, #72] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #104] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + str x2, [sp, #72] + adc x6, x6, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x3, x3, x0 + adc x4, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x3, x3, x0 + str x3, [sp, #104] + adc x4, x4, x1 + ldr x7, [sp, #80] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #112] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + str x6, [sp, #80] + adc x5, x5, x1 + eor x1, x7, x16 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x4, x4, x0 + adc x2, xzr, x1 + eor x1, x8, x17 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x4, x4, x0 + str x4, [sp, #112] + adc x2, x2, x1 + ldr x7, [sp, #88] + eor x1, x7, x14 + and x3, x14, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #120] + eor x1, x8, x15 + and x0, x15, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x3, x5, #63 + ldp x0, x1, [sp, #64] + add x6, x6, x3, asr #63 + mov x3, #0x13 + mul x4, x6, x3 + add x5, x5, x6, lsl #63 + smulh x3, x6, x3 + ldr x6, [sp, #80] + adds x0, x0, x4 + adcs x1, x1, x3 + asr x3, x3, #63 + adcs x6, x6, x3 + adc x5, x5, x3 + stp x0, x1, [sp, #64] + stp x6, x5, [sp, #80] + eor x1, x7, x16 + and x5, x16, x12 + neg x5, x5 + mul x0, x1, x12 + umulh x1, x1, x12 + adds x2, x2, x0 + adc x5, x5, x1 + eor x1, x8, x17 + and x0, x17, x13 + sub x5, x5, x0 + mul x0, x1, x13 + umulh x1, x1, x13 + adds x2, x2, x0 + adc x5, x5, x1 + extr x6, x5, x2, #63 + ldp x0, x1, [sp, #96] + add x6, x6, x5, asr #63 + mov x5, #0x13 + mul x4, x6, x5 + add x2, x2, x6, lsl #63 + smulh x5, x6, x5 + ldr x3, [sp, #112] + adds x0, x0, x4 + adcs x1, x1, x5 + asr x5, x5, #63 + adcs x3, x3, x5 + adc x2, x2, x5 + stp x0, x1, [sp, #96] + stp x3, x2, [sp, #112] +edwards25519_scalarmuldouble_alt_invmidloop: + mov x1, x22 + ldr x2, [sp] + ldr x3, [sp, #32] + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x8, x4, #0x100, lsl #12 + sbfx x8, x8, #21, #21 + mov x11, #0x100000 + add x11, x11, x11, lsl #21 + add x9, x4, x11 + asr x9, x9, #42 + add x10, x5, #0x100, lsl #12 + sbfx x10, x10, #21, #21 + add x11, x5, x11 + asr x11, x11, #42 + mul x6, x8, x2 + mul x7, x9, x3 + mul x2, x10, x2 + mul x3, x11, x3 + add x4, x6, x7 + add x5, x2, x3 + asr x2, x4, #20 + asr x3, x5, #20 + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x12, x4, #0x100, lsl #12 + sbfx x12, x12, #21, #21 + mov x15, #0x100000 + add x15, x15, x15, lsl #21 + add x13, x4, x15 + asr x13, x13, #42 + add x14, x5, #0x100, lsl #12 + sbfx x14, x14, #21, #21 + add x15, x5, x15 + asr x15, x15, #42 + mul x6, x12, x2 + mul x7, x13, x3 + mul x2, x14, x2 + mul x3, x15, x3 + add x4, x6, x7 + add x5, x2, x3 + asr x2, x4, #20 + asr x3, x5, #20 + and x4, x2, #0xfffff + orr x4, x4, #0xfffffe0000000000 + and x5, x3, #0xfffff + orr x5, x5, #0xc000000000000000 + tst x5, #0x1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + mul x2, x12, x8 + mul x3, x12, x9 + mul x6, x14, x8 + mul x7, x14, x9 + madd x8, x13, x10, x2 + madd x9, x13, x11, x3 + madd x16, x15, x10, x6 + madd x17, x15, x11, x7 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + tst x5, #0x2 + asr x5, x5, #1 + csel x6, x4, xzr, ne + ccmp x1, xzr, #0x8, ne + cneg x1, x1, ge + cneg x6, x6, ge + csel x4, x5, x4, ge + add x5, x5, x6 + add x1, x1, #0x2 + asr x5, x5, #1 + add x12, x4, #0x100, lsl #12 + sbfx x12, x12, #22, #21 + mov x15, #0x100000 + add x15, x15, x15, lsl #21 + add x13, x4, x15 + asr x13, x13, #43 + add x14, x5, #0x100, lsl #12 + sbfx x14, x14, #22, #21 + add x15, x5, x15 + asr x15, x15, #43 + mneg x2, x12, x8 + mneg x3, x12, x9 + mneg x4, x14, x8 + mneg x5, x14, x9 + msub x10, x13, x16, x2 + msub x11, x13, x17, x3 + msub x12, x15, x16, x4 + msub x13, x15, x17, x5 + mov x22, x1 + subs x21, x21, #0x1 + b.ne edwards25519_scalarmuldouble_alt_invloop + ldr x0, [sp] + ldr x1, [sp, #32] + mul x0, x0, x10 + madd x1, x1, x11, x0 + asr x0, x1, #63 + cmp x10, xzr + csetm x14, mi + cneg x10, x10, mi + eor x14, x14, x0 + cmp x11, xzr + csetm x15, mi + cneg x11, x11, mi + eor x15, x15, x0 + cmp x12, xzr + csetm x16, mi + cneg x12, x12, mi + eor x16, x16, x0 + cmp x13, xzr + csetm x17, mi + cneg x13, x13, mi + eor x17, x17, x0 + and x0, x10, x14 + and x1, x11, x15 + add x9, x0, x1 + ldr x7, [sp, #64] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x4, x9, x0 + adc x2, xzr, x1 + ldr x8, [sp, #96] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x4, x4, x0 + str x4, [sp, #64] + adc x2, x2, x1 + ldr x7, [sp, #72] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x2, x2, x0 + adc x6, xzr, x1 + ldr x8, [sp, #104] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x2, x2, x0 + str x2, [sp, #72] + adc x6, x6, x1 + ldr x7, [sp, #80] + eor x1, x7, x14 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x6, x6, x0 + adc x5, xzr, x1 + ldr x8, [sp, #112] + eor x1, x8, x15 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x6, x6, x0 + str x6, [sp, #80] + adc x5, x5, x1 + ldr x7, [sp, #88] + eor x1, x7, x14 + and x3, x14, x10 + neg x3, x3 + mul x0, x1, x10 + umulh x1, x1, x10 + adds x5, x5, x0 + adc x3, x3, x1 + ldr x8, [sp, #120] + eor x1, x8, x15 + and x0, x15, x11 + sub x3, x3, x0 + mul x0, x1, x11 + umulh x1, x1, x11 + adds x5, x5, x0 + adc x3, x3, x1 + extr x6, x3, x5, #63 + ldp x0, x1, [sp, #64] + tst x3, x3 + cinc x6, x6, pl + mov x3, #0x13 + mul x4, x6, x3 + add x5, x5, x6, lsl #63 + smulh x6, x6, x3 + ldr x2, [sp, #80] + adds x0, x0, x4 + adcs x1, x1, x6 + asr x6, x6, #63 + adcs x2, x2, x6 + adcs x5, x5, x6 + csel x3, x3, xzr, mi + subs x0, x0, x3 + sbcs x1, x1, xzr + sbcs x2, x2, xzr + sbc x5, x5, xzr + and x5, x5, #0x7fffffffffffffff + mov x4, x20 + stp x0, x1, [x4] + stp x2, x5, [x4, #16] // Store result. Note that these are the only reductions mod 2^255-19 @@ -2114,14 +2811,6 @@ edwards25519_scalarmuldouble_alt_pepadd: // .section .rodata // **************************************************************************** -// The modulus p_25519 = 2^255 - 19, for the modular inverse - -edwards25519_scalarmuldouble_alt_p25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // Precomputed table of multiples of generator for edwards25519 // all in precomputed extended-projective (y-x,x+y,2*d*x*y) triples. diff --git a/arm/proofs/edwards25519_scalarmulbase.ml b/arm/proofs/edwards25519_scalarmulbase.ml index 90e5a4c2..1ffd97c4 100644 --- a/arm/proofs/edwards25519_scalarmulbase.ml +++ b/arm/proofs/edwards25519_scalarmulbase.ml @@ -8,7 +8,7 @@ (* ========================================================================= *) needs "arm/proofs/base.ml";; -needs "arm/proofs/bignum_modinv.ml";; +needs "arm/proofs/bignum_inv_p25519.ml";; needs "common/ecencoding.ml";; do_list hide_constant ["X1";"X2";"X3";"X4";"X5"];; @@ -76,8 +76,8 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0xf24501bf; (* arm_TST X13 (rvalue (word 576460752303423488)) *) 0x9244f9ad; (* arm_AND X13 X13 (rvalue (word 17870283321406128127)) *) 0xa90137ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&16))) *) - 0x10011baa; (* arm_ADR X10 (word 9076) *) - 0x10011e8b; (* arm_ADR X11 (word 9168) *) + 0x100173ea; (* arm_ADR X10 (word 11900) *) + 0x100176cb; (* arm_ADR X11 (word 11992) *) 0xa9400540; (* arm_LDP X0 X1 X10 (Immediate_Offset (iword (&0))) *) 0xa9400d62; (* arm_LDP X2 X3 X11 (Immediate_Offset (iword (&0))) *) 0x9a820000; (* arm_CSEL X0 X0 X2 Condition_EQ *) @@ -112,7 +112,7 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x9a830021; (* arm_CSEL X1 X1 X3 Condition_EQ *) 0xa90f07e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&240))) *) 0xd2800014; (* arm_MOV X20 (rvalue (word 0)) *) - 0x10011d33; (* arm_ADR X19 (word 9124) *) + 0x10017573; (* arm_ADR X19 (word 11948) *) 0xaa1f03f5; (* arm_MOV X21 XZR *) 0xd346fe80; (* arm_LSR X0 X20 6 *) 0xf8607be2; (* arm_LDR X2 SP (Shiftreg_Offset X0 3) *) @@ -1658,320 +1658,1034 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x9a8310e3; (* arm_CSEL X3 X7 X3 Condition_NE *) 0xa90807e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&128))) *) 0xa9090fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&144))) *) - 0xd2800080; (* arm_MOV X0 (rvalue (word 4)) *) - 0x910383e1; (* arm_ADD X1 SP (rvalue (word 224)) *) - 0x910303e2; (* arm_ADD X2 SP (rvalue (word 192)) *) - 0x10005483; (* arm_ADR X3 (word 2704) *) - 0x910403e4; (* arm_ADD X4 SP (rvalue (word 256)) *) - 0xd37df00a; (* arm_LSL X10 X0 3 *) - 0x8b0a0095; (* arm_ADD X21 X4 X10 *) - 0x8b0a02b6; (* arm_ADD X22 X21 X10 *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a784b; (* arm_LDR X11 X2 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xf82a7aab; (* arm_STR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf82a7acc; (* arm_STR X12 X22 (Shiftreg_Offset X10 3) *) - 0xf82a788c; (* arm_STR X12 X4 (Shiftreg_Offset X10 3) *) - 0xf82a783f; (* arm_STR XZR X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb00015f; (* arm_CMP X10 X0 *) - 0x54ffff03; (* arm_BCC (word 2097120) *) - 0xf940008b; (* arm_LDR X11 X4 (Immediate_Offset (word 0)) *) - 0xd100056c; (* arm_SUB X12 X11 (rvalue (word 1)) *) - 0xf900008c; (* arm_STR X12 X4 (Immediate_Offset (word 0)) *) - 0xd37ef574; (* arm_LSL X20 X11 2 *) - 0xcb140174; (* arm_SUB X20 X11 X20 *) - 0xd27f0294; (* arm_EOR X20 X20 (rvalue (word 2)) *) - 0xd280002c; (* arm_MOV X12 (rvalue (word 1)) *) - 0x9b14316c; (* arm_MADD X12 X11 X20 X12 *) - 0x9b0c7d8b; (* arm_MUL X11 X12 X12 *) - 0x9b145194; (* arm_MADD X20 X12 X20 X20 *) - 0x9b0b7d6c; (* arm_MUL X12 X11 X11 *) - 0x9b145174; (* arm_MADD X20 X11 X20 X20 *) - 0x9b0c7d8b; (* arm_MUL X11 X12 X12 *) - 0x9b145194; (* arm_MADD X20 X12 X20 X20 *) - 0x9b145174; (* arm_MADD X20 X11 X20 X20 *) - 0xd379e002; (* arm_LSL X2 X0 7 *) - 0x9100fc4a; (* arm_ADD X10 X2 (rvalue (word 63)) *) - 0xd346fd45; (* arm_LSR X5 X10 6 *) - 0xeb0000bf; (* arm_CMP X5 X0 *) - 0x9a852005; (* arm_CSEL X5 X0 X5 Condition_CS *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ef; (* arm_MOV X15 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f0; (* arm_MOV X16 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a7aab; (* arm_LDR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf86a7acc; (* arm_LDR X12 X22 (Shiftreg_Offset X10 3) *) - 0xaa0c0171; (* arm_ORR X17 X11 X12 *) - 0xeb1f023f; (* arm_CMP X17 XZR *) - 0x8a0d0271; (* arm_AND X17 X19 X13 *) - 0x9a8f122f; (* arm_CSEL X15 X17 X15 Condition_NE *) - 0x8a0e0271; (* arm_AND X17 X19 X14 *) - 0x9a901230; (* arm_CSEL X16 X17 X16 Condition_NE *) - 0x9a8d116d; (* arm_CSEL X13 X11 X13 Condition_NE *) - 0x9a8e118e; (* arm_CSEL X14 X12 X14 Condition_NE *) - 0xda9f03f3; (* arm_CSETM X19 Condition_NE *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb05015f; (* arm_CMP X10 X5 *) - 0x54fffe63; (* arm_BCC (word 2097100) *) - 0xaa0e01ab; (* arm_ORR X11 X13 X14 *) - 0xdac0116c; (* arm_CLZ X12 X11 *) - 0xeb0c03f1; (* arm_NEGS X17 X12 *) - 0x9acc21ad; (* arm_LSLV X13 X13 X12 *) - 0x9a9f11ef; (* arm_CSEL X15 X15 XZR Condition_NE *) - 0x9acc21ce; (* arm_LSLV X14 X14 X12 *) - 0x9a9f1210; (* arm_CSEL X16 X16 XZR Condition_NE *) - 0x9ad125ef; (* arm_LSRV X15 X15 X17 *) - 0x9ad12610; (* arm_LSRV X16 X16 X17 *) - 0xaa0f01ad; (* arm_ORR X13 X13 X15 *) - 0xaa1001ce; (* arm_ORR X14 X14 X16 *) - 0xf94002af; (* arm_LDR X15 X21 (Immediate_Offset (word 0)) *) - 0xf94002d0; (* arm_LDR X16 X22 (Immediate_Offset (word 0)) *) - 0xd2800026; (* arm_MOV X6 (rvalue (word 1)) *) - 0xaa1f03e7; (* arm_MOV X7 XZR *) - 0xaa1f03e8; (* arm_MOV X8 XZR *) - 0xd2800029; (* arm_MOV X9 (rvalue (word 1)) *) - 0xd280074a; (* arm_MOV X10 (rvalue (word 58)) *) - 0xf24001ff; (* arm_TST X15 (rvalue (word 1)) *) - 0x9a9f11cb; (* arm_CSEL X11 X14 XZR Condition_NE *) - 0x9a9f120c; (* arm_CSEL X12 X16 XZR Condition_NE *) - 0x9a9f1111; (* arm_CSEL X17 X8 XZR Condition_NE *) - 0x9a9f1133; (* arm_CSEL X19 X9 XZR Condition_NE *) - 0xfa4e11a2; (* arm_CCMP X13 X14 (word 2) Condition_NE *) - 0xcb0b01ab; (* arm_SUB X11 X13 X11 *) - 0xcb0c01ec; (* arm_SUB X12 X15 X12 *) - 0x9a8d21ce; (* arm_CSEL X14 X14 X13 Condition_CS *) - 0xda8b256b; (* arm_CNEG X11 X11 Condition_CC *) - 0x9a8f2210; (* arm_CSEL X16 X16 X15 Condition_CS *) - 0xda8c258f; (* arm_CNEG X15 X12 Condition_CC *) - 0x9a862108; (* arm_CSEL X8 X8 X6 Condition_CS *) - 0x9a872129; (* arm_CSEL X9 X9 X7 Condition_CS *) - 0xf27f019f; (* arm_TST X12 (rvalue (word 2)) *) - 0x8b1100c6; (* arm_ADD X6 X6 X17 *) - 0x8b1300e7; (* arm_ADD X7 X7 X19 *) - 0xd341fd6d; (* arm_LSR X13 X11 1 *) - 0xd341fdef; (* arm_LSR X15 X15 1 *) - 0x8b080108; (* arm_ADD X8 X8 X8 *) - 0x8b090129; (* arm_ADD X9 X9 X9 *) - 0xd100054a; (* arm_SUB X10 X10 (rvalue (word 1)) *) - 0xb5fffd6a; (* arm_CBNZ X10 (word 2097068) *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f1; (* arm_MOV X17 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x9b0b7ccf; (* arm_MUL X15 X6 X11 *) - 0x9b0c7cf0; (* arm_MUL X16 X7 X12 *) - 0xab0d01ef; (* arm_ADDS X15 X15 X13 *) - 0x9bcb7ccd; (* arm_UMULH X13 X6 X11 *) - 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) - 0xab1001ef; (* arm_ADDS X15 X15 X16 *) - 0x93d1e9f1; (* arm_EXTR X17 X15 X17 58 *) - 0xf82a7891; (* arm_STR X17 X4 (Shiftreg_Offset X10 3) *) - 0xaa0f03f1; (* arm_MOV X17 X15 *) - 0x9bcc7cef; (* arm_UMULH X15 X7 X12 *) - 0x9a0f01ad; (* arm_ADC X13 X13 X15 *) - 0x9b0b7d0f; (* arm_MUL X15 X8 X11 *) - 0x9b0c7d30; (* arm_MUL X16 X9 X12 *) - 0xab0e01ef; (* arm_ADDS X15 X15 X14 *) - 0x9bcb7d0e; (* arm_UMULH X14 X8 X11 *) - 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) - 0xab1001ef; (* arm_ADDS X15 X15 X16 *) - 0x93d3e9f3; (* arm_EXTR X19 X15 X19 58 *) - 0xf82a7833; (* arm_STR X19 X1 (Shiftreg_Offset X10 3) *) - 0xaa0f03f3; (* arm_MOV X19 X15 *) - 0x9bcc7d2f; (* arm_UMULH X15 X9 X12 *) - 0x9a0f01ce; (* arm_ADC X14 X14 X15 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb00015f; (* arm_CMP X10 X0 *) - 0x54fffcc3; (* arm_BCC (word 2097048) *) - 0x93d1e9ad; (* arm_EXTR X13 X13 X17 58 *) - 0x93d3e9ce; (* arm_EXTR X14 X14 X19 58 *) - 0xf940008b; (* arm_LDR X11 X4 (Immediate_Offset (word 0)) *) - 0x9b147d71; (* arm_MUL X17 X11 X20 *) - 0xf940006c; (* arm_LDR X12 X3 (Immediate_Offset (word 0)) *) - 0x9b0c7e2f; (* arm_MUL X15 X17 X12 *) - 0x9bcc7e30; (* arm_UMULH X16 X17 X12 *) - 0xab0f016b; (* arm_ADDS X11 X11 X15 *) - 0xd280002a; (* arm_MOV X10 (rvalue (word 1)) *) - 0xd100040b; (* arm_SUB X11 X0 (rvalue (word 1)) *) - 0xb40001ab; (* arm_CBZ X11 (word 52) *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a788c; (* arm_LDR X12 X4 (Shiftreg_Offset X10 3) *) - 0x9b0b7e2f; (* arm_MUL X15 X17 X11 *) - 0xba10018c; (* arm_ADCS X12 X12 X16 *) - 0x9bcb7e30; (* arm_UMULH X16 X17 X11 *) - 0x9a1f0210; (* arm_ADC X16 X16 XZR *) - 0xab0f018c; (* arm_ADDS X12 X12 X15 *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f788c; (* arm_STR X12 X4 (Shiftreg_Offset X15 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5fffeab; (* arm_CBNZ X11 (word 2097108) *) - 0xba0d0210; (* arm_ADCS X16 X16 X13 *) - 0x9a1f03ed; (* arm_ADC X13 XZR XZR *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f7890; (* arm_STR X16 X4 (Shiftreg_Offset X15 3) *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xfa0c017f; (* arm_SBCS XZR X11 X12 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff6b; (* arm_CBNZ X11 (word 2097132) *) - 0xfa1f01bf; (* arm_SBCS XZR X13 XZR *) - 0xda9f33ed; (* arm_CSETM X13 Condition_CS *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0x8a0d018c; (* arm_AND X12 X12 X13 *) - 0xfa0c016b; (* arm_SBCS X11 X11 X12 *) - 0xf82a788b; (* arm_STR X11 X4 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff2b; (* arm_CBNZ X11 (word 2097124) *) - 0xf940002b; (* arm_LDR X11 X1 (Immediate_Offset (word 0)) *) - 0x9b147d71; (* arm_MUL X17 X11 X20 *) - 0xf940006c; (* arm_LDR X12 X3 (Immediate_Offset (word 0)) *) - 0x9b0c7e2f; (* arm_MUL X15 X17 X12 *) - 0x9bcc7e30; (* arm_UMULH X16 X17 X12 *) - 0xab0f016b; (* arm_ADDS X11 X11 X15 *) - 0xd280002a; (* arm_MOV X10 (rvalue (word 1)) *) - 0xd100040b; (* arm_SUB X11 X0 (rvalue (word 1)) *) - 0xb40001ab; (* arm_CBZ X11 (word 52) *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x9b0b7e2f; (* arm_MUL X15 X17 X11 *) - 0xba10018c; (* arm_ADCS X12 X12 X16 *) - 0x9bcb7e30; (* arm_UMULH X16 X17 X11 *) - 0x9a1f0210; (* arm_ADC X16 X16 XZR *) - 0xab0f018c; (* arm_ADDS X12 X12 X15 *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f782c; (* arm_STR X12 X1 (Shiftreg_Offset X15 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5fffeab; (* arm_CBNZ X11 (word 2097108) *) - 0xba0e0210; (* arm_ADCS X16 X16 X14 *) - 0x9a1f03ee; (* arm_ADC X14 XZR XZR *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f7830; (* arm_STR X16 X1 (Shiftreg_Offset X15 3) *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a782b; (* arm_LDR X11 X1 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xfa0c017f; (* arm_SBCS XZR X11 X12 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff6b; (* arm_CBNZ X11 (word 2097132) *) - 0xfa1f01df; (* arm_SBCS XZR X14 XZR *) - 0xda9f33ee; (* arm_CSETM X14 Condition_CS *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a782b; (* arm_LDR X11 X1 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0x8a0e018c; (* arm_AND X12 X12 X14 *) - 0xfa0c016b; (* arm_SBCS X11 X11 X12 *) - 0xf82a782b; (* arm_STR X11 X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff2b; (* arm_CBNZ X11 (word 2097124) *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f1; (* arm_MOV X17 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a7aab; (* arm_LDR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf86a7acc; (* arm_LDR X12 X22 (Shiftreg_Offset X10 3) *) - 0x9b0b7ccf; (* arm_MUL X15 X6 X11 *) - 0x9b0c7cf0; (* arm_MUL X16 X7 X12 *) - 0xab0d01ef; (* arm_ADDS X15 X15 X13 *) - 0x9bcb7ccd; (* arm_UMULH X13 X6 X11 *) - 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) - 0xeb1001ef; (* arm_SUBS X15 X15 X16 *) - 0xf82a7aaf; (* arm_STR X15 X21 (Shiftreg_Offset X10 3) *) - 0x9bcc7cef; (* arm_UMULH X15 X7 X12 *) - 0xcb1101f1; (* arm_SUB X17 X15 X17 *) - 0xfa1101ad; (* arm_SBCS X13 X13 X17 *) - 0xda9f23f1; (* arm_CSETM X17 Condition_CC *) - 0x9b0b7d0f; (* arm_MUL X15 X8 X11 *) - 0x9b0c7d30; (* arm_MUL X16 X9 X12 *) - 0xab0e01ef; (* arm_ADDS X15 X15 X14 *) - 0x9bcb7d0e; (* arm_UMULH X14 X8 X11 *) - 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) - 0xeb1001ef; (* arm_SUBS X15 X15 X16 *) - 0xf82a7acf; (* arm_STR X15 X22 (Shiftreg_Offset X10 3) *) - 0x9bcc7d2f; (* arm_UMULH X15 X9 X12 *) - 0xcb1301f3; (* arm_SUB X19 X15 X19 *) - 0xfa1301ce; (* arm_SBCS X14 X14 X19 *) - 0xda9f23f3; (* arm_CSETM X19 Condition_CC *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb05015f; (* arm_CMP X10 X5 *) - 0x54fffcc3; (* arm_BCC (word 2097048) *) - 0xab11023f; (* arm_CMN X17 X17 *) - 0xf94002af; (* arm_LDR X15 X21 (Immediate_Offset (word 0)) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xd10004a6; (* arm_SUB X6 X5 (rvalue (word 1)) *) - 0xb4000166; (* arm_CBZ X6 (word 44) *) - 0x9100214b; (* arm_ADD X11 X10 (rvalue (word 8)) *) - 0xf86b6aac; (* arm_LDR X12 X21 (Register_Offset X11) *) - 0x93cfe98f; (* arm_EXTR X15 X12 X15 58 *) - 0xca1101ef; (* arm_EOR X15 X15 X17 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6aaf; (* arm_STR X15 X21 (Register_Offset X10) *) - 0xaa0c03ef; (* arm_MOV X15 X12 *) - 0x9100214a; (* arm_ADD X10 X10 (rvalue (word 8)) *) - 0xd10004c6; (* arm_SUB X6 X6 (rvalue (word 1)) *) - 0xb5fffee6; (* arm_CBNZ X6 (word 2097116) *) - 0x93cfe9af; (* arm_EXTR X15 X13 X15 58 *) - 0xca1101ef; (* arm_EOR X15 X15 X17 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6aaf; (* arm_STR X15 X21 (Register_Offset X10) *) - 0xab13027f; (* arm_CMN X19 X19 *) - 0xf94002cf; (* arm_LDR X15 X22 (Immediate_Offset (word 0)) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xd10004a6; (* arm_SUB X6 X5 (rvalue (word 1)) *) - 0xb4000166; (* arm_CBZ X6 (word 44) *) - 0x9100214b; (* arm_ADD X11 X10 (rvalue (word 8)) *) - 0xf86b6acc; (* arm_LDR X12 X22 (Register_Offset X11) *) - 0x93cfe98f; (* arm_EXTR X15 X12 X15 58 *) - 0xca1301ef; (* arm_EOR X15 X15 X19 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6acf; (* arm_STR X15 X22 (Register_Offset X10) *) - 0xaa0c03ef; (* arm_MOV X15 X12 *) - 0x9100214a; (* arm_ADD X10 X10 (rvalue (word 8)) *) - 0xd10004c6; (* arm_SUB X6 X6 (rvalue (word 1)) *) - 0xb5fffee6; (* arm_CBNZ X6 (word 2097116) *) - 0x93cfe9cf; (* arm_EXTR X15 X14 X15 58 *) - 0xca1301ef; (* arm_EOR X15 X15 X19 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6acf; (* arm_STR X15 X22 (Register_Offset X10) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xab11023f; (* arm_CMN X17 X17 *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a788c; (* arm_LDR X12 X4 (Shiftreg_Offset X10 3) *) - 0x8a11016b; (* arm_AND X11 X11 X17 *) - 0xca11018c; (* arm_EOR X12 X12 X17 *) - 0xba0c016b; (* arm_ADCS X11 X11 X12 *) - 0xf82a788b; (* arm_STR X11 X4 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff0b; (* arm_CBNZ X11 (word 2097120) *) - 0xaa3303f3; (* arm_MVN X19 X19 *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xab13027f; (* arm_CMN X19 X19 *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x8a13016b; (* arm_AND X11 X11 X19 *) - 0xca13018c; (* arm_EOR X12 X12 X19 *) - 0xba0c016b; (* arm_ADCS X11 X11 X12 *) - 0xf82a782b; (* arm_STR X11 X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff0b; (* arm_CBNZ X11 (word 2097120) *) - 0xf100e842; (* arm_SUBS X2 X2 (rvalue (word 58)) *) - 0x54ffdd28; (* arm_BHI (word 2096036) *) + 0x910383e0; (* arm_ADD X0 SP (rvalue (word 224)) *) + 0x910303e1; (* arm_ADD X1 SP (rvalue (word 192)) *) + 0xaa0003f4; (* arm_MOV X20 X0 *) + 0x9280024a; (* arm_MOVN X10 (word 18) 0 *) + 0x9280000b; (* arm_MOVN X11 (word 0) 0 *) + 0xa9002fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&0))) *) + 0x92f0000c; (* arm_MOVN X12 (word 32768) 48 *) + 0xa90133eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&16))) *) + 0xa9400c22; (* arm_LDP X2 X3 X1 (Immediate_Offset (iword (&0))) *) + 0xa9411424; (* arm_LDP X4 X5 X1 (Immediate_Offset (iword (&16))) *) + 0xd2800267; (* arm_MOV X7 (rvalue (word 19)) *) + 0xd37ffca6; (* arm_LSR X6 X5 63 *) + 0x9b061ce6; (* arm_MADD X6 X7 X6 X7 *) + 0xab060042; (* arm_ADDS X2 X2 X6 *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0xba1f0084; (* arm_ADCS X4 X4 XZR *) + 0xb24100a5; (* arm_ORR X5 X5 (rvalue (word 9223372036854775808)) *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0x9a9f30e6; (* arm_CSEL X6 X7 XZR Condition_CC *) + 0xeb060042; (* arm_SUBS X2 X2 X6 *) + 0xfa1f0063; (* arm_SBCS X3 X3 XZR *) + 0xfa1f0084; (* arm_SBCS X4 X4 XZR *) + 0xda1f00a5; (* arm_SBC X5 X5 XZR *) + 0x9240f8a5; (* arm_AND X5 X5 (rvalue (word 9223372036854775807)) *) + 0xa9020fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&32))) *) + 0xa90317e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&48))) *) + 0xa9047fff; (* arm_STP XZR XZR SP (Immediate_Offset (iword (&64))) *) + 0xa9057fff; (* arm_STP XZR XZR SP (Immediate_Offset (iword (&80))) *) + 0xd284132a; (* arm_MOV X10 (rvalue (word 8345)) *) + 0xf2aea04a; (* arm_MOVK X10 (word 29954) 16 *) + 0xf2d3c46a; (* arm_MOVK X10 (word 40483) 32 *) + 0xf2f41f2a; (* arm_MOVK X10 (word 41209) 48 *) + 0xd284b2ab; (* arm_MOV X11 (rvalue (word 9621)) *) + 0xf2a3a26b; (* arm_MOVK X11 (word 7443) 16 *) + 0xf2d1e7eb; (* arm_MOVK X11 (word 36671) 32 *) + 0xf2f518cb; (* arm_MOVK X11 (word 43206) 48 *) + 0xd28a484c; (* arm_MOV X12 (rvalue (word 21058)) *) + 0xf2a0b58c; (* arm_MOVK X12 (word 1452) 16 *) + 0xf2d1270c; (* arm_MOVK X12 (word 35128) 32 *) + 0xf2ed8d8c; (* arm_MOVK X12 (word 27756) 48 *) + 0xd280c2ad; (* arm_MOV X13 (rvalue (word 1557)) *) + 0xf2a82eed; (* arm_MOVK X13 (word 16759) 16 *) + 0xf2c1164d; (* arm_MOVK X13 (word 2226) 32 *) + 0xf2e4ecad; (* arm_MOVK X13 (word 10085) 48 *) + 0xa9062fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&96))) *) + 0xa90737ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&112))) *) + 0xd2800155; (* arm_MOV X21 (rvalue (word 10)) *) + 0xd2800036; (* arm_MOV X22 (rvalue (word 1)) *) + 0x1400010b; (* arm_B (word 1068) *) + 0xeb1f015f; (* arm_CMP X10 XZR *) + 0xda9f53ee; (* arm_CSETM X14 Condition_MI *) + 0xda8a554a; (* arm_CNEG X10 X10 Condition_MI *) + 0xeb1f017f; (* arm_CMP X11 XZR *) + 0xda9f53ef; (* arm_CSETM X15 Condition_MI *) + 0xda8b556b; (* arm_CNEG X11 X11 Condition_MI *) + 0xeb1f019f; (* arm_CMP X12 XZR *) + 0xda9f53f0; (* arm_CSETM X16 Condition_MI *) + 0xda8c558c; (* arm_CNEG X12 X12 Condition_MI *) + 0xeb1f01bf; (* arm_CMP X13 XZR *) + 0xda9f53f1; (* arm_CSETM X17 Condition_MI *) + 0xda8d55ad; (* arm_CNEG X13 X13 Condition_MI *) + 0x8a0e0140; (* arm_AND X0 X10 X14 *) + 0x8a0f0161; (* arm_AND X1 X11 X15 *) + 0x8b010009; (* arm_ADD X9 X0 X1 *) + 0x8a100180; (* arm_AND X0 X12 X16 *) + 0x8a1101a1; (* arm_AND X1 X13 X17 *) + 0x8b010013; (* arm_ADD X19 X0 X1 *) + 0xf94003e7; (* arm_LDR X7 SP (Immediate_Offset (word 0)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94013e8; (* arm_LDR X8 SP (Immediate_Offset (word 32)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000265; (* arm_ADDS X5 X19 X0 *) + 0x9a0103e3; (* arm_ADC X3 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf94007e7; (* arm_LDR X7 SP (Immediate_Offset (word 8)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94017e8; (* arm_LDR X8 SP (Immediate_Offset (word 40)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0x93c4ec44; (* arm_EXTR X4 X2 X4 59 *) + 0xf90003e4; (* arm_STR X4 SP (Immediate_Offset (word 0)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a0103e4; (* arm_ADC X4 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a010084; (* arm_ADC X4 X4 X1 *) + 0x93c5ec65; (* arm_EXTR X5 X3 X5 59 *) + 0xf90013e5; (* arm_STR X5 SP (Immediate_Offset (word 32)) *) + 0xf9400be7; (* arm_LDR X7 SP (Immediate_Offset (word 16)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9401be8; (* arm_LDR X8 SP (Immediate_Offset (word 48)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c2ecc2; (* arm_EXTR X2 X6 X2 59 *) + 0xf90007e2; (* arm_STR X2 SP (Immediate_Offset (word 8)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0x93c3ec83; (* arm_EXTR X3 X4 X3 59 *) + 0xf90017e3; (* arm_STR X3 SP (Immediate_Offset (word 40)) *) + 0xf9400fe7; (* arm_LDR X7 SP (Immediate_Offset (word 24)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x937ffc23; (* arm_ASR X3 X1 63 *) + 0x8a0a0063; (* arm_AND X3 X3 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9401fe8; (* arm_LDR X8 SP (Immediate_Offset (word 56)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0x8a0b0000; (* arm_AND X0 X0 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c6eca6; (* arm_EXTR X6 X5 X6 59 *) + 0xf9000be6; (* arm_STR X6 SP (Immediate_Offset (word 16)) *) + 0x93c5ec65; (* arm_EXTR X5 X3 X5 59 *) + 0xf9000fe5; (* arm_STR X5 SP (Immediate_Offset (word 24)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x937ffc25; (* arm_ASR X5 X1 63 *) + 0x8a0c00a5; (* arm_AND X5 X5 X12 *) + 0xcb0503e5; (* arm_NEG X5 X5 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0x8a0d0000; (* arm_AND X0 X0 X13 *) + 0xcb0000a5; (* arm_SUB X5 X5 X0 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c4ec44; (* arm_EXTR X4 X2 X4 59 *) + 0xf9001be4; (* arm_STR X4 SP (Immediate_Offset (word 48)) *) + 0x93c2eca2; (* arm_EXTR X2 X5 X2 59 *) + 0xf9001fe2; (* arm_STR X2 SP (Immediate_Offset (word 56)) *) + 0xf94023e7; (* arm_LDR X7 SP (Immediate_Offset (word 64)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94033e8; (* arm_LDR X8 SP (Immediate_Offset (word 96)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf90023e4; (* arm_STR X4 SP (Immediate_Offset (word 64)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000265; (* arm_ADDS X5 X19 X0 *) + 0x9a0103e3; (* arm_ADC X3 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0xf90033e5; (* arm_STR X5 SP (Immediate_Offset (word 96)) *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf94027e7; (* arm_LDR X7 SP (Immediate_Offset (word 72)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94037e8; (* arm_LDR X8 SP (Immediate_Offset (word 104)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0xf90027e2; (* arm_STR X2 SP (Immediate_Offset (word 72)) *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a0103e4; (* arm_ADC X4 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0xf90037e3; (* arm_STR X3 SP (Immediate_Offset (word 104)) *) + 0x9a010084; (* arm_ADC X4 X4 X1 *) + 0xf9402be7; (* arm_LDR X7 SP (Immediate_Offset (word 80)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9403be8; (* arm_LDR X8 SP (Immediate_Offset (word 112)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0xf9002be6; (* arm_STR X6 SP (Immediate_Offset (word 80)) *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf9003be4; (* arm_STR X4 SP (Immediate_Offset (word 112)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xf9402fe7; (* arm_LDR X7 SP (Immediate_Offset (word 88)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x8a0a01c3; (* arm_AND X3 X14 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9403fe8; (* arm_LDR X8 SP (Immediate_Offset (word 120)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x8a0b01e0; (* arm_AND X0 X15 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c5fc66; (* arm_EXTR X6 X3 X5 63 *) + 0xa94407e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0x8b83fcc6; (* arm_ADD X6 X6 (Shiftedreg X3 ASR 63) *) + 0xd2800263; (* arm_MOV X3 (rvalue (word 19)) *) + 0x9b037cc4; (* arm_MUL X4 X6 X3 *) + 0x8b06fca5; (* arm_ADD X5 X5 (Shiftedreg X6 LSL 63) *) + 0x9b437cc3; (* arm_SMULH X3 X6 X3 *) + 0xf9402be6; (* arm_LDR X6 SP (Immediate_Offset (word 80)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba030021; (* arm_ADCS X1 X1 X3 *) + 0x937ffc63; (* arm_ASR X3 X3 63 *) + 0xba0300c6; (* arm_ADCS X6 X6 X3 *) + 0x9a0300a5; (* arm_ADC X5 X5 X3 *) + 0xa90407e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xa90517e6; (* arm_STP X6 X5 SP (Immediate_Offset (iword (&80))) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x8a0c0205; (* arm_AND X5 X16 X12 *) + 0xcb0503e5; (* arm_NEG X5 X5 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x8a0d0220; (* arm_AND X0 X17 X13 *) + 0xcb0000a5; (* arm_SUB X5 X5 X0 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c2fca6; (* arm_EXTR X6 X5 X2 63 *) + 0xa94607e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&96))) *) + 0x8b85fcc6; (* arm_ADD X6 X6 (Shiftedreg X5 ASR 63) *) + 0xd2800265; (* arm_MOV X5 (rvalue (word 19)) *) + 0x9b057cc4; (* arm_MUL X4 X6 X5 *) + 0x8b06fc42; (* arm_ADD X2 X2 (Shiftedreg X6 LSL 63) *) + 0x9b457cc5; (* arm_SMULH X5 X6 X5 *) + 0xf9403be3; (* arm_LDR X3 SP (Immediate_Offset (word 112)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba050021; (* arm_ADCS X1 X1 X5 *) + 0x937ffca5; (* arm_ASR X5 X5 63 *) + 0xba050063; (* arm_ADCS X3 X3 X5 *) + 0x9a050042; (* arm_ADC X2 X2 X5 *) + 0xa90607e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&96))) *) + 0xa9070be3; (* arm_STP X3 X2 SP (Immediate_Offset (iword (&112))) *) + 0xaa1603e1; (* arm_MOV X1 X22 *) + 0xf94003e2; (* arm_LDR X2 SP (Immediate_Offset (word 0)) *) + 0xf94013e3; (* arm_LDR X3 SP (Immediate_Offset (word 32)) *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x91440088; (* arm_ADD X8 X4 (rvalue (word 1048576)) *) + 0x9355a508; (* arm_SBFM X8 X8 21 41 *) + 0xd2a0020b; (* arm_MOVZ X11 (word 16) 16 *) + 0x8b0b556b; (* arm_ADD X11 X11 (Shiftedreg X11 LSL 21) *) + 0x8b0b0089; (* arm_ADD X9 X4 X11 *) + 0x936afd29; (* arm_ASR X9 X9 42 *) + 0x914400aa; (* arm_ADD X10 X5 (rvalue (word 1048576)) *) + 0x9355a54a; (* arm_SBFM X10 X10 21 41 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0x936afd6b; (* arm_ASR X11 X11 42 *) + 0x9b027d06; (* arm_MUL X6 X8 X2 *) + 0x9b037d27; (* arm_MUL X7 X9 X3 *) + 0x9b027d42; (* arm_MUL X2 X10 X2 *) + 0x9b037d63; (* arm_MUL X3 X11 X3 *) + 0x8b0700c4; (* arm_ADD X4 X6 X7 *) + 0x8b030045; (* arm_ADD X5 X2 X3 *) + 0x9354fc82; (* arm_ASR X2 X4 20 *) + 0x9354fca3; (* arm_ASR X3 X5 20 *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9144008c; (* arm_ADD X12 X4 (rvalue (word 1048576)) *) + 0x9355a58c; (* arm_SBFM X12 X12 21 41 *) + 0xd2a0020f; (* arm_MOVZ X15 (word 16) 16 *) + 0x8b0f55ef; (* arm_ADD X15 X15 (Shiftedreg X15 LSL 21) *) + 0x8b0f008d; (* arm_ADD X13 X4 X15 *) + 0x936afdad; (* arm_ASR X13 X13 42 *) + 0x914400ae; (* arm_ADD X14 X5 (rvalue (word 1048576)) *) + 0x9355a5ce; (* arm_SBFM X14 X14 21 41 *) + 0x8b0f00af; (* arm_ADD X15 X5 X15 *) + 0x936afdef; (* arm_ASR X15 X15 42 *) + 0x9b027d86; (* arm_MUL X6 X12 X2 *) + 0x9b037da7; (* arm_MUL X7 X13 X3 *) + 0x9b027dc2; (* arm_MUL X2 X14 X2 *) + 0x9b037de3; (* arm_MUL X3 X15 X3 *) + 0x8b0700c4; (* arm_ADD X4 X6 X7 *) + 0x8b030045; (* arm_ADD X5 X2 X3 *) + 0x9354fc82; (* arm_ASR X2 X4 20 *) + 0x9354fca3; (* arm_ASR X3 X5 20 *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9b087d82; (* arm_MUL X2 X12 X8 *) + 0x9b097d83; (* arm_MUL X3 X12 X9 *) + 0x9b087dc6; (* arm_MUL X6 X14 X8 *) + 0x9b097dc7; (* arm_MUL X7 X14 X9 *) + 0x9b0a09a8; (* arm_MADD X8 X13 X10 X2 *) + 0x9b0b0da9; (* arm_MADD X9 X13 X11 X3 *) + 0x9b0a19f0; (* arm_MADD X16 X15 X10 X6 *) + 0x9b0b1df1; (* arm_MADD X17 X15 X11 X7 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9144008c; (* arm_ADD X12 X4 (rvalue (word 1048576)) *) + 0x9356a98c; (* arm_SBFM X12 X12 22 42 *) + 0xd2a0020f; (* arm_MOVZ X15 (word 16) 16 *) + 0x8b0f55ef; (* arm_ADD X15 X15 (Shiftedreg X15 LSL 21) *) + 0x8b0f008d; (* arm_ADD X13 X4 X15 *) + 0x936bfdad; (* arm_ASR X13 X13 43 *) + 0x914400ae; (* arm_ADD X14 X5 (rvalue (word 1048576)) *) + 0x9356a9ce; (* arm_SBFM X14 X14 22 42 *) + 0x8b0f00af; (* arm_ADD X15 X5 X15 *) + 0x936bfdef; (* arm_ASR X15 X15 43 *) + 0x9b08fd82; (* arm_MNEG X2 X12 X8 *) + 0x9b09fd83; (* arm_MNEG X3 X12 X9 *) + 0x9b08fdc4; (* arm_MNEG X4 X14 X8 *) + 0x9b09fdc5; (* arm_MNEG X5 X14 X9 *) + 0x9b1089aa; (* arm_MSUB X10 X13 X16 X2 *) + 0x9b118dab; (* arm_MSUB X11 X13 X17 X3 *) + 0x9b1091ec; (* arm_MSUB X12 X15 X16 X4 *) + 0x9b1195ed; (* arm_MSUB X13 X15 X17 X5 *) + 0xaa0103f6; (* arm_MOV X22 X1 *) + 0xf10006b5; (* arm_SUBS X21 X21 (rvalue (word 1)) *) + 0x54ff9281; (* arm_BNE (word 2093648) *) + 0xf94003e0; (* arm_LDR X0 SP (Immediate_Offset (word 0)) *) + 0xf94013e1; (* arm_LDR X1 SP (Immediate_Offset (word 32)) *) + 0x9b0a7c00; (* arm_MUL X0 X0 X10 *) + 0x9b0b0021; (* arm_MADD X1 X1 X11 X0 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0xeb1f015f; (* arm_CMP X10 XZR *) + 0xda9f53ee; (* arm_CSETM X14 Condition_MI *) + 0xda8a554a; (* arm_CNEG X10 X10 Condition_MI *) + 0xca0001ce; (* arm_EOR X14 X14 X0 *) + 0xeb1f017f; (* arm_CMP X11 XZR *) + 0xda9f53ef; (* arm_CSETM X15 Condition_MI *) + 0xda8b556b; (* arm_CNEG X11 X11 Condition_MI *) + 0xca0001ef; (* arm_EOR X15 X15 X0 *) + 0xeb1f019f; (* arm_CMP X12 XZR *) + 0xda9f53f0; (* arm_CSETM X16 Condition_MI *) + 0xda8c558c; (* arm_CNEG X12 X12 Condition_MI *) + 0xca000210; (* arm_EOR X16 X16 X0 *) + 0xeb1f01bf; (* arm_CMP X13 XZR *) + 0xda9f53f1; (* arm_CSETM X17 Condition_MI *) + 0xda8d55ad; (* arm_CNEG X13 X13 Condition_MI *) + 0xca000231; (* arm_EOR X17 X17 X0 *) + 0x8a0e0140; (* arm_AND X0 X10 X14 *) + 0x8a0f0161; (* arm_AND X1 X11 X15 *) + 0x8b010009; (* arm_ADD X9 X0 X1 *) + 0xf94023e7; (* arm_LDR X7 SP (Immediate_Offset (word 64)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94033e8; (* arm_LDR X8 SP (Immediate_Offset (word 96)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf90023e4; (* arm_STR X4 SP (Immediate_Offset (word 64)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xf94027e7; (* arm_LDR X7 SP (Immediate_Offset (word 72)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94037e8; (* arm_LDR X8 SP (Immediate_Offset (word 104)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0xf90027e2; (* arm_STR X2 SP (Immediate_Offset (word 72)) *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0xf9402be7; (* arm_LDR X7 SP (Immediate_Offset (word 80)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9403be8; (* arm_LDR X8 SP (Immediate_Offset (word 112)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0xf9002be6; (* arm_STR X6 SP (Immediate_Offset (word 80)) *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xf9402fe7; (* arm_LDR X7 SP (Immediate_Offset (word 88)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x8a0a01c3; (* arm_AND X3 X14 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9403fe8; (* arm_LDR X8 SP (Immediate_Offset (word 120)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x8a0b01e0; (* arm_AND X0 X15 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c5fc66; (* arm_EXTR X6 X3 X5 63 *) + 0xa94407e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xea03007f; (* arm_TST X3 X3 *) + 0x9a8644c6; (* arm_CINC X6 X6 Condition_PL *) + 0xd2800263; (* arm_MOV X3 (rvalue (word 19)) *) + 0x9b037cc4; (* arm_MUL X4 X6 X3 *) + 0x8b06fca5; (* arm_ADD X5 X5 (Shiftedreg X6 LSL 63) *) + 0x9b437cc6; (* arm_SMULH X6 X6 X3 *) + 0xf9402be2; (* arm_LDR X2 SP (Immediate_Offset (word 80)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba060021; (* arm_ADCS X1 X1 X6 *) + 0x937ffcc6; (* arm_ASR X6 X6 63 *) + 0xba060042; (* arm_ADCS X2 X2 X6 *) + 0xba0600a5; (* arm_ADCS X5 X5 X6 *) + 0x9a9f4063; (* arm_CSEL X3 X3 XZR Condition_MI *) + 0xeb030000; (* arm_SUBS X0 X0 X3 *) + 0xfa1f0021; (* arm_SBCS X1 X1 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f00a5; (* arm_SBC X5 X5 XZR *) + 0x9240f8a5; (* arm_AND X5 X5 (rvalue (word 9223372036854775807)) *) + 0xaa1403e4; (* arm_MOV X4 X20 *) + 0xa9000480; (* arm_STP X0 X1 X4 (Immediate_Offset (iword (&0))) *) + 0xa9011482; (* arm_STP X2 X5 X4 (Immediate_Offset (iword (&16))) *) 0xa94813e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&128))) *) 0xa94e1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&224))) *) 0x9ba57c67; (* arm_UMULL X7 W3 W5 *) @@ -2338,505 +3052,502 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0xa8c153f3; (* arm_LDP X19 X20 SP (Postimmediate_Offset (iword (&16))) *) 0xd65f03c0 (* arm_RET X30 *) ] -[237; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 127; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; - 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; +[0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 0; 0; 0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; - 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 231; - 32; 114; 124; 109; 148; 95; 82; 68; 84; 227; 241; 178; 176; 54; 70; 15; 174; - 146; 232; 112; 157; 110; 121; 177; 173; 55; 169; 95; 192; 222; 3; 21; 85; - 55; 198; 28; 39; 28; 109; 20; 79; 202; 164; 196; 136; 37; 70; 57; 252; 90; - 229; 254; 41; 17; 105; 245; 114; 132; 77; 120; 159; 148; 21; 73; 0; 173; - 175; 16; 229; 137; 189; 14; 134; 185; 115; 192; 8; 31; 77; 157; 175; 0; 45; - 139; 110; 113; 7; 20; 151; 133; 143; 246; 133; 214; 112; 62; 145; 64; 215; - 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; 138; 143; 104; 52; - 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; 59; 140; 245; 198; - 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; 66; 61; 100; 152; - 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; 122; 135; 5; 18; - 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; 67; 221; 203; 125; - 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; 180; 66; 96; 165; - 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; 110; 177; 107; 35; - 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; 60; 147; 252; 231; - 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; 225; 101; 154; - 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; 179; 168; 250; - 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; 132; 160; 15; 80; - 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; 252; 164; 232; 31; 97; 86; - 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; 243; 49; 129; - 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; 37; 175; 138; - 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; 244; 248; - 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; 98; 218; 53; - 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; 180; 185; - 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; 96; 86; - 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; 69; 116; - 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; 125; 244; - 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; 33; 3; - 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; 69; 57; - 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; 12; 157; - 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; 20; 0; - 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; 126; 74; - 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; 80; 141; - 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; 41; 133; - 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; 45; 167; - 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; 164; 140; - 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; 83; 69; - 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; 21; 119; - 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; 218; 104; - 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; 2; 103; - 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; 162; - 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; 111; - 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; 157; - 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; 210; - 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; 126; - 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; 154; - 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; 144; - 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; 88; - 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; 14; - 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; 226; - 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; 97; 96; - 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; 139; 120; - 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; 92; 124; - 144; 38; 243; 45; 62; 85; 202; 81; 200; 126; 179; 120; 72; 166; 203; 132; - 18; 167; 231; 209; 136; 50; 25; 228; 181; 230; 131; 136; 154; 90; 236; 16; - 242; 76; 246; 33; 144; 45; 165; 4; 45; 50; 156; 191; 198; 117; 51; 159; 193; - 185; 9; 11; 210; 66; 67; 58; 122; 88; 97; 254; 100; 170; 248; 28; 59; 20; - 171; 202; 138; 150; 125; 124; 134; 159; 41; 39; 9; 39; 142; 37; 84; 95; 117; - 9; 24; 234; 75; 211; 167; 208; 225; 38; 65; 55; 163; 70; 181; 33; 67; 131; - 136; 162; 88; 248; 79; 169; 60; 237; 19; 83; 86; 212; 14; 206; 250; 52; 191; - 181; 207; 61; 92; 245; 113; 179; 234; 201; 165; 60; 101; 10; 143; 33; 133; - 209; 69; 122; 10; 73; 53; 147; 4; 70; 120; 55; 21; 154; 246; 225; 49; 204; - 9; 234; 96; 0; 101; 233; 110; 248; 119; 21; 4; 126; 243; 103; 91; 206; 150; - 164; 178; 102; 150; 151; 86; 189; 216; 146; 84; 255; 208; 44; 89; 74; 41; - 236; 60; 80; 178; 172; 19; 8; 101; 67; 105; 86; 152; 7; 98; 38; 12; 219; 24; - 184; 74; 53; 110; 96; 217; 49; 92; 93; 199; 205; 168; 0; 79; 250; 130; 9; - 212; 226; 83; 70; 205; 43; 225; 23; 157; 182; 171; 29; 235; 249; 114; 86; - 252; 83; 232; 175; 53; 181; 112; 186; 109; 214; 150; 39; 117; 15; 172; 71; - 117; 114; 17; 148; 23; 53; 165; 50; 55; 132; 100; 223; 166; 68; 166; 211; - 221; 191; 15; 136; 89; 101; 59; 112; 165; 26; 58; 173; 64; 37; 133; 203; - 104; 100; 76; 142; 247; 179; 0; 9; 27; 101; 157; 103; 159; 27; 133; 10; 242; - 66; 51; 3; 97; 203; 8; 225; 163; 48; 139; 232; 127; 245; 1; 214; 20; 215; - 45; 237; 202; 58; 31; 55; 49; 173; 22; 200; 190; 15; 40; 237; 227; 239; 230; - 216; 91; 89; 217; 82; 245; 35; 198; 246; 114; 23; 231; 15; 60; 41; 30; 5; - 11; 3; 20; 67; 173; 188; 240; 251; 94; 0; 96; 213; 94; 12; 135; 209; 46; 15; - 183; 142; 160; 230; 132; 208; 51; 144; 31; 32; 112; 102; 123; 206; 225; 90; - 58; 76; 149; 250; 184; 220; 52; 164; 56; 65; 11; 132; 150; 108; 125; 246; - 12; 135; 44; 232; 123; 41; 116; 133; 56; 222; 90; 165; 98; 114; 178; 77; - 129; 124; 221; 160; 61; 201; 228; 117; 248; 186; 77; 41; 185; 113; 167; 130; - 50; 185; 96; 196; 198; 244; 183; 63; 214; 128; 129; 193; 102; 234; 61; 199; - 233; 109; 242; 248; 77; 160; 213; 4; 137; 71; 211; 66; 1; 177; 74; 174; 251; - 250; 152; 9; 93; 85; 99; 172; 200; 246; 4; 177; 144; 47; 65; 74; 172; 90; 8; - 41; 201; 58; 107; 50; 79; 198; 224; 225; 99; 230; 130; 178; 81; 85; 131; 75; - 26; 74; 245; 53; 107; 71; 194; 104; 159; 24; 254; 163; 157; 27; 52; 81; 127; - 189; 10; 13; 58; 96; 70; 174; 211; 225; 50; 201; 137; 128; 99; 189; 152; - 135; 57; 145; 37; 223; 53; 2; 186; 116; 210; 92; 20; 28; 67; 215; 243; 117; - 100; 56; 232; 50; 239; 217; 229; 106; 175; 139; 91; 54; 30; 104; 91; 56; - 182; 56; 82; 130; 225; 101; 125; 22; 193; 41; 73; 35; 232; 173; 119; 160; - 171; 236; 77; 152; 157; 56; 235; 25; 173; 119; 63; 56; 148; 215; 84; 41; - 126; 107; 236; 199; 122; 58; 124; 235; 58; 123; 199; 89; 207; 159; 9; 29; - 194; 92; 20; 72; 229; 215; 40; 204; 146; 193; 53; 69; 1; 126; 36; 72; 229; - 193; 231; 128; 238; 115; 41; 59; 116; 40; 95; 74; 98; 207; 92; 34; 37; 215; - 173; 211; 93; 44; 21; 178; 129; 51; 26; 145; 125; 248; 8; 91; 173; 159; 179; - 216; 59; 254; 153; 71; 107; 96; 5; 111; 98; 169; 123; 23; 146; 158; 254; - 159; 225; 202; 229; 13; 29; 231; 174; 152; 68; 16; 131; 45; 148; 174; 244; - 63; 200; 58; 83; 88; 46; 225; 77; 113; 131; 100; 27; 249; 73; 49; 67; 91; - 98; 191; 44; 90; 101; 220; 181; 173; 179; 39; 40; 99; 18; 132; 250; 135; - 216; 248; 73; 171; 145; 94; 137; 96; 24; 108; 248; 12; 237; 242; 236; 233; - 212; 223; 53; 7; 18; 6; 109; 180; 231; 107; 185; 4; 152; 160; 157; 188; 107; - 194; 109; 217; 47; 230; 226; 115; 94; 81; 170; 73; 84; 99; 91; 237; 58; 130; - 198; 11; 159; 196; 101; 168; 196; 209; 66; 91; 233; 31; 12; 133; 185; 21; - 211; 3; 111; 109; 215; 48; 29; 156; 47; 99; 14; 221; 204; 46; 21; 49; 137; - 118; 150; 182; 208; 81; 88; 122; 99; 168; 107; 183; 223; 82; 57; 239; 14; - 160; 73; 125; 211; 109; 199; 228; 6; 33; 23; 68; 68; 108; 105; 127; 141; - 146; 128; 214; 83; 251; 38; 63; 77; 105; 164; 158; 115; 180; 176; 75; 134; - 46; 17; 151; 198; 16; 222; 95; 190; 125; 39; 196; 147; 100; 162; 126; 173; - 25; 173; 79; 93; 38; 144; 69; 48; 70; 200; 223; 0; 14; 9; 254; 102; 237; - 171; 28; 230; 37; 5; 200; 88; 131; 160; 42; 166; 12; 71; 66; 32; 122; 227; - 74; 61; 106; 220; 237; 17; 59; 166; 211; 100; 116; 239; 6; 8; 85; 175; 155; - 191; 3; 4; 102; 88; 204; 40; 225; 19; 63; 126; 116; 89; 180; 236; 115; 88; - 111; 245; 104; 18; 204; 237; 61; 182; 160; 44; 226; 134; 69; 99; 120; 109; - 86; 52; 8; 193; 156; 159; 164; 55; 22; 81; 196; 155; 168; 213; 86; 142; 188; - 219; 210; 127; 127; 15; 236; 181; 28; 217; 53; 204; 94; 202; 91; 151; 51; - 208; 47; 90; 198; 133; 66; 5; 161; 195; 103; 22; 243; 42; 17; 100; 108; 88; - 238; 26; 115; 64; 226; 10; 104; 42; 178; 147; 71; 243; 165; 251; 20; 212; - 247; 133; 105; 22; 70; 215; 60; 87; 0; 200; 201; 132; 94; 62; 89; 30; 19; - 97; 123; 182; 242; 195; 47; 108; 82; 252; 131; 234; 156; 130; 20; 194; 149; - 221; 151; 132; 123; 67; 255; 167; 181; 78; 170; 48; 78; 116; 108; 139; 232; - 133; 60; 97; 93; 12; 158; 115; 129; 117; 95; 30; 199; 217; 47; 184; 236; - 113; 78; 47; 11; 231; 33; 227; 119; 164; 64; 185; 221; 86; 230; 128; 79; 29; - 206; 206; 86; 101; 191; 126; 123; 93; 83; 196; 59; 252; 5; 221; 222; 175; - 82; 174; 179; 184; 36; 207; 48; 59; 237; 140; 99; 149; 52; 149; 129; 190; - 169; 131; 188; 164; 51; 4; 31; 101; 92; 71; 103; 55; 55; 217; 173; 209; 64; - 253; 153; 186; 47; 39; 208; 244; 150; 111; 22; 7; 179; 174; 59; 240; 21; 82; - 240; 99; 67; 153; 249; 24; 59; 108; 165; 190; 31; 144; 101; 36; 20; 203; - 149; 64; 99; 53; 85; 193; 22; 64; 20; 18; 239; 96; 188; 16; 137; 12; 20; 56; - 158; 140; 124; 144; 48; 87; 144; 245; 107; 138; 91; 65; 225; 241; 120; 167; - 15; 126; 167; 195; 186; 247; 159; 64; 6; 80; 154; 162; 154; 184; 215; 82; - 111; 86; 90; 99; 122; 246; 28; 82; 2; 148; 82; 157; 10; 11; 238; 63; 81; - 102; 90; 223; 15; 92; 231; 152; 143; 206; 7; 225; 191; 136; 134; 97; 212; - 237; 44; 56; 113; 126; 10; 160; 63; 228; 94; 47; 119; 32; 103; 20; 177; 206; - 154; 7; 150; 177; 148; 248; 232; 74; 130; 172; 0; 77; 34; 248; 74; 196; 108; - 205; 247; 217; 83; 23; 0; 52; 219; 61; 150; 45; 35; 105; 60; 88; 56; 151; - 180; 218; 135; 222; 29; 133; 242; 145; 160; 249; 209; 215; 170; 182; 237; - 72; 160; 47; 254; 181; 18; 77; 227; 252; 150; 196; 251; 240; 113; 237; 91; - 243; 173; 107; 130; 185; 115; 97; 197; 40; 255; 97; 114; 4; 210; 111; 32; - 177; 111; 249; 118; 155; 116; 146; 30; 111; 173; 38; 124; 43; 223; 19; 137; - 75; 80; 35; 211; 102; 75; 195; 139; 28; 117; 192; 157; 64; 140; 184; 199; - 150; 7; 194; 147; 126; 111; 5; 174; 166; 174; 4; 246; 90; 31; 153; 156; 228; - 190; 241; 81; 35; 193; 102; 107; 255; 238; 181; 8; 168; 97; 81; 33; 224; 1; - 15; 193; 206; 15; 68; 30; 254; 73; 166; 88; 77; 100; 126; 119; 173; 49; 162; - 174; 252; 33; 210; 208; 127; 136; 90; 28; 68; 2; 243; 17; 197; 131; 113; - 170; 1; 73; 69; 78; 36; 196; 157; 210; 242; 61; 10; 222; 216; 147; 116; 14; - 2; 43; 77; 33; 12; 130; 126; 6; 200; 108; 10; 185; 234; 111; 22; 121; 55; - 65; 240; 248; 26; 140; 84; 183; 177; 8; 180; 153; 98; 36; 124; 122; 15; 206; - 57; 217; 6; 30; 249; 176; 96; 247; 19; 18; 109; 114; 123; 136; 187; 65; 216; - 73; 124; 86; 108; 128; 103; 146; 106; 30; 121; 202; 204; 4; 109; 6; 75; 57; - 204; 227; 69; 86; 159; 166; 210; 140; 120; 160; 134; 182; 149; 92; 210; 247; - 57; 170; 224; 128; 217; 151; 28; 181; 198; 82; 66; 56; 208; 53; 170; 85; - 205; 7; 147; 244; 67; 125; 98; 195; 138; 183; 207; 54; 189; 86; 84; 169; 20; - 13; 193; 25; 197; 42; 144; 250; 181; 148; 180; 116; 244; 234; 90; 122; 248; - 169; 130; 131; 175; 230; 148; 224; 155; 135; 177; 109; 234; 13; 171; 229; - 68; 115; 84; 191; 102; 170; 9; 67; 27; 143; 136; 88; 18; 218; 47; 75; 86; - 253; 179; 210; 135; 94; 221; 177; 131; 84; 136; 120; 44; 91; 122; 121; 168; - 214; 116; 235; 186; 21; 50; 23; 196; 250; 241; 92; 245; 126; 197; 5; 139; - 60; 90; 31; 0; 41; 251; 204; 234; 82; 135; 204; 215; 10; 207; 8; 52; 121; - 98; 19; 21; 82; 148; 61; 150; 25; 3; 23; 15; 235; 102; 148; 61; 136; 250; - 178; 51; 168; 120; 60; 0; 117; 167; 127; 58; 9; 190; 215; 22; 58; 230; 125; - 16; 229; 207; 50; 243; 154; 220; 255; 119; 163; 127; 103; 11; 68; 24; 191; - 213; 112; 3; 20; 163; 164; 25; 43; 37; 106; 134; 18; 169; 96; 68; 96; 233; - 184; 222; 211; 120; 119; 4; 216; 63; 127; 45; 94; 138; 191; 49; 30; 208; - 103; 62; 101; 123; 194; 6; 138; 3; 123; 243; 144; 105; 211; 213; 25; 217; - 158; 242; 185; 78; 219; 187; 174; 19; 82; 53; 145; 185; 76; 5; 234; 8; 199; - 86; 14; 38; 114; 127; 213; 222; 88; 119; 61; 65; 233; 173; 157; 231; 120; - 125; 230; 41; 151; 213; 249; 87; 242; 230; 167; 122; 227; 14; 145; 219; 89; - 156; 3; 158; 187; 91; 27; 161; 106; 139; 212; 15; 91; 38; 83; 109; 218; 136; - 169; 191; 147; 49; 130; 96; 137; 40; 126; 213; 97; 50; 201; 138; 215; 67; - 129; 92; 58; 45; 148; 242; 121; 233; 141; 200; 182; 37; 47; 218; 151; 105; - 1; 242; 172; 234; 167; 27; 37; 228; 180; 78; 239; 135; 79; 180; 9; 165; 125; - 106; 188; 27; 171; 144; 125; 254; 107; 1; 167; 131; 166; 204; 154; 109; 11; - 197; 242; 77; 95; 80; 144; 170; 53; 228; 204; 95; 13; 97; 107; 150; 255; - 152; 97; 68; 13; 161; 25; 151; 195; 179; 150; 244; 163; 7; 26; 50; 37; 78; - 143; 24; 170; 206; 17; 240; 27; 117; 167; 213; 152; 148; 125; 160; 216; 141; - 80; 31; 22; 237; 25; 202; 230; 220; 135; 214; 44; 10; 86; 77; 207; 100; 134; - 196; 104; 53; 127; 56; 58; 128; 34; 82; 233; 65; 135; 252; 83; 86; 89; 177; - 218; 59; 72; 73; 250; 52; 135; 20; 15; 120; 250; 224; 52; 5; 54; 112; 11; - 111; 16; 189; 7; 227; 227; 111; 119; 16; 34; 254; 160; 230; 221; 9; 193; - 134; 50; 246; 128; 218; 180; 10; 77; 207; 214; 224; 127; 48; 248; 69; 62; - 72; 130; 164; 157; 111; 174; 105; 82; 0; 5; 122; 135; 247; 156; 144; 82; - 112; 28; 212; 152; 78; 135; 226; 125; 238; 50; 96; 12; 126; 185; 233; 98; - 195; 20; 138; 163; 96; 106; 222; 220; 129; 87; 64; 168; 122; 170; 234; 213; - 125; 33; 176; 30; 142; 36; 208; 196; 183; 157; 82; 191; 116; 77; 225; 151; - 118; 224; 84; 35; 86; 60; 23; 155; 106; 30; 101; 73; 90; 121; 31; 194; 167; - 127; 200; 14; 140; 190; 185; 31; 223; 139; 130; 2; 10; 227; 248; 231; 186; - 0; 108; 79; 108; 173; 29; 153; 99; 73; 10; 246; 246; 93; 110; 138; 5; 7; - 127; 246; 49; 219; 196; 2; 235; 233; 43; 251; 188; 16; 137; 253; 37; 237; - 180; 221; 92; 92; 31; 19; 200; 70; 206; 155; 203; 160; 19; 28; 178; 51; 49; - 142; 125; 8; 248; 146; 6; 54; 247; 99; 113; 210; 55; 198; 220; 244; 99; 89; - 234; 101; 32; 230; 164; 37; 217; 96; 193; 90; 46; 247; 155; 101; 91; 140; - 227; 94; 176; 185; 175; 154; 199; 19; 26; 7; 78; 45; 157; 191; 10; 41; 51; - 233; 109; 110; 238; 142; 23; 151; 16; 174; 23; 171; 59; 28; 176; 183; 202; - 199; 22; 178; 154; 28; 204; 195; 187; 7; 116; 211; 101; 125; 213; 88; 74; - 80; 80; 71; 116; 82; 144; 41; 26; 19; 107; 96; 242; 9; 190; 70; 67; 116; 68; - 125; 232; 64; 37; 43; 181; 21; 212; 218; 72; 29; 62; 96; 59; 161; 24; 138; - 58; 124; 247; 189; 205; 47; 193; 40; 183; 78; 174; 145; 102; 124; 89; 76; - 35; 126; 200; 180; 133; 10; 61; 157; 136; 100; 231; 250; 74; 53; 12; 201; - 226; 218; 29; 158; 106; 12; 7; 30; 135; 10; 137; 137; 188; 75; 153; 181; 1; - 51; 96; 66; 221; 91; 58; 174; 107; 115; 60; 158; 213; 25; 226; 173; 97; 13; - 100; 212; 133; 38; 15; 48; 231; 62; 183; 214; 125; 158; 228; 85; 210; 245; - 172; 30; 11; 97; 92; 17; 22; 128; 202; 135; 225; 146; 93; 151; 153; 60; 194; - 37; 145; 151; 98; 87; 129; 19; 24; 117; 30; 132; 71; 121; 250; 67; 215; 70; - 156; 99; 89; 250; 198; 229; 116; 43; 5; 227; 29; 94; 6; 161; 48; 144; 184; - 207; 162; 198; 71; 125; 224; 214; 240; 142; 20; 208; 218; 63; 60; 111; 84; - 145; 154; 116; 62; 157; 87; 129; 187; 38; 16; 98; 236; 113; 128; 236; 201; - 52; 141; 245; 140; 20; 39; 240; 52; 121; 246; 146; 164; 70; 169; 10; 132; - 246; 190; 132; 153; 70; 84; 24; 97; 137; 42; 188; 161; 92; 212; 187; 93; - 189; 30; 250; 242; 63; 109; 117; 228; 154; 125; 47; 87; 226; 127; 72; 243; - 136; 187; 69; 195; 86; 141; 168; 96; 105; 109; 11; 209; 159; 185; 161; 174; - 78; 173; 235; 143; 39; 102; 57; 147; 140; 31; 104; 170; 177; 152; 12; 41; - 32; 156; 148; 33; 140; 82; 60; 157; 33; 145; 82; 17; 57; 123; 103; 156; 254; - 2; 221; 4; 65; 42; 66; 36; 17; 94; 191; 178; 114; 181; 58; 163; 152; 51; 12; - 250; 161; 102; 182; 82; 250; 1; 97; 203; 148; 213; 83; 175; 175; 0; 59; 134; - 44; 184; 106; 9; 219; 6; 78; 33; 129; 53; 79; 228; 12; 201; 182; 168; 33; - 245; 42; 158; 64; 42; 193; 36; 101; 129; 164; 252; 142; 164; 181; 101; 1; - 118; 106; 132; 160; 116; 164; 144; 241; 192; 124; 47; 205; 132; 249; 239; - 18; 143; 43; 170; 88; 6; 41; 94; 105; 184; 200; 254; 191; 217; 103; 27; 89; - 250; 155; 180; 128; 28; 13; 47; 49; 138; 236; 243; 171; 94; 81; 121; 89; - 136; 28; 240; 158; 192; 51; 112; 114; 203; 123; 143; 202; 199; 46; 224; 61; - 93; 181; 24; 159; 113; 179; 185; 153; 30; 100; 140; 161; 250; 229; 101; 228; - 237; 5; 159; 194; 54; 17; 8; 97; 139; 18; 48; 112; 134; 79; 155; 72; 239; - 146; 235; 58; 45; 16; 50; 210; 97; 168; 22; 97; 180; 83; 98; 225; 36; 170; - 11; 25; 231; 171; 126; 61; 191; 190; 108; 73; 186; 251; 245; 73; 212; 207; - 91; 138; 16; 154; 148; 48; 235; 115; 100; 188; 112; 221; 64; 220; 28; 13; - 124; 48; 193; 148; 194; 146; 116; 110; 250; 203; 109; 168; 4; 86; 46; 87; - 156; 30; 140; 98; 93; 21; 65; 71; 136; 197; 172; 134; 77; 138; 235; 99; 87; - 81; 246; 82; 163; 145; 91; 81; 103; 136; 194; 166; 161; 6; 182; 100; 23; - 124; 212; 209; 136; 114; 81; 139; 65; 224; 64; 17; 84; 114; 209; 246; 172; - 24; 96; 26; 3; 159; 198; 66; 39; 254; 137; 158; 152; 32; 127; 204; 45; 58; - 253; 119; 151; 73; 146; 216; 79; 165; 44; 124; 133; 50; 160; 227; 7; 210; - 100; 216; 121; 162; 41; 126; 166; 12; 29; 237; 3; 4; 46; 236; 234; 133; 139; - 39; 116; 22; 223; 43; 203; 122; 7; 220; 33; 86; 90; 244; 203; 97; 22; 76; - 10; 100; 211; 149; 5; 247; 80; 153; 11; 115; 82; 197; 78; 135; 53; 45; 75; - 201; 141; 111; 36; 152; 207; 200; 230; 197; 206; 53; 192; 22; 250; 70; 203; - 247; 204; 61; 48; 8; 67; 69; 215; 91; 194; 76; 178; 40; 149; 209; 154; 127; - 129; 193; 53; 99; 101; 84; 107; 127; 54; 114; 192; 79; 110; 182; 184; 102; - 131; 173; 128; 115; 0; 120; 58; 19; 42; 121; 231; 21; 33; 147; 196; 133; - 201; 221; 205; 189; 162; 137; 76; 198; 98; 215; 163; 173; 168; 61; 30; 157; - 44; 248; 103; 48; 18; 219; 183; 91; 190; 98; 202; 198; 103; 244; 97; 9; 238; - 82; 25; 33; 214; 33; 236; 4; 112; 71; 213; 155; 119; 96; 35; 24; 210; 224; - 240; 88; 109; 202; 13; 116; 11; 175; 240; 211; 245; 11; 183; 80; 247; 113; - 46; 227; 138; 244; 234; 79; 52; 189; 91; 165; 211; 78; 232; 96; 237; 209; - 80; 63; 155; 72; 237; 0; 229; 26; 38; 237; 42; 199; 6; 57; 247; 0; 225; 136; - 217; 143; 182; 154; 151; 1; 54; 243; 154; 5; 233; 245; 71; 109; 43; 191; - 120; 220; 83; 14; 122; 135; 113; 121; 191; 41; 8; 185; 49; 230; 23; 109; 99; - 68; 68; 94; 147; 104; 39; 24; 46; 197; 5; 77; 245; 74; 74; 90; 154; 45; 99; - 39; 206; 96; 178; 84; 81; 240; 31; 209; 112; 82; 249; 114; 142; 195; 109; - 216; 56; 193; 124; 38; 13; 205; 31; 96; 205; 12; 233; 41; 100; 145; 103; 43; - 219; 255; 234; 135; 209; 133; 130; 169; 100; 168; 208; 216; 187; 251; 180; - 165; 247; 99; 38; 2; 127; 242; 88; 182; 130; 226; 156; 217; 34; 43; 188; 59; - 88; 10; 60; 88; 82; 201; 23; 185; 243; 198; 228; 15; 184; 249; 63; 101; 12; - 60; 223; 188; 215; 167; 13; 155; 14; 214; 84; 171; 182; 238; 160; 67; 135; - 84; 74; 109; 164; 102; 105; 57; 186; 179; 43; 172; 138; 161; 17; 248; 107; - 178; 40; 86; 91; 104; 228; 102; 146; 155; 146; 157; 2; 119; 164; 112; 232; - 95; 135; 87; 35; 50; 198; 58; 143; 203; 251; 245; 236; 244; 212; 217; 32; - 182; 43; 56; 147; 132; 238; 141; 220; 159; 121; 76; 161; 234; 197; 80; 60; - 251; 242; 214; 139; 220; 14; 221; 160; 183; 199; 156; 167; 58; 198; 84; 26; - 159; 141; 44; 43; 3; 11; 174; 251; 103; 41; 96; 7; 225; 156; 111; 42; 194; - 225; 205; 177; 84; 16; 173; 223; 50; 235; 72; 2; 233; 168; 196; 234; 192; - 205; 172; 51; 123; 62; 95; 62; 150; 121; 252; 19; 71; 54; 114; 181; 224; 32; - 53; 6; 147; 150; 19; 254; 3; 234; 136; 124; 207; 127; 67; 188; 89; 201; 211; - 11; 196; 212; 247; 217; 222; 147; 248; 209; 84; 145; 105; 38; 117; 178; 180; - 117; 92; 93; 49; 165; 218; 54; 2; 45; 132; 203; 204; 142; 238; 95; 52; 163; - 200; 240; 34; 237; 219; 57; 125; 97; 90; 151; 115; 16; 218; 117; 99; 249; - 77; 2; 228; 112; 200; 48; 24; 26; 37; 211; 120; 28; 217; 140; 101; 72; 25; - 43; 144; 138; 67; 183; 41; 11; 177; 24; 126; 70; 62; 67; 244; 146; 243; 55; - 111; 24; 107; 86; 31; 161; 185; 25; 14; 98; 214; 209; 31; 138; 183; 15; 34; - 77; 201; 129; 163; 88; 66; 42; 54; 47; 235; 107; 43; 19; 217; 113; 144; 71; - 130; 65; 40; 173; 233; 38; 15; 93; 146; 236; 189; 201; 30; 185; 234; 222; - 242; 138; 244; 200; 91; 230; 75; 40; 112; 110; 163; 235; 127; 72; 120; 52; - 206; 216; 29; 0; 19; 63; 95; 137; 196; 48; 75; 45; 177; 79; 147; 43; 10; - 127; 57; 77; 36; 108; 5; 52; 98; 194; 87; 162; 251; 80; 29; 139; 103; 176; - 222; 58; 130; 212; 123; 245; 138; 83; 166; 110; 220; 176; 194; 62; 167; 29; - 53; 198; 238; 101; 86; 16; 178; 191; 67; 9; 224; 62; 219; 194; 10; 128; 32; - 135; 1; 114; 73; 103; 134; 189; 115; 97; 93; 171; 38; 56; 73; 32; 171; 194; - 9; 178; 32; 75; 179; 127; 192; 42; 52; 158; 84; 147; 61; 55; 33; 8; 34; 216; - 2; 103; 245; 209; 172; 112; 45; 38; 188; 132; 199; 202; 251; 253; 201; 146; - 122; 137; 50; 189; 22; 69; 169; 204; 31; 40; 4; 66; 65; 170; 101; 141; 68; - 98; 93; 165; 22; 178; 183; 195; 89; 216; 44; 97; 78; 198; 44; 153; 73; 222; - 1; 248; 112; 234; 27; 189; 101; 138; 226; 73; 254; 192; 183; 239; 27; 74; - 174; 178; 177; 205; 6; 99; 168; 9; 42; 92; 38; 205; 192; 122; 59; 236; 188; - 1; 140; 67; 238; 43; 130; 59; 199; 251; 192; 37; 181; 12; 83; 233; 63; 149; - 193; 52; 144; 81; 72; 91; 15; 154; 224; 97; 194; 92; 38; 167; 57; 237; 34; - 79; 78; 213; 240; 10; 21; 8; 86; 30; 233; 170; 162; 117; 232; 218; 237; 233; - 178; 33; 244; 146; 233; 125; 107; 29; 83; 188; 49; 113; 249; 128; 169; 77; - 19; 61; 223; 167; 34; 26; 34; 209; 184; 79; 122; 216; 214; 170; 53; 32; 212; - 247; 61; 94; 18; 26; 106; 204; 237; 20; 42; 78; 206; 207; 82; 7; 238; 72; - 223; 183; 8; 236; 6; 243; 250; 255; 195; 196; 89; 84; 185; 42; 11; 113; 5; - 141; 163; 62; 150; 250; 37; 29; 22; 60; 67; 120; 4; 87; 140; 26; 35; 157; - 67; 129; 194; 14; 39; 181; 183; 159; 7; 217; 227; 234; 153; 170; 219; 217; - 3; 43; 108; 37; 245; 3; 44; 125; 164; 83; 123; 117; 24; 15; 121; 121; 88; - 12; 207; 48; 1; 123; 48; 249; 247; 126; 37; 119; 61; 144; 49; 175; 187; 150; - 189; 189; 104; 148; 105; 207; 254; 218; 244; 70; 47; 31; 189; 247; 214; 127; - 164; 20; 1; 239; 124; 127; 179; 71; 74; 218; 253; 31; 211; 133; 87; 144; - 115; 164; 25; 82; 82; 72; 25; 169; 106; 230; 61; 221; 216; 204; 210; 192; - 47; 194; 100; 80; 72; 47; 234; 253; 52; 102; 36; 72; 155; 58; 46; 74; 108; - 78; 28; 62; 41; 225; 18; 81; 146; 75; 19; 110; 55; 160; 93; 161; 220; 181; - 120; 55; 112; 17; 49; 28; 70; 175; 137; 69; 176; 35; 40; 3; 127; 68; 92; 96; - 91; 137; 124; 196; 32; 89; 128; 101; 185; 204; 143; 59; 146; 12; 16; 240; - 231; 119; 239; 226; 2; 101; 37; 1; 0; 238; 179; 174; 168; 206; 109; 167; 36; - 76; 240; 231; 240; 198; 254; 233; 59; 98; 73; 227; 117; 158; 87; 106; 134; - 26; 230; 29; 30; 22; 239; 66; 85; 213; 189; 90; 204; 244; 254; 18; 47; 64; - 199; 192; 223; 178; 34; 69; 10; 7; 164; 201; 64; 127; 110; 208; 16; 104; - 246; 207; 120; 65; 20; 207; 198; 144; 55; 164; 24; 37; 123; 96; 94; 24; 24; - 223; 108; 143; 29; 179; 88; 162; 88; 98; 195; 79; 167; 207; 53; 110; 29; - 230; 102; 79; 255; 179; 225; 247; 213; 205; 108; 171; 172; 103; 80; 20; 207; - 150; 165; 28; 67; 44; 160; 0; 228; 211; 174; 64; 45; 196; 227; 219; 38; 15; - 46; 128; 38; 69; 210; 104; 112; 69; 158; 19; 51; 31; 32; 81; 157; 3; 8; 107; - 127; 82; 253; 6; 0; 124; 1; 100; 73; 177; 24; 168; 164; 37; 46; 176; 14; 34; - 213; 117; 3; 70; 98; 136; 186; 124; 57; 178; 89; 89; 240; 147; 48; 193; 48; - 118; 121; 169; 233; 141; 161; 58; 226; 38; 94; 29; 114; 145; 212; 47; 34; - 58; 108; 110; 118; 32; 211; 57; 35; 231; 121; 19; 200; 251; 195; 21; 120; - 241; 42; 225; 221; 32; 148; 97; 166; 213; 253; 168; 133; 248; 192; 169; 255; - 82; 194; 225; 193; 34; 64; 27; 119; 167; 47; 58; 81; 134; 217; 125; 216; 8; - 207; 212; 249; 113; 155; 172; 245; 179; 131; 162; 30; 27; 195; 107; 208; - 118; 26; 151; 25; 146; 24; 26; 51; 198; 128; 79; 251; 69; 111; 22; 245; 207; - 117; 199; 97; 222; 199; 54; 156; 28; 217; 65; 144; 27; 232; 212; 227; 33; - 254; 189; 131; 107; 124; 22; 49; 175; 114; 117; 157; 58; 47; 81; 38; 158; - 74; 7; 104; 136; 226; 203; 91; 196; 247; 128; 17; 193; 193; 237; 132; 123; - 166; 73; 246; 159; 97; 201; 26; 104; 16; 75; 82; 66; 56; 43; 242; 135; 233; - 156; 238; 59; 52; 104; 80; 200; 80; 98; 74; 132; 113; 157; 252; 17; 177; 8; - 31; 52; 54; 36; 97; 141; 137; 78; 135; 219; 65; 157; 217; 32; 220; 7; 108; - 241; 165; 254; 9; 188; 155; 15; 208; 103; 44; 61; 121; 64; 255; 94; 158; 48; - 226; 235; 70; 56; 38; 45; 26; 227; 73; 99; 139; 53; 253; 211; 155; 0; 183; - 223; 157; 164; 107; 160; 163; 184; 241; 139; 127; 69; 4; 217; 120; 49; 170; - 34; 21; 56; 73; 97; 105; 83; 47; 56; 44; 16; 109; 45; 183; 154; 64; 254; - 218; 39; 242; 70; 182; 145; 51; 200; 232; 108; 48; 36; 5; 245; 112; 254; 69; - 140; 11; 12; 150; 166; 117; 72; 218; 32; 47; 14; 239; 118; 208; 104; 91; - 212; 143; 11; 61; 207; 81; 251; 7; 212; 146; 227; 160; 35; 22; 141; 66; 145; - 20; 149; 200; 32; 73; 242; 98; 162; 12; 99; 63; 200; 7; 240; 5; 184; 212; - 201; 245; 210; 69; 187; 111; 69; 34; 122; 181; 109; 159; 97; 22; 253; 8; - 163; 1; 68; 74; 79; 8; 172; 202; 165; 118; 195; 25; 34; 168; 125; 188; 209; - 67; 70; 222; 184; 222; 198; 56; 189; 96; 45; 89; 129; 29; 56; 76; 42; 236; - 190; 215; 51; 216; 237; 32; 204; 10; 131; 98; 145; 44; 129; 117; 223; 146; - 170; 71; 58; 233; 129; 74; 60; 51; 163; 103; 45; 112; 161; 200; 137; 47; - 154; 54; 74; 58; 13; 232; 141; 124; 29; 122; 19; 99; 21; 160; 237; 120; 138; - 0; 172; 188; 63; 176; 131; 180; 165; 179; 184; 44; 161; 144; 27; 203; 203; - 23; 228; 54; 78; 121; 17; 127; 170; 221; 179; 51; 7; 198; 91; 136; 8; 8; 81; - 63; 13; 2; 168; 230; 192; 29; 20; 36; 157; 238; 239; 63; 119; 60; 247; 89; - 157; 152; 207; 193; 137; 239; 241; 179; 95; 84; 46; 224; 66; 251; 93; 227; - 124; 180; 161; 71; 11; 18; 102; 87; 125; 21; 131; 189; 204; 93; 146; 145; - 148; 128; 204; 34; 83; 32; 161; 60; 228; 214; 144; 63; 24; 127; 229; 40; - 123; 118; 46; 222; 206; 20; 71; 26; 255; 183; 182; 184; 15; 186; 32; 219; - 161; 31; 81; 119; 182; 195; 50; 183; 137; 45; 240; 153; 192; 81; 43; 169; - 241; 165; 156; 72; 173; 117; 56; 79; 34; 171; 50; 73; 47; 118; 252; 199; 27; - 60; 76; 47; 247; 237; 192; 122; 232; 149; 168; 154; 170; 85; 107; 95; 129; - 0; 10; 173; 77; 39; 128; 54; 192; 238; 115; 238; 246; 19; 237; 121; 177; 11; - 17; 105; 109; 82; 198; 165; 12; 134; 3; 134; 195; 40; 137; 228; 245; 89; - 112; 253; 70; 20; 42; 114; 25; 136; 207; 168; 233; 159; 149; 208; 156; 169; - 117; 132; 80; 149; 169; 208; 197; 156; 176; 32; 51; 23; 172; 110; 149; 16; - 27; 51; 4; 207; 142; 98; 188; 221; 208; 169; 24; 177; 188; 152; 43; 128; - 180; 8; 52; 158; 68; 238; 4; 177; 166; 184; 38; 146; 8; 135; 93; 145; 199; - 69; 154; 52; 95; 104; 241; 204; 116; 92; 248; 172; 65; 155; 81; 82; 38; 8; - 129; 49; 115; 182; 71; 177; 173; 17; 237; 42; 201; 153; 15; 180; 236; 52; - 13; 215; 71; 122; 245; 164; 67; 204; 203; 196; 160; 96; 169; 190; 119; 54; - 202; 102; 92; 119; 237; 245; 248; 47; 117; 161; 122; 161; 192; 253; 1; 14; - 2; 217; 222; 17; 4; 231; 239; 202; 9; 120; 14; 137; 108; 140; 14; 227; 109; - 41; 40; 135; 201; 177; 174; 146; 163; 210; 92; 76; 31; 83; 113; 87; 209; 99; - 66; 25; 183; 147; 234; 59; 176; 149; 31; 71; 211; 171; 19; 51; 212; 215; 82; - 5; 123; 63; 126; 225; 226; 112; 147; 189; 236; 91; 14; 178; 29; 15; 18; 123; - 122; 45; 80; 134; 61; 251; 210; 23; 82; 147; 166; 80; 68; 216; 100; 181; 93; - 215; 14; 166; 200; 98; 169; 125; 170; 54; 135; 49; 91; 248; 208; 0; 253; - 132; 124; 119; 46; 20; 139; 151; 98; 192; 168; 5; 71; 100; 2; 244; 199; 18; - 230; 231; 27; 213; 122; 166; 51; 106; 221; 152; 150; 69; 123; 47; 193; 33; - 118; 253; 30; 60; 117; 166; 245; 113; 86; 68; 167; 180; 192; 105; 17; 60; - 178; 5; 116; 82; 31; 151; 205; 199; 168; 81; 72; 199; 123; 56; 168; 169; 82; - 74; 77; 75; 137; 129; 47; 131; 184; 246; 18; 62; 217; 173; 56; 214; 27; 182; - 72; 133; 77; 24; 205; 246; 201; 214; 219; 98; 28; 63; 31; 12; 145; 145; 0; - 31; 143; 46; 44; 225; 242; 191; 224; 79; 223; 164; 56; 116; 146; 238; 10; - 86; 198; 96; 250; 200; 239; 172; 63; 40; 56; 99; 61; 105; 143; 20; 64; 62; - 173; 63; 114; 154; 235; 148; 225; 86; 38; 5; 47; 78; 79; 24; 253; 203; 77; - 47; 139; 225; 130; 196; 177; 141; 111; 64; 228; 30; 25; 127; 44; 13; 99; - 158; 112; 246; 63; 188; 1; 131; 191; 79; 196; 115; 251; 122; 78; 142; 125; - 120; 165; 143; 245; 232; 91; 61; 216; 80; 151; 24; 26; 193; 22; 57; 104; - 133; 8; 208; 6; 229; 239; 164; 105; 45; 1; 189; 100; 246; 120; 19; 175; 57; - 198; 23; 21; 54; 49; 33; 148; 101; 109; 182; 211; 180; 144; 207; 172; 192; - 96; 46; 115; 97; 229; 157; 5; 167; 186; 176; 198; 112; 120; 31; 61; 3; 228; - 70; 217; 38; 205; 97; 65; 88; 162; 124; 210; 114; 160; 177; 242; 187; 4; - 199; 222; 251; 89; 60; 57; 191; 30; 184; 98; 226; 206; 187; 141; 233; 137; - 181; 41; 48; 11; 189; 238; 2; 95; 172; 13; 166; 86; 135; 54; 97; 87; 220; - 171; 235; 106; 47; 224; 23; 125; 15; 206; 76; 45; 63; 25; 127; 240; 220; - 236; 137; 119; 74; 35; 32; 232; 197; 133; 123; 159; 182; 101; 135; 178; 186; - 104; 209; 139; 103; 240; 111; 155; 15; 51; 29; 124; 231; 112; 58; 124; 142; - 175; 176; 81; 109; 95; 58; 82; 178; 120; 113; 182; 13; 210; 118; 96; 209; - 30; 213; 249; 52; 28; 7; 112; 17; 228; 179; 32; 74; 42; 246; 102; 227; 255; - 60; 53; 130; 214; 124; 182; 250; 135; 216; 91; 164; 225; 11; 110; 59; 64; - 186; 50; 106; 132; 42; 0; 96; 110; 233; 18; 16; 146; 217; 67; 9; 220; 59; - 134; 200; 56; 40; 243; 244; 172; 104; 96; 205; 101; 166; 211; 227; 215; 60; - 24; 45; 217; 66; 217; 37; 96; 51; 157; 56; 89; 87; 255; 216; 44; 43; 59; 37; - 240; 62; 48; 80; 70; 74; 207; 176; 107; 209; 171; 119; 197; 21; 65; 107; 73; - 250; 157; 65; 171; 244; 138; 174; 207; 130; 18; 40; 168; 6; 166; 184; 220; - 33; 200; 159; 157; 140; 70; 4; 96; 92; 203; 163; 42; 212; 110; 9; 64; 37; - 156; 47; 238; 18; 76; 77; 91; 18; 171; 29; 163; 148; 129; 208; 195; 11; 186; - 49; 119; 190; 250; 0; 141; 154; 137; 24; 158; 98; 126; 96; 3; 130; 127; 217; - 243; 67; 55; 2; 204; 178; 139; 103; 111; 108; 191; 13; 132; 93; 139; 225; - 159; 48; 13; 56; 110; 112; 199; 101; 225; 185; 166; 45; 176; 110; 171; 32; - 174; 125; 153; 186; 187; 87; 221; 150; 193; 42; 35; 118; 66; 58; 250; 132; - 112; 138; 44; 67; 66; 75; 69; 229; 185; 223; 227; 25; 138; 137; 93; 228; 88; - 156; 33; 0; 159; 190; 209; 235; 109; 161; 206; 119; 241; 31; 203; 126; 68; - 219; 114; 193; 248; 59; 189; 45; 40; 198; 31; 196; 207; 95; 254; 21; 170; - 117; 192; 255; 172; 128; 249; 169; 225; 36; 232; 201; 112; 7; 253; 181; 181; - 69; 154; 217; 97; 207; 36; 121; 58; 27; 233; 132; 9; 134; 137; 62; 62; 48; - 25; 9; 48; 231; 30; 11; 80; 65; 253; 100; 242; 57; 156; 226; 231; 219; 23; - 52; 173; 167; 156; 19; 156; 43; 106; 55; 148; 189; 169; 123; 89; 147; 142; - 27; 233; 160; 64; 152; 136; 104; 52; 215; 18; 23; 225; 123; 9; 254; 171; 74; - 155; 209; 41; 25; 224; 223; 225; 252; 109; 164; 255; 241; 166; 44; 148; 8; - 201; 195; 78; 241; 53; 44; 39; 33; 198; 101; 221; 147; 49; 206; 248; 137; - 43; 231; 187; 192; 37; 161; 86; 51; 16; 77; 131; 254; 28; 46; 61; 169; 25; - 4; 114; 226; 156; 177; 10; 128; 249; 34; 203; 248; 158; 62; 138; 54; 90; 96; - 21; 71; 80; 165; 34; 192; 233; 227; 143; 36; 36; 95; 176; 72; 61; 85; 229; - 38; 118; 100; 205; 22; 244; 19; 172; 253; 110; 154; 221; 159; 2; 66; 65; 73; - 165; 52; 190; 206; 18; 185; 123; 243; 189; 135; 185; 100; 15; 100; 180; 202; - 152; 133; 211; 164; 113; 65; 140; 76; 201; 153; 170; 88; 39; 250; 7; 184; 0; - 176; 111; 111; 0; 35; 146; 83; 218; 173; 221; 145; 210; 251; 171; 209; 75; - 87; 250; 20; 130; 80; 75; 254; 214; 62; 21; 105; 2; 194; 196; 119; 29; 81; - 57; 103; 90; 166; 148; 175; 20; 44; 70; 38; 222; 203; 75; 167; 171; 111; - 236; 96; 249; 34; 214; 3; 208; 83; 187; 21; 26; 70; 101; 201; 243; 188; 136; - 40; 16; 178; 90; 58; 104; 108; 117; 118; 197; 39; 71; 180; 108; 200; 164; - 88; 119; 58; 118; 80; 174; 147; 246; 17; 129; 84; 166; 84; 253; 29; 223; 33; - 174; 29; 101; 94; 17; 243; 144; 140; 36; 18; 148; 244; 231; 141; 95; 209; - 159; 93; 127; 114; 99; 109; 211; 8; 20; 3; 51; 181; 199; 215; 239; 154; 55; - 106; 75; 226; 174; 204; 197; 143; 225; 169; 211; 190; 143; 79; 145; 53; 47; - 51; 30; 82; 215; 238; 42; 77; 36; 63; 21; 150; 46; 67; 40; 144; 58; 142; - 212; 22; 156; 46; 119; 186; 100; 225; 216; 152; 235; 71; 250; 135; 193; 59; - 12; 194; 134; 234; 21; 1; 71; 109; 37; 209; 70; 108; 203; 183; 138; 153; - 136; 1; 102; 58; 181; 50; 120; 215; 3; 186; 111; 144; 206; 129; 13; 69; 2; - 57; 69; 216; 42; 77; 174; 248; 29; 45; 219; 232; 142; 5; 24; 112; 30; 193; - 210; 199; 95; 153; 179; 170; 121; 202; 204; 36; 35; 109; 177; 83; 181; 224; - 202; 178; 102; 77; 38; 35; 118; 101; 202; 235; 51; 237; 186; 125; 200; 74; - 210; 240; 214; 190; 14; 3; 16; 85; 99; 247; 120; 127; 136; 42; 79; 45; 1; - 92; 231; 185; 35; 42; 234; 242; 225; 202; 81; 70; 151; 12; 202; 112; 93; - 103; 115; 50; 182; 47; 245; 3; 68; 134; 11; 37; 167; 11; 33; 100; 156; 2; - 253; 24; 13; 187; 2; 143; 41; 137; 33; 20; 45; 188; 150; 14; 37; 139; 230; - 248; 71; 131; 201; 113; 45; 3; 232; 47; 159; 123; 156; 109; 248; 134; 147; - 88; 99; 221; 164; 133; 58; 225; 118; 145; 105; 97; 87; 125; 170; 78; 149; - 17; 81; 46; 251; 189; 96; 251; 87; 27; 194; 50; 128; 7; 158; 49; 205; 35; - 120; 216; 197; 117; 119; 137; 193; 207; 196; 239; 247; 179; 10; 154; 18; - 251; 84; 72; 113; 195; 56; 114; 65; 157; 196; 18; 105; 55; 232; 255; 51; - 181; 80; 9; 209; 107; 29; 142; 29; 28; 134; 33; 16; 229; 2; 19; 56; 216; 34; - 240; 180; 202; 145; 99; 12; 32; 9; 37; 66; 149; 121; 131; 23; 160; 179; 9; - 63; 238; 213; 170; 143; 208; 109; 98; 159; 20; 112; 235; 238; 188; 0; 186; - 201; 68; 164; 160; 70; 178; 33; 20; 199; 167; 36; 140; 142; 58; 164; 74; - 245; 94; 240; 216; 64; 245; 193; 4; 220; 185; 62; 11; 12; 94; 186; 173; 227; - 156; 164; 72; 68; 80; 181; 42; 236; 93; 15; 111; 38; 39; 210; 46; 36; 8; - 213; 94; 65; 238; 36; 152; 21; 212; 104; 148; 124; 236; 123; 128; 63; 226; - 33; 181; 225; 186; 147; 112; 250; 58; 93; 28; 99; 172; 7; 220; 108; 140; - 223; 249; 113; 81; 97; 88; 176; 226; 115; 157; 216; 121; 160; 114; 93; 225; - 234; 180; 206; 244; 1; 115; 65; 44; 114; 214; 89; 231; 9; 100; 155; 114; - 191; 114; 207; 225; 116; 166; 105; 229; 33; 60; 235; 36; 10; 188; 35; 203; - 186; 78; 210; 103; 1; 57; 28; 63; 53; 186; 59; 142; 245; 39; 97; 67; 106; - 191; 77; 118; 71; 76; 80; 38; 86; 110; 229; 196; 187; 175; 93; 164; 225; - 170; 230; 46; 219; 7; 11; 18; 242; 162; 75; 5; 187; 215; 183; 137; 5; 177; - 174; 206; 185; 226; 190; 237; 192; 243; 200; 186; 232; 63; 105; 203; 18; - 113; 118; 64; 189; 76; 118; 129; 197; 41; 192; 60; 96; 11; 97; 93; 177; 92; - 130; 227; 136; 89; 141; 173; 240; 220; 19; 20; 182; 43; 135; 50; 24; 116; - 108; 236; 142; 123; 176; 124; 210; 44; 120; 64; 202; 228; 189; 103; 233; - 251; 35; 195; 249; 218; 158; 30; 212; 138; 74; 211; 155; 178; 77; 222; 110; - 98; 151; 4; 129; 114; 115; 107; 56; 252; 112; 229; 254; 50; 199; 140; 58; - 218; 65; 1; 139; 218; 89; 131; 150; 200; 10; 253; 95; 151; 85; 168; 50; 177; - 161; 9; 232; 110; 58; 134; 253; 252; 49; 187; 68; 148; 197; 72; 78; 62; 10; - 105; 227; 47; 37; 250; 136; 208; 103; 200; 41; 220; 46; 41; 115; 209; 56; - 30; 189; 19; 181; 73; 97; 105; 216; 76; 43; 211; 183; 170; 216; 129; 215; - 55; 89; 229; 148; 43; 18; 174; 39; 33; 203; 11; 176; 153; 64; 177; 207; 111; - 232; 65; 33; 197; 250; 29; 207; 181; 63; 34; 80; 68; 85; 111; 49; 37; 92; - 50; 172; 119; 145; 101; 215; 152; 11; 3; 189; 164; 136; 79; 182; 24; 208; - 30; 176; 166; 2; 184; 161; 223; 48; 54; 213; 59; 173; 66; 71; 135; 15; 136; - 212; 164; 197; 238; 108; 13; 249; 10; 217; 197; 205; 55; 122; 36; 106; 116; - 246; 154; 123; 43; 189; 184; 49; 213; 81; 91; 252; 55; 53; 9; 5; 80; 109; - 84; 147; 197; 37; 207; 47; 35; 73; 15; 180; 43; 20; 101; 163; 32; 237; 65; - 217; 120; 82; 216; 204; 110; 67; 120; 47; 210; 131; 174; 84; 34; 183; 205; - 191; 123; 46; 208; 34; 197; 226; 228; 240; 191; 81; 51; 30; 104; 69; 79; 3; - 131; 157; 181; 100; 139; 251; 14; 162; 31; 242; 113; 139; 47; 228; 80; 101; - 186; 149; 148; 36; 105; 43; 71; 213; 69; 142; 249; 158; 83; 117; 82; 32; - 166; 161; 182; 123; 110; 131; 142; 60; 65; 215; 33; 79; 170; 178; 92; 143; - 232; 85; 209; 86; 111; 225; 91; 52; 166; 75; 93; 226; 45; 63; 116; 174; 28; - 150; 216; 116; 208; 237; 99; 28; 238; 245; 24; 109; 248; 41; 237; 244; 231; - 91; 197; 189; 151; 8; 177; 58; 102; 121; 210; 186; 76; 205; 31; 215; 160; - 36; 144; 209; 128; 248; 138; 40; 251; 10; 194; 37; 197; 25; 100; 58; 95; 75; - 151; 163; 177; 51; 114; 0; 226; 239; 188; 127; 125; 1; 40; 107; 38; 106; 30; - 239; 250; 22; 159; 115; 213; 196; 104; 108; 134; 44; 118; 3; 27; 188; 47; - 138; 246; 141; 90; 183; 135; 94; 67; 117; 89; 148; 144; 194; 243; 197; 93; - 124; 205; 171; 5; 145; 42; 154; 162; 129; 199; 88; 48; 28; 66; 54; 29; 198; - 128; 215; 212; 216; 220; 150; 209; 156; 79; 104; 55; 123; 106; 216; 151; - 146; 25; 99; 122; 209; 26; 36; 88; 208; 208; 23; 12; 28; 92; 173; 156; 2; - 186; 7; 3; 122; 56; 132; 208; 205; 124; 23; 4; 38; 109; 44; 66; 166; 220; - 189; 64; 130; 148; 80; 61; 21; 174; 119; 198; 104; 251; 180; 193; 192; 169; - 83; 207; 208; 97; 237; 208; 139; 66; 147; 204; 96; 103; 24; 132; 12; 155; - 153; 42; 179; 26; 122; 0; 174; 205; 24; 218; 11; 98; 134; 236; 141; 168; 68; - 202; 144; 129; 132; 202; 147; 53; 167; 154; 132; 94; 154; 24; 19; 146; 205; - 250; 216; 101; 53; 195; 216; 212; 209; 187; 253; 83; 91; 84; 82; 140; 230; - 99; 45; 218; 8; 131; 57; 39; 19; 212; 94; 67; 40; 141; 195; 66; 201; 204; - 120; 50; 96; 243; 80; 189; 239; 3; 218; 121; 26; 171; 7; 187; 85; 51; 140; - 190; 174; 151; 149; 38; 83; 36; 112; 10; 76; 14; 161; 185; 222; 27; 125; - 213; 102; 88; 162; 15; 247; 218; 39; 205; 181; 217; 185; 255; 253; 51; 44; - 73; 69; 41; 44; 87; 190; 48; 205; 214; 69; 199; 127; 199; 251; 174; 186; + 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 231; 32; 114; + 124; 109; 148; 95; 82; 68; 84; 227; 241; 178; 176; 54; 70; 15; 174; 146; + 232; 112; 157; 110; 121; 177; 173; 55; 169; 95; 192; 222; 3; 21; 85; 55; + 198; 28; 39; 28; 109; 20; 79; 202; 164; 196; 136; 37; 70; 57; 252; 90; 229; + 254; 41; 17; 105; 245; 114; 132; 77; 120; 159; 148; 21; 73; 0; 173; 175; 16; + 229; 137; 189; 14; 134; 185; 115; 192; 8; 31; 77; 157; 175; 0; 45; 139; 110; + 113; 7; 20; 151; 133; 143; 246; 133; 214; 112; 62; 145; 64; 215; 5; 57; 16; + 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; 138; 143; 104; 52; 132; 193; + 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; 59; 140; 245; 198; 147; 188; + 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; 66; 61; 100; 152; 72; 11; 39; + 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; 122; 135; 5; 18; 201; 171; + 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; 67; 221; 203; 125; 27; 90; + 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; 180; 66; 96; 165; 153; 138; + 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; 110; 177; 107; 35; 158; 224; + 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; 60; 147; 252; 231; 36; 146; + 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; 225; 101; 154; 166; 90; 46; + 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; 179; 168; 250; 67; 120; 207; + 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; 132; 160; 15; 80; 115; 11; 165; + 62; 177; 245; 26; 112; 101; 210; 252; 164; 232; 31; 97; 86; 125; 186; 193; + 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; 243; 49; 129; 98; 218; 91; 85; + 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; 37; 175; 138; 75; 134; 232; + 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; 244; 248; 128; 154; 27; 78; + 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; 98; 218; 53; 28; 34; 35; 148; + 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; 180; 185; 18; 175; 38; 40; + 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; 96; 86; 113; 137; 126; 50; + 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; 69; 116; 76; 63; 147; 39; + 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; 125; 244; 198; 101; 103; + 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; 33; 3; 145; 14; 104; 9; + 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; 69; 57; 158; 110; 148; + 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; 12; 157; 127; 186; 214; + 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; 20; 0; 213; 135; 160; + 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; 126; 74; 21; 51; 187; + 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; 80; 141; 68; 236; 191; + 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; 41; 133; 130; 42; 129; + 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; 45; 167; 189; 27; 11; + 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; 164; 140; 125; 123; 182; + 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; 83; 69; 32; 231; 92; 8; + 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; 21; 119; 235; 238; 12; 58; + 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; 218; 104; 182; 101; 128; + 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; 2; 103; 50; 172; 133; 1; + 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; 162; 228; 83; 227; 97; + 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; 111; 186; 167; 35; + 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; 157; 224; 23; 83; + 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; 210; 192; 157; + 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; 126; 146; 60; 40; + 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; 154; 164; 62; 5; 71; + 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; 144; 15; 106; 28; 187; + 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; 88; 181; 225; 128; 118; + 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; 14; 50; 161; 36; 144; + 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; 226; 119; 3; 179; 108; + 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; 97; 96; 231; 21; 9; 26; + 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; 139; 120; 113; 163; 184; + 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; 92; 124; 144; 38; 243; + 45; 62; 85; 202; 81; 200; 126; 179; 120; 72; 166; 203; 132; 18; 167; 231; + 209; 136; 50; 25; 228; 181; 230; 131; 136; 154; 90; 236; 16; 242; 76; 246; + 33; 144; 45; 165; 4; 45; 50; 156; 191; 198; 117; 51; 159; 193; 185; 9; 11; + 210; 66; 67; 58; 122; 88; 97; 254; 100; 170; 248; 28; 59; 20; 171; 202; 138; + 150; 125; 124; 134; 159; 41; 39; 9; 39; 142; 37; 84; 95; 117; 9; 24; 234; + 75; 211; 167; 208; 225; 38; 65; 55; 163; 70; 181; 33; 67; 131; 136; 162; 88; + 248; 79; 169; 60; 237; 19; 83; 86; 212; 14; 206; 250; 52; 191; 181; 207; 61; + 92; 245; 113; 179; 234; 201; 165; 60; 101; 10; 143; 33; 133; 209; 69; 122; + 10; 73; 53; 147; 4; 70; 120; 55; 21; 154; 246; 225; 49; 204; 9; 234; 96; 0; + 101; 233; 110; 248; 119; 21; 4; 126; 243; 103; 91; 206; 150; 164; 178; 102; + 150; 151; 86; 189; 216; 146; 84; 255; 208; 44; 89; 74; 41; 236; 60; 80; 178; + 172; 19; 8; 101; 67; 105; 86; 152; 7; 98; 38; 12; 219; 24; 184; 74; 53; 110; + 96; 217; 49; 92; 93; 199; 205; 168; 0; 79; 250; 130; 9; 212; 226; 83; 70; + 205; 43; 225; 23; 157; 182; 171; 29; 235; 249; 114; 86; 252; 83; 232; 175; + 53; 181; 112; 186; 109; 214; 150; 39; 117; 15; 172; 71; 117; 114; 17; 148; + 23; 53; 165; 50; 55; 132; 100; 223; 166; 68; 166; 211; 221; 191; 15; 136; + 89; 101; 59; 112; 165; 26; 58; 173; 64; 37; 133; 203; 104; 100; 76; 142; + 247; 179; 0; 9; 27; 101; 157; 103; 159; 27; 133; 10; 242; 66; 51; 3; 97; + 203; 8; 225; 163; 48; 139; 232; 127; 245; 1; 214; 20; 215; 45; 237; 202; 58; + 31; 55; 49; 173; 22; 200; 190; 15; 40; 237; 227; 239; 230; 216; 91; 89; 217; + 82; 245; 35; 198; 246; 114; 23; 231; 15; 60; 41; 30; 5; 11; 3; 20; 67; 173; + 188; 240; 251; 94; 0; 96; 213; 94; 12; 135; 209; 46; 15; 183; 142; 160; 230; + 132; 208; 51; 144; 31; 32; 112; 102; 123; 206; 225; 90; 58; 76; 149; 250; + 184; 220; 52; 164; 56; 65; 11; 132; 150; 108; 125; 246; 12; 135; 44; 232; + 123; 41; 116; 133; 56; 222; 90; 165; 98; 114; 178; 77; 129; 124; 221; 160; + 61; 201; 228; 117; 248; 186; 77; 41; 185; 113; 167; 130; 50; 185; 96; 196; + 198; 244; 183; 63; 214; 128; 129; 193; 102; 234; 61; 199; 233; 109; 242; + 248; 77; 160; 213; 4; 137; 71; 211; 66; 1; 177; 74; 174; 251; 250; 152; 9; + 93; 85; 99; 172; 200; 246; 4; 177; 144; 47; 65; 74; 172; 90; 8; 41; 201; 58; + 107; 50; 79; 198; 224; 225; 99; 230; 130; 178; 81; 85; 131; 75; 26; 74; 245; + 53; 107; 71; 194; 104; 159; 24; 254; 163; 157; 27; 52; 81; 127; 189; 10; 13; + 58; 96; 70; 174; 211; 225; 50; 201; 137; 128; 99; 189; 152; 135; 57; 145; + 37; 223; 53; 2; 186; 116; 210; 92; 20; 28; 67; 215; 243; 117; 100; 56; 232; + 50; 239; 217; 229; 106; 175; 139; 91; 54; 30; 104; 91; 56; 182; 56; 82; 130; + 225; 101; 125; 22; 193; 41; 73; 35; 232; 173; 119; 160; 171; 236; 77; 152; + 157; 56; 235; 25; 173; 119; 63; 56; 148; 215; 84; 41; 126; 107; 236; 199; + 122; 58; 124; 235; 58; 123; 199; 89; 207; 159; 9; 29; 194; 92; 20; 72; 229; + 215; 40; 204; 146; 193; 53; 69; 1; 126; 36; 72; 229; 193; 231; 128; 238; + 115; 41; 59; 116; 40; 95; 74; 98; 207; 92; 34; 37; 215; 173; 211; 93; 44; + 21; 178; 129; 51; 26; 145; 125; 248; 8; 91; 173; 159; 179; 216; 59; 254; + 153; 71; 107; 96; 5; 111; 98; 169; 123; 23; 146; 158; 254; 159; 225; 202; + 229; 13; 29; 231; 174; 152; 68; 16; 131; 45; 148; 174; 244; 63; 200; 58; 83; + 88; 46; 225; 77; 113; 131; 100; 27; 249; 73; 49; 67; 91; 98; 191; 44; 90; + 101; 220; 181; 173; 179; 39; 40; 99; 18; 132; 250; 135; 216; 248; 73; 171; + 145; 94; 137; 96; 24; 108; 248; 12; 237; 242; 236; 233; 212; 223; 53; 7; 18; + 6; 109; 180; 231; 107; 185; 4; 152; 160; 157; 188; 107; 194; 109; 217; 47; + 230; 226; 115; 94; 81; 170; 73; 84; 99; 91; 237; 58; 130; 198; 11; 159; 196; + 101; 168; 196; 209; 66; 91; 233; 31; 12; 133; 185; 21; 211; 3; 111; 109; + 215; 48; 29; 156; 47; 99; 14; 221; 204; 46; 21; 49; 137; 118; 150; 182; 208; + 81; 88; 122; 99; 168; 107; 183; 223; 82; 57; 239; 14; 160; 73; 125; 211; + 109; 199; 228; 6; 33; 23; 68; 68; 108; 105; 127; 141; 146; 128; 214; 83; + 251; 38; 63; 77; 105; 164; 158; 115; 180; 176; 75; 134; 46; 17; 151; 198; + 16; 222; 95; 190; 125; 39; 196; 147; 100; 162; 126; 173; 25; 173; 79; 93; + 38; 144; 69; 48; 70; 200; 223; 0; 14; 9; 254; 102; 237; 171; 28; 230; 37; 5; + 200; 88; 131; 160; 42; 166; 12; 71; 66; 32; 122; 227; 74; 61; 106; 220; 237; + 17; 59; 166; 211; 100; 116; 239; 6; 8; 85; 175; 155; 191; 3; 4; 102; 88; + 204; 40; 225; 19; 63; 126; 116; 89; 180; 236; 115; 88; 111; 245; 104; 18; + 204; 237; 61; 182; 160; 44; 226; 134; 69; 99; 120; 109; 86; 52; 8; 193; 156; + 159; 164; 55; 22; 81; 196; 155; 168; 213; 86; 142; 188; 219; 210; 127; 127; + 15; 236; 181; 28; 217; 53; 204; 94; 202; 91; 151; 51; 208; 47; 90; 198; 133; + 66; 5; 161; 195; 103; 22; 243; 42; 17; 100; 108; 88; 238; 26; 115; 64; 226; + 10; 104; 42; 178; 147; 71; 243; 165; 251; 20; 212; 247; 133; 105; 22; 70; + 215; 60; 87; 0; 200; 201; 132; 94; 62; 89; 30; 19; 97; 123; 182; 242; 195; + 47; 108; 82; 252; 131; 234; 156; 130; 20; 194; 149; 221; 151; 132; 123; 67; + 255; 167; 181; 78; 170; 48; 78; 116; 108; 139; 232; 133; 60; 97; 93; 12; + 158; 115; 129; 117; 95; 30; 199; 217; 47; 184; 236; 113; 78; 47; 11; 231; + 33; 227; 119; 164; 64; 185; 221; 86; 230; 128; 79; 29; 206; 206; 86; 101; + 191; 126; 123; 93; 83; 196; 59; 252; 5; 221; 222; 175; 82; 174; 179; 184; + 36; 207; 48; 59; 237; 140; 99; 149; 52; 149; 129; 190; 169; 131; 188; 164; + 51; 4; 31; 101; 92; 71; 103; 55; 55; 217; 173; 209; 64; 253; 153; 186; 47; + 39; 208; 244; 150; 111; 22; 7; 179; 174; 59; 240; 21; 82; 240; 99; 67; 153; + 249; 24; 59; 108; 165; 190; 31; 144; 101; 36; 20; 203; 149; 64; 99; 53; 85; + 193; 22; 64; 20; 18; 239; 96; 188; 16; 137; 12; 20; 56; 158; 140; 124; 144; + 48; 87; 144; 245; 107; 138; 91; 65; 225; 241; 120; 167; 15; 126; 167; 195; + 186; 247; 159; 64; 6; 80; 154; 162; 154; 184; 215; 82; 111; 86; 90; 99; 122; + 246; 28; 82; 2; 148; 82; 157; 10; 11; 238; 63; 81; 102; 90; 223; 15; 92; + 231; 152; 143; 206; 7; 225; 191; 136; 134; 97; 212; 237; 44; 56; 113; 126; + 10; 160; 63; 228; 94; 47; 119; 32; 103; 20; 177; 206; 154; 7; 150; 177; 148; + 248; 232; 74; 130; 172; 0; 77; 34; 248; 74; 196; 108; 205; 247; 217; 83; 23; + 0; 52; 219; 61; 150; 45; 35; 105; 60; 88; 56; 151; 180; 218; 135; 222; 29; + 133; 242; 145; 160; 249; 209; 215; 170; 182; 237; 72; 160; 47; 254; 181; 18; + 77; 227; 252; 150; 196; 251; 240; 113; 237; 91; 243; 173; 107; 130; 185; + 115; 97; 197; 40; 255; 97; 114; 4; 210; 111; 32; 177; 111; 249; 118; 155; + 116; 146; 30; 111; 173; 38; 124; 43; 223; 19; 137; 75; 80; 35; 211; 102; 75; + 195; 139; 28; 117; 192; 157; 64; 140; 184; 199; 150; 7; 194; 147; 126; 111; + 5; 174; 166; 174; 4; 246; 90; 31; 153; 156; 228; 190; 241; 81; 35; 193; 102; + 107; 255; 238; 181; 8; 168; 97; 81; 33; 224; 1; 15; 193; 206; 15; 68; 30; + 254; 73; 166; 88; 77; 100; 126; 119; 173; 49; 162; 174; 252; 33; 210; 208; + 127; 136; 90; 28; 68; 2; 243; 17; 197; 131; 113; 170; 1; 73; 69; 78; 36; + 196; 157; 210; 242; 61; 10; 222; 216; 147; 116; 14; 2; 43; 77; 33; 12; 130; + 126; 6; 200; 108; 10; 185; 234; 111; 22; 121; 55; 65; 240; 248; 26; 140; 84; + 183; 177; 8; 180; 153; 98; 36; 124; 122; 15; 206; 57; 217; 6; 30; 249; 176; + 96; 247; 19; 18; 109; 114; 123; 136; 187; 65; 216; 73; 124; 86; 108; 128; + 103; 146; 106; 30; 121; 202; 204; 4; 109; 6; 75; 57; 204; 227; 69; 86; 159; + 166; 210; 140; 120; 160; 134; 182; 149; 92; 210; 247; 57; 170; 224; 128; + 217; 151; 28; 181; 198; 82; 66; 56; 208; 53; 170; 85; 205; 7; 147; 244; 67; + 125; 98; 195; 138; 183; 207; 54; 189; 86; 84; 169; 20; 13; 193; 25; 197; 42; + 144; 250; 181; 148; 180; 116; 244; 234; 90; 122; 248; 169; 130; 131; 175; + 230; 148; 224; 155; 135; 177; 109; 234; 13; 171; 229; 68; 115; 84; 191; 102; + 170; 9; 67; 27; 143; 136; 88; 18; 218; 47; 75; 86; 253; 179; 210; 135; 94; + 221; 177; 131; 84; 136; 120; 44; 91; 122; 121; 168; 214; 116; 235; 186; 21; + 50; 23; 196; 250; 241; 92; 245; 126; 197; 5; 139; 60; 90; 31; 0; 41; 251; + 204; 234; 82; 135; 204; 215; 10; 207; 8; 52; 121; 98; 19; 21; 82; 148; 61; + 150; 25; 3; 23; 15; 235; 102; 148; 61; 136; 250; 178; 51; 168; 120; 60; 0; + 117; 167; 127; 58; 9; 190; 215; 22; 58; 230; 125; 16; 229; 207; 50; 243; + 154; 220; 255; 119; 163; 127; 103; 11; 68; 24; 191; 213; 112; 3; 20; 163; + 164; 25; 43; 37; 106; 134; 18; 169; 96; 68; 96; 233; 184; 222; 211; 120; + 119; 4; 216; 63; 127; 45; 94; 138; 191; 49; 30; 208; 103; 62; 101; 123; 194; + 6; 138; 3; 123; 243; 144; 105; 211; 213; 25; 217; 158; 242; 185; 78; 219; + 187; 174; 19; 82; 53; 145; 185; 76; 5; 234; 8; 199; 86; 14; 38; 114; 127; + 213; 222; 88; 119; 61; 65; 233; 173; 157; 231; 120; 125; 230; 41; 151; 213; + 249; 87; 242; 230; 167; 122; 227; 14; 145; 219; 89; 156; 3; 158; 187; 91; + 27; 161; 106; 139; 212; 15; 91; 38; 83; 109; 218; 136; 169; 191; 147; 49; + 130; 96; 137; 40; 126; 213; 97; 50; 201; 138; 215; 67; 129; 92; 58; 45; 148; + 242; 121; 233; 141; 200; 182; 37; 47; 218; 151; 105; 1; 242; 172; 234; 167; + 27; 37; 228; 180; 78; 239; 135; 79; 180; 9; 165; 125; 106; 188; 27; 171; + 144; 125; 254; 107; 1; 167; 131; 166; 204; 154; 109; 11; 197; 242; 77; 95; + 80; 144; 170; 53; 228; 204; 95; 13; 97; 107; 150; 255; 152; 97; 68; 13; 161; + 25; 151; 195; 179; 150; 244; 163; 7; 26; 50; 37; 78; 143; 24; 170; 206; 17; + 240; 27; 117; 167; 213; 152; 148; 125; 160; 216; 141; 80; 31; 22; 237; 25; + 202; 230; 220; 135; 214; 44; 10; 86; 77; 207; 100; 134; 196; 104; 53; 127; + 56; 58; 128; 34; 82; 233; 65; 135; 252; 83; 86; 89; 177; 218; 59; 72; 73; + 250; 52; 135; 20; 15; 120; 250; 224; 52; 5; 54; 112; 11; 111; 16; 189; 7; + 227; 227; 111; 119; 16; 34; 254; 160; 230; 221; 9; 193; 134; 50; 246; 128; + 218; 180; 10; 77; 207; 214; 224; 127; 48; 248; 69; 62; 72; 130; 164; 157; + 111; 174; 105; 82; 0; 5; 122; 135; 247; 156; 144; 82; 112; 28; 212; 152; 78; + 135; 226; 125; 238; 50; 96; 12; 126; 185; 233; 98; 195; 20; 138; 163; 96; + 106; 222; 220; 129; 87; 64; 168; 122; 170; 234; 213; 125; 33; 176; 30; 142; + 36; 208; 196; 183; 157; 82; 191; 116; 77; 225; 151; 118; 224; 84; 35; 86; + 60; 23; 155; 106; 30; 101; 73; 90; 121; 31; 194; 167; 127; 200; 14; 140; + 190; 185; 31; 223; 139; 130; 2; 10; 227; 248; 231; 186; 0; 108; 79; 108; + 173; 29; 153; 99; 73; 10; 246; 246; 93; 110; 138; 5; 7; 127; 246; 49; 219; + 196; 2; 235; 233; 43; 251; 188; 16; 137; 253; 37; 237; 180; 221; 92; 92; 31; + 19; 200; 70; 206; 155; 203; 160; 19; 28; 178; 51; 49; 142; 125; 8; 248; 146; + 6; 54; 247; 99; 113; 210; 55; 198; 220; 244; 99; 89; 234; 101; 32; 230; 164; + 37; 217; 96; 193; 90; 46; 247; 155; 101; 91; 140; 227; 94; 176; 185; 175; + 154; 199; 19; 26; 7; 78; 45; 157; 191; 10; 41; 51; 233; 109; 110; 238; 142; + 23; 151; 16; 174; 23; 171; 59; 28; 176; 183; 202; 199; 22; 178; 154; 28; + 204; 195; 187; 7; 116; 211; 101; 125; 213; 88; 74; 80; 80; 71; 116; 82; 144; + 41; 26; 19; 107; 96; 242; 9; 190; 70; 67; 116; 68; 125; 232; 64; 37; 43; + 181; 21; 212; 218; 72; 29; 62; 96; 59; 161; 24; 138; 58; 124; 247; 189; 205; + 47; 193; 40; 183; 78; 174; 145; 102; 124; 89; 76; 35; 126; 200; 180; 133; + 10; 61; 157; 136; 100; 231; 250; 74; 53; 12; 201; 226; 218; 29; 158; 106; + 12; 7; 30; 135; 10; 137; 137; 188; 75; 153; 181; 1; 51; 96; 66; 221; 91; 58; + 174; 107; 115; 60; 158; 213; 25; 226; 173; 97; 13; 100; 212; 133; 38; 15; + 48; 231; 62; 183; 214; 125; 158; 228; 85; 210; 245; 172; 30; 11; 97; 92; 17; + 22; 128; 202; 135; 225; 146; 93; 151; 153; 60; 194; 37; 145; 151; 98; 87; + 129; 19; 24; 117; 30; 132; 71; 121; 250; 67; 215; 70; 156; 99; 89; 250; 198; + 229; 116; 43; 5; 227; 29; 94; 6; 161; 48; 144; 184; 207; 162; 198; 71; 125; + 224; 214; 240; 142; 20; 208; 218; 63; 60; 111; 84; 145; 154; 116; 62; 157; + 87; 129; 187; 38; 16; 98; 236; 113; 128; 236; 201; 52; 141; 245; 140; 20; + 39; 240; 52; 121; 246; 146; 164; 70; 169; 10; 132; 246; 190; 132; 153; 70; + 84; 24; 97; 137; 42; 188; 161; 92; 212; 187; 93; 189; 30; 250; 242; 63; 109; + 117; 228; 154; 125; 47; 87; 226; 127; 72; 243; 136; 187; 69; 195; 86; 141; + 168; 96; 105; 109; 11; 209; 159; 185; 161; 174; 78; 173; 235; 143; 39; 102; + 57; 147; 140; 31; 104; 170; 177; 152; 12; 41; 32; 156; 148; 33; 140; 82; 60; + 157; 33; 145; 82; 17; 57; 123; 103; 156; 254; 2; 221; 4; 65; 42; 66; 36; 17; + 94; 191; 178; 114; 181; 58; 163; 152; 51; 12; 250; 161; 102; 182; 82; 250; + 1; 97; 203; 148; 213; 83; 175; 175; 0; 59; 134; 44; 184; 106; 9; 219; 6; 78; + 33; 129; 53; 79; 228; 12; 201; 182; 168; 33; 245; 42; 158; 64; 42; 193; 36; + 101; 129; 164; 252; 142; 164; 181; 101; 1; 118; 106; 132; 160; 116; 164; + 144; 241; 192; 124; 47; 205; 132; 249; 239; 18; 143; 43; 170; 88; 6; 41; 94; + 105; 184; 200; 254; 191; 217; 103; 27; 89; 250; 155; 180; 128; 28; 13; 47; + 49; 138; 236; 243; 171; 94; 81; 121; 89; 136; 28; 240; 158; 192; 51; 112; + 114; 203; 123; 143; 202; 199; 46; 224; 61; 93; 181; 24; 159; 113; 179; 185; + 153; 30; 100; 140; 161; 250; 229; 101; 228; 237; 5; 159; 194; 54; 17; 8; 97; + 139; 18; 48; 112; 134; 79; 155; 72; 239; 146; 235; 58; 45; 16; 50; 210; 97; + 168; 22; 97; 180; 83; 98; 225; 36; 170; 11; 25; 231; 171; 126; 61; 191; 190; + 108; 73; 186; 251; 245; 73; 212; 207; 91; 138; 16; 154; 148; 48; 235; 115; + 100; 188; 112; 221; 64; 220; 28; 13; 124; 48; 193; 148; 194; 146; 116; 110; + 250; 203; 109; 168; 4; 86; 46; 87; 156; 30; 140; 98; 93; 21; 65; 71; 136; + 197; 172; 134; 77; 138; 235; 99; 87; 81; 246; 82; 163; 145; 91; 81; 103; + 136; 194; 166; 161; 6; 182; 100; 23; 124; 212; 209; 136; 114; 81; 139; 65; + 224; 64; 17; 84; 114; 209; 246; 172; 24; 96; 26; 3; 159; 198; 66; 39; 254; + 137; 158; 152; 32; 127; 204; 45; 58; 253; 119; 151; 73; 146; 216; 79; 165; + 44; 124; 133; 50; 160; 227; 7; 210; 100; 216; 121; 162; 41; 126; 166; 12; + 29; 237; 3; 4; 46; 236; 234; 133; 139; 39; 116; 22; 223; 43; 203; 122; 7; + 220; 33; 86; 90; 244; 203; 97; 22; 76; 10; 100; 211; 149; 5; 247; 80; 153; + 11; 115; 82; 197; 78; 135; 53; 45; 75; 201; 141; 111; 36; 152; 207; 200; + 230; 197; 206; 53; 192; 22; 250; 70; 203; 247; 204; 61; 48; 8; 67; 69; 215; + 91; 194; 76; 178; 40; 149; 209; 154; 127; 129; 193; 53; 99; 101; 84; 107; + 127; 54; 114; 192; 79; 110; 182; 184; 102; 131; 173; 128; 115; 0; 120; 58; + 19; 42; 121; 231; 21; 33; 147; 196; 133; 201; 221; 205; 189; 162; 137; 76; + 198; 98; 215; 163; 173; 168; 61; 30; 157; 44; 248; 103; 48; 18; 219; 183; + 91; 190; 98; 202; 198; 103; 244; 97; 9; 238; 82; 25; 33; 214; 33; 236; 4; + 112; 71; 213; 155; 119; 96; 35; 24; 210; 224; 240; 88; 109; 202; 13; 116; + 11; 175; 240; 211; 245; 11; 183; 80; 247; 113; 46; 227; 138; 244; 234; 79; + 52; 189; 91; 165; 211; 78; 232; 96; 237; 209; 80; 63; 155; 72; 237; 0; 229; + 26; 38; 237; 42; 199; 6; 57; 247; 0; 225; 136; 217; 143; 182; 154; 151; 1; + 54; 243; 154; 5; 233; 245; 71; 109; 43; 191; 120; 220; 83; 14; 122; 135; + 113; 121; 191; 41; 8; 185; 49; 230; 23; 109; 99; 68; 68; 94; 147; 104; 39; + 24; 46; 197; 5; 77; 245; 74; 74; 90; 154; 45; 99; 39; 206; 96; 178; 84; 81; + 240; 31; 209; 112; 82; 249; 114; 142; 195; 109; 216; 56; 193; 124; 38; 13; + 205; 31; 96; 205; 12; 233; 41; 100; 145; 103; 43; 219; 255; 234; 135; 209; + 133; 130; 169; 100; 168; 208; 216; 187; 251; 180; 165; 247; 99; 38; 2; 127; + 242; 88; 182; 130; 226; 156; 217; 34; 43; 188; 59; 88; 10; 60; 88; 82; 201; + 23; 185; 243; 198; 228; 15; 184; 249; 63; 101; 12; 60; 223; 188; 215; 167; + 13; 155; 14; 214; 84; 171; 182; 238; 160; 67; 135; 84; 74; 109; 164; 102; + 105; 57; 186; 179; 43; 172; 138; 161; 17; 248; 107; 178; 40; 86; 91; 104; + 228; 102; 146; 155; 146; 157; 2; 119; 164; 112; 232; 95; 135; 87; 35; 50; + 198; 58; 143; 203; 251; 245; 236; 244; 212; 217; 32; 182; 43; 56; 147; 132; + 238; 141; 220; 159; 121; 76; 161; 234; 197; 80; 60; 251; 242; 214; 139; 220; + 14; 221; 160; 183; 199; 156; 167; 58; 198; 84; 26; 159; 141; 44; 43; 3; 11; + 174; 251; 103; 41; 96; 7; 225; 156; 111; 42; 194; 225; 205; 177; 84; 16; + 173; 223; 50; 235; 72; 2; 233; 168; 196; 234; 192; 205; 172; 51; 123; 62; + 95; 62; 150; 121; 252; 19; 71; 54; 114; 181; 224; 32; 53; 6; 147; 150; 19; + 254; 3; 234; 136; 124; 207; 127; 67; 188; 89; 201; 211; 11; 196; 212; 247; + 217; 222; 147; 248; 209; 84; 145; 105; 38; 117; 178; 180; 117; 92; 93; 49; + 165; 218; 54; 2; 45; 132; 203; 204; 142; 238; 95; 52; 163; 200; 240; 34; + 237; 219; 57; 125; 97; 90; 151; 115; 16; 218; 117; 99; 249; 77; 2; 228; 112; + 200; 48; 24; 26; 37; 211; 120; 28; 217; 140; 101; 72; 25; 43; 144; 138; 67; + 183; 41; 11; 177; 24; 126; 70; 62; 67; 244; 146; 243; 55; 111; 24; 107; 86; + 31; 161; 185; 25; 14; 98; 214; 209; 31; 138; 183; 15; 34; 77; 201; 129; 163; + 88; 66; 42; 54; 47; 235; 107; 43; 19; 217; 113; 144; 71; 130; 65; 40; 173; + 233; 38; 15; 93; 146; 236; 189; 201; 30; 185; 234; 222; 242; 138; 244; 200; + 91; 230; 75; 40; 112; 110; 163; 235; 127; 72; 120; 52; 206; 216; 29; 0; 19; + 63; 95; 137; 196; 48; 75; 45; 177; 79; 147; 43; 10; 127; 57; 77; 36; 108; 5; + 52; 98; 194; 87; 162; 251; 80; 29; 139; 103; 176; 222; 58; 130; 212; 123; + 245; 138; 83; 166; 110; 220; 176; 194; 62; 167; 29; 53; 198; 238; 101; 86; + 16; 178; 191; 67; 9; 224; 62; 219; 194; 10; 128; 32; 135; 1; 114; 73; 103; + 134; 189; 115; 97; 93; 171; 38; 56; 73; 32; 171; 194; 9; 178; 32; 75; 179; + 127; 192; 42; 52; 158; 84; 147; 61; 55; 33; 8; 34; 216; 2; 103; 245; 209; + 172; 112; 45; 38; 188; 132; 199; 202; 251; 253; 201; 146; 122; 137; 50; 189; + 22; 69; 169; 204; 31; 40; 4; 66; 65; 170; 101; 141; 68; 98; 93; 165; 22; + 178; 183; 195; 89; 216; 44; 97; 78; 198; 44; 153; 73; 222; 1; 248; 112; 234; + 27; 189; 101; 138; 226; 73; 254; 192; 183; 239; 27; 74; 174; 178; 177; 205; + 6; 99; 168; 9; 42; 92; 38; 205; 192; 122; 59; 236; 188; 1; 140; 67; 238; 43; + 130; 59; 199; 251; 192; 37; 181; 12; 83; 233; 63; 149; 193; 52; 144; 81; 72; + 91; 15; 154; 224; 97; 194; 92; 38; 167; 57; 237; 34; 79; 78; 213; 240; 10; + 21; 8; 86; 30; 233; 170; 162; 117; 232; 218; 237; 233; 178; 33; 244; 146; + 233; 125; 107; 29; 83; 188; 49; 113; 249; 128; 169; 77; 19; 61; 223; 167; + 34; 26; 34; 209; 184; 79; 122; 216; 214; 170; 53; 32; 212; 247; 61; 94; 18; + 26; 106; 204; 237; 20; 42; 78; 206; 207; 82; 7; 238; 72; 223; 183; 8; 236; + 6; 243; 250; 255; 195; 196; 89; 84; 185; 42; 11; 113; 5; 141; 163; 62; 150; + 250; 37; 29; 22; 60; 67; 120; 4; 87; 140; 26; 35; 157; 67; 129; 194; 14; 39; + 181; 183; 159; 7; 217; 227; 234; 153; 170; 219; 217; 3; 43; 108; 37; 245; 3; + 44; 125; 164; 83; 123; 117; 24; 15; 121; 121; 88; 12; 207; 48; 1; 123; 48; + 249; 247; 126; 37; 119; 61; 144; 49; 175; 187; 150; 189; 189; 104; 148; 105; + 207; 254; 218; 244; 70; 47; 31; 189; 247; 214; 127; 164; 20; 1; 239; 124; + 127; 179; 71; 74; 218; 253; 31; 211; 133; 87; 144; 115; 164; 25; 82; 82; 72; + 25; 169; 106; 230; 61; 221; 216; 204; 210; 192; 47; 194; 100; 80; 72; 47; + 234; 253; 52; 102; 36; 72; 155; 58; 46; 74; 108; 78; 28; 62; 41; 225; 18; + 81; 146; 75; 19; 110; 55; 160; 93; 161; 220; 181; 120; 55; 112; 17; 49; 28; + 70; 175; 137; 69; 176; 35; 40; 3; 127; 68; 92; 96; 91; 137; 124; 196; 32; + 89; 128; 101; 185; 204; 143; 59; 146; 12; 16; 240; 231; 119; 239; 226; 2; + 101; 37; 1; 0; 238; 179; 174; 168; 206; 109; 167; 36; 76; 240; 231; 240; + 198; 254; 233; 59; 98; 73; 227; 117; 158; 87; 106; 134; 26; 230; 29; 30; 22; + 239; 66; 85; 213; 189; 90; 204; 244; 254; 18; 47; 64; 199; 192; 223; 178; + 34; 69; 10; 7; 164; 201; 64; 127; 110; 208; 16; 104; 246; 207; 120; 65; 20; + 207; 198; 144; 55; 164; 24; 37; 123; 96; 94; 24; 24; 223; 108; 143; 29; 179; + 88; 162; 88; 98; 195; 79; 167; 207; 53; 110; 29; 230; 102; 79; 255; 179; + 225; 247; 213; 205; 108; 171; 172; 103; 80; 20; 207; 150; 165; 28; 67; 44; + 160; 0; 228; 211; 174; 64; 45; 196; 227; 219; 38; 15; 46; 128; 38; 69; 210; + 104; 112; 69; 158; 19; 51; 31; 32; 81; 157; 3; 8; 107; 127; 82; 253; 6; 0; + 124; 1; 100; 73; 177; 24; 168; 164; 37; 46; 176; 14; 34; 213; 117; 3; 70; + 98; 136; 186; 124; 57; 178; 89; 89; 240; 147; 48; 193; 48; 118; 121; 169; + 233; 141; 161; 58; 226; 38; 94; 29; 114; 145; 212; 47; 34; 58; 108; 110; + 118; 32; 211; 57; 35; 231; 121; 19; 200; 251; 195; 21; 120; 241; 42; 225; + 221; 32; 148; 97; 166; 213; 253; 168; 133; 248; 192; 169; 255; 82; 194; 225; + 193; 34; 64; 27; 119; 167; 47; 58; 81; 134; 217; 125; 216; 8; 207; 212; 249; + 113; 155; 172; 245; 179; 131; 162; 30; 27; 195; 107; 208; 118; 26; 151; 25; + 146; 24; 26; 51; 198; 128; 79; 251; 69; 111; 22; 245; 207; 117; 199; 97; + 222; 199; 54; 156; 28; 217; 65; 144; 27; 232; 212; 227; 33; 254; 189; 131; + 107; 124; 22; 49; 175; 114; 117; 157; 58; 47; 81; 38; 158; 74; 7; 104; 136; + 226; 203; 91; 196; 247; 128; 17; 193; 193; 237; 132; 123; 166; 73; 246; 159; + 97; 201; 26; 104; 16; 75; 82; 66; 56; 43; 242; 135; 233; 156; 238; 59; 52; + 104; 80; 200; 80; 98; 74; 132; 113; 157; 252; 17; 177; 8; 31; 52; 54; 36; + 97; 141; 137; 78; 135; 219; 65; 157; 217; 32; 220; 7; 108; 241; 165; 254; 9; + 188; 155; 15; 208; 103; 44; 61; 121; 64; 255; 94; 158; 48; 226; 235; 70; 56; + 38; 45; 26; 227; 73; 99; 139; 53; 253; 211; 155; 0; 183; 223; 157; 164; 107; + 160; 163; 184; 241; 139; 127; 69; 4; 217; 120; 49; 170; 34; 21; 56; 73; 97; + 105; 83; 47; 56; 44; 16; 109; 45; 183; 154; 64; 254; 218; 39; 242; 70; 182; + 145; 51; 200; 232; 108; 48; 36; 5; 245; 112; 254; 69; 140; 11; 12; 150; 166; + 117; 72; 218; 32; 47; 14; 239; 118; 208; 104; 91; 212; 143; 11; 61; 207; 81; + 251; 7; 212; 146; 227; 160; 35; 22; 141; 66; 145; 20; 149; 200; 32; 73; 242; + 98; 162; 12; 99; 63; 200; 7; 240; 5; 184; 212; 201; 245; 210; 69; 187; 111; + 69; 34; 122; 181; 109; 159; 97; 22; 253; 8; 163; 1; 68; 74; 79; 8; 172; 202; + 165; 118; 195; 25; 34; 168; 125; 188; 209; 67; 70; 222; 184; 222; 198; 56; + 189; 96; 45; 89; 129; 29; 56; 76; 42; 236; 190; 215; 51; 216; 237; 32; 204; + 10; 131; 98; 145; 44; 129; 117; 223; 146; 170; 71; 58; 233; 129; 74; 60; 51; + 163; 103; 45; 112; 161; 200; 137; 47; 154; 54; 74; 58; 13; 232; 141; 124; + 29; 122; 19; 99; 21; 160; 237; 120; 138; 0; 172; 188; 63; 176; 131; 180; + 165; 179; 184; 44; 161; 144; 27; 203; 203; 23; 228; 54; 78; 121; 17; 127; + 170; 221; 179; 51; 7; 198; 91; 136; 8; 8; 81; 63; 13; 2; 168; 230; 192; 29; + 20; 36; 157; 238; 239; 63; 119; 60; 247; 89; 157; 152; 207; 193; 137; 239; + 241; 179; 95; 84; 46; 224; 66; 251; 93; 227; 124; 180; 161; 71; 11; 18; 102; + 87; 125; 21; 131; 189; 204; 93; 146; 145; 148; 128; 204; 34; 83; 32; 161; + 60; 228; 214; 144; 63; 24; 127; 229; 40; 123; 118; 46; 222; 206; 20; 71; 26; + 255; 183; 182; 184; 15; 186; 32; 219; 161; 31; 81; 119; 182; 195; 50; 183; + 137; 45; 240; 153; 192; 81; 43; 169; 241; 165; 156; 72; 173; 117; 56; 79; + 34; 171; 50; 73; 47; 118; 252; 199; 27; 60; 76; 47; 247; 237; 192; 122; 232; + 149; 168; 154; 170; 85; 107; 95; 129; 0; 10; 173; 77; 39; 128; 54; 192; 238; + 115; 238; 246; 19; 237; 121; 177; 11; 17; 105; 109; 82; 198; 165; 12; 134; + 3; 134; 195; 40; 137; 228; 245; 89; 112; 253; 70; 20; 42; 114; 25; 136; 207; + 168; 233; 159; 149; 208; 156; 169; 117; 132; 80; 149; 169; 208; 197; 156; + 176; 32; 51; 23; 172; 110; 149; 16; 27; 51; 4; 207; 142; 98; 188; 221; 208; + 169; 24; 177; 188; 152; 43; 128; 180; 8; 52; 158; 68; 238; 4; 177; 166; 184; + 38; 146; 8; 135; 93; 145; 199; 69; 154; 52; 95; 104; 241; 204; 116; 92; 248; + 172; 65; 155; 81; 82; 38; 8; 129; 49; 115; 182; 71; 177; 173; 17; 237; 42; + 201; 153; 15; 180; 236; 52; 13; 215; 71; 122; 245; 164; 67; 204; 203; 196; + 160; 96; 169; 190; 119; 54; 202; 102; 92; 119; 237; 245; 248; 47; 117; 161; + 122; 161; 192; 253; 1; 14; 2; 217; 222; 17; 4; 231; 239; 202; 9; 120; 14; + 137; 108; 140; 14; 227; 109; 41; 40; 135; 201; 177; 174; 146; 163; 210; 92; + 76; 31; 83; 113; 87; 209; 99; 66; 25; 183; 147; 234; 59; 176; 149; 31; 71; + 211; 171; 19; 51; 212; 215; 82; 5; 123; 63; 126; 225; 226; 112; 147; 189; + 236; 91; 14; 178; 29; 15; 18; 123; 122; 45; 80; 134; 61; 251; 210; 23; 82; + 147; 166; 80; 68; 216; 100; 181; 93; 215; 14; 166; 200; 98; 169; 125; 170; + 54; 135; 49; 91; 248; 208; 0; 253; 132; 124; 119; 46; 20; 139; 151; 98; 192; + 168; 5; 71; 100; 2; 244; 199; 18; 230; 231; 27; 213; 122; 166; 51; 106; 221; + 152; 150; 69; 123; 47; 193; 33; 118; 253; 30; 60; 117; 166; 245; 113; 86; + 68; 167; 180; 192; 105; 17; 60; 178; 5; 116; 82; 31; 151; 205; 199; 168; 81; + 72; 199; 123; 56; 168; 169; 82; 74; 77; 75; 137; 129; 47; 131; 184; 246; 18; + 62; 217; 173; 56; 214; 27; 182; 72; 133; 77; 24; 205; 246; 201; 214; 219; + 98; 28; 63; 31; 12; 145; 145; 0; 31; 143; 46; 44; 225; 242; 191; 224; 79; + 223; 164; 56; 116; 146; 238; 10; 86; 198; 96; 250; 200; 239; 172; 63; 40; + 56; 99; 61; 105; 143; 20; 64; 62; 173; 63; 114; 154; 235; 148; 225; 86; 38; + 5; 47; 78; 79; 24; 253; 203; 77; 47; 139; 225; 130; 196; 177; 141; 111; 64; + 228; 30; 25; 127; 44; 13; 99; 158; 112; 246; 63; 188; 1; 131; 191; 79; 196; + 115; 251; 122; 78; 142; 125; 120; 165; 143; 245; 232; 91; 61; 216; 80; 151; + 24; 26; 193; 22; 57; 104; 133; 8; 208; 6; 229; 239; 164; 105; 45; 1; 189; + 100; 246; 120; 19; 175; 57; 198; 23; 21; 54; 49; 33; 148; 101; 109; 182; + 211; 180; 144; 207; 172; 192; 96; 46; 115; 97; 229; 157; 5; 167; 186; 176; + 198; 112; 120; 31; 61; 3; 228; 70; 217; 38; 205; 97; 65; 88; 162; 124; 210; + 114; 160; 177; 242; 187; 4; 199; 222; 251; 89; 60; 57; 191; 30; 184; 98; + 226; 206; 187; 141; 233; 137; 181; 41; 48; 11; 189; 238; 2; 95; 172; 13; + 166; 86; 135; 54; 97; 87; 220; 171; 235; 106; 47; 224; 23; 125; 15; 206; 76; + 45; 63; 25; 127; 240; 220; 236; 137; 119; 74; 35; 32; 232; 197; 133; 123; + 159; 182; 101; 135; 178; 186; 104; 209; 139; 103; 240; 111; 155; 15; 51; 29; + 124; 231; 112; 58; 124; 142; 175; 176; 81; 109; 95; 58; 82; 178; 120; 113; + 182; 13; 210; 118; 96; 209; 30; 213; 249; 52; 28; 7; 112; 17; 228; 179; 32; + 74; 42; 246; 102; 227; 255; 60; 53; 130; 214; 124; 182; 250; 135; 216; 91; + 164; 225; 11; 110; 59; 64; 186; 50; 106; 132; 42; 0; 96; 110; 233; 18; 16; + 146; 217; 67; 9; 220; 59; 134; 200; 56; 40; 243; 244; 172; 104; 96; 205; + 101; 166; 211; 227; 215; 60; 24; 45; 217; 66; 217; 37; 96; 51; 157; 56; 89; + 87; 255; 216; 44; 43; 59; 37; 240; 62; 48; 80; 70; 74; 207; 176; 107; 209; + 171; 119; 197; 21; 65; 107; 73; 250; 157; 65; 171; 244; 138; 174; 207; 130; + 18; 40; 168; 6; 166; 184; 220; 33; 200; 159; 157; 140; 70; 4; 96; 92; 203; + 163; 42; 212; 110; 9; 64; 37; 156; 47; 238; 18; 76; 77; 91; 18; 171; 29; + 163; 148; 129; 208; 195; 11; 186; 49; 119; 190; 250; 0; 141; 154; 137; 24; + 158; 98; 126; 96; 3; 130; 127; 217; 243; 67; 55; 2; 204; 178; 139; 103; 111; + 108; 191; 13; 132; 93; 139; 225; 159; 48; 13; 56; 110; 112; 199; 101; 225; + 185; 166; 45; 176; 110; 171; 32; 174; 125; 153; 186; 187; 87; 221; 150; 193; + 42; 35; 118; 66; 58; 250; 132; 112; 138; 44; 67; 66; 75; 69; 229; 185; 223; + 227; 25; 138; 137; 93; 228; 88; 156; 33; 0; 159; 190; 209; 235; 109; 161; + 206; 119; 241; 31; 203; 126; 68; 219; 114; 193; 248; 59; 189; 45; 40; 198; + 31; 196; 207; 95; 254; 21; 170; 117; 192; 255; 172; 128; 249; 169; 225; 36; + 232; 201; 112; 7; 253; 181; 181; 69; 154; 217; 97; 207; 36; 121; 58; 27; + 233; 132; 9; 134; 137; 62; 62; 48; 25; 9; 48; 231; 30; 11; 80; 65; 253; 100; + 242; 57; 156; 226; 231; 219; 23; 52; 173; 167; 156; 19; 156; 43; 106; 55; + 148; 189; 169; 123; 89; 147; 142; 27; 233; 160; 64; 152; 136; 104; 52; 215; + 18; 23; 225; 123; 9; 254; 171; 74; 155; 209; 41; 25; 224; 223; 225; 252; + 109; 164; 255; 241; 166; 44; 148; 8; 201; 195; 78; 241; 53; 44; 39; 33; 198; + 101; 221; 147; 49; 206; 248; 137; 43; 231; 187; 192; 37; 161; 86; 51; 16; + 77; 131; 254; 28; 46; 61; 169; 25; 4; 114; 226; 156; 177; 10; 128; 249; 34; + 203; 248; 158; 62; 138; 54; 90; 96; 21; 71; 80; 165; 34; 192; 233; 227; 143; + 36; 36; 95; 176; 72; 61; 85; 229; 38; 118; 100; 205; 22; 244; 19; 172; 253; + 110; 154; 221; 159; 2; 66; 65; 73; 165; 52; 190; 206; 18; 185; 123; 243; + 189; 135; 185; 100; 15; 100; 180; 202; 152; 133; 211; 164; 113; 65; 140; 76; + 201; 153; 170; 88; 39; 250; 7; 184; 0; 176; 111; 111; 0; 35; 146; 83; 218; + 173; 221; 145; 210; 251; 171; 209; 75; 87; 250; 20; 130; 80; 75; 254; 214; + 62; 21; 105; 2; 194; 196; 119; 29; 81; 57; 103; 90; 166; 148; 175; 20; 44; + 70; 38; 222; 203; 75; 167; 171; 111; 236; 96; 249; 34; 214; 3; 208; 83; 187; + 21; 26; 70; 101; 201; 243; 188; 136; 40; 16; 178; 90; 58; 104; 108; 117; + 118; 197; 39; 71; 180; 108; 200; 164; 88; 119; 58; 118; 80; 174; 147; 246; + 17; 129; 84; 166; 84; 253; 29; 223; 33; 174; 29; 101; 94; 17; 243; 144; 140; + 36; 18; 148; 244; 231; 141; 95; 209; 159; 93; 127; 114; 99; 109; 211; 8; 20; + 3; 51; 181; 199; 215; 239; 154; 55; 106; 75; 226; 174; 204; 197; 143; 225; + 169; 211; 190; 143; 79; 145; 53; 47; 51; 30; 82; 215; 238; 42; 77; 36; 63; + 21; 150; 46; 67; 40; 144; 58; 142; 212; 22; 156; 46; 119; 186; 100; 225; + 216; 152; 235; 71; 250; 135; 193; 59; 12; 194; 134; 234; 21; 1; 71; 109; 37; + 209; 70; 108; 203; 183; 138; 153; 136; 1; 102; 58; 181; 50; 120; 215; 3; + 186; 111; 144; 206; 129; 13; 69; 2; 57; 69; 216; 42; 77; 174; 248; 29; 45; + 219; 232; 142; 5; 24; 112; 30; 193; 210; 199; 95; 153; 179; 170; 121; 202; + 204; 36; 35; 109; 177; 83; 181; 224; 202; 178; 102; 77; 38; 35; 118; 101; + 202; 235; 51; 237; 186; 125; 200; 74; 210; 240; 214; 190; 14; 3; 16; 85; 99; + 247; 120; 127; 136; 42; 79; 45; 1; 92; 231; 185; 35; 42; 234; 242; 225; 202; + 81; 70; 151; 12; 202; 112; 93; 103; 115; 50; 182; 47; 245; 3; 68; 134; 11; + 37; 167; 11; 33; 100; 156; 2; 253; 24; 13; 187; 2; 143; 41; 137; 33; 20; 45; + 188; 150; 14; 37; 139; 230; 248; 71; 131; 201; 113; 45; 3; 232; 47; 159; + 123; 156; 109; 248; 134; 147; 88; 99; 221; 164; 133; 58; 225; 118; 145; 105; + 97; 87; 125; 170; 78; 149; 17; 81; 46; 251; 189; 96; 251; 87; 27; 194; 50; + 128; 7; 158; 49; 205; 35; 120; 216; 197; 117; 119; 137; 193; 207; 196; 239; + 247; 179; 10; 154; 18; 251; 84; 72; 113; 195; 56; 114; 65; 157; 196; 18; + 105; 55; 232; 255; 51; 181; 80; 9; 209; 107; 29; 142; 29; 28; 134; 33; 16; + 229; 2; 19; 56; 216; 34; 240; 180; 202; 145; 99; 12; 32; 9; 37; 66; 149; + 121; 131; 23; 160; 179; 9; 63; 238; 213; 170; 143; 208; 109; 98; 159; 20; + 112; 235; 238; 188; 0; 186; 201; 68; 164; 160; 70; 178; 33; 20; 199; 167; + 36; 140; 142; 58; 164; 74; 245; 94; 240; 216; 64; 245; 193; 4; 220; 185; 62; + 11; 12; 94; 186; 173; 227; 156; 164; 72; 68; 80; 181; 42; 236; 93; 15; 111; + 38; 39; 210; 46; 36; 8; 213; 94; 65; 238; 36; 152; 21; 212; 104; 148; 124; + 236; 123; 128; 63; 226; 33; 181; 225; 186; 147; 112; 250; 58; 93; 28; 99; + 172; 7; 220; 108; 140; 223; 249; 113; 81; 97; 88; 176; 226; 115; 157; 216; + 121; 160; 114; 93; 225; 234; 180; 206; 244; 1; 115; 65; 44; 114; 214; 89; + 231; 9; 100; 155; 114; 191; 114; 207; 225; 116; 166; 105; 229; 33; 60; 235; + 36; 10; 188; 35; 203; 186; 78; 210; 103; 1; 57; 28; 63; 53; 186; 59; 142; + 245; 39; 97; 67; 106; 191; 77; 118; 71; 76; 80; 38; 86; 110; 229; 196; 187; + 175; 93; 164; 225; 170; 230; 46; 219; 7; 11; 18; 242; 162; 75; 5; 187; 215; + 183; 137; 5; 177; 174; 206; 185; 226; 190; 237; 192; 243; 200; 186; 232; 63; + 105; 203; 18; 113; 118; 64; 189; 76; 118; 129; 197; 41; 192; 60; 96; 11; 97; + 93; 177; 92; 130; 227; 136; 89; 141; 173; 240; 220; 19; 20; 182; 43; 135; + 50; 24; 116; 108; 236; 142; 123; 176; 124; 210; 44; 120; 64; 202; 228; 189; + 103; 233; 251; 35; 195; 249; 218; 158; 30; 212; 138; 74; 211; 155; 178; 77; + 222; 110; 98; 151; 4; 129; 114; 115; 107; 56; 252; 112; 229; 254; 50; 199; + 140; 58; 218; 65; 1; 139; 218; 89; 131; 150; 200; 10; 253; 95; 151; 85; 168; + 50; 177; 161; 9; 232; 110; 58; 134; 253; 252; 49; 187; 68; 148; 197; 72; 78; + 62; 10; 105; 227; 47; 37; 250; 136; 208; 103; 200; 41; 220; 46; 41; 115; + 209; 56; 30; 189; 19; 181; 73; 97; 105; 216; 76; 43; 211; 183; 170; 216; + 129; 215; 55; 89; 229; 148; 43; 18; 174; 39; 33; 203; 11; 176; 153; 64; 177; + 207; 111; 232; 65; 33; 197; 250; 29; 207; 181; 63; 34; 80; 68; 85; 111; 49; + 37; 92; 50; 172; 119; 145; 101; 215; 152; 11; 3; 189; 164; 136; 79; 182; 24; + 208; 30; 176; 166; 2; 184; 161; 223; 48; 54; 213; 59; 173; 66; 71; 135; 15; + 136; 212; 164; 197; 238; 108; 13; 249; 10; 217; 197; 205; 55; 122; 36; 106; + 116; 246; 154; 123; 43; 189; 184; 49; 213; 81; 91; 252; 55; 53; 9; 5; 80; + 109; 84; 147; 197; 37; 207; 47; 35; 73; 15; 180; 43; 20; 101; 163; 32; 237; + 65; 217; 120; 82; 216; 204; 110; 67; 120; 47; 210; 131; 174; 84; 34; 183; + 205; 191; 123; 46; 208; 34; 197; 226; 228; 240; 191; 81; 51; 30; 104; 69; + 79; 3; 131; 157; 181; 100; 139; 251; 14; 162; 31; 242; 113; 139; 47; 228; + 80; 101; 186; 149; 148; 36; 105; 43; 71; 213; 69; 142; 249; 158; 83; 117; + 82; 32; 166; 161; 182; 123; 110; 131; 142; 60; 65; 215; 33; 79; 170; 178; + 92; 143; 232; 85; 209; 86; 111; 225; 91; 52; 166; 75; 93; 226; 45; 63; 116; + 174; 28; 150; 216; 116; 208; 237; 99; 28; 238; 245; 24; 109; 248; 41; 237; + 244; 231; 91; 197; 189; 151; 8; 177; 58; 102; 121; 210; 186; 76; 205; 31; + 215; 160; 36; 144; 209; 128; 248; 138; 40; 251; 10; 194; 37; 197; 25; 100; + 58; 95; 75; 151; 163; 177; 51; 114; 0; 226; 239; 188; 127; 125; 1; 40; 107; + 38; 106; 30; 239; 250; 22; 159; 115; 213; 196; 104; 108; 134; 44; 118; 3; + 27; 188; 47; 138; 246; 141; 90; 183; 135; 94; 67; 117; 89; 148; 144; 194; + 243; 197; 93; 124; 205; 171; 5; 145; 42; 154; 162; 129; 199; 88; 48; 28; 66; + 54; 29; 198; 128; 215; 212; 216; 220; 150; 209; 156; 79; 104; 55; 123; 106; + 216; 151; 146; 25; 99; 122; 209; 26; 36; 88; 208; 208; 23; 12; 28; 92; 173; + 156; 2; 186; 7; 3; 122; 56; 132; 208; 205; 124; 23; 4; 38; 109; 44; 66; 166; + 220; 189; 64; 130; 148; 80; 61; 21; 174; 119; 198; 104; 251; 180; 193; 192; + 169; 83; 207; 208; 97; 237; 208; 139; 66; 147; 204; 96; 103; 24; 132; 12; + 155; 153; 42; 179; 26; 122; 0; 174; 205; 24; 218; 11; 98; 134; 236; 141; + 168; 68; 202; 144; 129; 132; 202; 147; 53; 167; 154; 132; 94; 154; 24; 19; + 146; 205; 250; 216; 101; 53; 195; 216; 212; 209; 187; 253; 83; 91; 84; 82; + 140; 230; 99; 45; 218; 8; 131; 57; 39; 19; 212; 94; 67; 40; 141; 195; 66; + 201; 204; 120; 50; 96; 243; 80; 189; 239; 3; 218; 121; 26; 171; 7; 187; 85; + 51; 140; 190; 174; 151; 149; 38; 83; 36; 112; 10; 76; 14; 161; 185; 222; 27; + 125; 213; 102; 88; 162; 15; 247; 218; 39; 205; 181; 217; 185; 255; 253; 51; + 44; 73; 69; 41; 44; 87; 190; 48; 205; 214; 69; 199; 127; 199; 251; 174; 186; 227; 211; 232; 223; 228; 12; 218; 93; 170; 48; 136; 44; 162; 128; 202; 91; 192; 152; 84; 152; 127; 23; 225; 11; 159; 136; 206; 73; 56; 136; 162; 84; 123; 27; 173; 5; 128; 28; 146; 252; 35; 159; 195; 163; 61; 4; 243; 49; 10; @@ -5350,38 +6061,37 @@ let GE25519_GROUPER = (MATCH_MP pth (CONJ th1 th2));; let BYTES_LOADED_DATA = prove - (`bytes_loaded s (word (pc + 0x2400)) edwards25519_scalarmulbase_data <=> - read (memory :> bytes(word (pc + 0x2400),48608)) s = + (`bytes_loaded s (word (pc + 0x2f28)) edwards25519_scalarmulbase_data <=> + read (memory :> bytes(word (pc + 0x2f28),48576)) s = num_of_bytelist edwards25519_scalarmulbase_data`, REWRITE_TAC[bytes_loaded; READ_BYTELIST_EQ_BYTES; CONV_RULE (RAND_CONV LENGTH_CONV) (AP_TERM `LENGTH:byte list->num` edwards25519_scalarmulbase_data)]);; let EDWARDS25519BASE_TABLE_LEMMA = prove - (`read (memory :> bytes(word (pc + 0x2400),48608)) s = + (`read (memory :> bytes(word (pc + 0x2f28),48576)) s = num_of_bytelist edwards25519_scalarmulbase_data - ==> bignum_from_memory(word(pc + 0x2400),4) s = p_25519 /\ - edwards25519_exprojective + ==> edwards25519_exprojective (group_pow edwards25519_group E_25519 0) - (bignum_from_memory(word(pc + 0x2420),4) s, - bignum_from_memory(word(pc + 0x2440),4) s, + (bignum_from_memory(word(pc + 0x2f28),4) s, + bignum_from_memory(word(pc + 0x2f48),4) s, 1, - bignum_from_memory(word(pc + 0x2460),4) s) /\ + bignum_from_memory(word(pc + 0x2f68),4) s) /\ edwards25519_exprojective (group_pow edwards25519_group E_25519 (2 EXP 251)) - (bignum_from_memory(word(pc + 0x2480),4) s, - bignum_from_memory(word(pc + 0x24a0),4) s, + (bignum_from_memory(word(pc + 0x2f88),4) s, + bignum_from_memory(word(pc + 0x2fa8),4) s, 1, - bignum_from_memory(word(pc + 0x24c0),4) s) /\ + bignum_from_memory(word(pc + 0x2fc8),4) s) /\ !i. i < 63 ==> !j. j < 8 ==> edwards25519_epprojective (group_pow edwards25519_group E_25519 (2 EXP (4 * i) * (j + 1))) - (bignum_from_memory(word(pc + 0x24e0 + 768 * i + 96 * j),4) s, - bignum_from_memory(word(pc + 0x24e0 + 768 * i + 96 * j + 32),4) s, - bignum_from_memory(word(pc + 0x24e0 + 768 * i + 96 * j + 64),4) s) /\ - ~(bignum_from_memory(word(pc + 0x24e0 + 768 * i + 96 * j + 64),4) s = + (bignum_from_memory(word(pc + 0x2fe8 + 768 * i + 96 * j),4) s, + bignum_from_memory(word(pc + 0x2fe8 + 768 * i + 96 * j + 32),4) s, + bignum_from_memory(word(pc + 0x2fe8 + 768 * i + 96 * j + 64),4) s) /\ + ~(bignum_from_memory(word(pc + 0x2fe8 + 768 * i + 96 * j + 64),4) s = 0)`, let GE25519_POWERS = end_itlist CONJ @@ -5391,8 +6101,8 @@ let EDWARDS25519BASE_TABLE_LEMMA = prove [GE25519_POW_1])) in REWRITE_TAC[GSYM BYTES_LOADED_DATA; edwards25519_scalarmulbase_data] THEN CONV_TAC(LAND_CONV DATA64_CONV) THEN STRIP_TAC THEN - CONV_TAC(funpow 3 RAND_CONV (BINDER_CONV (RAND_CONV EXPAND_CASES_CONV))) THEN - CONV_TAC(funpow 3 RAND_CONV EXPAND_CASES_CONV) THEN + CONV_TAC(funpow 2 RAND_CONV (BINDER_CONV (RAND_CONV EXPAND_CASES_CONV))) THEN + CONV_TAC(funpow 2 RAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[WORD_ADD] THEN CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN REWRITE_TAC[GSYM WORD_ADD] THEN ASM_REWRITE_TAC[] THEN @@ -5546,7 +6256,7 @@ let LOCAL_MUL_P25519_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0xe1e0) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xece8) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmulbase_mc /\ read PC s = pcin /\ @@ -6002,7 +6712,7 @@ let LOCAL_MUL_4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0xe1e0) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xece8) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmulbase_mc /\ read PC s = pcin /\ @@ -6434,7 +7144,7 @@ let LOCAL_ADD_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0xe1e0) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xece8) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmulbase_mc /\ read PC s = pcin /\ @@ -6505,7 +7215,7 @@ let LOCAL_DOUBLE_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0xe1e0) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xece8) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmulbase_mc /\ read PC s = pcin /\ @@ -6574,7 +7284,7 @@ let LOCAL_SUB_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0xe1e0) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xece8) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmulbase_mc /\ read PC s = pcin /\ @@ -6646,19 +7356,14 @@ let LOCAL_SUB_TWICE4_TAC = (* ------------------------------------------------------------------------- *) let LOCAL_MODINV_TAC = - let cth = - (GEN_REWRITE_CONV RAND_CONV [bignum_modinv_mc] THENC TRIM_LIST_CONV) - `TRIM_LIST (12,12) bignum_modinv_mc` - and th = CONV_RULE (DEPTH_CONV WORD_NUM_RED_CONV) - (SPEC `word 4:int64` CORE_MODINV_CORRECT) in ARM_SUBROUTINE_SIM_TAC - (edwards25519_scalarmulbase_mc,EDWARDS25519_SCALARMULBASE_EXEC,0x1978,cth,th) - [`read X1 s`; `read X2 s`; - `read (memory :> bytes(read X2 s,8 * 4)) s`; - `read X3 s`; - `read (memory :> bytes(read X3 s,8 * 4)) s`; - `read X4 s`; - `pc + 0x1978`];; + (edwards25519_scalarmulbase_mc,EDWARDS25519_SCALARMULBASE_EXEC,0x196c, + (GEN_REWRITE_CONV RAND_CONV [bignum_inv_p25519_mc] THENC TRIM_LIST_CONV) + `TRIM_LIST (12,16) bignum_inv_p25519_mc`, + CORE_INV_P25519_CORRECT) + [`read X0 s`; `read X1 s`; + `read (memory :> bytes(read X1 s,8 * 4)) s`; + `pc + 0x196c`; `stackpointer:int64`];; (* ------------------------------------------------------------------------- *) (* Overall point operation proof. *) @@ -6668,8 +7373,8 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove (`!res scalar n pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,448)) - [(word pc,0xe1e0); (res,64); (scalar,32)] /\ - nonoverlapping (res,64) (word pc,0xe1e0) + [(word pc,0xece8); (res,64); (scalar,32)] /\ + nonoverlapping (res,64) (word pc,0xece8) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) (APPEND edwards25519_scalarmulbase_mc @@ -6678,7 +7383,7 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove read SP s = stackpointer /\ C_ARGUMENTS [res; scalar] s /\ bignum_from_memory (scalar,4) s = n) - (\s. read PC s = word (pc + 0x23ec) /\ + (\s. read PC s = word (pc + 0x2f14) /\ bignum_pair_from_memory(res,4) s = paired (modular_encode (256,p_25519)) (group_pow edwards25519_group E_25519 n)) @@ -6735,11 +7440,11 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove ENSURES_WHILE_UP_TAC `63` `pc + 0x144` `pc + 0x191c` `\i s. - read (memory :> bytes(word(pc + 0x2400),48608)) s = + read (memory :> bytes(word(pc + 0x2f28),48576)) s = num_of_bytelist edwards25519_scalarmulbase_data /\ read SP s = stackpointer /\ read X23 s = res /\ - read X19 s = word(pc + 0x24e0 + 768 * i) /\ + read X19 s = word(pc + 0x2fe8 + 768 * i) /\ read X20 s = word (4 * i) /\ val(read X21 s) <= 1 /\ (i >= 63 ==> val(read X21 s) < 1) /\ @@ -6768,23 +7473,23 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove RULE_ASSUM_TAC(REWRITE_RULE[SYM th]) THEN ASSUME_TAC th) THEN SUBGOAL_THEN `nonoverlapping_modulo (2 EXP 64) (val(stackpointer:int64),448) - (val(wpc:int64),0xe1e0)` + (val(wpc:int64),0xece8)` ASSUME_TAC THENL [EXPAND_TAC "wpc" THEN NONOVERLAPPING_TAC; ALL_TAC] THEN REPEAT(DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN DISCH_THEN(K ALL_TAC) THEN BIGNUM_LDIGITIZE_TAC "x0_" - `bignum_from_memory(word_add wpc (word 0x2420),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x2f28),4) s0` THEN BIGNUM_LDIGITIZE_TAC "y0_" - `bignum_from_memory(word_add wpc (word 0x2440),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x2f48),4) s0` THEN BIGNUM_LDIGITIZE_TAC "t0_" - `bignum_from_memory(word_add wpc (word 0x2460),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x2f68),4) s0` THEN BIGNUM_LDIGITIZE_TAC "x1_" - `bignum_from_memory(word_add wpc (word 0x2480),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x2f88),4) s0` THEN BIGNUM_LDIGITIZE_TAC "y1_" - `bignum_from_memory(word_add wpc (word 0x24a0),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x2fa8),4) s0` THEN BIGNUM_LDIGITIZE_TAC "t1_" - `bignum_from_memory(word_add wpc (word 0x24c0),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x2fc8),4) s0` THEN ARM_ACCSTEPS_TAC EDWARDS25519_SCALARMULBASE_EXEC [13;14;17;18;20;21;22;23;27;29;31;33] (1--41) THEN @@ -6939,7 +7644,7 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove REWRITE_TAC[ARITH_RULE `pc + off + 768 * i + jre = (pc + off + 768 * i) + jre`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `tab:int64 = word(pc + 0x24e0 + 768 * i)` THEN + ABBREV_TAC `tab:int64 = word(pc + 0x2fe8 + 768 * i)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o TOP_DEPTH_CONV) [WORD_ADD_0] THEN @@ -7402,18 +8107,13 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN - (*** The state setup for the modular inverse ***) - - FIRST_X_ASSUM(MP_TAC o CONJUNCT1 o MATCH_MP EDWARDS25519BASE_TABLE_LEMMA) THEN - REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN DISCH_TAC THEN - ARM_STEPS_TAC EDWARDS25519_SCALARMULBASE_EXEC (19--23) THEN - (*** The inlining of modular inverse ***) - LOCAL_MODINV_TAC 24 THEN + ARM_STEPS_TAC EDWARDS25519_SCALARMULBASE_EXEC (19--20) THEN + LOCAL_MODINV_TAC 21 THEN ABBREV_TAC `w_3 = - read(memory :> bytes(word_add stackpointer (word 224),8 * 4)) s24` THEN + read(memory :> bytes(word_add stackpointer (word 224),8 * 4)) s21` THEN (*** Final multiplications ***) @@ -7430,13 +8130,18 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove MAP_EVERY X_GEN_TAC [`x:int`; `y:int`] THEN REPEAT(DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN - FIRST_ASSUM(MP_TAC o check (is_imp o concl)) THEN - REWRITE_TAC[] THEN ONCE_REWRITE_TAC[COPRIME_SYM] THEN - SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; DIVIDES_MOD] THEN ASM_CASES_TAC `Z MOD p_25519 = 0` THEN ASM_REWRITE_TAC[] THENL [ASM_REWRITE_TAC[exprojective; INTEGER_MOD_RING_CLAUSES]; ALL_TAC] THEN - ANTS_TAC THENL - [REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; STRIP_TAC] THEN + SUBGOAL_THEN `w_3 < p_25519 /\ (Z * w_3 == 1) (mod p_25519)` + STRIP_ASSUME_TAC THENL + [FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN MATCH_MP_TAC(TAUT + `p /\ (q ==> r) /\ (p /\ q ==> s) ==> (p ==> q) ==> r /\ s`) THEN + REPEAT CONJ_TAC THENL + [ASM_SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; DIVIDES_MOD]; + DISCH_THEN SUBST1_TAC THEN REWRITE_TAC[INVERSE_MOD_BOUND] THEN + REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; + MESON_TAC[INVERSE_MOD_RMUL]]; + ALL_TAC] THEN SUBGOAL_THEN `ring_inv (integer_mod_ring p_25519) (&Z rem &p_25519) = &w_3` ASSUME_TAC THENL [MATCH_MP_TAC RING_RINV_UNIQUE THEN @@ -7445,8 +8150,7 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove CONV_TAC MOD_DOWN_CONV THEN ASM_REWRITE_TAC[GSYM CONG] THEN REWRITE_TAC[MOD_LT_EQ; ARITH_EQ; p_25519]; ALL_TAC] THEN - - SUBGOAL_THEN `~(&p_25519:int = &0)` ASSUME_TAC THENL + SUBGOAL_THEN `~(&p_25519:int = &0)` ASSUME_TAC THENL [REWRITE_TAC[INT_OF_NUM_EQ; p_25519] THEN ARITH_TAC; ALL_TAC] THEN ASM_CASES_TAC `flip:bool` THEN ASM_REWRITE_TAC[paired; modular_encode; I_THM; EDWARDS25519_GROUP; @@ -7463,8 +8167,8 @@ let EDWARDS25519_SCALARMULBASE_SUBROUTINE_CORRECT = time prove (`!res scalar n pc stackpointer returnaddress. aligned 16 stackpointer /\ ALL (nonoverlapping (word_sub stackpointer (word 496),496)) - [(word pc,0xe1e0); (res,64); (scalar,32)] /\ - nonoverlapping (res,64) (word pc,0xe1e0) + [(word pc,0xece8); (res,64); (scalar,32)] /\ + nonoverlapping (res,64) (word pc,0xece8) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) (APPEND edwards25519_scalarmulbase_mc diff --git a/arm/proofs/edwards25519_scalarmulbase_alt.ml b/arm/proofs/edwards25519_scalarmulbase_alt.ml index 9557dea3..2cefbb8c 100644 --- a/arm/proofs/edwards25519_scalarmulbase_alt.ml +++ b/arm/proofs/edwards25519_scalarmulbase_alt.ml @@ -8,7 +8,7 @@ (* ========================================================================= *) needs "arm/proofs/base.ml";; -needs "arm/proofs/bignum_modinv.ml";; +needs "arm/proofs/bignum_inv_p25519.ml";; needs "common/ecencoding.ml";; do_list hide_constant ["X1";"X2";"X3";"X4";"X5"];; @@ -76,8 +76,8 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0xf24501bf; (* arm_TST X13 (rvalue (word 576460752303423488)) *) 0x9244f9ad; (* arm_AND X13 X13 (rvalue (word 17870283321406128127)) *) 0xa90137ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&16))) *) - 0x1000c36a; (* arm_ADR X10 (word 6252) *) - 0x1000c64b; (* arm_ADR X11 (word 6344) *) + 0x10011baa; (* arm_ADR X10 (word 9076) *) + 0x10011e8b; (* arm_ADR X11 (word 9168) *) 0xa9400540; (* arm_LDP X0 X1 X10 (Immediate_Offset (iword (&0))) *) 0xa9400d62; (* arm_LDP X2 X3 X11 (Immediate_Offset (iword (&0))) *) 0x9a820000; (* arm_CSEL X0 X0 X2 Condition_EQ *) @@ -112,7 +112,7 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x9a830021; (* arm_CSEL X1 X1 X3 Condition_EQ *) 0xa90f07e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&240))) *) 0xd2800014; (* arm_MOV X20 (rvalue (word 0)) *) - 0x1000c4f3; (* arm_ADR X19 (word 6300) *) + 0x10011d33; (* arm_ADR X19 (word 9124) *) 0xaa1f03f5; (* arm_MOV X21 XZR *) 0xd346fe80; (* arm_LSR X0 X20 6 *) 0xf8607be2; (* arm_LDR X2 SP (Shiftreg_Offset X0 3) *) @@ -1112,320 +1112,1034 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x9a8310e3; (* arm_CSEL X3 X7 X3 Condition_NE *) 0xa90807e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&128))) *) 0xa9090fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&144))) *) - 0xd2800080; (* arm_MOV X0 (rvalue (word 4)) *) - 0x910383e1; (* arm_ADD X1 SP (rvalue (word 224)) *) - 0x910303e2; (* arm_ADD X2 SP (rvalue (word 192)) *) - 0x10004083; (* arm_ADR X3 (word 2064) *) - 0x910403e4; (* arm_ADD X4 SP (rvalue (word 256)) *) - 0xd37df00a; (* arm_LSL X10 X0 3 *) - 0x8b0a0095; (* arm_ADD X21 X4 X10 *) - 0x8b0a02b6; (* arm_ADD X22 X21 X10 *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a784b; (* arm_LDR X11 X2 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xf82a7aab; (* arm_STR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf82a7acc; (* arm_STR X12 X22 (Shiftreg_Offset X10 3) *) - 0xf82a788c; (* arm_STR X12 X4 (Shiftreg_Offset X10 3) *) - 0xf82a783f; (* arm_STR XZR X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb00015f; (* arm_CMP X10 X0 *) - 0x54ffff03; (* arm_BCC (word 2097120) *) - 0xf940008b; (* arm_LDR X11 X4 (Immediate_Offset (word 0)) *) - 0xd100056c; (* arm_SUB X12 X11 (rvalue (word 1)) *) - 0xf900008c; (* arm_STR X12 X4 (Immediate_Offset (word 0)) *) - 0xd37ef574; (* arm_LSL X20 X11 2 *) - 0xcb140174; (* arm_SUB X20 X11 X20 *) - 0xd27f0294; (* arm_EOR X20 X20 (rvalue (word 2)) *) - 0xd280002c; (* arm_MOV X12 (rvalue (word 1)) *) - 0x9b14316c; (* arm_MADD X12 X11 X20 X12 *) - 0x9b0c7d8b; (* arm_MUL X11 X12 X12 *) - 0x9b145194; (* arm_MADD X20 X12 X20 X20 *) - 0x9b0b7d6c; (* arm_MUL X12 X11 X11 *) - 0x9b145174; (* arm_MADD X20 X11 X20 X20 *) - 0x9b0c7d8b; (* arm_MUL X11 X12 X12 *) - 0x9b145194; (* arm_MADD X20 X12 X20 X20 *) - 0x9b145174; (* arm_MADD X20 X11 X20 X20 *) - 0xd379e002; (* arm_LSL X2 X0 7 *) - 0x9100fc4a; (* arm_ADD X10 X2 (rvalue (word 63)) *) - 0xd346fd45; (* arm_LSR X5 X10 6 *) - 0xeb0000bf; (* arm_CMP X5 X0 *) - 0x9a852005; (* arm_CSEL X5 X0 X5 Condition_CS *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ef; (* arm_MOV X15 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f0; (* arm_MOV X16 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a7aab; (* arm_LDR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf86a7acc; (* arm_LDR X12 X22 (Shiftreg_Offset X10 3) *) - 0xaa0c0171; (* arm_ORR X17 X11 X12 *) - 0xeb1f023f; (* arm_CMP X17 XZR *) - 0x8a0d0271; (* arm_AND X17 X19 X13 *) - 0x9a8f122f; (* arm_CSEL X15 X17 X15 Condition_NE *) - 0x8a0e0271; (* arm_AND X17 X19 X14 *) - 0x9a901230; (* arm_CSEL X16 X17 X16 Condition_NE *) - 0x9a8d116d; (* arm_CSEL X13 X11 X13 Condition_NE *) - 0x9a8e118e; (* arm_CSEL X14 X12 X14 Condition_NE *) - 0xda9f03f3; (* arm_CSETM X19 Condition_NE *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb05015f; (* arm_CMP X10 X5 *) - 0x54fffe63; (* arm_BCC (word 2097100) *) - 0xaa0e01ab; (* arm_ORR X11 X13 X14 *) - 0xdac0116c; (* arm_CLZ X12 X11 *) - 0xeb0c03f1; (* arm_NEGS X17 X12 *) - 0x9acc21ad; (* arm_LSLV X13 X13 X12 *) - 0x9a9f11ef; (* arm_CSEL X15 X15 XZR Condition_NE *) - 0x9acc21ce; (* arm_LSLV X14 X14 X12 *) - 0x9a9f1210; (* arm_CSEL X16 X16 XZR Condition_NE *) - 0x9ad125ef; (* arm_LSRV X15 X15 X17 *) - 0x9ad12610; (* arm_LSRV X16 X16 X17 *) - 0xaa0f01ad; (* arm_ORR X13 X13 X15 *) - 0xaa1001ce; (* arm_ORR X14 X14 X16 *) - 0xf94002af; (* arm_LDR X15 X21 (Immediate_Offset (word 0)) *) - 0xf94002d0; (* arm_LDR X16 X22 (Immediate_Offset (word 0)) *) - 0xd2800026; (* arm_MOV X6 (rvalue (word 1)) *) - 0xaa1f03e7; (* arm_MOV X7 XZR *) - 0xaa1f03e8; (* arm_MOV X8 XZR *) - 0xd2800029; (* arm_MOV X9 (rvalue (word 1)) *) - 0xd280074a; (* arm_MOV X10 (rvalue (word 58)) *) - 0xf24001ff; (* arm_TST X15 (rvalue (word 1)) *) - 0x9a9f11cb; (* arm_CSEL X11 X14 XZR Condition_NE *) - 0x9a9f120c; (* arm_CSEL X12 X16 XZR Condition_NE *) - 0x9a9f1111; (* arm_CSEL X17 X8 XZR Condition_NE *) - 0x9a9f1133; (* arm_CSEL X19 X9 XZR Condition_NE *) - 0xfa4e11a2; (* arm_CCMP X13 X14 (word 2) Condition_NE *) - 0xcb0b01ab; (* arm_SUB X11 X13 X11 *) - 0xcb0c01ec; (* arm_SUB X12 X15 X12 *) - 0x9a8d21ce; (* arm_CSEL X14 X14 X13 Condition_CS *) - 0xda8b256b; (* arm_CNEG X11 X11 Condition_CC *) - 0x9a8f2210; (* arm_CSEL X16 X16 X15 Condition_CS *) - 0xda8c258f; (* arm_CNEG X15 X12 Condition_CC *) - 0x9a862108; (* arm_CSEL X8 X8 X6 Condition_CS *) - 0x9a872129; (* arm_CSEL X9 X9 X7 Condition_CS *) - 0xf27f019f; (* arm_TST X12 (rvalue (word 2)) *) - 0x8b1100c6; (* arm_ADD X6 X6 X17 *) - 0x8b1300e7; (* arm_ADD X7 X7 X19 *) - 0xd341fd6d; (* arm_LSR X13 X11 1 *) - 0xd341fdef; (* arm_LSR X15 X15 1 *) - 0x8b080108; (* arm_ADD X8 X8 X8 *) - 0x8b090129; (* arm_ADD X9 X9 X9 *) - 0xd100054a; (* arm_SUB X10 X10 (rvalue (word 1)) *) - 0xb5fffd6a; (* arm_CBNZ X10 (word 2097068) *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f1; (* arm_MOV X17 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x9b0b7ccf; (* arm_MUL X15 X6 X11 *) - 0x9b0c7cf0; (* arm_MUL X16 X7 X12 *) - 0xab0d01ef; (* arm_ADDS X15 X15 X13 *) - 0x9bcb7ccd; (* arm_UMULH X13 X6 X11 *) - 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) - 0xab1001ef; (* arm_ADDS X15 X15 X16 *) - 0x93d1e9f1; (* arm_EXTR X17 X15 X17 58 *) - 0xf82a7891; (* arm_STR X17 X4 (Shiftreg_Offset X10 3) *) - 0xaa0f03f1; (* arm_MOV X17 X15 *) - 0x9bcc7cef; (* arm_UMULH X15 X7 X12 *) - 0x9a0f01ad; (* arm_ADC X13 X13 X15 *) - 0x9b0b7d0f; (* arm_MUL X15 X8 X11 *) - 0x9b0c7d30; (* arm_MUL X16 X9 X12 *) - 0xab0e01ef; (* arm_ADDS X15 X15 X14 *) - 0x9bcb7d0e; (* arm_UMULH X14 X8 X11 *) - 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) - 0xab1001ef; (* arm_ADDS X15 X15 X16 *) - 0x93d3e9f3; (* arm_EXTR X19 X15 X19 58 *) - 0xf82a7833; (* arm_STR X19 X1 (Shiftreg_Offset X10 3) *) - 0xaa0f03f3; (* arm_MOV X19 X15 *) - 0x9bcc7d2f; (* arm_UMULH X15 X9 X12 *) - 0x9a0f01ce; (* arm_ADC X14 X14 X15 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb00015f; (* arm_CMP X10 X0 *) - 0x54fffcc3; (* arm_BCC (word 2097048) *) - 0x93d1e9ad; (* arm_EXTR X13 X13 X17 58 *) - 0x93d3e9ce; (* arm_EXTR X14 X14 X19 58 *) - 0xf940008b; (* arm_LDR X11 X4 (Immediate_Offset (word 0)) *) - 0x9b147d71; (* arm_MUL X17 X11 X20 *) - 0xf940006c; (* arm_LDR X12 X3 (Immediate_Offset (word 0)) *) - 0x9b0c7e2f; (* arm_MUL X15 X17 X12 *) - 0x9bcc7e30; (* arm_UMULH X16 X17 X12 *) - 0xab0f016b; (* arm_ADDS X11 X11 X15 *) - 0xd280002a; (* arm_MOV X10 (rvalue (word 1)) *) - 0xd100040b; (* arm_SUB X11 X0 (rvalue (word 1)) *) - 0xb40001ab; (* arm_CBZ X11 (word 52) *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a788c; (* arm_LDR X12 X4 (Shiftreg_Offset X10 3) *) - 0x9b0b7e2f; (* arm_MUL X15 X17 X11 *) - 0xba10018c; (* arm_ADCS X12 X12 X16 *) - 0x9bcb7e30; (* arm_UMULH X16 X17 X11 *) - 0x9a1f0210; (* arm_ADC X16 X16 XZR *) - 0xab0f018c; (* arm_ADDS X12 X12 X15 *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f788c; (* arm_STR X12 X4 (Shiftreg_Offset X15 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5fffeab; (* arm_CBNZ X11 (word 2097108) *) - 0xba0d0210; (* arm_ADCS X16 X16 X13 *) - 0x9a1f03ed; (* arm_ADC X13 XZR XZR *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f7890; (* arm_STR X16 X4 (Shiftreg_Offset X15 3) *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xfa0c017f; (* arm_SBCS XZR X11 X12 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff6b; (* arm_CBNZ X11 (word 2097132) *) - 0xfa1f01bf; (* arm_SBCS XZR X13 XZR *) - 0xda9f33ed; (* arm_CSETM X13 Condition_CS *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0x8a0d018c; (* arm_AND X12 X12 X13 *) - 0xfa0c016b; (* arm_SBCS X11 X11 X12 *) - 0xf82a788b; (* arm_STR X11 X4 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff2b; (* arm_CBNZ X11 (word 2097124) *) - 0xf940002b; (* arm_LDR X11 X1 (Immediate_Offset (word 0)) *) - 0x9b147d71; (* arm_MUL X17 X11 X20 *) - 0xf940006c; (* arm_LDR X12 X3 (Immediate_Offset (word 0)) *) - 0x9b0c7e2f; (* arm_MUL X15 X17 X12 *) - 0x9bcc7e30; (* arm_UMULH X16 X17 X12 *) - 0xab0f016b; (* arm_ADDS X11 X11 X15 *) - 0xd280002a; (* arm_MOV X10 (rvalue (word 1)) *) - 0xd100040b; (* arm_SUB X11 X0 (rvalue (word 1)) *) - 0xb40001ab; (* arm_CBZ X11 (word 52) *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x9b0b7e2f; (* arm_MUL X15 X17 X11 *) - 0xba10018c; (* arm_ADCS X12 X12 X16 *) - 0x9bcb7e30; (* arm_UMULH X16 X17 X11 *) - 0x9a1f0210; (* arm_ADC X16 X16 XZR *) - 0xab0f018c; (* arm_ADDS X12 X12 X15 *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f782c; (* arm_STR X12 X1 (Shiftreg_Offset X15 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5fffeab; (* arm_CBNZ X11 (word 2097108) *) - 0xba0e0210; (* arm_ADCS X16 X16 X14 *) - 0x9a1f03ee; (* arm_ADC X14 XZR XZR *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f7830; (* arm_STR X16 X1 (Shiftreg_Offset X15 3) *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a782b; (* arm_LDR X11 X1 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xfa0c017f; (* arm_SBCS XZR X11 X12 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff6b; (* arm_CBNZ X11 (word 2097132) *) - 0xfa1f01df; (* arm_SBCS XZR X14 XZR *) - 0xda9f33ee; (* arm_CSETM X14 Condition_CS *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a782b; (* arm_LDR X11 X1 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0x8a0e018c; (* arm_AND X12 X12 X14 *) - 0xfa0c016b; (* arm_SBCS X11 X11 X12 *) - 0xf82a782b; (* arm_STR X11 X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff2b; (* arm_CBNZ X11 (word 2097124) *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f1; (* arm_MOV X17 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a7aab; (* arm_LDR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf86a7acc; (* arm_LDR X12 X22 (Shiftreg_Offset X10 3) *) - 0x9b0b7ccf; (* arm_MUL X15 X6 X11 *) - 0x9b0c7cf0; (* arm_MUL X16 X7 X12 *) - 0xab0d01ef; (* arm_ADDS X15 X15 X13 *) - 0x9bcb7ccd; (* arm_UMULH X13 X6 X11 *) - 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) - 0xeb1001ef; (* arm_SUBS X15 X15 X16 *) - 0xf82a7aaf; (* arm_STR X15 X21 (Shiftreg_Offset X10 3) *) - 0x9bcc7cef; (* arm_UMULH X15 X7 X12 *) - 0xcb1101f1; (* arm_SUB X17 X15 X17 *) - 0xfa1101ad; (* arm_SBCS X13 X13 X17 *) - 0xda9f23f1; (* arm_CSETM X17 Condition_CC *) - 0x9b0b7d0f; (* arm_MUL X15 X8 X11 *) - 0x9b0c7d30; (* arm_MUL X16 X9 X12 *) - 0xab0e01ef; (* arm_ADDS X15 X15 X14 *) - 0x9bcb7d0e; (* arm_UMULH X14 X8 X11 *) - 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) - 0xeb1001ef; (* arm_SUBS X15 X15 X16 *) - 0xf82a7acf; (* arm_STR X15 X22 (Shiftreg_Offset X10 3) *) - 0x9bcc7d2f; (* arm_UMULH X15 X9 X12 *) - 0xcb1301f3; (* arm_SUB X19 X15 X19 *) - 0xfa1301ce; (* arm_SBCS X14 X14 X19 *) - 0xda9f23f3; (* arm_CSETM X19 Condition_CC *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb05015f; (* arm_CMP X10 X5 *) - 0x54fffcc3; (* arm_BCC (word 2097048) *) - 0xab11023f; (* arm_CMN X17 X17 *) - 0xf94002af; (* arm_LDR X15 X21 (Immediate_Offset (word 0)) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xd10004a6; (* arm_SUB X6 X5 (rvalue (word 1)) *) - 0xb4000166; (* arm_CBZ X6 (word 44) *) - 0x9100214b; (* arm_ADD X11 X10 (rvalue (word 8)) *) - 0xf86b6aac; (* arm_LDR X12 X21 (Register_Offset X11) *) - 0x93cfe98f; (* arm_EXTR X15 X12 X15 58 *) - 0xca1101ef; (* arm_EOR X15 X15 X17 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6aaf; (* arm_STR X15 X21 (Register_Offset X10) *) - 0xaa0c03ef; (* arm_MOV X15 X12 *) - 0x9100214a; (* arm_ADD X10 X10 (rvalue (word 8)) *) - 0xd10004c6; (* arm_SUB X6 X6 (rvalue (word 1)) *) - 0xb5fffee6; (* arm_CBNZ X6 (word 2097116) *) - 0x93cfe9af; (* arm_EXTR X15 X13 X15 58 *) - 0xca1101ef; (* arm_EOR X15 X15 X17 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6aaf; (* arm_STR X15 X21 (Register_Offset X10) *) - 0xab13027f; (* arm_CMN X19 X19 *) - 0xf94002cf; (* arm_LDR X15 X22 (Immediate_Offset (word 0)) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xd10004a6; (* arm_SUB X6 X5 (rvalue (word 1)) *) - 0xb4000166; (* arm_CBZ X6 (word 44) *) - 0x9100214b; (* arm_ADD X11 X10 (rvalue (word 8)) *) - 0xf86b6acc; (* arm_LDR X12 X22 (Register_Offset X11) *) - 0x93cfe98f; (* arm_EXTR X15 X12 X15 58 *) - 0xca1301ef; (* arm_EOR X15 X15 X19 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6acf; (* arm_STR X15 X22 (Register_Offset X10) *) - 0xaa0c03ef; (* arm_MOV X15 X12 *) - 0x9100214a; (* arm_ADD X10 X10 (rvalue (word 8)) *) - 0xd10004c6; (* arm_SUB X6 X6 (rvalue (word 1)) *) - 0xb5fffee6; (* arm_CBNZ X6 (word 2097116) *) - 0x93cfe9cf; (* arm_EXTR X15 X14 X15 58 *) - 0xca1301ef; (* arm_EOR X15 X15 X19 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6acf; (* arm_STR X15 X22 (Register_Offset X10) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xab11023f; (* arm_CMN X17 X17 *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a788c; (* arm_LDR X12 X4 (Shiftreg_Offset X10 3) *) - 0x8a11016b; (* arm_AND X11 X11 X17 *) - 0xca11018c; (* arm_EOR X12 X12 X17 *) - 0xba0c016b; (* arm_ADCS X11 X11 X12 *) - 0xf82a788b; (* arm_STR X11 X4 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff0b; (* arm_CBNZ X11 (word 2097120) *) - 0xaa3303f3; (* arm_MVN X19 X19 *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xab13027f; (* arm_CMN X19 X19 *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x8a13016b; (* arm_AND X11 X11 X19 *) - 0xca13018c; (* arm_EOR X12 X12 X19 *) - 0xba0c016b; (* arm_ADCS X11 X11 X12 *) - 0xf82a782b; (* arm_STR X11 X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff0b; (* arm_CBNZ X11 (word 2097120) *) - 0xf100e842; (* arm_SUBS X2 X2 (rvalue (word 58)) *) - 0x54ffdd28; (* arm_BHI (word 2096036) *) + 0x910383e0; (* arm_ADD X0 SP (rvalue (word 224)) *) + 0x910303e1; (* arm_ADD X1 SP (rvalue (word 192)) *) + 0xaa0003f4; (* arm_MOV X20 X0 *) + 0x9280024a; (* arm_MOVN X10 (word 18) 0 *) + 0x9280000b; (* arm_MOVN X11 (word 0) 0 *) + 0xa9002fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&0))) *) + 0x92f0000c; (* arm_MOVN X12 (word 32768) 48 *) + 0xa90133eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&16))) *) + 0xa9400c22; (* arm_LDP X2 X3 X1 (Immediate_Offset (iword (&0))) *) + 0xa9411424; (* arm_LDP X4 X5 X1 (Immediate_Offset (iword (&16))) *) + 0xd2800267; (* arm_MOV X7 (rvalue (word 19)) *) + 0xd37ffca6; (* arm_LSR X6 X5 63 *) + 0x9b061ce6; (* arm_MADD X6 X7 X6 X7 *) + 0xab060042; (* arm_ADDS X2 X2 X6 *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0xba1f0084; (* arm_ADCS X4 X4 XZR *) + 0xb24100a5; (* arm_ORR X5 X5 (rvalue (word 9223372036854775808)) *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0x9a9f30e6; (* arm_CSEL X6 X7 XZR Condition_CC *) + 0xeb060042; (* arm_SUBS X2 X2 X6 *) + 0xfa1f0063; (* arm_SBCS X3 X3 XZR *) + 0xfa1f0084; (* arm_SBCS X4 X4 XZR *) + 0xda1f00a5; (* arm_SBC X5 X5 XZR *) + 0x9240f8a5; (* arm_AND X5 X5 (rvalue (word 9223372036854775807)) *) + 0xa9020fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&32))) *) + 0xa90317e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&48))) *) + 0xa9047fff; (* arm_STP XZR XZR SP (Immediate_Offset (iword (&64))) *) + 0xa9057fff; (* arm_STP XZR XZR SP (Immediate_Offset (iword (&80))) *) + 0xd284132a; (* arm_MOV X10 (rvalue (word 8345)) *) + 0xf2aea04a; (* arm_MOVK X10 (word 29954) 16 *) + 0xf2d3c46a; (* arm_MOVK X10 (word 40483) 32 *) + 0xf2f41f2a; (* arm_MOVK X10 (word 41209) 48 *) + 0xd284b2ab; (* arm_MOV X11 (rvalue (word 9621)) *) + 0xf2a3a26b; (* arm_MOVK X11 (word 7443) 16 *) + 0xf2d1e7eb; (* arm_MOVK X11 (word 36671) 32 *) + 0xf2f518cb; (* arm_MOVK X11 (word 43206) 48 *) + 0xd28a484c; (* arm_MOV X12 (rvalue (word 21058)) *) + 0xf2a0b58c; (* arm_MOVK X12 (word 1452) 16 *) + 0xf2d1270c; (* arm_MOVK X12 (word 35128) 32 *) + 0xf2ed8d8c; (* arm_MOVK X12 (word 27756) 48 *) + 0xd280c2ad; (* arm_MOV X13 (rvalue (word 1557)) *) + 0xf2a82eed; (* arm_MOVK X13 (word 16759) 16 *) + 0xf2c1164d; (* arm_MOVK X13 (word 2226) 32 *) + 0xf2e4ecad; (* arm_MOVK X13 (word 10085) 48 *) + 0xa9062fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&96))) *) + 0xa90737ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&112))) *) + 0xd2800155; (* arm_MOV X21 (rvalue (word 10)) *) + 0xd2800036; (* arm_MOV X22 (rvalue (word 1)) *) + 0x1400010b; (* arm_B (word 1068) *) + 0xeb1f015f; (* arm_CMP X10 XZR *) + 0xda9f53ee; (* arm_CSETM X14 Condition_MI *) + 0xda8a554a; (* arm_CNEG X10 X10 Condition_MI *) + 0xeb1f017f; (* arm_CMP X11 XZR *) + 0xda9f53ef; (* arm_CSETM X15 Condition_MI *) + 0xda8b556b; (* arm_CNEG X11 X11 Condition_MI *) + 0xeb1f019f; (* arm_CMP X12 XZR *) + 0xda9f53f0; (* arm_CSETM X16 Condition_MI *) + 0xda8c558c; (* arm_CNEG X12 X12 Condition_MI *) + 0xeb1f01bf; (* arm_CMP X13 XZR *) + 0xda9f53f1; (* arm_CSETM X17 Condition_MI *) + 0xda8d55ad; (* arm_CNEG X13 X13 Condition_MI *) + 0x8a0e0140; (* arm_AND X0 X10 X14 *) + 0x8a0f0161; (* arm_AND X1 X11 X15 *) + 0x8b010009; (* arm_ADD X9 X0 X1 *) + 0x8a100180; (* arm_AND X0 X12 X16 *) + 0x8a1101a1; (* arm_AND X1 X13 X17 *) + 0x8b010013; (* arm_ADD X19 X0 X1 *) + 0xf94003e7; (* arm_LDR X7 SP (Immediate_Offset (word 0)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94013e8; (* arm_LDR X8 SP (Immediate_Offset (word 32)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000265; (* arm_ADDS X5 X19 X0 *) + 0x9a0103e3; (* arm_ADC X3 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf94007e7; (* arm_LDR X7 SP (Immediate_Offset (word 8)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94017e8; (* arm_LDR X8 SP (Immediate_Offset (word 40)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0x93c4ec44; (* arm_EXTR X4 X2 X4 59 *) + 0xf90003e4; (* arm_STR X4 SP (Immediate_Offset (word 0)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a0103e4; (* arm_ADC X4 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a010084; (* arm_ADC X4 X4 X1 *) + 0x93c5ec65; (* arm_EXTR X5 X3 X5 59 *) + 0xf90013e5; (* arm_STR X5 SP (Immediate_Offset (word 32)) *) + 0xf9400be7; (* arm_LDR X7 SP (Immediate_Offset (word 16)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9401be8; (* arm_LDR X8 SP (Immediate_Offset (word 48)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c2ecc2; (* arm_EXTR X2 X6 X2 59 *) + 0xf90007e2; (* arm_STR X2 SP (Immediate_Offset (word 8)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0x93c3ec83; (* arm_EXTR X3 X4 X3 59 *) + 0xf90017e3; (* arm_STR X3 SP (Immediate_Offset (word 40)) *) + 0xf9400fe7; (* arm_LDR X7 SP (Immediate_Offset (word 24)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x937ffc23; (* arm_ASR X3 X1 63 *) + 0x8a0a0063; (* arm_AND X3 X3 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9401fe8; (* arm_LDR X8 SP (Immediate_Offset (word 56)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0x8a0b0000; (* arm_AND X0 X0 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c6eca6; (* arm_EXTR X6 X5 X6 59 *) + 0xf9000be6; (* arm_STR X6 SP (Immediate_Offset (word 16)) *) + 0x93c5ec65; (* arm_EXTR X5 X3 X5 59 *) + 0xf9000fe5; (* arm_STR X5 SP (Immediate_Offset (word 24)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x937ffc25; (* arm_ASR X5 X1 63 *) + 0x8a0c00a5; (* arm_AND X5 X5 X12 *) + 0xcb0503e5; (* arm_NEG X5 X5 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0x8a0d0000; (* arm_AND X0 X0 X13 *) + 0xcb0000a5; (* arm_SUB X5 X5 X0 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c4ec44; (* arm_EXTR X4 X2 X4 59 *) + 0xf9001be4; (* arm_STR X4 SP (Immediate_Offset (word 48)) *) + 0x93c2eca2; (* arm_EXTR X2 X5 X2 59 *) + 0xf9001fe2; (* arm_STR X2 SP (Immediate_Offset (word 56)) *) + 0xf94023e7; (* arm_LDR X7 SP (Immediate_Offset (word 64)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94033e8; (* arm_LDR X8 SP (Immediate_Offset (word 96)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf90023e4; (* arm_STR X4 SP (Immediate_Offset (word 64)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000265; (* arm_ADDS X5 X19 X0 *) + 0x9a0103e3; (* arm_ADC X3 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0xf90033e5; (* arm_STR X5 SP (Immediate_Offset (word 96)) *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf94027e7; (* arm_LDR X7 SP (Immediate_Offset (word 72)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94037e8; (* arm_LDR X8 SP (Immediate_Offset (word 104)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0xf90027e2; (* arm_STR X2 SP (Immediate_Offset (word 72)) *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a0103e4; (* arm_ADC X4 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0xf90037e3; (* arm_STR X3 SP (Immediate_Offset (word 104)) *) + 0x9a010084; (* arm_ADC X4 X4 X1 *) + 0xf9402be7; (* arm_LDR X7 SP (Immediate_Offset (word 80)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9403be8; (* arm_LDR X8 SP (Immediate_Offset (word 112)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0xf9002be6; (* arm_STR X6 SP (Immediate_Offset (word 80)) *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf9003be4; (* arm_STR X4 SP (Immediate_Offset (word 112)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xf9402fe7; (* arm_LDR X7 SP (Immediate_Offset (word 88)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x8a0a01c3; (* arm_AND X3 X14 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9403fe8; (* arm_LDR X8 SP (Immediate_Offset (word 120)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x8a0b01e0; (* arm_AND X0 X15 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c5fc66; (* arm_EXTR X6 X3 X5 63 *) + 0xa94407e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0x8b83fcc6; (* arm_ADD X6 X6 (Shiftedreg X3 ASR 63) *) + 0xd2800263; (* arm_MOV X3 (rvalue (word 19)) *) + 0x9b037cc4; (* arm_MUL X4 X6 X3 *) + 0x8b06fca5; (* arm_ADD X5 X5 (Shiftedreg X6 LSL 63) *) + 0x9b437cc3; (* arm_SMULH X3 X6 X3 *) + 0xf9402be6; (* arm_LDR X6 SP (Immediate_Offset (word 80)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba030021; (* arm_ADCS X1 X1 X3 *) + 0x937ffc63; (* arm_ASR X3 X3 63 *) + 0xba0300c6; (* arm_ADCS X6 X6 X3 *) + 0x9a0300a5; (* arm_ADC X5 X5 X3 *) + 0xa90407e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xa90517e6; (* arm_STP X6 X5 SP (Immediate_Offset (iword (&80))) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x8a0c0205; (* arm_AND X5 X16 X12 *) + 0xcb0503e5; (* arm_NEG X5 X5 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x8a0d0220; (* arm_AND X0 X17 X13 *) + 0xcb0000a5; (* arm_SUB X5 X5 X0 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c2fca6; (* arm_EXTR X6 X5 X2 63 *) + 0xa94607e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&96))) *) + 0x8b85fcc6; (* arm_ADD X6 X6 (Shiftedreg X5 ASR 63) *) + 0xd2800265; (* arm_MOV X5 (rvalue (word 19)) *) + 0x9b057cc4; (* arm_MUL X4 X6 X5 *) + 0x8b06fc42; (* arm_ADD X2 X2 (Shiftedreg X6 LSL 63) *) + 0x9b457cc5; (* arm_SMULH X5 X6 X5 *) + 0xf9403be3; (* arm_LDR X3 SP (Immediate_Offset (word 112)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba050021; (* arm_ADCS X1 X1 X5 *) + 0x937ffca5; (* arm_ASR X5 X5 63 *) + 0xba050063; (* arm_ADCS X3 X3 X5 *) + 0x9a050042; (* arm_ADC X2 X2 X5 *) + 0xa90607e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&96))) *) + 0xa9070be3; (* arm_STP X3 X2 SP (Immediate_Offset (iword (&112))) *) + 0xaa1603e1; (* arm_MOV X1 X22 *) + 0xf94003e2; (* arm_LDR X2 SP (Immediate_Offset (word 0)) *) + 0xf94013e3; (* arm_LDR X3 SP (Immediate_Offset (word 32)) *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x91440088; (* arm_ADD X8 X4 (rvalue (word 1048576)) *) + 0x9355a508; (* arm_SBFM X8 X8 21 41 *) + 0xd2a0020b; (* arm_MOVZ X11 (word 16) 16 *) + 0x8b0b556b; (* arm_ADD X11 X11 (Shiftedreg X11 LSL 21) *) + 0x8b0b0089; (* arm_ADD X9 X4 X11 *) + 0x936afd29; (* arm_ASR X9 X9 42 *) + 0x914400aa; (* arm_ADD X10 X5 (rvalue (word 1048576)) *) + 0x9355a54a; (* arm_SBFM X10 X10 21 41 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0x936afd6b; (* arm_ASR X11 X11 42 *) + 0x9b027d06; (* arm_MUL X6 X8 X2 *) + 0x9b037d27; (* arm_MUL X7 X9 X3 *) + 0x9b027d42; (* arm_MUL X2 X10 X2 *) + 0x9b037d63; (* arm_MUL X3 X11 X3 *) + 0x8b0700c4; (* arm_ADD X4 X6 X7 *) + 0x8b030045; (* arm_ADD X5 X2 X3 *) + 0x9354fc82; (* arm_ASR X2 X4 20 *) + 0x9354fca3; (* arm_ASR X3 X5 20 *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9144008c; (* arm_ADD X12 X4 (rvalue (word 1048576)) *) + 0x9355a58c; (* arm_SBFM X12 X12 21 41 *) + 0xd2a0020f; (* arm_MOVZ X15 (word 16) 16 *) + 0x8b0f55ef; (* arm_ADD X15 X15 (Shiftedreg X15 LSL 21) *) + 0x8b0f008d; (* arm_ADD X13 X4 X15 *) + 0x936afdad; (* arm_ASR X13 X13 42 *) + 0x914400ae; (* arm_ADD X14 X5 (rvalue (word 1048576)) *) + 0x9355a5ce; (* arm_SBFM X14 X14 21 41 *) + 0x8b0f00af; (* arm_ADD X15 X5 X15 *) + 0x936afdef; (* arm_ASR X15 X15 42 *) + 0x9b027d86; (* arm_MUL X6 X12 X2 *) + 0x9b037da7; (* arm_MUL X7 X13 X3 *) + 0x9b027dc2; (* arm_MUL X2 X14 X2 *) + 0x9b037de3; (* arm_MUL X3 X15 X3 *) + 0x8b0700c4; (* arm_ADD X4 X6 X7 *) + 0x8b030045; (* arm_ADD X5 X2 X3 *) + 0x9354fc82; (* arm_ASR X2 X4 20 *) + 0x9354fca3; (* arm_ASR X3 X5 20 *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9b087d82; (* arm_MUL X2 X12 X8 *) + 0x9b097d83; (* arm_MUL X3 X12 X9 *) + 0x9b087dc6; (* arm_MUL X6 X14 X8 *) + 0x9b097dc7; (* arm_MUL X7 X14 X9 *) + 0x9b0a09a8; (* arm_MADD X8 X13 X10 X2 *) + 0x9b0b0da9; (* arm_MADD X9 X13 X11 X3 *) + 0x9b0a19f0; (* arm_MADD X16 X15 X10 X6 *) + 0x9b0b1df1; (* arm_MADD X17 X15 X11 X7 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9144008c; (* arm_ADD X12 X4 (rvalue (word 1048576)) *) + 0x9356a98c; (* arm_SBFM X12 X12 22 42 *) + 0xd2a0020f; (* arm_MOVZ X15 (word 16) 16 *) + 0x8b0f55ef; (* arm_ADD X15 X15 (Shiftedreg X15 LSL 21) *) + 0x8b0f008d; (* arm_ADD X13 X4 X15 *) + 0x936bfdad; (* arm_ASR X13 X13 43 *) + 0x914400ae; (* arm_ADD X14 X5 (rvalue (word 1048576)) *) + 0x9356a9ce; (* arm_SBFM X14 X14 22 42 *) + 0x8b0f00af; (* arm_ADD X15 X5 X15 *) + 0x936bfdef; (* arm_ASR X15 X15 43 *) + 0x9b08fd82; (* arm_MNEG X2 X12 X8 *) + 0x9b09fd83; (* arm_MNEG X3 X12 X9 *) + 0x9b08fdc4; (* arm_MNEG X4 X14 X8 *) + 0x9b09fdc5; (* arm_MNEG X5 X14 X9 *) + 0x9b1089aa; (* arm_MSUB X10 X13 X16 X2 *) + 0x9b118dab; (* arm_MSUB X11 X13 X17 X3 *) + 0x9b1091ec; (* arm_MSUB X12 X15 X16 X4 *) + 0x9b1195ed; (* arm_MSUB X13 X15 X17 X5 *) + 0xaa0103f6; (* arm_MOV X22 X1 *) + 0xf10006b5; (* arm_SUBS X21 X21 (rvalue (word 1)) *) + 0x54ff9281; (* arm_BNE (word 2093648) *) + 0xf94003e0; (* arm_LDR X0 SP (Immediate_Offset (word 0)) *) + 0xf94013e1; (* arm_LDR X1 SP (Immediate_Offset (word 32)) *) + 0x9b0a7c00; (* arm_MUL X0 X0 X10 *) + 0x9b0b0021; (* arm_MADD X1 X1 X11 X0 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0xeb1f015f; (* arm_CMP X10 XZR *) + 0xda9f53ee; (* arm_CSETM X14 Condition_MI *) + 0xda8a554a; (* arm_CNEG X10 X10 Condition_MI *) + 0xca0001ce; (* arm_EOR X14 X14 X0 *) + 0xeb1f017f; (* arm_CMP X11 XZR *) + 0xda9f53ef; (* arm_CSETM X15 Condition_MI *) + 0xda8b556b; (* arm_CNEG X11 X11 Condition_MI *) + 0xca0001ef; (* arm_EOR X15 X15 X0 *) + 0xeb1f019f; (* arm_CMP X12 XZR *) + 0xda9f53f0; (* arm_CSETM X16 Condition_MI *) + 0xda8c558c; (* arm_CNEG X12 X12 Condition_MI *) + 0xca000210; (* arm_EOR X16 X16 X0 *) + 0xeb1f01bf; (* arm_CMP X13 XZR *) + 0xda9f53f1; (* arm_CSETM X17 Condition_MI *) + 0xda8d55ad; (* arm_CNEG X13 X13 Condition_MI *) + 0xca000231; (* arm_EOR X17 X17 X0 *) + 0x8a0e0140; (* arm_AND X0 X10 X14 *) + 0x8a0f0161; (* arm_AND X1 X11 X15 *) + 0x8b010009; (* arm_ADD X9 X0 X1 *) + 0xf94023e7; (* arm_LDR X7 SP (Immediate_Offset (word 64)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94033e8; (* arm_LDR X8 SP (Immediate_Offset (word 96)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf90023e4; (* arm_STR X4 SP (Immediate_Offset (word 64)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xf94027e7; (* arm_LDR X7 SP (Immediate_Offset (word 72)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94037e8; (* arm_LDR X8 SP (Immediate_Offset (word 104)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0xf90027e2; (* arm_STR X2 SP (Immediate_Offset (word 72)) *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0xf9402be7; (* arm_LDR X7 SP (Immediate_Offset (word 80)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9403be8; (* arm_LDR X8 SP (Immediate_Offset (word 112)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0xf9002be6; (* arm_STR X6 SP (Immediate_Offset (word 80)) *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xf9402fe7; (* arm_LDR X7 SP (Immediate_Offset (word 88)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x8a0a01c3; (* arm_AND X3 X14 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9403fe8; (* arm_LDR X8 SP (Immediate_Offset (word 120)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x8a0b01e0; (* arm_AND X0 X15 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c5fc66; (* arm_EXTR X6 X3 X5 63 *) + 0xa94407e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xea03007f; (* arm_TST X3 X3 *) + 0x9a8644c6; (* arm_CINC X6 X6 Condition_PL *) + 0xd2800263; (* arm_MOV X3 (rvalue (word 19)) *) + 0x9b037cc4; (* arm_MUL X4 X6 X3 *) + 0x8b06fca5; (* arm_ADD X5 X5 (Shiftedreg X6 LSL 63) *) + 0x9b437cc6; (* arm_SMULH X6 X6 X3 *) + 0xf9402be2; (* arm_LDR X2 SP (Immediate_Offset (word 80)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba060021; (* arm_ADCS X1 X1 X6 *) + 0x937ffcc6; (* arm_ASR X6 X6 63 *) + 0xba060042; (* arm_ADCS X2 X2 X6 *) + 0xba0600a5; (* arm_ADCS X5 X5 X6 *) + 0x9a9f4063; (* arm_CSEL X3 X3 XZR Condition_MI *) + 0xeb030000; (* arm_SUBS X0 X0 X3 *) + 0xfa1f0021; (* arm_SBCS X1 X1 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f00a5; (* arm_SBC X5 X5 XZR *) + 0x9240f8a5; (* arm_AND X5 X5 (rvalue (word 9223372036854775807)) *) + 0xaa1403e4; (* arm_MOV X4 X20 *) + 0xa9000480; (* arm_STP X0 X1 X4 (Immediate_Offset (iword (&0))) *) + 0xa9011482; (* arm_STP X2 X5 X4 (Immediate_Offset (iword (&16))) *) 0xa94813e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&128))) *) 0xa94e23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&224))) *) 0x9b077c6c; (* arm_MUL X12 X3 X7 *) @@ -1632,505 +2346,502 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0xa8c153f3; (* arm_LDP X19 X20 SP (Postimmediate_Offset (iword (&16))) *) 0xd65f03c0 (* arm_RET X30 *) ] -[237; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 127; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; - 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; +[0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 0; 0; 0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; - 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 231; - 32; 114; 124; 109; 148; 95; 82; 68; 84; 227; 241; 178; 176; 54; 70; 15; 174; - 146; 232; 112; 157; 110; 121; 177; 173; 55; 169; 95; 192; 222; 3; 21; 85; - 55; 198; 28; 39; 28; 109; 20; 79; 202; 164; 196; 136; 37; 70; 57; 252; 90; - 229; 254; 41; 17; 105; 245; 114; 132; 77; 120; 159; 148; 21; 73; 0; 173; - 175; 16; 229; 137; 189; 14; 134; 185; 115; 192; 8; 31; 77; 157; 175; 0; 45; - 139; 110; 113; 7; 20; 151; 133; 143; 246; 133; 214; 112; 62; 145; 64; 215; - 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; 138; 143; 104; 52; - 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; 59; 140; 245; 198; - 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; 66; 61; 100; 152; - 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; 122; 135; 5; 18; - 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; 67; 221; 203; 125; - 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; 180; 66; 96; 165; - 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; 110; 177; 107; 35; - 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; 60; 147; 252; 231; - 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; 225; 101; 154; - 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; 179; 168; 250; - 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; 132; 160; 15; 80; - 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; 252; 164; 232; 31; 97; 86; - 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; 243; 49; 129; - 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; 37; 175; 138; - 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; 244; 248; - 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; 98; 218; 53; - 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; 180; 185; - 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; 96; 86; - 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; 69; 116; - 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; 125; 244; - 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; 33; 3; - 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; 69; 57; - 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; 12; 157; - 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; 20; 0; - 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; 126; 74; - 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; 80; 141; - 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; 41; 133; - 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; 45; 167; - 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; 164; 140; - 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; 83; 69; - 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; 21; 119; - 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; 218; 104; - 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; 2; 103; - 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; 162; - 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; 111; - 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; 157; - 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; 210; - 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; 126; - 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; 154; - 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; 144; - 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; 88; - 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; 14; - 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; 226; - 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; 97; 96; - 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; 139; 120; - 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; 92; 124; - 144; 38; 243; 45; 62; 85; 202; 81; 200; 126; 179; 120; 72; 166; 203; 132; - 18; 167; 231; 209; 136; 50; 25; 228; 181; 230; 131; 136; 154; 90; 236; 16; - 242; 76; 246; 33; 144; 45; 165; 4; 45; 50; 156; 191; 198; 117; 51; 159; 193; - 185; 9; 11; 210; 66; 67; 58; 122; 88; 97; 254; 100; 170; 248; 28; 59; 20; - 171; 202; 138; 150; 125; 124; 134; 159; 41; 39; 9; 39; 142; 37; 84; 95; 117; - 9; 24; 234; 75; 211; 167; 208; 225; 38; 65; 55; 163; 70; 181; 33; 67; 131; - 136; 162; 88; 248; 79; 169; 60; 237; 19; 83; 86; 212; 14; 206; 250; 52; 191; - 181; 207; 61; 92; 245; 113; 179; 234; 201; 165; 60; 101; 10; 143; 33; 133; - 209; 69; 122; 10; 73; 53; 147; 4; 70; 120; 55; 21; 154; 246; 225; 49; 204; - 9; 234; 96; 0; 101; 233; 110; 248; 119; 21; 4; 126; 243; 103; 91; 206; 150; - 164; 178; 102; 150; 151; 86; 189; 216; 146; 84; 255; 208; 44; 89; 74; 41; - 236; 60; 80; 178; 172; 19; 8; 101; 67; 105; 86; 152; 7; 98; 38; 12; 219; 24; - 184; 74; 53; 110; 96; 217; 49; 92; 93; 199; 205; 168; 0; 79; 250; 130; 9; - 212; 226; 83; 70; 205; 43; 225; 23; 157; 182; 171; 29; 235; 249; 114; 86; - 252; 83; 232; 175; 53; 181; 112; 186; 109; 214; 150; 39; 117; 15; 172; 71; - 117; 114; 17; 148; 23; 53; 165; 50; 55; 132; 100; 223; 166; 68; 166; 211; - 221; 191; 15; 136; 89; 101; 59; 112; 165; 26; 58; 173; 64; 37; 133; 203; - 104; 100; 76; 142; 247; 179; 0; 9; 27; 101; 157; 103; 159; 27; 133; 10; 242; - 66; 51; 3; 97; 203; 8; 225; 163; 48; 139; 232; 127; 245; 1; 214; 20; 215; - 45; 237; 202; 58; 31; 55; 49; 173; 22; 200; 190; 15; 40; 237; 227; 239; 230; - 216; 91; 89; 217; 82; 245; 35; 198; 246; 114; 23; 231; 15; 60; 41; 30; 5; - 11; 3; 20; 67; 173; 188; 240; 251; 94; 0; 96; 213; 94; 12; 135; 209; 46; 15; - 183; 142; 160; 230; 132; 208; 51; 144; 31; 32; 112; 102; 123; 206; 225; 90; - 58; 76; 149; 250; 184; 220; 52; 164; 56; 65; 11; 132; 150; 108; 125; 246; - 12; 135; 44; 232; 123; 41; 116; 133; 56; 222; 90; 165; 98; 114; 178; 77; - 129; 124; 221; 160; 61; 201; 228; 117; 248; 186; 77; 41; 185; 113; 167; 130; - 50; 185; 96; 196; 198; 244; 183; 63; 214; 128; 129; 193; 102; 234; 61; 199; - 233; 109; 242; 248; 77; 160; 213; 4; 137; 71; 211; 66; 1; 177; 74; 174; 251; - 250; 152; 9; 93; 85; 99; 172; 200; 246; 4; 177; 144; 47; 65; 74; 172; 90; 8; - 41; 201; 58; 107; 50; 79; 198; 224; 225; 99; 230; 130; 178; 81; 85; 131; 75; - 26; 74; 245; 53; 107; 71; 194; 104; 159; 24; 254; 163; 157; 27; 52; 81; 127; - 189; 10; 13; 58; 96; 70; 174; 211; 225; 50; 201; 137; 128; 99; 189; 152; - 135; 57; 145; 37; 223; 53; 2; 186; 116; 210; 92; 20; 28; 67; 215; 243; 117; - 100; 56; 232; 50; 239; 217; 229; 106; 175; 139; 91; 54; 30; 104; 91; 56; - 182; 56; 82; 130; 225; 101; 125; 22; 193; 41; 73; 35; 232; 173; 119; 160; - 171; 236; 77; 152; 157; 56; 235; 25; 173; 119; 63; 56; 148; 215; 84; 41; - 126; 107; 236; 199; 122; 58; 124; 235; 58; 123; 199; 89; 207; 159; 9; 29; - 194; 92; 20; 72; 229; 215; 40; 204; 146; 193; 53; 69; 1; 126; 36; 72; 229; - 193; 231; 128; 238; 115; 41; 59; 116; 40; 95; 74; 98; 207; 92; 34; 37; 215; - 173; 211; 93; 44; 21; 178; 129; 51; 26; 145; 125; 248; 8; 91; 173; 159; 179; - 216; 59; 254; 153; 71; 107; 96; 5; 111; 98; 169; 123; 23; 146; 158; 254; - 159; 225; 202; 229; 13; 29; 231; 174; 152; 68; 16; 131; 45; 148; 174; 244; - 63; 200; 58; 83; 88; 46; 225; 77; 113; 131; 100; 27; 249; 73; 49; 67; 91; - 98; 191; 44; 90; 101; 220; 181; 173; 179; 39; 40; 99; 18; 132; 250; 135; - 216; 248; 73; 171; 145; 94; 137; 96; 24; 108; 248; 12; 237; 242; 236; 233; - 212; 223; 53; 7; 18; 6; 109; 180; 231; 107; 185; 4; 152; 160; 157; 188; 107; - 194; 109; 217; 47; 230; 226; 115; 94; 81; 170; 73; 84; 99; 91; 237; 58; 130; - 198; 11; 159; 196; 101; 168; 196; 209; 66; 91; 233; 31; 12; 133; 185; 21; - 211; 3; 111; 109; 215; 48; 29; 156; 47; 99; 14; 221; 204; 46; 21; 49; 137; - 118; 150; 182; 208; 81; 88; 122; 99; 168; 107; 183; 223; 82; 57; 239; 14; - 160; 73; 125; 211; 109; 199; 228; 6; 33; 23; 68; 68; 108; 105; 127; 141; - 146; 128; 214; 83; 251; 38; 63; 77; 105; 164; 158; 115; 180; 176; 75; 134; - 46; 17; 151; 198; 16; 222; 95; 190; 125; 39; 196; 147; 100; 162; 126; 173; - 25; 173; 79; 93; 38; 144; 69; 48; 70; 200; 223; 0; 14; 9; 254; 102; 237; - 171; 28; 230; 37; 5; 200; 88; 131; 160; 42; 166; 12; 71; 66; 32; 122; 227; - 74; 61; 106; 220; 237; 17; 59; 166; 211; 100; 116; 239; 6; 8; 85; 175; 155; - 191; 3; 4; 102; 88; 204; 40; 225; 19; 63; 126; 116; 89; 180; 236; 115; 88; - 111; 245; 104; 18; 204; 237; 61; 182; 160; 44; 226; 134; 69; 99; 120; 109; - 86; 52; 8; 193; 156; 159; 164; 55; 22; 81; 196; 155; 168; 213; 86; 142; 188; - 219; 210; 127; 127; 15; 236; 181; 28; 217; 53; 204; 94; 202; 91; 151; 51; - 208; 47; 90; 198; 133; 66; 5; 161; 195; 103; 22; 243; 42; 17; 100; 108; 88; - 238; 26; 115; 64; 226; 10; 104; 42; 178; 147; 71; 243; 165; 251; 20; 212; - 247; 133; 105; 22; 70; 215; 60; 87; 0; 200; 201; 132; 94; 62; 89; 30; 19; - 97; 123; 182; 242; 195; 47; 108; 82; 252; 131; 234; 156; 130; 20; 194; 149; - 221; 151; 132; 123; 67; 255; 167; 181; 78; 170; 48; 78; 116; 108; 139; 232; - 133; 60; 97; 93; 12; 158; 115; 129; 117; 95; 30; 199; 217; 47; 184; 236; - 113; 78; 47; 11; 231; 33; 227; 119; 164; 64; 185; 221; 86; 230; 128; 79; 29; - 206; 206; 86; 101; 191; 126; 123; 93; 83; 196; 59; 252; 5; 221; 222; 175; - 82; 174; 179; 184; 36; 207; 48; 59; 237; 140; 99; 149; 52; 149; 129; 190; - 169; 131; 188; 164; 51; 4; 31; 101; 92; 71; 103; 55; 55; 217; 173; 209; 64; - 253; 153; 186; 47; 39; 208; 244; 150; 111; 22; 7; 179; 174; 59; 240; 21; 82; - 240; 99; 67; 153; 249; 24; 59; 108; 165; 190; 31; 144; 101; 36; 20; 203; - 149; 64; 99; 53; 85; 193; 22; 64; 20; 18; 239; 96; 188; 16; 137; 12; 20; 56; - 158; 140; 124; 144; 48; 87; 144; 245; 107; 138; 91; 65; 225; 241; 120; 167; - 15; 126; 167; 195; 186; 247; 159; 64; 6; 80; 154; 162; 154; 184; 215; 82; - 111; 86; 90; 99; 122; 246; 28; 82; 2; 148; 82; 157; 10; 11; 238; 63; 81; - 102; 90; 223; 15; 92; 231; 152; 143; 206; 7; 225; 191; 136; 134; 97; 212; - 237; 44; 56; 113; 126; 10; 160; 63; 228; 94; 47; 119; 32; 103; 20; 177; 206; - 154; 7; 150; 177; 148; 248; 232; 74; 130; 172; 0; 77; 34; 248; 74; 196; 108; - 205; 247; 217; 83; 23; 0; 52; 219; 61; 150; 45; 35; 105; 60; 88; 56; 151; - 180; 218; 135; 222; 29; 133; 242; 145; 160; 249; 209; 215; 170; 182; 237; - 72; 160; 47; 254; 181; 18; 77; 227; 252; 150; 196; 251; 240; 113; 237; 91; - 243; 173; 107; 130; 185; 115; 97; 197; 40; 255; 97; 114; 4; 210; 111; 32; - 177; 111; 249; 118; 155; 116; 146; 30; 111; 173; 38; 124; 43; 223; 19; 137; - 75; 80; 35; 211; 102; 75; 195; 139; 28; 117; 192; 157; 64; 140; 184; 199; - 150; 7; 194; 147; 126; 111; 5; 174; 166; 174; 4; 246; 90; 31; 153; 156; 228; - 190; 241; 81; 35; 193; 102; 107; 255; 238; 181; 8; 168; 97; 81; 33; 224; 1; - 15; 193; 206; 15; 68; 30; 254; 73; 166; 88; 77; 100; 126; 119; 173; 49; 162; - 174; 252; 33; 210; 208; 127; 136; 90; 28; 68; 2; 243; 17; 197; 131; 113; - 170; 1; 73; 69; 78; 36; 196; 157; 210; 242; 61; 10; 222; 216; 147; 116; 14; - 2; 43; 77; 33; 12; 130; 126; 6; 200; 108; 10; 185; 234; 111; 22; 121; 55; - 65; 240; 248; 26; 140; 84; 183; 177; 8; 180; 153; 98; 36; 124; 122; 15; 206; - 57; 217; 6; 30; 249; 176; 96; 247; 19; 18; 109; 114; 123; 136; 187; 65; 216; - 73; 124; 86; 108; 128; 103; 146; 106; 30; 121; 202; 204; 4; 109; 6; 75; 57; - 204; 227; 69; 86; 159; 166; 210; 140; 120; 160; 134; 182; 149; 92; 210; 247; - 57; 170; 224; 128; 217; 151; 28; 181; 198; 82; 66; 56; 208; 53; 170; 85; - 205; 7; 147; 244; 67; 125; 98; 195; 138; 183; 207; 54; 189; 86; 84; 169; 20; - 13; 193; 25; 197; 42; 144; 250; 181; 148; 180; 116; 244; 234; 90; 122; 248; - 169; 130; 131; 175; 230; 148; 224; 155; 135; 177; 109; 234; 13; 171; 229; - 68; 115; 84; 191; 102; 170; 9; 67; 27; 143; 136; 88; 18; 218; 47; 75; 86; - 253; 179; 210; 135; 94; 221; 177; 131; 84; 136; 120; 44; 91; 122; 121; 168; - 214; 116; 235; 186; 21; 50; 23; 196; 250; 241; 92; 245; 126; 197; 5; 139; - 60; 90; 31; 0; 41; 251; 204; 234; 82; 135; 204; 215; 10; 207; 8; 52; 121; - 98; 19; 21; 82; 148; 61; 150; 25; 3; 23; 15; 235; 102; 148; 61; 136; 250; - 178; 51; 168; 120; 60; 0; 117; 167; 127; 58; 9; 190; 215; 22; 58; 230; 125; - 16; 229; 207; 50; 243; 154; 220; 255; 119; 163; 127; 103; 11; 68; 24; 191; - 213; 112; 3; 20; 163; 164; 25; 43; 37; 106; 134; 18; 169; 96; 68; 96; 233; - 184; 222; 211; 120; 119; 4; 216; 63; 127; 45; 94; 138; 191; 49; 30; 208; - 103; 62; 101; 123; 194; 6; 138; 3; 123; 243; 144; 105; 211; 213; 25; 217; - 158; 242; 185; 78; 219; 187; 174; 19; 82; 53; 145; 185; 76; 5; 234; 8; 199; - 86; 14; 38; 114; 127; 213; 222; 88; 119; 61; 65; 233; 173; 157; 231; 120; - 125; 230; 41; 151; 213; 249; 87; 242; 230; 167; 122; 227; 14; 145; 219; 89; - 156; 3; 158; 187; 91; 27; 161; 106; 139; 212; 15; 91; 38; 83; 109; 218; 136; - 169; 191; 147; 49; 130; 96; 137; 40; 126; 213; 97; 50; 201; 138; 215; 67; - 129; 92; 58; 45; 148; 242; 121; 233; 141; 200; 182; 37; 47; 218; 151; 105; - 1; 242; 172; 234; 167; 27; 37; 228; 180; 78; 239; 135; 79; 180; 9; 165; 125; - 106; 188; 27; 171; 144; 125; 254; 107; 1; 167; 131; 166; 204; 154; 109; 11; - 197; 242; 77; 95; 80; 144; 170; 53; 228; 204; 95; 13; 97; 107; 150; 255; - 152; 97; 68; 13; 161; 25; 151; 195; 179; 150; 244; 163; 7; 26; 50; 37; 78; - 143; 24; 170; 206; 17; 240; 27; 117; 167; 213; 152; 148; 125; 160; 216; 141; - 80; 31; 22; 237; 25; 202; 230; 220; 135; 214; 44; 10; 86; 77; 207; 100; 134; - 196; 104; 53; 127; 56; 58; 128; 34; 82; 233; 65; 135; 252; 83; 86; 89; 177; - 218; 59; 72; 73; 250; 52; 135; 20; 15; 120; 250; 224; 52; 5; 54; 112; 11; - 111; 16; 189; 7; 227; 227; 111; 119; 16; 34; 254; 160; 230; 221; 9; 193; - 134; 50; 246; 128; 218; 180; 10; 77; 207; 214; 224; 127; 48; 248; 69; 62; - 72; 130; 164; 157; 111; 174; 105; 82; 0; 5; 122; 135; 247; 156; 144; 82; - 112; 28; 212; 152; 78; 135; 226; 125; 238; 50; 96; 12; 126; 185; 233; 98; - 195; 20; 138; 163; 96; 106; 222; 220; 129; 87; 64; 168; 122; 170; 234; 213; - 125; 33; 176; 30; 142; 36; 208; 196; 183; 157; 82; 191; 116; 77; 225; 151; - 118; 224; 84; 35; 86; 60; 23; 155; 106; 30; 101; 73; 90; 121; 31; 194; 167; - 127; 200; 14; 140; 190; 185; 31; 223; 139; 130; 2; 10; 227; 248; 231; 186; - 0; 108; 79; 108; 173; 29; 153; 99; 73; 10; 246; 246; 93; 110; 138; 5; 7; - 127; 246; 49; 219; 196; 2; 235; 233; 43; 251; 188; 16; 137; 253; 37; 237; - 180; 221; 92; 92; 31; 19; 200; 70; 206; 155; 203; 160; 19; 28; 178; 51; 49; - 142; 125; 8; 248; 146; 6; 54; 247; 99; 113; 210; 55; 198; 220; 244; 99; 89; - 234; 101; 32; 230; 164; 37; 217; 96; 193; 90; 46; 247; 155; 101; 91; 140; - 227; 94; 176; 185; 175; 154; 199; 19; 26; 7; 78; 45; 157; 191; 10; 41; 51; - 233; 109; 110; 238; 142; 23; 151; 16; 174; 23; 171; 59; 28; 176; 183; 202; - 199; 22; 178; 154; 28; 204; 195; 187; 7; 116; 211; 101; 125; 213; 88; 74; - 80; 80; 71; 116; 82; 144; 41; 26; 19; 107; 96; 242; 9; 190; 70; 67; 116; 68; - 125; 232; 64; 37; 43; 181; 21; 212; 218; 72; 29; 62; 96; 59; 161; 24; 138; - 58; 124; 247; 189; 205; 47; 193; 40; 183; 78; 174; 145; 102; 124; 89; 76; - 35; 126; 200; 180; 133; 10; 61; 157; 136; 100; 231; 250; 74; 53; 12; 201; - 226; 218; 29; 158; 106; 12; 7; 30; 135; 10; 137; 137; 188; 75; 153; 181; 1; - 51; 96; 66; 221; 91; 58; 174; 107; 115; 60; 158; 213; 25; 226; 173; 97; 13; - 100; 212; 133; 38; 15; 48; 231; 62; 183; 214; 125; 158; 228; 85; 210; 245; - 172; 30; 11; 97; 92; 17; 22; 128; 202; 135; 225; 146; 93; 151; 153; 60; 194; - 37; 145; 151; 98; 87; 129; 19; 24; 117; 30; 132; 71; 121; 250; 67; 215; 70; - 156; 99; 89; 250; 198; 229; 116; 43; 5; 227; 29; 94; 6; 161; 48; 144; 184; - 207; 162; 198; 71; 125; 224; 214; 240; 142; 20; 208; 218; 63; 60; 111; 84; - 145; 154; 116; 62; 157; 87; 129; 187; 38; 16; 98; 236; 113; 128; 236; 201; - 52; 141; 245; 140; 20; 39; 240; 52; 121; 246; 146; 164; 70; 169; 10; 132; - 246; 190; 132; 153; 70; 84; 24; 97; 137; 42; 188; 161; 92; 212; 187; 93; - 189; 30; 250; 242; 63; 109; 117; 228; 154; 125; 47; 87; 226; 127; 72; 243; - 136; 187; 69; 195; 86; 141; 168; 96; 105; 109; 11; 209; 159; 185; 161; 174; - 78; 173; 235; 143; 39; 102; 57; 147; 140; 31; 104; 170; 177; 152; 12; 41; - 32; 156; 148; 33; 140; 82; 60; 157; 33; 145; 82; 17; 57; 123; 103; 156; 254; - 2; 221; 4; 65; 42; 66; 36; 17; 94; 191; 178; 114; 181; 58; 163; 152; 51; 12; - 250; 161; 102; 182; 82; 250; 1; 97; 203; 148; 213; 83; 175; 175; 0; 59; 134; - 44; 184; 106; 9; 219; 6; 78; 33; 129; 53; 79; 228; 12; 201; 182; 168; 33; - 245; 42; 158; 64; 42; 193; 36; 101; 129; 164; 252; 142; 164; 181; 101; 1; - 118; 106; 132; 160; 116; 164; 144; 241; 192; 124; 47; 205; 132; 249; 239; - 18; 143; 43; 170; 88; 6; 41; 94; 105; 184; 200; 254; 191; 217; 103; 27; 89; - 250; 155; 180; 128; 28; 13; 47; 49; 138; 236; 243; 171; 94; 81; 121; 89; - 136; 28; 240; 158; 192; 51; 112; 114; 203; 123; 143; 202; 199; 46; 224; 61; - 93; 181; 24; 159; 113; 179; 185; 153; 30; 100; 140; 161; 250; 229; 101; 228; - 237; 5; 159; 194; 54; 17; 8; 97; 139; 18; 48; 112; 134; 79; 155; 72; 239; - 146; 235; 58; 45; 16; 50; 210; 97; 168; 22; 97; 180; 83; 98; 225; 36; 170; - 11; 25; 231; 171; 126; 61; 191; 190; 108; 73; 186; 251; 245; 73; 212; 207; - 91; 138; 16; 154; 148; 48; 235; 115; 100; 188; 112; 221; 64; 220; 28; 13; - 124; 48; 193; 148; 194; 146; 116; 110; 250; 203; 109; 168; 4; 86; 46; 87; - 156; 30; 140; 98; 93; 21; 65; 71; 136; 197; 172; 134; 77; 138; 235; 99; 87; - 81; 246; 82; 163; 145; 91; 81; 103; 136; 194; 166; 161; 6; 182; 100; 23; - 124; 212; 209; 136; 114; 81; 139; 65; 224; 64; 17; 84; 114; 209; 246; 172; - 24; 96; 26; 3; 159; 198; 66; 39; 254; 137; 158; 152; 32; 127; 204; 45; 58; - 253; 119; 151; 73; 146; 216; 79; 165; 44; 124; 133; 50; 160; 227; 7; 210; - 100; 216; 121; 162; 41; 126; 166; 12; 29; 237; 3; 4; 46; 236; 234; 133; 139; - 39; 116; 22; 223; 43; 203; 122; 7; 220; 33; 86; 90; 244; 203; 97; 22; 76; - 10; 100; 211; 149; 5; 247; 80; 153; 11; 115; 82; 197; 78; 135; 53; 45; 75; - 201; 141; 111; 36; 152; 207; 200; 230; 197; 206; 53; 192; 22; 250; 70; 203; - 247; 204; 61; 48; 8; 67; 69; 215; 91; 194; 76; 178; 40; 149; 209; 154; 127; - 129; 193; 53; 99; 101; 84; 107; 127; 54; 114; 192; 79; 110; 182; 184; 102; - 131; 173; 128; 115; 0; 120; 58; 19; 42; 121; 231; 21; 33; 147; 196; 133; - 201; 221; 205; 189; 162; 137; 76; 198; 98; 215; 163; 173; 168; 61; 30; 157; - 44; 248; 103; 48; 18; 219; 183; 91; 190; 98; 202; 198; 103; 244; 97; 9; 238; - 82; 25; 33; 214; 33; 236; 4; 112; 71; 213; 155; 119; 96; 35; 24; 210; 224; - 240; 88; 109; 202; 13; 116; 11; 175; 240; 211; 245; 11; 183; 80; 247; 113; - 46; 227; 138; 244; 234; 79; 52; 189; 91; 165; 211; 78; 232; 96; 237; 209; - 80; 63; 155; 72; 237; 0; 229; 26; 38; 237; 42; 199; 6; 57; 247; 0; 225; 136; - 217; 143; 182; 154; 151; 1; 54; 243; 154; 5; 233; 245; 71; 109; 43; 191; - 120; 220; 83; 14; 122; 135; 113; 121; 191; 41; 8; 185; 49; 230; 23; 109; 99; - 68; 68; 94; 147; 104; 39; 24; 46; 197; 5; 77; 245; 74; 74; 90; 154; 45; 99; - 39; 206; 96; 178; 84; 81; 240; 31; 209; 112; 82; 249; 114; 142; 195; 109; - 216; 56; 193; 124; 38; 13; 205; 31; 96; 205; 12; 233; 41; 100; 145; 103; 43; - 219; 255; 234; 135; 209; 133; 130; 169; 100; 168; 208; 216; 187; 251; 180; - 165; 247; 99; 38; 2; 127; 242; 88; 182; 130; 226; 156; 217; 34; 43; 188; 59; - 88; 10; 60; 88; 82; 201; 23; 185; 243; 198; 228; 15; 184; 249; 63; 101; 12; - 60; 223; 188; 215; 167; 13; 155; 14; 214; 84; 171; 182; 238; 160; 67; 135; - 84; 74; 109; 164; 102; 105; 57; 186; 179; 43; 172; 138; 161; 17; 248; 107; - 178; 40; 86; 91; 104; 228; 102; 146; 155; 146; 157; 2; 119; 164; 112; 232; - 95; 135; 87; 35; 50; 198; 58; 143; 203; 251; 245; 236; 244; 212; 217; 32; - 182; 43; 56; 147; 132; 238; 141; 220; 159; 121; 76; 161; 234; 197; 80; 60; - 251; 242; 214; 139; 220; 14; 221; 160; 183; 199; 156; 167; 58; 198; 84; 26; - 159; 141; 44; 43; 3; 11; 174; 251; 103; 41; 96; 7; 225; 156; 111; 42; 194; - 225; 205; 177; 84; 16; 173; 223; 50; 235; 72; 2; 233; 168; 196; 234; 192; - 205; 172; 51; 123; 62; 95; 62; 150; 121; 252; 19; 71; 54; 114; 181; 224; 32; - 53; 6; 147; 150; 19; 254; 3; 234; 136; 124; 207; 127; 67; 188; 89; 201; 211; - 11; 196; 212; 247; 217; 222; 147; 248; 209; 84; 145; 105; 38; 117; 178; 180; - 117; 92; 93; 49; 165; 218; 54; 2; 45; 132; 203; 204; 142; 238; 95; 52; 163; - 200; 240; 34; 237; 219; 57; 125; 97; 90; 151; 115; 16; 218; 117; 99; 249; - 77; 2; 228; 112; 200; 48; 24; 26; 37; 211; 120; 28; 217; 140; 101; 72; 25; - 43; 144; 138; 67; 183; 41; 11; 177; 24; 126; 70; 62; 67; 244; 146; 243; 55; - 111; 24; 107; 86; 31; 161; 185; 25; 14; 98; 214; 209; 31; 138; 183; 15; 34; - 77; 201; 129; 163; 88; 66; 42; 54; 47; 235; 107; 43; 19; 217; 113; 144; 71; - 130; 65; 40; 173; 233; 38; 15; 93; 146; 236; 189; 201; 30; 185; 234; 222; - 242; 138; 244; 200; 91; 230; 75; 40; 112; 110; 163; 235; 127; 72; 120; 52; - 206; 216; 29; 0; 19; 63; 95; 137; 196; 48; 75; 45; 177; 79; 147; 43; 10; - 127; 57; 77; 36; 108; 5; 52; 98; 194; 87; 162; 251; 80; 29; 139; 103; 176; - 222; 58; 130; 212; 123; 245; 138; 83; 166; 110; 220; 176; 194; 62; 167; 29; - 53; 198; 238; 101; 86; 16; 178; 191; 67; 9; 224; 62; 219; 194; 10; 128; 32; - 135; 1; 114; 73; 103; 134; 189; 115; 97; 93; 171; 38; 56; 73; 32; 171; 194; - 9; 178; 32; 75; 179; 127; 192; 42; 52; 158; 84; 147; 61; 55; 33; 8; 34; 216; - 2; 103; 245; 209; 172; 112; 45; 38; 188; 132; 199; 202; 251; 253; 201; 146; - 122; 137; 50; 189; 22; 69; 169; 204; 31; 40; 4; 66; 65; 170; 101; 141; 68; - 98; 93; 165; 22; 178; 183; 195; 89; 216; 44; 97; 78; 198; 44; 153; 73; 222; - 1; 248; 112; 234; 27; 189; 101; 138; 226; 73; 254; 192; 183; 239; 27; 74; - 174; 178; 177; 205; 6; 99; 168; 9; 42; 92; 38; 205; 192; 122; 59; 236; 188; - 1; 140; 67; 238; 43; 130; 59; 199; 251; 192; 37; 181; 12; 83; 233; 63; 149; - 193; 52; 144; 81; 72; 91; 15; 154; 224; 97; 194; 92; 38; 167; 57; 237; 34; - 79; 78; 213; 240; 10; 21; 8; 86; 30; 233; 170; 162; 117; 232; 218; 237; 233; - 178; 33; 244; 146; 233; 125; 107; 29; 83; 188; 49; 113; 249; 128; 169; 77; - 19; 61; 223; 167; 34; 26; 34; 209; 184; 79; 122; 216; 214; 170; 53; 32; 212; - 247; 61; 94; 18; 26; 106; 204; 237; 20; 42; 78; 206; 207; 82; 7; 238; 72; - 223; 183; 8; 236; 6; 243; 250; 255; 195; 196; 89; 84; 185; 42; 11; 113; 5; - 141; 163; 62; 150; 250; 37; 29; 22; 60; 67; 120; 4; 87; 140; 26; 35; 157; - 67; 129; 194; 14; 39; 181; 183; 159; 7; 217; 227; 234; 153; 170; 219; 217; - 3; 43; 108; 37; 245; 3; 44; 125; 164; 83; 123; 117; 24; 15; 121; 121; 88; - 12; 207; 48; 1; 123; 48; 249; 247; 126; 37; 119; 61; 144; 49; 175; 187; 150; - 189; 189; 104; 148; 105; 207; 254; 218; 244; 70; 47; 31; 189; 247; 214; 127; - 164; 20; 1; 239; 124; 127; 179; 71; 74; 218; 253; 31; 211; 133; 87; 144; - 115; 164; 25; 82; 82; 72; 25; 169; 106; 230; 61; 221; 216; 204; 210; 192; - 47; 194; 100; 80; 72; 47; 234; 253; 52; 102; 36; 72; 155; 58; 46; 74; 108; - 78; 28; 62; 41; 225; 18; 81; 146; 75; 19; 110; 55; 160; 93; 161; 220; 181; - 120; 55; 112; 17; 49; 28; 70; 175; 137; 69; 176; 35; 40; 3; 127; 68; 92; 96; - 91; 137; 124; 196; 32; 89; 128; 101; 185; 204; 143; 59; 146; 12; 16; 240; - 231; 119; 239; 226; 2; 101; 37; 1; 0; 238; 179; 174; 168; 206; 109; 167; 36; - 76; 240; 231; 240; 198; 254; 233; 59; 98; 73; 227; 117; 158; 87; 106; 134; - 26; 230; 29; 30; 22; 239; 66; 85; 213; 189; 90; 204; 244; 254; 18; 47; 64; - 199; 192; 223; 178; 34; 69; 10; 7; 164; 201; 64; 127; 110; 208; 16; 104; - 246; 207; 120; 65; 20; 207; 198; 144; 55; 164; 24; 37; 123; 96; 94; 24; 24; - 223; 108; 143; 29; 179; 88; 162; 88; 98; 195; 79; 167; 207; 53; 110; 29; - 230; 102; 79; 255; 179; 225; 247; 213; 205; 108; 171; 172; 103; 80; 20; 207; - 150; 165; 28; 67; 44; 160; 0; 228; 211; 174; 64; 45; 196; 227; 219; 38; 15; - 46; 128; 38; 69; 210; 104; 112; 69; 158; 19; 51; 31; 32; 81; 157; 3; 8; 107; - 127; 82; 253; 6; 0; 124; 1; 100; 73; 177; 24; 168; 164; 37; 46; 176; 14; 34; - 213; 117; 3; 70; 98; 136; 186; 124; 57; 178; 89; 89; 240; 147; 48; 193; 48; - 118; 121; 169; 233; 141; 161; 58; 226; 38; 94; 29; 114; 145; 212; 47; 34; - 58; 108; 110; 118; 32; 211; 57; 35; 231; 121; 19; 200; 251; 195; 21; 120; - 241; 42; 225; 221; 32; 148; 97; 166; 213; 253; 168; 133; 248; 192; 169; 255; - 82; 194; 225; 193; 34; 64; 27; 119; 167; 47; 58; 81; 134; 217; 125; 216; 8; - 207; 212; 249; 113; 155; 172; 245; 179; 131; 162; 30; 27; 195; 107; 208; - 118; 26; 151; 25; 146; 24; 26; 51; 198; 128; 79; 251; 69; 111; 22; 245; 207; - 117; 199; 97; 222; 199; 54; 156; 28; 217; 65; 144; 27; 232; 212; 227; 33; - 254; 189; 131; 107; 124; 22; 49; 175; 114; 117; 157; 58; 47; 81; 38; 158; - 74; 7; 104; 136; 226; 203; 91; 196; 247; 128; 17; 193; 193; 237; 132; 123; - 166; 73; 246; 159; 97; 201; 26; 104; 16; 75; 82; 66; 56; 43; 242; 135; 233; - 156; 238; 59; 52; 104; 80; 200; 80; 98; 74; 132; 113; 157; 252; 17; 177; 8; - 31; 52; 54; 36; 97; 141; 137; 78; 135; 219; 65; 157; 217; 32; 220; 7; 108; - 241; 165; 254; 9; 188; 155; 15; 208; 103; 44; 61; 121; 64; 255; 94; 158; 48; - 226; 235; 70; 56; 38; 45; 26; 227; 73; 99; 139; 53; 253; 211; 155; 0; 183; - 223; 157; 164; 107; 160; 163; 184; 241; 139; 127; 69; 4; 217; 120; 49; 170; - 34; 21; 56; 73; 97; 105; 83; 47; 56; 44; 16; 109; 45; 183; 154; 64; 254; - 218; 39; 242; 70; 182; 145; 51; 200; 232; 108; 48; 36; 5; 245; 112; 254; 69; - 140; 11; 12; 150; 166; 117; 72; 218; 32; 47; 14; 239; 118; 208; 104; 91; - 212; 143; 11; 61; 207; 81; 251; 7; 212; 146; 227; 160; 35; 22; 141; 66; 145; - 20; 149; 200; 32; 73; 242; 98; 162; 12; 99; 63; 200; 7; 240; 5; 184; 212; - 201; 245; 210; 69; 187; 111; 69; 34; 122; 181; 109; 159; 97; 22; 253; 8; - 163; 1; 68; 74; 79; 8; 172; 202; 165; 118; 195; 25; 34; 168; 125; 188; 209; - 67; 70; 222; 184; 222; 198; 56; 189; 96; 45; 89; 129; 29; 56; 76; 42; 236; - 190; 215; 51; 216; 237; 32; 204; 10; 131; 98; 145; 44; 129; 117; 223; 146; - 170; 71; 58; 233; 129; 74; 60; 51; 163; 103; 45; 112; 161; 200; 137; 47; - 154; 54; 74; 58; 13; 232; 141; 124; 29; 122; 19; 99; 21; 160; 237; 120; 138; - 0; 172; 188; 63; 176; 131; 180; 165; 179; 184; 44; 161; 144; 27; 203; 203; - 23; 228; 54; 78; 121; 17; 127; 170; 221; 179; 51; 7; 198; 91; 136; 8; 8; 81; - 63; 13; 2; 168; 230; 192; 29; 20; 36; 157; 238; 239; 63; 119; 60; 247; 89; - 157; 152; 207; 193; 137; 239; 241; 179; 95; 84; 46; 224; 66; 251; 93; 227; - 124; 180; 161; 71; 11; 18; 102; 87; 125; 21; 131; 189; 204; 93; 146; 145; - 148; 128; 204; 34; 83; 32; 161; 60; 228; 214; 144; 63; 24; 127; 229; 40; - 123; 118; 46; 222; 206; 20; 71; 26; 255; 183; 182; 184; 15; 186; 32; 219; - 161; 31; 81; 119; 182; 195; 50; 183; 137; 45; 240; 153; 192; 81; 43; 169; - 241; 165; 156; 72; 173; 117; 56; 79; 34; 171; 50; 73; 47; 118; 252; 199; 27; - 60; 76; 47; 247; 237; 192; 122; 232; 149; 168; 154; 170; 85; 107; 95; 129; - 0; 10; 173; 77; 39; 128; 54; 192; 238; 115; 238; 246; 19; 237; 121; 177; 11; - 17; 105; 109; 82; 198; 165; 12; 134; 3; 134; 195; 40; 137; 228; 245; 89; - 112; 253; 70; 20; 42; 114; 25; 136; 207; 168; 233; 159; 149; 208; 156; 169; - 117; 132; 80; 149; 169; 208; 197; 156; 176; 32; 51; 23; 172; 110; 149; 16; - 27; 51; 4; 207; 142; 98; 188; 221; 208; 169; 24; 177; 188; 152; 43; 128; - 180; 8; 52; 158; 68; 238; 4; 177; 166; 184; 38; 146; 8; 135; 93; 145; 199; - 69; 154; 52; 95; 104; 241; 204; 116; 92; 248; 172; 65; 155; 81; 82; 38; 8; - 129; 49; 115; 182; 71; 177; 173; 17; 237; 42; 201; 153; 15; 180; 236; 52; - 13; 215; 71; 122; 245; 164; 67; 204; 203; 196; 160; 96; 169; 190; 119; 54; - 202; 102; 92; 119; 237; 245; 248; 47; 117; 161; 122; 161; 192; 253; 1; 14; - 2; 217; 222; 17; 4; 231; 239; 202; 9; 120; 14; 137; 108; 140; 14; 227; 109; - 41; 40; 135; 201; 177; 174; 146; 163; 210; 92; 76; 31; 83; 113; 87; 209; 99; - 66; 25; 183; 147; 234; 59; 176; 149; 31; 71; 211; 171; 19; 51; 212; 215; 82; - 5; 123; 63; 126; 225; 226; 112; 147; 189; 236; 91; 14; 178; 29; 15; 18; 123; - 122; 45; 80; 134; 61; 251; 210; 23; 82; 147; 166; 80; 68; 216; 100; 181; 93; - 215; 14; 166; 200; 98; 169; 125; 170; 54; 135; 49; 91; 248; 208; 0; 253; - 132; 124; 119; 46; 20; 139; 151; 98; 192; 168; 5; 71; 100; 2; 244; 199; 18; - 230; 231; 27; 213; 122; 166; 51; 106; 221; 152; 150; 69; 123; 47; 193; 33; - 118; 253; 30; 60; 117; 166; 245; 113; 86; 68; 167; 180; 192; 105; 17; 60; - 178; 5; 116; 82; 31; 151; 205; 199; 168; 81; 72; 199; 123; 56; 168; 169; 82; - 74; 77; 75; 137; 129; 47; 131; 184; 246; 18; 62; 217; 173; 56; 214; 27; 182; - 72; 133; 77; 24; 205; 246; 201; 214; 219; 98; 28; 63; 31; 12; 145; 145; 0; - 31; 143; 46; 44; 225; 242; 191; 224; 79; 223; 164; 56; 116; 146; 238; 10; - 86; 198; 96; 250; 200; 239; 172; 63; 40; 56; 99; 61; 105; 143; 20; 64; 62; - 173; 63; 114; 154; 235; 148; 225; 86; 38; 5; 47; 78; 79; 24; 253; 203; 77; - 47; 139; 225; 130; 196; 177; 141; 111; 64; 228; 30; 25; 127; 44; 13; 99; - 158; 112; 246; 63; 188; 1; 131; 191; 79; 196; 115; 251; 122; 78; 142; 125; - 120; 165; 143; 245; 232; 91; 61; 216; 80; 151; 24; 26; 193; 22; 57; 104; - 133; 8; 208; 6; 229; 239; 164; 105; 45; 1; 189; 100; 246; 120; 19; 175; 57; - 198; 23; 21; 54; 49; 33; 148; 101; 109; 182; 211; 180; 144; 207; 172; 192; - 96; 46; 115; 97; 229; 157; 5; 167; 186; 176; 198; 112; 120; 31; 61; 3; 228; - 70; 217; 38; 205; 97; 65; 88; 162; 124; 210; 114; 160; 177; 242; 187; 4; - 199; 222; 251; 89; 60; 57; 191; 30; 184; 98; 226; 206; 187; 141; 233; 137; - 181; 41; 48; 11; 189; 238; 2; 95; 172; 13; 166; 86; 135; 54; 97; 87; 220; - 171; 235; 106; 47; 224; 23; 125; 15; 206; 76; 45; 63; 25; 127; 240; 220; - 236; 137; 119; 74; 35; 32; 232; 197; 133; 123; 159; 182; 101; 135; 178; 186; - 104; 209; 139; 103; 240; 111; 155; 15; 51; 29; 124; 231; 112; 58; 124; 142; - 175; 176; 81; 109; 95; 58; 82; 178; 120; 113; 182; 13; 210; 118; 96; 209; - 30; 213; 249; 52; 28; 7; 112; 17; 228; 179; 32; 74; 42; 246; 102; 227; 255; - 60; 53; 130; 214; 124; 182; 250; 135; 216; 91; 164; 225; 11; 110; 59; 64; - 186; 50; 106; 132; 42; 0; 96; 110; 233; 18; 16; 146; 217; 67; 9; 220; 59; - 134; 200; 56; 40; 243; 244; 172; 104; 96; 205; 101; 166; 211; 227; 215; 60; - 24; 45; 217; 66; 217; 37; 96; 51; 157; 56; 89; 87; 255; 216; 44; 43; 59; 37; - 240; 62; 48; 80; 70; 74; 207; 176; 107; 209; 171; 119; 197; 21; 65; 107; 73; - 250; 157; 65; 171; 244; 138; 174; 207; 130; 18; 40; 168; 6; 166; 184; 220; - 33; 200; 159; 157; 140; 70; 4; 96; 92; 203; 163; 42; 212; 110; 9; 64; 37; - 156; 47; 238; 18; 76; 77; 91; 18; 171; 29; 163; 148; 129; 208; 195; 11; 186; - 49; 119; 190; 250; 0; 141; 154; 137; 24; 158; 98; 126; 96; 3; 130; 127; 217; - 243; 67; 55; 2; 204; 178; 139; 103; 111; 108; 191; 13; 132; 93; 139; 225; - 159; 48; 13; 56; 110; 112; 199; 101; 225; 185; 166; 45; 176; 110; 171; 32; - 174; 125; 153; 186; 187; 87; 221; 150; 193; 42; 35; 118; 66; 58; 250; 132; - 112; 138; 44; 67; 66; 75; 69; 229; 185; 223; 227; 25; 138; 137; 93; 228; 88; - 156; 33; 0; 159; 190; 209; 235; 109; 161; 206; 119; 241; 31; 203; 126; 68; - 219; 114; 193; 248; 59; 189; 45; 40; 198; 31; 196; 207; 95; 254; 21; 170; - 117; 192; 255; 172; 128; 249; 169; 225; 36; 232; 201; 112; 7; 253; 181; 181; - 69; 154; 217; 97; 207; 36; 121; 58; 27; 233; 132; 9; 134; 137; 62; 62; 48; - 25; 9; 48; 231; 30; 11; 80; 65; 253; 100; 242; 57; 156; 226; 231; 219; 23; - 52; 173; 167; 156; 19; 156; 43; 106; 55; 148; 189; 169; 123; 89; 147; 142; - 27; 233; 160; 64; 152; 136; 104; 52; 215; 18; 23; 225; 123; 9; 254; 171; 74; - 155; 209; 41; 25; 224; 223; 225; 252; 109; 164; 255; 241; 166; 44; 148; 8; - 201; 195; 78; 241; 53; 44; 39; 33; 198; 101; 221; 147; 49; 206; 248; 137; - 43; 231; 187; 192; 37; 161; 86; 51; 16; 77; 131; 254; 28; 46; 61; 169; 25; - 4; 114; 226; 156; 177; 10; 128; 249; 34; 203; 248; 158; 62; 138; 54; 90; 96; - 21; 71; 80; 165; 34; 192; 233; 227; 143; 36; 36; 95; 176; 72; 61; 85; 229; - 38; 118; 100; 205; 22; 244; 19; 172; 253; 110; 154; 221; 159; 2; 66; 65; 73; - 165; 52; 190; 206; 18; 185; 123; 243; 189; 135; 185; 100; 15; 100; 180; 202; - 152; 133; 211; 164; 113; 65; 140; 76; 201; 153; 170; 88; 39; 250; 7; 184; 0; - 176; 111; 111; 0; 35; 146; 83; 218; 173; 221; 145; 210; 251; 171; 209; 75; - 87; 250; 20; 130; 80; 75; 254; 214; 62; 21; 105; 2; 194; 196; 119; 29; 81; - 57; 103; 90; 166; 148; 175; 20; 44; 70; 38; 222; 203; 75; 167; 171; 111; - 236; 96; 249; 34; 214; 3; 208; 83; 187; 21; 26; 70; 101; 201; 243; 188; 136; - 40; 16; 178; 90; 58; 104; 108; 117; 118; 197; 39; 71; 180; 108; 200; 164; - 88; 119; 58; 118; 80; 174; 147; 246; 17; 129; 84; 166; 84; 253; 29; 223; 33; - 174; 29; 101; 94; 17; 243; 144; 140; 36; 18; 148; 244; 231; 141; 95; 209; - 159; 93; 127; 114; 99; 109; 211; 8; 20; 3; 51; 181; 199; 215; 239; 154; 55; - 106; 75; 226; 174; 204; 197; 143; 225; 169; 211; 190; 143; 79; 145; 53; 47; - 51; 30; 82; 215; 238; 42; 77; 36; 63; 21; 150; 46; 67; 40; 144; 58; 142; - 212; 22; 156; 46; 119; 186; 100; 225; 216; 152; 235; 71; 250; 135; 193; 59; - 12; 194; 134; 234; 21; 1; 71; 109; 37; 209; 70; 108; 203; 183; 138; 153; - 136; 1; 102; 58; 181; 50; 120; 215; 3; 186; 111; 144; 206; 129; 13; 69; 2; - 57; 69; 216; 42; 77; 174; 248; 29; 45; 219; 232; 142; 5; 24; 112; 30; 193; - 210; 199; 95; 153; 179; 170; 121; 202; 204; 36; 35; 109; 177; 83; 181; 224; - 202; 178; 102; 77; 38; 35; 118; 101; 202; 235; 51; 237; 186; 125; 200; 74; - 210; 240; 214; 190; 14; 3; 16; 85; 99; 247; 120; 127; 136; 42; 79; 45; 1; - 92; 231; 185; 35; 42; 234; 242; 225; 202; 81; 70; 151; 12; 202; 112; 93; - 103; 115; 50; 182; 47; 245; 3; 68; 134; 11; 37; 167; 11; 33; 100; 156; 2; - 253; 24; 13; 187; 2; 143; 41; 137; 33; 20; 45; 188; 150; 14; 37; 139; 230; - 248; 71; 131; 201; 113; 45; 3; 232; 47; 159; 123; 156; 109; 248; 134; 147; - 88; 99; 221; 164; 133; 58; 225; 118; 145; 105; 97; 87; 125; 170; 78; 149; - 17; 81; 46; 251; 189; 96; 251; 87; 27; 194; 50; 128; 7; 158; 49; 205; 35; - 120; 216; 197; 117; 119; 137; 193; 207; 196; 239; 247; 179; 10; 154; 18; - 251; 84; 72; 113; 195; 56; 114; 65; 157; 196; 18; 105; 55; 232; 255; 51; - 181; 80; 9; 209; 107; 29; 142; 29; 28; 134; 33; 16; 229; 2; 19; 56; 216; 34; - 240; 180; 202; 145; 99; 12; 32; 9; 37; 66; 149; 121; 131; 23; 160; 179; 9; - 63; 238; 213; 170; 143; 208; 109; 98; 159; 20; 112; 235; 238; 188; 0; 186; - 201; 68; 164; 160; 70; 178; 33; 20; 199; 167; 36; 140; 142; 58; 164; 74; - 245; 94; 240; 216; 64; 245; 193; 4; 220; 185; 62; 11; 12; 94; 186; 173; 227; - 156; 164; 72; 68; 80; 181; 42; 236; 93; 15; 111; 38; 39; 210; 46; 36; 8; - 213; 94; 65; 238; 36; 152; 21; 212; 104; 148; 124; 236; 123; 128; 63; 226; - 33; 181; 225; 186; 147; 112; 250; 58; 93; 28; 99; 172; 7; 220; 108; 140; - 223; 249; 113; 81; 97; 88; 176; 226; 115; 157; 216; 121; 160; 114; 93; 225; - 234; 180; 206; 244; 1; 115; 65; 44; 114; 214; 89; 231; 9; 100; 155; 114; - 191; 114; 207; 225; 116; 166; 105; 229; 33; 60; 235; 36; 10; 188; 35; 203; - 186; 78; 210; 103; 1; 57; 28; 63; 53; 186; 59; 142; 245; 39; 97; 67; 106; - 191; 77; 118; 71; 76; 80; 38; 86; 110; 229; 196; 187; 175; 93; 164; 225; - 170; 230; 46; 219; 7; 11; 18; 242; 162; 75; 5; 187; 215; 183; 137; 5; 177; - 174; 206; 185; 226; 190; 237; 192; 243; 200; 186; 232; 63; 105; 203; 18; - 113; 118; 64; 189; 76; 118; 129; 197; 41; 192; 60; 96; 11; 97; 93; 177; 92; - 130; 227; 136; 89; 141; 173; 240; 220; 19; 20; 182; 43; 135; 50; 24; 116; - 108; 236; 142; 123; 176; 124; 210; 44; 120; 64; 202; 228; 189; 103; 233; - 251; 35; 195; 249; 218; 158; 30; 212; 138; 74; 211; 155; 178; 77; 222; 110; - 98; 151; 4; 129; 114; 115; 107; 56; 252; 112; 229; 254; 50; 199; 140; 58; - 218; 65; 1; 139; 218; 89; 131; 150; 200; 10; 253; 95; 151; 85; 168; 50; 177; - 161; 9; 232; 110; 58; 134; 253; 252; 49; 187; 68; 148; 197; 72; 78; 62; 10; - 105; 227; 47; 37; 250; 136; 208; 103; 200; 41; 220; 46; 41; 115; 209; 56; - 30; 189; 19; 181; 73; 97; 105; 216; 76; 43; 211; 183; 170; 216; 129; 215; - 55; 89; 229; 148; 43; 18; 174; 39; 33; 203; 11; 176; 153; 64; 177; 207; 111; - 232; 65; 33; 197; 250; 29; 207; 181; 63; 34; 80; 68; 85; 111; 49; 37; 92; - 50; 172; 119; 145; 101; 215; 152; 11; 3; 189; 164; 136; 79; 182; 24; 208; - 30; 176; 166; 2; 184; 161; 223; 48; 54; 213; 59; 173; 66; 71; 135; 15; 136; - 212; 164; 197; 238; 108; 13; 249; 10; 217; 197; 205; 55; 122; 36; 106; 116; - 246; 154; 123; 43; 189; 184; 49; 213; 81; 91; 252; 55; 53; 9; 5; 80; 109; - 84; 147; 197; 37; 207; 47; 35; 73; 15; 180; 43; 20; 101; 163; 32; 237; 65; - 217; 120; 82; 216; 204; 110; 67; 120; 47; 210; 131; 174; 84; 34; 183; 205; - 191; 123; 46; 208; 34; 197; 226; 228; 240; 191; 81; 51; 30; 104; 69; 79; 3; - 131; 157; 181; 100; 139; 251; 14; 162; 31; 242; 113; 139; 47; 228; 80; 101; - 186; 149; 148; 36; 105; 43; 71; 213; 69; 142; 249; 158; 83; 117; 82; 32; - 166; 161; 182; 123; 110; 131; 142; 60; 65; 215; 33; 79; 170; 178; 92; 143; - 232; 85; 209; 86; 111; 225; 91; 52; 166; 75; 93; 226; 45; 63; 116; 174; 28; - 150; 216; 116; 208; 237; 99; 28; 238; 245; 24; 109; 248; 41; 237; 244; 231; - 91; 197; 189; 151; 8; 177; 58; 102; 121; 210; 186; 76; 205; 31; 215; 160; - 36; 144; 209; 128; 248; 138; 40; 251; 10; 194; 37; 197; 25; 100; 58; 95; 75; - 151; 163; 177; 51; 114; 0; 226; 239; 188; 127; 125; 1; 40; 107; 38; 106; 30; - 239; 250; 22; 159; 115; 213; 196; 104; 108; 134; 44; 118; 3; 27; 188; 47; - 138; 246; 141; 90; 183; 135; 94; 67; 117; 89; 148; 144; 194; 243; 197; 93; - 124; 205; 171; 5; 145; 42; 154; 162; 129; 199; 88; 48; 28; 66; 54; 29; 198; - 128; 215; 212; 216; 220; 150; 209; 156; 79; 104; 55; 123; 106; 216; 151; - 146; 25; 99; 122; 209; 26; 36; 88; 208; 208; 23; 12; 28; 92; 173; 156; 2; - 186; 7; 3; 122; 56; 132; 208; 205; 124; 23; 4; 38; 109; 44; 66; 166; 220; - 189; 64; 130; 148; 80; 61; 21; 174; 119; 198; 104; 251; 180; 193; 192; 169; - 83; 207; 208; 97; 237; 208; 139; 66; 147; 204; 96; 103; 24; 132; 12; 155; - 153; 42; 179; 26; 122; 0; 174; 205; 24; 218; 11; 98; 134; 236; 141; 168; 68; - 202; 144; 129; 132; 202; 147; 53; 167; 154; 132; 94; 154; 24; 19; 146; 205; - 250; 216; 101; 53; 195; 216; 212; 209; 187; 253; 83; 91; 84; 82; 140; 230; - 99; 45; 218; 8; 131; 57; 39; 19; 212; 94; 67; 40; 141; 195; 66; 201; 204; - 120; 50; 96; 243; 80; 189; 239; 3; 218; 121; 26; 171; 7; 187; 85; 51; 140; - 190; 174; 151; 149; 38; 83; 36; 112; 10; 76; 14; 161; 185; 222; 27; 125; - 213; 102; 88; 162; 15; 247; 218; 39; 205; 181; 217; 185; 255; 253; 51; 44; - 73; 69; 41; 44; 87; 190; 48; 205; 214; 69; 199; 127; 199; 251; 174; 186; + 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 231; 32; 114; + 124; 109; 148; 95; 82; 68; 84; 227; 241; 178; 176; 54; 70; 15; 174; 146; + 232; 112; 157; 110; 121; 177; 173; 55; 169; 95; 192; 222; 3; 21; 85; 55; + 198; 28; 39; 28; 109; 20; 79; 202; 164; 196; 136; 37; 70; 57; 252; 90; 229; + 254; 41; 17; 105; 245; 114; 132; 77; 120; 159; 148; 21; 73; 0; 173; 175; 16; + 229; 137; 189; 14; 134; 185; 115; 192; 8; 31; 77; 157; 175; 0; 45; 139; 110; + 113; 7; 20; 151; 133; 143; 246; 133; 214; 112; 62; 145; 64; 215; 5; 57; 16; + 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; 138; 143; 104; 52; 132; 193; + 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; 59; 140; 245; 198; 147; 188; + 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; 66; 61; 100; 152; 72; 11; 39; + 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; 122; 135; 5; 18; 201; 171; + 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; 67; 221; 203; 125; 27; 90; + 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; 180; 66; 96; 165; 153; 138; + 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; 110; 177; 107; 35; 158; 224; + 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; 60; 147; 252; 231; 36; 146; + 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; 225; 101; 154; 166; 90; 46; + 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; 179; 168; 250; 67; 120; 207; + 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; 132; 160; 15; 80; 115; 11; 165; + 62; 177; 245; 26; 112; 101; 210; 252; 164; 232; 31; 97; 86; 125; 186; 193; + 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; 243; 49; 129; 98; 218; 91; 85; + 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; 37; 175; 138; 75; 134; 232; + 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; 244; 248; 128; 154; 27; 78; + 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; 98; 218; 53; 28; 34; 35; 148; + 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; 180; 185; 18; 175; 38; 40; + 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; 96; 86; 113; 137; 126; 50; + 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; 69; 116; 76; 63; 147; 39; + 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; 125; 244; 198; 101; 103; + 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; 33; 3; 145; 14; 104; 9; + 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; 69; 57; 158; 110; 148; + 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; 12; 157; 127; 186; 214; + 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; 20; 0; 213; 135; 160; + 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; 126; 74; 21; 51; 187; + 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; 80; 141; 68; 236; 191; + 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; 41; 133; 130; 42; 129; + 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; 45; 167; 189; 27; 11; + 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; 164; 140; 125; 123; 182; + 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; 83; 69; 32; 231; 92; 8; + 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; 21; 119; 235; 238; 12; 58; + 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; 218; 104; 182; 101; 128; + 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; 2; 103; 50; 172; 133; 1; + 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; 162; 228; 83; 227; 97; + 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; 111; 186; 167; 35; + 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; 157; 224; 23; 83; + 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; 210; 192; 157; + 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; 126; 146; 60; 40; + 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; 154; 164; 62; 5; 71; + 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; 144; 15; 106; 28; 187; + 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; 88; 181; 225; 128; 118; + 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; 14; 50; 161; 36; 144; + 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; 226; 119; 3; 179; 108; + 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; 97; 96; 231; 21; 9; 26; + 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; 139; 120; 113; 163; 184; + 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; 92; 124; 144; 38; 243; + 45; 62; 85; 202; 81; 200; 126; 179; 120; 72; 166; 203; 132; 18; 167; 231; + 209; 136; 50; 25; 228; 181; 230; 131; 136; 154; 90; 236; 16; 242; 76; 246; + 33; 144; 45; 165; 4; 45; 50; 156; 191; 198; 117; 51; 159; 193; 185; 9; 11; + 210; 66; 67; 58; 122; 88; 97; 254; 100; 170; 248; 28; 59; 20; 171; 202; 138; + 150; 125; 124; 134; 159; 41; 39; 9; 39; 142; 37; 84; 95; 117; 9; 24; 234; + 75; 211; 167; 208; 225; 38; 65; 55; 163; 70; 181; 33; 67; 131; 136; 162; 88; + 248; 79; 169; 60; 237; 19; 83; 86; 212; 14; 206; 250; 52; 191; 181; 207; 61; + 92; 245; 113; 179; 234; 201; 165; 60; 101; 10; 143; 33; 133; 209; 69; 122; + 10; 73; 53; 147; 4; 70; 120; 55; 21; 154; 246; 225; 49; 204; 9; 234; 96; 0; + 101; 233; 110; 248; 119; 21; 4; 126; 243; 103; 91; 206; 150; 164; 178; 102; + 150; 151; 86; 189; 216; 146; 84; 255; 208; 44; 89; 74; 41; 236; 60; 80; 178; + 172; 19; 8; 101; 67; 105; 86; 152; 7; 98; 38; 12; 219; 24; 184; 74; 53; 110; + 96; 217; 49; 92; 93; 199; 205; 168; 0; 79; 250; 130; 9; 212; 226; 83; 70; + 205; 43; 225; 23; 157; 182; 171; 29; 235; 249; 114; 86; 252; 83; 232; 175; + 53; 181; 112; 186; 109; 214; 150; 39; 117; 15; 172; 71; 117; 114; 17; 148; + 23; 53; 165; 50; 55; 132; 100; 223; 166; 68; 166; 211; 221; 191; 15; 136; + 89; 101; 59; 112; 165; 26; 58; 173; 64; 37; 133; 203; 104; 100; 76; 142; + 247; 179; 0; 9; 27; 101; 157; 103; 159; 27; 133; 10; 242; 66; 51; 3; 97; + 203; 8; 225; 163; 48; 139; 232; 127; 245; 1; 214; 20; 215; 45; 237; 202; 58; + 31; 55; 49; 173; 22; 200; 190; 15; 40; 237; 227; 239; 230; 216; 91; 89; 217; + 82; 245; 35; 198; 246; 114; 23; 231; 15; 60; 41; 30; 5; 11; 3; 20; 67; 173; + 188; 240; 251; 94; 0; 96; 213; 94; 12; 135; 209; 46; 15; 183; 142; 160; 230; + 132; 208; 51; 144; 31; 32; 112; 102; 123; 206; 225; 90; 58; 76; 149; 250; + 184; 220; 52; 164; 56; 65; 11; 132; 150; 108; 125; 246; 12; 135; 44; 232; + 123; 41; 116; 133; 56; 222; 90; 165; 98; 114; 178; 77; 129; 124; 221; 160; + 61; 201; 228; 117; 248; 186; 77; 41; 185; 113; 167; 130; 50; 185; 96; 196; + 198; 244; 183; 63; 214; 128; 129; 193; 102; 234; 61; 199; 233; 109; 242; + 248; 77; 160; 213; 4; 137; 71; 211; 66; 1; 177; 74; 174; 251; 250; 152; 9; + 93; 85; 99; 172; 200; 246; 4; 177; 144; 47; 65; 74; 172; 90; 8; 41; 201; 58; + 107; 50; 79; 198; 224; 225; 99; 230; 130; 178; 81; 85; 131; 75; 26; 74; 245; + 53; 107; 71; 194; 104; 159; 24; 254; 163; 157; 27; 52; 81; 127; 189; 10; 13; + 58; 96; 70; 174; 211; 225; 50; 201; 137; 128; 99; 189; 152; 135; 57; 145; + 37; 223; 53; 2; 186; 116; 210; 92; 20; 28; 67; 215; 243; 117; 100; 56; 232; + 50; 239; 217; 229; 106; 175; 139; 91; 54; 30; 104; 91; 56; 182; 56; 82; 130; + 225; 101; 125; 22; 193; 41; 73; 35; 232; 173; 119; 160; 171; 236; 77; 152; + 157; 56; 235; 25; 173; 119; 63; 56; 148; 215; 84; 41; 126; 107; 236; 199; + 122; 58; 124; 235; 58; 123; 199; 89; 207; 159; 9; 29; 194; 92; 20; 72; 229; + 215; 40; 204; 146; 193; 53; 69; 1; 126; 36; 72; 229; 193; 231; 128; 238; + 115; 41; 59; 116; 40; 95; 74; 98; 207; 92; 34; 37; 215; 173; 211; 93; 44; + 21; 178; 129; 51; 26; 145; 125; 248; 8; 91; 173; 159; 179; 216; 59; 254; + 153; 71; 107; 96; 5; 111; 98; 169; 123; 23; 146; 158; 254; 159; 225; 202; + 229; 13; 29; 231; 174; 152; 68; 16; 131; 45; 148; 174; 244; 63; 200; 58; 83; + 88; 46; 225; 77; 113; 131; 100; 27; 249; 73; 49; 67; 91; 98; 191; 44; 90; + 101; 220; 181; 173; 179; 39; 40; 99; 18; 132; 250; 135; 216; 248; 73; 171; + 145; 94; 137; 96; 24; 108; 248; 12; 237; 242; 236; 233; 212; 223; 53; 7; 18; + 6; 109; 180; 231; 107; 185; 4; 152; 160; 157; 188; 107; 194; 109; 217; 47; + 230; 226; 115; 94; 81; 170; 73; 84; 99; 91; 237; 58; 130; 198; 11; 159; 196; + 101; 168; 196; 209; 66; 91; 233; 31; 12; 133; 185; 21; 211; 3; 111; 109; + 215; 48; 29; 156; 47; 99; 14; 221; 204; 46; 21; 49; 137; 118; 150; 182; 208; + 81; 88; 122; 99; 168; 107; 183; 223; 82; 57; 239; 14; 160; 73; 125; 211; + 109; 199; 228; 6; 33; 23; 68; 68; 108; 105; 127; 141; 146; 128; 214; 83; + 251; 38; 63; 77; 105; 164; 158; 115; 180; 176; 75; 134; 46; 17; 151; 198; + 16; 222; 95; 190; 125; 39; 196; 147; 100; 162; 126; 173; 25; 173; 79; 93; + 38; 144; 69; 48; 70; 200; 223; 0; 14; 9; 254; 102; 237; 171; 28; 230; 37; 5; + 200; 88; 131; 160; 42; 166; 12; 71; 66; 32; 122; 227; 74; 61; 106; 220; 237; + 17; 59; 166; 211; 100; 116; 239; 6; 8; 85; 175; 155; 191; 3; 4; 102; 88; + 204; 40; 225; 19; 63; 126; 116; 89; 180; 236; 115; 88; 111; 245; 104; 18; + 204; 237; 61; 182; 160; 44; 226; 134; 69; 99; 120; 109; 86; 52; 8; 193; 156; + 159; 164; 55; 22; 81; 196; 155; 168; 213; 86; 142; 188; 219; 210; 127; 127; + 15; 236; 181; 28; 217; 53; 204; 94; 202; 91; 151; 51; 208; 47; 90; 198; 133; + 66; 5; 161; 195; 103; 22; 243; 42; 17; 100; 108; 88; 238; 26; 115; 64; 226; + 10; 104; 42; 178; 147; 71; 243; 165; 251; 20; 212; 247; 133; 105; 22; 70; + 215; 60; 87; 0; 200; 201; 132; 94; 62; 89; 30; 19; 97; 123; 182; 242; 195; + 47; 108; 82; 252; 131; 234; 156; 130; 20; 194; 149; 221; 151; 132; 123; 67; + 255; 167; 181; 78; 170; 48; 78; 116; 108; 139; 232; 133; 60; 97; 93; 12; + 158; 115; 129; 117; 95; 30; 199; 217; 47; 184; 236; 113; 78; 47; 11; 231; + 33; 227; 119; 164; 64; 185; 221; 86; 230; 128; 79; 29; 206; 206; 86; 101; + 191; 126; 123; 93; 83; 196; 59; 252; 5; 221; 222; 175; 82; 174; 179; 184; + 36; 207; 48; 59; 237; 140; 99; 149; 52; 149; 129; 190; 169; 131; 188; 164; + 51; 4; 31; 101; 92; 71; 103; 55; 55; 217; 173; 209; 64; 253; 153; 186; 47; + 39; 208; 244; 150; 111; 22; 7; 179; 174; 59; 240; 21; 82; 240; 99; 67; 153; + 249; 24; 59; 108; 165; 190; 31; 144; 101; 36; 20; 203; 149; 64; 99; 53; 85; + 193; 22; 64; 20; 18; 239; 96; 188; 16; 137; 12; 20; 56; 158; 140; 124; 144; + 48; 87; 144; 245; 107; 138; 91; 65; 225; 241; 120; 167; 15; 126; 167; 195; + 186; 247; 159; 64; 6; 80; 154; 162; 154; 184; 215; 82; 111; 86; 90; 99; 122; + 246; 28; 82; 2; 148; 82; 157; 10; 11; 238; 63; 81; 102; 90; 223; 15; 92; + 231; 152; 143; 206; 7; 225; 191; 136; 134; 97; 212; 237; 44; 56; 113; 126; + 10; 160; 63; 228; 94; 47; 119; 32; 103; 20; 177; 206; 154; 7; 150; 177; 148; + 248; 232; 74; 130; 172; 0; 77; 34; 248; 74; 196; 108; 205; 247; 217; 83; 23; + 0; 52; 219; 61; 150; 45; 35; 105; 60; 88; 56; 151; 180; 218; 135; 222; 29; + 133; 242; 145; 160; 249; 209; 215; 170; 182; 237; 72; 160; 47; 254; 181; 18; + 77; 227; 252; 150; 196; 251; 240; 113; 237; 91; 243; 173; 107; 130; 185; + 115; 97; 197; 40; 255; 97; 114; 4; 210; 111; 32; 177; 111; 249; 118; 155; + 116; 146; 30; 111; 173; 38; 124; 43; 223; 19; 137; 75; 80; 35; 211; 102; 75; + 195; 139; 28; 117; 192; 157; 64; 140; 184; 199; 150; 7; 194; 147; 126; 111; + 5; 174; 166; 174; 4; 246; 90; 31; 153; 156; 228; 190; 241; 81; 35; 193; 102; + 107; 255; 238; 181; 8; 168; 97; 81; 33; 224; 1; 15; 193; 206; 15; 68; 30; + 254; 73; 166; 88; 77; 100; 126; 119; 173; 49; 162; 174; 252; 33; 210; 208; + 127; 136; 90; 28; 68; 2; 243; 17; 197; 131; 113; 170; 1; 73; 69; 78; 36; + 196; 157; 210; 242; 61; 10; 222; 216; 147; 116; 14; 2; 43; 77; 33; 12; 130; + 126; 6; 200; 108; 10; 185; 234; 111; 22; 121; 55; 65; 240; 248; 26; 140; 84; + 183; 177; 8; 180; 153; 98; 36; 124; 122; 15; 206; 57; 217; 6; 30; 249; 176; + 96; 247; 19; 18; 109; 114; 123; 136; 187; 65; 216; 73; 124; 86; 108; 128; + 103; 146; 106; 30; 121; 202; 204; 4; 109; 6; 75; 57; 204; 227; 69; 86; 159; + 166; 210; 140; 120; 160; 134; 182; 149; 92; 210; 247; 57; 170; 224; 128; + 217; 151; 28; 181; 198; 82; 66; 56; 208; 53; 170; 85; 205; 7; 147; 244; 67; + 125; 98; 195; 138; 183; 207; 54; 189; 86; 84; 169; 20; 13; 193; 25; 197; 42; + 144; 250; 181; 148; 180; 116; 244; 234; 90; 122; 248; 169; 130; 131; 175; + 230; 148; 224; 155; 135; 177; 109; 234; 13; 171; 229; 68; 115; 84; 191; 102; + 170; 9; 67; 27; 143; 136; 88; 18; 218; 47; 75; 86; 253; 179; 210; 135; 94; + 221; 177; 131; 84; 136; 120; 44; 91; 122; 121; 168; 214; 116; 235; 186; 21; + 50; 23; 196; 250; 241; 92; 245; 126; 197; 5; 139; 60; 90; 31; 0; 41; 251; + 204; 234; 82; 135; 204; 215; 10; 207; 8; 52; 121; 98; 19; 21; 82; 148; 61; + 150; 25; 3; 23; 15; 235; 102; 148; 61; 136; 250; 178; 51; 168; 120; 60; 0; + 117; 167; 127; 58; 9; 190; 215; 22; 58; 230; 125; 16; 229; 207; 50; 243; + 154; 220; 255; 119; 163; 127; 103; 11; 68; 24; 191; 213; 112; 3; 20; 163; + 164; 25; 43; 37; 106; 134; 18; 169; 96; 68; 96; 233; 184; 222; 211; 120; + 119; 4; 216; 63; 127; 45; 94; 138; 191; 49; 30; 208; 103; 62; 101; 123; 194; + 6; 138; 3; 123; 243; 144; 105; 211; 213; 25; 217; 158; 242; 185; 78; 219; + 187; 174; 19; 82; 53; 145; 185; 76; 5; 234; 8; 199; 86; 14; 38; 114; 127; + 213; 222; 88; 119; 61; 65; 233; 173; 157; 231; 120; 125; 230; 41; 151; 213; + 249; 87; 242; 230; 167; 122; 227; 14; 145; 219; 89; 156; 3; 158; 187; 91; + 27; 161; 106; 139; 212; 15; 91; 38; 83; 109; 218; 136; 169; 191; 147; 49; + 130; 96; 137; 40; 126; 213; 97; 50; 201; 138; 215; 67; 129; 92; 58; 45; 148; + 242; 121; 233; 141; 200; 182; 37; 47; 218; 151; 105; 1; 242; 172; 234; 167; + 27; 37; 228; 180; 78; 239; 135; 79; 180; 9; 165; 125; 106; 188; 27; 171; + 144; 125; 254; 107; 1; 167; 131; 166; 204; 154; 109; 11; 197; 242; 77; 95; + 80; 144; 170; 53; 228; 204; 95; 13; 97; 107; 150; 255; 152; 97; 68; 13; 161; + 25; 151; 195; 179; 150; 244; 163; 7; 26; 50; 37; 78; 143; 24; 170; 206; 17; + 240; 27; 117; 167; 213; 152; 148; 125; 160; 216; 141; 80; 31; 22; 237; 25; + 202; 230; 220; 135; 214; 44; 10; 86; 77; 207; 100; 134; 196; 104; 53; 127; + 56; 58; 128; 34; 82; 233; 65; 135; 252; 83; 86; 89; 177; 218; 59; 72; 73; + 250; 52; 135; 20; 15; 120; 250; 224; 52; 5; 54; 112; 11; 111; 16; 189; 7; + 227; 227; 111; 119; 16; 34; 254; 160; 230; 221; 9; 193; 134; 50; 246; 128; + 218; 180; 10; 77; 207; 214; 224; 127; 48; 248; 69; 62; 72; 130; 164; 157; + 111; 174; 105; 82; 0; 5; 122; 135; 247; 156; 144; 82; 112; 28; 212; 152; 78; + 135; 226; 125; 238; 50; 96; 12; 126; 185; 233; 98; 195; 20; 138; 163; 96; + 106; 222; 220; 129; 87; 64; 168; 122; 170; 234; 213; 125; 33; 176; 30; 142; + 36; 208; 196; 183; 157; 82; 191; 116; 77; 225; 151; 118; 224; 84; 35; 86; + 60; 23; 155; 106; 30; 101; 73; 90; 121; 31; 194; 167; 127; 200; 14; 140; + 190; 185; 31; 223; 139; 130; 2; 10; 227; 248; 231; 186; 0; 108; 79; 108; + 173; 29; 153; 99; 73; 10; 246; 246; 93; 110; 138; 5; 7; 127; 246; 49; 219; + 196; 2; 235; 233; 43; 251; 188; 16; 137; 253; 37; 237; 180; 221; 92; 92; 31; + 19; 200; 70; 206; 155; 203; 160; 19; 28; 178; 51; 49; 142; 125; 8; 248; 146; + 6; 54; 247; 99; 113; 210; 55; 198; 220; 244; 99; 89; 234; 101; 32; 230; 164; + 37; 217; 96; 193; 90; 46; 247; 155; 101; 91; 140; 227; 94; 176; 185; 175; + 154; 199; 19; 26; 7; 78; 45; 157; 191; 10; 41; 51; 233; 109; 110; 238; 142; + 23; 151; 16; 174; 23; 171; 59; 28; 176; 183; 202; 199; 22; 178; 154; 28; + 204; 195; 187; 7; 116; 211; 101; 125; 213; 88; 74; 80; 80; 71; 116; 82; 144; + 41; 26; 19; 107; 96; 242; 9; 190; 70; 67; 116; 68; 125; 232; 64; 37; 43; + 181; 21; 212; 218; 72; 29; 62; 96; 59; 161; 24; 138; 58; 124; 247; 189; 205; + 47; 193; 40; 183; 78; 174; 145; 102; 124; 89; 76; 35; 126; 200; 180; 133; + 10; 61; 157; 136; 100; 231; 250; 74; 53; 12; 201; 226; 218; 29; 158; 106; + 12; 7; 30; 135; 10; 137; 137; 188; 75; 153; 181; 1; 51; 96; 66; 221; 91; 58; + 174; 107; 115; 60; 158; 213; 25; 226; 173; 97; 13; 100; 212; 133; 38; 15; + 48; 231; 62; 183; 214; 125; 158; 228; 85; 210; 245; 172; 30; 11; 97; 92; 17; + 22; 128; 202; 135; 225; 146; 93; 151; 153; 60; 194; 37; 145; 151; 98; 87; + 129; 19; 24; 117; 30; 132; 71; 121; 250; 67; 215; 70; 156; 99; 89; 250; 198; + 229; 116; 43; 5; 227; 29; 94; 6; 161; 48; 144; 184; 207; 162; 198; 71; 125; + 224; 214; 240; 142; 20; 208; 218; 63; 60; 111; 84; 145; 154; 116; 62; 157; + 87; 129; 187; 38; 16; 98; 236; 113; 128; 236; 201; 52; 141; 245; 140; 20; + 39; 240; 52; 121; 246; 146; 164; 70; 169; 10; 132; 246; 190; 132; 153; 70; + 84; 24; 97; 137; 42; 188; 161; 92; 212; 187; 93; 189; 30; 250; 242; 63; 109; + 117; 228; 154; 125; 47; 87; 226; 127; 72; 243; 136; 187; 69; 195; 86; 141; + 168; 96; 105; 109; 11; 209; 159; 185; 161; 174; 78; 173; 235; 143; 39; 102; + 57; 147; 140; 31; 104; 170; 177; 152; 12; 41; 32; 156; 148; 33; 140; 82; 60; + 157; 33; 145; 82; 17; 57; 123; 103; 156; 254; 2; 221; 4; 65; 42; 66; 36; 17; + 94; 191; 178; 114; 181; 58; 163; 152; 51; 12; 250; 161; 102; 182; 82; 250; + 1; 97; 203; 148; 213; 83; 175; 175; 0; 59; 134; 44; 184; 106; 9; 219; 6; 78; + 33; 129; 53; 79; 228; 12; 201; 182; 168; 33; 245; 42; 158; 64; 42; 193; 36; + 101; 129; 164; 252; 142; 164; 181; 101; 1; 118; 106; 132; 160; 116; 164; + 144; 241; 192; 124; 47; 205; 132; 249; 239; 18; 143; 43; 170; 88; 6; 41; 94; + 105; 184; 200; 254; 191; 217; 103; 27; 89; 250; 155; 180; 128; 28; 13; 47; + 49; 138; 236; 243; 171; 94; 81; 121; 89; 136; 28; 240; 158; 192; 51; 112; + 114; 203; 123; 143; 202; 199; 46; 224; 61; 93; 181; 24; 159; 113; 179; 185; + 153; 30; 100; 140; 161; 250; 229; 101; 228; 237; 5; 159; 194; 54; 17; 8; 97; + 139; 18; 48; 112; 134; 79; 155; 72; 239; 146; 235; 58; 45; 16; 50; 210; 97; + 168; 22; 97; 180; 83; 98; 225; 36; 170; 11; 25; 231; 171; 126; 61; 191; 190; + 108; 73; 186; 251; 245; 73; 212; 207; 91; 138; 16; 154; 148; 48; 235; 115; + 100; 188; 112; 221; 64; 220; 28; 13; 124; 48; 193; 148; 194; 146; 116; 110; + 250; 203; 109; 168; 4; 86; 46; 87; 156; 30; 140; 98; 93; 21; 65; 71; 136; + 197; 172; 134; 77; 138; 235; 99; 87; 81; 246; 82; 163; 145; 91; 81; 103; + 136; 194; 166; 161; 6; 182; 100; 23; 124; 212; 209; 136; 114; 81; 139; 65; + 224; 64; 17; 84; 114; 209; 246; 172; 24; 96; 26; 3; 159; 198; 66; 39; 254; + 137; 158; 152; 32; 127; 204; 45; 58; 253; 119; 151; 73; 146; 216; 79; 165; + 44; 124; 133; 50; 160; 227; 7; 210; 100; 216; 121; 162; 41; 126; 166; 12; + 29; 237; 3; 4; 46; 236; 234; 133; 139; 39; 116; 22; 223; 43; 203; 122; 7; + 220; 33; 86; 90; 244; 203; 97; 22; 76; 10; 100; 211; 149; 5; 247; 80; 153; + 11; 115; 82; 197; 78; 135; 53; 45; 75; 201; 141; 111; 36; 152; 207; 200; + 230; 197; 206; 53; 192; 22; 250; 70; 203; 247; 204; 61; 48; 8; 67; 69; 215; + 91; 194; 76; 178; 40; 149; 209; 154; 127; 129; 193; 53; 99; 101; 84; 107; + 127; 54; 114; 192; 79; 110; 182; 184; 102; 131; 173; 128; 115; 0; 120; 58; + 19; 42; 121; 231; 21; 33; 147; 196; 133; 201; 221; 205; 189; 162; 137; 76; + 198; 98; 215; 163; 173; 168; 61; 30; 157; 44; 248; 103; 48; 18; 219; 183; + 91; 190; 98; 202; 198; 103; 244; 97; 9; 238; 82; 25; 33; 214; 33; 236; 4; + 112; 71; 213; 155; 119; 96; 35; 24; 210; 224; 240; 88; 109; 202; 13; 116; + 11; 175; 240; 211; 245; 11; 183; 80; 247; 113; 46; 227; 138; 244; 234; 79; + 52; 189; 91; 165; 211; 78; 232; 96; 237; 209; 80; 63; 155; 72; 237; 0; 229; + 26; 38; 237; 42; 199; 6; 57; 247; 0; 225; 136; 217; 143; 182; 154; 151; 1; + 54; 243; 154; 5; 233; 245; 71; 109; 43; 191; 120; 220; 83; 14; 122; 135; + 113; 121; 191; 41; 8; 185; 49; 230; 23; 109; 99; 68; 68; 94; 147; 104; 39; + 24; 46; 197; 5; 77; 245; 74; 74; 90; 154; 45; 99; 39; 206; 96; 178; 84; 81; + 240; 31; 209; 112; 82; 249; 114; 142; 195; 109; 216; 56; 193; 124; 38; 13; + 205; 31; 96; 205; 12; 233; 41; 100; 145; 103; 43; 219; 255; 234; 135; 209; + 133; 130; 169; 100; 168; 208; 216; 187; 251; 180; 165; 247; 99; 38; 2; 127; + 242; 88; 182; 130; 226; 156; 217; 34; 43; 188; 59; 88; 10; 60; 88; 82; 201; + 23; 185; 243; 198; 228; 15; 184; 249; 63; 101; 12; 60; 223; 188; 215; 167; + 13; 155; 14; 214; 84; 171; 182; 238; 160; 67; 135; 84; 74; 109; 164; 102; + 105; 57; 186; 179; 43; 172; 138; 161; 17; 248; 107; 178; 40; 86; 91; 104; + 228; 102; 146; 155; 146; 157; 2; 119; 164; 112; 232; 95; 135; 87; 35; 50; + 198; 58; 143; 203; 251; 245; 236; 244; 212; 217; 32; 182; 43; 56; 147; 132; + 238; 141; 220; 159; 121; 76; 161; 234; 197; 80; 60; 251; 242; 214; 139; 220; + 14; 221; 160; 183; 199; 156; 167; 58; 198; 84; 26; 159; 141; 44; 43; 3; 11; + 174; 251; 103; 41; 96; 7; 225; 156; 111; 42; 194; 225; 205; 177; 84; 16; + 173; 223; 50; 235; 72; 2; 233; 168; 196; 234; 192; 205; 172; 51; 123; 62; + 95; 62; 150; 121; 252; 19; 71; 54; 114; 181; 224; 32; 53; 6; 147; 150; 19; + 254; 3; 234; 136; 124; 207; 127; 67; 188; 89; 201; 211; 11; 196; 212; 247; + 217; 222; 147; 248; 209; 84; 145; 105; 38; 117; 178; 180; 117; 92; 93; 49; + 165; 218; 54; 2; 45; 132; 203; 204; 142; 238; 95; 52; 163; 200; 240; 34; + 237; 219; 57; 125; 97; 90; 151; 115; 16; 218; 117; 99; 249; 77; 2; 228; 112; + 200; 48; 24; 26; 37; 211; 120; 28; 217; 140; 101; 72; 25; 43; 144; 138; 67; + 183; 41; 11; 177; 24; 126; 70; 62; 67; 244; 146; 243; 55; 111; 24; 107; 86; + 31; 161; 185; 25; 14; 98; 214; 209; 31; 138; 183; 15; 34; 77; 201; 129; 163; + 88; 66; 42; 54; 47; 235; 107; 43; 19; 217; 113; 144; 71; 130; 65; 40; 173; + 233; 38; 15; 93; 146; 236; 189; 201; 30; 185; 234; 222; 242; 138; 244; 200; + 91; 230; 75; 40; 112; 110; 163; 235; 127; 72; 120; 52; 206; 216; 29; 0; 19; + 63; 95; 137; 196; 48; 75; 45; 177; 79; 147; 43; 10; 127; 57; 77; 36; 108; 5; + 52; 98; 194; 87; 162; 251; 80; 29; 139; 103; 176; 222; 58; 130; 212; 123; + 245; 138; 83; 166; 110; 220; 176; 194; 62; 167; 29; 53; 198; 238; 101; 86; + 16; 178; 191; 67; 9; 224; 62; 219; 194; 10; 128; 32; 135; 1; 114; 73; 103; + 134; 189; 115; 97; 93; 171; 38; 56; 73; 32; 171; 194; 9; 178; 32; 75; 179; + 127; 192; 42; 52; 158; 84; 147; 61; 55; 33; 8; 34; 216; 2; 103; 245; 209; + 172; 112; 45; 38; 188; 132; 199; 202; 251; 253; 201; 146; 122; 137; 50; 189; + 22; 69; 169; 204; 31; 40; 4; 66; 65; 170; 101; 141; 68; 98; 93; 165; 22; + 178; 183; 195; 89; 216; 44; 97; 78; 198; 44; 153; 73; 222; 1; 248; 112; 234; + 27; 189; 101; 138; 226; 73; 254; 192; 183; 239; 27; 74; 174; 178; 177; 205; + 6; 99; 168; 9; 42; 92; 38; 205; 192; 122; 59; 236; 188; 1; 140; 67; 238; 43; + 130; 59; 199; 251; 192; 37; 181; 12; 83; 233; 63; 149; 193; 52; 144; 81; 72; + 91; 15; 154; 224; 97; 194; 92; 38; 167; 57; 237; 34; 79; 78; 213; 240; 10; + 21; 8; 86; 30; 233; 170; 162; 117; 232; 218; 237; 233; 178; 33; 244; 146; + 233; 125; 107; 29; 83; 188; 49; 113; 249; 128; 169; 77; 19; 61; 223; 167; + 34; 26; 34; 209; 184; 79; 122; 216; 214; 170; 53; 32; 212; 247; 61; 94; 18; + 26; 106; 204; 237; 20; 42; 78; 206; 207; 82; 7; 238; 72; 223; 183; 8; 236; + 6; 243; 250; 255; 195; 196; 89; 84; 185; 42; 11; 113; 5; 141; 163; 62; 150; + 250; 37; 29; 22; 60; 67; 120; 4; 87; 140; 26; 35; 157; 67; 129; 194; 14; 39; + 181; 183; 159; 7; 217; 227; 234; 153; 170; 219; 217; 3; 43; 108; 37; 245; 3; + 44; 125; 164; 83; 123; 117; 24; 15; 121; 121; 88; 12; 207; 48; 1; 123; 48; + 249; 247; 126; 37; 119; 61; 144; 49; 175; 187; 150; 189; 189; 104; 148; 105; + 207; 254; 218; 244; 70; 47; 31; 189; 247; 214; 127; 164; 20; 1; 239; 124; + 127; 179; 71; 74; 218; 253; 31; 211; 133; 87; 144; 115; 164; 25; 82; 82; 72; + 25; 169; 106; 230; 61; 221; 216; 204; 210; 192; 47; 194; 100; 80; 72; 47; + 234; 253; 52; 102; 36; 72; 155; 58; 46; 74; 108; 78; 28; 62; 41; 225; 18; + 81; 146; 75; 19; 110; 55; 160; 93; 161; 220; 181; 120; 55; 112; 17; 49; 28; + 70; 175; 137; 69; 176; 35; 40; 3; 127; 68; 92; 96; 91; 137; 124; 196; 32; + 89; 128; 101; 185; 204; 143; 59; 146; 12; 16; 240; 231; 119; 239; 226; 2; + 101; 37; 1; 0; 238; 179; 174; 168; 206; 109; 167; 36; 76; 240; 231; 240; + 198; 254; 233; 59; 98; 73; 227; 117; 158; 87; 106; 134; 26; 230; 29; 30; 22; + 239; 66; 85; 213; 189; 90; 204; 244; 254; 18; 47; 64; 199; 192; 223; 178; + 34; 69; 10; 7; 164; 201; 64; 127; 110; 208; 16; 104; 246; 207; 120; 65; 20; + 207; 198; 144; 55; 164; 24; 37; 123; 96; 94; 24; 24; 223; 108; 143; 29; 179; + 88; 162; 88; 98; 195; 79; 167; 207; 53; 110; 29; 230; 102; 79; 255; 179; + 225; 247; 213; 205; 108; 171; 172; 103; 80; 20; 207; 150; 165; 28; 67; 44; + 160; 0; 228; 211; 174; 64; 45; 196; 227; 219; 38; 15; 46; 128; 38; 69; 210; + 104; 112; 69; 158; 19; 51; 31; 32; 81; 157; 3; 8; 107; 127; 82; 253; 6; 0; + 124; 1; 100; 73; 177; 24; 168; 164; 37; 46; 176; 14; 34; 213; 117; 3; 70; + 98; 136; 186; 124; 57; 178; 89; 89; 240; 147; 48; 193; 48; 118; 121; 169; + 233; 141; 161; 58; 226; 38; 94; 29; 114; 145; 212; 47; 34; 58; 108; 110; + 118; 32; 211; 57; 35; 231; 121; 19; 200; 251; 195; 21; 120; 241; 42; 225; + 221; 32; 148; 97; 166; 213; 253; 168; 133; 248; 192; 169; 255; 82; 194; 225; + 193; 34; 64; 27; 119; 167; 47; 58; 81; 134; 217; 125; 216; 8; 207; 212; 249; + 113; 155; 172; 245; 179; 131; 162; 30; 27; 195; 107; 208; 118; 26; 151; 25; + 146; 24; 26; 51; 198; 128; 79; 251; 69; 111; 22; 245; 207; 117; 199; 97; + 222; 199; 54; 156; 28; 217; 65; 144; 27; 232; 212; 227; 33; 254; 189; 131; + 107; 124; 22; 49; 175; 114; 117; 157; 58; 47; 81; 38; 158; 74; 7; 104; 136; + 226; 203; 91; 196; 247; 128; 17; 193; 193; 237; 132; 123; 166; 73; 246; 159; + 97; 201; 26; 104; 16; 75; 82; 66; 56; 43; 242; 135; 233; 156; 238; 59; 52; + 104; 80; 200; 80; 98; 74; 132; 113; 157; 252; 17; 177; 8; 31; 52; 54; 36; + 97; 141; 137; 78; 135; 219; 65; 157; 217; 32; 220; 7; 108; 241; 165; 254; 9; + 188; 155; 15; 208; 103; 44; 61; 121; 64; 255; 94; 158; 48; 226; 235; 70; 56; + 38; 45; 26; 227; 73; 99; 139; 53; 253; 211; 155; 0; 183; 223; 157; 164; 107; + 160; 163; 184; 241; 139; 127; 69; 4; 217; 120; 49; 170; 34; 21; 56; 73; 97; + 105; 83; 47; 56; 44; 16; 109; 45; 183; 154; 64; 254; 218; 39; 242; 70; 182; + 145; 51; 200; 232; 108; 48; 36; 5; 245; 112; 254; 69; 140; 11; 12; 150; 166; + 117; 72; 218; 32; 47; 14; 239; 118; 208; 104; 91; 212; 143; 11; 61; 207; 81; + 251; 7; 212; 146; 227; 160; 35; 22; 141; 66; 145; 20; 149; 200; 32; 73; 242; + 98; 162; 12; 99; 63; 200; 7; 240; 5; 184; 212; 201; 245; 210; 69; 187; 111; + 69; 34; 122; 181; 109; 159; 97; 22; 253; 8; 163; 1; 68; 74; 79; 8; 172; 202; + 165; 118; 195; 25; 34; 168; 125; 188; 209; 67; 70; 222; 184; 222; 198; 56; + 189; 96; 45; 89; 129; 29; 56; 76; 42; 236; 190; 215; 51; 216; 237; 32; 204; + 10; 131; 98; 145; 44; 129; 117; 223; 146; 170; 71; 58; 233; 129; 74; 60; 51; + 163; 103; 45; 112; 161; 200; 137; 47; 154; 54; 74; 58; 13; 232; 141; 124; + 29; 122; 19; 99; 21; 160; 237; 120; 138; 0; 172; 188; 63; 176; 131; 180; + 165; 179; 184; 44; 161; 144; 27; 203; 203; 23; 228; 54; 78; 121; 17; 127; + 170; 221; 179; 51; 7; 198; 91; 136; 8; 8; 81; 63; 13; 2; 168; 230; 192; 29; + 20; 36; 157; 238; 239; 63; 119; 60; 247; 89; 157; 152; 207; 193; 137; 239; + 241; 179; 95; 84; 46; 224; 66; 251; 93; 227; 124; 180; 161; 71; 11; 18; 102; + 87; 125; 21; 131; 189; 204; 93; 146; 145; 148; 128; 204; 34; 83; 32; 161; + 60; 228; 214; 144; 63; 24; 127; 229; 40; 123; 118; 46; 222; 206; 20; 71; 26; + 255; 183; 182; 184; 15; 186; 32; 219; 161; 31; 81; 119; 182; 195; 50; 183; + 137; 45; 240; 153; 192; 81; 43; 169; 241; 165; 156; 72; 173; 117; 56; 79; + 34; 171; 50; 73; 47; 118; 252; 199; 27; 60; 76; 47; 247; 237; 192; 122; 232; + 149; 168; 154; 170; 85; 107; 95; 129; 0; 10; 173; 77; 39; 128; 54; 192; 238; + 115; 238; 246; 19; 237; 121; 177; 11; 17; 105; 109; 82; 198; 165; 12; 134; + 3; 134; 195; 40; 137; 228; 245; 89; 112; 253; 70; 20; 42; 114; 25; 136; 207; + 168; 233; 159; 149; 208; 156; 169; 117; 132; 80; 149; 169; 208; 197; 156; + 176; 32; 51; 23; 172; 110; 149; 16; 27; 51; 4; 207; 142; 98; 188; 221; 208; + 169; 24; 177; 188; 152; 43; 128; 180; 8; 52; 158; 68; 238; 4; 177; 166; 184; + 38; 146; 8; 135; 93; 145; 199; 69; 154; 52; 95; 104; 241; 204; 116; 92; 248; + 172; 65; 155; 81; 82; 38; 8; 129; 49; 115; 182; 71; 177; 173; 17; 237; 42; + 201; 153; 15; 180; 236; 52; 13; 215; 71; 122; 245; 164; 67; 204; 203; 196; + 160; 96; 169; 190; 119; 54; 202; 102; 92; 119; 237; 245; 248; 47; 117; 161; + 122; 161; 192; 253; 1; 14; 2; 217; 222; 17; 4; 231; 239; 202; 9; 120; 14; + 137; 108; 140; 14; 227; 109; 41; 40; 135; 201; 177; 174; 146; 163; 210; 92; + 76; 31; 83; 113; 87; 209; 99; 66; 25; 183; 147; 234; 59; 176; 149; 31; 71; + 211; 171; 19; 51; 212; 215; 82; 5; 123; 63; 126; 225; 226; 112; 147; 189; + 236; 91; 14; 178; 29; 15; 18; 123; 122; 45; 80; 134; 61; 251; 210; 23; 82; + 147; 166; 80; 68; 216; 100; 181; 93; 215; 14; 166; 200; 98; 169; 125; 170; + 54; 135; 49; 91; 248; 208; 0; 253; 132; 124; 119; 46; 20; 139; 151; 98; 192; + 168; 5; 71; 100; 2; 244; 199; 18; 230; 231; 27; 213; 122; 166; 51; 106; 221; + 152; 150; 69; 123; 47; 193; 33; 118; 253; 30; 60; 117; 166; 245; 113; 86; + 68; 167; 180; 192; 105; 17; 60; 178; 5; 116; 82; 31; 151; 205; 199; 168; 81; + 72; 199; 123; 56; 168; 169; 82; 74; 77; 75; 137; 129; 47; 131; 184; 246; 18; + 62; 217; 173; 56; 214; 27; 182; 72; 133; 77; 24; 205; 246; 201; 214; 219; + 98; 28; 63; 31; 12; 145; 145; 0; 31; 143; 46; 44; 225; 242; 191; 224; 79; + 223; 164; 56; 116; 146; 238; 10; 86; 198; 96; 250; 200; 239; 172; 63; 40; + 56; 99; 61; 105; 143; 20; 64; 62; 173; 63; 114; 154; 235; 148; 225; 86; 38; + 5; 47; 78; 79; 24; 253; 203; 77; 47; 139; 225; 130; 196; 177; 141; 111; 64; + 228; 30; 25; 127; 44; 13; 99; 158; 112; 246; 63; 188; 1; 131; 191; 79; 196; + 115; 251; 122; 78; 142; 125; 120; 165; 143; 245; 232; 91; 61; 216; 80; 151; + 24; 26; 193; 22; 57; 104; 133; 8; 208; 6; 229; 239; 164; 105; 45; 1; 189; + 100; 246; 120; 19; 175; 57; 198; 23; 21; 54; 49; 33; 148; 101; 109; 182; + 211; 180; 144; 207; 172; 192; 96; 46; 115; 97; 229; 157; 5; 167; 186; 176; + 198; 112; 120; 31; 61; 3; 228; 70; 217; 38; 205; 97; 65; 88; 162; 124; 210; + 114; 160; 177; 242; 187; 4; 199; 222; 251; 89; 60; 57; 191; 30; 184; 98; + 226; 206; 187; 141; 233; 137; 181; 41; 48; 11; 189; 238; 2; 95; 172; 13; + 166; 86; 135; 54; 97; 87; 220; 171; 235; 106; 47; 224; 23; 125; 15; 206; 76; + 45; 63; 25; 127; 240; 220; 236; 137; 119; 74; 35; 32; 232; 197; 133; 123; + 159; 182; 101; 135; 178; 186; 104; 209; 139; 103; 240; 111; 155; 15; 51; 29; + 124; 231; 112; 58; 124; 142; 175; 176; 81; 109; 95; 58; 82; 178; 120; 113; + 182; 13; 210; 118; 96; 209; 30; 213; 249; 52; 28; 7; 112; 17; 228; 179; 32; + 74; 42; 246; 102; 227; 255; 60; 53; 130; 214; 124; 182; 250; 135; 216; 91; + 164; 225; 11; 110; 59; 64; 186; 50; 106; 132; 42; 0; 96; 110; 233; 18; 16; + 146; 217; 67; 9; 220; 59; 134; 200; 56; 40; 243; 244; 172; 104; 96; 205; + 101; 166; 211; 227; 215; 60; 24; 45; 217; 66; 217; 37; 96; 51; 157; 56; 89; + 87; 255; 216; 44; 43; 59; 37; 240; 62; 48; 80; 70; 74; 207; 176; 107; 209; + 171; 119; 197; 21; 65; 107; 73; 250; 157; 65; 171; 244; 138; 174; 207; 130; + 18; 40; 168; 6; 166; 184; 220; 33; 200; 159; 157; 140; 70; 4; 96; 92; 203; + 163; 42; 212; 110; 9; 64; 37; 156; 47; 238; 18; 76; 77; 91; 18; 171; 29; + 163; 148; 129; 208; 195; 11; 186; 49; 119; 190; 250; 0; 141; 154; 137; 24; + 158; 98; 126; 96; 3; 130; 127; 217; 243; 67; 55; 2; 204; 178; 139; 103; 111; + 108; 191; 13; 132; 93; 139; 225; 159; 48; 13; 56; 110; 112; 199; 101; 225; + 185; 166; 45; 176; 110; 171; 32; 174; 125; 153; 186; 187; 87; 221; 150; 193; + 42; 35; 118; 66; 58; 250; 132; 112; 138; 44; 67; 66; 75; 69; 229; 185; 223; + 227; 25; 138; 137; 93; 228; 88; 156; 33; 0; 159; 190; 209; 235; 109; 161; + 206; 119; 241; 31; 203; 126; 68; 219; 114; 193; 248; 59; 189; 45; 40; 198; + 31; 196; 207; 95; 254; 21; 170; 117; 192; 255; 172; 128; 249; 169; 225; 36; + 232; 201; 112; 7; 253; 181; 181; 69; 154; 217; 97; 207; 36; 121; 58; 27; + 233; 132; 9; 134; 137; 62; 62; 48; 25; 9; 48; 231; 30; 11; 80; 65; 253; 100; + 242; 57; 156; 226; 231; 219; 23; 52; 173; 167; 156; 19; 156; 43; 106; 55; + 148; 189; 169; 123; 89; 147; 142; 27; 233; 160; 64; 152; 136; 104; 52; 215; + 18; 23; 225; 123; 9; 254; 171; 74; 155; 209; 41; 25; 224; 223; 225; 252; + 109; 164; 255; 241; 166; 44; 148; 8; 201; 195; 78; 241; 53; 44; 39; 33; 198; + 101; 221; 147; 49; 206; 248; 137; 43; 231; 187; 192; 37; 161; 86; 51; 16; + 77; 131; 254; 28; 46; 61; 169; 25; 4; 114; 226; 156; 177; 10; 128; 249; 34; + 203; 248; 158; 62; 138; 54; 90; 96; 21; 71; 80; 165; 34; 192; 233; 227; 143; + 36; 36; 95; 176; 72; 61; 85; 229; 38; 118; 100; 205; 22; 244; 19; 172; 253; + 110; 154; 221; 159; 2; 66; 65; 73; 165; 52; 190; 206; 18; 185; 123; 243; + 189; 135; 185; 100; 15; 100; 180; 202; 152; 133; 211; 164; 113; 65; 140; 76; + 201; 153; 170; 88; 39; 250; 7; 184; 0; 176; 111; 111; 0; 35; 146; 83; 218; + 173; 221; 145; 210; 251; 171; 209; 75; 87; 250; 20; 130; 80; 75; 254; 214; + 62; 21; 105; 2; 194; 196; 119; 29; 81; 57; 103; 90; 166; 148; 175; 20; 44; + 70; 38; 222; 203; 75; 167; 171; 111; 236; 96; 249; 34; 214; 3; 208; 83; 187; + 21; 26; 70; 101; 201; 243; 188; 136; 40; 16; 178; 90; 58; 104; 108; 117; + 118; 197; 39; 71; 180; 108; 200; 164; 88; 119; 58; 118; 80; 174; 147; 246; + 17; 129; 84; 166; 84; 253; 29; 223; 33; 174; 29; 101; 94; 17; 243; 144; 140; + 36; 18; 148; 244; 231; 141; 95; 209; 159; 93; 127; 114; 99; 109; 211; 8; 20; + 3; 51; 181; 199; 215; 239; 154; 55; 106; 75; 226; 174; 204; 197; 143; 225; + 169; 211; 190; 143; 79; 145; 53; 47; 51; 30; 82; 215; 238; 42; 77; 36; 63; + 21; 150; 46; 67; 40; 144; 58; 142; 212; 22; 156; 46; 119; 186; 100; 225; + 216; 152; 235; 71; 250; 135; 193; 59; 12; 194; 134; 234; 21; 1; 71; 109; 37; + 209; 70; 108; 203; 183; 138; 153; 136; 1; 102; 58; 181; 50; 120; 215; 3; + 186; 111; 144; 206; 129; 13; 69; 2; 57; 69; 216; 42; 77; 174; 248; 29; 45; + 219; 232; 142; 5; 24; 112; 30; 193; 210; 199; 95; 153; 179; 170; 121; 202; + 204; 36; 35; 109; 177; 83; 181; 224; 202; 178; 102; 77; 38; 35; 118; 101; + 202; 235; 51; 237; 186; 125; 200; 74; 210; 240; 214; 190; 14; 3; 16; 85; 99; + 247; 120; 127; 136; 42; 79; 45; 1; 92; 231; 185; 35; 42; 234; 242; 225; 202; + 81; 70; 151; 12; 202; 112; 93; 103; 115; 50; 182; 47; 245; 3; 68; 134; 11; + 37; 167; 11; 33; 100; 156; 2; 253; 24; 13; 187; 2; 143; 41; 137; 33; 20; 45; + 188; 150; 14; 37; 139; 230; 248; 71; 131; 201; 113; 45; 3; 232; 47; 159; + 123; 156; 109; 248; 134; 147; 88; 99; 221; 164; 133; 58; 225; 118; 145; 105; + 97; 87; 125; 170; 78; 149; 17; 81; 46; 251; 189; 96; 251; 87; 27; 194; 50; + 128; 7; 158; 49; 205; 35; 120; 216; 197; 117; 119; 137; 193; 207; 196; 239; + 247; 179; 10; 154; 18; 251; 84; 72; 113; 195; 56; 114; 65; 157; 196; 18; + 105; 55; 232; 255; 51; 181; 80; 9; 209; 107; 29; 142; 29; 28; 134; 33; 16; + 229; 2; 19; 56; 216; 34; 240; 180; 202; 145; 99; 12; 32; 9; 37; 66; 149; + 121; 131; 23; 160; 179; 9; 63; 238; 213; 170; 143; 208; 109; 98; 159; 20; + 112; 235; 238; 188; 0; 186; 201; 68; 164; 160; 70; 178; 33; 20; 199; 167; + 36; 140; 142; 58; 164; 74; 245; 94; 240; 216; 64; 245; 193; 4; 220; 185; 62; + 11; 12; 94; 186; 173; 227; 156; 164; 72; 68; 80; 181; 42; 236; 93; 15; 111; + 38; 39; 210; 46; 36; 8; 213; 94; 65; 238; 36; 152; 21; 212; 104; 148; 124; + 236; 123; 128; 63; 226; 33; 181; 225; 186; 147; 112; 250; 58; 93; 28; 99; + 172; 7; 220; 108; 140; 223; 249; 113; 81; 97; 88; 176; 226; 115; 157; 216; + 121; 160; 114; 93; 225; 234; 180; 206; 244; 1; 115; 65; 44; 114; 214; 89; + 231; 9; 100; 155; 114; 191; 114; 207; 225; 116; 166; 105; 229; 33; 60; 235; + 36; 10; 188; 35; 203; 186; 78; 210; 103; 1; 57; 28; 63; 53; 186; 59; 142; + 245; 39; 97; 67; 106; 191; 77; 118; 71; 76; 80; 38; 86; 110; 229; 196; 187; + 175; 93; 164; 225; 170; 230; 46; 219; 7; 11; 18; 242; 162; 75; 5; 187; 215; + 183; 137; 5; 177; 174; 206; 185; 226; 190; 237; 192; 243; 200; 186; 232; 63; + 105; 203; 18; 113; 118; 64; 189; 76; 118; 129; 197; 41; 192; 60; 96; 11; 97; + 93; 177; 92; 130; 227; 136; 89; 141; 173; 240; 220; 19; 20; 182; 43; 135; + 50; 24; 116; 108; 236; 142; 123; 176; 124; 210; 44; 120; 64; 202; 228; 189; + 103; 233; 251; 35; 195; 249; 218; 158; 30; 212; 138; 74; 211; 155; 178; 77; + 222; 110; 98; 151; 4; 129; 114; 115; 107; 56; 252; 112; 229; 254; 50; 199; + 140; 58; 218; 65; 1; 139; 218; 89; 131; 150; 200; 10; 253; 95; 151; 85; 168; + 50; 177; 161; 9; 232; 110; 58; 134; 253; 252; 49; 187; 68; 148; 197; 72; 78; + 62; 10; 105; 227; 47; 37; 250; 136; 208; 103; 200; 41; 220; 46; 41; 115; + 209; 56; 30; 189; 19; 181; 73; 97; 105; 216; 76; 43; 211; 183; 170; 216; + 129; 215; 55; 89; 229; 148; 43; 18; 174; 39; 33; 203; 11; 176; 153; 64; 177; + 207; 111; 232; 65; 33; 197; 250; 29; 207; 181; 63; 34; 80; 68; 85; 111; 49; + 37; 92; 50; 172; 119; 145; 101; 215; 152; 11; 3; 189; 164; 136; 79; 182; 24; + 208; 30; 176; 166; 2; 184; 161; 223; 48; 54; 213; 59; 173; 66; 71; 135; 15; + 136; 212; 164; 197; 238; 108; 13; 249; 10; 217; 197; 205; 55; 122; 36; 106; + 116; 246; 154; 123; 43; 189; 184; 49; 213; 81; 91; 252; 55; 53; 9; 5; 80; + 109; 84; 147; 197; 37; 207; 47; 35; 73; 15; 180; 43; 20; 101; 163; 32; 237; + 65; 217; 120; 82; 216; 204; 110; 67; 120; 47; 210; 131; 174; 84; 34; 183; + 205; 191; 123; 46; 208; 34; 197; 226; 228; 240; 191; 81; 51; 30; 104; 69; + 79; 3; 131; 157; 181; 100; 139; 251; 14; 162; 31; 242; 113; 139; 47; 228; + 80; 101; 186; 149; 148; 36; 105; 43; 71; 213; 69; 142; 249; 158; 83; 117; + 82; 32; 166; 161; 182; 123; 110; 131; 142; 60; 65; 215; 33; 79; 170; 178; + 92; 143; 232; 85; 209; 86; 111; 225; 91; 52; 166; 75; 93; 226; 45; 63; 116; + 174; 28; 150; 216; 116; 208; 237; 99; 28; 238; 245; 24; 109; 248; 41; 237; + 244; 231; 91; 197; 189; 151; 8; 177; 58; 102; 121; 210; 186; 76; 205; 31; + 215; 160; 36; 144; 209; 128; 248; 138; 40; 251; 10; 194; 37; 197; 25; 100; + 58; 95; 75; 151; 163; 177; 51; 114; 0; 226; 239; 188; 127; 125; 1; 40; 107; + 38; 106; 30; 239; 250; 22; 159; 115; 213; 196; 104; 108; 134; 44; 118; 3; + 27; 188; 47; 138; 246; 141; 90; 183; 135; 94; 67; 117; 89; 148; 144; 194; + 243; 197; 93; 124; 205; 171; 5; 145; 42; 154; 162; 129; 199; 88; 48; 28; 66; + 54; 29; 198; 128; 215; 212; 216; 220; 150; 209; 156; 79; 104; 55; 123; 106; + 216; 151; 146; 25; 99; 122; 209; 26; 36; 88; 208; 208; 23; 12; 28; 92; 173; + 156; 2; 186; 7; 3; 122; 56; 132; 208; 205; 124; 23; 4; 38; 109; 44; 66; 166; + 220; 189; 64; 130; 148; 80; 61; 21; 174; 119; 198; 104; 251; 180; 193; 192; + 169; 83; 207; 208; 97; 237; 208; 139; 66; 147; 204; 96; 103; 24; 132; 12; + 155; 153; 42; 179; 26; 122; 0; 174; 205; 24; 218; 11; 98; 134; 236; 141; + 168; 68; 202; 144; 129; 132; 202; 147; 53; 167; 154; 132; 94; 154; 24; 19; + 146; 205; 250; 216; 101; 53; 195; 216; 212; 209; 187; 253; 83; 91; 84; 82; + 140; 230; 99; 45; 218; 8; 131; 57; 39; 19; 212; 94; 67; 40; 141; 195; 66; + 201; 204; 120; 50; 96; 243; 80; 189; 239; 3; 218; 121; 26; 171; 7; 187; 85; + 51; 140; 190; 174; 151; 149; 38; 83; 36; 112; 10; 76; 14; 161; 185; 222; 27; + 125; 213; 102; 88; 162; 15; 247; 218; 39; 205; 181; 217; 185; 255; 253; 51; + 44; 73; 69; 41; 44; 87; 190; 48; 205; 214; 69; 199; 127; 199; 251; 174; 186; 227; 211; 232; 223; 228; 12; 218; 93; 170; 48; 136; 44; 162; 128; 202; 91; 192; 152; 84; 152; 127; 23; 225; 11; 159; 136; 206; 73; 56; 136; 162; 84; 123; 27; 173; 5; 128; 28; 146; 252; 35; 159; 195; 163; 61; 4; 243; 49; 10; @@ -4644,38 +5355,37 @@ let GE25519_GROUPER = (MATCH_MP pth (CONJ th1 th2));; let BYTES_LOADED_DATA = prove - (`bytes_loaded s (word (pc + 0x18f8)) edwards25519_scalarmulbase_alt_data <=> - read (memory :> bytes(word (pc + 0x18f8),48608)) s = + (`bytes_loaded s (word (pc + 0x2420)) edwards25519_scalarmulbase_alt_data <=> + read (memory :> bytes(word (pc + 0x2420),48576)) s = num_of_bytelist edwards25519_scalarmulbase_alt_data`, REWRITE_TAC[bytes_loaded; READ_BYTELIST_EQ_BYTES; CONV_RULE (RAND_CONV LENGTH_CONV) (AP_TERM `LENGTH:byte list->num` edwards25519_scalarmulbase_alt_data)]);; let EDWARDS25519BASE_TABLE_LEMMA = prove - (`read (memory :> bytes(word (pc + 0x18f8),48608)) s = + (`read (memory :> bytes(word (pc + 0x2420),48576)) s = num_of_bytelist edwards25519_scalarmulbase_alt_data - ==> bignum_from_memory(word(pc + 0x18f8),4) s = p_25519 /\ - edwards25519_exprojective + ==> edwards25519_exprojective (group_pow edwards25519_group E_25519 0) - (bignum_from_memory(word(pc + 0x1918),4) s, - bignum_from_memory(word(pc + 0x1938),4) s, + (bignum_from_memory(word(pc + 0x2420),4) s, + bignum_from_memory(word(pc + 0x2440),4) s, 1, - bignum_from_memory(word(pc + 0x1958),4) s) /\ + bignum_from_memory(word(pc + 0x2460),4) s) /\ edwards25519_exprojective (group_pow edwards25519_group E_25519 (2 EXP 251)) - (bignum_from_memory(word(pc + 0x1978),4) s, - bignum_from_memory(word(pc + 0x1998),4) s, + (bignum_from_memory(word(pc + 0x2480),4) s, + bignum_from_memory(word(pc + 0x24a0),4) s, 1, - bignum_from_memory(word(pc + 0x19b8),4) s) /\ + bignum_from_memory(word(pc + 0x24c0),4) s) /\ !i. i < 63 ==> !j. j < 8 ==> edwards25519_epprojective (group_pow edwards25519_group E_25519 (2 EXP (4 * i) * (j + 1))) - (bignum_from_memory(word(pc + 0x19d8 + 768 * i + 96 * j),4) s, - bignum_from_memory(word(pc + 0x19d8 + 768 * i + 96 * j + 32),4) s, - bignum_from_memory(word(pc + 0x19d8 + 768 * i + 96 * j + 64),4) s) /\ - ~(bignum_from_memory(word(pc + 0x19d8 + 768 * i + 96 * j + 64),4) s = + (bignum_from_memory(word(pc + 0x24e0 + 768 * i + 96 * j),4) s, + bignum_from_memory(word(pc + 0x24e0 + 768 * i + 96 * j + 32),4) s, + bignum_from_memory(word(pc + 0x24e0 + 768 * i + 96 * j + 64),4) s) /\ + ~(bignum_from_memory(word(pc + 0x24e0 + 768 * i + 96 * j + 64),4) s = 0)`, let GE25519_POWERS = end_itlist CONJ @@ -4685,8 +5395,8 @@ let EDWARDS25519BASE_TABLE_LEMMA = prove [GE25519_POW_1])) in REWRITE_TAC[GSYM BYTES_LOADED_DATA; edwards25519_scalarmulbase_alt_data] THEN CONV_TAC(LAND_CONV DATA64_CONV) THEN STRIP_TAC THEN - CONV_TAC(funpow 3 RAND_CONV (BINDER_CONV (RAND_CONV EXPAND_CASES_CONV))) THEN - CONV_TAC(funpow 3 RAND_CONV EXPAND_CASES_CONV) THEN + CONV_TAC(funpow 2 RAND_CONV (BINDER_CONV (RAND_CONV EXPAND_CASES_CONV))) THEN + CONV_TAC(funpow 2 RAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[WORD_ADD] THEN CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN REWRITE_TAC[GSYM WORD_ADD] THEN ASM_REWRITE_TAC[] THEN @@ -4740,7 +5450,7 @@ let LOCAL_MUL_P25519_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0xd6d8) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xe1e0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmulbase_alt_mc /\ read PC s = pcin /\ @@ -4903,7 +5613,7 @@ let LOCAL_MUL_4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0xd6d8) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xe1e0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmulbase_alt_mc /\ read PC s = pcin /\ @@ -5057,7 +5767,7 @@ let LOCAL_ADD_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0xd6d8) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xe1e0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmulbase_alt_mc /\ read PC s = pcin /\ @@ -5128,7 +5838,7 @@ let LOCAL_DOUBLE_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0xd6d8) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xe1e0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmulbase_alt_mc /\ read PC s = pcin /\ @@ -5197,7 +5907,7 @@ let LOCAL_SUB_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0xd6d8) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xe1e0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmulbase_alt_mc /\ read PC s = pcin /\ @@ -5269,19 +5979,15 @@ let LOCAL_SUB_TWICE4_TAC = (* ------------------------------------------------------------------------- *) let LOCAL_MODINV_TAC = - let cth = - (GEN_REWRITE_CONV RAND_CONV [bignum_modinv_mc] THENC TRIM_LIST_CONV) - `TRIM_LIST (12,12) bignum_modinv_mc` - and th = CONV_RULE (DEPTH_CONV WORD_NUM_RED_CONV) - (SPEC `word 4:int64` CORE_MODINV_CORRECT) in ARM_SUBROUTINE_SIM_TAC - (edwards25519_scalarmulbase_alt_mc,EDWARDS25519_SCALARMULBASE_ALT_EXEC,0x10f0,cth,th) - [`read X1 s`; `read X2 s`; - `read (memory :> bytes(read X2 s,8 * 4)) s`; - `read X3 s`; - `read (memory :> bytes(read X3 s,8 * 4)) s`; - `read X4 s`; - `pc + 0x10f0`];; + (edwards25519_scalarmulbase_alt_mc,EDWARDS25519_SCALARMULBASE_ALT_EXEC, + 0x10e4, + (GEN_REWRITE_CONV RAND_CONV [bignum_inv_p25519_mc] THENC TRIM_LIST_CONV) + `TRIM_LIST (12,16) bignum_inv_p25519_mc`, + CORE_INV_P25519_CORRECT) + [`read X0 s`; `read X1 s`; + `read (memory :> bytes(read X1 s,8 * 4)) s`; + `pc + 0x10e4`; `stackpointer:int64`];; (* ------------------------------------------------------------------------- *) (* Overall point operation proof. *) @@ -5291,8 +5997,8 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove (`!res scalar n pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,448)) - [(word pc,0xd6d8); (res,64); (scalar,32)] /\ - nonoverlapping (res,64) (word pc,0xd6d8) + [(word pc,0xe1e0); (res,64); (scalar,32)] /\ + nonoverlapping (res,64) (word pc,0xe1e0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) (APPEND edwards25519_scalarmulbase_alt_mc @@ -5301,7 +6007,7 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove read SP s = stackpointer /\ C_ARGUMENTS [res; scalar] s /\ bignum_from_memory (scalar,4) s = n) - (\s. read PC s = word (pc + 0x18e4) /\ + (\s. read PC s = word (pc + 0x240c) /\ bignum_pair_from_memory(res,4) s = paired (modular_encode (256,p_25519)) (group_pow edwards25519_group E_25519 n)) @@ -5358,11 +6064,11 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove ENSURES_WHILE_UP_TAC `63` `pc + 0x144` `pc + 0x1094` `\i s. - read (memory :> bytes(word(pc + 0x18f8),48608)) s = + read (memory :> bytes(word(pc + 0x2420),48576)) s = num_of_bytelist edwards25519_scalarmulbase_alt_data /\ read SP s = stackpointer /\ read X23 s = res /\ - read X19 s = word(pc + 0x19d8 + 768 * i) /\ + read X19 s = word(pc + 0x24e0 + 768 * i) /\ read X20 s = word (4 * i) /\ val(read X21 s) <= 1 /\ (i >= 63 ==> val(read X21 s) < 1) /\ @@ -5391,23 +6097,23 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove RULE_ASSUM_TAC(REWRITE_RULE[SYM th]) THEN ASSUME_TAC th) THEN SUBGOAL_THEN `nonoverlapping_modulo (2 EXP 64) (val(stackpointer:int64),448) - (val(wpc:int64),0xd6d8)` + (val(wpc:int64),0xe1e0)` ASSUME_TAC THENL [EXPAND_TAC "wpc" THEN NONOVERLAPPING_TAC; ALL_TAC] THEN REPEAT(DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN DISCH_THEN(K ALL_TAC) THEN BIGNUM_LDIGITIZE_TAC "x0_" - `bignum_from_memory(word_add wpc (word 0x1918),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x2420),4) s0` THEN BIGNUM_LDIGITIZE_TAC "y0_" - `bignum_from_memory(word_add wpc (word 0x1938),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x2440),4) s0` THEN BIGNUM_LDIGITIZE_TAC "t0_" - `bignum_from_memory(word_add wpc (word 0x1958),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x2460),4) s0` THEN BIGNUM_LDIGITIZE_TAC "x1_" - `bignum_from_memory(word_add wpc (word 0x1978),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x2480),4) s0` THEN BIGNUM_LDIGITIZE_TAC "y1_" - `bignum_from_memory(word_add wpc (word 0x1998),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x24a0),4) s0` THEN BIGNUM_LDIGITIZE_TAC "t1_" - `bignum_from_memory(word_add wpc (word 0x19b8),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x24c0),4) s0` THEN ARM_ACCSTEPS_TAC EDWARDS25519_SCALARMULBASE_ALT_EXEC [13;14;17;18;20;21;22;23;27;29;31;33] (1--41) THEN @@ -5562,7 +6268,7 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove REWRITE_TAC[ARITH_RULE `pc + off + 768 * i + jre = (pc + off + 768 * i) + jre`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `tab:int64 = word(pc + 0x19d8 + 768 * i)` THEN + ABBREV_TAC `tab:int64 = word(pc + 0x24e0 + 768 * i)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o TOP_DEPTH_CONV) [WORD_ADD_0] THEN @@ -6025,18 +6731,13 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN - (*** The state setup for the modular inverse ***) - - FIRST_X_ASSUM(MP_TAC o CONJUNCT1 o MATCH_MP EDWARDS25519BASE_TABLE_LEMMA) THEN - REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN DISCH_TAC THEN - ARM_STEPS_TAC EDWARDS25519_SCALARMULBASE_ALT_EXEC (19--23) THEN - (*** The inlining of modular inverse ***) - LOCAL_MODINV_TAC 24 THEN + ARM_STEPS_TAC EDWARDS25519_SCALARMULBASE_ALT_EXEC (19--20) THEN + LOCAL_MODINV_TAC 21 THEN ABBREV_TAC `w_3 = - read(memory :> bytes(word_add stackpointer (word 224),8 * 4)) s24` THEN + read(memory :> bytes(word_add stackpointer (word 224),8 * 4)) s21` THEN (*** Final multiplications ***) @@ -6053,13 +6754,18 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove MAP_EVERY X_GEN_TAC [`x:int`; `y:int`] THEN REPEAT(DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN - FIRST_ASSUM(MP_TAC o check (is_imp o concl)) THEN - REWRITE_TAC[] THEN ONCE_REWRITE_TAC[COPRIME_SYM] THEN - SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; DIVIDES_MOD] THEN ASM_CASES_TAC `Z MOD p_25519 = 0` THEN ASM_REWRITE_TAC[] THENL [ASM_REWRITE_TAC[exprojective; INTEGER_MOD_RING_CLAUSES]; ALL_TAC] THEN - ANTS_TAC THENL - [REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; STRIP_TAC] THEN + SUBGOAL_THEN `w_3 < p_25519 /\ (Z * w_3 == 1) (mod p_25519)` + STRIP_ASSUME_TAC THENL + [FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN MATCH_MP_TAC(TAUT + `p /\ (q ==> r) /\ (p /\ q ==> s) ==> (p ==> q) ==> r /\ s`) THEN + REPEAT CONJ_TAC THENL + [ASM_SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; DIVIDES_MOD]; + DISCH_THEN SUBST1_TAC THEN REWRITE_TAC[INVERSE_MOD_BOUND] THEN + REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; + MESON_TAC[INVERSE_MOD_RMUL]]; + ALL_TAC] THEN SUBGOAL_THEN `ring_inv (integer_mod_ring p_25519) (&Z rem &p_25519) = &w_3` ASSUME_TAC THENL [MATCH_MP_TAC RING_RINV_UNIQUE THEN @@ -6068,8 +6774,7 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove CONV_TAC MOD_DOWN_CONV THEN ASM_REWRITE_TAC[GSYM CONG] THEN REWRITE_TAC[MOD_LT_EQ; ARITH_EQ; p_25519]; ALL_TAC] THEN - - SUBGOAL_THEN `~(&p_25519:int = &0)` ASSUME_TAC THENL + SUBGOAL_THEN `~(&p_25519:int = &0)` ASSUME_TAC THENL [REWRITE_TAC[INT_OF_NUM_EQ; p_25519] THEN ARITH_TAC; ALL_TAC] THEN ASM_CASES_TAC `flip:bool` THEN ASM_REWRITE_TAC[paired; modular_encode; I_THM; EDWARDS25519_GROUP; @@ -6086,8 +6791,8 @@ let EDWARDS25519_SCALARMULBASE_ALT_SUBROUTINE_CORRECT = time prove (`!res scalar n pc stackpointer returnaddress. aligned 16 stackpointer /\ ALL (nonoverlapping (word_sub stackpointer (word 496),496)) - [(word pc,0xd6d8); (res,64); (scalar,32)] /\ - nonoverlapping (res,64) (word pc,0xd6d8) + [(word pc,0xe1e0); (res,64); (scalar,32)] /\ + nonoverlapping (res,64) (word pc,0xe1e0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) (APPEND edwards25519_scalarmulbase_alt_mc diff --git a/arm/proofs/edwards25519_scalarmuldouble.ml b/arm/proofs/edwards25519_scalarmuldouble.ml index b05eceef..2f54b366 100644 --- a/arm/proofs/edwards25519_scalarmuldouble.ml +++ b/arm/proofs/edwards25519_scalarmuldouble.ml @@ -8,7 +8,7 @@ (* ========================================================================= *) needs "arm/proofs/base.ml";; -needs "arm/proofs/bignum_modinv.ml";; +needs "arm/proofs/bignum_inv_p25519.ml";; needs "common/ecencoding.ml";; do_list hide_constant ["X1";"X2";"X3";"X4";"X5"];; @@ -282,32 +282,32 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0xa9012ac9; (* arm_STP X9 X10 X22 (Immediate_Offset (iword (&16))) *) 0x910883f6; (* arm_ADD X22 SP (rvalue (word 544)) *) 0x910683f7; (* arm_ADD X23 SP (rvalue (word 416)) *) - 0x9400064b; (* arm_BL (word 6444) *) + 0x94000915; (* arm_BL (word 9300) *) 0x910a83f6; (* arm_ADD X22 SP (rvalue (word 672)) *) 0x910683f7; (* arm_ADD X23 SP (rvalue (word 416)) *) 0x910883f8; (* arm_ADD X24 SP (rvalue (word 544)) *) - 0x94000fcd; (* arm_BL (word 16180) *) + 0x94001297; (* arm_BL (word 19036) *) 0x910c83f6; (* arm_ADD X22 SP (rvalue (word 800)) *) 0x910883f7; (* arm_ADD X23 SP (rvalue (word 544)) *) - 0x94000644; (* arm_BL (word 6416) *) + 0x9400090e; (* arm_BL (word 9272) *) 0x910e83f6; (* arm_ADD X22 SP (rvalue (word 928)) *) 0x910683f7; (* arm_ADD X23 SP (rvalue (word 416)) *) 0x910c83f8; (* arm_ADD X24 SP (rvalue (word 800)) *) - 0x94000fc6; (* arm_BL (word 16152) *) + 0x94001290; (* arm_BL (word 19008) *) 0x911083f6; (* arm_ADD X22 SP (rvalue (word 1056)) *) 0x910a83f7; (* arm_ADD X23 SP (rvalue (word 672)) *) - 0x9400063d; (* arm_BL (word 6388) *) + 0x94000907; (* arm_BL (word 9244) *) 0x911283f6; (* arm_ADD X22 SP (rvalue (word 1184)) *) 0x910683f7; (* arm_ADD X23 SP (rvalue (word 416)) *) 0x911083f8; (* arm_ADD X24 SP (rvalue (word 1056)) *) - 0x94000fbf; (* arm_BL (word 16124) *) + 0x94001289; (* arm_BL (word 18980) *) 0x911483f6; (* arm_ADD X22 SP (rvalue (word 1312)) *) 0x910c83f7; (* arm_ADD X23 SP (rvalue (word 800)) *) - 0x94000636; (* arm_BL (word 6360) *) + 0x94000900; (* arm_BL (word 9216) *) 0xd2801f93; (* arm_MOV X19 (rvalue (word 252)) *) 0xf9401fe0; (* arm_LDR X0 SP (Immediate_Offset (word 56)) *) 0xd37cfc14; (* arm_LSR X20 X0 60 *) - 0x1003728e; (* arm_ADR X14 (word 28240) *) + 0x1003cace; (* arm_ADR X14 (word 31064) *) 0xd2800020; (* arm_MOV X0 (rvalue (word 1)) *) 0xaa1f03e1; (* arm_MOV X1 XZR *) 0xaa1f03e2; (* arm_MOV X2 XZR *) @@ -479,12 +479,12 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0xa94535cc; (* arm_LDP X12 X13 X14 (Immediate_Offset (iword (&80))) *) 0x9a8c114a; (* arm_CSEL X10 X10 X12 Condition_NE *) 0x9a8d116b; (* arm_CSEL X11 X11 X13 Condition_NE *) - 0xa91407e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&320))) *) - 0xa9150fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&336))) *) - 0xa91617e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&352))) *) - 0xa9171fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&368))) *) - 0xa91827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&384))) *) - 0xa9192fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&400))) *) + 0xa90407e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xa9050fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&80))) *) + 0xa90617e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&96))) *) + 0xa9071fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&112))) *) + 0xa90827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&128))) *) + 0xa9092fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&144))) *) 0xf9400fe0; (* arm_LDR X0 SP (Immediate_Offset (word 24)) *) 0xd37cfc14; (* arm_LSR X20 X0 60 *) 0x910683f6; (* arm_ADD X22 SP (rvalue (word 416)) *) @@ -711,22 +711,22 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0xa94746d0; (* arm_LDP X16 X17 X22 (Immediate_Offset (iword (&112))) *) 0x9a9011ce; (* arm_CSEL X14 X14 X16 Condition_NE *) 0x9a9111ef; (* arm_CSEL X15 X15 X17 Condition_NE *) - 0xa90c07e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&192))) *) - 0xa90d0fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&208))) *) - 0xa90e17e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&224))) *) - 0xa90f1fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&240))) *) - 0xa91027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&256))) *) - 0xa9112fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&272))) *) - 0xa91237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&288))) *) - 0xa9133fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&304))) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910303f7; (* arm_ADD X23 SP (rvalue (word 192)) *) - 0x910503f8; (* arm_ADD X24 SP (rvalue (word 320)) *) - 0x940014c8; (* arm_BL (word 21280) *) + 0xa91207e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&288))) *) + 0xa9130fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&304))) *) + 0xa91417e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&320))) *) + 0xa9151fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&336))) *) + 0xa91627e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&352))) *) + 0xa9172fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&368))) *) + 0xa91837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&384))) *) + 0xa9193fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&400))) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910483f7; (* arm_ADD X23 SP (rvalue (word 288)) *) + 0x910103f8; (* arm_ADD X24 SP (rvalue (word 64)) *) + 0x94001792; (* arm_BL (word 24136) *) 0xd1001273; (* arm_SUB X19 X19 (rvalue (word 4)) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x940009a8; (* arm_BL (word 9888) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x94000c72; (* arm_BL (word 12744) *) 0xd346fe60; (* arm_LSR X0 X19 6 *) 0x910083e1; (* arm_ADD X1 SP (rvalue (word 32)) *) 0xf8607822; (* arm_LDR X2 X1 (Shiftreg_Offset X0 3) *) @@ -735,7 +735,7 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0xf1002014; (* arm_SUBS X20 X0 (rvalue (word 8)) *) 0xda942694; (* arm_CNEG X20 X20 Condition_CC *) 0xda9f23f5; (* arm_CSETM X21 Condition_CC *) - 0x10033d0e; (* arm_ADR X14 (word 26528) *) + 0x1003954e; (* arm_ADR X14 (word 29352) *) 0xd2800020; (* arm_MOV X0 (rvalue (word 1)) *) 0xaa1f03e1; (* arm_MOV X1 XZR *) 0xaa1f03e2; (* arm_MOV X2 XZR *) @@ -926,12 +926,12 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) 0xda1f016b; (* arm_SBC X11 X11 XZR *) - 0xa91437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&320))) *) - 0xa9153fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&336))) *) - 0xa91617e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&352))) *) - 0xa9171fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&368))) *) - 0xa91827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&384))) *) - 0xa9192fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&400))) *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa9053fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&80))) *) + 0xa90617e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&96))) *) + 0xa9071fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&112))) *) + 0xa90827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&128))) *) + 0xa9092fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&144))) *) 0xd346fe60; (* arm_LSR X0 X19 6 *) 0xf8607be1; (* arm_LDR X1 SP (Shiftreg_Offset X0 3) *) 0x9ad32422; (* arm_LSRV X2 X1 X19 *) @@ -1181,349 +1181,1063 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) 0xda1f01ef; (* arm_SBC X15 X15 XZR *) - 0xa90c07e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&192))) *) - 0xa90d0fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&208))) *) - 0xa90e17e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&224))) *) - 0xa90f1fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&240))) *) - 0xa91027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&256))) *) - 0xa9112fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&272))) *) - 0xa91237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&288))) *) - 0xa9133fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&304))) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x940007d7; (* arm_BL (word 8028) *) - 0x910303f6; (* arm_ADD X22 SP (rvalue (word 192)) *) - 0x910303f7; (* arm_ADD X23 SP (rvalue (word 192)) *) - 0x910503f8; (* arm_ADD X24 SP (rvalue (word 320)) *) - 0x940012ef; (* arm_BL (word 19388) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x940007d0; (* arm_BL (word 8000) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x940002b4; (* arm_BL (word 2768) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x910303f8; (* arm_ADD X24 SP (rvalue (word 192)) *) - 0x94000c36; (* arm_BL (word 12504) *) + 0xa91207e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&288))) *) + 0xa9130fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&304))) *) + 0xa91417e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&320))) *) + 0xa9151fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&336))) *) + 0xa91627e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&352))) *) + 0xa9172fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&368))) *) + 0xa91837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&384))) *) + 0xa9193fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&400))) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x94000aa1; (* arm_BL (word 10884) *) + 0x910483f6; (* arm_ADD X22 SP (rvalue (word 288)) *) + 0x910483f7; (* arm_ADD X23 SP (rvalue (word 288)) *) + 0x910103f8; (* arm_ADD X24 SP (rvalue (word 64)) *) + 0x940015b9; (* arm_BL (word 22244) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x94000a9a; (* arm_BL (word 10856) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x9400057e; (* arm_BL (word 5624) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x910483f8; (* arm_ADD X24 SP (rvalue (word 288)) *) + 0x94000f00; (* arm_BL (word 15360) *) 0xb5ffc3b3; (* arm_CBNZ X19 (word 2095220) *) - 0xd2800080; (* arm_MOV X0 (rvalue (word 4)) *) - 0x910303e1; (* arm_ADD X1 SP (rvalue (word 192)) *) - 0x910203e2; (* arm_ADD X2 SP (rvalue (word 128)) *) - 0x100300a3; (* arm_ADR X3 (word 24596) *) - 0x910503e4; (* arm_ADD X4 SP (rvalue (word 320)) *) - 0xd37df00a; (* arm_LSL X10 X0 3 *) - 0x8b0a0095; (* arm_ADD X21 X4 X10 *) - 0x8b0a02b6; (* arm_ADD X22 X21 X10 *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a784b; (* arm_LDR X11 X2 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xf82a7aab; (* arm_STR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf82a7acc; (* arm_STR X12 X22 (Shiftreg_Offset X10 3) *) - 0xf82a788c; (* arm_STR X12 X4 (Shiftreg_Offset X10 3) *) - 0xf82a783f; (* arm_STR XZR X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb00015f; (* arm_CMP X10 X0 *) - 0x54ffff03; (* arm_BCC (word 2097120) *) - 0xf940008b; (* arm_LDR X11 X4 (Immediate_Offset (word 0)) *) - 0xd100056c; (* arm_SUB X12 X11 (rvalue (word 1)) *) - 0xf900008c; (* arm_STR X12 X4 (Immediate_Offset (word 0)) *) - 0xd37ef574; (* arm_LSL X20 X11 2 *) - 0xcb140174; (* arm_SUB X20 X11 X20 *) - 0xd27f0294; (* arm_EOR X20 X20 (rvalue (word 2)) *) - 0xd280002c; (* arm_MOV X12 (rvalue (word 1)) *) - 0x9b14316c; (* arm_MADD X12 X11 X20 X12 *) - 0x9b0c7d8b; (* arm_MUL X11 X12 X12 *) - 0x9b145194; (* arm_MADD X20 X12 X20 X20 *) - 0x9b0b7d6c; (* arm_MUL X12 X11 X11 *) - 0x9b145174; (* arm_MADD X20 X11 X20 X20 *) - 0x9b0c7d8b; (* arm_MUL X11 X12 X12 *) - 0x9b145194; (* arm_MADD X20 X12 X20 X20 *) - 0x9b145174; (* arm_MADD X20 X11 X20 X20 *) - 0xd379e002; (* arm_LSL X2 X0 7 *) - 0x9100fc4a; (* arm_ADD X10 X2 (rvalue (word 63)) *) - 0xd346fd45; (* arm_LSR X5 X10 6 *) - 0xeb0000bf; (* arm_CMP X5 X0 *) - 0x9a852005; (* arm_CSEL X5 X0 X5 Condition_CS *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ef; (* arm_MOV X15 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f0; (* arm_MOV X16 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a7aab; (* arm_LDR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf86a7acc; (* arm_LDR X12 X22 (Shiftreg_Offset X10 3) *) - 0xaa0c0171; (* arm_ORR X17 X11 X12 *) - 0xeb1f023f; (* arm_CMP X17 XZR *) - 0x8a0d0271; (* arm_AND X17 X19 X13 *) - 0x9a8f122f; (* arm_CSEL X15 X17 X15 Condition_NE *) - 0x8a0e0271; (* arm_AND X17 X19 X14 *) - 0x9a901230; (* arm_CSEL X16 X17 X16 Condition_NE *) - 0x9a8d116d; (* arm_CSEL X13 X11 X13 Condition_NE *) - 0x9a8e118e; (* arm_CSEL X14 X12 X14 Condition_NE *) - 0xda9f03f3; (* arm_CSETM X19 Condition_NE *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb05015f; (* arm_CMP X10 X5 *) - 0x54fffe63; (* arm_BCC (word 2097100) *) - 0xaa0e01ab; (* arm_ORR X11 X13 X14 *) - 0xdac0116c; (* arm_CLZ X12 X11 *) - 0xeb0c03f1; (* arm_NEGS X17 X12 *) - 0x9acc21ad; (* arm_LSLV X13 X13 X12 *) - 0x9a9f11ef; (* arm_CSEL X15 X15 XZR Condition_NE *) - 0x9acc21ce; (* arm_LSLV X14 X14 X12 *) - 0x9a9f1210; (* arm_CSEL X16 X16 XZR Condition_NE *) - 0x9ad125ef; (* arm_LSRV X15 X15 X17 *) - 0x9ad12610; (* arm_LSRV X16 X16 X17 *) - 0xaa0f01ad; (* arm_ORR X13 X13 X15 *) - 0xaa1001ce; (* arm_ORR X14 X14 X16 *) - 0xf94002af; (* arm_LDR X15 X21 (Immediate_Offset (word 0)) *) - 0xf94002d0; (* arm_LDR X16 X22 (Immediate_Offset (word 0)) *) - 0xd2800026; (* arm_MOV X6 (rvalue (word 1)) *) - 0xaa1f03e7; (* arm_MOV X7 XZR *) - 0xaa1f03e8; (* arm_MOV X8 XZR *) - 0xd2800029; (* arm_MOV X9 (rvalue (word 1)) *) - 0xd280074a; (* arm_MOV X10 (rvalue (word 58)) *) - 0xf24001ff; (* arm_TST X15 (rvalue (word 1)) *) - 0x9a9f11cb; (* arm_CSEL X11 X14 XZR Condition_NE *) - 0x9a9f120c; (* arm_CSEL X12 X16 XZR Condition_NE *) - 0x9a9f1111; (* arm_CSEL X17 X8 XZR Condition_NE *) - 0x9a9f1133; (* arm_CSEL X19 X9 XZR Condition_NE *) - 0xfa4e11a2; (* arm_CCMP X13 X14 (word 2) Condition_NE *) - 0xcb0b01ab; (* arm_SUB X11 X13 X11 *) - 0xcb0c01ec; (* arm_SUB X12 X15 X12 *) - 0x9a8d21ce; (* arm_CSEL X14 X14 X13 Condition_CS *) - 0xda8b256b; (* arm_CNEG X11 X11 Condition_CC *) - 0x9a8f2210; (* arm_CSEL X16 X16 X15 Condition_CS *) - 0xda8c258f; (* arm_CNEG X15 X12 Condition_CC *) - 0x9a862108; (* arm_CSEL X8 X8 X6 Condition_CS *) - 0x9a872129; (* arm_CSEL X9 X9 X7 Condition_CS *) - 0xf27f019f; (* arm_TST X12 (rvalue (word 2)) *) - 0x8b1100c6; (* arm_ADD X6 X6 X17 *) - 0x8b1300e7; (* arm_ADD X7 X7 X19 *) - 0xd341fd6d; (* arm_LSR X13 X11 1 *) - 0xd341fdef; (* arm_LSR X15 X15 1 *) - 0x8b080108; (* arm_ADD X8 X8 X8 *) - 0x8b090129; (* arm_ADD X9 X9 X9 *) - 0xd100054a; (* arm_SUB X10 X10 (rvalue (word 1)) *) - 0xb5fffd6a; (* arm_CBNZ X10 (word 2097068) *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f1; (* arm_MOV X17 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x9b0b7ccf; (* arm_MUL X15 X6 X11 *) - 0x9b0c7cf0; (* arm_MUL X16 X7 X12 *) - 0xab0d01ef; (* arm_ADDS X15 X15 X13 *) - 0x9bcb7ccd; (* arm_UMULH X13 X6 X11 *) - 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) - 0xab1001ef; (* arm_ADDS X15 X15 X16 *) - 0x93d1e9f1; (* arm_EXTR X17 X15 X17 58 *) - 0xf82a7891; (* arm_STR X17 X4 (Shiftreg_Offset X10 3) *) - 0xaa0f03f1; (* arm_MOV X17 X15 *) - 0x9bcc7cef; (* arm_UMULH X15 X7 X12 *) - 0x9a0f01ad; (* arm_ADC X13 X13 X15 *) - 0x9b0b7d0f; (* arm_MUL X15 X8 X11 *) - 0x9b0c7d30; (* arm_MUL X16 X9 X12 *) - 0xab0e01ef; (* arm_ADDS X15 X15 X14 *) - 0x9bcb7d0e; (* arm_UMULH X14 X8 X11 *) - 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) - 0xab1001ef; (* arm_ADDS X15 X15 X16 *) - 0x93d3e9f3; (* arm_EXTR X19 X15 X19 58 *) - 0xf82a7833; (* arm_STR X19 X1 (Shiftreg_Offset X10 3) *) - 0xaa0f03f3; (* arm_MOV X19 X15 *) - 0x9bcc7d2f; (* arm_UMULH X15 X9 X12 *) - 0x9a0f01ce; (* arm_ADC X14 X14 X15 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb00015f; (* arm_CMP X10 X0 *) - 0x54fffcc3; (* arm_BCC (word 2097048) *) - 0x93d1e9ad; (* arm_EXTR X13 X13 X17 58 *) - 0x93d3e9ce; (* arm_EXTR X14 X14 X19 58 *) - 0xf940008b; (* arm_LDR X11 X4 (Immediate_Offset (word 0)) *) - 0x9b147d71; (* arm_MUL X17 X11 X20 *) - 0xf940006c; (* arm_LDR X12 X3 (Immediate_Offset (word 0)) *) - 0x9b0c7e2f; (* arm_MUL X15 X17 X12 *) - 0x9bcc7e30; (* arm_UMULH X16 X17 X12 *) - 0xab0f016b; (* arm_ADDS X11 X11 X15 *) - 0xd280002a; (* arm_MOV X10 (rvalue (word 1)) *) - 0xd100040b; (* arm_SUB X11 X0 (rvalue (word 1)) *) - 0xb40001ab; (* arm_CBZ X11 (word 52) *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a788c; (* arm_LDR X12 X4 (Shiftreg_Offset X10 3) *) - 0x9b0b7e2f; (* arm_MUL X15 X17 X11 *) - 0xba10018c; (* arm_ADCS X12 X12 X16 *) - 0x9bcb7e30; (* arm_UMULH X16 X17 X11 *) - 0x9a1f0210; (* arm_ADC X16 X16 XZR *) - 0xab0f018c; (* arm_ADDS X12 X12 X15 *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f788c; (* arm_STR X12 X4 (Shiftreg_Offset X15 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5fffeab; (* arm_CBNZ X11 (word 2097108) *) - 0xba0d0210; (* arm_ADCS X16 X16 X13 *) - 0x9a1f03ed; (* arm_ADC X13 XZR XZR *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f7890; (* arm_STR X16 X4 (Shiftreg_Offset X15 3) *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xfa0c017f; (* arm_SBCS XZR X11 X12 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff6b; (* arm_CBNZ X11 (word 2097132) *) - 0xfa1f01bf; (* arm_SBCS XZR X13 XZR *) - 0xda9f33ed; (* arm_CSETM X13 Condition_CS *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0x8a0d018c; (* arm_AND X12 X12 X13 *) - 0xfa0c016b; (* arm_SBCS X11 X11 X12 *) - 0xf82a788b; (* arm_STR X11 X4 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff2b; (* arm_CBNZ X11 (word 2097124) *) - 0xf940002b; (* arm_LDR X11 X1 (Immediate_Offset (word 0)) *) - 0x9b147d71; (* arm_MUL X17 X11 X20 *) - 0xf940006c; (* arm_LDR X12 X3 (Immediate_Offset (word 0)) *) - 0x9b0c7e2f; (* arm_MUL X15 X17 X12 *) - 0x9bcc7e30; (* arm_UMULH X16 X17 X12 *) - 0xab0f016b; (* arm_ADDS X11 X11 X15 *) - 0xd280002a; (* arm_MOV X10 (rvalue (word 1)) *) - 0xd100040b; (* arm_SUB X11 X0 (rvalue (word 1)) *) - 0xb40001ab; (* arm_CBZ X11 (word 52) *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x9b0b7e2f; (* arm_MUL X15 X17 X11 *) - 0xba10018c; (* arm_ADCS X12 X12 X16 *) - 0x9bcb7e30; (* arm_UMULH X16 X17 X11 *) - 0x9a1f0210; (* arm_ADC X16 X16 XZR *) - 0xab0f018c; (* arm_ADDS X12 X12 X15 *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f782c; (* arm_STR X12 X1 (Shiftreg_Offset X15 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5fffeab; (* arm_CBNZ X11 (word 2097108) *) - 0xba0e0210; (* arm_ADCS X16 X16 X14 *) - 0x9a1f03ee; (* arm_ADC X14 XZR XZR *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f7830; (* arm_STR X16 X1 (Shiftreg_Offset X15 3) *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a782b; (* arm_LDR X11 X1 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xfa0c017f; (* arm_SBCS XZR X11 X12 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff6b; (* arm_CBNZ X11 (word 2097132) *) - 0xfa1f01df; (* arm_SBCS XZR X14 XZR *) - 0xda9f33ee; (* arm_CSETM X14 Condition_CS *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a782b; (* arm_LDR X11 X1 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0x8a0e018c; (* arm_AND X12 X12 X14 *) - 0xfa0c016b; (* arm_SBCS X11 X11 X12 *) - 0xf82a782b; (* arm_STR X11 X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff2b; (* arm_CBNZ X11 (word 2097124) *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f1; (* arm_MOV X17 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a7aab; (* arm_LDR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf86a7acc; (* arm_LDR X12 X22 (Shiftreg_Offset X10 3) *) - 0x9b0b7ccf; (* arm_MUL X15 X6 X11 *) - 0x9b0c7cf0; (* arm_MUL X16 X7 X12 *) - 0xab0d01ef; (* arm_ADDS X15 X15 X13 *) - 0x9bcb7ccd; (* arm_UMULH X13 X6 X11 *) - 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) - 0xeb1001ef; (* arm_SUBS X15 X15 X16 *) - 0xf82a7aaf; (* arm_STR X15 X21 (Shiftreg_Offset X10 3) *) - 0x9bcc7cef; (* arm_UMULH X15 X7 X12 *) - 0xcb1101f1; (* arm_SUB X17 X15 X17 *) - 0xfa1101ad; (* arm_SBCS X13 X13 X17 *) - 0xda9f23f1; (* arm_CSETM X17 Condition_CC *) - 0x9b0b7d0f; (* arm_MUL X15 X8 X11 *) - 0x9b0c7d30; (* arm_MUL X16 X9 X12 *) - 0xab0e01ef; (* arm_ADDS X15 X15 X14 *) - 0x9bcb7d0e; (* arm_UMULH X14 X8 X11 *) - 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) - 0xeb1001ef; (* arm_SUBS X15 X15 X16 *) - 0xf82a7acf; (* arm_STR X15 X22 (Shiftreg_Offset X10 3) *) - 0x9bcc7d2f; (* arm_UMULH X15 X9 X12 *) - 0xcb1301f3; (* arm_SUB X19 X15 X19 *) - 0xfa1301ce; (* arm_SBCS X14 X14 X19 *) - 0xda9f23f3; (* arm_CSETM X19 Condition_CC *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb05015f; (* arm_CMP X10 X5 *) - 0x54fffcc3; (* arm_BCC (word 2097048) *) - 0xab11023f; (* arm_CMN X17 X17 *) - 0xf94002af; (* arm_LDR X15 X21 (Immediate_Offset (word 0)) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xd10004a6; (* arm_SUB X6 X5 (rvalue (word 1)) *) - 0xb4000166; (* arm_CBZ X6 (word 44) *) - 0x9100214b; (* arm_ADD X11 X10 (rvalue (word 8)) *) - 0xf86b6aac; (* arm_LDR X12 X21 (Register_Offset X11) *) - 0x93cfe98f; (* arm_EXTR X15 X12 X15 58 *) - 0xca1101ef; (* arm_EOR X15 X15 X17 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6aaf; (* arm_STR X15 X21 (Register_Offset X10) *) - 0xaa0c03ef; (* arm_MOV X15 X12 *) - 0x9100214a; (* arm_ADD X10 X10 (rvalue (word 8)) *) - 0xd10004c6; (* arm_SUB X6 X6 (rvalue (word 1)) *) - 0xb5fffee6; (* arm_CBNZ X6 (word 2097116) *) - 0x93cfe9af; (* arm_EXTR X15 X13 X15 58 *) - 0xca1101ef; (* arm_EOR X15 X15 X17 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6aaf; (* arm_STR X15 X21 (Register_Offset X10) *) - 0xab13027f; (* arm_CMN X19 X19 *) - 0xf94002cf; (* arm_LDR X15 X22 (Immediate_Offset (word 0)) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xd10004a6; (* arm_SUB X6 X5 (rvalue (word 1)) *) - 0xb4000166; (* arm_CBZ X6 (word 44) *) - 0x9100214b; (* arm_ADD X11 X10 (rvalue (word 8)) *) - 0xf86b6acc; (* arm_LDR X12 X22 (Register_Offset X11) *) - 0x93cfe98f; (* arm_EXTR X15 X12 X15 58 *) - 0xca1301ef; (* arm_EOR X15 X15 X19 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6acf; (* arm_STR X15 X22 (Register_Offset X10) *) - 0xaa0c03ef; (* arm_MOV X15 X12 *) - 0x9100214a; (* arm_ADD X10 X10 (rvalue (word 8)) *) - 0xd10004c6; (* arm_SUB X6 X6 (rvalue (word 1)) *) - 0xb5fffee6; (* arm_CBNZ X6 (word 2097116) *) - 0x93cfe9cf; (* arm_EXTR X15 X14 X15 58 *) - 0xca1301ef; (* arm_EOR X15 X15 X19 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6acf; (* arm_STR X15 X22 (Register_Offset X10) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xab11023f; (* arm_CMN X17 X17 *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a788c; (* arm_LDR X12 X4 (Shiftreg_Offset X10 3) *) - 0x8a11016b; (* arm_AND X11 X11 X17 *) - 0xca11018c; (* arm_EOR X12 X12 X17 *) - 0xba0c016b; (* arm_ADCS X11 X11 X12 *) - 0xf82a788b; (* arm_STR X11 X4 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff0b; (* arm_CBNZ X11 (word 2097120) *) - 0xaa3303f3; (* arm_MVN X19 X19 *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xab13027f; (* arm_CMN X19 X19 *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x8a13016b; (* arm_AND X11 X11 X19 *) - 0xca13018c; (* arm_EOR X12 X12 X19 *) - 0xba0c016b; (* arm_ADCS X11 X11 X12 *) - 0xf82a782b; (* arm_STR X11 X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff0b; (* arm_CBNZ X11 (word 2097120) *) - 0xf100e842; (* arm_SUBS X2 X2 (rvalue (word 58)) *) - 0x54ffdd28; (* arm_BHI (word 2096036) *) + 0x910483e0; (* arm_ADD X0 SP (rvalue (word 288)) *) + 0x910383e1; (* arm_ADD X1 SP (rvalue (word 224)) *) + 0xaa0003f4; (* arm_MOV X20 X0 *) + 0x9280024a; (* arm_MOVN X10 (word 18) 0 *) + 0x9280000b; (* arm_MOVN X11 (word 0) 0 *) + 0xa9002fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&0))) *) + 0x92f0000c; (* arm_MOVN X12 (word 32768) 48 *) + 0xa90133eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&16))) *) + 0xa9400c22; (* arm_LDP X2 X3 X1 (Immediate_Offset (iword (&0))) *) + 0xa9411424; (* arm_LDP X4 X5 X1 (Immediate_Offset (iword (&16))) *) + 0xd2800267; (* arm_MOV X7 (rvalue (word 19)) *) + 0xd37ffca6; (* arm_LSR X6 X5 63 *) + 0x9b061ce6; (* arm_MADD X6 X7 X6 X7 *) + 0xab060042; (* arm_ADDS X2 X2 X6 *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0xba1f0084; (* arm_ADCS X4 X4 XZR *) + 0xb24100a5; (* arm_ORR X5 X5 (rvalue (word 9223372036854775808)) *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0x9a9f30e6; (* arm_CSEL X6 X7 XZR Condition_CC *) + 0xeb060042; (* arm_SUBS X2 X2 X6 *) + 0xfa1f0063; (* arm_SBCS X3 X3 XZR *) + 0xfa1f0084; (* arm_SBCS X4 X4 XZR *) + 0xda1f00a5; (* arm_SBC X5 X5 XZR *) + 0x9240f8a5; (* arm_AND X5 X5 (rvalue (word 9223372036854775807)) *) + 0xa9020fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&32))) *) + 0xa90317e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&48))) *) + 0xa9047fff; (* arm_STP XZR XZR SP (Immediate_Offset (iword (&64))) *) + 0xa9057fff; (* arm_STP XZR XZR SP (Immediate_Offset (iword (&80))) *) + 0xd284132a; (* arm_MOV X10 (rvalue (word 8345)) *) + 0xf2aea04a; (* arm_MOVK X10 (word 29954) 16 *) + 0xf2d3c46a; (* arm_MOVK X10 (word 40483) 32 *) + 0xf2f41f2a; (* arm_MOVK X10 (word 41209) 48 *) + 0xd284b2ab; (* arm_MOV X11 (rvalue (word 9621)) *) + 0xf2a3a26b; (* arm_MOVK X11 (word 7443) 16 *) + 0xf2d1e7eb; (* arm_MOVK X11 (word 36671) 32 *) + 0xf2f518cb; (* arm_MOVK X11 (word 43206) 48 *) + 0xd28a484c; (* arm_MOV X12 (rvalue (word 21058)) *) + 0xf2a0b58c; (* arm_MOVK X12 (word 1452) 16 *) + 0xf2d1270c; (* arm_MOVK X12 (word 35128) 32 *) + 0xf2ed8d8c; (* arm_MOVK X12 (word 27756) 48 *) + 0xd280c2ad; (* arm_MOV X13 (rvalue (word 1557)) *) + 0xf2a82eed; (* arm_MOVK X13 (word 16759) 16 *) + 0xf2c1164d; (* arm_MOVK X13 (word 2226) 32 *) + 0xf2e4ecad; (* arm_MOVK X13 (word 10085) 48 *) + 0xa9062fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&96))) *) + 0xa90737ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&112))) *) + 0xd2800155; (* arm_MOV X21 (rvalue (word 10)) *) + 0xd2800036; (* arm_MOV X22 (rvalue (word 1)) *) + 0x1400010b; (* arm_B (word 1068) *) + 0xeb1f015f; (* arm_CMP X10 XZR *) + 0xda9f53ee; (* arm_CSETM X14 Condition_MI *) + 0xda8a554a; (* arm_CNEG X10 X10 Condition_MI *) + 0xeb1f017f; (* arm_CMP X11 XZR *) + 0xda9f53ef; (* arm_CSETM X15 Condition_MI *) + 0xda8b556b; (* arm_CNEG X11 X11 Condition_MI *) + 0xeb1f019f; (* arm_CMP X12 XZR *) + 0xda9f53f0; (* arm_CSETM X16 Condition_MI *) + 0xda8c558c; (* arm_CNEG X12 X12 Condition_MI *) + 0xeb1f01bf; (* arm_CMP X13 XZR *) + 0xda9f53f1; (* arm_CSETM X17 Condition_MI *) + 0xda8d55ad; (* arm_CNEG X13 X13 Condition_MI *) + 0x8a0e0140; (* arm_AND X0 X10 X14 *) + 0x8a0f0161; (* arm_AND X1 X11 X15 *) + 0x8b010009; (* arm_ADD X9 X0 X1 *) + 0x8a100180; (* arm_AND X0 X12 X16 *) + 0x8a1101a1; (* arm_AND X1 X13 X17 *) + 0x8b010013; (* arm_ADD X19 X0 X1 *) + 0xf94003e7; (* arm_LDR X7 SP (Immediate_Offset (word 0)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94013e8; (* arm_LDR X8 SP (Immediate_Offset (word 32)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000265; (* arm_ADDS X5 X19 X0 *) + 0x9a0103e3; (* arm_ADC X3 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf94007e7; (* arm_LDR X7 SP (Immediate_Offset (word 8)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94017e8; (* arm_LDR X8 SP (Immediate_Offset (word 40)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0x93c4ec44; (* arm_EXTR X4 X2 X4 59 *) + 0xf90003e4; (* arm_STR X4 SP (Immediate_Offset (word 0)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a0103e4; (* arm_ADC X4 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a010084; (* arm_ADC X4 X4 X1 *) + 0x93c5ec65; (* arm_EXTR X5 X3 X5 59 *) + 0xf90013e5; (* arm_STR X5 SP (Immediate_Offset (word 32)) *) + 0xf9400be7; (* arm_LDR X7 SP (Immediate_Offset (word 16)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9401be8; (* arm_LDR X8 SP (Immediate_Offset (word 48)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c2ecc2; (* arm_EXTR X2 X6 X2 59 *) + 0xf90007e2; (* arm_STR X2 SP (Immediate_Offset (word 8)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0x93c3ec83; (* arm_EXTR X3 X4 X3 59 *) + 0xf90017e3; (* arm_STR X3 SP (Immediate_Offset (word 40)) *) + 0xf9400fe7; (* arm_LDR X7 SP (Immediate_Offset (word 24)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x937ffc23; (* arm_ASR X3 X1 63 *) + 0x8a0a0063; (* arm_AND X3 X3 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9401fe8; (* arm_LDR X8 SP (Immediate_Offset (word 56)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0x8a0b0000; (* arm_AND X0 X0 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c6eca6; (* arm_EXTR X6 X5 X6 59 *) + 0xf9000be6; (* arm_STR X6 SP (Immediate_Offset (word 16)) *) + 0x93c5ec65; (* arm_EXTR X5 X3 X5 59 *) + 0xf9000fe5; (* arm_STR X5 SP (Immediate_Offset (word 24)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x937ffc25; (* arm_ASR X5 X1 63 *) + 0x8a0c00a5; (* arm_AND X5 X5 X12 *) + 0xcb0503e5; (* arm_NEG X5 X5 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0x8a0d0000; (* arm_AND X0 X0 X13 *) + 0xcb0000a5; (* arm_SUB X5 X5 X0 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c4ec44; (* arm_EXTR X4 X2 X4 59 *) + 0xf9001be4; (* arm_STR X4 SP (Immediate_Offset (word 48)) *) + 0x93c2eca2; (* arm_EXTR X2 X5 X2 59 *) + 0xf9001fe2; (* arm_STR X2 SP (Immediate_Offset (word 56)) *) + 0xf94023e7; (* arm_LDR X7 SP (Immediate_Offset (word 64)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94033e8; (* arm_LDR X8 SP (Immediate_Offset (word 96)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf90023e4; (* arm_STR X4 SP (Immediate_Offset (word 64)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000265; (* arm_ADDS X5 X19 X0 *) + 0x9a0103e3; (* arm_ADC X3 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0xf90033e5; (* arm_STR X5 SP (Immediate_Offset (word 96)) *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf94027e7; (* arm_LDR X7 SP (Immediate_Offset (word 72)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94037e8; (* arm_LDR X8 SP (Immediate_Offset (word 104)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0xf90027e2; (* arm_STR X2 SP (Immediate_Offset (word 72)) *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a0103e4; (* arm_ADC X4 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0xf90037e3; (* arm_STR X3 SP (Immediate_Offset (word 104)) *) + 0x9a010084; (* arm_ADC X4 X4 X1 *) + 0xf9402be7; (* arm_LDR X7 SP (Immediate_Offset (word 80)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9403be8; (* arm_LDR X8 SP (Immediate_Offset (word 112)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0xf9002be6; (* arm_STR X6 SP (Immediate_Offset (word 80)) *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf9003be4; (* arm_STR X4 SP (Immediate_Offset (word 112)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xf9402fe7; (* arm_LDR X7 SP (Immediate_Offset (word 88)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x8a0a01c3; (* arm_AND X3 X14 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9403fe8; (* arm_LDR X8 SP (Immediate_Offset (word 120)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x8a0b01e0; (* arm_AND X0 X15 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c5fc66; (* arm_EXTR X6 X3 X5 63 *) + 0xa94407e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0x8b83fcc6; (* arm_ADD X6 X6 (Shiftedreg X3 ASR 63) *) + 0xd2800263; (* arm_MOV X3 (rvalue (word 19)) *) + 0x9b037cc4; (* arm_MUL X4 X6 X3 *) + 0x8b06fca5; (* arm_ADD X5 X5 (Shiftedreg X6 LSL 63) *) + 0x9b437cc3; (* arm_SMULH X3 X6 X3 *) + 0xf9402be6; (* arm_LDR X6 SP (Immediate_Offset (word 80)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba030021; (* arm_ADCS X1 X1 X3 *) + 0x937ffc63; (* arm_ASR X3 X3 63 *) + 0xba0300c6; (* arm_ADCS X6 X6 X3 *) + 0x9a0300a5; (* arm_ADC X5 X5 X3 *) + 0xa90407e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xa90517e6; (* arm_STP X6 X5 SP (Immediate_Offset (iword (&80))) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x8a0c0205; (* arm_AND X5 X16 X12 *) + 0xcb0503e5; (* arm_NEG X5 X5 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x8a0d0220; (* arm_AND X0 X17 X13 *) + 0xcb0000a5; (* arm_SUB X5 X5 X0 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c2fca6; (* arm_EXTR X6 X5 X2 63 *) + 0xa94607e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&96))) *) + 0x8b85fcc6; (* arm_ADD X6 X6 (Shiftedreg X5 ASR 63) *) + 0xd2800265; (* arm_MOV X5 (rvalue (word 19)) *) + 0x9b057cc4; (* arm_MUL X4 X6 X5 *) + 0x8b06fc42; (* arm_ADD X2 X2 (Shiftedreg X6 LSL 63) *) + 0x9b457cc5; (* arm_SMULH X5 X6 X5 *) + 0xf9403be3; (* arm_LDR X3 SP (Immediate_Offset (word 112)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba050021; (* arm_ADCS X1 X1 X5 *) + 0x937ffca5; (* arm_ASR X5 X5 63 *) + 0xba050063; (* arm_ADCS X3 X3 X5 *) + 0x9a050042; (* arm_ADC X2 X2 X5 *) + 0xa90607e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&96))) *) + 0xa9070be3; (* arm_STP X3 X2 SP (Immediate_Offset (iword (&112))) *) + 0xaa1603e1; (* arm_MOV X1 X22 *) + 0xf94003e2; (* arm_LDR X2 SP (Immediate_Offset (word 0)) *) + 0xf94013e3; (* arm_LDR X3 SP (Immediate_Offset (word 32)) *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x91440088; (* arm_ADD X8 X4 (rvalue (word 1048576)) *) + 0x9355a508; (* arm_SBFM X8 X8 21 41 *) + 0xd2a0020b; (* arm_MOVZ X11 (word 16) 16 *) + 0x8b0b556b; (* arm_ADD X11 X11 (Shiftedreg X11 LSL 21) *) + 0x8b0b0089; (* arm_ADD X9 X4 X11 *) + 0x936afd29; (* arm_ASR X9 X9 42 *) + 0x914400aa; (* arm_ADD X10 X5 (rvalue (word 1048576)) *) + 0x9355a54a; (* arm_SBFM X10 X10 21 41 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0x936afd6b; (* arm_ASR X11 X11 42 *) + 0x9b027d06; (* arm_MUL X6 X8 X2 *) + 0x9b037d27; (* arm_MUL X7 X9 X3 *) + 0x9b027d42; (* arm_MUL X2 X10 X2 *) + 0x9b037d63; (* arm_MUL X3 X11 X3 *) + 0x8b0700c4; (* arm_ADD X4 X6 X7 *) + 0x8b030045; (* arm_ADD X5 X2 X3 *) + 0x9354fc82; (* arm_ASR X2 X4 20 *) + 0x9354fca3; (* arm_ASR X3 X5 20 *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9144008c; (* arm_ADD X12 X4 (rvalue (word 1048576)) *) + 0x9355a58c; (* arm_SBFM X12 X12 21 41 *) + 0xd2a0020f; (* arm_MOVZ X15 (word 16) 16 *) + 0x8b0f55ef; (* arm_ADD X15 X15 (Shiftedreg X15 LSL 21) *) + 0x8b0f008d; (* arm_ADD X13 X4 X15 *) + 0x936afdad; (* arm_ASR X13 X13 42 *) + 0x914400ae; (* arm_ADD X14 X5 (rvalue (word 1048576)) *) + 0x9355a5ce; (* arm_SBFM X14 X14 21 41 *) + 0x8b0f00af; (* arm_ADD X15 X5 X15 *) + 0x936afdef; (* arm_ASR X15 X15 42 *) + 0x9b027d86; (* arm_MUL X6 X12 X2 *) + 0x9b037da7; (* arm_MUL X7 X13 X3 *) + 0x9b027dc2; (* arm_MUL X2 X14 X2 *) + 0x9b037de3; (* arm_MUL X3 X15 X3 *) + 0x8b0700c4; (* arm_ADD X4 X6 X7 *) + 0x8b030045; (* arm_ADD X5 X2 X3 *) + 0x9354fc82; (* arm_ASR X2 X4 20 *) + 0x9354fca3; (* arm_ASR X3 X5 20 *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9b087d82; (* arm_MUL X2 X12 X8 *) + 0x9b097d83; (* arm_MUL X3 X12 X9 *) + 0x9b087dc6; (* arm_MUL X6 X14 X8 *) + 0x9b097dc7; (* arm_MUL X7 X14 X9 *) + 0x9b0a09a8; (* arm_MADD X8 X13 X10 X2 *) + 0x9b0b0da9; (* arm_MADD X9 X13 X11 X3 *) + 0x9b0a19f0; (* arm_MADD X16 X15 X10 X6 *) + 0x9b0b1df1; (* arm_MADD X17 X15 X11 X7 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9144008c; (* arm_ADD X12 X4 (rvalue (word 1048576)) *) + 0x9356a98c; (* arm_SBFM X12 X12 22 42 *) + 0xd2a0020f; (* arm_MOVZ X15 (word 16) 16 *) + 0x8b0f55ef; (* arm_ADD X15 X15 (Shiftedreg X15 LSL 21) *) + 0x8b0f008d; (* arm_ADD X13 X4 X15 *) + 0x936bfdad; (* arm_ASR X13 X13 43 *) + 0x914400ae; (* arm_ADD X14 X5 (rvalue (word 1048576)) *) + 0x9356a9ce; (* arm_SBFM X14 X14 22 42 *) + 0x8b0f00af; (* arm_ADD X15 X5 X15 *) + 0x936bfdef; (* arm_ASR X15 X15 43 *) + 0x9b08fd82; (* arm_MNEG X2 X12 X8 *) + 0x9b09fd83; (* arm_MNEG X3 X12 X9 *) + 0x9b08fdc4; (* arm_MNEG X4 X14 X8 *) + 0x9b09fdc5; (* arm_MNEG X5 X14 X9 *) + 0x9b1089aa; (* arm_MSUB X10 X13 X16 X2 *) + 0x9b118dab; (* arm_MSUB X11 X13 X17 X3 *) + 0x9b1091ec; (* arm_MSUB X12 X15 X16 X4 *) + 0x9b1195ed; (* arm_MSUB X13 X15 X17 X5 *) + 0xaa0103f6; (* arm_MOV X22 X1 *) + 0xf10006b5; (* arm_SUBS X21 X21 (rvalue (word 1)) *) + 0x54ff9281; (* arm_BNE (word 2093648) *) + 0xf94003e0; (* arm_LDR X0 SP (Immediate_Offset (word 0)) *) + 0xf94013e1; (* arm_LDR X1 SP (Immediate_Offset (word 32)) *) + 0x9b0a7c00; (* arm_MUL X0 X0 X10 *) + 0x9b0b0021; (* arm_MADD X1 X1 X11 X0 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0xeb1f015f; (* arm_CMP X10 XZR *) + 0xda9f53ee; (* arm_CSETM X14 Condition_MI *) + 0xda8a554a; (* arm_CNEG X10 X10 Condition_MI *) + 0xca0001ce; (* arm_EOR X14 X14 X0 *) + 0xeb1f017f; (* arm_CMP X11 XZR *) + 0xda9f53ef; (* arm_CSETM X15 Condition_MI *) + 0xda8b556b; (* arm_CNEG X11 X11 Condition_MI *) + 0xca0001ef; (* arm_EOR X15 X15 X0 *) + 0xeb1f019f; (* arm_CMP X12 XZR *) + 0xda9f53f0; (* arm_CSETM X16 Condition_MI *) + 0xda8c558c; (* arm_CNEG X12 X12 Condition_MI *) + 0xca000210; (* arm_EOR X16 X16 X0 *) + 0xeb1f01bf; (* arm_CMP X13 XZR *) + 0xda9f53f1; (* arm_CSETM X17 Condition_MI *) + 0xda8d55ad; (* arm_CNEG X13 X13 Condition_MI *) + 0xca000231; (* arm_EOR X17 X17 X0 *) + 0x8a0e0140; (* arm_AND X0 X10 X14 *) + 0x8a0f0161; (* arm_AND X1 X11 X15 *) + 0x8b010009; (* arm_ADD X9 X0 X1 *) + 0xf94023e7; (* arm_LDR X7 SP (Immediate_Offset (word 64)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94033e8; (* arm_LDR X8 SP (Immediate_Offset (word 96)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf90023e4; (* arm_STR X4 SP (Immediate_Offset (word 64)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xf94027e7; (* arm_LDR X7 SP (Immediate_Offset (word 72)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94037e8; (* arm_LDR X8 SP (Immediate_Offset (word 104)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0xf90027e2; (* arm_STR X2 SP (Immediate_Offset (word 72)) *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0xf9402be7; (* arm_LDR X7 SP (Immediate_Offset (word 80)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9403be8; (* arm_LDR X8 SP (Immediate_Offset (word 112)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0xf9002be6; (* arm_STR X6 SP (Immediate_Offset (word 80)) *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xf9402fe7; (* arm_LDR X7 SP (Immediate_Offset (word 88)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x8a0a01c3; (* arm_AND X3 X14 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9403fe8; (* arm_LDR X8 SP (Immediate_Offset (word 120)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x8a0b01e0; (* arm_AND X0 X15 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c5fc66; (* arm_EXTR X6 X3 X5 63 *) + 0xa94407e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xea03007f; (* arm_TST X3 X3 *) + 0x9a8644c6; (* arm_CINC X6 X6 Condition_PL *) + 0xd2800263; (* arm_MOV X3 (rvalue (word 19)) *) + 0x9b037cc4; (* arm_MUL X4 X6 X3 *) + 0x8b06fca5; (* arm_ADD X5 X5 (Shiftedreg X6 LSL 63) *) + 0x9b437cc6; (* arm_SMULH X6 X6 X3 *) + 0xf9402be2; (* arm_LDR X2 SP (Immediate_Offset (word 80)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba060021; (* arm_ADCS X1 X1 X6 *) + 0x937ffcc6; (* arm_ASR X6 X6 63 *) + 0xba060042; (* arm_ADCS X2 X2 X6 *) + 0xba0600a5; (* arm_ADCS X5 X5 X6 *) + 0x9a9f4063; (* arm_CSEL X3 X3 XZR Condition_MI *) + 0xeb030000; (* arm_SUBS X0 X0 X3 *) + 0xfa1f0021; (* arm_SBCS X1 X1 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f00a5; (* arm_SBC X5 X5 XZR *) + 0x9240f8a5; (* arm_AND X5 X5 (rvalue (word 9223372036854775807)) *) + 0xaa1403e4; (* arm_MOV X4 X20 *) + 0xa9000480; (* arm_STP X0 X1 X4 (Immediate_Offset (iword (&0))) *) + 0xa9011482; (* arm_STP X2 X5 X4 (Immediate_Offset (iword (&16))) *) 0xaa1903f6; (* arm_MOV X22 X25 *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x910303f8; (* arm_ADD X24 SP (rvalue (word 192)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x910483f8; (* arm_ADD X24 SP (rvalue (word 288)) *) 0xa94012e3; (* arm_LDP X3 X4 X23 (Immediate_Offset (iword (&0))) *) 0xa9401b05; (* arm_LDP X5 X6 X24 (Immediate_Offset (iword (&0))) *) 0x9ba57c67; (* arm_UMULL X7 W3 W5 *) @@ -1705,8 +2419,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0xa90022c7; (* arm_STP X7 X8 X22 (Immediate_Offset (iword (&0))) *) 0xa9012ac9; (* arm_STP X9 X10 X22 (Immediate_Offset (iword (&16))) *) 0x91008336; (* arm_ADD X22 X25 (rvalue (word 32)) *) - 0x910183f7; (* arm_ADD X23 SP (rvalue (word 96)) *) - 0x910303f8; (* arm_ADD X24 SP (rvalue (word 192)) *) + 0x910303f7; (* arm_ADD X23 SP (rvalue (word 192)) *) + 0x910483f8; (* arm_ADD X24 SP (rvalue (word 288)) *) 0xa94012e3; (* arm_LDP X3 X4 X23 (Immediate_Offset (iword (&0))) *) 0xa9401b05; (* arm_LDP X5 X6 X24 (Immediate_Offset (iword (&0))) *) 0x9ba57c67; (* arm_UMULL X7 W3 W5 *) @@ -7360,55 +8074,53 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x910303ff; (* arm_ADD SP SP (rvalue (word 192)) *) 0xd65f03c0 (* arm_RET X30 *) ] -[237; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 127; 62; 145; 64; 215; 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; - 253; 9; 138; 143; 104; 52; 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; - 68; 133; 59; 140; 245; 198; 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; - 207; 194; 66; 61; 100; 152; 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; - 104; 170; 122; 135; 5; 18; 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; - 140; 89; 67; 221; 203; 125; 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; - 168; 213; 180; 66; 96; 165; 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; - 170; 55; 110; 177; 107; 35; 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; - 215; 113; 60; 147; 252; 231; 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; - 2; 7; 214; 225; 101; 154; 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; - 155; 165; 179; 168; 250; 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; - 61; 11; 132; 160; 15; 80; 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; - 252; 164; 232; 31; 97; 86; 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; - 75; 33; 26; 243; 49; 129; 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; - 76; 168; 176; 37; 175; 138; 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; - 2; 80; 27; 193; 244; 248; 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; - 147; 174; 20; 98; 218; 53; 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; - 112; 209; 198; 180; 185; 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; - 149; 169; 250; 96; 86; 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; - 195; 154; 164; 69; 116; 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; - 56; 37; 253; 125; 244; 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; - 39; 135; 229; 33; 3; 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; - 193; 92; 123; 69; 57; 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; - 85; 99; 191; 12; 157; 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; - 39; 75; 209; 20; 0; 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; - 235; 115; 126; 74; 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; - 195; 72; 80; 141; 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; - 204; 69; 41; 133; 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; - 8; 14; 39; 45; 167; 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; - 170; 67; 164; 140; 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; - 87; 185; 83; 69; 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; - 49; 113; 21; 119; 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; - 167; 89; 218; 104; 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; - 75; 234; 2; 103; 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; - 59; 8; 75; 162; 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; - 170; 154; 44; 111; 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; - 79; 118; 234; 157; 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; - 208; 92; 26; 107; 210; 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; - 82; 178; 113; 126; 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; - 109; 131; 241; 154; 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; - 156; 82; 167; 144; 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; - 167; 226; 249; 88; 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; - 39; 44; 195; 1; 14; 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; - 44; 112; 136; 226; 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; - 47; 229; 188; 97; 96; 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; - 215; 167; 204; 139; 120; 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; - 149; 78; 204; 46; 92; 124; 144; 38];; +[62; 145; 64; 215; 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; + 138; 143; 104; 52; 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; + 59; 140; 245; 198; 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; + 66; 61; 100; 152; 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; + 122; 135; 5; 18; 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; + 67; 221; 203; 125; 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; + 180; 66; 96; 165; 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; + 110; 177; 107; 35; 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; + 60; 147; 252; 231; 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; + 225; 101; 154; 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; + 179; 168; 250; 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; + 132; 160; 15; 80; 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; 252; 164; + 232; 31; 97; 86; 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; + 243; 49; 129; 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; + 37; 175; 138; 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; + 244; 248; 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; + 98; 218; 53; 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; + 180; 185; 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; + 96; 86; 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; + 69; 116; 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; + 125; 244; 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; + 33; 3; 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; + 69; 57; 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; + 12; 157; 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; + 20; 0; 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; + 126; 74; 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; + 80; 141; 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; + 41; 133; 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; + 45; 167; 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; + 164; 140; 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; + 83; 69; 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; + 21; 119; 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; + 218; 104; 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; + 2; 103; 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; + 162; 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; + 111; 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; + 157; 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; + 210; 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; + 126; 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; + 154; 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; + 144; 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; + 88; 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; + 14; 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; + 226; 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; + 97; 96; 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; + 139; 120; 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; + 92; 124; 144; 38];; let EDWARDS25519_SCALARMULDOUBLE_EXEC = ARM_MK_EXEC_RULE edwards25519_scalarmuldouble_mc;; @@ -7604,24 +8316,23 @@ let GE25519_GROUPER = (MATCH_MP pth (CONJ th1 th2));; let BYTES_LOADED_DATA = prove - (`bytes_loaded s (word (pc + 0x7278)) edwards25519_scalarmuldouble_data <=> - read (memory :> bytes(word (pc + 0x7278),800)) s = + (`bytes_loaded s (word (pc + 0x7da0)) edwards25519_scalarmuldouble_data <=> + read (memory :> bytes(word (pc + 0x7da0),768)) s = num_of_bytelist edwards25519_scalarmuldouble_data`, REWRITE_TAC[bytes_loaded; READ_BYTELIST_EQ_BYTES; CONV_RULE (RAND_CONV LENGTH_CONV) (AP_TERM `LENGTH:byte list->num` edwards25519_scalarmuldouble_data)]);; let EDWARDS25519DOUBLEBASE_TABLE_LEMMA = prove - (`read (memory :> bytes(word (pc + 0x7278),800)) s = + (`read (memory :> bytes(word (pc + 0x7da0),768)) s = num_of_bytelist edwards25519_scalarmuldouble_data - ==> bignum_from_memory(word(pc + 0x7278),4) s = p_25519 /\ - !i. i < 8 + ==> !i. i < 8 ==> edwards25519_epprojective (group_pow edwards25519_group E_25519 (i + 1)) - (bignum_from_memory(word(pc + 0x7298 + 96 * i),4) s, - bignum_from_memory(word(pc + 0x7298 + 96 * i + 32),4) s, - bignum_from_memory(word(pc + 0x7298 + 96 * i + 64),4) s) /\ - ~(bignum_from_memory(word(pc + 0x7298 + 96 * i + 64),4) s = + (bignum_from_memory(word(pc + 0x7da0 + 96 * i),4) s, + bignum_from_memory(word(pc + 0x7da0 + 96 * i + 32),4) s, + bignum_from_memory(word(pc + 0x7da0 + 96 * i + 64),4) s) /\ + ~(bignum_from_memory(word(pc + 0x7da0 + 96 * i + 64),4) s = 0)`, let GE25519_POWERS = end_itlist CONJ @@ -7629,7 +8340,7 @@ let EDWARDS25519DOUBLEBASE_TABLE_LEMMA = prove [GE25519_POW_1]) in REWRITE_TAC[GSYM BYTES_LOADED_DATA; edwards25519_scalarmuldouble_data] THEN CONV_TAC(LAND_CONV DATA64_CONV) THEN STRIP_TAC THEN - CONV_TAC(RAND_CONV EXPAND_CASES_CONV) THEN + CONV_TAC EXPAND_CASES_CONV THEN CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[WORD_ADD] THEN CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN REWRITE_TAC[GSYM WORD_ADD] THEN ASM_REWRITE_TAC[] THEN @@ -7759,13 +8470,13 @@ let lvs = "resy",[`X25`;`32`]; "scalar",[`SP`;`0`]; "bscalar",[`SP`;`32`]; - "acc",[`SP`;`64`]; - "acc_x",[`SP`;`64`]; - "acc_y",[`SP`;`96`]; - "acc_z",[`SP`;`128`]; - "acc_w",[`SP`;`160`]; - "tabent",[`SP`;`192`]; - "btabent",[`SP`;`320`]; + "btabent",[`SP`;`64`]; + "acc",[`SP`;`160`]; + "acc_x",[`SP`;`160`]; + "acc_y",[`SP`;`196`]; + "acc_z",[`SP`;`228`]; + "acc_w",[`SP`;`260`]; + "tabent",[`SP`;`288`]; "tab",[`SP`;`416`]; (*** These are local for the subroutines ***) @@ -7801,7 +8512,7 @@ let LOCAL_MUL_P25519_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x7598) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x80a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read PC s = pcin /\ @@ -8259,7 +8970,7 @@ let LOCAL_MUL_4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x7598) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x80a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read PC s = pcin /\ @@ -8692,7 +9403,7 @@ let LOCAL_SQR_4_TAC = read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x7598) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x80a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read PC s = pcin /\ @@ -9044,7 +9755,7 @@ let LOCAL_ADD_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x7598) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x80a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read PC s = pcin /\ @@ -9117,7 +9828,7 @@ let LOCAL_DOUBLE_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x7598) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x80a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read PC s = pcin /\ @@ -9189,7 +9900,7 @@ let LOCAL_SUB_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x7598) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x80a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read PC s = pcin /\ @@ -9263,20 +9974,15 @@ let LOCAL_SUB_TWICE4_TAC = (* ------------------------------------------------------------------------- *) let LOCAL_MODINV_TAC = - let cth = - (GEN_REWRITE_CONV RAND_CONV [bignum_modinv_mc] THENC TRIM_LIST_CONV) - `TRIM_LIST (12,12) bignum_modinv_mc` - and th = CONV_RULE (DEPTH_CONV WORD_NUM_RED_CONV) - (SPEC `word 4:int64` CORE_MODINV_CORRECT) in ARM_SUBROUTINE_SIM_TAC - (edwards25519_scalarmuldouble_mc,EDWARDS25519_SCALARMULDOUBLE_EXEC, - 0x126c,cth,th) - [`read X1 s`; `read X2 s`; - `read (memory :> bytes(read X2 s,8 * 4)) s`; - `read X3 s`; - `read (memory :> bytes(read X3 s,8 * 4)) s`; - `read X4 s`; - `pc + 0x126c`];; + (edwards25519_scalarmuldouble_mc, + EDWARDS25519_SCALARMULDOUBLE_EXEC,0x1260, + (GEN_REWRITE_CONV RAND_CONV [bignum_inv_p25519_mc] THENC TRIM_LIST_CONV) + `TRIM_LIST (12,16) bignum_inv_p25519_mc`, + CORE_INV_P25519_CORRECT) + [`read X0 s`; `read X1 s`; + `read (memory :> bytes(read X1 s,8 * 4)) s`; + `pc + 0x1260`; `word_add stackpointer (word 192):int64`];; (* ------------------------------------------------------------------------- *) (* Embedded subroutine correctness. *) @@ -9286,17 +9992,17 @@ let LOCAL_EPDOUBLE_CORRECT = time prove (`!p3 p1 T1 pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,160)) - [(word pc,0x7598); (p3,128); (p1,96)] /\ - nonoverlapping (p3,128) (word pc,0x7598) + [(word pc,0x80a0); (p3,128); (p1,96)] /\ + nonoverlapping (p3,128) (word pc,0x80a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ - read PC s = word(pc + 0x1d14) /\ + read PC s = word(pc + 0x283c) /\ read SP s = stackpointer /\ read X22 s = p3 /\ read X23 s = p1 /\ bignum_triple_from_memory(p1,4) s = T1) - (\s. read PC s = word (pc + 0x316c) /\ + (\s. read PC s = word (pc + 0x3c94) /\ !P1. P1 IN group_carrier edwards25519_group /\ edwards25519_projective2 P1 T1 ==> edwards25519_exprojective2 @@ -9393,17 +10099,17 @@ let LOCAL_PDOUBLE_CORRECT = time prove (`!p3 p1 T1 pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,160)) - [(word pc,0x7598); (p3,96); (p1,96)] /\ - nonoverlapping (p3,96) (word pc,0x7598) + [(word pc,0x80a0); (p3,96); (p1,96)] /\ + nonoverlapping (p3,96) (word pc,0x80a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ - read PC s = word(pc + 0x3178) /\ + read PC s = word(pc + 0x3ca0) /\ read SP s = stackpointer /\ read X22 s = p3 /\ read X23 s = p1 /\ bignum_triple_from_memory(p1,4) s = T1) - (\s. read PC s = word (pc + 0x4320) /\ + (\s. read PC s = word (pc + 0x4e48) /\ !P1. P1 IN group_carrier edwards25519_group /\ edwards25519_projective2 P1 T1 ==> edwards25519_projective2 @@ -9503,19 +10209,19 @@ let LOCAL_EPADD_CORRECT = time prove (`!p3 p1 Q1 p2 Q2 pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,192)) - [(word pc,0x7598); (p3,128); (p1,128); (p2,128)] /\ - nonoverlapping (p3,128) (word pc,0x7598) + [(word pc,0x80a0); (p3,128); (p1,128); (p2,128)] /\ + nonoverlapping (p3,128) (word pc,0x80a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ - read PC s = word(pc + 0x432c) /\ + read PC s = word(pc + 0x4e54) /\ read SP s = stackpointer /\ read X22 s = p3 /\ read X23 s = p1 /\ read X24 s = p2 /\ bignum_quadruple_from_memory(p1,4) s = Q1 /\ bignum_quadruple_from_memory(p2,4) s = Q2) - (\s. read PC s = word (pc + 0x5ddc) /\ + (\s. read PC s = word (pc + 0x6904) /\ !P1 P2. P1 IN group_carrier edwards25519_group /\ P2 IN group_carrier edwards25519_group /\ edwards25519_exprojective2 P1 Q1 /\ @@ -9651,19 +10357,19 @@ let LOCAL_PEPADD_CORRECT = time prove (`!p3 p1 Q1 p2 T2 pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,192)) - [(word pc,0x7598); (p3,128); (p1,128); (p2,96)] /\ - nonoverlapping (p3,128) (word pc,0x7598) + [(word pc,0x80a0); (p3,128); (p1,128); (p2,96)] /\ + nonoverlapping (p3,128) (word pc,0x80a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ - read PC s = word(pc + 0x5de8) /\ + read PC s = word(pc + 0x6910) /\ read SP s = stackpointer /\ read X22 s = p3 /\ read X23 s = p1 /\ read X24 s = p2 /\ bignum_quadruple_from_memory(p1,4) s = Q1 /\ bignum_triple_from_memory(p2,4) s = T2) - (\s. read PC s = word (pc + 0x7270) /\ + (\s. read PC s = word (pc + 0x7d98) /\ !P1 P2. P1 IN group_carrier edwards25519_group /\ P2 IN group_carrier edwards25519_group /\ edwards25519_exprojective2w P1 Q1 /\ @@ -9793,8 +10499,8 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove (`!res scalar point bscalar n xy m pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,1632)) - [(word pc,0x7598); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ - nonoverlapping (res,64) (word pc,0x7598) + [(word pc,0x80a0); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ + nonoverlapping (res,64) (word pc,0x80a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) (APPEND edwards25519_scalarmuldouble_mc @@ -9805,7 +10511,7 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove bignum_from_memory (scalar,4) s = n /\ bignum_pair_from_memory (point,4) s = xy /\ bignum_from_memory (bscalar,4) s = m) - (\s. read PC s = word (pc + 0x1cf8) /\ + (\s. read PC s = word (pc + 0x2820) /\ !P. P IN group_carrier edwards25519_group /\ paired (modular_decode (256,p_25519)) xy = P ==> bignum_pair_from_memory(res,4) s = @@ -9887,7 +10593,7 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ENSURES_WHILE_DOWN_TAC `63` `pc + 0xac8` `pc + 0x1254` `\i s. - read (memory :> bytes(word(pc + 0x7278),800)) s = + read (memory :> bytes(word(pc + 0x7da0),768)) s = num_of_bytelist edwards25519_scalarmuldouble_data /\ read SP s = word_add stackpointer (word 192) /\ read X25 s = res /\ @@ -9908,7 +10614,7 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove (group_zpow edwards25519_group E_25519 (&(m DIV 2 EXP (4 * i)) - &(recoder DIV 2 EXP (4 * i))))) (bignum_quadruple_from_memory - (word_add stackpointer (word 256),4) s)` THEN + (word_add stackpointer (word 352),4) s)` THEN REPEAT CONJ_TAC THENL [ARITH_TAC; @@ -10325,11 +11031,11 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove (*** Address the precomputed table separately ***) - FIRST_ASSUM(MP_TAC o CONJUNCT2 o + FIRST_ASSUM(MP_TAC o MATCH_MP EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[ARITH_RULE `pc + 0x7298 + x = (pc + 0x7298) + x`] THEN + REWRITE_TAC[ARITH_RULE `pc + 0x7da0 + x = (pc + 0x7da0) + x`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `wpc:int64 = word(pc + 0x7298)` THEN + ABBREV_TAC `wpc:int64 = word(pc + 0x7da0)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD_0] THEN @@ -10346,9 +11052,9 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ABBREV_TAC `ix = m DIV 2 EXP 252` THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (128--304) THEN MAP_EVERY ABBREV_TAC - [`XPY = read(memory :> bytes(word_add stackpointer (word 512),8 * 4)) s304`; - `YMX = read(memory :> bytes(word_add stackpointer (word 544),8 * 4)) s304`; - `KXY = read(memory :> bytes(word_add stackpointer (word 576),8 * 4)) s304`] + [`XPY = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s304`; + `YMX = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s304`; + `KXY = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s304`] THEN SUBGOAL_THEN `edwards25519_epprojective (group_pow edwards25519_group E_25519 ix) @@ -10368,7 +11074,8 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove REWRITE_TAC[bignum_of_wordlist; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN REWRITE_TAC[d_25519; p_25519] THEN CONV_TAC INT_REDUCE_CONV; - REPEAT(FIRST_X_ASSUM(K ALL_TAC o check(free_in `wpc:int64` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check(free_in `word_add (wpc:int64)` o concl))) THEN UNDISCH_THEN `m DIV 2 EXP 252 = ix` (SUBST_ALL_TAC o SYM) THEN DISCARD_MATCHING_ASSUMPTIONS [`read c s = if x then y else z`] THEN CLARIFY_TAC] THEN @@ -10394,10 +11101,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove CLARIFY_TAC THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (308--538) THEN MAP_EVERY ABBREV_TAC - [`Xt = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s538`; - `Yt = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s538`; - `Zt = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s538`; - `Wt = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s538`] + [`Xt = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s538`; + `Yt = read(memory :> bytes(word_add stackpointer (word 512),8 * 4)) s538`; + `Zt = read(memory :> bytes(word_add stackpointer (word 544),8 * 4)) s538`; + `Wt = read(memory :> bytes(word_add stackpointer (word 576),8 * 4)) s538`] THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -10501,22 +11208,19 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o MATCH_MP (MESON[] `(!x. P x ==> Q x /\ R x) ==> (!x. P x ==> R x)`)) THEN MAP_EVERY ABBREV_TAC - [`X = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s0`; - `Y = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s0`; - `Z = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s0`; - `W = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s0`] + [`X = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s0`; + `Y = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s0`; + `Z = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s0`; + `W = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s0`] THEN DISCH_TAC THEN (*** Call the modular inverse ***) - FIRST_X_ASSUM(MP_TAC o CONJUNCT1 o MATCH_MP - EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN DISCH_TAC THEN - ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (1--6) THEN - LOCAL_MODINV_TAC 7 THEN + ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (1--3) THEN + LOCAL_MODINV_TAC 4 THEN ABBREV_TAC `Z' = - read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s7` THEN + read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s4` THEN (*** Final multiplications ***) @@ -10546,12 +11250,17 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove SIMP_TAC[INT_OF_NUM_OF_INT; INT_REM_POS_EQ; INT_OF_NUM_EQ; ARITH_EQ] THEN REWRITE_TAC[GSYM p_25519; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ_0; INT_REM_EQ] THEN - STRIP_TAC THEN FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN - ONCE_REWRITE_TAC[COPRIME_SYM] THEN - SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519] THEN - ASM_REWRITE_TAC[num_divides; num_congruent] THEN ANTS_TAC THENL - [REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; - REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES]] THEN + STRIP_TAC THEN + SUBGOAL_THEN `Z' < p_25519 /\ (Z * Z' == 1) (mod p_25519)` + MP_TAC THENL + [FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN MATCH_MP_TAC(TAUT + `p /\ (q ==> r) /\ (p /\ q ==> s) ==> (p ==> q) ==> r /\ s`) THEN + REPEAT CONJ_TAC THENL + [ASM_SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; num_divides]; + DISCH_THEN SUBST1_TAC THEN REWRITE_TAC[INVERSE_MOD_BOUND] THEN + REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; + MESON_TAC[INVERSE_MOD_RMUL]]; + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; num_congruent]] THEN DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN MATCH_MP_TAC(INTEGER_RULE `(x * z:int == X) (mod p) /\ (y * z == Y) (mod p) @@ -10572,13 +11281,13 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN GHOST_INTRO_TAC `Xa:num` - `bignum_from_memory (word_add stackpointer (word 256),4)` THEN + `bignum_from_memory (word_add stackpointer (word 352),4)` THEN GHOST_INTRO_TAC `Ya:num` - `bignum_from_memory (word_add stackpointer (word 288),4)` THEN + `bignum_from_memory (word_add stackpointer (word 384),4)` THEN GHOST_INTRO_TAC `Za:num` - `bignum_from_memory (word_add stackpointer (word 320),4)` THEN + `bignum_from_memory (word_add stackpointer (word 416),4)` THEN GHOST_INTRO_TAC `Wa:num` - `bignum_from_memory(word_add stackpointer (word 352),4)` THEN + `bignum_from_memory(word_add stackpointer (word 448),4)` THEN REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN (*** Doubling to acc' = 2 * acc ***) @@ -10587,9 +11296,9 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove RULE_ASSUM_TAC(REWRITE_RULE[WORD_RULE `word_sub (word (4 * (i + 1))) (word 4) = word(4 * i)`]) THEN LOCAL_PDOUBLE_TAC 6 THEN MAP_EVERY ABBREV_TAC - [`X2a = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s6`; - `Y2a = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s6`; - `Z2a = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s6` + [`X2a = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s6`; + `Y2a = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s6`; + `Z2a = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s6` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (7--8) THEN @@ -10655,11 +11364,11 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove (*** Address the precomputed table separately ***) - FIRST_ASSUM(MP_TAC o CONJUNCT2 o + FIRST_ASSUM(MP_TAC o MATCH_MP EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[ARITH_RULE `pc + 0x7298 + x = (pc + 0x7298) + x`] THEN + REWRITE_TAC[ARITH_RULE `pc + 0x7da0 + x = (pc + 0x7da0) + x`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `wpc:int64 = word(pc + 0x7298)` THEN + ABBREV_TAC `wpc:int64 = word(pc + 0x7da0)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD_0] THEN @@ -10706,16 +11415,17 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove REWRITE_TAC[bignum_of_wordlist; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN REWRITE_TAC[d_25519; p_25519] THEN CONV_TAC INT_REDUCE_CONV; - REPEAT(FIRST_X_ASSUM(K ALL_TAC o check(free_in `wpc:int64` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check(free_in `word_add (wpc:int64)` o concl))) THEN CLARIFY_TAC] THEN (*** Optional negation of the table entry ***) ARM_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (204--207) (189--213) THEN MAP_EVERY ABBREV_TAC - [`XPY = read(memory :> bytes(word_add stackpointer (word 512),8 * 4)) s213`; - `YMX = read(memory :> bytes(word_add stackpointer (word 544),8 * 4)) s213`; - `KXY = read(memory :> bytes(word_add stackpointer (word 576),8 * 4)) s213`] + [`XPY = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s213`; + `YMX = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s213`; + `KXY = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s213`] THEN SUBGOAL_THEN `edwards25519_epprojectivew @@ -10892,10 +11602,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ARM_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC [451;452;453;454;459;460;461;462] (445--470) THEN MAP_EVERY ABBREV_TAC - [`Xb = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s470`; - `Yb = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s470`; - `Zb = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s470`; - `Wb = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s470`] + [`Xb = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s470`; + `Yb = read(memory :> bytes(word_add stackpointer (word 512),8 * 4)) s470`; + `Zb = read(memory :> bytes(word_add stackpointer (word 544),8 * 4)) s470`; + `Wb = read(memory :> bytes(word_add stackpointer (word 576),8 * 4)) s470`] THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -10949,9 +11659,9 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (471--474) THEN LOCAL_PDOUBLE_TAC 475 THEN MAP_EVERY ABBREV_TAC - [`X4a = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s475`; - `Y4a = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s475`; - `Z4a = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s475` + [`X4a = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s475`; + `Y4a = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s475`; + `Z4a = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s475` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (476--477) THEN @@ -10959,10 +11669,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (478--482) THEN LOCAL_PEPADD_TAC 483 THEN MAP_EVERY ABBREV_TAC - [`Xc = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s483`; - `Yc = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s483`; - `Zc = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s483`; - `Wc = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s483` + [`Xc = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s483`; + `Yc = read(memory :> bytes(word_add stackpointer (word 512),8 * 4)) s483`; + `Zc = read(memory :> bytes(word_add stackpointer (word 544),8 * 4)) s483`; + `Wc = read(memory :> bytes(word_add stackpointer (word 576),8 * 4)) s483` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (484--485) THEN @@ -10970,9 +11680,9 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (486--489) THEN LOCAL_PDOUBLE_TAC 490 THEN MAP_EVERY ABBREV_TAC - [`X8a = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s490`; - `Y8a = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s490`; - `Z8a = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s490` + [`X8a = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s490`; + `Y8a = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s490`; + `Z8a = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s490` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (491--492) THEN @@ -10980,10 +11690,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (493--496) THEN LOCAL_EPDOUBLE_TAC 497 THEN MAP_EVERY ABBREV_TAC - [`Xha = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s497`; - `Yha = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s497`; - `Zha = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s497`; - `Wha = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s497` + [`Xha = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s497`; + `Yha = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s497`; + `Zha = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s497`; + `Wha = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s497` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (498--499) THEN @@ -10991,10 +11701,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (500--504) THEN LOCAL_EPADD_TAC 505 THEN MAP_EVERY ABBREV_TAC - [`Xf = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s505`; - `Yf = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s505`; - `Zf = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s505`; - `Wf = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s505` + [`Xf = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s505`; + `Yf = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s505`; + `Zf = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s505`; + `Wf = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s505` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (506--507) THEN @@ -11087,8 +11797,8 @@ let EDWARDS25519_SCALARMULDOUBLE_SUBROUTINE_CORRECT = time prove (`!res scalar point bscalar n xy m pc stackpointer returnaddress. aligned 16 stackpointer /\ ALL (nonoverlapping (word_sub stackpointer (word 1696),1696)) - [(word pc,0x7598); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ - nonoverlapping (res,64) (word pc,0x7598) + [(word pc,0x80a0); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ + nonoverlapping (res,64) (word pc,0x80a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) (APPEND edwards25519_scalarmuldouble_mc diff --git a/arm/proofs/edwards25519_scalarmuldouble_alt.ml b/arm/proofs/edwards25519_scalarmuldouble_alt.ml index e7a7dcdd..9a0282dc 100644 --- a/arm/proofs/edwards25519_scalarmuldouble_alt.ml +++ b/arm/proofs/edwards25519_scalarmuldouble_alt.ml @@ -8,7 +8,7 @@ (* ========================================================================= *) needs "arm/proofs/base.ml";; -needs "arm/proofs/bignum_modinv.ml";; +needs "arm/proofs/bignum_inv_p25519.ml";; needs "common/ecencoding.ml";; do_list hide_constant ["X1";"X2";"X3";"X4";"X5"];; @@ -204,32 +204,32 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0xa9013ece; (* arm_STP X14 X15 X22 (Immediate_Offset (iword (&16))) *) 0x910883f6; (* arm_ADD X22 SP (rvalue (word 544)) *) 0x910683f7; (* arm_ADD X23 SP (rvalue (word 416)) *) - 0x940005ab; (* arm_BL (word 5804) *) + 0x94000875; (* arm_BL (word 8660) *) 0x910a83f6; (* arm_ADD X22 SP (rvalue (word 672)) *) 0x910683f7; (* arm_ADD X23 SP (rvalue (word 416)) *) 0x910883f8; (* arm_ADD X24 SP (rvalue (word 544)) *) - 0x94000b3b; (* arm_BL (word 11500) *) + 0x94000e05; (* arm_BL (word 14356) *) 0x910c83f6; (* arm_ADD X22 SP (rvalue (word 800)) *) 0x910883f7; (* arm_ADD X23 SP (rvalue (word 544)) *) - 0x940005a4; (* arm_BL (word 5776) *) + 0x9400086e; (* arm_BL (word 8632) *) 0x910e83f6; (* arm_ADD X22 SP (rvalue (word 928)) *) 0x910683f7; (* arm_ADD X23 SP (rvalue (word 416)) *) 0x910c83f8; (* arm_ADD X24 SP (rvalue (word 800)) *) - 0x94000b34; (* arm_BL (word 11472) *) + 0x94000dfe; (* arm_BL (word 14328) *) 0x911083f6; (* arm_ADD X22 SP (rvalue (word 1056)) *) 0x910a83f7; (* arm_ADD X23 SP (rvalue (word 672)) *) - 0x9400059d; (* arm_BL (word 5748) *) + 0x94000867; (* arm_BL (word 8604) *) 0x911283f6; (* arm_ADD X22 SP (rvalue (word 1184)) *) 0x910683f7; (* arm_ADD X23 SP (rvalue (word 416)) *) 0x911083f8; (* arm_ADD X24 SP (rvalue (word 1056)) *) - 0x94000b2d; (* arm_BL (word 11444) *) + 0x94000df7; (* arm_BL (word 14300) *) 0x911483f6; (* arm_ADD X22 SP (rvalue (word 1312)) *) 0x910c83f7; (* arm_ADD X23 SP (rvalue (word 800)) *) - 0x94000596; (* arm_BL (word 5720) *) + 0x94000860; (* arm_BL (word 8576) *) 0xd2801f93; (* arm_MOV X19 (rvalue (word 252)) *) 0xf9401fe0; (* arm_LDR X0 SP (Immediate_Offset (word 56)) *) 0xd37cfc14; (* arm_LSR X20 X0 60 *) - 0x1002444e; (* arm_ADR X14 (word 18568) *) + 0x10029c8e; (* arm_ADR X14 (word 21392) *) 0xd2800020; (* arm_MOV X0 (rvalue (word 1)) *) 0xaa1f03e1; (* arm_MOV X1 XZR *) 0xaa1f03e2; (* arm_MOV X2 XZR *) @@ -401,12 +401,12 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0xa94535cc; (* arm_LDP X12 X13 X14 (Immediate_Offset (iword (&80))) *) 0x9a8c114a; (* arm_CSEL X10 X10 X12 Condition_NE *) 0x9a8d116b; (* arm_CSEL X11 X11 X13 Condition_NE *) - 0xa91407e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&320))) *) - 0xa9150fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&336))) *) - 0xa91617e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&352))) *) - 0xa9171fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&368))) *) - 0xa91827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&384))) *) - 0xa9192fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&400))) *) + 0xa90407e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xa9050fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&80))) *) + 0xa90617e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&96))) *) + 0xa9071fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&112))) *) + 0xa90827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&128))) *) + 0xa9092fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&144))) *) 0xf9400fe0; (* arm_LDR X0 SP (Immediate_Offset (word 24)) *) 0xd37cfc14; (* arm_LSR X20 X0 60 *) 0x910683f6; (* arm_ADD X22 SP (rvalue (word 416)) *) @@ -633,22 +633,22 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0xa94746d0; (* arm_LDP X16 X17 X22 (Immediate_Offset (iword (&112))) *) 0x9a9011ce; (* arm_CSEL X14 X14 X16 Condition_NE *) 0x9a9111ef; (* arm_CSEL X15 X15 X17 Condition_NE *) - 0xa90c07e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&192))) *) - 0xa90d0fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&208))) *) - 0xa90e17e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&224))) *) - 0xa90f1fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&240))) *) - 0xa91027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&256))) *) - 0xa9112fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&272))) *) - 0xa91237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&288))) *) - 0xa9133fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&304))) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910303f7; (* arm_ADD X23 SP (rvalue (word 192)) *) - 0x910503f8; (* arm_ADD X24 SP (rvalue (word 320)) *) - 0x94000d78; (* arm_BL (word 13792) *) + 0xa91207e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&288))) *) + 0xa9130fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&304))) *) + 0xa91417e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&320))) *) + 0xa9151fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&336))) *) + 0xa91627e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&352))) *) + 0xa9172fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&368))) *) + 0xa91837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&384))) *) + 0xa9193fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&400))) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910483f7; (* arm_ADD X23 SP (rvalue (word 288)) *) + 0x910103f8; (* arm_ADD X24 SP (rvalue (word 64)) *) + 0x94001042; (* arm_BL (word 16648) *) 0xd1001273; (* arm_SUB X19 X19 (rvalue (word 4)) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x940006e8; (* arm_BL (word 7072) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x940009b2; (* arm_BL (word 9928) *) 0xd346fe60; (* arm_LSR X0 X19 6 *) 0x910083e1; (* arm_ADD X1 SP (rvalue (word 32)) *) 0xf8607822; (* arm_LDR X2 X1 (Shiftreg_Offset X0 3) *) @@ -657,7 +657,7 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0xf1002014; (* arm_SUBS X20 X0 (rvalue (word 8)) *) 0xda942694; (* arm_CNEG X20 X20 Condition_CC *) 0xda9f23f5; (* arm_CSETM X21 Condition_CC *) - 0x10020ece; (* arm_ADR X14 (word 16856) *) + 0x1002670e; (* arm_ADR X14 (word 19680) *) 0xd2800020; (* arm_MOV X0 (rvalue (word 1)) *) 0xaa1f03e1; (* arm_MOV X1 XZR *) 0xaa1f03e2; (* arm_MOV X2 XZR *) @@ -848,12 +848,12 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) 0xda1f016b; (* arm_SBC X11 X11 XZR *) - 0xa91437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&320))) *) - 0xa9153fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&336))) *) - 0xa91617e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&352))) *) - 0xa9171fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&368))) *) - 0xa91827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&384))) *) - 0xa9192fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&400))) *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa9053fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&80))) *) + 0xa90617e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&96))) *) + 0xa9071fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&112))) *) + 0xa90827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&128))) *) + 0xa9092fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&144))) *) 0xd346fe60; (* arm_LSR X0 X19 6 *) 0xf8607be1; (* arm_LDR X1 SP (Shiftreg_Offset X0 3) *) 0x9ad32422; (* arm_LSRV X2 X1 X19 *) @@ -1103,349 +1103,1063 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) 0xda1f01ef; (* arm_SBC X15 X15 XZR *) - 0xa90c07e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&192))) *) - 0xa90d0fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&208))) *) - 0xa90e17e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&224))) *) - 0xa90f1fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&240))) *) - 0xa91027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&256))) *) - 0xa9112fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&272))) *) - 0xa91237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&288))) *) - 0xa9133fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&304))) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x94000517; (* arm_BL (word 5212) *) - 0x910303f6; (* arm_ADD X22 SP (rvalue (word 192)) *) - 0x910303f7; (* arm_ADD X23 SP (rvalue (word 192)) *) - 0x910503f8; (* arm_ADD X24 SP (rvalue (word 320)) *) - 0x94000b9f; (* arm_BL (word 11900) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x94000510; (* arm_BL (word 5184) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x94000214; (* arm_BL (word 2128) *) - 0x910103f6; (* arm_ADD X22 SP (rvalue (word 64)) *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x910303f8; (* arm_ADD X24 SP (rvalue (word 192)) *) - 0x940007a4; (* arm_BL (word 7824) *) + 0xa91207e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&288))) *) + 0xa9130fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&304))) *) + 0xa91417e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&320))) *) + 0xa9151fe6; (* arm_STP X6 X7 SP (Immediate_Offset (iword (&336))) *) + 0xa91627e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&352))) *) + 0xa9172fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&368))) *) + 0xa91837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&384))) *) + 0xa9193fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&400))) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x940007e1; (* arm_BL (word 8068) *) + 0x910483f6; (* arm_ADD X22 SP (rvalue (word 288)) *) + 0x910483f7; (* arm_ADD X23 SP (rvalue (word 288)) *) + 0x910103f8; (* arm_ADD X24 SP (rvalue (word 64)) *) + 0x94000e69; (* arm_BL (word 14756) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x940007da; (* arm_BL (word 8040) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x940004de; (* arm_BL (word 4984) *) + 0x910283f6; (* arm_ADD X22 SP (rvalue (word 160)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x910483f8; (* arm_ADD X24 SP (rvalue (word 288)) *) + 0x94000a6e; (* arm_BL (word 10680) *) 0xb5ffc3b3; (* arm_CBNZ X19 (word 2095220) *) - 0xd2800080; (* arm_MOV X0 (rvalue (word 4)) *) - 0x910303e1; (* arm_ADD X1 SP (rvalue (word 192)) *) - 0x910203e2; (* arm_ADD X2 SP (rvalue (word 128)) *) - 0x1001d263; (* arm_ADR X3 (word 14924) *) - 0x910503e4; (* arm_ADD X4 SP (rvalue (word 320)) *) - 0xd37df00a; (* arm_LSL X10 X0 3 *) - 0x8b0a0095; (* arm_ADD X21 X4 X10 *) - 0x8b0a02b6; (* arm_ADD X22 X21 X10 *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a784b; (* arm_LDR X11 X2 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xf82a7aab; (* arm_STR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf82a7acc; (* arm_STR X12 X22 (Shiftreg_Offset X10 3) *) - 0xf82a788c; (* arm_STR X12 X4 (Shiftreg_Offset X10 3) *) - 0xf82a783f; (* arm_STR XZR X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb00015f; (* arm_CMP X10 X0 *) - 0x54ffff03; (* arm_BCC (word 2097120) *) - 0xf940008b; (* arm_LDR X11 X4 (Immediate_Offset (word 0)) *) - 0xd100056c; (* arm_SUB X12 X11 (rvalue (word 1)) *) - 0xf900008c; (* arm_STR X12 X4 (Immediate_Offset (word 0)) *) - 0xd37ef574; (* arm_LSL X20 X11 2 *) - 0xcb140174; (* arm_SUB X20 X11 X20 *) - 0xd27f0294; (* arm_EOR X20 X20 (rvalue (word 2)) *) - 0xd280002c; (* arm_MOV X12 (rvalue (word 1)) *) - 0x9b14316c; (* arm_MADD X12 X11 X20 X12 *) - 0x9b0c7d8b; (* arm_MUL X11 X12 X12 *) - 0x9b145194; (* arm_MADD X20 X12 X20 X20 *) - 0x9b0b7d6c; (* arm_MUL X12 X11 X11 *) - 0x9b145174; (* arm_MADD X20 X11 X20 X20 *) - 0x9b0c7d8b; (* arm_MUL X11 X12 X12 *) - 0x9b145194; (* arm_MADD X20 X12 X20 X20 *) - 0x9b145174; (* arm_MADD X20 X11 X20 X20 *) - 0xd379e002; (* arm_LSL X2 X0 7 *) - 0x9100fc4a; (* arm_ADD X10 X2 (rvalue (word 63)) *) - 0xd346fd45; (* arm_LSR X5 X10 6 *) - 0xeb0000bf; (* arm_CMP X5 X0 *) - 0x9a852005; (* arm_CSEL X5 X0 X5 Condition_CS *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ef; (* arm_MOV X15 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f0; (* arm_MOV X16 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a7aab; (* arm_LDR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf86a7acc; (* arm_LDR X12 X22 (Shiftreg_Offset X10 3) *) - 0xaa0c0171; (* arm_ORR X17 X11 X12 *) - 0xeb1f023f; (* arm_CMP X17 XZR *) - 0x8a0d0271; (* arm_AND X17 X19 X13 *) - 0x9a8f122f; (* arm_CSEL X15 X17 X15 Condition_NE *) - 0x8a0e0271; (* arm_AND X17 X19 X14 *) - 0x9a901230; (* arm_CSEL X16 X17 X16 Condition_NE *) - 0x9a8d116d; (* arm_CSEL X13 X11 X13 Condition_NE *) - 0x9a8e118e; (* arm_CSEL X14 X12 X14 Condition_NE *) - 0xda9f03f3; (* arm_CSETM X19 Condition_NE *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb05015f; (* arm_CMP X10 X5 *) - 0x54fffe63; (* arm_BCC (word 2097100) *) - 0xaa0e01ab; (* arm_ORR X11 X13 X14 *) - 0xdac0116c; (* arm_CLZ X12 X11 *) - 0xeb0c03f1; (* arm_NEGS X17 X12 *) - 0x9acc21ad; (* arm_LSLV X13 X13 X12 *) - 0x9a9f11ef; (* arm_CSEL X15 X15 XZR Condition_NE *) - 0x9acc21ce; (* arm_LSLV X14 X14 X12 *) - 0x9a9f1210; (* arm_CSEL X16 X16 XZR Condition_NE *) - 0x9ad125ef; (* arm_LSRV X15 X15 X17 *) - 0x9ad12610; (* arm_LSRV X16 X16 X17 *) - 0xaa0f01ad; (* arm_ORR X13 X13 X15 *) - 0xaa1001ce; (* arm_ORR X14 X14 X16 *) - 0xf94002af; (* arm_LDR X15 X21 (Immediate_Offset (word 0)) *) - 0xf94002d0; (* arm_LDR X16 X22 (Immediate_Offset (word 0)) *) - 0xd2800026; (* arm_MOV X6 (rvalue (word 1)) *) - 0xaa1f03e7; (* arm_MOV X7 XZR *) - 0xaa1f03e8; (* arm_MOV X8 XZR *) - 0xd2800029; (* arm_MOV X9 (rvalue (word 1)) *) - 0xd280074a; (* arm_MOV X10 (rvalue (word 58)) *) - 0xf24001ff; (* arm_TST X15 (rvalue (word 1)) *) - 0x9a9f11cb; (* arm_CSEL X11 X14 XZR Condition_NE *) - 0x9a9f120c; (* arm_CSEL X12 X16 XZR Condition_NE *) - 0x9a9f1111; (* arm_CSEL X17 X8 XZR Condition_NE *) - 0x9a9f1133; (* arm_CSEL X19 X9 XZR Condition_NE *) - 0xfa4e11a2; (* arm_CCMP X13 X14 (word 2) Condition_NE *) - 0xcb0b01ab; (* arm_SUB X11 X13 X11 *) - 0xcb0c01ec; (* arm_SUB X12 X15 X12 *) - 0x9a8d21ce; (* arm_CSEL X14 X14 X13 Condition_CS *) - 0xda8b256b; (* arm_CNEG X11 X11 Condition_CC *) - 0x9a8f2210; (* arm_CSEL X16 X16 X15 Condition_CS *) - 0xda8c258f; (* arm_CNEG X15 X12 Condition_CC *) - 0x9a862108; (* arm_CSEL X8 X8 X6 Condition_CS *) - 0x9a872129; (* arm_CSEL X9 X9 X7 Condition_CS *) - 0xf27f019f; (* arm_TST X12 (rvalue (word 2)) *) - 0x8b1100c6; (* arm_ADD X6 X6 X17 *) - 0x8b1300e7; (* arm_ADD X7 X7 X19 *) - 0xd341fd6d; (* arm_LSR X13 X11 1 *) - 0xd341fdef; (* arm_LSR X15 X15 1 *) - 0x8b080108; (* arm_ADD X8 X8 X8 *) - 0x8b090129; (* arm_ADD X9 X9 X9 *) - 0xd100054a; (* arm_SUB X10 X10 (rvalue (word 1)) *) - 0xb5fffd6a; (* arm_CBNZ X10 (word 2097068) *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f1; (* arm_MOV X17 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x9b0b7ccf; (* arm_MUL X15 X6 X11 *) - 0x9b0c7cf0; (* arm_MUL X16 X7 X12 *) - 0xab0d01ef; (* arm_ADDS X15 X15 X13 *) - 0x9bcb7ccd; (* arm_UMULH X13 X6 X11 *) - 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) - 0xab1001ef; (* arm_ADDS X15 X15 X16 *) - 0x93d1e9f1; (* arm_EXTR X17 X15 X17 58 *) - 0xf82a7891; (* arm_STR X17 X4 (Shiftreg_Offset X10 3) *) - 0xaa0f03f1; (* arm_MOV X17 X15 *) - 0x9bcc7cef; (* arm_UMULH X15 X7 X12 *) - 0x9a0f01ad; (* arm_ADC X13 X13 X15 *) - 0x9b0b7d0f; (* arm_MUL X15 X8 X11 *) - 0x9b0c7d30; (* arm_MUL X16 X9 X12 *) - 0xab0e01ef; (* arm_ADDS X15 X15 X14 *) - 0x9bcb7d0e; (* arm_UMULH X14 X8 X11 *) - 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) - 0xab1001ef; (* arm_ADDS X15 X15 X16 *) - 0x93d3e9f3; (* arm_EXTR X19 X15 X19 58 *) - 0xf82a7833; (* arm_STR X19 X1 (Shiftreg_Offset X10 3) *) - 0xaa0f03f3; (* arm_MOV X19 X15 *) - 0x9bcc7d2f; (* arm_UMULH X15 X9 X12 *) - 0x9a0f01ce; (* arm_ADC X14 X14 X15 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb00015f; (* arm_CMP X10 X0 *) - 0x54fffcc3; (* arm_BCC (word 2097048) *) - 0x93d1e9ad; (* arm_EXTR X13 X13 X17 58 *) - 0x93d3e9ce; (* arm_EXTR X14 X14 X19 58 *) - 0xf940008b; (* arm_LDR X11 X4 (Immediate_Offset (word 0)) *) - 0x9b147d71; (* arm_MUL X17 X11 X20 *) - 0xf940006c; (* arm_LDR X12 X3 (Immediate_Offset (word 0)) *) - 0x9b0c7e2f; (* arm_MUL X15 X17 X12 *) - 0x9bcc7e30; (* arm_UMULH X16 X17 X12 *) - 0xab0f016b; (* arm_ADDS X11 X11 X15 *) - 0xd280002a; (* arm_MOV X10 (rvalue (word 1)) *) - 0xd100040b; (* arm_SUB X11 X0 (rvalue (word 1)) *) - 0xb40001ab; (* arm_CBZ X11 (word 52) *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a788c; (* arm_LDR X12 X4 (Shiftreg_Offset X10 3) *) - 0x9b0b7e2f; (* arm_MUL X15 X17 X11 *) - 0xba10018c; (* arm_ADCS X12 X12 X16 *) - 0x9bcb7e30; (* arm_UMULH X16 X17 X11 *) - 0x9a1f0210; (* arm_ADC X16 X16 XZR *) - 0xab0f018c; (* arm_ADDS X12 X12 X15 *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f788c; (* arm_STR X12 X4 (Shiftreg_Offset X15 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5fffeab; (* arm_CBNZ X11 (word 2097108) *) - 0xba0d0210; (* arm_ADCS X16 X16 X13 *) - 0x9a1f03ed; (* arm_ADC X13 XZR XZR *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f7890; (* arm_STR X16 X4 (Shiftreg_Offset X15 3) *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xfa0c017f; (* arm_SBCS XZR X11 X12 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff6b; (* arm_CBNZ X11 (word 2097132) *) - 0xfa1f01bf; (* arm_SBCS XZR X13 XZR *) - 0xda9f33ed; (* arm_CSETM X13 Condition_CS *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a788b; (* arm_LDR X11 X4 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0x8a0d018c; (* arm_AND X12 X12 X13 *) - 0xfa0c016b; (* arm_SBCS X11 X11 X12 *) - 0xf82a788b; (* arm_STR X11 X4 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff2b; (* arm_CBNZ X11 (word 2097124) *) - 0xf940002b; (* arm_LDR X11 X1 (Immediate_Offset (word 0)) *) - 0x9b147d71; (* arm_MUL X17 X11 X20 *) - 0xf940006c; (* arm_LDR X12 X3 (Immediate_Offset (word 0)) *) - 0x9b0c7e2f; (* arm_MUL X15 X17 X12 *) - 0x9bcc7e30; (* arm_UMULH X16 X17 X12 *) - 0xab0f016b; (* arm_ADDS X11 X11 X15 *) - 0xd280002a; (* arm_MOV X10 (rvalue (word 1)) *) - 0xd100040b; (* arm_SUB X11 X0 (rvalue (word 1)) *) - 0xb40001ab; (* arm_CBZ X11 (word 52) *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x9b0b7e2f; (* arm_MUL X15 X17 X11 *) - 0xba10018c; (* arm_ADCS X12 X12 X16 *) - 0x9bcb7e30; (* arm_UMULH X16 X17 X11 *) - 0x9a1f0210; (* arm_ADC X16 X16 XZR *) - 0xab0f018c; (* arm_ADDS X12 X12 X15 *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f782c; (* arm_STR X12 X1 (Shiftreg_Offset X15 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5fffeab; (* arm_CBNZ X11 (word 2097108) *) - 0xba0e0210; (* arm_ADCS X16 X16 X14 *) - 0x9a1f03ee; (* arm_ADC X14 XZR XZR *) - 0xd100054f; (* arm_SUB X15 X10 (rvalue (word 1)) *) - 0xf82f7830; (* arm_STR X16 X1 (Shiftreg_Offset X15 3) *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a782b; (* arm_LDR X11 X1 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0xfa0c017f; (* arm_SBCS XZR X11 X12 *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff6b; (* arm_CBNZ X11 (word 2097132) *) - 0xfa1f01df; (* arm_SBCS XZR X14 XZR *) - 0xda9f33ee; (* arm_CSETM X14 Condition_CS *) - 0xeb1f03ea; (* arm_NEGS X10 XZR *) - 0xf86a782b; (* arm_LDR X11 X1 (Shiftreg_Offset X10 3) *) - 0xf86a786c; (* arm_LDR X12 X3 (Shiftreg_Offset X10 3) *) - 0x8a0e018c; (* arm_AND X12 X12 X14 *) - 0xfa0c016b; (* arm_SBCS X11 X11 X12 *) - 0xf82a782b; (* arm_STR X11 X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff2b; (* arm_CBNZ X11 (word 2097124) *) - 0xaa1f03ed; (* arm_MOV X13 XZR *) - 0xaa1f03ee; (* arm_MOV X14 XZR *) - 0xaa1f03f1; (* arm_MOV X17 XZR *) - 0xaa1f03f3; (* arm_MOV X19 XZR *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xf86a7aab; (* arm_LDR X11 X21 (Shiftreg_Offset X10 3) *) - 0xf86a7acc; (* arm_LDR X12 X22 (Shiftreg_Offset X10 3) *) - 0x9b0b7ccf; (* arm_MUL X15 X6 X11 *) - 0x9b0c7cf0; (* arm_MUL X16 X7 X12 *) - 0xab0d01ef; (* arm_ADDS X15 X15 X13 *) - 0x9bcb7ccd; (* arm_UMULH X13 X6 X11 *) - 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) - 0xeb1001ef; (* arm_SUBS X15 X15 X16 *) - 0xf82a7aaf; (* arm_STR X15 X21 (Shiftreg_Offset X10 3) *) - 0x9bcc7cef; (* arm_UMULH X15 X7 X12 *) - 0xcb1101f1; (* arm_SUB X17 X15 X17 *) - 0xfa1101ad; (* arm_SBCS X13 X13 X17 *) - 0xda9f23f1; (* arm_CSETM X17 Condition_CC *) - 0x9b0b7d0f; (* arm_MUL X15 X8 X11 *) - 0x9b0c7d30; (* arm_MUL X16 X9 X12 *) - 0xab0e01ef; (* arm_ADDS X15 X15 X14 *) - 0x9bcb7d0e; (* arm_UMULH X14 X8 X11 *) - 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) - 0xeb1001ef; (* arm_SUBS X15 X15 X16 *) - 0xf82a7acf; (* arm_STR X15 X22 (Shiftreg_Offset X10 3) *) - 0x9bcc7d2f; (* arm_UMULH X15 X9 X12 *) - 0xcb1301f3; (* arm_SUB X19 X15 X19 *) - 0xfa1301ce; (* arm_SBCS X14 X14 X19 *) - 0xda9f23f3; (* arm_CSETM X19 Condition_CC *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xeb05015f; (* arm_CMP X10 X5 *) - 0x54fffcc3; (* arm_BCC (word 2097048) *) - 0xab11023f; (* arm_CMN X17 X17 *) - 0xf94002af; (* arm_LDR X15 X21 (Immediate_Offset (word 0)) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xd10004a6; (* arm_SUB X6 X5 (rvalue (word 1)) *) - 0xb4000166; (* arm_CBZ X6 (word 44) *) - 0x9100214b; (* arm_ADD X11 X10 (rvalue (word 8)) *) - 0xf86b6aac; (* arm_LDR X12 X21 (Register_Offset X11) *) - 0x93cfe98f; (* arm_EXTR X15 X12 X15 58 *) - 0xca1101ef; (* arm_EOR X15 X15 X17 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6aaf; (* arm_STR X15 X21 (Register_Offset X10) *) - 0xaa0c03ef; (* arm_MOV X15 X12 *) - 0x9100214a; (* arm_ADD X10 X10 (rvalue (word 8)) *) - 0xd10004c6; (* arm_SUB X6 X6 (rvalue (word 1)) *) - 0xb5fffee6; (* arm_CBNZ X6 (word 2097116) *) - 0x93cfe9af; (* arm_EXTR X15 X13 X15 58 *) - 0xca1101ef; (* arm_EOR X15 X15 X17 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6aaf; (* arm_STR X15 X21 (Register_Offset X10) *) - 0xab13027f; (* arm_CMN X19 X19 *) - 0xf94002cf; (* arm_LDR X15 X22 (Immediate_Offset (word 0)) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xd10004a6; (* arm_SUB X6 X5 (rvalue (word 1)) *) - 0xb4000166; (* arm_CBZ X6 (word 44) *) - 0x9100214b; (* arm_ADD X11 X10 (rvalue (word 8)) *) - 0xf86b6acc; (* arm_LDR X12 X22 (Register_Offset X11) *) - 0x93cfe98f; (* arm_EXTR X15 X12 X15 58 *) - 0xca1301ef; (* arm_EOR X15 X15 X19 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6acf; (* arm_STR X15 X22 (Register_Offset X10) *) - 0xaa0c03ef; (* arm_MOV X15 X12 *) - 0x9100214a; (* arm_ADD X10 X10 (rvalue (word 8)) *) - 0xd10004c6; (* arm_SUB X6 X6 (rvalue (word 1)) *) - 0xb5fffee6; (* arm_CBNZ X6 (word 2097116) *) - 0x93cfe9cf; (* arm_EXTR X15 X14 X15 58 *) - 0xca1301ef; (* arm_EOR X15 X15 X19 *) - 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) - 0xf82a6acf; (* arm_STR X15 X22 (Register_Offset X10) *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xab11023f; (* arm_CMN X17 X17 *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a788c; (* arm_LDR X12 X4 (Shiftreg_Offset X10 3) *) - 0x8a11016b; (* arm_AND X11 X11 X17 *) - 0xca11018c; (* arm_EOR X12 X12 X17 *) - 0xba0c016b; (* arm_ADCS X11 X11 X12 *) - 0xf82a788b; (* arm_STR X11 X4 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff0b; (* arm_CBNZ X11 (word 2097120) *) - 0xaa3303f3; (* arm_MVN X19 X19 *) - 0xaa1f03ea; (* arm_MOV X10 XZR *) - 0xab13027f; (* arm_CMN X19 X19 *) - 0xf86a786b; (* arm_LDR X11 X3 (Shiftreg_Offset X10 3) *) - 0xf86a782c; (* arm_LDR X12 X1 (Shiftreg_Offset X10 3) *) - 0x8a13016b; (* arm_AND X11 X11 X19 *) - 0xca13018c; (* arm_EOR X12 X12 X19 *) - 0xba0c016b; (* arm_ADCS X11 X11 X12 *) - 0xf82a782b; (* arm_STR X11 X1 (Shiftreg_Offset X10 3) *) - 0x9100054a; (* arm_ADD X10 X10 (rvalue (word 1)) *) - 0xcb00014b; (* arm_SUB X11 X10 X0 *) - 0xb5ffff0b; (* arm_CBNZ X11 (word 2097120) *) - 0xf100e842; (* arm_SUBS X2 X2 (rvalue (word 58)) *) - 0x54ffdd28; (* arm_BHI (word 2096036) *) + 0x910483e0; (* arm_ADD X0 SP (rvalue (word 288)) *) + 0x910383e1; (* arm_ADD X1 SP (rvalue (word 224)) *) + 0xaa0003f4; (* arm_MOV X20 X0 *) + 0x9280024a; (* arm_MOVN X10 (word 18) 0 *) + 0x9280000b; (* arm_MOVN X11 (word 0) 0 *) + 0xa9002fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&0))) *) + 0x92f0000c; (* arm_MOVN X12 (word 32768) 48 *) + 0xa90133eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&16))) *) + 0xa9400c22; (* arm_LDP X2 X3 X1 (Immediate_Offset (iword (&0))) *) + 0xa9411424; (* arm_LDP X4 X5 X1 (Immediate_Offset (iword (&16))) *) + 0xd2800267; (* arm_MOV X7 (rvalue (word 19)) *) + 0xd37ffca6; (* arm_LSR X6 X5 63 *) + 0x9b061ce6; (* arm_MADD X6 X7 X6 X7 *) + 0xab060042; (* arm_ADDS X2 X2 X6 *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0xba1f0084; (* arm_ADCS X4 X4 XZR *) + 0xb24100a5; (* arm_ORR X5 X5 (rvalue (word 9223372036854775808)) *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0x9a9f30e6; (* arm_CSEL X6 X7 XZR Condition_CC *) + 0xeb060042; (* arm_SUBS X2 X2 X6 *) + 0xfa1f0063; (* arm_SBCS X3 X3 XZR *) + 0xfa1f0084; (* arm_SBCS X4 X4 XZR *) + 0xda1f00a5; (* arm_SBC X5 X5 XZR *) + 0x9240f8a5; (* arm_AND X5 X5 (rvalue (word 9223372036854775807)) *) + 0xa9020fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&32))) *) + 0xa90317e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&48))) *) + 0xa9047fff; (* arm_STP XZR XZR SP (Immediate_Offset (iword (&64))) *) + 0xa9057fff; (* arm_STP XZR XZR SP (Immediate_Offset (iword (&80))) *) + 0xd284132a; (* arm_MOV X10 (rvalue (word 8345)) *) + 0xf2aea04a; (* arm_MOVK X10 (word 29954) 16 *) + 0xf2d3c46a; (* arm_MOVK X10 (word 40483) 32 *) + 0xf2f41f2a; (* arm_MOVK X10 (word 41209) 48 *) + 0xd284b2ab; (* arm_MOV X11 (rvalue (word 9621)) *) + 0xf2a3a26b; (* arm_MOVK X11 (word 7443) 16 *) + 0xf2d1e7eb; (* arm_MOVK X11 (word 36671) 32 *) + 0xf2f518cb; (* arm_MOVK X11 (word 43206) 48 *) + 0xd28a484c; (* arm_MOV X12 (rvalue (word 21058)) *) + 0xf2a0b58c; (* arm_MOVK X12 (word 1452) 16 *) + 0xf2d1270c; (* arm_MOVK X12 (word 35128) 32 *) + 0xf2ed8d8c; (* arm_MOVK X12 (word 27756) 48 *) + 0xd280c2ad; (* arm_MOV X13 (rvalue (word 1557)) *) + 0xf2a82eed; (* arm_MOVK X13 (word 16759) 16 *) + 0xf2c1164d; (* arm_MOVK X13 (word 2226) 32 *) + 0xf2e4ecad; (* arm_MOVK X13 (word 10085) 48 *) + 0xa9062fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&96))) *) + 0xa90737ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&112))) *) + 0xd2800155; (* arm_MOV X21 (rvalue (word 10)) *) + 0xd2800036; (* arm_MOV X22 (rvalue (word 1)) *) + 0x1400010b; (* arm_B (word 1068) *) + 0xeb1f015f; (* arm_CMP X10 XZR *) + 0xda9f53ee; (* arm_CSETM X14 Condition_MI *) + 0xda8a554a; (* arm_CNEG X10 X10 Condition_MI *) + 0xeb1f017f; (* arm_CMP X11 XZR *) + 0xda9f53ef; (* arm_CSETM X15 Condition_MI *) + 0xda8b556b; (* arm_CNEG X11 X11 Condition_MI *) + 0xeb1f019f; (* arm_CMP X12 XZR *) + 0xda9f53f0; (* arm_CSETM X16 Condition_MI *) + 0xda8c558c; (* arm_CNEG X12 X12 Condition_MI *) + 0xeb1f01bf; (* arm_CMP X13 XZR *) + 0xda9f53f1; (* arm_CSETM X17 Condition_MI *) + 0xda8d55ad; (* arm_CNEG X13 X13 Condition_MI *) + 0x8a0e0140; (* arm_AND X0 X10 X14 *) + 0x8a0f0161; (* arm_AND X1 X11 X15 *) + 0x8b010009; (* arm_ADD X9 X0 X1 *) + 0x8a100180; (* arm_AND X0 X12 X16 *) + 0x8a1101a1; (* arm_AND X1 X13 X17 *) + 0x8b010013; (* arm_ADD X19 X0 X1 *) + 0xf94003e7; (* arm_LDR X7 SP (Immediate_Offset (word 0)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94013e8; (* arm_LDR X8 SP (Immediate_Offset (word 32)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000265; (* arm_ADDS X5 X19 X0 *) + 0x9a0103e3; (* arm_ADC X3 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf94007e7; (* arm_LDR X7 SP (Immediate_Offset (word 8)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94017e8; (* arm_LDR X8 SP (Immediate_Offset (word 40)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0x93c4ec44; (* arm_EXTR X4 X2 X4 59 *) + 0xf90003e4; (* arm_STR X4 SP (Immediate_Offset (word 0)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a0103e4; (* arm_ADC X4 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a010084; (* arm_ADC X4 X4 X1 *) + 0x93c5ec65; (* arm_EXTR X5 X3 X5 59 *) + 0xf90013e5; (* arm_STR X5 SP (Immediate_Offset (word 32)) *) + 0xf9400be7; (* arm_LDR X7 SP (Immediate_Offset (word 16)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9401be8; (* arm_LDR X8 SP (Immediate_Offset (word 48)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c2ecc2; (* arm_EXTR X2 X6 X2 59 *) + 0xf90007e2; (* arm_STR X2 SP (Immediate_Offset (word 8)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0x93c3ec83; (* arm_EXTR X3 X4 X3 59 *) + 0xf90017e3; (* arm_STR X3 SP (Immediate_Offset (word 40)) *) + 0xf9400fe7; (* arm_LDR X7 SP (Immediate_Offset (word 24)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x937ffc23; (* arm_ASR X3 X1 63 *) + 0x8a0a0063; (* arm_AND X3 X3 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9401fe8; (* arm_LDR X8 SP (Immediate_Offset (word 56)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0x8a0b0000; (* arm_AND X0 X0 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c6eca6; (* arm_EXTR X6 X5 X6 59 *) + 0xf9000be6; (* arm_STR X6 SP (Immediate_Offset (word 16)) *) + 0x93c5ec65; (* arm_EXTR X5 X3 X5 59 *) + 0xf9000fe5; (* arm_STR X5 SP (Immediate_Offset (word 24)) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x937ffc25; (* arm_ASR X5 X1 63 *) + 0x8a0c00a5; (* arm_AND X5 X5 X12 *) + 0xcb0503e5; (* arm_NEG X5 X5 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0x8a0d0000; (* arm_AND X0 X0 X13 *) + 0xcb0000a5; (* arm_SUB X5 X5 X0 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c4ec44; (* arm_EXTR X4 X2 X4 59 *) + 0xf9001be4; (* arm_STR X4 SP (Immediate_Offset (word 48)) *) + 0x93c2eca2; (* arm_EXTR X2 X5 X2 59 *) + 0xf9001fe2; (* arm_STR X2 SP (Immediate_Offset (word 56)) *) + 0xf94023e7; (* arm_LDR X7 SP (Immediate_Offset (word 64)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94033e8; (* arm_LDR X8 SP (Immediate_Offset (word 96)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf90023e4; (* arm_STR X4 SP (Immediate_Offset (word 64)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000265; (* arm_ADDS X5 X19 X0 *) + 0x9a0103e3; (* arm_ADC X3 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0xf90033e5; (* arm_STR X5 SP (Immediate_Offset (word 96)) *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf94027e7; (* arm_LDR X7 SP (Immediate_Offset (word 72)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94037e8; (* arm_LDR X8 SP (Immediate_Offset (word 104)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0xf90027e2; (* arm_STR X2 SP (Immediate_Offset (word 72)) *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0x9a0103e4; (* arm_ADC X4 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0xf90037e3; (* arm_STR X3 SP (Immediate_Offset (word 104)) *) + 0x9a010084; (* arm_ADC X4 X4 X1 *) + 0xf9402be7; (* arm_LDR X7 SP (Immediate_Offset (word 80)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9403be8; (* arm_LDR X8 SP (Immediate_Offset (word 112)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0xf9002be6; (* arm_STR X6 SP (Immediate_Offset (word 80)) *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf9003be4; (* arm_STR X4 SP (Immediate_Offset (word 112)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xf9402fe7; (* arm_LDR X7 SP (Immediate_Offset (word 88)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x8a0a01c3; (* arm_AND X3 X14 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9403fe8; (* arm_LDR X8 SP (Immediate_Offset (word 120)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x8a0b01e0; (* arm_AND X0 X15 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c5fc66; (* arm_EXTR X6 X3 X5 63 *) + 0xa94407e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0x8b83fcc6; (* arm_ADD X6 X6 (Shiftedreg X3 ASR 63) *) + 0xd2800263; (* arm_MOV X3 (rvalue (word 19)) *) + 0x9b037cc4; (* arm_MUL X4 X6 X3 *) + 0x8b06fca5; (* arm_ADD X5 X5 (Shiftedreg X6 LSL 63) *) + 0x9b437cc3; (* arm_SMULH X3 X6 X3 *) + 0xf9402be6; (* arm_LDR X6 SP (Immediate_Offset (word 80)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba030021; (* arm_ADCS X1 X1 X3 *) + 0x937ffc63; (* arm_ASR X3 X3 63 *) + 0xba0300c6; (* arm_ADCS X6 X6 X3 *) + 0x9a0300a5; (* arm_ADC X5 X5 X3 *) + 0xa90407e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xa90517e6; (* arm_STP X6 X5 SP (Immediate_Offset (iword (&80))) *) + 0xca1000e1; (* arm_EOR X1 X7 X16 *) + 0x8a0c0205; (* arm_AND X5 X16 X12 *) + 0xcb0503e5; (* arm_NEG X5 X5 *) + 0x9b0c7c20; (* arm_MUL X0 X1 X12 *) + 0x9bcc7c21; (* arm_UMULH X1 X1 X12 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xca110101; (* arm_EOR X1 X8 X17 *) + 0x8a0d0220; (* arm_AND X0 X17 X13 *) + 0xcb0000a5; (* arm_SUB X5 X5 X0 *) + 0x9b0d7c20; (* arm_MUL X0 X1 X13 *) + 0x9bcd7c21; (* arm_UMULH X1 X1 X13 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0x93c2fca6; (* arm_EXTR X6 X5 X2 63 *) + 0xa94607e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&96))) *) + 0x8b85fcc6; (* arm_ADD X6 X6 (Shiftedreg X5 ASR 63) *) + 0xd2800265; (* arm_MOV X5 (rvalue (word 19)) *) + 0x9b057cc4; (* arm_MUL X4 X6 X5 *) + 0x8b06fc42; (* arm_ADD X2 X2 (Shiftedreg X6 LSL 63) *) + 0x9b457cc5; (* arm_SMULH X5 X6 X5 *) + 0xf9403be3; (* arm_LDR X3 SP (Immediate_Offset (word 112)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba050021; (* arm_ADCS X1 X1 X5 *) + 0x937ffca5; (* arm_ASR X5 X5 63 *) + 0xba050063; (* arm_ADCS X3 X3 X5 *) + 0x9a050042; (* arm_ADC X2 X2 X5 *) + 0xa90607e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&96))) *) + 0xa9070be3; (* arm_STP X3 X2 SP (Immediate_Offset (iword (&112))) *) + 0xaa1603e1; (* arm_MOV X1 X22 *) + 0xf94003e2; (* arm_LDR X2 SP (Immediate_Offset (word 0)) *) + 0xf94013e3; (* arm_LDR X3 SP (Immediate_Offset (word 32)) *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x91440088; (* arm_ADD X8 X4 (rvalue (word 1048576)) *) + 0x9355a508; (* arm_SBFM X8 X8 21 41 *) + 0xd2a0020b; (* arm_MOVZ X11 (word 16) 16 *) + 0x8b0b556b; (* arm_ADD X11 X11 (Shiftedreg X11 LSL 21) *) + 0x8b0b0089; (* arm_ADD X9 X4 X11 *) + 0x936afd29; (* arm_ASR X9 X9 42 *) + 0x914400aa; (* arm_ADD X10 X5 (rvalue (word 1048576)) *) + 0x9355a54a; (* arm_SBFM X10 X10 21 41 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0x936afd6b; (* arm_ASR X11 X11 42 *) + 0x9b027d06; (* arm_MUL X6 X8 X2 *) + 0x9b037d27; (* arm_MUL X7 X9 X3 *) + 0x9b027d42; (* arm_MUL X2 X10 X2 *) + 0x9b037d63; (* arm_MUL X3 X11 X3 *) + 0x8b0700c4; (* arm_ADD X4 X6 X7 *) + 0x8b030045; (* arm_ADD X5 X2 X3 *) + 0x9354fc82; (* arm_ASR X2 X4 20 *) + 0x9354fca3; (* arm_ASR X3 X5 20 *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9144008c; (* arm_ADD X12 X4 (rvalue (word 1048576)) *) + 0x9355a58c; (* arm_SBFM X12 X12 21 41 *) + 0xd2a0020f; (* arm_MOVZ X15 (word 16) 16 *) + 0x8b0f55ef; (* arm_ADD X15 X15 (Shiftedreg X15 LSL 21) *) + 0x8b0f008d; (* arm_ADD X13 X4 X15 *) + 0x936afdad; (* arm_ASR X13 X13 42 *) + 0x914400ae; (* arm_ADD X14 X5 (rvalue (word 1048576)) *) + 0x9355a5ce; (* arm_SBFM X14 X14 21 41 *) + 0x8b0f00af; (* arm_ADD X15 X5 X15 *) + 0x936afdef; (* arm_ASR X15 X15 42 *) + 0x9b027d86; (* arm_MUL X6 X12 X2 *) + 0x9b037da7; (* arm_MUL X7 X13 X3 *) + 0x9b027dc2; (* arm_MUL X2 X14 X2 *) + 0x9b037de3; (* arm_MUL X3 X15 X3 *) + 0x8b0700c4; (* arm_ADD X4 X6 X7 *) + 0x8b030045; (* arm_ADD X5 X2 X3 *) + 0x9354fc82; (* arm_ASR X2 X4 20 *) + 0x9354fca3; (* arm_ASR X3 X5 20 *) + 0x92404c44; (* arm_AND X4 X2 (rvalue (word 1048575)) *) + 0xb2575884; (* arm_ORR X4 X4 (rvalue (word 18446741874686296064)) *) + 0x92404c65; (* arm_AND X5 X3 (rvalue (word 1048575)) *) + 0xb24204a5; (* arm_ORR X5 X5 (rvalue (word 13835058055282163712)) *) + 0xf24000bf; (* arm_TST X5 (rvalue (word 1)) *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9b087d82; (* arm_MUL X2 X12 X8 *) + 0x9b097d83; (* arm_MUL X3 X12 X9 *) + 0x9b087dc6; (* arm_MUL X6 X14 X8 *) + 0x9b097dc7; (* arm_MUL X7 X14 X9 *) + 0x9b0a09a8; (* arm_MADD X8 X13 X10 X2 *) + 0x9b0b0da9; (* arm_MADD X9 X13 X11 X3 *) + 0x9b0a19f0; (* arm_MADD X16 X15 X10 X6 *) + 0x9b0b1df1; (* arm_MADD X17 X15 X11 X7 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0xf27f00bf; (* arm_TST X5 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9a9f1086; (* arm_CSEL X6 X4 XZR Condition_NE *) + 0xfa5f1028; (* arm_CCMP X1 XZR (word 8) Condition_NE *) + 0xda81b421; (* arm_CNEG X1 X1 Condition_GE *) + 0xda86b4c6; (* arm_CNEG X6 X6 Condition_GE *) + 0x9a84a0a4; (* arm_CSEL X4 X5 X4 Condition_GE *) + 0x8b0600a5; (* arm_ADD X5 X5 X6 *) + 0x91000821; (* arm_ADD X1 X1 (rvalue (word 2)) *) + 0x9341fca5; (* arm_ASR X5 X5 1 *) + 0x9144008c; (* arm_ADD X12 X4 (rvalue (word 1048576)) *) + 0x9356a98c; (* arm_SBFM X12 X12 22 42 *) + 0xd2a0020f; (* arm_MOVZ X15 (word 16) 16 *) + 0x8b0f55ef; (* arm_ADD X15 X15 (Shiftedreg X15 LSL 21) *) + 0x8b0f008d; (* arm_ADD X13 X4 X15 *) + 0x936bfdad; (* arm_ASR X13 X13 43 *) + 0x914400ae; (* arm_ADD X14 X5 (rvalue (word 1048576)) *) + 0x9356a9ce; (* arm_SBFM X14 X14 22 42 *) + 0x8b0f00af; (* arm_ADD X15 X5 X15 *) + 0x936bfdef; (* arm_ASR X15 X15 43 *) + 0x9b08fd82; (* arm_MNEG X2 X12 X8 *) + 0x9b09fd83; (* arm_MNEG X3 X12 X9 *) + 0x9b08fdc4; (* arm_MNEG X4 X14 X8 *) + 0x9b09fdc5; (* arm_MNEG X5 X14 X9 *) + 0x9b1089aa; (* arm_MSUB X10 X13 X16 X2 *) + 0x9b118dab; (* arm_MSUB X11 X13 X17 X3 *) + 0x9b1091ec; (* arm_MSUB X12 X15 X16 X4 *) + 0x9b1195ed; (* arm_MSUB X13 X15 X17 X5 *) + 0xaa0103f6; (* arm_MOV X22 X1 *) + 0xf10006b5; (* arm_SUBS X21 X21 (rvalue (word 1)) *) + 0x54ff9281; (* arm_BNE (word 2093648) *) + 0xf94003e0; (* arm_LDR X0 SP (Immediate_Offset (word 0)) *) + 0xf94013e1; (* arm_LDR X1 SP (Immediate_Offset (word 32)) *) + 0x9b0a7c00; (* arm_MUL X0 X0 X10 *) + 0x9b0b0021; (* arm_MADD X1 X1 X11 X0 *) + 0x937ffc20; (* arm_ASR X0 X1 63 *) + 0xeb1f015f; (* arm_CMP X10 XZR *) + 0xda9f53ee; (* arm_CSETM X14 Condition_MI *) + 0xda8a554a; (* arm_CNEG X10 X10 Condition_MI *) + 0xca0001ce; (* arm_EOR X14 X14 X0 *) + 0xeb1f017f; (* arm_CMP X11 XZR *) + 0xda9f53ef; (* arm_CSETM X15 Condition_MI *) + 0xda8b556b; (* arm_CNEG X11 X11 Condition_MI *) + 0xca0001ef; (* arm_EOR X15 X15 X0 *) + 0xeb1f019f; (* arm_CMP X12 XZR *) + 0xda9f53f0; (* arm_CSETM X16 Condition_MI *) + 0xda8c558c; (* arm_CNEG X12 X12 Condition_MI *) + 0xca000210; (* arm_EOR X16 X16 X0 *) + 0xeb1f01bf; (* arm_CMP X13 XZR *) + 0xda9f53f1; (* arm_CSETM X17 Condition_MI *) + 0xda8d55ad; (* arm_CNEG X13 X13 Condition_MI *) + 0xca000231; (* arm_EOR X17 X17 X0 *) + 0x8a0e0140; (* arm_AND X0 X10 X14 *) + 0x8a0f0161; (* arm_AND X1 X11 X15 *) + 0x8b010009; (* arm_ADD X9 X0 X1 *) + 0xf94023e7; (* arm_LDR X7 SP (Immediate_Offset (word 64)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000124; (* arm_ADDS X4 X9 X0 *) + 0x9a0103e2; (* arm_ADC X2 XZR X1 *) + 0xf94033e8; (* arm_LDR X8 SP (Immediate_Offset (word 96)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000084; (* arm_ADDS X4 X4 X0 *) + 0xf90023e4; (* arm_STR X4 SP (Immediate_Offset (word 64)) *) + 0x9a010042; (* arm_ADC X2 X2 X1 *) + 0xf94027e7; (* arm_LDR X7 SP (Immediate_Offset (word 72)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0x9a0103e6; (* arm_ADC X6 XZR X1 *) + 0xf94037e8; (* arm_LDR X8 SP (Immediate_Offset (word 104)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab000042; (* arm_ADDS X2 X2 X0 *) + 0xf90027e2; (* arm_STR X2 SP (Immediate_Offset (word 72)) *) + 0x9a0100c6; (* arm_ADC X6 X6 X1 *) + 0xf9402be7; (* arm_LDR X7 SP (Immediate_Offset (word 80)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0x9a0103e5; (* arm_ADC X5 XZR X1 *) + 0xf9403be8; (* arm_LDR X8 SP (Immediate_Offset (word 112)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000c6; (* arm_ADDS X6 X6 X0 *) + 0xf9002be6; (* arm_STR X6 SP (Immediate_Offset (word 80)) *) + 0x9a0100a5; (* arm_ADC X5 X5 X1 *) + 0xf9402fe7; (* arm_LDR X7 SP (Immediate_Offset (word 88)) *) + 0xca0e00e1; (* arm_EOR X1 X7 X14 *) + 0x8a0a01c3; (* arm_AND X3 X14 X10 *) + 0xcb0303e3; (* arm_NEG X3 X3 *) + 0x9b0a7c20; (* arm_MUL X0 X1 X10 *) + 0x9bca7c21; (* arm_UMULH X1 X1 X10 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0xf9403fe8; (* arm_LDR X8 SP (Immediate_Offset (word 120)) *) + 0xca0f0101; (* arm_EOR X1 X8 X15 *) + 0x8a0b01e0; (* arm_AND X0 X15 X11 *) + 0xcb000063; (* arm_SUB X3 X3 X0 *) + 0x9b0b7c20; (* arm_MUL X0 X1 X11 *) + 0x9bcb7c21; (* arm_UMULH X1 X1 X11 *) + 0xab0000a5; (* arm_ADDS X5 X5 X0 *) + 0x9a010063; (* arm_ADC X3 X3 X1 *) + 0x93c5fc66; (* arm_EXTR X6 X3 X5 63 *) + 0xa94407e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xea03007f; (* arm_TST X3 X3 *) + 0x9a8644c6; (* arm_CINC X6 X6 Condition_PL *) + 0xd2800263; (* arm_MOV X3 (rvalue (word 19)) *) + 0x9b037cc4; (* arm_MUL X4 X6 X3 *) + 0x8b06fca5; (* arm_ADD X5 X5 (Shiftedreg X6 LSL 63) *) + 0x9b437cc6; (* arm_SMULH X6 X6 X3 *) + 0xf9402be2; (* arm_LDR X2 SP (Immediate_Offset (word 80)) *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba060021; (* arm_ADCS X1 X1 X6 *) + 0x937ffcc6; (* arm_ASR X6 X6 63 *) + 0xba060042; (* arm_ADCS X2 X2 X6 *) + 0xba0600a5; (* arm_ADCS X5 X5 X6 *) + 0x9a9f4063; (* arm_CSEL X3 X3 XZR Condition_MI *) + 0xeb030000; (* arm_SUBS X0 X0 X3 *) + 0xfa1f0021; (* arm_SBCS X1 X1 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f00a5; (* arm_SBC X5 X5 XZR *) + 0x9240f8a5; (* arm_AND X5 X5 (rvalue (word 9223372036854775807)) *) + 0xaa1403e4; (* arm_MOV X4 X20 *) + 0xa9000480; (* arm_STP X0 X1 X4 (Immediate_Offset (iword (&0))) *) + 0xa9011482; (* arm_STP X2 X5 X4 (Immediate_Offset (iword (&16))) *) 0xaa1903f6; (* arm_MOV X22 X25 *) - 0x910103f7; (* arm_ADD X23 SP (rvalue (word 64)) *) - 0x910303f8; (* arm_ADD X24 SP (rvalue (word 192)) *) + 0x910283f7; (* arm_ADD X23 SP (rvalue (word 160)) *) + 0x910483f8; (* arm_ADD X24 SP (rvalue (word 288)) *) 0xa94012e3; (* arm_LDP X3 X4 X23 (Immediate_Offset (iword (&0))) *) 0xa9402307; (* arm_LDP X7 X8 X24 (Immediate_Offset (iword (&0))) *) 0x9b077c6c; (* arm_MUL X12 X3 X7 *) @@ -1547,8 +2261,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0xa90036cc; (* arm_STP X12 X13 X22 (Immediate_Offset (iword (&0))) *) 0xa9013ece; (* arm_STP X14 X15 X22 (Immediate_Offset (iword (&16))) *) 0x91008336; (* arm_ADD X22 X25 (rvalue (word 32)) *) - 0x910183f7; (* arm_ADD X23 SP (rvalue (word 96)) *) - 0x910303f8; (* arm_ADD X24 SP (rvalue (word 192)) *) + 0x910303f7; (* arm_ADD X23 SP (rvalue (word 192)) *) + 0x910483f8; (* arm_ADD X24 SP (rvalue (word 288)) *) 0xa94012e3; (* arm_LDP X3 X4 X23 (Immediate_Offset (iword (&0))) *) 0xa9402307; (* arm_LDP X7 X8 X24 (Immediate_Offset (iword (&0))) *) 0x9b077c6c; (* arm_MUL X12 X3 X7 *) @@ -4864,55 +5578,53 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x910303ff; (* arm_ADD SP SP (rvalue (word 192)) *) 0xd65f03c0 (* arm_RET X30 *) ] -[237; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 127; 62; 145; 64; 215; 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; - 253; 9; 138; 143; 104; 52; 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; - 68; 133; 59; 140; 245; 198; 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; - 207; 194; 66; 61; 100; 152; 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; - 104; 170; 122; 135; 5; 18; 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; - 140; 89; 67; 221; 203; 125; 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; - 168; 213; 180; 66; 96; 165; 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; - 170; 55; 110; 177; 107; 35; 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; - 215; 113; 60; 147; 252; 231; 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; - 2; 7; 214; 225; 101; 154; 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; - 155; 165; 179; 168; 250; 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; - 61; 11; 132; 160; 15; 80; 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; - 252; 164; 232; 31; 97; 86; 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; - 75; 33; 26; 243; 49; 129; 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; - 76; 168; 176; 37; 175; 138; 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; - 2; 80; 27; 193; 244; 248; 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; - 147; 174; 20; 98; 218; 53; 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; - 112; 209; 198; 180; 185; 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; - 149; 169; 250; 96; 86; 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; - 195; 154; 164; 69; 116; 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; - 56; 37; 253; 125; 244; 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; - 39; 135; 229; 33; 3; 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; - 193; 92; 123; 69; 57; 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; - 85; 99; 191; 12; 157; 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; - 39; 75; 209; 20; 0; 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; - 235; 115; 126; 74; 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; - 195; 72; 80; 141; 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; - 204; 69; 41; 133; 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; - 8; 14; 39; 45; 167; 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; - 170; 67; 164; 140; 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; - 87; 185; 83; 69; 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; - 49; 113; 21; 119; 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; - 167; 89; 218; 104; 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; - 75; 234; 2; 103; 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; - 59; 8; 75; 162; 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; - 170; 154; 44; 111; 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; - 79; 118; 234; 157; 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; - 208; 92; 26; 107; 210; 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; - 82; 178; 113; 126; 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; - 109; 131; 241; 154; 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; - 156; 82; 167; 144; 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; - 167; 226; 249; 88; 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; - 39; 44; 195; 1; 14; 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; - 44; 112; 136; 226; 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; - 47; 229; 188; 97; 96; 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; - 215; 167; 204; 139; 120; 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; - 149; 78; 204; 46; 92; 124; 144; 38];; +[62; 145; 64; 215; 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; + 138; 143; 104; 52; 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; + 59; 140; 245; 198; 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; + 66; 61; 100; 152; 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; + 122; 135; 5; 18; 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; + 67; 221; 203; 125; 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; + 180; 66; 96; 165; 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; + 110; 177; 107; 35; 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; + 60; 147; 252; 231; 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; + 225; 101; 154; 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; + 179; 168; 250; 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; + 132; 160; 15; 80; 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; 252; 164; + 232; 31; 97; 86; 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; + 243; 49; 129; 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; + 37; 175; 138; 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; + 244; 248; 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; + 98; 218; 53; 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; + 180; 185; 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; + 96; 86; 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; + 69; 116; 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; + 125; 244; 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; + 33; 3; 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; + 69; 57; 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; + 12; 157; 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; + 20; 0; 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; + 126; 74; 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; + 80; 141; 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; + 41; 133; 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; + 45; 167; 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; + 164; 140; 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; + 83; 69; 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; + 21; 119; 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; + 218; 104; 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; + 2; 103; 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; + 162; 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; + 111; 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; + 157; 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; + 210; 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; + 126; 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; + 154; 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; + 144; 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; + 88; 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; + 14; 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; + 226; 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; + 97; 96; 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; + 139; 120; 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; + 92; 124; 144; 38];; let EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC = ARM_MK_EXEC_RULE edwards25519_scalarmuldouble_alt_mc;; @@ -5108,32 +5820,32 @@ let GE25519_GROUPER = (MATCH_MP pth (CONJ th1 th2));; let BYTES_LOADED_DATA = prove - (`bytes_loaded s (word (pc + 0x4b78)) edwards25519_scalarmuldouble_alt_data <=> - read (memory :> bytes(word (pc + 0x4b78),800)) s = + (`bytes_loaded s (word (pc + 0x56a0)) edwards25519_scalarmuldouble_alt_data <=> + read (memory :> bytes(word (pc + 0x56a0),768)) s = num_of_bytelist edwards25519_scalarmuldouble_alt_data`, REWRITE_TAC[bytes_loaded; READ_BYTELIST_EQ_BYTES; CONV_RULE (RAND_CONV LENGTH_CONV) (AP_TERM `LENGTH:byte list->num` edwards25519_scalarmuldouble_alt_data)]);; let EDWARDS25519DOUBLEBASE_TABLE_LEMMA = prove - (`read (memory :> bytes(word (pc + 0x4b78),800)) s = + (`read (memory :> bytes(word (pc + 0x56a0),768)) s = num_of_bytelist edwards25519_scalarmuldouble_alt_data - ==> bignum_from_memory(word(pc + 0x4b78),4) s = p_25519 /\ - !i. i < 8 + ==> !i. i < 8 ==> edwards25519_epprojective (group_pow edwards25519_group E_25519 (i + 1)) - (bignum_from_memory(word(pc + 0x4b98 + 96 * i),4) s, - bignum_from_memory(word(pc + 0x4b98 + 96 * i + 32),4) s, - bignum_from_memory(word(pc + 0x4b98 + 96 * i + 64),4) s) /\ - ~(bignum_from_memory(word(pc + 0x4b98 + 96 * i + 64),4) s = + (bignum_from_memory(word(pc + 0x56a0 + 96 * i),4) s, + bignum_from_memory(word(pc + 0x56a0 + 96 * i + 32),4) s, + bignum_from_memory(word(pc + 0x56a0 + 96 * i + 64),4) s) /\ + ~(bignum_from_memory(word(pc + 0x56a0 + 96 * i + 64),4) s = 0)`, let GE25519_POWERS = end_itlist CONJ (funpow 7 (fun l -> GE25519_GROUPER GE25519_POW_1 (hd l)::l) [GE25519_POW_1]) in - REWRITE_TAC[GSYM BYTES_LOADED_DATA; edwards25519_scalarmuldouble_alt_data] THEN + REWRITE_TAC[GSYM BYTES_LOADED_DATA; + edwards25519_scalarmuldouble_alt_data] THEN CONV_TAC(LAND_CONV DATA64_CONV) THEN STRIP_TAC THEN - CONV_TAC(RAND_CONV EXPAND_CASES_CONV) THEN + CONV_TAC EXPAND_CASES_CONV THEN CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[WORD_ADD] THEN CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN REWRITE_TAC[GSYM WORD_ADD] THEN ASM_REWRITE_TAC[] THEN @@ -5159,13 +5871,13 @@ let lvs = "resy",[`X25`;`32`]; "scalar",[`SP`;`0`]; "bscalar",[`SP`;`32`]; - "acc",[`SP`;`64`]; - "acc_x",[`SP`;`64`]; - "acc_y",[`SP`;`96`]; - "acc_z",[`SP`;`128`]; - "acc_w",[`SP`;`160`]; - "tabent",[`SP`;`192`]; - "btabent",[`SP`;`320`]; + "btabent",[`SP`;`64`]; + "acc",[`SP`;`160`]; + "acc_x",[`SP`;`160`]; + "acc_y",[`SP`;`196`]; + "acc_z",[`SP`;`228`]; + "acc_w",[`SP`;`260`]; + "tabent",[`SP`;`288`]; "tab",[`SP`;`416`]; (*** These are local for the subroutines ***) @@ -5201,7 +5913,7 @@ let LOCAL_MUL_P25519_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x4e98) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x59a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read PC s = pcin /\ @@ -5371,7 +6083,7 @@ let LOCAL_MUL_4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x4e98) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x59a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read PC s = pcin /\ @@ -5530,7 +6242,7 @@ let LOCAL_SQR_4_TAC = read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x4e98) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x59a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read PC s = pcin /\ @@ -5687,7 +6399,7 @@ let LOCAL_ADD_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x4e98) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x59a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read PC s = pcin /\ @@ -5760,7 +6472,7 @@ let LOCAL_DOUBLE_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x4e98) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x59a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read PC s = pcin /\ @@ -5832,7 +6544,7 @@ let LOCAL_SUB_TWICE4_TAC = !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> aligned 16 (read SP t) /\ - nonoverlapping (word pc,0x4e98) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x59a0) (word_add (read p3 t) (word n3),8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read PC s = pcin /\ @@ -5906,20 +6618,15 @@ let LOCAL_SUB_TWICE4_TAC = (* ------------------------------------------------------------------------- *) let LOCAL_MODINV_TAC = - let cth = - (GEN_REWRITE_CONV RAND_CONV [bignum_modinv_mc] THENC TRIM_LIST_CONV) - `TRIM_LIST (12,12) bignum_modinv_mc` - and th = CONV_RULE (DEPTH_CONV WORD_NUM_RED_CONV) - (SPEC `word 4:int64` CORE_MODINV_CORRECT) in ARM_SUBROUTINE_SIM_TAC - (edwards25519_scalarmuldouble_alt_mc,EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC, - 0x1134,cth,th) - [`read X1 s`; `read X2 s`; - `read (memory :> bytes(read X2 s,8 * 4)) s`; - `read X3 s`; - `read (memory :> bytes(read X3 s,8 * 4)) s`; - `read X4 s`; - `pc + 0x1134`];; + (edwards25519_scalarmuldouble_alt_mc, + EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC,0x1128, + (GEN_REWRITE_CONV RAND_CONV [bignum_inv_p25519_mc] THENC TRIM_LIST_CONV) + `TRIM_LIST (12,16) bignum_inv_p25519_mc`, + CORE_INV_P25519_CORRECT) + [`read X0 s`; `read X1 s`; + `read (memory :> bytes(read X1 s,8 * 4)) s`; + `pc + 0x1128`; `word_add stackpointer (word 192):int64`];; (* ------------------------------------------------------------------------- *) (* Embedded subroutine correctness. *) @@ -5929,17 +6636,17 @@ let LOCAL_EPDOUBLE_CORRECT = time prove (`!p3 p1 T1 pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,160)) - [(word pc,0x4e98); (p3,128); (p1,96)] /\ - nonoverlapping (p3,128) (word pc,0x4e98) + [(word pc,0x59a0); (p3,128); (p1,96)] /\ + nonoverlapping (p3,128) (word pc,0x59a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ - read PC s = word(pc + 0x195c) /\ + read PC s = word(pc + 0x2484) /\ read SP s = stackpointer /\ read X22 s = p3 /\ read X23 s = p1 /\ bignum_triple_from_memory(p1,4) s = T1) - (\s. read PC s = word (pc + 0x2534) /\ + (\s. read PC s = word (pc + 0x305c) /\ !P1. P1 IN group_carrier edwards25519_group /\ edwards25519_projective2 P1 T1 ==> edwards25519_exprojective2 @@ -6036,17 +6743,17 @@ let LOCAL_PDOUBLE_CORRECT = time prove (`!p3 p1 T1 pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,160)) - [(word pc,0x4e98); (p3,96); (p1,96)] /\ - nonoverlapping (p3,96) (word pc,0x4e98) + [(word pc,0x59a0); (p3,96); (p1,96)] /\ + nonoverlapping (p3,96) (word pc,0x59a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ - read PC s = word(pc + 0x2540) /\ + read PC s = word(pc + 0x3068) /\ read SP s = stackpointer /\ read X22 s = p3 /\ read X23 s = p1 /\ bignum_triple_from_memory(p1,4) s = T1) - (\s. read PC s = word (pc + 0x2fa0) /\ + (\s. read PC s = word (pc + 0x3ac8) /\ !P1. P1 IN group_carrier edwards25519_group /\ edwards25519_projective2 P1 T1 ==> edwards25519_projective2 @@ -6146,19 +6853,19 @@ let LOCAL_EPADD_CORRECT = time prove (`!p3 p1 Q1 p2 Q2 pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,192)) - [(word pc,0x4e98); (p3,128); (p1,128); (p2,128)] /\ - nonoverlapping (p3,128) (word pc,0x4e98) + [(word pc,0x59a0); (p3,128); (p1,128); (p2,128)] /\ + nonoverlapping (p3,128) (word pc,0x59a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ - read PC s = word(pc + 0x2fac) /\ + read PC s = word(pc + 0x3ad4) /\ read SP s = stackpointer /\ read X22 s = p3 /\ read X23 s = p1 /\ read X24 s = p2 /\ bignum_quadruple_from_memory(p1,4) s = Q1 /\ bignum_quadruple_from_memory(p2,4) s = Q2) - (\s. read PC s = word (pc + 0x3f64) /\ + (\s. read PC s = word (pc + 0x4a8c) /\ !P1 P2. P1 IN group_carrier edwards25519_group /\ P2 IN group_carrier edwards25519_group /\ edwards25519_exprojective2 P1 Q1 /\ @@ -6294,19 +7001,19 @@ let LOCAL_PEPADD_CORRECT = time prove (`!p3 p1 Q1 p2 T2 pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,192)) - [(word pc,0x4e98); (p3,128); (p1,128); (p2,96)] /\ - nonoverlapping (p3,128) (word pc,0x4e98) + [(word pc,0x59a0); (p3,128); (p1,128); (p2,96)] /\ + nonoverlapping (p3,128) (word pc,0x59a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ - read PC s = word(pc + 0x3f70) /\ + read PC s = word(pc + 0x4a98) /\ read SP s = stackpointer /\ read X22 s = p3 /\ read X23 s = p1 /\ read X24 s = p2 /\ bignum_quadruple_from_memory(p1,4) s = Q1 /\ bignum_triple_from_memory(p2,4) s = T2) - (\s. read PC s = word (pc + 0x4b70) /\ + (\s. read PC s = word (pc + 0x5698) /\ !P1 P2. P1 IN group_carrier edwards25519_group /\ P2 IN group_carrier edwards25519_group /\ edwards25519_exprojective2w P1 Q1 /\ @@ -6436,8 +7143,8 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove (`!res scalar point bscalar n xy m pc stackpointer. aligned 16 stackpointer /\ ALL (nonoverlapping (stackpointer,1632)) - [(word pc,0x4e98); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ - nonoverlapping (res,64) (word pc,0x4e98) + [(word pc,0x59a0); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ + nonoverlapping (res,64) (word pc,0x59a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) (APPEND edwards25519_scalarmuldouble_alt_mc @@ -6448,7 +7155,7 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove bignum_from_memory (scalar,4) s = n /\ bignum_pair_from_memory (point,4) s = xy /\ bignum_from_memory (bscalar,4) s = m) - (\s. read PC s = word (pc + 0x1940) /\ + (\s. read PC s = word (pc + 0x2468) /\ !P. P IN group_carrier edwards25519_group /\ paired (modular_decode (256,p_25519)) xy = P ==> bignum_pair_from_memory(res,4) s = @@ -6530,7 +7237,7 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ENSURES_WHILE_DOWN_TAC `63` `pc + 0x990` `pc + 0x111c` `\i s. - read (memory :> bytes(word(pc + 0x4b78),800)) s = + read (memory :> bytes(word(pc + 0x56a0),768)) s = num_of_bytelist edwards25519_scalarmuldouble_alt_data /\ read SP s = word_add stackpointer (word 192) /\ read X25 s = res /\ @@ -6551,7 +7258,7 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove (group_zpow edwards25519_group E_25519 (&(m DIV 2 EXP (4 * i)) - &(recoder DIV 2 EXP (4 * i))))) (bignum_quadruple_from_memory - (word_add stackpointer (word 256),4) s)` THEN + (word_add stackpointer (word 352),4) s)` THEN REPEAT CONJ_TAC THENL [ARITH_TAC; @@ -6971,11 +7678,11 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove (*** Address the precomputed table separately ***) - FIRST_ASSUM(MP_TAC o CONJUNCT2 o + FIRST_ASSUM(MP_TAC o MATCH_MP EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[ARITH_RULE `pc + 0x4b98 + x = (pc + 0x4b98) + x`] THEN + REWRITE_TAC[ARITH_RULE `pc + 0x56a0 + x = (pc + 0x56a0) + x`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `wpc:int64 = word(pc + 0x4b98)` THEN + ABBREV_TAC `wpc:int64 = word(pc + 0x56a0)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD_0] THEN @@ -6992,9 +7699,9 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ABBREV_TAC `ix = m DIV 2 EXP 252` THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (128--304) THEN MAP_EVERY ABBREV_TAC - [`XPY = read(memory :> bytes(word_add stackpointer (word 512),8 * 4)) s304`; - `YMX = read(memory :> bytes(word_add stackpointer (word 544),8 * 4)) s304`; - `KXY = read(memory :> bytes(word_add stackpointer (word 576),8 * 4)) s304`] + [`XPY = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s304`; + `YMX = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s304`; + `KXY = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s304`] THEN SUBGOAL_THEN `edwards25519_epprojective (group_pow edwards25519_group E_25519 ix) @@ -7014,7 +7721,8 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove REWRITE_TAC[bignum_of_wordlist; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN REWRITE_TAC[d_25519; p_25519] THEN CONV_TAC INT_REDUCE_CONV; - REPEAT(FIRST_X_ASSUM(K ALL_TAC o check(free_in `wpc:int64` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check(free_in `word_add (wpc:int64)` o concl))) THEN UNDISCH_THEN `m DIV 2 EXP 252 = ix` (SUBST_ALL_TAC o SYM) THEN DISCARD_MATCHING_ASSUMPTIONS [`read c s = if x then y else z`] THEN CLARIFY_TAC] THEN @@ -7040,10 +7748,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove CLARIFY_TAC THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (308--538) THEN MAP_EVERY ABBREV_TAC - [`Xt = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s538`; - `Yt = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s538`; - `Zt = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s538`; - `Wt = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s538`] + [`Xt = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s538`; + `Yt = read(memory :> bytes(word_add stackpointer (word 512),8 * 4)) s538`; + `Zt = read(memory :> bytes(word_add stackpointer (word 544),8 * 4)) s538`; + `Wt = read(memory :> bytes(word_add stackpointer (word 576),8 * 4)) s538`] THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -7147,22 +7855,19 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o MATCH_MP (MESON[] `(!x. P x ==> Q x /\ R x) ==> (!x. P x ==> R x)`)) THEN MAP_EVERY ABBREV_TAC - [`X = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s0`; - `Y = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s0`; - `Z = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s0`; - `W = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s0`] + [`X = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s0`; + `Y = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s0`; + `Z = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s0`; + `W = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s0`] THEN DISCH_TAC THEN (*** Call the modular inverse ***) - FIRST_X_ASSUM(MP_TAC o CONJUNCT1 o MATCH_MP - EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN DISCH_TAC THEN - ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (1--6) THEN - LOCAL_MODINV_TAC 7 THEN + ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (1--3) THEN + LOCAL_MODINV_TAC 4 THEN ABBREV_TAC `Z' = - read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s7` THEN + read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s4` THEN (*** Final multiplications ***) @@ -7192,12 +7897,17 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove SIMP_TAC[INT_OF_NUM_OF_INT; INT_REM_POS_EQ; INT_OF_NUM_EQ; ARITH_EQ] THEN REWRITE_TAC[GSYM p_25519; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ_0; INT_REM_EQ] THEN - STRIP_TAC THEN FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN - ONCE_REWRITE_TAC[COPRIME_SYM] THEN - SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519] THEN - ASM_REWRITE_TAC[num_divides; num_congruent] THEN ANTS_TAC THENL - [REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; - REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES]] THEN + STRIP_TAC THEN + SUBGOAL_THEN `Z' < p_25519 /\ (Z * Z' == 1) (mod p_25519)` + MP_TAC THENL + [FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN MATCH_MP_TAC(TAUT + `p /\ (q ==> r) /\ (p /\ q ==> s) ==> (p ==> q) ==> r /\ s`) THEN + REPEAT CONJ_TAC THENL + [ASM_SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; num_divides]; + DISCH_THEN SUBST1_TAC THEN REWRITE_TAC[INVERSE_MOD_BOUND] THEN + REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; + MESON_TAC[INVERSE_MOD_RMUL]]; + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; num_congruent]] THEN DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN MATCH_MP_TAC(INTEGER_RULE `(x * z:int == X) (mod p) /\ (y * z == Y) (mod p) @@ -7218,13 +7928,13 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN GHOST_INTRO_TAC `Xa:num` - `bignum_from_memory (word_add stackpointer (word 256),4)` THEN + `bignum_from_memory (word_add stackpointer (word 352),4)` THEN GHOST_INTRO_TAC `Ya:num` - `bignum_from_memory (word_add stackpointer (word 288),4)` THEN + `bignum_from_memory (word_add stackpointer (word 384),4)` THEN GHOST_INTRO_TAC `Za:num` - `bignum_from_memory (word_add stackpointer (word 320),4)` THEN + `bignum_from_memory (word_add stackpointer (word 416),4)` THEN GHOST_INTRO_TAC `Wa:num` - `bignum_from_memory(word_add stackpointer (word 352),4)` THEN + `bignum_from_memory(word_add stackpointer (word 448),4)` THEN REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN (*** Doubling to acc' = 2 * acc ***) @@ -7233,9 +7943,9 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove RULE_ASSUM_TAC(REWRITE_RULE[WORD_RULE `word_sub (word (4 * (i + 1))) (word 4) = word(4 * i)`]) THEN LOCAL_PDOUBLE_TAC 6 THEN MAP_EVERY ABBREV_TAC - [`X2a = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s6`; - `Y2a = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s6`; - `Z2a = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s6` + [`X2a = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s6`; + `Y2a = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s6`; + `Z2a = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s6` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (7--8) THEN @@ -7301,11 +8011,11 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove (*** Address the precomputed table separately ***) - FIRST_ASSUM(MP_TAC o CONJUNCT2 o + FIRST_ASSUM(MP_TAC o MATCH_MP EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[ARITH_RULE `pc + 0x4b98 + x = (pc + 0x4b98) + x`] THEN + REWRITE_TAC[ARITH_RULE `pc + 0x56a0 + x = (pc + 0x56a0) + x`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `wpc:int64 = word(pc + 0x4b98)` THEN + ABBREV_TAC `wpc:int64 = word(pc + 0x56a0)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD_0] THEN @@ -7352,16 +8062,17 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove REWRITE_TAC[bignum_of_wordlist; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN REWRITE_TAC[d_25519; p_25519] THEN CONV_TAC INT_REDUCE_CONV; - REPEAT(FIRST_X_ASSUM(K ALL_TAC o check(free_in `wpc:int64` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check(free_in `word_add (wpc:int64)` o concl))) THEN CLARIFY_TAC] THEN (*** Optional negation of the table entry ***) ARM_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (204--207) (189--213) THEN MAP_EVERY ABBREV_TAC - [`XPY = read(memory :> bytes(word_add stackpointer (word 512),8 * 4)) s213`; - `YMX = read(memory :> bytes(word_add stackpointer (word 544),8 * 4)) s213`; - `KXY = read(memory :> bytes(word_add stackpointer (word 576),8 * 4)) s213`] + [`XPY = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s213`; + `YMX = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s213`; + `KXY = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s213`] THEN SUBGOAL_THEN `edwards25519_epprojectivew @@ -7538,10 +8249,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ARM_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC [451;452;453;454;459;460;461;462] (445--470) THEN MAP_EVERY ABBREV_TAC - [`Xb = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s470`; - `Yb = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s470`; - `Zb = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s470`; - `Wb = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s470`] + [`Xb = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s470`; + `Yb = read(memory :> bytes(word_add stackpointer (word 512),8 * 4)) s470`; + `Zb = read(memory :> bytes(word_add stackpointer (word 544),8 * 4)) s470`; + `Wb = read(memory :> bytes(word_add stackpointer (word 576),8 * 4)) s470`] THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -7595,9 +8306,9 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (471--474) THEN LOCAL_PDOUBLE_TAC 475 THEN MAP_EVERY ABBREV_TAC - [`X4a = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s475`; - `Y4a = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s475`; - `Z4a = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s475` + [`X4a = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s475`; + `Y4a = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s475`; + `Z4a = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s475` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (476--477) THEN @@ -7605,10 +8316,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (478--482) THEN LOCAL_PEPADD_TAC 483 THEN MAP_EVERY ABBREV_TAC - [`Xc = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s483`; - `Yc = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s483`; - `Zc = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s483`; - `Wc = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s483` + [`Xc = read(memory :> bytes(word_add stackpointer (word 480),8 * 4)) s483`; + `Yc = read(memory :> bytes(word_add stackpointer (word 512),8 * 4)) s483`; + `Zc = read(memory :> bytes(word_add stackpointer (word 544),8 * 4)) s483`; + `Wc = read(memory :> bytes(word_add stackpointer (word 576),8 * 4)) s483` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (484--485) THEN @@ -7616,9 +8327,9 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (486--489) THEN LOCAL_PDOUBLE_TAC 490 THEN MAP_EVERY ABBREV_TAC - [`X8a = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s490`; - `Y8a = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s490`; - `Z8a = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s490` + [`X8a = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s490`; + `Y8a = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s490`; + `Z8a = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s490` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (491--492) THEN @@ -7626,10 +8337,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (493--496) THEN LOCAL_EPDOUBLE_TAC 497 THEN MAP_EVERY ABBREV_TAC - [`Xha = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s497`; - `Yha = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s497`; - `Zha = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s497`; - `Wha = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s497` + [`Xha = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s497`; + `Yha = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s497`; + `Zha = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s497`; + `Wha = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s497` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (498--499) THEN @@ -7637,10 +8348,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (500--504) THEN LOCAL_EPADD_TAC 505 THEN MAP_EVERY ABBREV_TAC - [`Xf = read(memory :> bytes(word_add stackpointer (word 256),8 * 4)) s505`; - `Yf = read(memory :> bytes(word_add stackpointer (word 288),8 * 4)) s505`; - `Zf = read(memory :> bytes(word_add stackpointer (word 320),8 * 4)) s505`; - `Wf = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s505` + [`Xf = read(memory :> bytes(word_add stackpointer (word 352),8 * 4)) s505`; + `Yf = read(memory :> bytes(word_add stackpointer (word 384),8 * 4)) s505`; + `Zf = read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s505`; + `Wf = read(memory :> bytes(word_add stackpointer (word 448),8 * 4)) s505` ] THEN ARM_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (506--507) THEN @@ -7733,8 +8444,8 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_SUBROUTINE_CORRECT = time prove (`!res scalar point bscalar n xy m pc stackpointer returnaddress. aligned 16 stackpointer /\ ALL (nonoverlapping (word_sub stackpointer (word 1696),1696)) - [(word pc,0x4e98); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ - nonoverlapping (res,64) (word pc,0x4e98) + [(word pc,0x59a0); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ + nonoverlapping (res,64) (word pc,0x59a0) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) (APPEND edwards25519_scalarmuldouble_alt_mc diff --git a/x86/Makefile b/x86/Makefile index 64204a31..a1516121 100644 --- a/x86/Makefile +++ b/x86/Makefile @@ -420,10 +420,10 @@ curve25519/curve25519_x25519base.correct: curve25519/bignum_inv_p25519.o curve25 curve25519/curve25519_x25519base_alt.correct: curve25519/bignum_inv_p25519.o curve25519/bignum_inv_p25519.obj proofs/curve25519_x25519base_alt.ml curve25519/curve25519_x25519base_alt.o curve25519/curve25519_x25519base_alt.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/curve25519_x25519base_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ curve25519/curve25519_x25519base_byte.correct: curve25519/bignum_inv_p25519.o curve25519/bignum_inv_p25519.obj proofs/curve25519_x25519base_byte.ml curve25519/curve25519_x25519base_byte.o curve25519/curve25519_x25519base_byte.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/curve25519_x25519base_byte.ml";;') | $(HOLLIGHT) 2>&1) >$@ curve25519/curve25519_x25519base_byte_alt.correct: curve25519/bignum_inv_p25519.o curve25519/bignum_inv_p25519.obj proofs/curve25519_x25519base_byte_alt.ml curve25519/curve25519_x25519base_byte_alt.o curve25519/curve25519_x25519base_byte_alt.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/curve25519_x25519base_byte_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ -curve25519/edwards25519_scalarmulbase.correct: generic/bignum_modinv.o generic/bignum_modinv.obj proofs/edwards25519_scalarmulbase.ml curve25519/edwards25519_scalarmulbase.o curve25519/edwards25519_scalarmulbase.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/edwards25519_scalarmulbase.ml";;') | $(HOLLIGHT) 2>&1) >$@ -curve25519/edwards25519_scalarmulbase_alt.correct: generic/bignum_modinv.o generic/bignum_modinv.obj proofs/edwards25519_scalarmulbase_alt.ml curve25519/edwards25519_scalarmulbase_alt.o curve25519/edwards25519_scalarmulbase_alt.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/edwards25519_scalarmulbase_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ -curve25519/edwards25519_scalarmuldouble.correct: generic/bignum_modinv.o generic/bignum_modinv.obj proofs/edwards25519_scalarmuldouble.ml curve25519/edwards25519_scalarmuldouble.o curve25519/edwards25519_scalarmuldouble.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/edwards25519_scalarmuldouble.ml";;') | $(HOLLIGHT) 2>&1) >$@ -curve25519/edwards25519_scalarmuldouble_alt.correct: generic/bignum_modinv.o generic/bignum_modinv.obj proofs/edwards25519_scalarmuldouble_alt.ml curve25519/edwards25519_scalarmuldouble_alt.o curve25519/edwards25519_scalarmuldouble_alt.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/edwards25519_scalarmuldouble_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ +curve25519/edwards25519_scalarmulbase.correct: curve25519/bignum_inv_p25519.o curve25519/bignum_inv_p25519.obj proofs/edwards25519_scalarmulbase.ml curve25519/edwards25519_scalarmulbase.o curve25519/edwards25519_scalarmulbase.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/edwards25519_scalarmulbase.ml";;') | $(HOLLIGHT) 2>&1) >$@ +curve25519/edwards25519_scalarmulbase_alt.correct: curve25519/bignum_inv_p25519.o curve25519/bignum_inv_p25519.obj proofs/edwards25519_scalarmulbase_alt.ml curve25519/edwards25519_scalarmulbase_alt.o curve25519/edwards25519_scalarmulbase_alt.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/edwards25519_scalarmulbase_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ +curve25519/edwards25519_scalarmuldouble.correct: curve25519/bignum_inv_p25519.o curve25519/bignum_inv_p25519.obj proofs/edwards25519_scalarmuldouble.ml curve25519/edwards25519_scalarmuldouble.o curve25519/edwards25519_scalarmuldouble.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/edwards25519_scalarmuldouble.ml";;') | $(HOLLIGHT) 2>&1) >$@ +curve25519/edwards25519_scalarmuldouble_alt.correct: curve25519/bignum_inv_p25519.o curve25519/bignum_inv_p25519.obj proofs/edwards25519_scalarmuldouble_alt.ml curve25519/edwards25519_scalarmuldouble_alt.o curve25519/edwards25519_scalarmuldouble_alt.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/edwards25519_scalarmuldouble_alt.ml";;') | $(HOLLIGHT) 2>&1) >$@ generic/bignum_modexp.correct: generic/bignum_amontifier.correct generic/bignum_amontmul.correct generic/bignum_demont.correct generic/bignum_mux.correct proofs/bignum_modexp.ml generic/bignum_modexp.o generic/bignum_modexp.obj ; (cd ..; (echo 'loadt "x86/proofs/base.ml";;'; echo 'loadt "x86/proofs/bignum_modexp.ml";;') | $(HOLLIGHT) 2>&1) >$@ # All other other instances are standalone diff --git a/x86/curve25519/edwards25519_scalarmulbase.S b/x86/curve25519/edwards25519_scalarmulbase.S index a9759d4e..129cc205 100644 --- a/x86/curve25519/edwards25519_scalarmulbase.S +++ b/x86/curve25519/edwards25519_scalarmulbase.S @@ -38,23 +38,22 @@ #define xpy_2 rsp+(2*NUMSIZE) #define kxy_2 rsp+(3*NUMSIZE) -#define acc rsp+(4*NUMSIZE) -#define x_1 rsp+(4*NUMSIZE) -#define y_1 rsp+(5*NUMSIZE) -#define z_1 rsp+(6*NUMSIZE) -#define w_1 rsp+(7*NUMSIZE) -#define x_3 rsp+(4*NUMSIZE) -#define y_3 rsp+(5*NUMSIZE) -#define z_3 rsp+(6*NUMSIZE) -#define w_3 rsp+(7*NUMSIZE) - -#define tmpspace rsp+(8*NUMSIZE) -#define t0 rsp+(8*NUMSIZE) -#define t1 rsp+(9*NUMSIZE) -#define t2 rsp+(10*NUMSIZE) -#define t3 rsp+(11*NUMSIZE) -#define t4 rsp+(12*NUMSIZE) -#define t5 rsp+(13*NUMSIZE) +#define t0 rsp+(4*NUMSIZE) +#define t1 rsp+(5*NUMSIZE) +#define t2 rsp+(6*NUMSIZE) +#define t3 rsp+(7*NUMSIZE) +#define t4 rsp+(8*NUMSIZE) +#define t5 rsp+(9*NUMSIZE) + +#define acc rsp+(10*NUMSIZE) +#define x_1 rsp+(10*NUMSIZE) +#define y_1 rsp+(11*NUMSIZE) +#define z_1 rsp+(12*NUMSIZE) +#define w_1 rsp+(13*NUMSIZE) +#define x_3 rsp+(10*NUMSIZE) +#define y_3 rsp+(11*NUMSIZE) +#define z_3 rsp+(12*NUMSIZE) +#define w_3 rsp+(13*NUMSIZE) // Stable homes for the input result pointer, and other variables @@ -73,6 +72,15 @@ #define NSPACE (15*NUMSIZE+8) +// Syntactic variants to make x86_att version simpler to generate + +#define SCALAR 0 +#define TABENT (1*NUMSIZE) +#define ACC (10*NUMSIZE) +#define X3 (10*NUMSIZE) +#define Z3 (12*NUMSIZE) +#define W3 (13*NUMSIZE) + // Macro wrapping up the basic field multiplication, only trivially // different from a pure function call to bignum_mul_p25519. @@ -337,12 +345,12 @@ S2N_BN_SYMBOL(edwards25519_scalarmulbase): push rsi mov rdi, rcx mov rsi, rdx - call edwards25519_scalarmulbase_curve25519_x25519base_standard + call edwards25519_scalarmulbase_standard pop rsi pop rdi ret -edwards25519_scalarmulbase_curve25519_x25519base_standard: +edwards25519_scalarmulbase_standard: #endif // Save registers, make room for temps, preserve input arguments. @@ -413,11 +421,11 @@ edwards25519_scalarmulbase_curve25519_x25519base_standard: // And before we store the scalar, test and reset bit 251 to // initialize the main loop just below. - mov [rsp], r8 - mov [rsp+8], r9 - mov [rsp+16], r10 + mov [rsp+SCALAR], r8 + mov [rsp+SCALAR+8], r9 + mov [rsp+SCALAR+16], r10 btr r11, 59 - mov [rsp+24], r11 + mov [rsp+SCALAR+24], r11 // The main part of the computation is in extended-projective coordinates // (X,Y,Z,T), representing an affine point on the edwards25519 curve @@ -428,75 +436,75 @@ edwards25519_scalarmulbase_curve25519_x25519base_standard: // Initialize accumulator "acc" to either 0 or 2^251 * B depending on // bit 251 of the (reduced) scalar. That leaves bits 0..250 to handle. - lea r10, [rip+edwards25519_scalarmulbase_edwards25519_0g] - lea r11, [rip+edwards25519_scalarmulbase_edwards25519_251g] + lea r10, [rip+edwards25519_scalarmulbase_0g] + lea r11, [rip+edwards25519_scalarmulbase_251g] mov rax, [r10] mov rcx, [r11] cmovc rax, rcx - mov [rsp+8*16], rax + mov [rsp+ACC], rax mov rax, [r10+8*1] mov rcx, [r11+8*1] cmovc rax, rcx - mov [rsp+8*17], rax + mov [rsp+ACC+8], rax mov rax, [r10+8*2] mov rcx, [r11+8*2] cmovc rax, rcx - mov [rsp+8*18], rax + mov [rsp+ACC+16], rax mov rax, [r10+8*3] mov rcx, [r11+8*3] cmovc rax, rcx - mov [rsp+8*19], rax + mov [rsp+ACC+24], rax mov rax, [r10+8*4] mov rcx, [r11+8*4] cmovc rax, rcx - mov [rsp+8*20], rax + mov [rsp+ACC+32], rax mov rax, [r10+8*5] mov rcx, [r11+8*5] cmovc rax, rcx - mov [rsp+8*21], rax + mov [rsp+ACC+40], rax mov rax, [r10+8*6] mov rcx, [r11+8*6] cmovc rax, rcx - mov [rsp+8*22], rax + mov [rsp+ACC+48], rax mov rax, [r10+8*7] mov rcx, [r11+8*7] cmovc rax, rcx - mov [rsp+8*23], rax + mov [rsp+ACC+56], rax mov eax, 1 - mov [rsp+8*24], rax + mov [rsp+ACC+64], rax mov eax, 0 - mov [rsp+8*25], rax - mov [rsp+8*26], rax - mov [rsp+8*27], rax + mov [rsp+ACC+72], rax + mov [rsp+ACC+80], rax + mov [rsp+ACC+88], rax mov rax, [r10+8*8] mov rcx, [r11+8*8] cmovc rax, rcx - mov [rsp+8*28], rax + mov [rsp+ACC+96], rax mov rax, [r10+8*9] mov rcx, [r11+8*9] cmovc rax, rcx - mov [rsp+8*29], rax + mov [rsp+ACC+104], rax mov rax, [r10+8*10] mov rcx, [r11+8*10] cmovc rax, rcx - mov [rsp+8*30], rax + mov [rsp+ACC+112], rax mov rax, [r10+8*11] mov rcx, [r11+8*11] cmovc rax, rcx - mov [rsp+8*31], rax + mov [rsp+ACC+120], rax // The counter "i" tracks the bit position for which the scalar has // already been absorbed, starting at 0 and going up in chunks of 4. @@ -512,7 +520,7 @@ edwards25519_scalarmulbase_curve25519_x25519base_standard: // end because we made sure bit 251 is clear in the reduced scalar. mov i, 0 - lea rax, [rip+edwards25519_scalarmulbase_edwards25519_gtable] + lea rax, [rip+edwards25519_scalarmulbase_gtable] mov tab, rax mov bias, 0 @@ -804,26 +812,26 @@ edwards25519_scalarmulbase_scalarloop: mov rsi, rax cmovnz rsi, r8 cmovnz r8, rax - mov [rsp+32], rsi - mov [rsp+64], r8 + mov [rsp+TABENT], rsi + mov [rsp+TABENT+32], r8 mov rsi, rbx cmovnz rsi, r9 cmovnz r9, rbx - mov [rsp+40], rsi - mov [rsp+72], r9 + mov [rsp+TABENT+8], rsi + mov [rsp+TABENT+40], r9 mov rsi, rcx cmovnz rsi, r10 cmovnz r10, rcx - mov [rsp+48], rsi - mov [rsp+80], r10 + mov [rsp+TABENT+16], rsi + mov [rsp+TABENT+48], r10 mov rsi, rdx cmovnz rsi, r11 cmovnz r11, rdx - mov [rsp+56], rsi - mov [rsp+88], r11 + mov [rsp+TABENT+24], rsi + mov [rsp+TABENT+56], r11 mov rax, -19 mov rbx, -1 @@ -844,10 +852,10 @@ edwards25519_scalarmulbase_scalarloop: cmovz rbx, r13 cmovz rcx, r14 cmovz rdx, r15 - mov [rsp+96], rax - mov [rsp+104], rbx - mov [rsp+112], rcx - mov [rsp+120], rdx + mov [rsp+TABENT+64], rax + mov [rsp+TABENT+72], rbx + mov [rsp+TABENT+80], rcx + mov [rsp+TABENT+88], rdx // Extended-projective and precomputed mixed addition. // This is effectively the same as calling the standalone @@ -884,10 +892,10 @@ edwards25519_scalarmulbase_scalarloop: // point on we don't need any normalization of the coordinates // except for making sure that they fit in 4 digits. - mov r8, [rsp+128] - mov r9, [rsp+136] - mov r10, [rsp+144] - mov r11, [rsp+152] + mov r8, [rsp+X3] + mov r9, [rsp+X3+8] + mov r10, [rsp+X3+16] + mov r11, [rsp+X3+24] mov r12, 0xffffffffffffffda sub r12, r8 mov r13, 0xffffffffffffffff @@ -896,424 +904,1377 @@ edwards25519_scalarmulbase_scalarloop: sbb r14, r10 mov r15, 0xffffffffffffffff sbb r15, r11 - mov rax, [rsp+24] + mov rax, [rsp+SCALAR+24] bt rax, 63 cmovc r8, r12 cmovc r9, r13 cmovc r10, r14 cmovc r11, r15 - mov [rsp+128], r8 - mov [rsp+136], r9 - mov [rsp+144], r10 - mov [rsp+152], r11 + mov [rsp+X3], r8 + mov [rsp+X3+8], r9 + mov [rsp+X3+16], r10 + mov [rsp+X3+24], r11 // Now we need to map out of the extended-projective representation // (X,Y,Z,W) back to the affine form (x,y) = (X/Z,Y/Z). This means // first calling the modular inverse to get w_3 = 1/z_3. - mov rdi, 4 - lea rsi, [rsp+224] - lea rdx, [rsp+192] - lea rcx, [rip+edwards25519_scalarmulbase_p_25519] - lea r8, [rsp+256] - -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "x86/generic/bignum_modinv.S". Note -// that the stack it uses for its own temporaries is 80 bytes so it -// only overwrites local variables that are no longer needed. - - mov [rsp+0x40], rsi - mov [rsp+0x38], r8 - mov [rsp+0x48], rcx - lea r10, [r8+8*rdi] - mov [rsp+0x30], r10 - lea r15, [r10+8*rdi] - xor r11, r11 - xor r9, r9 -edwards25519_scalarmulbase_copyloop: - mov rax, [rdx+8*r9] - mov rbx, [rcx+8*r9] - mov [r10+8*r9], rax - mov [r15+8*r9], rbx - mov [r8+8*r9], rbx - mov [rsi+8*r9], r11 - inc r9 - cmp r9, rdi - jb edwards25519_scalarmulbase_copyloop - mov rax, [r8] - mov rbx, rax - dec rbx - mov [r8], rbx - mov rbp, rax - mov r12, rax - shl rbp, 0x2 - sub r12, rbp - xor r12, 0x2 - mov rbp, r12 - imul rbp, rax - mov eax, 0x2 - add rax, rbp - add rbp, 0x1 - imul r12, rax - imul rbp, rbp - mov eax, 0x1 - add rax, rbp - imul r12, rax - imul rbp, rbp - mov eax, 0x1 - add rax, rbp - imul r12, rax - imul rbp, rbp + lea rdi, [rsp+W3] + lea rsi, [rsp+Z3] + +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "x86/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 208 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, x_3, y_3, +// z_3 and w_3. + + mov [rsp+0xc0], rdi + xor eax, eax + lea rcx, [rax-0x13] + not rax + mov [rsp], rcx + mov [rsp+0x8], rax + mov [rsp+0x10], rax + btr rax, 0x3f + mov [rsp+0x18], rax + mov rdx, [rsi] + mov rcx, [rsi+0x8] + mov r8, [rsi+0x10] + mov r9, [rsi+0x18] mov eax, 0x1 - add rax, rbp - imul r12, rax - mov [rsp+0x28], r12 - mov rax, rdi - shl rax, 0x7 - mov [rsp+0x20], rax -edwards25519_scalarmulbase_outerloop: - mov r13, [rsp+0x20] - add r13, 0x3f - shr r13, 0x6 - cmp r13, rdi - cmovae r13, rdi - xor r12, r12 - xor r14, r14 - xor rbp, rbp - xor rsi, rsi - xor r11, r11 - mov r8, [rsp+0x30] - lea r15, [r8+8*rdi] - xor r9, r9 -edwards25519_scalarmulbase_toploop: - mov rbx, [r8+8*r9] - mov rcx, [r15+8*r9] - mov r10, r11 - and r10, r12 - and r11, rbp - mov rax, rbx - or rax, rcx - neg rax - cmovb r14, r10 - cmovb rsi, r11 - cmovb r12, rbx - cmovb rbp, rcx - sbb r11, r11 - inc r9 - cmp r9, r13 - jb edwards25519_scalarmulbase_toploop - mov rax, r12 - or rax, rbp - bsr rcx, rax - xor rcx, 0x3f - shld r12, r14, cl - shld rbp, rsi, cl - mov rax, [r8] - mov r14, rax - mov rax, [r15] - mov rsi, rax - mov r10d, 0x1 - mov r11d, 0x0 - mov ecx, 0x0 - mov edx, 0x1 - mov r9d, 0x3a - mov [rsp+0x8], rdi - mov [rsp+0x10], r13 - mov [rsp], r8 - mov [rsp+0x18], r15 -edwards25519_scalarmulbase_innerloop: + xor r10d, r10d + bts r9, 0x3f + adc rax, r10 + imul rax, rax, 0x13 + add rdx, rax + adc rcx, r10 + adc r8, r10 + adc r9, r10 + mov eax, 0x13 + cmovb rax, r10 + sub rdx, rax + sbb rcx, r10 + sbb r8, r10 + sbb r9, r10 + btr r9, 0x3f + mov [rsp+0x20], rdx + mov [rsp+0x28], rcx + mov [rsp+0x30], r8 + mov [rsp+0x38], r9 xor eax, eax + mov [rsp+0x40], rax + mov [rsp+0x48], rax + mov [rsp+0x50], rax + mov [rsp+0x58], rax + movabs rax, 0xa0f99e2375022099 + mov [rsp+0x60], rax + movabs rax, 0xa8c68f3f1d132595 + mov [rsp+0x68], rax + movabs rax, 0x6c6c893805ac5242 + mov [rsp+0x70], rax + movabs rax, 0x276508b241770615 + mov [rsp+0x78], rax + mov QWORD PTR [rsp+0x90], 0xa + mov QWORD PTR [rsp+0x98], 0x1 + jmp edwards25519_scalarmulbase_midloop +edwards25519_scalarmulbase_inverseloop: + mov r9, r8 + sar r9, 0x3f + xor r8, r9 + sub r8, r9 + mov r11, r10 + sar r11, 0x3f + xor r10, r11 + sub r10, r11 + mov r13, r12 + sar r13, 0x3f + xor r12, r13 + sub r12, r13 + mov r15, r14 + sar r15, 0x3f + xor r14, r15 + sub r14, r15 + mov rax, r8 + and rax, r9 + mov rdi, r10 + and rdi, r11 + add rdi, rax + mov [rsp+0x80], rdi + mov rax, r12 + and rax, r13 + mov rsi, r14 + and rsi, r15 + add rsi, rax + mov [rsp+0x88], rsi xor ebx, ebx - xor r8, r8 - xor r15, r15 - bt r14, 0x0 - cmovb rax, rbp - cmovb rbx, rsi - cmovb r8, rcx - cmovb r15, rdx - mov r13, r14 - sub r14, rbx - sub rbx, r13 - mov rdi, r12 - sub rdi, rax - cmovb rbp, r12 - lea r12, [rdi-0x1] - cmovb r14, rbx - cmovb rsi, r13 - not r12 - cmovb rcx, r10 - cmovb rdx, r11 - cmovae r12, rdi - shr r14, 1 - add r10, r8 - add r11, r15 - shr r12, 1 - add rcx, rcx - add rdx, rdx - dec r9 - jne edwards25519_scalarmulbase_innerloop - mov rdi, [rsp+0x8] - mov r13, [rsp+0x10] - mov r8, [rsp] - mov r15, [rsp+0x18] - mov [rsp], r10 - mov [rsp+0x8], r11 - mov [rsp+0x10], rcx - mov [rsp+0x18], rdx - mov r8, [rsp+0x38] - mov r15, [rsp+0x40] - xor r14, r14 - xor rsi, rsi - xor r10, r10 - xor r11, r11 - xor r9, r9 -edwards25519_scalarmulbase_congloop: - mov rcx, [r8+8*r9] mov rax, [rsp] - mul rcx - add r14, rax - adc rdx, 0x0 - mov r12, rdx - mov rax, [rsp+0x10] - mul rcx + xor rax, r9 + mul r8 + add rdi, rax + adc rbx, rdx + mov rax, [rsp+0x20] + xor rax, r11 + mul r10 + add rdi, rax + adc rbx, rdx + xor ebp, ebp + mov rax, [rsp] + xor rax, r13 + mul r12 + add rsi, rax + adc rbp, rdx + mov rax, [rsp+0x20] + xor rax, r15 + mul r14 add rsi, rax - adc rdx, 0x0 - mov rbp, rdx - mov rcx, [r15+8*r9] + adc rbp, rdx + xor ecx, ecx mov rax, [rsp+0x8] - mul rcx - add r14, rax - adc r12, rdx - shrd r10, r14, 0x3a - mov [r8+8*r9], r10 - mov r10, r14 - mov r14, r12 + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x28] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + shrd rdi, rbx, 0x3b + mov [rsp], rdi + xor edi, edi + mov rax, [rsp+0x8] + xor rax, r13 + mul r12 + add rbp, rax + adc rdi, rdx + mov rax, [rsp+0x28] + xor rax, r15 + mul r14 + add rbp, rax + adc rdi, rdx + shrd rsi, rbp, 0x3b + mov [rsp+0x20], rsi + xor esi, esi + mov rax, [rsp+0x10] + xor rax, r9 + mul r8 + add rcx, rax + adc rsi, rdx + mov rax, [rsp+0x30] + xor rax, r11 + mul r10 + add rcx, rax + adc rsi, rdx + shrd rbx, rcx, 0x3b + mov [rsp+0x8], rbx + xor ebx, ebx + mov rax, [rsp+0x10] + xor rax, r13 + mul r12 + add rdi, rax + adc rbx, rdx + mov rax, [rsp+0x30] + xor rax, r15 + mul r14 + add rdi, rax + adc rbx, rdx + shrd rbp, rdi, 0x3b + mov [rsp+0x28], rbp mov rax, [rsp+0x18] - mul rcx + xor rax, r9 + mov rbp, rax + sar rbp, 0x3f + and rbp, r8 + neg rbp + mul r8 + add rsi, rax + adc rbp, rdx + mov rax, [rsp+0x38] + xor rax, r11 + mov rdx, rax + sar rdx, 0x3f + and rdx, r10 + sub rbp, rdx + mul r10 add rsi, rax adc rbp, rdx - shrd r11, rsi, 0x3a - mov [r15+8*r9], r11 - mov r11, rsi - mov rsi, rbp - inc r9 - cmp r9, rdi - jb edwards25519_scalarmulbase_congloop - shld r14, r10, 0x6 - shld rsi, r11, 0x6 - mov r15, [rsp+0x48] - mov rbx, [r8] - mov r12, [rsp+0x28] - imul r12, rbx - mov rax, [r15] + shrd rcx, rsi, 0x3b + mov [rsp+0x10], rcx + shrd rsi, rbp, 0x3b + mov rax, [rsp+0x18] + mov [rsp+0x18], rsi + xor rax, r13 + mov rsi, rax + sar rsi, 0x3f + and rsi, r12 + neg rsi + mul r12 + add rbx, rax + adc rsi, rdx + mov rax, [rsp+0x38] + xor rax, r15 + mov rdx, rax + sar rdx, 0x3f + and rdx, r14 + sub rsi, rdx + mul r14 + add rbx, rax + adc rsi, rdx + shrd rdi, rbx, 0x3b + mov [rsp+0x30], rdi + shrd rbx, rsi, 0x3b + mov [rsp+0x38], rbx + mov rbx, [rsp+0x80] + mov rbp, [rsp+0x88] + xor ecx, ecx + mov rax, [rsp+0x40] + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x60] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + xor esi, esi + mov rax, [rsp+0x40] + xor rax, r13 mul r12 - add rax, rbx - mov r10, rdx - mov r9d, 0x1 - mov rcx, rdi - dec rcx - je edwards25519_scalarmulbase_wmontend -edwards25519_scalarmulbase_wmontloop: - adc r10, [r8+8*r9] - sbb rbx, rbx - mov rax, [r15+8*r9] + mov [rsp+0x40], rbx + add rbp, rax + adc rsi, rdx + mov rax, [rsp+0x60] + xor rax, r15 + mul r14 + add rbp, rax + adc rsi, rdx + mov [rsp+0x60], rbp + xor ebx, ebx + mov rax, [rsp+0x48] + xor rax, r9 + mul r8 + add rcx, rax + adc rbx, rdx + mov rax, [rsp+0x68] + xor rax, r11 + mul r10 + add rcx, rax + adc rbx, rdx + xor ebp, ebp + mov rax, [rsp+0x48] + xor rax, r13 mul r12 - sub rdx, rbx - add rax, r10 - mov [r8+8*r9-0x8], rax - mov r10, rdx - inc r9 - dec rcx - jne edwards25519_scalarmulbase_wmontloop -edwards25519_scalarmulbase_wmontend: - adc r10, r14 - mov [r8+8*rdi-0x8], r10 - sbb r10, r10 - neg r10 - mov rcx, rdi - xor r9, r9 -edwards25519_scalarmulbase_wcmploop: - mov rax, [r8+8*r9] - sbb rax, [r15+8*r9] - inc r9 - dec rcx - jne edwards25519_scalarmulbase_wcmploop - sbb r10, 0x0 - sbb r10, r10 - not r10 - xor rcx, rcx - xor r9, r9 -edwards25519_scalarmulbase_wcorrloop: - mov rax, [r8+8*r9] - mov rbx, [r15+8*r9] - and rbx, r10 - neg rcx - sbb rax, rbx - sbb rcx, rcx - mov [r8+8*r9], rax - inc r9 - cmp r9, rdi - jb edwards25519_scalarmulbase_wcorrloop + mov [rsp+0x48], rcx + add rsi, rax + adc rbp, rdx + mov rax, [rsp+0x68] + xor rax, r15 + mul r14 + add rsi, rax + adc rbp, rdx + mov [rsp+0x68], rsi + xor ecx, ecx + mov rax, [rsp+0x50] + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x70] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + xor esi, esi + mov rax, [rsp+0x50] + xor rax, r13 + mul r12 + mov [rsp+0x50], rbx + add rbp, rax + adc rsi, rdx + mov rax, [rsp+0x70] + xor rax, r15 + mul r14 + add rbp, rax + adc rsi, rdx + mov [rsp+0x70], rbp + mov rax, [rsp+0x58] + xor rax, r9 + mov rbx, r9 + and rbx, r8 + neg rbx + mul r8 + add rcx, rax + adc rbx, rdx + mov rax, [rsp+0x78] + xor rax, r11 + mov rdx, r11 + and rdx, r10 + sub rbx, rdx + mul r10 + add rcx, rax + adc rdx, rbx + mov rbx, rdx + shld rdx, rcx, 0x1 + sar rbx, 0x3f + add rdx, rbx + mov eax, 0x13 + imul rdx mov r8, [rsp+0x40] - mov rbx, [r8] - mov rbp, [rsp+0x28] - imul rbp, rbx - mov rax, [r15] - mul rbp - add rax, rbx - mov r11, rdx - mov r9d, 0x1 - mov rcx, rdi - dec rcx - je edwards25519_scalarmulbase_zmontend -edwards25519_scalarmulbase_zmontloop: - adc r11, [r8+8*r9] - sbb rbx, rbx - mov rax, [r15+8*r9] - mul rbp - sub rdx, rbx - add rax, r11 - mov [r8+8*r9-0x8], rax - mov r11, rdx - inc r9 - dec rcx - jne edwards25519_scalarmulbase_zmontloop -edwards25519_scalarmulbase_zmontend: - adc r11, rsi - mov [r8+8*rdi-0x8], r11 - sbb r11, r11 - neg r11 - mov rcx, rdi - xor r9, r9 -edwards25519_scalarmulbase_zcmploop: - mov rax, [r8+8*r9] - sbb rax, [r15+8*r9] - inc r9 - dec rcx - jne edwards25519_scalarmulbase_zcmploop - sbb r11, 0x0 - sbb r11, r11 - not r11 - xor rcx, rcx - xor r9, r9 -edwards25519_scalarmulbase_zcorrloop: - mov rax, [r8+8*r9] - mov rbx, [r15+8*r9] - and rbx, r11 + add r8, rax + mov [rsp+0x40], r8 + mov r8, [rsp+0x48] + adc r8, rdx + mov [rsp+0x48], r8 + mov r8, [rsp+0x50] + adc r8, rbx + mov [rsp+0x50], r8 + adc rcx, rbx + shl rax, 0x3f + add rcx, rax + mov rax, [rsp+0x58] + mov [rsp+0x58], rcx + xor rax, r13 + mov rcx, r13 + and rcx, r12 neg rcx - sbb rax, rbx - sbb rcx, rcx - mov [r8+8*r9], rax - inc r9 - cmp r9, rdi - jb edwards25519_scalarmulbase_zcorrloop - mov r8, [rsp+0x30] - lea r15, [r8+8*rdi] - xor r9, r9 - xor r12, r12 - xor r14, r14 - xor rbp, rbp - xor rsi, rsi -edwards25519_scalarmulbase_crossloop: - mov rcx, [r8+8*r9] - mov rax, [rsp] - mul rcx - add r14, rax - adc rdx, 0x0 - mov r10, rdx - mov rax, [rsp+0x10] - mul rcx + mul r12 add rsi, rax - adc rdx, 0x0 - mov r11, rdx - mov rcx, [r15+8*r9] - mov rax, [rsp+0x8] - mul rcx - sub rdx, r12 - sub r14, rax - sbb r10, rdx - sbb r12, r12 - mov [r8+8*r9], r14 - mov r14, r10 - mov rax, [rsp+0x18] - mul rcx - sub rdx, rbp + adc rcx, rdx + mov rax, [rsp+0x78] + xor rax, r15 + mov rdx, r15 + and rdx, r14 + sub rcx, rdx + mul r14 + add rsi, rax + adc rdx, rcx + mov rcx, rdx + shld rdx, rsi, 0x1 + sar rcx, 0x3f + mov eax, 0x13 + add rdx, rcx + imul rdx + mov r8, [rsp+0x60] + add r8, rax + mov [rsp+0x60], r8 + mov r8, [rsp+0x68] + adc r8, rdx + mov [rsp+0x68], r8 + mov r8, [rsp+0x70] + adc r8, rcx + mov [rsp+0x70], r8 + adc rsi, rcx + shl rax, 0x3f + add rsi, rax + mov [rsp+0x78], rsi +edwards25519_scalarmulbase_midloop: + mov rsi, [rsp+0x98] + mov rdx, [rsp] + mov rcx, [rsp+0x20] + mov rbx, rdx + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, 0xfffffffffffffffe + xor ebp, ebp + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax sub rsi, rax - sbb r11, rdx - sbb rbp, rbp - mov [r15+8*r9], rsi - mov rsi, r11 - inc r9 - cmp r9, r13 - jb edwards25519_scalarmulbase_crossloop - xor r9, r9 - mov r10, r12 - mov r11, rbp - xor r14, r12 - xor rsi, rbp -edwards25519_scalarmulbase_optnegloop: - mov rax, [r8+8*r9] - xor rax, r12 - neg r10 - adc rax, 0x0 - sbb r10, r10 - mov [r8+8*r9], rax - mov rax, [r15+8*r9] - xor rax, rbp - neg r11 - adc rax, 0x0 - sbb r11, r11 - mov [r15+8*r9], rax - inc r9 - cmp r9, r13 - jb edwards25519_scalarmulbase_optnegloop - sub r14, r10 - sub rsi, r11 - mov r9, r13 -edwards25519_scalarmulbase_shiftloop: - mov rax, [r8+8*r9-0x8] - mov r10, rax - shrd rax, r14, 0x3a - mov [r8+8*r9-0x8], rax - mov r14, r10 - mov rax, [r15+8*r9-0x8] - mov r11, rax - shrd rax, rsi, 0x3a - mov [r15+8*r9-0x8], rax - mov rsi, r11 - dec r9 - jne edwards25519_scalarmulbase_shiftloop - not rbp - mov rcx, [rsp+0x48] - mov r8, [rsp+0x38] - mov r15, [rsp+0x40] - mov r10, r12 - mov r11, rbp - xor r9, r9 -edwards25519_scalarmulbase_fliploop: - mov rdx, rbp - mov rax, [rcx+8*r9] - and rdx, rax - and rax, r12 - mov rbx, [r8+8*r9] - xor rbx, r12 - neg r10 - adc rax, rbx - sbb r10, r10 - mov [r8+8*r9], rax - mov rbx, [r15+8*r9] - xor rbx, rbp - neg r11 - adc rdx, rbx - sbb r11, r11 - mov [r15+8*r9], rdx - inc r9 - cmp r9, rdi - jb edwards25519_scalarmulbase_fliploop - sub QWORD PTR [rsp+0x20], 0x3a - ja edwards25519_scalarmulbase_outerloop + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea rdx, [rbx+rax] + lea rdi, [rcx+rax] + shl rdx, 0x16 + shl rdi, 0x16 + sar rdx, 0x2b + sar rdi, 0x2b + movabs rax, 0x20000100000 + lea rbx, [rbx+rax] + lea rcx, [rcx+rax] + sar rbx, 0x2a + sar rcx, 0x2a + mov [rsp+0xa0], rdx + mov [rsp+0xa8], rbx + mov [rsp+0xb0], rdi + mov [rsp+0xb8], rcx + mov r12, [rsp] + imul rdi, r12 + imul r12, rdx + mov r13, [rsp+0x20] + imul rbx, r13 + imul r13, rcx + add r12, rbx + add r13, rdi + sar r12, 0x14 + sar r13, 0x14 + mov rbx, r12 + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + mov rcx, r13 + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, 0xfffffffffffffffe + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea r8, [rbx+rax] + lea r10, [rcx+rax] + shl r8, 0x16 + shl r10, 0x16 + sar r8, 0x2b + sar r10, 0x2b + movabs rax, 0x20000100000 + lea r15, [rbx+rax] + lea r11, [rcx+rax] + sar r15, 0x2a + sar r11, 0x2a + mov rbx, r13 + mov rcx, r12 + imul r12, r8 + imul rbx, r15 + add r12, rbx + imul r13, r11 + imul rcx, r10 + add r13, rcx + sar r12, 0x14 + sar r13, 0x14 + mov rbx, r12 + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + mov rcx, r13 + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, [rsp+0xa0] + imul rax, r8 + mov rdx, [rsp+0xb0] + imul rdx, r15 + imul r8, [rsp+0xa8] + imul r15, [rsp+0xb8] + add r15, r8 + lea r9, [rax+rdx] + mov rax, [rsp+0xa0] + imul rax, r10 + mov rdx, [rsp+0xb0] + imul rdx, r11 + imul r10, [rsp+0xa8] + imul r11, [rsp+0xb8] + add r11, r10 + lea r13, [rax+rdx] + mov rax, 0xfffffffffffffffe + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea r8, [rbx+rax] + lea r12, [rcx+rax] + shl r8, 0x15 + shl r12, 0x15 + sar r8, 0x2b + sar r12, 0x2b + movabs rax, 0x20000100000 + lea r10, [rbx+rax] + lea r14, [rcx+rax] + sar r10, 0x2b + sar r14, 0x2b + mov rax, r9 + imul rax, r8 + mov rdx, r13 + imul rdx, r10 + imul r8, r15 + imul r10, r11 + add r10, r8 + lea r8, [rax+rdx] + mov rax, r9 + imul rax, r12 + mov rdx, r13 + imul rdx, r14 + imul r12, r15 + imul r14, r11 + add r14, r12 + lea r12, [rax+rdx] + mov [rsp+0x98], rsi + dec QWORD PTR [rsp+0x90] + jne edwards25519_scalarmulbase_inverseloop + mov rax, [rsp] + mov rcx, [rsp+0x20] + imul rax, r8 + imul rcx, r10 + add rax, rcx + sar rax, 0x3f + mov r9, r8 + sar r9, 0x3f + xor r8, r9 + sub r8, r9 + xor r9, rax + mov r11, r10 + sar r11, 0x3f + xor r10, r11 + sub r10, r11 + xor r11, rax + mov r13, r12 + sar r13, 0x3f + xor r12, r13 + sub r12, r13 + xor r13, rax + mov r15, r14 + sar r15, 0x3f + xor r14, r15 + sub r14, r15 + xor r15, rax + mov rax, r8 + and rax, r9 + mov r12, r10 + and r12, r11 + add r12, rax + xor r13d, r13d + mov rax, [rsp+0x40] + xor rax, r9 + mul r8 + add r12, rax + adc r13, rdx + mov rax, [rsp+0x60] + xor rax, r11 + mul r10 + add r12, rax + adc r13, rdx + xor r14d, r14d + mov rax, [rsp+0x48] + xor rax, r9 + mul r8 + add r13, rax + adc r14, rdx + mov rax, [rsp+0x68] + xor rax, r11 + mul r10 + add r13, rax + adc r14, rdx + xor r15d, r15d + mov rax, [rsp+0x50] + xor rax, r9 + mul r8 + add r14, rax + adc r15, rdx + mov rax, [rsp+0x70] + xor rax, r11 + mul r10 + add r14, rax + adc r15, rdx + mov rax, [rsp+0x58] + xor rax, r9 + and r9, r8 + neg r9 + mul r8 + add r15, rax + adc r9, rdx + mov rax, [rsp+0x78] + xor rax, r11 + mov rdx, r11 + and rdx, r10 + sub r9, rdx + mul r10 + add r15, rax + adc r9, rdx + mov rax, r9 + shld rax, r15, 0x1 + sar r9, 0x3f + mov ebx, 0x13 + lea rax, [rax+r9+0x1] + imul rbx + xor ebp, ebp + add r12, rax + adc r13, rdx + adc r14, r9 + adc r15, r9 + shl rax, 0x3f + add r15, rax + cmovns rbx, rbp + sub r12, rbx + sbb r13, rbp + sbb r14, rbp + sbb r15, rbp + btr r15, 0x3f + mov rdi, [rsp+0xc0] + mov [rdi], r12 + mov [rdi+0x8], r13 + mov [rdi+0x10], r14 + mov [rdi+0x18], r15 // The final result is x = X * inv(Z), y = Y * inv(Z). // These are the only operations in the whole computation that @@ -1344,18 +2305,10 @@ edwards25519_scalarmulbase_fliploop: // .section .rodata // **************************************************************************** -// The modulus, for the modular inverse - -edwards25519_scalarmulbase_p_25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // 0 * B = 0 and 2^251 * B in extended-projective coordinates // but with Z = 1 assumed and hence left out, so they are (X,Y,T) only. -edwards25519_scalarmulbase_edwards25519_0g: +edwards25519_scalarmulbase_0g: .quad 0x0000000000000000 .quad 0x0000000000000000 @@ -1372,7 +2325,7 @@ edwards25519_scalarmulbase_edwards25519_0g: .quad 0x0000000000000000 .quad 0x0000000000000000 -edwards25519_scalarmulbase_edwards25519_251g: +edwards25519_scalarmulbase_251g: .quad 0x525f946d7c7220e7 .quad 0x4636b0b2f1e35444 @@ -1390,7 +2343,7 @@ edwards25519_scalarmulbase_edwards25519_251g: // Precomputed table of multiples of generator for edwards25519 // all in precomputed extended-projective (y-x,x+y,2*d*x*y) triples. -edwards25519_scalarmulbase_edwards25519_gtable: +edwards25519_scalarmulbase_gtable: // 2^0 * 1 * G diff --git a/x86/curve25519/edwards25519_scalarmulbase_alt.S b/x86/curve25519/edwards25519_scalarmulbase_alt.S index 9a36de7f..08a3908f 100644 --- a/x86/curve25519/edwards25519_scalarmulbase_alt.S +++ b/x86/curve25519/edwards25519_scalarmulbase_alt.S @@ -38,23 +38,22 @@ #define xpy_2 rsp+(2*NUMSIZE) #define kxy_2 rsp+(3*NUMSIZE) -#define acc rsp+(4*NUMSIZE) -#define x_1 rsp+(4*NUMSIZE) -#define y_1 rsp+(5*NUMSIZE) -#define z_1 rsp+(6*NUMSIZE) -#define w_1 rsp+(7*NUMSIZE) -#define x_3 rsp+(4*NUMSIZE) -#define y_3 rsp+(5*NUMSIZE) -#define z_3 rsp+(6*NUMSIZE) -#define w_3 rsp+(7*NUMSIZE) - -#define tmpspace rsp+(8*NUMSIZE) -#define t0 rsp+(8*NUMSIZE) -#define t1 rsp+(9*NUMSIZE) -#define t2 rsp+(10*NUMSIZE) -#define t3 rsp+(11*NUMSIZE) -#define t4 rsp+(12*NUMSIZE) -#define t5 rsp+(13*NUMSIZE) +#define t0 rsp+(4*NUMSIZE) +#define t1 rsp+(5*NUMSIZE) +#define t2 rsp+(6*NUMSIZE) +#define t3 rsp+(7*NUMSIZE) +#define t4 rsp+(8*NUMSIZE) +#define t5 rsp+(9*NUMSIZE) + +#define acc rsp+(10*NUMSIZE) +#define x_1 rsp+(10*NUMSIZE) +#define y_1 rsp+(11*NUMSIZE) +#define z_1 rsp+(12*NUMSIZE) +#define w_1 rsp+(13*NUMSIZE) +#define x_3 rsp+(10*NUMSIZE) +#define y_3 rsp+(11*NUMSIZE) +#define z_3 rsp+(12*NUMSIZE) +#define w_3 rsp+(13*NUMSIZE) // Stable homes for the input result pointer, and other variables @@ -73,6 +72,15 @@ #define NSPACE (15*NUMSIZE+8) +// Syntactic variants to make x86_att version simpler to generate + +#define SCALAR 0 +#define TABENT (1*NUMSIZE) +#define ACC (10*NUMSIZE) +#define X3 (10*NUMSIZE) +#define Z3 (12*NUMSIZE) +#define W3 (13*NUMSIZE) + // Macro wrapping up the basic field multiplication, only trivially // different from a pure function call to bignum_mul_p25519_alt. @@ -413,12 +421,12 @@ S2N_BN_SYMBOL(edwards25519_scalarmulbase_alt): push rsi mov rdi, rcx mov rsi, rdx - call edwards25519_scalarmulbase_alt_curve25519_x25519base_standard + call edwards25519_scalarmulbase_alt_standard pop rsi pop rdi ret -edwards25519_scalarmulbase_alt_curve25519_x25519base_standard: +edwards25519_scalarmulbase_alt_standard: #endif // Save registers, make room for temps, preserve input arguments. @@ -489,11 +497,11 @@ edwards25519_scalarmulbase_alt_curve25519_x25519base_standard: // And before we store the scalar, test and reset bit 251 to // initialize the main loop just below. - mov [rsp], r8 - mov [rsp+8], r9 - mov [rsp+16], r10 + mov [rsp+SCALAR], r8 + mov [rsp+SCALAR+8], r9 + mov [rsp+SCALAR+16], r10 btr r11, 59 - mov [rsp+24], r11 + mov [rsp+SCALAR+24], r11 // The main part of the computation is in extended-projective coordinates // (X,Y,Z,T), representing an affine point on the edwards25519 curve @@ -504,75 +512,75 @@ edwards25519_scalarmulbase_alt_curve25519_x25519base_standard: // Initialize accumulator "acc" to either 0 or 2^251 * B depending on // bit 251 of the (reduced) scalar. That leaves bits 0..250 to handle. - lea r10, [rip+edwards25519_scalarmulbase_alt_edwards25519_0g] - lea r11, [rip+edwards25519_scalarmulbase_alt_edwards25519_251g] + lea r10, [rip+edwards25519_scalarmulbase_alt_0g] + lea r11, [rip+edwards25519_scalarmulbase_alt_251g] mov rax, [r10] mov rcx, [r11] cmovc rax, rcx - mov [rsp+8*16], rax + mov [rsp+ACC], rax mov rax, [r10+8*1] mov rcx, [r11+8*1] cmovc rax, rcx - mov [rsp+8*17], rax + mov [rsp+ACC+8], rax mov rax, [r10+8*2] mov rcx, [r11+8*2] cmovc rax, rcx - mov [rsp+8*18], rax + mov [rsp+ACC+16], rax mov rax, [r10+8*3] mov rcx, [r11+8*3] cmovc rax, rcx - mov [rsp+8*19], rax + mov [rsp+ACC+24], rax mov rax, [r10+8*4] mov rcx, [r11+8*4] cmovc rax, rcx - mov [rsp+8*20], rax + mov [rsp+ACC+32], rax mov rax, [r10+8*5] mov rcx, [r11+8*5] cmovc rax, rcx - mov [rsp+8*21], rax + mov [rsp+ACC+40], rax mov rax, [r10+8*6] mov rcx, [r11+8*6] cmovc rax, rcx - mov [rsp+8*22], rax + mov [rsp+ACC+48], rax mov rax, [r10+8*7] mov rcx, [r11+8*7] cmovc rax, rcx - mov [rsp+8*23], rax + mov [rsp+ACC+56], rax mov eax, 1 - mov [rsp+8*24], rax + mov [rsp+ACC+64], rax mov eax, 0 - mov [rsp+8*25], rax - mov [rsp+8*26], rax - mov [rsp+8*27], rax + mov [rsp+ACC+72], rax + mov [rsp+ACC+80], rax + mov [rsp+ACC+88], rax mov rax, [r10+8*8] mov rcx, [r11+8*8] cmovc rax, rcx - mov [rsp+8*28], rax + mov [rsp+ACC+96], rax mov rax, [r10+8*9] mov rcx, [r11+8*9] cmovc rax, rcx - mov [rsp+8*29], rax + mov [rsp+ACC+104], rax mov rax, [r10+8*10] mov rcx, [r11+8*10] cmovc rax, rcx - mov [rsp+8*30], rax + mov [rsp+ACC+112], rax mov rax, [r10+8*11] mov rcx, [r11+8*11] cmovc rax, rcx - mov [rsp+8*31], rax + mov [rsp+ACC+120], rax // The counter "i" tracks the bit position for which the scalar has // already been absorbed, starting at 0 and going up in chunks of 4. @@ -588,7 +596,7 @@ edwards25519_scalarmulbase_alt_curve25519_x25519base_standard: // end because we made sure bit 251 is clear in the reduced scalar. mov i, 0 - lea rax, [rip+edwards25519_scalarmulbase_alt_edwards25519_gtable] + lea rax, [rip+edwards25519_scalarmulbase_alt_gtable] mov tab, rax mov bias, 0 @@ -880,26 +888,26 @@ edwards25519_scalarmulbase_alt_scalarloop: mov rsi, rax cmovnz rsi, r8 cmovnz r8, rax - mov [rsp+32], rsi - mov [rsp+64], r8 + mov [rsp+TABENT], rsi + mov [rsp+TABENT+32], r8 mov rsi, rbx cmovnz rsi, r9 cmovnz r9, rbx - mov [rsp+40], rsi - mov [rsp+72], r9 + mov [rsp+TABENT+8], rsi + mov [rsp+TABENT+40], r9 mov rsi, rcx cmovnz rsi, r10 cmovnz r10, rcx - mov [rsp+48], rsi - mov [rsp+80], r10 + mov [rsp+TABENT+16], rsi + mov [rsp+TABENT+48], r10 mov rsi, rdx cmovnz rsi, r11 cmovnz r11, rdx - mov [rsp+56], rsi - mov [rsp+88], r11 + mov [rsp+TABENT+24], rsi + mov [rsp+TABENT+56], r11 mov rax, -19 mov rbx, -1 @@ -920,10 +928,10 @@ edwards25519_scalarmulbase_alt_scalarloop: cmovz rbx, r13 cmovz rcx, r14 cmovz rdx, r15 - mov [rsp+96], rax - mov [rsp+104], rbx - mov [rsp+112], rcx - mov [rsp+120], rdx + mov [rsp+TABENT+64], rax + mov [rsp+TABENT+72], rbx + mov [rsp+TABENT+80], rcx + mov [rsp+TABENT+88], rdx // Extended-projective and precomputed mixed addition. // This is effectively the same as calling the standalone @@ -960,10 +968,10 @@ edwards25519_scalarmulbase_alt_scalarloop: // point on we don't need any normalization of the coordinates // except for making sure that they fit in 4 digits. - mov r8, [rsp+128] - mov r9, [rsp+136] - mov r10, [rsp+144] - mov r11, [rsp+152] + mov r8, [rsp+X3] + mov r9, [rsp+X3+8] + mov r10, [rsp+X3+16] + mov r11, [rsp+X3+24] mov r12, 0xffffffffffffffda sub r12, r8 mov r13, 0xffffffffffffffff @@ -972,424 +980,1377 @@ edwards25519_scalarmulbase_alt_scalarloop: sbb r14, r10 mov r15, 0xffffffffffffffff sbb r15, r11 - mov rax, [rsp+24] + mov rax, [rsp+SCALAR+24] bt rax, 63 cmovc r8, r12 cmovc r9, r13 cmovc r10, r14 cmovc r11, r15 - mov [rsp+128], r8 - mov [rsp+136], r9 - mov [rsp+144], r10 - mov [rsp+152], r11 + mov [rsp+X3], r8 + mov [rsp+X3+8], r9 + mov [rsp+X3+16], r10 + mov [rsp+X3+24], r11 // Now we need to map out of the extended-projective representation // (X,Y,Z,W) back to the affine form (x,y) = (X/Z,Y/Z). This means // first calling the modular inverse to get w_3 = 1/z_3. - mov rdi, 4 - lea rsi, [rsp+224] - lea rdx, [rsp+192] - lea rcx, [rip+edwards25519_scalarmulbase_alt_p_25519] - lea r8, [rsp+256] - -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "x86/generic/bignum_modinv.S". Note -// that the stack it uses for its own temporaries is 80 bytes so it -// only overwrites local variables that are no longer needed. - - mov [rsp+0x40], rsi - mov [rsp+0x38], r8 - mov [rsp+0x48], rcx - lea r10, [r8+8*rdi] - mov [rsp+0x30], r10 - lea r15, [r10+8*rdi] - xor r11, r11 - xor r9, r9 -edwards25519_scalarmulbase_alt_copyloop: - mov rax, [rdx+8*r9] - mov rbx, [rcx+8*r9] - mov [r10+8*r9], rax - mov [r15+8*r9], rbx - mov [r8+8*r9], rbx - mov [rsi+8*r9], r11 - inc r9 - cmp r9, rdi - jb edwards25519_scalarmulbase_alt_copyloop - mov rax, [r8] - mov rbx, rax - dec rbx - mov [r8], rbx - mov rbp, rax - mov r12, rax - shl rbp, 0x2 - sub r12, rbp - xor r12, 0x2 - mov rbp, r12 - imul rbp, rax - mov eax, 0x2 - add rax, rbp - add rbp, 0x1 - imul r12, rax - imul rbp, rbp - mov eax, 0x1 - add rax, rbp - imul r12, rax - imul rbp, rbp - mov eax, 0x1 - add rax, rbp - imul r12, rax - imul rbp, rbp + lea rdi, [rsp+W3] + lea rsi, [rsp+Z3] + +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "x86/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 208 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, x_3, y_3, +// z_3 and w_3. + + mov [rsp+0xc0], rdi + xor eax, eax + lea rcx, [rax-0x13] + not rax + mov [rsp], rcx + mov [rsp+0x8], rax + mov [rsp+0x10], rax + btr rax, 0x3f + mov [rsp+0x18], rax + mov rdx, [rsi] + mov rcx, [rsi+0x8] + mov r8, [rsi+0x10] + mov r9, [rsi+0x18] mov eax, 0x1 - add rax, rbp - imul r12, rax - mov [rsp+0x28], r12 - mov rax, rdi - shl rax, 0x7 - mov [rsp+0x20], rax -edwards25519_scalarmulbase_alt_outerloop: - mov r13, [rsp+0x20] - add r13, 0x3f - shr r13, 0x6 - cmp r13, rdi - cmovae r13, rdi - xor r12, r12 - xor r14, r14 - xor rbp, rbp - xor rsi, rsi - xor r11, r11 - mov r8, [rsp+0x30] - lea r15, [r8+8*rdi] - xor r9, r9 -edwards25519_scalarmulbase_alt_toploop: - mov rbx, [r8+8*r9] - mov rcx, [r15+8*r9] - mov r10, r11 - and r10, r12 - and r11, rbp - mov rax, rbx - or rax, rcx - neg rax - cmovb r14, r10 - cmovb rsi, r11 - cmovb r12, rbx - cmovb rbp, rcx - sbb r11, r11 - inc r9 - cmp r9, r13 - jb edwards25519_scalarmulbase_alt_toploop - mov rax, r12 - or rax, rbp - bsr rcx, rax - xor rcx, 0x3f - shld r12, r14, cl - shld rbp, rsi, cl - mov rax, [r8] - mov r14, rax - mov rax, [r15] - mov rsi, rax - mov r10d, 0x1 - mov r11d, 0x0 - mov ecx, 0x0 - mov edx, 0x1 - mov r9d, 0x3a - mov [rsp+0x8], rdi - mov [rsp+0x10], r13 - mov [rsp], r8 - mov [rsp+0x18], r15 -edwards25519_scalarmulbase_alt_innerloop: + xor r10d, r10d + bts r9, 0x3f + adc rax, r10 + imul rax, rax, 0x13 + add rdx, rax + adc rcx, r10 + adc r8, r10 + adc r9, r10 + mov eax, 0x13 + cmovb rax, r10 + sub rdx, rax + sbb rcx, r10 + sbb r8, r10 + sbb r9, r10 + btr r9, 0x3f + mov [rsp+0x20], rdx + mov [rsp+0x28], rcx + mov [rsp+0x30], r8 + mov [rsp+0x38], r9 xor eax, eax + mov [rsp+0x40], rax + mov [rsp+0x48], rax + mov [rsp+0x50], rax + mov [rsp+0x58], rax + movabs rax, 0xa0f99e2375022099 + mov [rsp+0x60], rax + movabs rax, 0xa8c68f3f1d132595 + mov [rsp+0x68], rax + movabs rax, 0x6c6c893805ac5242 + mov [rsp+0x70], rax + movabs rax, 0x276508b241770615 + mov [rsp+0x78], rax + mov QWORD PTR [rsp+0x90], 0xa + mov QWORD PTR [rsp+0x98], 0x1 + jmp edwards25519_scalarmulbase_alt_midloop +edwards25519_scalarmulbase_alt_inverseloop: + mov r9, r8 + sar r9, 0x3f + xor r8, r9 + sub r8, r9 + mov r11, r10 + sar r11, 0x3f + xor r10, r11 + sub r10, r11 + mov r13, r12 + sar r13, 0x3f + xor r12, r13 + sub r12, r13 + mov r15, r14 + sar r15, 0x3f + xor r14, r15 + sub r14, r15 + mov rax, r8 + and rax, r9 + mov rdi, r10 + and rdi, r11 + add rdi, rax + mov [rsp+0x80], rdi + mov rax, r12 + and rax, r13 + mov rsi, r14 + and rsi, r15 + add rsi, rax + mov [rsp+0x88], rsi xor ebx, ebx - xor r8, r8 - xor r15, r15 - bt r14, 0x0 - cmovb rax, rbp - cmovb rbx, rsi - cmovb r8, rcx - cmovb r15, rdx - mov r13, r14 - sub r14, rbx - sub rbx, r13 - mov rdi, r12 - sub rdi, rax - cmovb rbp, r12 - lea r12, [rdi-0x1] - cmovb r14, rbx - cmovb rsi, r13 - not r12 - cmovb rcx, r10 - cmovb rdx, r11 - cmovae r12, rdi - shr r14, 1 - add r10, r8 - add r11, r15 - shr r12, 1 - add rcx, rcx - add rdx, rdx - dec r9 - jne edwards25519_scalarmulbase_alt_innerloop - mov rdi, [rsp+0x8] - mov r13, [rsp+0x10] - mov r8, [rsp] - mov r15, [rsp+0x18] - mov [rsp], r10 - mov [rsp+0x8], r11 - mov [rsp+0x10], rcx - mov [rsp+0x18], rdx - mov r8, [rsp+0x38] - mov r15, [rsp+0x40] - xor r14, r14 - xor rsi, rsi - xor r10, r10 - xor r11, r11 - xor r9, r9 -edwards25519_scalarmulbase_alt_congloop: - mov rcx, [r8+8*r9] mov rax, [rsp] - mul rcx - add r14, rax - adc rdx, 0x0 - mov r12, rdx - mov rax, [rsp+0x10] - mul rcx + xor rax, r9 + mul r8 + add rdi, rax + adc rbx, rdx + mov rax, [rsp+0x20] + xor rax, r11 + mul r10 + add rdi, rax + adc rbx, rdx + xor ebp, ebp + mov rax, [rsp] + xor rax, r13 + mul r12 + add rsi, rax + adc rbp, rdx + mov rax, [rsp+0x20] + xor rax, r15 + mul r14 add rsi, rax - adc rdx, 0x0 - mov rbp, rdx - mov rcx, [r15+8*r9] + adc rbp, rdx + xor ecx, ecx mov rax, [rsp+0x8] - mul rcx - add r14, rax - adc r12, rdx - shrd r10, r14, 0x3a - mov [r8+8*r9], r10 - mov r10, r14 - mov r14, r12 + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x28] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + shrd rdi, rbx, 0x3b + mov [rsp], rdi + xor edi, edi + mov rax, [rsp+0x8] + xor rax, r13 + mul r12 + add rbp, rax + adc rdi, rdx + mov rax, [rsp+0x28] + xor rax, r15 + mul r14 + add rbp, rax + adc rdi, rdx + shrd rsi, rbp, 0x3b + mov [rsp+0x20], rsi + xor esi, esi + mov rax, [rsp+0x10] + xor rax, r9 + mul r8 + add rcx, rax + adc rsi, rdx + mov rax, [rsp+0x30] + xor rax, r11 + mul r10 + add rcx, rax + adc rsi, rdx + shrd rbx, rcx, 0x3b + mov [rsp+0x8], rbx + xor ebx, ebx + mov rax, [rsp+0x10] + xor rax, r13 + mul r12 + add rdi, rax + adc rbx, rdx + mov rax, [rsp+0x30] + xor rax, r15 + mul r14 + add rdi, rax + adc rbx, rdx + shrd rbp, rdi, 0x3b + mov [rsp+0x28], rbp mov rax, [rsp+0x18] - mul rcx + xor rax, r9 + mov rbp, rax + sar rbp, 0x3f + and rbp, r8 + neg rbp + mul r8 + add rsi, rax + adc rbp, rdx + mov rax, [rsp+0x38] + xor rax, r11 + mov rdx, rax + sar rdx, 0x3f + and rdx, r10 + sub rbp, rdx + mul r10 add rsi, rax adc rbp, rdx - shrd r11, rsi, 0x3a - mov [r15+8*r9], r11 - mov r11, rsi - mov rsi, rbp - inc r9 - cmp r9, rdi - jb edwards25519_scalarmulbase_alt_congloop - shld r14, r10, 0x6 - shld rsi, r11, 0x6 - mov r15, [rsp+0x48] - mov rbx, [r8] - mov r12, [rsp+0x28] - imul r12, rbx - mov rax, [r15] + shrd rcx, rsi, 0x3b + mov [rsp+0x10], rcx + shrd rsi, rbp, 0x3b + mov rax, [rsp+0x18] + mov [rsp+0x18], rsi + xor rax, r13 + mov rsi, rax + sar rsi, 0x3f + and rsi, r12 + neg rsi + mul r12 + add rbx, rax + adc rsi, rdx + mov rax, [rsp+0x38] + xor rax, r15 + mov rdx, rax + sar rdx, 0x3f + and rdx, r14 + sub rsi, rdx + mul r14 + add rbx, rax + adc rsi, rdx + shrd rdi, rbx, 0x3b + mov [rsp+0x30], rdi + shrd rbx, rsi, 0x3b + mov [rsp+0x38], rbx + mov rbx, [rsp+0x80] + mov rbp, [rsp+0x88] + xor ecx, ecx + mov rax, [rsp+0x40] + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x60] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + xor esi, esi + mov rax, [rsp+0x40] + xor rax, r13 mul r12 - add rax, rbx - mov r10, rdx - mov r9d, 0x1 - mov rcx, rdi - dec rcx - je edwards25519_scalarmulbase_alt_wmontend -edwards25519_scalarmulbase_alt_wmontloop: - adc r10, [r8+8*r9] - sbb rbx, rbx - mov rax, [r15+8*r9] + mov [rsp+0x40], rbx + add rbp, rax + adc rsi, rdx + mov rax, [rsp+0x60] + xor rax, r15 + mul r14 + add rbp, rax + adc rsi, rdx + mov [rsp+0x60], rbp + xor ebx, ebx + mov rax, [rsp+0x48] + xor rax, r9 + mul r8 + add rcx, rax + adc rbx, rdx + mov rax, [rsp+0x68] + xor rax, r11 + mul r10 + add rcx, rax + adc rbx, rdx + xor ebp, ebp + mov rax, [rsp+0x48] + xor rax, r13 mul r12 - sub rdx, rbx - add rax, r10 - mov [r8+8*r9-0x8], rax - mov r10, rdx - inc r9 - dec rcx - jne edwards25519_scalarmulbase_alt_wmontloop -edwards25519_scalarmulbase_alt_wmontend: - adc r10, r14 - mov [r8+8*rdi-0x8], r10 - sbb r10, r10 - neg r10 - mov rcx, rdi - xor r9, r9 -edwards25519_scalarmulbase_alt_wcmploop: - mov rax, [r8+8*r9] - sbb rax, [r15+8*r9] - inc r9 - dec rcx - jne edwards25519_scalarmulbase_alt_wcmploop - sbb r10, 0x0 - sbb r10, r10 - not r10 - xor rcx, rcx - xor r9, r9 -edwards25519_scalarmulbase_alt_wcorrloop: - mov rax, [r8+8*r9] - mov rbx, [r15+8*r9] - and rbx, r10 - neg rcx - sbb rax, rbx - sbb rcx, rcx - mov [r8+8*r9], rax - inc r9 - cmp r9, rdi - jb edwards25519_scalarmulbase_alt_wcorrloop + mov [rsp+0x48], rcx + add rsi, rax + adc rbp, rdx + mov rax, [rsp+0x68] + xor rax, r15 + mul r14 + add rsi, rax + adc rbp, rdx + mov [rsp+0x68], rsi + xor ecx, ecx + mov rax, [rsp+0x50] + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x70] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + xor esi, esi + mov rax, [rsp+0x50] + xor rax, r13 + mul r12 + mov [rsp+0x50], rbx + add rbp, rax + adc rsi, rdx + mov rax, [rsp+0x70] + xor rax, r15 + mul r14 + add rbp, rax + adc rsi, rdx + mov [rsp+0x70], rbp + mov rax, [rsp+0x58] + xor rax, r9 + mov rbx, r9 + and rbx, r8 + neg rbx + mul r8 + add rcx, rax + adc rbx, rdx + mov rax, [rsp+0x78] + xor rax, r11 + mov rdx, r11 + and rdx, r10 + sub rbx, rdx + mul r10 + add rcx, rax + adc rdx, rbx + mov rbx, rdx + shld rdx, rcx, 0x1 + sar rbx, 0x3f + add rdx, rbx + mov eax, 0x13 + imul rdx mov r8, [rsp+0x40] - mov rbx, [r8] - mov rbp, [rsp+0x28] - imul rbp, rbx - mov rax, [r15] - mul rbp - add rax, rbx - mov r11, rdx - mov r9d, 0x1 - mov rcx, rdi - dec rcx - je edwards25519_scalarmulbase_alt_zmontend -edwards25519_scalarmulbase_alt_zmontloop: - adc r11, [r8+8*r9] - sbb rbx, rbx - mov rax, [r15+8*r9] - mul rbp - sub rdx, rbx - add rax, r11 - mov [r8+8*r9-0x8], rax - mov r11, rdx - inc r9 - dec rcx - jne edwards25519_scalarmulbase_alt_zmontloop -edwards25519_scalarmulbase_alt_zmontend: - adc r11, rsi - mov [r8+8*rdi-0x8], r11 - sbb r11, r11 - neg r11 - mov rcx, rdi - xor r9, r9 -edwards25519_scalarmulbase_alt_zcmploop: - mov rax, [r8+8*r9] - sbb rax, [r15+8*r9] - inc r9 - dec rcx - jne edwards25519_scalarmulbase_alt_zcmploop - sbb r11, 0x0 - sbb r11, r11 - not r11 - xor rcx, rcx - xor r9, r9 -edwards25519_scalarmulbase_alt_zcorrloop: - mov rax, [r8+8*r9] - mov rbx, [r15+8*r9] - and rbx, r11 + add r8, rax + mov [rsp+0x40], r8 + mov r8, [rsp+0x48] + adc r8, rdx + mov [rsp+0x48], r8 + mov r8, [rsp+0x50] + adc r8, rbx + mov [rsp+0x50], r8 + adc rcx, rbx + shl rax, 0x3f + add rcx, rax + mov rax, [rsp+0x58] + mov [rsp+0x58], rcx + xor rax, r13 + mov rcx, r13 + and rcx, r12 neg rcx - sbb rax, rbx - sbb rcx, rcx - mov [r8+8*r9], rax - inc r9 - cmp r9, rdi - jb edwards25519_scalarmulbase_alt_zcorrloop - mov r8, [rsp+0x30] - lea r15, [r8+8*rdi] - xor r9, r9 - xor r12, r12 - xor r14, r14 - xor rbp, rbp - xor rsi, rsi -edwards25519_scalarmulbase_alt_crossloop: - mov rcx, [r8+8*r9] - mov rax, [rsp] - mul rcx - add r14, rax - adc rdx, 0x0 - mov r10, rdx - mov rax, [rsp+0x10] - mul rcx + mul r12 add rsi, rax - adc rdx, 0x0 - mov r11, rdx - mov rcx, [r15+8*r9] - mov rax, [rsp+0x8] - mul rcx - sub rdx, r12 - sub r14, rax - sbb r10, rdx - sbb r12, r12 - mov [r8+8*r9], r14 - mov r14, r10 - mov rax, [rsp+0x18] - mul rcx - sub rdx, rbp + adc rcx, rdx + mov rax, [rsp+0x78] + xor rax, r15 + mov rdx, r15 + and rdx, r14 + sub rcx, rdx + mul r14 + add rsi, rax + adc rdx, rcx + mov rcx, rdx + shld rdx, rsi, 0x1 + sar rcx, 0x3f + mov eax, 0x13 + add rdx, rcx + imul rdx + mov r8, [rsp+0x60] + add r8, rax + mov [rsp+0x60], r8 + mov r8, [rsp+0x68] + adc r8, rdx + mov [rsp+0x68], r8 + mov r8, [rsp+0x70] + adc r8, rcx + mov [rsp+0x70], r8 + adc rsi, rcx + shl rax, 0x3f + add rsi, rax + mov [rsp+0x78], rsi +edwards25519_scalarmulbase_alt_midloop: + mov rsi, [rsp+0x98] + mov rdx, [rsp] + mov rcx, [rsp+0x20] + mov rbx, rdx + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, 0xfffffffffffffffe + xor ebp, ebp + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax sub rsi, rax - sbb r11, rdx - sbb rbp, rbp - mov [r15+8*r9], rsi - mov rsi, r11 - inc r9 - cmp r9, r13 - jb edwards25519_scalarmulbase_alt_crossloop - xor r9, r9 - mov r10, r12 - mov r11, rbp - xor r14, r12 - xor rsi, rbp -edwards25519_scalarmulbase_alt_optnegloop: - mov rax, [r8+8*r9] - xor rax, r12 - neg r10 - adc rax, 0x0 - sbb r10, r10 - mov [r8+8*r9], rax - mov rax, [r15+8*r9] - xor rax, rbp - neg r11 - adc rax, 0x0 - sbb r11, r11 - mov [r15+8*r9], rax - inc r9 - cmp r9, r13 - jb edwards25519_scalarmulbase_alt_optnegloop - sub r14, r10 - sub rsi, r11 - mov r9, r13 -edwards25519_scalarmulbase_alt_shiftloop: - mov rax, [r8+8*r9-0x8] - mov r10, rax - shrd rax, r14, 0x3a - mov [r8+8*r9-0x8], rax - mov r14, r10 - mov rax, [r15+8*r9-0x8] - mov r11, rax - shrd rax, rsi, 0x3a - mov [r15+8*r9-0x8], rax - mov rsi, r11 - dec r9 - jne edwards25519_scalarmulbase_alt_shiftloop - not rbp - mov rcx, [rsp+0x48] - mov r8, [rsp+0x38] - mov r15, [rsp+0x40] - mov r10, r12 - mov r11, rbp - xor r9, r9 -edwards25519_scalarmulbase_alt_fliploop: - mov rdx, rbp - mov rax, [rcx+8*r9] - and rdx, rax - and rax, r12 - mov rbx, [r8+8*r9] - xor rbx, r12 - neg r10 - adc rax, rbx - sbb r10, r10 - mov [r8+8*r9], rax - mov rbx, [r15+8*r9] - xor rbx, rbp - neg r11 - adc rdx, rbx - sbb r11, r11 - mov [r15+8*r9], rdx - inc r9 - cmp r9, rdi - jb edwards25519_scalarmulbase_alt_fliploop - sub QWORD PTR [rsp+0x20], 0x3a - ja edwards25519_scalarmulbase_alt_outerloop + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea rdx, [rbx+rax] + lea rdi, [rcx+rax] + shl rdx, 0x16 + shl rdi, 0x16 + sar rdx, 0x2b + sar rdi, 0x2b + movabs rax, 0x20000100000 + lea rbx, [rbx+rax] + lea rcx, [rcx+rax] + sar rbx, 0x2a + sar rcx, 0x2a + mov [rsp+0xa0], rdx + mov [rsp+0xa8], rbx + mov [rsp+0xb0], rdi + mov [rsp+0xb8], rcx + mov r12, [rsp] + imul rdi, r12 + imul r12, rdx + mov r13, [rsp+0x20] + imul rbx, r13 + imul r13, rcx + add r12, rbx + add r13, rdi + sar r12, 0x14 + sar r13, 0x14 + mov rbx, r12 + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + mov rcx, r13 + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, 0xfffffffffffffffe + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea r8, [rbx+rax] + lea r10, [rcx+rax] + shl r8, 0x16 + shl r10, 0x16 + sar r8, 0x2b + sar r10, 0x2b + movabs rax, 0x20000100000 + lea r15, [rbx+rax] + lea r11, [rcx+rax] + sar r15, 0x2a + sar r11, 0x2a + mov rbx, r13 + mov rcx, r12 + imul r12, r8 + imul rbx, r15 + add r12, rbx + imul r13, r11 + imul rcx, r10 + add r13, rcx + sar r12, 0x14 + sar r13, 0x14 + mov rbx, r12 + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + mov rcx, r13 + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, [rsp+0xa0] + imul rax, r8 + mov rdx, [rsp+0xb0] + imul rdx, r15 + imul r8, [rsp+0xa8] + imul r15, [rsp+0xb8] + add r15, r8 + lea r9, [rax+rdx] + mov rax, [rsp+0xa0] + imul rax, r10 + mov rdx, [rsp+0xb0] + imul rdx, r11 + imul r10, [rsp+0xa8] + imul r11, [rsp+0xb8] + add r11, r10 + lea r13, [rax+rdx] + mov rax, 0xfffffffffffffffe + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea r8, [rbx+rax] + lea r12, [rcx+rax] + shl r8, 0x15 + shl r12, 0x15 + sar r8, 0x2b + sar r12, 0x2b + movabs rax, 0x20000100000 + lea r10, [rbx+rax] + lea r14, [rcx+rax] + sar r10, 0x2b + sar r14, 0x2b + mov rax, r9 + imul rax, r8 + mov rdx, r13 + imul rdx, r10 + imul r8, r15 + imul r10, r11 + add r10, r8 + lea r8, [rax+rdx] + mov rax, r9 + imul rax, r12 + mov rdx, r13 + imul rdx, r14 + imul r12, r15 + imul r14, r11 + add r14, r12 + lea r12, [rax+rdx] + mov [rsp+0x98], rsi + dec QWORD PTR [rsp+0x90] + jne edwards25519_scalarmulbase_alt_inverseloop + mov rax, [rsp] + mov rcx, [rsp+0x20] + imul rax, r8 + imul rcx, r10 + add rax, rcx + sar rax, 0x3f + mov r9, r8 + sar r9, 0x3f + xor r8, r9 + sub r8, r9 + xor r9, rax + mov r11, r10 + sar r11, 0x3f + xor r10, r11 + sub r10, r11 + xor r11, rax + mov r13, r12 + sar r13, 0x3f + xor r12, r13 + sub r12, r13 + xor r13, rax + mov r15, r14 + sar r15, 0x3f + xor r14, r15 + sub r14, r15 + xor r15, rax + mov rax, r8 + and rax, r9 + mov r12, r10 + and r12, r11 + add r12, rax + xor r13d, r13d + mov rax, [rsp+0x40] + xor rax, r9 + mul r8 + add r12, rax + adc r13, rdx + mov rax, [rsp+0x60] + xor rax, r11 + mul r10 + add r12, rax + adc r13, rdx + xor r14d, r14d + mov rax, [rsp+0x48] + xor rax, r9 + mul r8 + add r13, rax + adc r14, rdx + mov rax, [rsp+0x68] + xor rax, r11 + mul r10 + add r13, rax + adc r14, rdx + xor r15d, r15d + mov rax, [rsp+0x50] + xor rax, r9 + mul r8 + add r14, rax + adc r15, rdx + mov rax, [rsp+0x70] + xor rax, r11 + mul r10 + add r14, rax + adc r15, rdx + mov rax, [rsp+0x58] + xor rax, r9 + and r9, r8 + neg r9 + mul r8 + add r15, rax + adc r9, rdx + mov rax, [rsp+0x78] + xor rax, r11 + mov rdx, r11 + and rdx, r10 + sub r9, rdx + mul r10 + add r15, rax + adc r9, rdx + mov rax, r9 + shld rax, r15, 0x1 + sar r9, 0x3f + mov ebx, 0x13 + lea rax, [rax+r9+0x1] + imul rbx + xor ebp, ebp + add r12, rax + adc r13, rdx + adc r14, r9 + adc r15, r9 + shl rax, 0x3f + add r15, rax + cmovns rbx, rbp + sub r12, rbx + sbb r13, rbp + sbb r14, rbp + sbb r15, rbp + btr r15, 0x3f + mov rdi, [rsp+0xc0] + mov [rdi], r12 + mov [rdi+0x8], r13 + mov [rdi+0x10], r14 + mov [rdi+0x18], r15 // The final result is x = X * inv(Z), y = Y * inv(Z). // These are the only operations in the whole computation that @@ -1420,18 +2381,10 @@ edwards25519_scalarmulbase_alt_fliploop: // .section .rodata // **************************************************************************** -// The modulus, for the modular inverse - -edwards25519_scalarmulbase_alt_p_25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // 0 * B = 0 and 2^251 * B in extended-projective coordinates // but with Z = 1 assumed and hence left out, so they are (X,Y,T) only. -edwards25519_scalarmulbase_alt_edwards25519_0g: +edwards25519_scalarmulbase_alt_0g: .quad 0x0000000000000000 .quad 0x0000000000000000 @@ -1448,7 +2401,7 @@ edwards25519_scalarmulbase_alt_edwards25519_0g: .quad 0x0000000000000000 .quad 0x0000000000000000 -edwards25519_scalarmulbase_alt_edwards25519_251g: +edwards25519_scalarmulbase_alt_251g: .quad 0x525f946d7c7220e7 .quad 0x4636b0b2f1e35444 @@ -1466,7 +2419,7 @@ edwards25519_scalarmulbase_alt_edwards25519_251g: // Precomputed table of multiples of generator for edwards25519 // all in precomputed extended-projective (y-x,x+y,2*d*x*y) triples. -edwards25519_scalarmulbase_alt_edwards25519_gtable: +edwards25519_scalarmulbase_alt_gtable: // 2^0 * 1 * G diff --git a/x86/curve25519/edwards25519_scalarmuldouble.S b/x86/curve25519/edwards25519_scalarmuldouble.S index 9badfe10..f26f5e6a 100644 --- a/x86/curve25519/edwards25519_scalarmuldouble.S +++ b/x86/curve25519/edwards25519_scalarmuldouble.S @@ -42,24 +42,33 @@ #define scalar rsp+(0*NUMSIZE) #define bscalar rsp+(1*NUMSIZE) -#define acc rsp+(3*NUMSIZE) +#define tabent rsp+(2*NUMSIZE) +#define btabent rsp+(6*NUMSIZE) -#define tabent rsp+(7*NUMSIZE) -#define btabent rsp+(11*NUMSIZE) +#define acc rsp+(9*NUMSIZE) -#define tab rsp+(14*NUMSIZE) +#define tab rsp+(13*NUMSIZE) // Additional variables kept on the stack -#define bf QWORD PTR [rsp+2*NUMSIZE] -#define cf QWORD PTR [rsp+2*NUMSIZE+8] -#define i QWORD PTR [rsp+2*NUMSIZE+16] -#define res QWORD PTR [rsp+2*NUMSIZE+24] +#define bf QWORD PTR [rsp+45*NUMSIZE] +#define cf QWORD PTR [rsp+45*NUMSIZE+8] +#define i QWORD PTR [rsp+45*NUMSIZE+16] +#define res QWORD PTR [rsp+45*NUMSIZE+24] // Total size to reserve on the stack (excluding local subroutines) #define NSPACE (46*NUMSIZE) +// Syntactic variants to make x86_att forms easier to generate + +#define SCALAR (0*NUMSIZE) +#define BSCALAR (1*NUMSIZE) +#define TABENT (2*NUMSIZE) +#define BTABENT (6*NUMSIZE) +#define ACC (9*NUMSIZE) +#define TAB (13*NUMSIZE) + // Sub-references used in local subroutines with local stack #define x_0 rdi+0 @@ -493,10 +502,10 @@ edwards25519_scalarmuldouble_standard: adc r9, r13 adc r10, r14 adc r11, r15 - mov [rsp+32], r8 - mov [rsp+40], r9 - mov [rsp+48], r10 - mov [rsp+56], r11 + mov [rsp+BSCALAR], r8 + mov [rsp+BSCALAR+8], r9 + mov [rsp+BSCALAR+16], r10 + mov [rsp+BSCALAR+24], r11 mov r8, [rsi] mov r9, [rsi+8] @@ -517,10 +526,10 @@ edwards25519_scalarmuldouble_standard: adc r9, r13 adc r10, r14 adc r11, r15 - mov [rsp], r8 - mov [rsp+8], r9 - mov [rsp+16], r10 - mov [rsp+24], r11 + mov [rsp+SCALAR], r8 + mov [rsp+SCALAR+8], r9 + mov [rsp+SCALAR+16], r10 + mov [rsp+SCALAR+24], r11 // Create table of multiples 1..8 of the general input point at "tab". // Reduce the input coordinates x and y modulo 2^256 - 38 first, for the @@ -541,13 +550,13 @@ edwards25519_scalarmuldouble_standard: adc rcx, r10 adc rsi, r11 cmovnc rax, r8 - mov [rsp+448], rax + mov [rsp+TAB], rax cmovnc rbx, r9 - mov [rsp+456], rbx + mov [rsp+TAB+8], rbx cmovnc rcx, r10 - mov [rsp+464], rcx + mov [rsp+TAB+16], rcx cmovnc rsi, r11 - mov [rsp+472], rsi + mov [rsp+TAB+24], rsi mov eax, 38 mov r8, [rdx+32] @@ -562,69 +571,69 @@ edwards25519_scalarmuldouble_standard: adc rcx, r10 adc rsi, r11 cmovnc rax, r8 - mov [rsp+480], rax + mov [rsp+TAB+32], rax cmovnc rbx, r9 - mov [rsp+488], rbx + mov [rsp+TAB+40], rbx cmovnc rcx, r10 - mov [rsp+496], rcx + mov [rsp+TAB+48], rcx cmovnc rsi, r11 - mov [rsp+504], rsi + mov [rsp+TAB+56], rsi mov eax, 1 - mov [rsp+512], rax + mov [rsp+TAB+64], rax xor eax, eax - mov [rsp+520], rax - mov [rsp+528], rax - mov [rsp+536], rax + mov [rsp+TAB+72], rax + mov [rsp+TAB+80], rax + mov [rsp+TAB+88], rax - lea rdi, [rsp+544] - lea rsi, [rsp+448] - lea rbp, [rsp+480] + lea rdi, [rsp+TAB+96] + lea rsi, [rsp+TAB] + lea rbp, [rsp+TAB+32] mul_4(x_0,x_1,x_2) // Multiple 2 - lea rdi, [rsp+576] - lea rsi, [rsp+448] + lea rdi, [rsp+TAB+1*128] + lea rsi, [rsp+TAB] call edwards25519_scalarmuldouble_epdouble // Multiple 3 - lea rdi, [rsp+704] - lea rsi, [rsp+448] - lea rbp, [rsp+576] + lea rdi, [rsp+TAB+2*128] + lea rsi, [rsp+TAB] + lea rbp, [rsp+TAB+1*128] call edwards25519_scalarmuldouble_epadd // Multiple 4 - lea rdi, [rsp+832] - lea rsi, [rsp+576] + lea rdi, [rsp+TAB+3*128] + lea rsi, [rsp+TAB+1*128] call edwards25519_scalarmuldouble_epdouble // Multiple 5 - lea rdi, [rsp+960] - lea rsi, [rsp+448] - lea rbp, [rsp+832] + lea rdi, [rsp+TAB+4*128] + lea rsi, [rsp+TAB] + lea rbp, [rsp+TAB+3*128] call edwards25519_scalarmuldouble_epadd // Multiple 6 - lea rdi, [rsp+1088] - lea rsi, [rsp+704] + lea rdi, [rsp+TAB+5*128] + lea rsi, [rsp+TAB+2*128] call edwards25519_scalarmuldouble_epdouble // Multiple 7 - lea rdi, [rsp+1216] - lea rsi, [rsp+448] - lea rbp, [rsp+1088] + lea rdi, [rsp+TAB+6*128] + lea rsi, [rsp+TAB] + lea rbp, [rsp+TAB+5*128] call edwards25519_scalarmuldouble_epadd // Multiple 8 - lea rdi, [rsp+1344] - lea rsi, [rsp+832] + lea rdi, [rsp+TAB+7*128] + lea rsi, [rsp+TAB+3*128] call edwards25519_scalarmuldouble_epdouble // Handle the initialization, starting the loop counter at i = 252 @@ -636,7 +645,7 @@ edwards25519_scalarmuldouble_standard: // Index for btable entry... - mov rax, [rsp+56] + mov rax, [rsp+BSCALAR+24] shr rax, 60 mov bf, rax @@ -872,22 +881,22 @@ edwards25519_scalarmuldouble_standard: mov rsi, [rbp+88] cmovz r15, rsi - mov [rsp+352], rax - mov [rsp+360], rbx - mov [rsp+368], rcx - mov [rsp+376], rdx - mov [rsp+384], r8 - mov [rsp+392], r9 - mov [rsp+400], r10 - mov [rsp+408], r11 - mov [rsp+416], r12 - mov [rsp+424], r13 - mov [rsp+432], r14 - mov [rsp+440], r15 + mov [rsp+BTABENT], rax + mov [rsp+BTABENT+8], rbx + mov [rsp+BTABENT+16], rcx + mov [rsp+BTABENT+24], rdx + mov [rsp+BTABENT+32], r8 + mov [rsp+BTABENT+40], r9 + mov [rsp+BTABENT+48], r10 + mov [rsp+BTABENT+56], r11 + mov [rsp+BTABENT+64], r12 + mov [rsp+BTABENT+72], r13 + mov [rsp+BTABENT+80], r14 + mov [rsp+BTABENT+88], r15 // Index for table entry... - mov rax, [rsp+24] + mov rax, [rsp+SCALAR+24] shr rax, 60 mov bf, rax @@ -903,7 +912,7 @@ edwards25519_scalarmuldouble_standard: xor r10d, r10d xor r11d, r11d - lea rbp, [rsp+480] + lea rbp, [rsp+TAB+32] cmp bf, 1 mov rsi, [rbp] @@ -1056,18 +1065,18 @@ edwards25519_scalarmuldouble_standard: mov rsi, [rbp+56] cmovz r11, rsi - mov [rsp+256], rax - mov [rsp+264], rbx - mov [rsp+272], rcx - mov [rsp+280], rdx - mov [rsp+288], r8 - mov [rsp+296], r9 - mov [rsp+304], r10 - mov [rsp+312], r11 + mov [rsp+TABENT+32], rax + mov [rsp+TABENT+40], rbx + mov [rsp+TABENT+48], rcx + mov [rsp+TABENT+56], rdx + mov [rsp+TABENT+64], r8 + mov [rsp+TABENT+72], r9 + mov [rsp+TABENT+80], r10 + mov [rsp+TABENT+88], r11 // ...followed by the X and W fields - lea rbp, [rsp+448] + lea rbp, [rsp+TAB] xor eax, eax xor ebx, ebx @@ -1229,20 +1238,20 @@ edwards25519_scalarmuldouble_standard: mov rsi, [rbp+120] cmovz r11, rsi - mov [rsp+224], rax - mov [rsp+232], rbx - mov [rsp+240], rcx - mov [rsp+248], rdx - mov [rsp+320], r8 - mov [rsp+328], r9 - mov [rsp+336], r10 - mov [rsp+344], r11 + mov [rsp+TABENT], rax + mov [rsp+TABENT+8], rbx + mov [rsp+TABENT+16], rcx + mov [rsp+TABENT+24], rdx + mov [rsp+TABENT+96], r8 + mov [rsp+TABENT+104], r9 + mov [rsp+TABENT+112], r10 + mov [rsp+TABENT+120], r11 // Add those elements to initialize the accumulator for bit position 252 - lea rdi, [rsp+96] - lea rsi, [rsp+224] - lea rbp, [rsp+352] + lea rdi, [rsp+ACC] + lea rsi, [rsp+TABENT] + lea rbp, [rsp+BTABENT] call edwards25519_scalarmuldouble_pepadd // Main loop with acc = [scalar/2^i] * point + [bscalar/2^i] * basepoint @@ -1256,8 +1265,8 @@ edwards25519_scalarmuldouble_loop: // Double to acc' = 2 * acc - lea rdi, [rsp+96] - lea rsi, [rsp+96] + lea rdi, [rsp+ACC] + lea rsi, [rsp+ACC] call edwards25519_scalarmuldouble_pdouble // Get btable entry, first getting the adjusted bitfield... @@ -1528,26 +1537,26 @@ edwards25519_scalarmuldouble_loop: mov rsi, rax cmovnz rsi, r8 cmovnz r8, rax - mov [rsp+352], rsi - mov [rsp+384], r8 + mov [rsp+BTABENT], rsi + mov [rsp+BTABENT+32], r8 mov rsi, rbx cmovnz rsi, r9 cmovnz r9, rbx - mov [rsp+360], rsi - mov [rsp+392], r9 + mov [rsp+BTABENT+8], rsi + mov [rsp+BTABENT+40], r9 mov rsi, rcx cmovnz rsi, r10 cmovnz r10, rcx - mov [rsp+368], rsi - mov [rsp+400], r10 + mov [rsp+BTABENT+16], rsi + mov [rsp+BTABENT+48], r10 mov rsi, rdx cmovnz rsi, r11 cmovnz r11, rdx - mov [rsp+376], rsi - mov [rsp+408], r11 + mov [rsp+BTABENT+24], rsi + mov [rsp+BTABENT+56], r11 xor r12, rdi xor r13, rdi @@ -1558,10 +1567,10 @@ edwards25519_scalarmuldouble_loop: sbb r13, 0 sbb r14, 0 sbb r15, 0 - mov [rsp+416], r12 - mov [rsp+424], r13 - mov [rsp+432], r14 - mov [rsp+440], r15 + mov [rsp+BTABENT+64], r12 + mov [rsp+BTABENT+72], r13 + mov [rsp+BTABENT+80], r14 + mov [rsp+BTABENT+88], r15 // Get table entry, first getting the adjusted bitfield... @@ -1592,7 +1601,7 @@ edwards25519_scalarmuldouble_loop: xor r10d, r10d xor r11d, r11d - lea rbp, [rsp+480] + lea rbp, [rsp+TAB+32] cmp bf, 1 mov rsi, [rbp] @@ -1745,18 +1754,18 @@ edwards25519_scalarmuldouble_loop: mov rsi, [rbp+56] cmovz r11, rsi - mov [rsp+256], rax - mov [rsp+264], rbx - mov [rsp+272], rcx - mov [rsp+280], rdx - mov [rsp+288], r8 - mov [rsp+296], r9 - mov [rsp+304], r10 - mov [rsp+312], r11 + mov [rsp+TABENT+32], rax + mov [rsp+TABENT+40], rbx + mov [rsp+TABENT+48], rcx + mov [rsp+TABENT+56], rdx + mov [rsp+TABENT+64], r8 + mov [rsp+TABENT+72], r9 + mov [rsp+TABENT+80], r10 + mov [rsp+TABENT+88], r11 // Now do the X and W fields... - lea rbp, [rsp+448] + lea rbp, [rsp+TAB] xor eax, eax xor ebx, ebx @@ -1950,51 +1959,51 @@ edwards25519_scalarmuldouble_loop: sbb rcx, 0 sbb rdx, 0 - mov [rsp+224], rax - mov [rsp+232], rbx - mov [rsp+240], rcx - mov [rsp+248], rdx + mov [rsp+TABENT], rax + mov [rsp+TABENT+8], rbx + mov [rsp+TABENT+16], rcx + mov [rsp+TABENT+24], rdx sub r8, rdi sbb r9, 0 sbb r10, 0 sbb r11, 0 - mov [rsp+320], r8 - mov [rsp+328], r9 - mov [rsp+336], r10 - mov [rsp+344], r11 + mov [rsp+TABENT+96], r8 + mov [rsp+TABENT+104], r9 + mov [rsp+TABENT+112], r10 + mov [rsp+TABENT+120], r11 // Double to acc' = 4 * acc - lea rdi, [rsp+96] - lea rsi, [rsp+96] + lea rdi, [rsp+ACC] + lea rsi, [rsp+ACC] call edwards25519_scalarmuldouble_pdouble // Add tabent := tabent + btabent - lea rdi, [rsp+224] - lea rsi, [rsp+224] - lea rbp, [rsp+352] + lea rdi, [rsp+TABENT] + lea rsi, [rsp+TABENT] + lea rbp, [rsp+BTABENT] call edwards25519_scalarmuldouble_pepadd // Double to acc' = 8 * acc - lea rdi, [rsp+96] - lea rsi, [rsp+96] + lea rdi, [rsp+ACC] + lea rsi, [rsp+ACC] call edwards25519_scalarmuldouble_pdouble // Double to acc' = 16 * acc - lea rdi, [rsp+96] - lea rsi, [rsp+96] + lea rdi, [rsp+ACC] + lea rsi, [rsp+ACC] call edwards25519_scalarmuldouble_epdouble // Add table entry, acc := acc + tabent - lea rdi, [rsp+96] - lea rsi, [rsp+96] - lea rbp, [rsp+224] + lea rdi, [rsp+ACC] + lea rsi, [rsp+ACC] + lea rbp, [rsp+TABENT] call edwards25519_scalarmuldouble_epadd // Loop down @@ -2003,423 +2012,1375 @@ edwards25519_scalarmuldouble_loop: test rax, rax jnz edwards25519_scalarmuldouble_loop -// Modular inverse setup +// Prepare to call the modular inverse function to get tab = 1/z - mov rdi, 4 - lea rsi, [rsp+224] - lea rdx, [rsp+160] - lea rcx, [rip+edwards25519_scalarmuldouble_p25519] - lea r8, [rsp+352] + lea rdi, [rsp+TAB] + lea rsi, [rsp+ACC+64] -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "x86/generic/bignum_modinv.S". Note -// that the stack it uses for its own temporaries is 80 bytes so it -// only overwrites local variables that are no longer needed. +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "x86/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 208 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, tab and acc. - mov [rsp+0x40], rsi - mov [rsp+0x38], r8 - mov [rsp+0x48], rcx - lea r10, [r8+8*rdi] - mov [rsp+0x30], r10 - lea r15, [r10+8*rdi] - xor r11, r11 - xor r9, r9 -edwards25519_scalarmuldouble_copyloop: - mov rax, [rdx+8*r9] - mov rbx, [rcx+8*r9] - mov [r10+8*r9], rax - mov [r15+8*r9], rbx - mov [r8+8*r9], rbx - mov [rsi+8*r9], r11 - inc r9 - cmp r9, rdi - jb edwards25519_scalarmuldouble_copyloop - mov rax, [r8] - mov rbx, rax - dec rbx - mov [r8], rbx - mov rbp, rax - mov r12, rax - shl rbp, 0x2 - sub r12, rbp - xor r12, 0x2 - mov rbp, r12 - imul rbp, rax - mov eax, 0x2 - add rax, rbp - add rbp, 0x1 - imul r12, rax - imul rbp, rbp - mov eax, 0x1 - add rax, rbp - imul r12, rax - imul rbp, rbp - mov eax, 0x1 - add rax, rbp - imul r12, rax - imul rbp, rbp + mov [rsp+0xc0], rdi + xor eax, eax + lea rcx, [rax-0x13] + not rax + mov [rsp], rcx + mov [rsp+0x8], rax + mov [rsp+0x10], rax + btr rax, 0x3f + mov [rsp+0x18], rax + mov rdx, [rsi] + mov rcx, [rsi+0x8] + mov r8, [rsi+0x10] + mov r9, [rsi+0x18] mov eax, 0x1 - add rax, rbp - imul r12, rax - mov [rsp+0x28], r12 - mov rax, rdi - shl rax, 0x7 - mov [rsp+0x20], rax -edwards25519_scalarmuldouble_outerloop: - mov r13, [rsp+0x20] - add r13, 0x3f - shr r13, 0x6 - cmp r13, rdi - cmovae r13, rdi - xor r12, r12 - xor r14, r14 - xor rbp, rbp - xor rsi, rsi - xor r11, r11 - mov r8, [rsp+0x30] - lea r15, [r8+8*rdi] - xor r9, r9 -edwards25519_scalarmuldouble_toploop: - mov rbx, [r8+8*r9] - mov rcx, [r15+8*r9] - mov r10, r11 - and r10, r12 - and r11, rbp - mov rax, rbx - or rax, rcx - neg rax - cmovb r14, r10 - cmovb rsi, r11 - cmovb r12, rbx - cmovb rbp, rcx - sbb r11, r11 - inc r9 - cmp r9, r13 - jb edwards25519_scalarmuldouble_toploop - mov rax, r12 - or rax, rbp - bsr rcx, rax - xor rcx, 0x3f - shld r12, r14, cl - shld rbp, rsi, cl - mov rax, [r8] - mov r14, rax - mov rax, [r15] - mov rsi, rax - mov r10d, 0x1 - mov r11d, 0x0 - mov ecx, 0x0 - mov edx, 0x1 - mov r9d, 0x3a - mov [rsp+0x8], rdi - mov [rsp+0x10], r13 - mov [rsp], r8 - mov [rsp+0x18], r15 -edwards25519_scalarmuldouble_innerloop: + xor r10d, r10d + bts r9, 0x3f + adc rax, r10 + imul rax, rax, 0x13 + add rdx, rax + adc rcx, r10 + adc r8, r10 + adc r9, r10 + mov eax, 0x13 + cmovb rax, r10 + sub rdx, rax + sbb rcx, r10 + sbb r8, r10 + sbb r9, r10 + btr r9, 0x3f + mov [rsp+0x20], rdx + mov [rsp+0x28], rcx + mov [rsp+0x30], r8 + mov [rsp+0x38], r9 xor eax, eax + mov [rsp+0x40], rax + mov [rsp+0x48], rax + mov [rsp+0x50], rax + mov [rsp+0x58], rax + movabs rax, 0xa0f99e2375022099 + mov [rsp+0x60], rax + movabs rax, 0xa8c68f3f1d132595 + mov [rsp+0x68], rax + movabs rax, 0x6c6c893805ac5242 + mov [rsp+0x70], rax + movabs rax, 0x276508b241770615 + mov [rsp+0x78], rax + mov QWORD PTR [rsp+0x90], 0xa + mov QWORD PTR [rsp+0x98], 0x1 + jmp curve25519_x25519_midloop +curve25519_x25519_inverseloop: + mov r9, r8 + sar r9, 0x3f + xor r8, r9 + sub r8, r9 + mov r11, r10 + sar r11, 0x3f + xor r10, r11 + sub r10, r11 + mov r13, r12 + sar r13, 0x3f + xor r12, r13 + sub r12, r13 + mov r15, r14 + sar r15, 0x3f + xor r14, r15 + sub r14, r15 + mov rax, r8 + and rax, r9 + mov rdi, r10 + and rdi, r11 + add rdi, rax + mov [rsp+0x80], rdi + mov rax, r12 + and rax, r13 + mov rsi, r14 + and rsi, r15 + add rsi, rax + mov [rsp+0x88], rsi xor ebx, ebx - xor r8, r8 - xor r15, r15 - bt r14, 0x0 - cmovb rax, rbp - cmovb rbx, rsi - cmovb r8, rcx - cmovb r15, rdx - mov r13, r14 - sub r14, rbx - sub rbx, r13 - mov rdi, r12 - sub rdi, rax - cmovb rbp, r12 - lea r12, [rdi-0x1] - cmovb r14, rbx - cmovb rsi, r13 - not r12 - cmovb rcx, r10 - cmovb rdx, r11 - cmovae r12, rdi - shr r14, 1 - add r10, r8 - add r11, r15 - shr r12, 1 - add rcx, rcx - add rdx, rdx - dec r9 - jne edwards25519_scalarmuldouble_innerloop - mov rdi, [rsp+0x8] - mov r13, [rsp+0x10] - mov r8, [rsp] - mov r15, [rsp+0x18] - mov [rsp], r10 - mov [rsp+0x8], r11 - mov [rsp+0x10], rcx - mov [rsp+0x18], rdx - mov r8, [rsp+0x38] - mov r15, [rsp+0x40] - xor r14, r14 - xor rsi, rsi - xor r10, r10 - xor r11, r11 - xor r9, r9 -edwards25519_scalarmuldouble_congloop: - mov rcx, [r8+8*r9] mov rax, [rsp] - mul rcx - add r14, rax - adc rdx, 0x0 - mov r12, rdx - mov rax, [rsp+0x10] - mul rcx + xor rax, r9 + mul r8 + add rdi, rax + adc rbx, rdx + mov rax, [rsp+0x20] + xor rax, r11 + mul r10 + add rdi, rax + adc rbx, rdx + xor ebp, ebp + mov rax, [rsp] + xor rax, r13 + mul r12 + add rsi, rax + adc rbp, rdx + mov rax, [rsp+0x20] + xor rax, r15 + mul r14 add rsi, rax - adc rdx, 0x0 - mov rbp, rdx - mov rcx, [r15+8*r9] + adc rbp, rdx + xor ecx, ecx mov rax, [rsp+0x8] - mul rcx - add r14, rax - adc r12, rdx - shrd r10, r14, 0x3a - mov [r8+8*r9], r10 - mov r10, r14 - mov r14, r12 + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x28] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + shrd rdi, rbx, 0x3b + mov [rsp], rdi + xor edi, edi + mov rax, [rsp+0x8] + xor rax, r13 + mul r12 + add rbp, rax + adc rdi, rdx + mov rax, [rsp+0x28] + xor rax, r15 + mul r14 + add rbp, rax + adc rdi, rdx + shrd rsi, rbp, 0x3b + mov [rsp+0x20], rsi + xor esi, esi + mov rax, [rsp+0x10] + xor rax, r9 + mul r8 + add rcx, rax + adc rsi, rdx + mov rax, [rsp+0x30] + xor rax, r11 + mul r10 + add rcx, rax + adc rsi, rdx + shrd rbx, rcx, 0x3b + mov [rsp+0x8], rbx + xor ebx, ebx + mov rax, [rsp+0x10] + xor rax, r13 + mul r12 + add rdi, rax + adc rbx, rdx + mov rax, [rsp+0x30] + xor rax, r15 + mul r14 + add rdi, rax + adc rbx, rdx + shrd rbp, rdi, 0x3b + mov [rsp+0x28], rbp mov rax, [rsp+0x18] - mul rcx + xor rax, r9 + mov rbp, rax + sar rbp, 0x3f + and rbp, r8 + neg rbp + mul r8 add rsi, rax adc rbp, rdx - shrd r11, rsi, 0x3a - mov [r15+8*r9], r11 - mov r11, rsi - mov rsi, rbp - inc r9 - cmp r9, rdi - jb edwards25519_scalarmuldouble_congloop - shld r14, r10, 0x6 - shld rsi, r11, 0x6 - mov r15, [rsp+0x48] - mov rbx, [r8] - mov r12, [rsp+0x28] - imul r12, rbx - mov rax, [r15] + mov rax, [rsp+0x38] + xor rax, r11 + mov rdx, rax + sar rdx, 0x3f + and rdx, r10 + sub rbp, rdx + mul r10 + add rsi, rax + adc rbp, rdx + shrd rcx, rsi, 0x3b + mov [rsp+0x10], rcx + shrd rsi, rbp, 0x3b + mov rax, [rsp+0x18] + mov [rsp+0x18], rsi + xor rax, r13 + mov rsi, rax + sar rsi, 0x3f + and rsi, r12 + neg rsi mul r12 - add rax, rbx - mov r10, rdx - mov r9d, 0x1 - mov rcx, rdi - dec rcx - je edwards25519_scalarmuldouble_wmontend -edwards25519_scalarmuldouble_wmontloop: - adc r10, [r8+8*r9] - sbb rbx, rbx - mov rax, [r15+8*r9] + add rbx, rax + adc rsi, rdx + mov rax, [rsp+0x38] + xor rax, r15 + mov rdx, rax + sar rdx, 0x3f + and rdx, r14 + sub rsi, rdx + mul r14 + add rbx, rax + adc rsi, rdx + shrd rdi, rbx, 0x3b + mov [rsp+0x30], rdi + shrd rbx, rsi, 0x3b + mov [rsp+0x38], rbx + mov rbx, [rsp+0x80] + mov rbp, [rsp+0x88] + xor ecx, ecx + mov rax, [rsp+0x40] + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x60] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + xor esi, esi + mov rax, [rsp+0x40] + xor rax, r13 mul r12 - sub rdx, rbx - add rax, r10 - mov [r8+8*r9-0x8], rax - mov r10, rdx - inc r9 - dec rcx - jne edwards25519_scalarmuldouble_wmontloop -edwards25519_scalarmuldouble_wmontend: - adc r10, r14 - mov [r8+8*rdi-0x8], r10 - sbb r10, r10 - neg r10 - mov rcx, rdi - xor r9, r9 -edwards25519_scalarmuldouble_wcmploop: - mov rax, [r8+8*r9] - sbb rax, [r15+8*r9] - inc r9 - dec rcx - jne edwards25519_scalarmuldouble_wcmploop - sbb r10, 0x0 - sbb r10, r10 - not r10 - xor rcx, rcx - xor r9, r9 -edwards25519_scalarmuldouble_wcorrloop: - mov rax, [r8+8*r9] - mov rbx, [r15+8*r9] - and rbx, r10 - neg rcx - sbb rax, rbx - sbb rcx, rcx - mov [r8+8*r9], rax - inc r9 - cmp r9, rdi - jb edwards25519_scalarmuldouble_wcorrloop + mov [rsp+0x40], rbx + add rbp, rax + adc rsi, rdx + mov rax, [rsp+0x60] + xor rax, r15 + mul r14 + add rbp, rax + adc rsi, rdx + mov [rsp+0x60], rbp + xor ebx, ebx + mov rax, [rsp+0x48] + xor rax, r9 + mul r8 + add rcx, rax + adc rbx, rdx + mov rax, [rsp+0x68] + xor rax, r11 + mul r10 + add rcx, rax + adc rbx, rdx + xor ebp, ebp + mov rax, [rsp+0x48] + xor rax, r13 + mul r12 + mov [rsp+0x48], rcx + add rsi, rax + adc rbp, rdx + mov rax, [rsp+0x68] + xor rax, r15 + mul r14 + add rsi, rax + adc rbp, rdx + mov [rsp+0x68], rsi + xor ecx, ecx + mov rax, [rsp+0x50] + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x70] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + xor esi, esi + mov rax, [rsp+0x50] + xor rax, r13 + mul r12 + mov [rsp+0x50], rbx + add rbp, rax + adc rsi, rdx + mov rax, [rsp+0x70] + xor rax, r15 + mul r14 + add rbp, rax + adc rsi, rdx + mov [rsp+0x70], rbp + mov rax, [rsp+0x58] + xor rax, r9 + mov rbx, r9 + and rbx, r8 + neg rbx + mul r8 + add rcx, rax + adc rbx, rdx + mov rax, [rsp+0x78] + xor rax, r11 + mov rdx, r11 + and rdx, r10 + sub rbx, rdx + mul r10 + add rcx, rax + adc rdx, rbx + mov rbx, rdx + shld rdx, rcx, 0x1 + sar rbx, 0x3f + add rdx, rbx + mov eax, 0x13 + imul rdx mov r8, [rsp+0x40] - mov rbx, [r8] - mov rbp, [rsp+0x28] - imul rbp, rbx - mov rax, [r15] - mul rbp - add rax, rbx - mov r11, rdx - mov r9d, 0x1 - mov rcx, rdi - dec rcx - je edwards25519_scalarmuldouble_zmontend -edwards25519_scalarmuldouble_zmontloop: - adc r11, [r8+8*r9] - sbb rbx, rbx - mov rax, [r15+8*r9] - mul rbp - sub rdx, rbx - add rax, r11 - mov [r8+8*r9-0x8], rax - mov r11, rdx - inc r9 - dec rcx - jne edwards25519_scalarmuldouble_zmontloop -edwards25519_scalarmuldouble_zmontend: - adc r11, rsi - mov [r8+8*rdi-0x8], r11 - sbb r11, r11 - neg r11 - mov rcx, rdi - xor r9, r9 -edwards25519_scalarmuldouble_zcmploop: - mov rax, [r8+8*r9] - sbb rax, [r15+8*r9] - inc r9 - dec rcx - jne edwards25519_scalarmuldouble_zcmploop - sbb r11, 0x0 - sbb r11, r11 - not r11 - xor rcx, rcx - xor r9, r9 -edwards25519_scalarmuldouble_zcorrloop: - mov rax, [r8+8*r9] - mov rbx, [r15+8*r9] - and rbx, r11 + add r8, rax + mov [rsp+0x40], r8 + mov r8, [rsp+0x48] + adc r8, rdx + mov [rsp+0x48], r8 + mov r8, [rsp+0x50] + adc r8, rbx + mov [rsp+0x50], r8 + adc rcx, rbx + shl rax, 0x3f + add rcx, rax + mov rax, [rsp+0x58] + mov [rsp+0x58], rcx + xor rax, r13 + mov rcx, r13 + and rcx, r12 neg rcx - sbb rax, rbx - sbb rcx, rcx - mov [r8+8*r9], rax - inc r9 - cmp r9, rdi - jb edwards25519_scalarmuldouble_zcorrloop - mov r8, [rsp+0x30] - lea r15, [r8+8*rdi] - xor r9, r9 - xor r12, r12 - xor r14, r14 - xor rbp, rbp - xor rsi, rsi -edwards25519_scalarmuldouble_crossloop: - mov rcx, [r8+8*r9] - mov rax, [rsp] - mul rcx - add r14, rax - adc rdx, 0x0 - mov r10, rdx - mov rax, [rsp+0x10] - mul rcx + mul r12 add rsi, rax - adc rdx, 0x0 - mov r11, rdx - mov rcx, [r15+8*r9] - mov rax, [rsp+0x8] - mul rcx - sub rdx, r12 - sub r14, rax - sbb r10, rdx - sbb r12, r12 - mov [r8+8*r9], r14 - mov r14, r10 - mov rax, [rsp+0x18] - mul rcx - sub rdx, rbp + adc rcx, rdx + mov rax, [rsp+0x78] + xor rax, r15 + mov rdx, r15 + and rdx, r14 + sub rcx, rdx + mul r14 + add rsi, rax + adc rdx, rcx + mov rcx, rdx + shld rdx, rsi, 0x1 + sar rcx, 0x3f + mov eax, 0x13 + add rdx, rcx + imul rdx + mov r8, [rsp+0x60] + add r8, rax + mov [rsp+0x60], r8 + mov r8, [rsp+0x68] + adc r8, rdx + mov [rsp+0x68], r8 + mov r8, [rsp+0x70] + adc r8, rcx + mov [rsp+0x70], r8 + adc rsi, rcx + shl rax, 0x3f + add rsi, rax + mov [rsp+0x78], rsi +curve25519_x25519_midloop: + mov rsi, [rsp+0x98] + mov rdx, [rsp] + mov rcx, [rsp+0x20] + mov rbx, rdx + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, 0xfffffffffffffffe + xor ebp, ebp + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax sub rsi, rax - sbb r11, rdx - sbb rbp, rbp - mov [r15+8*r9], rsi - mov rsi, r11 - inc r9 - cmp r9, r13 - jb edwards25519_scalarmuldouble_crossloop - xor r9, r9 - mov r10, r12 - mov r11, rbp - xor r14, r12 - xor rsi, rbp -edwards25519_scalarmuldouble_optnegloop: - mov rax, [r8+8*r9] - xor rax, r12 - neg r10 - adc rax, 0x0 - sbb r10, r10 - mov [r8+8*r9], rax - mov rax, [r15+8*r9] - xor rax, rbp - neg r11 - adc rax, 0x0 - sbb r11, r11 - mov [r15+8*r9], rax - inc r9 - cmp r9, r13 - jb edwards25519_scalarmuldouble_optnegloop - sub r14, r10 - sub rsi, r11 - mov r9, r13 -edwards25519_scalarmuldouble_shiftloop: - mov rax, [r8+8*r9-0x8] - mov r10, rax - shrd rax, r14, 0x3a - mov [r8+8*r9-0x8], rax - mov r14, r10 - mov rax, [r15+8*r9-0x8] - mov r11, rax - shrd rax, rsi, 0x3a - mov [r15+8*r9-0x8], rax - mov rsi, r11 - dec r9 - jne edwards25519_scalarmuldouble_shiftloop - not rbp - mov rcx, [rsp+0x48] - mov r8, [rsp+0x38] - mov r15, [rsp+0x40] - mov r10, r12 - mov r11, rbp - xor r9, r9 -edwards25519_scalarmuldouble_fliploop: - mov rdx, rbp - mov rax, [rcx+8*r9] - and rdx, rax - and rax, r12 - mov rbx, [r8+8*r9] - xor rbx, r12 - neg r10 - adc rax, rbx - sbb r10, r10 - mov [r8+8*r9], rax - mov rbx, [r15+8*r9] - xor rbx, rbp - neg r11 - adc rdx, rbx - sbb r11, r11 - mov [r15+8*r9], rdx - inc r9 - cmp r9, rdi - jb edwards25519_scalarmuldouble_fliploop - sub QWORD PTR [rsp+0x20], 0x3a - ja edwards25519_scalarmuldouble_outerloop + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea rdx, [rbx+rax] + lea rdi, [rcx+rax] + shl rdx, 0x16 + shl rdi, 0x16 + sar rdx, 0x2b + sar rdi, 0x2b + movabs rax, 0x20000100000 + lea rbx, [rbx+rax] + lea rcx, [rcx+rax] + sar rbx, 0x2a + sar rcx, 0x2a + mov [rsp+0xa0], rdx + mov [rsp+0xa8], rbx + mov [rsp+0xb0], rdi + mov [rsp+0xb8], rcx + mov r12, [rsp] + imul rdi, r12 + imul r12, rdx + mov r13, [rsp+0x20] + imul rbx, r13 + imul r13, rcx + add r12, rbx + add r13, rdi + sar r12, 0x14 + sar r13, 0x14 + mov rbx, r12 + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + mov rcx, r13 + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, 0xfffffffffffffffe + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea r8, [rbx+rax] + lea r10, [rcx+rax] + shl r8, 0x16 + shl r10, 0x16 + sar r8, 0x2b + sar r10, 0x2b + movabs rax, 0x20000100000 + lea r15, [rbx+rax] + lea r11, [rcx+rax] + sar r15, 0x2a + sar r11, 0x2a + mov rbx, r13 + mov rcx, r12 + imul r12, r8 + imul rbx, r15 + add r12, rbx + imul r13, r11 + imul rcx, r10 + add r13, rcx + sar r12, 0x14 + sar r13, 0x14 + mov rbx, r12 + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + mov rcx, r13 + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, [rsp+0xa0] + imul rax, r8 + mov rdx, [rsp+0xb0] + imul rdx, r15 + imul r8, [rsp+0xa8] + imul r15, [rsp+0xb8] + add r15, r8 + lea r9, [rax+rdx] + mov rax, [rsp+0xa0] + imul rax, r10 + mov rdx, [rsp+0xb0] + imul rdx, r11 + imul r10, [rsp+0xa8] + imul r11, [rsp+0xb8] + add r11, r10 + lea r13, [rax+rdx] + mov rax, 0xfffffffffffffffe + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea r8, [rbx+rax] + lea r12, [rcx+rax] + shl r8, 0x15 + shl r12, 0x15 + sar r8, 0x2b + sar r12, 0x2b + movabs rax, 0x20000100000 + lea r10, [rbx+rax] + lea r14, [rcx+rax] + sar r10, 0x2b + sar r14, 0x2b + mov rax, r9 + imul rax, r8 + mov rdx, r13 + imul rdx, r10 + imul r8, r15 + imul r10, r11 + add r10, r8 + lea r8, [rax+rdx] + mov rax, r9 + imul rax, r12 + mov rdx, r13 + imul rdx, r14 + imul r12, r15 + imul r14, r11 + add r14, r12 + lea r12, [rax+rdx] + mov [rsp+0x98], rsi + dec QWORD PTR [rsp+0x90] + jne curve25519_x25519_inverseloop + mov rax, [rsp] + mov rcx, [rsp+0x20] + imul rax, r8 + imul rcx, r10 + add rax, rcx + sar rax, 0x3f + mov r9, r8 + sar r9, 0x3f + xor r8, r9 + sub r8, r9 + xor r9, rax + mov r11, r10 + sar r11, 0x3f + xor r10, r11 + sub r10, r11 + xor r11, rax + mov r13, r12 + sar r13, 0x3f + xor r12, r13 + sub r12, r13 + xor r13, rax + mov r15, r14 + sar r15, 0x3f + xor r14, r15 + sub r14, r15 + xor r15, rax + mov rax, r8 + and rax, r9 + mov r12, r10 + and r12, r11 + add r12, rax + xor r13d, r13d + mov rax, [rsp+0x40] + xor rax, r9 + mul r8 + add r12, rax + adc r13, rdx + mov rax, [rsp+0x60] + xor rax, r11 + mul r10 + add r12, rax + adc r13, rdx + xor r14d, r14d + mov rax, [rsp+0x48] + xor rax, r9 + mul r8 + add r13, rax + adc r14, rdx + mov rax, [rsp+0x68] + xor rax, r11 + mul r10 + add r13, rax + adc r14, rdx + xor r15d, r15d + mov rax, [rsp+0x50] + xor rax, r9 + mul r8 + add r14, rax + adc r15, rdx + mov rax, [rsp+0x70] + xor rax, r11 + mul r10 + add r14, rax + adc r15, rdx + mov rax, [rsp+0x58] + xor rax, r9 + and r9, r8 + neg r9 + mul r8 + add r15, rax + adc r9, rdx + mov rax, [rsp+0x78] + xor rax, r11 + mov rdx, r11 + and rdx, r10 + sub r9, rdx + mul r10 + add r15, rax + adc r9, rdx + mov rax, r9 + shld rax, r15, 0x1 + sar r9, 0x3f + mov ebx, 0x13 + lea rax, [rax+r9+0x1] + imul rbx + xor ebp, ebp + add r12, rax + adc r13, rdx + adc r14, r9 + adc r15, r9 + shl rax, 0x3f + add r15, rax + cmovns rbx, rbp + sub r12, rbx + sbb r13, rbp + sbb r14, rbp + sbb r15, rbp + btr r15, 0x3f + mov rdi, [rsp+0xc0] + mov [rdi], r12 + mov [rdi+0x8], r13 + mov [rdi+0x10], r14 + mov [rdi+0x18], r15 // Store result mov rdi, res - lea rsi, [rsp+96] - lea rbp, [rsp+224] + lea rsi, [rsp+ACC] + lea rbp, [rsp+TAB] mul_p25519(x_0,x_1,x_2) mov rdi, res add rdi, 32 - lea rsi, [rsp+128] - lea rbp, [rsp+224] + lea rsi, [rsp+ACC+32] + lea rbp, [rsp+TAB] mul_p25519(x_0,x_1,x_2) // Restore stack and registers @@ -2528,14 +3489,6 @@ edwards25519_scalarmuldouble_pepadd: // .section .rodata // **************************************************************************** -// The modulus p_25519 = 2^255 - 19, for the modular inverse - -edwards25519_scalarmuldouble_p25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // Precomputed table of multiples of generator for edwards25519 // all in precomputed extended-projective (y-x,x+y,2*d*x*y) triples. diff --git a/x86/curve25519/edwards25519_scalarmuldouble_alt.S b/x86/curve25519/edwards25519_scalarmuldouble_alt.S index 5121e63a..aa9675bf 100644 --- a/x86/curve25519/edwards25519_scalarmuldouble_alt.S +++ b/x86/curve25519/edwards25519_scalarmuldouble_alt.S @@ -42,24 +42,33 @@ #define scalar rsp+(0*NUMSIZE) #define bscalar rsp+(1*NUMSIZE) -#define acc rsp+(3*NUMSIZE) +#define tabent rsp+(2*NUMSIZE) +#define btabent rsp+(6*NUMSIZE) -#define tabent rsp+(7*NUMSIZE) -#define btabent rsp+(11*NUMSIZE) +#define acc rsp+(9*NUMSIZE) -#define tab rsp+(14*NUMSIZE) +#define tab rsp+(13*NUMSIZE) // Additional variables kept on the stack -#define bf QWORD PTR [rsp+2*NUMSIZE] -#define cf QWORD PTR [rsp+2*NUMSIZE+8] -#define i QWORD PTR [rsp+2*NUMSIZE+16] -#define res QWORD PTR [rsp+2*NUMSIZE+24] +#define bf QWORD PTR [rsp+45*NUMSIZE] +#define cf QWORD PTR [rsp+45*NUMSIZE+8] +#define i QWORD PTR [rsp+45*NUMSIZE+16] +#define res QWORD PTR [rsp+45*NUMSIZE+24] // Total size to reserve on the stack (excluding local subroutines) #define NSPACE (46*NUMSIZE) +// Syntactic variants to make x86_att forms easier to generate + +#define SCALAR (0*NUMSIZE) +#define BSCALAR (1*NUMSIZE) +#define TABENT (2*NUMSIZE) +#define BTABENT (6*NUMSIZE) +#define ACC (9*NUMSIZE) +#define TAB (13*NUMSIZE) + // Sub-references used in local subroutines with local stack #define x_0 rdi+0 @@ -610,10 +619,10 @@ edwards25519_scalarmuldouble_alt_standard: adc r9, r13 adc r10, r14 adc r11, r15 - mov [rsp+32], r8 - mov [rsp+40], r9 - mov [rsp+48], r10 - mov [rsp+56], r11 + mov [rsp+BSCALAR], r8 + mov [rsp+BSCALAR+8], r9 + mov [rsp+BSCALAR+16], r10 + mov [rsp+BSCALAR+24], r11 mov r8, [rsi] mov r9, [rsi+8] @@ -634,10 +643,10 @@ edwards25519_scalarmuldouble_alt_standard: adc r9, r13 adc r10, r14 adc r11, r15 - mov [rsp], r8 - mov [rsp+8], r9 - mov [rsp+16], r10 - mov [rsp+24], r11 + mov [rsp+SCALAR], r8 + mov [rsp+SCALAR+8], r9 + mov [rsp+SCALAR+16], r10 + mov [rsp+SCALAR+24], r11 // Create table of multiples 1..8 of the general input point at "tab". // Reduce the input coordinates x and y modulo 2^256 - 38 first, for the @@ -658,13 +667,13 @@ edwards25519_scalarmuldouble_alt_standard: adc rcx, r10 adc rsi, r11 cmovnc rax, r8 - mov [rsp+448], rax + mov [rsp+TAB], rax cmovnc rbx, r9 - mov [rsp+456], rbx + mov [rsp+TAB+8], rbx cmovnc rcx, r10 - mov [rsp+464], rcx + mov [rsp+TAB+16], rcx cmovnc rsi, r11 - mov [rsp+472], rsi + mov [rsp+TAB+24], rsi mov eax, 38 mov r8, [rdx+32] @@ -679,69 +688,69 @@ edwards25519_scalarmuldouble_alt_standard: adc rcx, r10 adc rsi, r11 cmovnc rax, r8 - mov [rsp+480], rax + mov [rsp+TAB+32], rax cmovnc rbx, r9 - mov [rsp+488], rbx + mov [rsp+TAB+40], rbx cmovnc rcx, r10 - mov [rsp+496], rcx + mov [rsp+TAB+48], rcx cmovnc rsi, r11 - mov [rsp+504], rsi + mov [rsp+TAB+56], rsi mov eax, 1 - mov [rsp+512], rax + mov [rsp+TAB+64], rax xor eax, eax - mov [rsp+520], rax - mov [rsp+528], rax - mov [rsp+536], rax + mov [rsp+TAB+72], rax + mov [rsp+TAB+80], rax + mov [rsp+TAB+88], rax - lea rdi, [rsp+544] - lea rsi, [rsp+448] - lea rbp, [rsp+480] + lea rdi, [rsp+TAB+96] + lea rsi, [rsp+TAB] + lea rbp, [rsp+TAB+32] mul_4(x_0,x_1,x_2) // Multiple 2 - lea rdi, [rsp+576] - lea rsi, [rsp+448] + lea rdi, [rsp+TAB+1*128] + lea rsi, [rsp+TAB] call edwards25519_scalarmuldouble_alt_epdouble // Multiple 3 - lea rdi, [rsp+704] - lea rsi, [rsp+448] - lea rbp, [rsp+576] + lea rdi, [rsp+TAB+2*128] + lea rsi, [rsp+TAB] + lea rbp, [rsp+TAB+1*128] call edwards25519_scalarmuldouble_alt_epadd // Multiple 4 - lea rdi, [rsp+832] - lea rsi, [rsp+576] + lea rdi, [rsp+TAB+3*128] + lea rsi, [rsp+TAB+1*128] call edwards25519_scalarmuldouble_alt_epdouble // Multiple 5 - lea rdi, [rsp+960] - lea rsi, [rsp+448] - lea rbp, [rsp+832] + lea rdi, [rsp+TAB+4*128] + lea rsi, [rsp+TAB] + lea rbp, [rsp+TAB+3*128] call edwards25519_scalarmuldouble_alt_epadd // Multiple 6 - lea rdi, [rsp+1088] - lea rsi, [rsp+704] + lea rdi, [rsp+TAB+5*128] + lea rsi, [rsp+TAB+2*128] call edwards25519_scalarmuldouble_alt_epdouble // Multiple 7 - lea rdi, [rsp+1216] - lea rsi, [rsp+448] - lea rbp, [rsp+1088] + lea rdi, [rsp+TAB+6*128] + lea rsi, [rsp+TAB] + lea rbp, [rsp+TAB+5*128] call edwards25519_scalarmuldouble_alt_epadd // Multiple 8 - lea rdi, [rsp+1344] - lea rsi, [rsp+832] + lea rdi, [rsp+TAB+7*128] + lea rsi, [rsp+TAB+3*128] call edwards25519_scalarmuldouble_alt_epdouble // Handle the initialization, starting the loop counter at i = 252 @@ -753,7 +762,7 @@ edwards25519_scalarmuldouble_alt_standard: // Index for btable entry... - mov rax, [rsp+56] + mov rax, [rsp+BSCALAR+24] shr rax, 60 mov bf, rax @@ -989,22 +998,22 @@ edwards25519_scalarmuldouble_alt_standard: mov rsi, [rbp+88] cmovz r15, rsi - mov [rsp+352], rax - mov [rsp+360], rbx - mov [rsp+368], rcx - mov [rsp+376], rdx - mov [rsp+384], r8 - mov [rsp+392], r9 - mov [rsp+400], r10 - mov [rsp+408], r11 - mov [rsp+416], r12 - mov [rsp+424], r13 - mov [rsp+432], r14 - mov [rsp+440], r15 + mov [rsp+BTABENT], rax + mov [rsp+BTABENT+8], rbx + mov [rsp+BTABENT+16], rcx + mov [rsp+BTABENT+24], rdx + mov [rsp+BTABENT+32], r8 + mov [rsp+BTABENT+40], r9 + mov [rsp+BTABENT+48], r10 + mov [rsp+BTABENT+56], r11 + mov [rsp+BTABENT+64], r12 + mov [rsp+BTABENT+72], r13 + mov [rsp+BTABENT+80], r14 + mov [rsp+BTABENT+88], r15 // Index for table entry... - mov rax, [rsp+24] + mov rax, [rsp+SCALAR+24] shr rax, 60 mov bf, rax @@ -1020,7 +1029,7 @@ edwards25519_scalarmuldouble_alt_standard: xor r10d, r10d xor r11d, r11d - lea rbp, [rsp+480] + lea rbp, [rsp+TAB+32] cmp bf, 1 mov rsi, [rbp] @@ -1173,18 +1182,18 @@ edwards25519_scalarmuldouble_alt_standard: mov rsi, [rbp+56] cmovz r11, rsi - mov [rsp+256], rax - mov [rsp+264], rbx - mov [rsp+272], rcx - mov [rsp+280], rdx - mov [rsp+288], r8 - mov [rsp+296], r9 - mov [rsp+304], r10 - mov [rsp+312], r11 + mov [rsp+TABENT+32], rax + mov [rsp+TABENT+40], rbx + mov [rsp+TABENT+48], rcx + mov [rsp+TABENT+56], rdx + mov [rsp+TABENT+64], r8 + mov [rsp+TABENT+72], r9 + mov [rsp+TABENT+80], r10 + mov [rsp+TABENT+88], r11 // ...followed by the X and W fields - lea rbp, [rsp+448] + lea rbp, [rsp+TAB] xor eax, eax xor ebx, ebx @@ -1346,20 +1355,20 @@ edwards25519_scalarmuldouble_alt_standard: mov rsi, [rbp+120] cmovz r11, rsi - mov [rsp+224], rax - mov [rsp+232], rbx - mov [rsp+240], rcx - mov [rsp+248], rdx - mov [rsp+320], r8 - mov [rsp+328], r9 - mov [rsp+336], r10 - mov [rsp+344], r11 + mov [rsp+TABENT], rax + mov [rsp+TABENT+8], rbx + mov [rsp+TABENT+16], rcx + mov [rsp+TABENT+24], rdx + mov [rsp+TABENT+96], r8 + mov [rsp+TABENT+104], r9 + mov [rsp+TABENT+112], r10 + mov [rsp+TABENT+120], r11 // Add those elements to initialize the accumulator for bit position 252 - lea rdi, [rsp+96] - lea rsi, [rsp+224] - lea rbp, [rsp+352] + lea rdi, [rsp+ACC] + lea rsi, [rsp+TABENT] + lea rbp, [rsp+BTABENT] call edwards25519_scalarmuldouble_alt_pepadd // Main loop with acc = [scalar/2^i] * point + [bscalar/2^i] * basepoint @@ -1373,8 +1382,8 @@ edwards25519_scalarmuldouble_alt_loop: // Double to acc' = 2 * acc - lea rdi, [rsp+96] - lea rsi, [rsp+96] + lea rdi, [rsp+ACC] + lea rsi, [rsp+ACC] call edwards25519_scalarmuldouble_alt_pdouble // Get btable entry, first getting the adjusted bitfield... @@ -1645,26 +1654,26 @@ edwards25519_scalarmuldouble_alt_loop: mov rsi, rax cmovnz rsi, r8 cmovnz r8, rax - mov [rsp+352], rsi - mov [rsp+384], r8 + mov [rsp+BTABENT], rsi + mov [rsp+BTABENT+32], r8 mov rsi, rbx cmovnz rsi, r9 cmovnz r9, rbx - mov [rsp+360], rsi - mov [rsp+392], r9 + mov [rsp+BTABENT+8], rsi + mov [rsp+BTABENT+40], r9 mov rsi, rcx cmovnz rsi, r10 cmovnz r10, rcx - mov [rsp+368], rsi - mov [rsp+400], r10 + mov [rsp+BTABENT+16], rsi + mov [rsp+BTABENT+48], r10 mov rsi, rdx cmovnz rsi, r11 cmovnz r11, rdx - mov [rsp+376], rsi - mov [rsp+408], r11 + mov [rsp+BTABENT+24], rsi + mov [rsp+BTABENT+56], r11 xor r12, rdi xor r13, rdi @@ -1675,10 +1684,10 @@ edwards25519_scalarmuldouble_alt_loop: sbb r13, 0 sbb r14, 0 sbb r15, 0 - mov [rsp+416], r12 - mov [rsp+424], r13 - mov [rsp+432], r14 - mov [rsp+440], r15 + mov [rsp+BTABENT+64], r12 + mov [rsp+BTABENT+72], r13 + mov [rsp+BTABENT+80], r14 + mov [rsp+BTABENT+88], r15 // Get table entry, first getting the adjusted bitfield... @@ -1709,7 +1718,7 @@ edwards25519_scalarmuldouble_alt_loop: xor r10d, r10d xor r11d, r11d - lea rbp, [rsp+480] + lea rbp, [rsp+TAB+32] cmp bf, 1 mov rsi, [rbp] @@ -1862,18 +1871,18 @@ edwards25519_scalarmuldouble_alt_loop: mov rsi, [rbp+56] cmovz r11, rsi - mov [rsp+256], rax - mov [rsp+264], rbx - mov [rsp+272], rcx - mov [rsp+280], rdx - mov [rsp+288], r8 - mov [rsp+296], r9 - mov [rsp+304], r10 - mov [rsp+312], r11 + mov [rsp+TABENT+32], rax + mov [rsp+TABENT+40], rbx + mov [rsp+TABENT+48], rcx + mov [rsp+TABENT+56], rdx + mov [rsp+TABENT+64], r8 + mov [rsp+TABENT+72], r9 + mov [rsp+TABENT+80], r10 + mov [rsp+TABENT+88], r11 // Now do the X and W fields... - lea rbp, [rsp+448] + lea rbp, [rsp+TAB] xor eax, eax xor ebx, ebx @@ -2067,51 +2076,51 @@ edwards25519_scalarmuldouble_alt_loop: sbb rcx, 0 sbb rdx, 0 - mov [rsp+224], rax - mov [rsp+232], rbx - mov [rsp+240], rcx - mov [rsp+248], rdx + mov [rsp+TABENT], rax + mov [rsp+TABENT+8], rbx + mov [rsp+TABENT+16], rcx + mov [rsp+TABENT+24], rdx sub r8, rdi sbb r9, 0 sbb r10, 0 sbb r11, 0 - mov [rsp+320], r8 - mov [rsp+328], r9 - mov [rsp+336], r10 - mov [rsp+344], r11 + mov [rsp+TABENT+96], r8 + mov [rsp+TABENT+104], r9 + mov [rsp+TABENT+112], r10 + mov [rsp+TABENT+120], r11 // Double to acc' = 4 * acc - lea rdi, [rsp+96] - lea rsi, [rsp+96] + lea rdi, [rsp+ACC] + lea rsi, [rsp+ACC] call edwards25519_scalarmuldouble_alt_pdouble // Add tabent := tabent + btabent - lea rdi, [rsp+224] - lea rsi, [rsp+224] - lea rbp, [rsp+352] + lea rdi, [rsp+TABENT] + lea rsi, [rsp+TABENT] + lea rbp, [rsp+BTABENT] call edwards25519_scalarmuldouble_alt_pepadd // Double to acc' = 8 * acc - lea rdi, [rsp+96] - lea rsi, [rsp+96] + lea rdi, [rsp+ACC] + lea rsi, [rsp+ACC] call edwards25519_scalarmuldouble_alt_pdouble // Double to acc' = 16 * acc - lea rdi, [rsp+96] - lea rsi, [rsp+96] + lea rdi, [rsp+ACC] + lea rsi, [rsp+ACC] call edwards25519_scalarmuldouble_alt_epdouble // Add table entry, acc := acc + tabent - lea rdi, [rsp+96] - lea rsi, [rsp+96] - lea rbp, [rsp+224] + lea rdi, [rsp+ACC] + lea rsi, [rsp+ACC] + lea rbp, [rsp+TABENT] call edwards25519_scalarmuldouble_alt_epadd // Loop down @@ -2120,423 +2129,1375 @@ edwards25519_scalarmuldouble_alt_loop: test rax, rax jnz edwards25519_scalarmuldouble_alt_loop -// Modular inverse setup +// Prepare to call the modular inverse function to get tab = 1/z - mov rdi, 4 - lea rsi, [rsp+224] - lea rdx, [rsp+160] - lea rcx, [rip+edwards25519_scalarmuldouble_alt_p25519] - lea r8, [rsp+352] + lea rdi, [rsp+TAB] + lea rsi, [rsp+ACC+64] -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "x86/generic/bignum_modinv.S". Note -// that the stack it uses for its own temporaries is 80 bytes so it -// only overwrites local variables that are no longer needed. +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "x86/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 208 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, tab and acc. - mov [rsp+0x40], rsi - mov [rsp+0x38], r8 - mov [rsp+0x48], rcx - lea r10, [r8+8*rdi] - mov [rsp+0x30], r10 - lea r15, [r10+8*rdi] - xor r11, r11 - xor r9, r9 -edwards25519_scalarmuldouble_alt_copyloop: - mov rax, [rdx+8*r9] - mov rbx, [rcx+8*r9] - mov [r10+8*r9], rax - mov [r15+8*r9], rbx - mov [r8+8*r9], rbx - mov [rsi+8*r9], r11 - inc r9 - cmp r9, rdi - jb edwards25519_scalarmuldouble_alt_copyloop - mov rax, [r8] - mov rbx, rax - dec rbx - mov [r8], rbx - mov rbp, rax - mov r12, rax - shl rbp, 0x2 - sub r12, rbp - xor r12, 0x2 - mov rbp, r12 - imul rbp, rax - mov eax, 0x2 - add rax, rbp - add rbp, 0x1 - imul r12, rax - imul rbp, rbp - mov eax, 0x1 - add rax, rbp - imul r12, rax - imul rbp, rbp - mov eax, 0x1 - add rax, rbp - imul r12, rax - imul rbp, rbp + mov [rsp+0xc0], rdi + xor eax, eax + lea rcx, [rax-0x13] + not rax + mov [rsp], rcx + mov [rsp+0x8], rax + mov [rsp+0x10], rax + btr rax, 0x3f + mov [rsp+0x18], rax + mov rdx, [rsi] + mov rcx, [rsi+0x8] + mov r8, [rsi+0x10] + mov r9, [rsi+0x18] mov eax, 0x1 - add rax, rbp - imul r12, rax - mov [rsp+0x28], r12 - mov rax, rdi - shl rax, 0x7 - mov [rsp+0x20], rax -edwards25519_scalarmuldouble_alt_outerloop: - mov r13, [rsp+0x20] - add r13, 0x3f - shr r13, 0x6 - cmp r13, rdi - cmovae r13, rdi - xor r12, r12 - xor r14, r14 - xor rbp, rbp - xor rsi, rsi - xor r11, r11 - mov r8, [rsp+0x30] - lea r15, [r8+8*rdi] - xor r9, r9 -edwards25519_scalarmuldouble_alt_toploop: - mov rbx, [r8+8*r9] - mov rcx, [r15+8*r9] - mov r10, r11 - and r10, r12 - and r11, rbp - mov rax, rbx - or rax, rcx - neg rax - cmovb r14, r10 - cmovb rsi, r11 - cmovb r12, rbx - cmovb rbp, rcx - sbb r11, r11 - inc r9 - cmp r9, r13 - jb edwards25519_scalarmuldouble_alt_toploop - mov rax, r12 - or rax, rbp - bsr rcx, rax - xor rcx, 0x3f - shld r12, r14, cl - shld rbp, rsi, cl - mov rax, [r8] - mov r14, rax - mov rax, [r15] - mov rsi, rax - mov r10d, 0x1 - mov r11d, 0x0 - mov ecx, 0x0 - mov edx, 0x1 - mov r9d, 0x3a - mov [rsp+0x8], rdi - mov [rsp+0x10], r13 - mov [rsp], r8 - mov [rsp+0x18], r15 -edwards25519_scalarmuldouble_alt_innerloop: + xor r10d, r10d + bts r9, 0x3f + adc rax, r10 + imul rax, rax, 0x13 + add rdx, rax + adc rcx, r10 + adc r8, r10 + adc r9, r10 + mov eax, 0x13 + cmovb rax, r10 + sub rdx, rax + sbb rcx, r10 + sbb r8, r10 + sbb r9, r10 + btr r9, 0x3f + mov [rsp+0x20], rdx + mov [rsp+0x28], rcx + mov [rsp+0x30], r8 + mov [rsp+0x38], r9 xor eax, eax + mov [rsp+0x40], rax + mov [rsp+0x48], rax + mov [rsp+0x50], rax + mov [rsp+0x58], rax + movabs rax, 0xa0f99e2375022099 + mov [rsp+0x60], rax + movabs rax, 0xa8c68f3f1d132595 + mov [rsp+0x68], rax + movabs rax, 0x6c6c893805ac5242 + mov [rsp+0x70], rax + movabs rax, 0x276508b241770615 + mov [rsp+0x78], rax + mov QWORD PTR [rsp+0x90], 0xa + mov QWORD PTR [rsp+0x98], 0x1 + jmp curve25519_x25519_midloop +curve25519_x25519_inverseloop: + mov r9, r8 + sar r9, 0x3f + xor r8, r9 + sub r8, r9 + mov r11, r10 + sar r11, 0x3f + xor r10, r11 + sub r10, r11 + mov r13, r12 + sar r13, 0x3f + xor r12, r13 + sub r12, r13 + mov r15, r14 + sar r15, 0x3f + xor r14, r15 + sub r14, r15 + mov rax, r8 + and rax, r9 + mov rdi, r10 + and rdi, r11 + add rdi, rax + mov [rsp+0x80], rdi + mov rax, r12 + and rax, r13 + mov rsi, r14 + and rsi, r15 + add rsi, rax + mov [rsp+0x88], rsi xor ebx, ebx - xor r8, r8 - xor r15, r15 - bt r14, 0x0 - cmovb rax, rbp - cmovb rbx, rsi - cmovb r8, rcx - cmovb r15, rdx - mov r13, r14 - sub r14, rbx - sub rbx, r13 - mov rdi, r12 - sub rdi, rax - cmovb rbp, r12 - lea r12, [rdi-0x1] - cmovb r14, rbx - cmovb rsi, r13 - not r12 - cmovb rcx, r10 - cmovb rdx, r11 - cmovae r12, rdi - shr r14, 1 - add r10, r8 - add r11, r15 - shr r12, 1 - add rcx, rcx - add rdx, rdx - dec r9 - jne edwards25519_scalarmuldouble_alt_innerloop - mov rdi, [rsp+0x8] - mov r13, [rsp+0x10] - mov r8, [rsp] - mov r15, [rsp+0x18] - mov [rsp], r10 - mov [rsp+0x8], r11 - mov [rsp+0x10], rcx - mov [rsp+0x18], rdx - mov r8, [rsp+0x38] - mov r15, [rsp+0x40] - xor r14, r14 - xor rsi, rsi - xor r10, r10 - xor r11, r11 - xor r9, r9 -edwards25519_scalarmuldouble_alt_congloop: - mov rcx, [r8+8*r9] mov rax, [rsp] - mul rcx - add r14, rax - adc rdx, 0x0 - mov r12, rdx - mov rax, [rsp+0x10] - mul rcx + xor rax, r9 + mul r8 + add rdi, rax + adc rbx, rdx + mov rax, [rsp+0x20] + xor rax, r11 + mul r10 + add rdi, rax + adc rbx, rdx + xor ebp, ebp + mov rax, [rsp] + xor rax, r13 + mul r12 + add rsi, rax + adc rbp, rdx + mov rax, [rsp+0x20] + xor rax, r15 + mul r14 add rsi, rax - adc rdx, 0x0 - mov rbp, rdx - mov rcx, [r15+8*r9] + adc rbp, rdx + xor ecx, ecx mov rax, [rsp+0x8] - mul rcx - add r14, rax - adc r12, rdx - shrd r10, r14, 0x3a - mov [r8+8*r9], r10 - mov r10, r14 - mov r14, r12 + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x28] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + shrd rdi, rbx, 0x3b + mov [rsp], rdi + xor edi, edi + mov rax, [rsp+0x8] + xor rax, r13 + mul r12 + add rbp, rax + adc rdi, rdx + mov rax, [rsp+0x28] + xor rax, r15 + mul r14 + add rbp, rax + adc rdi, rdx + shrd rsi, rbp, 0x3b + mov [rsp+0x20], rsi + xor esi, esi + mov rax, [rsp+0x10] + xor rax, r9 + mul r8 + add rcx, rax + adc rsi, rdx + mov rax, [rsp+0x30] + xor rax, r11 + mul r10 + add rcx, rax + adc rsi, rdx + shrd rbx, rcx, 0x3b + mov [rsp+0x8], rbx + xor ebx, ebx + mov rax, [rsp+0x10] + xor rax, r13 + mul r12 + add rdi, rax + adc rbx, rdx + mov rax, [rsp+0x30] + xor rax, r15 + mul r14 + add rdi, rax + adc rbx, rdx + shrd rbp, rdi, 0x3b + mov [rsp+0x28], rbp mov rax, [rsp+0x18] - mul rcx + xor rax, r9 + mov rbp, rax + sar rbp, 0x3f + and rbp, r8 + neg rbp + mul r8 add rsi, rax adc rbp, rdx - shrd r11, rsi, 0x3a - mov [r15+8*r9], r11 - mov r11, rsi - mov rsi, rbp - inc r9 - cmp r9, rdi - jb edwards25519_scalarmuldouble_alt_congloop - shld r14, r10, 0x6 - shld rsi, r11, 0x6 - mov r15, [rsp+0x48] - mov rbx, [r8] - mov r12, [rsp+0x28] - imul r12, rbx - mov rax, [r15] + mov rax, [rsp+0x38] + xor rax, r11 + mov rdx, rax + sar rdx, 0x3f + and rdx, r10 + sub rbp, rdx + mul r10 + add rsi, rax + adc rbp, rdx + shrd rcx, rsi, 0x3b + mov [rsp+0x10], rcx + shrd rsi, rbp, 0x3b + mov rax, [rsp+0x18] + mov [rsp+0x18], rsi + xor rax, r13 + mov rsi, rax + sar rsi, 0x3f + and rsi, r12 + neg rsi mul r12 - add rax, rbx - mov r10, rdx - mov r9d, 0x1 - mov rcx, rdi - dec rcx - je edwards25519_scalarmuldouble_alt_wmontend -edwards25519_scalarmuldouble_alt_wmontloop: - adc r10, [r8+8*r9] - sbb rbx, rbx - mov rax, [r15+8*r9] + add rbx, rax + adc rsi, rdx + mov rax, [rsp+0x38] + xor rax, r15 + mov rdx, rax + sar rdx, 0x3f + and rdx, r14 + sub rsi, rdx + mul r14 + add rbx, rax + adc rsi, rdx + shrd rdi, rbx, 0x3b + mov [rsp+0x30], rdi + shrd rbx, rsi, 0x3b + mov [rsp+0x38], rbx + mov rbx, [rsp+0x80] + mov rbp, [rsp+0x88] + xor ecx, ecx + mov rax, [rsp+0x40] + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x60] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + xor esi, esi + mov rax, [rsp+0x40] + xor rax, r13 mul r12 - sub rdx, rbx - add rax, r10 - mov [r8+8*r9-0x8], rax - mov r10, rdx - inc r9 - dec rcx - jne edwards25519_scalarmuldouble_alt_wmontloop -edwards25519_scalarmuldouble_alt_wmontend: - adc r10, r14 - mov [r8+8*rdi-0x8], r10 - sbb r10, r10 - neg r10 - mov rcx, rdi - xor r9, r9 -edwards25519_scalarmuldouble_alt_wcmploop: - mov rax, [r8+8*r9] - sbb rax, [r15+8*r9] - inc r9 - dec rcx - jne edwards25519_scalarmuldouble_alt_wcmploop - sbb r10, 0x0 - sbb r10, r10 - not r10 - xor rcx, rcx - xor r9, r9 -edwards25519_scalarmuldouble_alt_wcorrloop: - mov rax, [r8+8*r9] - mov rbx, [r15+8*r9] - and rbx, r10 - neg rcx - sbb rax, rbx - sbb rcx, rcx - mov [r8+8*r9], rax - inc r9 - cmp r9, rdi - jb edwards25519_scalarmuldouble_alt_wcorrloop + mov [rsp+0x40], rbx + add rbp, rax + adc rsi, rdx + mov rax, [rsp+0x60] + xor rax, r15 + mul r14 + add rbp, rax + adc rsi, rdx + mov [rsp+0x60], rbp + xor ebx, ebx + mov rax, [rsp+0x48] + xor rax, r9 + mul r8 + add rcx, rax + adc rbx, rdx + mov rax, [rsp+0x68] + xor rax, r11 + mul r10 + add rcx, rax + adc rbx, rdx + xor ebp, ebp + mov rax, [rsp+0x48] + xor rax, r13 + mul r12 + mov [rsp+0x48], rcx + add rsi, rax + adc rbp, rdx + mov rax, [rsp+0x68] + xor rax, r15 + mul r14 + add rsi, rax + adc rbp, rdx + mov [rsp+0x68], rsi + xor ecx, ecx + mov rax, [rsp+0x50] + xor rax, r9 + mul r8 + add rbx, rax + adc rcx, rdx + mov rax, [rsp+0x70] + xor rax, r11 + mul r10 + add rbx, rax + adc rcx, rdx + xor esi, esi + mov rax, [rsp+0x50] + xor rax, r13 + mul r12 + mov [rsp+0x50], rbx + add rbp, rax + adc rsi, rdx + mov rax, [rsp+0x70] + xor rax, r15 + mul r14 + add rbp, rax + adc rsi, rdx + mov [rsp+0x70], rbp + mov rax, [rsp+0x58] + xor rax, r9 + mov rbx, r9 + and rbx, r8 + neg rbx + mul r8 + add rcx, rax + adc rbx, rdx + mov rax, [rsp+0x78] + xor rax, r11 + mov rdx, r11 + and rdx, r10 + sub rbx, rdx + mul r10 + add rcx, rax + adc rdx, rbx + mov rbx, rdx + shld rdx, rcx, 0x1 + sar rbx, 0x3f + add rdx, rbx + mov eax, 0x13 + imul rdx mov r8, [rsp+0x40] - mov rbx, [r8] - mov rbp, [rsp+0x28] - imul rbp, rbx - mov rax, [r15] - mul rbp - add rax, rbx - mov r11, rdx - mov r9d, 0x1 - mov rcx, rdi - dec rcx - je edwards25519_scalarmuldouble_alt_zmontend -edwards25519_scalarmuldouble_alt_zmontloop: - adc r11, [r8+8*r9] - sbb rbx, rbx - mov rax, [r15+8*r9] - mul rbp - sub rdx, rbx - add rax, r11 - mov [r8+8*r9-0x8], rax - mov r11, rdx - inc r9 - dec rcx - jne edwards25519_scalarmuldouble_alt_zmontloop -edwards25519_scalarmuldouble_alt_zmontend: - adc r11, rsi - mov [r8+8*rdi-0x8], r11 - sbb r11, r11 - neg r11 - mov rcx, rdi - xor r9, r9 -edwards25519_scalarmuldouble_alt_zcmploop: - mov rax, [r8+8*r9] - sbb rax, [r15+8*r9] - inc r9 - dec rcx - jne edwards25519_scalarmuldouble_alt_zcmploop - sbb r11, 0x0 - sbb r11, r11 - not r11 - xor rcx, rcx - xor r9, r9 -edwards25519_scalarmuldouble_alt_zcorrloop: - mov rax, [r8+8*r9] - mov rbx, [r15+8*r9] - and rbx, r11 + add r8, rax + mov [rsp+0x40], r8 + mov r8, [rsp+0x48] + adc r8, rdx + mov [rsp+0x48], r8 + mov r8, [rsp+0x50] + adc r8, rbx + mov [rsp+0x50], r8 + adc rcx, rbx + shl rax, 0x3f + add rcx, rax + mov rax, [rsp+0x58] + mov [rsp+0x58], rcx + xor rax, r13 + mov rcx, r13 + and rcx, r12 neg rcx - sbb rax, rbx - sbb rcx, rcx - mov [r8+8*r9], rax - inc r9 - cmp r9, rdi - jb edwards25519_scalarmuldouble_alt_zcorrloop - mov r8, [rsp+0x30] - lea r15, [r8+8*rdi] - xor r9, r9 - xor r12, r12 - xor r14, r14 - xor rbp, rbp - xor rsi, rsi -edwards25519_scalarmuldouble_alt_crossloop: - mov rcx, [r8+8*r9] - mov rax, [rsp] - mul rcx - add r14, rax - adc rdx, 0x0 - mov r10, rdx - mov rax, [rsp+0x10] - mul rcx + mul r12 add rsi, rax - adc rdx, 0x0 - mov r11, rdx - mov rcx, [r15+8*r9] - mov rax, [rsp+0x8] - mul rcx - sub rdx, r12 - sub r14, rax - sbb r10, rdx - sbb r12, r12 - mov [r8+8*r9], r14 - mov r14, r10 - mov rax, [rsp+0x18] - mul rcx - sub rdx, rbp + adc rcx, rdx + mov rax, [rsp+0x78] + xor rax, r15 + mov rdx, r15 + and rdx, r14 + sub rcx, rdx + mul r14 + add rsi, rax + adc rdx, rcx + mov rcx, rdx + shld rdx, rsi, 0x1 + sar rcx, 0x3f + mov eax, 0x13 + add rdx, rcx + imul rdx + mov r8, [rsp+0x60] + add r8, rax + mov [rsp+0x60], r8 + mov r8, [rsp+0x68] + adc r8, rdx + mov [rsp+0x68], r8 + mov r8, [rsp+0x70] + adc r8, rcx + mov [rsp+0x70], r8 + adc rsi, rcx + shl rax, 0x3f + add rsi, rax + mov [rsp+0x78], rsi +curve25519_x25519_midloop: + mov rsi, [rsp+0x98] + mov rdx, [rsp] + mov rcx, [rsp+0x20] + mov rbx, rdx + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, 0xfffffffffffffffe + xor ebp, ebp + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax sub rsi, rax - sbb r11, rdx - sbb rbp, rbp - mov [r15+8*r9], rsi - mov rsi, r11 - inc r9 - cmp r9, r13 - jb edwards25519_scalarmuldouble_alt_crossloop - xor r9, r9 - mov r10, r12 - mov r11, rbp - xor r14, r12 - xor rsi, rbp -edwards25519_scalarmuldouble_alt_optnegloop: - mov rax, [r8+8*r9] - xor rax, r12 - neg r10 - adc rax, 0x0 - sbb r10, r10 - mov [r8+8*r9], rax - mov rax, [r15+8*r9] - xor rax, rbp - neg r11 - adc rax, 0x0 - sbb r11, r11 - mov [r15+8*r9], rax - inc r9 - cmp r9, r13 - jb edwards25519_scalarmuldouble_alt_optnegloop - sub r14, r10 - sub rsi, r11 - mov r9, r13 -edwards25519_scalarmuldouble_alt_shiftloop: - mov rax, [r8+8*r9-0x8] - mov r10, rax - shrd rax, r14, 0x3a - mov [r8+8*r9-0x8], rax - mov r14, r10 - mov rax, [r15+8*r9-0x8] - mov r11, rax - shrd rax, rsi, 0x3a - mov [r15+8*r9-0x8], rax - mov rsi, r11 - dec r9 - jne edwards25519_scalarmuldouble_alt_shiftloop - not rbp - mov rcx, [rsp+0x48] - mov r8, [rsp+0x38] - mov r15, [rsp+0x40] - mov r10, r12 - mov r11, rbp - xor r9, r9 -edwards25519_scalarmuldouble_alt_fliploop: - mov rdx, rbp - mov rax, [rcx+8*r9] - and rdx, rax - and rax, r12 - mov rbx, [r8+8*r9] - xor rbx, r12 - neg r10 - adc rax, rbx - sbb r10, r10 - mov [r8+8*r9], rax - mov rbx, [r15+8*r9] - xor rbx, rbp - neg r11 - adc rdx, rbx - sbb r11, r11 - mov [r15+8*r9], rdx - inc r9 - cmp r9, rdi - jb edwards25519_scalarmuldouble_alt_fliploop - sub QWORD PTR [rsp+0x20], 0x3a - ja edwards25519_scalarmuldouble_alt_outerloop + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea rdx, [rbx+rax] + lea rdi, [rcx+rax] + shl rdx, 0x16 + shl rdi, 0x16 + sar rdx, 0x2b + sar rdi, 0x2b + movabs rax, 0x20000100000 + lea rbx, [rbx+rax] + lea rcx, [rcx+rax] + sar rbx, 0x2a + sar rcx, 0x2a + mov [rsp+0xa0], rdx + mov [rsp+0xa8], rbx + mov [rsp+0xb0], rdi + mov [rsp+0xb8], rcx + mov r12, [rsp] + imul rdi, r12 + imul r12, rdx + mov r13, [rsp+0x20] + imul rbx, r13 + imul r13, rcx + add r12, rbx + add r13, rdi + sar r12, 0x14 + sar r13, 0x14 + mov rbx, r12 + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + mov rcx, r13 + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, 0xfffffffffffffffe + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea r8, [rbx+rax] + lea r10, [rcx+rax] + shl r8, 0x16 + shl r10, 0x16 + sar r8, 0x2b + sar r10, 0x2b + movabs rax, 0x20000100000 + lea r15, [rbx+rax] + lea r11, [rcx+rax] + sar r15, 0x2a + sar r11, 0x2a + mov rbx, r13 + mov rcx, r12 + imul r12, r8 + imul rbx, r15 + add r12, rbx + imul r13, r11 + imul rcx, r10 + add r13, rcx + sar r12, 0x14 + sar r13, 0x14 + mov rbx, r12 + and rbx, 0xfffff + movabs rax, 0xfffffe0000000000 + or rbx, rax + mov rcx, r13 + and rcx, 0xfffff + movabs rax, 0xc000000000000000 + or rcx, rax + mov rax, [rsp+0xa0] + imul rax, r8 + mov rdx, [rsp+0xb0] + imul rdx, r15 + imul r8, [rsp+0xa8] + imul r15, [rsp+0xb8] + add r15, r8 + lea r9, [rax+rdx] + mov rax, [rsp+0xa0] + imul rax, r10 + mov rdx, [rsp+0xb0] + imul rdx, r11 + imul r10, [rsp+0xa8] + imul r11, [rsp+0xb8] + add r11, r10 + lea r13, [rax+rdx] + mov rax, 0xfffffffffffffffe + mov edx, 0x2 + mov rdi, rbx + mov r8, rax + test rsi, rsi + cmovs r8, rbp + test rcx, 0x1 + cmove r8, rbp + cmove rdi, rbp + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + cmovs r8, rbp + mov rdi, rbx + test rcx, rdx + cmove r8, rbp + cmove rdi, rbp + sar rcx, 1 + xor rdi, r8 + xor rsi, r8 + bt r8, 0x3f + cmovb rbx, rcx + mov r8, rax + sub rsi, rax + lea rcx, [rcx+rdi] + sar rcx, 1 + mov eax, 0x100000 + lea r8, [rbx+rax] + lea r12, [rcx+rax] + shl r8, 0x15 + shl r12, 0x15 + sar r8, 0x2b + sar r12, 0x2b + movabs rax, 0x20000100000 + lea r10, [rbx+rax] + lea r14, [rcx+rax] + sar r10, 0x2b + sar r14, 0x2b + mov rax, r9 + imul rax, r8 + mov rdx, r13 + imul rdx, r10 + imul r8, r15 + imul r10, r11 + add r10, r8 + lea r8, [rax+rdx] + mov rax, r9 + imul rax, r12 + mov rdx, r13 + imul rdx, r14 + imul r12, r15 + imul r14, r11 + add r14, r12 + lea r12, [rax+rdx] + mov [rsp+0x98], rsi + dec QWORD PTR [rsp+0x90] + jne curve25519_x25519_inverseloop + mov rax, [rsp] + mov rcx, [rsp+0x20] + imul rax, r8 + imul rcx, r10 + add rax, rcx + sar rax, 0x3f + mov r9, r8 + sar r9, 0x3f + xor r8, r9 + sub r8, r9 + xor r9, rax + mov r11, r10 + sar r11, 0x3f + xor r10, r11 + sub r10, r11 + xor r11, rax + mov r13, r12 + sar r13, 0x3f + xor r12, r13 + sub r12, r13 + xor r13, rax + mov r15, r14 + sar r15, 0x3f + xor r14, r15 + sub r14, r15 + xor r15, rax + mov rax, r8 + and rax, r9 + mov r12, r10 + and r12, r11 + add r12, rax + xor r13d, r13d + mov rax, [rsp+0x40] + xor rax, r9 + mul r8 + add r12, rax + adc r13, rdx + mov rax, [rsp+0x60] + xor rax, r11 + mul r10 + add r12, rax + adc r13, rdx + xor r14d, r14d + mov rax, [rsp+0x48] + xor rax, r9 + mul r8 + add r13, rax + adc r14, rdx + mov rax, [rsp+0x68] + xor rax, r11 + mul r10 + add r13, rax + adc r14, rdx + xor r15d, r15d + mov rax, [rsp+0x50] + xor rax, r9 + mul r8 + add r14, rax + adc r15, rdx + mov rax, [rsp+0x70] + xor rax, r11 + mul r10 + add r14, rax + adc r15, rdx + mov rax, [rsp+0x58] + xor rax, r9 + and r9, r8 + neg r9 + mul r8 + add r15, rax + adc r9, rdx + mov rax, [rsp+0x78] + xor rax, r11 + mov rdx, r11 + and rdx, r10 + sub r9, rdx + mul r10 + add r15, rax + adc r9, rdx + mov rax, r9 + shld rax, r15, 0x1 + sar r9, 0x3f + mov ebx, 0x13 + lea rax, [rax+r9+0x1] + imul rbx + xor ebp, ebp + add r12, rax + adc r13, rdx + adc r14, r9 + adc r15, r9 + shl rax, 0x3f + add r15, rax + cmovns rbx, rbp + sub r12, rbx + sbb r13, rbp + sbb r14, rbp + sbb r15, rbp + btr r15, 0x3f + mov rdi, [rsp+0xc0] + mov [rdi], r12 + mov [rdi+0x8], r13 + mov [rdi+0x10], r14 + mov [rdi+0x18], r15 // Store result mov rdi, res - lea rsi, [rsp+96] - lea rbp, [rsp+224] + lea rsi, [rsp+ACC] + lea rbp, [rsp+TAB] mul_p25519(x_0,x_1,x_2) mov rdi, res add rdi, 32 - lea rsi, [rsp+128] - lea rbp, [rsp+224] + lea rsi, [rsp+ACC+32] + lea rbp, [rsp+TAB] mul_p25519(x_0,x_1,x_2) // Restore stack and registers @@ -2645,14 +3606,6 @@ edwards25519_scalarmuldouble_alt_pepadd: // .section .rodata // **************************************************************************** -// The modulus p_25519 = 2^255 - 19, for the modular inverse - -edwards25519_scalarmuldouble_alt_p25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // Precomputed table of multiples of generator for edwards25519 // all in precomputed extended-projective (y-x,x+y,2*d*x*y) triples. diff --git a/x86/proofs/edwards25519_encode.ml b/x86/proofs/edwards25519_encode.ml index bae150ba..df5e7c6b 100644 --- a/x86/proofs/edwards25519_encode.ml +++ b/x86/proofs/edwards25519_encode.ml @@ -139,7 +139,6 @@ let WINDOWS_EDWARDS25519_ENCODE_SUBROUTINE_CORRECT = prove WINDOWS_C_ARGUMENTS [z; p] s /\ bignum_pair_from_memory(p,4) s = (x,y)) (\s. read RIP s = returnaddress /\ - read RSP s = word_add stackpointer (word 8) /\ read RSP s = word_add stackpointer (word 8) /\ (x < p_25519 /\ y < p_25519 ==> read (memory :> bytelist(z,32)) s = diff --git a/x86/proofs/edwards25519_scalarmulbase.ml b/x86/proofs/edwards25519_scalarmulbase.ml index 0fb02743..4f7f8e6b 100644 --- a/x86/proofs/edwards25519_scalarmulbase.ml +++ b/x86/proofs/edwards25519_scalarmulbase.ml @@ -8,7 +8,7 @@ (* ========================================================================= *) needs "x86/proofs/base.ml";; -needs "x86/proofs/bignum_modinv.ml";; +needs "x86/proofs/bignum_inv_p25519.ml";; needs "common/ecencoding.ml";; needs "EC/edwards25519.ml";; @@ -23,7 +23,7 @@ prioritize_num();; (* so we manually split that off to avoid confusing the decoder. *) (* ------------------------------------------------------------------------- *) -(**** print_coda_from_elf (-1) "x86/curve25519/edwards25519_scalarmulbase.o";; +(**** print_coda_from_elf 0x3079 "x86/curve25519/edwards25519_scalarmulbase.o";; ****) let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = @@ -83,86 +83,86 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = (* BTR (% r11) (Imm8 (word 59)) *) 0x4c; 0x89; 0x5c; 0x24; 0x18; (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) - 0x4c; 0x8d; 0x15; 0x96; 0x21; 0x00; 0x00; - (* LEA (% r10) (Riprel (word 8598)) *) - 0x4c; 0x8d; 0x1d; 0xef; 0x21; 0x00; 0x00; - (* LEA (% r11) (Riprel (word 8687)) *) + 0x4c; 0x8d; 0x15; 0xcb; 0x2f; 0x00; 0x00; + (* LEA (% r10) (Riprel (word 12235)) *) + 0x4c; 0x8d; 0x1d; 0x24; 0x30; 0x00; 0x00; + (* LEA (% r11) (Riprel (word 12324)) *) 0x49; 0x8b; 0x02; (* MOV (% rax) (Memop Quadword (%% (r10,0))) *) 0x49; 0x8b; 0x0b; (* MOV (% rcx) (Memop Quadword (%% (r11,0))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,128))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% rax) *) 0x49; 0x8b; 0x42; 0x08; (* MOV (% rax) (Memop Quadword (%% (r10,8))) *) 0x49; 0x8b; 0x4b; 0x08; (* MOV (% rcx) (Memop Quadword (%% (r11,8))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,136))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% rax) *) 0x49; 0x8b; 0x42; 0x10; (* MOV (% rax) (Memop Quadword (%% (r10,16))) *) 0x49; 0x8b; 0x4b; 0x10; (* MOV (% rcx) (Memop Quadword (%% (r11,16))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,144))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% rax) *) 0x49; 0x8b; 0x42; 0x18; (* MOV (% rax) (Memop Quadword (%% (r10,24))) *) 0x49; 0x8b; 0x4b; 0x18; (* MOV (% rcx) (Memop Quadword (%% (r11,24))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,152))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% rax) *) 0x49; 0x8b; 0x42; 0x20; (* MOV (% rax) (Memop Quadword (%% (r10,32))) *) 0x49; 0x8b; 0x4b; 0x20; (* MOV (% rcx) (Memop Quadword (%% (r11,32))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,160))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% rax) *) 0x49; 0x8b; 0x42; 0x28; (* MOV (% rax) (Memop Quadword (%% (r10,40))) *) 0x49; 0x8b; 0x4b; 0x28; (* MOV (% rcx) (Memop Quadword (%% (r11,40))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,168))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% rax) *) 0x49; 0x8b; 0x42; 0x30; (* MOV (% rax) (Memop Quadword (%% (r10,48))) *) 0x49; 0x8b; 0x4b; 0x30; (* MOV (% rcx) (Memop Quadword (%% (r11,48))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,176))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% rax) *) 0x49; 0x8b; 0x42; 0x38; (* MOV (% rax) (Memop Quadword (%% (r10,56))) *) 0x49; 0x8b; 0x4b; 0x38; (* MOV (% rcx) (Memop Quadword (%% (r11,56))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,184))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% rax) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,192))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% rax) *) 0xb8; 0x00; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 0)) *) - 0x48; 0x89; 0x84; 0x24; 0xc8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,200))) (% rax) *) - 0x48; 0x89; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,208))) (% rax) *) - 0x48; 0x89; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,216))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% rax) *) 0x49; 0x8b; 0x42; 0x40; (* MOV (% rax) (Memop Quadword (%% (r10,64))) *) 0x49; 0x8b; 0x4b; 0x40; (* MOV (% rcx) (Memop Quadword (%% (r11,64))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,224))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% rax) *) 0x49; 0x8b; 0x42; 0x48; (* MOV (% rax) (Memop Quadword (%% (r10,72))) *) 0x49; 0x8b; 0x4b; 0x48; (* MOV (% rcx) (Memop Quadword (%% (r11,72))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,232))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% rax) *) 0x49; 0x8b; 0x42; 0x50; (* MOV (% rax) (Memop Quadword (%% (r10,80))) *) 0x49; 0x8b; 0x4b; 0x50; (* MOV (% rcx) (Memop Quadword (%% (r11,80))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,240))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% rax) *) 0x49; 0x8b; 0x42; 0x58; (* MOV (% rax) (Memop Quadword (%% (r10,88))) *) 0x49; 0x8b; 0x4b; 0x58; (* MOV (% rcx) (Memop Quadword (%% (r11,88))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,248))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% rax) *) 0x48; 0xc7; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; (* MOV (Memop Quadword (%% (rsp,456))) (Imm32 (word 0)) *) - 0x48; 0x8d; 0x05; 0x24; 0x21; 0x00; 0x00; - (* LEA (% rax) (Riprel (word 8484)) *) + 0x48; 0x8d; 0x05; 0x59; 0x2f; 0x00; 0x00; + (* LEA (% rax) (Riprel (word 12121)) *) 0x48; 0x89; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; (* MOV (Memop Quadword (%% (rsp,480))) (% rax) *) 0x48; 0xc7; 0x84; 0x24; 0xd0; 0x01; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; @@ -489,18 +489,18 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = (* MOV (Memop Quadword (%% (rsp,112))) (% rcx) *) 0x48; 0x89; 0x54; 0x24; 0x78; (* MOV (Memop Quadword (%% (rsp,120))) (% rdx) *) - 0x4c; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,384))) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x4d; 0x01; 0xc0; (* ADD (% r8) (% r8) *) - 0x4c; 0x8b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,392))) *) 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) - 0x4c; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,400))) *) 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) - 0x4c; 0x8b; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; - (* MOV (% r11) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,408))) *) 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) 0xb8; 0x26; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 38)) *) @@ -509,63 +509,63 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) - 0x4c; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x4c; 0x8b; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,352))) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) - 0x4c; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* SUB (% r8) (Memop Quadword (%% (rsp,128))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,168))) *) - 0x4c; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* SBB (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x2b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,328))) *) 0xb9; 0x26; 0x00; 0x00; 0x00; (* MOV (% ecx) (Imm32 (word 38)) *) - 0x4c; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,176))) *) - 0x4c; 0x1b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; - (* SBB (% r10) (Memop Quadword (%% (rsp,144))) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,184))) *) - 0x48; 0x1b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; - (* SBB (% rax) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,368))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,376))) *) + 0x48; 0x1b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; + (* SBB (% rax) (Memop Quadword (%% (rsp,344))) *) 0x48; 0x0f; 0x43; 0xcb; (* CMOVAE (% rcx) (% rbx) *) 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) - 0x48; 0x89; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,312))) (% rax) *) - 0x4c; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x48; 0x89; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% rax) *) + 0x4c; 0x8b; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,352))) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x4c; 0x03; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* ADD (% r8) (Memop Quadword (%% (rsp,128))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,168))) *) - 0x4c; 0x13; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* ADC (% r9) (Memop Quadword (%% (rsp,136))) *) - 0x4c; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,176))) *) - 0x4c; 0x13; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; - (* ADC (% r10) (Memop Quadword (%% (rsp,144))) *) - 0x4c; 0x8b; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (% r11) (Memop Quadword (%% (rsp,184))) *) - 0x4c; 0x13; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; - (* ADC (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x03; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* ADD (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,368))) *) + 0x4c; 0x13; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,376))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,344))) *) 0xb8; 0x26; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 38)) *) 0x48; 0x0f; 0x43; 0xc1; (* CMOVAE (% rax) (% rcx) *) @@ -573,52 +573,52 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) + 0x4c; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r11) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) - 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,224))) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; (* ADCX (% r9) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; (* ADOX (% r10) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; @@ -628,26 +628,26 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; @@ -657,26 +657,26 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; (* ADOX (% r14) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; (* ADCX (% r14) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; @@ -723,52 +723,52 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,352))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,360))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,368))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,376))) (% r11) *) + 0x4c; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r11) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) - 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,288))) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; (* ADCX (% r9) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; (* ADOX (% r10) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; @@ -778,26 +778,26 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; @@ -807,26 +807,26 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; (* ADOX (% r14) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; (* ADCX (% r14) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; @@ -873,52 +873,52 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) - 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,320))) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,208))) *) 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; (* ADCX (% r9) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; (* ADOX (% r10) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,208))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; @@ -928,26 +928,26 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,208))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; @@ -957,26 +957,26 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x54; 0x24; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,208))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; (* ADOX (% r14) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; (* ADCX (% r14) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; @@ -1023,127 +1023,127 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) - 0x4c; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,256))) *) + 0x4c; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r11) *) + 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,128))) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) - 0x4c; 0x2b; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; - (* SUB (% r8) (Memop Quadword (%% (rsp,352))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,264))) *) - 0x4c; 0x1b; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; - (* SBB (% r9) (Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x2b; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,232))) *) 0xb9; 0x26; 0x00; 0x00; 0x00; (* MOV (% ecx) (Imm32 (word 38)) *) - 0x4c; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,272))) *) - 0x4c; 0x1b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; - (* SBB (% r10) (Memop Quadword (%% (rsp,368))) *) - 0x48; 0x8b; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,280))) *) - 0x48; 0x1b; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; - (* SBB (% rax) (Memop Quadword (%% (rsp,376))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0x1b; 0x84; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* SBB (% rax) (Memop Quadword (%% (rsp,248))) *) 0x48; 0x0f; 0x43; 0xcb; (* CMOVAE (% rcx) (% rbx) *) 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x4c; 0x89; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,384))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,392))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,400))) (% r10) *) - 0x48; 0x89; 0x84; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,408))) (% rax) *) - 0x4c; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,256))) *) - 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x4c; 0x03; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; - (* ADD (% r8) (Memop Quadword (%% (rsp,352))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,264))) *) - 0x4c; 0x13; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; - (* ADC (% r9) (Memop Quadword (%% (rsp,360))) *) - 0x4c; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,272))) *) - 0x4c; 0x13; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; - (* ADC (% r10) (Memop Quadword (%% (rsp,368))) *) - 0x4c; 0x8b; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (% r11) (Memop Quadword (%% (rsp,280))) *) - 0x4c; 0x13; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; - (* ADC (% r11) (Memop Quadword (%% (rsp,376))) *) - 0xb8; 0x26; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 38)) *) - 0x48; 0x0f; 0x43; 0xc1; (* CMOVAE (% rax) (% rcx) *) - 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) - 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) - 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) - 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) - 0x4c; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% rax) *) + 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x4c; 0x03; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* ADD (% r8) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,232))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x13; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,240))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,248))) *) + 0xb8; 0x26; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 38)) *) + 0x48; 0x0f; 0x43; 0xc1; (* CMOVAE (% rax) (% rcx) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x4c; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,192))) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) - 0x4c; 0x2b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* SUB (% r8) (Memop Quadword (%% (rsp,288))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,328))) *) - 0x4c; 0x1b; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* SBB (% r9) (Memop Quadword (%% (rsp,296))) *) + 0x4c; 0x2b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,168))) *) 0xb9; 0x26; 0x00; 0x00; 0x00; (* MOV (% ecx) (Imm32 (word 38)) *) - 0x4c; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,336))) *) - 0x4c; 0x1b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* SBB (% r10) (Memop Quadword (%% (rsp,304))) *) - 0x48; 0x8b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,344))) *) - 0x48; 0x1b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; - (* SBB (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,216))) *) + 0x48; 0x1b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* SBB (% rax) (Memop Quadword (%% (rsp,184))) *) 0x48; 0x0f; 0x43; 0xcb; (* CMOVAE (% rcx) (% rbx) *) 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,416))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,424))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,432))) (% r10) *) - 0x48; 0x89; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,440))) (% rax) *) - 0x4c; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) + 0x48; 0x89; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% rax) *) + 0x4c; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,192))) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x4c; 0x03; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* ADD (% r8) (Memop Quadword (%% (rsp,288))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,328))) *) - 0x4c; 0x13; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* ADC (% r9) (Memop Quadword (%% (rsp,296))) *) - 0x4c; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,336))) *) - 0x4c; 0x13; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* ADC (% r10) (Memop Quadword (%% (rsp,304))) *) - 0x4c; 0x8b; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (% r11) (Memop Quadword (%% (rsp,344))) *) - 0x4c; 0x13; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; - (* ADC (% r11) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x03; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* ADD (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x13; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,184))) *) 0xb8; 0x26; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 38)) *) 0x48; 0x0f; 0x43; 0xc1; (* CMOVAE (% rax) (% rcx) *) @@ -1151,52 +1151,52 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) - 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,384))) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,264))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; (* ADCX (% r9) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; (* ADOX (% r10) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; @@ -1204,28 +1204,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; (* ADCX (% r13) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,272))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; @@ -1233,28 +1233,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; (* ADCX (% r14) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; (* ADOX (% r14) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; (* ADCX (% r14) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; @@ -1301,52 +1301,52 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,192))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,200))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,208))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,216))) (% r11) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% r11) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,384))) *) - 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,416))) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,392))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x48; 0x8b; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,264))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; (* ADCX (% r9) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; (* ADOX (% r10) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; @@ -1354,28 +1354,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; (* ADCX (% r13) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,400))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x48; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; @@ -1383,28 +1383,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; (* ADCX (% r14) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,408))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; (* ADOX (% r14) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; (* ADCX (% r14) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; @@ -1451,52 +1451,52 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,288))) *) - 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,256))) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; (* ADCX (% r9) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; (* ADOX (% r10) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; @@ -1504,28 +1504,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; (* ADCX (% r13) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,304))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; @@ -1533,28 +1533,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; (* ADCX (% r14) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,312))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; (* ADOX (% r14) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; (* ADCX (% r14) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; @@ -1601,52 +1601,52 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x4c; 0x89; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% r11) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,288))) *) - 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,416))) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; (* ADCX (% r9) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; (* ADOX (% r10) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; @@ -1654,28 +1654,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; (* ADCX (% r13) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,304))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; @@ -1683,28 +1683,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; (* ADCX (% r14) (% rcx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x48; 0x8b; 0x94; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,312))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; (* ADOX (% r14) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; (* ADCX (% r14) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; @@ -1751,28 +1751,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,224))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,232))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,240))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,248))) (% r11) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r11) *) 0x48; 0x83; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; 0x04; (* ADD (Memop Quadword (%% (rsp,456))) (Imm8 (word 4)) *) 0x48; 0x81; 0xbc; 0x24; 0xc8; 0x01; 0x00; 0x00; 0xfc; 0x00; 0x00; 0x00; (* CMP (Memop Quadword (%% (rsp,456))) (Imm32 (word 252)) *) 0x0f; 0x82; 0xe4; 0xe9; 0xff; 0xff; (* JB (Imm32 (word 4294961636)) *) - 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,128))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,136))) *) - 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,144))) *) - 0x4c; 0x8b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,344))) *) 0x49; 0xc7; 0xc4; 0xda; 0xff; 0xff; 0xff; (* MOV (% r12) (Imm32 (word 4294967258)) *) 0x4d; 0x29; 0xc4; (* SUB (% r12) (% r8) *) @@ -1793,498 +1793,1620 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x4d; 0x0f; 0x42; 0xcd; (* CMOVB (% r9) (% r13) *) 0x4d; 0x0f; 0x42; 0xd6; (* CMOVB (% r10) (% r14) *) 0x4d; 0x0f; 0x42; 0xdf; (* CMOVB (% r11) (% r15) *) - 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) - 0x48; 0xc7; 0xc7; 0x04; 0x00; 0x00; 0x00; - (* MOV (% rdi) (Imm32 (word 4)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,224)) *) - 0x48; 0x8d; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; - (* LEA (% rdx) (%% (rsp,192)) *) - 0x48; 0x8d; 0x0d; 0x74; 0x09; 0x00; 0x00; - (* LEA (% rcx) (Riprel (word 2420)) *) - 0x4c; 0x8d; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* LEA (% r8) (%% (rsp,256)) *) - 0x48; 0x89; 0x74; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rsi) *) - 0x4c; 0x89; 0x44; 0x24; 0x38; - (* MOV (Memop Quadword (%% (rsp,56))) (% r8) *) - 0x48; 0x89; 0x4c; 0x24; 0x48; - (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) - 0x4d; 0x8d; 0x14; 0xf8; (* LEA (% r10) (%%% (r8,3,rdi)) *) - 0x4c; 0x89; 0x54; 0x24; 0x30; - (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) - 0x4d; 0x8d; 0x3c; 0xfa; (* LEA (% r15) (%%% (r10,3,rdi)) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4a; 0x8b; 0x04; 0xca; (* MOV (% rax) (Memop Quadword (%%% (rdx,3,r9))) *) - 0x4a; 0x8b; 0x1c; 0xc9; (* MOV (% rbx) (Memop Quadword (%%% (rcx,3,r9))) *) - 0x4b; 0x89; 0x04; 0xca; (* MOV (Memop Quadword (%%% (r10,3,r9))) (% rax) *) - 0x4b; 0x89; 0x1c; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rbx) *) - 0x4b; 0x89; 0x1c; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rbx) *) - 0x4e; 0x89; 0x1c; 0xce; (* MOV (Memop Quadword (%%% (rsi,3,r9))) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) - 0x49; 0x8b; 0x00; (* MOV (% rax) (Memop Quadword (%% (r8,0))) *) - 0x48; 0x89; 0xc3; (* MOV (% rbx) (% rax) *) - 0x48; 0xff; 0xcb; (* DEC (% rbx) *) - 0x49; 0x89; 0x18; (* MOV (Memop Quadword (%% (r8,0))) (% rbx) *) - 0x48; 0x89; 0xc5; (* MOV (% rbp) (% rax) *) - 0x49; 0x89; 0xc4; (* MOV (% r12) (% rax) *) - 0x48; 0xc1; 0xe5; 0x02; (* SHL (% rbp) (Imm8 (word 2)) *) - 0x49; 0x29; 0xec; (* SUB (% r12) (% rbp) *) - 0x49; 0x83; 0xf4; 0x02; (* XOR (% r12) (Imm8 (word 2)) *) - 0x4c; 0x89; 0xe5; (* MOV (% rbp) (% r12) *) - 0x48; 0x0f; 0xaf; 0xe8; (* IMUL (% rbp) (% rax) *) - 0xb8; 0x02; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 2)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x48; 0x83; 0xc5; 0x01; (* ADD (% rbp) (Imm8 (word 1)) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) - 0xb8; 0x01; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) - 0xb8; 0x01; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) + 0x48; 0x8d; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x80; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,384)) *) + 0x48; 0x89; 0xbc; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rdi) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x48; 0x8d; 0x48; 0xed; (* LEA (% rcx) (%% (rax,18446744073709551597)) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x89; 0x0c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rcx) *) + 0x48; 0x89; 0x44; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rax) *) + 0x48; 0x0f; 0xba; 0xf0; 0x3f; + (* BTR (% rax) (Imm8 (word 63)) *) + 0x48; 0x89; 0x44; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rax) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x8b; 0x4e; 0x08; (* MOV (% rcx) (Memop Quadword (%% (rsi,8))) *) + 0x4c; 0x8b; 0x46; 0x10; (* MOV (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x8b; 0x4e; 0x18; (* MOV (% r9) (Memop Quadword (%% (rsi,24))) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x4c; 0x89; 0x64; 0x24; 0x28; - (* MOV (Memop Quadword (%% (rsp,40))) (% r12) *) - 0x48; 0x89; 0xf8; (* MOV (% rax) (% rdi) *) - 0x48; 0xc1; 0xe0; 0x07; (* SHL (% rax) (Imm8 (word 7)) *) - 0x48; 0x89; 0x44; 0x24; 0x20; - (* MOV (Memop Quadword (%% (rsp,32))) (% rax) *) - 0x4c; 0x8b; 0x6c; 0x24; 0x20; - (* MOV (% r13) (Memop Quadword (%% (rsp,32))) *) - 0x49; 0x83; 0xc5; 0x3f; (* ADD (% r13) (Imm8 (word 63)) *) - 0x49; 0xc1; 0xed; 0x06; (* SHR (% r13) (Imm8 (word 6)) *) - 0x49; 0x39; 0xfd; (* CMP (% r13) (% rdi) *) - 0x4c; 0x0f; 0x43; 0xef; (* CMOVAE (% r13) (% rdi) *) - 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xed; (* XOR (% rbp) (% rbp) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4c; 0x8b; 0x44; 0x24; 0x30; - (* MOV (% r8) (Memop Quadword (%% (rsp,48))) *) - 0x4d; 0x8d; 0x3c; 0xf8; (* LEA (% r15) (%%% (r8,3,rdi)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x1c; 0xc8; (* MOV (% rbx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4d; 0x89; 0xda; (* MOV (% r10) (% r11) *) - 0x4d; 0x21; 0xe2; (* AND (% r10) (% r12) *) - 0x49; 0x21; 0xeb; (* AND (% r11) (% rbp) *) - 0x48; 0x89; 0xd8; (* MOV (% rax) (% rbx) *) - 0x48; 0x09; 0xc8; (* OR (% rax) (% rcx) *) - 0x48; 0xf7; 0xd8; (* NEG (% rax) *) - 0x4d; 0x0f; 0x42; 0xf2; (* CMOVB (% r14) (% r10) *) - 0x49; 0x0f; 0x42; 0xf3; (* CMOVB (% rsi) (% r11) *) - 0x4c; 0x0f; 0x42; 0xe3; (* CMOVB (% r12) (% rbx) *) - 0x48; 0x0f; 0x42; 0xe9; (* CMOVB (% rbp) (% rcx) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0xcb; (* JB (Imm8 (word 203)) *) - 0x4c; 0x89; 0xe0; (* MOV (% rax) (% r12) *) - 0x48; 0x09; 0xe8; (* OR (% rax) (% rbp) *) - 0x48; 0x0f; 0xbd; 0xc8; (* BSR (% rcx) (% rax) *) - 0x48; 0x83; 0xf1; 0x3f; (* XOR (% rcx) (Imm8 (word 63)) *) - 0x4d; 0x0f; 0xa5; 0xf4; (* SHLD (% r12) (% r14) (% cl) *) - 0x48; 0x0f; 0xa5; 0xf5; (* SHLD (% rbp) (% rsi) (% cl) *) - 0x49; 0x8b; 0x00; (* MOV (% rax) (Memop Quadword (%% (r8,0))) *) - 0x49; 0x89; 0xc6; (* MOV (% r14) (% rax) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) - 0x48; 0x89; 0xc6; (* MOV (% rsi) (% rax) *) - 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r10d) (Imm32 (word 1)) *) - 0x41; 0xbb; 0x00; 0x00; 0x00; 0x00; - (* MOV (% r11d) (Imm32 (word 0)) *) - 0xb9; 0x00; 0x00; 0x00; 0x00; - (* MOV (% ecx) (Imm32 (word 0)) *) - 0xba; 0x01; 0x00; 0x00; 0x00; - (* MOV (% edx) (Imm32 (word 1)) *) - 0x41; 0xb9; 0x3a; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 58)) *) - 0x48; 0x89; 0x7c; 0x24; 0x08; - (* MOV (Memop Quadword (%% (rsp,8))) (% rdi) *) - 0x4c; 0x89; 0x6c; 0x24; 0x10; - (* MOV (Memop Quadword (%% (rsp,16))) (% r13) *) - 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) - 0x4c; 0x89; 0x7c; 0x24; 0x18; - (* MOV (Memop Quadword (%% (rsp,24))) (% r15) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0x49; 0x0f; 0xba; 0xe9; 0x3f; + (* BTS (% r9) (Imm8 (word 63)) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x6b; 0xc0; 0x13; (* IMUL3 (% rax) (% rax,Imm8 (word 19)) *) + 0x48; 0x01; 0xc2; (* ADD (% rdx) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4d; 0x11; 0xd0; (* ADC (% r8) (% r10) *) + 0x4d; 0x11; 0xd1; (* ADC (% r9) (% r10) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x49; 0x0f; 0x42; 0xc2; (* CMOVB (% rax) (% r10) *) + 0x48; 0x29; 0xc2; (* SUB (% rdx) (% rax) *) + 0x4c; 0x19; 0xd1; (* SBB (% rcx) (% r10) *) + 0x4d; 0x19; 0xd0; (* SBB (% r8) (% r10) *) + 0x4d; 0x19; 0xd1; (* SBB (% r9) (% r10) *) + 0x49; 0x0f; 0xba; 0xf1; 0x3f; + (* BTR (% r9) (Imm8 (word 63)) *) + 0x48; 0x89; 0x54; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rdx) *) + 0x48; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r9) *) 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x48; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rax) *) + 0x48; 0xb8; 0x99; 0x20; 0x02; 0x75; 0x23; 0x9e; 0xf9; 0xa0; + (* MOV (% rax) (Imm64 (word 11599476190393540761)) *) + 0x48; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rax) *) + 0x48; 0xb8; 0x95; 0x25; 0x13; 0x1d; 0x3f; 0x8f; 0xc6; 0xa8; + (* MOV (% rax) (Imm64 (word 12161565344994108821)) *) + 0x48; 0x89; 0x44; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rax) *) + 0x48; 0xb8; 0x42; 0x52; 0xac; 0x05; 0x38; 0x89; 0x6c; 0x6c; + (* MOV (% rax) (Imm64 (word 7812770327287321154)) *) + 0x48; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rax) *) + 0x48; 0xb8; 0x15; 0x06; 0x77; 0x41; 0xb2; 0x08; 0x65; 0x27; + (* MOV (% rax) (Imm64 (word 2838684701822486037)) *) + 0x48; 0x89; 0x44; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rax) *) + 0x48; 0xc7; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; 0x0a; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (Imm32 (word 10)) *) + 0x48; 0xc7; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (Imm32 (word 1)) *) + 0xe9; 0x07; 0x04; 0x00; 0x00; + (* JMP (Imm32 (word 1031)) *) + 0x4d; 0x89; 0xc1; (* MOV (% r9) (% r8) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xc8; (* XOR (% r8) (% r9) *) + 0x4d; 0x29; 0xc8; (* SUB (% r8) (% r9) *) + 0x4d; 0x89; 0xd3; (* MOV (% r11) (% r10) *) + 0x49; 0xc1; 0xfb; 0x3f; (* SAR (% r11) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xda; (* XOR (% r10) (% r11) *) + 0x4d; 0x29; 0xda; (* SUB (% r10) (% r11) *) + 0x4d; 0x89; 0xe5; (* MOV (% r13) (% r12) *) + 0x49; 0xc1; 0xfd; 0x3f; (* SAR (% r13) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xec; (* XOR (% r12) (% r13) *) + 0x4d; 0x29; 0xec; (* SUB (% r12) (% r13) *) + 0x4d; 0x89; 0xf7; (* MOV (% r15) (% r14) *) + 0x49; 0xc1; 0xff; 0x3f; (* SAR (% r15) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xfe; (* XOR (% r14) (% r15) *) + 0x4d; 0x29; 0xfe; (* SUB (% r14) (% r15) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x4c; 0x21; 0xc8; (* AND (% rax) (% r9) *) + 0x4c; 0x89; 0xd7; (* MOV (% rdi) (% r10) *) + 0x4c; 0x21; 0xdf; (* AND (% rdi) (% r11) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x89; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% rdi) *) + 0x4c; 0x89; 0xe0; (* MOV (% rax) (% r12) *) + 0x4c; 0x21; 0xe8; (* AND (% rax) (% r13) *) + 0x4c; 0x89; 0xf6; (* MOV (% rsi) (% r14) *) + 0x4c; 0x21; 0xfe; (* AND (% rsi) (% r15) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x89; 0xb4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rsi) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) - 0x4d; 0x31; 0xc0; (* XOR (% r8) (% r8) *) - 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x49; 0x0f; 0xba; 0xe6; 0x00; - (* BT (% r14) (Imm8 (word 0)) *) - 0x48; 0x0f; 0x42; 0xc5; (* CMOVB (% rax) (% rbp) *) - 0x48; 0x0f; 0x42; 0xde; (* CMOVB (% rbx) (% rsi) *) - 0x4c; 0x0f; 0x42; 0xc1; (* CMOVB (% r8) (% rcx) *) - 0x4c; 0x0f; 0x42; 0xfa; (* CMOVB (% r15) (% rdx) *) - 0x4d; 0x89; 0xf5; (* MOV (% r13) (% r14) *) - 0x49; 0x29; 0xde; (* SUB (% r14) (% rbx) *) - 0x4c; 0x29; 0xeb; (* SUB (% rbx) (% r13) *) - 0x4c; 0x89; 0xe7; (* MOV (% rdi) (% r12) *) - 0x48; 0x29; 0xc7; (* SUB (% rdi) (% rax) *) - 0x49; 0x0f; 0x42; 0xec; (* CMOVB (% rbp) (% r12) *) - 0x4c; 0x8d; 0x67; 0xff; (* LEA (% r12) (%% (rdi,18446744073709551615)) *) - 0x4c; 0x0f; 0x42; 0xf3; (* CMOVB (% r14) (% rbx) *) - 0x49; 0x0f; 0x42; 0xf5; (* CMOVB (% rsi) (% r13) *) - 0x49; 0xf7; 0xd4; (* NOT (% r12) *) - 0x49; 0x0f; 0x42; 0xca; (* CMOVB (% rcx) (% r10) *) - 0x49; 0x0f; 0x42; 0xd3; (* CMOVB (% rdx) (% r11) *) - 0x4c; 0x0f; 0x43; 0xe7; (* CMOVAE (% r12) (% rdi) *) - 0x49; 0xd1; 0xee; (* SHR (% r14) (Imm8 (word 1)) *) - 0x4d; 0x01; 0xc2; (* ADD (% r10) (% r8) *) - 0x4d; 0x01; 0xfb; (* ADD (% r11) (% r15) *) - 0x49; 0xd1; 0xec; (* SHR (% r12) (Imm8 (word 1)) *) - 0x48; 0x01; 0xc9; (* ADD (% rcx) (% rcx) *) - 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) - 0x49; 0xff; 0xc9; (* DEC (% r9) *) - 0x75; 0x9c; (* JNE (Imm8 (word 156)) *) - 0x48; 0x8b; 0x7c; 0x24; 0x08; - (* MOV (% rdi) (Memop Quadword (%% (rsp,8))) *) - 0x4c; 0x8b; 0x6c; 0x24; 0x10; - (* MOV (% r13) (Memop Quadword (%% (rsp,16))) *) - 0x4c; 0x8b; 0x04; 0x24; (* MOV (% r8) (Memop Quadword (%% (rsp,0))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x18; - (* MOV (% r15) (Memop Quadword (%% (rsp,24))) *) - 0x4c; 0x89; 0x14; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r10) *) - 0x4c; 0x89; 0x5c; 0x24; 0x08; - (* MOV (Memop Quadword (%% (rsp,8))) (% r11) *) - 0x48; 0x89; 0x4c; 0x24; 0x10; - (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) - 0x48; 0x89; 0x54; 0x24; 0x18; - (* MOV (Memop Quadword (%% (rsp,24))) (% rdx) *) - 0x4c; 0x8b; 0x44; 0x24; 0x38; - (* MOV (% r8) (Memop Quadword (%% (rsp,56))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x40; - (* MOV (% r15) (Memop Quadword (%% (rsp,64))) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x0c; 0xc8; (* MOV (% rcx) (Memop Quadword (%%% (r8,3,r9))) *) 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) - 0x48; 0x8b; 0x44; 0x24; 0x10; - (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x44; 0x24; 0x08; (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) - 0x4d; 0x0f; 0xac; 0xf2; 0x3a; - (* SHRD (% r10) (% r14) (Imm8 (word 58)) *) - 0x4f; 0x89; 0x14; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% r10) *) - 0x4d; 0x89; 0xf2; (* MOV (% r10) (% r14) *) - 0x4d; 0x89; 0xe6; (* MOV (% r14) (% r12) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x28; + (* MOV (% rax) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x0f; 0xac; 0xdf; 0x3b; + (* SHRD (% rdi) (% rbx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x3c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rdi) *) + 0x31; 0xff; (* XOR (% edi) (% edi) *) + 0x48; 0x8b; 0x44; 0x24; 0x08; + (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd7; (* ADC (% rdi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x28; + (* MOV (% rax) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd7; (* ADC (% rdi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xee; 0x3b; + (* SHRD (% rsi) (% rbp) (Imm8 (word 59)) *) + 0x48; 0x89; 0x74; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rsi) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xcb; 0x3b; + (* SHRD (% rbx) (% rcx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x5c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x48; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x0f; 0xac; 0xfd; 0x3b; + (* SHRD (% rbp) (% rdi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rbp) *) 0x48; 0x8b; 0x44; 0x24; 0x18; (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x48; 0x89; 0xc5; (* MOV (% rbp) (% rax) *) + 0x48; 0xc1; 0xfd; 0x3f; (* SAR (% rbp) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xc5; (* AND (% rbp) (% r8) *) + 0x48; 0xf7; 0xdd; (* NEG (% rbp) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x38; + (* MOV (% rax) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x48; 0x89; 0xc2; (* MOV (% rdx) (% rax) *) + 0x48; 0xc1; 0xfa; 0x3f; (* SAR (% rdx) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x48; 0x29; 0xd5; (* SUB (% rbp) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) - 0x49; 0x0f; 0xac; 0xf3; 0x3a; - (* SHRD (% r11) (% rsi) (Imm8 (word 58)) *) - 0x4f; 0x89; 0x1c; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% r11) *) - 0x49; 0x89; 0xf3; (* MOV (% r11) (% rsi) *) - 0x48; 0x89; 0xee; (* MOV (% rsi) (% rbp) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0x93; (* JB (Imm8 (word 147)) *) - 0x4d; 0x0f; 0xa4; 0xd6; 0x06; - (* SHLD (% r14) (% r10) (Imm8 (word 6)) *) - 0x4c; 0x0f; 0xa4; 0xde; 0x06; - (* SHLD (% rsi) (% r11) (Imm8 (word 6)) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x48; - (* MOV (% r15) (Memop Quadword (%% (rsp,72))) *) - 0x49; 0x8b; 0x18; (* MOV (% rbx) (Memop Quadword (%% (r8,0))) *) - 0x4c; 0x8b; 0x64; 0x24; 0x28; - (* MOV (% r12) (Memop Quadword (%% (rsp,40))) *) - 0x4c; 0x0f; 0xaf; 0xe3; (* IMUL (% r12) (% rbx) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) + 0x48; 0x0f; 0xac; 0xf1; 0x3b; + (* SHRD (% rcx) (% rsi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x4c; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) + 0x48; 0x0f; 0xac; 0xee; 0x3b; + (* SHRD (% rsi) (% rbp) (Imm8 (word 59)) *) + 0x48; 0x8b; 0x44; 0x24; 0x18; + (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) + 0x48; 0x89; 0x74; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rsi) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x48; 0x89; 0xc6; (* MOV (% rsi) (% rax) *) + 0x48; 0xc1; 0xfe; 0x3f; (* SAR (% rsi) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xe6; (* AND (% rsi) (% r12) *) + 0x48; 0xf7; 0xde; (* NEG (% rsi) *) 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) - 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x41; 0xb9; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 1)) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x74; 0x24; (* JE (Imm8 (word 36)) *) - 0x4f; 0x13; 0x14; 0xc8; (* ADC (% r10) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x19; 0xdb; (* SBB (% rbx) (% rbx) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x38; + (* MOV (% rax) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x48; 0x89; 0xc2; (* MOV (% rdx) (% rax) *) + 0x48; 0xc1; 0xfa; 0x3f; (* SAR (% rdx) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xf2; (* AND (% rdx) (% r14) *) + 0x48; 0x29; 0xd6; (* SUB (% rsi) (% rdx) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xdf; 0x3b; + (* SHRD (% rdi) (% rbx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x7c; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% rdi) *) + 0x48; 0x0f; 0xac; 0xf3; 0x3b; + (* SHRD (% rbx) (% rsi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% rbx) *) + 0x48; 0x8b; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rbp) (Memop Quadword (%% (rsp,136))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) - 0x48; 0x29; 0xda; (* SUB (% rdx) (% rbx) *) - 0x4c; 0x01; 0xd0; (* ADD (% rax) (% r10) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xdc; (* JNE (Imm8 (word 220)) *) - 0x4d; 0x11; 0xf2; (* ADC (% r10) (% r14) *) - 0x4d; 0x89; 0x54; 0xf8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,rdi,-- &8))) (% r10) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x1b; 0x04; 0xcf; (* SBB (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xf0; (* JNE (Imm8 (word 240)) *) - 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x49; 0xf7; 0xd2; (* NOT (% r10) *) - 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4c; 0x21; 0xd3; (* AND (% rbx) (% r10) *) - 0x48; 0xf7; 0xd9; (* NEG (% rcx) *) - 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) + 0x48; 0x89; 0x5c; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rbx) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x89; 0x6c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rbp) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x89; 0x74; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rsi) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x89; 0x5c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rbx) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x89; 0x6c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rbp) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x4c; 0x89; 0xcb; (* MOV (% rbx) (% r9) *) + 0x4c; 0x21; 0xc3; (* AND (% rbx) (% r8) *) + 0x48; 0xf7; 0xdb; (* NEG (% rbx) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x48; 0x29; 0xd3; (* SUB (% rbx) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xda; (* ADC (% rdx) (% rbx) *) + 0x48; 0x89; 0xd3; (* MOV (% rbx) (% rdx) *) + 0x48; 0x0f; 0xa4; 0xca; 0x01; + (* SHLD (% rdx) (% rcx) (Imm8 (word 1)) *) + 0x48; 0xc1; 0xfb; 0x3f; (* SAR (% rbx) (Imm8 (word 63)) *) + 0x48; 0x01; 0xda; (* ADD (% rdx) (% rbx) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x48; 0xf7; 0xea; (* IMUL2 (% rdx,% rax) (% rdx) *) 0x4c; 0x8b; 0x44; 0x24; 0x40; (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) - 0x49; 0x8b; 0x18; (* MOV (% rbx) (Memop Quadword (%% (r8,0))) *) - 0x48; 0x8b; 0x6c; 0x24; 0x28; - (* MOV (% rbp) (Memop Quadword (%% (rsp,40))) *) - 0x48; 0x0f; 0xaf; 0xeb; (* IMUL (% rbp) (% rbx) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) - 0x48; 0xf7; 0xe5; (* MUL2 (% rdx,% rax) (% rbp) *) - 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x41; 0xb9; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 1)) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x74; 0x24; (* JE (Imm8 (word 36)) *) - 0x4f; 0x13; 0x1c; 0xc8; (* ADC (% r11) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x19; 0xdb; (* SBB (% rbx) (% rbx) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0xf7; 0xe5; (* MUL2 (% rdx,% rax) (% rbp) *) - 0x48; 0x29; 0xda; (* SUB (% rdx) (% rbx) *) - 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xdc; (* JNE (Imm8 (word 220)) *) - 0x49; 0x11; 0xf3; (* ADC (% r11) (% rsi) *) - 0x4d; 0x89; 0x5c; 0xf8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,rdi,-- &8))) (% r11) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x1b; 0x04; 0xcf; (* SBB (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xf0; (* JNE (Imm8 (word 240)) *) - 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xf7; 0xd3; (* NOT (% r11) *) - 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4c; 0x21; 0xdb; (* AND (% rbx) (% r11) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% r8) (Memop Quadword (%% (rsp,72))) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% r8) (Memop Quadword (%% (rsp,80))) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4c; 0x89; 0x44; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r8) *) + 0x48; 0x11; 0xd9; (* ADC (% rcx) (% rbx) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x48; 0x89; 0x4c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rcx) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x4c; 0x21; 0xe1; (* AND (% rcx) (% r12) *) 0x48; 0xf7; 0xd9; (* NEG (% rcx) *) - 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) - 0x4c; 0x8b; 0x44; 0x24; 0x30; - (* MOV (% r8) (Memop Quadword (%% (rsp,48))) *) - 0x4d; 0x8d; 0x3c; 0xf8; (* LEA (% r15) (%%% (r8,3,rdi)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xed; (* XOR (% rbp) (% rbp) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4b; 0x8b; 0x0c; 0xc8; (* MOV (% rcx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x48; 0x8b; 0x44; 0x24; 0x10; - (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x8b; 0x44; 0x24; 0x08; - (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x4c; 0x29; 0xe2; (* SUB (% rdx) (% r12) *) - 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) - 0x49; 0x19; 0xd2; (* SBB (% r10) (% rdx) *) - 0x4d; 0x19; 0xe4; (* SBB (% r12) (% r12) *) - 0x4f; 0x89; 0x34; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% r14) *) - 0x4d; 0x89; 0xd6; (* MOV (% r14) (% r10) *) - 0x48; 0x8b; 0x44; 0x24; 0x18; - (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x48; 0x29; 0xea; (* SUB (% rdx) (% rbp) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x4c; 0x89; 0xfa; (* MOV (% rdx) (% r15) *) + 0x4c; 0x21; 0xf2; (* AND (% rdx) (% r14) *) + 0x48; 0x29; 0xd1; (* SUB (% rcx) (% rdx) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xca; (* ADC (% rdx) (% rcx) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x48; 0x0f; 0xa4; 0xf2; 0x01; + (* SHLD (% rdx) (% rsi) (Imm8 (word 1)) *) + 0x48; 0xc1; 0xf9; 0x3f; (* SAR (% rcx) (Imm8 (word 63)) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x48; 0x01; 0xca; (* ADD (% rdx) (% rcx) *) + 0x48; 0xf7; 0xea; (* IMUL2 (% rdx,% rax) (% rdx) *) + 0x4c; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% r8) (Memop Quadword (%% (rsp,96))) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% r8) (Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x44; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x48; 0x11; 0xce; (* ADC (% rsi) (% rcx) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x89; 0x74; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rsi) *) + 0x48; 0x8b; 0xb4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0x8b; 0x14; 0x24; (* MOV (% rdx) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x20; + (* MOV (% rcx) (Memop Quadword (%% (rsp,32))) *) + 0x48; 0x89; 0xd3; (* MOV (% rbx) (% rdx) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) - 0x49; 0x19; 0xd3; (* SBB (% r11) (% rdx) *) - 0x48; 0x19; 0xed; (* SBB (% rbp) (% rbp) *) - 0x4b; 0x89; 0x34; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rsi) *) - 0x4c; 0x89; 0xde; (* MOV (% rsi) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0x97; (* JB (Imm8 (word 151)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4d; 0x89; 0xe2; (* MOV (% r10) (% r12) *) - 0x49; 0x89; 0xeb; (* MOV (% r11) (% rbp) *) - 0x4d; 0x31; 0xe6; (* XOR (% r14) (% r12) *) - 0x48; 0x31; 0xee; (* XOR (% rsi) (% rbp) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4c; 0x31; 0xe0; (* XOR (% rax) (% r12) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x83; 0xd0; 0x00; (* ADC (% rax) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x31; 0xe8; (* XOR (% rax) (% rbp) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x83; 0xd0; 0x00; (* ADC (% rax) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x4b; 0x89; 0x04; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0xce; (* JB (Imm8 (word 206)) *) - 0x4d; 0x29; 0xd6; (* SUB (% r14) (% r10) *) - 0x4c; 0x29; 0xde; (* SUB (% rsi) (% r11) *) - 0x4d; 0x89; 0xe9; (* MOV (% r9) (% r13) *) - 0x4b; 0x8b; 0x44; 0xc8; 0xf8; - (* MOV (% rax) (Memop Quadword (%%%% (r8,3,r9,-- &8))) *) - 0x49; 0x89; 0xc2; (* MOV (% r10) (% rax) *) - 0x4c; 0x0f; 0xac; 0xf0; 0x3a; - (* SHRD (% rax) (% r14) (Imm8 (word 58)) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x4d; 0x89; 0xd6; (* MOV (% r14) (% r10) *) - 0x4b; 0x8b; 0x44; 0xcf; 0xf8; - (* MOV (% rax) (Memop Quadword (%%%% (r15,3,r9,-- &8))) *) - 0x49; 0x89; 0xc3; (* MOV (% r11) (% rax) *) - 0x48; 0x0f; 0xac; 0xf0; 0x3a; - (* SHRD (% rax) (% rsi) (Imm8 (word 58)) *) - 0x4b; 0x89; 0x44; 0xcf; 0xf8; - (* MOV (Memop Quadword (%%%% (r15,3,r9,-- &8))) (% rax) *) - 0x4c; 0x89; 0xde; (* MOV (% rsi) (% r11) *) - 0x49; 0xff; 0xc9; (* DEC (% r9) *) - 0x75; 0xd1; (* JNE (Imm8 (word 209)) *) - 0x48; 0xf7; 0xd5; (* NOT (% rbp) *) - 0x48; 0x8b; 0x4c; 0x24; 0x48; - (* MOV (% rcx) (Memop Quadword (%% (rsp,72))) *) - 0x4c; 0x8b; 0x44; 0x24; 0x38; - (* MOV (% r8) (Memop Quadword (%% (rsp,56))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x40; - (* MOV (% r15) (Memop Quadword (%% (rsp,64))) *) - 0x4d; 0x89; 0xe2; (* MOV (% r10) (% r12) *) - 0x49; 0x89; 0xeb; (* MOV (% r11) (% rbp) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x48; 0x89; 0xea; (* MOV (% rdx) (% rbp) *) - 0x4a; 0x8b; 0x04; 0xc9; (* MOV (% rax) (Memop Quadword (%%% (rcx,3,r9))) *) - 0x48; 0x21; 0xc2; (* AND (% rdx) (% rax) *) - 0x4c; 0x21; 0xe0; (* AND (% rax) (% r12) *) - 0x4b; 0x8b; 0x1c; 0xc8; (* MOV (% rbx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4c; 0x31; 0xe3; (* XOR (% rbx) (% r12) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x11; 0xd8; (* ADC (% rax) (% rbx) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x31; 0xeb; (* XOR (% rbx) (% rbp) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x11; 0xda; (* ADC (% rdx) (% rbx) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x4b; 0x89; 0x14; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xc3; (* JB (Imm8 (word 195)) *) - 0x48; 0x83; 0x6c; 0x24; 0x20; 0x3a; - (* SUB (Memop Quadword (%% (rsp,32))) (Imm8 (word 58)) *) - 0x0f; 0x87; 0x8d; 0xfb; 0xff; 0xff; - (* JA (Imm32 (word 4294966157)) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x48; 0x8d; 0x14; 0x03; (* LEA (% rdx) (%%% (rbx,0,rax)) *) + 0x48; 0x8d; 0x3c; 0x01; (* LEA (% rdi) (%%% (rcx,0,rax)) *) + 0x48; 0xc1; 0xe2; 0x16; (* SHL (% rdx) (Imm8 (word 22)) *) + 0x48; 0xc1; 0xe7; 0x16; (* SHL (% rdi) (Imm8 (word 22)) *) + 0x48; 0xc1; 0xfa; 0x2b; (* SAR (% rdx) (Imm8 (word 43)) *) + 0x48; 0xc1; 0xff; 0x2b; (* SAR (% rdi) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x48; 0x8d; 0x1c; 0x03; (* LEA (% rbx) (%%% (rbx,0,rax)) *) + 0x48; 0x8d; 0x0c; 0x01; (* LEA (% rcx) (%%% (rcx,0,rax)) *) + 0x48; 0xc1; 0xfb; 0x2a; (* SAR (% rbx) (Imm8 (word 42)) *) + 0x48; 0xc1; 0xf9; 0x2a; (* SAR (% rcx) (Imm8 (word 42)) *) + 0x48; 0x89; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rdx) *) + 0x48; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rbx) *) + 0x48; 0x89; 0xbc; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% rdi) *) + 0x48; 0x89; 0x8c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% rcx) *) + 0x4c; 0x8b; 0x24; 0x24; (* MOV (% r12) (Memop Quadword (%% (rsp,0))) *) + 0x49; 0x0f; 0xaf; 0xfc; (* IMUL (% rdi) (% r12) *) + 0x4c; 0x0f; 0xaf; 0xe2; (* IMUL (% r12) (% rdx) *) + 0x4c; 0x8b; 0x6c; 0x24; 0x20; + (* MOV (% r13) (Memop Quadword (%% (rsp,32))) *) + 0x49; 0x0f; 0xaf; 0xdd; (* IMUL (% rbx) (% r13) *) + 0x4c; 0x0f; 0xaf; 0xe9; (* IMUL (% r13) (% rcx) *) + 0x49; 0x01; 0xdc; (* ADD (% r12) (% rbx) *) + 0x49; 0x01; 0xfd; (* ADD (% r13) (% rdi) *) + 0x49; 0xc1; 0xfc; 0x14; (* SAR (% r12) (Imm8 (word 20)) *) + 0x49; 0xc1; 0xfd; 0x14; (* SAR (% r13) (Imm8 (word 20)) *) + 0x4c; 0x89; 0xe3; (* MOV (% rbx) (% r12) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x4c; 0x8d; 0x04; 0x03; (* LEA (% r8) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x14; 0x01; (* LEA (% r10) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xe0; 0x16; (* SHL (% r8) (Imm8 (word 22)) *) + 0x49; 0xc1; 0xe2; 0x16; (* SHL (% r10) (Imm8 (word 22)) *) + 0x49; 0xc1; 0xf8; 0x2b; (* SAR (% r8) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfa; 0x2b; (* SAR (% r10) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x4c; 0x8d; 0x3c; 0x03; (* LEA (% r15) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x1c; 0x01; (* LEA (% r11) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xff; 0x2a; (* SAR (% r15) (Imm8 (word 42)) *) + 0x49; 0xc1; 0xfb; 0x2a; (* SAR (% r11) (Imm8 (word 42)) *) + 0x4c; 0x89; 0xeb; (* MOV (% rbx) (% r13) *) + 0x4c; 0x89; 0xe1; (* MOV (% rcx) (% r12) *) + 0x4d; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% r8) *) + 0x49; 0x0f; 0xaf; 0xdf; (* IMUL (% rbx) (% r15) *) + 0x49; 0x01; 0xdc; (* ADD (% r12) (% rbx) *) + 0x4d; 0x0f; 0xaf; 0xeb; (* IMUL (% r13) (% r11) *) + 0x49; 0x0f; 0xaf; 0xca; (* IMUL (% rcx) (% r10) *) + 0x49; 0x01; 0xcd; (* ADD (% r13) (% rcx) *) + 0x49; 0xc1; 0xfc; 0x14; (* SAR (% r12) (Imm8 (word 20)) *) + 0x49; 0xc1; 0xfd; 0x14; (* SAR (% r13) (Imm8 (word 20)) *) + 0x4c; 0x89; 0xe3; (* MOV (% rbx) (% r12) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x49; 0x0f; 0xaf; 0xd7; (* IMUL (% rdx) (% r15) *) + 0x4c; 0x0f; 0xaf; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* IMUL (% r8) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x0f; 0xaf; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* IMUL (% r15) (Memop Quadword (%% (rsp,184))) *) + 0x4d; 0x01; 0xc7; (* ADD (% r15) (% r8) *) + 0x4c; 0x8d; 0x0c; 0x10; (* LEA (% r9) (%%% (rax,0,rdx)) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) + 0x49; 0x0f; 0xaf; 0xc2; (* IMUL (% rax) (% r10) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x49; 0x0f; 0xaf; 0xd3; (* IMUL (% rdx) (% r11) *) + 0x4c; 0x0f; 0xaf; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* IMUL (% r10) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x0f; 0xaf; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* IMUL (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x4d; 0x01; 0xd3; (* ADD (% r11) (% r10) *) + 0x4c; 0x8d; 0x2c; 0x10; (* LEA (% r13) (%%% (rax,0,rdx)) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x4c; 0x8d; 0x04; 0x03; (* LEA (% r8) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x24; 0x01; (* LEA (% r12) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xe0; 0x15; (* SHL (% r8) (Imm8 (word 21)) *) + 0x49; 0xc1; 0xe4; 0x15; (* SHL (% r12) (Imm8 (word 21)) *) + 0x49; 0xc1; 0xf8; 0x2b; (* SAR (% r8) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfc; 0x2b; (* SAR (% r12) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x4c; 0x8d; 0x14; 0x03; (* LEA (% r10) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x34; 0x01; (* LEA (% r14) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xfa; 0x2b; (* SAR (% r10) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfe; 0x2b; (* SAR (% r14) (Imm8 (word 43)) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x49; 0x0f; 0xaf; 0xd2; (* IMUL (% rdx) (% r10) *) + 0x4d; 0x0f; 0xaf; 0xc7; (* IMUL (% r8) (% r15) *) + 0x4d; 0x0f; 0xaf; 0xd3; (* IMUL (% r10) (% r11) *) + 0x4d; 0x01; 0xc2; (* ADD (% r10) (% r8) *) + 0x4c; 0x8d; 0x04; 0x10; (* LEA (% r8) (%%% (rax,0,rdx)) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x49; 0x0f; 0xaf; 0xc4; (* IMUL (% rax) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x49; 0x0f; 0xaf; 0xd6; (* IMUL (% rdx) (% r14) *) + 0x4d; 0x0f; 0xaf; 0xe7; (* IMUL (% r12) (% r15) *) + 0x4d; 0x0f; 0xaf; 0xf3; (* IMUL (% r14) (% r11) *) + 0x4d; 0x01; 0xe6; (* ADD (% r14) (% r12) *) + 0x4c; 0x8d; 0x24; 0x10; (* LEA (% r12) (%%% (rax,0,rdx)) *) + 0x48; 0x89; 0xb4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% rsi) *) + 0x48; 0xff; 0x8c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* DEC (Memop Quadword (%% (rsp,144))) *) + 0x0f; 0x85; 0xc1; 0xee; 0xff; 0xff; + (* JNE (Imm32 (word 4294962881)) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x20; + (* MOV (% rcx) (Memop Quadword (%% (rsp,32))) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x49; 0x0f; 0xaf; 0xca; (* IMUL (% rcx) (% r10) *) + 0x48; 0x01; 0xc8; (* ADD (% rax) (% rcx) *) + 0x48; 0xc1; 0xf8; 0x3f; (* SAR (% rax) (Imm8 (word 63)) *) + 0x4d; 0x89; 0xc1; (* MOV (% r9) (% r8) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xc8; (* XOR (% r8) (% r9) *) + 0x4d; 0x29; 0xc8; (* SUB (% r8) (% r9) *) + 0x49; 0x31; 0xc1; (* XOR (% r9) (% rax) *) + 0x4d; 0x89; 0xd3; (* MOV (% r11) (% r10) *) + 0x49; 0xc1; 0xfb; 0x3f; (* SAR (% r11) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xda; (* XOR (% r10) (% r11) *) + 0x4d; 0x29; 0xda; (* SUB (% r10) (% r11) *) + 0x49; 0x31; 0xc3; (* XOR (% r11) (% rax) *) + 0x4d; 0x89; 0xe5; (* MOV (% r13) (% r12) *) + 0x49; 0xc1; 0xfd; 0x3f; (* SAR (% r13) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xec; (* XOR (% r12) (% r13) *) + 0x4d; 0x29; 0xec; (* SUB (% r12) (% r13) *) + 0x49; 0x31; 0xc5; (* XOR (% r13) (% rax) *) + 0x4d; 0x89; 0xf7; (* MOV (% r15) (% r14) *) + 0x49; 0xc1; 0xff; 0x3f; (* SAR (% r15) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xfe; (* XOR (% r14) (% r15) *) + 0x4d; 0x29; 0xfe; (* SUB (% r14) (% r15) *) + 0x49; 0x31; 0xc7; (* XOR (% r15) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x4c; 0x21; 0xc8; (* AND (% rax) (% r9) *) + 0x4d; 0x89; 0xd4; (* MOV (% r12) (% r10) *) + 0x4d; 0x21; 0xdc; (* AND (% r12) (% r11) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) + 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) + 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x4d; 0x21; 0xc1; (* AND (% r9) (% r8) *) + 0x49; 0xf7; 0xd9; (* NEG (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x49; 0x29; 0xd1; (* SUB (% r9) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4c; 0x0f; 0xa4; 0xf8; 0x01; + (* SHLD (% rax) (% r15) (Imm8 (word 1)) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0xbb; 0x13; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 19)) *) + 0x4a; 0x8d; 0x44; 0x08; 0x01; + (* LEA (% rax) (%%%% (rax,0,r9,&1)) *) + 0x48; 0xf7; 0xeb; (* IMUL2 (% rdx,% rax) (% rbx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x4d; 0x11; 0xce; (* ADC (% r14) (% r9) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x48; 0x0f; 0x49; 0xdd; (* CMOVNS (% rbx) (% rbp) *) + 0x49; 0x29; 0xdc; (* SUB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x0f; 0xba; 0xf7; 0x3f; + (* BTR (% r15) (Imm8 (word 63)) *) + 0x48; 0x8b; 0xbc; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x89; 0x27; (* MOV (Memop Quadword (%% (rdi,0))) (% r12) *) + 0x4c; 0x89; 0x6f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r13) *) + 0x4c; 0x89; 0x77; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r14) *) + 0x4c; 0x89; 0x7f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r15) *) 0x48; 0x8b; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; (* MOV (% rbp) (Memop Quadword (%% (rsp,448))) *) 0x31; 0xf6; (* XOR (% esi) (% esi) *) - 0x48; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,224))) *) - 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,128))) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,416))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) 0x49; 0x11; 0xf4; (* ADC (% r12) (% rsi) *) 0x31; 0xf6; (* XOR (% esi) (% esi) *) - 0x48; 0x8b; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,232))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; (* ADCX (% r9) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; (* ADOX (% r10) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xee; @@ -2292,28 +3414,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xee; (* ADCX (% r13) (% rsi) *) 0x31; 0xf6; (* XOR (% esi) (% esi) *) - 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,240))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,432))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf6; @@ -2321,28 +3443,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf6; (* ADCX (% r14) (% rsi) *) 0x31; 0xf6; (* XOR (% esi) (% esi) *) - 0x48; 0x8b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,248))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,440))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; (* ADOX (% r14) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; (* ADCX (% r14) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfe; @@ -2405,43 +3527,43 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x4c; 0x89; 0x55; 0x10; (* MOV (Memop Quadword (%% (rbp,16))) (% r10) *) 0x4c; 0x89; 0x5d; 0x18; (* MOV (Memop Quadword (%% (rbp,24))) (% r11) *) 0x31; 0xf6; (* XOR (% esi) (% esi) *) - 0x48; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,224))) *) - 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,416))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,352))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) 0x49; 0x11; 0xf4; (* ADC (% r12) (% rsi) *) 0x31; 0xf6; (* XOR (% esi) (% esi) *) - 0x48; 0x8b; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,232))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,352))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; (* ADCX (% r9) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; (* ADOX (% r10) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xee; @@ -2449,28 +3571,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xee; (* ADCX (% r13) (% rsi) *) 0x31; 0xf6; (* XOR (% esi) (% esi) *) - 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,240))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,432))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,352))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; (* ADCX (% r10) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; (* ADOX (% r11) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf6; @@ -2478,28 +3600,28 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf6; (* ADCX (% r14) (% rsi) *) 0x31; 0xf6; (* XOR (% esi) (% esi) *) - 0x48; 0x8b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (% rdx) (Memop Quadword (%% (rsp,248))) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,440))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,352))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; (* ADCX (% r11) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; (* ADOX (% r12) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; (* ADCX (% r12) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; (* ADOX (% r13) (% rbx) *) - 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; (* ADCX (% r13) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; (* ADOX (% r14) (% rbx) *) - 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; (* ADCX (% r14) (% rax) *) 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfe; @@ -2571,505 +3693,502 @@ let edwards25519_scalarmulbase_mc,edwards25519_scalarmulbase_data = 0x5b; (* POP (% rbx) *) 0xc3 (* RET *) ] -[237; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 127; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; - 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; +[0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 0; 0; 0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; - 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 231; - 32; 114; 124; 109; 148; 95; 82; 68; 84; 227; 241; 178; 176; 54; 70; 15; 174; - 146; 232; 112; 157; 110; 121; 177; 173; 55; 169; 95; 192; 222; 3; 21; 85; - 55; 198; 28; 39; 28; 109; 20; 79; 202; 164; 196; 136; 37; 70; 57; 252; 90; - 229; 254; 41; 17; 105; 245; 114; 132; 77; 120; 159; 148; 21; 73; 0; 173; - 175; 16; 229; 137; 189; 14; 134; 185; 115; 192; 8; 31; 77; 157; 175; 0; 45; - 139; 110; 113; 7; 20; 151; 133; 143; 246; 133; 214; 112; 62; 145; 64; 215; - 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; 138; 143; 104; 52; - 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; 59; 140; 245; 198; - 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; 66; 61; 100; 152; - 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; 122; 135; 5; 18; - 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; 67; 221; 203; 125; - 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; 180; 66; 96; 165; - 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; 110; 177; 107; 35; - 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; 60; 147; 252; 231; - 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; 225; 101; 154; - 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; 179; 168; 250; - 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; 132; 160; 15; 80; - 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; 252; 164; 232; 31; 97; 86; - 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; 243; 49; 129; - 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; 37; 175; 138; - 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; 244; 248; - 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; 98; 218; 53; - 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; 180; 185; - 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; 96; 86; - 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; 69; 116; - 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; 125; 244; - 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; 33; 3; - 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; 69; 57; - 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; 12; 157; - 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; 20; 0; - 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; 126; 74; - 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; 80; 141; - 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; 41; 133; - 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; 45; 167; - 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; 164; 140; - 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; 83; 69; - 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; 21; 119; - 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; 218; 104; - 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; 2; 103; - 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; 162; - 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; 111; - 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; 157; - 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; 210; - 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; 126; - 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; 154; - 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; 144; - 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; 88; - 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; 14; - 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; 226; - 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; 97; 96; - 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; 139; 120; - 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; 92; 124; - 144; 38; 243; 45; 62; 85; 202; 81; 200; 126; 179; 120; 72; 166; 203; 132; - 18; 167; 231; 209; 136; 50; 25; 228; 181; 230; 131; 136; 154; 90; 236; 16; - 242; 76; 246; 33; 144; 45; 165; 4; 45; 50; 156; 191; 198; 117; 51; 159; 193; - 185; 9; 11; 210; 66; 67; 58; 122; 88; 97; 254; 100; 170; 248; 28; 59; 20; - 171; 202; 138; 150; 125; 124; 134; 159; 41; 39; 9; 39; 142; 37; 84; 95; 117; - 9; 24; 234; 75; 211; 167; 208; 225; 38; 65; 55; 163; 70; 181; 33; 67; 131; - 136; 162; 88; 248; 79; 169; 60; 237; 19; 83; 86; 212; 14; 206; 250; 52; 191; - 181; 207; 61; 92; 245; 113; 179; 234; 201; 165; 60; 101; 10; 143; 33; 133; - 209; 69; 122; 10; 73; 53; 147; 4; 70; 120; 55; 21; 154; 246; 225; 49; 204; - 9; 234; 96; 0; 101; 233; 110; 248; 119; 21; 4; 126; 243; 103; 91; 206; 150; - 164; 178; 102; 150; 151; 86; 189; 216; 146; 84; 255; 208; 44; 89; 74; 41; - 236; 60; 80; 178; 172; 19; 8; 101; 67; 105; 86; 152; 7; 98; 38; 12; 219; 24; - 184; 74; 53; 110; 96; 217; 49; 92; 93; 199; 205; 168; 0; 79; 250; 130; 9; - 212; 226; 83; 70; 205; 43; 225; 23; 157; 182; 171; 29; 235; 249; 114; 86; - 252; 83; 232; 175; 53; 181; 112; 186; 109; 214; 150; 39; 117; 15; 172; 71; - 117; 114; 17; 148; 23; 53; 165; 50; 55; 132; 100; 223; 166; 68; 166; 211; - 221; 191; 15; 136; 89; 101; 59; 112; 165; 26; 58; 173; 64; 37; 133; 203; - 104; 100; 76; 142; 247; 179; 0; 9; 27; 101; 157; 103; 159; 27; 133; 10; 242; - 66; 51; 3; 97; 203; 8; 225; 163; 48; 139; 232; 127; 245; 1; 214; 20; 215; - 45; 237; 202; 58; 31; 55; 49; 173; 22; 200; 190; 15; 40; 237; 227; 239; 230; - 216; 91; 89; 217; 82; 245; 35; 198; 246; 114; 23; 231; 15; 60; 41; 30; 5; - 11; 3; 20; 67; 173; 188; 240; 251; 94; 0; 96; 213; 94; 12; 135; 209; 46; 15; - 183; 142; 160; 230; 132; 208; 51; 144; 31; 32; 112; 102; 123; 206; 225; 90; - 58; 76; 149; 250; 184; 220; 52; 164; 56; 65; 11; 132; 150; 108; 125; 246; - 12; 135; 44; 232; 123; 41; 116; 133; 56; 222; 90; 165; 98; 114; 178; 77; - 129; 124; 221; 160; 61; 201; 228; 117; 248; 186; 77; 41; 185; 113; 167; 130; - 50; 185; 96; 196; 198; 244; 183; 63; 214; 128; 129; 193; 102; 234; 61; 199; - 233; 109; 242; 248; 77; 160; 213; 4; 137; 71; 211; 66; 1; 177; 74; 174; 251; - 250; 152; 9; 93; 85; 99; 172; 200; 246; 4; 177; 144; 47; 65; 74; 172; 90; 8; - 41; 201; 58; 107; 50; 79; 198; 224; 225; 99; 230; 130; 178; 81; 85; 131; 75; - 26; 74; 245; 53; 107; 71; 194; 104; 159; 24; 254; 163; 157; 27; 52; 81; 127; - 189; 10; 13; 58; 96; 70; 174; 211; 225; 50; 201; 137; 128; 99; 189; 152; - 135; 57; 145; 37; 223; 53; 2; 186; 116; 210; 92; 20; 28; 67; 215; 243; 117; - 100; 56; 232; 50; 239; 217; 229; 106; 175; 139; 91; 54; 30; 104; 91; 56; - 182; 56; 82; 130; 225; 101; 125; 22; 193; 41; 73; 35; 232; 173; 119; 160; - 171; 236; 77; 152; 157; 56; 235; 25; 173; 119; 63; 56; 148; 215; 84; 41; - 126; 107; 236; 199; 122; 58; 124; 235; 58; 123; 199; 89; 207; 159; 9; 29; - 194; 92; 20; 72; 229; 215; 40; 204; 146; 193; 53; 69; 1; 126; 36; 72; 229; - 193; 231; 128; 238; 115; 41; 59; 116; 40; 95; 74; 98; 207; 92; 34; 37; 215; - 173; 211; 93; 44; 21; 178; 129; 51; 26; 145; 125; 248; 8; 91; 173; 159; 179; - 216; 59; 254; 153; 71; 107; 96; 5; 111; 98; 169; 123; 23; 146; 158; 254; - 159; 225; 202; 229; 13; 29; 231; 174; 152; 68; 16; 131; 45; 148; 174; 244; - 63; 200; 58; 83; 88; 46; 225; 77; 113; 131; 100; 27; 249; 73; 49; 67; 91; - 98; 191; 44; 90; 101; 220; 181; 173; 179; 39; 40; 99; 18; 132; 250; 135; - 216; 248; 73; 171; 145; 94; 137; 96; 24; 108; 248; 12; 237; 242; 236; 233; - 212; 223; 53; 7; 18; 6; 109; 180; 231; 107; 185; 4; 152; 160; 157; 188; 107; - 194; 109; 217; 47; 230; 226; 115; 94; 81; 170; 73; 84; 99; 91; 237; 58; 130; - 198; 11; 159; 196; 101; 168; 196; 209; 66; 91; 233; 31; 12; 133; 185; 21; - 211; 3; 111; 109; 215; 48; 29; 156; 47; 99; 14; 221; 204; 46; 21; 49; 137; - 118; 150; 182; 208; 81; 88; 122; 99; 168; 107; 183; 223; 82; 57; 239; 14; - 160; 73; 125; 211; 109; 199; 228; 6; 33; 23; 68; 68; 108; 105; 127; 141; - 146; 128; 214; 83; 251; 38; 63; 77; 105; 164; 158; 115; 180; 176; 75; 134; - 46; 17; 151; 198; 16; 222; 95; 190; 125; 39; 196; 147; 100; 162; 126; 173; - 25; 173; 79; 93; 38; 144; 69; 48; 70; 200; 223; 0; 14; 9; 254; 102; 237; - 171; 28; 230; 37; 5; 200; 88; 131; 160; 42; 166; 12; 71; 66; 32; 122; 227; - 74; 61; 106; 220; 237; 17; 59; 166; 211; 100; 116; 239; 6; 8; 85; 175; 155; - 191; 3; 4; 102; 88; 204; 40; 225; 19; 63; 126; 116; 89; 180; 236; 115; 88; - 111; 245; 104; 18; 204; 237; 61; 182; 160; 44; 226; 134; 69; 99; 120; 109; - 86; 52; 8; 193; 156; 159; 164; 55; 22; 81; 196; 155; 168; 213; 86; 142; 188; - 219; 210; 127; 127; 15; 236; 181; 28; 217; 53; 204; 94; 202; 91; 151; 51; - 208; 47; 90; 198; 133; 66; 5; 161; 195; 103; 22; 243; 42; 17; 100; 108; 88; - 238; 26; 115; 64; 226; 10; 104; 42; 178; 147; 71; 243; 165; 251; 20; 212; - 247; 133; 105; 22; 70; 215; 60; 87; 0; 200; 201; 132; 94; 62; 89; 30; 19; - 97; 123; 182; 242; 195; 47; 108; 82; 252; 131; 234; 156; 130; 20; 194; 149; - 221; 151; 132; 123; 67; 255; 167; 181; 78; 170; 48; 78; 116; 108; 139; 232; - 133; 60; 97; 93; 12; 158; 115; 129; 117; 95; 30; 199; 217; 47; 184; 236; - 113; 78; 47; 11; 231; 33; 227; 119; 164; 64; 185; 221; 86; 230; 128; 79; 29; - 206; 206; 86; 101; 191; 126; 123; 93; 83; 196; 59; 252; 5; 221; 222; 175; - 82; 174; 179; 184; 36; 207; 48; 59; 237; 140; 99; 149; 52; 149; 129; 190; - 169; 131; 188; 164; 51; 4; 31; 101; 92; 71; 103; 55; 55; 217; 173; 209; 64; - 253; 153; 186; 47; 39; 208; 244; 150; 111; 22; 7; 179; 174; 59; 240; 21; 82; - 240; 99; 67; 153; 249; 24; 59; 108; 165; 190; 31; 144; 101; 36; 20; 203; - 149; 64; 99; 53; 85; 193; 22; 64; 20; 18; 239; 96; 188; 16; 137; 12; 20; 56; - 158; 140; 124; 144; 48; 87; 144; 245; 107; 138; 91; 65; 225; 241; 120; 167; - 15; 126; 167; 195; 186; 247; 159; 64; 6; 80; 154; 162; 154; 184; 215; 82; - 111; 86; 90; 99; 122; 246; 28; 82; 2; 148; 82; 157; 10; 11; 238; 63; 81; - 102; 90; 223; 15; 92; 231; 152; 143; 206; 7; 225; 191; 136; 134; 97; 212; - 237; 44; 56; 113; 126; 10; 160; 63; 228; 94; 47; 119; 32; 103; 20; 177; 206; - 154; 7; 150; 177; 148; 248; 232; 74; 130; 172; 0; 77; 34; 248; 74; 196; 108; - 205; 247; 217; 83; 23; 0; 52; 219; 61; 150; 45; 35; 105; 60; 88; 56; 151; - 180; 218; 135; 222; 29; 133; 242; 145; 160; 249; 209; 215; 170; 182; 237; - 72; 160; 47; 254; 181; 18; 77; 227; 252; 150; 196; 251; 240; 113; 237; 91; - 243; 173; 107; 130; 185; 115; 97; 197; 40; 255; 97; 114; 4; 210; 111; 32; - 177; 111; 249; 118; 155; 116; 146; 30; 111; 173; 38; 124; 43; 223; 19; 137; - 75; 80; 35; 211; 102; 75; 195; 139; 28; 117; 192; 157; 64; 140; 184; 199; - 150; 7; 194; 147; 126; 111; 5; 174; 166; 174; 4; 246; 90; 31; 153; 156; 228; - 190; 241; 81; 35; 193; 102; 107; 255; 238; 181; 8; 168; 97; 81; 33; 224; 1; - 15; 193; 206; 15; 68; 30; 254; 73; 166; 88; 77; 100; 126; 119; 173; 49; 162; - 174; 252; 33; 210; 208; 127; 136; 90; 28; 68; 2; 243; 17; 197; 131; 113; - 170; 1; 73; 69; 78; 36; 196; 157; 210; 242; 61; 10; 222; 216; 147; 116; 14; - 2; 43; 77; 33; 12; 130; 126; 6; 200; 108; 10; 185; 234; 111; 22; 121; 55; - 65; 240; 248; 26; 140; 84; 183; 177; 8; 180; 153; 98; 36; 124; 122; 15; 206; - 57; 217; 6; 30; 249; 176; 96; 247; 19; 18; 109; 114; 123; 136; 187; 65; 216; - 73; 124; 86; 108; 128; 103; 146; 106; 30; 121; 202; 204; 4; 109; 6; 75; 57; - 204; 227; 69; 86; 159; 166; 210; 140; 120; 160; 134; 182; 149; 92; 210; 247; - 57; 170; 224; 128; 217; 151; 28; 181; 198; 82; 66; 56; 208; 53; 170; 85; - 205; 7; 147; 244; 67; 125; 98; 195; 138; 183; 207; 54; 189; 86; 84; 169; 20; - 13; 193; 25; 197; 42; 144; 250; 181; 148; 180; 116; 244; 234; 90; 122; 248; - 169; 130; 131; 175; 230; 148; 224; 155; 135; 177; 109; 234; 13; 171; 229; - 68; 115; 84; 191; 102; 170; 9; 67; 27; 143; 136; 88; 18; 218; 47; 75; 86; - 253; 179; 210; 135; 94; 221; 177; 131; 84; 136; 120; 44; 91; 122; 121; 168; - 214; 116; 235; 186; 21; 50; 23; 196; 250; 241; 92; 245; 126; 197; 5; 139; - 60; 90; 31; 0; 41; 251; 204; 234; 82; 135; 204; 215; 10; 207; 8; 52; 121; - 98; 19; 21; 82; 148; 61; 150; 25; 3; 23; 15; 235; 102; 148; 61; 136; 250; - 178; 51; 168; 120; 60; 0; 117; 167; 127; 58; 9; 190; 215; 22; 58; 230; 125; - 16; 229; 207; 50; 243; 154; 220; 255; 119; 163; 127; 103; 11; 68; 24; 191; - 213; 112; 3; 20; 163; 164; 25; 43; 37; 106; 134; 18; 169; 96; 68; 96; 233; - 184; 222; 211; 120; 119; 4; 216; 63; 127; 45; 94; 138; 191; 49; 30; 208; - 103; 62; 101; 123; 194; 6; 138; 3; 123; 243; 144; 105; 211; 213; 25; 217; - 158; 242; 185; 78; 219; 187; 174; 19; 82; 53; 145; 185; 76; 5; 234; 8; 199; - 86; 14; 38; 114; 127; 213; 222; 88; 119; 61; 65; 233; 173; 157; 231; 120; - 125; 230; 41; 151; 213; 249; 87; 242; 230; 167; 122; 227; 14; 145; 219; 89; - 156; 3; 158; 187; 91; 27; 161; 106; 139; 212; 15; 91; 38; 83; 109; 218; 136; - 169; 191; 147; 49; 130; 96; 137; 40; 126; 213; 97; 50; 201; 138; 215; 67; - 129; 92; 58; 45; 148; 242; 121; 233; 141; 200; 182; 37; 47; 218; 151; 105; - 1; 242; 172; 234; 167; 27; 37; 228; 180; 78; 239; 135; 79; 180; 9; 165; 125; - 106; 188; 27; 171; 144; 125; 254; 107; 1; 167; 131; 166; 204; 154; 109; 11; - 197; 242; 77; 95; 80; 144; 170; 53; 228; 204; 95; 13; 97; 107; 150; 255; - 152; 97; 68; 13; 161; 25; 151; 195; 179; 150; 244; 163; 7; 26; 50; 37; 78; - 143; 24; 170; 206; 17; 240; 27; 117; 167; 213; 152; 148; 125; 160; 216; 141; - 80; 31; 22; 237; 25; 202; 230; 220; 135; 214; 44; 10; 86; 77; 207; 100; 134; - 196; 104; 53; 127; 56; 58; 128; 34; 82; 233; 65; 135; 252; 83; 86; 89; 177; - 218; 59; 72; 73; 250; 52; 135; 20; 15; 120; 250; 224; 52; 5; 54; 112; 11; - 111; 16; 189; 7; 227; 227; 111; 119; 16; 34; 254; 160; 230; 221; 9; 193; - 134; 50; 246; 128; 218; 180; 10; 77; 207; 214; 224; 127; 48; 248; 69; 62; - 72; 130; 164; 157; 111; 174; 105; 82; 0; 5; 122; 135; 247; 156; 144; 82; - 112; 28; 212; 152; 78; 135; 226; 125; 238; 50; 96; 12; 126; 185; 233; 98; - 195; 20; 138; 163; 96; 106; 222; 220; 129; 87; 64; 168; 122; 170; 234; 213; - 125; 33; 176; 30; 142; 36; 208; 196; 183; 157; 82; 191; 116; 77; 225; 151; - 118; 224; 84; 35; 86; 60; 23; 155; 106; 30; 101; 73; 90; 121; 31; 194; 167; - 127; 200; 14; 140; 190; 185; 31; 223; 139; 130; 2; 10; 227; 248; 231; 186; - 0; 108; 79; 108; 173; 29; 153; 99; 73; 10; 246; 246; 93; 110; 138; 5; 7; - 127; 246; 49; 219; 196; 2; 235; 233; 43; 251; 188; 16; 137; 253; 37; 237; - 180; 221; 92; 92; 31; 19; 200; 70; 206; 155; 203; 160; 19; 28; 178; 51; 49; - 142; 125; 8; 248; 146; 6; 54; 247; 99; 113; 210; 55; 198; 220; 244; 99; 89; - 234; 101; 32; 230; 164; 37; 217; 96; 193; 90; 46; 247; 155; 101; 91; 140; - 227; 94; 176; 185; 175; 154; 199; 19; 26; 7; 78; 45; 157; 191; 10; 41; 51; - 233; 109; 110; 238; 142; 23; 151; 16; 174; 23; 171; 59; 28; 176; 183; 202; - 199; 22; 178; 154; 28; 204; 195; 187; 7; 116; 211; 101; 125; 213; 88; 74; - 80; 80; 71; 116; 82; 144; 41; 26; 19; 107; 96; 242; 9; 190; 70; 67; 116; 68; - 125; 232; 64; 37; 43; 181; 21; 212; 218; 72; 29; 62; 96; 59; 161; 24; 138; - 58; 124; 247; 189; 205; 47; 193; 40; 183; 78; 174; 145; 102; 124; 89; 76; - 35; 126; 200; 180; 133; 10; 61; 157; 136; 100; 231; 250; 74; 53; 12; 201; - 226; 218; 29; 158; 106; 12; 7; 30; 135; 10; 137; 137; 188; 75; 153; 181; 1; - 51; 96; 66; 221; 91; 58; 174; 107; 115; 60; 158; 213; 25; 226; 173; 97; 13; - 100; 212; 133; 38; 15; 48; 231; 62; 183; 214; 125; 158; 228; 85; 210; 245; - 172; 30; 11; 97; 92; 17; 22; 128; 202; 135; 225; 146; 93; 151; 153; 60; 194; - 37; 145; 151; 98; 87; 129; 19; 24; 117; 30; 132; 71; 121; 250; 67; 215; 70; - 156; 99; 89; 250; 198; 229; 116; 43; 5; 227; 29; 94; 6; 161; 48; 144; 184; - 207; 162; 198; 71; 125; 224; 214; 240; 142; 20; 208; 218; 63; 60; 111; 84; - 145; 154; 116; 62; 157; 87; 129; 187; 38; 16; 98; 236; 113; 128; 236; 201; - 52; 141; 245; 140; 20; 39; 240; 52; 121; 246; 146; 164; 70; 169; 10; 132; - 246; 190; 132; 153; 70; 84; 24; 97; 137; 42; 188; 161; 92; 212; 187; 93; - 189; 30; 250; 242; 63; 109; 117; 228; 154; 125; 47; 87; 226; 127; 72; 243; - 136; 187; 69; 195; 86; 141; 168; 96; 105; 109; 11; 209; 159; 185; 161; 174; - 78; 173; 235; 143; 39; 102; 57; 147; 140; 31; 104; 170; 177; 152; 12; 41; - 32; 156; 148; 33; 140; 82; 60; 157; 33; 145; 82; 17; 57; 123; 103; 156; 254; - 2; 221; 4; 65; 42; 66; 36; 17; 94; 191; 178; 114; 181; 58; 163; 152; 51; 12; - 250; 161; 102; 182; 82; 250; 1; 97; 203; 148; 213; 83; 175; 175; 0; 59; 134; - 44; 184; 106; 9; 219; 6; 78; 33; 129; 53; 79; 228; 12; 201; 182; 168; 33; - 245; 42; 158; 64; 42; 193; 36; 101; 129; 164; 252; 142; 164; 181; 101; 1; - 118; 106; 132; 160; 116; 164; 144; 241; 192; 124; 47; 205; 132; 249; 239; - 18; 143; 43; 170; 88; 6; 41; 94; 105; 184; 200; 254; 191; 217; 103; 27; 89; - 250; 155; 180; 128; 28; 13; 47; 49; 138; 236; 243; 171; 94; 81; 121; 89; - 136; 28; 240; 158; 192; 51; 112; 114; 203; 123; 143; 202; 199; 46; 224; 61; - 93; 181; 24; 159; 113; 179; 185; 153; 30; 100; 140; 161; 250; 229; 101; 228; - 237; 5; 159; 194; 54; 17; 8; 97; 139; 18; 48; 112; 134; 79; 155; 72; 239; - 146; 235; 58; 45; 16; 50; 210; 97; 168; 22; 97; 180; 83; 98; 225; 36; 170; - 11; 25; 231; 171; 126; 61; 191; 190; 108; 73; 186; 251; 245; 73; 212; 207; - 91; 138; 16; 154; 148; 48; 235; 115; 100; 188; 112; 221; 64; 220; 28; 13; - 124; 48; 193; 148; 194; 146; 116; 110; 250; 203; 109; 168; 4; 86; 46; 87; - 156; 30; 140; 98; 93; 21; 65; 71; 136; 197; 172; 134; 77; 138; 235; 99; 87; - 81; 246; 82; 163; 145; 91; 81; 103; 136; 194; 166; 161; 6; 182; 100; 23; - 124; 212; 209; 136; 114; 81; 139; 65; 224; 64; 17; 84; 114; 209; 246; 172; - 24; 96; 26; 3; 159; 198; 66; 39; 254; 137; 158; 152; 32; 127; 204; 45; 58; - 253; 119; 151; 73; 146; 216; 79; 165; 44; 124; 133; 50; 160; 227; 7; 210; - 100; 216; 121; 162; 41; 126; 166; 12; 29; 237; 3; 4; 46; 236; 234; 133; 139; - 39; 116; 22; 223; 43; 203; 122; 7; 220; 33; 86; 90; 244; 203; 97; 22; 76; - 10; 100; 211; 149; 5; 247; 80; 153; 11; 115; 82; 197; 78; 135; 53; 45; 75; - 201; 141; 111; 36; 152; 207; 200; 230; 197; 206; 53; 192; 22; 250; 70; 203; - 247; 204; 61; 48; 8; 67; 69; 215; 91; 194; 76; 178; 40; 149; 209; 154; 127; - 129; 193; 53; 99; 101; 84; 107; 127; 54; 114; 192; 79; 110; 182; 184; 102; - 131; 173; 128; 115; 0; 120; 58; 19; 42; 121; 231; 21; 33; 147; 196; 133; - 201; 221; 205; 189; 162; 137; 76; 198; 98; 215; 163; 173; 168; 61; 30; 157; - 44; 248; 103; 48; 18; 219; 183; 91; 190; 98; 202; 198; 103; 244; 97; 9; 238; - 82; 25; 33; 214; 33; 236; 4; 112; 71; 213; 155; 119; 96; 35; 24; 210; 224; - 240; 88; 109; 202; 13; 116; 11; 175; 240; 211; 245; 11; 183; 80; 247; 113; - 46; 227; 138; 244; 234; 79; 52; 189; 91; 165; 211; 78; 232; 96; 237; 209; - 80; 63; 155; 72; 237; 0; 229; 26; 38; 237; 42; 199; 6; 57; 247; 0; 225; 136; - 217; 143; 182; 154; 151; 1; 54; 243; 154; 5; 233; 245; 71; 109; 43; 191; - 120; 220; 83; 14; 122; 135; 113; 121; 191; 41; 8; 185; 49; 230; 23; 109; 99; - 68; 68; 94; 147; 104; 39; 24; 46; 197; 5; 77; 245; 74; 74; 90; 154; 45; 99; - 39; 206; 96; 178; 84; 81; 240; 31; 209; 112; 82; 249; 114; 142; 195; 109; - 216; 56; 193; 124; 38; 13; 205; 31; 96; 205; 12; 233; 41; 100; 145; 103; 43; - 219; 255; 234; 135; 209; 133; 130; 169; 100; 168; 208; 216; 187; 251; 180; - 165; 247; 99; 38; 2; 127; 242; 88; 182; 130; 226; 156; 217; 34; 43; 188; 59; - 88; 10; 60; 88; 82; 201; 23; 185; 243; 198; 228; 15; 184; 249; 63; 101; 12; - 60; 223; 188; 215; 167; 13; 155; 14; 214; 84; 171; 182; 238; 160; 67; 135; - 84; 74; 109; 164; 102; 105; 57; 186; 179; 43; 172; 138; 161; 17; 248; 107; - 178; 40; 86; 91; 104; 228; 102; 146; 155; 146; 157; 2; 119; 164; 112; 232; - 95; 135; 87; 35; 50; 198; 58; 143; 203; 251; 245; 236; 244; 212; 217; 32; - 182; 43; 56; 147; 132; 238; 141; 220; 159; 121; 76; 161; 234; 197; 80; 60; - 251; 242; 214; 139; 220; 14; 221; 160; 183; 199; 156; 167; 58; 198; 84; 26; - 159; 141; 44; 43; 3; 11; 174; 251; 103; 41; 96; 7; 225; 156; 111; 42; 194; - 225; 205; 177; 84; 16; 173; 223; 50; 235; 72; 2; 233; 168; 196; 234; 192; - 205; 172; 51; 123; 62; 95; 62; 150; 121; 252; 19; 71; 54; 114; 181; 224; 32; - 53; 6; 147; 150; 19; 254; 3; 234; 136; 124; 207; 127; 67; 188; 89; 201; 211; - 11; 196; 212; 247; 217; 222; 147; 248; 209; 84; 145; 105; 38; 117; 178; 180; - 117; 92; 93; 49; 165; 218; 54; 2; 45; 132; 203; 204; 142; 238; 95; 52; 163; - 200; 240; 34; 237; 219; 57; 125; 97; 90; 151; 115; 16; 218; 117; 99; 249; - 77; 2; 228; 112; 200; 48; 24; 26; 37; 211; 120; 28; 217; 140; 101; 72; 25; - 43; 144; 138; 67; 183; 41; 11; 177; 24; 126; 70; 62; 67; 244; 146; 243; 55; - 111; 24; 107; 86; 31; 161; 185; 25; 14; 98; 214; 209; 31; 138; 183; 15; 34; - 77; 201; 129; 163; 88; 66; 42; 54; 47; 235; 107; 43; 19; 217; 113; 144; 71; - 130; 65; 40; 173; 233; 38; 15; 93; 146; 236; 189; 201; 30; 185; 234; 222; - 242; 138; 244; 200; 91; 230; 75; 40; 112; 110; 163; 235; 127; 72; 120; 52; - 206; 216; 29; 0; 19; 63; 95; 137; 196; 48; 75; 45; 177; 79; 147; 43; 10; - 127; 57; 77; 36; 108; 5; 52; 98; 194; 87; 162; 251; 80; 29; 139; 103; 176; - 222; 58; 130; 212; 123; 245; 138; 83; 166; 110; 220; 176; 194; 62; 167; 29; - 53; 198; 238; 101; 86; 16; 178; 191; 67; 9; 224; 62; 219; 194; 10; 128; 32; - 135; 1; 114; 73; 103; 134; 189; 115; 97; 93; 171; 38; 56; 73; 32; 171; 194; - 9; 178; 32; 75; 179; 127; 192; 42; 52; 158; 84; 147; 61; 55; 33; 8; 34; 216; - 2; 103; 245; 209; 172; 112; 45; 38; 188; 132; 199; 202; 251; 253; 201; 146; - 122; 137; 50; 189; 22; 69; 169; 204; 31; 40; 4; 66; 65; 170; 101; 141; 68; - 98; 93; 165; 22; 178; 183; 195; 89; 216; 44; 97; 78; 198; 44; 153; 73; 222; - 1; 248; 112; 234; 27; 189; 101; 138; 226; 73; 254; 192; 183; 239; 27; 74; - 174; 178; 177; 205; 6; 99; 168; 9; 42; 92; 38; 205; 192; 122; 59; 236; 188; - 1; 140; 67; 238; 43; 130; 59; 199; 251; 192; 37; 181; 12; 83; 233; 63; 149; - 193; 52; 144; 81; 72; 91; 15; 154; 224; 97; 194; 92; 38; 167; 57; 237; 34; - 79; 78; 213; 240; 10; 21; 8; 86; 30; 233; 170; 162; 117; 232; 218; 237; 233; - 178; 33; 244; 146; 233; 125; 107; 29; 83; 188; 49; 113; 249; 128; 169; 77; - 19; 61; 223; 167; 34; 26; 34; 209; 184; 79; 122; 216; 214; 170; 53; 32; 212; - 247; 61; 94; 18; 26; 106; 204; 237; 20; 42; 78; 206; 207; 82; 7; 238; 72; - 223; 183; 8; 236; 6; 243; 250; 255; 195; 196; 89; 84; 185; 42; 11; 113; 5; - 141; 163; 62; 150; 250; 37; 29; 22; 60; 67; 120; 4; 87; 140; 26; 35; 157; - 67; 129; 194; 14; 39; 181; 183; 159; 7; 217; 227; 234; 153; 170; 219; 217; - 3; 43; 108; 37; 245; 3; 44; 125; 164; 83; 123; 117; 24; 15; 121; 121; 88; - 12; 207; 48; 1; 123; 48; 249; 247; 126; 37; 119; 61; 144; 49; 175; 187; 150; - 189; 189; 104; 148; 105; 207; 254; 218; 244; 70; 47; 31; 189; 247; 214; 127; - 164; 20; 1; 239; 124; 127; 179; 71; 74; 218; 253; 31; 211; 133; 87; 144; - 115; 164; 25; 82; 82; 72; 25; 169; 106; 230; 61; 221; 216; 204; 210; 192; - 47; 194; 100; 80; 72; 47; 234; 253; 52; 102; 36; 72; 155; 58; 46; 74; 108; - 78; 28; 62; 41; 225; 18; 81; 146; 75; 19; 110; 55; 160; 93; 161; 220; 181; - 120; 55; 112; 17; 49; 28; 70; 175; 137; 69; 176; 35; 40; 3; 127; 68; 92; 96; - 91; 137; 124; 196; 32; 89; 128; 101; 185; 204; 143; 59; 146; 12; 16; 240; - 231; 119; 239; 226; 2; 101; 37; 1; 0; 238; 179; 174; 168; 206; 109; 167; 36; - 76; 240; 231; 240; 198; 254; 233; 59; 98; 73; 227; 117; 158; 87; 106; 134; - 26; 230; 29; 30; 22; 239; 66; 85; 213; 189; 90; 204; 244; 254; 18; 47; 64; - 199; 192; 223; 178; 34; 69; 10; 7; 164; 201; 64; 127; 110; 208; 16; 104; - 246; 207; 120; 65; 20; 207; 198; 144; 55; 164; 24; 37; 123; 96; 94; 24; 24; - 223; 108; 143; 29; 179; 88; 162; 88; 98; 195; 79; 167; 207; 53; 110; 29; - 230; 102; 79; 255; 179; 225; 247; 213; 205; 108; 171; 172; 103; 80; 20; 207; - 150; 165; 28; 67; 44; 160; 0; 228; 211; 174; 64; 45; 196; 227; 219; 38; 15; - 46; 128; 38; 69; 210; 104; 112; 69; 158; 19; 51; 31; 32; 81; 157; 3; 8; 107; - 127; 82; 253; 6; 0; 124; 1; 100; 73; 177; 24; 168; 164; 37; 46; 176; 14; 34; - 213; 117; 3; 70; 98; 136; 186; 124; 57; 178; 89; 89; 240; 147; 48; 193; 48; - 118; 121; 169; 233; 141; 161; 58; 226; 38; 94; 29; 114; 145; 212; 47; 34; - 58; 108; 110; 118; 32; 211; 57; 35; 231; 121; 19; 200; 251; 195; 21; 120; - 241; 42; 225; 221; 32; 148; 97; 166; 213; 253; 168; 133; 248; 192; 169; 255; - 82; 194; 225; 193; 34; 64; 27; 119; 167; 47; 58; 81; 134; 217; 125; 216; 8; - 207; 212; 249; 113; 155; 172; 245; 179; 131; 162; 30; 27; 195; 107; 208; - 118; 26; 151; 25; 146; 24; 26; 51; 198; 128; 79; 251; 69; 111; 22; 245; 207; - 117; 199; 97; 222; 199; 54; 156; 28; 217; 65; 144; 27; 232; 212; 227; 33; - 254; 189; 131; 107; 124; 22; 49; 175; 114; 117; 157; 58; 47; 81; 38; 158; - 74; 7; 104; 136; 226; 203; 91; 196; 247; 128; 17; 193; 193; 237; 132; 123; - 166; 73; 246; 159; 97; 201; 26; 104; 16; 75; 82; 66; 56; 43; 242; 135; 233; - 156; 238; 59; 52; 104; 80; 200; 80; 98; 74; 132; 113; 157; 252; 17; 177; 8; - 31; 52; 54; 36; 97; 141; 137; 78; 135; 219; 65; 157; 217; 32; 220; 7; 108; - 241; 165; 254; 9; 188; 155; 15; 208; 103; 44; 61; 121; 64; 255; 94; 158; 48; - 226; 235; 70; 56; 38; 45; 26; 227; 73; 99; 139; 53; 253; 211; 155; 0; 183; - 223; 157; 164; 107; 160; 163; 184; 241; 139; 127; 69; 4; 217; 120; 49; 170; - 34; 21; 56; 73; 97; 105; 83; 47; 56; 44; 16; 109; 45; 183; 154; 64; 254; - 218; 39; 242; 70; 182; 145; 51; 200; 232; 108; 48; 36; 5; 245; 112; 254; 69; - 140; 11; 12; 150; 166; 117; 72; 218; 32; 47; 14; 239; 118; 208; 104; 91; - 212; 143; 11; 61; 207; 81; 251; 7; 212; 146; 227; 160; 35; 22; 141; 66; 145; - 20; 149; 200; 32; 73; 242; 98; 162; 12; 99; 63; 200; 7; 240; 5; 184; 212; - 201; 245; 210; 69; 187; 111; 69; 34; 122; 181; 109; 159; 97; 22; 253; 8; - 163; 1; 68; 74; 79; 8; 172; 202; 165; 118; 195; 25; 34; 168; 125; 188; 209; - 67; 70; 222; 184; 222; 198; 56; 189; 96; 45; 89; 129; 29; 56; 76; 42; 236; - 190; 215; 51; 216; 237; 32; 204; 10; 131; 98; 145; 44; 129; 117; 223; 146; - 170; 71; 58; 233; 129; 74; 60; 51; 163; 103; 45; 112; 161; 200; 137; 47; - 154; 54; 74; 58; 13; 232; 141; 124; 29; 122; 19; 99; 21; 160; 237; 120; 138; - 0; 172; 188; 63; 176; 131; 180; 165; 179; 184; 44; 161; 144; 27; 203; 203; - 23; 228; 54; 78; 121; 17; 127; 170; 221; 179; 51; 7; 198; 91; 136; 8; 8; 81; - 63; 13; 2; 168; 230; 192; 29; 20; 36; 157; 238; 239; 63; 119; 60; 247; 89; - 157; 152; 207; 193; 137; 239; 241; 179; 95; 84; 46; 224; 66; 251; 93; 227; - 124; 180; 161; 71; 11; 18; 102; 87; 125; 21; 131; 189; 204; 93; 146; 145; - 148; 128; 204; 34; 83; 32; 161; 60; 228; 214; 144; 63; 24; 127; 229; 40; - 123; 118; 46; 222; 206; 20; 71; 26; 255; 183; 182; 184; 15; 186; 32; 219; - 161; 31; 81; 119; 182; 195; 50; 183; 137; 45; 240; 153; 192; 81; 43; 169; - 241; 165; 156; 72; 173; 117; 56; 79; 34; 171; 50; 73; 47; 118; 252; 199; 27; - 60; 76; 47; 247; 237; 192; 122; 232; 149; 168; 154; 170; 85; 107; 95; 129; - 0; 10; 173; 77; 39; 128; 54; 192; 238; 115; 238; 246; 19; 237; 121; 177; 11; - 17; 105; 109; 82; 198; 165; 12; 134; 3; 134; 195; 40; 137; 228; 245; 89; - 112; 253; 70; 20; 42; 114; 25; 136; 207; 168; 233; 159; 149; 208; 156; 169; - 117; 132; 80; 149; 169; 208; 197; 156; 176; 32; 51; 23; 172; 110; 149; 16; - 27; 51; 4; 207; 142; 98; 188; 221; 208; 169; 24; 177; 188; 152; 43; 128; - 180; 8; 52; 158; 68; 238; 4; 177; 166; 184; 38; 146; 8; 135; 93; 145; 199; - 69; 154; 52; 95; 104; 241; 204; 116; 92; 248; 172; 65; 155; 81; 82; 38; 8; - 129; 49; 115; 182; 71; 177; 173; 17; 237; 42; 201; 153; 15; 180; 236; 52; - 13; 215; 71; 122; 245; 164; 67; 204; 203; 196; 160; 96; 169; 190; 119; 54; - 202; 102; 92; 119; 237; 245; 248; 47; 117; 161; 122; 161; 192; 253; 1; 14; - 2; 217; 222; 17; 4; 231; 239; 202; 9; 120; 14; 137; 108; 140; 14; 227; 109; - 41; 40; 135; 201; 177; 174; 146; 163; 210; 92; 76; 31; 83; 113; 87; 209; 99; - 66; 25; 183; 147; 234; 59; 176; 149; 31; 71; 211; 171; 19; 51; 212; 215; 82; - 5; 123; 63; 126; 225; 226; 112; 147; 189; 236; 91; 14; 178; 29; 15; 18; 123; - 122; 45; 80; 134; 61; 251; 210; 23; 82; 147; 166; 80; 68; 216; 100; 181; 93; - 215; 14; 166; 200; 98; 169; 125; 170; 54; 135; 49; 91; 248; 208; 0; 253; - 132; 124; 119; 46; 20; 139; 151; 98; 192; 168; 5; 71; 100; 2; 244; 199; 18; - 230; 231; 27; 213; 122; 166; 51; 106; 221; 152; 150; 69; 123; 47; 193; 33; - 118; 253; 30; 60; 117; 166; 245; 113; 86; 68; 167; 180; 192; 105; 17; 60; - 178; 5; 116; 82; 31; 151; 205; 199; 168; 81; 72; 199; 123; 56; 168; 169; 82; - 74; 77; 75; 137; 129; 47; 131; 184; 246; 18; 62; 217; 173; 56; 214; 27; 182; - 72; 133; 77; 24; 205; 246; 201; 214; 219; 98; 28; 63; 31; 12; 145; 145; 0; - 31; 143; 46; 44; 225; 242; 191; 224; 79; 223; 164; 56; 116; 146; 238; 10; - 86; 198; 96; 250; 200; 239; 172; 63; 40; 56; 99; 61; 105; 143; 20; 64; 62; - 173; 63; 114; 154; 235; 148; 225; 86; 38; 5; 47; 78; 79; 24; 253; 203; 77; - 47; 139; 225; 130; 196; 177; 141; 111; 64; 228; 30; 25; 127; 44; 13; 99; - 158; 112; 246; 63; 188; 1; 131; 191; 79; 196; 115; 251; 122; 78; 142; 125; - 120; 165; 143; 245; 232; 91; 61; 216; 80; 151; 24; 26; 193; 22; 57; 104; - 133; 8; 208; 6; 229; 239; 164; 105; 45; 1; 189; 100; 246; 120; 19; 175; 57; - 198; 23; 21; 54; 49; 33; 148; 101; 109; 182; 211; 180; 144; 207; 172; 192; - 96; 46; 115; 97; 229; 157; 5; 167; 186; 176; 198; 112; 120; 31; 61; 3; 228; - 70; 217; 38; 205; 97; 65; 88; 162; 124; 210; 114; 160; 177; 242; 187; 4; - 199; 222; 251; 89; 60; 57; 191; 30; 184; 98; 226; 206; 187; 141; 233; 137; - 181; 41; 48; 11; 189; 238; 2; 95; 172; 13; 166; 86; 135; 54; 97; 87; 220; - 171; 235; 106; 47; 224; 23; 125; 15; 206; 76; 45; 63; 25; 127; 240; 220; - 236; 137; 119; 74; 35; 32; 232; 197; 133; 123; 159; 182; 101; 135; 178; 186; - 104; 209; 139; 103; 240; 111; 155; 15; 51; 29; 124; 231; 112; 58; 124; 142; - 175; 176; 81; 109; 95; 58; 82; 178; 120; 113; 182; 13; 210; 118; 96; 209; - 30; 213; 249; 52; 28; 7; 112; 17; 228; 179; 32; 74; 42; 246; 102; 227; 255; - 60; 53; 130; 214; 124; 182; 250; 135; 216; 91; 164; 225; 11; 110; 59; 64; - 186; 50; 106; 132; 42; 0; 96; 110; 233; 18; 16; 146; 217; 67; 9; 220; 59; - 134; 200; 56; 40; 243; 244; 172; 104; 96; 205; 101; 166; 211; 227; 215; 60; - 24; 45; 217; 66; 217; 37; 96; 51; 157; 56; 89; 87; 255; 216; 44; 43; 59; 37; - 240; 62; 48; 80; 70; 74; 207; 176; 107; 209; 171; 119; 197; 21; 65; 107; 73; - 250; 157; 65; 171; 244; 138; 174; 207; 130; 18; 40; 168; 6; 166; 184; 220; - 33; 200; 159; 157; 140; 70; 4; 96; 92; 203; 163; 42; 212; 110; 9; 64; 37; - 156; 47; 238; 18; 76; 77; 91; 18; 171; 29; 163; 148; 129; 208; 195; 11; 186; - 49; 119; 190; 250; 0; 141; 154; 137; 24; 158; 98; 126; 96; 3; 130; 127; 217; - 243; 67; 55; 2; 204; 178; 139; 103; 111; 108; 191; 13; 132; 93; 139; 225; - 159; 48; 13; 56; 110; 112; 199; 101; 225; 185; 166; 45; 176; 110; 171; 32; - 174; 125; 153; 186; 187; 87; 221; 150; 193; 42; 35; 118; 66; 58; 250; 132; - 112; 138; 44; 67; 66; 75; 69; 229; 185; 223; 227; 25; 138; 137; 93; 228; 88; - 156; 33; 0; 159; 190; 209; 235; 109; 161; 206; 119; 241; 31; 203; 126; 68; - 219; 114; 193; 248; 59; 189; 45; 40; 198; 31; 196; 207; 95; 254; 21; 170; - 117; 192; 255; 172; 128; 249; 169; 225; 36; 232; 201; 112; 7; 253; 181; 181; - 69; 154; 217; 97; 207; 36; 121; 58; 27; 233; 132; 9; 134; 137; 62; 62; 48; - 25; 9; 48; 231; 30; 11; 80; 65; 253; 100; 242; 57; 156; 226; 231; 219; 23; - 52; 173; 167; 156; 19; 156; 43; 106; 55; 148; 189; 169; 123; 89; 147; 142; - 27; 233; 160; 64; 152; 136; 104; 52; 215; 18; 23; 225; 123; 9; 254; 171; 74; - 155; 209; 41; 25; 224; 223; 225; 252; 109; 164; 255; 241; 166; 44; 148; 8; - 201; 195; 78; 241; 53; 44; 39; 33; 198; 101; 221; 147; 49; 206; 248; 137; - 43; 231; 187; 192; 37; 161; 86; 51; 16; 77; 131; 254; 28; 46; 61; 169; 25; - 4; 114; 226; 156; 177; 10; 128; 249; 34; 203; 248; 158; 62; 138; 54; 90; 96; - 21; 71; 80; 165; 34; 192; 233; 227; 143; 36; 36; 95; 176; 72; 61; 85; 229; - 38; 118; 100; 205; 22; 244; 19; 172; 253; 110; 154; 221; 159; 2; 66; 65; 73; - 165; 52; 190; 206; 18; 185; 123; 243; 189; 135; 185; 100; 15; 100; 180; 202; - 152; 133; 211; 164; 113; 65; 140; 76; 201; 153; 170; 88; 39; 250; 7; 184; 0; - 176; 111; 111; 0; 35; 146; 83; 218; 173; 221; 145; 210; 251; 171; 209; 75; - 87; 250; 20; 130; 80; 75; 254; 214; 62; 21; 105; 2; 194; 196; 119; 29; 81; - 57; 103; 90; 166; 148; 175; 20; 44; 70; 38; 222; 203; 75; 167; 171; 111; - 236; 96; 249; 34; 214; 3; 208; 83; 187; 21; 26; 70; 101; 201; 243; 188; 136; - 40; 16; 178; 90; 58; 104; 108; 117; 118; 197; 39; 71; 180; 108; 200; 164; - 88; 119; 58; 118; 80; 174; 147; 246; 17; 129; 84; 166; 84; 253; 29; 223; 33; - 174; 29; 101; 94; 17; 243; 144; 140; 36; 18; 148; 244; 231; 141; 95; 209; - 159; 93; 127; 114; 99; 109; 211; 8; 20; 3; 51; 181; 199; 215; 239; 154; 55; - 106; 75; 226; 174; 204; 197; 143; 225; 169; 211; 190; 143; 79; 145; 53; 47; - 51; 30; 82; 215; 238; 42; 77; 36; 63; 21; 150; 46; 67; 40; 144; 58; 142; - 212; 22; 156; 46; 119; 186; 100; 225; 216; 152; 235; 71; 250; 135; 193; 59; - 12; 194; 134; 234; 21; 1; 71; 109; 37; 209; 70; 108; 203; 183; 138; 153; - 136; 1; 102; 58; 181; 50; 120; 215; 3; 186; 111; 144; 206; 129; 13; 69; 2; - 57; 69; 216; 42; 77; 174; 248; 29; 45; 219; 232; 142; 5; 24; 112; 30; 193; - 210; 199; 95; 153; 179; 170; 121; 202; 204; 36; 35; 109; 177; 83; 181; 224; - 202; 178; 102; 77; 38; 35; 118; 101; 202; 235; 51; 237; 186; 125; 200; 74; - 210; 240; 214; 190; 14; 3; 16; 85; 99; 247; 120; 127; 136; 42; 79; 45; 1; - 92; 231; 185; 35; 42; 234; 242; 225; 202; 81; 70; 151; 12; 202; 112; 93; - 103; 115; 50; 182; 47; 245; 3; 68; 134; 11; 37; 167; 11; 33; 100; 156; 2; - 253; 24; 13; 187; 2; 143; 41; 137; 33; 20; 45; 188; 150; 14; 37; 139; 230; - 248; 71; 131; 201; 113; 45; 3; 232; 47; 159; 123; 156; 109; 248; 134; 147; - 88; 99; 221; 164; 133; 58; 225; 118; 145; 105; 97; 87; 125; 170; 78; 149; - 17; 81; 46; 251; 189; 96; 251; 87; 27; 194; 50; 128; 7; 158; 49; 205; 35; - 120; 216; 197; 117; 119; 137; 193; 207; 196; 239; 247; 179; 10; 154; 18; - 251; 84; 72; 113; 195; 56; 114; 65; 157; 196; 18; 105; 55; 232; 255; 51; - 181; 80; 9; 209; 107; 29; 142; 29; 28; 134; 33; 16; 229; 2; 19; 56; 216; 34; - 240; 180; 202; 145; 99; 12; 32; 9; 37; 66; 149; 121; 131; 23; 160; 179; 9; - 63; 238; 213; 170; 143; 208; 109; 98; 159; 20; 112; 235; 238; 188; 0; 186; - 201; 68; 164; 160; 70; 178; 33; 20; 199; 167; 36; 140; 142; 58; 164; 74; - 245; 94; 240; 216; 64; 245; 193; 4; 220; 185; 62; 11; 12; 94; 186; 173; 227; - 156; 164; 72; 68; 80; 181; 42; 236; 93; 15; 111; 38; 39; 210; 46; 36; 8; - 213; 94; 65; 238; 36; 152; 21; 212; 104; 148; 124; 236; 123; 128; 63; 226; - 33; 181; 225; 186; 147; 112; 250; 58; 93; 28; 99; 172; 7; 220; 108; 140; - 223; 249; 113; 81; 97; 88; 176; 226; 115; 157; 216; 121; 160; 114; 93; 225; - 234; 180; 206; 244; 1; 115; 65; 44; 114; 214; 89; 231; 9; 100; 155; 114; - 191; 114; 207; 225; 116; 166; 105; 229; 33; 60; 235; 36; 10; 188; 35; 203; - 186; 78; 210; 103; 1; 57; 28; 63; 53; 186; 59; 142; 245; 39; 97; 67; 106; - 191; 77; 118; 71; 76; 80; 38; 86; 110; 229; 196; 187; 175; 93; 164; 225; - 170; 230; 46; 219; 7; 11; 18; 242; 162; 75; 5; 187; 215; 183; 137; 5; 177; - 174; 206; 185; 226; 190; 237; 192; 243; 200; 186; 232; 63; 105; 203; 18; - 113; 118; 64; 189; 76; 118; 129; 197; 41; 192; 60; 96; 11; 97; 93; 177; 92; - 130; 227; 136; 89; 141; 173; 240; 220; 19; 20; 182; 43; 135; 50; 24; 116; - 108; 236; 142; 123; 176; 124; 210; 44; 120; 64; 202; 228; 189; 103; 233; - 251; 35; 195; 249; 218; 158; 30; 212; 138; 74; 211; 155; 178; 77; 222; 110; - 98; 151; 4; 129; 114; 115; 107; 56; 252; 112; 229; 254; 50; 199; 140; 58; - 218; 65; 1; 139; 218; 89; 131; 150; 200; 10; 253; 95; 151; 85; 168; 50; 177; - 161; 9; 232; 110; 58; 134; 253; 252; 49; 187; 68; 148; 197; 72; 78; 62; 10; - 105; 227; 47; 37; 250; 136; 208; 103; 200; 41; 220; 46; 41; 115; 209; 56; - 30; 189; 19; 181; 73; 97; 105; 216; 76; 43; 211; 183; 170; 216; 129; 215; - 55; 89; 229; 148; 43; 18; 174; 39; 33; 203; 11; 176; 153; 64; 177; 207; 111; - 232; 65; 33; 197; 250; 29; 207; 181; 63; 34; 80; 68; 85; 111; 49; 37; 92; - 50; 172; 119; 145; 101; 215; 152; 11; 3; 189; 164; 136; 79; 182; 24; 208; - 30; 176; 166; 2; 184; 161; 223; 48; 54; 213; 59; 173; 66; 71; 135; 15; 136; - 212; 164; 197; 238; 108; 13; 249; 10; 217; 197; 205; 55; 122; 36; 106; 116; - 246; 154; 123; 43; 189; 184; 49; 213; 81; 91; 252; 55; 53; 9; 5; 80; 109; - 84; 147; 197; 37; 207; 47; 35; 73; 15; 180; 43; 20; 101; 163; 32; 237; 65; - 217; 120; 82; 216; 204; 110; 67; 120; 47; 210; 131; 174; 84; 34; 183; 205; - 191; 123; 46; 208; 34; 197; 226; 228; 240; 191; 81; 51; 30; 104; 69; 79; 3; - 131; 157; 181; 100; 139; 251; 14; 162; 31; 242; 113; 139; 47; 228; 80; 101; - 186; 149; 148; 36; 105; 43; 71; 213; 69; 142; 249; 158; 83; 117; 82; 32; - 166; 161; 182; 123; 110; 131; 142; 60; 65; 215; 33; 79; 170; 178; 92; 143; - 232; 85; 209; 86; 111; 225; 91; 52; 166; 75; 93; 226; 45; 63; 116; 174; 28; - 150; 216; 116; 208; 237; 99; 28; 238; 245; 24; 109; 248; 41; 237; 244; 231; - 91; 197; 189; 151; 8; 177; 58; 102; 121; 210; 186; 76; 205; 31; 215; 160; - 36; 144; 209; 128; 248; 138; 40; 251; 10; 194; 37; 197; 25; 100; 58; 95; 75; - 151; 163; 177; 51; 114; 0; 226; 239; 188; 127; 125; 1; 40; 107; 38; 106; 30; - 239; 250; 22; 159; 115; 213; 196; 104; 108; 134; 44; 118; 3; 27; 188; 47; - 138; 246; 141; 90; 183; 135; 94; 67; 117; 89; 148; 144; 194; 243; 197; 93; - 124; 205; 171; 5; 145; 42; 154; 162; 129; 199; 88; 48; 28; 66; 54; 29; 198; - 128; 215; 212; 216; 220; 150; 209; 156; 79; 104; 55; 123; 106; 216; 151; - 146; 25; 99; 122; 209; 26; 36; 88; 208; 208; 23; 12; 28; 92; 173; 156; 2; - 186; 7; 3; 122; 56; 132; 208; 205; 124; 23; 4; 38; 109; 44; 66; 166; 220; - 189; 64; 130; 148; 80; 61; 21; 174; 119; 198; 104; 251; 180; 193; 192; 169; - 83; 207; 208; 97; 237; 208; 139; 66; 147; 204; 96; 103; 24; 132; 12; 155; - 153; 42; 179; 26; 122; 0; 174; 205; 24; 218; 11; 98; 134; 236; 141; 168; 68; - 202; 144; 129; 132; 202; 147; 53; 167; 154; 132; 94; 154; 24; 19; 146; 205; - 250; 216; 101; 53; 195; 216; 212; 209; 187; 253; 83; 91; 84; 82; 140; 230; - 99; 45; 218; 8; 131; 57; 39; 19; 212; 94; 67; 40; 141; 195; 66; 201; 204; - 120; 50; 96; 243; 80; 189; 239; 3; 218; 121; 26; 171; 7; 187; 85; 51; 140; - 190; 174; 151; 149; 38; 83; 36; 112; 10; 76; 14; 161; 185; 222; 27; 125; - 213; 102; 88; 162; 15; 247; 218; 39; 205; 181; 217; 185; 255; 253; 51; 44; - 73; 69; 41; 44; 87; 190; 48; 205; 214; 69; 199; 127; 199; 251; 174; 186; + 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 231; 32; 114; + 124; 109; 148; 95; 82; 68; 84; 227; 241; 178; 176; 54; 70; 15; 174; 146; + 232; 112; 157; 110; 121; 177; 173; 55; 169; 95; 192; 222; 3; 21; 85; 55; + 198; 28; 39; 28; 109; 20; 79; 202; 164; 196; 136; 37; 70; 57; 252; 90; 229; + 254; 41; 17; 105; 245; 114; 132; 77; 120; 159; 148; 21; 73; 0; 173; 175; 16; + 229; 137; 189; 14; 134; 185; 115; 192; 8; 31; 77; 157; 175; 0; 45; 139; 110; + 113; 7; 20; 151; 133; 143; 246; 133; 214; 112; 62; 145; 64; 215; 5; 57; 16; + 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; 138; 143; 104; 52; 132; 193; + 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; 59; 140; 245; 198; 147; 188; + 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; 66; 61; 100; 152; 72; 11; 39; + 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; 122; 135; 5; 18; 201; 171; + 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; 67; 221; 203; 125; 27; 90; + 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; 180; 66; 96; 165; 153; 138; + 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; 110; 177; 107; 35; 158; 224; + 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; 60; 147; 252; 231; 36; 146; + 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; 225; 101; 154; 166; 90; 46; + 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; 179; 168; 250; 67; 120; 207; + 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; 132; 160; 15; 80; 115; 11; 165; + 62; 177; 245; 26; 112; 101; 210; 252; 164; 232; 31; 97; 86; 125; 186; 193; + 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; 243; 49; 129; 98; 218; 91; 85; + 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; 37; 175; 138; 75; 134; 232; + 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; 244; 248; 128; 154; 27; 78; + 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; 98; 218; 53; 28; 34; 35; 148; + 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; 180; 185; 18; 175; 38; 40; + 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; 96; 86; 113; 137; 126; 50; + 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; 69; 116; 76; 63; 147; 39; + 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; 125; 244; 198; 101; 103; + 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; 33; 3; 145; 14; 104; 9; + 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; 69; 57; 158; 110; 148; + 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; 12; 157; 127; 186; 214; + 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; 20; 0; 213; 135; 160; + 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; 126; 74; 21; 51; 187; + 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; 80; 141; 68; 236; 191; + 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; 41; 133; 130; 42; 129; + 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; 45; 167; 189; 27; 11; + 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; 164; 140; 125; 123; 182; + 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; 83; 69; 32; 231; 92; 8; + 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; 21; 119; 235; 238; 12; 58; + 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; 218; 104; 182; 101; 128; + 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; 2; 103; 50; 172; 133; 1; + 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; 162; 228; 83; 227; 97; + 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; 111; 186; 167; 35; + 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; 157; 224; 23; 83; + 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; 210; 192; 157; + 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; 126; 146; 60; 40; + 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; 154; 164; 62; 5; 71; + 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; 144; 15; 106; 28; 187; + 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; 88; 181; 225; 128; 118; + 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; 14; 50; 161; 36; 144; + 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; 226; 119; 3; 179; 108; + 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; 97; 96; 231; 21; 9; 26; + 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; 139; 120; 113; 163; 184; + 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; 92; 124; 144; 38; 243; + 45; 62; 85; 202; 81; 200; 126; 179; 120; 72; 166; 203; 132; 18; 167; 231; + 209; 136; 50; 25; 228; 181; 230; 131; 136; 154; 90; 236; 16; 242; 76; 246; + 33; 144; 45; 165; 4; 45; 50; 156; 191; 198; 117; 51; 159; 193; 185; 9; 11; + 210; 66; 67; 58; 122; 88; 97; 254; 100; 170; 248; 28; 59; 20; 171; 202; 138; + 150; 125; 124; 134; 159; 41; 39; 9; 39; 142; 37; 84; 95; 117; 9; 24; 234; + 75; 211; 167; 208; 225; 38; 65; 55; 163; 70; 181; 33; 67; 131; 136; 162; 88; + 248; 79; 169; 60; 237; 19; 83; 86; 212; 14; 206; 250; 52; 191; 181; 207; 61; + 92; 245; 113; 179; 234; 201; 165; 60; 101; 10; 143; 33; 133; 209; 69; 122; + 10; 73; 53; 147; 4; 70; 120; 55; 21; 154; 246; 225; 49; 204; 9; 234; 96; 0; + 101; 233; 110; 248; 119; 21; 4; 126; 243; 103; 91; 206; 150; 164; 178; 102; + 150; 151; 86; 189; 216; 146; 84; 255; 208; 44; 89; 74; 41; 236; 60; 80; 178; + 172; 19; 8; 101; 67; 105; 86; 152; 7; 98; 38; 12; 219; 24; 184; 74; 53; 110; + 96; 217; 49; 92; 93; 199; 205; 168; 0; 79; 250; 130; 9; 212; 226; 83; 70; + 205; 43; 225; 23; 157; 182; 171; 29; 235; 249; 114; 86; 252; 83; 232; 175; + 53; 181; 112; 186; 109; 214; 150; 39; 117; 15; 172; 71; 117; 114; 17; 148; + 23; 53; 165; 50; 55; 132; 100; 223; 166; 68; 166; 211; 221; 191; 15; 136; + 89; 101; 59; 112; 165; 26; 58; 173; 64; 37; 133; 203; 104; 100; 76; 142; + 247; 179; 0; 9; 27; 101; 157; 103; 159; 27; 133; 10; 242; 66; 51; 3; 97; + 203; 8; 225; 163; 48; 139; 232; 127; 245; 1; 214; 20; 215; 45; 237; 202; 58; + 31; 55; 49; 173; 22; 200; 190; 15; 40; 237; 227; 239; 230; 216; 91; 89; 217; + 82; 245; 35; 198; 246; 114; 23; 231; 15; 60; 41; 30; 5; 11; 3; 20; 67; 173; + 188; 240; 251; 94; 0; 96; 213; 94; 12; 135; 209; 46; 15; 183; 142; 160; 230; + 132; 208; 51; 144; 31; 32; 112; 102; 123; 206; 225; 90; 58; 76; 149; 250; + 184; 220; 52; 164; 56; 65; 11; 132; 150; 108; 125; 246; 12; 135; 44; 232; + 123; 41; 116; 133; 56; 222; 90; 165; 98; 114; 178; 77; 129; 124; 221; 160; + 61; 201; 228; 117; 248; 186; 77; 41; 185; 113; 167; 130; 50; 185; 96; 196; + 198; 244; 183; 63; 214; 128; 129; 193; 102; 234; 61; 199; 233; 109; 242; + 248; 77; 160; 213; 4; 137; 71; 211; 66; 1; 177; 74; 174; 251; 250; 152; 9; + 93; 85; 99; 172; 200; 246; 4; 177; 144; 47; 65; 74; 172; 90; 8; 41; 201; 58; + 107; 50; 79; 198; 224; 225; 99; 230; 130; 178; 81; 85; 131; 75; 26; 74; 245; + 53; 107; 71; 194; 104; 159; 24; 254; 163; 157; 27; 52; 81; 127; 189; 10; 13; + 58; 96; 70; 174; 211; 225; 50; 201; 137; 128; 99; 189; 152; 135; 57; 145; + 37; 223; 53; 2; 186; 116; 210; 92; 20; 28; 67; 215; 243; 117; 100; 56; 232; + 50; 239; 217; 229; 106; 175; 139; 91; 54; 30; 104; 91; 56; 182; 56; 82; 130; + 225; 101; 125; 22; 193; 41; 73; 35; 232; 173; 119; 160; 171; 236; 77; 152; + 157; 56; 235; 25; 173; 119; 63; 56; 148; 215; 84; 41; 126; 107; 236; 199; + 122; 58; 124; 235; 58; 123; 199; 89; 207; 159; 9; 29; 194; 92; 20; 72; 229; + 215; 40; 204; 146; 193; 53; 69; 1; 126; 36; 72; 229; 193; 231; 128; 238; + 115; 41; 59; 116; 40; 95; 74; 98; 207; 92; 34; 37; 215; 173; 211; 93; 44; + 21; 178; 129; 51; 26; 145; 125; 248; 8; 91; 173; 159; 179; 216; 59; 254; + 153; 71; 107; 96; 5; 111; 98; 169; 123; 23; 146; 158; 254; 159; 225; 202; + 229; 13; 29; 231; 174; 152; 68; 16; 131; 45; 148; 174; 244; 63; 200; 58; 83; + 88; 46; 225; 77; 113; 131; 100; 27; 249; 73; 49; 67; 91; 98; 191; 44; 90; + 101; 220; 181; 173; 179; 39; 40; 99; 18; 132; 250; 135; 216; 248; 73; 171; + 145; 94; 137; 96; 24; 108; 248; 12; 237; 242; 236; 233; 212; 223; 53; 7; 18; + 6; 109; 180; 231; 107; 185; 4; 152; 160; 157; 188; 107; 194; 109; 217; 47; + 230; 226; 115; 94; 81; 170; 73; 84; 99; 91; 237; 58; 130; 198; 11; 159; 196; + 101; 168; 196; 209; 66; 91; 233; 31; 12; 133; 185; 21; 211; 3; 111; 109; + 215; 48; 29; 156; 47; 99; 14; 221; 204; 46; 21; 49; 137; 118; 150; 182; 208; + 81; 88; 122; 99; 168; 107; 183; 223; 82; 57; 239; 14; 160; 73; 125; 211; + 109; 199; 228; 6; 33; 23; 68; 68; 108; 105; 127; 141; 146; 128; 214; 83; + 251; 38; 63; 77; 105; 164; 158; 115; 180; 176; 75; 134; 46; 17; 151; 198; + 16; 222; 95; 190; 125; 39; 196; 147; 100; 162; 126; 173; 25; 173; 79; 93; + 38; 144; 69; 48; 70; 200; 223; 0; 14; 9; 254; 102; 237; 171; 28; 230; 37; 5; + 200; 88; 131; 160; 42; 166; 12; 71; 66; 32; 122; 227; 74; 61; 106; 220; 237; + 17; 59; 166; 211; 100; 116; 239; 6; 8; 85; 175; 155; 191; 3; 4; 102; 88; + 204; 40; 225; 19; 63; 126; 116; 89; 180; 236; 115; 88; 111; 245; 104; 18; + 204; 237; 61; 182; 160; 44; 226; 134; 69; 99; 120; 109; 86; 52; 8; 193; 156; + 159; 164; 55; 22; 81; 196; 155; 168; 213; 86; 142; 188; 219; 210; 127; 127; + 15; 236; 181; 28; 217; 53; 204; 94; 202; 91; 151; 51; 208; 47; 90; 198; 133; + 66; 5; 161; 195; 103; 22; 243; 42; 17; 100; 108; 88; 238; 26; 115; 64; 226; + 10; 104; 42; 178; 147; 71; 243; 165; 251; 20; 212; 247; 133; 105; 22; 70; + 215; 60; 87; 0; 200; 201; 132; 94; 62; 89; 30; 19; 97; 123; 182; 242; 195; + 47; 108; 82; 252; 131; 234; 156; 130; 20; 194; 149; 221; 151; 132; 123; 67; + 255; 167; 181; 78; 170; 48; 78; 116; 108; 139; 232; 133; 60; 97; 93; 12; + 158; 115; 129; 117; 95; 30; 199; 217; 47; 184; 236; 113; 78; 47; 11; 231; + 33; 227; 119; 164; 64; 185; 221; 86; 230; 128; 79; 29; 206; 206; 86; 101; + 191; 126; 123; 93; 83; 196; 59; 252; 5; 221; 222; 175; 82; 174; 179; 184; + 36; 207; 48; 59; 237; 140; 99; 149; 52; 149; 129; 190; 169; 131; 188; 164; + 51; 4; 31; 101; 92; 71; 103; 55; 55; 217; 173; 209; 64; 253; 153; 186; 47; + 39; 208; 244; 150; 111; 22; 7; 179; 174; 59; 240; 21; 82; 240; 99; 67; 153; + 249; 24; 59; 108; 165; 190; 31; 144; 101; 36; 20; 203; 149; 64; 99; 53; 85; + 193; 22; 64; 20; 18; 239; 96; 188; 16; 137; 12; 20; 56; 158; 140; 124; 144; + 48; 87; 144; 245; 107; 138; 91; 65; 225; 241; 120; 167; 15; 126; 167; 195; + 186; 247; 159; 64; 6; 80; 154; 162; 154; 184; 215; 82; 111; 86; 90; 99; 122; + 246; 28; 82; 2; 148; 82; 157; 10; 11; 238; 63; 81; 102; 90; 223; 15; 92; + 231; 152; 143; 206; 7; 225; 191; 136; 134; 97; 212; 237; 44; 56; 113; 126; + 10; 160; 63; 228; 94; 47; 119; 32; 103; 20; 177; 206; 154; 7; 150; 177; 148; + 248; 232; 74; 130; 172; 0; 77; 34; 248; 74; 196; 108; 205; 247; 217; 83; 23; + 0; 52; 219; 61; 150; 45; 35; 105; 60; 88; 56; 151; 180; 218; 135; 222; 29; + 133; 242; 145; 160; 249; 209; 215; 170; 182; 237; 72; 160; 47; 254; 181; 18; + 77; 227; 252; 150; 196; 251; 240; 113; 237; 91; 243; 173; 107; 130; 185; + 115; 97; 197; 40; 255; 97; 114; 4; 210; 111; 32; 177; 111; 249; 118; 155; + 116; 146; 30; 111; 173; 38; 124; 43; 223; 19; 137; 75; 80; 35; 211; 102; 75; + 195; 139; 28; 117; 192; 157; 64; 140; 184; 199; 150; 7; 194; 147; 126; 111; + 5; 174; 166; 174; 4; 246; 90; 31; 153; 156; 228; 190; 241; 81; 35; 193; 102; + 107; 255; 238; 181; 8; 168; 97; 81; 33; 224; 1; 15; 193; 206; 15; 68; 30; + 254; 73; 166; 88; 77; 100; 126; 119; 173; 49; 162; 174; 252; 33; 210; 208; + 127; 136; 90; 28; 68; 2; 243; 17; 197; 131; 113; 170; 1; 73; 69; 78; 36; + 196; 157; 210; 242; 61; 10; 222; 216; 147; 116; 14; 2; 43; 77; 33; 12; 130; + 126; 6; 200; 108; 10; 185; 234; 111; 22; 121; 55; 65; 240; 248; 26; 140; 84; + 183; 177; 8; 180; 153; 98; 36; 124; 122; 15; 206; 57; 217; 6; 30; 249; 176; + 96; 247; 19; 18; 109; 114; 123; 136; 187; 65; 216; 73; 124; 86; 108; 128; + 103; 146; 106; 30; 121; 202; 204; 4; 109; 6; 75; 57; 204; 227; 69; 86; 159; + 166; 210; 140; 120; 160; 134; 182; 149; 92; 210; 247; 57; 170; 224; 128; + 217; 151; 28; 181; 198; 82; 66; 56; 208; 53; 170; 85; 205; 7; 147; 244; 67; + 125; 98; 195; 138; 183; 207; 54; 189; 86; 84; 169; 20; 13; 193; 25; 197; 42; + 144; 250; 181; 148; 180; 116; 244; 234; 90; 122; 248; 169; 130; 131; 175; + 230; 148; 224; 155; 135; 177; 109; 234; 13; 171; 229; 68; 115; 84; 191; 102; + 170; 9; 67; 27; 143; 136; 88; 18; 218; 47; 75; 86; 253; 179; 210; 135; 94; + 221; 177; 131; 84; 136; 120; 44; 91; 122; 121; 168; 214; 116; 235; 186; 21; + 50; 23; 196; 250; 241; 92; 245; 126; 197; 5; 139; 60; 90; 31; 0; 41; 251; + 204; 234; 82; 135; 204; 215; 10; 207; 8; 52; 121; 98; 19; 21; 82; 148; 61; + 150; 25; 3; 23; 15; 235; 102; 148; 61; 136; 250; 178; 51; 168; 120; 60; 0; + 117; 167; 127; 58; 9; 190; 215; 22; 58; 230; 125; 16; 229; 207; 50; 243; + 154; 220; 255; 119; 163; 127; 103; 11; 68; 24; 191; 213; 112; 3; 20; 163; + 164; 25; 43; 37; 106; 134; 18; 169; 96; 68; 96; 233; 184; 222; 211; 120; + 119; 4; 216; 63; 127; 45; 94; 138; 191; 49; 30; 208; 103; 62; 101; 123; 194; + 6; 138; 3; 123; 243; 144; 105; 211; 213; 25; 217; 158; 242; 185; 78; 219; + 187; 174; 19; 82; 53; 145; 185; 76; 5; 234; 8; 199; 86; 14; 38; 114; 127; + 213; 222; 88; 119; 61; 65; 233; 173; 157; 231; 120; 125; 230; 41; 151; 213; + 249; 87; 242; 230; 167; 122; 227; 14; 145; 219; 89; 156; 3; 158; 187; 91; + 27; 161; 106; 139; 212; 15; 91; 38; 83; 109; 218; 136; 169; 191; 147; 49; + 130; 96; 137; 40; 126; 213; 97; 50; 201; 138; 215; 67; 129; 92; 58; 45; 148; + 242; 121; 233; 141; 200; 182; 37; 47; 218; 151; 105; 1; 242; 172; 234; 167; + 27; 37; 228; 180; 78; 239; 135; 79; 180; 9; 165; 125; 106; 188; 27; 171; + 144; 125; 254; 107; 1; 167; 131; 166; 204; 154; 109; 11; 197; 242; 77; 95; + 80; 144; 170; 53; 228; 204; 95; 13; 97; 107; 150; 255; 152; 97; 68; 13; 161; + 25; 151; 195; 179; 150; 244; 163; 7; 26; 50; 37; 78; 143; 24; 170; 206; 17; + 240; 27; 117; 167; 213; 152; 148; 125; 160; 216; 141; 80; 31; 22; 237; 25; + 202; 230; 220; 135; 214; 44; 10; 86; 77; 207; 100; 134; 196; 104; 53; 127; + 56; 58; 128; 34; 82; 233; 65; 135; 252; 83; 86; 89; 177; 218; 59; 72; 73; + 250; 52; 135; 20; 15; 120; 250; 224; 52; 5; 54; 112; 11; 111; 16; 189; 7; + 227; 227; 111; 119; 16; 34; 254; 160; 230; 221; 9; 193; 134; 50; 246; 128; + 218; 180; 10; 77; 207; 214; 224; 127; 48; 248; 69; 62; 72; 130; 164; 157; + 111; 174; 105; 82; 0; 5; 122; 135; 247; 156; 144; 82; 112; 28; 212; 152; 78; + 135; 226; 125; 238; 50; 96; 12; 126; 185; 233; 98; 195; 20; 138; 163; 96; + 106; 222; 220; 129; 87; 64; 168; 122; 170; 234; 213; 125; 33; 176; 30; 142; + 36; 208; 196; 183; 157; 82; 191; 116; 77; 225; 151; 118; 224; 84; 35; 86; + 60; 23; 155; 106; 30; 101; 73; 90; 121; 31; 194; 167; 127; 200; 14; 140; + 190; 185; 31; 223; 139; 130; 2; 10; 227; 248; 231; 186; 0; 108; 79; 108; + 173; 29; 153; 99; 73; 10; 246; 246; 93; 110; 138; 5; 7; 127; 246; 49; 219; + 196; 2; 235; 233; 43; 251; 188; 16; 137; 253; 37; 237; 180; 221; 92; 92; 31; + 19; 200; 70; 206; 155; 203; 160; 19; 28; 178; 51; 49; 142; 125; 8; 248; 146; + 6; 54; 247; 99; 113; 210; 55; 198; 220; 244; 99; 89; 234; 101; 32; 230; 164; + 37; 217; 96; 193; 90; 46; 247; 155; 101; 91; 140; 227; 94; 176; 185; 175; + 154; 199; 19; 26; 7; 78; 45; 157; 191; 10; 41; 51; 233; 109; 110; 238; 142; + 23; 151; 16; 174; 23; 171; 59; 28; 176; 183; 202; 199; 22; 178; 154; 28; + 204; 195; 187; 7; 116; 211; 101; 125; 213; 88; 74; 80; 80; 71; 116; 82; 144; + 41; 26; 19; 107; 96; 242; 9; 190; 70; 67; 116; 68; 125; 232; 64; 37; 43; + 181; 21; 212; 218; 72; 29; 62; 96; 59; 161; 24; 138; 58; 124; 247; 189; 205; + 47; 193; 40; 183; 78; 174; 145; 102; 124; 89; 76; 35; 126; 200; 180; 133; + 10; 61; 157; 136; 100; 231; 250; 74; 53; 12; 201; 226; 218; 29; 158; 106; + 12; 7; 30; 135; 10; 137; 137; 188; 75; 153; 181; 1; 51; 96; 66; 221; 91; 58; + 174; 107; 115; 60; 158; 213; 25; 226; 173; 97; 13; 100; 212; 133; 38; 15; + 48; 231; 62; 183; 214; 125; 158; 228; 85; 210; 245; 172; 30; 11; 97; 92; 17; + 22; 128; 202; 135; 225; 146; 93; 151; 153; 60; 194; 37; 145; 151; 98; 87; + 129; 19; 24; 117; 30; 132; 71; 121; 250; 67; 215; 70; 156; 99; 89; 250; 198; + 229; 116; 43; 5; 227; 29; 94; 6; 161; 48; 144; 184; 207; 162; 198; 71; 125; + 224; 214; 240; 142; 20; 208; 218; 63; 60; 111; 84; 145; 154; 116; 62; 157; + 87; 129; 187; 38; 16; 98; 236; 113; 128; 236; 201; 52; 141; 245; 140; 20; + 39; 240; 52; 121; 246; 146; 164; 70; 169; 10; 132; 246; 190; 132; 153; 70; + 84; 24; 97; 137; 42; 188; 161; 92; 212; 187; 93; 189; 30; 250; 242; 63; 109; + 117; 228; 154; 125; 47; 87; 226; 127; 72; 243; 136; 187; 69; 195; 86; 141; + 168; 96; 105; 109; 11; 209; 159; 185; 161; 174; 78; 173; 235; 143; 39; 102; + 57; 147; 140; 31; 104; 170; 177; 152; 12; 41; 32; 156; 148; 33; 140; 82; 60; + 157; 33; 145; 82; 17; 57; 123; 103; 156; 254; 2; 221; 4; 65; 42; 66; 36; 17; + 94; 191; 178; 114; 181; 58; 163; 152; 51; 12; 250; 161; 102; 182; 82; 250; + 1; 97; 203; 148; 213; 83; 175; 175; 0; 59; 134; 44; 184; 106; 9; 219; 6; 78; + 33; 129; 53; 79; 228; 12; 201; 182; 168; 33; 245; 42; 158; 64; 42; 193; 36; + 101; 129; 164; 252; 142; 164; 181; 101; 1; 118; 106; 132; 160; 116; 164; + 144; 241; 192; 124; 47; 205; 132; 249; 239; 18; 143; 43; 170; 88; 6; 41; 94; + 105; 184; 200; 254; 191; 217; 103; 27; 89; 250; 155; 180; 128; 28; 13; 47; + 49; 138; 236; 243; 171; 94; 81; 121; 89; 136; 28; 240; 158; 192; 51; 112; + 114; 203; 123; 143; 202; 199; 46; 224; 61; 93; 181; 24; 159; 113; 179; 185; + 153; 30; 100; 140; 161; 250; 229; 101; 228; 237; 5; 159; 194; 54; 17; 8; 97; + 139; 18; 48; 112; 134; 79; 155; 72; 239; 146; 235; 58; 45; 16; 50; 210; 97; + 168; 22; 97; 180; 83; 98; 225; 36; 170; 11; 25; 231; 171; 126; 61; 191; 190; + 108; 73; 186; 251; 245; 73; 212; 207; 91; 138; 16; 154; 148; 48; 235; 115; + 100; 188; 112; 221; 64; 220; 28; 13; 124; 48; 193; 148; 194; 146; 116; 110; + 250; 203; 109; 168; 4; 86; 46; 87; 156; 30; 140; 98; 93; 21; 65; 71; 136; + 197; 172; 134; 77; 138; 235; 99; 87; 81; 246; 82; 163; 145; 91; 81; 103; + 136; 194; 166; 161; 6; 182; 100; 23; 124; 212; 209; 136; 114; 81; 139; 65; + 224; 64; 17; 84; 114; 209; 246; 172; 24; 96; 26; 3; 159; 198; 66; 39; 254; + 137; 158; 152; 32; 127; 204; 45; 58; 253; 119; 151; 73; 146; 216; 79; 165; + 44; 124; 133; 50; 160; 227; 7; 210; 100; 216; 121; 162; 41; 126; 166; 12; + 29; 237; 3; 4; 46; 236; 234; 133; 139; 39; 116; 22; 223; 43; 203; 122; 7; + 220; 33; 86; 90; 244; 203; 97; 22; 76; 10; 100; 211; 149; 5; 247; 80; 153; + 11; 115; 82; 197; 78; 135; 53; 45; 75; 201; 141; 111; 36; 152; 207; 200; + 230; 197; 206; 53; 192; 22; 250; 70; 203; 247; 204; 61; 48; 8; 67; 69; 215; + 91; 194; 76; 178; 40; 149; 209; 154; 127; 129; 193; 53; 99; 101; 84; 107; + 127; 54; 114; 192; 79; 110; 182; 184; 102; 131; 173; 128; 115; 0; 120; 58; + 19; 42; 121; 231; 21; 33; 147; 196; 133; 201; 221; 205; 189; 162; 137; 76; + 198; 98; 215; 163; 173; 168; 61; 30; 157; 44; 248; 103; 48; 18; 219; 183; + 91; 190; 98; 202; 198; 103; 244; 97; 9; 238; 82; 25; 33; 214; 33; 236; 4; + 112; 71; 213; 155; 119; 96; 35; 24; 210; 224; 240; 88; 109; 202; 13; 116; + 11; 175; 240; 211; 245; 11; 183; 80; 247; 113; 46; 227; 138; 244; 234; 79; + 52; 189; 91; 165; 211; 78; 232; 96; 237; 209; 80; 63; 155; 72; 237; 0; 229; + 26; 38; 237; 42; 199; 6; 57; 247; 0; 225; 136; 217; 143; 182; 154; 151; 1; + 54; 243; 154; 5; 233; 245; 71; 109; 43; 191; 120; 220; 83; 14; 122; 135; + 113; 121; 191; 41; 8; 185; 49; 230; 23; 109; 99; 68; 68; 94; 147; 104; 39; + 24; 46; 197; 5; 77; 245; 74; 74; 90; 154; 45; 99; 39; 206; 96; 178; 84; 81; + 240; 31; 209; 112; 82; 249; 114; 142; 195; 109; 216; 56; 193; 124; 38; 13; + 205; 31; 96; 205; 12; 233; 41; 100; 145; 103; 43; 219; 255; 234; 135; 209; + 133; 130; 169; 100; 168; 208; 216; 187; 251; 180; 165; 247; 99; 38; 2; 127; + 242; 88; 182; 130; 226; 156; 217; 34; 43; 188; 59; 88; 10; 60; 88; 82; 201; + 23; 185; 243; 198; 228; 15; 184; 249; 63; 101; 12; 60; 223; 188; 215; 167; + 13; 155; 14; 214; 84; 171; 182; 238; 160; 67; 135; 84; 74; 109; 164; 102; + 105; 57; 186; 179; 43; 172; 138; 161; 17; 248; 107; 178; 40; 86; 91; 104; + 228; 102; 146; 155; 146; 157; 2; 119; 164; 112; 232; 95; 135; 87; 35; 50; + 198; 58; 143; 203; 251; 245; 236; 244; 212; 217; 32; 182; 43; 56; 147; 132; + 238; 141; 220; 159; 121; 76; 161; 234; 197; 80; 60; 251; 242; 214; 139; 220; + 14; 221; 160; 183; 199; 156; 167; 58; 198; 84; 26; 159; 141; 44; 43; 3; 11; + 174; 251; 103; 41; 96; 7; 225; 156; 111; 42; 194; 225; 205; 177; 84; 16; + 173; 223; 50; 235; 72; 2; 233; 168; 196; 234; 192; 205; 172; 51; 123; 62; + 95; 62; 150; 121; 252; 19; 71; 54; 114; 181; 224; 32; 53; 6; 147; 150; 19; + 254; 3; 234; 136; 124; 207; 127; 67; 188; 89; 201; 211; 11; 196; 212; 247; + 217; 222; 147; 248; 209; 84; 145; 105; 38; 117; 178; 180; 117; 92; 93; 49; + 165; 218; 54; 2; 45; 132; 203; 204; 142; 238; 95; 52; 163; 200; 240; 34; + 237; 219; 57; 125; 97; 90; 151; 115; 16; 218; 117; 99; 249; 77; 2; 228; 112; + 200; 48; 24; 26; 37; 211; 120; 28; 217; 140; 101; 72; 25; 43; 144; 138; 67; + 183; 41; 11; 177; 24; 126; 70; 62; 67; 244; 146; 243; 55; 111; 24; 107; 86; + 31; 161; 185; 25; 14; 98; 214; 209; 31; 138; 183; 15; 34; 77; 201; 129; 163; + 88; 66; 42; 54; 47; 235; 107; 43; 19; 217; 113; 144; 71; 130; 65; 40; 173; + 233; 38; 15; 93; 146; 236; 189; 201; 30; 185; 234; 222; 242; 138; 244; 200; + 91; 230; 75; 40; 112; 110; 163; 235; 127; 72; 120; 52; 206; 216; 29; 0; 19; + 63; 95; 137; 196; 48; 75; 45; 177; 79; 147; 43; 10; 127; 57; 77; 36; 108; 5; + 52; 98; 194; 87; 162; 251; 80; 29; 139; 103; 176; 222; 58; 130; 212; 123; + 245; 138; 83; 166; 110; 220; 176; 194; 62; 167; 29; 53; 198; 238; 101; 86; + 16; 178; 191; 67; 9; 224; 62; 219; 194; 10; 128; 32; 135; 1; 114; 73; 103; + 134; 189; 115; 97; 93; 171; 38; 56; 73; 32; 171; 194; 9; 178; 32; 75; 179; + 127; 192; 42; 52; 158; 84; 147; 61; 55; 33; 8; 34; 216; 2; 103; 245; 209; + 172; 112; 45; 38; 188; 132; 199; 202; 251; 253; 201; 146; 122; 137; 50; 189; + 22; 69; 169; 204; 31; 40; 4; 66; 65; 170; 101; 141; 68; 98; 93; 165; 22; + 178; 183; 195; 89; 216; 44; 97; 78; 198; 44; 153; 73; 222; 1; 248; 112; 234; + 27; 189; 101; 138; 226; 73; 254; 192; 183; 239; 27; 74; 174; 178; 177; 205; + 6; 99; 168; 9; 42; 92; 38; 205; 192; 122; 59; 236; 188; 1; 140; 67; 238; 43; + 130; 59; 199; 251; 192; 37; 181; 12; 83; 233; 63; 149; 193; 52; 144; 81; 72; + 91; 15; 154; 224; 97; 194; 92; 38; 167; 57; 237; 34; 79; 78; 213; 240; 10; + 21; 8; 86; 30; 233; 170; 162; 117; 232; 218; 237; 233; 178; 33; 244; 146; + 233; 125; 107; 29; 83; 188; 49; 113; 249; 128; 169; 77; 19; 61; 223; 167; + 34; 26; 34; 209; 184; 79; 122; 216; 214; 170; 53; 32; 212; 247; 61; 94; 18; + 26; 106; 204; 237; 20; 42; 78; 206; 207; 82; 7; 238; 72; 223; 183; 8; 236; + 6; 243; 250; 255; 195; 196; 89; 84; 185; 42; 11; 113; 5; 141; 163; 62; 150; + 250; 37; 29; 22; 60; 67; 120; 4; 87; 140; 26; 35; 157; 67; 129; 194; 14; 39; + 181; 183; 159; 7; 217; 227; 234; 153; 170; 219; 217; 3; 43; 108; 37; 245; 3; + 44; 125; 164; 83; 123; 117; 24; 15; 121; 121; 88; 12; 207; 48; 1; 123; 48; + 249; 247; 126; 37; 119; 61; 144; 49; 175; 187; 150; 189; 189; 104; 148; 105; + 207; 254; 218; 244; 70; 47; 31; 189; 247; 214; 127; 164; 20; 1; 239; 124; + 127; 179; 71; 74; 218; 253; 31; 211; 133; 87; 144; 115; 164; 25; 82; 82; 72; + 25; 169; 106; 230; 61; 221; 216; 204; 210; 192; 47; 194; 100; 80; 72; 47; + 234; 253; 52; 102; 36; 72; 155; 58; 46; 74; 108; 78; 28; 62; 41; 225; 18; + 81; 146; 75; 19; 110; 55; 160; 93; 161; 220; 181; 120; 55; 112; 17; 49; 28; + 70; 175; 137; 69; 176; 35; 40; 3; 127; 68; 92; 96; 91; 137; 124; 196; 32; + 89; 128; 101; 185; 204; 143; 59; 146; 12; 16; 240; 231; 119; 239; 226; 2; + 101; 37; 1; 0; 238; 179; 174; 168; 206; 109; 167; 36; 76; 240; 231; 240; + 198; 254; 233; 59; 98; 73; 227; 117; 158; 87; 106; 134; 26; 230; 29; 30; 22; + 239; 66; 85; 213; 189; 90; 204; 244; 254; 18; 47; 64; 199; 192; 223; 178; + 34; 69; 10; 7; 164; 201; 64; 127; 110; 208; 16; 104; 246; 207; 120; 65; 20; + 207; 198; 144; 55; 164; 24; 37; 123; 96; 94; 24; 24; 223; 108; 143; 29; 179; + 88; 162; 88; 98; 195; 79; 167; 207; 53; 110; 29; 230; 102; 79; 255; 179; + 225; 247; 213; 205; 108; 171; 172; 103; 80; 20; 207; 150; 165; 28; 67; 44; + 160; 0; 228; 211; 174; 64; 45; 196; 227; 219; 38; 15; 46; 128; 38; 69; 210; + 104; 112; 69; 158; 19; 51; 31; 32; 81; 157; 3; 8; 107; 127; 82; 253; 6; 0; + 124; 1; 100; 73; 177; 24; 168; 164; 37; 46; 176; 14; 34; 213; 117; 3; 70; + 98; 136; 186; 124; 57; 178; 89; 89; 240; 147; 48; 193; 48; 118; 121; 169; + 233; 141; 161; 58; 226; 38; 94; 29; 114; 145; 212; 47; 34; 58; 108; 110; + 118; 32; 211; 57; 35; 231; 121; 19; 200; 251; 195; 21; 120; 241; 42; 225; + 221; 32; 148; 97; 166; 213; 253; 168; 133; 248; 192; 169; 255; 82; 194; 225; + 193; 34; 64; 27; 119; 167; 47; 58; 81; 134; 217; 125; 216; 8; 207; 212; 249; + 113; 155; 172; 245; 179; 131; 162; 30; 27; 195; 107; 208; 118; 26; 151; 25; + 146; 24; 26; 51; 198; 128; 79; 251; 69; 111; 22; 245; 207; 117; 199; 97; + 222; 199; 54; 156; 28; 217; 65; 144; 27; 232; 212; 227; 33; 254; 189; 131; + 107; 124; 22; 49; 175; 114; 117; 157; 58; 47; 81; 38; 158; 74; 7; 104; 136; + 226; 203; 91; 196; 247; 128; 17; 193; 193; 237; 132; 123; 166; 73; 246; 159; + 97; 201; 26; 104; 16; 75; 82; 66; 56; 43; 242; 135; 233; 156; 238; 59; 52; + 104; 80; 200; 80; 98; 74; 132; 113; 157; 252; 17; 177; 8; 31; 52; 54; 36; + 97; 141; 137; 78; 135; 219; 65; 157; 217; 32; 220; 7; 108; 241; 165; 254; 9; + 188; 155; 15; 208; 103; 44; 61; 121; 64; 255; 94; 158; 48; 226; 235; 70; 56; + 38; 45; 26; 227; 73; 99; 139; 53; 253; 211; 155; 0; 183; 223; 157; 164; 107; + 160; 163; 184; 241; 139; 127; 69; 4; 217; 120; 49; 170; 34; 21; 56; 73; 97; + 105; 83; 47; 56; 44; 16; 109; 45; 183; 154; 64; 254; 218; 39; 242; 70; 182; + 145; 51; 200; 232; 108; 48; 36; 5; 245; 112; 254; 69; 140; 11; 12; 150; 166; + 117; 72; 218; 32; 47; 14; 239; 118; 208; 104; 91; 212; 143; 11; 61; 207; 81; + 251; 7; 212; 146; 227; 160; 35; 22; 141; 66; 145; 20; 149; 200; 32; 73; 242; + 98; 162; 12; 99; 63; 200; 7; 240; 5; 184; 212; 201; 245; 210; 69; 187; 111; + 69; 34; 122; 181; 109; 159; 97; 22; 253; 8; 163; 1; 68; 74; 79; 8; 172; 202; + 165; 118; 195; 25; 34; 168; 125; 188; 209; 67; 70; 222; 184; 222; 198; 56; + 189; 96; 45; 89; 129; 29; 56; 76; 42; 236; 190; 215; 51; 216; 237; 32; 204; + 10; 131; 98; 145; 44; 129; 117; 223; 146; 170; 71; 58; 233; 129; 74; 60; 51; + 163; 103; 45; 112; 161; 200; 137; 47; 154; 54; 74; 58; 13; 232; 141; 124; + 29; 122; 19; 99; 21; 160; 237; 120; 138; 0; 172; 188; 63; 176; 131; 180; + 165; 179; 184; 44; 161; 144; 27; 203; 203; 23; 228; 54; 78; 121; 17; 127; + 170; 221; 179; 51; 7; 198; 91; 136; 8; 8; 81; 63; 13; 2; 168; 230; 192; 29; + 20; 36; 157; 238; 239; 63; 119; 60; 247; 89; 157; 152; 207; 193; 137; 239; + 241; 179; 95; 84; 46; 224; 66; 251; 93; 227; 124; 180; 161; 71; 11; 18; 102; + 87; 125; 21; 131; 189; 204; 93; 146; 145; 148; 128; 204; 34; 83; 32; 161; + 60; 228; 214; 144; 63; 24; 127; 229; 40; 123; 118; 46; 222; 206; 20; 71; 26; + 255; 183; 182; 184; 15; 186; 32; 219; 161; 31; 81; 119; 182; 195; 50; 183; + 137; 45; 240; 153; 192; 81; 43; 169; 241; 165; 156; 72; 173; 117; 56; 79; + 34; 171; 50; 73; 47; 118; 252; 199; 27; 60; 76; 47; 247; 237; 192; 122; 232; + 149; 168; 154; 170; 85; 107; 95; 129; 0; 10; 173; 77; 39; 128; 54; 192; 238; + 115; 238; 246; 19; 237; 121; 177; 11; 17; 105; 109; 82; 198; 165; 12; 134; + 3; 134; 195; 40; 137; 228; 245; 89; 112; 253; 70; 20; 42; 114; 25; 136; 207; + 168; 233; 159; 149; 208; 156; 169; 117; 132; 80; 149; 169; 208; 197; 156; + 176; 32; 51; 23; 172; 110; 149; 16; 27; 51; 4; 207; 142; 98; 188; 221; 208; + 169; 24; 177; 188; 152; 43; 128; 180; 8; 52; 158; 68; 238; 4; 177; 166; 184; + 38; 146; 8; 135; 93; 145; 199; 69; 154; 52; 95; 104; 241; 204; 116; 92; 248; + 172; 65; 155; 81; 82; 38; 8; 129; 49; 115; 182; 71; 177; 173; 17; 237; 42; + 201; 153; 15; 180; 236; 52; 13; 215; 71; 122; 245; 164; 67; 204; 203; 196; + 160; 96; 169; 190; 119; 54; 202; 102; 92; 119; 237; 245; 248; 47; 117; 161; + 122; 161; 192; 253; 1; 14; 2; 217; 222; 17; 4; 231; 239; 202; 9; 120; 14; + 137; 108; 140; 14; 227; 109; 41; 40; 135; 201; 177; 174; 146; 163; 210; 92; + 76; 31; 83; 113; 87; 209; 99; 66; 25; 183; 147; 234; 59; 176; 149; 31; 71; + 211; 171; 19; 51; 212; 215; 82; 5; 123; 63; 126; 225; 226; 112; 147; 189; + 236; 91; 14; 178; 29; 15; 18; 123; 122; 45; 80; 134; 61; 251; 210; 23; 82; + 147; 166; 80; 68; 216; 100; 181; 93; 215; 14; 166; 200; 98; 169; 125; 170; + 54; 135; 49; 91; 248; 208; 0; 253; 132; 124; 119; 46; 20; 139; 151; 98; 192; + 168; 5; 71; 100; 2; 244; 199; 18; 230; 231; 27; 213; 122; 166; 51; 106; 221; + 152; 150; 69; 123; 47; 193; 33; 118; 253; 30; 60; 117; 166; 245; 113; 86; + 68; 167; 180; 192; 105; 17; 60; 178; 5; 116; 82; 31; 151; 205; 199; 168; 81; + 72; 199; 123; 56; 168; 169; 82; 74; 77; 75; 137; 129; 47; 131; 184; 246; 18; + 62; 217; 173; 56; 214; 27; 182; 72; 133; 77; 24; 205; 246; 201; 214; 219; + 98; 28; 63; 31; 12; 145; 145; 0; 31; 143; 46; 44; 225; 242; 191; 224; 79; + 223; 164; 56; 116; 146; 238; 10; 86; 198; 96; 250; 200; 239; 172; 63; 40; + 56; 99; 61; 105; 143; 20; 64; 62; 173; 63; 114; 154; 235; 148; 225; 86; 38; + 5; 47; 78; 79; 24; 253; 203; 77; 47; 139; 225; 130; 196; 177; 141; 111; 64; + 228; 30; 25; 127; 44; 13; 99; 158; 112; 246; 63; 188; 1; 131; 191; 79; 196; + 115; 251; 122; 78; 142; 125; 120; 165; 143; 245; 232; 91; 61; 216; 80; 151; + 24; 26; 193; 22; 57; 104; 133; 8; 208; 6; 229; 239; 164; 105; 45; 1; 189; + 100; 246; 120; 19; 175; 57; 198; 23; 21; 54; 49; 33; 148; 101; 109; 182; + 211; 180; 144; 207; 172; 192; 96; 46; 115; 97; 229; 157; 5; 167; 186; 176; + 198; 112; 120; 31; 61; 3; 228; 70; 217; 38; 205; 97; 65; 88; 162; 124; 210; + 114; 160; 177; 242; 187; 4; 199; 222; 251; 89; 60; 57; 191; 30; 184; 98; + 226; 206; 187; 141; 233; 137; 181; 41; 48; 11; 189; 238; 2; 95; 172; 13; + 166; 86; 135; 54; 97; 87; 220; 171; 235; 106; 47; 224; 23; 125; 15; 206; 76; + 45; 63; 25; 127; 240; 220; 236; 137; 119; 74; 35; 32; 232; 197; 133; 123; + 159; 182; 101; 135; 178; 186; 104; 209; 139; 103; 240; 111; 155; 15; 51; 29; + 124; 231; 112; 58; 124; 142; 175; 176; 81; 109; 95; 58; 82; 178; 120; 113; + 182; 13; 210; 118; 96; 209; 30; 213; 249; 52; 28; 7; 112; 17; 228; 179; 32; + 74; 42; 246; 102; 227; 255; 60; 53; 130; 214; 124; 182; 250; 135; 216; 91; + 164; 225; 11; 110; 59; 64; 186; 50; 106; 132; 42; 0; 96; 110; 233; 18; 16; + 146; 217; 67; 9; 220; 59; 134; 200; 56; 40; 243; 244; 172; 104; 96; 205; + 101; 166; 211; 227; 215; 60; 24; 45; 217; 66; 217; 37; 96; 51; 157; 56; 89; + 87; 255; 216; 44; 43; 59; 37; 240; 62; 48; 80; 70; 74; 207; 176; 107; 209; + 171; 119; 197; 21; 65; 107; 73; 250; 157; 65; 171; 244; 138; 174; 207; 130; + 18; 40; 168; 6; 166; 184; 220; 33; 200; 159; 157; 140; 70; 4; 96; 92; 203; + 163; 42; 212; 110; 9; 64; 37; 156; 47; 238; 18; 76; 77; 91; 18; 171; 29; + 163; 148; 129; 208; 195; 11; 186; 49; 119; 190; 250; 0; 141; 154; 137; 24; + 158; 98; 126; 96; 3; 130; 127; 217; 243; 67; 55; 2; 204; 178; 139; 103; 111; + 108; 191; 13; 132; 93; 139; 225; 159; 48; 13; 56; 110; 112; 199; 101; 225; + 185; 166; 45; 176; 110; 171; 32; 174; 125; 153; 186; 187; 87; 221; 150; 193; + 42; 35; 118; 66; 58; 250; 132; 112; 138; 44; 67; 66; 75; 69; 229; 185; 223; + 227; 25; 138; 137; 93; 228; 88; 156; 33; 0; 159; 190; 209; 235; 109; 161; + 206; 119; 241; 31; 203; 126; 68; 219; 114; 193; 248; 59; 189; 45; 40; 198; + 31; 196; 207; 95; 254; 21; 170; 117; 192; 255; 172; 128; 249; 169; 225; 36; + 232; 201; 112; 7; 253; 181; 181; 69; 154; 217; 97; 207; 36; 121; 58; 27; + 233; 132; 9; 134; 137; 62; 62; 48; 25; 9; 48; 231; 30; 11; 80; 65; 253; 100; + 242; 57; 156; 226; 231; 219; 23; 52; 173; 167; 156; 19; 156; 43; 106; 55; + 148; 189; 169; 123; 89; 147; 142; 27; 233; 160; 64; 152; 136; 104; 52; 215; + 18; 23; 225; 123; 9; 254; 171; 74; 155; 209; 41; 25; 224; 223; 225; 252; + 109; 164; 255; 241; 166; 44; 148; 8; 201; 195; 78; 241; 53; 44; 39; 33; 198; + 101; 221; 147; 49; 206; 248; 137; 43; 231; 187; 192; 37; 161; 86; 51; 16; + 77; 131; 254; 28; 46; 61; 169; 25; 4; 114; 226; 156; 177; 10; 128; 249; 34; + 203; 248; 158; 62; 138; 54; 90; 96; 21; 71; 80; 165; 34; 192; 233; 227; 143; + 36; 36; 95; 176; 72; 61; 85; 229; 38; 118; 100; 205; 22; 244; 19; 172; 253; + 110; 154; 221; 159; 2; 66; 65; 73; 165; 52; 190; 206; 18; 185; 123; 243; + 189; 135; 185; 100; 15; 100; 180; 202; 152; 133; 211; 164; 113; 65; 140; 76; + 201; 153; 170; 88; 39; 250; 7; 184; 0; 176; 111; 111; 0; 35; 146; 83; 218; + 173; 221; 145; 210; 251; 171; 209; 75; 87; 250; 20; 130; 80; 75; 254; 214; + 62; 21; 105; 2; 194; 196; 119; 29; 81; 57; 103; 90; 166; 148; 175; 20; 44; + 70; 38; 222; 203; 75; 167; 171; 111; 236; 96; 249; 34; 214; 3; 208; 83; 187; + 21; 26; 70; 101; 201; 243; 188; 136; 40; 16; 178; 90; 58; 104; 108; 117; + 118; 197; 39; 71; 180; 108; 200; 164; 88; 119; 58; 118; 80; 174; 147; 246; + 17; 129; 84; 166; 84; 253; 29; 223; 33; 174; 29; 101; 94; 17; 243; 144; 140; + 36; 18; 148; 244; 231; 141; 95; 209; 159; 93; 127; 114; 99; 109; 211; 8; 20; + 3; 51; 181; 199; 215; 239; 154; 55; 106; 75; 226; 174; 204; 197; 143; 225; + 169; 211; 190; 143; 79; 145; 53; 47; 51; 30; 82; 215; 238; 42; 77; 36; 63; + 21; 150; 46; 67; 40; 144; 58; 142; 212; 22; 156; 46; 119; 186; 100; 225; + 216; 152; 235; 71; 250; 135; 193; 59; 12; 194; 134; 234; 21; 1; 71; 109; 37; + 209; 70; 108; 203; 183; 138; 153; 136; 1; 102; 58; 181; 50; 120; 215; 3; + 186; 111; 144; 206; 129; 13; 69; 2; 57; 69; 216; 42; 77; 174; 248; 29; 45; + 219; 232; 142; 5; 24; 112; 30; 193; 210; 199; 95; 153; 179; 170; 121; 202; + 204; 36; 35; 109; 177; 83; 181; 224; 202; 178; 102; 77; 38; 35; 118; 101; + 202; 235; 51; 237; 186; 125; 200; 74; 210; 240; 214; 190; 14; 3; 16; 85; 99; + 247; 120; 127; 136; 42; 79; 45; 1; 92; 231; 185; 35; 42; 234; 242; 225; 202; + 81; 70; 151; 12; 202; 112; 93; 103; 115; 50; 182; 47; 245; 3; 68; 134; 11; + 37; 167; 11; 33; 100; 156; 2; 253; 24; 13; 187; 2; 143; 41; 137; 33; 20; 45; + 188; 150; 14; 37; 139; 230; 248; 71; 131; 201; 113; 45; 3; 232; 47; 159; + 123; 156; 109; 248; 134; 147; 88; 99; 221; 164; 133; 58; 225; 118; 145; 105; + 97; 87; 125; 170; 78; 149; 17; 81; 46; 251; 189; 96; 251; 87; 27; 194; 50; + 128; 7; 158; 49; 205; 35; 120; 216; 197; 117; 119; 137; 193; 207; 196; 239; + 247; 179; 10; 154; 18; 251; 84; 72; 113; 195; 56; 114; 65; 157; 196; 18; + 105; 55; 232; 255; 51; 181; 80; 9; 209; 107; 29; 142; 29; 28; 134; 33; 16; + 229; 2; 19; 56; 216; 34; 240; 180; 202; 145; 99; 12; 32; 9; 37; 66; 149; + 121; 131; 23; 160; 179; 9; 63; 238; 213; 170; 143; 208; 109; 98; 159; 20; + 112; 235; 238; 188; 0; 186; 201; 68; 164; 160; 70; 178; 33; 20; 199; 167; + 36; 140; 142; 58; 164; 74; 245; 94; 240; 216; 64; 245; 193; 4; 220; 185; 62; + 11; 12; 94; 186; 173; 227; 156; 164; 72; 68; 80; 181; 42; 236; 93; 15; 111; + 38; 39; 210; 46; 36; 8; 213; 94; 65; 238; 36; 152; 21; 212; 104; 148; 124; + 236; 123; 128; 63; 226; 33; 181; 225; 186; 147; 112; 250; 58; 93; 28; 99; + 172; 7; 220; 108; 140; 223; 249; 113; 81; 97; 88; 176; 226; 115; 157; 216; + 121; 160; 114; 93; 225; 234; 180; 206; 244; 1; 115; 65; 44; 114; 214; 89; + 231; 9; 100; 155; 114; 191; 114; 207; 225; 116; 166; 105; 229; 33; 60; 235; + 36; 10; 188; 35; 203; 186; 78; 210; 103; 1; 57; 28; 63; 53; 186; 59; 142; + 245; 39; 97; 67; 106; 191; 77; 118; 71; 76; 80; 38; 86; 110; 229; 196; 187; + 175; 93; 164; 225; 170; 230; 46; 219; 7; 11; 18; 242; 162; 75; 5; 187; 215; + 183; 137; 5; 177; 174; 206; 185; 226; 190; 237; 192; 243; 200; 186; 232; 63; + 105; 203; 18; 113; 118; 64; 189; 76; 118; 129; 197; 41; 192; 60; 96; 11; 97; + 93; 177; 92; 130; 227; 136; 89; 141; 173; 240; 220; 19; 20; 182; 43; 135; + 50; 24; 116; 108; 236; 142; 123; 176; 124; 210; 44; 120; 64; 202; 228; 189; + 103; 233; 251; 35; 195; 249; 218; 158; 30; 212; 138; 74; 211; 155; 178; 77; + 222; 110; 98; 151; 4; 129; 114; 115; 107; 56; 252; 112; 229; 254; 50; 199; + 140; 58; 218; 65; 1; 139; 218; 89; 131; 150; 200; 10; 253; 95; 151; 85; 168; + 50; 177; 161; 9; 232; 110; 58; 134; 253; 252; 49; 187; 68; 148; 197; 72; 78; + 62; 10; 105; 227; 47; 37; 250; 136; 208; 103; 200; 41; 220; 46; 41; 115; + 209; 56; 30; 189; 19; 181; 73; 97; 105; 216; 76; 43; 211; 183; 170; 216; + 129; 215; 55; 89; 229; 148; 43; 18; 174; 39; 33; 203; 11; 176; 153; 64; 177; + 207; 111; 232; 65; 33; 197; 250; 29; 207; 181; 63; 34; 80; 68; 85; 111; 49; + 37; 92; 50; 172; 119; 145; 101; 215; 152; 11; 3; 189; 164; 136; 79; 182; 24; + 208; 30; 176; 166; 2; 184; 161; 223; 48; 54; 213; 59; 173; 66; 71; 135; 15; + 136; 212; 164; 197; 238; 108; 13; 249; 10; 217; 197; 205; 55; 122; 36; 106; + 116; 246; 154; 123; 43; 189; 184; 49; 213; 81; 91; 252; 55; 53; 9; 5; 80; + 109; 84; 147; 197; 37; 207; 47; 35; 73; 15; 180; 43; 20; 101; 163; 32; 237; + 65; 217; 120; 82; 216; 204; 110; 67; 120; 47; 210; 131; 174; 84; 34; 183; + 205; 191; 123; 46; 208; 34; 197; 226; 228; 240; 191; 81; 51; 30; 104; 69; + 79; 3; 131; 157; 181; 100; 139; 251; 14; 162; 31; 242; 113; 139; 47; 228; + 80; 101; 186; 149; 148; 36; 105; 43; 71; 213; 69; 142; 249; 158; 83; 117; + 82; 32; 166; 161; 182; 123; 110; 131; 142; 60; 65; 215; 33; 79; 170; 178; + 92; 143; 232; 85; 209; 86; 111; 225; 91; 52; 166; 75; 93; 226; 45; 63; 116; + 174; 28; 150; 216; 116; 208; 237; 99; 28; 238; 245; 24; 109; 248; 41; 237; + 244; 231; 91; 197; 189; 151; 8; 177; 58; 102; 121; 210; 186; 76; 205; 31; + 215; 160; 36; 144; 209; 128; 248; 138; 40; 251; 10; 194; 37; 197; 25; 100; + 58; 95; 75; 151; 163; 177; 51; 114; 0; 226; 239; 188; 127; 125; 1; 40; 107; + 38; 106; 30; 239; 250; 22; 159; 115; 213; 196; 104; 108; 134; 44; 118; 3; + 27; 188; 47; 138; 246; 141; 90; 183; 135; 94; 67; 117; 89; 148; 144; 194; + 243; 197; 93; 124; 205; 171; 5; 145; 42; 154; 162; 129; 199; 88; 48; 28; 66; + 54; 29; 198; 128; 215; 212; 216; 220; 150; 209; 156; 79; 104; 55; 123; 106; + 216; 151; 146; 25; 99; 122; 209; 26; 36; 88; 208; 208; 23; 12; 28; 92; 173; + 156; 2; 186; 7; 3; 122; 56; 132; 208; 205; 124; 23; 4; 38; 109; 44; 66; 166; + 220; 189; 64; 130; 148; 80; 61; 21; 174; 119; 198; 104; 251; 180; 193; 192; + 169; 83; 207; 208; 97; 237; 208; 139; 66; 147; 204; 96; 103; 24; 132; 12; + 155; 153; 42; 179; 26; 122; 0; 174; 205; 24; 218; 11; 98; 134; 236; 141; + 168; 68; 202; 144; 129; 132; 202; 147; 53; 167; 154; 132; 94; 154; 24; 19; + 146; 205; 250; 216; 101; 53; 195; 216; 212; 209; 187; 253; 83; 91; 84; 82; + 140; 230; 99; 45; 218; 8; 131; 57; 39; 19; 212; 94; 67; 40; 141; 195; 66; + 201; 204; 120; 50; 96; 243; 80; 189; 239; 3; 218; 121; 26; 171; 7; 187; 85; + 51; 140; 190; 174; 151; 149; 38; 83; 36; 112; 10; 76; 14; 161; 185; 222; 27; + 125; 213; 102; 88; 162; 15; 247; 218; 39; 205; 181; 217; 185; 255; 253; 51; + 44; 73; 69; 41; 44; 87; 190; 48; 205; 214; 69; 199; 127; 199; 251; 174; 186; 227; 211; 232; 223; 228; 12; 218; 93; 170; 48; 136; 44; 162; 128; 202; 91; 192; 152; 84; 152; 127; 23; 225; 11; 159; 136; 206; 73; 56; 136; 162; 84; 123; 27; 173; 5; 128; 28; 146; 252; 35; 159; 195; 163; 61; 4; 243; 49; 10; @@ -5583,38 +6702,37 @@ let GE25519_GROUPER = (MATCH_MP pth (CONJ th1 th2));; let BYTES_LOADED_DATA = prove - (`bytes_loaded s (word (pc + 0x2224)) edwards25519_scalarmulbase_data <=> - read (memory :> bytes(word (pc + 0x2224),48608)) s = + (`bytes_loaded s (word (pc + 0x3079)) edwards25519_scalarmulbase_data <=> + read (memory :> bytes(word (pc + 0x3079),48576)) s = num_of_bytelist edwards25519_scalarmulbase_data`, REWRITE_TAC[bytes_loaded; READ_BYTELIST_EQ_BYTES; CONV_RULE (RAND_CONV LENGTH_CONV) (AP_TERM `LENGTH:byte list->num` edwards25519_scalarmulbase_data)]);; let EDWARDS25519BASE_TABLE_LEMMA = prove - (`read (memory :> bytes(word (pc + 0x2224),48608)) s = + (`read (memory :> bytes(word (pc + 0x3079),48576)) s = num_of_bytelist edwards25519_scalarmulbase_data - ==> bignum_from_memory(word(pc + 0x2224),4) s = p_25519 /\ - edwards25519_exprojective + ==> edwards25519_exprojective (group_pow edwards25519_group E_25519 0) - (bignum_from_memory(word(pc + 0x2244),4) s, - bignum_from_memory(word(pc + 0x2264),4) s, + (bignum_from_memory(word(pc + 0x3079),4) s, + bignum_from_memory(word(pc + 0x3099),4) s, 1, - bignum_from_memory(word(pc + 0x2284),4) s) /\ + bignum_from_memory(word(pc + 0x30b9),4) s) /\ edwards25519_exprojective (group_pow edwards25519_group E_25519 (2 EXP 251)) - (bignum_from_memory(word(pc + 0x22a4),4) s, - bignum_from_memory(word(pc + 0x22c4),4) s, + (bignum_from_memory(word(pc + 0x30d9),4) s, + bignum_from_memory(word(pc + 0x30f9),4) s, 1, - bignum_from_memory(word(pc + 0x22e4),4) s) /\ + bignum_from_memory(word(pc + 0x3119),4) s) /\ !i. i < 63 ==> !j. j < 8 ==> edwards25519_epprojective (group_pow edwards25519_group E_25519 (2 EXP (4 * i) * (j + 1))) - (bignum_from_memory(word(pc + 0x2304 + 768 * i + 96 * j),4) s, - bignum_from_memory(word(pc + 0x2304 + 768 * i + 96 * j + 32),4) s, - bignum_from_memory(word(pc + 0x2304 + 768 * i + 96 * j + 64),4) s) /\ - ~(bignum_from_memory(word(pc + 0x2304 + 768 * i + 96 * j + 64),4) s = + (bignum_from_memory(word(pc + 0x3139 + 768 * i + 96 * j),4) s, + bignum_from_memory(word(pc + 0x3139 + 768 * i + 96 * j + 32),4) s, + bignum_from_memory(word(pc + 0x3139 + 768 * i + 96 * j + 64),4) s) /\ + ~(bignum_from_memory(word(pc + 0x3139 + 768 * i + 96 * j + 64),4) s = 0)`, let GE25519_POWERS = end_itlist CONJ @@ -5624,8 +6742,8 @@ let EDWARDS25519BASE_TABLE_LEMMA = prove [GE25519_POW_1])) in REWRITE_TAC[GSYM BYTES_LOADED_DATA; edwards25519_scalarmulbase_data] THEN CONV_TAC(LAND_CONV DATA64_CONV) THEN STRIP_TAC THEN - CONV_TAC(funpow 3 RAND_CONV (BINDER_CONV (RAND_CONV EXPAND_CASES_CONV))) THEN - CONV_TAC(funpow 3 RAND_CONV EXPAND_CASES_CONV) THEN + CONV_TAC(funpow 2 RAND_CONV (BINDER_CONV (RAND_CONV EXPAND_CASES_CONV))) THEN + CONV_TAC(funpow 2 RAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[WORD_ADD] THEN CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN REWRITE_TAC[GSYM WORD_ADD] THEN ASM_REWRITE_TAC[] THEN @@ -5658,22 +6776,21 @@ let lvs = "ymx_2",[`RSP`;`32`]; "xpy_2",[`RSP`;`64`]; "kxy_2",[`RSP`;`96`]; - "acc",[`RSP`;`128`]; - "x_1",[`RSP`;`128`]; - "y_1",[`RSP`;`160`]; - "z_1",[`RSP`;`192`]; - "w_1",[`RSP`;`224`]; - "x_3",[`RSP`;`128`]; - "y_3",[`RSP`;`160`]; - "z_3",[`RSP`;`192`]; - "w_3",[`RSP`;`224`]; - "tmpspace",[`RSP`;`256`]; - "t0",[`RSP`;`256`]; - "t1",[`RSP`;`288`]; - "t2",[`RSP`;`320`]; - "t3",[`RSP`;`352`]; - "t4",[`RSP`;`384`]; - "t5",[`RSP`;`416`]];; + "t0",[`RSP`;`128`]; + "t1",[`RSP`;`160`]; + "t2",[`RSP`;`192`]; + "t3",[`RSP`;`224`]; + "t4",[`RSP`;`256`]; + "t5",[`RSP`;`288`]; + "acc",[`RSP`;`320`]; + "x_1",[`RSP`;`320`]; + "y_1",[`RSP`;`352`]; + "z_1",[`RSP`;`384`]; + "w_1",[`RSP`;`416`]; + "x_3",[`RSP`;`320`]; + "y_3",[`RSP`;`352`]; + "z_3",[`RSP`;`384`]; + "w_3",[`RSP`;`416`]];; (* ------------------------------------------------------------------------- *) (* Instances of mul_p25519. *) @@ -5686,7 +6803,7 @@ let LOCAL_MUL_P25519_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0xe004) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xee39) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmulbase_mc /\ read RIP s = pcin /\ @@ -5856,7 +6973,7 @@ let LOCAL_MUL_4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0xe004) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xee39) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmulbase_mc /\ read RIP s = pcin /\ @@ -6017,7 +7134,7 @@ let LOCAL_ADD_TWICE4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0xe004) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xee39) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmulbase_mc /\ read RIP s = pcin /\ @@ -6089,7 +7206,7 @@ let LOCAL_DOUBLE_TWICE4_TAC = `!(t:x86state) pcin pcout q3 n3 q1 n1. !n. read(memory :> bytes(word_add (read q1 t) (word n1),8 * 4)) t = n ==> - nonoverlapping (word pc,0xe004) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xee39) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmulbase_mc /\ read RIP s = pcin /\ @@ -6158,7 +7275,7 @@ let LOCAL_SUB_TWICE4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0xe004) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xee39) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmulbase_mc /\ read RIP s = pcin /\ @@ -6232,20 +7349,16 @@ let LOCAL_SUB_TWICE4_TAC = (* ------------------------------------------------------------------------- *) let LOCAL_MODINV_TAC = - let cth = - (GEN_REWRITE_CONV RAND_CONV [bignum_modinv_mc] THENC TRIM_LIST_CONV) - `TRIM_LIST (23,15) bignum_modinv_mc` - and bth = edwards25519_scalarmulbase_mc - and th = CONV_RULE (DEPTH_CONV WORD_NUM_RED_CONV) - (SPEC `word 4:int64` CORE_MODINV_CORRECT) in - X86_SUBROUTINE_SIM_TAC(bth,EDWARDS25519_SCALARMULBASE_EXEC,0x18b8,cth,th) - [`read RSI s`; `read RDX s`; - `read (memory :> bytes(read RDX s,8 * 4)) s`; - `read RCX s`; - `read (memory :> bytes(read RCX s,8 * 4)) s`; - `read R8 s`; - `pc + 0x18b8`; - `stackpointer:int64`];; + X86_SUBROUTINE_SIM_TAC + (edwards25519_scalarmulbase_mc, + EDWARDS25519_SCALARMULBASE_EXEC, + 0x18a2, + (GEN_REWRITE_CONV RAND_CONV [bignum_inv_p25519_mc] THENC TRIM_LIST_CONV) + `TRIM_LIST (17,18) bignum_inv_p25519_mc`, + CORE_INV_P25519_CORRECT) + [`read RDI s`; `read RSI s`; + `read (memory :> bytes(read RSI s,8 * 4)) s`; + `pc + 0x18a2`; `stackpointer:int64`];; (* ------------------------------------------------------------------------- *) (* Overall point operation proof. *) @@ -6254,8 +7367,8 @@ let LOCAL_MODINV_TAC = let EDWARDS25519_SCALARMULBASE_CORRECT = time prove (`!res scalar n pc stackpointer. ALL (nonoverlapping (stackpointer,488)) - [(word pc,0xe004); (res,64); (scalar,32)] /\ - nonoverlapping (res,64) (word pc,0xe004) + [(word pc,0xee39); (res,64); (scalar,32)] /\ + nonoverlapping (res,64) (word pc,0xee39) ==> ensures x86 (\s. bytes_loaded s (word pc) (APPEND edwards25519_scalarmulbase_mc @@ -6264,7 +7377,7 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove read RSP s = stackpointer /\ C_ARGUMENTS [res; scalar] s /\ bignum_from_memory (scalar,4) s = n) - (\s. read RIP s = word (pc + 0x2212) /\ + (\s. read RIP s = word (pc + 0x3067) /\ bignum_pair_from_memory(res,4) s = paired (modular_encode (256,p_25519)) (group_pow edwards25519_group E_25519 n)) @@ -6320,12 +7433,12 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove ENSURES_WHILE_UP_TAC `63` `pc + 0x1f4` `pc + 0x17fe` `\i s. - read (memory :> bytes(word(pc + 0x2224),48608)) s = + read (memory :> bytes(word(pc + 0x3079),48576)) s = num_of_bytelist edwards25519_scalarmulbase_data /\ read RSP s = stackpointer /\ read (memory :> bytes64 (word_add stackpointer (word 448))) s = res /\ read (memory :> bytes64 (word_add stackpointer (word 480))) s = - word(pc + 0x2304 + 768 * i) /\ + word(pc + 0x3139 + 768 * i) /\ read (memory :> bytes64 (word_add stackpointer (word 456))) s = word (4 * i) /\ val(read (memory :> bytes64 (word_add stackpointer (word 464))) s) <= 1 /\ @@ -6339,10 +7452,10 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove (&nn - &2 pow (4 * i) * (&(nn' DIV 2 EXP (4 * i)) + &(val(read (memory :> bytes64 (word_add stackpointer (word 464))) s))))) - (bignum_from_memory(word_add stackpointer (word 128),4) s, - bignum_from_memory(word_add stackpointer (word 160),4) s, - bignum_from_memory(word_add stackpointer (word 192),4) s, - bignum_from_memory(word_add stackpointer (word 224),4) s)` THEN + (bignum_from_memory(word_add stackpointer (word 320),4) s, + bignum_from_memory(word_add stackpointer (word 352),4) s, + bignum_from_memory(word_add stackpointer (word 384),4) s, + bignum_from_memory(word_add stackpointer (word 416),4) s)` THEN REPEAT CONJ_TAC THENL [ARITH_TAC; @@ -6358,23 +7471,23 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove RULE_ASSUM_TAC(REWRITE_RULE[SYM th]) THEN ASSUME_TAC th) THEN SUBGOAL_THEN `nonoverlapping_modulo (2 EXP 64) (val(stackpointer:int64),488) - (val(wpc:int64),0xe004)` + (val(wpc:int64),0xee39)` ASSUME_TAC THENL [EXPAND_TAC "wpc" THEN NONOVERLAPPING_TAC; ALL_TAC] THEN REPEAT(DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN DISCH_THEN(K ALL_TAC) THEN BIGNUM_LDIGITIZE_TAC "x0_" - `bignum_from_memory(word_add wpc (word 0x2244),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x3079),4) s0` THEN BIGNUM_LDIGITIZE_TAC "y0_" - `bignum_from_memory(word_add wpc (word 0x2264),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x3099),4) s0` THEN BIGNUM_LDIGITIZE_TAC "t0_" - `bignum_from_memory(word_add wpc (word 0x2284),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x30b9),4) s0` THEN BIGNUM_LDIGITIZE_TAC "x1_" - `bignum_from_memory(word_add wpc (word 0x22a4),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x30d9),4) s0` THEN BIGNUM_LDIGITIZE_TAC "y1_" - `bignum_from_memory(word_add wpc (word 0x22c4),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x30f9),4) s0` THEN BIGNUM_LDIGITIZE_TAC "t1_" - `bignum_from_memory(word_add wpc (word 0x22e4),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x3119),4) s0` THEN X86_ACCSTEPS_TAC EDWARDS25519_SCALARMULBASE_EXEC [9;13;14;15;17;18;19;20;27;28;29;30] (1--39) THEN @@ -6507,13 +7620,13 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove X_GEN_TAC `i:num` THEN STRIP_TAC THEN GHOST_INTRO_TAC `xn:num` - `bignum_from_memory (word_add stackpointer (word 128),4)` THEN + `bignum_from_memory (word_add stackpointer (word 320),4)` THEN GHOST_INTRO_TAC `yn:num` - `bignum_from_memory (word_add stackpointer (word 160),4)` THEN + `bignum_from_memory (word_add stackpointer (word 352),4)` THEN GHOST_INTRO_TAC `zn:num` - `bignum_from_memory (word_add stackpointer (word 192),4)` THEN + `bignum_from_memory (word_add stackpointer (word 384),4)` THEN GHOST_INTRO_TAC `wn:num` - `bignum_from_memory(word_add stackpointer (word 224),4)` THEN + `bignum_from_memory(word_add stackpointer (word 416),4)` THEN GHOST_INTRO_TAC `nbias:num` `\s. val(read (memory :> bytes64 (word_add stackpointer (word 464))) s)` THEN @@ -6621,7 +7734,7 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove REWRITE_TAC[ARITH_RULE `pc + off + 768 * i + jre = (pc + off + 768 * i) + jre`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `tab:int64 = word(pc + 0x2304 + 768 * i)` THEN + ABBREV_TAC `tab:int64 = word(pc + 0x3139 + 768 * i)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o TOP_DEPTH_CONV) [WORD_ADD_0] THEN @@ -6929,20 +8042,20 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove REWRITE_TAC[ARITH_RULE `(n MOD 2 EXP 251) DIV 2 EXP (4 * 63) = 0`] THEN REWRITE_TAC[INT_ADD_RID; INT_MUL_RZERO; INT_SUB_RZERO; GROUP_NPOW] THEN GHOST_INTRO_TAC `X:num` - `bignum_from_memory (word_add stackpointer (word 128),4)` THEN + `bignum_from_memory (word_add stackpointer (word 320),4)` THEN GHOST_INTRO_TAC `Y:num` - `bignum_from_memory (word_add stackpointer (word 160),4)` THEN + `bignum_from_memory (word_add stackpointer (word 352),4)` THEN GHOST_INTRO_TAC `Z:num` - `bignum_from_memory (word_add stackpointer (word 192),4)` THEN + `bignum_from_memory (word_add stackpointer (word 384),4)` THEN GHOST_INTRO_TAC `W:num` - `bignum_from_memory (word_add stackpointer (word 224),4)` THEN + `bignum_from_memory (word_add stackpointer (word 416),4)` THEN (*** The optional negation based on "flip" ***) REWRITE_TAC(!simulation_precanon_thms) THEN ENSURES_INIT_TAC "s0" THEN BIGNUM_LDIGITIZE_TAC "x_" - `read (memory :> bytes (word_add stackpointer (word 128),8 * 4)) s0` THEN + `read (memory :> bytes (word_add stackpointer (word 320),8 * 4)) s0` THEN ABBREV_TAC `ntop = (nn DIV 2 EXP 192) MOD 2 EXP 59` THEN SUBGOAL_THEN `ntop < 2 EXP 59` ASSUME_TAC THENL @@ -6970,7 +8083,7 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove ABBREV_TAC `X' = - read (memory :> bytes(word_add stackpointer (word 128),8 * 4)) s24` THEN + read (memory :> bytes(word_add stackpointer (word 320),8 * 4)) s24` THEN SUBGOAL_THEN `&X':int = if flip then &2 * &p_25519 - &X else &X` @@ -6999,21 +8112,13 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN - (*** The state setup for the modular inverse ***) - - FIRST_X_ASSUM(MP_TAC o CONJUNCT1 o MATCH_MP EDWARDS25519BASE_TABLE_LEMMA) THEN - REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN DISCH_TAC THEN - X86_STEPS_TAC EDWARDS25519_SCALARMULBASE_EXEC (25--29) THEN - RULE_ASSUM_TAC(REWRITE_RULE[WORD_RULE - `word(val(word(pc + a):int64) + b):int64 = word(pc + a + b)`]) THEN - RULE_ASSUM_TAC(CONV_RULE(ONCE_DEPTH_CONV NUM_ADD_CONV)) THEN - (*** The inlining of modular inverse ***) - LOCAL_MODINV_TAC 30 THEN + X86_STEPS_TAC EDWARDS25519_SCALARMULBASE_EXEC (25--26) THEN + LOCAL_MODINV_TAC 27 THEN ABBREV_TAC `w_3 = - read(memory :> bytes(word_add stackpointer (word 224),8 * 4)) s30` THEN + read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s27` THEN (*** Final multiplications ***) @@ -7030,13 +8135,18 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove MAP_EVERY X_GEN_TAC [`x:int`; `y:int`] THEN REPEAT(DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN - FIRST_ASSUM(MP_TAC o check (is_imp o concl)) THEN - REWRITE_TAC[] THEN ONCE_REWRITE_TAC[COPRIME_SYM] THEN - SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; DIVIDES_MOD] THEN ASM_CASES_TAC `Z MOD p_25519 = 0` THEN ASM_REWRITE_TAC[] THENL [ASM_REWRITE_TAC[exprojective; INTEGER_MOD_RING_CLAUSES]; ALL_TAC] THEN - ANTS_TAC THENL - [REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; STRIP_TAC] THEN + SUBGOAL_THEN `w_3 < p_25519 /\ (Z * w_3 == 1) (mod p_25519)` + STRIP_ASSUME_TAC THENL + [FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN MATCH_MP_TAC(TAUT + `p /\ (q ==> r) /\ (p /\ q ==> s) ==> (p ==> q) ==> r /\ s`) THEN + REPEAT CONJ_TAC THENL + [ASM_SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; DIVIDES_MOD]; + DISCH_THEN SUBST1_TAC THEN REWRITE_TAC[INVERSE_MOD_BOUND] THEN + REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; + MESON_TAC[INVERSE_MOD_RMUL]]; + ALL_TAC] THEN SUBGOAL_THEN `ring_inv (integer_mod_ring p_25519) (&Z rem &p_25519) = &w_3` ASSUME_TAC THENL [MATCH_MP_TAC RING_RINV_UNIQUE THEN @@ -7045,7 +8155,6 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove CONV_TAC MOD_DOWN_CONV THEN ASM_REWRITE_TAC[GSYM CONG] THEN REWRITE_TAC[MOD_LT_EQ; ARITH_EQ; p_25519]; ALL_TAC] THEN - SUBGOAL_THEN `~(&p_25519:int = &0)` ASSUME_TAC THENL [REWRITE_TAC[INT_OF_NUM_EQ; p_25519] THEN ARITH_TAC; ALL_TAC] THEN ASM_CASES_TAC `flip:bool` THEN @@ -7062,8 +8171,8 @@ let EDWARDS25519_SCALARMULBASE_CORRECT = time prove let EDWARDS25519_SCALARMULBASE_SUBROUTINE_CORRECT = time prove (`!res scalar n pc stackpointer returnaddress. ALL (nonoverlapping (word_sub stackpointer (word 536),536)) - [(word pc,0xe004); (scalar,32)] /\ - nonoverlapping (res,64) (word pc,0xe004) /\ + [(word pc,0xee39); (scalar,32)] /\ + nonoverlapping (res,64) (word pc,0xee39) /\ nonoverlapping (res,64) (word_sub stackpointer (word 536),544) ==> ensures x86 (\s. bytes_loaded s (word pc) @@ -7096,7 +8205,7 @@ let EDWARDS25519_SCALARMULBASE_SUBROUTINE_CORRECT = time prove let windows_edwards25519_scalarmulbase_mc, windows_edwards25519_scalarmulbase_data = - define_coda_from_elf 0x2234 + define_coda_from_elf 0x3089 "windows_edwards25519_scalarmulbase_mc" "windows_edwards25519_scalarmulbase_data" "x86/curve25519/edwards25519_scalarmulbase.obj";; @@ -7104,8 +8213,8 @@ let windows_edwards25519_scalarmulbase_mc, let WINDOWS_EDWARDS25519_SCALARMULBASE_SUBROUTINE_CORRECT = time prove (`!res scalar n pc stackpointer returnaddress. ALL (nonoverlapping (word_sub stackpointer (word 560),560)) - [(word pc,0xe014); (scalar,32)] /\ - nonoverlapping (res,64) (word pc,0xe014) /\ + [(word pc,0xee49); (scalar,32)] /\ + nonoverlapping (res,64) (word pc,0xee49) /\ nonoverlapping (res,64) (word_sub stackpointer (word 560),568) ==> ensures x86 (\s. bytes_loaded s (word pc) @@ -7149,7 +8258,7 @@ let WINDOWS_EDWARDS25519_SCALARMULBASE_SUBROUTINE_CORRECT = time prove REWRITE_TAC(!simulation_precanon_thms) THEN ENSURES_INIT_TAC "s0" THEN X86_STEPS_TAC WINDOWS_EDWARDS25519_SCALARMULBASE_EXEC (1--5) THEN RULE_ASSUM_TAC(REWRITE_RULE - [ARITH_RULE `pc + 0x2234 = (pc + 16) + 0x2224`]) THEN + [ARITH_RULE `pc + 0x3089 = (pc + 16) + 0x3079`]) THEN X86_SUBROUTINE_SIM_TAC (windows_edwards25519_scalarmulbase_mc, WINDOWS_EDWARDS25519_SCALARMULBASE_EXEC, diff --git a/x86/proofs/edwards25519_scalarmulbase_alt.ml b/x86/proofs/edwards25519_scalarmulbase_alt.ml index dc0b900f..b0570c57 100644 --- a/x86/proofs/edwards25519_scalarmulbase_alt.ml +++ b/x86/proofs/edwards25519_scalarmulbase_alt.ml @@ -8,7 +8,7 @@ (* ========================================================================= *) needs "x86/proofs/base.ml";; -needs "x86/proofs/bignum_modinv.ml";; +needs "x86/proofs/bignum_inv_p25519.ml";; needs "common/ecencoding.ml";; needs "EC/edwards25519.ml";; @@ -23,7 +23,7 @@ prioritize_num();; (* so we manually split that off to avoid confusing the decoder. *) (* ------------------------------------------------------------------------- *) -(**** print_coda_from_elf (-1) "x86/curve25519/edwards25519_scalarmulbase_alt.o";; +(**** print_coda_from_elf 0x3177 "x86/curve25519/edwards25519_scalarmulbase_alt.o";; ****) let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = @@ -83,86 +83,86 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = (* BTR (% r11) (Imm8 (word 59)) *) 0x4c; 0x89; 0x5c; 0x24; 0x18; (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) - 0x4c; 0x8d; 0x15; 0x94; 0x22; 0x00; 0x00; - (* LEA (% r10) (Riprel (word 8852)) *) - 0x4c; 0x8d; 0x1d; 0xed; 0x22; 0x00; 0x00; - (* LEA (% r11) (Riprel (word 8941)) *) + 0x4c; 0x8d; 0x15; 0xc9; 0x30; 0x00; 0x00; + (* LEA (% r10) (Riprel (word 12489)) *) + 0x4c; 0x8d; 0x1d; 0x22; 0x31; 0x00; 0x00; + (* LEA (% r11) (Riprel (word 12578)) *) 0x49; 0x8b; 0x02; (* MOV (% rax) (Memop Quadword (%% (r10,0))) *) 0x49; 0x8b; 0x0b; (* MOV (% rcx) (Memop Quadword (%% (r11,0))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,128))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% rax) *) 0x49; 0x8b; 0x42; 0x08; (* MOV (% rax) (Memop Quadword (%% (r10,8))) *) 0x49; 0x8b; 0x4b; 0x08; (* MOV (% rcx) (Memop Quadword (%% (r11,8))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,136))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% rax) *) 0x49; 0x8b; 0x42; 0x10; (* MOV (% rax) (Memop Quadword (%% (r10,16))) *) 0x49; 0x8b; 0x4b; 0x10; (* MOV (% rcx) (Memop Quadword (%% (r11,16))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,144))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% rax) *) 0x49; 0x8b; 0x42; 0x18; (* MOV (% rax) (Memop Quadword (%% (r10,24))) *) 0x49; 0x8b; 0x4b; 0x18; (* MOV (% rcx) (Memop Quadword (%% (r11,24))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,152))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% rax) *) 0x49; 0x8b; 0x42; 0x20; (* MOV (% rax) (Memop Quadword (%% (r10,32))) *) 0x49; 0x8b; 0x4b; 0x20; (* MOV (% rcx) (Memop Quadword (%% (r11,32))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,160))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% rax) *) 0x49; 0x8b; 0x42; 0x28; (* MOV (% rax) (Memop Quadword (%% (r10,40))) *) 0x49; 0x8b; 0x4b; 0x28; (* MOV (% rcx) (Memop Quadword (%% (r11,40))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,168))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% rax) *) 0x49; 0x8b; 0x42; 0x30; (* MOV (% rax) (Memop Quadword (%% (r10,48))) *) 0x49; 0x8b; 0x4b; 0x30; (* MOV (% rcx) (Memop Quadword (%% (r11,48))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,176))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% rax) *) 0x49; 0x8b; 0x42; 0x38; (* MOV (% rax) (Memop Quadword (%% (r10,56))) *) 0x49; 0x8b; 0x4b; 0x38; (* MOV (% rcx) (Memop Quadword (%% (r11,56))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,184))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% rax) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,192))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% rax) *) 0xb8; 0x00; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 0)) *) - 0x48; 0x89; 0x84; 0x24; 0xc8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,200))) (% rax) *) - 0x48; 0x89; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,208))) (% rax) *) - 0x48; 0x89; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,216))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% rax) *) 0x49; 0x8b; 0x42; 0x40; (* MOV (% rax) (Memop Quadword (%% (r10,64))) *) 0x49; 0x8b; 0x4b; 0x40; (* MOV (% rcx) (Memop Quadword (%% (r11,64))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,224))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% rax) *) 0x49; 0x8b; 0x42; 0x48; (* MOV (% rax) (Memop Quadword (%% (r10,72))) *) 0x49; 0x8b; 0x4b; 0x48; (* MOV (% rcx) (Memop Quadword (%% (r11,72))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,232))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% rax) *) 0x49; 0x8b; 0x42; 0x50; (* MOV (% rax) (Memop Quadword (%% (r10,80))) *) 0x49; 0x8b; 0x4b; 0x50; (* MOV (% rcx) (Memop Quadword (%% (r11,80))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,240))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% rax) *) 0x49; 0x8b; 0x42; 0x58; (* MOV (% rax) (Memop Quadword (%% (r10,88))) *) 0x49; 0x8b; 0x4b; 0x58; (* MOV (% rcx) (Memop Quadword (%% (r11,88))) *) 0x48; 0x0f; 0x42; 0xc1; (* CMOVB (% rax) (% rcx) *) - 0x48; 0x89; 0x84; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,248))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% rax) *) 0x48; 0xc7; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; (* MOV (Memop Quadword (%% (rsp,456))) (Imm32 (word 0)) *) - 0x48; 0x8d; 0x05; 0x22; 0x22; 0x00; 0x00; - (* LEA (% rax) (Riprel (word 8738)) *) + 0x48; 0x8d; 0x05; 0x57; 0x30; 0x00; 0x00; + (* LEA (% rax) (Riprel (word 12375)) *) 0x48; 0x89; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; (* MOV (Memop Quadword (%% (rsp,480))) (% rax) *) 0x48; 0xc7; 0x84; 0x24; 0xd0; 0x01; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; @@ -489,18 +489,18 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = (* MOV (Memop Quadword (%% (rsp,112))) (% rcx) *) 0x48; 0x89; 0x54; 0x24; 0x78; (* MOV (Memop Quadword (%% (rsp,120))) (% rdx) *) - 0x4c; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,384))) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x4d; 0x01; 0xc0; (* ADD (% r8) (% r8) *) - 0x4c; 0x8b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,392))) *) 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) - 0x4c; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,400))) *) 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) - 0x4c; 0x8b; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; - (* MOV (% r11) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,408))) *) 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) 0xb8; 0x26; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 38)) *) @@ -509,63 +509,63 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) - 0x4c; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x4c; 0x8b; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,352))) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) - 0x4c; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* SUB (% r8) (Memop Quadword (%% (rsp,128))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,168))) *) - 0x4c; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* SBB (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x2b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,328))) *) 0xb9; 0x26; 0x00; 0x00; 0x00; (* MOV (% ecx) (Imm32 (word 38)) *) - 0x4c; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,176))) *) - 0x4c; 0x1b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; - (* SBB (% r10) (Memop Quadword (%% (rsp,144))) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,184))) *) - 0x48; 0x1b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; - (* SBB (% rax) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,368))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,376))) *) + 0x48; 0x1b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; + (* SBB (% rax) (Memop Quadword (%% (rsp,344))) *) 0x48; 0x0f; 0x43; 0xcb; (* CMOVAE (% rcx) (% rbx) *) 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) - 0x48; 0x89; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,312))) (% rax) *) - 0x4c; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x48; 0x89; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% rax) *) + 0x4c; 0x8b; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,352))) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x4c; 0x03; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* ADD (% r8) (Memop Quadword (%% (rsp,128))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,168))) *) - 0x4c; 0x13; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* ADC (% r9) (Memop Quadword (%% (rsp,136))) *) - 0x4c; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,176))) *) - 0x4c; 0x13; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; - (* ADC (% r10) (Memop Quadword (%% (rsp,144))) *) - 0x4c; 0x8b; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (% r11) (Memop Quadword (%% (rsp,184))) *) - 0x4c; 0x13; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; - (* ADC (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x03; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* ADD (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,368))) *) + 0x4c; 0x13; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,376))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,344))) *) 0xb8; 0x26; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 38)) *) 0x48; 0x0f; 0x43; 0xc1; (* CMOVAE (% rax) (% rcx) *) @@ -573,125 +573,125 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r11) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) 0x48; 0xf7; 0x64; 0x24; 0x60; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,96))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) 0x48; 0xf7; 0x64; 0x24; 0x68; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,104))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) - 0x48; 0x8b; 0x84; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) 0x48; 0xf7; 0x64; 0x24; 0x60; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,96))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) 0x48; 0xf7; 0x64; 0x24; 0x70; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,112))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) 0x48; 0xf7; 0x64; 0x24; 0x68; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,104))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) 0x48; 0xf7; 0x64; 0x24; 0x60; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,96))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) 0x48; 0xf7; 0x64; 0x24; 0x78; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,120))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x4d; 0x11; 0xed; (* ADC (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) 0x48; 0xf7; 0x64; 0x24; 0x70; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,112))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) 0x48; 0xf7; 0x64; 0x24; 0x68; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,104))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) 0x48; 0xf7; 0x64; 0x24; 0x60; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,96))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) 0x48; 0xf7; 0x64; 0x24; 0x78; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,120))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x4d; 0x11; 0xf6; (* ADC (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) 0x48; 0xf7; 0x64; 0x24; 0x70; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,112))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) 0x48; 0xf7; 0x64; 0x24; 0x68; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,104))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) 0x48; 0xf7; 0x64; 0x24; 0x78; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,120))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x4d; 0x11; 0xff; (* ADC (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) 0x48; 0xf7; 0x64; 0x24; 0x70; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,112))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) 0x48; 0xf7; 0x64; 0x24; 0x78; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,120))) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) @@ -733,125 +733,125 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,352))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,360))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,368))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,376))) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x4c; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r11) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) 0x48; 0xf7; 0x64; 0x24; 0x20; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,32))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) 0x48; 0xf7; 0x64; 0x24; 0x28; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,40))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) - 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,168))) *) 0x48; 0xf7; 0x64; 0x24; 0x20; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,32))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) 0x48; 0xf7; 0x64; 0x24; 0x30; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,48))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,168))) *) 0x48; 0xf7; 0x64; 0x24; 0x28; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,40))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,176))) *) 0x48; 0xf7; 0x64; 0x24; 0x20; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,32))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) 0x48; 0xf7; 0x64; 0x24; 0x38; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,56))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x4d; 0x11; 0xed; (* ADC (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,168))) *) 0x48; 0xf7; 0x64; 0x24; 0x30; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,48))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,176))) *) 0x48; 0xf7; 0x64; 0x24; 0x28; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,40))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,184))) *) 0x48; 0xf7; 0x64; 0x24; 0x20; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,32))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,168))) *) 0x48; 0xf7; 0x64; 0x24; 0x38; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,56))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x4d; 0x11; 0xf6; (* ADC (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,176))) *) 0x48; 0xf7; 0x64; 0x24; 0x30; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,48))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,184))) *) 0x48; 0xf7; 0x64; 0x24; 0x28; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,40))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,176))) *) 0x48; 0xf7; 0x64; 0x24; 0x38; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,56))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x4d; 0x11; 0xff; (* ADC (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,184))) *) 0x48; 0xf7; 0x64; 0x24; 0x30; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,48))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,184))) *) 0x48; 0xf7; 0x64; 0x24; 0x38; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,56))) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) @@ -893,125 +893,125 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,192))) *) 0x48; 0xf7; 0x64; 0x24; 0x40; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,64))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,320))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,192))) *) 0x48; 0xf7; 0x64; 0x24; 0x48; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,72))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) - 0x48; 0x8b; 0x84; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,200))) *) 0x48; 0xf7; 0x64; 0x24; 0x40; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,64))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,320))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,192))) *) 0x48; 0xf7; 0x64; 0x24; 0x50; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,80))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,200))) *) 0x48; 0xf7; 0x64; 0x24; 0x48; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,72))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,208))) *) 0x48; 0xf7; 0x64; 0x24; 0x40; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,64))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,320))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,192))) *) 0x48; 0xf7; 0x64; 0x24; 0x58; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,88))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x4d; 0x11; 0xed; (* ADC (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,200))) *) 0x48; 0xf7; 0x64; 0x24; 0x50; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,80))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,208))) *) 0x48; 0xf7; 0x64; 0x24; 0x48; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,72))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,216))) *) 0x48; 0xf7; 0x64; 0x24; 0x40; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,64))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,200))) *) 0x48; 0xf7; 0x64; 0x24; 0x58; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,88))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x4d; 0x11; 0xf6; (* ADC (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,208))) *) 0x48; 0xf7; 0x64; 0x24; 0x50; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,80))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,216))) *) 0x48; 0xf7; 0x64; 0x24; 0x48; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,72))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,208))) *) 0x48; 0xf7; 0x64; 0x24; 0x58; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,88))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x4d; 0x11; 0xff; (* ADC (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,216))) *) 0x48; 0xf7; 0x64; 0x24; 0x50; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,80))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,216))) *) 0x48; 0xf7; 0x64; 0x24; 0x58; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,88))) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) @@ -1053,127 +1053,127 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) - 0x4c; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,256))) *) + 0x4c; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r11) *) + 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,128))) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) - 0x4c; 0x2b; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; - (* SUB (% r8) (Memop Quadword (%% (rsp,352))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,264))) *) - 0x4c; 0x1b; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; - (* SBB (% r9) (Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x2b; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,232))) *) 0xb9; 0x26; 0x00; 0x00; 0x00; (* MOV (% ecx) (Imm32 (word 38)) *) - 0x4c; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,272))) *) - 0x4c; 0x1b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; - (* SBB (% r10) (Memop Quadword (%% (rsp,368))) *) - 0x48; 0x8b; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,280))) *) - 0x48; 0x1b; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; - (* SBB (% rax) (Memop Quadword (%% (rsp,376))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0x1b; 0x84; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* SBB (% rax) (Memop Quadword (%% (rsp,248))) *) 0x48; 0x0f; 0x43; 0xcb; (* CMOVAE (% rcx) (% rbx) *) 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x4c; 0x89; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,384))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,392))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,400))) (% r10) *) - 0x48; 0x89; 0x84; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,408))) (% rax) *) - 0x4c; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,256))) *) - 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x4c; 0x03; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; - (* ADD (% r8) (Memop Quadword (%% (rsp,352))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,264))) *) - 0x4c; 0x13; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; - (* ADC (% r9) (Memop Quadword (%% (rsp,360))) *) - 0x4c; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,272))) *) - 0x4c; 0x13; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; - (* ADC (% r10) (Memop Quadword (%% (rsp,368))) *) - 0x4c; 0x8b; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (% r11) (Memop Quadword (%% (rsp,280))) *) - 0x4c; 0x13; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; - (* ADC (% r11) (Memop Quadword (%% (rsp,376))) *) - 0xb8; 0x26; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 38)) *) - 0x48; 0x0f; 0x43; 0xc1; (* CMOVAE (% rax) (% rcx) *) - 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) - 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) - 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) - 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) - 0x4c; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% rax) *) + 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x4c; 0x03; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* ADD (% r8) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,232))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x13; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,240))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,248))) *) + 0xb8; 0x26; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 38)) *) + 0x48; 0x0f; 0x43; 0xc1; (* CMOVAE (% rax) (% rcx) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x4c; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,192))) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) - 0x4c; 0x2b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* SUB (% r8) (Memop Quadword (%% (rsp,288))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,328))) *) - 0x4c; 0x1b; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* SBB (% r9) (Memop Quadword (%% (rsp,296))) *) + 0x4c; 0x2b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,168))) *) 0xb9; 0x26; 0x00; 0x00; 0x00; (* MOV (% ecx) (Imm32 (word 38)) *) - 0x4c; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,336))) *) - 0x4c; 0x1b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* SBB (% r10) (Memop Quadword (%% (rsp,304))) *) - 0x48; 0x8b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,344))) *) - 0x48; 0x1b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; - (* SBB (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,216))) *) + 0x48; 0x1b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* SBB (% rax) (Memop Quadword (%% (rsp,184))) *) 0x48; 0x0f; 0x43; 0xcb; (* CMOVAE (% rcx) (% rbx) *) 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,416))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,424))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,432))) (% r10) *) - 0x48; 0x89; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,440))) (% rax) *) - 0x4c; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) + 0x48; 0x89; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% rax) *) + 0x4c; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,192))) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) - 0x4c; 0x03; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* ADD (% r8) (Memop Quadword (%% (rsp,288))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,328))) *) - 0x4c; 0x13; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* ADC (% r9) (Memop Quadword (%% (rsp,296))) *) - 0x4c; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,336))) *) - 0x4c; 0x13; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* ADC (% r10) (Memop Quadword (%% (rsp,304))) *) - 0x4c; 0x8b; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (% r11) (Memop Quadword (%% (rsp,344))) *) - 0x4c; 0x13; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; - (* ADC (% r11) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x03; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* ADD (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x13; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,184))) *) 0xb8; 0x26; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 38)) *) 0x48; 0x0f; 0x43; 0xc1; (* CMOVAE (% rax) (% rcx) *) @@ -1181,127 +1181,127 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,384))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,256))) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,256))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,128))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,384))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,264))) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,256))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,136))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) - 0x48; 0x8b; 0x84; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,392))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,256))) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,264))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,128))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,384))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,272))) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,256))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,144))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,392))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,264))) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,264))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,136))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,400))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,256))) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,272))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,128))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,384))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,280))) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,256))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,152))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x4d; 0x11; 0xed; (* ADC (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,392))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,272))) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,264))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,144))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,400))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,264))) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,272))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,136))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,408))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,256))) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,280))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,128))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,392))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,280))) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,264))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,152))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x4d; 0x11; 0xf6; (* ADC (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,400))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,272))) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,272))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,144))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,408))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,264))) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,280))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,136))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,400))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,280))) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,272))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,152))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x4d; 0x11; 0xff; (* ADC (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,408))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,272))) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,280))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,144))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,408))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,280))) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,280))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,152))) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) 0xbb; 0x26; 0x00; 0x00; 0x00; @@ -1341,127 +1341,127 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,192))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,200))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,208))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,216))) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,384))) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% r11) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,256))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,392))) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,264))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,384))) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,256))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,400))) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,272))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,392))) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,264))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,384))) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,256))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,408))) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,280))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x4d; 0x11; 0xed; (* ADC (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,400))) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,272))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,392))) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,264))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,384))) *) + 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,256))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,408))) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,280))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x4d; 0x11; 0xf6; (* ADC (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,400))) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,272))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,392))) *) + 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,264))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,408))) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,280))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x4d; 0x11; 0xff; (* ADC (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,400))) *) - 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) - 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) + 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,272))) *) + 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) + 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,408))) *) + 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0xf7; 0xa4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,280))) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) 0xbb; 0x26; 0x00; 0x00; 0x00; @@ -1501,127 +1501,127 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,256))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,288))) *) + 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) + 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,160))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,256))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,168))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) - 0x48; 0x8b; 0x84; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,264))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x84; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,160))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,256))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,176))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,264))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,168))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,272))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,160))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,256))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,184))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x4d; 0x11; 0xed; (* ADC (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,264))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,176))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,272))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,168))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,280))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,160))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,264))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,184))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x4d; 0x11; 0xf6; (* ADC (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,272))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,176))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,280))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,168))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,272))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,184))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x4d; 0x11; 0xff; (* ADC (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,280))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,176))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,280))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,184))) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) 0xbb; 0x26; 0x00; 0x00; 0x00; @@ -1661,127 +1661,127 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,288))) *) + 0x4c; 0x89; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% r11) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,160))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,168))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,160))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,176))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,168))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,160))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,416))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,184))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x4d; 0x11; 0xed; (* ADC (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,176))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,168))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,160))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,424))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,184))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x4d; 0x11; 0xf6; (* ADC (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,176))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,168))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,184))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x4d; 0x11; 0xff; (* ADC (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,176))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) - 0x48; 0xf7; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0x8b; 0x84; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,312))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,184))) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) 0xbb; 0x26; 0x00; 0x00; 0x00; @@ -1821,28 +1821,28 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) - 0x4c; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,224))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,232))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,240))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,248))) (% r11) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r11) *) 0x48; 0x83; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; 0x04; (* ADD (Memop Quadword (%% (rsp,456))) (Imm8 (word 4)) *) 0x48; 0x81; 0xbc; 0x24; 0xc8; 0x01; 0x00; 0x00; 0xfc; 0x00; 0x00; 0x00; (* CMP (Memop Quadword (%% (rsp,456))) (Imm32 (word 252)) *) 0x0f; 0x82; 0x38; 0xe9; 0xff; 0xff; (* JB (Imm32 (word 4294961464)) *) - 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (% r8) (Memop Quadword (%% (rsp,128))) *) - 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (% r9) (Memop Quadword (%% (rsp,136))) *) - 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (% r10) (Memop Quadword (%% (rsp,144))) *) - 0x4c; 0x8b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,344))) *) 0x49; 0xc7; 0xc4; 0xda; 0xff; 0xff; 0xff; (* MOV (% r12) (Imm32 (word 4294967258)) *) 0x4d; 0x29; 0xc4; (* SUB (% r12) (% r8) *) @@ -1863,573 +1863,1695 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x4d; 0x0f; 0x42; 0xcd; (* CMOVB (% r9) (% r13) *) 0x4d; 0x0f; 0x42; 0xd6; (* CMOVB (% r10) (% r14) *) 0x4d; 0x0f; 0x42; 0xdf; (* CMOVB (% r11) (% r15) *) - 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) - 0x48; 0xc7; 0xc7; 0x04; 0x00; 0x00; 0x00; - (* MOV (% rdi) (Imm32 (word 4)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,224)) *) - 0x48; 0x8d; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; - (* LEA (% rdx) (%% (rsp,192)) *) - 0x48; 0x8d; 0x0d; 0xc6; 0x09; 0x00; 0x00; - (* LEA (% rcx) (Riprel (word 2502)) *) - 0x4c; 0x8d; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* LEA (% r8) (%% (rsp,256)) *) - 0x48; 0x89; 0x74; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rsi) *) - 0x4c; 0x89; 0x44; 0x24; 0x38; - (* MOV (Memop Quadword (%% (rsp,56))) (% r8) *) - 0x48; 0x89; 0x4c; 0x24; 0x48; - (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) - 0x4d; 0x8d; 0x14; 0xf8; (* LEA (% r10) (%%% (r8,3,rdi)) *) - 0x4c; 0x89; 0x54; 0x24; 0x30; - (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) - 0x4d; 0x8d; 0x3c; 0xfa; (* LEA (% r15) (%%% (r10,3,rdi)) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4a; 0x8b; 0x04; 0xca; (* MOV (% rax) (Memop Quadword (%%% (rdx,3,r9))) *) - 0x4a; 0x8b; 0x1c; 0xc9; (* MOV (% rbx) (Memop Quadword (%%% (rcx,3,r9))) *) - 0x4b; 0x89; 0x04; 0xca; (* MOV (Memop Quadword (%%% (r10,3,r9))) (% rax) *) - 0x4b; 0x89; 0x1c; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rbx) *) - 0x4b; 0x89; 0x1c; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rbx) *) - 0x4e; 0x89; 0x1c; 0xce; (* MOV (Memop Quadword (%%% (rsi,3,r9))) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) - 0x49; 0x8b; 0x00; (* MOV (% rax) (Memop Quadword (%% (r8,0))) *) - 0x48; 0x89; 0xc3; (* MOV (% rbx) (% rax) *) - 0x48; 0xff; 0xcb; (* DEC (% rbx) *) - 0x49; 0x89; 0x18; (* MOV (Memop Quadword (%% (r8,0))) (% rbx) *) - 0x48; 0x89; 0xc5; (* MOV (% rbp) (% rax) *) - 0x49; 0x89; 0xc4; (* MOV (% r12) (% rax) *) - 0x48; 0xc1; 0xe5; 0x02; (* SHL (% rbp) (Imm8 (word 2)) *) - 0x49; 0x29; 0xec; (* SUB (% r12) (% rbp) *) - 0x49; 0x83; 0xf4; 0x02; (* XOR (% r12) (Imm8 (word 2)) *) - 0x4c; 0x89; 0xe5; (* MOV (% rbp) (% r12) *) - 0x48; 0x0f; 0xaf; 0xe8; (* IMUL (% rbp) (% rax) *) - 0xb8; 0x02; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 2)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x48; 0x83; 0xc5; 0x01; (* ADD (% rbp) (Imm8 (word 1)) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) - 0xb8; 0x01; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) - 0xb8; 0x01; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) + 0x48; 0x8d; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x80; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,384)) *) + 0x48; 0x89; 0xbc; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rdi) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x48; 0x8d; 0x48; 0xed; (* LEA (% rcx) (%% (rax,18446744073709551597)) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x89; 0x0c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rcx) *) + 0x48; 0x89; 0x44; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rax) *) + 0x48; 0x0f; 0xba; 0xf0; 0x3f; + (* BTR (% rax) (Imm8 (word 63)) *) + 0x48; 0x89; 0x44; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rax) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x8b; 0x4e; 0x08; (* MOV (% rcx) (Memop Quadword (%% (rsi,8))) *) + 0x4c; 0x8b; 0x46; 0x10; (* MOV (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x8b; 0x4e; 0x18; (* MOV (% r9) (Memop Quadword (%% (rsi,24))) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x4c; 0x89; 0x64; 0x24; 0x28; - (* MOV (Memop Quadword (%% (rsp,40))) (% r12) *) - 0x48; 0x89; 0xf8; (* MOV (% rax) (% rdi) *) - 0x48; 0xc1; 0xe0; 0x07; (* SHL (% rax) (Imm8 (word 7)) *) - 0x48; 0x89; 0x44; 0x24; 0x20; - (* MOV (Memop Quadword (%% (rsp,32))) (% rax) *) - 0x4c; 0x8b; 0x6c; 0x24; 0x20; - (* MOV (% r13) (Memop Quadword (%% (rsp,32))) *) - 0x49; 0x83; 0xc5; 0x3f; (* ADD (% r13) (Imm8 (word 63)) *) - 0x49; 0xc1; 0xed; 0x06; (* SHR (% r13) (Imm8 (word 6)) *) - 0x49; 0x39; 0xfd; (* CMP (% r13) (% rdi) *) - 0x4c; 0x0f; 0x43; 0xef; (* CMOVAE (% r13) (% rdi) *) - 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xed; (* XOR (% rbp) (% rbp) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4c; 0x8b; 0x44; 0x24; 0x30; - (* MOV (% r8) (Memop Quadword (%% (rsp,48))) *) - 0x4d; 0x8d; 0x3c; 0xf8; (* LEA (% r15) (%%% (r8,3,rdi)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x1c; 0xc8; (* MOV (% rbx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4d; 0x89; 0xda; (* MOV (% r10) (% r11) *) - 0x4d; 0x21; 0xe2; (* AND (% r10) (% r12) *) - 0x49; 0x21; 0xeb; (* AND (% r11) (% rbp) *) - 0x48; 0x89; 0xd8; (* MOV (% rax) (% rbx) *) - 0x48; 0x09; 0xc8; (* OR (% rax) (% rcx) *) - 0x48; 0xf7; 0xd8; (* NEG (% rax) *) - 0x4d; 0x0f; 0x42; 0xf2; (* CMOVB (% r14) (% r10) *) - 0x49; 0x0f; 0x42; 0xf3; (* CMOVB (% rsi) (% r11) *) - 0x4c; 0x0f; 0x42; 0xe3; (* CMOVB (% r12) (% rbx) *) - 0x48; 0x0f; 0x42; 0xe9; (* CMOVB (% rbp) (% rcx) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0xcb; (* JB (Imm8 (word 203)) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0x49; 0x0f; 0xba; 0xe9; 0x3f; + (* BTS (% r9) (Imm8 (word 63)) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x6b; 0xc0; 0x13; (* IMUL3 (% rax) (% rax,Imm8 (word 19)) *) + 0x48; 0x01; 0xc2; (* ADD (% rdx) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4d; 0x11; 0xd0; (* ADC (% r8) (% r10) *) + 0x4d; 0x11; 0xd1; (* ADC (% r9) (% r10) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x49; 0x0f; 0x42; 0xc2; (* CMOVB (% rax) (% r10) *) + 0x48; 0x29; 0xc2; (* SUB (% rdx) (% rax) *) + 0x4c; 0x19; 0xd1; (* SBB (% rcx) (% r10) *) + 0x4d; 0x19; 0xd0; (* SBB (% r8) (% r10) *) + 0x4d; 0x19; 0xd1; (* SBB (% r9) (% r10) *) + 0x49; 0x0f; 0xba; 0xf1; 0x3f; + (* BTR (% r9) (Imm8 (word 63)) *) + 0x48; 0x89; 0x54; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rdx) *) + 0x48; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r9) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x48; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rax) *) + 0x48; 0xb8; 0x99; 0x20; 0x02; 0x75; 0x23; 0x9e; 0xf9; 0xa0; + (* MOV (% rax) (Imm64 (word 11599476190393540761)) *) + 0x48; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rax) *) + 0x48; 0xb8; 0x95; 0x25; 0x13; 0x1d; 0x3f; 0x8f; 0xc6; 0xa8; + (* MOV (% rax) (Imm64 (word 12161565344994108821)) *) + 0x48; 0x89; 0x44; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rax) *) + 0x48; 0xb8; 0x42; 0x52; 0xac; 0x05; 0x38; 0x89; 0x6c; 0x6c; + (* MOV (% rax) (Imm64 (word 7812770327287321154)) *) + 0x48; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rax) *) + 0x48; 0xb8; 0x15; 0x06; 0x77; 0x41; 0xb2; 0x08; 0x65; 0x27; + (* MOV (% rax) (Imm64 (word 2838684701822486037)) *) + 0x48; 0x89; 0x44; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rax) *) + 0x48; 0xc7; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; 0x0a; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (Imm32 (word 10)) *) + 0x48; 0xc7; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (Imm32 (word 1)) *) + 0xe9; 0x07; 0x04; 0x00; 0x00; + (* JMP (Imm32 (word 1031)) *) + 0x4d; 0x89; 0xc1; (* MOV (% r9) (% r8) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xc8; (* XOR (% r8) (% r9) *) + 0x4d; 0x29; 0xc8; (* SUB (% r8) (% r9) *) + 0x4d; 0x89; 0xd3; (* MOV (% r11) (% r10) *) + 0x49; 0xc1; 0xfb; 0x3f; (* SAR (% r11) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xda; (* XOR (% r10) (% r11) *) + 0x4d; 0x29; 0xda; (* SUB (% r10) (% r11) *) + 0x4d; 0x89; 0xe5; (* MOV (% r13) (% r12) *) + 0x49; 0xc1; 0xfd; 0x3f; (* SAR (% r13) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xec; (* XOR (% r12) (% r13) *) + 0x4d; 0x29; 0xec; (* SUB (% r12) (% r13) *) + 0x4d; 0x89; 0xf7; (* MOV (% r15) (% r14) *) + 0x49; 0xc1; 0xff; 0x3f; (* SAR (% r15) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xfe; (* XOR (% r14) (% r15) *) + 0x4d; 0x29; 0xfe; (* SUB (% r14) (% r15) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x4c; 0x21; 0xc8; (* AND (% rax) (% r9) *) + 0x4c; 0x89; 0xd7; (* MOV (% rdi) (% r10) *) + 0x4c; 0x21; 0xdf; (* AND (% rdi) (% r11) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x89; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% rdi) *) 0x4c; 0x89; 0xe0; (* MOV (% rax) (% r12) *) - 0x48; 0x09; 0xe8; (* OR (% rax) (% rbp) *) - 0x48; 0x0f; 0xbd; 0xc8; (* BSR (% rcx) (% rax) *) - 0x48; 0x83; 0xf1; 0x3f; (* XOR (% rcx) (Imm8 (word 63)) *) - 0x4d; 0x0f; 0xa5; 0xf4; (* SHLD (% r12) (% r14) (% cl) *) - 0x48; 0x0f; 0xa5; 0xf5; (* SHLD (% rbp) (% rsi) (% cl) *) - 0x49; 0x8b; 0x00; (* MOV (% rax) (Memop Quadword (%% (r8,0))) *) - 0x49; 0x89; 0xc6; (* MOV (% r14) (% rax) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) + 0x4c; 0x21; 0xe8; (* AND (% rax) (% r13) *) + 0x4c; 0x89; 0xf6; (* MOV (% rsi) (% r14) *) + 0x4c; 0x21; 0xfe; (* AND (% rsi) (% r15) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x89; 0xb4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rsi) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x44; 0x24; 0x08; + (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x28; + (* MOV (% rax) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x0f; 0xac; 0xdf; 0x3b; + (* SHRD (% rdi) (% rbx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x3c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rdi) *) + 0x31; 0xff; (* XOR (% edi) (% edi) *) + 0x48; 0x8b; 0x44; 0x24; 0x08; + (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd7; (* ADC (% rdi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x28; + (* MOV (% rax) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd7; (* ADC (% rdi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xee; 0x3b; + (* SHRD (% rsi) (% rbp) (Imm8 (word 59)) *) + 0x48; 0x89; 0x74; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rsi) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xcb; 0x3b; + (* SHRD (% rbx) (% rcx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x5c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x48; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x0f; 0xac; 0xfd; 0x3b; + (* SHRD (% rbp) (% rdi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rbp) *) + 0x48; 0x8b; 0x44; 0x24; 0x18; + (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x48; 0x89; 0xc5; (* MOV (% rbp) (% rax) *) + 0x48; 0xc1; 0xfd; 0x3f; (* SAR (% rbp) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xc5; (* AND (% rbp) (% r8) *) + 0x48; 0xf7; 0xdd; (* NEG (% rbp) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x38; + (* MOV (% rax) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x48; 0x89; 0xc2; (* MOV (% rdx) (% rax) *) + 0x48; 0xc1; 0xfa; 0x3f; (* SAR (% rdx) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x48; 0x29; 0xd5; (* SUB (% rbp) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x0f; 0xac; 0xf1; 0x3b; + (* SHRD (% rcx) (% rsi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x4c; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) + 0x48; 0x0f; 0xac; 0xee; 0x3b; + (* SHRD (% rsi) (% rbp) (Imm8 (word 59)) *) + 0x48; 0x8b; 0x44; 0x24; 0x18; + (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) + 0x48; 0x89; 0x74; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rsi) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) 0x48; 0x89; 0xc6; (* MOV (% rsi) (% rax) *) - 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r10d) (Imm32 (word 1)) *) - 0x41; 0xbb; 0x00; 0x00; 0x00; 0x00; - (* MOV (% r11d) (Imm32 (word 0)) *) - 0xb9; 0x00; 0x00; 0x00; 0x00; - (* MOV (% ecx) (Imm32 (word 0)) *) - 0xba; 0x01; 0x00; 0x00; 0x00; - (* MOV (% edx) (Imm32 (word 1)) *) - 0x41; 0xb9; 0x3a; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 58)) *) - 0x48; 0x89; 0x7c; 0x24; 0x08; - (* MOV (Memop Quadword (%% (rsp,8))) (% rdi) *) - 0x4c; 0x89; 0x6c; 0x24; 0x10; - (* MOV (Memop Quadword (%% (rsp,16))) (% r13) *) - 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) - 0x4c; 0x89; 0x7c; 0x24; 0x18; - (* MOV (Memop Quadword (%% (rsp,24))) (% r15) *) - 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x48; 0xc1; 0xfe; 0x3f; (* SAR (% rsi) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xe6; (* AND (% rsi) (% r12) *) + 0x48; 0xf7; 0xde; (* NEG (% rsi) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x38; + (* MOV (% rax) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x48; 0x89; 0xc2; (* MOV (% rdx) (% rax) *) + 0x48; 0xc1; 0xfa; 0x3f; (* SAR (% rdx) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xf2; (* AND (% rdx) (% r14) *) + 0x48; 0x29; 0xd6; (* SUB (% rsi) (% rdx) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xdf; 0x3b; + (* SHRD (% rdi) (% rbx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x7c; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% rdi) *) + 0x48; 0x0f; 0xac; 0xf3; 0x3b; + (* SHRD (% rbx) (% rsi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% rbx) *) + 0x48; 0x8b; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rbp) (Memop Quadword (%% (rsp,136))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x89; 0x5c; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rbx) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x89; 0x6c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rbp) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) - 0x4d; 0x31; 0xc0; (* XOR (% r8) (% r8) *) - 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x49; 0x0f; 0xba; 0xe6; 0x00; - (* BT (% r14) (Imm8 (word 0)) *) - 0x48; 0x0f; 0x42; 0xc5; (* CMOVB (% rax) (% rbp) *) - 0x48; 0x0f; 0x42; 0xde; (* CMOVB (% rbx) (% rsi) *) - 0x4c; 0x0f; 0x42; 0xc1; (* CMOVB (% r8) (% rcx) *) - 0x4c; 0x0f; 0x42; 0xfa; (* CMOVB (% r15) (% rdx) *) - 0x4d; 0x89; 0xf5; (* MOV (% r13) (% r14) *) - 0x49; 0x29; 0xde; (* SUB (% r14) (% rbx) *) - 0x4c; 0x29; 0xeb; (* SUB (% rbx) (% r13) *) - 0x4c; 0x89; 0xe7; (* MOV (% rdi) (% r12) *) - 0x48; 0x29; 0xc7; (* SUB (% rdi) (% rax) *) - 0x49; 0x0f; 0x42; 0xec; (* CMOVB (% rbp) (% r12) *) - 0x4c; 0x8d; 0x67; 0xff; (* LEA (% r12) (%% (rdi,18446744073709551615)) *) - 0x4c; 0x0f; 0x42; 0xf3; (* CMOVB (% r14) (% rbx) *) - 0x49; 0x0f; 0x42; 0xf5; (* CMOVB (% rsi) (% r13) *) - 0x49; 0xf7; 0xd4; (* NOT (% r12) *) - 0x49; 0x0f; 0x42; 0xca; (* CMOVB (% rcx) (% r10) *) - 0x49; 0x0f; 0x42; 0xd3; (* CMOVB (% rdx) (% r11) *) - 0x4c; 0x0f; 0x43; 0xe7; (* CMOVAE (% r12) (% rdi) *) - 0x49; 0xd1; 0xee; (* SHR (% r14) (Imm8 (word 1)) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x89; 0x74; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rsi) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x89; 0x5c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rbx) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x89; 0x6c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rbp) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x4c; 0x89; 0xcb; (* MOV (% rbx) (% r9) *) + 0x4c; 0x21; 0xc3; (* AND (% rbx) (% r8) *) + 0x48; 0xf7; 0xdb; (* NEG (% rbx) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x48; 0x29; 0xd3; (* SUB (% rbx) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xda; (* ADC (% rdx) (% rbx) *) + 0x48; 0x89; 0xd3; (* MOV (% rbx) (% rdx) *) + 0x48; 0x0f; 0xa4; 0xca; 0x01; + (* SHLD (% rdx) (% rcx) (Imm8 (word 1)) *) + 0x48; 0xc1; 0xfb; 0x3f; (* SAR (% rbx) (Imm8 (word 63)) *) + 0x48; 0x01; 0xda; (* ADD (% rdx) (% rbx) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x48; 0xf7; 0xea; (* IMUL2 (% rdx,% rax) (% rdx) *) + 0x4c; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% r8) (Memop Quadword (%% (rsp,72))) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% r8) (Memop Quadword (%% (rsp,80))) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4c; 0x89; 0x44; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r8) *) + 0x48; 0x11; 0xd9; (* ADC (% rcx) (% rbx) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x48; 0x89; 0x4c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rcx) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x4c; 0x21; 0xe1; (* AND (% rcx) (% r12) *) + 0x48; 0xf7; 0xd9; (* NEG (% rcx) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x4c; 0x89; 0xfa; (* MOV (% rdx) (% r15) *) + 0x4c; 0x21; 0xf2; (* AND (% rdx) (% r14) *) + 0x48; 0x29; 0xd1; (* SUB (% rcx) (% rdx) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xca; (* ADC (% rdx) (% rcx) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x48; 0x0f; 0xa4; 0xf2; 0x01; + (* SHLD (% rdx) (% rsi) (Imm8 (word 1)) *) + 0x48; 0xc1; 0xf9; 0x3f; (* SAR (% rcx) (Imm8 (word 63)) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x48; 0x01; 0xca; (* ADD (% rdx) (% rcx) *) + 0x48; 0xf7; 0xea; (* IMUL2 (% rdx,% rax) (% rdx) *) + 0x4c; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% r8) (Memop Quadword (%% (rsp,96))) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% r8) (Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x44; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x48; 0x11; 0xce; (* ADC (% rsi) (% rcx) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x89; 0x74; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rsi) *) + 0x48; 0x8b; 0xb4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0x8b; 0x14; 0x24; (* MOV (% rdx) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x20; + (* MOV (% rcx) (Memop Quadword (%% (rsp,32))) *) + 0x48; 0x89; 0xd3; (* MOV (% rbx) (% rdx) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x48; 0x8d; 0x14; 0x03; (* LEA (% rdx) (%%% (rbx,0,rax)) *) + 0x48; 0x8d; 0x3c; 0x01; (* LEA (% rdi) (%%% (rcx,0,rax)) *) + 0x48; 0xc1; 0xe2; 0x16; (* SHL (% rdx) (Imm8 (word 22)) *) + 0x48; 0xc1; 0xe7; 0x16; (* SHL (% rdi) (Imm8 (word 22)) *) + 0x48; 0xc1; 0xfa; 0x2b; (* SAR (% rdx) (Imm8 (word 43)) *) + 0x48; 0xc1; 0xff; 0x2b; (* SAR (% rdi) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x48; 0x8d; 0x1c; 0x03; (* LEA (% rbx) (%%% (rbx,0,rax)) *) + 0x48; 0x8d; 0x0c; 0x01; (* LEA (% rcx) (%%% (rcx,0,rax)) *) + 0x48; 0xc1; 0xfb; 0x2a; (* SAR (% rbx) (Imm8 (word 42)) *) + 0x48; 0xc1; 0xf9; 0x2a; (* SAR (% rcx) (Imm8 (word 42)) *) + 0x48; 0x89; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rdx) *) + 0x48; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rbx) *) + 0x48; 0x89; 0xbc; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% rdi) *) + 0x48; 0x89; 0x8c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% rcx) *) + 0x4c; 0x8b; 0x24; 0x24; (* MOV (% r12) (Memop Quadword (%% (rsp,0))) *) + 0x49; 0x0f; 0xaf; 0xfc; (* IMUL (% rdi) (% r12) *) + 0x4c; 0x0f; 0xaf; 0xe2; (* IMUL (% r12) (% rdx) *) + 0x4c; 0x8b; 0x6c; 0x24; 0x20; + (* MOV (% r13) (Memop Quadword (%% (rsp,32))) *) + 0x49; 0x0f; 0xaf; 0xdd; (* IMUL (% rbx) (% r13) *) + 0x4c; 0x0f; 0xaf; 0xe9; (* IMUL (% r13) (% rcx) *) + 0x49; 0x01; 0xdc; (* ADD (% r12) (% rbx) *) + 0x49; 0x01; 0xfd; (* ADD (% r13) (% rdi) *) + 0x49; 0xc1; 0xfc; 0x14; (* SAR (% r12) (Imm8 (word 20)) *) + 0x49; 0xc1; 0xfd; 0x14; (* SAR (% r13) (Imm8 (word 20)) *) + 0x4c; 0x89; 0xe3; (* MOV (% rbx) (% r12) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x4c; 0x8d; 0x04; 0x03; (* LEA (% r8) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x14; 0x01; (* LEA (% r10) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xe0; 0x16; (* SHL (% r8) (Imm8 (word 22)) *) + 0x49; 0xc1; 0xe2; 0x16; (* SHL (% r10) (Imm8 (word 22)) *) + 0x49; 0xc1; 0xf8; 0x2b; (* SAR (% r8) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfa; 0x2b; (* SAR (% r10) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x4c; 0x8d; 0x3c; 0x03; (* LEA (% r15) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x1c; 0x01; (* LEA (% r11) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xff; 0x2a; (* SAR (% r15) (Imm8 (word 42)) *) + 0x49; 0xc1; 0xfb; 0x2a; (* SAR (% r11) (Imm8 (word 42)) *) + 0x4c; 0x89; 0xeb; (* MOV (% rbx) (% r13) *) + 0x4c; 0x89; 0xe1; (* MOV (% rcx) (% r12) *) + 0x4d; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% r8) *) + 0x49; 0x0f; 0xaf; 0xdf; (* IMUL (% rbx) (% r15) *) + 0x49; 0x01; 0xdc; (* ADD (% r12) (% rbx) *) + 0x4d; 0x0f; 0xaf; 0xeb; (* IMUL (% r13) (% r11) *) + 0x49; 0x0f; 0xaf; 0xca; (* IMUL (% rcx) (% r10) *) + 0x49; 0x01; 0xcd; (* ADD (% r13) (% rcx) *) + 0x49; 0xc1; 0xfc; 0x14; (* SAR (% r12) (Imm8 (word 20)) *) + 0x49; 0xc1; 0xfd; 0x14; (* SAR (% r13) (Imm8 (word 20)) *) + 0x4c; 0x89; 0xe3; (* MOV (% rbx) (% r12) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x49; 0x0f; 0xaf; 0xd7; (* IMUL (% rdx) (% r15) *) + 0x4c; 0x0f; 0xaf; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* IMUL (% r8) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x0f; 0xaf; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* IMUL (% r15) (Memop Quadword (%% (rsp,184))) *) + 0x4d; 0x01; 0xc7; (* ADD (% r15) (% r8) *) + 0x4c; 0x8d; 0x0c; 0x10; (* LEA (% r9) (%%% (rax,0,rdx)) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) + 0x49; 0x0f; 0xaf; 0xc2; (* IMUL (% rax) (% r10) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x49; 0x0f; 0xaf; 0xd3; (* IMUL (% rdx) (% r11) *) + 0x4c; 0x0f; 0xaf; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* IMUL (% r10) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x0f; 0xaf; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* IMUL (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x4d; 0x01; 0xd3; (* ADD (% r11) (% r10) *) + 0x4c; 0x8d; 0x2c; 0x10; (* LEA (% r13) (%%% (rax,0,rdx)) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x4c; 0x8d; 0x04; 0x03; (* LEA (% r8) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x24; 0x01; (* LEA (% r12) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xe0; 0x15; (* SHL (% r8) (Imm8 (word 21)) *) + 0x49; 0xc1; 0xe4; 0x15; (* SHL (% r12) (Imm8 (word 21)) *) + 0x49; 0xc1; 0xf8; 0x2b; (* SAR (% r8) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfc; 0x2b; (* SAR (% r12) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x4c; 0x8d; 0x14; 0x03; (* LEA (% r10) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x34; 0x01; (* LEA (% r14) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xfa; 0x2b; (* SAR (% r10) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfe; 0x2b; (* SAR (% r14) (Imm8 (word 43)) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x49; 0x0f; 0xaf; 0xd2; (* IMUL (% rdx) (% r10) *) + 0x4d; 0x0f; 0xaf; 0xc7; (* IMUL (% r8) (% r15) *) + 0x4d; 0x0f; 0xaf; 0xd3; (* IMUL (% r10) (% r11) *) 0x4d; 0x01; 0xc2; (* ADD (% r10) (% r8) *) - 0x4d; 0x01; 0xfb; (* ADD (% r11) (% r15) *) - 0x49; 0xd1; 0xec; (* SHR (% r12) (Imm8 (word 1)) *) - 0x48; 0x01; 0xc9; (* ADD (% rcx) (% rcx) *) - 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) - 0x49; 0xff; 0xc9; (* DEC (% r9) *) - 0x75; 0x9c; (* JNE (Imm8 (word 156)) *) - 0x48; 0x8b; 0x7c; 0x24; 0x08; - (* MOV (% rdi) (Memop Quadword (%% (rsp,8))) *) - 0x4c; 0x8b; 0x6c; 0x24; 0x10; - (* MOV (% r13) (Memop Quadword (%% (rsp,16))) *) - 0x4c; 0x8b; 0x04; 0x24; (* MOV (% r8) (Memop Quadword (%% (rsp,0))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x18; - (* MOV (% r15) (Memop Quadword (%% (rsp,24))) *) - 0x4c; 0x89; 0x14; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r10) *) - 0x4c; 0x89; 0x5c; 0x24; 0x08; - (* MOV (Memop Quadword (%% (rsp,8))) (% r11) *) - 0x48; 0x89; 0x4c; 0x24; 0x10; - (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) - 0x48; 0x89; 0x54; 0x24; 0x18; - (* MOV (Memop Quadword (%% (rsp,24))) (% rdx) *) - 0x4c; 0x8b; 0x44; 0x24; 0x38; - (* MOV (% r8) (Memop Quadword (%% (rsp,56))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x40; - (* MOV (% r15) (Memop Quadword (%% (rsp,64))) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x0c; 0xc8; (* MOV (% rcx) (Memop Quadword (%%% (r8,3,r9))) *) + 0x4c; 0x8d; 0x04; 0x10; (* LEA (% r8) (%%% (rax,0,rdx)) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x49; 0x0f; 0xaf; 0xc4; (* IMUL (% rax) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x49; 0x0f; 0xaf; 0xd6; (* IMUL (% rdx) (% r14) *) + 0x4d; 0x0f; 0xaf; 0xe7; (* IMUL (% r12) (% r15) *) + 0x4d; 0x0f; 0xaf; 0xf3; (* IMUL (% r14) (% r11) *) + 0x4d; 0x01; 0xe6; (* ADD (% r14) (% r12) *) + 0x4c; 0x8d; 0x24; 0x10; (* LEA (% r12) (%%% (rax,0,rdx)) *) + 0x48; 0x89; 0xb4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% rsi) *) + 0x48; 0xff; 0x8c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* DEC (Memop Quadword (%% (rsp,144))) *) + 0x0f; 0x85; 0xc1; 0xee; 0xff; 0xff; + (* JNE (Imm32 (word 4294962881)) *) 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) - 0x48; 0x8b; 0x44; 0x24; 0x10; - (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x8b; 0x44; 0x24; 0x08; - (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x48; 0x8b; 0x4c; 0x24; 0x20; + (* MOV (% rcx) (Memop Quadword (%% (rsp,32))) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x49; 0x0f; 0xaf; 0xca; (* IMUL (% rcx) (% r10) *) + 0x48; 0x01; 0xc8; (* ADD (% rax) (% rcx) *) + 0x48; 0xc1; 0xf8; 0x3f; (* SAR (% rax) (Imm8 (word 63)) *) + 0x4d; 0x89; 0xc1; (* MOV (% r9) (% r8) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xc8; (* XOR (% r8) (% r9) *) + 0x4d; 0x29; 0xc8; (* SUB (% r8) (% r9) *) + 0x49; 0x31; 0xc1; (* XOR (% r9) (% rax) *) + 0x4d; 0x89; 0xd3; (* MOV (% r11) (% r10) *) + 0x49; 0xc1; 0xfb; 0x3f; (* SAR (% r11) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xda; (* XOR (% r10) (% r11) *) + 0x4d; 0x29; 0xda; (* SUB (% r10) (% r11) *) + 0x49; 0x31; 0xc3; (* XOR (% r11) (% rax) *) + 0x4d; 0x89; 0xe5; (* MOV (% r13) (% r12) *) + 0x49; 0xc1; 0xfd; 0x3f; (* SAR (% r13) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xec; (* XOR (% r12) (% r13) *) + 0x4d; 0x29; 0xec; (* SUB (% r12) (% r13) *) + 0x49; 0x31; 0xc5; (* XOR (% r13) (% rax) *) + 0x4d; 0x89; 0xf7; (* MOV (% r15) (% r14) *) + 0x49; 0xc1; 0xff; 0x3f; (* SAR (% r15) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xfe; (* XOR (% r14) (% r15) *) + 0x4d; 0x29; 0xfe; (* SUB (% r14) (% r15) *) + 0x49; 0x31; 0xc7; (* XOR (% r15) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x4c; 0x21; 0xc8; (* AND (% rax) (% r9) *) + 0x4d; 0x89; 0xd4; (* MOV (% r12) (% r10) *) + 0x4d; 0x21; 0xdc; (* AND (% r12) (% r11) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) + 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) + 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) - 0x4d; 0x0f; 0xac; 0xf2; 0x3a; - (* SHRD (% r10) (% r14) (Imm8 (word 58)) *) - 0x4f; 0x89; 0x14; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% r10) *) - 0x4d; 0x89; 0xf2; (* MOV (% r10) (% r14) *) - 0x4d; 0x89; 0xe6; (* MOV (% r14) (% r12) *) - 0x48; 0x8b; 0x44; 0x24; 0x18; - (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) - 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) - 0x49; 0x0f; 0xac; 0xf3; 0x3a; - (* SHRD (% r11) (% rsi) (Imm8 (word 58)) *) - 0x4f; 0x89; 0x1c; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% r11) *) - 0x49; 0x89; 0xf3; (* MOV (% r11) (% rsi) *) - 0x48; 0x89; 0xee; (* MOV (% rsi) (% rbp) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0x93; (* JB (Imm8 (word 147)) *) - 0x4d; 0x0f; 0xa4; 0xd6; 0x06; - (* SHLD (% r14) (% r10) (Imm8 (word 6)) *) - 0x4c; 0x0f; 0xa4; 0xde; 0x06; - (* SHLD (% rsi) (% r11) (Imm8 (word 6)) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x48; - (* MOV (% r15) (Memop Quadword (%% (rsp,72))) *) - 0x49; 0x8b; 0x18; (* MOV (% rbx) (Memop Quadword (%% (r8,0))) *) - 0x4c; 0x8b; 0x64; 0x24; 0x28; - (* MOV (% r12) (Memop Quadword (%% (rsp,40))) *) - 0x4c; 0x0f; 0xaf; 0xe3; (* IMUL (% r12) (% rbx) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) - 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) - 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x41; 0xb9; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 1)) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x74; 0x24; (* JE (Imm8 (word 36)) *) - 0x4f; 0x13; 0x14; 0xc8; (* ADC (% r10) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x19; 0xdb; (* SBB (% rbx) (% rbx) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) - 0x48; 0x29; 0xda; (* SUB (% rdx) (% rbx) *) - 0x4c; 0x01; 0xd0; (* ADD (% rax) (% r10) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xdc; (* JNE (Imm8 (word 220)) *) - 0x4d; 0x11; 0xf2; (* ADC (% r10) (% r14) *) - 0x4d; 0x89; 0x54; 0xf8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,rdi,-- &8))) (% r10) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x1b; 0x04; 0xcf; (* SBB (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xf0; (* JNE (Imm8 (word 240)) *) - 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x49; 0xf7; 0xd2; (* NOT (% r10) *) - 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4c; 0x21; 0xd3; (* AND (% rbx) (% r10) *) - 0x48; 0xf7; 0xd9; (* NEG (% rcx) *) - 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) - 0x4c; 0x8b; 0x44; 0x24; 0x40; - (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) - 0x49; 0x8b; 0x18; (* MOV (% rbx) (Memop Quadword (%% (r8,0))) *) - 0x48; 0x8b; 0x6c; 0x24; 0x28; - (* MOV (% rbp) (Memop Quadword (%% (rsp,40))) *) - 0x48; 0x0f; 0xaf; 0xeb; (* IMUL (% rbp) (% rbx) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) - 0x48; 0xf7; 0xe5; (* MUL2 (% rdx,% rax) (% rbp) *) - 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x41; 0xb9; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 1)) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x74; 0x24; (* JE (Imm8 (word 36)) *) - 0x4f; 0x13; 0x1c; 0xc8; (* ADC (% r11) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x19; 0xdb; (* SBB (% rbx) (% rbx) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0xf7; 0xe5; (* MUL2 (% rdx,% rax) (% rbp) *) - 0x48; 0x29; 0xda; (* SUB (% rdx) (% rbx) *) - 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xdc; (* JNE (Imm8 (word 220)) *) - 0x49; 0x11; 0xf3; (* ADC (% r11) (% rsi) *) - 0x4d; 0x89; 0x5c; 0xf8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,rdi,-- &8))) (% r11) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x1b; 0x04; 0xcf; (* SBB (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xf0; (* JNE (Imm8 (word 240)) *) - 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xf7; 0xd3; (* NOT (% r11) *) - 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4c; 0x21; 0xdb; (* AND (% rbx) (% r11) *) - 0x48; 0xf7; 0xd9; (* NEG (% rcx) *) - 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) - 0x4c; 0x8b; 0x44; 0x24; 0x30; - (* MOV (% r8) (Memop Quadword (%% (rsp,48))) *) - 0x4d; 0x8d; 0x3c; 0xf8; (* LEA (% r15) (%%% (r8,3,rdi)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xed; (* XOR (% rbp) (% rbp) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4b; 0x8b; 0x0c; 0xc8; (* MOV (% rcx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x48; 0x8b; 0x44; 0x24; 0x10; - (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x8b; 0x44; 0x24; 0x08; - (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x4c; 0x29; 0xe2; (* SUB (% rdx) (% r12) *) - 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) - 0x49; 0x19; 0xd2; (* SBB (% r10) (% rdx) *) - 0x4d; 0x19; 0xe4; (* SBB (% r12) (% r12) *) - 0x4f; 0x89; 0x34; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% r14) *) - 0x4d; 0x89; 0xd6; (* MOV (% r14) (% r10) *) - 0x48; 0x8b; 0x44; 0x24; 0x18; - (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x48; 0x29; 0xea; (* SUB (% rdx) (% rbp) *) - 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) - 0x49; 0x19; 0xd3; (* SBB (% r11) (% rdx) *) - 0x48; 0x19; 0xed; (* SBB (% rbp) (% rbp) *) - 0x4b; 0x89; 0x34; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rsi) *) - 0x4c; 0x89; 0xde; (* MOV (% rsi) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0x97; (* JB (Imm8 (word 151)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4d; 0x89; 0xe2; (* MOV (% r10) (% r12) *) - 0x49; 0x89; 0xeb; (* MOV (% r11) (% rbp) *) - 0x4d; 0x31; 0xe6; (* XOR (% r14) (% r12) *) - 0x48; 0x31; 0xee; (* XOR (% rsi) (% rbp) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4c; 0x31; 0xe0; (* XOR (% rax) (% r12) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x83; 0xd0; 0x00; (* ADC (% rax) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x31; 0xe8; (* XOR (% rax) (% rbp) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x83; 0xd0; 0x00; (* ADC (% rax) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x4b; 0x89; 0x04; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0xce; (* JB (Imm8 (word 206)) *) - 0x4d; 0x29; 0xd6; (* SUB (% r14) (% r10) *) - 0x4c; 0x29; 0xde; (* SUB (% rsi) (% r11) *) - 0x4d; 0x89; 0xe9; (* MOV (% r9) (% r13) *) - 0x4b; 0x8b; 0x44; 0xc8; 0xf8; - (* MOV (% rax) (Memop Quadword (%%%% (r8,3,r9,-- &8))) *) - 0x49; 0x89; 0xc2; (* MOV (% r10) (% rax) *) - 0x4c; 0x0f; 0xac; 0xf0; 0x3a; - (* SHRD (% rax) (% r14) (Imm8 (word 58)) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x4d; 0x89; 0xd6; (* MOV (% r14) (% r10) *) - 0x4b; 0x8b; 0x44; 0xcf; 0xf8; - (* MOV (% rax) (Memop Quadword (%%%% (r15,3,r9,-- &8))) *) - 0x49; 0x89; 0xc3; (* MOV (% r11) (% rax) *) - 0x48; 0x0f; 0xac; 0xf0; 0x3a; - (* SHRD (% rax) (% rsi) (Imm8 (word 58)) *) - 0x4b; 0x89; 0x44; 0xcf; 0xf8; - (* MOV (Memop Quadword (%%%% (r15,3,r9,-- &8))) (% rax) *) - 0x4c; 0x89; 0xde; (* MOV (% rsi) (% r11) *) - 0x49; 0xff; 0xc9; (* DEC (% r9) *) - 0x75; 0xd1; (* JNE (Imm8 (word 209)) *) - 0x48; 0xf7; 0xd5; (* NOT (% rbp) *) - 0x48; 0x8b; 0x4c; 0x24; 0x48; - (* MOV (% rcx) (Memop Quadword (%% (rsp,72))) *) - 0x4c; 0x8b; 0x44; 0x24; 0x38; - (* MOV (% r8) (Memop Quadword (%% (rsp,56))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x40; - (* MOV (% r15) (Memop Quadword (%% (rsp,64))) *) - 0x4d; 0x89; 0xe2; (* MOV (% r10) (% r12) *) - 0x49; 0x89; 0xeb; (* MOV (% r11) (% rbp) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x48; 0x89; 0xea; (* MOV (% rdx) (% rbp) *) - 0x4a; 0x8b; 0x04; 0xc9; (* MOV (% rax) (Memop Quadword (%%% (rcx,3,r9))) *) - 0x48; 0x21; 0xc2; (* AND (% rdx) (% rax) *) - 0x4c; 0x21; 0xe0; (* AND (% rax) (% r12) *) - 0x4b; 0x8b; 0x1c; 0xc8; (* MOV (% rbx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4c; 0x31; 0xe3; (* XOR (% rbx) (% r12) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x11; 0xd8; (* ADC (% rax) (% rbx) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x31; 0xeb; (* XOR (% rbx) (% rbp) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x11; 0xda; (* ADC (% rdx) (% rbx) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x4b; 0x89; 0x14; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xc3; (* JB (Imm8 (word 195)) *) - 0x48; 0x83; 0x6c; 0x24; 0x20; 0x3a; - (* SUB (Memop Quadword (%% (rsp,32))) (Imm8 (word 58)) *) - 0x0f; 0x87; 0x8d; 0xfb; 0xff; 0xff; - (* JA (Imm32 (word 4294966157)) *) + 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x4d; 0x21; 0xc1; (* AND (% r9) (% r8) *) + 0x49; 0xf7; 0xd9; (* NEG (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x49; 0x29; 0xd1; (* SUB (% r9) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4c; 0x0f; 0xa4; 0xf8; 0x01; + (* SHLD (% rax) (% r15) (Imm8 (word 1)) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0xbb; 0x13; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 19)) *) + 0x4a; 0x8d; 0x44; 0x08; 0x01; + (* LEA (% rax) (%%%% (rax,0,r9,&1)) *) + 0x48; 0xf7; 0xeb; (* IMUL2 (% rdx,% rax) (% rbx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x4d; 0x11; 0xce; (* ADC (% r14) (% r9) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x48; 0x0f; 0x49; 0xdd; (* CMOVNS (% rbx) (% rbp) *) + 0x49; 0x29; 0xdc; (* SUB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x0f; 0xba; 0xf7; 0x3f; + (* BTR (% r15) (Imm8 (word 63)) *) + 0x48; 0x8b; 0xbc; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x89; 0x27; (* MOV (Memop Quadword (%% (rdi,0))) (% r12) *) + 0x4c; 0x89; 0x6f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r13) *) + 0x4c; 0x89; 0x77; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r14) *) + 0x4c; 0x89; 0x7f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r15) *) 0x48; 0x8b; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; (* MOV (% rbp) (Memop Quadword (%% (rsp,448))) *) - 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,320))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,416))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,320))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,424))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) - 0x48; 0x8b; 0x84; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,136))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,416))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,320))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,432))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,136))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,424))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,416))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,320))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,440))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x4d; 0x11; 0xed; (* ADC (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,136))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,432))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,424))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,152))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,416))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0x88; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,136))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,440))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x4d; 0x11; 0xf6; (* ADC (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,432))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,152))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,424))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,440))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x4d; 0x11; 0xff; (* ADC (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,152))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,432))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,152))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,440))) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) 0xbe; 0x26; 0x00; 0x00; 0x00; @@ -2484,119 +3606,119 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x4c; 0x89; 0x4d; 0x08; (* MOV (Memop Quadword (%% (rbp,8))) (% r9) *) 0x4c; 0x89; 0x55; 0x10; (* MOV (Memop Quadword (%% (rbp,16))) (% r10) *) 0x4c; 0x89; 0x5d; 0x18; (* MOV (Memop Quadword (%% (rbp,24))) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,416))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,424))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,168))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,360))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,416))) *) 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,432))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,168))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,360))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,424))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,176))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,368))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,416))) *) 0x49; 0x01; 0xc2; (* ADD (% r10) (% rax) *) 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,440))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x4d; 0x11; 0xed; (* ADC (% r13) (% r13) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,168))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,360))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,432))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,176))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,368))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,424))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,184))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,224))) *) + 0x48; 0x8b; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,376))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,416))) *) 0x49; 0x01; 0xc3; (* ADD (% r11) (% rax) *) 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) 0x49; 0x83; 0xd5; 0x00; (* ADC (% r13) (Imm8 (word 0)) *) 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,168))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,360))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,440))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x4d; 0x11; 0xf6; (* ADC (% r14) (% r14) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,176))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,368))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,432))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,184))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x8b; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,376))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,424))) *) 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) 0x49; 0x83; 0xd6; 0x00; (* ADC (% r14) (Imm8 (word 0)) *) 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,176))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,368))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,440))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x4d; 0x11; 0xff; (* ADC (% r15) (% r15) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,184))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x8b; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,376))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,432))) *) 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) - 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; - (* MOV (% rax) (Memop Quadword (%% (rsp,184))) *) - 0x48; 0xf7; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x8b; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,376))) *) + 0x48; 0xf7; 0xa4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rsp,440))) *) 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) 0xbe; 0x26; 0x00; 0x00; 0x00; @@ -2661,505 +3783,502 @@ let edwards25519_scalarmulbase_alt_mc,edwards25519_scalarmulbase_alt_data = 0x5b; (* POP (% rbx) *) 0xc3 (* RET *) ] -[237; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 127; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; - 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; +[0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 0; 0; 0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; - 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 231; - 32; 114; 124; 109; 148; 95; 82; 68; 84; 227; 241; 178; 176; 54; 70; 15; 174; - 146; 232; 112; 157; 110; 121; 177; 173; 55; 169; 95; 192; 222; 3; 21; 85; - 55; 198; 28; 39; 28; 109; 20; 79; 202; 164; 196; 136; 37; 70; 57; 252; 90; - 229; 254; 41; 17; 105; 245; 114; 132; 77; 120; 159; 148; 21; 73; 0; 173; - 175; 16; 229; 137; 189; 14; 134; 185; 115; 192; 8; 31; 77; 157; 175; 0; 45; - 139; 110; 113; 7; 20; 151; 133; 143; 246; 133; 214; 112; 62; 145; 64; 215; - 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; 138; 143; 104; 52; - 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; 59; 140; 245; 198; - 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; 66; 61; 100; 152; - 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; 122; 135; 5; 18; - 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; 67; 221; 203; 125; - 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; 180; 66; 96; 165; - 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; 110; 177; 107; 35; - 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; 60; 147; 252; 231; - 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; 225; 101; 154; - 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; 179; 168; 250; - 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; 132; 160; 15; 80; - 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; 252; 164; 232; 31; 97; 86; - 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; 243; 49; 129; - 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; 37; 175; 138; - 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; 244; 248; - 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; 98; 218; 53; - 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; 180; 185; - 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; 96; 86; - 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; 69; 116; - 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; 125; 244; - 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; 33; 3; - 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; 69; 57; - 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; 12; 157; - 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; 20; 0; - 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; 126; 74; - 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; 80; 141; - 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; 41; 133; - 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; 45; 167; - 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; 164; 140; - 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; 83; 69; - 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; 21; 119; - 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; 218; 104; - 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; 2; 103; - 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; 162; - 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; 111; - 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; 157; - 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; 210; - 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; 126; - 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; 154; - 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; 144; - 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; 88; - 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; 14; - 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; 226; - 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; 97; 96; - 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; 139; 120; - 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; 92; 124; - 144; 38; 243; 45; 62; 85; 202; 81; 200; 126; 179; 120; 72; 166; 203; 132; - 18; 167; 231; 209; 136; 50; 25; 228; 181; 230; 131; 136; 154; 90; 236; 16; - 242; 76; 246; 33; 144; 45; 165; 4; 45; 50; 156; 191; 198; 117; 51; 159; 193; - 185; 9; 11; 210; 66; 67; 58; 122; 88; 97; 254; 100; 170; 248; 28; 59; 20; - 171; 202; 138; 150; 125; 124; 134; 159; 41; 39; 9; 39; 142; 37; 84; 95; 117; - 9; 24; 234; 75; 211; 167; 208; 225; 38; 65; 55; 163; 70; 181; 33; 67; 131; - 136; 162; 88; 248; 79; 169; 60; 237; 19; 83; 86; 212; 14; 206; 250; 52; 191; - 181; 207; 61; 92; 245; 113; 179; 234; 201; 165; 60; 101; 10; 143; 33; 133; - 209; 69; 122; 10; 73; 53; 147; 4; 70; 120; 55; 21; 154; 246; 225; 49; 204; - 9; 234; 96; 0; 101; 233; 110; 248; 119; 21; 4; 126; 243; 103; 91; 206; 150; - 164; 178; 102; 150; 151; 86; 189; 216; 146; 84; 255; 208; 44; 89; 74; 41; - 236; 60; 80; 178; 172; 19; 8; 101; 67; 105; 86; 152; 7; 98; 38; 12; 219; 24; - 184; 74; 53; 110; 96; 217; 49; 92; 93; 199; 205; 168; 0; 79; 250; 130; 9; - 212; 226; 83; 70; 205; 43; 225; 23; 157; 182; 171; 29; 235; 249; 114; 86; - 252; 83; 232; 175; 53; 181; 112; 186; 109; 214; 150; 39; 117; 15; 172; 71; - 117; 114; 17; 148; 23; 53; 165; 50; 55; 132; 100; 223; 166; 68; 166; 211; - 221; 191; 15; 136; 89; 101; 59; 112; 165; 26; 58; 173; 64; 37; 133; 203; - 104; 100; 76; 142; 247; 179; 0; 9; 27; 101; 157; 103; 159; 27; 133; 10; 242; - 66; 51; 3; 97; 203; 8; 225; 163; 48; 139; 232; 127; 245; 1; 214; 20; 215; - 45; 237; 202; 58; 31; 55; 49; 173; 22; 200; 190; 15; 40; 237; 227; 239; 230; - 216; 91; 89; 217; 82; 245; 35; 198; 246; 114; 23; 231; 15; 60; 41; 30; 5; - 11; 3; 20; 67; 173; 188; 240; 251; 94; 0; 96; 213; 94; 12; 135; 209; 46; 15; - 183; 142; 160; 230; 132; 208; 51; 144; 31; 32; 112; 102; 123; 206; 225; 90; - 58; 76; 149; 250; 184; 220; 52; 164; 56; 65; 11; 132; 150; 108; 125; 246; - 12; 135; 44; 232; 123; 41; 116; 133; 56; 222; 90; 165; 98; 114; 178; 77; - 129; 124; 221; 160; 61; 201; 228; 117; 248; 186; 77; 41; 185; 113; 167; 130; - 50; 185; 96; 196; 198; 244; 183; 63; 214; 128; 129; 193; 102; 234; 61; 199; - 233; 109; 242; 248; 77; 160; 213; 4; 137; 71; 211; 66; 1; 177; 74; 174; 251; - 250; 152; 9; 93; 85; 99; 172; 200; 246; 4; 177; 144; 47; 65; 74; 172; 90; 8; - 41; 201; 58; 107; 50; 79; 198; 224; 225; 99; 230; 130; 178; 81; 85; 131; 75; - 26; 74; 245; 53; 107; 71; 194; 104; 159; 24; 254; 163; 157; 27; 52; 81; 127; - 189; 10; 13; 58; 96; 70; 174; 211; 225; 50; 201; 137; 128; 99; 189; 152; - 135; 57; 145; 37; 223; 53; 2; 186; 116; 210; 92; 20; 28; 67; 215; 243; 117; - 100; 56; 232; 50; 239; 217; 229; 106; 175; 139; 91; 54; 30; 104; 91; 56; - 182; 56; 82; 130; 225; 101; 125; 22; 193; 41; 73; 35; 232; 173; 119; 160; - 171; 236; 77; 152; 157; 56; 235; 25; 173; 119; 63; 56; 148; 215; 84; 41; - 126; 107; 236; 199; 122; 58; 124; 235; 58; 123; 199; 89; 207; 159; 9; 29; - 194; 92; 20; 72; 229; 215; 40; 204; 146; 193; 53; 69; 1; 126; 36; 72; 229; - 193; 231; 128; 238; 115; 41; 59; 116; 40; 95; 74; 98; 207; 92; 34; 37; 215; - 173; 211; 93; 44; 21; 178; 129; 51; 26; 145; 125; 248; 8; 91; 173; 159; 179; - 216; 59; 254; 153; 71; 107; 96; 5; 111; 98; 169; 123; 23; 146; 158; 254; - 159; 225; 202; 229; 13; 29; 231; 174; 152; 68; 16; 131; 45; 148; 174; 244; - 63; 200; 58; 83; 88; 46; 225; 77; 113; 131; 100; 27; 249; 73; 49; 67; 91; - 98; 191; 44; 90; 101; 220; 181; 173; 179; 39; 40; 99; 18; 132; 250; 135; - 216; 248; 73; 171; 145; 94; 137; 96; 24; 108; 248; 12; 237; 242; 236; 233; - 212; 223; 53; 7; 18; 6; 109; 180; 231; 107; 185; 4; 152; 160; 157; 188; 107; - 194; 109; 217; 47; 230; 226; 115; 94; 81; 170; 73; 84; 99; 91; 237; 58; 130; - 198; 11; 159; 196; 101; 168; 196; 209; 66; 91; 233; 31; 12; 133; 185; 21; - 211; 3; 111; 109; 215; 48; 29; 156; 47; 99; 14; 221; 204; 46; 21; 49; 137; - 118; 150; 182; 208; 81; 88; 122; 99; 168; 107; 183; 223; 82; 57; 239; 14; - 160; 73; 125; 211; 109; 199; 228; 6; 33; 23; 68; 68; 108; 105; 127; 141; - 146; 128; 214; 83; 251; 38; 63; 77; 105; 164; 158; 115; 180; 176; 75; 134; - 46; 17; 151; 198; 16; 222; 95; 190; 125; 39; 196; 147; 100; 162; 126; 173; - 25; 173; 79; 93; 38; 144; 69; 48; 70; 200; 223; 0; 14; 9; 254; 102; 237; - 171; 28; 230; 37; 5; 200; 88; 131; 160; 42; 166; 12; 71; 66; 32; 122; 227; - 74; 61; 106; 220; 237; 17; 59; 166; 211; 100; 116; 239; 6; 8; 85; 175; 155; - 191; 3; 4; 102; 88; 204; 40; 225; 19; 63; 126; 116; 89; 180; 236; 115; 88; - 111; 245; 104; 18; 204; 237; 61; 182; 160; 44; 226; 134; 69; 99; 120; 109; - 86; 52; 8; 193; 156; 159; 164; 55; 22; 81; 196; 155; 168; 213; 86; 142; 188; - 219; 210; 127; 127; 15; 236; 181; 28; 217; 53; 204; 94; 202; 91; 151; 51; - 208; 47; 90; 198; 133; 66; 5; 161; 195; 103; 22; 243; 42; 17; 100; 108; 88; - 238; 26; 115; 64; 226; 10; 104; 42; 178; 147; 71; 243; 165; 251; 20; 212; - 247; 133; 105; 22; 70; 215; 60; 87; 0; 200; 201; 132; 94; 62; 89; 30; 19; - 97; 123; 182; 242; 195; 47; 108; 82; 252; 131; 234; 156; 130; 20; 194; 149; - 221; 151; 132; 123; 67; 255; 167; 181; 78; 170; 48; 78; 116; 108; 139; 232; - 133; 60; 97; 93; 12; 158; 115; 129; 117; 95; 30; 199; 217; 47; 184; 236; - 113; 78; 47; 11; 231; 33; 227; 119; 164; 64; 185; 221; 86; 230; 128; 79; 29; - 206; 206; 86; 101; 191; 126; 123; 93; 83; 196; 59; 252; 5; 221; 222; 175; - 82; 174; 179; 184; 36; 207; 48; 59; 237; 140; 99; 149; 52; 149; 129; 190; - 169; 131; 188; 164; 51; 4; 31; 101; 92; 71; 103; 55; 55; 217; 173; 209; 64; - 253; 153; 186; 47; 39; 208; 244; 150; 111; 22; 7; 179; 174; 59; 240; 21; 82; - 240; 99; 67; 153; 249; 24; 59; 108; 165; 190; 31; 144; 101; 36; 20; 203; - 149; 64; 99; 53; 85; 193; 22; 64; 20; 18; 239; 96; 188; 16; 137; 12; 20; 56; - 158; 140; 124; 144; 48; 87; 144; 245; 107; 138; 91; 65; 225; 241; 120; 167; - 15; 126; 167; 195; 186; 247; 159; 64; 6; 80; 154; 162; 154; 184; 215; 82; - 111; 86; 90; 99; 122; 246; 28; 82; 2; 148; 82; 157; 10; 11; 238; 63; 81; - 102; 90; 223; 15; 92; 231; 152; 143; 206; 7; 225; 191; 136; 134; 97; 212; - 237; 44; 56; 113; 126; 10; 160; 63; 228; 94; 47; 119; 32; 103; 20; 177; 206; - 154; 7; 150; 177; 148; 248; 232; 74; 130; 172; 0; 77; 34; 248; 74; 196; 108; - 205; 247; 217; 83; 23; 0; 52; 219; 61; 150; 45; 35; 105; 60; 88; 56; 151; - 180; 218; 135; 222; 29; 133; 242; 145; 160; 249; 209; 215; 170; 182; 237; - 72; 160; 47; 254; 181; 18; 77; 227; 252; 150; 196; 251; 240; 113; 237; 91; - 243; 173; 107; 130; 185; 115; 97; 197; 40; 255; 97; 114; 4; 210; 111; 32; - 177; 111; 249; 118; 155; 116; 146; 30; 111; 173; 38; 124; 43; 223; 19; 137; - 75; 80; 35; 211; 102; 75; 195; 139; 28; 117; 192; 157; 64; 140; 184; 199; - 150; 7; 194; 147; 126; 111; 5; 174; 166; 174; 4; 246; 90; 31; 153; 156; 228; - 190; 241; 81; 35; 193; 102; 107; 255; 238; 181; 8; 168; 97; 81; 33; 224; 1; - 15; 193; 206; 15; 68; 30; 254; 73; 166; 88; 77; 100; 126; 119; 173; 49; 162; - 174; 252; 33; 210; 208; 127; 136; 90; 28; 68; 2; 243; 17; 197; 131; 113; - 170; 1; 73; 69; 78; 36; 196; 157; 210; 242; 61; 10; 222; 216; 147; 116; 14; - 2; 43; 77; 33; 12; 130; 126; 6; 200; 108; 10; 185; 234; 111; 22; 121; 55; - 65; 240; 248; 26; 140; 84; 183; 177; 8; 180; 153; 98; 36; 124; 122; 15; 206; - 57; 217; 6; 30; 249; 176; 96; 247; 19; 18; 109; 114; 123; 136; 187; 65; 216; - 73; 124; 86; 108; 128; 103; 146; 106; 30; 121; 202; 204; 4; 109; 6; 75; 57; - 204; 227; 69; 86; 159; 166; 210; 140; 120; 160; 134; 182; 149; 92; 210; 247; - 57; 170; 224; 128; 217; 151; 28; 181; 198; 82; 66; 56; 208; 53; 170; 85; - 205; 7; 147; 244; 67; 125; 98; 195; 138; 183; 207; 54; 189; 86; 84; 169; 20; - 13; 193; 25; 197; 42; 144; 250; 181; 148; 180; 116; 244; 234; 90; 122; 248; - 169; 130; 131; 175; 230; 148; 224; 155; 135; 177; 109; 234; 13; 171; 229; - 68; 115; 84; 191; 102; 170; 9; 67; 27; 143; 136; 88; 18; 218; 47; 75; 86; - 253; 179; 210; 135; 94; 221; 177; 131; 84; 136; 120; 44; 91; 122; 121; 168; - 214; 116; 235; 186; 21; 50; 23; 196; 250; 241; 92; 245; 126; 197; 5; 139; - 60; 90; 31; 0; 41; 251; 204; 234; 82; 135; 204; 215; 10; 207; 8; 52; 121; - 98; 19; 21; 82; 148; 61; 150; 25; 3; 23; 15; 235; 102; 148; 61; 136; 250; - 178; 51; 168; 120; 60; 0; 117; 167; 127; 58; 9; 190; 215; 22; 58; 230; 125; - 16; 229; 207; 50; 243; 154; 220; 255; 119; 163; 127; 103; 11; 68; 24; 191; - 213; 112; 3; 20; 163; 164; 25; 43; 37; 106; 134; 18; 169; 96; 68; 96; 233; - 184; 222; 211; 120; 119; 4; 216; 63; 127; 45; 94; 138; 191; 49; 30; 208; - 103; 62; 101; 123; 194; 6; 138; 3; 123; 243; 144; 105; 211; 213; 25; 217; - 158; 242; 185; 78; 219; 187; 174; 19; 82; 53; 145; 185; 76; 5; 234; 8; 199; - 86; 14; 38; 114; 127; 213; 222; 88; 119; 61; 65; 233; 173; 157; 231; 120; - 125; 230; 41; 151; 213; 249; 87; 242; 230; 167; 122; 227; 14; 145; 219; 89; - 156; 3; 158; 187; 91; 27; 161; 106; 139; 212; 15; 91; 38; 83; 109; 218; 136; - 169; 191; 147; 49; 130; 96; 137; 40; 126; 213; 97; 50; 201; 138; 215; 67; - 129; 92; 58; 45; 148; 242; 121; 233; 141; 200; 182; 37; 47; 218; 151; 105; - 1; 242; 172; 234; 167; 27; 37; 228; 180; 78; 239; 135; 79; 180; 9; 165; 125; - 106; 188; 27; 171; 144; 125; 254; 107; 1; 167; 131; 166; 204; 154; 109; 11; - 197; 242; 77; 95; 80; 144; 170; 53; 228; 204; 95; 13; 97; 107; 150; 255; - 152; 97; 68; 13; 161; 25; 151; 195; 179; 150; 244; 163; 7; 26; 50; 37; 78; - 143; 24; 170; 206; 17; 240; 27; 117; 167; 213; 152; 148; 125; 160; 216; 141; - 80; 31; 22; 237; 25; 202; 230; 220; 135; 214; 44; 10; 86; 77; 207; 100; 134; - 196; 104; 53; 127; 56; 58; 128; 34; 82; 233; 65; 135; 252; 83; 86; 89; 177; - 218; 59; 72; 73; 250; 52; 135; 20; 15; 120; 250; 224; 52; 5; 54; 112; 11; - 111; 16; 189; 7; 227; 227; 111; 119; 16; 34; 254; 160; 230; 221; 9; 193; - 134; 50; 246; 128; 218; 180; 10; 77; 207; 214; 224; 127; 48; 248; 69; 62; - 72; 130; 164; 157; 111; 174; 105; 82; 0; 5; 122; 135; 247; 156; 144; 82; - 112; 28; 212; 152; 78; 135; 226; 125; 238; 50; 96; 12; 126; 185; 233; 98; - 195; 20; 138; 163; 96; 106; 222; 220; 129; 87; 64; 168; 122; 170; 234; 213; - 125; 33; 176; 30; 142; 36; 208; 196; 183; 157; 82; 191; 116; 77; 225; 151; - 118; 224; 84; 35; 86; 60; 23; 155; 106; 30; 101; 73; 90; 121; 31; 194; 167; - 127; 200; 14; 140; 190; 185; 31; 223; 139; 130; 2; 10; 227; 248; 231; 186; - 0; 108; 79; 108; 173; 29; 153; 99; 73; 10; 246; 246; 93; 110; 138; 5; 7; - 127; 246; 49; 219; 196; 2; 235; 233; 43; 251; 188; 16; 137; 253; 37; 237; - 180; 221; 92; 92; 31; 19; 200; 70; 206; 155; 203; 160; 19; 28; 178; 51; 49; - 142; 125; 8; 248; 146; 6; 54; 247; 99; 113; 210; 55; 198; 220; 244; 99; 89; - 234; 101; 32; 230; 164; 37; 217; 96; 193; 90; 46; 247; 155; 101; 91; 140; - 227; 94; 176; 185; 175; 154; 199; 19; 26; 7; 78; 45; 157; 191; 10; 41; 51; - 233; 109; 110; 238; 142; 23; 151; 16; 174; 23; 171; 59; 28; 176; 183; 202; - 199; 22; 178; 154; 28; 204; 195; 187; 7; 116; 211; 101; 125; 213; 88; 74; - 80; 80; 71; 116; 82; 144; 41; 26; 19; 107; 96; 242; 9; 190; 70; 67; 116; 68; - 125; 232; 64; 37; 43; 181; 21; 212; 218; 72; 29; 62; 96; 59; 161; 24; 138; - 58; 124; 247; 189; 205; 47; 193; 40; 183; 78; 174; 145; 102; 124; 89; 76; - 35; 126; 200; 180; 133; 10; 61; 157; 136; 100; 231; 250; 74; 53; 12; 201; - 226; 218; 29; 158; 106; 12; 7; 30; 135; 10; 137; 137; 188; 75; 153; 181; 1; - 51; 96; 66; 221; 91; 58; 174; 107; 115; 60; 158; 213; 25; 226; 173; 97; 13; - 100; 212; 133; 38; 15; 48; 231; 62; 183; 214; 125; 158; 228; 85; 210; 245; - 172; 30; 11; 97; 92; 17; 22; 128; 202; 135; 225; 146; 93; 151; 153; 60; 194; - 37; 145; 151; 98; 87; 129; 19; 24; 117; 30; 132; 71; 121; 250; 67; 215; 70; - 156; 99; 89; 250; 198; 229; 116; 43; 5; 227; 29; 94; 6; 161; 48; 144; 184; - 207; 162; 198; 71; 125; 224; 214; 240; 142; 20; 208; 218; 63; 60; 111; 84; - 145; 154; 116; 62; 157; 87; 129; 187; 38; 16; 98; 236; 113; 128; 236; 201; - 52; 141; 245; 140; 20; 39; 240; 52; 121; 246; 146; 164; 70; 169; 10; 132; - 246; 190; 132; 153; 70; 84; 24; 97; 137; 42; 188; 161; 92; 212; 187; 93; - 189; 30; 250; 242; 63; 109; 117; 228; 154; 125; 47; 87; 226; 127; 72; 243; - 136; 187; 69; 195; 86; 141; 168; 96; 105; 109; 11; 209; 159; 185; 161; 174; - 78; 173; 235; 143; 39; 102; 57; 147; 140; 31; 104; 170; 177; 152; 12; 41; - 32; 156; 148; 33; 140; 82; 60; 157; 33; 145; 82; 17; 57; 123; 103; 156; 254; - 2; 221; 4; 65; 42; 66; 36; 17; 94; 191; 178; 114; 181; 58; 163; 152; 51; 12; - 250; 161; 102; 182; 82; 250; 1; 97; 203; 148; 213; 83; 175; 175; 0; 59; 134; - 44; 184; 106; 9; 219; 6; 78; 33; 129; 53; 79; 228; 12; 201; 182; 168; 33; - 245; 42; 158; 64; 42; 193; 36; 101; 129; 164; 252; 142; 164; 181; 101; 1; - 118; 106; 132; 160; 116; 164; 144; 241; 192; 124; 47; 205; 132; 249; 239; - 18; 143; 43; 170; 88; 6; 41; 94; 105; 184; 200; 254; 191; 217; 103; 27; 89; - 250; 155; 180; 128; 28; 13; 47; 49; 138; 236; 243; 171; 94; 81; 121; 89; - 136; 28; 240; 158; 192; 51; 112; 114; 203; 123; 143; 202; 199; 46; 224; 61; - 93; 181; 24; 159; 113; 179; 185; 153; 30; 100; 140; 161; 250; 229; 101; 228; - 237; 5; 159; 194; 54; 17; 8; 97; 139; 18; 48; 112; 134; 79; 155; 72; 239; - 146; 235; 58; 45; 16; 50; 210; 97; 168; 22; 97; 180; 83; 98; 225; 36; 170; - 11; 25; 231; 171; 126; 61; 191; 190; 108; 73; 186; 251; 245; 73; 212; 207; - 91; 138; 16; 154; 148; 48; 235; 115; 100; 188; 112; 221; 64; 220; 28; 13; - 124; 48; 193; 148; 194; 146; 116; 110; 250; 203; 109; 168; 4; 86; 46; 87; - 156; 30; 140; 98; 93; 21; 65; 71; 136; 197; 172; 134; 77; 138; 235; 99; 87; - 81; 246; 82; 163; 145; 91; 81; 103; 136; 194; 166; 161; 6; 182; 100; 23; - 124; 212; 209; 136; 114; 81; 139; 65; 224; 64; 17; 84; 114; 209; 246; 172; - 24; 96; 26; 3; 159; 198; 66; 39; 254; 137; 158; 152; 32; 127; 204; 45; 58; - 253; 119; 151; 73; 146; 216; 79; 165; 44; 124; 133; 50; 160; 227; 7; 210; - 100; 216; 121; 162; 41; 126; 166; 12; 29; 237; 3; 4; 46; 236; 234; 133; 139; - 39; 116; 22; 223; 43; 203; 122; 7; 220; 33; 86; 90; 244; 203; 97; 22; 76; - 10; 100; 211; 149; 5; 247; 80; 153; 11; 115; 82; 197; 78; 135; 53; 45; 75; - 201; 141; 111; 36; 152; 207; 200; 230; 197; 206; 53; 192; 22; 250; 70; 203; - 247; 204; 61; 48; 8; 67; 69; 215; 91; 194; 76; 178; 40; 149; 209; 154; 127; - 129; 193; 53; 99; 101; 84; 107; 127; 54; 114; 192; 79; 110; 182; 184; 102; - 131; 173; 128; 115; 0; 120; 58; 19; 42; 121; 231; 21; 33; 147; 196; 133; - 201; 221; 205; 189; 162; 137; 76; 198; 98; 215; 163; 173; 168; 61; 30; 157; - 44; 248; 103; 48; 18; 219; 183; 91; 190; 98; 202; 198; 103; 244; 97; 9; 238; - 82; 25; 33; 214; 33; 236; 4; 112; 71; 213; 155; 119; 96; 35; 24; 210; 224; - 240; 88; 109; 202; 13; 116; 11; 175; 240; 211; 245; 11; 183; 80; 247; 113; - 46; 227; 138; 244; 234; 79; 52; 189; 91; 165; 211; 78; 232; 96; 237; 209; - 80; 63; 155; 72; 237; 0; 229; 26; 38; 237; 42; 199; 6; 57; 247; 0; 225; 136; - 217; 143; 182; 154; 151; 1; 54; 243; 154; 5; 233; 245; 71; 109; 43; 191; - 120; 220; 83; 14; 122; 135; 113; 121; 191; 41; 8; 185; 49; 230; 23; 109; 99; - 68; 68; 94; 147; 104; 39; 24; 46; 197; 5; 77; 245; 74; 74; 90; 154; 45; 99; - 39; 206; 96; 178; 84; 81; 240; 31; 209; 112; 82; 249; 114; 142; 195; 109; - 216; 56; 193; 124; 38; 13; 205; 31; 96; 205; 12; 233; 41; 100; 145; 103; 43; - 219; 255; 234; 135; 209; 133; 130; 169; 100; 168; 208; 216; 187; 251; 180; - 165; 247; 99; 38; 2; 127; 242; 88; 182; 130; 226; 156; 217; 34; 43; 188; 59; - 88; 10; 60; 88; 82; 201; 23; 185; 243; 198; 228; 15; 184; 249; 63; 101; 12; - 60; 223; 188; 215; 167; 13; 155; 14; 214; 84; 171; 182; 238; 160; 67; 135; - 84; 74; 109; 164; 102; 105; 57; 186; 179; 43; 172; 138; 161; 17; 248; 107; - 178; 40; 86; 91; 104; 228; 102; 146; 155; 146; 157; 2; 119; 164; 112; 232; - 95; 135; 87; 35; 50; 198; 58; 143; 203; 251; 245; 236; 244; 212; 217; 32; - 182; 43; 56; 147; 132; 238; 141; 220; 159; 121; 76; 161; 234; 197; 80; 60; - 251; 242; 214; 139; 220; 14; 221; 160; 183; 199; 156; 167; 58; 198; 84; 26; - 159; 141; 44; 43; 3; 11; 174; 251; 103; 41; 96; 7; 225; 156; 111; 42; 194; - 225; 205; 177; 84; 16; 173; 223; 50; 235; 72; 2; 233; 168; 196; 234; 192; - 205; 172; 51; 123; 62; 95; 62; 150; 121; 252; 19; 71; 54; 114; 181; 224; 32; - 53; 6; 147; 150; 19; 254; 3; 234; 136; 124; 207; 127; 67; 188; 89; 201; 211; - 11; 196; 212; 247; 217; 222; 147; 248; 209; 84; 145; 105; 38; 117; 178; 180; - 117; 92; 93; 49; 165; 218; 54; 2; 45; 132; 203; 204; 142; 238; 95; 52; 163; - 200; 240; 34; 237; 219; 57; 125; 97; 90; 151; 115; 16; 218; 117; 99; 249; - 77; 2; 228; 112; 200; 48; 24; 26; 37; 211; 120; 28; 217; 140; 101; 72; 25; - 43; 144; 138; 67; 183; 41; 11; 177; 24; 126; 70; 62; 67; 244; 146; 243; 55; - 111; 24; 107; 86; 31; 161; 185; 25; 14; 98; 214; 209; 31; 138; 183; 15; 34; - 77; 201; 129; 163; 88; 66; 42; 54; 47; 235; 107; 43; 19; 217; 113; 144; 71; - 130; 65; 40; 173; 233; 38; 15; 93; 146; 236; 189; 201; 30; 185; 234; 222; - 242; 138; 244; 200; 91; 230; 75; 40; 112; 110; 163; 235; 127; 72; 120; 52; - 206; 216; 29; 0; 19; 63; 95; 137; 196; 48; 75; 45; 177; 79; 147; 43; 10; - 127; 57; 77; 36; 108; 5; 52; 98; 194; 87; 162; 251; 80; 29; 139; 103; 176; - 222; 58; 130; 212; 123; 245; 138; 83; 166; 110; 220; 176; 194; 62; 167; 29; - 53; 198; 238; 101; 86; 16; 178; 191; 67; 9; 224; 62; 219; 194; 10; 128; 32; - 135; 1; 114; 73; 103; 134; 189; 115; 97; 93; 171; 38; 56; 73; 32; 171; 194; - 9; 178; 32; 75; 179; 127; 192; 42; 52; 158; 84; 147; 61; 55; 33; 8; 34; 216; - 2; 103; 245; 209; 172; 112; 45; 38; 188; 132; 199; 202; 251; 253; 201; 146; - 122; 137; 50; 189; 22; 69; 169; 204; 31; 40; 4; 66; 65; 170; 101; 141; 68; - 98; 93; 165; 22; 178; 183; 195; 89; 216; 44; 97; 78; 198; 44; 153; 73; 222; - 1; 248; 112; 234; 27; 189; 101; 138; 226; 73; 254; 192; 183; 239; 27; 74; - 174; 178; 177; 205; 6; 99; 168; 9; 42; 92; 38; 205; 192; 122; 59; 236; 188; - 1; 140; 67; 238; 43; 130; 59; 199; 251; 192; 37; 181; 12; 83; 233; 63; 149; - 193; 52; 144; 81; 72; 91; 15; 154; 224; 97; 194; 92; 38; 167; 57; 237; 34; - 79; 78; 213; 240; 10; 21; 8; 86; 30; 233; 170; 162; 117; 232; 218; 237; 233; - 178; 33; 244; 146; 233; 125; 107; 29; 83; 188; 49; 113; 249; 128; 169; 77; - 19; 61; 223; 167; 34; 26; 34; 209; 184; 79; 122; 216; 214; 170; 53; 32; 212; - 247; 61; 94; 18; 26; 106; 204; 237; 20; 42; 78; 206; 207; 82; 7; 238; 72; - 223; 183; 8; 236; 6; 243; 250; 255; 195; 196; 89; 84; 185; 42; 11; 113; 5; - 141; 163; 62; 150; 250; 37; 29; 22; 60; 67; 120; 4; 87; 140; 26; 35; 157; - 67; 129; 194; 14; 39; 181; 183; 159; 7; 217; 227; 234; 153; 170; 219; 217; - 3; 43; 108; 37; 245; 3; 44; 125; 164; 83; 123; 117; 24; 15; 121; 121; 88; - 12; 207; 48; 1; 123; 48; 249; 247; 126; 37; 119; 61; 144; 49; 175; 187; 150; - 189; 189; 104; 148; 105; 207; 254; 218; 244; 70; 47; 31; 189; 247; 214; 127; - 164; 20; 1; 239; 124; 127; 179; 71; 74; 218; 253; 31; 211; 133; 87; 144; - 115; 164; 25; 82; 82; 72; 25; 169; 106; 230; 61; 221; 216; 204; 210; 192; - 47; 194; 100; 80; 72; 47; 234; 253; 52; 102; 36; 72; 155; 58; 46; 74; 108; - 78; 28; 62; 41; 225; 18; 81; 146; 75; 19; 110; 55; 160; 93; 161; 220; 181; - 120; 55; 112; 17; 49; 28; 70; 175; 137; 69; 176; 35; 40; 3; 127; 68; 92; 96; - 91; 137; 124; 196; 32; 89; 128; 101; 185; 204; 143; 59; 146; 12; 16; 240; - 231; 119; 239; 226; 2; 101; 37; 1; 0; 238; 179; 174; 168; 206; 109; 167; 36; - 76; 240; 231; 240; 198; 254; 233; 59; 98; 73; 227; 117; 158; 87; 106; 134; - 26; 230; 29; 30; 22; 239; 66; 85; 213; 189; 90; 204; 244; 254; 18; 47; 64; - 199; 192; 223; 178; 34; 69; 10; 7; 164; 201; 64; 127; 110; 208; 16; 104; - 246; 207; 120; 65; 20; 207; 198; 144; 55; 164; 24; 37; 123; 96; 94; 24; 24; - 223; 108; 143; 29; 179; 88; 162; 88; 98; 195; 79; 167; 207; 53; 110; 29; - 230; 102; 79; 255; 179; 225; 247; 213; 205; 108; 171; 172; 103; 80; 20; 207; - 150; 165; 28; 67; 44; 160; 0; 228; 211; 174; 64; 45; 196; 227; 219; 38; 15; - 46; 128; 38; 69; 210; 104; 112; 69; 158; 19; 51; 31; 32; 81; 157; 3; 8; 107; - 127; 82; 253; 6; 0; 124; 1; 100; 73; 177; 24; 168; 164; 37; 46; 176; 14; 34; - 213; 117; 3; 70; 98; 136; 186; 124; 57; 178; 89; 89; 240; 147; 48; 193; 48; - 118; 121; 169; 233; 141; 161; 58; 226; 38; 94; 29; 114; 145; 212; 47; 34; - 58; 108; 110; 118; 32; 211; 57; 35; 231; 121; 19; 200; 251; 195; 21; 120; - 241; 42; 225; 221; 32; 148; 97; 166; 213; 253; 168; 133; 248; 192; 169; 255; - 82; 194; 225; 193; 34; 64; 27; 119; 167; 47; 58; 81; 134; 217; 125; 216; 8; - 207; 212; 249; 113; 155; 172; 245; 179; 131; 162; 30; 27; 195; 107; 208; - 118; 26; 151; 25; 146; 24; 26; 51; 198; 128; 79; 251; 69; 111; 22; 245; 207; - 117; 199; 97; 222; 199; 54; 156; 28; 217; 65; 144; 27; 232; 212; 227; 33; - 254; 189; 131; 107; 124; 22; 49; 175; 114; 117; 157; 58; 47; 81; 38; 158; - 74; 7; 104; 136; 226; 203; 91; 196; 247; 128; 17; 193; 193; 237; 132; 123; - 166; 73; 246; 159; 97; 201; 26; 104; 16; 75; 82; 66; 56; 43; 242; 135; 233; - 156; 238; 59; 52; 104; 80; 200; 80; 98; 74; 132; 113; 157; 252; 17; 177; 8; - 31; 52; 54; 36; 97; 141; 137; 78; 135; 219; 65; 157; 217; 32; 220; 7; 108; - 241; 165; 254; 9; 188; 155; 15; 208; 103; 44; 61; 121; 64; 255; 94; 158; 48; - 226; 235; 70; 56; 38; 45; 26; 227; 73; 99; 139; 53; 253; 211; 155; 0; 183; - 223; 157; 164; 107; 160; 163; 184; 241; 139; 127; 69; 4; 217; 120; 49; 170; - 34; 21; 56; 73; 97; 105; 83; 47; 56; 44; 16; 109; 45; 183; 154; 64; 254; - 218; 39; 242; 70; 182; 145; 51; 200; 232; 108; 48; 36; 5; 245; 112; 254; 69; - 140; 11; 12; 150; 166; 117; 72; 218; 32; 47; 14; 239; 118; 208; 104; 91; - 212; 143; 11; 61; 207; 81; 251; 7; 212; 146; 227; 160; 35; 22; 141; 66; 145; - 20; 149; 200; 32; 73; 242; 98; 162; 12; 99; 63; 200; 7; 240; 5; 184; 212; - 201; 245; 210; 69; 187; 111; 69; 34; 122; 181; 109; 159; 97; 22; 253; 8; - 163; 1; 68; 74; 79; 8; 172; 202; 165; 118; 195; 25; 34; 168; 125; 188; 209; - 67; 70; 222; 184; 222; 198; 56; 189; 96; 45; 89; 129; 29; 56; 76; 42; 236; - 190; 215; 51; 216; 237; 32; 204; 10; 131; 98; 145; 44; 129; 117; 223; 146; - 170; 71; 58; 233; 129; 74; 60; 51; 163; 103; 45; 112; 161; 200; 137; 47; - 154; 54; 74; 58; 13; 232; 141; 124; 29; 122; 19; 99; 21; 160; 237; 120; 138; - 0; 172; 188; 63; 176; 131; 180; 165; 179; 184; 44; 161; 144; 27; 203; 203; - 23; 228; 54; 78; 121; 17; 127; 170; 221; 179; 51; 7; 198; 91; 136; 8; 8; 81; - 63; 13; 2; 168; 230; 192; 29; 20; 36; 157; 238; 239; 63; 119; 60; 247; 89; - 157; 152; 207; 193; 137; 239; 241; 179; 95; 84; 46; 224; 66; 251; 93; 227; - 124; 180; 161; 71; 11; 18; 102; 87; 125; 21; 131; 189; 204; 93; 146; 145; - 148; 128; 204; 34; 83; 32; 161; 60; 228; 214; 144; 63; 24; 127; 229; 40; - 123; 118; 46; 222; 206; 20; 71; 26; 255; 183; 182; 184; 15; 186; 32; 219; - 161; 31; 81; 119; 182; 195; 50; 183; 137; 45; 240; 153; 192; 81; 43; 169; - 241; 165; 156; 72; 173; 117; 56; 79; 34; 171; 50; 73; 47; 118; 252; 199; 27; - 60; 76; 47; 247; 237; 192; 122; 232; 149; 168; 154; 170; 85; 107; 95; 129; - 0; 10; 173; 77; 39; 128; 54; 192; 238; 115; 238; 246; 19; 237; 121; 177; 11; - 17; 105; 109; 82; 198; 165; 12; 134; 3; 134; 195; 40; 137; 228; 245; 89; - 112; 253; 70; 20; 42; 114; 25; 136; 207; 168; 233; 159; 149; 208; 156; 169; - 117; 132; 80; 149; 169; 208; 197; 156; 176; 32; 51; 23; 172; 110; 149; 16; - 27; 51; 4; 207; 142; 98; 188; 221; 208; 169; 24; 177; 188; 152; 43; 128; - 180; 8; 52; 158; 68; 238; 4; 177; 166; 184; 38; 146; 8; 135; 93; 145; 199; - 69; 154; 52; 95; 104; 241; 204; 116; 92; 248; 172; 65; 155; 81; 82; 38; 8; - 129; 49; 115; 182; 71; 177; 173; 17; 237; 42; 201; 153; 15; 180; 236; 52; - 13; 215; 71; 122; 245; 164; 67; 204; 203; 196; 160; 96; 169; 190; 119; 54; - 202; 102; 92; 119; 237; 245; 248; 47; 117; 161; 122; 161; 192; 253; 1; 14; - 2; 217; 222; 17; 4; 231; 239; 202; 9; 120; 14; 137; 108; 140; 14; 227; 109; - 41; 40; 135; 201; 177; 174; 146; 163; 210; 92; 76; 31; 83; 113; 87; 209; 99; - 66; 25; 183; 147; 234; 59; 176; 149; 31; 71; 211; 171; 19; 51; 212; 215; 82; - 5; 123; 63; 126; 225; 226; 112; 147; 189; 236; 91; 14; 178; 29; 15; 18; 123; - 122; 45; 80; 134; 61; 251; 210; 23; 82; 147; 166; 80; 68; 216; 100; 181; 93; - 215; 14; 166; 200; 98; 169; 125; 170; 54; 135; 49; 91; 248; 208; 0; 253; - 132; 124; 119; 46; 20; 139; 151; 98; 192; 168; 5; 71; 100; 2; 244; 199; 18; - 230; 231; 27; 213; 122; 166; 51; 106; 221; 152; 150; 69; 123; 47; 193; 33; - 118; 253; 30; 60; 117; 166; 245; 113; 86; 68; 167; 180; 192; 105; 17; 60; - 178; 5; 116; 82; 31; 151; 205; 199; 168; 81; 72; 199; 123; 56; 168; 169; 82; - 74; 77; 75; 137; 129; 47; 131; 184; 246; 18; 62; 217; 173; 56; 214; 27; 182; - 72; 133; 77; 24; 205; 246; 201; 214; 219; 98; 28; 63; 31; 12; 145; 145; 0; - 31; 143; 46; 44; 225; 242; 191; 224; 79; 223; 164; 56; 116; 146; 238; 10; - 86; 198; 96; 250; 200; 239; 172; 63; 40; 56; 99; 61; 105; 143; 20; 64; 62; - 173; 63; 114; 154; 235; 148; 225; 86; 38; 5; 47; 78; 79; 24; 253; 203; 77; - 47; 139; 225; 130; 196; 177; 141; 111; 64; 228; 30; 25; 127; 44; 13; 99; - 158; 112; 246; 63; 188; 1; 131; 191; 79; 196; 115; 251; 122; 78; 142; 125; - 120; 165; 143; 245; 232; 91; 61; 216; 80; 151; 24; 26; 193; 22; 57; 104; - 133; 8; 208; 6; 229; 239; 164; 105; 45; 1; 189; 100; 246; 120; 19; 175; 57; - 198; 23; 21; 54; 49; 33; 148; 101; 109; 182; 211; 180; 144; 207; 172; 192; - 96; 46; 115; 97; 229; 157; 5; 167; 186; 176; 198; 112; 120; 31; 61; 3; 228; - 70; 217; 38; 205; 97; 65; 88; 162; 124; 210; 114; 160; 177; 242; 187; 4; - 199; 222; 251; 89; 60; 57; 191; 30; 184; 98; 226; 206; 187; 141; 233; 137; - 181; 41; 48; 11; 189; 238; 2; 95; 172; 13; 166; 86; 135; 54; 97; 87; 220; - 171; 235; 106; 47; 224; 23; 125; 15; 206; 76; 45; 63; 25; 127; 240; 220; - 236; 137; 119; 74; 35; 32; 232; 197; 133; 123; 159; 182; 101; 135; 178; 186; - 104; 209; 139; 103; 240; 111; 155; 15; 51; 29; 124; 231; 112; 58; 124; 142; - 175; 176; 81; 109; 95; 58; 82; 178; 120; 113; 182; 13; 210; 118; 96; 209; - 30; 213; 249; 52; 28; 7; 112; 17; 228; 179; 32; 74; 42; 246; 102; 227; 255; - 60; 53; 130; 214; 124; 182; 250; 135; 216; 91; 164; 225; 11; 110; 59; 64; - 186; 50; 106; 132; 42; 0; 96; 110; 233; 18; 16; 146; 217; 67; 9; 220; 59; - 134; 200; 56; 40; 243; 244; 172; 104; 96; 205; 101; 166; 211; 227; 215; 60; - 24; 45; 217; 66; 217; 37; 96; 51; 157; 56; 89; 87; 255; 216; 44; 43; 59; 37; - 240; 62; 48; 80; 70; 74; 207; 176; 107; 209; 171; 119; 197; 21; 65; 107; 73; - 250; 157; 65; 171; 244; 138; 174; 207; 130; 18; 40; 168; 6; 166; 184; 220; - 33; 200; 159; 157; 140; 70; 4; 96; 92; 203; 163; 42; 212; 110; 9; 64; 37; - 156; 47; 238; 18; 76; 77; 91; 18; 171; 29; 163; 148; 129; 208; 195; 11; 186; - 49; 119; 190; 250; 0; 141; 154; 137; 24; 158; 98; 126; 96; 3; 130; 127; 217; - 243; 67; 55; 2; 204; 178; 139; 103; 111; 108; 191; 13; 132; 93; 139; 225; - 159; 48; 13; 56; 110; 112; 199; 101; 225; 185; 166; 45; 176; 110; 171; 32; - 174; 125; 153; 186; 187; 87; 221; 150; 193; 42; 35; 118; 66; 58; 250; 132; - 112; 138; 44; 67; 66; 75; 69; 229; 185; 223; 227; 25; 138; 137; 93; 228; 88; - 156; 33; 0; 159; 190; 209; 235; 109; 161; 206; 119; 241; 31; 203; 126; 68; - 219; 114; 193; 248; 59; 189; 45; 40; 198; 31; 196; 207; 95; 254; 21; 170; - 117; 192; 255; 172; 128; 249; 169; 225; 36; 232; 201; 112; 7; 253; 181; 181; - 69; 154; 217; 97; 207; 36; 121; 58; 27; 233; 132; 9; 134; 137; 62; 62; 48; - 25; 9; 48; 231; 30; 11; 80; 65; 253; 100; 242; 57; 156; 226; 231; 219; 23; - 52; 173; 167; 156; 19; 156; 43; 106; 55; 148; 189; 169; 123; 89; 147; 142; - 27; 233; 160; 64; 152; 136; 104; 52; 215; 18; 23; 225; 123; 9; 254; 171; 74; - 155; 209; 41; 25; 224; 223; 225; 252; 109; 164; 255; 241; 166; 44; 148; 8; - 201; 195; 78; 241; 53; 44; 39; 33; 198; 101; 221; 147; 49; 206; 248; 137; - 43; 231; 187; 192; 37; 161; 86; 51; 16; 77; 131; 254; 28; 46; 61; 169; 25; - 4; 114; 226; 156; 177; 10; 128; 249; 34; 203; 248; 158; 62; 138; 54; 90; 96; - 21; 71; 80; 165; 34; 192; 233; 227; 143; 36; 36; 95; 176; 72; 61; 85; 229; - 38; 118; 100; 205; 22; 244; 19; 172; 253; 110; 154; 221; 159; 2; 66; 65; 73; - 165; 52; 190; 206; 18; 185; 123; 243; 189; 135; 185; 100; 15; 100; 180; 202; - 152; 133; 211; 164; 113; 65; 140; 76; 201; 153; 170; 88; 39; 250; 7; 184; 0; - 176; 111; 111; 0; 35; 146; 83; 218; 173; 221; 145; 210; 251; 171; 209; 75; - 87; 250; 20; 130; 80; 75; 254; 214; 62; 21; 105; 2; 194; 196; 119; 29; 81; - 57; 103; 90; 166; 148; 175; 20; 44; 70; 38; 222; 203; 75; 167; 171; 111; - 236; 96; 249; 34; 214; 3; 208; 83; 187; 21; 26; 70; 101; 201; 243; 188; 136; - 40; 16; 178; 90; 58; 104; 108; 117; 118; 197; 39; 71; 180; 108; 200; 164; - 88; 119; 58; 118; 80; 174; 147; 246; 17; 129; 84; 166; 84; 253; 29; 223; 33; - 174; 29; 101; 94; 17; 243; 144; 140; 36; 18; 148; 244; 231; 141; 95; 209; - 159; 93; 127; 114; 99; 109; 211; 8; 20; 3; 51; 181; 199; 215; 239; 154; 55; - 106; 75; 226; 174; 204; 197; 143; 225; 169; 211; 190; 143; 79; 145; 53; 47; - 51; 30; 82; 215; 238; 42; 77; 36; 63; 21; 150; 46; 67; 40; 144; 58; 142; - 212; 22; 156; 46; 119; 186; 100; 225; 216; 152; 235; 71; 250; 135; 193; 59; - 12; 194; 134; 234; 21; 1; 71; 109; 37; 209; 70; 108; 203; 183; 138; 153; - 136; 1; 102; 58; 181; 50; 120; 215; 3; 186; 111; 144; 206; 129; 13; 69; 2; - 57; 69; 216; 42; 77; 174; 248; 29; 45; 219; 232; 142; 5; 24; 112; 30; 193; - 210; 199; 95; 153; 179; 170; 121; 202; 204; 36; 35; 109; 177; 83; 181; 224; - 202; 178; 102; 77; 38; 35; 118; 101; 202; 235; 51; 237; 186; 125; 200; 74; - 210; 240; 214; 190; 14; 3; 16; 85; 99; 247; 120; 127; 136; 42; 79; 45; 1; - 92; 231; 185; 35; 42; 234; 242; 225; 202; 81; 70; 151; 12; 202; 112; 93; - 103; 115; 50; 182; 47; 245; 3; 68; 134; 11; 37; 167; 11; 33; 100; 156; 2; - 253; 24; 13; 187; 2; 143; 41; 137; 33; 20; 45; 188; 150; 14; 37; 139; 230; - 248; 71; 131; 201; 113; 45; 3; 232; 47; 159; 123; 156; 109; 248; 134; 147; - 88; 99; 221; 164; 133; 58; 225; 118; 145; 105; 97; 87; 125; 170; 78; 149; - 17; 81; 46; 251; 189; 96; 251; 87; 27; 194; 50; 128; 7; 158; 49; 205; 35; - 120; 216; 197; 117; 119; 137; 193; 207; 196; 239; 247; 179; 10; 154; 18; - 251; 84; 72; 113; 195; 56; 114; 65; 157; 196; 18; 105; 55; 232; 255; 51; - 181; 80; 9; 209; 107; 29; 142; 29; 28; 134; 33; 16; 229; 2; 19; 56; 216; 34; - 240; 180; 202; 145; 99; 12; 32; 9; 37; 66; 149; 121; 131; 23; 160; 179; 9; - 63; 238; 213; 170; 143; 208; 109; 98; 159; 20; 112; 235; 238; 188; 0; 186; - 201; 68; 164; 160; 70; 178; 33; 20; 199; 167; 36; 140; 142; 58; 164; 74; - 245; 94; 240; 216; 64; 245; 193; 4; 220; 185; 62; 11; 12; 94; 186; 173; 227; - 156; 164; 72; 68; 80; 181; 42; 236; 93; 15; 111; 38; 39; 210; 46; 36; 8; - 213; 94; 65; 238; 36; 152; 21; 212; 104; 148; 124; 236; 123; 128; 63; 226; - 33; 181; 225; 186; 147; 112; 250; 58; 93; 28; 99; 172; 7; 220; 108; 140; - 223; 249; 113; 81; 97; 88; 176; 226; 115; 157; 216; 121; 160; 114; 93; 225; - 234; 180; 206; 244; 1; 115; 65; 44; 114; 214; 89; 231; 9; 100; 155; 114; - 191; 114; 207; 225; 116; 166; 105; 229; 33; 60; 235; 36; 10; 188; 35; 203; - 186; 78; 210; 103; 1; 57; 28; 63; 53; 186; 59; 142; 245; 39; 97; 67; 106; - 191; 77; 118; 71; 76; 80; 38; 86; 110; 229; 196; 187; 175; 93; 164; 225; - 170; 230; 46; 219; 7; 11; 18; 242; 162; 75; 5; 187; 215; 183; 137; 5; 177; - 174; 206; 185; 226; 190; 237; 192; 243; 200; 186; 232; 63; 105; 203; 18; - 113; 118; 64; 189; 76; 118; 129; 197; 41; 192; 60; 96; 11; 97; 93; 177; 92; - 130; 227; 136; 89; 141; 173; 240; 220; 19; 20; 182; 43; 135; 50; 24; 116; - 108; 236; 142; 123; 176; 124; 210; 44; 120; 64; 202; 228; 189; 103; 233; - 251; 35; 195; 249; 218; 158; 30; 212; 138; 74; 211; 155; 178; 77; 222; 110; - 98; 151; 4; 129; 114; 115; 107; 56; 252; 112; 229; 254; 50; 199; 140; 58; - 218; 65; 1; 139; 218; 89; 131; 150; 200; 10; 253; 95; 151; 85; 168; 50; 177; - 161; 9; 232; 110; 58; 134; 253; 252; 49; 187; 68; 148; 197; 72; 78; 62; 10; - 105; 227; 47; 37; 250; 136; 208; 103; 200; 41; 220; 46; 41; 115; 209; 56; - 30; 189; 19; 181; 73; 97; 105; 216; 76; 43; 211; 183; 170; 216; 129; 215; - 55; 89; 229; 148; 43; 18; 174; 39; 33; 203; 11; 176; 153; 64; 177; 207; 111; - 232; 65; 33; 197; 250; 29; 207; 181; 63; 34; 80; 68; 85; 111; 49; 37; 92; - 50; 172; 119; 145; 101; 215; 152; 11; 3; 189; 164; 136; 79; 182; 24; 208; - 30; 176; 166; 2; 184; 161; 223; 48; 54; 213; 59; 173; 66; 71; 135; 15; 136; - 212; 164; 197; 238; 108; 13; 249; 10; 217; 197; 205; 55; 122; 36; 106; 116; - 246; 154; 123; 43; 189; 184; 49; 213; 81; 91; 252; 55; 53; 9; 5; 80; 109; - 84; 147; 197; 37; 207; 47; 35; 73; 15; 180; 43; 20; 101; 163; 32; 237; 65; - 217; 120; 82; 216; 204; 110; 67; 120; 47; 210; 131; 174; 84; 34; 183; 205; - 191; 123; 46; 208; 34; 197; 226; 228; 240; 191; 81; 51; 30; 104; 69; 79; 3; - 131; 157; 181; 100; 139; 251; 14; 162; 31; 242; 113; 139; 47; 228; 80; 101; - 186; 149; 148; 36; 105; 43; 71; 213; 69; 142; 249; 158; 83; 117; 82; 32; - 166; 161; 182; 123; 110; 131; 142; 60; 65; 215; 33; 79; 170; 178; 92; 143; - 232; 85; 209; 86; 111; 225; 91; 52; 166; 75; 93; 226; 45; 63; 116; 174; 28; - 150; 216; 116; 208; 237; 99; 28; 238; 245; 24; 109; 248; 41; 237; 244; 231; - 91; 197; 189; 151; 8; 177; 58; 102; 121; 210; 186; 76; 205; 31; 215; 160; - 36; 144; 209; 128; 248; 138; 40; 251; 10; 194; 37; 197; 25; 100; 58; 95; 75; - 151; 163; 177; 51; 114; 0; 226; 239; 188; 127; 125; 1; 40; 107; 38; 106; 30; - 239; 250; 22; 159; 115; 213; 196; 104; 108; 134; 44; 118; 3; 27; 188; 47; - 138; 246; 141; 90; 183; 135; 94; 67; 117; 89; 148; 144; 194; 243; 197; 93; - 124; 205; 171; 5; 145; 42; 154; 162; 129; 199; 88; 48; 28; 66; 54; 29; 198; - 128; 215; 212; 216; 220; 150; 209; 156; 79; 104; 55; 123; 106; 216; 151; - 146; 25; 99; 122; 209; 26; 36; 88; 208; 208; 23; 12; 28; 92; 173; 156; 2; - 186; 7; 3; 122; 56; 132; 208; 205; 124; 23; 4; 38; 109; 44; 66; 166; 220; - 189; 64; 130; 148; 80; 61; 21; 174; 119; 198; 104; 251; 180; 193; 192; 169; - 83; 207; 208; 97; 237; 208; 139; 66; 147; 204; 96; 103; 24; 132; 12; 155; - 153; 42; 179; 26; 122; 0; 174; 205; 24; 218; 11; 98; 134; 236; 141; 168; 68; - 202; 144; 129; 132; 202; 147; 53; 167; 154; 132; 94; 154; 24; 19; 146; 205; - 250; 216; 101; 53; 195; 216; 212; 209; 187; 253; 83; 91; 84; 82; 140; 230; - 99; 45; 218; 8; 131; 57; 39; 19; 212; 94; 67; 40; 141; 195; 66; 201; 204; - 120; 50; 96; 243; 80; 189; 239; 3; 218; 121; 26; 171; 7; 187; 85; 51; 140; - 190; 174; 151; 149; 38; 83; 36; 112; 10; 76; 14; 161; 185; 222; 27; 125; - 213; 102; 88; 162; 15; 247; 218; 39; 205; 181; 217; 185; 255; 253; 51; 44; - 73; 69; 41; 44; 87; 190; 48; 205; 214; 69; 199; 127; 199; 251; 174; 186; + 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 231; 32; 114; + 124; 109; 148; 95; 82; 68; 84; 227; 241; 178; 176; 54; 70; 15; 174; 146; + 232; 112; 157; 110; 121; 177; 173; 55; 169; 95; 192; 222; 3; 21; 85; 55; + 198; 28; 39; 28; 109; 20; 79; 202; 164; 196; 136; 37; 70; 57; 252; 90; 229; + 254; 41; 17; 105; 245; 114; 132; 77; 120; 159; 148; 21; 73; 0; 173; 175; 16; + 229; 137; 189; 14; 134; 185; 115; 192; 8; 31; 77; 157; 175; 0; 45; 139; 110; + 113; 7; 20; 151; 133; 143; 246; 133; 214; 112; 62; 145; 64; 215; 5; 57; 16; + 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; 138; 143; 104; 52; 132; 193; + 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; 59; 140; 245; 198; 147; 188; + 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; 66; 61; 100; 152; 72; 11; 39; + 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; 122; 135; 5; 18; 201; 171; + 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; 67; 221; 203; 125; 27; 90; + 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; 180; 66; 96; 165; 153; 138; + 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; 110; 177; 107; 35; 158; 224; + 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; 60; 147; 252; 231; 36; 146; + 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; 225; 101; 154; 166; 90; 46; + 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; 179; 168; 250; 67; 120; 207; + 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; 132; 160; 15; 80; 115; 11; 165; + 62; 177; 245; 26; 112; 101; 210; 252; 164; 232; 31; 97; 86; 125; 186; 193; + 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; 243; 49; 129; 98; 218; 91; 85; + 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; 37; 175; 138; 75; 134; 232; + 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; 244; 248; 128; 154; 27; 78; + 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; 98; 218; 53; 28; 34; 35; 148; + 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; 180; 185; 18; 175; 38; 40; + 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; 96; 86; 113; 137; 126; 50; + 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; 69; 116; 76; 63; 147; 39; + 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; 125; 244; 198; 101; 103; + 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; 33; 3; 145; 14; 104; 9; + 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; 69; 57; 158; 110; 148; + 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; 12; 157; 127; 186; 214; + 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; 20; 0; 213; 135; 160; + 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; 126; 74; 21; 51; 187; + 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; 80; 141; 68; 236; 191; + 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; 41; 133; 130; 42; 129; + 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; 45; 167; 189; 27; 11; + 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; 164; 140; 125; 123; 182; + 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; 83; 69; 32; 231; 92; 8; + 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; 21; 119; 235; 238; 12; 58; + 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; 218; 104; 182; 101; 128; + 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; 2; 103; 50; 172; 133; 1; + 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; 162; 228; 83; 227; 97; + 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; 111; 186; 167; 35; + 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; 157; 224; 23; 83; + 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; 210; 192; 157; + 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; 126; 146; 60; 40; + 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; 154; 164; 62; 5; 71; + 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; 144; 15; 106; 28; 187; + 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; 88; 181; 225; 128; 118; + 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; 14; 50; 161; 36; 144; + 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; 226; 119; 3; 179; 108; + 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; 97; 96; 231; 21; 9; 26; + 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; 139; 120; 113; 163; 184; + 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; 92; 124; 144; 38; 243; + 45; 62; 85; 202; 81; 200; 126; 179; 120; 72; 166; 203; 132; 18; 167; 231; + 209; 136; 50; 25; 228; 181; 230; 131; 136; 154; 90; 236; 16; 242; 76; 246; + 33; 144; 45; 165; 4; 45; 50; 156; 191; 198; 117; 51; 159; 193; 185; 9; 11; + 210; 66; 67; 58; 122; 88; 97; 254; 100; 170; 248; 28; 59; 20; 171; 202; 138; + 150; 125; 124; 134; 159; 41; 39; 9; 39; 142; 37; 84; 95; 117; 9; 24; 234; + 75; 211; 167; 208; 225; 38; 65; 55; 163; 70; 181; 33; 67; 131; 136; 162; 88; + 248; 79; 169; 60; 237; 19; 83; 86; 212; 14; 206; 250; 52; 191; 181; 207; 61; + 92; 245; 113; 179; 234; 201; 165; 60; 101; 10; 143; 33; 133; 209; 69; 122; + 10; 73; 53; 147; 4; 70; 120; 55; 21; 154; 246; 225; 49; 204; 9; 234; 96; 0; + 101; 233; 110; 248; 119; 21; 4; 126; 243; 103; 91; 206; 150; 164; 178; 102; + 150; 151; 86; 189; 216; 146; 84; 255; 208; 44; 89; 74; 41; 236; 60; 80; 178; + 172; 19; 8; 101; 67; 105; 86; 152; 7; 98; 38; 12; 219; 24; 184; 74; 53; 110; + 96; 217; 49; 92; 93; 199; 205; 168; 0; 79; 250; 130; 9; 212; 226; 83; 70; + 205; 43; 225; 23; 157; 182; 171; 29; 235; 249; 114; 86; 252; 83; 232; 175; + 53; 181; 112; 186; 109; 214; 150; 39; 117; 15; 172; 71; 117; 114; 17; 148; + 23; 53; 165; 50; 55; 132; 100; 223; 166; 68; 166; 211; 221; 191; 15; 136; + 89; 101; 59; 112; 165; 26; 58; 173; 64; 37; 133; 203; 104; 100; 76; 142; + 247; 179; 0; 9; 27; 101; 157; 103; 159; 27; 133; 10; 242; 66; 51; 3; 97; + 203; 8; 225; 163; 48; 139; 232; 127; 245; 1; 214; 20; 215; 45; 237; 202; 58; + 31; 55; 49; 173; 22; 200; 190; 15; 40; 237; 227; 239; 230; 216; 91; 89; 217; + 82; 245; 35; 198; 246; 114; 23; 231; 15; 60; 41; 30; 5; 11; 3; 20; 67; 173; + 188; 240; 251; 94; 0; 96; 213; 94; 12; 135; 209; 46; 15; 183; 142; 160; 230; + 132; 208; 51; 144; 31; 32; 112; 102; 123; 206; 225; 90; 58; 76; 149; 250; + 184; 220; 52; 164; 56; 65; 11; 132; 150; 108; 125; 246; 12; 135; 44; 232; + 123; 41; 116; 133; 56; 222; 90; 165; 98; 114; 178; 77; 129; 124; 221; 160; + 61; 201; 228; 117; 248; 186; 77; 41; 185; 113; 167; 130; 50; 185; 96; 196; + 198; 244; 183; 63; 214; 128; 129; 193; 102; 234; 61; 199; 233; 109; 242; + 248; 77; 160; 213; 4; 137; 71; 211; 66; 1; 177; 74; 174; 251; 250; 152; 9; + 93; 85; 99; 172; 200; 246; 4; 177; 144; 47; 65; 74; 172; 90; 8; 41; 201; 58; + 107; 50; 79; 198; 224; 225; 99; 230; 130; 178; 81; 85; 131; 75; 26; 74; 245; + 53; 107; 71; 194; 104; 159; 24; 254; 163; 157; 27; 52; 81; 127; 189; 10; 13; + 58; 96; 70; 174; 211; 225; 50; 201; 137; 128; 99; 189; 152; 135; 57; 145; + 37; 223; 53; 2; 186; 116; 210; 92; 20; 28; 67; 215; 243; 117; 100; 56; 232; + 50; 239; 217; 229; 106; 175; 139; 91; 54; 30; 104; 91; 56; 182; 56; 82; 130; + 225; 101; 125; 22; 193; 41; 73; 35; 232; 173; 119; 160; 171; 236; 77; 152; + 157; 56; 235; 25; 173; 119; 63; 56; 148; 215; 84; 41; 126; 107; 236; 199; + 122; 58; 124; 235; 58; 123; 199; 89; 207; 159; 9; 29; 194; 92; 20; 72; 229; + 215; 40; 204; 146; 193; 53; 69; 1; 126; 36; 72; 229; 193; 231; 128; 238; + 115; 41; 59; 116; 40; 95; 74; 98; 207; 92; 34; 37; 215; 173; 211; 93; 44; + 21; 178; 129; 51; 26; 145; 125; 248; 8; 91; 173; 159; 179; 216; 59; 254; + 153; 71; 107; 96; 5; 111; 98; 169; 123; 23; 146; 158; 254; 159; 225; 202; + 229; 13; 29; 231; 174; 152; 68; 16; 131; 45; 148; 174; 244; 63; 200; 58; 83; + 88; 46; 225; 77; 113; 131; 100; 27; 249; 73; 49; 67; 91; 98; 191; 44; 90; + 101; 220; 181; 173; 179; 39; 40; 99; 18; 132; 250; 135; 216; 248; 73; 171; + 145; 94; 137; 96; 24; 108; 248; 12; 237; 242; 236; 233; 212; 223; 53; 7; 18; + 6; 109; 180; 231; 107; 185; 4; 152; 160; 157; 188; 107; 194; 109; 217; 47; + 230; 226; 115; 94; 81; 170; 73; 84; 99; 91; 237; 58; 130; 198; 11; 159; 196; + 101; 168; 196; 209; 66; 91; 233; 31; 12; 133; 185; 21; 211; 3; 111; 109; + 215; 48; 29; 156; 47; 99; 14; 221; 204; 46; 21; 49; 137; 118; 150; 182; 208; + 81; 88; 122; 99; 168; 107; 183; 223; 82; 57; 239; 14; 160; 73; 125; 211; + 109; 199; 228; 6; 33; 23; 68; 68; 108; 105; 127; 141; 146; 128; 214; 83; + 251; 38; 63; 77; 105; 164; 158; 115; 180; 176; 75; 134; 46; 17; 151; 198; + 16; 222; 95; 190; 125; 39; 196; 147; 100; 162; 126; 173; 25; 173; 79; 93; + 38; 144; 69; 48; 70; 200; 223; 0; 14; 9; 254; 102; 237; 171; 28; 230; 37; 5; + 200; 88; 131; 160; 42; 166; 12; 71; 66; 32; 122; 227; 74; 61; 106; 220; 237; + 17; 59; 166; 211; 100; 116; 239; 6; 8; 85; 175; 155; 191; 3; 4; 102; 88; + 204; 40; 225; 19; 63; 126; 116; 89; 180; 236; 115; 88; 111; 245; 104; 18; + 204; 237; 61; 182; 160; 44; 226; 134; 69; 99; 120; 109; 86; 52; 8; 193; 156; + 159; 164; 55; 22; 81; 196; 155; 168; 213; 86; 142; 188; 219; 210; 127; 127; + 15; 236; 181; 28; 217; 53; 204; 94; 202; 91; 151; 51; 208; 47; 90; 198; 133; + 66; 5; 161; 195; 103; 22; 243; 42; 17; 100; 108; 88; 238; 26; 115; 64; 226; + 10; 104; 42; 178; 147; 71; 243; 165; 251; 20; 212; 247; 133; 105; 22; 70; + 215; 60; 87; 0; 200; 201; 132; 94; 62; 89; 30; 19; 97; 123; 182; 242; 195; + 47; 108; 82; 252; 131; 234; 156; 130; 20; 194; 149; 221; 151; 132; 123; 67; + 255; 167; 181; 78; 170; 48; 78; 116; 108; 139; 232; 133; 60; 97; 93; 12; + 158; 115; 129; 117; 95; 30; 199; 217; 47; 184; 236; 113; 78; 47; 11; 231; + 33; 227; 119; 164; 64; 185; 221; 86; 230; 128; 79; 29; 206; 206; 86; 101; + 191; 126; 123; 93; 83; 196; 59; 252; 5; 221; 222; 175; 82; 174; 179; 184; + 36; 207; 48; 59; 237; 140; 99; 149; 52; 149; 129; 190; 169; 131; 188; 164; + 51; 4; 31; 101; 92; 71; 103; 55; 55; 217; 173; 209; 64; 253; 153; 186; 47; + 39; 208; 244; 150; 111; 22; 7; 179; 174; 59; 240; 21; 82; 240; 99; 67; 153; + 249; 24; 59; 108; 165; 190; 31; 144; 101; 36; 20; 203; 149; 64; 99; 53; 85; + 193; 22; 64; 20; 18; 239; 96; 188; 16; 137; 12; 20; 56; 158; 140; 124; 144; + 48; 87; 144; 245; 107; 138; 91; 65; 225; 241; 120; 167; 15; 126; 167; 195; + 186; 247; 159; 64; 6; 80; 154; 162; 154; 184; 215; 82; 111; 86; 90; 99; 122; + 246; 28; 82; 2; 148; 82; 157; 10; 11; 238; 63; 81; 102; 90; 223; 15; 92; + 231; 152; 143; 206; 7; 225; 191; 136; 134; 97; 212; 237; 44; 56; 113; 126; + 10; 160; 63; 228; 94; 47; 119; 32; 103; 20; 177; 206; 154; 7; 150; 177; 148; + 248; 232; 74; 130; 172; 0; 77; 34; 248; 74; 196; 108; 205; 247; 217; 83; 23; + 0; 52; 219; 61; 150; 45; 35; 105; 60; 88; 56; 151; 180; 218; 135; 222; 29; + 133; 242; 145; 160; 249; 209; 215; 170; 182; 237; 72; 160; 47; 254; 181; 18; + 77; 227; 252; 150; 196; 251; 240; 113; 237; 91; 243; 173; 107; 130; 185; + 115; 97; 197; 40; 255; 97; 114; 4; 210; 111; 32; 177; 111; 249; 118; 155; + 116; 146; 30; 111; 173; 38; 124; 43; 223; 19; 137; 75; 80; 35; 211; 102; 75; + 195; 139; 28; 117; 192; 157; 64; 140; 184; 199; 150; 7; 194; 147; 126; 111; + 5; 174; 166; 174; 4; 246; 90; 31; 153; 156; 228; 190; 241; 81; 35; 193; 102; + 107; 255; 238; 181; 8; 168; 97; 81; 33; 224; 1; 15; 193; 206; 15; 68; 30; + 254; 73; 166; 88; 77; 100; 126; 119; 173; 49; 162; 174; 252; 33; 210; 208; + 127; 136; 90; 28; 68; 2; 243; 17; 197; 131; 113; 170; 1; 73; 69; 78; 36; + 196; 157; 210; 242; 61; 10; 222; 216; 147; 116; 14; 2; 43; 77; 33; 12; 130; + 126; 6; 200; 108; 10; 185; 234; 111; 22; 121; 55; 65; 240; 248; 26; 140; 84; + 183; 177; 8; 180; 153; 98; 36; 124; 122; 15; 206; 57; 217; 6; 30; 249; 176; + 96; 247; 19; 18; 109; 114; 123; 136; 187; 65; 216; 73; 124; 86; 108; 128; + 103; 146; 106; 30; 121; 202; 204; 4; 109; 6; 75; 57; 204; 227; 69; 86; 159; + 166; 210; 140; 120; 160; 134; 182; 149; 92; 210; 247; 57; 170; 224; 128; + 217; 151; 28; 181; 198; 82; 66; 56; 208; 53; 170; 85; 205; 7; 147; 244; 67; + 125; 98; 195; 138; 183; 207; 54; 189; 86; 84; 169; 20; 13; 193; 25; 197; 42; + 144; 250; 181; 148; 180; 116; 244; 234; 90; 122; 248; 169; 130; 131; 175; + 230; 148; 224; 155; 135; 177; 109; 234; 13; 171; 229; 68; 115; 84; 191; 102; + 170; 9; 67; 27; 143; 136; 88; 18; 218; 47; 75; 86; 253; 179; 210; 135; 94; + 221; 177; 131; 84; 136; 120; 44; 91; 122; 121; 168; 214; 116; 235; 186; 21; + 50; 23; 196; 250; 241; 92; 245; 126; 197; 5; 139; 60; 90; 31; 0; 41; 251; + 204; 234; 82; 135; 204; 215; 10; 207; 8; 52; 121; 98; 19; 21; 82; 148; 61; + 150; 25; 3; 23; 15; 235; 102; 148; 61; 136; 250; 178; 51; 168; 120; 60; 0; + 117; 167; 127; 58; 9; 190; 215; 22; 58; 230; 125; 16; 229; 207; 50; 243; + 154; 220; 255; 119; 163; 127; 103; 11; 68; 24; 191; 213; 112; 3; 20; 163; + 164; 25; 43; 37; 106; 134; 18; 169; 96; 68; 96; 233; 184; 222; 211; 120; + 119; 4; 216; 63; 127; 45; 94; 138; 191; 49; 30; 208; 103; 62; 101; 123; 194; + 6; 138; 3; 123; 243; 144; 105; 211; 213; 25; 217; 158; 242; 185; 78; 219; + 187; 174; 19; 82; 53; 145; 185; 76; 5; 234; 8; 199; 86; 14; 38; 114; 127; + 213; 222; 88; 119; 61; 65; 233; 173; 157; 231; 120; 125; 230; 41; 151; 213; + 249; 87; 242; 230; 167; 122; 227; 14; 145; 219; 89; 156; 3; 158; 187; 91; + 27; 161; 106; 139; 212; 15; 91; 38; 83; 109; 218; 136; 169; 191; 147; 49; + 130; 96; 137; 40; 126; 213; 97; 50; 201; 138; 215; 67; 129; 92; 58; 45; 148; + 242; 121; 233; 141; 200; 182; 37; 47; 218; 151; 105; 1; 242; 172; 234; 167; + 27; 37; 228; 180; 78; 239; 135; 79; 180; 9; 165; 125; 106; 188; 27; 171; + 144; 125; 254; 107; 1; 167; 131; 166; 204; 154; 109; 11; 197; 242; 77; 95; + 80; 144; 170; 53; 228; 204; 95; 13; 97; 107; 150; 255; 152; 97; 68; 13; 161; + 25; 151; 195; 179; 150; 244; 163; 7; 26; 50; 37; 78; 143; 24; 170; 206; 17; + 240; 27; 117; 167; 213; 152; 148; 125; 160; 216; 141; 80; 31; 22; 237; 25; + 202; 230; 220; 135; 214; 44; 10; 86; 77; 207; 100; 134; 196; 104; 53; 127; + 56; 58; 128; 34; 82; 233; 65; 135; 252; 83; 86; 89; 177; 218; 59; 72; 73; + 250; 52; 135; 20; 15; 120; 250; 224; 52; 5; 54; 112; 11; 111; 16; 189; 7; + 227; 227; 111; 119; 16; 34; 254; 160; 230; 221; 9; 193; 134; 50; 246; 128; + 218; 180; 10; 77; 207; 214; 224; 127; 48; 248; 69; 62; 72; 130; 164; 157; + 111; 174; 105; 82; 0; 5; 122; 135; 247; 156; 144; 82; 112; 28; 212; 152; 78; + 135; 226; 125; 238; 50; 96; 12; 126; 185; 233; 98; 195; 20; 138; 163; 96; + 106; 222; 220; 129; 87; 64; 168; 122; 170; 234; 213; 125; 33; 176; 30; 142; + 36; 208; 196; 183; 157; 82; 191; 116; 77; 225; 151; 118; 224; 84; 35; 86; + 60; 23; 155; 106; 30; 101; 73; 90; 121; 31; 194; 167; 127; 200; 14; 140; + 190; 185; 31; 223; 139; 130; 2; 10; 227; 248; 231; 186; 0; 108; 79; 108; + 173; 29; 153; 99; 73; 10; 246; 246; 93; 110; 138; 5; 7; 127; 246; 49; 219; + 196; 2; 235; 233; 43; 251; 188; 16; 137; 253; 37; 237; 180; 221; 92; 92; 31; + 19; 200; 70; 206; 155; 203; 160; 19; 28; 178; 51; 49; 142; 125; 8; 248; 146; + 6; 54; 247; 99; 113; 210; 55; 198; 220; 244; 99; 89; 234; 101; 32; 230; 164; + 37; 217; 96; 193; 90; 46; 247; 155; 101; 91; 140; 227; 94; 176; 185; 175; + 154; 199; 19; 26; 7; 78; 45; 157; 191; 10; 41; 51; 233; 109; 110; 238; 142; + 23; 151; 16; 174; 23; 171; 59; 28; 176; 183; 202; 199; 22; 178; 154; 28; + 204; 195; 187; 7; 116; 211; 101; 125; 213; 88; 74; 80; 80; 71; 116; 82; 144; + 41; 26; 19; 107; 96; 242; 9; 190; 70; 67; 116; 68; 125; 232; 64; 37; 43; + 181; 21; 212; 218; 72; 29; 62; 96; 59; 161; 24; 138; 58; 124; 247; 189; 205; + 47; 193; 40; 183; 78; 174; 145; 102; 124; 89; 76; 35; 126; 200; 180; 133; + 10; 61; 157; 136; 100; 231; 250; 74; 53; 12; 201; 226; 218; 29; 158; 106; + 12; 7; 30; 135; 10; 137; 137; 188; 75; 153; 181; 1; 51; 96; 66; 221; 91; 58; + 174; 107; 115; 60; 158; 213; 25; 226; 173; 97; 13; 100; 212; 133; 38; 15; + 48; 231; 62; 183; 214; 125; 158; 228; 85; 210; 245; 172; 30; 11; 97; 92; 17; + 22; 128; 202; 135; 225; 146; 93; 151; 153; 60; 194; 37; 145; 151; 98; 87; + 129; 19; 24; 117; 30; 132; 71; 121; 250; 67; 215; 70; 156; 99; 89; 250; 198; + 229; 116; 43; 5; 227; 29; 94; 6; 161; 48; 144; 184; 207; 162; 198; 71; 125; + 224; 214; 240; 142; 20; 208; 218; 63; 60; 111; 84; 145; 154; 116; 62; 157; + 87; 129; 187; 38; 16; 98; 236; 113; 128; 236; 201; 52; 141; 245; 140; 20; + 39; 240; 52; 121; 246; 146; 164; 70; 169; 10; 132; 246; 190; 132; 153; 70; + 84; 24; 97; 137; 42; 188; 161; 92; 212; 187; 93; 189; 30; 250; 242; 63; 109; + 117; 228; 154; 125; 47; 87; 226; 127; 72; 243; 136; 187; 69; 195; 86; 141; + 168; 96; 105; 109; 11; 209; 159; 185; 161; 174; 78; 173; 235; 143; 39; 102; + 57; 147; 140; 31; 104; 170; 177; 152; 12; 41; 32; 156; 148; 33; 140; 82; 60; + 157; 33; 145; 82; 17; 57; 123; 103; 156; 254; 2; 221; 4; 65; 42; 66; 36; 17; + 94; 191; 178; 114; 181; 58; 163; 152; 51; 12; 250; 161; 102; 182; 82; 250; + 1; 97; 203; 148; 213; 83; 175; 175; 0; 59; 134; 44; 184; 106; 9; 219; 6; 78; + 33; 129; 53; 79; 228; 12; 201; 182; 168; 33; 245; 42; 158; 64; 42; 193; 36; + 101; 129; 164; 252; 142; 164; 181; 101; 1; 118; 106; 132; 160; 116; 164; + 144; 241; 192; 124; 47; 205; 132; 249; 239; 18; 143; 43; 170; 88; 6; 41; 94; + 105; 184; 200; 254; 191; 217; 103; 27; 89; 250; 155; 180; 128; 28; 13; 47; + 49; 138; 236; 243; 171; 94; 81; 121; 89; 136; 28; 240; 158; 192; 51; 112; + 114; 203; 123; 143; 202; 199; 46; 224; 61; 93; 181; 24; 159; 113; 179; 185; + 153; 30; 100; 140; 161; 250; 229; 101; 228; 237; 5; 159; 194; 54; 17; 8; 97; + 139; 18; 48; 112; 134; 79; 155; 72; 239; 146; 235; 58; 45; 16; 50; 210; 97; + 168; 22; 97; 180; 83; 98; 225; 36; 170; 11; 25; 231; 171; 126; 61; 191; 190; + 108; 73; 186; 251; 245; 73; 212; 207; 91; 138; 16; 154; 148; 48; 235; 115; + 100; 188; 112; 221; 64; 220; 28; 13; 124; 48; 193; 148; 194; 146; 116; 110; + 250; 203; 109; 168; 4; 86; 46; 87; 156; 30; 140; 98; 93; 21; 65; 71; 136; + 197; 172; 134; 77; 138; 235; 99; 87; 81; 246; 82; 163; 145; 91; 81; 103; + 136; 194; 166; 161; 6; 182; 100; 23; 124; 212; 209; 136; 114; 81; 139; 65; + 224; 64; 17; 84; 114; 209; 246; 172; 24; 96; 26; 3; 159; 198; 66; 39; 254; + 137; 158; 152; 32; 127; 204; 45; 58; 253; 119; 151; 73; 146; 216; 79; 165; + 44; 124; 133; 50; 160; 227; 7; 210; 100; 216; 121; 162; 41; 126; 166; 12; + 29; 237; 3; 4; 46; 236; 234; 133; 139; 39; 116; 22; 223; 43; 203; 122; 7; + 220; 33; 86; 90; 244; 203; 97; 22; 76; 10; 100; 211; 149; 5; 247; 80; 153; + 11; 115; 82; 197; 78; 135; 53; 45; 75; 201; 141; 111; 36; 152; 207; 200; + 230; 197; 206; 53; 192; 22; 250; 70; 203; 247; 204; 61; 48; 8; 67; 69; 215; + 91; 194; 76; 178; 40; 149; 209; 154; 127; 129; 193; 53; 99; 101; 84; 107; + 127; 54; 114; 192; 79; 110; 182; 184; 102; 131; 173; 128; 115; 0; 120; 58; + 19; 42; 121; 231; 21; 33; 147; 196; 133; 201; 221; 205; 189; 162; 137; 76; + 198; 98; 215; 163; 173; 168; 61; 30; 157; 44; 248; 103; 48; 18; 219; 183; + 91; 190; 98; 202; 198; 103; 244; 97; 9; 238; 82; 25; 33; 214; 33; 236; 4; + 112; 71; 213; 155; 119; 96; 35; 24; 210; 224; 240; 88; 109; 202; 13; 116; + 11; 175; 240; 211; 245; 11; 183; 80; 247; 113; 46; 227; 138; 244; 234; 79; + 52; 189; 91; 165; 211; 78; 232; 96; 237; 209; 80; 63; 155; 72; 237; 0; 229; + 26; 38; 237; 42; 199; 6; 57; 247; 0; 225; 136; 217; 143; 182; 154; 151; 1; + 54; 243; 154; 5; 233; 245; 71; 109; 43; 191; 120; 220; 83; 14; 122; 135; + 113; 121; 191; 41; 8; 185; 49; 230; 23; 109; 99; 68; 68; 94; 147; 104; 39; + 24; 46; 197; 5; 77; 245; 74; 74; 90; 154; 45; 99; 39; 206; 96; 178; 84; 81; + 240; 31; 209; 112; 82; 249; 114; 142; 195; 109; 216; 56; 193; 124; 38; 13; + 205; 31; 96; 205; 12; 233; 41; 100; 145; 103; 43; 219; 255; 234; 135; 209; + 133; 130; 169; 100; 168; 208; 216; 187; 251; 180; 165; 247; 99; 38; 2; 127; + 242; 88; 182; 130; 226; 156; 217; 34; 43; 188; 59; 88; 10; 60; 88; 82; 201; + 23; 185; 243; 198; 228; 15; 184; 249; 63; 101; 12; 60; 223; 188; 215; 167; + 13; 155; 14; 214; 84; 171; 182; 238; 160; 67; 135; 84; 74; 109; 164; 102; + 105; 57; 186; 179; 43; 172; 138; 161; 17; 248; 107; 178; 40; 86; 91; 104; + 228; 102; 146; 155; 146; 157; 2; 119; 164; 112; 232; 95; 135; 87; 35; 50; + 198; 58; 143; 203; 251; 245; 236; 244; 212; 217; 32; 182; 43; 56; 147; 132; + 238; 141; 220; 159; 121; 76; 161; 234; 197; 80; 60; 251; 242; 214; 139; 220; + 14; 221; 160; 183; 199; 156; 167; 58; 198; 84; 26; 159; 141; 44; 43; 3; 11; + 174; 251; 103; 41; 96; 7; 225; 156; 111; 42; 194; 225; 205; 177; 84; 16; + 173; 223; 50; 235; 72; 2; 233; 168; 196; 234; 192; 205; 172; 51; 123; 62; + 95; 62; 150; 121; 252; 19; 71; 54; 114; 181; 224; 32; 53; 6; 147; 150; 19; + 254; 3; 234; 136; 124; 207; 127; 67; 188; 89; 201; 211; 11; 196; 212; 247; + 217; 222; 147; 248; 209; 84; 145; 105; 38; 117; 178; 180; 117; 92; 93; 49; + 165; 218; 54; 2; 45; 132; 203; 204; 142; 238; 95; 52; 163; 200; 240; 34; + 237; 219; 57; 125; 97; 90; 151; 115; 16; 218; 117; 99; 249; 77; 2; 228; 112; + 200; 48; 24; 26; 37; 211; 120; 28; 217; 140; 101; 72; 25; 43; 144; 138; 67; + 183; 41; 11; 177; 24; 126; 70; 62; 67; 244; 146; 243; 55; 111; 24; 107; 86; + 31; 161; 185; 25; 14; 98; 214; 209; 31; 138; 183; 15; 34; 77; 201; 129; 163; + 88; 66; 42; 54; 47; 235; 107; 43; 19; 217; 113; 144; 71; 130; 65; 40; 173; + 233; 38; 15; 93; 146; 236; 189; 201; 30; 185; 234; 222; 242; 138; 244; 200; + 91; 230; 75; 40; 112; 110; 163; 235; 127; 72; 120; 52; 206; 216; 29; 0; 19; + 63; 95; 137; 196; 48; 75; 45; 177; 79; 147; 43; 10; 127; 57; 77; 36; 108; 5; + 52; 98; 194; 87; 162; 251; 80; 29; 139; 103; 176; 222; 58; 130; 212; 123; + 245; 138; 83; 166; 110; 220; 176; 194; 62; 167; 29; 53; 198; 238; 101; 86; + 16; 178; 191; 67; 9; 224; 62; 219; 194; 10; 128; 32; 135; 1; 114; 73; 103; + 134; 189; 115; 97; 93; 171; 38; 56; 73; 32; 171; 194; 9; 178; 32; 75; 179; + 127; 192; 42; 52; 158; 84; 147; 61; 55; 33; 8; 34; 216; 2; 103; 245; 209; + 172; 112; 45; 38; 188; 132; 199; 202; 251; 253; 201; 146; 122; 137; 50; 189; + 22; 69; 169; 204; 31; 40; 4; 66; 65; 170; 101; 141; 68; 98; 93; 165; 22; + 178; 183; 195; 89; 216; 44; 97; 78; 198; 44; 153; 73; 222; 1; 248; 112; 234; + 27; 189; 101; 138; 226; 73; 254; 192; 183; 239; 27; 74; 174; 178; 177; 205; + 6; 99; 168; 9; 42; 92; 38; 205; 192; 122; 59; 236; 188; 1; 140; 67; 238; 43; + 130; 59; 199; 251; 192; 37; 181; 12; 83; 233; 63; 149; 193; 52; 144; 81; 72; + 91; 15; 154; 224; 97; 194; 92; 38; 167; 57; 237; 34; 79; 78; 213; 240; 10; + 21; 8; 86; 30; 233; 170; 162; 117; 232; 218; 237; 233; 178; 33; 244; 146; + 233; 125; 107; 29; 83; 188; 49; 113; 249; 128; 169; 77; 19; 61; 223; 167; + 34; 26; 34; 209; 184; 79; 122; 216; 214; 170; 53; 32; 212; 247; 61; 94; 18; + 26; 106; 204; 237; 20; 42; 78; 206; 207; 82; 7; 238; 72; 223; 183; 8; 236; + 6; 243; 250; 255; 195; 196; 89; 84; 185; 42; 11; 113; 5; 141; 163; 62; 150; + 250; 37; 29; 22; 60; 67; 120; 4; 87; 140; 26; 35; 157; 67; 129; 194; 14; 39; + 181; 183; 159; 7; 217; 227; 234; 153; 170; 219; 217; 3; 43; 108; 37; 245; 3; + 44; 125; 164; 83; 123; 117; 24; 15; 121; 121; 88; 12; 207; 48; 1; 123; 48; + 249; 247; 126; 37; 119; 61; 144; 49; 175; 187; 150; 189; 189; 104; 148; 105; + 207; 254; 218; 244; 70; 47; 31; 189; 247; 214; 127; 164; 20; 1; 239; 124; + 127; 179; 71; 74; 218; 253; 31; 211; 133; 87; 144; 115; 164; 25; 82; 82; 72; + 25; 169; 106; 230; 61; 221; 216; 204; 210; 192; 47; 194; 100; 80; 72; 47; + 234; 253; 52; 102; 36; 72; 155; 58; 46; 74; 108; 78; 28; 62; 41; 225; 18; + 81; 146; 75; 19; 110; 55; 160; 93; 161; 220; 181; 120; 55; 112; 17; 49; 28; + 70; 175; 137; 69; 176; 35; 40; 3; 127; 68; 92; 96; 91; 137; 124; 196; 32; + 89; 128; 101; 185; 204; 143; 59; 146; 12; 16; 240; 231; 119; 239; 226; 2; + 101; 37; 1; 0; 238; 179; 174; 168; 206; 109; 167; 36; 76; 240; 231; 240; + 198; 254; 233; 59; 98; 73; 227; 117; 158; 87; 106; 134; 26; 230; 29; 30; 22; + 239; 66; 85; 213; 189; 90; 204; 244; 254; 18; 47; 64; 199; 192; 223; 178; + 34; 69; 10; 7; 164; 201; 64; 127; 110; 208; 16; 104; 246; 207; 120; 65; 20; + 207; 198; 144; 55; 164; 24; 37; 123; 96; 94; 24; 24; 223; 108; 143; 29; 179; + 88; 162; 88; 98; 195; 79; 167; 207; 53; 110; 29; 230; 102; 79; 255; 179; + 225; 247; 213; 205; 108; 171; 172; 103; 80; 20; 207; 150; 165; 28; 67; 44; + 160; 0; 228; 211; 174; 64; 45; 196; 227; 219; 38; 15; 46; 128; 38; 69; 210; + 104; 112; 69; 158; 19; 51; 31; 32; 81; 157; 3; 8; 107; 127; 82; 253; 6; 0; + 124; 1; 100; 73; 177; 24; 168; 164; 37; 46; 176; 14; 34; 213; 117; 3; 70; + 98; 136; 186; 124; 57; 178; 89; 89; 240; 147; 48; 193; 48; 118; 121; 169; + 233; 141; 161; 58; 226; 38; 94; 29; 114; 145; 212; 47; 34; 58; 108; 110; + 118; 32; 211; 57; 35; 231; 121; 19; 200; 251; 195; 21; 120; 241; 42; 225; + 221; 32; 148; 97; 166; 213; 253; 168; 133; 248; 192; 169; 255; 82; 194; 225; + 193; 34; 64; 27; 119; 167; 47; 58; 81; 134; 217; 125; 216; 8; 207; 212; 249; + 113; 155; 172; 245; 179; 131; 162; 30; 27; 195; 107; 208; 118; 26; 151; 25; + 146; 24; 26; 51; 198; 128; 79; 251; 69; 111; 22; 245; 207; 117; 199; 97; + 222; 199; 54; 156; 28; 217; 65; 144; 27; 232; 212; 227; 33; 254; 189; 131; + 107; 124; 22; 49; 175; 114; 117; 157; 58; 47; 81; 38; 158; 74; 7; 104; 136; + 226; 203; 91; 196; 247; 128; 17; 193; 193; 237; 132; 123; 166; 73; 246; 159; + 97; 201; 26; 104; 16; 75; 82; 66; 56; 43; 242; 135; 233; 156; 238; 59; 52; + 104; 80; 200; 80; 98; 74; 132; 113; 157; 252; 17; 177; 8; 31; 52; 54; 36; + 97; 141; 137; 78; 135; 219; 65; 157; 217; 32; 220; 7; 108; 241; 165; 254; 9; + 188; 155; 15; 208; 103; 44; 61; 121; 64; 255; 94; 158; 48; 226; 235; 70; 56; + 38; 45; 26; 227; 73; 99; 139; 53; 253; 211; 155; 0; 183; 223; 157; 164; 107; + 160; 163; 184; 241; 139; 127; 69; 4; 217; 120; 49; 170; 34; 21; 56; 73; 97; + 105; 83; 47; 56; 44; 16; 109; 45; 183; 154; 64; 254; 218; 39; 242; 70; 182; + 145; 51; 200; 232; 108; 48; 36; 5; 245; 112; 254; 69; 140; 11; 12; 150; 166; + 117; 72; 218; 32; 47; 14; 239; 118; 208; 104; 91; 212; 143; 11; 61; 207; 81; + 251; 7; 212; 146; 227; 160; 35; 22; 141; 66; 145; 20; 149; 200; 32; 73; 242; + 98; 162; 12; 99; 63; 200; 7; 240; 5; 184; 212; 201; 245; 210; 69; 187; 111; + 69; 34; 122; 181; 109; 159; 97; 22; 253; 8; 163; 1; 68; 74; 79; 8; 172; 202; + 165; 118; 195; 25; 34; 168; 125; 188; 209; 67; 70; 222; 184; 222; 198; 56; + 189; 96; 45; 89; 129; 29; 56; 76; 42; 236; 190; 215; 51; 216; 237; 32; 204; + 10; 131; 98; 145; 44; 129; 117; 223; 146; 170; 71; 58; 233; 129; 74; 60; 51; + 163; 103; 45; 112; 161; 200; 137; 47; 154; 54; 74; 58; 13; 232; 141; 124; + 29; 122; 19; 99; 21; 160; 237; 120; 138; 0; 172; 188; 63; 176; 131; 180; + 165; 179; 184; 44; 161; 144; 27; 203; 203; 23; 228; 54; 78; 121; 17; 127; + 170; 221; 179; 51; 7; 198; 91; 136; 8; 8; 81; 63; 13; 2; 168; 230; 192; 29; + 20; 36; 157; 238; 239; 63; 119; 60; 247; 89; 157; 152; 207; 193; 137; 239; + 241; 179; 95; 84; 46; 224; 66; 251; 93; 227; 124; 180; 161; 71; 11; 18; 102; + 87; 125; 21; 131; 189; 204; 93; 146; 145; 148; 128; 204; 34; 83; 32; 161; + 60; 228; 214; 144; 63; 24; 127; 229; 40; 123; 118; 46; 222; 206; 20; 71; 26; + 255; 183; 182; 184; 15; 186; 32; 219; 161; 31; 81; 119; 182; 195; 50; 183; + 137; 45; 240; 153; 192; 81; 43; 169; 241; 165; 156; 72; 173; 117; 56; 79; + 34; 171; 50; 73; 47; 118; 252; 199; 27; 60; 76; 47; 247; 237; 192; 122; 232; + 149; 168; 154; 170; 85; 107; 95; 129; 0; 10; 173; 77; 39; 128; 54; 192; 238; + 115; 238; 246; 19; 237; 121; 177; 11; 17; 105; 109; 82; 198; 165; 12; 134; + 3; 134; 195; 40; 137; 228; 245; 89; 112; 253; 70; 20; 42; 114; 25; 136; 207; + 168; 233; 159; 149; 208; 156; 169; 117; 132; 80; 149; 169; 208; 197; 156; + 176; 32; 51; 23; 172; 110; 149; 16; 27; 51; 4; 207; 142; 98; 188; 221; 208; + 169; 24; 177; 188; 152; 43; 128; 180; 8; 52; 158; 68; 238; 4; 177; 166; 184; + 38; 146; 8; 135; 93; 145; 199; 69; 154; 52; 95; 104; 241; 204; 116; 92; 248; + 172; 65; 155; 81; 82; 38; 8; 129; 49; 115; 182; 71; 177; 173; 17; 237; 42; + 201; 153; 15; 180; 236; 52; 13; 215; 71; 122; 245; 164; 67; 204; 203; 196; + 160; 96; 169; 190; 119; 54; 202; 102; 92; 119; 237; 245; 248; 47; 117; 161; + 122; 161; 192; 253; 1; 14; 2; 217; 222; 17; 4; 231; 239; 202; 9; 120; 14; + 137; 108; 140; 14; 227; 109; 41; 40; 135; 201; 177; 174; 146; 163; 210; 92; + 76; 31; 83; 113; 87; 209; 99; 66; 25; 183; 147; 234; 59; 176; 149; 31; 71; + 211; 171; 19; 51; 212; 215; 82; 5; 123; 63; 126; 225; 226; 112; 147; 189; + 236; 91; 14; 178; 29; 15; 18; 123; 122; 45; 80; 134; 61; 251; 210; 23; 82; + 147; 166; 80; 68; 216; 100; 181; 93; 215; 14; 166; 200; 98; 169; 125; 170; + 54; 135; 49; 91; 248; 208; 0; 253; 132; 124; 119; 46; 20; 139; 151; 98; 192; + 168; 5; 71; 100; 2; 244; 199; 18; 230; 231; 27; 213; 122; 166; 51; 106; 221; + 152; 150; 69; 123; 47; 193; 33; 118; 253; 30; 60; 117; 166; 245; 113; 86; + 68; 167; 180; 192; 105; 17; 60; 178; 5; 116; 82; 31; 151; 205; 199; 168; 81; + 72; 199; 123; 56; 168; 169; 82; 74; 77; 75; 137; 129; 47; 131; 184; 246; 18; + 62; 217; 173; 56; 214; 27; 182; 72; 133; 77; 24; 205; 246; 201; 214; 219; + 98; 28; 63; 31; 12; 145; 145; 0; 31; 143; 46; 44; 225; 242; 191; 224; 79; + 223; 164; 56; 116; 146; 238; 10; 86; 198; 96; 250; 200; 239; 172; 63; 40; + 56; 99; 61; 105; 143; 20; 64; 62; 173; 63; 114; 154; 235; 148; 225; 86; 38; + 5; 47; 78; 79; 24; 253; 203; 77; 47; 139; 225; 130; 196; 177; 141; 111; 64; + 228; 30; 25; 127; 44; 13; 99; 158; 112; 246; 63; 188; 1; 131; 191; 79; 196; + 115; 251; 122; 78; 142; 125; 120; 165; 143; 245; 232; 91; 61; 216; 80; 151; + 24; 26; 193; 22; 57; 104; 133; 8; 208; 6; 229; 239; 164; 105; 45; 1; 189; + 100; 246; 120; 19; 175; 57; 198; 23; 21; 54; 49; 33; 148; 101; 109; 182; + 211; 180; 144; 207; 172; 192; 96; 46; 115; 97; 229; 157; 5; 167; 186; 176; + 198; 112; 120; 31; 61; 3; 228; 70; 217; 38; 205; 97; 65; 88; 162; 124; 210; + 114; 160; 177; 242; 187; 4; 199; 222; 251; 89; 60; 57; 191; 30; 184; 98; + 226; 206; 187; 141; 233; 137; 181; 41; 48; 11; 189; 238; 2; 95; 172; 13; + 166; 86; 135; 54; 97; 87; 220; 171; 235; 106; 47; 224; 23; 125; 15; 206; 76; + 45; 63; 25; 127; 240; 220; 236; 137; 119; 74; 35; 32; 232; 197; 133; 123; + 159; 182; 101; 135; 178; 186; 104; 209; 139; 103; 240; 111; 155; 15; 51; 29; + 124; 231; 112; 58; 124; 142; 175; 176; 81; 109; 95; 58; 82; 178; 120; 113; + 182; 13; 210; 118; 96; 209; 30; 213; 249; 52; 28; 7; 112; 17; 228; 179; 32; + 74; 42; 246; 102; 227; 255; 60; 53; 130; 214; 124; 182; 250; 135; 216; 91; + 164; 225; 11; 110; 59; 64; 186; 50; 106; 132; 42; 0; 96; 110; 233; 18; 16; + 146; 217; 67; 9; 220; 59; 134; 200; 56; 40; 243; 244; 172; 104; 96; 205; + 101; 166; 211; 227; 215; 60; 24; 45; 217; 66; 217; 37; 96; 51; 157; 56; 89; + 87; 255; 216; 44; 43; 59; 37; 240; 62; 48; 80; 70; 74; 207; 176; 107; 209; + 171; 119; 197; 21; 65; 107; 73; 250; 157; 65; 171; 244; 138; 174; 207; 130; + 18; 40; 168; 6; 166; 184; 220; 33; 200; 159; 157; 140; 70; 4; 96; 92; 203; + 163; 42; 212; 110; 9; 64; 37; 156; 47; 238; 18; 76; 77; 91; 18; 171; 29; + 163; 148; 129; 208; 195; 11; 186; 49; 119; 190; 250; 0; 141; 154; 137; 24; + 158; 98; 126; 96; 3; 130; 127; 217; 243; 67; 55; 2; 204; 178; 139; 103; 111; + 108; 191; 13; 132; 93; 139; 225; 159; 48; 13; 56; 110; 112; 199; 101; 225; + 185; 166; 45; 176; 110; 171; 32; 174; 125; 153; 186; 187; 87; 221; 150; 193; + 42; 35; 118; 66; 58; 250; 132; 112; 138; 44; 67; 66; 75; 69; 229; 185; 223; + 227; 25; 138; 137; 93; 228; 88; 156; 33; 0; 159; 190; 209; 235; 109; 161; + 206; 119; 241; 31; 203; 126; 68; 219; 114; 193; 248; 59; 189; 45; 40; 198; + 31; 196; 207; 95; 254; 21; 170; 117; 192; 255; 172; 128; 249; 169; 225; 36; + 232; 201; 112; 7; 253; 181; 181; 69; 154; 217; 97; 207; 36; 121; 58; 27; + 233; 132; 9; 134; 137; 62; 62; 48; 25; 9; 48; 231; 30; 11; 80; 65; 253; 100; + 242; 57; 156; 226; 231; 219; 23; 52; 173; 167; 156; 19; 156; 43; 106; 55; + 148; 189; 169; 123; 89; 147; 142; 27; 233; 160; 64; 152; 136; 104; 52; 215; + 18; 23; 225; 123; 9; 254; 171; 74; 155; 209; 41; 25; 224; 223; 225; 252; + 109; 164; 255; 241; 166; 44; 148; 8; 201; 195; 78; 241; 53; 44; 39; 33; 198; + 101; 221; 147; 49; 206; 248; 137; 43; 231; 187; 192; 37; 161; 86; 51; 16; + 77; 131; 254; 28; 46; 61; 169; 25; 4; 114; 226; 156; 177; 10; 128; 249; 34; + 203; 248; 158; 62; 138; 54; 90; 96; 21; 71; 80; 165; 34; 192; 233; 227; 143; + 36; 36; 95; 176; 72; 61; 85; 229; 38; 118; 100; 205; 22; 244; 19; 172; 253; + 110; 154; 221; 159; 2; 66; 65; 73; 165; 52; 190; 206; 18; 185; 123; 243; + 189; 135; 185; 100; 15; 100; 180; 202; 152; 133; 211; 164; 113; 65; 140; 76; + 201; 153; 170; 88; 39; 250; 7; 184; 0; 176; 111; 111; 0; 35; 146; 83; 218; + 173; 221; 145; 210; 251; 171; 209; 75; 87; 250; 20; 130; 80; 75; 254; 214; + 62; 21; 105; 2; 194; 196; 119; 29; 81; 57; 103; 90; 166; 148; 175; 20; 44; + 70; 38; 222; 203; 75; 167; 171; 111; 236; 96; 249; 34; 214; 3; 208; 83; 187; + 21; 26; 70; 101; 201; 243; 188; 136; 40; 16; 178; 90; 58; 104; 108; 117; + 118; 197; 39; 71; 180; 108; 200; 164; 88; 119; 58; 118; 80; 174; 147; 246; + 17; 129; 84; 166; 84; 253; 29; 223; 33; 174; 29; 101; 94; 17; 243; 144; 140; + 36; 18; 148; 244; 231; 141; 95; 209; 159; 93; 127; 114; 99; 109; 211; 8; 20; + 3; 51; 181; 199; 215; 239; 154; 55; 106; 75; 226; 174; 204; 197; 143; 225; + 169; 211; 190; 143; 79; 145; 53; 47; 51; 30; 82; 215; 238; 42; 77; 36; 63; + 21; 150; 46; 67; 40; 144; 58; 142; 212; 22; 156; 46; 119; 186; 100; 225; + 216; 152; 235; 71; 250; 135; 193; 59; 12; 194; 134; 234; 21; 1; 71; 109; 37; + 209; 70; 108; 203; 183; 138; 153; 136; 1; 102; 58; 181; 50; 120; 215; 3; + 186; 111; 144; 206; 129; 13; 69; 2; 57; 69; 216; 42; 77; 174; 248; 29; 45; + 219; 232; 142; 5; 24; 112; 30; 193; 210; 199; 95; 153; 179; 170; 121; 202; + 204; 36; 35; 109; 177; 83; 181; 224; 202; 178; 102; 77; 38; 35; 118; 101; + 202; 235; 51; 237; 186; 125; 200; 74; 210; 240; 214; 190; 14; 3; 16; 85; 99; + 247; 120; 127; 136; 42; 79; 45; 1; 92; 231; 185; 35; 42; 234; 242; 225; 202; + 81; 70; 151; 12; 202; 112; 93; 103; 115; 50; 182; 47; 245; 3; 68; 134; 11; + 37; 167; 11; 33; 100; 156; 2; 253; 24; 13; 187; 2; 143; 41; 137; 33; 20; 45; + 188; 150; 14; 37; 139; 230; 248; 71; 131; 201; 113; 45; 3; 232; 47; 159; + 123; 156; 109; 248; 134; 147; 88; 99; 221; 164; 133; 58; 225; 118; 145; 105; + 97; 87; 125; 170; 78; 149; 17; 81; 46; 251; 189; 96; 251; 87; 27; 194; 50; + 128; 7; 158; 49; 205; 35; 120; 216; 197; 117; 119; 137; 193; 207; 196; 239; + 247; 179; 10; 154; 18; 251; 84; 72; 113; 195; 56; 114; 65; 157; 196; 18; + 105; 55; 232; 255; 51; 181; 80; 9; 209; 107; 29; 142; 29; 28; 134; 33; 16; + 229; 2; 19; 56; 216; 34; 240; 180; 202; 145; 99; 12; 32; 9; 37; 66; 149; + 121; 131; 23; 160; 179; 9; 63; 238; 213; 170; 143; 208; 109; 98; 159; 20; + 112; 235; 238; 188; 0; 186; 201; 68; 164; 160; 70; 178; 33; 20; 199; 167; + 36; 140; 142; 58; 164; 74; 245; 94; 240; 216; 64; 245; 193; 4; 220; 185; 62; + 11; 12; 94; 186; 173; 227; 156; 164; 72; 68; 80; 181; 42; 236; 93; 15; 111; + 38; 39; 210; 46; 36; 8; 213; 94; 65; 238; 36; 152; 21; 212; 104; 148; 124; + 236; 123; 128; 63; 226; 33; 181; 225; 186; 147; 112; 250; 58; 93; 28; 99; + 172; 7; 220; 108; 140; 223; 249; 113; 81; 97; 88; 176; 226; 115; 157; 216; + 121; 160; 114; 93; 225; 234; 180; 206; 244; 1; 115; 65; 44; 114; 214; 89; + 231; 9; 100; 155; 114; 191; 114; 207; 225; 116; 166; 105; 229; 33; 60; 235; + 36; 10; 188; 35; 203; 186; 78; 210; 103; 1; 57; 28; 63; 53; 186; 59; 142; + 245; 39; 97; 67; 106; 191; 77; 118; 71; 76; 80; 38; 86; 110; 229; 196; 187; + 175; 93; 164; 225; 170; 230; 46; 219; 7; 11; 18; 242; 162; 75; 5; 187; 215; + 183; 137; 5; 177; 174; 206; 185; 226; 190; 237; 192; 243; 200; 186; 232; 63; + 105; 203; 18; 113; 118; 64; 189; 76; 118; 129; 197; 41; 192; 60; 96; 11; 97; + 93; 177; 92; 130; 227; 136; 89; 141; 173; 240; 220; 19; 20; 182; 43; 135; + 50; 24; 116; 108; 236; 142; 123; 176; 124; 210; 44; 120; 64; 202; 228; 189; + 103; 233; 251; 35; 195; 249; 218; 158; 30; 212; 138; 74; 211; 155; 178; 77; + 222; 110; 98; 151; 4; 129; 114; 115; 107; 56; 252; 112; 229; 254; 50; 199; + 140; 58; 218; 65; 1; 139; 218; 89; 131; 150; 200; 10; 253; 95; 151; 85; 168; + 50; 177; 161; 9; 232; 110; 58; 134; 253; 252; 49; 187; 68; 148; 197; 72; 78; + 62; 10; 105; 227; 47; 37; 250; 136; 208; 103; 200; 41; 220; 46; 41; 115; + 209; 56; 30; 189; 19; 181; 73; 97; 105; 216; 76; 43; 211; 183; 170; 216; + 129; 215; 55; 89; 229; 148; 43; 18; 174; 39; 33; 203; 11; 176; 153; 64; 177; + 207; 111; 232; 65; 33; 197; 250; 29; 207; 181; 63; 34; 80; 68; 85; 111; 49; + 37; 92; 50; 172; 119; 145; 101; 215; 152; 11; 3; 189; 164; 136; 79; 182; 24; + 208; 30; 176; 166; 2; 184; 161; 223; 48; 54; 213; 59; 173; 66; 71; 135; 15; + 136; 212; 164; 197; 238; 108; 13; 249; 10; 217; 197; 205; 55; 122; 36; 106; + 116; 246; 154; 123; 43; 189; 184; 49; 213; 81; 91; 252; 55; 53; 9; 5; 80; + 109; 84; 147; 197; 37; 207; 47; 35; 73; 15; 180; 43; 20; 101; 163; 32; 237; + 65; 217; 120; 82; 216; 204; 110; 67; 120; 47; 210; 131; 174; 84; 34; 183; + 205; 191; 123; 46; 208; 34; 197; 226; 228; 240; 191; 81; 51; 30; 104; 69; + 79; 3; 131; 157; 181; 100; 139; 251; 14; 162; 31; 242; 113; 139; 47; 228; + 80; 101; 186; 149; 148; 36; 105; 43; 71; 213; 69; 142; 249; 158; 83; 117; + 82; 32; 166; 161; 182; 123; 110; 131; 142; 60; 65; 215; 33; 79; 170; 178; + 92; 143; 232; 85; 209; 86; 111; 225; 91; 52; 166; 75; 93; 226; 45; 63; 116; + 174; 28; 150; 216; 116; 208; 237; 99; 28; 238; 245; 24; 109; 248; 41; 237; + 244; 231; 91; 197; 189; 151; 8; 177; 58; 102; 121; 210; 186; 76; 205; 31; + 215; 160; 36; 144; 209; 128; 248; 138; 40; 251; 10; 194; 37; 197; 25; 100; + 58; 95; 75; 151; 163; 177; 51; 114; 0; 226; 239; 188; 127; 125; 1; 40; 107; + 38; 106; 30; 239; 250; 22; 159; 115; 213; 196; 104; 108; 134; 44; 118; 3; + 27; 188; 47; 138; 246; 141; 90; 183; 135; 94; 67; 117; 89; 148; 144; 194; + 243; 197; 93; 124; 205; 171; 5; 145; 42; 154; 162; 129; 199; 88; 48; 28; 66; + 54; 29; 198; 128; 215; 212; 216; 220; 150; 209; 156; 79; 104; 55; 123; 106; + 216; 151; 146; 25; 99; 122; 209; 26; 36; 88; 208; 208; 23; 12; 28; 92; 173; + 156; 2; 186; 7; 3; 122; 56; 132; 208; 205; 124; 23; 4; 38; 109; 44; 66; 166; + 220; 189; 64; 130; 148; 80; 61; 21; 174; 119; 198; 104; 251; 180; 193; 192; + 169; 83; 207; 208; 97; 237; 208; 139; 66; 147; 204; 96; 103; 24; 132; 12; + 155; 153; 42; 179; 26; 122; 0; 174; 205; 24; 218; 11; 98; 134; 236; 141; + 168; 68; 202; 144; 129; 132; 202; 147; 53; 167; 154; 132; 94; 154; 24; 19; + 146; 205; 250; 216; 101; 53; 195; 216; 212; 209; 187; 253; 83; 91; 84; 82; + 140; 230; 99; 45; 218; 8; 131; 57; 39; 19; 212; 94; 67; 40; 141; 195; 66; + 201; 204; 120; 50; 96; 243; 80; 189; 239; 3; 218; 121; 26; 171; 7; 187; 85; + 51; 140; 190; 174; 151; 149; 38; 83; 36; 112; 10; 76; 14; 161; 185; 222; 27; + 125; 213; 102; 88; 162; 15; 247; 218; 39; 205; 181; 217; 185; 255; 253; 51; + 44; 73; 69; 41; 44; 87; 190; 48; 205; 214; 69; 199; 127; 199; 251; 174; 186; 227; 211; 232; 223; 228; 12; 218; 93; 170; 48; 136; 44; 162; 128; 202; 91; 192; 152; 84; 152; 127; 23; 225; 11; 159; 136; 206; 73; 56; 136; 162; 84; 123; 27; 173; 5; 128; 28; 146; 252; 35; 159; 195; 163; 61; 4; 243; 49; 10; @@ -5673,38 +6792,37 @@ let GE25519_GROUPER = (MATCH_MP pth (CONJ th1 th2));; let BYTES_LOADED_DATA = prove - (`bytes_loaded s (word (pc + 0x2322)) edwards25519_scalarmulbase_alt_data <=> - read (memory :> bytes(word (pc + 0x2322),48608)) s = + (`bytes_loaded s (word (pc + 0x3177)) edwards25519_scalarmulbase_alt_data <=> + read (memory :> bytes(word (pc + 0x3177),48576)) s = num_of_bytelist edwards25519_scalarmulbase_alt_data`, REWRITE_TAC[bytes_loaded; READ_BYTELIST_EQ_BYTES; CONV_RULE (RAND_CONV LENGTH_CONV) (AP_TERM `LENGTH:byte list->num` edwards25519_scalarmulbase_alt_data)]);; let EDWARDS25519BASE_TABLE_LEMMA = prove - (`read (memory :> bytes(word (pc + 0x2322),48608)) s = + (`read (memory :> bytes(word (pc + 0x3177),48576)) s = num_of_bytelist edwards25519_scalarmulbase_alt_data - ==> bignum_from_memory(word(pc + 0x2322),4) s = p_25519 /\ - edwards25519_exprojective + ==> edwards25519_exprojective (group_pow edwards25519_group E_25519 0) - (bignum_from_memory(word(pc + 0x2342),4) s, - bignum_from_memory(word(pc + 0x2362),4) s, + (bignum_from_memory(word(pc + 0x3177),4) s, + bignum_from_memory(word(pc + 0x3197),4) s, 1, - bignum_from_memory(word(pc + 0x2382),4) s) /\ + bignum_from_memory(word(pc + 0x31b7),4) s) /\ edwards25519_exprojective (group_pow edwards25519_group E_25519 (2 EXP 251)) - (bignum_from_memory(word(pc + 0x23a2),4) s, - bignum_from_memory(word(pc + 0x23c2),4) s, + (bignum_from_memory(word(pc + 0x31d7),4) s, + bignum_from_memory(word(pc + 0x31f7),4) s, 1, - bignum_from_memory(word(pc + 0x23e2),4) s) /\ + bignum_from_memory(word(pc + 0x3217),4) s) /\ !i. i < 63 ==> !j. j < 8 ==> edwards25519_epprojective (group_pow edwards25519_group E_25519 (2 EXP (4 * i) * (j + 1))) - (bignum_from_memory(word(pc + 0x2402 + 768 * i + 96 * j),4) s, - bignum_from_memory(word(pc + 0x2402 + 768 * i + 96 * j + 32),4) s, - bignum_from_memory(word(pc + 0x2402 + 768 * i + 96 * j + 64),4) s) /\ - ~(bignum_from_memory(word(pc + 0x2402 + 768 * i + 96 * j + 64),4) s = + (bignum_from_memory(word(pc + 0x3237 + 768 * i + 96 * j),4) s, + bignum_from_memory(word(pc + 0x3237 + 768 * i + 96 * j + 32),4) s, + bignum_from_memory(word(pc + 0x3237 + 768 * i + 96 * j + 64),4) s) /\ + ~(bignum_from_memory(word(pc + 0x3237 + 768 * i + 96 * j + 64),4) s = 0)`, let GE25519_POWERS = end_itlist CONJ @@ -5714,8 +6832,8 @@ let EDWARDS25519BASE_TABLE_LEMMA = prove [GE25519_POW_1])) in REWRITE_TAC[GSYM BYTES_LOADED_DATA; edwards25519_scalarmulbase_alt_data] THEN CONV_TAC(LAND_CONV DATA64_CONV) THEN STRIP_TAC THEN - CONV_TAC(funpow 3 RAND_CONV (BINDER_CONV (RAND_CONV EXPAND_CASES_CONV))) THEN - CONV_TAC(funpow 3 RAND_CONV EXPAND_CASES_CONV) THEN + CONV_TAC(funpow 2 RAND_CONV (BINDER_CONV (RAND_CONV EXPAND_CASES_CONV))) THEN + CONV_TAC(funpow 2 RAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[WORD_ADD] THEN CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN REWRITE_TAC[GSYM WORD_ADD] THEN ASM_REWRITE_TAC[] THEN @@ -5748,22 +6866,21 @@ let lvs = "ymx_2",[`RSP`;`32`]; "xpy_2",[`RSP`;`64`]; "kxy_2",[`RSP`;`96`]; - "acc",[`RSP`;`128`]; - "x_1",[`RSP`;`128`]; - "y_1",[`RSP`;`160`]; - "z_1",[`RSP`;`192`]; - "w_1",[`RSP`;`224`]; - "x_3",[`RSP`;`128`]; - "y_3",[`RSP`;`160`]; - "z_3",[`RSP`;`192`]; - "w_3",[`RSP`;`224`]; - "tmpspace",[`RSP`;`256`]; - "t0",[`RSP`;`256`]; - "t1",[`RSP`;`288`]; - "t2",[`RSP`;`320`]; - "t3",[`RSP`;`352`]; - "t4",[`RSP`;`384`]; - "t5",[`RSP`;`416`]];; + "t0",[`RSP`;`128`]; + "t1",[`RSP`;`160`]; + "t2",[`RSP`;`192`]; + "t3",[`RSP`;`224`]; + "t4",[`RSP`;`256`]; + "t5",[`RSP`;`288`]; + "acc",[`RSP`;`320`]; + "x_1",[`RSP`;`320`]; + "y_1",[`RSP`;`352`]; + "z_1",[`RSP`;`384`]; + "w_1",[`RSP`;`416`]; + "x_3",[`RSP`;`320`]; + "y_3",[`RSP`;`352`]; + "z_3",[`RSP`;`384`]; + "w_3",[`RSP`;`416`]];; (* ------------------------------------------------------------------------- *) (* Instances of mul_p25519. *) @@ -5776,7 +6893,7 @@ let LOCAL_MUL_P25519_TAC = ==> !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0xe102) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xef37) (word_add (read p3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmulbase_alt_mc /\ read RIP s = pcin /\ @@ -5959,7 +7076,7 @@ let LOCAL_MUL_4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0xe102) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xef37) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmulbase_alt_mc /\ read RIP s = pcin /\ @@ -6126,7 +7243,7 @@ let LOCAL_ADD_TWICE4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0xe102) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xef37) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmulbase_alt_mc /\ read RIP s = pcin /\ @@ -6198,7 +7315,7 @@ let LOCAL_DOUBLE_TWICE4_TAC = `!(t:x86state) pcin pcout q3 n3 q1 n1. !n. read(memory :> bytes(word_add (read q1 t) (word n1),8 * 4)) t = n ==> - nonoverlapping (word pc,0xe102) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xef37) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmulbase_alt_mc /\ read RIP s = pcin /\ @@ -6267,7 +7384,7 @@ let LOCAL_SUB_TWICE4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0xe102) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0xef37) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmulbase_alt_mc /\ read RIP s = pcin /\ @@ -6341,20 +7458,16 @@ let LOCAL_SUB_TWICE4_TAC = (* ------------------------------------------------------------------------- *) let LOCAL_MODINV_TAC = - let cth = - (GEN_REWRITE_CONV RAND_CONV [bignum_modinv_mc] THENC TRIM_LIST_CONV) - `TRIM_LIST (23,15) bignum_modinv_mc` - and bth = edwards25519_scalarmulbase_alt_mc - and th = CONV_RULE (DEPTH_CONV WORD_NUM_RED_CONV) - (SPEC `word 4:int64` CORE_MODINV_CORRECT) in - X86_SUBROUTINE_SIM_TAC(bth,EDWARDS25519_SCALARMULBASE_ALT_EXEC,0x1964,cth,th) - [`read RSI s`; `read RDX s`; - `read (memory :> bytes(read RDX s,8 * 4)) s`; - `read RCX s`; - `read (memory :> bytes(read RCX s,8 * 4)) s`; - `read R8 s`; - `pc + 0x1964`; - `stackpointer:int64`];; + X86_SUBROUTINE_SIM_TAC + (edwards25519_scalarmulbase_alt_mc, + EDWARDS25519_SCALARMULBASE_ALT_EXEC, + 0x194e, + (GEN_REWRITE_CONV RAND_CONV [bignum_inv_p25519_mc] THENC TRIM_LIST_CONV) + `TRIM_LIST (17,18) bignum_inv_p25519_mc`, + CORE_INV_P25519_CORRECT) + [`read RDI s`; `read RSI s`; + `read (memory :> bytes(read RSI s,8 * 4)) s`; + `pc + 0x194e`; `stackpointer:int64`];; (* ------------------------------------------------------------------------- *) (* Overall point operation proof. *) @@ -6363,8 +7476,8 @@ let LOCAL_MODINV_TAC = let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove (`!res scalar n pc stackpointer. ALL (nonoverlapping (stackpointer,488)) - [(word pc,0xe102); (res,64); (scalar,32)] /\ - nonoverlapping (res,64) (word pc,0xe102) + [(word pc,0xef37); (res,64); (scalar,32)] /\ + nonoverlapping (res,64) (word pc,0xef37) ==> ensures x86 (\s. bytes_loaded s (word pc) (APPEND edwards25519_scalarmulbase_alt_mc @@ -6373,7 +7486,7 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove read RSP s = stackpointer /\ C_ARGUMENTS [res; scalar] s /\ bignum_from_memory (scalar,4) s = n) - (\s. read RIP s = word (pc + 0x2310) /\ + (\s. read RIP s = word (pc + 0x3165) /\ bignum_pair_from_memory(res,4) s = paired (modular_encode (256,p_25519)) (group_pow edwards25519_group E_25519 n)) @@ -6429,12 +7542,12 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove ENSURES_WHILE_UP_TAC `63` `pc + 0x1f4` `pc + 0x18aa` `\i s. - read (memory :> bytes(word(pc + 0x2322),48608)) s = + read (memory :> bytes(word(pc + 0x3177),48576)) s = num_of_bytelist edwards25519_scalarmulbase_alt_data /\ read RSP s = stackpointer /\ read (memory :> bytes64 (word_add stackpointer (word 448))) s = res /\ read (memory :> bytes64 (word_add stackpointer (word 480))) s = - word(pc + 0x2402 + 768 * i) /\ + word(pc + 0x3237 + 768 * i) /\ read (memory :> bytes64 (word_add stackpointer (word 456))) s = word (4 * i) /\ val(read (memory :> bytes64 (word_add stackpointer (word 464))) s) <= 1 /\ @@ -6448,10 +7561,10 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove (&nn - &2 pow (4 * i) * (&(nn' DIV 2 EXP (4 * i)) + &(val(read (memory :> bytes64 (word_add stackpointer (word 464))) s))))) - (bignum_from_memory(word_add stackpointer (word 128),4) s, - bignum_from_memory(word_add stackpointer (word 160),4) s, - bignum_from_memory(word_add stackpointer (word 192),4) s, - bignum_from_memory(word_add stackpointer (word 224),4) s)` THEN + (bignum_from_memory(word_add stackpointer (word 320),4) s, + bignum_from_memory(word_add stackpointer (word 352),4) s, + bignum_from_memory(word_add stackpointer (word 384),4) s, + bignum_from_memory(word_add stackpointer (word 416),4) s)` THEN REPEAT CONJ_TAC THENL [ARITH_TAC; @@ -6467,23 +7580,23 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove RULE_ASSUM_TAC(REWRITE_RULE[SYM th]) THEN ASSUME_TAC th) THEN SUBGOAL_THEN `nonoverlapping_modulo (2 EXP 64) (val(stackpointer:int64),488) - (val(wpc:int64),0xe102)` + (val(wpc:int64),0xef37)` ASSUME_TAC THENL [EXPAND_TAC "wpc" THEN NONOVERLAPPING_TAC; ALL_TAC] THEN REPEAT(DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN DISCH_THEN(K ALL_TAC) THEN BIGNUM_LDIGITIZE_TAC "x0_" - `bignum_from_memory(word_add wpc (word 0x2342),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x3177),4) s0` THEN BIGNUM_LDIGITIZE_TAC "y0_" - `bignum_from_memory(word_add wpc (word 0x2362),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x3197),4) s0` THEN BIGNUM_LDIGITIZE_TAC "t0_" - `bignum_from_memory(word_add wpc (word 0x2382),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x31b7),4) s0` THEN BIGNUM_LDIGITIZE_TAC "x1_" - `bignum_from_memory(word_add wpc (word 0x23a2),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x31d7),4) s0` THEN BIGNUM_LDIGITIZE_TAC "y1_" - `bignum_from_memory(word_add wpc (word 0x23c2),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x31f7),4) s0` THEN BIGNUM_LDIGITIZE_TAC "t1_" - `bignum_from_memory(word_add wpc (word 0x23e2),4) s0` THEN + `bignum_from_memory(word_add wpc (word 0x3217),4) s0` THEN X86_ACCSTEPS_TAC EDWARDS25519_SCALARMULBASE_ALT_EXEC [9;13;14;15;17;18;19;20;27;28;29;30] (1--39) THEN @@ -6616,13 +7729,13 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove X_GEN_TAC `i:num` THEN STRIP_TAC THEN GHOST_INTRO_TAC `xn:num` - `bignum_from_memory (word_add stackpointer (word 128),4)` THEN + `bignum_from_memory (word_add stackpointer (word 320),4)` THEN GHOST_INTRO_TAC `yn:num` - `bignum_from_memory (word_add stackpointer (word 160),4)` THEN + `bignum_from_memory (word_add stackpointer (word 352),4)` THEN GHOST_INTRO_TAC `zn:num` - `bignum_from_memory (word_add stackpointer (word 192),4)` THEN + `bignum_from_memory (word_add stackpointer (word 384),4)` THEN GHOST_INTRO_TAC `wn:num` - `bignum_from_memory(word_add stackpointer (word 224),4)` THEN + `bignum_from_memory(word_add stackpointer (word 416),4)` THEN GHOST_INTRO_TAC `nbias:num` `\s. val(read (memory :> bytes64 (word_add stackpointer (word 464))) s)` THEN @@ -6730,7 +7843,7 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove REWRITE_TAC[ARITH_RULE `pc + off + 768 * i + jre = (pc + off + 768 * i) + jre`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `tab:int64 = word(pc + 0x2402 + 768 * i)` THEN + ABBREV_TAC `tab:int64 = word(pc + 0x3237 + 768 * i)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o TOP_DEPTH_CONV) [WORD_ADD_0] THEN @@ -7038,20 +8151,20 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove REWRITE_TAC[ARITH_RULE `(n MOD 2 EXP 251) DIV 2 EXP (4 * 63) = 0`] THEN REWRITE_TAC[INT_ADD_RID; INT_MUL_RZERO; INT_SUB_RZERO; GROUP_NPOW] THEN GHOST_INTRO_TAC `X:num` - `bignum_from_memory (word_add stackpointer (word 128),4)` THEN + `bignum_from_memory (word_add stackpointer (word 320),4)` THEN GHOST_INTRO_TAC `Y:num` - `bignum_from_memory (word_add stackpointer (word 160),4)` THEN + `bignum_from_memory (word_add stackpointer (word 352),4)` THEN GHOST_INTRO_TAC `Z:num` - `bignum_from_memory (word_add stackpointer (word 192),4)` THEN + `bignum_from_memory (word_add stackpointer (word 384),4)` THEN GHOST_INTRO_TAC `W:num` - `bignum_from_memory (word_add stackpointer (word 224),4)` THEN + `bignum_from_memory (word_add stackpointer (word 416),4)` THEN (*** The optional negation based on "flip" ***) REWRITE_TAC(!simulation_precanon_thms) THEN ENSURES_INIT_TAC "s0" THEN BIGNUM_LDIGITIZE_TAC "x_" - `read (memory :> bytes (word_add stackpointer (word 128),8 * 4)) s0` THEN + `read (memory :> bytes (word_add stackpointer (word 320),8 * 4)) s0` THEN ABBREV_TAC `ntop = (nn DIV 2 EXP 192) MOD 2 EXP 59` THEN SUBGOAL_THEN `ntop < 2 EXP 59` ASSUME_TAC THENL @@ -7079,7 +8192,7 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove ABBREV_TAC `X' = - read (memory :> bytes(word_add stackpointer (word 128),8 * 4)) s24` THEN + read (memory :> bytes(word_add stackpointer (word 320),8 * 4)) s24` THEN SUBGOAL_THEN `&X':int = if flip then &2 * &p_25519 - &X else &X` @@ -7108,21 +8221,13 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN - (*** The state setup for the modular inverse ***) - - FIRST_X_ASSUM(MP_TAC o CONJUNCT1 o MATCH_MP EDWARDS25519BASE_TABLE_LEMMA) THEN - REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN DISCH_TAC THEN - X86_STEPS_TAC EDWARDS25519_SCALARMULBASE_ALT_EXEC (25--29) THEN - RULE_ASSUM_TAC(REWRITE_RULE[WORD_RULE - `word(val(word(pc + a):int64) + b):int64 = word(pc + a + b)`]) THEN - RULE_ASSUM_TAC(CONV_RULE(ONCE_DEPTH_CONV NUM_ADD_CONV)) THEN - (*** The inlining of modular inverse ***) - LOCAL_MODINV_TAC 30 THEN + X86_STEPS_TAC EDWARDS25519_SCALARMULBASE_ALT_EXEC (25--26) THEN + LOCAL_MODINV_TAC 27 THEN ABBREV_TAC `w_3 = - read(memory :> bytes(word_add stackpointer (word 224),8 * 4)) s30` THEN + read(memory :> bytes(word_add stackpointer (word 416),8 * 4)) s27` THEN (*** Final multiplications ***) @@ -7139,13 +8244,18 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove MAP_EVERY X_GEN_TAC [`x:int`; `y:int`] THEN REPEAT(DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN - FIRST_ASSUM(MP_TAC o check (is_imp o concl)) THEN - REWRITE_TAC[] THEN ONCE_REWRITE_TAC[COPRIME_SYM] THEN - SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; DIVIDES_MOD] THEN ASM_CASES_TAC `Z MOD p_25519 = 0` THEN ASM_REWRITE_TAC[] THENL [ASM_REWRITE_TAC[exprojective; INTEGER_MOD_RING_CLAUSES]; ALL_TAC] THEN - ANTS_TAC THENL - [REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; STRIP_TAC] THEN + SUBGOAL_THEN `w_3 < p_25519 /\ (Z * w_3 == 1) (mod p_25519)` + STRIP_ASSUME_TAC THENL + [FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN MATCH_MP_TAC(TAUT + `p /\ (q ==> r) /\ (p /\ q ==> s) ==> (p ==> q) ==> r /\ s`) THEN + REPEAT CONJ_TAC THENL + [ASM_SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; DIVIDES_MOD]; + DISCH_THEN SUBST1_TAC THEN REWRITE_TAC[INVERSE_MOD_BOUND] THEN + REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; + MESON_TAC[INVERSE_MOD_RMUL]]; + ALL_TAC] THEN SUBGOAL_THEN `ring_inv (integer_mod_ring p_25519) (&Z rem &p_25519) = &w_3` ASSUME_TAC THENL [MATCH_MP_TAC RING_RINV_UNIQUE THEN @@ -7154,7 +8264,6 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove CONV_TAC MOD_DOWN_CONV THEN ASM_REWRITE_TAC[GSYM CONG] THEN REWRITE_TAC[MOD_LT_EQ; ARITH_EQ; p_25519]; ALL_TAC] THEN - SUBGOAL_THEN `~(&p_25519:int = &0)` ASSUME_TAC THENL [REWRITE_TAC[INT_OF_NUM_EQ; p_25519] THEN ARITH_TAC; ALL_TAC] THEN ASM_CASES_TAC `flip:bool` THEN @@ -7171,8 +8280,8 @@ let EDWARDS25519_SCALARMULBASE_ALT_CORRECT = time prove let EDWARDS25519_SCALARMULBASE_ALT_SUBROUTINE_CORRECT = time prove (`!res scalar n pc stackpointer returnaddress. ALL (nonoverlapping (word_sub stackpointer (word 536),536)) - [(word pc,0xe102); (scalar,32)] /\ - nonoverlapping (res,64) (word pc,0xe102) /\ + [(word pc,0xef37); (scalar,32)] /\ + nonoverlapping (res,64) (word pc,0xef37) /\ nonoverlapping (res,64) (word_sub stackpointer (word 536),544) ==> ensures x86 (\s. bytes_loaded s (word pc) @@ -7205,7 +8314,7 @@ let EDWARDS25519_SCALARMULBASE_ALT_SUBROUTINE_CORRECT = time prove let windows_edwards25519_scalarmulbase_alt_mc, windows_edwards25519_scalarmulbase_alt_data = - define_coda_from_elf 0x2332 + define_coda_from_elf 0x3187 "windows_edwards25519_scalarmulbase_alt_mc" "windows_edwards25519_scalarmulbase_alt_data" "x86/curve25519/edwards25519_scalarmulbase_alt.obj";; @@ -7213,8 +8322,8 @@ let windows_edwards25519_scalarmulbase_alt_mc, let WINDOWS_EDWARDS25519_SCALARMULBASE_ALT_SUBROUTINE_CORRECT = time prove (`!res scalar n pc stackpointer returnaddress. ALL (nonoverlapping (word_sub stackpointer (word 560),560)) - [(word pc,0xe112); (scalar,32)] /\ - nonoverlapping (res,64) (word pc,0xe112) /\ + [(word pc,0xef47); (scalar,32)] /\ + nonoverlapping (res,64) (word pc,0xef47) /\ nonoverlapping (res,64) (word_sub stackpointer (word 560),568) ==> ensures x86 (\s. bytes_loaded s (word pc) @@ -7258,7 +8367,7 @@ let WINDOWS_EDWARDS25519_SCALARMULBASE_ALT_SUBROUTINE_CORRECT = time prove REWRITE_TAC(!simulation_precanon_thms) THEN ENSURES_INIT_TAC "s0" THEN X86_STEPS_TAC WINDOWS_EDWARDS25519_SCALARMULBASE_ALT_EXEC (1--5) THEN RULE_ASSUM_TAC(REWRITE_RULE - [ARITH_RULE `pc + 0x2332 = (pc + 16) + 0x2322`]) THEN + [ARITH_RULE `pc + 0x3187 = (pc + 16) + 0x3177`]) THEN X86_SUBROUTINE_SIM_TAC (windows_edwards25519_scalarmulbase_alt_mc, WINDOWS_EDWARDS25519_SCALARMULBASE_ALT_EXEC, diff --git a/x86/proofs/edwards25519_scalarmuldouble.ml b/x86/proofs/edwards25519_scalarmuldouble.ml index 1eb345a4..947802f8 100644 --- a/x86/proofs/edwards25519_scalarmuldouble.ml +++ b/x86/proofs/edwards25519_scalarmuldouble.ml @@ -8,7 +8,7 @@ (* ========================================================================= *) needs "x86/proofs/base.ml";; -needs "x86/proofs/bignum_modinv.ml";; +needs "x86/proofs/bignum_inv_p25519.ml";; needs "common/ecencoding.ml";; needs "EC/edwards25519.ml";; @@ -39,8 +39,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x41; 0x57; (* PUSH (% r15) *) 0x48; 0x81; 0xec; 0xc0; 0x05; 0x00; 0x00; (* SUB (% rsp) (Imm32 (word 1472)) *) - 0x48; 0x89; 0x7c; 0x24; 0x58; - (* MOV (Memop Quadword (%% (rsp,88))) (% rdi) *) + 0x48; 0x89; 0xbc; 0x24; 0xb8; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1464))) (% rdi) *) 0x4c; 0x8b; 0x01; (* MOV (% r8) (Memop Quadword (%% (rcx,0))) *) 0x4c; 0x8b; 0x49; 0x08; (* MOV (% r9) (Memop Quadword (%% (rcx,8))) *) 0x4c; 0x8b; 0x51; 0x10; (* MOV (% r10) (Memop Quadword (%% (rcx,16))) *) @@ -120,17 +120,17 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) 0x4c; 0x11; 0xde; (* ADC (% rsi) (% r11) *) 0x49; 0x0f; 0x43; 0xc0; (* CMOVAE (% rax) (% r8) *) - 0x48; 0x89; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,448))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% rax) *) 0x49; 0x0f; 0x43; 0xd9; (* CMOVAE (% rbx) (% r9) *) - 0x48; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,456))) (% rbx) *) + 0x48; 0x89; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% rbx) *) 0x49; 0x0f; 0x43; 0xca; (* CMOVAE (% rcx) (% r10) *) - 0x48; 0x89; 0x8c; 0x24; 0xd0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,464))) (% rcx) *) + 0x48; 0x89; 0x8c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% rcx) *) 0x49; 0x0f; 0x43; 0xf3; (* CMOVAE (% rsi) (% r11) *) - 0x48; 0x89; 0xb4; 0x24; 0xd8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,472))) (% rsi) *) + 0x48; 0x89; 0xb4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% rsi) *) 0xb8; 0x26; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 38)) *) 0x4c; 0x8b; 0x42; 0x20; (* MOV (% r8) (Memop Quadword (%% (rdx,32))) *) @@ -145,34 +145,34 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) 0x4c; 0x11; 0xde; (* ADC (% rsi) (% r11) *) 0x49; 0x0f; 0x43; 0xc0; (* CMOVAE (% rax) (% r8) *) - 0x48; 0x89; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,480))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% rax) *) 0x49; 0x0f; 0x43; 0xd9; (* CMOVAE (% rbx) (% r9) *) - 0x48; 0x89; 0x9c; 0x24; 0xe8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,488))) (% rbx) *) + 0x48; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% rbx) *) 0x49; 0x0f; 0x43; 0xca; (* CMOVAE (% rcx) (% r10) *) - 0x48; 0x89; 0x8c; 0x24; 0xf0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,496))) (% rcx) *) + 0x48; 0x89; 0x8c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% rcx) *) 0x49; 0x0f; 0x43; 0xf3; (* CMOVAE (% rsi) (% r11) *) - 0x48; 0x89; 0xb4; 0x24; 0xf8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,504))) (% rsi) *) + 0x48; 0x89; 0xb4; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% rsi) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% rax) *) 0x31; 0xc0; (* XOR (% eax) (% eax) *) - 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) - 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) - 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) - 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x02; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,544)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,448)) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,480)) *) + 0x48; 0x89; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,496))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8d; 0xbc; 0x24; 0x00; 0x02; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,512)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,448)) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x55; 0x00; (* MOV (% rdx) (Memop Quadword (%% (rbp,0))) *) 0xc4; 0x62; 0xbb; 0xf6; 0x0e; @@ -315,63 +315,63 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) - 0x48; 0x8d; 0xbc; 0x24; 0x40; 0x02; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,576)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,448)) *) - 0xe8; 0x10; 0x1e; 0x00; 0x00; - (* CALL (Imm32 (word 7696)) *) - 0x48; 0x8d; 0xbc; 0x24; 0xc0; 0x02; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,704)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,448)) *) - 0x48; 0x8d; 0xac; 0x24; 0x40; 0x02; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,576)) *) - 0xe8; 0x3d; 0x39; 0x00; 0x00; - (* CALL (Imm32 (word 14653)) *) - 0x48; 0x8d; 0xbc; 0x24; 0x40; 0x03; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,832)) *) - 0x48; 0x8d; 0xb4; 0x24; 0x40; 0x02; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,576)) *) - 0xe8; 0xde; 0x1d; 0x00; 0x00; - (* CALL (Imm32 (word 7646)) *) - 0x48; 0x8d; 0xbc; 0x24; 0xc0; 0x03; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,960)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,448)) *) - 0x48; 0x8d; 0xac; 0x24; 0x40; 0x03; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,832)) *) - 0xe8; 0x0b; 0x39; 0x00; 0x00; - (* CALL (Imm32 (word 14603)) *) - 0x48; 0x8d; 0xbc; 0x24; 0x40; 0x04; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,1088)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x02; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,704)) *) - 0xe8; 0xac; 0x1d; 0x00; 0x00; - (* CALL (Imm32 (word 7596)) *) - 0x48; 0x8d; 0xbc; 0x24; 0xc0; 0x04; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,1216)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,448)) *) - 0x48; 0x8d; 0xac; 0x24; 0x40; 0x04; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,1088)) *) - 0xe8; 0xd9; 0x38; 0x00; 0x00; - (* CALL (Imm32 (word 14553)) *) - 0x48; 0x8d; 0xbc; 0x24; 0x40; 0x05; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,1344)) *) - 0x48; 0x8d; 0xb4; 0x24; 0x40; 0x03; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,832)) *) - 0xe8; 0x7a; 0x1d; 0x00; 0x00; - (* CALL (Imm32 (word 7546)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x02; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,544)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,416)) *) + 0xe8; 0x0d; 0x2d; 0x00; 0x00; + (* CALL (Imm32 (word 11533)) *) + 0x48; 0x8d; 0xbc; 0x24; 0xa0; 0x02; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,672)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,544)) *) + 0xe8; 0x3a; 0x48; 0x00; 0x00; + (* CALL (Imm32 (word 18490)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x03; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,800)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x02; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,544)) *) + 0xe8; 0xdb; 0x2c; 0x00; 0x00; + (* CALL (Imm32 (word 11483)) *) + 0x48; 0x8d; 0xbc; 0x24; 0xa0; 0x03; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,928)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xac; 0x24; 0x20; 0x03; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,800)) *) + 0xe8; 0x08; 0x48; 0x00; 0x00; + (* CALL (Imm32 (word 18440)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x04; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,1056)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x02; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,672)) *) + 0xe8; 0xa9; 0x2c; 0x00; 0x00; + (* CALL (Imm32 (word 11433)) *) + 0x48; 0x8d; 0xbc; 0x24; 0xa0; 0x04; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,1184)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xac; 0x24; 0x20; 0x04; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,1056)) *) + 0xe8; 0xd6; 0x47; 0x00; 0x00; + (* CALL (Imm32 (word 18390)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x05; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,1312)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x03; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,800)) *) + 0xe8; 0x77; 0x2c; 0x00; 0x00; + (* CALL (Imm32 (word 11383)) *) 0x48; 0xc7; 0xc0; 0xfc; 0x00; 0x00; 0x00; (* MOV (% rax) (Imm32 (word 252)) *) - 0x48; 0x89; 0x44; 0x24; 0x50; - (* MOV (Memop Quadword (%% (rsp,80))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1456))) (% rax) *) 0x48; 0x8b; 0x44; 0x24; 0x38; (* MOV (% rax) (Memop Quadword (%% (rsp,56))) *) 0x48; 0xc1; 0xe8; 0x3c; (* SHR (% rax) (Imm8 (word 60)) *) - 0x48; 0x89; 0x44; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1440))) (% rax) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) @@ -386,10 +386,10 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) - 0x48; 0x8d; 0x2d; 0x71; 0x5a; 0x00; 0x00; - (* LEA (% rbp) (Riprel (word 23153)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x8d; 0x2d; 0x48; 0x69; 0x00; 0x00; + (* LEA (% rbp) (Riprel (word 26952)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -415,8 +415,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -442,8 +442,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -469,8 +469,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -496,8 +496,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -523,8 +523,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -550,8 +550,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -577,8 +577,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -603,35 +603,35 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xf6; (* CMOVE (% r14) (% rsi) *) 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) - 0x48; 0x89; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,352))) (% rax) *) - 0x48; 0x89; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,360))) (% rbx) *) - 0x48; 0x89; 0x8c; 0x24; 0x70; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,368))) (% rcx) *) - 0x48; 0x89; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,376))) (% rdx) *) - 0x4c; 0x89; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,384))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,392))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,400))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,408))) (% r11) *) - 0x4c; 0x89; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,416))) (% r12) *) - 0x4c; 0x89; 0xac; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,424))) (% r13) *) - 0x4c; 0x89; 0xb4; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,432))) (% r14) *) - 0x4c; 0x89; 0xbc; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,440))) (% r15) *) + 0x48; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rax) *) + 0x48; 0x89; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% rbx) *) + 0x48; 0x89; 0x8c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rcx) *) + 0x48; 0x89; 0x94; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% rdx) *) + 0x4c; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r15) *) 0x48; 0x8b; 0x44; 0x24; 0x18; (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) 0x48; 0xc1; 0xe8; 0x3c; (* SHR (% rax) (Imm8 (word 60)) *) - 0x48; 0x89; 0x44; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1440))) (% rax) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) @@ -642,10 +642,10 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,480)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,448)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -664,8 +664,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -684,8 +684,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -704,8 +704,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -724,8 +724,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -744,8 +744,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -764,8 +764,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -784,8 +784,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -802,24 +802,24 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xd6; (* CMOVE (% r10) (% rsi) *) 0x48; 0x8b; 0x75; 0x38; (* MOV (% rsi) (Memop Quadword (%% (rbp,56))) *) 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) - 0x48; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,256))) (% rax) *) - 0x48; 0x89; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,264))) (% rbx) *) - 0x48; 0x89; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,272))) (% rcx) *) - 0x48; 0x89; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,280))) (% rdx) *) - 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) - 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,448)) *) + 0x48; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rax) *) + 0x48; 0x89; 0x5c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rbx) *) + 0x48; 0x89; 0x4c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rcx) *) + 0x48; 0x89; 0x54; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rdx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x48; 0x8d; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,416)) *) 0x31; 0xc0; (* XOR (% eax) (% eax) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) @@ -828,8 +828,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -848,8 +848,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -868,8 +868,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -888,8 +888,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -908,8 +908,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -928,8 +928,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -948,8 +948,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -968,8 +968,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -986,43 +986,43 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xd6; (* CMOVE (% r10) (% rsi) *) 0x48; 0x8b; 0x75; 0x78; (* MOV (% rsi) (Memop Quadword (%% (rbp,120))) *) 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) - 0x48; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,224))) (% rax) *) - 0x48; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,232))) (% rbx) *) - 0x48; 0x89; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,240))) (% rcx) *) - 0x48; 0x89; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,248))) (% rdx) *) - 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,224)) *) - 0x48; 0x8d; 0xac; 0x24; 0x60; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,352)) *) - 0xe8; 0x17; 0x42; 0x00; 0x00; - (* CALL (Imm32 (word 16919)) *) - 0x48; 0x8b; 0x44; 0x24; 0x50; - (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x48; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x5c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rbx) *) + 0x48; 0x89; 0x4c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rcx) *) + 0x48; 0x89; 0x54; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rdx) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0x74; 0x24; 0x40; + (* LEA (% rsi) (%% (rsp,64)) *) + 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,192)) *) + 0xe8; 0xdb; 0x50; 0x00; 0x00; + (* CALL (Imm32 (word 20699)) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,1456))) *) 0x48; 0x83; 0xe8; 0x04; (* SUB (% rax) (Imm8 (word 4)) *) - 0x48; 0x89; 0x44; 0x24; 0x50; - (* MOV (Memop Quadword (%% (rsp,80))) (% rax) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0xe8; 0x4a; 0x22; 0x00; 0x00; - (* CALL (Imm32 (word 8778)) *) - 0x48; 0x8b; 0x44; 0x24; 0x50; - (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x48; 0x89; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1456))) (% rax) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0xe8; 0x02; 0x31; 0x00; 0x00; + (* CALL (Imm32 (word 12546)) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,1456))) *) 0x48; 0x89; 0xc1; (* MOV (% rcx) (% rax) *) 0x48; 0xc1; 0xe8; 0x06; (* SHR (% rax) (Imm8 (word 6)) *) 0x48; 0x8b; 0x44; 0xc4; 0x20; @@ -1033,10 +1033,10 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) 0x48; 0x31; 0xc8; (* XOR (% rax) (% rcx) *) 0x48; 0x29; 0xc8; (* SUB (% rax) (% rcx) *) - 0x48; 0x89; 0x4c; 0x24; 0x48; - (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) - 0x48; 0x89; 0x44; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x8c; 0x24; 0xa8; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1448))) (% rcx) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1440))) (% rax) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) @@ -1051,10 +1051,10 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) - 0x48; 0x8d; 0x2d; 0xa4; 0x50; 0x00; 0x00; - (* LEA (% rbp) (Riprel (word 20644)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x8d; 0x2d; 0x33; 0x5f; 0x00; 0x00; + (* LEA (% rbp) (Riprel (word 24371)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1080,8 +1080,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1107,8 +1107,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1134,8 +1134,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1161,8 +1161,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1188,8 +1188,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1215,8 +1215,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1242,8 +1242,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1268,37 +1268,37 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xf6; (* CMOVE (% r14) (% rsi) *) 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) - 0x48; 0x8b; 0x7c; 0x24; 0x48; - (* MOV (% rdi) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x8b; 0xbc; 0x24; 0xa8; 0x05; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,1448))) *) 0x48; 0x85; 0xff; (* TEST (% rdi) (% rdi) *) 0x48; 0x89; 0xc6; (* MOV (% rsi) (% rax) *) 0x49; 0x0f; 0x45; 0xf0; (* CMOVNE (% rsi) (% r8) *) 0x4c; 0x0f; 0x45; 0xc0; (* CMOVNE (% r8) (% rax) *) - 0x48; 0x89; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,352))) (% rsi) *) - 0x4c; 0x89; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,384))) (% r8) *) + 0x48; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rsi) *) + 0x4c; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r8) *) 0x48; 0x89; 0xde; (* MOV (% rsi) (% rbx) *) 0x49; 0x0f; 0x45; 0xf1; (* CMOVNE (% rsi) (% r9) *) 0x4c; 0x0f; 0x45; 0xcb; (* CMOVNE (% r9) (% rbx) *) - 0x48; 0x89; 0xb4; 0x24; 0x68; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,360))) (% rsi) *) - 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,392))) (% r9) *) + 0x48; 0x89; 0xb4; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% rsi) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r9) *) 0x48; 0x89; 0xce; (* MOV (% rsi) (% rcx) *) 0x49; 0x0f; 0x45; 0xf2; (* CMOVNE (% rsi) (% r10) *) 0x4c; 0x0f; 0x45; 0xd1; (* CMOVNE (% r10) (% rcx) *) - 0x48; 0x89; 0xb4; 0x24; 0x70; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,368))) (% rsi) *) - 0x4c; 0x89; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,400))) (% r10) *) + 0x48; 0x89; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rsi) *) + 0x4c; 0x89; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r10) *) 0x48; 0x89; 0xd6; (* MOV (% rsi) (% rdx) *) 0x49; 0x0f; 0x45; 0xf3; (* CMOVNE (% rsi) (% r11) *) 0x4c; 0x0f; 0x45; 0xda; (* CMOVNE (% r11) (% rdx) *) - 0x48; 0x89; 0xb4; 0x24; 0x78; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,376))) (% rsi) *) - 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,408))) (% r11) *) + 0x48; 0x89; 0xb4; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% rsi) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r11) *) 0x49; 0x31; 0xfc; (* XOR (% r12) (% rdi) *) 0x49; 0x31; 0xfd; (* XOR (% r13) (% rdi) *) 0x49; 0x31; 0xfe; (* XOR (% r14) (% rdi) *) @@ -1308,16 +1308,16 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) - 0x4c; 0x89; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,416))) (% r12) *) - 0x4c; 0x89; 0xac; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,424))) (% r13) *) - 0x4c; 0x89; 0xb4; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,432))) (% r14) *) - 0x4c; 0x89; 0xbc; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,440))) (% r15) *) - 0x48; 0x8b; 0x44; 0x24; 0x50; - (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x89; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r15) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,1456))) *) 0x48; 0x89; 0xc1; (* MOV (% rcx) (% rax) *) 0x48; 0xc1; 0xe8; 0x06; (* SHR (% rax) (Imm8 (word 6)) *) 0x48; 0x8b; 0x04; 0xc4; (* MOV (% rax) (Memop Quadword (%%% (rsp,3,rax))) *) @@ -1327,10 +1327,10 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) 0x48; 0x31; 0xc8; (* XOR (% rax) (% rcx) *) 0x48; 0x29; 0xc8; (* SUB (% rax) (% rcx) *) - 0x48; 0x89; 0x4c; 0x24; 0x48; - (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) - 0x48; 0x89; 0x44; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x8c; 0x24; 0xa8; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1448))) (% rcx) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1440))) (% rax) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) @@ -1341,10 +1341,10 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,480)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,448)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1363,8 +1363,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1383,8 +1383,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1403,8 +1403,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1423,8 +1423,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1443,8 +1443,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1463,8 +1463,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1483,8 +1483,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1501,24 +1501,24 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xd6; (* CMOVE (% r10) (% rsi) *) 0x48; 0x8b; 0x75; 0x38; (* MOV (% rsi) (Memop Quadword (%% (rbp,56))) *) 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) - 0x48; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,256))) (% rax) *) - 0x48; 0x89; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,264))) (% rbx) *) - 0x48; 0x89; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,272))) (% rcx) *) - 0x48; 0x89; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,280))) (% rdx) *) - 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) - 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,448)) *) + 0x48; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rax) *) + 0x48; 0x89; 0x5c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rbx) *) + 0x48; 0x89; 0x4c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rcx) *) + 0x48; 0x89; 0x54; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rdx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x48; 0x8d; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,416)) *) 0x31; 0xc0; (* XOR (% eax) (% eax) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) @@ -1527,8 +1527,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1547,8 +1547,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1567,8 +1567,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1587,8 +1587,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1607,8 +1607,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1627,8 +1627,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1647,8 +1647,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1667,8 +1667,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1685,8 +1685,8 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x0f; 0x44; 0xd6; (* CMOVE (% r10) (% rsi) *) 0x48; 0x8b; 0x75; 0x78; (* MOV (% rsi) (Memop Quadword (%% (rbp,120))) *) 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) - 0x48; 0x8b; 0x7c; 0x24; 0x48; - (* MOV (% rdi) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x8b; 0xbc; 0x24; 0xa8; 0x05; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,1448))) *) 0x48; 0x31; 0xf8; (* XOR (% rax) (% rdi) *) 0x48; 0x31; 0xfb; (* XOR (% rbx) (% rdi) *) 0x48; 0x31; 0xf9; (* XOR (% rcx) (% rdi) *) @@ -1700,515 +1700,1637 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x48; 0x83; 0xdb; 0x00; (* SBB (% rbx) (Imm8 (word 0)) *) 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) - 0x48; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,224))) (% rax) *) - 0x48; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,232))) (% rbx) *) - 0x48; 0x89; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,240))) (% rcx) *) - 0x48; 0x89; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,248))) (% rdx) *) + 0x48; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x5c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rbx) *) + 0x48; 0x89; 0x4c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rcx) *) + 0x48; 0x89; 0x54; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rdx) *) 0x49; 0x29; 0xf8; (* SUB (% r8) (% rdi) *) 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) - 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0xe8; 0xf3; 0x17; 0x00; 0x00; - (* CALL (Imm32 (word 6131)) *) - 0x48; 0x8d; 0xbc; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,224)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,224)) *) - 0x48; 0x8d; 0xac; 0x24; 0x60; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,352)) *) - 0xe8; 0x86; 0x37; 0x00; 0x00; - (* CALL (Imm32 (word 14214)) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0xe8; 0xc7; 0x17; 0x00; 0x00; - (* CALL (Imm32 (word 6087)) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0xe8; 0x30; 0x09; 0x00; 0x00; - (* CALL (Imm32 (word 2352)) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,224)) *) - 0xe8; 0x63; 0x24; 0x00; 0x00; - (* CALL (Imm32 (word 9315)) *) - 0x48; 0x8b; 0x44; 0x24; 0x50; - (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0xe8; 0x5d; 0x26; 0x00; 0x00; + (* CALL (Imm32 (word 9821)) *) + 0x48; 0x8d; 0x7c; 0x24; 0x40; + (* LEA (% rdi) (%% (rsp,64)) *) + 0x48; 0x8d; 0x74; 0x24; 0x40; + (* LEA (% rsi) (%% (rsp,64)) *) + 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,192)) *) + 0xe8; 0xf6; 0x45; 0x00; 0x00; + (* CALL (Imm32 (word 17910)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0xe8; 0x31; 0x26; 0x00; 0x00; + (* CALL (Imm32 (word 9777)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0xe8; 0x94; 0x17; 0x00; 0x00; + (* CALL (Imm32 (word 6036)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0x48; 0x8d; 0x6c; 0x24; 0x40; + (* LEA (% rbp) (%% (rsp,64)) *) + 0xe8; 0xc4; 0x32; 0x00; 0x00; + (* CALL (Imm32 (word 12996)) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,1456))) *) 0x48; 0x85; 0xc0; (* TEST (% rax) (% rax) *) - 0x0f; 0x85; 0x2c; 0xf5; 0xff; 0xff; - (* JNE (Imm32 (word 4294964524)) *) - 0x48; 0xc7; 0xc7; 0x04; 0x00; 0x00; 0x00; - (* MOV (% rdi) (Imm32 (word 4)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,224)) *) - 0x48; 0x8d; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* LEA (% rdx) (%% (rsp,160)) *) - 0x48; 0x8d; 0x0d; 0x0b; 0x46; 0x00; 0x00; - (* LEA (% rcx) (Riprel (word 17931)) *) - 0x4c; 0x8d; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; - (* LEA (% r8) (%% (rsp,352)) *) - 0x48; 0x89; 0x74; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rsi) *) - 0x4c; 0x89; 0x44; 0x24; 0x38; - (* MOV (Memop Quadword (%% (rsp,56))) (% r8) *) - 0x48; 0x89; 0x4c; 0x24; 0x48; - (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) - 0x4d; 0x8d; 0x14; 0xf8; (* LEA (% r10) (%%% (r8,3,rdi)) *) - 0x4c; 0x89; 0x54; 0x24; 0x30; - (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) - 0x4d; 0x8d; 0x3c; 0xfa; (* LEA (% r15) (%%% (r10,3,rdi)) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4a; 0x8b; 0x04; 0xca; (* MOV (% rax) (Memop Quadword (%%% (rdx,3,r9))) *) - 0x4a; 0x8b; 0x1c; 0xc9; (* MOV (% rbx) (Memop Quadword (%%% (rcx,3,r9))) *) - 0x4b; 0x89; 0x04; 0xca; (* MOV (Memop Quadword (%%% (r10,3,r9))) (% rax) *) - 0x4b; 0x89; 0x1c; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rbx) *) - 0x4b; 0x89; 0x1c; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rbx) *) - 0x4e; 0x89; 0x1c; 0xce; (* MOV (Memop Quadword (%%% (rsi,3,r9))) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) - 0x49; 0x8b; 0x00; (* MOV (% rax) (Memop Quadword (%% (r8,0))) *) - 0x48; 0x89; 0xc3; (* MOV (% rbx) (% rax) *) - 0x48; 0xff; 0xcb; (* DEC (% rbx) *) - 0x49; 0x89; 0x18; (* MOV (Memop Quadword (%% (r8,0))) (% rbx) *) - 0x48; 0x89; 0xc5; (* MOV (% rbp) (% rax) *) - 0x49; 0x89; 0xc4; (* MOV (% r12) (% rax) *) - 0x48; 0xc1; 0xe5; 0x02; (* SHL (% rbp) (Imm8 (word 2)) *) - 0x49; 0x29; 0xec; (* SUB (% r12) (% rbp) *) - 0x49; 0x83; 0xf4; 0x02; (* XOR (% r12) (Imm8 (word 2)) *) - 0x4c; 0x89; 0xe5; (* MOV (% rbp) (% r12) *) - 0x48; 0x0f; 0xaf; 0xe8; (* IMUL (% rbp) (% rax) *) - 0xb8; 0x02; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 2)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x48; 0x83; 0xc5; 0x01; (* ADD (% rbp) (Imm8 (word 1)) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) - 0xb8; 0x01; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) - 0xb8; 0x01; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x0f; 0x85; 0xc6; 0xf4; 0xff; 0xff; + (* JNE (Imm32 (word 4294964422)) *) + 0x48; 0x8d; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,352)) *) + 0x48; 0x89; 0xbc; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rdi) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x48; 0x8d; 0x48; 0xed; (* LEA (% rcx) (%% (rax,18446744073709551597)) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x89; 0x0c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rcx) *) + 0x48; 0x89; 0x44; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rax) *) + 0x48; 0x0f; 0xba; 0xf0; 0x3f; + (* BTR (% rax) (Imm8 (word 63)) *) + 0x48; 0x89; 0x44; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rax) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x8b; 0x4e; 0x08; (* MOV (% rcx) (Memop Quadword (%% (rsi,8))) *) + 0x4c; 0x8b; 0x46; 0x10; (* MOV (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x8b; 0x4e; 0x18; (* MOV (% r9) (Memop Quadword (%% (rsi,24))) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x4c; 0x89; 0x64; 0x24; 0x28; - (* MOV (Memop Quadword (%% (rsp,40))) (% r12) *) - 0x48; 0x89; 0xf8; (* MOV (% rax) (% rdi) *) - 0x48; 0xc1; 0xe0; 0x07; (* SHL (% rax) (Imm8 (word 7)) *) - 0x48; 0x89; 0x44; 0x24; 0x20; - (* MOV (Memop Quadword (%% (rsp,32))) (% rax) *) - 0x4c; 0x8b; 0x6c; 0x24; 0x20; - (* MOV (% r13) (Memop Quadword (%% (rsp,32))) *) - 0x49; 0x83; 0xc5; 0x3f; (* ADD (% r13) (Imm8 (word 63)) *) - 0x49; 0xc1; 0xed; 0x06; (* SHR (% r13) (Imm8 (word 6)) *) - 0x49; 0x39; 0xfd; (* CMP (% r13) (% rdi) *) - 0x4c; 0x0f; 0x43; 0xef; (* CMOVAE (% r13) (% rdi) *) - 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xed; (* XOR (% rbp) (% rbp) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4c; 0x8b; 0x44; 0x24; 0x30; - (* MOV (% r8) (Memop Quadword (%% (rsp,48))) *) - 0x4d; 0x8d; 0x3c; 0xf8; (* LEA (% r15) (%%% (r8,3,rdi)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x1c; 0xc8; (* MOV (% rbx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4d; 0x89; 0xda; (* MOV (% r10) (% r11) *) - 0x4d; 0x21; 0xe2; (* AND (% r10) (% r12) *) - 0x49; 0x21; 0xeb; (* AND (% r11) (% rbp) *) - 0x48; 0x89; 0xd8; (* MOV (% rax) (% rbx) *) - 0x48; 0x09; 0xc8; (* OR (% rax) (% rcx) *) - 0x48; 0xf7; 0xd8; (* NEG (% rax) *) - 0x4d; 0x0f; 0x42; 0xf2; (* CMOVB (% r14) (% r10) *) - 0x49; 0x0f; 0x42; 0xf3; (* CMOVB (% rsi) (% r11) *) - 0x4c; 0x0f; 0x42; 0xe3; (* CMOVB (% r12) (% rbx) *) - 0x48; 0x0f; 0x42; 0xe9; (* CMOVB (% rbp) (% rcx) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0xcb; (* JB (Imm8 (word 203)) *) - 0x4c; 0x89; 0xe0; (* MOV (% rax) (% r12) *) - 0x48; 0x09; 0xe8; (* OR (% rax) (% rbp) *) - 0x48; 0x0f; 0xbd; 0xc8; (* BSR (% rcx) (% rax) *) - 0x48; 0x83; 0xf1; 0x3f; (* XOR (% rcx) (Imm8 (word 63)) *) - 0x4d; 0x0f; 0xa5; 0xf4; (* SHLD (% r12) (% r14) (% cl) *) - 0x48; 0x0f; 0xa5; 0xf5; (* SHLD (% rbp) (% rsi) (% cl) *) - 0x49; 0x8b; 0x00; (* MOV (% rax) (Memop Quadword (%% (r8,0))) *) - 0x49; 0x89; 0xc6; (* MOV (% r14) (% rax) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) - 0x48; 0x89; 0xc6; (* MOV (% rsi) (% rax) *) - 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r10d) (Imm32 (word 1)) *) - 0x41; 0xbb; 0x00; 0x00; 0x00; 0x00; - (* MOV (% r11d) (Imm32 (word 0)) *) - 0xb9; 0x00; 0x00; 0x00; 0x00; - (* MOV (% ecx) (Imm32 (word 0)) *) - 0xba; 0x01; 0x00; 0x00; 0x00; - (* MOV (% edx) (Imm32 (word 1)) *) - 0x41; 0xb9; 0x3a; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 58)) *) - 0x48; 0x89; 0x7c; 0x24; 0x08; - (* MOV (Memop Quadword (%% (rsp,8))) (% rdi) *) - 0x4c; 0x89; 0x6c; 0x24; 0x10; - (* MOV (Memop Quadword (%% (rsp,16))) (% r13) *) - 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) - 0x4c; 0x89; 0x7c; 0x24; 0x18; - (* MOV (Memop Quadword (%% (rsp,24))) (% r15) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0x49; 0x0f; 0xba; 0xe9; 0x3f; + (* BTS (% r9) (Imm8 (word 63)) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x6b; 0xc0; 0x13; (* IMUL3 (% rax) (% rax,Imm8 (word 19)) *) + 0x48; 0x01; 0xc2; (* ADD (% rdx) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4d; 0x11; 0xd0; (* ADC (% r8) (% r10) *) + 0x4d; 0x11; 0xd1; (* ADC (% r9) (% r10) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x49; 0x0f; 0x42; 0xc2; (* CMOVB (% rax) (% r10) *) + 0x48; 0x29; 0xc2; (* SUB (% rdx) (% rax) *) + 0x4c; 0x19; 0xd1; (* SBB (% rcx) (% r10) *) + 0x4d; 0x19; 0xd0; (* SBB (% r8) (% r10) *) + 0x4d; 0x19; 0xd1; (* SBB (% r9) (% r10) *) + 0x49; 0x0f; 0xba; 0xf1; 0x3f; + (* BTR (% r9) (Imm8 (word 63)) *) + 0x48; 0x89; 0x54; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rdx) *) + 0x48; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r9) *) 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x48; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rax) *) + 0x48; 0xb8; 0x99; 0x20; 0x02; 0x75; 0x23; 0x9e; 0xf9; 0xa0; + (* MOV (% rax) (Imm64 (word 11599476190393540761)) *) + 0x48; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rax) *) + 0x48; 0xb8; 0x95; 0x25; 0x13; 0x1d; 0x3f; 0x8f; 0xc6; 0xa8; + (* MOV (% rax) (Imm64 (word 12161565344994108821)) *) + 0x48; 0x89; 0x44; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rax) *) + 0x48; 0xb8; 0x42; 0x52; 0xac; 0x05; 0x38; 0x89; 0x6c; 0x6c; + (* MOV (% rax) (Imm64 (word 7812770327287321154)) *) + 0x48; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rax) *) + 0x48; 0xb8; 0x15; 0x06; 0x77; 0x41; 0xb2; 0x08; 0x65; 0x27; + (* MOV (% rax) (Imm64 (word 2838684701822486037)) *) + 0x48; 0x89; 0x44; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rax) *) + 0x48; 0xc7; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; 0x0a; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (Imm32 (word 10)) *) + 0x48; 0xc7; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (Imm32 (word 1)) *) + 0xe9; 0x07; 0x04; 0x00; 0x00; + (* JMP (Imm32 (word 1031)) *) + 0x4d; 0x89; 0xc1; (* MOV (% r9) (% r8) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xc8; (* XOR (% r8) (% r9) *) + 0x4d; 0x29; 0xc8; (* SUB (% r8) (% r9) *) + 0x4d; 0x89; 0xd3; (* MOV (% r11) (% r10) *) + 0x49; 0xc1; 0xfb; 0x3f; (* SAR (% r11) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xda; (* XOR (% r10) (% r11) *) + 0x4d; 0x29; 0xda; (* SUB (% r10) (% r11) *) + 0x4d; 0x89; 0xe5; (* MOV (% r13) (% r12) *) + 0x49; 0xc1; 0xfd; 0x3f; (* SAR (% r13) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xec; (* XOR (% r12) (% r13) *) + 0x4d; 0x29; 0xec; (* SUB (% r12) (% r13) *) + 0x4d; 0x89; 0xf7; (* MOV (% r15) (% r14) *) + 0x49; 0xc1; 0xff; 0x3f; (* SAR (% r15) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xfe; (* XOR (% r14) (% r15) *) + 0x4d; 0x29; 0xfe; (* SUB (% r14) (% r15) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x4c; 0x21; 0xc8; (* AND (% rax) (% r9) *) + 0x4c; 0x89; 0xd7; (* MOV (% rdi) (% r10) *) + 0x4c; 0x21; 0xdf; (* AND (% rdi) (% r11) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x89; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% rdi) *) + 0x4c; 0x89; 0xe0; (* MOV (% rax) (% r12) *) + 0x4c; 0x21; 0xe8; (* AND (% rax) (% r13) *) + 0x4c; 0x89; 0xf6; (* MOV (% rsi) (% r14) *) + 0x4c; 0x21; 0xfe; (* AND (% rsi) (% r15) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x89; 0xb4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rsi) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) - 0x4d; 0x31; 0xc0; (* XOR (% r8) (% r8) *) - 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x49; 0x0f; 0xba; 0xe6; 0x00; - (* BT (% r14) (Imm8 (word 0)) *) - 0x48; 0x0f; 0x42; 0xc5; (* CMOVB (% rax) (% rbp) *) - 0x48; 0x0f; 0x42; 0xde; (* CMOVB (% rbx) (% rsi) *) - 0x4c; 0x0f; 0x42; 0xc1; (* CMOVB (% r8) (% rcx) *) - 0x4c; 0x0f; 0x42; 0xfa; (* CMOVB (% r15) (% rdx) *) - 0x4d; 0x89; 0xf5; (* MOV (% r13) (% r14) *) - 0x49; 0x29; 0xde; (* SUB (% r14) (% rbx) *) - 0x4c; 0x29; 0xeb; (* SUB (% rbx) (% r13) *) - 0x4c; 0x89; 0xe7; (* MOV (% rdi) (% r12) *) - 0x48; 0x29; 0xc7; (* SUB (% rdi) (% rax) *) - 0x49; 0x0f; 0x42; 0xec; (* CMOVB (% rbp) (% r12) *) - 0x4c; 0x8d; 0x67; 0xff; (* LEA (% r12) (%% (rdi,18446744073709551615)) *) - 0x4c; 0x0f; 0x42; 0xf3; (* CMOVB (% r14) (% rbx) *) - 0x49; 0x0f; 0x42; 0xf5; (* CMOVB (% rsi) (% r13) *) - 0x49; 0xf7; 0xd4; (* NOT (% r12) *) - 0x49; 0x0f; 0x42; 0xca; (* CMOVB (% rcx) (% r10) *) - 0x49; 0x0f; 0x42; 0xd3; (* CMOVB (% rdx) (% r11) *) - 0x4c; 0x0f; 0x43; 0xe7; (* CMOVAE (% r12) (% rdi) *) - 0x49; 0xd1; 0xee; (* SHR (% r14) (Imm8 (word 1)) *) - 0x4d; 0x01; 0xc2; (* ADD (% r10) (% r8) *) - 0x4d; 0x01; 0xfb; (* ADD (% r11) (% r15) *) - 0x49; 0xd1; 0xec; (* SHR (% r12) (Imm8 (word 1)) *) - 0x48; 0x01; 0xc9; (* ADD (% rcx) (% rcx) *) - 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) - 0x49; 0xff; 0xc9; (* DEC (% r9) *) - 0x75; 0x9c; (* JNE (Imm8 (word 156)) *) - 0x48; 0x8b; 0x7c; 0x24; 0x08; - (* MOV (% rdi) (Memop Quadword (%% (rsp,8))) *) - 0x4c; 0x8b; 0x6c; 0x24; 0x10; - (* MOV (% r13) (Memop Quadword (%% (rsp,16))) *) - 0x4c; 0x8b; 0x04; 0x24; (* MOV (% r8) (Memop Quadword (%% (rsp,0))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x18; - (* MOV (% r15) (Memop Quadword (%% (rsp,24))) *) - 0x4c; 0x89; 0x14; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r10) *) - 0x4c; 0x89; 0x5c; 0x24; 0x08; - (* MOV (Memop Quadword (%% (rsp,8))) (% r11) *) - 0x48; 0x89; 0x4c; 0x24; 0x10; - (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) - 0x48; 0x89; 0x54; 0x24; 0x18; - (* MOV (Memop Quadword (%% (rsp,24))) (% rdx) *) - 0x4c; 0x8b; 0x44; 0x24; 0x38; - (* MOV (% r8) (Memop Quadword (%% (rsp,56))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x40; - (* MOV (% r15) (Memop Quadword (%% (rsp,64))) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x0c; 0xc8; (* MOV (% rcx) (Memop Quadword (%%% (r8,3,r9))) *) 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) - 0x48; 0x8b; 0x44; 0x24; 0x10; - (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x44; 0x24; 0x08; (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) - 0x4d; 0x0f; 0xac; 0xf2; 0x3a; - (* SHRD (% r10) (% r14) (Imm8 (word 58)) *) - 0x4f; 0x89; 0x14; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% r10) *) - 0x4d; 0x89; 0xf2; (* MOV (% r10) (% r14) *) - 0x4d; 0x89; 0xe6; (* MOV (% r14) (% r12) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x28; + (* MOV (% rax) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x0f; 0xac; 0xdf; 0x3b; + (* SHRD (% rdi) (% rbx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x3c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rdi) *) + 0x31; 0xff; (* XOR (% edi) (% edi) *) + 0x48; 0x8b; 0x44; 0x24; 0x08; + (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd7; (* ADC (% rdi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x28; + (* MOV (% rax) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd7; (* ADC (% rdi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xee; 0x3b; + (* SHRD (% rsi) (% rbp) (Imm8 (word 59)) *) + 0x48; 0x89; 0x74; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rsi) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xcb; 0x3b; + (* SHRD (% rbx) (% rcx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x5c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x48; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x0f; 0xac; 0xfd; 0x3b; + (* SHRD (% rbp) (% rdi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rbp) *) 0x48; 0x8b; 0x44; 0x24; 0x18; (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x48; 0x89; 0xc5; (* MOV (% rbp) (% rax) *) + 0x48; 0xc1; 0xfd; 0x3f; (* SAR (% rbp) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xc5; (* AND (% rbp) (% r8) *) + 0x48; 0xf7; 0xdd; (* NEG (% rbp) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) - 0x49; 0x0f; 0xac; 0xf3; 0x3a; - (* SHRD (% r11) (% rsi) (Imm8 (word 58)) *) - 0x4f; 0x89; 0x1c; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% r11) *) - 0x49; 0x89; 0xf3; (* MOV (% r11) (% rsi) *) - 0x48; 0x89; 0xee; (* MOV (% rsi) (% rbp) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0x93; (* JB (Imm8 (word 147)) *) - 0x4d; 0x0f; 0xa4; 0xd6; 0x06; - (* SHLD (% r14) (% r10) (Imm8 (word 6)) *) - 0x4c; 0x0f; 0xa4; 0xde; 0x06; - (* SHLD (% rsi) (% r11) (Imm8 (word 6)) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x48; - (* MOV (% r15) (Memop Quadword (%% (rsp,72))) *) - 0x49; 0x8b; 0x18; (* MOV (% rbx) (Memop Quadword (%% (r8,0))) *) - 0x4c; 0x8b; 0x64; 0x24; 0x28; - (* MOV (% r12) (Memop Quadword (%% (rsp,40))) *) - 0x4c; 0x0f; 0xaf; 0xe3; (* IMUL (% r12) (% rbx) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) + 0x48; 0x8b; 0x44; 0x24; 0x38; + (* MOV (% rax) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x48; 0x89; 0xc2; (* MOV (% rdx) (% rax) *) + 0x48; 0xc1; 0xfa; 0x3f; (* SAR (% rdx) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x48; 0x29; 0xd5; (* SUB (% rbp) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x0f; 0xac; 0xf1; 0x3b; + (* SHRD (% rcx) (% rsi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x4c; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) + 0x48; 0x0f; 0xac; 0xee; 0x3b; + (* SHRD (% rsi) (% rbp) (Imm8 (word 59)) *) + 0x48; 0x8b; 0x44; 0x24; 0x18; + (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) + 0x48; 0x89; 0x74; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rsi) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x48; 0x89; 0xc6; (* MOV (% rsi) (% rax) *) + 0x48; 0xc1; 0xfe; 0x3f; (* SAR (% rsi) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xe6; (* AND (% rsi) (% r12) *) + 0x48; 0xf7; 0xde; (* NEG (% rsi) *) 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) - 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x41; 0xb9; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 1)) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x74; 0x24; (* JE (Imm8 (word 36)) *) - 0x4f; 0x13; 0x14; 0xc8; (* ADC (% r10) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x19; 0xdb; (* SBB (% rbx) (% rbx) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x38; + (* MOV (% rax) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x48; 0x89; 0xc2; (* MOV (% rdx) (% rax) *) + 0x48; 0xc1; 0xfa; 0x3f; (* SAR (% rdx) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xf2; (* AND (% rdx) (% r14) *) + 0x48; 0x29; 0xd6; (* SUB (% rsi) (% rdx) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xdf; 0x3b; + (* SHRD (% rdi) (% rbx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x7c; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% rdi) *) + 0x48; 0x0f; 0xac; 0xf3; 0x3b; + (* SHRD (% rbx) (% rsi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% rbx) *) + 0x48; 0x8b; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rbp) (Memop Quadword (%% (rsp,136))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) - 0x48; 0x29; 0xda; (* SUB (% rdx) (% rbx) *) - 0x4c; 0x01; 0xd0; (* ADD (% rax) (% r10) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xdc; (* JNE (Imm8 (word 220)) *) - 0x4d; 0x11; 0xf2; (* ADC (% r10) (% r14) *) - 0x4d; 0x89; 0x54; 0xf8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,rdi,-- &8))) (% r10) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x1b; 0x04; 0xcf; (* SBB (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xf0; (* JNE (Imm8 (word 240)) *) - 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x49; 0xf7; 0xd2; (* NOT (% r10) *) - 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4c; 0x21; 0xd3; (* AND (% rbx) (% r10) *) - 0x48; 0xf7; 0xd9; (* NEG (% rcx) *) - 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) + 0x48; 0x89; 0x5c; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rbx) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x89; 0x6c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rbp) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x89; 0x74; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rsi) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x89; 0x5c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rbx) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x89; 0x6c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rbp) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x4c; 0x89; 0xcb; (* MOV (% rbx) (% r9) *) + 0x4c; 0x21; 0xc3; (* AND (% rbx) (% r8) *) + 0x48; 0xf7; 0xdb; (* NEG (% rbx) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x48; 0x29; 0xd3; (* SUB (% rbx) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xda; (* ADC (% rdx) (% rbx) *) + 0x48; 0x89; 0xd3; (* MOV (% rbx) (% rdx) *) + 0x48; 0x0f; 0xa4; 0xca; 0x01; + (* SHLD (% rdx) (% rcx) (Imm8 (word 1)) *) + 0x48; 0xc1; 0xfb; 0x3f; (* SAR (% rbx) (Imm8 (word 63)) *) + 0x48; 0x01; 0xda; (* ADD (% rdx) (% rbx) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x48; 0xf7; 0xea; (* IMUL2 (% rdx,% rax) (% rdx) *) 0x4c; 0x8b; 0x44; 0x24; 0x40; (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) - 0x49; 0x8b; 0x18; (* MOV (% rbx) (Memop Quadword (%% (r8,0))) *) - 0x48; 0x8b; 0x6c; 0x24; 0x28; - (* MOV (% rbp) (Memop Quadword (%% (rsp,40))) *) - 0x48; 0x0f; 0xaf; 0xeb; (* IMUL (% rbp) (% rbx) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) - 0x48; 0xf7; 0xe5; (* MUL2 (% rdx,% rax) (% rbp) *) - 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x41; 0xb9; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 1)) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x74; 0x24; (* JE (Imm8 (word 36)) *) - 0x4f; 0x13; 0x1c; 0xc8; (* ADC (% r11) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x19; 0xdb; (* SBB (% rbx) (% rbx) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0xf7; 0xe5; (* MUL2 (% rdx,% rax) (% rbp) *) - 0x48; 0x29; 0xda; (* SUB (% rdx) (% rbx) *) - 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xdc; (* JNE (Imm8 (word 220)) *) - 0x49; 0x11; 0xf3; (* ADC (% r11) (% rsi) *) - 0x4d; 0x89; 0x5c; 0xf8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,rdi,-- &8))) (% r11) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x1b; 0x04; 0xcf; (* SBB (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xf0; (* JNE (Imm8 (word 240)) *) - 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xf7; 0xd3; (* NOT (% r11) *) - 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4c; 0x21; 0xdb; (* AND (% rbx) (% r11) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% r8) (Memop Quadword (%% (rsp,72))) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% r8) (Memop Quadword (%% (rsp,80))) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4c; 0x89; 0x44; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r8) *) + 0x48; 0x11; 0xd9; (* ADC (% rcx) (% rbx) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x48; 0x89; 0x4c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rcx) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x4c; 0x21; 0xe1; (* AND (% rcx) (% r12) *) 0x48; 0xf7; 0xd9; (* NEG (% rcx) *) - 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) - 0x4c; 0x8b; 0x44; 0x24; 0x30; - (* MOV (% r8) (Memop Quadword (%% (rsp,48))) *) - 0x4d; 0x8d; 0x3c; 0xf8; (* LEA (% r15) (%%% (r8,3,rdi)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xed; (* XOR (% rbp) (% rbp) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4b; 0x8b; 0x0c; 0xc8; (* MOV (% rcx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x48; 0x8b; 0x44; 0x24; 0x10; - (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x8b; 0x44; 0x24; 0x08; - (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x4c; 0x29; 0xe2; (* SUB (% rdx) (% r12) *) - 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) - 0x49; 0x19; 0xd2; (* SBB (% r10) (% rdx) *) - 0x4d; 0x19; 0xe4; (* SBB (% r12) (% r12) *) - 0x4f; 0x89; 0x34; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% r14) *) - 0x4d; 0x89; 0xd6; (* MOV (% r14) (% r10) *) - 0x48; 0x8b; 0x44; 0x24; 0x18; - (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x48; 0x29; 0xea; (* SUB (% rdx) (% rbp) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x4c; 0x89; 0xfa; (* MOV (% rdx) (% r15) *) + 0x4c; 0x21; 0xf2; (* AND (% rdx) (% r14) *) + 0x48; 0x29; 0xd1; (* SUB (% rcx) (% rdx) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xca; (* ADC (% rdx) (% rcx) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x48; 0x0f; 0xa4; 0xf2; 0x01; + (* SHLD (% rdx) (% rsi) (Imm8 (word 1)) *) + 0x48; 0xc1; 0xf9; 0x3f; (* SAR (% rcx) (Imm8 (word 63)) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x48; 0x01; 0xca; (* ADD (% rdx) (% rcx) *) + 0x48; 0xf7; 0xea; (* IMUL2 (% rdx,% rax) (% rdx) *) + 0x4c; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% r8) (Memop Quadword (%% (rsp,96))) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% r8) (Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x44; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x48; 0x11; 0xce; (* ADC (% rsi) (% rcx) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x89; 0x74; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rsi) *) + 0x48; 0x8b; 0xb4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0x8b; 0x14; 0x24; (* MOV (% rdx) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x20; + (* MOV (% rcx) (Memop Quadword (%% (rsp,32))) *) + 0x48; 0x89; 0xd3; (* MOV (% rbx) (% rdx) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) - 0x49; 0x19; 0xd3; (* SBB (% r11) (% rdx) *) - 0x48; 0x19; 0xed; (* SBB (% rbp) (% rbp) *) - 0x4b; 0x89; 0x34; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rsi) *) - 0x4c; 0x89; 0xde; (* MOV (% rsi) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0x97; (* JB (Imm8 (word 151)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4d; 0x89; 0xe2; (* MOV (% r10) (% r12) *) - 0x49; 0x89; 0xeb; (* MOV (% r11) (% rbp) *) - 0x4d; 0x31; 0xe6; (* XOR (% r14) (% r12) *) - 0x48; 0x31; 0xee; (* XOR (% rsi) (% rbp) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4c; 0x31; 0xe0; (* XOR (% rax) (% r12) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x83; 0xd0; 0x00; (* ADC (% rax) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x31; 0xe8; (* XOR (% rax) (% rbp) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x83; 0xd0; 0x00; (* ADC (% rax) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x4b; 0x89; 0x04; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0xce; (* JB (Imm8 (word 206)) *) - 0x4d; 0x29; 0xd6; (* SUB (% r14) (% r10) *) - 0x4c; 0x29; 0xde; (* SUB (% rsi) (% r11) *) - 0x4d; 0x89; 0xe9; (* MOV (% r9) (% r13) *) - 0x4b; 0x8b; 0x44; 0xc8; 0xf8; - (* MOV (% rax) (Memop Quadword (%%%% (r8,3,r9,-- &8))) *) - 0x49; 0x89; 0xc2; (* MOV (% r10) (% rax) *) - 0x4c; 0x0f; 0xac; 0xf0; 0x3a; - (* SHRD (% rax) (% r14) (Imm8 (word 58)) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x4d; 0x89; 0xd6; (* MOV (% r14) (% r10) *) - 0x4b; 0x8b; 0x44; 0xcf; 0xf8; - (* MOV (% rax) (Memop Quadword (%%%% (r15,3,r9,-- &8))) *) - 0x49; 0x89; 0xc3; (* MOV (% r11) (% rax) *) - 0x48; 0x0f; 0xac; 0xf0; 0x3a; - (* SHRD (% rax) (% rsi) (Imm8 (word 58)) *) - 0x4b; 0x89; 0x44; 0xcf; 0xf8; - (* MOV (Memop Quadword (%%%% (r15,3,r9,-- &8))) (% rax) *) - 0x4c; 0x89; 0xde; (* MOV (% rsi) (% r11) *) - 0x49; 0xff; 0xc9; (* DEC (% r9) *) - 0x75; 0xd1; (* JNE (Imm8 (word 209)) *) - 0x48; 0xf7; 0xd5; (* NOT (% rbp) *) - 0x48; 0x8b; 0x4c; 0x24; 0x48; - (* MOV (% rcx) (Memop Quadword (%% (rsp,72))) *) - 0x4c; 0x8b; 0x44; 0x24; 0x38; - (* MOV (% r8) (Memop Quadword (%% (rsp,56))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x40; - (* MOV (% r15) (Memop Quadword (%% (rsp,64))) *) - 0x4d; 0x89; 0xe2; (* MOV (% r10) (% r12) *) - 0x49; 0x89; 0xeb; (* MOV (% r11) (% rbp) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x48; 0x89; 0xea; (* MOV (% rdx) (% rbp) *) - 0x4a; 0x8b; 0x04; 0xc9; (* MOV (% rax) (Memop Quadword (%%% (rcx,3,r9))) *) - 0x48; 0x21; 0xc2; (* AND (% rdx) (% rax) *) - 0x4c; 0x21; 0xe0; (* AND (% rax) (% r12) *) - 0x4b; 0x8b; 0x1c; 0xc8; (* MOV (% rbx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4c; 0x31; 0xe3; (* XOR (% rbx) (% r12) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x11; 0xd8; (* ADC (% rax) (% rbx) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x31; 0xeb; (* XOR (% rbx) (% rbp) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x11; 0xda; (* ADC (% rdx) (% rbx) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x4b; 0x89; 0x14; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xc3; (* JB (Imm8 (word 195)) *) - 0x48; 0x83; 0x6c; 0x24; 0x20; 0x3a; - (* SUB (Memop Quadword (%% (rsp,32))) (Imm8 (word 58)) *) - 0x0f; 0x87; 0x8d; 0xfb; 0xff; 0xff; - (* JA (Imm32 (word 4294966157)) *) - 0x48; 0x8b; 0x7c; 0x24; 0x58; - (* MOV (% rdi) (Memop Quadword (%% (rsp,88))) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,224)) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x48; 0x8d; 0x14; 0x03; (* LEA (% rdx) (%%% (rbx,0,rax)) *) + 0x48; 0x8d; 0x3c; 0x01; (* LEA (% rdi) (%%% (rcx,0,rax)) *) + 0x48; 0xc1; 0xe2; 0x16; (* SHL (% rdx) (Imm8 (word 22)) *) + 0x48; 0xc1; 0xe7; 0x16; (* SHL (% rdi) (Imm8 (word 22)) *) + 0x48; 0xc1; 0xfa; 0x2b; (* SAR (% rdx) (Imm8 (word 43)) *) + 0x48; 0xc1; 0xff; 0x2b; (* SAR (% rdi) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x48; 0x8d; 0x1c; 0x03; (* LEA (% rbx) (%%% (rbx,0,rax)) *) + 0x48; 0x8d; 0x0c; 0x01; (* LEA (% rcx) (%%% (rcx,0,rax)) *) + 0x48; 0xc1; 0xfb; 0x2a; (* SAR (% rbx) (Imm8 (word 42)) *) + 0x48; 0xc1; 0xf9; 0x2a; (* SAR (% rcx) (Imm8 (word 42)) *) + 0x48; 0x89; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rdx) *) + 0x48; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rbx) *) + 0x48; 0x89; 0xbc; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% rdi) *) + 0x48; 0x89; 0x8c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% rcx) *) + 0x4c; 0x8b; 0x24; 0x24; (* MOV (% r12) (Memop Quadword (%% (rsp,0))) *) + 0x49; 0x0f; 0xaf; 0xfc; (* IMUL (% rdi) (% r12) *) + 0x4c; 0x0f; 0xaf; 0xe2; (* IMUL (% r12) (% rdx) *) + 0x4c; 0x8b; 0x6c; 0x24; 0x20; + (* MOV (% r13) (Memop Quadword (%% (rsp,32))) *) + 0x49; 0x0f; 0xaf; 0xdd; (* IMUL (% rbx) (% r13) *) + 0x4c; 0x0f; 0xaf; 0xe9; (* IMUL (% r13) (% rcx) *) + 0x49; 0x01; 0xdc; (* ADD (% r12) (% rbx) *) + 0x49; 0x01; 0xfd; (* ADD (% r13) (% rdi) *) + 0x49; 0xc1; 0xfc; 0x14; (* SAR (% r12) (Imm8 (word 20)) *) + 0x49; 0xc1; 0xfd; 0x14; (* SAR (% r13) (Imm8 (word 20)) *) + 0x4c; 0x89; 0xe3; (* MOV (% rbx) (% r12) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x4c; 0x8d; 0x04; 0x03; (* LEA (% r8) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x14; 0x01; (* LEA (% r10) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xe0; 0x16; (* SHL (% r8) (Imm8 (word 22)) *) + 0x49; 0xc1; 0xe2; 0x16; (* SHL (% r10) (Imm8 (word 22)) *) + 0x49; 0xc1; 0xf8; 0x2b; (* SAR (% r8) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfa; 0x2b; (* SAR (% r10) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x4c; 0x8d; 0x3c; 0x03; (* LEA (% r15) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x1c; 0x01; (* LEA (% r11) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xff; 0x2a; (* SAR (% r15) (Imm8 (word 42)) *) + 0x49; 0xc1; 0xfb; 0x2a; (* SAR (% r11) (Imm8 (word 42)) *) + 0x4c; 0x89; 0xeb; (* MOV (% rbx) (% r13) *) + 0x4c; 0x89; 0xe1; (* MOV (% rcx) (% r12) *) + 0x4d; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% r8) *) + 0x49; 0x0f; 0xaf; 0xdf; (* IMUL (% rbx) (% r15) *) + 0x49; 0x01; 0xdc; (* ADD (% r12) (% rbx) *) + 0x4d; 0x0f; 0xaf; 0xeb; (* IMUL (% r13) (% r11) *) + 0x49; 0x0f; 0xaf; 0xca; (* IMUL (% rcx) (% r10) *) + 0x49; 0x01; 0xcd; (* ADD (% r13) (% rcx) *) + 0x49; 0xc1; 0xfc; 0x14; (* SAR (% r12) (Imm8 (word 20)) *) + 0x49; 0xc1; 0xfd; 0x14; (* SAR (% r13) (Imm8 (word 20)) *) + 0x4c; 0x89; 0xe3; (* MOV (% rbx) (% r12) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x49; 0x0f; 0xaf; 0xd7; (* IMUL (% rdx) (% r15) *) + 0x4c; 0x0f; 0xaf; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* IMUL (% r8) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x0f; 0xaf; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* IMUL (% r15) (Memop Quadword (%% (rsp,184))) *) + 0x4d; 0x01; 0xc7; (* ADD (% r15) (% r8) *) + 0x4c; 0x8d; 0x0c; 0x10; (* LEA (% r9) (%%% (rax,0,rdx)) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) + 0x49; 0x0f; 0xaf; 0xc2; (* IMUL (% rax) (% r10) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x49; 0x0f; 0xaf; 0xd3; (* IMUL (% rdx) (% r11) *) + 0x4c; 0x0f; 0xaf; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* IMUL (% r10) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x0f; 0xaf; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* IMUL (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x4d; 0x01; 0xd3; (* ADD (% r11) (% r10) *) + 0x4c; 0x8d; 0x2c; 0x10; (* LEA (% r13) (%%% (rax,0,rdx)) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x4c; 0x8d; 0x04; 0x03; (* LEA (% r8) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x24; 0x01; (* LEA (% r12) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xe0; 0x15; (* SHL (% r8) (Imm8 (word 21)) *) + 0x49; 0xc1; 0xe4; 0x15; (* SHL (% r12) (Imm8 (word 21)) *) + 0x49; 0xc1; 0xf8; 0x2b; (* SAR (% r8) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfc; 0x2b; (* SAR (% r12) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x4c; 0x8d; 0x14; 0x03; (* LEA (% r10) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x34; 0x01; (* LEA (% r14) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xfa; 0x2b; (* SAR (% r10) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfe; 0x2b; (* SAR (% r14) (Imm8 (word 43)) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x49; 0x0f; 0xaf; 0xd2; (* IMUL (% rdx) (% r10) *) + 0x4d; 0x0f; 0xaf; 0xc7; (* IMUL (% r8) (% r15) *) + 0x4d; 0x0f; 0xaf; 0xd3; (* IMUL (% r10) (% r11) *) + 0x4d; 0x01; 0xc2; (* ADD (% r10) (% r8) *) + 0x4c; 0x8d; 0x04; 0x10; (* LEA (% r8) (%%% (rax,0,rdx)) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x49; 0x0f; 0xaf; 0xc4; (* IMUL (% rax) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x49; 0x0f; 0xaf; 0xd6; (* IMUL (% rdx) (% r14) *) + 0x4d; 0x0f; 0xaf; 0xe7; (* IMUL (% r12) (% r15) *) + 0x4d; 0x0f; 0xaf; 0xf3; (* IMUL (% r14) (% r11) *) + 0x4d; 0x01; 0xe6; (* ADD (% r14) (% r12) *) + 0x4c; 0x8d; 0x24; 0x10; (* LEA (% r12) (%%% (rax,0,rdx)) *) + 0x48; 0x89; 0xb4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% rsi) *) + 0x48; 0xff; 0x8c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* DEC (Memop Quadword (%% (rsp,144))) *) + 0x0f; 0x85; 0xc1; 0xee; 0xff; 0xff; + (* JNE (Imm32 (word 4294962881)) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x20; + (* MOV (% rcx) (Memop Quadword (%% (rsp,32))) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x49; 0x0f; 0xaf; 0xca; (* IMUL (% rcx) (% r10) *) + 0x48; 0x01; 0xc8; (* ADD (% rax) (% rcx) *) + 0x48; 0xc1; 0xf8; 0x3f; (* SAR (% rax) (Imm8 (word 63)) *) + 0x4d; 0x89; 0xc1; (* MOV (% r9) (% r8) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xc8; (* XOR (% r8) (% r9) *) + 0x4d; 0x29; 0xc8; (* SUB (% r8) (% r9) *) + 0x49; 0x31; 0xc1; (* XOR (% r9) (% rax) *) + 0x4d; 0x89; 0xd3; (* MOV (% r11) (% r10) *) + 0x49; 0xc1; 0xfb; 0x3f; (* SAR (% r11) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xda; (* XOR (% r10) (% r11) *) + 0x4d; 0x29; 0xda; (* SUB (% r10) (% r11) *) + 0x49; 0x31; 0xc3; (* XOR (% r11) (% rax) *) + 0x4d; 0x89; 0xe5; (* MOV (% r13) (% r12) *) + 0x49; 0xc1; 0xfd; 0x3f; (* SAR (% r13) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xec; (* XOR (% r12) (% r13) *) + 0x4d; 0x29; 0xec; (* SUB (% r12) (% r13) *) + 0x49; 0x31; 0xc5; (* XOR (% r13) (% rax) *) + 0x4d; 0x89; 0xf7; (* MOV (% r15) (% r14) *) + 0x49; 0xc1; 0xff; 0x3f; (* SAR (% r15) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xfe; (* XOR (% r14) (% r15) *) + 0x4d; 0x29; 0xfe; (* SUB (% r14) (% r15) *) + 0x49; 0x31; 0xc7; (* XOR (% r15) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x4c; 0x21; 0xc8; (* AND (% rax) (% r9) *) + 0x4d; 0x89; 0xd4; (* MOV (% r12) (% r10) *) + 0x4d; 0x21; 0xdc; (* AND (% r12) (% r11) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) + 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) + 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x4d; 0x21; 0xc1; (* AND (% r9) (% r8) *) + 0x49; 0xf7; 0xd9; (* NEG (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x49; 0x29; 0xd1; (* SUB (% r9) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4c; 0x0f; 0xa4; 0xf8; 0x01; + (* SHLD (% rax) (% r15) (Imm8 (word 1)) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0xbb; 0x13; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 19)) *) + 0x4a; 0x8d; 0x44; 0x08; 0x01; + (* LEA (% rax) (%%%% (rax,0,r9,&1)) *) + 0x48; 0xf7; 0xeb; (* IMUL2 (% rdx,% rax) (% rbx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x4d; 0x11; 0xce; (* ADC (% r14) (% r9) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x48; 0x0f; 0x49; 0xdd; (* CMOVNS (% rbx) (% rbp) *) + 0x49; 0x29; 0xdc; (* SUB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x0f; 0xba; 0xf7; 0x3f; + (* BTR (% r15) (Imm8 (word 63)) *) + 0x48; 0x8b; 0xbc; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x89; 0x27; (* MOV (Memop Quadword (%% (rdi,0))) (% r12) *) + 0x4c; 0x89; 0x6f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r13) *) + 0x4c; 0x89; 0x77; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r14) *) + 0x4c; 0x89; 0x7f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r15) *) + 0x48; 0x8b; 0xbc; 0x24; 0xb8; 0x05; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,1464))) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,416)) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x55; 0x00; (* MOV (% rdx) (Memop Quadword (%% (rbp,0))) *) 0xc4; 0x62; 0xbb; 0xf6; 0x0e; @@ -2362,13 +3484,13 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) - 0x48; 0x8b; 0x7c; 0x24; 0x58; - (* MOV (% rdi) (Memop Quadword (%% (rsp,88))) *) + 0x48; 0x8b; 0xbc; 0x24; 0xb8; 0x05; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,1464))) *) 0x48; 0x83; 0xc7; 0x20; (* ADD (% rdi) (Imm8 (word 32)) *) - 0x48; 0x8d; 0xb4; 0x24; 0x80; 0x00; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,128)) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,224)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,320)) *) + 0x48; 0x8d; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,416)) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x55; 0x00; (* MOV (% rdx) (Memop Quadword (%% (rbp,0))) *) 0xc4; 0x62; 0xbb; 0xf6; 0x0e; @@ -7714,55 +8836,53 @@ let edwards25519_scalarmuldouble_mc,edwards25519_scalarmuldouble_data = (* ADD (% rsp) (Imm32 (word 192)) *) 0xc3 (* RET *) ] -[237; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 127; 62; 145; 64; 215; 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; - 253; 9; 138; 143; 104; 52; 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; - 68; 133; 59; 140; 245; 198; 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; - 207; 194; 66; 61; 100; 152; 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; - 104; 170; 122; 135; 5; 18; 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; - 140; 89; 67; 221; 203; 125; 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; - 168; 213; 180; 66; 96; 165; 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; - 170; 55; 110; 177; 107; 35; 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; - 215; 113; 60; 147; 252; 231; 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; - 2; 7; 214; 225; 101; 154; 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; - 155; 165; 179; 168; 250; 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; - 61; 11; 132; 160; 15; 80; 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; - 252; 164; 232; 31; 97; 86; 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; - 75; 33; 26; 243; 49; 129; 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; - 76; 168; 176; 37; 175; 138; 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; - 2; 80; 27; 193; 244; 248; 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; - 147; 174; 20; 98; 218; 53; 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; - 112; 209; 198; 180; 185; 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; - 149; 169; 250; 96; 86; 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; - 195; 154; 164; 69; 116; 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; - 56; 37; 253; 125; 244; 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; - 39; 135; 229; 33; 3; 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; - 193; 92; 123; 69; 57; 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; - 85; 99; 191; 12; 157; 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; - 39; 75; 209; 20; 0; 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; - 235; 115; 126; 74; 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; - 195; 72; 80; 141; 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; - 204; 69; 41; 133; 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; - 8; 14; 39; 45; 167; 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; - 170; 67; 164; 140; 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; - 87; 185; 83; 69; 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; - 49; 113; 21; 119; 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; - 167; 89; 218; 104; 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; - 75; 234; 2; 103; 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; - 59; 8; 75; 162; 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; - 170; 154; 44; 111; 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; - 79; 118; 234; 157; 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; - 208; 92; 26; 107; 210; 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; - 82; 178; 113; 126; 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; - 109; 131; 241; 154; 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; - 156; 82; 167; 144; 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; - 167; 226; 249; 88; 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; - 39; 44; 195; 1; 14; 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; - 44; 112; 136; 226; 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; - 47; 229; 188; 97; 96; 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; - 215; 167; 204; 139; 120; 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; - 149; 78; 204; 46; 92; 124; 144; 38];; +[62; 145; 64; 215; 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; + 138; 143; 104; 52; 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; + 59; 140; 245; 198; 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; + 66; 61; 100; 152; 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; + 122; 135; 5; 18; 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; + 67; 221; 203; 125; 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; + 180; 66; 96; 165; 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; + 110; 177; 107; 35; 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; + 60; 147; 252; 231; 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; + 225; 101; 154; 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; + 179; 168; 250; 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; + 132; 160; 15; 80; 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; 252; 164; + 232; 31; 97; 86; 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; + 243; 49; 129; 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; + 37; 175; 138; 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; + 244; 248; 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; + 98; 218; 53; 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; + 180; 185; 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; + 96; 86; 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; + 69; 116; 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; + 125; 244; 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; + 33; 3; 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; + 69; 57; 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; + 12; 157; 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; + 20; 0; 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; + 126; 74; 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; + 80; 141; 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; + 41; 133; 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; + 45; 167; 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; + 164; 140; 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; + 83; 69; 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; + 21; 119; 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; + 218; 104; 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; + 2; 103; 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; + 162; 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; + 111; 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; + 157; 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; + 210; 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; + 126; 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; + 154; 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; + 144; 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; + 88; 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; + 14; 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; + 226; 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; + 97; 96; 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; + 139; 120; 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; + 92; 124; 144; 38];; let EDWARDS25519_SCALARMULDOUBLE_EXEC = X86_MK_EXEC_RULE edwards25519_scalarmuldouble_mc;; @@ -7958,24 +9078,23 @@ let GE25519_GROUPER = (MATCH_MP pth (CONJ th1 th2));; let BYTES_LOADED_DATA = prove - (`bytes_loaded s (word (pc + 0x5ee1)) edwards25519_scalarmuldouble_data <=> - read (memory :> bytes(word (pc + 0x5ee1),800)) s = + (`bytes_loaded s (word (pc + 0x6de1)) edwards25519_scalarmuldouble_data <=> + read (memory :> bytes(word (pc + 0x6de1),768)) s = num_of_bytelist edwards25519_scalarmuldouble_data`, REWRITE_TAC[bytes_loaded; READ_BYTELIST_EQ_BYTES; CONV_RULE (RAND_CONV LENGTH_CONV) (AP_TERM `LENGTH:byte list->num` edwards25519_scalarmuldouble_data)]);; let EDWARDS25519DOUBLEBASE_TABLE_LEMMA = prove - (`read (memory :> bytes(word (pc + 0x5ee1),800)) s = + (`read (memory :> bytes(word (pc + 0x6de1),768)) s = num_of_bytelist edwards25519_scalarmuldouble_data - ==> bignum_from_memory(word(pc + 0x5ee1),4) s = p_25519 /\ - !i. i < 8 + ==> !i. i < 8 ==> edwards25519_epprojective (group_pow edwards25519_group E_25519 (i + 1)) - (bignum_from_memory(word(pc + 0x5f01 + 96 * i),4) s, - bignum_from_memory(word(pc + 0x5f01 + 96 * i + 32),4) s, - bignum_from_memory(word(pc + 0x5f01 + 96 * i + 64),4) s) /\ - ~(bignum_from_memory(word(pc + 0x5f01 + 96 * i + 64),4) s = + (bignum_from_memory(word(pc + 0x6de1 + 96 * i),4) s, + bignum_from_memory(word(pc + 0x6de1 + 96 * i + 32),4) s, + bignum_from_memory(word(pc + 0x6de1 + 96 * i + 64),4) s) /\ + ~(bignum_from_memory(word(pc + 0x6de1 + 96 * i + 64),4) s = 0)`, let GE25519_POWERS = end_itlist CONJ @@ -7983,7 +9102,7 @@ let EDWARDS25519DOUBLEBASE_TABLE_LEMMA = prove [GE25519_POW_1]) in REWRITE_TAC[GSYM BYTES_LOADED_DATA; edwards25519_scalarmuldouble_data] THEN CONV_TAC(LAND_CONV DATA64_CONV) THEN STRIP_TAC THEN - CONV_TAC(RAND_CONV EXPAND_CASES_CONV) THEN + CONV_TAC EXPAND_CASES_CONV THEN CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[WORD_ADD] THEN CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN REWRITE_TAC[GSYM WORD_ADD] THEN ASM_REWRITE_TAC[] THEN @@ -8017,14 +9136,14 @@ let lvs = "resy",[`RBP`;`32`]; "scalar",[`RSP`;`0`]; "bscalar",[`RSP`;`32`]; - "acc",[`RSP`;`96`]; - "acc_x",[`RSP`;`96`]; - "acc_y",[`RSP`;`128`]; - "acc_z",[`RSP`;`160`]; - "acc_w",[`RSP`;`192`]; - "tabent",[`RSP`;`224`]; - "btabent",[`RSP`;`352`]; - "tab",[`RSP`;`448`]; + "tabent",[`RSP`;`64`]; + "btabent",[`RSP`;`192`]; + "acc",[`RSP`;`288`]; + "acc_x",[`RSP`;`288`]; + "acc_y",[`RSP`;`296`]; + "acc_z",[`RSP`;`328`]; + "acc_w",[`RSP`;`360`]; + "tab",[`RSP`;`416`]; (*** These are local for the subroutines ***) @@ -8058,7 +9177,7 @@ let LOCAL_MUL_P25519_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0x6201) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x70e1) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read RIP s = pcin /\ @@ -8234,7 +9353,7 @@ let LOCAL_MUL_4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0x6201) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x70e1) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read RIP s = pcin /\ @@ -8400,7 +9519,7 @@ let LOCAL_SQR_4_TAC = !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n ==> - nonoverlapping (word pc,0x6201) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x70e1) (word_add (read p3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read RIP s = pcin /\ @@ -8563,7 +9682,7 @@ let LOCAL_ADD_TWICE4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0x6201) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x70e1) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read RIP s = pcin /\ @@ -8636,7 +9755,7 @@ let LOCAL_DOUBLE_TWICE4_TAC = `!(t:x86state) pcin pcout q3 n3 q1 n1. !n. read(memory :> bytes(word_add (read q1 t) (word n1),8 * 4)) t = n ==> - nonoverlapping (word pc,0x6201) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x70e1) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read RIP s = pcin /\ @@ -8707,7 +9826,7 @@ let LOCAL_SUB_TWICE4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0x6201) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x70e1) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ read RIP s = pcin /\ @@ -8782,20 +9901,16 @@ let LOCAL_SUB_TWICE4_TAC = (* ------------------------------------------------------------------------- *) let LOCAL_MODINV_TAC = - let cth = - (GEN_REWRITE_CONV RAND_CONV [bignum_modinv_mc] THENC TRIM_LIST_CONV) - `TRIM_LIST (23,15) bignum_modinv_mc` - and bth = edwards25519_scalarmuldouble_mc - and th = CONV_RULE (DEPTH_CONV WORD_NUM_RED_CONV) - (SPEC `word 4:int64` CORE_MODINV_CORRECT) in - X86_SUBROUTINE_SIM_TAC(bth,EDWARDS25519_SCALARMULDOUBLE_EXEC,0x18de,cth,th) - [`read RSI s`; `read RDX s`; - `read (memory :> bytes(read RDX s,8 * 4)) s`; - `read RCX s`; - `read (memory :> bytes(read RCX s,8 * 4)) s`; - `read R8 s`; - `pc + 0x18de`; - `read RSP s`];; + X86_SUBROUTINE_SIM_TAC + (edwards25519_scalarmuldouble_mc, + EDWARDS25519_SCALARMULDOUBLE_EXEC, + 0x196a, + (GEN_REWRITE_CONV RAND_CONV [bignum_inv_p25519_mc] THENC TRIM_LIST_CONV) + `TRIM_LIST (17,18) bignum_inv_p25519_mc`, + CORE_INV_P25519_CORRECT) + [`read RDI s`; `read RSI s`; + `read (memory :> bytes(read RSI s,8 * 4)) s`; + `pc + 0x196a`; `word_add stackpointer (word 200):int64`];; (* ------------------------------------------------------------------------- *) (* Embedded subroutine correctness. *) @@ -8804,17 +9919,17 @@ let LOCAL_MODINV_TAC = let LOCAL_EPDOUBLE_CORRECT = time prove (`!p3 p1 T1 pc stackpointer. ALL (nonoverlapping (stackpointer,160)) - [(word pc,0x6201); (p3,128); (p1,96)] /\ - nonoverlapping (p3,128) (word pc,0x6201) + [(word pc,0x70e1); (p3,128); (p1,96)] /\ + nonoverlapping (p3,128) (word pc,0x70e1) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ - read RIP s = word(pc + 0x21ca) /\ + read RIP s = word(pc + 0x30ca) /\ read RSP s = stackpointer /\ read RDI s = p3 /\ read RSI s = p1 /\ bignum_triple_from_memory(p1,4) s = T1) - (\s. read RIP s = word (pc + 0x3043) /\ + (\s. read RIP s = word (pc + 0x3f43) /\ !P1. P1 IN group_carrier edwards25519_group /\ edwards25519_projective2 P1 T1 ==> edwards25519_exprojective2 @@ -8909,17 +10024,17 @@ let LOCAL_EPDOUBLE_TAC = let LOCAL_PDOUBLE_CORRECT = time prove (`!p3 p1 T1 pc stackpointer. ALL (nonoverlapping (stackpointer,160)) - [(word pc,0x6201); (p3,96); (p1,96)] /\ - nonoverlapping (p3,96) (word pc,0x6201) + [(word pc,0x70e1); (p3,96); (p1,96)] /\ + nonoverlapping (p3,96) (word pc,0x70e1) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ - read RIP s = word(pc + 0x3052) /\ + read RIP s = word(pc + 0x3f52) /\ read RSP s = stackpointer /\ read RDI s = p3 /\ read RSI s = p1 /\ bignum_triple_from_memory(p1,4) s = T1) - (\s. read RIP s = word (pc + 0x3d05) /\ + (\s. read RIP s = word (pc + 0x4c05) /\ !P1. P1 IN group_carrier edwards25519_group /\ edwards25519_projective2 P1 T1 ==> edwards25519_projective2 @@ -9017,19 +10132,19 @@ let LOCAL_PDOUBLE_TAC = let LOCAL_EPADD_CORRECT = time prove (`!p3 p1 Q1 p2 Q2 pc stackpointer. ALL (nonoverlapping (stackpointer,192)) - [(word pc,0x6201); (p3,128); (p1,128); (p2,128)] /\ - nonoverlapping (p3,128) (word pc,0x6201) + [(word pc,0x70e1); (p3,128); (p1,128); (p2,128)] /\ + nonoverlapping (p3,128) (word pc,0x70e1) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ - read RIP s = word(pc + 0x3d14) /\ + read RIP s = word(pc + 0x4c14) /\ read RSP s = stackpointer /\ read RDI s = p3 /\ read RSI s = p1 /\ read RBP s = p2 /\ bignum_quadruple_from_memory(p1,4) s = Q1 /\ bignum_quadruple_from_memory(p2,4) s = Q2) - (\s. read RIP s = word (pc + 0x4ff3) /\ + (\s. read RIP s = word (pc + 0x5ef3) /\ !P1 P2. P1 IN group_carrier edwards25519_group /\ P2 IN group_carrier edwards25519_group /\ edwards25519_exprojective2 P1 Q1 /\ @@ -9163,19 +10278,19 @@ let LOCAL_EPADD_TAC = let LOCAL_PEPADD_CORRECT = time prove (`!p3 p1 Q1 p2 T2 pc stackpointer. ALL (nonoverlapping (stackpointer,192)) - [(word pc,0x6201); (p3,128); (p1,128); (p2,96)] /\ - nonoverlapping (p3,128) (word pc,0x6201) + [(word pc,0x70e1); (p3,128); (p1,128); (p2,96)] /\ + nonoverlapping (p3,128) (word pc,0x70e1) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_mc /\ - read RIP s = word(pc + 0x5002) /\ + read RIP s = word(pc + 0x5f02) /\ read RSP s = stackpointer /\ read RDI s = p3 /\ read RSI s = p1 /\ read RBP s = p2 /\ bignum_quadruple_from_memory(p1,4) s = Q1 /\ bignum_triple_from_memory(p2,4) s = T2) - (\s. read RIP s = word (pc + 0x5ed9) /\ + (\s. read RIP s = word (pc + 0x6dd9) /\ !P1 P2. P1 IN group_carrier edwards25519_group /\ P2 IN group_carrier edwards25519_group /\ edwards25519_exprojective2w P1 Q1 /\ @@ -9303,8 +10418,8 @@ let LOCAL_PEPADD_TAC = let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove (`!res scalar point bscalar n xy m pc stackpointer. ALL (nonoverlapping (stackpointer,1672)) - [(word pc,0x6201); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ - nonoverlapping (res,64) (word pc,0x6201) + [(word pc,0x70e1); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ + nonoverlapping (res,64) (word pc,0x70e1) ==> ensures x86 (\s. bytes_loaded s (word pc) (APPEND edwards25519_scalarmuldouble_mc @@ -9315,7 +10430,7 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove bignum_from_memory (scalar,4) s = n /\ bignum_pair_from_memory (point,4) s = xy /\ bignum_from_memory (bscalar,4) s = m) - (\s. read RIP s = word (pc + 0x21b1) /\ + (\s. read RIP s = word (pc + 0x30b1) /\ !P. P IN group_carrier edwards25519_group /\ paired (modular_decode (256,p_25519)) xy = P ==> bignum_pair_from_memory(res,4) s = @@ -9394,13 +10509,13 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove (*** Setup of the main loop ***) - ENSURES_WHILE_DOWN_TAC `63` `pc + 0xde4` `pc + 0x18aa` + ENSURES_WHILE_DOWN_TAC `63` `pc + 0xe20` `pc + 0x1949` `\i s. - read (memory :> bytes(word(pc + 0x5ee1),800)) s = + read (memory :> bytes(word(pc + 0x6de1),768)) s = num_of_bytelist edwards25519_scalarmuldouble_data /\ read RSP s = word_add stackpointer (word 200) /\ - read (memory :> bytes64(word_add stackpointer (word 288))) s = res /\ - read (memory :> bytes64(word_add stackpointer (word 280))) s = + read (memory :> bytes64(word_add stackpointer (word 1664))) s = res /\ + read (memory :> bytes64(word_add stackpointer (word 1656))) s = word (4 * i) /\ bignum_from_memory(word_add stackpointer (word 200),4) s = n /\ bignum_from_memory(word_add stackpointer (word 232),4) s = m /\ @@ -9410,7 +10525,7 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ==> edwards25519_exprojective2 (group_pow edwards25519_group P (j + 1)) (bignum_quadruple_from_memory - (word_add stackpointer (word (648 + 128 * j)),4) s)) /\ + (word_add stackpointer (word (616 + 128 * j)),4) s)) /\ edwards25519_exprojective2 (group_mul edwards25519_group (group_zpow edwards25519_group P @@ -9418,7 +10533,7 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove (group_zpow edwards25519_group E_25519 (&(m DIV 2 EXP (4 * i)) - &(recoder DIV 2 EXP (4 * i))))) (bignum_quadruple_from_memory - (word_add stackpointer (word 296),4) s)` THEN + (word_add stackpointer (word 488),4) s)` THEN REPEAT CONJ_TAC THENL [ARITH_TAC; @@ -9509,7 +10624,7 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove X86_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (56--59) (48--67) THEN ABBREV_TAC `X = - read(memory :> bytes(word_add stackpointer (word 648),8 * 4)) s67` THEN + read(memory :> bytes(word_add stackpointer (word 616),8 * 4)) s67` THEN SUBGOAL_THEN `x MOD (2 * p_25519) = X` MP_TAC THENL [MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN MAP_EVERY EXISTS_TAC [`256`; @@ -9553,7 +10668,7 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove X86_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (76--79) (68--87) THEN ABBREV_TAC `Y = - read(memory :> bytes(word_add stackpointer (word 680),8 * 4)) s87` THEN + read(memory :> bytes(word_add stackpointer (word 648),8 * 4)) s87` THEN SUBGOAL_THEN `y MOD (2 * p_25519) = Y` MP_TAC THENL [MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN MAP_EVERY EXISTS_TAC [`256`; @@ -9594,11 +10709,11 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove LOCAL_MUL_4_TAC 9 ["x_0"; "x_1"; "x_2"] THEN REABBREV_TAC `W = - read(memory :> bytes(word_add stackpointer (word 744),8 * 4)) s97` THEN + read(memory :> bytes(word_add stackpointer (word 712),8 * 4)) s97` THEN POP_ASSUM SUBST_ALL_TAC THEN ABBREV_TAC `Z = - read(memory :> bytes(word_add stackpointer (word 712),8 * 4)) s97` THEN + read(memory :> bytes(word_add stackpointer (word 680),8 * 4)) s97` THEN SUBGOAL_THEN `Z < 2 * p_25519 /\ (Z == 1) (mod (2 * p_25519))` STRIP_ASSUME_TAC THENL [EXPAND_TAC "Z" THEN CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN @@ -9634,10 +10749,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_2 = read(memory :> bytes(word_add stackpointer (word 776),8 * 4)) s102`; - `Y_2 = read(memory :> bytes(word_add stackpointer (word 808),8 * 4)) s102`; - `Z_2 = read(memory :> bytes(word_add stackpointer (word 840),8 * 4)) s102`; - `W_2 = read(memory :> bytes(word_add stackpointer (word 872),8 * 4)) s102`] + [`X_2 = read(memory :> bytes(word_add stackpointer (word 744),8 * 4)) s102`; + `Y_2 = read(memory :> bytes(word_add stackpointer (word 776),8 * 4)) s102`; + `Z_2 = read(memory :> bytes(word_add stackpointer (word 808),8 * 4)) s102`; + `W_2 = read(memory :> bytes(word_add stackpointer (word 840),8 * 4)) s102`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9661,10 +10776,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_3 = read(memory :> bytes(word_add stackpointer (word 904),8 * 4)) s110`; - `Y_3 = read(memory :> bytes(word_add stackpointer (word 936),8 * 4)) s110`; - `Z_3 = read(memory :> bytes(word_add stackpointer (word 968),8 * 4)) s110`; - `W_3 = read(memory :> bytes(word_add stackpointer (word 1000),8 * 4)) s110`] + [`X_3 = read(memory :> bytes(word_add stackpointer (word 872),8 * 4)) s110`; + `Y_3 = read(memory :> bytes(word_add stackpointer (word 904),8 * 4)) s110`; + `Z_3 = read(memory :> bytes(word_add stackpointer (word 936),8 * 4)) s110`; + `W_3 = read(memory :> bytes(word_add stackpointer (word 968),8 * 4)) s110`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9688,10 +10803,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_4 = read(memory :> bytes(word_add stackpointer (word 1032),8 * 4)) s117`; - `Y_4 = read(memory :> bytes(word_add stackpointer (word 1064),8 * 4)) s117`; - `Z_4 = read(memory :> bytes(word_add stackpointer (word 1096),8 * 4)) s117`; - `W_4 = read(memory :> bytes(word_add stackpointer (word 1128),8 * 4)) s117`] + [`X_4 = read(memory :> bytes(word_add stackpointer (word 1000),8 * 4)) s117`; + `Y_4 = read(memory :> bytes(word_add stackpointer (word 1032),8 * 4)) s117`; + `Z_4 = read(memory :> bytes(word_add stackpointer (word 1064),8 * 4)) s117`; + `W_4 = read(memory :> bytes(word_add stackpointer (word 1096),8 * 4)) s117`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9716,10 +10831,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_5 = read(memory :> bytes(word_add stackpointer (word 1160),8 * 4)) s125`; - `Y_5 = read(memory :> bytes(word_add stackpointer (word 1192),8 * 4)) s125`; - `Z_5 = read(memory :> bytes(word_add stackpointer (word 1224),8 * 4)) s125`; - `W_5 = read(memory :> bytes(word_add stackpointer (word 1256),8 * 4)) s125`] + [`X_5 = read(memory :> bytes(word_add stackpointer (word 1128),8 * 4)) s125`; + `Y_5 = read(memory :> bytes(word_add stackpointer (word 1160),8 * 4)) s125`; + `Z_5 = read(memory :> bytes(word_add stackpointer (word 1192),8 * 4)) s125`; + `W_5 = read(memory :> bytes(word_add stackpointer (word 1224),8 * 4)) s125`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9743,10 +10858,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_6 = read(memory :> bytes(word_add stackpointer (word 1288),8 * 4)) s132`; - `Y_6 = read(memory :> bytes(word_add stackpointer (word 1320),8 * 4)) s132`; - `Z_6 = read(memory :> bytes(word_add stackpointer (word 1352),8 * 4)) s132`; - `W_6 = read(memory :> bytes(word_add stackpointer (word 1384),8 * 4)) s132`] + [`X_6 = read(memory :> bytes(word_add stackpointer (word 1256),8 * 4)) s132`; + `Y_6 = read(memory :> bytes(word_add stackpointer (word 1288),8 * 4)) s132`; + `Z_6 = read(memory :> bytes(word_add stackpointer (word 1320),8 * 4)) s132`; + `W_6 = read(memory :> bytes(word_add stackpointer (word 1352),8 * 4)) s132`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9771,10 +10886,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_7 = read(memory :> bytes(word_add stackpointer (word 1416),8 * 4)) s140`; - `Y_7 = read(memory :> bytes(word_add stackpointer (word 1448),8 * 4)) s140`; - `Z_7 = read(memory :> bytes(word_add stackpointer (word 1480),8 * 4)) s140`; - `W_7 = read(memory :> bytes(word_add stackpointer (word 1512),8 * 4)) s140`] + [`X_7 = read(memory :> bytes(word_add stackpointer (word 1384),8 * 4)) s140`; + `Y_7 = read(memory :> bytes(word_add stackpointer (word 1416),8 * 4)) s140`; + `Z_7 = read(memory :> bytes(word_add stackpointer (word 1448),8 * 4)) s140`; + `W_7 = read(memory :> bytes(word_add stackpointer (word 1480),8 * 4)) s140`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9798,10 +10913,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_8 = read(memory :> bytes(word_add stackpointer (word 1544),8 * 4)) s147`; - `Y_8 = read(memory :> bytes(word_add stackpointer (word 1576),8 * 4)) s147`; - `Z_8 = read(memory :> bytes(word_add stackpointer (word 1608),8 * 4)) s147`; - `W_8 = read(memory :> bytes(word_add stackpointer (word 1640),8 * 4)) s147`] + [`X_8 = read(memory :> bytes(word_add stackpointer (word 1512),8 * 4)) s147`; + `Y_8 = read(memory :> bytes(word_add stackpointer (word 1544),8 * 4)) s147`; + `Z_8 = read(memory :> bytes(word_add stackpointer (word 1576),8 * 4)) s147`; + `W_8 = read(memory :> bytes(word_add stackpointer (word 1608),8 * 4)) s147`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9824,9 +10939,9 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (150--154) THEN FIRST_X_ASSUM(MP_TAC o SPEC `m DIV 2 EXP 252` o MATCH_MP (MESON[] - `read (memory :> bytes64 (word_add stackpointer (word 264))) s = x + `read (memory :> bytes64 (word_add stackpointer (word 1640))) s = x ==> !m. x = word m - ==> read (memory :> bytes64 (word_add stackpointer (word 264))) s = + ==> read (memory :> bytes64 (word_add stackpointer (word 1640))) s = word m`)) THEN ANTS_TAC THENL [EXPAND_TAC "m" THEN @@ -9838,11 +10953,11 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove (*** Address the precomputed table separately ***) - FIRST_ASSUM(MP_TAC o CONJUNCT2 o + FIRST_ASSUM(MP_TAC o MATCH_MP EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[ARITH_RULE `pc + 0x5f01 + x = (pc + 0x5f01) + x`] THEN + REWRITE_TAC[ARITH_RULE `pc + 0x6de1 + x = (pc + 0x6de1) + x`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `wpc:int64 = word(pc + 0x5f01)` THEN + ABBREV_TAC `wpc:int64 = word(pc + 0x6de1)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD_0] THEN @@ -9863,9 +10978,9 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ANTS_TAC THENL [EXPAND_TAC "wpc" THEN CONV_TAC WORD_RULE; DISCH_TAC] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (168--386) THEN MAP_EVERY ABBREV_TAC - [`XPY = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s386`; - `YMX = read(memory :> bytes(word_add stackpointer (word 584),8 * 4)) s386`; - `KXY = read(memory :> bytes(word_add stackpointer (word 616),8 * 4)) s386`] + [`XPY = read(memory :> bytes(word_add stackpointer (word 392),8 * 4)) s386`; + `YMX = read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s386`; + `KXY = read(memory :> bytes(word_add stackpointer (word 456),8 * 4)) s386`] THEN SUBGOAL_THEN `edwards25519_epprojective (group_pow edwards25519_group E_25519 ix) @@ -9885,7 +11000,8 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove REWRITE_TAC[bignum_of_wordlist; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN REWRITE_TAC[d_25519; p_25519] THEN CONV_TAC INT_REDUCE_CONV; - REPEAT(FIRST_X_ASSUM(K ALL_TAC o check(free_in `wpc:int64` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check(free_in `word_add (wpc:int64)` o concl))) THEN UNDISCH_THEN `m DIV 2 EXP 252 = ix` (SUBST_ALL_TAC o SYM) THEN DISCARD_MATCHING_ASSUMPTIONS [`read c s = if x then y else z`] THEN CLARIFY_TAC] THEN @@ -9894,9 +11010,9 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (387--389) THEN FIRST_X_ASSUM(MP_TAC o SPEC `n DIV 2 EXP 252` o MATCH_MP (MESON[] - `read (memory :> bytes64 (word_add stackpointer (word 264))) s = x + `read (memory :> bytes64 (word_add stackpointer (word 1640))) s = x ==> !m. x = word m - ==> read (memory :> bytes64 (word_add stackpointer (word 264))) s = + ==> read (memory :> bytes64 (word_add stackpointer (word 1640))) s = word m`)) THEN ANTS_TAC THENL [EXPAND_TAC "n" THEN @@ -9910,14 +11026,15 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove ABBREV_TAC `iy = n DIV 2 EXP 252` THEN BIGNUM_LDIGITIZE_TAC "fab_" - `read(memory :> bytes(word_add stackpointer (word 648),8 * 128)) s389` THEN + `read(memory :> bytes(word_add stackpointer (word 616),8 * 128)) s389` THEN CLARIFY_TAC THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (390--709) THEN + MAP_EVERY ABBREV_TAC - [`Xt = read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s709`; - `Yt = read(memory :> bytes(word_add stackpointer (word 456),8 * 4)) s709`; - `Zt = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s709`; - `Wt = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s709`] + [`Xt = read(memory :> bytes(word_add stackpointer (word 264),8 * 4)) s709`; + `Yt = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s709`; + `Zt = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s709`; + `Wt = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s709`] THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -10022,26 +11139,19 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o MATCH_MP (MESON[] `(!x. P x ==> Q x /\ R x) ==> (!x. P x ==> R x)`)) THEN MAP_EVERY ABBREV_TAC - [`X = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s0`; - `Y = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s0`; - `Z = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s0`; - `W = read(memory :> bytes(word_add stackpointer (word 392),8 * 4)) s0`] + [`X = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s0`; + `Y = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s0`; + `Z = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s0`; + `W = read(memory :> bytes(word_add stackpointer (word 584),8 * 4)) s0`] THEN DISCH_TAC THEN (*** Call the modular inverse ***) - FIRST_X_ASSUM(MP_TAC o CONJUNCT1 o MATCH_MP - EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN DISCH_TAC THEN - X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (1--8) THEN - RULE_ASSUM_TAC(REWRITE_RULE[WORD_RULE - `word(val(word(pc + a):int64) + b):int64 = word(pc + a + b)`]) THEN - RULE_ASSUM_TAC(CONV_RULE(ONCE_DEPTH_CONV NUM_ADD_CONV)) THEN - - LOCAL_MODINV_TAC 9 THEN + X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (1--5) THEN + LOCAL_MODINV_TAC 6 THEN ABBREV_TAC `Z' = - read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s9` THEN + read(memory :> bytes(word_add stackpointer (word 616),8 * 4)) s6` THEN (*** Final multiplications ***) @@ -10071,12 +11181,17 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove SIMP_TAC[INT_OF_NUM_OF_INT; INT_REM_POS_EQ; INT_OF_NUM_EQ; ARITH_EQ] THEN REWRITE_TAC[GSYM p_25519; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ_0; INT_REM_EQ] THEN - STRIP_TAC THEN FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN - ONCE_REWRITE_TAC[COPRIME_SYM] THEN - SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519] THEN - ASM_REWRITE_TAC[num_divides; num_congruent] THEN ANTS_TAC THENL - [REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; - REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES]] THEN + STRIP_TAC THEN + SUBGOAL_THEN `Z' < p_25519 /\ (Z * Z' == 1) (mod p_25519)` + MP_TAC THENL + [FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN MATCH_MP_TAC(TAUT + `p /\ (q ==> r) /\ (p /\ q ==> s) ==> (p ==> q) ==> r /\ s`) THEN + REPEAT CONJ_TAC THENL + [ASM_SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; num_divides]; + DISCH_THEN SUBST1_TAC THEN REWRITE_TAC[INVERSE_MOD_BOUND] THEN + REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; + MESON_TAC[INVERSE_MOD_RMUL]]; + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; num_congruent]] THEN DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN MATCH_MP_TAC(INTEGER_RULE `(x * z:int == X) (mod p) /\ (y * z == Y) (mod p) @@ -10097,13 +11212,13 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN GHOST_INTRO_TAC `Xa:num` - `bignum_from_memory (word_add stackpointer (word 296),4)` THEN + `bignum_from_memory (word_add stackpointer (word 488),4)` THEN GHOST_INTRO_TAC `Ya:num` - `bignum_from_memory (word_add stackpointer (word 328),4)` THEN + `bignum_from_memory (word_add stackpointer (word 520),4)` THEN GHOST_INTRO_TAC `Za:num` - `bignum_from_memory (word_add stackpointer (word 360),4)` THEN + `bignum_from_memory (word_add stackpointer (word 552),4)` THEN GHOST_INTRO_TAC `Wa:num` - `bignum_from_memory(word_add stackpointer (word 392),4)` THEN + `bignum_from_memory(word_add stackpointer (word 584),4)` THEN REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN (*** Doubling to acc' = 2 * acc ***) @@ -10112,9 +11227,9 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove RULE_ASSUM_TAC(REWRITE_RULE[WORD_RULE `word_sub (word (4 * (i + 1))) (word 4) = word(4 * i)`]) THEN LOCAL_PDOUBLE_TAC 8 THEN MAP_EVERY ABBREV_TAC - [`X2a = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s8`; - `Y2a = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s8`; - `Z2a = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s8` + [`X2a = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s8`; + `Y2a = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s8`; + `Z2a = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s8` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (9--10) THEN @@ -10185,11 +11300,11 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove (*** Address the precomputed table separately ***) - FIRST_ASSUM(MP_TAC o CONJUNCT2 o + FIRST_ASSUM(MP_TAC o MATCH_MP EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[ARITH_RULE `pc + 0x5f01 + x = (pc + 0x5f01) + x`] THEN + REWRITE_TAC[ARITH_RULE `pc + 0x6de1 + x = (pc + 0x6de1) + x`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `wpc:int64 = word(pc + 0x5f01)` THEN + ABBREV_TAC `wpc:int64 = word(pc + 0x6de1)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD_0] THEN @@ -10241,16 +11356,17 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove REWRITE_TAC[bignum_of_wordlist; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN REWRITE_TAC[d_25519; p_25519] THEN CONV_TAC INT_REDUCE_CONV; - REPEAT(FIRST_X_ASSUM(K ALL_TAC o check(free_in `wpc:int64` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check(free_in `word_add (wpc:int64)` o concl))) THEN CLARIFY_TAC] THEN (*** Optional negation of the table entry ***) X86_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (270--273) (243--277) THEN MAP_EVERY ABBREV_TAC - [`XPY = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s277`; - `YMX = read(memory :> bytes(word_add stackpointer (word 584),8 * 4)) s277`; - `KXY = read(memory :> bytes(word_add stackpointer (word 616),8 * 4)) s277`] + [`XPY = read(memory :> bytes(word_add stackpointer (word 392),8 * 4)) s277`; + `YMX = read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s277`; + `KXY = read(memory :> bytes(word_add stackpointer (word 456),8 * 4)) s277`] THEN SUBGOAL_THEN `edwards25519_epprojectivew @@ -10374,23 +11490,22 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove (*** Constant-time indexing in the fresh-point table ***) BIGNUM_LDIGITIZE_TAC "fab_" - `read(memory :> bytes(word_add stackpointer (word 648),8 * 128)) s289` THEN + `read(memory :> bytes(word_add stackpointer (word 616),8 * 128)) s289` THEN CLARIFY_TAC THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (290--601) THEN - MAP_EVERY REABBREV_TAC [`fab0 = read RAX s601`; `fab1 = read RBX s601`; `fab2 = read RCX s601`; `fab3 = read RDX s601`; - `fab4 = read (memory :> bytes64(word_add stackpointer (word 456))) s601`; - `fab5 = read (memory :> bytes64(word_add stackpointer (word 464))) s601`; - `fab6 = read (memory :> bytes64(word_add stackpointer (word 472))) s601`; - `fab7 = read (memory :> bytes64(word_add stackpointer (word 480))) s601`; - `fab8 = read (memory :> bytes64(word_add stackpointer (word 488))) s601`; - `fab9 = read (memory :> bytes64(word_add stackpointer (word 496))) s601`; - `fab10 = read (memory :> bytes64(word_add stackpointer (word 504))) s601`; - `fab11 = read (memory :> bytes64(word_add stackpointer (word 512))) s601`; + `fab4 = read (memory :> bytes64(word_add stackpointer (word 296))) s601`; + `fab5 = read (memory :> bytes64(word_add stackpointer (word 304))) s601`; + `fab6 = read (memory :> bytes64(word_add stackpointer (word 312))) s601`; + `fab7 = read (memory :> bytes64(word_add stackpointer (word 320))) s601`; + `fab8 = read (memory :> bytes64(word_add stackpointer (word 328))) s601`; + `fab9 = read (memory :> bytes64(word_add stackpointer (word 336))) s601`; + `fab10 = read (memory :> bytes64(word_add stackpointer (word 344))) s601`; + `fab11 = read (memory :> bytes64(word_add stackpointer (word 352))) s601`; `fab12 = read R8 s601`; `fab13 = read R9 s601`; `fab14 = read R10 s601`; @@ -10433,10 +11548,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove X86_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC [612;613;614;615;620;621;622;623] (602--627) THEN MAP_EVERY ABBREV_TAC - [`Xb = read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s627`; - `Yb = read(memory :> bytes(word_add stackpointer (word 456),8 * 4)) s627`; - `Zb = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s627`; - `Wb = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s627`] + [`Xb = read(memory :> bytes(word_add stackpointer (word 264),8 * 4)) s627`; + `Yb = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s627`; + `Zb = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s627`; + `Wb = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s627`] THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -10490,9 +11605,9 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (628--631) THEN LOCAL_PDOUBLE_TAC 632 THEN MAP_EVERY ABBREV_TAC - [`X4a = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s632`; - `Y4a = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s632`; - `Z4a = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s632` + [`X4a = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s632`; + `Y4a = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s632`; + `Z4a = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s632` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (633--634) THEN @@ -10500,10 +11615,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (635--639) THEN LOCAL_PEPADD_TAC 640 THEN MAP_EVERY ABBREV_TAC - [`Xc = read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s640`; - `Yc = read(memory :> bytes(word_add stackpointer (word 456),8 * 4)) s640`; - `Zc = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s640`; - `Wc = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s640` + [`Xc = read(memory :> bytes(word_add stackpointer (word 264),8 * 4)) s640`; + `Yc = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s640`; + `Zc = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s640`; + `Wc = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s640` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (641--642) THEN @@ -10511,9 +11626,9 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (643--646) THEN LOCAL_PDOUBLE_TAC 647 THEN MAP_EVERY ABBREV_TAC - [`X8a = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s647`; - `Y8a = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s647`; - `Z8a = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s647` + [`X8a = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s647`; + `Y8a = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s647`; + `Z8a = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s647` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (648--649) THEN @@ -10521,10 +11636,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (650--653) THEN LOCAL_EPDOUBLE_TAC 654 THEN MAP_EVERY ABBREV_TAC - [`Xha = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s654`; - `Yha = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s654`; - `Zha = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s654`; - `Wha = read(memory :> bytes(word_add stackpointer (word 392),8 * 4)) s654` + [`Xha = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s654`; + `Yha = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s654`; + `Zha = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s654`; + `Wha = read(memory :> bytes(word_add stackpointer (word 584),8 * 4)) s654` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (655--656) THEN @@ -10532,10 +11647,10 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (657--661) THEN LOCAL_EPADD_TAC 662 THEN MAP_EVERY ABBREV_TAC - [`Xf = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s662`; - `Yf = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s662`; - `Zf = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s662`; - `Wf = read(memory :> bytes(word_add stackpointer (word 392),8 * 4)) s662` + [`Xf = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s662`; + `Yf = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s662`; + `Zf = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s662`; + `Wf = read(memory :> bytes(word_add stackpointer (word 584),8 * 4)) s662` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_EXEC (663--664) THEN @@ -10627,8 +11742,8 @@ let EDWARDS25519_SCALARMULDOUBLE_CORRECT = time prove let EDWARDS25519_SCALARMULDOUBLE_SUBROUTINE_CORRECT = time prove (`!res scalar point bscalar n xy m pc stackpointer returnaddress. ALL (nonoverlapping (word_sub stackpointer (word 1720),1720)) - [(word pc,0x6201); (scalar,32); (point,64); (bscalar,32)] /\ - nonoverlapping (res,64) (word pc,0x6201) /\ + [(word pc,0x70e1); (scalar,32); (point,64); (bscalar,32)] /\ + nonoverlapping (res,64) (word pc,0x70e1) /\ nonoverlapping (res,64) (word_sub stackpointer (word 1720),1728) ==> ensures x86 (\s. bytes_loaded s (word pc) @@ -10667,7 +11782,7 @@ let EDWARDS25519_SCALARMULDOUBLE_SUBROUTINE_CORRECT = time prove let windows_edwards25519_scalarmuldouble_mc, windows_edwards25519_scalarmuldouble_data = - define_coda_from_elf 0x5ef7 + define_coda_from_elf 0x6df7 "windows_edwards25519_scalarmuldouble_mc" "windows_edwards25519_scalarmuldouble_data" "x86/curve25519/edwards25519_scalarmuldouble.obj";; @@ -10675,8 +11790,8 @@ let windows_edwards25519_scalarmuldouble_mc, let WINDOWS_EDWARDS25519_SCALARMULDOUBLE_SUBROUTINE_CORRECT = time prove (`!res scalar point bscalar n xy m pc stackpointer returnaddress. ALL (nonoverlapping (word_sub stackpointer (word 1744),1744)) - [(word pc,0x6217); (scalar,32); (point,64); (bscalar,32)] /\ - nonoverlapping (res,64) (word pc,0x6217) /\ + [(word pc,0x70f7); (scalar,32); (point,64); (bscalar,32)] /\ + nonoverlapping (res,64) (word pc,0x70f7) /\ nonoverlapping (res,64) (word_sub stackpointer (word 1744),1752) ==> ensures x86 (\s. bytes_loaded s (word pc) @@ -10726,7 +11841,7 @@ let WINDOWS_EDWARDS25519_SCALARMULDOUBLE_SUBROUTINE_CORRECT = time prove REWRITE_TAC(!simulation_precanon_thms) THEN ENSURES_INIT_TAC "s0" THEN X86_STEPS_TAC WINDOWS_EDWARDS25519_SCALARMULDOUBLE_EXEC (1--7) THEN RULE_ASSUM_TAC(REWRITE_RULE - [ARITH_RULE `pc + 0x5ef7 = (pc + 0x16) + 0x5ee1`]) THEN + [ARITH_RULE `pc + 0x6df7 = (pc + 0x16) + 0x6de1`]) THEN X86_SUBROUTINE_SIM_TAC (windows_edwards25519_scalarmuldouble_mc, WINDOWS_EDWARDS25519_SCALARMULDOUBLE_EXEC, diff --git a/x86/proofs/edwards25519_scalarmuldouble_alt.ml b/x86/proofs/edwards25519_scalarmuldouble_alt.ml index 8a6a181f..0c678319 100644 --- a/x86/proofs/edwards25519_scalarmuldouble_alt.ml +++ b/x86/proofs/edwards25519_scalarmuldouble_alt.ml @@ -8,7 +8,7 @@ (* ========================================================================= *) needs "x86/proofs/base.ml";; -needs "x86/proofs/bignum_modinv.ml";; +needs "x86/proofs/bignum_inv_p25519.ml";; needs "common/ecencoding.ml";; needs "EC/edwards25519.ml";; @@ -39,8 +39,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x41; 0x57; (* PUSH (% r15) *) 0x48; 0x81; 0xec; 0xc0; 0x05; 0x00; 0x00; (* SUB (% rsp) (Imm32 (word 1472)) *) - 0x48; 0x89; 0x7c; 0x24; 0x58; - (* MOV (Memop Quadword (%% (rsp,88))) (% rdi) *) + 0x48; 0x89; 0xbc; 0x24; 0xb8; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1464))) (% rdi) *) 0x4c; 0x8b; 0x01; (* MOV (% r8) (Memop Quadword (%% (rcx,0))) *) 0x4c; 0x8b; 0x49; 0x08; (* MOV (% r9) (Memop Quadword (%% (rcx,8))) *) 0x4c; 0x8b; 0x51; 0x10; (* MOV (% r10) (Memop Quadword (%% (rcx,16))) *) @@ -120,17 +120,17 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) 0x4c; 0x11; 0xde; (* ADC (% rsi) (% r11) *) 0x49; 0x0f; 0x43; 0xc0; (* CMOVAE (% rax) (% r8) *) - 0x48; 0x89; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,448))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% rax) *) 0x49; 0x0f; 0x43; 0xd9; (* CMOVAE (% rbx) (% r9) *) - 0x48; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,456))) (% rbx) *) + 0x48; 0x89; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% rbx) *) 0x49; 0x0f; 0x43; 0xca; (* CMOVAE (% rcx) (% r10) *) - 0x48; 0x89; 0x8c; 0x24; 0xd0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,464))) (% rcx) *) + 0x48; 0x89; 0x8c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% rcx) *) 0x49; 0x0f; 0x43; 0xf3; (* CMOVAE (% rsi) (% r11) *) - 0x48; 0x89; 0xb4; 0x24; 0xd8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,472))) (% rsi) *) + 0x48; 0x89; 0xb4; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% rsi) *) 0xb8; 0x26; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 38)) *) 0x4c; 0x8b; 0x42; 0x20; (* MOV (% r8) (Memop Quadword (%% (rdx,32))) *) @@ -145,34 +145,34 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) 0x4c; 0x11; 0xde; (* ADC (% rsi) (% r11) *) 0x49; 0x0f; 0x43; 0xc0; (* CMOVAE (% rax) (% r8) *) - 0x48; 0x89; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,480))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% rax) *) 0x49; 0x0f; 0x43; 0xd9; (* CMOVAE (% rbx) (% r9) *) - 0x48; 0x89; 0x9c; 0x24; 0xe8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,488))) (% rbx) *) + 0x48; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% rbx) *) 0x49; 0x0f; 0x43; 0xca; (* CMOVAE (% rcx) (% r10) *) - 0x48; 0x89; 0x8c; 0x24; 0xf0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,496))) (% rcx) *) + 0x48; 0x89; 0x8c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% rcx) *) 0x49; 0x0f; 0x43; 0xf3; (* CMOVAE (% rsi) (% r11) *) - 0x48; 0x89; 0xb4; 0x24; 0xf8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,504))) (% rsi) *) + 0x48; 0x89; 0xb4; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% rsi) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% rax) *) 0x31; 0xc0; (* XOR (% eax) (% eax) *) - 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) - 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) - 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) - 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x02; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,544)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,448)) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,480)) *) + 0x48; 0x89; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,496))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8d; 0xbc; 0x24; 0x00; 0x02; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,512)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,448)) *) 0x48; 0x8b; 0x06; (* MOV (% rax) (Memop Quadword (%% (rsi,0))) *) 0x48; 0xf7; 0x65; 0x00; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rbp,0))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) @@ -297,63 +297,63 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) - 0x48; 0x8d; 0xbc; 0x24; 0x40; 0x02; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,576)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,448)) *) - 0xe8; 0x02; 0x1e; 0x00; 0x00; - (* CALL (Imm32 (word 7682)) *) - 0x48; 0x8d; 0xbc; 0x24; 0xc0; 0x02; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,704)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,448)) *) - 0x48; 0x8d; 0xac; 0x24; 0x40; 0x02; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,576)) *) - 0xe8; 0x6f; 0x3a; 0x00; 0x00; - (* CALL (Imm32 (word 14959)) *) - 0x48; 0x8d; 0xbc; 0x24; 0x40; 0x03; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,832)) *) - 0x48; 0x8d; 0xb4; 0x24; 0x40; 0x02; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,576)) *) - 0xe8; 0xd0; 0x1d; 0x00; 0x00; - (* CALL (Imm32 (word 7632)) *) - 0x48; 0x8d; 0xbc; 0x24; 0xc0; 0x03; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,960)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,448)) *) - 0x48; 0x8d; 0xac; 0x24; 0x40; 0x03; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,832)) *) - 0xe8; 0x3d; 0x3a; 0x00; 0x00; - (* CALL (Imm32 (word 14909)) *) - 0x48; 0x8d; 0xbc; 0x24; 0x40; 0x04; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,1088)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x02; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,704)) *) - 0xe8; 0x9e; 0x1d; 0x00; 0x00; - (* CALL (Imm32 (word 7582)) *) - 0x48; 0x8d; 0xbc; 0x24; 0xc0; 0x04; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,1216)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,448)) *) - 0x48; 0x8d; 0xac; 0x24; 0x40; 0x04; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,1088)) *) - 0xe8; 0x0b; 0x3a; 0x00; 0x00; - (* CALL (Imm32 (word 14859)) *) - 0x48; 0x8d; 0xbc; 0x24; 0x40; 0x05; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,1344)) *) - 0x48; 0x8d; 0xb4; 0x24; 0x40; 0x03; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,832)) *) - 0xe8; 0x6c; 0x1d; 0x00; 0x00; - (* CALL (Imm32 (word 7532)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x02; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,544)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,416)) *) + 0xe8; 0xff; 0x2c; 0x00; 0x00; + (* CALL (Imm32 (word 11519)) *) + 0x48; 0x8d; 0xbc; 0x24; 0xa0; 0x02; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,672)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,544)) *) + 0xe8; 0x6c; 0x49; 0x00; 0x00; + (* CALL (Imm32 (word 18796)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x03; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,800)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x02; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,544)) *) + 0xe8; 0xcd; 0x2c; 0x00; 0x00; + (* CALL (Imm32 (word 11469)) *) + 0x48; 0x8d; 0xbc; 0x24; 0xa0; 0x03; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,928)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xac; 0x24; 0x20; 0x03; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,800)) *) + 0xe8; 0x3a; 0x49; 0x00; 0x00; + (* CALL (Imm32 (word 18746)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x04; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,1056)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x02; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,672)) *) + 0xe8; 0x9b; 0x2c; 0x00; 0x00; + (* CALL (Imm32 (word 11419)) *) + 0x48; 0x8d; 0xbc; 0x24; 0xa0; 0x04; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,1184)) *) + 0x48; 0x8d; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xac; 0x24; 0x20; 0x04; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,1056)) *) + 0xe8; 0x08; 0x49; 0x00; 0x00; + (* CALL (Imm32 (word 18696)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x05; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,1312)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x03; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,800)) *) + 0xe8; 0x69; 0x2c; 0x00; 0x00; + (* CALL (Imm32 (word 11369)) *) 0x48; 0xc7; 0xc0; 0xfc; 0x00; 0x00; 0x00; (* MOV (% rax) (Imm32 (word 252)) *) - 0x48; 0x89; 0x44; 0x24; 0x50; - (* MOV (Memop Quadword (%% (rsp,80))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1456))) (% rax) *) 0x48; 0x8b; 0x44; 0x24; 0x38; (* MOV (% rax) (Memop Quadword (%% (rsp,56))) *) 0x48; 0xc1; 0xe8; 0x3c; (* SHR (% rax) (Imm8 (word 60)) *) - 0x48; 0x89; 0x44; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1440))) (% rax) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) @@ -368,10 +368,10 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) - 0x48; 0x8d; 0x2d; 0x61; 0x5c; 0x00; 0x00; - (* LEA (% rbp) (Riprel (word 23649)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x8d; 0x2d; 0x38; 0x6b; 0x00; 0x00; + (* LEA (% rbp) (Riprel (word 27448)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -397,8 +397,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -424,8 +424,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -451,8 +451,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -478,8 +478,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -505,8 +505,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -532,8 +532,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -559,8 +559,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -585,35 +585,35 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xf6; (* CMOVE (% r14) (% rsi) *) 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) - 0x48; 0x89; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,352))) (% rax) *) - 0x48; 0x89; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,360))) (% rbx) *) - 0x48; 0x89; 0x8c; 0x24; 0x70; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,368))) (% rcx) *) - 0x48; 0x89; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,376))) (% rdx) *) - 0x4c; 0x89; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,384))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,392))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,400))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,408))) (% r11) *) - 0x4c; 0x89; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,416))) (% r12) *) - 0x4c; 0x89; 0xac; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,424))) (% r13) *) - 0x4c; 0x89; 0xb4; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,432))) (% r14) *) - 0x4c; 0x89; 0xbc; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,440))) (% r15) *) + 0x48; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rax) *) + 0x48; 0x89; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% rbx) *) + 0x48; 0x89; 0x8c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rcx) *) + 0x48; 0x89; 0x94; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% rdx) *) + 0x4c; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r15) *) 0x48; 0x8b; 0x44; 0x24; 0x18; (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) 0x48; 0xc1; 0xe8; 0x3c; (* SHR (% rax) (Imm8 (word 60)) *) - 0x48; 0x89; 0x44; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1440))) (% rax) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) @@ -624,10 +624,10 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,480)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,448)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -646,8 +646,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -666,8 +666,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -686,8 +686,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -706,8 +706,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -726,8 +726,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -746,8 +746,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -766,8 +766,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -784,24 +784,24 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xd6; (* CMOVE (% r10) (% rsi) *) 0x48; 0x8b; 0x75; 0x38; (* MOV (% rsi) (Memop Quadword (%% (rbp,56))) *) 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) - 0x48; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,256))) (% rax) *) - 0x48; 0x89; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,264))) (% rbx) *) - 0x48; 0x89; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,272))) (% rcx) *) - 0x48; 0x89; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,280))) (% rdx) *) - 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) - 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,448)) *) + 0x48; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rax) *) + 0x48; 0x89; 0x5c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rbx) *) + 0x48; 0x89; 0x4c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rcx) *) + 0x48; 0x89; 0x54; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rdx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x48; 0x8d; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,416)) *) 0x31; 0xc0; (* XOR (% eax) (% eax) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) @@ -810,8 +810,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -830,8 +830,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -850,8 +850,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -870,8 +870,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -890,8 +890,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -910,8 +910,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -930,8 +930,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -950,8 +950,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -968,43 +968,43 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xd6; (* CMOVE (% r10) (% rsi) *) 0x48; 0x8b; 0x75; 0x78; (* MOV (% rsi) (Memop Quadword (%% (rbp,120))) *) 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) - 0x48; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,224))) (% rax) *) - 0x48; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,232))) (% rbx) *) - 0x48; 0x89; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,240))) (% rcx) *) - 0x48; 0x89; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,248))) (% rdx) *) - 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,224)) *) - 0x48; 0x8d; 0xac; 0x24; 0x60; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,352)) *) - 0xe8; 0xee; 0x43; 0x00; 0x00; - (* CALL (Imm32 (word 17390)) *) - 0x48; 0x8b; 0x44; 0x24; 0x50; - (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x48; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x5c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rbx) *) + 0x48; 0x89; 0x4c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rcx) *) + 0x48; 0x89; 0x54; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rdx) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0x74; 0x24; 0x40; + (* LEA (% rsi) (%% (rsp,64)) *) + 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,192)) *) + 0xe8; 0xb2; 0x52; 0x00; 0x00; + (* CALL (Imm32 (word 21170)) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,1456))) *) 0x48; 0x83; 0xe8; 0x04; (* SUB (% rax) (Imm8 (word 4)) *) - 0x48; 0x89; 0x44; 0x24; 0x50; - (* MOV (Memop Quadword (%% (rsp,80))) (% rax) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0xe8; 0xf0; 0x22; 0x00; 0x00; - (* CALL (Imm32 (word 8944)) *) - 0x48; 0x8b; 0x44; 0x24; 0x50; - (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x48; 0x89; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1456))) (% rax) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0xe8; 0xa8; 0x31; 0x00; 0x00; + (* CALL (Imm32 (word 12712)) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,1456))) *) 0x48; 0x89; 0xc1; (* MOV (% rcx) (% rax) *) 0x48; 0xc1; 0xe8; 0x06; (* SHR (% rax) (Imm8 (word 6)) *) 0x48; 0x8b; 0x44; 0xc4; 0x20; @@ -1015,10 +1015,10 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) 0x48; 0x31; 0xc8; (* XOR (% rax) (% rcx) *) 0x48; 0x29; 0xc8; (* SUB (% rax) (% rcx) *) - 0x48; 0x89; 0x4c; 0x24; 0x48; - (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) - 0x48; 0x89; 0x44; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x8c; 0x24; 0xa8; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1448))) (% rcx) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1440))) (% rax) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) @@ -1033,10 +1033,10 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) - 0x48; 0x8d; 0x2d; 0x94; 0x52; 0x00; 0x00; - (* LEA (% rbp) (Riprel (word 21140)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x8d; 0x2d; 0x23; 0x61; 0x00; 0x00; + (* LEA (% rbp) (Riprel (word 24867)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1062,8 +1062,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1089,8 +1089,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1116,8 +1116,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1143,8 +1143,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1170,8 +1170,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1197,8 +1197,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1224,8 +1224,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) 0x48; 0x83; 0xc5; 0x60; (* ADD (% rbp) (Imm8 (word 96)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1250,37 +1250,37 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xf6; (* CMOVE (% r14) (% rsi) *) 0x48; 0x8b; 0x75; 0x58; (* MOV (% rsi) (Memop Quadword (%% (rbp,88))) *) 0x4c; 0x0f; 0x44; 0xfe; (* CMOVE (% r15) (% rsi) *) - 0x48; 0x8b; 0x7c; 0x24; 0x48; - (* MOV (% rdi) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x8b; 0xbc; 0x24; 0xa8; 0x05; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,1448))) *) 0x48; 0x85; 0xff; (* TEST (% rdi) (% rdi) *) 0x48; 0x89; 0xc6; (* MOV (% rsi) (% rax) *) 0x49; 0x0f; 0x45; 0xf0; (* CMOVNE (% rsi) (% r8) *) 0x4c; 0x0f; 0x45; 0xc0; (* CMOVNE (% r8) (% rax) *) - 0x48; 0x89; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,352))) (% rsi) *) - 0x4c; 0x89; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,384))) (% r8) *) + 0x48; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rsi) *) + 0x4c; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r8) *) 0x48; 0x89; 0xde; (* MOV (% rsi) (% rbx) *) 0x49; 0x0f; 0x45; 0xf1; (* CMOVNE (% rsi) (% r9) *) 0x4c; 0x0f; 0x45; 0xcb; (* CMOVNE (% r9) (% rbx) *) - 0x48; 0x89; 0xb4; 0x24; 0x68; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,360))) (% rsi) *) - 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,392))) (% r9) *) + 0x48; 0x89; 0xb4; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% rsi) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r9) *) 0x48; 0x89; 0xce; (* MOV (% rsi) (% rcx) *) 0x49; 0x0f; 0x45; 0xf2; (* CMOVNE (% rsi) (% r10) *) 0x4c; 0x0f; 0x45; 0xd1; (* CMOVNE (% r10) (% rcx) *) - 0x48; 0x89; 0xb4; 0x24; 0x70; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,368))) (% rsi) *) - 0x4c; 0x89; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,400))) (% r10) *) + 0x48; 0x89; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rsi) *) + 0x4c; 0x89; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r10) *) 0x48; 0x89; 0xd6; (* MOV (% rsi) (% rdx) *) 0x49; 0x0f; 0x45; 0xf3; (* CMOVNE (% rsi) (% r11) *) 0x4c; 0x0f; 0x45; 0xda; (* CMOVNE (% r11) (% rdx) *) - 0x48; 0x89; 0xb4; 0x24; 0x78; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,376))) (% rsi) *) - 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,408))) (% r11) *) + 0x48; 0x89; 0xb4; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% rsi) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r11) *) 0x49; 0x31; 0xfc; (* XOR (% r12) (% rdi) *) 0x49; 0x31; 0xfd; (* XOR (% r13) (% rdi) *) 0x49; 0x31; 0xfe; (* XOR (% r14) (% rdi) *) @@ -1290,16 +1290,16 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) - 0x4c; 0x89; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,416))) (% r12) *) - 0x4c; 0x89; 0xac; 0x24; 0xa8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,424))) (% r13) *) - 0x4c; 0x89; 0xb4; 0x24; 0xb0; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,432))) (% r14) *) - 0x4c; 0x89; 0xbc; 0x24; 0xb8; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,440))) (% r15) *) - 0x48; 0x8b; 0x44; 0x24; 0x50; - (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x89; 0xa4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r15) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,1456))) *) 0x48; 0x89; 0xc1; (* MOV (% rcx) (% rax) *) 0x48; 0xc1; 0xe8; 0x06; (* SHR (% rax) (Imm8 (word 6)) *) 0x48; 0x8b; 0x04; 0xc4; (* MOV (% rax) (Memop Quadword (%%% (rsp,3,rax))) *) @@ -1309,10 +1309,10 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) 0x48; 0x31; 0xc8; (* XOR (% rax) (% rcx) *) 0x48; 0x29; 0xc8; (* SUB (% rax) (% rcx) *) - 0x48; 0x89; 0x4c; 0x24; 0x48; - (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) - 0x48; 0x89; 0x44; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x8c; 0x24; 0xa8; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1448))) (% rcx) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x05; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,1440))) (% rax) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) @@ -1323,10 +1323,10 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,480)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,448)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1345,8 +1345,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1365,8 +1365,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1385,8 +1385,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1405,8 +1405,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1425,8 +1425,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1445,8 +1445,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1465,8 +1465,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1483,24 +1483,24 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xd6; (* CMOVE (% r10) (% rsi) *) 0x48; 0x8b; 0x75; 0x38; (* MOV (% rsi) (Memop Quadword (%% (rbp,56))) *) 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) - 0x48; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,256))) (% rax) *) - 0x48; 0x89; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,264))) (% rbx) *) - 0x48; 0x89; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,272))) (% rcx) *) - 0x48; 0x89; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,280))) (% rdx) *) - 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) - 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,448)) *) + 0x48; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rax) *) + 0x48; 0x89; 0x5c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rbx) *) + 0x48; 0x89; 0x4c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rcx) *) + 0x48; 0x89; 0x54; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rdx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x48; 0x8d; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,416)) *) 0x31; 0xc0; (* XOR (% eax) (% eax) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) @@ -1509,8 +1509,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x01; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 1)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x01; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 1)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1529,8 +1529,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x02; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 2)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x02; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 2)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1549,8 +1549,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x03; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 3)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x03; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 3)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1569,8 +1569,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x04; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 4)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x04; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 4)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1589,8 +1589,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x05; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 5)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x05; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 5)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1609,8 +1609,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x06; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 6)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x06; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 6)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1629,8 +1629,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x07; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 7)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x07; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 7)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1649,8 +1649,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) 0x48; 0x81; 0xc5; 0x80; 0x00; 0x00; 0x00; (* ADD (% rbp) (Imm32 (word 128)) *) - 0x48; 0x83; 0x7c; 0x24; 0x40; 0x08; - (* CMP (Memop Quadword (%% (rsp,64))) (Imm8 (word 8)) *) + 0x48; 0x83; 0xbc; 0x24; 0xa0; 0x05; 0x00; 0x00; 0x08; + (* CMP (Memop Quadword (%% (rsp,1440))) (Imm8 (word 8)) *) 0x48; 0x8b; 0x75; 0x00; (* MOV (% rsi) (Memop Quadword (%% (rbp,0))) *) 0x48; 0x0f; 0x44; 0xc6; (* CMOVE (% rax) (% rsi) *) 0x48; 0x8b; 0x75; 0x08; (* MOV (% rsi) (Memop Quadword (%% (rbp,8))) *) @@ -1667,8 +1667,8 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x0f; 0x44; 0xd6; (* CMOVE (% r10) (% rsi) *) 0x48; 0x8b; 0x75; 0x78; (* MOV (% rsi) (Memop Quadword (%% (rbp,120))) *) 0x4c; 0x0f; 0x44; 0xde; (* CMOVE (% r11) (% rsi) *) - 0x48; 0x8b; 0x7c; 0x24; 0x48; - (* MOV (% rdi) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x8b; 0xbc; 0x24; 0xa8; 0x05; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,1448))) *) 0x48; 0x31; 0xf8; (* XOR (% rax) (% rdi) *) 0x48; 0x31; 0xfb; (* XOR (% rbx) (% rdi) *) 0x48; 0x31; 0xf9; (* XOR (% rcx) (% rdi) *) @@ -1682,515 +1682,1637 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x48; 0x83; 0xdb; 0x00; (* SBB (% rbx) (Imm8 (word 0)) *) 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) - 0x48; 0x89; 0x84; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,224))) (% rax) *) - 0x48; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,232))) (% rbx) *) - 0x48; 0x89; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,240))) (% rcx) *) - 0x48; 0x89; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,248))) (% rdx) *) + 0x48; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x5c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rbx) *) + 0x48; 0x89; 0x4c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rcx) *) + 0x48; 0x89; 0x54; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rdx) *) 0x49; 0x29; 0xf8; (* SUB (% r8) (% rdi) *) 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) - 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) - 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) - 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) - 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; - (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0xe8; 0x99; 0x18; 0x00; 0x00; - (* CALL (Imm32 (word 6297)) *) - 0x48; 0x8d; 0xbc; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rdi) (%% (rsp,224)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,224)) *) - 0x48; 0x8d; 0xac; 0x24; 0x60; 0x01; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,352)) *) - 0xe8; 0x5d; 0x39; 0x00; 0x00; - (* CALL (Imm32 (word 14685)) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0xe8; 0x6d; 0x18; 0x00; 0x00; - (* CALL (Imm32 (word 6253)) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0xe8; 0x22; 0x09; 0x00; 0x00; - (* CALL (Imm32 (word 2338)) *) - 0x48; 0x8d; 0x7c; 0x24; 0x60; - (* LEA (% rdi) (%% (rsp,96)) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,224)) *) - 0xe8; 0x95; 0x25; 0x00; 0x00; - (* CALL (Imm32 (word 9621)) *) - 0x48; 0x8b; 0x44; 0x24; 0x50; - (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0xe8; 0x03; 0x27; 0x00; 0x00; + (* CALL (Imm32 (word 9987)) *) + 0x48; 0x8d; 0x7c; 0x24; 0x40; + (* LEA (% rdi) (%% (rsp,64)) *) + 0x48; 0x8d; 0x74; 0x24; 0x40; + (* LEA (% rsi) (%% (rsp,64)) *) + 0x48; 0x8d; 0xac; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,192)) *) + 0xe8; 0xcd; 0x47; 0x00; 0x00; + (* CALL (Imm32 (word 18381)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0xe8; 0xd7; 0x26; 0x00; 0x00; + (* CALL (Imm32 (word 9943)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0xe8; 0x86; 0x17; 0x00; 0x00; + (* CALL (Imm32 (word 6022)) *) + 0x48; 0x8d; 0xbc; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0x48; 0x8d; 0x6c; 0x24; 0x40; + (* LEA (% rbp) (%% (rsp,64)) *) + 0xe8; 0xf6; 0x33; 0x00; 0x00; + (* CALL (Imm32 (word 13302)) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x05; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,1456))) *) 0x48; 0x85; 0xc0; (* TEST (% rax) (% rax) *) - 0x0f; 0x85; 0x2c; 0xf5; 0xff; 0xff; - (* JNE (Imm32 (word 4294964524)) *) - 0x48; 0xc7; 0xc7; 0x04; 0x00; 0x00; 0x00; - (* MOV (% rdi) (Imm32 (word 4)) *) - 0x48; 0x8d; 0xb4; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,224)) *) - 0x48; 0x8d; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; - (* LEA (% rdx) (%% (rsp,160)) *) - 0x48; 0x8d; 0x0d; 0xfb; 0x47; 0x00; 0x00; - (* LEA (% rcx) (Riprel (word 18427)) *) - 0x4c; 0x8d; 0x84; 0x24; 0x60; 0x01; 0x00; 0x00; - (* LEA (% r8) (%% (rsp,352)) *) - 0x48; 0x89; 0x74; 0x24; 0x40; - (* MOV (Memop Quadword (%% (rsp,64))) (% rsi) *) - 0x4c; 0x89; 0x44; 0x24; 0x38; - (* MOV (Memop Quadword (%% (rsp,56))) (% r8) *) - 0x48; 0x89; 0x4c; 0x24; 0x48; - (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) - 0x4d; 0x8d; 0x14; 0xf8; (* LEA (% r10) (%%% (r8,3,rdi)) *) - 0x4c; 0x89; 0x54; 0x24; 0x30; - (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) - 0x4d; 0x8d; 0x3c; 0xfa; (* LEA (% r15) (%%% (r10,3,rdi)) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4a; 0x8b; 0x04; 0xca; (* MOV (% rax) (Memop Quadword (%%% (rdx,3,r9))) *) - 0x4a; 0x8b; 0x1c; 0xc9; (* MOV (% rbx) (Memop Quadword (%%% (rcx,3,r9))) *) - 0x4b; 0x89; 0x04; 0xca; (* MOV (Memop Quadword (%%% (r10,3,r9))) (% rax) *) - 0x4b; 0x89; 0x1c; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rbx) *) - 0x4b; 0x89; 0x1c; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rbx) *) - 0x4e; 0x89; 0x1c; 0xce; (* MOV (Memop Quadword (%%% (rsi,3,r9))) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) - 0x49; 0x8b; 0x00; (* MOV (% rax) (Memop Quadword (%% (r8,0))) *) - 0x48; 0x89; 0xc3; (* MOV (% rbx) (% rax) *) - 0x48; 0xff; 0xcb; (* DEC (% rbx) *) - 0x49; 0x89; 0x18; (* MOV (Memop Quadword (%% (r8,0))) (% rbx) *) - 0x48; 0x89; 0xc5; (* MOV (% rbp) (% rax) *) - 0x49; 0x89; 0xc4; (* MOV (% r12) (% rax) *) - 0x48; 0xc1; 0xe5; 0x02; (* SHL (% rbp) (Imm8 (word 2)) *) - 0x49; 0x29; 0xec; (* SUB (% r12) (% rbp) *) - 0x49; 0x83; 0xf4; 0x02; (* XOR (% r12) (Imm8 (word 2)) *) - 0x4c; 0x89; 0xe5; (* MOV (% rbp) (% r12) *) - 0x48; 0x0f; 0xaf; 0xe8; (* IMUL (% rbp) (% rax) *) - 0xb8; 0x02; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 2)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x48; 0x83; 0xc5; 0x01; (* ADD (% rbp) (Imm8 (word 1)) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) - 0xb8; 0x01; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) - 0xb8; 0x01; 0x00; 0x00; 0x00; - (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x0f; 0x85; 0xc6; 0xf4; 0xff; 0xff; + (* JNE (Imm32 (word 4294964422)) *) + 0x48; 0x8d; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rdi) (%% (rsp,416)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,352)) *) + 0x48; 0x89; 0xbc; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rdi) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x48; 0x8d; 0x48; 0xed; (* LEA (% rcx) (%% (rax,18446744073709551597)) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x89; 0x0c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rcx) *) + 0x48; 0x89; 0x44; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rax) *) + 0x48; 0x0f; 0xba; 0xf0; 0x3f; + (* BTR (% rax) (Imm8 (word 63)) *) + 0x48; 0x89; 0x44; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rax) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x8b; 0x4e; 0x08; (* MOV (% rcx) (Memop Quadword (%% (rsi,8))) *) + 0x4c; 0x8b; 0x46; 0x10; (* MOV (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x8b; 0x4e; 0x18; (* MOV (% r9) (Memop Quadword (%% (rsi,24))) *) 0xb8; 0x01; 0x00; 0x00; 0x00; (* MOV (% eax) (Imm32 (word 1)) *) - 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) - 0x4c; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% rax) *) - 0x4c; 0x89; 0x64; 0x24; 0x28; - (* MOV (Memop Quadword (%% (rsp,40))) (% r12) *) - 0x48; 0x89; 0xf8; (* MOV (% rax) (% rdi) *) - 0x48; 0xc1; 0xe0; 0x07; (* SHL (% rax) (Imm8 (word 7)) *) - 0x48; 0x89; 0x44; 0x24; 0x20; - (* MOV (Memop Quadword (%% (rsp,32))) (% rax) *) - 0x4c; 0x8b; 0x6c; 0x24; 0x20; - (* MOV (% r13) (Memop Quadword (%% (rsp,32))) *) - 0x49; 0x83; 0xc5; 0x3f; (* ADD (% r13) (Imm8 (word 63)) *) - 0x49; 0xc1; 0xed; 0x06; (* SHR (% r13) (Imm8 (word 6)) *) - 0x49; 0x39; 0xfd; (* CMP (% r13) (% rdi) *) - 0x4c; 0x0f; 0x43; 0xef; (* CMOVAE (% r13) (% rdi) *) - 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xed; (* XOR (% rbp) (% rbp) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4c; 0x8b; 0x44; 0x24; 0x30; - (* MOV (% r8) (Memop Quadword (%% (rsp,48))) *) - 0x4d; 0x8d; 0x3c; 0xf8; (* LEA (% r15) (%%% (r8,3,rdi)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x1c; 0xc8; (* MOV (% rbx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4d; 0x89; 0xda; (* MOV (% r10) (% r11) *) - 0x4d; 0x21; 0xe2; (* AND (% r10) (% r12) *) - 0x49; 0x21; 0xeb; (* AND (% r11) (% rbp) *) - 0x48; 0x89; 0xd8; (* MOV (% rax) (% rbx) *) - 0x48; 0x09; 0xc8; (* OR (% rax) (% rcx) *) - 0x48; 0xf7; 0xd8; (* NEG (% rax) *) - 0x4d; 0x0f; 0x42; 0xf2; (* CMOVB (% r14) (% r10) *) - 0x49; 0x0f; 0x42; 0xf3; (* CMOVB (% rsi) (% r11) *) - 0x4c; 0x0f; 0x42; 0xe3; (* CMOVB (% r12) (% rbx) *) - 0x48; 0x0f; 0x42; 0xe9; (* CMOVB (% rbp) (% rcx) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0xcb; (* JB (Imm8 (word 203)) *) - 0x4c; 0x89; 0xe0; (* MOV (% rax) (% r12) *) - 0x48; 0x09; 0xe8; (* OR (% rax) (% rbp) *) - 0x48; 0x0f; 0xbd; 0xc8; (* BSR (% rcx) (% rax) *) - 0x48; 0x83; 0xf1; 0x3f; (* XOR (% rcx) (Imm8 (word 63)) *) - 0x4d; 0x0f; 0xa5; 0xf4; (* SHLD (% r12) (% r14) (% cl) *) - 0x48; 0x0f; 0xa5; 0xf5; (* SHLD (% rbp) (% rsi) (% cl) *) - 0x49; 0x8b; 0x00; (* MOV (% rax) (Memop Quadword (%% (r8,0))) *) - 0x49; 0x89; 0xc6; (* MOV (% r14) (% rax) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) - 0x48; 0x89; 0xc6; (* MOV (% rsi) (% rax) *) - 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r10d) (Imm32 (word 1)) *) - 0x41; 0xbb; 0x00; 0x00; 0x00; 0x00; - (* MOV (% r11d) (Imm32 (word 0)) *) - 0xb9; 0x00; 0x00; 0x00; 0x00; - (* MOV (% ecx) (Imm32 (word 0)) *) - 0xba; 0x01; 0x00; 0x00; 0x00; - (* MOV (% edx) (Imm32 (word 1)) *) - 0x41; 0xb9; 0x3a; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 58)) *) - 0x48; 0x89; 0x7c; 0x24; 0x08; - (* MOV (Memop Quadword (%% (rsp,8))) (% rdi) *) - 0x4c; 0x89; 0x6c; 0x24; 0x10; - (* MOV (Memop Quadword (%% (rsp,16))) (% r13) *) - 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) - 0x4c; 0x89; 0x7c; 0x24; 0x18; - (* MOV (Memop Quadword (%% (rsp,24))) (% r15) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0x49; 0x0f; 0xba; 0xe9; 0x3f; + (* BTS (% r9) (Imm8 (word 63)) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x6b; 0xc0; 0x13; (* IMUL3 (% rax) (% rax,Imm8 (word 19)) *) + 0x48; 0x01; 0xc2; (* ADD (% rdx) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4d; 0x11; 0xd0; (* ADC (% r8) (% r10) *) + 0x4d; 0x11; 0xd1; (* ADC (% r9) (% r10) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x49; 0x0f; 0x42; 0xc2; (* CMOVB (% rax) (% r10) *) + 0x48; 0x29; 0xc2; (* SUB (% rdx) (% rax) *) + 0x4c; 0x19; 0xd1; (* SBB (% rcx) (% r10) *) + 0x4d; 0x19; 0xd0; (* SBB (% r8) (% r10) *) + 0x4d; 0x19; 0xd1; (* SBB (% r9) (% r10) *) + 0x49; 0x0f; 0xba; 0xf1; 0x3f; + (* BTR (% r9) (Imm8 (word 63)) *) + 0x48; 0x89; 0x54; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rdx) *) + 0x48; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r9) *) 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x48; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rax) *) + 0x48; 0x89; 0x44; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rax) *) + 0x48; 0xb8; 0x99; 0x20; 0x02; 0x75; 0x23; 0x9e; 0xf9; 0xa0; + (* MOV (% rax) (Imm64 (word 11599476190393540761)) *) + 0x48; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rax) *) + 0x48; 0xb8; 0x95; 0x25; 0x13; 0x1d; 0x3f; 0x8f; 0xc6; 0xa8; + (* MOV (% rax) (Imm64 (word 12161565344994108821)) *) + 0x48; 0x89; 0x44; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rax) *) + 0x48; 0xb8; 0x42; 0x52; 0xac; 0x05; 0x38; 0x89; 0x6c; 0x6c; + (* MOV (% rax) (Imm64 (word 7812770327287321154)) *) + 0x48; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rax) *) + 0x48; 0xb8; 0x15; 0x06; 0x77; 0x41; 0xb2; 0x08; 0x65; 0x27; + (* MOV (% rax) (Imm64 (word 2838684701822486037)) *) + 0x48; 0x89; 0x44; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rax) *) + 0x48; 0xc7; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; 0x0a; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (Imm32 (word 10)) *) + 0x48; 0xc7; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (Imm32 (word 1)) *) + 0xe9; 0x07; 0x04; 0x00; 0x00; + (* JMP (Imm32 (word 1031)) *) + 0x4d; 0x89; 0xc1; (* MOV (% r9) (% r8) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xc8; (* XOR (% r8) (% r9) *) + 0x4d; 0x29; 0xc8; (* SUB (% r8) (% r9) *) + 0x4d; 0x89; 0xd3; (* MOV (% r11) (% r10) *) + 0x49; 0xc1; 0xfb; 0x3f; (* SAR (% r11) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xda; (* XOR (% r10) (% r11) *) + 0x4d; 0x29; 0xda; (* SUB (% r10) (% r11) *) + 0x4d; 0x89; 0xe5; (* MOV (% r13) (% r12) *) + 0x49; 0xc1; 0xfd; 0x3f; (* SAR (% r13) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xec; (* XOR (% r12) (% r13) *) + 0x4d; 0x29; 0xec; (* SUB (% r12) (% r13) *) + 0x4d; 0x89; 0xf7; (* MOV (% r15) (% r14) *) + 0x49; 0xc1; 0xff; 0x3f; (* SAR (% r15) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xfe; (* XOR (% r14) (% r15) *) + 0x4d; 0x29; 0xfe; (* SUB (% r14) (% r15) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x4c; 0x21; 0xc8; (* AND (% rax) (% r9) *) + 0x4c; 0x89; 0xd7; (* MOV (% rdi) (% r10) *) + 0x4c; 0x21; 0xdf; (* AND (% rdi) (% r11) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x89; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% rdi) *) + 0x4c; 0x89; 0xe0; (* MOV (% rax) (% r12) *) + 0x4c; 0x21; 0xe8; (* AND (% rax) (% r13) *) + 0x4c; 0x89; 0xf6; (* MOV (% rsi) (% r14) *) + 0x4c; 0x21; 0xfe; (* AND (% rsi) (% r15) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x89; 0xb4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rsi) *) 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) - 0x4d; 0x31; 0xc0; (* XOR (% r8) (% r8) *) - 0x4d; 0x31; 0xff; (* XOR (% r15) (% r15) *) - 0x49; 0x0f; 0xba; 0xe6; 0x00; - (* BT (% r14) (Imm8 (word 0)) *) - 0x48; 0x0f; 0x42; 0xc5; (* CMOVB (% rax) (% rbp) *) - 0x48; 0x0f; 0x42; 0xde; (* CMOVB (% rbx) (% rsi) *) - 0x4c; 0x0f; 0x42; 0xc1; (* CMOVB (% r8) (% rcx) *) - 0x4c; 0x0f; 0x42; 0xfa; (* CMOVB (% r15) (% rdx) *) - 0x4d; 0x89; 0xf5; (* MOV (% r13) (% r14) *) - 0x49; 0x29; 0xde; (* SUB (% r14) (% rbx) *) - 0x4c; 0x29; 0xeb; (* SUB (% rbx) (% r13) *) - 0x4c; 0x89; 0xe7; (* MOV (% rdi) (% r12) *) - 0x48; 0x29; 0xc7; (* SUB (% rdi) (% rax) *) - 0x49; 0x0f; 0x42; 0xec; (* CMOVB (% rbp) (% r12) *) - 0x4c; 0x8d; 0x67; 0xff; (* LEA (% r12) (%% (rdi,18446744073709551615)) *) - 0x4c; 0x0f; 0x42; 0xf3; (* CMOVB (% r14) (% rbx) *) - 0x49; 0x0f; 0x42; 0xf5; (* CMOVB (% rsi) (% r13) *) - 0x49; 0xf7; 0xd4; (* NOT (% r12) *) - 0x49; 0x0f; 0x42; 0xca; (* CMOVB (% rcx) (% r10) *) - 0x49; 0x0f; 0x42; 0xd3; (* CMOVB (% rdx) (% r11) *) - 0x4c; 0x0f; 0x43; 0xe7; (* CMOVAE (% r12) (% rdi) *) - 0x49; 0xd1; 0xee; (* SHR (% r14) (Imm8 (word 1)) *) - 0x4d; 0x01; 0xc2; (* ADD (% r10) (% r8) *) - 0x4d; 0x01; 0xfb; (* ADD (% r11) (% r15) *) - 0x49; 0xd1; 0xec; (* SHR (% r12) (Imm8 (word 1)) *) - 0x48; 0x01; 0xc9; (* ADD (% rcx) (% rcx) *) - 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) - 0x49; 0xff; 0xc9; (* DEC (% r9) *) - 0x75; 0x9c; (* JNE (Imm8 (word 156)) *) - 0x48; 0x8b; 0x7c; 0x24; 0x08; - (* MOV (% rdi) (Memop Quadword (%% (rsp,8))) *) - 0x4c; 0x8b; 0x6c; 0x24; 0x10; - (* MOV (% r13) (Memop Quadword (%% (rsp,16))) *) - 0x4c; 0x8b; 0x04; 0x24; (* MOV (% r8) (Memop Quadword (%% (rsp,0))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x18; - (* MOV (% r15) (Memop Quadword (%% (rsp,24))) *) - 0x4c; 0x89; 0x14; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r10) *) - 0x4c; 0x89; 0x5c; 0x24; 0x08; - (* MOV (Memop Quadword (%% (rsp,8))) (% r11) *) - 0x48; 0x89; 0x4c; 0x24; 0x10; - (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) - 0x48; 0x89; 0x54; 0x24; 0x18; - (* MOV (Memop Quadword (%% (rsp,24))) (% rdx) *) - 0x4c; 0x8b; 0x44; 0x24; 0x38; - (* MOV (% r8) (Memop Quadword (%% (rsp,56))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x40; - (* MOV (% r15) (Memop Quadword (%% (rsp,64))) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4d; 0x31; 0xd2; (* XOR (% r10) (% r10) *) - 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x0c; 0xc8; (* MOV (% rcx) (Memop Quadword (%%% (r8,3,r9))) *) 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) - 0x48; 0x8b; 0x44; 0x24; 0x10; - (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) 0x48; 0x8b; 0x44; 0x24; 0x08; (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) - 0x4d; 0x0f; 0xac; 0xf2; 0x3a; - (* SHRD (% r10) (% r14) (Imm8 (word 58)) *) - 0x4f; 0x89; 0x14; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% r10) *) - 0x4d; 0x89; 0xf2; (* MOV (% r10) (% r14) *) - 0x4d; 0x89; 0xe6; (* MOV (% r14) (% r12) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x28; + (* MOV (% rax) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x0f; 0xac; 0xdf; 0x3b; + (* SHRD (% rdi) (% rbx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x3c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rdi) *) + 0x31; 0xff; (* XOR (% edi) (% edi) *) + 0x48; 0x8b; 0x44; 0x24; 0x08; + (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd7; (* ADC (% rdi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x28; + (* MOV (% rax) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd7; (* ADC (% rdi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xee; 0x3b; + (* SHRD (% rsi) (% rbp) (Imm8 (word 59)) *) + 0x48; 0x89; 0x74; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rsi) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xcb; 0x3b; + (* SHRD (% rbx) (% rcx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x5c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x48; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc7; (* ADD (% rdi) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x0f; 0xac; 0xfd; 0x3b; + (* SHRD (% rbp) (% rdi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rbp) *) 0x48; 0x8b; 0x44; 0x24; 0x18; (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x48; 0x89; 0xc5; (* MOV (% rbp) (% rax) *) + 0x48; 0xc1; 0xfd; 0x3f; (* SAR (% rbp) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xc5; (* AND (% rbp) (% r8) *) + 0x48; 0xf7; 0xdd; (* NEG (% rbp) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) - 0x49; 0x0f; 0xac; 0xf3; 0x3a; - (* SHRD (% r11) (% rsi) (Imm8 (word 58)) *) - 0x4f; 0x89; 0x1c; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% r11) *) - 0x49; 0x89; 0xf3; (* MOV (% r11) (% rsi) *) - 0x48; 0x89; 0xee; (* MOV (% rsi) (% rbp) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0x93; (* JB (Imm8 (word 147)) *) - 0x4d; 0x0f; 0xa4; 0xd6; 0x06; - (* SHLD (% r14) (% r10) (Imm8 (word 6)) *) - 0x4c; 0x0f; 0xa4; 0xde; 0x06; - (* SHLD (% rsi) (% r11) (Imm8 (word 6)) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x48; - (* MOV (% r15) (Memop Quadword (%% (rsp,72))) *) - 0x49; 0x8b; 0x18; (* MOV (% rbx) (Memop Quadword (%% (r8,0))) *) - 0x4c; 0x8b; 0x64; 0x24; 0x28; - (* MOV (% r12) (Memop Quadword (%% (rsp,40))) *) - 0x4c; 0x0f; 0xaf; 0xe3; (* IMUL (% r12) (% rbx) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) + 0x48; 0x8b; 0x44; 0x24; 0x38; + (* MOV (% rax) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x48; 0x89; 0xc2; (* MOV (% rdx) (% rax) *) + 0x48; 0xc1; 0xfa; 0x3f; (* SAR (% rdx) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x48; 0x29; 0xd5; (* SUB (% rbp) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x0f; 0xac; 0xf1; 0x3b; + (* SHRD (% rcx) (% rsi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x4c; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) + 0x48; 0x0f; 0xac; 0xee; 0x3b; + (* SHRD (% rsi) (% rbp) (Imm8 (word 59)) *) + 0x48; 0x8b; 0x44; 0x24; 0x18; + (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) + 0x48; 0x89; 0x74; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rsi) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x48; 0x89; 0xc6; (* MOV (% rsi) (% rax) *) + 0x48; 0xc1; 0xfe; 0x3f; (* SAR (% rsi) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xe6; (* AND (% rsi) (% r12) *) + 0x48; 0xf7; 0xde; (* NEG (% rsi) *) 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) - 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x41; 0xb9; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 1)) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x74; 0x24; (* JE (Imm8 (word 36)) *) - 0x4f; 0x13; 0x14; 0xc8; (* ADC (% r10) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x19; 0xdb; (* SBB (% rbx) (% rbx) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x38; + (* MOV (% rax) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x48; 0x89; 0xc2; (* MOV (% rdx) (% rax) *) + 0x48; 0xc1; 0xfa; 0x3f; (* SAR (% rdx) (Imm8 (word 63)) *) + 0x4c; 0x21; 0xf2; (* AND (% rdx) (% r14) *) + 0x48; 0x29; 0xd6; (* SUB (% rsi) (% rdx) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x0f; 0xac; 0xdf; 0x3b; + (* SHRD (% rdi) (% rbx) (Imm8 (word 59)) *) + 0x48; 0x89; 0x7c; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% rdi) *) + 0x48; 0x0f; 0xac; 0xf3; 0x3b; + (* SHRD (% rbx) (% rsi) (Imm8 (word 59)) *) + 0x48; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% rbx) *) + 0x48; 0x8b; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rbp) (Memop Quadword (%% (rsp,136))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) - 0x48; 0x29; 0xda; (* SUB (% rdx) (% rbx) *) - 0x4c; 0x01; 0xd0; (* ADD (% rax) (% r10) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xdc; (* JNE (Imm8 (word 220)) *) - 0x4d; 0x11; 0xf2; (* ADC (% r10) (% r14) *) - 0x4d; 0x89; 0x54; 0xf8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,rdi,-- &8))) (% r10) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x1b; 0x04; 0xcf; (* SBB (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xf0; (* JNE (Imm8 (word 240)) *) - 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x49; 0xf7; 0xd2; (* NOT (% r10) *) - 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4c; 0x21; 0xd3; (* AND (% rbx) (% r10) *) - 0x48; 0xf7; 0xd9; (* NEG (% rcx) *) - 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) + 0x48; 0x89; 0x5c; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rbx) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x89; 0x6c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rbp) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rcx) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xd5; (* ADC (% rbp) (% rdx) *) + 0x48; 0x89; 0x74; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rsi) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc3; (* ADD (% rbx) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x31; 0xf6; (* XOR (% esi) (% esi) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) + 0x48; 0x89; 0x5c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rbx) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0x48; 0x11; 0xd6; (* ADC (% rsi) (% rdx) *) + 0x48; 0x89; 0x6c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% rbp) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x4c; 0x89; 0xcb; (* MOV (% rbx) (% r9) *) + 0x4c; 0x21; 0xc3; (* AND (% rbx) (% r8) *) + 0x48; 0xf7; 0xdb; (* NEG (% rbx) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x48; 0x29; 0xd3; (* SUB (% rbx) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x11; 0xda; (* ADC (% rdx) (% rbx) *) + 0x48; 0x89; 0xd3; (* MOV (% rbx) (% rdx) *) + 0x48; 0x0f; 0xa4; 0xca; 0x01; + (* SHLD (% rdx) (% rcx) (Imm8 (word 1)) *) + 0x48; 0xc1; 0xfb; 0x3f; (* SAR (% rbx) (Imm8 (word 63)) *) + 0x48; 0x01; 0xda; (* ADD (% rdx) (% rbx) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x48; 0xf7; 0xea; (* IMUL2 (% rdx,% rax) (% rdx) *) 0x4c; 0x8b; 0x44; 0x24; 0x40; (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) - 0x49; 0x8b; 0x18; (* MOV (% rbx) (Memop Quadword (%% (r8,0))) *) - 0x48; 0x8b; 0x6c; 0x24; 0x28; - (* MOV (% rbp) (Memop Quadword (%% (rsp,40))) *) - 0x48; 0x0f; 0xaf; 0xeb; (* IMUL (% rbp) (% rbx) *) - 0x49; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (r15,0))) *) - 0x48; 0xf7; 0xe5; (* MUL2 (% rdx,% rax) (% rbp) *) - 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x41; 0xb9; 0x01; 0x00; 0x00; 0x00; - (* MOV (% r9d) (Imm32 (word 1)) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x74; 0x24; (* JE (Imm8 (word 36)) *) - 0x4f; 0x13; 0x1c; 0xc8; (* ADC (% r11) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x19; 0xdb; (* SBB (% rbx) (% rbx) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0xf7; 0xe5; (* MUL2 (% rdx,% rax) (% rbp) *) - 0x48; 0x29; 0xda; (* SUB (% rdx) (% rbx) *) - 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xdc; (* JNE (Imm8 (word 220)) *) - 0x49; 0x11; 0xf3; (* ADC (% r11) (% rsi) *) - 0x4d; 0x89; 0x5c; 0xf8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,rdi,-- &8))) (% r11) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x89; 0xf9; (* MOV (% rcx) (% rdi) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x1b; 0x04; 0xcf; (* SBB (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x48; 0xff; 0xc9; (* DEC (% rcx) *) - 0x75; 0xf0; (* JNE (Imm8 (word 240)) *) - 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x49; 0xf7; 0xd3; (* NOT (% r11) *) - 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x4c; 0x21; 0xdb; (* AND (% rbx) (% r11) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% r8) (Memop Quadword (%% (rsp,72))) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% r8) (Memop Quadword (%% (rsp,80))) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4c; 0x89; 0x44; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r8) *) + 0x48; 0x11; 0xd9; (* ADC (% rcx) (% rbx) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x48; 0x89; 0x4c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rcx) *) + 0x4c; 0x31; 0xe8; (* XOR (% rax) (% r13) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x4c; 0x21; 0xe1; (* AND (% rcx) (% r12) *) 0x48; 0xf7; 0xd9; (* NEG (% rcx) *) - 0x48; 0x19; 0xd8; (* SBB (% rax) (% rbx) *) - 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xe0; (* JB (Imm8 (word 224)) *) - 0x4c; 0x8b; 0x44; 0x24; 0x30; - (* MOV (% r8) (Memop Quadword (%% (rsp,48))) *) - 0x4d; 0x8d; 0x3c; 0xf8; (* LEA (% r15) (%%% (r8,3,rdi)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) - 0x4d; 0x31; 0xf6; (* XOR (% r14) (% r14) *) - 0x48; 0x31; 0xed; (* XOR (% rbp) (% rbp) *) - 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) - 0x4b; 0x8b; 0x0c; 0xc8; (* MOV (% rcx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) - 0x48; 0x8b; 0x44; 0x24; 0x10; - (* MOV (% rax) (Memop Quadword (%% (rsp,16))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x49; 0xf7; 0xe4; (* MUL2 (% rdx,% rax) (% r12) *) 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) - 0x48; 0x83; 0xd2; 0x00; (* ADC (% rdx) (Imm8 (word 0)) *) - 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) - 0x4b; 0x8b; 0x0c; 0xcf; (* MOV (% rcx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x8b; 0x44; 0x24; 0x08; - (* MOV (% rax) (Memop Quadword (%% (rsp,8))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x4c; 0x29; 0xe2; (* SUB (% rdx) (% r12) *) - 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) - 0x49; 0x19; 0xd2; (* SBB (% r10) (% rdx) *) - 0x4d; 0x19; 0xe4; (* SBB (% r12) (% r12) *) - 0x4f; 0x89; 0x34; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% r14) *) - 0x4d; 0x89; 0xd6; (* MOV (% r14) (% r10) *) - 0x48; 0x8b; 0x44; 0x24; 0x18; - (* MOV (% rax) (Memop Quadword (%% (rsp,24))) *) - 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) - 0x48; 0x29; 0xea; (* SUB (% rdx) (% rbp) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xf8; (* XOR (% rax) (% r15) *) + 0x4c; 0x89; 0xfa; (* MOV (% rdx) (% r15) *) + 0x4c; 0x21; 0xf2; (* AND (% rdx) (% r14) *) + 0x48; 0x29; 0xd1; (* SUB (% rcx) (% rdx) *) + 0x49; 0xf7; 0xe6; (* MUL2 (% rdx,% rax) (% r14) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x11; 0xca; (* ADC (% rdx) (% rcx) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x48; 0x0f; 0xa4; 0xf2; 0x01; + (* SHLD (% rdx) (% rsi) (Imm8 (word 1)) *) + 0x48; 0xc1; 0xf9; 0x3f; (* SAR (% rcx) (Imm8 (word 63)) *) + 0xb8; 0x13; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 19)) *) + 0x48; 0x01; 0xca; (* ADD (% rdx) (% rcx) *) + 0x48; 0xf7; 0xea; (* IMUL2 (% rdx,% rax) (% rdx) *) + 0x4c; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% r8) (Memop Quadword (%% (rsp,96))) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% r8) (Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x44; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r8) *) + 0x4c; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x48; 0x11; 0xce; (* ADC (% rsi) (% rcx) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x48; 0x01; 0xc6; (* ADD (% rsi) (% rax) *) + 0x48; 0x89; 0x74; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% rsi) *) + 0x48; 0x8b; 0xb4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0x8b; 0x14; 0x24; (* MOV (% rdx) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x20; + (* MOV (% rcx) (Memop Quadword (%% (rsp,32))) *) + 0x48; 0x89; 0xd3; (* MOV (% rbx) (% rdx) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) - 0x49; 0x19; 0xd3; (* SBB (% r11) (% rdx) *) - 0x48; 0x19; 0xed; (* SBB (% rbp) (% rbp) *) - 0x4b; 0x89; 0x34; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rsi) *) - 0x4c; 0x89; 0xde; (* MOV (% rsi) (% r11) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0x97; (* JB (Imm8 (word 151)) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x4d; 0x89; 0xe2; (* MOV (% r10) (% r12) *) - 0x49; 0x89; 0xeb; (* MOV (% r11) (% rbp) *) - 0x4d; 0x31; 0xe6; (* XOR (% r14) (% r12) *) - 0x48; 0x31; 0xee; (* XOR (% rsi) (% rbp) *) - 0x4b; 0x8b; 0x04; 0xc8; (* MOV (% rax) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4c; 0x31; 0xe0; (* XOR (% rax) (% r12) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x83; 0xd0; 0x00; (* ADC (% rax) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x4b; 0x8b; 0x04; 0xcf; (* MOV (% rax) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x31; 0xe8; (* XOR (% rax) (% rbp) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x83; 0xd0; 0x00; (* ADC (% rax) (Imm8 (word 0)) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x4b; 0x89; 0x04; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rax) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x4d; 0x39; 0xe9; (* CMP (% r9) (% r13) *) - 0x72; 0xce; (* JB (Imm8 (word 206)) *) - 0x4d; 0x29; 0xd6; (* SUB (% r14) (% r10) *) - 0x4c; 0x29; 0xde; (* SUB (% rsi) (% r11) *) - 0x4d; 0x89; 0xe9; (* MOV (% r9) (% r13) *) - 0x4b; 0x8b; 0x44; 0xc8; 0xf8; - (* MOV (% rax) (Memop Quadword (%%%% (r8,3,r9,-- &8))) *) - 0x49; 0x89; 0xc2; (* MOV (% r10) (% rax) *) - 0x4c; 0x0f; 0xac; 0xf0; 0x3a; - (* SHRD (% rax) (% r14) (Imm8 (word 58)) *) - 0x4b; 0x89; 0x44; 0xc8; 0xf8; - (* MOV (Memop Quadword (%%%% (r8,3,r9,-- &8))) (% rax) *) - 0x4d; 0x89; 0xd6; (* MOV (% r14) (% r10) *) - 0x4b; 0x8b; 0x44; 0xcf; 0xf8; - (* MOV (% rax) (Memop Quadword (%%%% (r15,3,r9,-- &8))) *) - 0x49; 0x89; 0xc3; (* MOV (% r11) (% rax) *) - 0x48; 0x0f; 0xac; 0xf0; 0x3a; - (* SHRD (% rax) (% rsi) (Imm8 (word 58)) *) - 0x4b; 0x89; 0x44; 0xcf; 0xf8; - (* MOV (Memop Quadword (%%%% (r15,3,r9,-- &8))) (% rax) *) - 0x4c; 0x89; 0xde; (* MOV (% rsi) (% r11) *) - 0x49; 0xff; 0xc9; (* DEC (% r9) *) - 0x75; 0xd1; (* JNE (Imm8 (word 209)) *) - 0x48; 0xf7; 0xd5; (* NOT (% rbp) *) - 0x48; 0x8b; 0x4c; 0x24; 0x48; - (* MOV (% rcx) (Memop Quadword (%% (rsp,72))) *) - 0x4c; 0x8b; 0x44; 0x24; 0x38; - (* MOV (% r8) (Memop Quadword (%% (rsp,56))) *) - 0x4c; 0x8b; 0x7c; 0x24; 0x40; - (* MOV (% r15) (Memop Quadword (%% (rsp,64))) *) - 0x4d; 0x89; 0xe2; (* MOV (% r10) (% r12) *) - 0x49; 0x89; 0xeb; (* MOV (% r11) (% rbp) *) - 0x4d; 0x31; 0xc9; (* XOR (% r9) (% r9) *) - 0x48; 0x89; 0xea; (* MOV (% rdx) (% rbp) *) - 0x4a; 0x8b; 0x04; 0xc9; (* MOV (% rax) (Memop Quadword (%%% (rcx,3,r9))) *) - 0x48; 0x21; 0xc2; (* AND (% rdx) (% rax) *) - 0x4c; 0x21; 0xe0; (* AND (% rax) (% r12) *) - 0x4b; 0x8b; 0x1c; 0xc8; (* MOV (% rbx) (Memop Quadword (%%% (r8,3,r9))) *) - 0x4c; 0x31; 0xe3; (* XOR (% rbx) (% r12) *) - 0x49; 0xf7; 0xda; (* NEG (% r10) *) - 0x48; 0x11; 0xd8; (* ADC (% rax) (% rbx) *) - 0x4d; 0x19; 0xd2; (* SBB (% r10) (% r10) *) - 0x4b; 0x89; 0x04; 0xc8; (* MOV (Memop Quadword (%%% (r8,3,r9))) (% rax) *) - 0x4b; 0x8b; 0x1c; 0xcf; (* MOV (% rbx) (Memop Quadword (%%% (r15,3,r9))) *) - 0x48; 0x31; 0xeb; (* XOR (% rbx) (% rbp) *) - 0x49; 0xf7; 0xdb; (* NEG (% r11) *) - 0x48; 0x11; 0xda; (* ADC (% rdx) (% rbx) *) - 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) - 0x4b; 0x89; 0x14; 0xcf; (* MOV (Memop Quadword (%%% (r15,3,r9))) (% rdx) *) - 0x49; 0xff; 0xc1; (* INC (% r9) *) - 0x49; 0x39; 0xf9; (* CMP (% r9) (% rdi) *) - 0x72; 0xc3; (* JB (Imm8 (word 195)) *) - 0x48; 0x83; 0x6c; 0x24; 0x20; 0x3a; - (* SUB (Memop Quadword (%% (rsp,32))) (Imm8 (word 58)) *) - 0x0f; 0x87; 0x8d; 0xfb; 0xff; 0xff; - (* JA (Imm32 (word 4294966157)) *) - 0x48; 0x8b; 0x7c; 0x24; 0x58; - (* MOV (% rdi) (Memop Quadword (%% (rsp,88))) *) - 0x48; 0x8d; 0x74; 0x24; 0x60; - (* LEA (% rsi) (%% (rsp,96)) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,224)) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x48; 0x8d; 0x14; 0x03; (* LEA (% rdx) (%%% (rbx,0,rax)) *) + 0x48; 0x8d; 0x3c; 0x01; (* LEA (% rdi) (%%% (rcx,0,rax)) *) + 0x48; 0xc1; 0xe2; 0x16; (* SHL (% rdx) (Imm8 (word 22)) *) + 0x48; 0xc1; 0xe7; 0x16; (* SHL (% rdi) (Imm8 (word 22)) *) + 0x48; 0xc1; 0xfa; 0x2b; (* SAR (% rdx) (Imm8 (word 43)) *) + 0x48; 0xc1; 0xff; 0x2b; (* SAR (% rdi) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x48; 0x8d; 0x1c; 0x03; (* LEA (% rbx) (%%% (rbx,0,rax)) *) + 0x48; 0x8d; 0x0c; 0x01; (* LEA (% rcx) (%%% (rcx,0,rax)) *) + 0x48; 0xc1; 0xfb; 0x2a; (* SAR (% rbx) (Imm8 (word 42)) *) + 0x48; 0xc1; 0xf9; 0x2a; (* SAR (% rcx) (Imm8 (word 42)) *) + 0x48; 0x89; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rdx) *) + 0x48; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rbx) *) + 0x48; 0x89; 0xbc; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% rdi) *) + 0x48; 0x89; 0x8c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% rcx) *) + 0x4c; 0x8b; 0x24; 0x24; (* MOV (% r12) (Memop Quadword (%% (rsp,0))) *) + 0x49; 0x0f; 0xaf; 0xfc; (* IMUL (% rdi) (% r12) *) + 0x4c; 0x0f; 0xaf; 0xe2; (* IMUL (% r12) (% rdx) *) + 0x4c; 0x8b; 0x6c; 0x24; 0x20; + (* MOV (% r13) (Memop Quadword (%% (rsp,32))) *) + 0x49; 0x0f; 0xaf; 0xdd; (* IMUL (% rbx) (% r13) *) + 0x4c; 0x0f; 0xaf; 0xe9; (* IMUL (% r13) (% rcx) *) + 0x49; 0x01; 0xdc; (* ADD (% r12) (% rbx) *) + 0x49; 0x01; 0xfd; (* ADD (% r13) (% rdi) *) + 0x49; 0xc1; 0xfc; 0x14; (* SAR (% r12) (Imm8 (word 20)) *) + 0x49; 0xc1; 0xfd; 0x14; (* SAR (% r13) (Imm8 (word 20)) *) + 0x4c; 0x89; 0xe3; (* MOV (% rbx) (% r12) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x4c; 0x8d; 0x04; 0x03; (* LEA (% r8) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x14; 0x01; (* LEA (% r10) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xe0; 0x16; (* SHL (% r8) (Imm8 (word 22)) *) + 0x49; 0xc1; 0xe2; 0x16; (* SHL (% r10) (Imm8 (word 22)) *) + 0x49; 0xc1; 0xf8; 0x2b; (* SAR (% r8) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfa; 0x2b; (* SAR (% r10) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x4c; 0x8d; 0x3c; 0x03; (* LEA (% r15) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x1c; 0x01; (* LEA (% r11) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xff; 0x2a; (* SAR (% r15) (Imm8 (word 42)) *) + 0x49; 0xc1; 0xfb; 0x2a; (* SAR (% r11) (Imm8 (word 42)) *) + 0x4c; 0x89; 0xeb; (* MOV (% rbx) (% r13) *) + 0x4c; 0x89; 0xe1; (* MOV (% rcx) (% r12) *) + 0x4d; 0x0f; 0xaf; 0xe0; (* IMUL (% r12) (% r8) *) + 0x49; 0x0f; 0xaf; 0xdf; (* IMUL (% rbx) (% r15) *) + 0x49; 0x01; 0xdc; (* ADD (% r12) (% rbx) *) + 0x4d; 0x0f; 0xaf; 0xeb; (* IMUL (% r13) (% r11) *) + 0x49; 0x0f; 0xaf; 0xca; (* IMUL (% rcx) (% r10) *) + 0x49; 0x01; 0xcd; (* ADD (% r13) (% rcx) *) + 0x49; 0xc1; 0xfc; 0x14; (* SAR (% r12) (Imm8 (word 20)) *) + 0x49; 0xc1; 0xfd; 0x14; (* SAR (% r13) (Imm8 (word 20)) *) + 0x4c; 0x89; 0xe3; (* MOV (% rbx) (% r12) *) + 0x48; 0x81; 0xe3; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rbx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0xfe; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446741874686296064)) *) + 0x48; 0x09; 0xc3; (* OR (% rbx) (% rax) *) + 0x4c; 0x89; 0xe9; (* MOV (% rcx) (% r13) *) + 0x48; 0x81; 0xe1; 0xff; 0xff; 0x0f; 0x00; + (* AND (% rcx) (Imm32 (word 1048575)) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0x00; 0xc0; + (* MOV (% rax) (Imm64 (word 13835058055282163712)) *) + 0x48; 0x09; 0xc1; (* OR (% rcx) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x49; 0x0f; 0xaf; 0xd7; (* IMUL (% rdx) (% r15) *) + 0x4c; 0x0f; 0xaf; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* IMUL (% r8) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x0f; 0xaf; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* IMUL (% r15) (Memop Quadword (%% (rsp,184))) *) + 0x4d; 0x01; 0xc7; (* ADD (% r15) (% r8) *) + 0x4c; 0x8d; 0x0c; 0x10; (* LEA (% r9) (%%% (rax,0,rdx)) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) + 0x49; 0x0f; 0xaf; 0xc2; (* IMUL (% rax) (% r10) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x49; 0x0f; 0xaf; 0xd3; (* IMUL (% rdx) (% r11) *) + 0x4c; 0x0f; 0xaf; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* IMUL (% r10) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x0f; 0xaf; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* IMUL (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x4d; 0x01; 0xd3; (* ADD (% r11) (% r10) *) + 0x4c; 0x8d; 0x2c; 0x10; (* LEA (% r13) (%%% (rax,0,rdx)) *) + 0x48; 0xc7; 0xc0; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm32 (word 4294967294)) *) + 0xba; 0x02; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 2)) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x85; 0xf6; (* TEST (% rsi) (% rsi) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0xf7; 0xc1; 0x01; 0x00; 0x00; 0x00; + (* TEST (% rcx) (Imm32 (word 1)) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x4c; 0x0f; 0x48; 0xc5; (* CMOVS (% r8) (% rbp) *) + 0x48; 0x89; 0xdf; (* MOV (% rdi) (% rbx) *) + 0x48; 0x85; 0xd1; (* TEST (% rcx) (% rdx) *) + 0x4c; 0x0f; 0x44; 0xc5; (* CMOVE (% r8) (% rbp) *) + 0x48; 0x0f; 0x44; 0xfd; (* CMOVE (% rdi) (% rbp) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0x4c; 0x31; 0xc7; (* XOR (% rdi) (% r8) *) + 0x4c; 0x31; 0xc6; (* XOR (% rsi) (% r8) *) + 0x49; 0x0f; 0xba; 0xe0; 0x3f; + (* BT (% r8) (Imm8 (word 63)) *) + 0x48; 0x0f; 0x42; 0xd9; (* CMOVB (% rbx) (% rcx) *) + 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) + 0x48; 0x29; 0xc6; (* SUB (% rsi) (% rax) *) + 0x48; 0x8d; 0x0c; 0x39; (* LEA (% rcx) (%%% (rcx,0,rdi)) *) + 0x48; 0xd1; 0xf9; (* SAR (% rcx) (Imm8 (word 1)) *) + 0xb8; 0x00; 0x00; 0x10; 0x00; + (* MOV (% eax) (Imm32 (word 1048576)) *) + 0x4c; 0x8d; 0x04; 0x03; (* LEA (% r8) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x24; 0x01; (* LEA (% r12) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xe0; 0x15; (* SHL (% r8) (Imm8 (word 21)) *) + 0x49; 0xc1; 0xe4; 0x15; (* SHL (% r12) (Imm8 (word 21)) *) + 0x49; 0xc1; 0xf8; 0x2b; (* SAR (% r8) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfc; 0x2b; (* SAR (% r12) (Imm8 (word 43)) *) + 0x48; 0xb8; 0x00; 0x00; 0x10; 0x00; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 2199024304128)) *) + 0x4c; 0x8d; 0x14; 0x03; (* LEA (% r10) (%%% (rbx,0,rax)) *) + 0x4c; 0x8d; 0x34; 0x01; (* LEA (% r14) (%%% (rcx,0,rax)) *) + 0x49; 0xc1; 0xfa; 0x2b; (* SAR (% r10) (Imm8 (word 43)) *) + 0x49; 0xc1; 0xfe; 0x2b; (* SAR (% r14) (Imm8 (word 43)) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x49; 0x0f; 0xaf; 0xd2; (* IMUL (% rdx) (% r10) *) + 0x4d; 0x0f; 0xaf; 0xc7; (* IMUL (% r8) (% r15) *) + 0x4d; 0x0f; 0xaf; 0xd3; (* IMUL (% r10) (% r11) *) + 0x4d; 0x01; 0xc2; (* ADD (% r10) (% r8) *) + 0x4c; 0x8d; 0x04; 0x10; (* LEA (% r8) (%%% (rax,0,rdx)) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x49; 0x0f; 0xaf; 0xc4; (* IMUL (% rax) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x49; 0x0f; 0xaf; 0xd6; (* IMUL (% rdx) (% r14) *) + 0x4d; 0x0f; 0xaf; 0xe7; (* IMUL (% r12) (% r15) *) + 0x4d; 0x0f; 0xaf; 0xf3; (* IMUL (% r14) (% r11) *) + 0x4d; 0x01; 0xe6; (* ADD (% r14) (% r12) *) + 0x4c; 0x8d; 0x24; 0x10; (* LEA (% r12) (%%% (rax,0,rdx)) *) + 0x48; 0x89; 0xb4; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% rsi) *) + 0x48; 0xff; 0x8c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* DEC (Memop Quadword (%% (rsp,144))) *) + 0x0f; 0x85; 0xc1; 0xee; 0xff; 0xff; + (* JNE (Imm32 (word 4294962881)) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x20; + (* MOV (% rcx) (Memop Quadword (%% (rsp,32))) *) + 0x49; 0x0f; 0xaf; 0xc0; (* IMUL (% rax) (% r8) *) + 0x49; 0x0f; 0xaf; 0xca; (* IMUL (% rcx) (% r10) *) + 0x48; 0x01; 0xc8; (* ADD (% rax) (% rcx) *) + 0x48; 0xc1; 0xf8; 0x3f; (* SAR (% rax) (Imm8 (word 63)) *) + 0x4d; 0x89; 0xc1; (* MOV (% r9) (% r8) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xc8; (* XOR (% r8) (% r9) *) + 0x4d; 0x29; 0xc8; (* SUB (% r8) (% r9) *) + 0x49; 0x31; 0xc1; (* XOR (% r9) (% rax) *) + 0x4d; 0x89; 0xd3; (* MOV (% r11) (% r10) *) + 0x49; 0xc1; 0xfb; 0x3f; (* SAR (% r11) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xda; (* XOR (% r10) (% r11) *) + 0x4d; 0x29; 0xda; (* SUB (% r10) (% r11) *) + 0x49; 0x31; 0xc3; (* XOR (% r11) (% rax) *) + 0x4d; 0x89; 0xe5; (* MOV (% r13) (% r12) *) + 0x49; 0xc1; 0xfd; 0x3f; (* SAR (% r13) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xec; (* XOR (% r12) (% r13) *) + 0x4d; 0x29; 0xec; (* SUB (% r12) (% r13) *) + 0x49; 0x31; 0xc5; (* XOR (% r13) (% rax) *) + 0x4d; 0x89; 0xf7; (* MOV (% r15) (% r14) *) + 0x49; 0xc1; 0xff; 0x3f; (* SAR (% r15) (Imm8 (word 63)) *) + 0x4d; 0x31; 0xfe; (* XOR (% r14) (% r15) *) + 0x4d; 0x29; 0xfe; (* SUB (% r14) (% r15) *) + 0x49; 0x31; 0xc7; (* XOR (% r15) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x4c; 0x21; 0xc8; (* AND (% rax) (% r9) *) + 0x4d; 0x89; 0xd4; (* MOV (% r12) (% r10) *) + 0x4d; 0x21; 0xdc; (* AND (% r12) (% r11) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) + 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x68; + (* MOV (% rax) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc5; (* ADD (% r13) (% rax) *) + 0x49; 0x11; 0xd6; (* ADC (% r14) (% rdx) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% rax) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% rax) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x49; 0x11; 0xd7; (* ADC (% r15) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% rax) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x31; 0xc8; (* XOR (% rax) (% r9) *) + 0x4d; 0x21; 0xc1; (* AND (% r9) (% r8) *) + 0x49; 0xf7; 0xd9; (* NEG (% r9) *) + 0x49; 0xf7; 0xe0; (* MUL2 (% rdx,% rax) (% r8) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x48; 0x8b; 0x44; 0x24; 0x78; + (* MOV (% rax) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x31; 0xd8; (* XOR (% rax) (% r11) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x4c; 0x21; 0xd2; (* AND (% rdx) (% r10) *) + 0x49; 0x29; 0xd1; (* SUB (% r9) (% rdx) *) + 0x49; 0xf7; 0xe2; (* MUL2 (% rdx,% rax) (% r10) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4c; 0x0f; 0xa4; 0xf8; 0x01; + (* SHLD (% rax) (% r15) (Imm8 (word 1)) *) + 0x49; 0xc1; 0xf9; 0x3f; (* SAR (% r9) (Imm8 (word 63)) *) + 0xbb; 0x13; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 19)) *) + 0x4a; 0x8d; 0x44; 0x08; 0x01; + (* LEA (% rax) (%%%% (rax,0,r9,&1)) *) + 0x48; 0xf7; 0xeb; (* IMUL2 (% rdx,% rax) (% rbx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x49; 0x01; 0xc4; (* ADD (% r12) (% rax) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x4d; 0x11; 0xce; (* ADC (% r14) (% r9) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x48; 0xc1; 0xe0; 0x3f; (* SHL (% rax) (Imm8 (word 63)) *) + 0x49; 0x01; 0xc7; (* ADD (% r15) (% rax) *) + 0x48; 0x0f; 0x49; 0xdd; (* CMOVNS (% rbx) (% rbp) *) + 0x49; 0x29; 0xdc; (* SUB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x0f; 0xba; 0xf7; 0x3f; + (* BTR (% r15) (Imm8 (word 63)) *) + 0x48; 0x8b; 0xbc; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x89; 0x27; (* MOV (Memop Quadword (%% (rdi,0))) (% r12) *) + 0x4c; 0x89; 0x6f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r13) *) + 0x4c; 0x89; 0x77; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r14) *) + 0x4c; 0x89; 0x7f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r15) *) + 0x48; 0x8b; 0xbc; 0x24; 0xb8; 0x05; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,1464))) *) + 0x48; 0x8d; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,288)) *) + 0x48; 0x8d; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,416)) *) 0x48; 0x8b; 0x06; (* MOV (% rax) (Memop Quadword (%% (rsi,0))) *) 0x48; 0xf7; 0x65; 0x00; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rbp,0))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) @@ -2326,13 +3448,13 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) - 0x48; 0x8b; 0x7c; 0x24; 0x58; - (* MOV (% rdi) (Memop Quadword (%% (rsp,88))) *) + 0x48; 0x8b; 0xbc; 0x24; 0xb8; 0x05; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,1464))) *) 0x48; 0x83; 0xc7; 0x20; (* ADD (% rdi) (Imm8 (word 32)) *) - 0x48; 0x8d; 0xb4; 0x24; 0x80; 0x00; 0x00; 0x00; - (* LEA (% rsi) (%% (rsp,128)) *) - 0x48; 0x8d; 0xac; 0x24; 0xe0; 0x00; 0x00; 0x00; - (* LEA (% rbp) (%% (rsp,224)) *) + 0x48; 0x8d; 0xb4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* LEA (% rsi) (%% (rsp,320)) *) + 0x48; 0x8d; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* LEA (% rbp) (%% (rsp,416)) *) 0x48; 0x8b; 0x06; (* MOV (% rax) (Memop Quadword (%% (rsi,0))) *) 0x48; 0xf7; 0x65; 0x00; (* MUL2 (% rdx,% rax) (Memop Quadword (%% (rbp,0))) *) 0x49; 0x89; 0xc0; (* MOV (% r8) (% rax) *) @@ -7758,55 +8880,53 @@ let edwards25519_scalarmuldouble_alt_mc,edwards25519_scalarmuldouble_alt_data = (* ADD (% rsp) (Imm32 (word 192)) *) 0xc3 (* RET *) ] -[237; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; 255; - 255; 127; 62; 145; 64; 215; 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; - 253; 9; 138; 143; 104; 52; 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; - 68; 133; 59; 140; 245; 198; 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; - 207; 194; 66; 61; 100; 152; 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; - 104; 170; 122; 135; 5; 18; 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; - 140; 89; 67; 221; 203; 125; 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; - 168; 213; 180; 66; 96; 165; 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; - 170; 55; 110; 177; 107; 35; 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; - 215; 113; 60; 147; 252; 231; 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; - 2; 7; 214; 225; 101; 154; 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; - 155; 165; 179; 168; 250; 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; - 61; 11; 132; 160; 15; 80; 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; - 252; 164; 232; 31; 97; 86; 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; - 75; 33; 26; 243; 49; 129; 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; - 76; 168; 176; 37; 175; 138; 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; - 2; 80; 27; 193; 244; 248; 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; - 147; 174; 20; 98; 218; 53; 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; - 112; 209; 198; 180; 185; 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; - 149; 169; 250; 96; 86; 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; - 195; 154; 164; 69; 116; 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; - 56; 37; 253; 125; 244; 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; - 39; 135; 229; 33; 3; 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; - 193; 92; 123; 69; 57; 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; - 85; 99; 191; 12; 157; 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; - 39; 75; 209; 20; 0; 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; - 235; 115; 126; 74; 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; - 195; 72; 80; 141; 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; - 204; 69; 41; 133; 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; - 8; 14; 39; 45; 167; 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; - 170; 67; 164; 140; 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; - 87; 185; 83; 69; 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; - 49; 113; 21; 119; 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; - 167; 89; 218; 104; 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; - 75; 234; 2; 103; 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; - 59; 8; 75; 162; 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; - 170; 154; 44; 111; 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; - 79; 118; 234; 157; 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; - 208; 92; 26; 107; 210; 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; - 82; 178; 113; 126; 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; - 109; 131; 241; 154; 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; - 156; 82; 167; 144; 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; - 167; 226; 249; 88; 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; - 39; 44; 195; 1; 14; 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; - 44; 112; 136; 226; 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; - 47; 229; 188; 97; 96; 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; - 215; 167; 204; 139; 120; 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; - 149; 78; 204; 46; 92; 124; 144; 38];; +[62; 145; 64; 215; 5; 57; 16; 157; 179; 190; 64; 209; 5; 159; 57; 253; 9; + 138; 143; 104; 52; 132; 193; 165; 103; 18; 248; 152; 146; 47; 253; 68; 133; + 59; 140; 245; 198; 147; 188; 47; 25; 14; 140; 251; 198; 45; 147; 207; 194; + 66; 61; 100; 152; 72; 11; 39; 101; 186; 212; 51; 58; 157; 207; 7; 104; 170; + 122; 135; 5; 18; 201; 171; 158; 196; 170; 204; 35; 232; 217; 38; 140; 89; + 67; 221; 203; 125; 27; 90; 168; 101; 12; 159; 104; 123; 17; 111; 168; 213; + 180; 66; 96; 165; 153; 138; 246; 172; 96; 78; 12; 129; 43; 143; 170; 55; + 110; 177; 107; 35; 158; 224; 85; 37; 201; 105; 166; 149; 181; 107; 215; 113; + 60; 147; 252; 231; 36; 146; 181; 245; 15; 122; 150; 157; 70; 159; 2; 7; 214; + 225; 101; 154; 166; 90; 46; 46; 125; 168; 63; 6; 12; 89; 95; 122; 155; 165; + 179; 168; 250; 67; 120; 207; 154; 93; 221; 107; 193; 54; 49; 106; 61; 11; + 132; 160; 15; 80; 115; 11; 165; 62; 177; 245; 26; 112; 101; 210; 252; 164; + 232; 31; 97; 86; 125; 186; 193; 229; 253; 83; 211; 59; 189; 214; 75; 33; 26; + 243; 49; 129; 98; 218; 91; 85; 135; 21; 185; 42; 48; 151; 238; 76; 168; 176; + 37; 175; 138; 75; 134; 232; 48; 132; 90; 2; 50; 103; 1; 159; 2; 80; 27; 193; + 244; 248; 128; 154; 27; 78; 22; 122; 137; 216; 208; 13; 63; 147; 174; 20; + 98; 218; 53; 28; 34; 35; 148; 88; 76; 219; 242; 140; 69; 229; 112; 209; 198; + 180; 185; 18; 175; 38; 40; 90; 191; 24; 104; 5; 10; 5; 254; 149; 169; 250; + 96; 86; 113; 137; 126; 50; 115; 80; 160; 6; 205; 227; 232; 195; 154; 164; + 69; 116; 76; 63; 147; 39; 159; 9; 252; 142; 185; 81; 115; 40; 56; 37; 253; + 125; 244; 198; 101; 103; 101; 146; 10; 251; 61; 141; 52; 202; 39; 135; 229; + 33; 3; 145; 14; 104; 9; 255; 118; 196; 233; 251; 19; 90; 114; 193; 92; 123; + 69; 57; 158; 110; 148; 68; 43; 16; 249; 220; 219; 93; 43; 62; 85; 99; 191; + 12; 157; 127; 186; 214; 71; 164; 195; 130; 145; 127; 183; 41; 39; 75; 209; + 20; 0; 213; 135; 160; 100; 184; 28; 241; 60; 227; 243; 85; 27; 235; 115; + 126; 74; 21; 51; 187; 165; 8; 68; 188; 18; 162; 2; 237; 94; 199; 195; 72; + 80; 141; 68; 236; 191; 90; 12; 235; 27; 221; 235; 6; 226; 70; 241; 204; 69; + 41; 133; 130; 42; 129; 241; 219; 187; 188; 252; 209; 189; 208; 7; 8; 14; 39; + 45; 167; 189; 27; 11; 103; 27; 180; 154; 182; 59; 107; 105; 190; 170; 67; + 164; 140; 125; 123; 182; 6; 152; 73; 57; 39; 210; 39; 132; 226; 91; 87; 185; + 83; 69; 32; 231; 92; 8; 187; 132; 120; 65; 174; 65; 76; 182; 56; 49; 113; + 21; 119; 235; 238; 12; 58; 136; 175; 200; 0; 137; 21; 39; 155; 54; 167; 89; + 218; 104; 182; 101; 128; 189; 56; 204; 162; 182; 123; 229; 81; 113; 75; 234; + 2; 103; 50; 172; 133; 1; 187; 161; 65; 3; 224; 112; 190; 68; 193; 59; 8; 75; + 162; 228; 83; 227; 97; 13; 159; 26; 233; 184; 16; 177; 33; 50; 170; 154; 44; + 111; 186; 167; 35; 186; 59; 83; 33; 160; 108; 58; 44; 25; 146; 79; 118; 234; + 157; 224; 23; 83; 46; 93; 221; 110; 29; 191; 163; 78; 148; 208; 92; 26; 107; + 210; 192; 157; 179; 58; 53; 112; 116; 73; 46; 84; 40; 130; 82; 178; 113; + 126; 146; 60; 40; 105; 234; 27; 70; 162; 179; 184; 1; 200; 109; 131; 241; + 154; 164; 62; 5; 71; 95; 3; 179; 243; 173; 119; 88; 186; 65; 156; 82; 167; + 144; 15; 106; 28; 187; 159; 122; 217; 52; 146; 243; 237; 93; 167; 226; 249; + 88; 181; 225; 128; 118; 61; 150; 251; 35; 60; 110; 172; 65; 39; 44; 195; 1; + 14; 50; 161; 36; 144; 58; 143; 62; 221; 4; 102; 89; 183; 89; 44; 112; 136; + 226; 119; 3; 179; 108; 35; 195; 217; 94; 102; 156; 51; 177; 47; 229; 188; + 97; 96; 231; 21; 9; 26; 145; 162; 201; 217; 245; 193; 231; 215; 167; 204; + 139; 120; 113; 163; 184; 50; 42; 182; 14; 25; 18; 100; 99; 149; 78; 204; 46; + 92; 124; 144; 38];; let EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC = X86_MK_EXEC_RULE edwards25519_scalarmuldouble_alt_mc;; @@ -8002,32 +9122,32 @@ let GE25519_GROUPER = (MATCH_MP pth (CONJ th1 th2));; let BYTES_LOADED_DATA = prove - (`bytes_loaded s (word (pc + 0x60c9)) edwards25519_scalarmuldouble_alt_data <=> - read (memory :> bytes(word (pc + 0x60c9),800)) s = + (`bytes_loaded s (word (pc + 0x6fc9)) edwards25519_scalarmuldouble_alt_data <=> + read (memory :> bytes(word (pc + 0x6fc9),768)) s = num_of_bytelist edwards25519_scalarmuldouble_alt_data`, REWRITE_TAC[bytes_loaded; READ_BYTELIST_EQ_BYTES; CONV_RULE (RAND_CONV LENGTH_CONV) (AP_TERM `LENGTH:byte list->num` edwards25519_scalarmuldouble_alt_data)]);; let EDWARDS25519DOUBLEBASE_TABLE_LEMMA = prove - (`read (memory :> bytes(word (pc + 0x60c9),800)) s = + (`read (memory :> bytes(word (pc + 0x6fc9),768)) s = num_of_bytelist edwards25519_scalarmuldouble_alt_data - ==> bignum_from_memory(word(pc + 0x60c9),4) s = p_25519 /\ - !i. i < 8 + ==> !i. i < 8 ==> edwards25519_epprojective (group_pow edwards25519_group E_25519 (i + 1)) - (bignum_from_memory(word(pc + 0x60e9 + 96 * i),4) s, - bignum_from_memory(word(pc + 0x60e9 + 96 * i + 32),4) s, - bignum_from_memory(word(pc + 0x60e9 + 96 * i + 64),4) s) /\ - ~(bignum_from_memory(word(pc + 0x60e9 + 96 * i + 64),4) s = + (bignum_from_memory(word(pc + 0x6fc9 + 96 * i),4) s, + bignum_from_memory(word(pc + 0x6fc9 + 96 * i + 32),4) s, + bignum_from_memory(word(pc + 0x6fc9 + 96 * i + 64),4) s) /\ + ~(bignum_from_memory(word(pc + 0x6fc9 + 96 * i + 64),4) s = 0)`, let GE25519_POWERS = end_itlist CONJ (funpow 7 (fun l -> GE25519_GROUPER GE25519_POW_1 (hd l)::l) [GE25519_POW_1]) in - REWRITE_TAC[GSYM BYTES_LOADED_DATA; edwards25519_scalarmuldouble_alt_data] THEN + REWRITE_TAC[GSYM BYTES_LOADED_DATA; + edwards25519_scalarmuldouble_alt_data] THEN CONV_TAC(LAND_CONV DATA64_CONV) THEN STRIP_TAC THEN - CONV_TAC(RAND_CONV EXPAND_CASES_CONV) THEN + CONV_TAC EXPAND_CASES_CONV THEN CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[WORD_ADD] THEN CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN REWRITE_TAC[GSYM WORD_ADD] THEN ASM_REWRITE_TAC[] THEN @@ -8061,14 +9181,14 @@ let lvs = "resy",[`RBP`;`32`]; "scalar",[`RSP`;`0`]; "bscalar",[`RSP`;`32`]; - "acc",[`RSP`;`96`]; - "acc_x",[`RSP`;`96`]; - "acc_y",[`RSP`;`128`]; - "acc_z",[`RSP`;`160`]; - "acc_w",[`RSP`;`192`]; - "tabent",[`RSP`;`224`]; - "btabent",[`RSP`;`352`]; - "tab",[`RSP`;`448`]; + "tabent",[`RSP`;`64`]; + "btabent",[`RSP`;`192`]; + "acc",[`RSP`;`288`]; + "acc_x",[`RSP`;`288`]; + "acc_y",[`RSP`;`296`]; + "acc_z",[`RSP`;`328`]; + "acc_w",[`RSP`;`360`]; + "tab",[`RSP`;`416`]; (*** These are local for the subroutines ***) @@ -8102,7 +9222,7 @@ let LOCAL_MUL_P25519_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0x63e9) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x72c9) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read RIP s = pcin /\ @@ -8293,7 +9413,7 @@ let LOCAL_MUL_4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0x63e9) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x72c9) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read RIP s = pcin /\ @@ -8468,7 +9588,7 @@ let LOCAL_SQR_4_TAC = !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n ==> - nonoverlapping (word pc,0x63e9) (word_add (read p3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x72c9) (word_add (read p3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read RIP s = pcin /\ @@ -8637,7 +9757,7 @@ let LOCAL_ADD_TWICE4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0x63e9) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x72c9) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read RIP s = pcin /\ @@ -8710,7 +9830,7 @@ let LOCAL_DOUBLE_TWICE4_TAC = `!(t:x86state) pcin pcout q3 n3 q1 n1. !n. read(memory :> bytes(word_add (read q1 t) (word n1),8 * 4)) t = n ==> - nonoverlapping (word pc,0x63e9) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x72c9) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read RIP s = pcin /\ @@ -8781,7 +9901,7 @@ let LOCAL_SUB_TWICE4_TAC = ==> !n. read(memory :> bytes(word_add (read q2 t) (word n2),8 * 4)) t = n ==> - nonoverlapping (word pc,0x63e9) (word_add (read q3 t) (word n3),8 * 4) + nonoverlapping (word pc,0x72c9) (word_add (read q3 t) (word n3),8 * 4) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ read RIP s = pcin /\ @@ -8856,20 +9976,16 @@ let LOCAL_SUB_TWICE4_TAC = (* ------------------------------------------------------------------------- *) let LOCAL_MODINV_TAC = - let cth = - (GEN_REWRITE_CONV RAND_CONV [bignum_modinv_mc] THENC TRIM_LIST_CONV) - `TRIM_LIST (23,15) bignum_modinv_mc` - and bth = edwards25519_scalarmuldouble_alt_mc - and th = CONV_RULE (DEPTH_CONV WORD_NUM_RED_CONV) - (SPEC `word 4:int64` CORE_MODINV_CORRECT) in - X86_SUBROUTINE_SIM_TAC(bth,EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC,0x18d6,cth,th) - [`read RSI s`; `read RDX s`; - `read (memory :> bytes(read RDX s,8 * 4)) s`; - `read RCX s`; - `read (memory :> bytes(read RCX s,8 * 4)) s`; - `read R8 s`; - `pc + 0x18d6`; - `read RSP s`];; + X86_SUBROUTINE_SIM_TAC + (edwards25519_scalarmuldouble_alt_mc, + EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC, + 0x1962, + (GEN_REWRITE_CONV RAND_CONV [bignum_inv_p25519_mc] THENC TRIM_LIST_CONV) + `TRIM_LIST (17,18) bignum_inv_p25519_mc`, + CORE_INV_P25519_CORRECT) + [`read RDI s`; `read RSI s`; + `read (memory :> bytes(read RSI s,8 * 4)) s`; + `pc + 0x1962`; `word_add stackpointer (word 200):int64`];; (* ------------------------------------------------------------------------- *) (* Embedded subroutine correctness. *) @@ -8878,17 +9994,17 @@ let LOCAL_MODINV_TAC = let LOCAL_EPDOUBLE_CORRECT = time prove (`!p3 p1 T1 pc stackpointer. ALL (nonoverlapping (stackpointer,160)) - [(word pc,0x63e9); (p3,128); (p1,96)] /\ - nonoverlapping (p3,128) (word pc,0x63e9) + [(word pc,0x72c9); (p3,128); (p1,96)] /\ + nonoverlapping (p3,128) (word pc,0x72c9) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ - read RIP s = word(pc + 0x21b4) /\ + read RIP s = word(pc + 0x30b4) /\ read RSP s = stackpointer /\ read RDI s = p3 /\ read RSI s = p1 /\ bignum_triple_from_memory(p1,4) s = T1) - (\s. read RIP s = word (pc + 0x30e1) /\ + (\s. read RIP s = word (pc + 0x3fe1) /\ !P1. P1 IN group_carrier edwards25519_group /\ edwards25519_projective2 P1 T1 ==> edwards25519_exprojective2 @@ -8983,17 +10099,17 @@ let LOCAL_EPDOUBLE_TAC = let LOCAL_PDOUBLE_CORRECT = time prove (`!p3 p1 T1 pc stackpointer. ALL (nonoverlapping (stackpointer,160)) - [(word pc,0x63e9); (p3,96); (p1,96)] /\ - nonoverlapping (p3,96) (word pc,0x63e9) + [(word pc,0x72c9); (p3,96); (p1,96)] /\ + nonoverlapping (p3,96) (word pc,0x72c9) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ - read RIP s = word(pc + 0x30f0) /\ + read RIP s = word(pc + 0x3ff0) /\ read RSP s = stackpointer /\ read RDI s = p3 /\ read RSI s = p1 /\ bignum_triple_from_memory(p1,4) s = T1) - (\s. read RIP s = word (pc + 0x3e2f) /\ + (\s. read RIP s = word (pc + 0x4d2f) /\ !P1. P1 IN group_carrier edwards25519_group /\ edwards25519_projective2 P1 T1 ==> edwards25519_projective2 @@ -9091,19 +10207,19 @@ let LOCAL_PDOUBLE_TAC = let LOCAL_EPADD_CORRECT = time prove (`!p3 p1 Q1 p2 Q2 pc stackpointer. ALL (nonoverlapping (stackpointer,192)) - [(word pc,0x63e9); (p3,128); (p1,128); (p2,128)] /\ - nonoverlapping (p3,128) (word pc,0x63e9) + [(word pc,0x72c9); (p3,128); (p1,128); (p2,128)] /\ + nonoverlapping (p3,128) (word pc,0x72c9) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ - read RIP s = word(pc + 0x3e3e) /\ + read RIP s = word(pc + 0x4d3e) /\ read RSP s = stackpointer /\ read RDI s = p3 /\ read RSI s = p1 /\ read RBP s = p2 /\ bignum_quadruple_from_memory(p1,4) s = Q1 /\ bignum_quadruple_from_memory(p2,4) s = Q2) - (\s. read RIP s = word (pc + 0x51c2) /\ + (\s. read RIP s = word (pc + 0x60c2) /\ !P1 P2. P1 IN group_carrier edwards25519_group /\ P2 IN group_carrier edwards25519_group /\ edwards25519_exprojective2 P1 Q1 /\ @@ -9237,19 +10353,19 @@ let LOCAL_EPADD_TAC = let LOCAL_PEPADD_CORRECT = time prove (`!p3 p1 Q1 p2 T2 pc stackpointer. ALL (nonoverlapping (stackpointer,192)) - [(word pc,0x63e9); (p3,128); (p1,128); (p2,96)] /\ - nonoverlapping (p3,128) (word pc,0x63e9) + [(word pc,0x72c9); (p3,128); (p1,128); (p2,96)] /\ + nonoverlapping (p3,128) (word pc,0x72c9) ==> ensures x86 (\s. bytes_loaded s (word pc) edwards25519_scalarmuldouble_alt_mc /\ - read RIP s = word(pc + 0x51d1) /\ + read RIP s = word(pc + 0x60d1) /\ read RSP s = stackpointer /\ read RDI s = p3 /\ read RSI s = p1 /\ read RBP s = p2 /\ bignum_quadruple_from_memory(p1,4) s = Q1 /\ bignum_triple_from_memory(p2,4) s = T2) - (\s. read RIP s = word (pc + 0x60c1) /\ + (\s. read RIP s = word (pc + 0x6fc1) /\ !P1 P2. P1 IN group_carrier edwards25519_group /\ P2 IN group_carrier edwards25519_group /\ edwards25519_exprojective2w P1 Q1 /\ @@ -9377,8 +10493,8 @@ let LOCAL_PEPADD_TAC = let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove (`!res scalar point bscalar n xy m pc stackpointer. ALL (nonoverlapping (stackpointer,1672)) - [(word pc,0x63e9); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ - nonoverlapping (res,64) (word pc,0x63e9) + [(word pc,0x72c9); (res,64); (scalar,32); (point,64); (bscalar,32)] /\ + nonoverlapping (res,64) (word pc,0x72c9) ==> ensures x86 (\s. bytes_loaded s (word pc) (APPEND edwards25519_scalarmuldouble_alt_mc @@ -9389,7 +10505,7 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove bignum_from_memory (scalar,4) s = n /\ bignum_pair_from_memory (point,4) s = xy /\ bignum_from_memory (bscalar,4) s = m) - (\s. read RIP s = word (pc + 0x219b) /\ + (\s. read RIP s = word (pc + 0x309b) /\ !P. P IN group_carrier edwards25519_group /\ paired (modular_decode (256,p_25519)) xy = P ==> bignum_pair_from_memory(res,4) s = @@ -9468,13 +10584,13 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove (*** Setup of the main loop ***) - ENSURES_WHILE_DOWN_TAC `63` `pc + 0xddc` `pc + 0x18a2` + ENSURES_WHILE_DOWN_TAC `63` `pc + 0xe18` `pc + 0x1941` `\i s. - read (memory :> bytes(word(pc + 0x60c9),800)) s = + read (memory :> bytes(word(pc + 0x6fc9),768)) s = num_of_bytelist edwards25519_scalarmuldouble_alt_data /\ read RSP s = word_add stackpointer (word 200) /\ - read (memory :> bytes64(word_add stackpointer (word 288))) s = res /\ - read (memory :> bytes64(word_add stackpointer (word 280))) s = + read (memory :> bytes64(word_add stackpointer (word 1664))) s = res /\ + read (memory :> bytes64(word_add stackpointer (word 1656))) s = word (4 * i) /\ bignum_from_memory(word_add stackpointer (word 200),4) s = n /\ bignum_from_memory(word_add stackpointer (word 232),4) s = m /\ @@ -9484,7 +10600,7 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ==> edwards25519_exprojective2 (group_pow edwards25519_group P (j + 1)) (bignum_quadruple_from_memory - (word_add stackpointer (word (648 + 128 * j)),4) s)) /\ + (word_add stackpointer (word (616 + 128 * j)),4) s)) /\ edwards25519_exprojective2 (group_mul edwards25519_group (group_zpow edwards25519_group P @@ -9492,7 +10608,7 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove (group_zpow edwards25519_group E_25519 (&(m DIV 2 EXP (4 * i)) - &(recoder DIV 2 EXP (4 * i))))) (bignum_quadruple_from_memory - (word_add stackpointer (word 296),4) s)` THEN + (word_add stackpointer (word 488),4) s)` THEN REPEAT CONJ_TAC THENL [ARITH_TAC; @@ -9583,7 +10699,7 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove X86_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (56--59) (48--67) THEN ABBREV_TAC `X = - read(memory :> bytes(word_add stackpointer (word 648),8 * 4)) s67` THEN + read(memory :> bytes(word_add stackpointer (word 616),8 * 4)) s67` THEN SUBGOAL_THEN `x MOD (2 * p_25519) = X` MP_TAC THENL [MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN MAP_EVERY EXISTS_TAC [`256`; @@ -9627,7 +10743,7 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove X86_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (76--79) (68--87) THEN ABBREV_TAC `Y = - read(memory :> bytes(word_add stackpointer (word 680),8 * 4)) s87` THEN + read(memory :> bytes(word_add stackpointer (word 648),8 * 4)) s87` THEN SUBGOAL_THEN `y MOD (2 * p_25519) = Y` MP_TAC THENL [MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN MAP_EVERY EXISTS_TAC [`256`; @@ -9668,11 +10784,11 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove LOCAL_MUL_4_TAC 9 ["x_0"; "x_1"; "x_2"] THEN REABBREV_TAC `W = - read(memory :> bytes(word_add stackpointer (word 744),8 * 4)) s97` THEN + read(memory :> bytes(word_add stackpointer (word 712),8 * 4)) s97` THEN POP_ASSUM SUBST_ALL_TAC THEN ABBREV_TAC `Z = - read(memory :> bytes(word_add stackpointer (word 712),8 * 4)) s97` THEN + read(memory :> bytes(word_add stackpointer (word 680),8 * 4)) s97` THEN SUBGOAL_THEN `Z < 2 * p_25519 /\ (Z == 1) (mod (2 * p_25519))` STRIP_ASSUME_TAC THENL [EXPAND_TAC "Z" THEN CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN @@ -9708,10 +10824,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_2 = read(memory :> bytes(word_add stackpointer (word 776),8 * 4)) s102`; - `Y_2 = read(memory :> bytes(word_add stackpointer (word 808),8 * 4)) s102`; - `Z_2 = read(memory :> bytes(word_add stackpointer (word 840),8 * 4)) s102`; - `W_2 = read(memory :> bytes(word_add stackpointer (word 872),8 * 4)) s102`] + [`X_2 = read(memory :> bytes(word_add stackpointer (word 744),8 * 4)) s102`; + `Y_2 = read(memory :> bytes(word_add stackpointer (word 776),8 * 4)) s102`; + `Z_2 = read(memory :> bytes(word_add stackpointer (word 808),8 * 4)) s102`; + `W_2 = read(memory :> bytes(word_add stackpointer (word 840),8 * 4)) s102`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9735,10 +10851,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_3 = read(memory :> bytes(word_add stackpointer (word 904),8 * 4)) s110`; - `Y_3 = read(memory :> bytes(word_add stackpointer (word 936),8 * 4)) s110`; - `Z_3 = read(memory :> bytes(word_add stackpointer (word 968),8 * 4)) s110`; - `W_3 = read(memory :> bytes(word_add stackpointer (word 1000),8 * 4)) s110`] + [`X_3 = read(memory :> bytes(word_add stackpointer (word 872),8 * 4)) s110`; + `Y_3 = read(memory :> bytes(word_add stackpointer (word 904),8 * 4)) s110`; + `Z_3 = read(memory :> bytes(word_add stackpointer (word 936),8 * 4)) s110`; + `W_3 = read(memory :> bytes(word_add stackpointer (word 968),8 * 4)) s110`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9762,10 +10878,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_4 = read(memory :> bytes(word_add stackpointer (word 1032),8 * 4)) s117`; - `Y_4 = read(memory :> bytes(word_add stackpointer (word 1064),8 * 4)) s117`; - `Z_4 = read(memory :> bytes(word_add stackpointer (word 1096),8 * 4)) s117`; - `W_4 = read(memory :> bytes(word_add stackpointer (word 1128),8 * 4)) s117`] + [`X_4 = read(memory :> bytes(word_add stackpointer (word 1000),8 * 4)) s117`; + `Y_4 = read(memory :> bytes(word_add stackpointer (word 1032),8 * 4)) s117`; + `Z_4 = read(memory :> bytes(word_add stackpointer (word 1064),8 * 4)) s117`; + `W_4 = read(memory :> bytes(word_add stackpointer (word 1096),8 * 4)) s117`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9790,10 +10906,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_5 = read(memory :> bytes(word_add stackpointer (word 1160),8 * 4)) s125`; - `Y_5 = read(memory :> bytes(word_add stackpointer (word 1192),8 * 4)) s125`; - `Z_5 = read(memory :> bytes(word_add stackpointer (word 1224),8 * 4)) s125`; - `W_5 = read(memory :> bytes(word_add stackpointer (word 1256),8 * 4)) s125`] + [`X_5 = read(memory :> bytes(word_add stackpointer (word 1128),8 * 4)) s125`; + `Y_5 = read(memory :> bytes(word_add stackpointer (word 1160),8 * 4)) s125`; + `Z_5 = read(memory :> bytes(word_add stackpointer (word 1192),8 * 4)) s125`; + `W_5 = read(memory :> bytes(word_add stackpointer (word 1224),8 * 4)) s125`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9817,10 +10933,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_6 = read(memory :> bytes(word_add stackpointer (word 1288),8 * 4)) s132`; - `Y_6 = read(memory :> bytes(word_add stackpointer (word 1320),8 * 4)) s132`; - `Z_6 = read(memory :> bytes(word_add stackpointer (word 1352),8 * 4)) s132`; - `W_6 = read(memory :> bytes(word_add stackpointer (word 1384),8 * 4)) s132`] + [`X_6 = read(memory :> bytes(word_add stackpointer (word 1256),8 * 4)) s132`; + `Y_6 = read(memory :> bytes(word_add stackpointer (word 1288),8 * 4)) s132`; + `Z_6 = read(memory :> bytes(word_add stackpointer (word 1320),8 * 4)) s132`; + `W_6 = read(memory :> bytes(word_add stackpointer (word 1352),8 * 4)) s132`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9845,10 +10961,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_7 = read(memory :> bytes(word_add stackpointer (word 1416),8 * 4)) s140`; - `Y_7 = read(memory :> bytes(word_add stackpointer (word 1448),8 * 4)) s140`; - `Z_7 = read(memory :> bytes(word_add stackpointer (word 1480),8 * 4)) s140`; - `W_7 = read(memory :> bytes(word_add stackpointer (word 1512),8 * 4)) s140`] + [`X_7 = read(memory :> bytes(word_add stackpointer (word 1384),8 * 4)) s140`; + `Y_7 = read(memory :> bytes(word_add stackpointer (word 1416),8 * 4)) s140`; + `Z_7 = read(memory :> bytes(word_add stackpointer (word 1448),8 * 4)) s140`; + `W_7 = read(memory :> bytes(word_add stackpointer (word 1480),8 * 4)) s140`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9872,10 +10988,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o check (is_forall o concl)) THEN ASM_REWRITE_TAC[] THEN MAP_EVERY ABBREV_TAC - [`X_8 = read(memory :> bytes(word_add stackpointer (word 1544),8 * 4)) s147`; - `Y_8 = read(memory :> bytes(word_add stackpointer (word 1576),8 * 4)) s147`; - `Z_8 = read(memory :> bytes(word_add stackpointer (word 1608),8 * 4)) s147`; - `W_8 = read(memory :> bytes(word_add stackpointer (word 1640),8 * 4)) s147`] + [`X_8 = read(memory :> bytes(word_add stackpointer (word 1512),8 * 4)) s147`; + `Y_8 = read(memory :> bytes(word_add stackpointer (word 1544),8 * 4)) s147`; + `Z_8 = read(memory :> bytes(word_add stackpointer (word 1576),8 * 4)) s147`; + `W_8 = read(memory :> bytes(word_add stackpointer (word 1608),8 * 4)) s147`] THEN DISCH_TAC THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -9898,9 +11014,9 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (150--154) THEN FIRST_X_ASSUM(MP_TAC o SPEC `m DIV 2 EXP 252` o MATCH_MP (MESON[] - `read (memory :> bytes64 (word_add stackpointer (word 264))) s = x + `read (memory :> bytes64 (word_add stackpointer (word 1640))) s = x ==> !m. x = word m - ==> read (memory :> bytes64 (word_add stackpointer (word 264))) s = + ==> read (memory :> bytes64 (word_add stackpointer (word 1640))) s = word m`)) THEN ANTS_TAC THENL [EXPAND_TAC "m" THEN @@ -9912,11 +11028,11 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove (*** Address the precomputed table separately ***) - FIRST_ASSUM(MP_TAC o CONJUNCT2 o + FIRST_ASSUM(MP_TAC o MATCH_MP EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[ARITH_RULE `pc + 0x60e9 + x = (pc + 0x60e9) + x`] THEN + REWRITE_TAC[ARITH_RULE `pc + 0x6fc9 + x = (pc + 0x6fc9) + x`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `wpc:int64 = word(pc + 0x60e9)` THEN + ABBREV_TAC `wpc:int64 = word(pc + 0x6fc9)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD_0] THEN @@ -9937,9 +11053,9 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ANTS_TAC THENL [EXPAND_TAC "wpc" THEN CONV_TAC WORD_RULE; DISCH_TAC] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (168--386) THEN MAP_EVERY ABBREV_TAC - [`XPY = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s386`; - `YMX = read(memory :> bytes(word_add stackpointer (word 584),8 * 4)) s386`; - `KXY = read(memory :> bytes(word_add stackpointer (word 616),8 * 4)) s386`] + [`XPY = read(memory :> bytes(word_add stackpointer (word 392),8 * 4)) s386`; + `YMX = read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s386`; + `KXY = read(memory :> bytes(word_add stackpointer (word 456),8 * 4)) s386`] THEN SUBGOAL_THEN `edwards25519_epprojective (group_pow edwards25519_group E_25519 ix) @@ -9959,7 +11075,8 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove REWRITE_TAC[bignum_of_wordlist; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN REWRITE_TAC[d_25519; p_25519] THEN CONV_TAC INT_REDUCE_CONV; - REPEAT(FIRST_X_ASSUM(K ALL_TAC o check(free_in `wpc:int64` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check(free_in `word_add (wpc:int64)` o concl))) THEN UNDISCH_THEN `m DIV 2 EXP 252 = ix` (SUBST_ALL_TAC o SYM) THEN DISCARD_MATCHING_ASSUMPTIONS [`read c s = if x then y else z`] THEN CLARIFY_TAC] THEN @@ -9968,9 +11085,9 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (387--389) THEN FIRST_X_ASSUM(MP_TAC o SPEC `n DIV 2 EXP 252` o MATCH_MP (MESON[] - `read (memory :> bytes64 (word_add stackpointer (word 264))) s = x + `read (memory :> bytes64 (word_add stackpointer (word 1640))) s = x ==> !m. x = word m - ==> read (memory :> bytes64 (word_add stackpointer (word 264))) s = + ==> read (memory :> bytes64 (word_add stackpointer (word 1640))) s = word m`)) THEN ANTS_TAC THENL [EXPAND_TAC "n" THEN @@ -9984,14 +11101,14 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove ABBREV_TAC `iy = n DIV 2 EXP 252` THEN BIGNUM_LDIGITIZE_TAC "fab_" - `read(memory :> bytes(word_add stackpointer (word 648),8 * 128)) s389` THEN + `read(memory :> bytes(word_add stackpointer (word 616),8 * 128)) s389` THEN CLARIFY_TAC THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (390--709) THEN MAP_EVERY ABBREV_TAC - [`Xt = read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s709`; - `Yt = read(memory :> bytes(word_add stackpointer (word 456),8 * 4)) s709`; - `Zt = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s709`; - `Wt = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s709`] + [`Xt = read(memory :> bytes(word_add stackpointer (word 264),8 * 4)) s709`; + `Yt = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s709`; + `Zt = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s709`; + `Wt = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s709`] THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -10096,26 +11213,19 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove FIRST_X_ASSUM(MP_TAC o MATCH_MP (MESON[] `(!x. P x ==> Q x /\ R x) ==> (!x. P x ==> R x)`)) THEN MAP_EVERY ABBREV_TAC - [`X = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s0`; - `Y = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s0`; - `Z = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s0`; - `W = read(memory :> bytes(word_add stackpointer (word 392),8 * 4)) s0`] + [`X = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s0`; + `Y = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s0`; + `Z = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s0`; + `W = read(memory :> bytes(word_add stackpointer (word 584),8 * 4)) s0`] THEN DISCH_TAC THEN (*** Call the modular inverse ***) - FIRST_X_ASSUM(MP_TAC o CONJUNCT1 o MATCH_MP - EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN DISCH_TAC THEN - X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (1--8) THEN - RULE_ASSUM_TAC(REWRITE_RULE[WORD_RULE - `word(val(word(pc + a):int64) + b):int64 = word(pc + a + b)`]) THEN - RULE_ASSUM_TAC(CONV_RULE(ONCE_DEPTH_CONV NUM_ADD_CONV)) THEN - - LOCAL_MODINV_TAC 9 THEN + X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (1--5) THEN + LOCAL_MODINV_TAC 6 THEN ABBREV_TAC `Z' = - read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s9` THEN + read(memory :> bytes(word_add stackpointer (word 616),8 * 4)) s6` THEN (*** Final multiplications ***) @@ -10145,12 +11255,17 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove SIMP_TAC[INT_OF_NUM_OF_INT; INT_REM_POS_EQ; INT_OF_NUM_EQ; ARITH_EQ] THEN REWRITE_TAC[GSYM p_25519; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ_0; INT_REM_EQ] THEN - STRIP_TAC THEN FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN - ONCE_REWRITE_TAC[COPRIME_SYM] THEN - SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519] THEN - ASM_REWRITE_TAC[num_divides; num_congruent] THEN ANTS_TAC THENL - [REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; - REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES]] THEN + STRIP_TAC THEN + SUBGOAL_THEN `Z' < p_25519 /\ (Z * Z' == 1) (mod p_25519)` + MP_TAC THENL + [FIRST_X_ASSUM(MP_TAC o check (is_imp o concl)) THEN MATCH_MP_TAC(TAUT + `p /\ (q ==> r) /\ (p /\ q ==> s) ==> (p ==> q) ==> r /\ s`) THEN + REPEAT CONJ_TAC THENL + [ASM_SIMP_TAC[PRIME_COPRIME_EQ; PRIME_P25519; num_divides]; + DISCH_THEN SUBST1_TAC THEN REWRITE_TAC[INVERSE_MOD_BOUND] THEN + REWRITE_TAC[p_25519] THEN CONV_TAC NUM_REDUCE_CONV; + MESON_TAC[INVERSE_MOD_RMUL]]; + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; num_congruent]] THEN DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN MATCH_MP_TAC(INTEGER_RULE `(x * z:int == X) (mod p) /\ (y * z == Y) (mod p) @@ -10171,13 +11286,13 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN GHOST_INTRO_TAC `Xa:num` - `bignum_from_memory (word_add stackpointer (word 296),4)` THEN + `bignum_from_memory (word_add stackpointer (word 488),4)` THEN GHOST_INTRO_TAC `Ya:num` - `bignum_from_memory (word_add stackpointer (word 328),4)` THEN + `bignum_from_memory (word_add stackpointer (word 520),4)` THEN GHOST_INTRO_TAC `Za:num` - `bignum_from_memory (word_add stackpointer (word 360),4)` THEN + `bignum_from_memory (word_add stackpointer (word 552),4)` THEN GHOST_INTRO_TAC `Wa:num` - `bignum_from_memory(word_add stackpointer (word 392),4)` THEN + `bignum_from_memory(word_add stackpointer (word 584),4)` THEN REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN (*** Doubling to acc' = 2 * acc ***) @@ -10186,9 +11301,9 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove RULE_ASSUM_TAC(REWRITE_RULE[WORD_RULE `word_sub (word (4 * (i + 1))) (word 4) = word(4 * i)`]) THEN LOCAL_PDOUBLE_TAC 8 THEN MAP_EVERY ABBREV_TAC - [`X2a = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s8`; - `Y2a = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s8`; - `Z2a = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s8` + [`X2a = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s8`; + `Y2a = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s8`; + `Z2a = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s8` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (9--10) THEN @@ -10259,11 +11374,11 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove (*** Address the precomputed table separately ***) - FIRST_ASSUM(MP_TAC o CONJUNCT2 o + FIRST_ASSUM(MP_TAC o MATCH_MP EDWARDS25519DOUBLEBASE_TABLE_LEMMA) THEN - REWRITE_TAC[ARITH_RULE `pc + 0x60e9 + x = (pc + 0x60e9) + x`] THEN + REWRITE_TAC[ARITH_RULE `pc + 0x6fc9 + x = (pc + 0x6fc9) + x`] THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD] THEN - ABBREV_TAC `wpc:int64 = word(pc + 0x60e9)` THEN + ABBREV_TAC `wpc:int64 = word(pc + 0x6fc9)` THEN CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN CONV_TAC(LAND_CONV NUM_REDUCE_CONV) THEN GEN_REWRITE_TAC (LAND_CONV o ONCE_DEPTH_CONV) [WORD_ADD_0] THEN @@ -10315,16 +11430,17 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove REWRITE_TAC[bignum_of_wordlist; GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN REWRITE_TAC[d_25519; p_25519] THEN CONV_TAC INT_REDUCE_CONV; - REPEAT(FIRST_X_ASSUM(K ALL_TAC o check(free_in `wpc:int64` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check(free_in `word_add (wpc:int64)` o concl))) THEN CLARIFY_TAC] THEN (*** Optional negation of the table entry ***) X86_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (270--273) (243--277) THEN MAP_EVERY ABBREV_TAC - [`XPY = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s277`; - `YMX = read(memory :> bytes(word_add stackpointer (word 584),8 * 4)) s277`; - `KXY = read(memory :> bytes(word_add stackpointer (word 616),8 * 4)) s277`] + [`XPY = read(memory :> bytes(word_add stackpointer (word 392),8 * 4)) s277`; + `YMX = read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s277`; + `KXY = read(memory :> bytes(word_add stackpointer (word 456),8 * 4)) s277`] THEN SUBGOAL_THEN `edwards25519_epprojectivew @@ -10448,7 +11564,7 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove (*** Constant-time indexing in the fresh-point table ***) BIGNUM_LDIGITIZE_TAC "fab_" - `read(memory :> bytes(word_add stackpointer (word 648),8 * 128)) s289` THEN + `read(memory :> bytes(word_add stackpointer (word 616),8 * 128)) s289` THEN CLARIFY_TAC THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (290--601) THEN @@ -10457,14 +11573,14 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove `fab1 = read RBX s601`; `fab2 = read RCX s601`; `fab3 = read RDX s601`; - `fab4 = read (memory :> bytes64(word_add stackpointer (word 456))) s601`; - `fab5 = read (memory :> bytes64(word_add stackpointer (word 464))) s601`; - `fab6 = read (memory :> bytes64(word_add stackpointer (word 472))) s601`; - `fab7 = read (memory :> bytes64(word_add stackpointer (word 480))) s601`; - `fab8 = read (memory :> bytes64(word_add stackpointer (word 488))) s601`; - `fab9 = read (memory :> bytes64(word_add stackpointer (word 496))) s601`; - `fab10 = read (memory :> bytes64(word_add stackpointer (word 504))) s601`; - `fab11 = read (memory :> bytes64(word_add stackpointer (word 512))) s601`; + `fab4 = read (memory :> bytes64(word_add stackpointer (word 296))) s601`; + `fab5 = read (memory :> bytes64(word_add stackpointer (word 304))) s601`; + `fab6 = read (memory :> bytes64(word_add stackpointer (word 312))) s601`; + `fab7 = read (memory :> bytes64(word_add stackpointer (word 320))) s601`; + `fab8 = read (memory :> bytes64(word_add stackpointer (word 328))) s601`; + `fab9 = read (memory :> bytes64(word_add stackpointer (word 336))) s601`; + `fab10 = read (memory :> bytes64(word_add stackpointer (word 344))) s601`; + `fab11 = read (memory :> bytes64(word_add stackpointer (word 352))) s601`; `fab12 = read R8 s601`; `fab13 = read R9 s601`; `fab14 = read R10 s601`; @@ -10507,10 +11623,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove X86_ACCSTEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC [612;613;614;615;620;621;622;623] (602--627) THEN MAP_EVERY ABBREV_TAC - [`Xb = read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s627`; - `Yb = read(memory :> bytes(word_add stackpointer (word 456),8 * 4)) s627`; - `Zb = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s627`; - `Wb = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s627`] + [`Xb = read(memory :> bytes(word_add stackpointer (word 264),8 * 4)) s627`; + `Yb = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s627`; + `Zb = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s627`; + `Wb = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s627`] THEN SUBGOAL_THEN `!P. P IN group_carrier edwards25519_group /\ @@ -10564,9 +11680,9 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (628--631) THEN LOCAL_PDOUBLE_TAC 632 THEN MAP_EVERY ABBREV_TAC - [`X4a = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s632`; - `Y4a = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s632`; - `Z4a = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s632` + [`X4a = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s632`; + `Y4a = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s632`; + `Z4a = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s632` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (633--634) THEN @@ -10574,10 +11690,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (635--639) THEN LOCAL_PEPADD_TAC 640 THEN MAP_EVERY ABBREV_TAC - [`Xc = read(memory :> bytes(word_add stackpointer (word 424),8 * 4)) s640`; - `Yc = read(memory :> bytes(word_add stackpointer (word 456),8 * 4)) s640`; - `Zc = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s640`; - `Wc = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s640` + [`Xc = read(memory :> bytes(word_add stackpointer (word 264),8 * 4)) s640`; + `Yc = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s640`; + `Zc = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s640`; + `Wc = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s640` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (641--642) THEN @@ -10585,9 +11701,9 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (643--646) THEN LOCAL_PDOUBLE_TAC 647 THEN MAP_EVERY ABBREV_TAC - [`X8a = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s647`; - `Y8a = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s647`; - `Z8a = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s647` + [`X8a = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s647`; + `Y8a = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s647`; + `Z8a = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s647` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (648--649) THEN @@ -10595,10 +11711,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (650--653) THEN LOCAL_EPDOUBLE_TAC 654 THEN MAP_EVERY ABBREV_TAC - [`Xha = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s654`; - `Yha = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s654`; - `Zha = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s654`; - `Wha = read(memory :> bytes(word_add stackpointer (word 392),8 * 4)) s654` + [`Xha = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s654`; + `Yha = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s654`; + `Zha = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s654`; + `Wha = read(memory :> bytes(word_add stackpointer (word 584),8 * 4)) s654` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (655--656) THEN @@ -10606,10 +11722,10 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (657--661) THEN LOCAL_EPADD_TAC 662 THEN MAP_EVERY ABBREV_TAC - [`Xf = read(memory :> bytes(word_add stackpointer (word 296),8 * 4)) s662`; - `Yf = read(memory :> bytes(word_add stackpointer (word 328),8 * 4)) s662`; - `Zf = read(memory :> bytes(word_add stackpointer (word 360),8 * 4)) s662`; - `Wf = read(memory :> bytes(word_add stackpointer (word 392),8 * 4)) s662` + [`Xf = read(memory :> bytes(word_add stackpointer (word 488),8 * 4)) s662`; + `Yf = read(memory :> bytes(word_add stackpointer (word 520),8 * 4)) s662`; + `Zf = read(memory :> bytes(word_add stackpointer (word 552),8 * 4)) s662`; + `Wf = read(memory :> bytes(word_add stackpointer (word 584),8 * 4)) s662` ] THEN X86_STEPS_TAC EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (663--664) THEN @@ -10701,8 +11817,8 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_CORRECT = time prove let EDWARDS25519_SCALARMULDOUBLE_ALT_SUBROUTINE_CORRECT = time prove (`!res scalar point bscalar n xy m pc stackpointer returnaddress. ALL (nonoverlapping (word_sub stackpointer (word 1720),1720)) - [(word pc,0x63e9); (scalar,32); (point,64); (bscalar,32)] /\ - nonoverlapping (res,64) (word pc,0x63e9) /\ + [(word pc,0x72c9); (scalar,32); (point,64); (bscalar,32)] /\ + nonoverlapping (res,64) (word pc,0x72c9) /\ nonoverlapping (res,64) (word_sub stackpointer (word 1720),1728) ==> ensures x86 (\s. bytes_loaded s (word pc) @@ -10741,7 +11857,7 @@ let EDWARDS25519_SCALARMULDOUBLE_ALT_SUBROUTINE_CORRECT = time prove let windows_edwards25519_scalarmuldouble_alt_mc, windows_edwards25519_scalarmuldouble_alt_data = - define_coda_from_elf 0x60df + define_coda_from_elf 0x6fdf "windows_edwards25519_scalarmuldouble_alt_mc" "windows_edwards25519_scalarmuldouble_alt_data" "x86/curve25519/edwards25519_scalarmuldouble_alt.obj";; @@ -10749,8 +11865,8 @@ let windows_edwards25519_scalarmuldouble_alt_mc, let WINDOWS_EDWARDS25519_SCALARMULDOUBLE_ALT_SUBROUTINE_CORRECT = time prove (`!res scalar point bscalar n xy m pc stackpointer returnaddress. ALL (nonoverlapping (word_sub stackpointer (word 1744),1744)) - [(word pc,0x63ff); (scalar,32); (point,64); (bscalar,32)] /\ - nonoverlapping (res,64) (word pc,0x63ff) /\ + [(word pc,0x72df); (scalar,32); (point,64); (bscalar,32)] /\ + nonoverlapping (res,64) (word pc,0x72df) /\ nonoverlapping (res,64) (word_sub stackpointer (word 1744),1752) ==> ensures x86 (\s. bytes_loaded s (word pc) @@ -10800,7 +11916,7 @@ let WINDOWS_EDWARDS25519_SCALARMULDOUBLE_ALT_SUBROUTINE_CORRECT = time prove REWRITE_TAC(!simulation_precanon_thms) THEN ENSURES_INIT_TAC "s0" THEN X86_STEPS_TAC WINDOWS_EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC (1--7) THEN RULE_ASSUM_TAC(REWRITE_RULE - [ARITH_RULE `pc + 0x60df = (pc + 0x16) + 0x60c9`]) THEN + [ARITH_RULE `pc + 0x6fdf = (pc + 0x16) + 0x6fc9`]) THEN X86_SUBROUTINE_SIM_TAC (windows_edwards25519_scalarmuldouble_alt_mc, WINDOWS_EDWARDS25519_SCALARMULDOUBLE_ALT_EXEC, diff --git a/x86_att/curve25519/edwards25519_scalarmulbase.S b/x86_att/curve25519/edwards25519_scalarmulbase.S index a024c9da..c44e3172 100644 --- a/x86_att/curve25519/edwards25519_scalarmulbase.S +++ b/x86_att/curve25519/edwards25519_scalarmulbase.S @@ -38,23 +38,22 @@ #define xpy_2 (2*NUMSIZE)(%rsp) #define kxy_2 (3*NUMSIZE)(%rsp) -#define acc (4*NUMSIZE)(%rsp) -#define x_1 (4*NUMSIZE)(%rsp) -#define y_1 (5*NUMSIZE)(%rsp) -#define z_1 (6*NUMSIZE)(%rsp) -#define w_1 (7*NUMSIZE)(%rsp) -#define x_3 (4*NUMSIZE)(%rsp) -#define y_3 (5*NUMSIZE)(%rsp) -#define z_3 (6*NUMSIZE)(%rsp) -#define w_3 (7*NUMSIZE)(%rsp) - -#define tmpspace (8*NUMSIZE)(%rsp) -#define t0 (8*NUMSIZE)(%rsp) -#define t1 (9*NUMSIZE)(%rsp) -#define t2 (10*NUMSIZE)(%rsp) -#define t3 (11*NUMSIZE)(%rsp) -#define t4 (12*NUMSIZE)(%rsp) -#define t5 (13*NUMSIZE)(%rsp) +#define t0 (4*NUMSIZE)(%rsp) +#define t1 (5*NUMSIZE)(%rsp) +#define t2 (6*NUMSIZE)(%rsp) +#define t3 (7*NUMSIZE)(%rsp) +#define t4 (8*NUMSIZE)(%rsp) +#define t5 (9*NUMSIZE)(%rsp) + +#define acc (10*NUMSIZE)(%rsp) +#define x_1 (10*NUMSIZE)(%rsp) +#define y_1 (11*NUMSIZE)(%rsp) +#define z_1 (12*NUMSIZE)(%rsp) +#define w_1 (13*NUMSIZE)(%rsp) +#define x_3 (10*NUMSIZE)(%rsp) +#define y_3 (11*NUMSIZE)(%rsp) +#define z_3 (12*NUMSIZE)(%rsp) +#define w_3 (13*NUMSIZE)(%rsp) // Stable homes for the input result pointer, and other variables @@ -73,6 +72,15 @@ #define NSPACE (15*NUMSIZE+8) +// Syntactic variants to make x86_att version simpler to generate + +#define SCALAR 0 +#define TABENT (1*NUMSIZE) +#define ACC (10*NUMSIZE) +#define X3 (10*NUMSIZE) +#define Z3 (12*NUMSIZE) +#define W3 (13*NUMSIZE) + // Macro wrapping up the basic field multiplication, only trivially // different from a pure function call to bignum_mul_p25519. @@ -337,12 +345,12 @@ S2N_BN_SYMBOL(edwards25519_scalarmulbase): pushq %rsi movq %rcx, %rdi movq %rdx, %rsi - callq edwards25519_scalarmulbase_curve25519_x25519base_standard + callq edwards25519_scalarmulbase_standard popq %rsi popq %rdi ret -edwards25519_scalarmulbase_curve25519_x25519base_standard: +edwards25519_scalarmulbase_standard: #endif // Save registers, make room for temps, preserve input arguments. @@ -413,11 +421,11 @@ edwards25519_scalarmulbase_curve25519_x25519base_standard: // And before we store the scalar, test and reset bit 251 to // initialize the main loop just below. - movq %r8, (%rsp) - movq %r9, 8(%rsp) - movq %r10, 16(%rsp) + movq %r8, SCALAR(%rsp) + movq %r9, SCALAR+8(%rsp) + movq %r10, SCALAR+16(%rsp) btr $59, %r11 - movq %r11, 24(%rsp) + movq %r11, SCALAR+24(%rsp) // The main part of the computation is in extended-projective coordinates // (X,Y,Z,T), representing an affine point on the edwards25519 curve @@ -428,75 +436,75 @@ edwards25519_scalarmulbase_curve25519_x25519base_standard: // Initialize accumulator "acc" to either 0 or 2^251 * B depending on // bit 251 of the (reduced) scalar. That leaves bits 0..250 to handle. - leaq edwards25519_scalarmulbase_edwards25519_0g(%rip), %r10 - leaq edwards25519_scalarmulbase_edwards25519_251g(%rip), %r11 + leaq edwards25519_scalarmulbase_0g(%rip), %r10 + leaq edwards25519_scalarmulbase_251g(%rip), %r11 movq (%r10), %rax movq (%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*16(%rsp) + movq %rax, ACC(%rsp) movq 8*1(%r10), %rax movq 8*1(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*17(%rsp) + movq %rax, ACC+8(%rsp) movq 8*2(%r10), %rax movq 8*2(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*18(%rsp) + movq %rax, ACC+16(%rsp) movq 8*3(%r10), %rax movq 8*3(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*19(%rsp) + movq %rax, ACC+24(%rsp) movq 8*4(%r10), %rax movq 8*4(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*20(%rsp) + movq %rax, ACC+32(%rsp) movq 8*5(%r10), %rax movq 8*5(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*21(%rsp) + movq %rax, ACC+40(%rsp) movq 8*6(%r10), %rax movq 8*6(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*22(%rsp) + movq %rax, ACC+48(%rsp) movq 8*7(%r10), %rax movq 8*7(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*23(%rsp) + movq %rax, ACC+56(%rsp) movl $1, %eax - movq %rax, 8*24(%rsp) + movq %rax, ACC+64(%rsp) movl $0, %eax - movq %rax, 8*25(%rsp) - movq %rax, 8*26(%rsp) - movq %rax, 8*27(%rsp) + movq %rax, ACC+72(%rsp) + movq %rax, ACC+80(%rsp) + movq %rax, ACC+88(%rsp) movq 8*8(%r10), %rax movq 8*8(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*28(%rsp) + movq %rax, ACC+96(%rsp) movq 8*9(%r10), %rax movq 8*9(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*29(%rsp) + movq %rax, ACC+104(%rsp) movq 8*10(%r10), %rax movq 8*10(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*30(%rsp) + movq %rax, ACC+112(%rsp) movq 8*11(%r10), %rax movq 8*11(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*31(%rsp) + movq %rax, ACC+120(%rsp) // The counter "i" tracks the bit position for which the scalar has // already been absorbed, starting at 0 and going up in chunks of 4. @@ -512,7 +520,7 @@ edwards25519_scalarmulbase_curve25519_x25519base_standard: // end because we made sure bit 251 is clear in the reduced scalar. movq $0, i - leaq edwards25519_scalarmulbase_edwards25519_gtable(%rip), %rax + leaq edwards25519_scalarmulbase_gtable(%rip), %rax movq %rax, tab movq $0, bias @@ -804,26 +812,26 @@ edwards25519_scalarmulbase_scalarloop: movq %rax, %rsi cmovnzq %r8, %rsi cmovnzq %rax, %r8 - movq %rsi, 32(%rsp) - movq %r8, 64(%rsp) + movq %rsi, TABENT(%rsp) + movq %r8, TABENT+32(%rsp) movq %rbx, %rsi cmovnzq %r9, %rsi cmovnzq %rbx, %r9 - movq %rsi, 40(%rsp) - movq %r9, 72(%rsp) + movq %rsi, TABENT+8(%rsp) + movq %r9, TABENT+40(%rsp) movq %rcx, %rsi cmovnzq %r10, %rsi cmovnzq %rcx, %r10 - movq %rsi, 48(%rsp) - movq %r10, 80(%rsp) + movq %rsi, TABENT+16(%rsp) + movq %r10, TABENT+48(%rsp) movq %rdx, %rsi cmovnzq %r11, %rsi cmovnzq %rdx, %r11 - movq %rsi, 56(%rsp) - movq %r11, 88(%rsp) + movq %rsi, TABENT+24(%rsp) + movq %r11, TABENT+56(%rsp) movq $-19, %rax movq $-1, %rbx @@ -844,10 +852,10 @@ edwards25519_scalarmulbase_scalarloop: cmovzq %r13, %rbx cmovzq %r14, %rcx cmovzq %r15, %rdx - movq %rax, 96(%rsp) - movq %rbx, 104(%rsp) - movq %rcx, 112(%rsp) - movq %rdx, 120(%rsp) + movq %rax, TABENT+64(%rsp) + movq %rbx, TABENT+72(%rsp) + movq %rcx, TABENT+80(%rsp) + movq %rdx, TABENT+88(%rsp) // Extended-projective and precomputed mixed addition. // This is effectively the same as calling the standalone @@ -884,10 +892,10 @@ edwards25519_scalarmulbase_scalarloop: // point on we don't need any normalization of the coordinates // except for making sure that they fit in 4 digits. - movq 128(%rsp), %r8 - movq 136(%rsp), %r9 - movq 144(%rsp), %r10 - movq 152(%rsp), %r11 + movq X3(%rsp), %r8 + movq X3+8(%rsp), %r9 + movq X3+16(%rsp), %r10 + movq X3+24(%rsp), %r11 movq $0xffffffffffffffda, %r12 subq %r8, %r12 movq $0xffffffffffffffff, %r13 @@ -896,424 +904,1377 @@ edwards25519_scalarmulbase_scalarloop: sbbq %r10, %r14 movq $0xffffffffffffffff, %r15 sbbq %r11, %r15 - movq 24(%rsp), %rax + movq SCALAR+24(%rsp), %rax btq $63, %rax cmovcq %r12, %r8 cmovcq %r13, %r9 cmovcq %r14, %r10 cmovcq %r15, %r11 - movq %r8, 128(%rsp) - movq %r9, 136(%rsp) - movq %r10, 144(%rsp) - movq %r11, 152(%rsp) + movq %r8, X3(%rsp) + movq %r9, X3+8(%rsp) + movq %r10, X3+16(%rsp) + movq %r11, X3+24(%rsp) // Now we need to map out of the extended-projective representation // (X,Y,Z,W) back to the affine form (x,y) = (X/Z,Y/Z). This means // first calling the modular inverse to get w_3 = 1/z_3. - movq $4, %rdi - leaq 224(%rsp), %rsi - leaq 192(%rsp), %rdx - leaq edwards25519_scalarmulbase_p_25519(%rip), %rcx - leaq 256(%rsp), %r8 - -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "x86/generic/bignum_modinv.S". Note -// that the stack it uses for its own temporaries is 80 bytes so it -// only overwrites local variables that are no longer needed. - - movq %rsi, 0x40(%rsp) - movq %r8, 0x38(%rsp) - movq %rcx, 0x48(%rsp) - leaq (%r8,%rdi,8), %r10 - movq %r10, 0x30(%rsp) - leaq (%r10,%rdi,8), %r15 - xorq %r11, %r11 - xorq %r9, %r9 -edwards25519_scalarmulbase_copyloop: - movq (%rdx,%r9,8), %rax - movq (%rcx,%r9,8), %rbx - movq %rax, (%r10,%r9,8) - movq %rbx, (%r15,%r9,8) - movq %rbx, (%r8,%r9,8) - movq %r11, (%rsi,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmulbase_copyloop - movq (%r8), %rax - movq %rax, %rbx - decq %rbx - movq %rbx, (%r8) - movq %rax, %rbp - movq %rax, %r12 - shlq $0x2, %rbp - subq %rbp, %r12 - xorq $0x2, %r12 - movq %r12, %rbp - imulq %rax, %rbp - movl $0x2, %eax - addq %rbp, %rax - addq $0x1, %rbp - imulq %rax, %r12 - imulq %rbp, %rbp - movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - imulq %rbp, %rbp - movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - imulq %rbp, %rbp + leaq W3(%rsp), %rdi + leaq Z3(%rsp), %rsi + +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "x86/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 208 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, x_3, y_3, +// z_3 and w_3. + + movq %rdi, 0xc0(%rsp) + xorl %eax, %eax + leaq -0x13(%rax), %rcx + notq %rax + movq %rcx, (%rsp) + movq %rax, 0x8(%rsp) + movq %rax, 0x10(%rsp) + btr $0x3f, %rax + movq %rax, 0x18(%rsp) + movq (%rsi), %rdx + movq 0x8(%rsi), %rcx + movq 0x10(%rsi), %r8 + movq 0x18(%rsi), %r9 movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - movq %r12, 0x28(%rsp) - movq %rdi, %rax - shlq $0x7, %rax - movq %rax, 0x20(%rsp) -edwards25519_scalarmulbase_outerloop: - movq 0x20(%rsp), %r13 - addq $0x3f, %r13 - shrq $0x6, %r13 - cmpq %rdi, %r13 - cmovaeq %rdi, %r13 - xorq %r12, %r12 - xorq %r14, %r14 - xorq %rbp, %rbp - xorq %rsi, %rsi - xorq %r11, %r11 - movq 0x30(%rsp), %r8 - leaq (%r8,%rdi,8), %r15 - xorq %r9, %r9 -edwards25519_scalarmulbase_toploop: - movq (%r8,%r9,8), %rbx - movq (%r15,%r9,8), %rcx - movq %r11, %r10 - andq %r12, %r10 - andq %rbp, %r11 - movq %rbx, %rax - orq %rcx, %rax - negq %rax - cmovbq %r10, %r14 - cmovbq %r11, %rsi - cmovbq %rbx, %r12 - cmovbq %rcx, %rbp - sbbq %r11, %r11 - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmulbase_toploop - movq %r12, %rax - orq %rbp, %rax - bsrq %rax, %rcx - xorq $0x3f, %rcx - shldq %cl, %r14, %r12 - shldq %cl, %rsi, %rbp - movq (%r8), %rax - movq %rax, %r14 - movq (%r15), %rax - movq %rax, %rsi - movl $0x1, %r10d - movl $0x0, %r11d - movl $0x0, %ecx - movl $0x1, %edx - movl $0x3a, %r9d - movq %rdi, 0x8(%rsp) - movq %r13, 0x10(%rsp) - movq %r8, (%rsp) - movq %r15, 0x18(%rsp) -edwards25519_scalarmulbase_innerloop: + xorl %r10d, %r10d + bts $0x3f, %r9 + adcq %r10, %rax + imulq $0x13, %rax, %rax + addq %rax, %rdx + adcq %r10, %rcx + adcq %r10, %r8 + adcq %r10, %r9 + movl $0x13, %eax + cmovbq %r10, %rax + subq %rax, %rdx + sbbq %r10, %rcx + sbbq %r10, %r8 + sbbq %r10, %r9 + btr $0x3f, %r9 + movq %rdx, 0x20(%rsp) + movq %rcx, 0x28(%rsp) + movq %r8, 0x30(%rsp) + movq %r9, 0x38(%rsp) xorl %eax, %eax + movq %rax, 0x40(%rsp) + movq %rax, 0x48(%rsp) + movq %rax, 0x50(%rsp) + movq %rax, 0x58(%rsp) + movabsq $0xa0f99e2375022099, %rax + movq %rax, 0x60(%rsp) + movabsq $0xa8c68f3f1d132595, %rax + movq %rax, 0x68(%rsp) + movabsq $0x6c6c893805ac5242, %rax + movq %rax, 0x70(%rsp) + movabsq $0x276508b241770615, %rax + movq %rax, 0x78(%rsp) + movq $0xa, 0x90(%rsp) + movq $0x1, 0x98(%rsp) + jmp edwards25519_scalarmulbase_midloop +edwards25519_scalarmulbase_inverseloop: + movq %r8, %r9 + sarq $0x3f, %r9 + xorq %r9, %r8 + subq %r9, %r8 + movq %r10, %r11 + sarq $0x3f, %r11 + xorq %r11, %r10 + subq %r11, %r10 + movq %r12, %r13 + sarq $0x3f, %r13 + xorq %r13, %r12 + subq %r13, %r12 + movq %r14, %r15 + sarq $0x3f, %r15 + xorq %r15, %r14 + subq %r15, %r14 + movq %r8, %rax + andq %r9, %rax + movq %r10, %rdi + andq %r11, %rdi + addq %rax, %rdi + movq %rdi, 0x80(%rsp) + movq %r12, %rax + andq %r13, %rax + movq %r14, %rsi + andq %r15, %rsi + addq %rax, %rsi + movq %rsi, 0x88(%rsp) xorl %ebx, %ebx - xorq %r8, %r8 - xorq %r15, %r15 - btq $0x0, %r14 - cmovbq %rbp, %rax - cmovbq %rsi, %rbx - cmovbq %rcx, %r8 - cmovbq %rdx, %r15 - movq %r14, %r13 - subq %rbx, %r14 - subq %r13, %rbx - movq %r12, %rdi - subq %rax, %rdi - cmovbq %r12, %rbp - leaq -0x1(%rdi), %r12 - cmovbq %rbx, %r14 - cmovbq %r13, %rsi - notq %r12 - cmovbq %r10, %rcx - cmovbq %r11, %rdx - cmovaeq %rdi, %r12 - shrq $1, %r14 - addq %r8, %r10 - addq %r15, %r11 - shrq $1, %r12 - addq %rcx, %rcx - addq %rdx, %rdx - decq %r9 - jne edwards25519_scalarmulbase_innerloop - movq 0x8(%rsp), %rdi - movq 0x10(%rsp), %r13 - movq (%rsp), %r8 - movq 0x18(%rsp), %r15 - movq %r10, (%rsp) - movq %r11, 0x8(%rsp) - movq %rcx, 0x10(%rsp) - movq %rdx, 0x18(%rsp) - movq 0x38(%rsp), %r8 - movq 0x40(%rsp), %r15 - xorq %r14, %r14 - xorq %rsi, %rsi - xorq %r10, %r10 - xorq %r11, %r11 - xorq %r9, %r9 -edwards25519_scalarmulbase_congloop: - movq (%r8,%r9,8), %rcx movq (%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq $0x0, %rdx - movq %rdx, %r12 - movq 0x10(%rsp), %rax - mulq %rcx + xorq %r9, %rax + mulq %r8 + addq %rax, %rdi + adcq %rdx, %rbx + movq 0x20(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rdi + adcq %rdx, %rbx + xorl %ebp, %ebp + movq (%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rsi + adcq %rdx, %rbp + movq 0x20(%rsp), %rax + xorq %r15, %rax + mulq %r14 addq %rax, %rsi - adcq $0x0, %rdx - movq %rdx, %rbp - movq (%r15,%r9,8), %rcx + adcq %rdx, %rbp + xorl %ecx, %ecx movq 0x8(%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq %rdx, %r12 - shrdq $0x3a, %r14, %r10 - movq %r10, (%r8,%r9,8) - movq %r14, %r10 - movq %r12, %r14 + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x28(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + shrdq $0x3b, %rbx, %rdi + movq %rdi, (%rsp) + xorl %edi, %edi + movq 0x8(%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rbp + adcq %rdx, %rdi + movq 0x28(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rdi + shrdq $0x3b, %rbp, %rsi + movq %rsi, 0x20(%rsp) + xorl %esi, %esi + movq 0x10(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rsi + movq 0x30(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rcx + adcq %rdx, %rsi + shrdq $0x3b, %rcx, %rbx + movq %rbx, 0x8(%rsp) + xorl %ebx, %ebx + movq 0x10(%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rdi + adcq %rdx, %rbx + movq 0x30(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rdi + adcq %rdx, %rbx + shrdq $0x3b, %rdi, %rbp + movq %rbp, 0x28(%rsp) movq 0x18(%rsp), %rax - mulq %rcx + xorq %r9, %rax + movq %rax, %rbp + sarq $0x3f, %rbp + andq %r8, %rbp + negq %rbp + mulq %r8 + addq %rax, %rsi + adcq %rdx, %rbp + movq 0x38(%rsp), %rax + xorq %r11, %rax + movq %rax, %rdx + sarq $0x3f, %rdx + andq %r10, %rdx + subq %rdx, %rbp + mulq %r10 addq %rax, %rsi adcq %rdx, %rbp - shrdq $0x3a, %rsi, %r11 - movq %r11, (%r15,%r9,8) - movq %rsi, %r11 - movq %rbp, %rsi - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmulbase_congloop - shldq $0x6, %r10, %r14 - shldq $0x6, %r11, %rsi - movq 0x48(%rsp), %r15 - movq (%r8), %rbx - movq 0x28(%rsp), %r12 - imulq %rbx, %r12 - movq (%r15), %rax + shrdq $0x3b, %rsi, %rcx + movq %rcx, 0x10(%rsp) + shrdq $0x3b, %rbp, %rsi + movq 0x18(%rsp), %rax + movq %rsi, 0x18(%rsp) + xorq %r13, %rax + movq %rax, %rsi + sarq $0x3f, %rsi + andq %r12, %rsi + negq %rsi + mulq %r12 + addq %rax, %rbx + adcq %rdx, %rsi + movq 0x38(%rsp), %rax + xorq %r15, %rax + movq %rax, %rdx + sarq $0x3f, %rdx + andq %r14, %rdx + subq %rdx, %rsi + mulq %r14 + addq %rax, %rbx + adcq %rdx, %rsi + shrdq $0x3b, %rbx, %rdi + movq %rdi, 0x30(%rsp) + shrdq $0x3b, %rsi, %rbx + movq %rbx, 0x38(%rsp) + movq 0x80(%rsp), %rbx + movq 0x88(%rsp), %rbp + xorl %ecx, %ecx + movq 0x40(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x60(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + xorl %esi, %esi + movq 0x40(%rsp), %rax + xorq %r13, %rax mulq %r12 - addq %rbx, %rax - movq %rdx, %r10 - movl $0x1, %r9d - movq %rdi, %rcx - decq %rcx - je edwards25519_scalarmulbase_wmontend -edwards25519_scalarmulbase_wmontloop: - adcq (%r8,%r9,8), %r10 - sbbq %rbx, %rbx - movq (%r15,%r9,8), %rax + movq %rbx, 0x40(%rsp) + addq %rax, %rbp + adcq %rdx, %rsi + movq 0x60(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rsi + movq %rbp, 0x60(%rsp) + xorl %ebx, %ebx + movq 0x48(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rbx + movq 0x68(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rcx + adcq %rdx, %rbx + xorl %ebp, %ebp + movq 0x48(%rsp), %rax + xorq %r13, %rax mulq %r12 - subq %rbx, %rdx - addq %r10, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %rdx, %r10 - incq %r9 - decq %rcx - jne edwards25519_scalarmulbase_wmontloop -edwards25519_scalarmulbase_wmontend: - adcq %r14, %r10 - movq %r10, -0x8(%r8,%rdi,8) - sbbq %r10, %r10 - negq %r10 - movq %rdi, %rcx - xorq %r9, %r9 -edwards25519_scalarmulbase_wcmploop: - movq (%r8,%r9,8), %rax - sbbq (%r15,%r9,8), %rax - incq %r9 - decq %rcx - jne edwards25519_scalarmulbase_wcmploop - sbbq $0x0, %r10 - sbbq %r10, %r10 - notq %r10 - xorq %rcx, %rcx - xorq %r9, %r9 -edwards25519_scalarmulbase_wcorrloop: - movq (%r8,%r9,8), %rax - movq (%r15,%r9,8), %rbx - andq %r10, %rbx - negq %rcx - sbbq %rbx, %rax - sbbq %rcx, %rcx - movq %rax, (%r8,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmulbase_wcorrloop + movq %rcx, 0x48(%rsp) + addq %rax, %rsi + adcq %rdx, %rbp + movq 0x68(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rsi + adcq %rdx, %rbp + movq %rsi, 0x68(%rsp) + xorl %ecx, %ecx + movq 0x50(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x70(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + xorl %esi, %esi + movq 0x50(%rsp), %rax + xorq %r13, %rax + mulq %r12 + movq %rbx, 0x50(%rsp) + addq %rax, %rbp + adcq %rdx, %rsi + movq 0x70(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rsi + movq %rbp, 0x70(%rsp) + movq 0x58(%rsp), %rax + xorq %r9, %rax + movq %r9, %rbx + andq %r8, %rbx + negq %rbx + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rbx + movq 0x78(%rsp), %rax + xorq %r11, %rax + movq %r11, %rdx + andq %r10, %rdx + subq %rdx, %rbx + mulq %r10 + addq %rax, %rcx + adcq %rbx, %rdx + movq %rdx, %rbx + shldq $0x1, %rcx, %rdx + sarq $0x3f, %rbx + addq %rbx, %rdx + movl $0x13, %eax + imulq %rdx movq 0x40(%rsp), %r8 - movq (%r8), %rbx - movq 0x28(%rsp), %rbp - imulq %rbx, %rbp - movq (%r15), %rax - mulq %rbp - addq %rbx, %rax - movq %rdx, %r11 - movl $0x1, %r9d - movq %rdi, %rcx - decq %rcx - je edwards25519_scalarmulbase_zmontend -edwards25519_scalarmulbase_zmontloop: - adcq (%r8,%r9,8), %r11 - sbbq %rbx, %rbx - movq (%r15,%r9,8), %rax - mulq %rbp - subq %rbx, %rdx - addq %r11, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %rdx, %r11 - incq %r9 - decq %rcx - jne edwards25519_scalarmulbase_zmontloop -edwards25519_scalarmulbase_zmontend: - adcq %rsi, %r11 - movq %r11, -0x8(%r8,%rdi,8) - sbbq %r11, %r11 - negq %r11 - movq %rdi, %rcx - xorq %r9, %r9 -edwards25519_scalarmulbase_zcmploop: - movq (%r8,%r9,8), %rax - sbbq (%r15,%r9,8), %rax - incq %r9 - decq %rcx - jne edwards25519_scalarmulbase_zcmploop - sbbq $0x0, %r11 - sbbq %r11, %r11 - notq %r11 - xorq %rcx, %rcx - xorq %r9, %r9 -edwards25519_scalarmulbase_zcorrloop: - movq (%r8,%r9,8), %rax - movq (%r15,%r9,8), %rbx - andq %r11, %rbx + addq %rax, %r8 + movq %r8, 0x40(%rsp) + movq 0x48(%rsp), %r8 + adcq %rdx, %r8 + movq %r8, 0x48(%rsp) + movq 0x50(%rsp), %r8 + adcq %rbx, %r8 + movq %r8, 0x50(%rsp) + adcq %rbx, %rcx + shlq $0x3f, %rax + addq %rax, %rcx + movq 0x58(%rsp), %rax + movq %rcx, 0x58(%rsp) + xorq %r13, %rax + movq %r13, %rcx + andq %r12, %rcx negq %rcx - sbbq %rbx, %rax - sbbq %rcx, %rcx - movq %rax, (%r8,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmulbase_zcorrloop - movq 0x30(%rsp), %r8 - leaq (%r8,%rdi,8), %r15 - xorq %r9, %r9 - xorq %r12, %r12 - xorq %r14, %r14 - xorq %rbp, %rbp - xorq %rsi, %rsi -edwards25519_scalarmulbase_crossloop: - movq (%r8,%r9,8), %rcx - movq (%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq $0x0, %rdx - movq %rdx, %r10 - movq 0x10(%rsp), %rax - mulq %rcx + mulq %r12 addq %rax, %rsi - adcq $0x0, %rdx - movq %rdx, %r11 - movq (%r15,%r9,8), %rcx - movq 0x8(%rsp), %rax - mulq %rcx - subq %r12, %rdx - subq %rax, %r14 - sbbq %rdx, %r10 - sbbq %r12, %r12 - movq %r14, (%r8,%r9,8) - movq %r10, %r14 - movq 0x18(%rsp), %rax - mulq %rcx - subq %rbp, %rdx + adcq %rdx, %rcx + movq 0x78(%rsp), %rax + xorq %r15, %rax + movq %r15, %rdx + andq %r14, %rdx + subq %rdx, %rcx + mulq %r14 + addq %rax, %rsi + adcq %rcx, %rdx + movq %rdx, %rcx + shldq $0x1, %rsi, %rdx + sarq $0x3f, %rcx + movl $0x13, %eax + addq %rcx, %rdx + imulq %rdx + movq 0x60(%rsp), %r8 + addq %rax, %r8 + movq %r8, 0x60(%rsp) + movq 0x68(%rsp), %r8 + adcq %rdx, %r8 + movq %r8, 0x68(%rsp) + movq 0x70(%rsp), %r8 + adcq %rcx, %r8 + movq %r8, 0x70(%rsp) + adcq %rcx, %rsi + shlq $0x3f, %rax + addq %rax, %rsi + movq %rsi, 0x78(%rsp) +edwards25519_scalarmulbase_midloop: + movq 0x98(%rsp), %rsi + movq (%rsp), %rdx + movq 0x20(%rsp), %rcx + movq %rdx, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq $0xfffffffffffffffe, %rax + xorl %ebp, %ebp + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 subq %rax, %rsi - sbbq %rdx, %r11 - sbbq %rbp, %rbp - movq %rsi, (%r15,%r9,8) - movq %r11, %rsi - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmulbase_crossloop - xorq %r9, %r9 - movq %r12, %r10 - movq %rbp, %r11 - xorq %r12, %r14 - xorq %rbp, %rsi -edwards25519_scalarmulbase_optnegloop: - movq (%r8,%r9,8), %rax - xorq %r12, %rax - negq %r10 - adcq $0x0, %rax - sbbq %r10, %r10 - movq %rax, (%r8,%r9,8) - movq (%r15,%r9,8), %rax - xorq %rbp, %rax - negq %r11 - adcq $0x0, %rax - sbbq %r11, %r11 - movq %rax, (%r15,%r9,8) - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmulbase_optnegloop - subq %r10, %r14 - subq %r11, %rsi - movq %r13, %r9 -edwards25519_scalarmulbase_shiftloop: - movq -0x8(%r8,%r9,8), %rax - movq %rax, %r10 - shrdq $0x3a, %r14, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %r10, %r14 - movq -0x8(%r15,%r9,8), %rax - movq %rax, %r11 - shrdq $0x3a, %rsi, %rax - movq %rax, -0x8(%r15,%r9,8) - movq %r11, %rsi - decq %r9 - jne edwards25519_scalarmulbase_shiftloop - notq %rbp - movq 0x48(%rsp), %rcx - movq 0x38(%rsp), %r8 - movq 0x40(%rsp), %r15 - movq %r12, %r10 - movq %rbp, %r11 - xorq %r9, %r9 -edwards25519_scalarmulbase_fliploop: - movq %rbp, %rdx - movq (%rcx,%r9,8), %rax - andq %rax, %rdx - andq %r12, %rax - movq (%r8,%r9,8), %rbx - xorq %r12, %rbx - negq %r10 - adcq %rbx, %rax - sbbq %r10, %r10 - movq %rax, (%r8,%r9,8) - movq (%r15,%r9,8), %rbx - xorq %rbp, %rbx - negq %r11 - adcq %rbx, %rdx - sbbq %r11, %r11 - movq %rdx, (%r15,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmulbase_fliploop - subq $0x3a, 0x20(%rsp) - ja edwards25519_scalarmulbase_outerloop + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %rdx + leaq (%rcx,%rax), %rdi + shlq $0x16, %rdx + shlq $0x16, %rdi + sarq $0x2b, %rdx + sarq $0x2b, %rdi + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %rbx + leaq (%rcx,%rax), %rcx + sarq $0x2a, %rbx + sarq $0x2a, %rcx + movq %rdx, 0xa0(%rsp) + movq %rbx, 0xa8(%rsp) + movq %rdi, 0xb0(%rsp) + movq %rcx, 0xb8(%rsp) + movq (%rsp), %r12 + imulq %r12, %rdi + imulq %rdx, %r12 + movq 0x20(%rsp), %r13 + imulq %r13, %rbx + imulq %rcx, %r13 + addq %rbx, %r12 + addq %rdi, %r13 + sarq $0x14, %r12 + sarq $0x14, %r13 + movq %r12, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + movq %r13, %rcx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq $0xfffffffffffffffe, %rax + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %r8 + leaq (%rcx,%rax), %r10 + shlq $0x16, %r8 + shlq $0x16, %r10 + sarq $0x2b, %r8 + sarq $0x2b, %r10 + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %r15 + leaq (%rcx,%rax), %r11 + sarq $0x2a, %r15 + sarq $0x2a, %r11 + movq %r13, %rbx + movq %r12, %rcx + imulq %r8, %r12 + imulq %r15, %rbx + addq %rbx, %r12 + imulq %r11, %r13 + imulq %r10, %rcx + addq %rcx, %r13 + sarq $0x14, %r12 + sarq $0x14, %r13 + movq %r12, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + movq %r13, %rcx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq 0xa0(%rsp), %rax + imulq %r8, %rax + movq 0xb0(%rsp), %rdx + imulq %r15, %rdx + imulq 0xa8(%rsp), %r8 + imulq 0xb8(%rsp), %r15 + addq %r8, %r15 + leaq (%rax,%rdx), %r9 + movq 0xa0(%rsp), %rax + imulq %r10, %rax + movq 0xb0(%rsp), %rdx + imulq %r11, %rdx + imulq 0xa8(%rsp), %r10 + imulq 0xb8(%rsp), %r11 + addq %r10, %r11 + leaq (%rax,%rdx), %r13 + movq $0xfffffffffffffffe, %rax + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %r8 + leaq (%rcx,%rax), %r12 + shlq $0x15, %r8 + shlq $0x15, %r12 + sarq $0x2b, %r8 + sarq $0x2b, %r12 + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %r10 + leaq (%rcx,%rax), %r14 + sarq $0x2b, %r10 + sarq $0x2b, %r14 + movq %r9, %rax + imulq %r8, %rax + movq %r13, %rdx + imulq %r10, %rdx + imulq %r15, %r8 + imulq %r11, %r10 + addq %r8, %r10 + leaq (%rax,%rdx), %r8 + movq %r9, %rax + imulq %r12, %rax + movq %r13, %rdx + imulq %r14, %rdx + imulq %r15, %r12 + imulq %r11, %r14 + addq %r12, %r14 + leaq (%rax,%rdx), %r12 + movq %rsi, 0x98(%rsp) + decq 0x90(%rsp) + jne edwards25519_scalarmulbase_inverseloop + movq (%rsp), %rax + movq 0x20(%rsp), %rcx + imulq %r8, %rax + imulq %r10, %rcx + addq %rcx, %rax + sarq $0x3f, %rax + movq %r8, %r9 + sarq $0x3f, %r9 + xorq %r9, %r8 + subq %r9, %r8 + xorq %rax, %r9 + movq %r10, %r11 + sarq $0x3f, %r11 + xorq %r11, %r10 + subq %r11, %r10 + xorq %rax, %r11 + movq %r12, %r13 + sarq $0x3f, %r13 + xorq %r13, %r12 + subq %r13, %r12 + xorq %rax, %r13 + movq %r14, %r15 + sarq $0x3f, %r15 + xorq %r15, %r14 + subq %r15, %r14 + xorq %rax, %r15 + movq %r8, %rax + andq %r9, %rax + movq %r10, %r12 + andq %r11, %r12 + addq %rax, %r12 + xorl %r13d, %r13d + movq 0x40(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r12 + adcq %rdx, %r13 + movq 0x60(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r12 + adcq %rdx, %r13 + xorl %r14d, %r14d + movq 0x48(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r13 + adcq %rdx, %r14 + movq 0x68(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r13 + adcq %rdx, %r14 + xorl %r15d, %r15d + movq 0x50(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r14 + adcq %rdx, %r15 + movq 0x70(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r14 + adcq %rdx, %r15 + movq 0x58(%rsp), %rax + xorq %r9, %rax + andq %r8, %r9 + negq %r9 + mulq %r8 + addq %rax, %r15 + adcq %rdx, %r9 + movq 0x78(%rsp), %rax + xorq %r11, %rax + movq %r11, %rdx + andq %r10, %rdx + subq %rdx, %r9 + mulq %r10 + addq %rax, %r15 + adcq %rdx, %r9 + movq %r9, %rax + shldq $0x1, %r15, %rax + sarq $0x3f, %r9 + movl $0x13, %ebx + leaq 0x1(%rax,%r9,1), %rax + imulq %rbx + xorl %ebp, %ebp + addq %rax, %r12 + adcq %rdx, %r13 + adcq %r9, %r14 + adcq %r9, %r15 + shlq $0x3f, %rax + addq %rax, %r15 + cmovns %rbp, %rbx + subq %rbx, %r12 + sbbq %rbp, %r13 + sbbq %rbp, %r14 + sbbq %rbp, %r15 + btr $0x3f, %r15 + movq 0xc0(%rsp), %rdi + movq %r12, (%rdi) + movq %r13, 0x8(%rdi) + movq %r14, 0x10(%rdi) + movq %r15, 0x18(%rdi) // The final result is x = X * inv(Z), y = Y * inv(Z). // These are the only operations in the whole computation that @@ -1344,18 +2305,10 @@ edwards25519_scalarmulbase_fliploop: // .section .rodata // **************************************************************************** -// The modulus, for the modular inverse - -edwards25519_scalarmulbase_p_25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // 0 * B = 0 and 2^251 * B in extended-projective coordinates // but with Z = 1 assumed and hence left out, so they are (X,Y,T) only. -edwards25519_scalarmulbase_edwards25519_0g: +edwards25519_scalarmulbase_0g: .quad 0x0000000000000000 .quad 0x0000000000000000 @@ -1372,7 +2325,7 @@ edwards25519_scalarmulbase_edwards25519_0g: .quad 0x0000000000000000 .quad 0x0000000000000000 -edwards25519_scalarmulbase_edwards25519_251g: +edwards25519_scalarmulbase_251g: .quad 0x525f946d7c7220e7 .quad 0x4636b0b2f1e35444 @@ -1390,7 +2343,7 @@ edwards25519_scalarmulbase_edwards25519_251g: // Precomputed table of multiples of generator for edwards25519 // all in precomputed extended-projective (y-x,x+y,2*d*x*y) triples. -edwards25519_scalarmulbase_edwards25519_gtable: +edwards25519_scalarmulbase_gtable: // 2^0 * 1 * G diff --git a/x86_att/curve25519/edwards25519_scalarmulbase_alt.S b/x86_att/curve25519/edwards25519_scalarmulbase_alt.S index e6649208..00b91fe1 100644 --- a/x86_att/curve25519/edwards25519_scalarmulbase_alt.S +++ b/x86_att/curve25519/edwards25519_scalarmulbase_alt.S @@ -38,23 +38,22 @@ #define xpy_2 (2*NUMSIZE)(%rsp) #define kxy_2 (3*NUMSIZE)(%rsp) -#define acc (4*NUMSIZE)(%rsp) -#define x_1 (4*NUMSIZE)(%rsp) -#define y_1 (5*NUMSIZE)(%rsp) -#define z_1 (6*NUMSIZE)(%rsp) -#define w_1 (7*NUMSIZE)(%rsp) -#define x_3 (4*NUMSIZE)(%rsp) -#define y_3 (5*NUMSIZE)(%rsp) -#define z_3 (6*NUMSIZE)(%rsp) -#define w_3 (7*NUMSIZE)(%rsp) - -#define tmpspace (8*NUMSIZE)(%rsp) -#define t0 (8*NUMSIZE)(%rsp) -#define t1 (9*NUMSIZE)(%rsp) -#define t2 (10*NUMSIZE)(%rsp) -#define t3 (11*NUMSIZE)(%rsp) -#define t4 (12*NUMSIZE)(%rsp) -#define t5 (13*NUMSIZE)(%rsp) +#define t0 (4*NUMSIZE)(%rsp) +#define t1 (5*NUMSIZE)(%rsp) +#define t2 (6*NUMSIZE)(%rsp) +#define t3 (7*NUMSIZE)(%rsp) +#define t4 (8*NUMSIZE)(%rsp) +#define t5 (9*NUMSIZE)(%rsp) + +#define acc (10*NUMSIZE)(%rsp) +#define x_1 (10*NUMSIZE)(%rsp) +#define y_1 (11*NUMSIZE)(%rsp) +#define z_1 (12*NUMSIZE)(%rsp) +#define w_1 (13*NUMSIZE)(%rsp) +#define x_3 (10*NUMSIZE)(%rsp) +#define y_3 (11*NUMSIZE)(%rsp) +#define z_3 (12*NUMSIZE)(%rsp) +#define w_3 (13*NUMSIZE)(%rsp) // Stable homes for the input result pointer, and other variables @@ -73,6 +72,15 @@ #define NSPACE (15*NUMSIZE+8) +// Syntactic variants to make x86_att version simpler to generate + +#define SCALAR 0 +#define TABENT (1*NUMSIZE) +#define ACC (10*NUMSIZE) +#define X3 (10*NUMSIZE) +#define Z3 (12*NUMSIZE) +#define W3 (13*NUMSIZE) + // Macro wrapping up the basic field multiplication, only trivially // different from a pure function call to bignum_mul_p25519_alt. @@ -413,12 +421,12 @@ S2N_BN_SYMBOL(edwards25519_scalarmulbase_alt): pushq %rsi movq %rcx, %rdi movq %rdx, %rsi - callq edwards25519_scalarmulbase_alt_curve25519_x25519base_standard + callq edwards25519_scalarmulbase_alt_standard popq %rsi popq %rdi ret -edwards25519_scalarmulbase_alt_curve25519_x25519base_standard: +edwards25519_scalarmulbase_alt_standard: #endif // Save registers, make room for temps, preserve input arguments. @@ -489,11 +497,11 @@ edwards25519_scalarmulbase_alt_curve25519_x25519base_standard: // And before we store the scalar, test and reset bit 251 to // initialize the main loop just below. - movq %r8, (%rsp) - movq %r9, 8(%rsp) - movq %r10, 16(%rsp) + movq %r8, SCALAR(%rsp) + movq %r9, SCALAR+8(%rsp) + movq %r10, SCALAR+16(%rsp) btr $59, %r11 - movq %r11, 24(%rsp) + movq %r11, SCALAR+24(%rsp) // The main part of the computation is in extended-projective coordinates // (X,Y,Z,T), representing an affine point on the edwards25519 curve @@ -504,75 +512,75 @@ edwards25519_scalarmulbase_alt_curve25519_x25519base_standard: // Initialize accumulator "acc" to either 0 or 2^251 * B depending on // bit 251 of the (reduced) scalar. That leaves bits 0..250 to handle. - leaq edwards25519_scalarmulbase_alt_edwards25519_0g(%rip), %r10 - leaq edwards25519_scalarmulbase_alt_edwards25519_251g(%rip), %r11 + leaq edwards25519_scalarmulbase_alt_0g(%rip), %r10 + leaq edwards25519_scalarmulbase_alt_251g(%rip), %r11 movq (%r10), %rax movq (%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*16(%rsp) + movq %rax, ACC(%rsp) movq 8*1(%r10), %rax movq 8*1(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*17(%rsp) + movq %rax, ACC+8(%rsp) movq 8*2(%r10), %rax movq 8*2(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*18(%rsp) + movq %rax, ACC+16(%rsp) movq 8*3(%r10), %rax movq 8*3(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*19(%rsp) + movq %rax, ACC+24(%rsp) movq 8*4(%r10), %rax movq 8*4(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*20(%rsp) + movq %rax, ACC+32(%rsp) movq 8*5(%r10), %rax movq 8*5(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*21(%rsp) + movq %rax, ACC+40(%rsp) movq 8*6(%r10), %rax movq 8*6(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*22(%rsp) + movq %rax, ACC+48(%rsp) movq 8*7(%r10), %rax movq 8*7(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*23(%rsp) + movq %rax, ACC+56(%rsp) movl $1, %eax - movq %rax, 8*24(%rsp) + movq %rax, ACC+64(%rsp) movl $0, %eax - movq %rax, 8*25(%rsp) - movq %rax, 8*26(%rsp) - movq %rax, 8*27(%rsp) + movq %rax, ACC+72(%rsp) + movq %rax, ACC+80(%rsp) + movq %rax, ACC+88(%rsp) movq 8*8(%r10), %rax movq 8*8(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*28(%rsp) + movq %rax, ACC+96(%rsp) movq 8*9(%r10), %rax movq 8*9(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*29(%rsp) + movq %rax, ACC+104(%rsp) movq 8*10(%r10), %rax movq 8*10(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*30(%rsp) + movq %rax, ACC+112(%rsp) movq 8*11(%r10), %rax movq 8*11(%r11), %rcx cmovcq %rcx, %rax - movq %rax, 8*31(%rsp) + movq %rax, ACC+120(%rsp) // The counter "i" tracks the bit position for which the scalar has // already been absorbed, starting at 0 and going up in chunks of 4. @@ -588,7 +596,7 @@ edwards25519_scalarmulbase_alt_curve25519_x25519base_standard: // end because we made sure bit 251 is clear in the reduced scalar. movq $0, i - leaq edwards25519_scalarmulbase_alt_edwards25519_gtable(%rip), %rax + leaq edwards25519_scalarmulbase_alt_gtable(%rip), %rax movq %rax, tab movq $0, bias @@ -880,26 +888,26 @@ edwards25519_scalarmulbase_alt_scalarloop: movq %rax, %rsi cmovnzq %r8, %rsi cmovnzq %rax, %r8 - movq %rsi, 32(%rsp) - movq %r8, 64(%rsp) + movq %rsi, TABENT(%rsp) + movq %r8, TABENT+32(%rsp) movq %rbx, %rsi cmovnzq %r9, %rsi cmovnzq %rbx, %r9 - movq %rsi, 40(%rsp) - movq %r9, 72(%rsp) + movq %rsi, TABENT+8(%rsp) + movq %r9, TABENT+40(%rsp) movq %rcx, %rsi cmovnzq %r10, %rsi cmovnzq %rcx, %r10 - movq %rsi, 48(%rsp) - movq %r10, 80(%rsp) + movq %rsi, TABENT+16(%rsp) + movq %r10, TABENT+48(%rsp) movq %rdx, %rsi cmovnzq %r11, %rsi cmovnzq %rdx, %r11 - movq %rsi, 56(%rsp) - movq %r11, 88(%rsp) + movq %rsi, TABENT+24(%rsp) + movq %r11, TABENT+56(%rsp) movq $-19, %rax movq $-1, %rbx @@ -920,10 +928,10 @@ edwards25519_scalarmulbase_alt_scalarloop: cmovzq %r13, %rbx cmovzq %r14, %rcx cmovzq %r15, %rdx - movq %rax, 96(%rsp) - movq %rbx, 104(%rsp) - movq %rcx, 112(%rsp) - movq %rdx, 120(%rsp) + movq %rax, TABENT+64(%rsp) + movq %rbx, TABENT+72(%rsp) + movq %rcx, TABENT+80(%rsp) + movq %rdx, TABENT+88(%rsp) // Extended-projective and precomputed mixed addition. // This is effectively the same as calling the standalone @@ -960,10 +968,10 @@ edwards25519_scalarmulbase_alt_scalarloop: // point on we don't need any normalization of the coordinates // except for making sure that they fit in 4 digits. - movq 128(%rsp), %r8 - movq 136(%rsp), %r9 - movq 144(%rsp), %r10 - movq 152(%rsp), %r11 + movq X3(%rsp), %r8 + movq X3+8(%rsp), %r9 + movq X3+16(%rsp), %r10 + movq X3+24(%rsp), %r11 movq $0xffffffffffffffda, %r12 subq %r8, %r12 movq $0xffffffffffffffff, %r13 @@ -972,424 +980,1377 @@ edwards25519_scalarmulbase_alt_scalarloop: sbbq %r10, %r14 movq $0xffffffffffffffff, %r15 sbbq %r11, %r15 - movq 24(%rsp), %rax + movq SCALAR+24(%rsp), %rax btq $63, %rax cmovcq %r12, %r8 cmovcq %r13, %r9 cmovcq %r14, %r10 cmovcq %r15, %r11 - movq %r8, 128(%rsp) - movq %r9, 136(%rsp) - movq %r10, 144(%rsp) - movq %r11, 152(%rsp) + movq %r8, X3(%rsp) + movq %r9, X3+8(%rsp) + movq %r10, X3+16(%rsp) + movq %r11, X3+24(%rsp) // Now we need to map out of the extended-projective representation // (X,Y,Z,W) back to the affine form (x,y) = (X/Z,Y/Z). This means // first calling the modular inverse to get w_3 = 1/z_3. - movq $4, %rdi - leaq 224(%rsp), %rsi - leaq 192(%rsp), %rdx - leaq edwards25519_scalarmulbase_alt_p_25519(%rip), %rcx - leaq 256(%rsp), %r8 - -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "x86/generic/bignum_modinv.S". Note -// that the stack it uses for its own temporaries is 80 bytes so it -// only overwrites local variables that are no longer needed. - - movq %rsi, 0x40(%rsp) - movq %r8, 0x38(%rsp) - movq %rcx, 0x48(%rsp) - leaq (%r8,%rdi,8), %r10 - movq %r10, 0x30(%rsp) - leaq (%r10,%rdi,8), %r15 - xorq %r11, %r11 - xorq %r9, %r9 -edwards25519_scalarmulbase_alt_copyloop: - movq (%rdx,%r9,8), %rax - movq (%rcx,%r9,8), %rbx - movq %rax, (%r10,%r9,8) - movq %rbx, (%r15,%r9,8) - movq %rbx, (%r8,%r9,8) - movq %r11, (%rsi,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmulbase_alt_copyloop - movq (%r8), %rax - movq %rax, %rbx - decq %rbx - movq %rbx, (%r8) - movq %rax, %rbp - movq %rax, %r12 - shlq $0x2, %rbp - subq %rbp, %r12 - xorq $0x2, %r12 - movq %r12, %rbp - imulq %rax, %rbp - movl $0x2, %eax - addq %rbp, %rax - addq $0x1, %rbp - imulq %rax, %r12 - imulq %rbp, %rbp - movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - imulq %rbp, %rbp - movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - imulq %rbp, %rbp + leaq W3(%rsp), %rdi + leaq Z3(%rsp), %rsi + +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "x86/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 208 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, x_3, y_3, +// z_3 and w_3. + + movq %rdi, 0xc0(%rsp) + xorl %eax, %eax + leaq -0x13(%rax), %rcx + notq %rax + movq %rcx, (%rsp) + movq %rax, 0x8(%rsp) + movq %rax, 0x10(%rsp) + btr $0x3f, %rax + movq %rax, 0x18(%rsp) + movq (%rsi), %rdx + movq 0x8(%rsi), %rcx + movq 0x10(%rsi), %r8 + movq 0x18(%rsi), %r9 movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - movq %r12, 0x28(%rsp) - movq %rdi, %rax - shlq $0x7, %rax - movq %rax, 0x20(%rsp) -edwards25519_scalarmulbase_alt_outerloop: - movq 0x20(%rsp), %r13 - addq $0x3f, %r13 - shrq $0x6, %r13 - cmpq %rdi, %r13 - cmovaeq %rdi, %r13 - xorq %r12, %r12 - xorq %r14, %r14 - xorq %rbp, %rbp - xorq %rsi, %rsi - xorq %r11, %r11 - movq 0x30(%rsp), %r8 - leaq (%r8,%rdi,8), %r15 - xorq %r9, %r9 -edwards25519_scalarmulbase_alt_toploop: - movq (%r8,%r9,8), %rbx - movq (%r15,%r9,8), %rcx - movq %r11, %r10 - andq %r12, %r10 - andq %rbp, %r11 - movq %rbx, %rax - orq %rcx, %rax - negq %rax - cmovbq %r10, %r14 - cmovbq %r11, %rsi - cmovbq %rbx, %r12 - cmovbq %rcx, %rbp - sbbq %r11, %r11 - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmulbase_alt_toploop - movq %r12, %rax - orq %rbp, %rax - bsrq %rax, %rcx - xorq $0x3f, %rcx - shldq %cl, %r14, %r12 - shldq %cl, %rsi, %rbp - movq (%r8), %rax - movq %rax, %r14 - movq (%r15), %rax - movq %rax, %rsi - movl $0x1, %r10d - movl $0x0, %r11d - movl $0x0, %ecx - movl $0x1, %edx - movl $0x3a, %r9d - movq %rdi, 0x8(%rsp) - movq %r13, 0x10(%rsp) - movq %r8, (%rsp) - movq %r15, 0x18(%rsp) -edwards25519_scalarmulbase_alt_innerloop: + xorl %r10d, %r10d + bts $0x3f, %r9 + adcq %r10, %rax + imulq $0x13, %rax, %rax + addq %rax, %rdx + adcq %r10, %rcx + adcq %r10, %r8 + adcq %r10, %r9 + movl $0x13, %eax + cmovbq %r10, %rax + subq %rax, %rdx + sbbq %r10, %rcx + sbbq %r10, %r8 + sbbq %r10, %r9 + btr $0x3f, %r9 + movq %rdx, 0x20(%rsp) + movq %rcx, 0x28(%rsp) + movq %r8, 0x30(%rsp) + movq %r9, 0x38(%rsp) xorl %eax, %eax + movq %rax, 0x40(%rsp) + movq %rax, 0x48(%rsp) + movq %rax, 0x50(%rsp) + movq %rax, 0x58(%rsp) + movabsq $0xa0f99e2375022099, %rax + movq %rax, 0x60(%rsp) + movabsq $0xa8c68f3f1d132595, %rax + movq %rax, 0x68(%rsp) + movabsq $0x6c6c893805ac5242, %rax + movq %rax, 0x70(%rsp) + movabsq $0x276508b241770615, %rax + movq %rax, 0x78(%rsp) + movq $0xa, 0x90(%rsp) + movq $0x1, 0x98(%rsp) + jmp edwards25519_scalarmulbase_alt_midloop +edwards25519_scalarmulbase_alt_inverseloop: + movq %r8, %r9 + sarq $0x3f, %r9 + xorq %r9, %r8 + subq %r9, %r8 + movq %r10, %r11 + sarq $0x3f, %r11 + xorq %r11, %r10 + subq %r11, %r10 + movq %r12, %r13 + sarq $0x3f, %r13 + xorq %r13, %r12 + subq %r13, %r12 + movq %r14, %r15 + sarq $0x3f, %r15 + xorq %r15, %r14 + subq %r15, %r14 + movq %r8, %rax + andq %r9, %rax + movq %r10, %rdi + andq %r11, %rdi + addq %rax, %rdi + movq %rdi, 0x80(%rsp) + movq %r12, %rax + andq %r13, %rax + movq %r14, %rsi + andq %r15, %rsi + addq %rax, %rsi + movq %rsi, 0x88(%rsp) xorl %ebx, %ebx - xorq %r8, %r8 - xorq %r15, %r15 - btq $0x0, %r14 - cmovbq %rbp, %rax - cmovbq %rsi, %rbx - cmovbq %rcx, %r8 - cmovbq %rdx, %r15 - movq %r14, %r13 - subq %rbx, %r14 - subq %r13, %rbx - movq %r12, %rdi - subq %rax, %rdi - cmovbq %r12, %rbp - leaq -0x1(%rdi), %r12 - cmovbq %rbx, %r14 - cmovbq %r13, %rsi - notq %r12 - cmovbq %r10, %rcx - cmovbq %r11, %rdx - cmovaeq %rdi, %r12 - shrq $1, %r14 - addq %r8, %r10 - addq %r15, %r11 - shrq $1, %r12 - addq %rcx, %rcx - addq %rdx, %rdx - decq %r9 - jne edwards25519_scalarmulbase_alt_innerloop - movq 0x8(%rsp), %rdi - movq 0x10(%rsp), %r13 - movq (%rsp), %r8 - movq 0x18(%rsp), %r15 - movq %r10, (%rsp) - movq %r11, 0x8(%rsp) - movq %rcx, 0x10(%rsp) - movq %rdx, 0x18(%rsp) - movq 0x38(%rsp), %r8 - movq 0x40(%rsp), %r15 - xorq %r14, %r14 - xorq %rsi, %rsi - xorq %r10, %r10 - xorq %r11, %r11 - xorq %r9, %r9 -edwards25519_scalarmulbase_alt_congloop: - movq (%r8,%r9,8), %rcx movq (%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq $0x0, %rdx - movq %rdx, %r12 - movq 0x10(%rsp), %rax - mulq %rcx + xorq %r9, %rax + mulq %r8 + addq %rax, %rdi + adcq %rdx, %rbx + movq 0x20(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rdi + adcq %rdx, %rbx + xorl %ebp, %ebp + movq (%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rsi + adcq %rdx, %rbp + movq 0x20(%rsp), %rax + xorq %r15, %rax + mulq %r14 addq %rax, %rsi - adcq $0x0, %rdx - movq %rdx, %rbp - movq (%r15,%r9,8), %rcx + adcq %rdx, %rbp + xorl %ecx, %ecx movq 0x8(%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq %rdx, %r12 - shrdq $0x3a, %r14, %r10 - movq %r10, (%r8,%r9,8) - movq %r14, %r10 - movq %r12, %r14 + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x28(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + shrdq $0x3b, %rbx, %rdi + movq %rdi, (%rsp) + xorl %edi, %edi + movq 0x8(%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rbp + adcq %rdx, %rdi + movq 0x28(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rdi + shrdq $0x3b, %rbp, %rsi + movq %rsi, 0x20(%rsp) + xorl %esi, %esi + movq 0x10(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rsi + movq 0x30(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rcx + adcq %rdx, %rsi + shrdq $0x3b, %rcx, %rbx + movq %rbx, 0x8(%rsp) + xorl %ebx, %ebx + movq 0x10(%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rdi + adcq %rdx, %rbx + movq 0x30(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rdi + adcq %rdx, %rbx + shrdq $0x3b, %rdi, %rbp + movq %rbp, 0x28(%rsp) movq 0x18(%rsp), %rax - mulq %rcx + xorq %r9, %rax + movq %rax, %rbp + sarq $0x3f, %rbp + andq %r8, %rbp + negq %rbp + mulq %r8 + addq %rax, %rsi + adcq %rdx, %rbp + movq 0x38(%rsp), %rax + xorq %r11, %rax + movq %rax, %rdx + sarq $0x3f, %rdx + andq %r10, %rdx + subq %rdx, %rbp + mulq %r10 addq %rax, %rsi adcq %rdx, %rbp - shrdq $0x3a, %rsi, %r11 - movq %r11, (%r15,%r9,8) - movq %rsi, %r11 - movq %rbp, %rsi - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmulbase_alt_congloop - shldq $0x6, %r10, %r14 - shldq $0x6, %r11, %rsi - movq 0x48(%rsp), %r15 - movq (%r8), %rbx - movq 0x28(%rsp), %r12 - imulq %rbx, %r12 - movq (%r15), %rax + shrdq $0x3b, %rsi, %rcx + movq %rcx, 0x10(%rsp) + shrdq $0x3b, %rbp, %rsi + movq 0x18(%rsp), %rax + movq %rsi, 0x18(%rsp) + xorq %r13, %rax + movq %rax, %rsi + sarq $0x3f, %rsi + andq %r12, %rsi + negq %rsi + mulq %r12 + addq %rax, %rbx + adcq %rdx, %rsi + movq 0x38(%rsp), %rax + xorq %r15, %rax + movq %rax, %rdx + sarq $0x3f, %rdx + andq %r14, %rdx + subq %rdx, %rsi + mulq %r14 + addq %rax, %rbx + adcq %rdx, %rsi + shrdq $0x3b, %rbx, %rdi + movq %rdi, 0x30(%rsp) + shrdq $0x3b, %rsi, %rbx + movq %rbx, 0x38(%rsp) + movq 0x80(%rsp), %rbx + movq 0x88(%rsp), %rbp + xorl %ecx, %ecx + movq 0x40(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x60(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + xorl %esi, %esi + movq 0x40(%rsp), %rax + xorq %r13, %rax mulq %r12 - addq %rbx, %rax - movq %rdx, %r10 - movl $0x1, %r9d - movq %rdi, %rcx - decq %rcx - je edwards25519_scalarmulbase_alt_wmontend -edwards25519_scalarmulbase_alt_wmontloop: - adcq (%r8,%r9,8), %r10 - sbbq %rbx, %rbx - movq (%r15,%r9,8), %rax + movq %rbx, 0x40(%rsp) + addq %rax, %rbp + adcq %rdx, %rsi + movq 0x60(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rsi + movq %rbp, 0x60(%rsp) + xorl %ebx, %ebx + movq 0x48(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rbx + movq 0x68(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rcx + adcq %rdx, %rbx + xorl %ebp, %ebp + movq 0x48(%rsp), %rax + xorq %r13, %rax mulq %r12 - subq %rbx, %rdx - addq %r10, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %rdx, %r10 - incq %r9 - decq %rcx - jne edwards25519_scalarmulbase_alt_wmontloop -edwards25519_scalarmulbase_alt_wmontend: - adcq %r14, %r10 - movq %r10, -0x8(%r8,%rdi,8) - sbbq %r10, %r10 - negq %r10 - movq %rdi, %rcx - xorq %r9, %r9 -edwards25519_scalarmulbase_alt_wcmploop: - movq (%r8,%r9,8), %rax - sbbq (%r15,%r9,8), %rax - incq %r9 - decq %rcx - jne edwards25519_scalarmulbase_alt_wcmploop - sbbq $0x0, %r10 - sbbq %r10, %r10 - notq %r10 - xorq %rcx, %rcx - xorq %r9, %r9 -edwards25519_scalarmulbase_alt_wcorrloop: - movq (%r8,%r9,8), %rax - movq (%r15,%r9,8), %rbx - andq %r10, %rbx - negq %rcx - sbbq %rbx, %rax - sbbq %rcx, %rcx - movq %rax, (%r8,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmulbase_alt_wcorrloop + movq %rcx, 0x48(%rsp) + addq %rax, %rsi + adcq %rdx, %rbp + movq 0x68(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rsi + adcq %rdx, %rbp + movq %rsi, 0x68(%rsp) + xorl %ecx, %ecx + movq 0x50(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x70(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + xorl %esi, %esi + movq 0x50(%rsp), %rax + xorq %r13, %rax + mulq %r12 + movq %rbx, 0x50(%rsp) + addq %rax, %rbp + adcq %rdx, %rsi + movq 0x70(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rsi + movq %rbp, 0x70(%rsp) + movq 0x58(%rsp), %rax + xorq %r9, %rax + movq %r9, %rbx + andq %r8, %rbx + negq %rbx + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rbx + movq 0x78(%rsp), %rax + xorq %r11, %rax + movq %r11, %rdx + andq %r10, %rdx + subq %rdx, %rbx + mulq %r10 + addq %rax, %rcx + adcq %rbx, %rdx + movq %rdx, %rbx + shldq $0x1, %rcx, %rdx + sarq $0x3f, %rbx + addq %rbx, %rdx + movl $0x13, %eax + imulq %rdx movq 0x40(%rsp), %r8 - movq (%r8), %rbx - movq 0x28(%rsp), %rbp - imulq %rbx, %rbp - movq (%r15), %rax - mulq %rbp - addq %rbx, %rax - movq %rdx, %r11 - movl $0x1, %r9d - movq %rdi, %rcx - decq %rcx - je edwards25519_scalarmulbase_alt_zmontend -edwards25519_scalarmulbase_alt_zmontloop: - adcq (%r8,%r9,8), %r11 - sbbq %rbx, %rbx - movq (%r15,%r9,8), %rax - mulq %rbp - subq %rbx, %rdx - addq %r11, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %rdx, %r11 - incq %r9 - decq %rcx - jne edwards25519_scalarmulbase_alt_zmontloop -edwards25519_scalarmulbase_alt_zmontend: - adcq %rsi, %r11 - movq %r11, -0x8(%r8,%rdi,8) - sbbq %r11, %r11 - negq %r11 - movq %rdi, %rcx - xorq %r9, %r9 -edwards25519_scalarmulbase_alt_zcmploop: - movq (%r8,%r9,8), %rax - sbbq (%r15,%r9,8), %rax - incq %r9 - decq %rcx - jne edwards25519_scalarmulbase_alt_zcmploop - sbbq $0x0, %r11 - sbbq %r11, %r11 - notq %r11 - xorq %rcx, %rcx - xorq %r9, %r9 -edwards25519_scalarmulbase_alt_zcorrloop: - movq (%r8,%r9,8), %rax - movq (%r15,%r9,8), %rbx - andq %r11, %rbx + addq %rax, %r8 + movq %r8, 0x40(%rsp) + movq 0x48(%rsp), %r8 + adcq %rdx, %r8 + movq %r8, 0x48(%rsp) + movq 0x50(%rsp), %r8 + adcq %rbx, %r8 + movq %r8, 0x50(%rsp) + adcq %rbx, %rcx + shlq $0x3f, %rax + addq %rax, %rcx + movq 0x58(%rsp), %rax + movq %rcx, 0x58(%rsp) + xorq %r13, %rax + movq %r13, %rcx + andq %r12, %rcx negq %rcx - sbbq %rbx, %rax - sbbq %rcx, %rcx - movq %rax, (%r8,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmulbase_alt_zcorrloop - movq 0x30(%rsp), %r8 - leaq (%r8,%rdi,8), %r15 - xorq %r9, %r9 - xorq %r12, %r12 - xorq %r14, %r14 - xorq %rbp, %rbp - xorq %rsi, %rsi -edwards25519_scalarmulbase_alt_crossloop: - movq (%r8,%r9,8), %rcx - movq (%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq $0x0, %rdx - movq %rdx, %r10 - movq 0x10(%rsp), %rax - mulq %rcx + mulq %r12 addq %rax, %rsi - adcq $0x0, %rdx - movq %rdx, %r11 - movq (%r15,%r9,8), %rcx - movq 0x8(%rsp), %rax - mulq %rcx - subq %r12, %rdx - subq %rax, %r14 - sbbq %rdx, %r10 - sbbq %r12, %r12 - movq %r14, (%r8,%r9,8) - movq %r10, %r14 - movq 0x18(%rsp), %rax - mulq %rcx - subq %rbp, %rdx + adcq %rdx, %rcx + movq 0x78(%rsp), %rax + xorq %r15, %rax + movq %r15, %rdx + andq %r14, %rdx + subq %rdx, %rcx + mulq %r14 + addq %rax, %rsi + adcq %rcx, %rdx + movq %rdx, %rcx + shldq $0x1, %rsi, %rdx + sarq $0x3f, %rcx + movl $0x13, %eax + addq %rcx, %rdx + imulq %rdx + movq 0x60(%rsp), %r8 + addq %rax, %r8 + movq %r8, 0x60(%rsp) + movq 0x68(%rsp), %r8 + adcq %rdx, %r8 + movq %r8, 0x68(%rsp) + movq 0x70(%rsp), %r8 + adcq %rcx, %r8 + movq %r8, 0x70(%rsp) + adcq %rcx, %rsi + shlq $0x3f, %rax + addq %rax, %rsi + movq %rsi, 0x78(%rsp) +edwards25519_scalarmulbase_alt_midloop: + movq 0x98(%rsp), %rsi + movq (%rsp), %rdx + movq 0x20(%rsp), %rcx + movq %rdx, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq $0xfffffffffffffffe, %rax + xorl %ebp, %ebp + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 subq %rax, %rsi - sbbq %rdx, %r11 - sbbq %rbp, %rbp - movq %rsi, (%r15,%r9,8) - movq %r11, %rsi - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmulbase_alt_crossloop - xorq %r9, %r9 - movq %r12, %r10 - movq %rbp, %r11 - xorq %r12, %r14 - xorq %rbp, %rsi -edwards25519_scalarmulbase_alt_optnegloop: - movq (%r8,%r9,8), %rax - xorq %r12, %rax - negq %r10 - adcq $0x0, %rax - sbbq %r10, %r10 - movq %rax, (%r8,%r9,8) - movq (%r15,%r9,8), %rax - xorq %rbp, %rax - negq %r11 - adcq $0x0, %rax - sbbq %r11, %r11 - movq %rax, (%r15,%r9,8) - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmulbase_alt_optnegloop - subq %r10, %r14 - subq %r11, %rsi - movq %r13, %r9 -edwards25519_scalarmulbase_alt_shiftloop: - movq -0x8(%r8,%r9,8), %rax - movq %rax, %r10 - shrdq $0x3a, %r14, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %r10, %r14 - movq -0x8(%r15,%r9,8), %rax - movq %rax, %r11 - shrdq $0x3a, %rsi, %rax - movq %rax, -0x8(%r15,%r9,8) - movq %r11, %rsi - decq %r9 - jne edwards25519_scalarmulbase_alt_shiftloop - notq %rbp - movq 0x48(%rsp), %rcx - movq 0x38(%rsp), %r8 - movq 0x40(%rsp), %r15 - movq %r12, %r10 - movq %rbp, %r11 - xorq %r9, %r9 -edwards25519_scalarmulbase_alt_fliploop: - movq %rbp, %rdx - movq (%rcx,%r9,8), %rax - andq %rax, %rdx - andq %r12, %rax - movq (%r8,%r9,8), %rbx - xorq %r12, %rbx - negq %r10 - adcq %rbx, %rax - sbbq %r10, %r10 - movq %rax, (%r8,%r9,8) - movq (%r15,%r9,8), %rbx - xorq %rbp, %rbx - negq %r11 - adcq %rbx, %rdx - sbbq %r11, %r11 - movq %rdx, (%r15,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmulbase_alt_fliploop - subq $0x3a, 0x20(%rsp) - ja edwards25519_scalarmulbase_alt_outerloop + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %rdx + leaq (%rcx,%rax), %rdi + shlq $0x16, %rdx + shlq $0x16, %rdi + sarq $0x2b, %rdx + sarq $0x2b, %rdi + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %rbx + leaq (%rcx,%rax), %rcx + sarq $0x2a, %rbx + sarq $0x2a, %rcx + movq %rdx, 0xa0(%rsp) + movq %rbx, 0xa8(%rsp) + movq %rdi, 0xb0(%rsp) + movq %rcx, 0xb8(%rsp) + movq (%rsp), %r12 + imulq %r12, %rdi + imulq %rdx, %r12 + movq 0x20(%rsp), %r13 + imulq %r13, %rbx + imulq %rcx, %r13 + addq %rbx, %r12 + addq %rdi, %r13 + sarq $0x14, %r12 + sarq $0x14, %r13 + movq %r12, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + movq %r13, %rcx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq $0xfffffffffffffffe, %rax + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %r8 + leaq (%rcx,%rax), %r10 + shlq $0x16, %r8 + shlq $0x16, %r10 + sarq $0x2b, %r8 + sarq $0x2b, %r10 + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %r15 + leaq (%rcx,%rax), %r11 + sarq $0x2a, %r15 + sarq $0x2a, %r11 + movq %r13, %rbx + movq %r12, %rcx + imulq %r8, %r12 + imulq %r15, %rbx + addq %rbx, %r12 + imulq %r11, %r13 + imulq %r10, %rcx + addq %rcx, %r13 + sarq $0x14, %r12 + sarq $0x14, %r13 + movq %r12, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + movq %r13, %rcx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq 0xa0(%rsp), %rax + imulq %r8, %rax + movq 0xb0(%rsp), %rdx + imulq %r15, %rdx + imulq 0xa8(%rsp), %r8 + imulq 0xb8(%rsp), %r15 + addq %r8, %r15 + leaq (%rax,%rdx), %r9 + movq 0xa0(%rsp), %rax + imulq %r10, %rax + movq 0xb0(%rsp), %rdx + imulq %r11, %rdx + imulq 0xa8(%rsp), %r10 + imulq 0xb8(%rsp), %r11 + addq %r10, %r11 + leaq (%rax,%rdx), %r13 + movq $0xfffffffffffffffe, %rax + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %r8 + leaq (%rcx,%rax), %r12 + shlq $0x15, %r8 + shlq $0x15, %r12 + sarq $0x2b, %r8 + sarq $0x2b, %r12 + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %r10 + leaq (%rcx,%rax), %r14 + sarq $0x2b, %r10 + sarq $0x2b, %r14 + movq %r9, %rax + imulq %r8, %rax + movq %r13, %rdx + imulq %r10, %rdx + imulq %r15, %r8 + imulq %r11, %r10 + addq %r8, %r10 + leaq (%rax,%rdx), %r8 + movq %r9, %rax + imulq %r12, %rax + movq %r13, %rdx + imulq %r14, %rdx + imulq %r15, %r12 + imulq %r11, %r14 + addq %r12, %r14 + leaq (%rax,%rdx), %r12 + movq %rsi, 0x98(%rsp) + decq 0x90(%rsp) + jne edwards25519_scalarmulbase_alt_inverseloop + movq (%rsp), %rax + movq 0x20(%rsp), %rcx + imulq %r8, %rax + imulq %r10, %rcx + addq %rcx, %rax + sarq $0x3f, %rax + movq %r8, %r9 + sarq $0x3f, %r9 + xorq %r9, %r8 + subq %r9, %r8 + xorq %rax, %r9 + movq %r10, %r11 + sarq $0x3f, %r11 + xorq %r11, %r10 + subq %r11, %r10 + xorq %rax, %r11 + movq %r12, %r13 + sarq $0x3f, %r13 + xorq %r13, %r12 + subq %r13, %r12 + xorq %rax, %r13 + movq %r14, %r15 + sarq $0x3f, %r15 + xorq %r15, %r14 + subq %r15, %r14 + xorq %rax, %r15 + movq %r8, %rax + andq %r9, %rax + movq %r10, %r12 + andq %r11, %r12 + addq %rax, %r12 + xorl %r13d, %r13d + movq 0x40(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r12 + adcq %rdx, %r13 + movq 0x60(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r12 + adcq %rdx, %r13 + xorl %r14d, %r14d + movq 0x48(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r13 + adcq %rdx, %r14 + movq 0x68(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r13 + adcq %rdx, %r14 + xorl %r15d, %r15d + movq 0x50(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r14 + adcq %rdx, %r15 + movq 0x70(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r14 + adcq %rdx, %r15 + movq 0x58(%rsp), %rax + xorq %r9, %rax + andq %r8, %r9 + negq %r9 + mulq %r8 + addq %rax, %r15 + adcq %rdx, %r9 + movq 0x78(%rsp), %rax + xorq %r11, %rax + movq %r11, %rdx + andq %r10, %rdx + subq %rdx, %r9 + mulq %r10 + addq %rax, %r15 + adcq %rdx, %r9 + movq %r9, %rax + shldq $0x1, %r15, %rax + sarq $0x3f, %r9 + movl $0x13, %ebx + leaq 0x1(%rax,%r9,1), %rax + imulq %rbx + xorl %ebp, %ebp + addq %rax, %r12 + adcq %rdx, %r13 + adcq %r9, %r14 + adcq %r9, %r15 + shlq $0x3f, %rax + addq %rax, %r15 + cmovns %rbp, %rbx + subq %rbx, %r12 + sbbq %rbp, %r13 + sbbq %rbp, %r14 + sbbq %rbp, %r15 + btr $0x3f, %r15 + movq 0xc0(%rsp), %rdi + movq %r12, (%rdi) + movq %r13, 0x8(%rdi) + movq %r14, 0x10(%rdi) + movq %r15, 0x18(%rdi) // The final result is x = X * inv(Z), y = Y * inv(Z). // These are the only operations in the whole computation that @@ -1420,18 +2381,10 @@ edwards25519_scalarmulbase_alt_fliploop: // .section .rodata // **************************************************************************** -// The modulus, for the modular inverse - -edwards25519_scalarmulbase_alt_p_25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // 0 * B = 0 and 2^251 * B in extended-projective coordinates // but with Z = 1 assumed and hence left out, so they are (X,Y,T) only. -edwards25519_scalarmulbase_alt_edwards25519_0g: +edwards25519_scalarmulbase_alt_0g: .quad 0x0000000000000000 .quad 0x0000000000000000 @@ -1448,7 +2401,7 @@ edwards25519_scalarmulbase_alt_edwards25519_0g: .quad 0x0000000000000000 .quad 0x0000000000000000 -edwards25519_scalarmulbase_alt_edwards25519_251g: +edwards25519_scalarmulbase_alt_251g: .quad 0x525f946d7c7220e7 .quad 0x4636b0b2f1e35444 @@ -1466,7 +2419,7 @@ edwards25519_scalarmulbase_alt_edwards25519_251g: // Precomputed table of multiples of generator for edwards25519 // all in precomputed extended-projective (y-x,x+y,2*d*x*y) triples. -edwards25519_scalarmulbase_alt_edwards25519_gtable: +edwards25519_scalarmulbase_alt_gtable: // 2^0 * 1 * G diff --git a/x86_att/curve25519/edwards25519_scalarmuldouble.S b/x86_att/curve25519/edwards25519_scalarmuldouble.S index 0138d1a4..35fd7f4f 100644 --- a/x86_att/curve25519/edwards25519_scalarmuldouble.S +++ b/x86_att/curve25519/edwards25519_scalarmuldouble.S @@ -42,24 +42,33 @@ #define scalar (0*NUMSIZE)(%rsp) #define bscalar (1*NUMSIZE)(%rsp) -#define acc (3*NUMSIZE)(%rsp) +#define tabent (2*NUMSIZE)(%rsp) +#define btabent (6*NUMSIZE)(%rsp) -#define tabent (7*NUMSIZE)(%rsp) -#define btabent (11*NUMSIZE)(%rsp) +#define acc (9*NUMSIZE)(%rsp) -#define tab (14*NUMSIZE)(%rsp) +#define tab (13*NUMSIZE)(%rsp) // Additional variables kept on the stack -#define bf 2*NUMSIZE(%rsp) -#define cf 2*NUMSIZE+8(%rsp) -#define i 2*NUMSIZE+16(%rsp) -#define res 2*NUMSIZE+24(%rsp) +#define bf 45*NUMSIZE(%rsp) +#define cf 45*NUMSIZE+8(%rsp) +#define i 45*NUMSIZE+16(%rsp) +#define res 45*NUMSIZE+24(%rsp) // Total size to reserve on the stack (excluding local subroutines) #define NSPACE (46*NUMSIZE) +// Syntactic variants to make x86_att forms easier to generate + +#define SCALAR (0*NUMSIZE) +#define BSCALAR (1*NUMSIZE) +#define TABENT (2*NUMSIZE) +#define BTABENT (6*NUMSIZE) +#define ACC (9*NUMSIZE) +#define TAB (13*NUMSIZE) + // Sub-references used in local subroutines with local stack #define x_0 0(%rdi) @@ -493,10 +502,10 @@ edwards25519_scalarmuldouble_standard: adcq %r13, %r9 adcq %r14, %r10 adcq %r15, %r11 - movq %r8, 32(%rsp) - movq %r9, 40(%rsp) - movq %r10, 48(%rsp) - movq %r11, 56(%rsp) + movq %r8, BSCALAR(%rsp) + movq %r9, BSCALAR+8(%rsp) + movq %r10, BSCALAR+16(%rsp) + movq %r11, BSCALAR+24(%rsp) movq (%rsi), %r8 movq 8(%rsi), %r9 @@ -517,10 +526,10 @@ edwards25519_scalarmuldouble_standard: adcq %r13, %r9 adcq %r14, %r10 adcq %r15, %r11 - movq %r8, (%rsp) - movq %r9, 8(%rsp) - movq %r10, 16(%rsp) - movq %r11, 24(%rsp) + movq %r8, SCALAR(%rsp) + movq %r9, SCALAR+8(%rsp) + movq %r10, SCALAR+16(%rsp) + movq %r11, SCALAR+24(%rsp) // Create table of multiples 1..8 of the general input point at "tab". // Reduce the input coordinates x and y modulo 2^256 - 38 first, for the @@ -541,13 +550,13 @@ edwards25519_scalarmuldouble_standard: adcq %r10, %rcx adcq %r11, %rsi cmovncq %r8, %rax - movq %rax, 448(%rsp) + movq %rax, TAB(%rsp) cmovncq %r9, %rbx - movq %rbx, 456(%rsp) + movq %rbx, TAB+8(%rsp) cmovncq %r10, %rcx - movq %rcx, 464(%rsp) + movq %rcx, TAB+16(%rsp) cmovncq %r11, %rsi - movq %rsi, 472(%rsp) + movq %rsi, TAB+24(%rsp) movl $38, %eax movq 32(%rdx), %r8 @@ -562,69 +571,69 @@ edwards25519_scalarmuldouble_standard: adcq %r10, %rcx adcq %r11, %rsi cmovncq %r8, %rax - movq %rax, 480(%rsp) + movq %rax, TAB+32(%rsp) cmovncq %r9, %rbx - movq %rbx, 488(%rsp) + movq %rbx, TAB+40(%rsp) cmovncq %r10, %rcx - movq %rcx, 496(%rsp) + movq %rcx, TAB+48(%rsp) cmovncq %r11, %rsi - movq %rsi, 504(%rsp) + movq %rsi, TAB+56(%rsp) movl $1, %eax - movq %rax, 512(%rsp) + movq %rax, TAB+64(%rsp) xorl %eax, %eax - movq %rax, 520(%rsp) - movq %rax, 528(%rsp) - movq %rax, 536(%rsp) + movq %rax, TAB+72(%rsp) + movq %rax, TAB+80(%rsp) + movq %rax, TAB+88(%rsp) - leaq 544(%rsp), %rdi - leaq 448(%rsp), %rsi - leaq 480(%rsp), %rbp + leaq TAB+96(%rsp), %rdi + leaq TAB(%rsp), %rsi + leaq TAB+32(%rsp), %rbp mul_4(x_0,x_1,x_2) // Multiple 2 - leaq 576(%rsp), %rdi - leaq 448(%rsp), %rsi + leaq TAB+1*128(%rsp), %rdi + leaq TAB(%rsp), %rsi callq edwards25519_scalarmuldouble_epdouble // Multiple 3 - leaq 704(%rsp), %rdi - leaq 448(%rsp), %rsi - leaq 576(%rsp), %rbp + leaq TAB+2*128(%rsp), %rdi + leaq TAB(%rsp), %rsi + leaq TAB+1*128(%rsp), %rbp callq edwards25519_scalarmuldouble_epadd // Multiple 4 - leaq 832(%rsp), %rdi - leaq 576(%rsp), %rsi + leaq TAB+3*128(%rsp), %rdi + leaq TAB+1*128(%rsp), %rsi callq edwards25519_scalarmuldouble_epdouble // Multiple 5 - leaq 960(%rsp), %rdi - leaq 448(%rsp), %rsi - leaq 832(%rsp), %rbp + leaq TAB+4*128(%rsp), %rdi + leaq TAB(%rsp), %rsi + leaq TAB+3*128(%rsp), %rbp callq edwards25519_scalarmuldouble_epadd // Multiple 6 - leaq 1088(%rsp), %rdi - leaq 704(%rsp), %rsi + leaq TAB+5*128(%rsp), %rdi + leaq TAB+2*128(%rsp), %rsi callq edwards25519_scalarmuldouble_epdouble // Multiple 7 - leaq 1216(%rsp), %rdi - leaq 448(%rsp), %rsi - leaq 1088(%rsp), %rbp + leaq TAB+6*128(%rsp), %rdi + leaq TAB(%rsp), %rsi + leaq TAB+5*128(%rsp), %rbp callq edwards25519_scalarmuldouble_epadd // Multiple 8 - leaq 1344(%rsp), %rdi - leaq 832(%rsp), %rsi + leaq TAB+7*128(%rsp), %rdi + leaq TAB+3*128(%rsp), %rsi callq edwards25519_scalarmuldouble_epdouble // Handle the initialization, starting the loop counter at i = 252 @@ -636,7 +645,7 @@ edwards25519_scalarmuldouble_standard: // Index for btable entry... - movq 56(%rsp), %rax + movq BSCALAR+24(%rsp), %rax shrq $60, %rax movq %rax, bf @@ -872,22 +881,22 @@ edwards25519_scalarmuldouble_standard: movq 88(%rbp), %rsi cmovzq %rsi, %r15 - movq %rax, 352(%rsp) - movq %rbx, 360(%rsp) - movq %rcx, 368(%rsp) - movq %rdx, 376(%rsp) - movq %r8, 384(%rsp) - movq %r9, 392(%rsp) - movq %r10, 400(%rsp) - movq %r11, 408(%rsp) - movq %r12, 416(%rsp) - movq %r13, 424(%rsp) - movq %r14, 432(%rsp) - movq %r15, 440(%rsp) + movq %rax, BTABENT(%rsp) + movq %rbx, BTABENT+8(%rsp) + movq %rcx, BTABENT+16(%rsp) + movq %rdx, BTABENT+24(%rsp) + movq %r8, BTABENT+32(%rsp) + movq %r9, BTABENT+40(%rsp) + movq %r10, BTABENT+48(%rsp) + movq %r11, BTABENT+56(%rsp) + movq %r12, BTABENT+64(%rsp) + movq %r13, BTABENT+72(%rsp) + movq %r14, BTABENT+80(%rsp) + movq %r15, BTABENT+88(%rsp) // Index for table entry... - movq 24(%rsp), %rax + movq SCALAR+24(%rsp), %rax shrq $60, %rax movq %rax, bf @@ -903,7 +912,7 @@ edwards25519_scalarmuldouble_standard: xorl %r10d, %r10d xorl %r11d, %r11d - leaq 480(%rsp), %rbp + leaq TAB+32(%rsp), %rbp cmpq $1, bf movq (%rbp), %rsi @@ -1056,18 +1065,18 @@ edwards25519_scalarmuldouble_standard: movq 56(%rbp), %rsi cmovzq %rsi, %r11 - movq %rax, 256(%rsp) - movq %rbx, 264(%rsp) - movq %rcx, 272(%rsp) - movq %rdx, 280(%rsp) - movq %r8, 288(%rsp) - movq %r9, 296(%rsp) - movq %r10, 304(%rsp) - movq %r11, 312(%rsp) + movq %rax, TABENT+32(%rsp) + movq %rbx, TABENT+40(%rsp) + movq %rcx, TABENT+48(%rsp) + movq %rdx, TABENT+56(%rsp) + movq %r8, TABENT+64(%rsp) + movq %r9, TABENT+72(%rsp) + movq %r10, TABENT+80(%rsp) + movq %r11, TABENT+88(%rsp) // ...followed by the X and W fields - leaq 448(%rsp), %rbp + leaq TAB(%rsp), %rbp xorl %eax, %eax xorl %ebx, %ebx @@ -1229,20 +1238,20 @@ edwards25519_scalarmuldouble_standard: movq 120(%rbp), %rsi cmovzq %rsi, %r11 - movq %rax, 224(%rsp) - movq %rbx, 232(%rsp) - movq %rcx, 240(%rsp) - movq %rdx, 248(%rsp) - movq %r8, 320(%rsp) - movq %r9, 328(%rsp) - movq %r10, 336(%rsp) - movq %r11, 344(%rsp) + movq %rax, TABENT(%rsp) + movq %rbx, TABENT+8(%rsp) + movq %rcx, TABENT+16(%rsp) + movq %rdx, TABENT+24(%rsp) + movq %r8, TABENT+96(%rsp) + movq %r9, TABENT+104(%rsp) + movq %r10, TABENT+112(%rsp) + movq %r11, TABENT+120(%rsp) // Add those elements to initialize the accumulator for bit position 252 - leaq 96(%rsp), %rdi - leaq 224(%rsp), %rsi - leaq 352(%rsp), %rbp + leaq ACC(%rsp), %rdi + leaq TABENT(%rsp), %rsi + leaq BTABENT(%rsp), %rbp callq edwards25519_scalarmuldouble_pepadd // Main loop with acc = [scalar/2^i] * point + [bscalar/2^i] * basepoint @@ -1256,8 +1265,8 @@ edwards25519_scalarmuldouble_loop: // Double to acc' = 2 * acc - leaq 96(%rsp), %rdi - leaq 96(%rsp), %rsi + leaq ACC(%rsp), %rdi + leaq ACC(%rsp), %rsi callq edwards25519_scalarmuldouble_pdouble // Get btable entry, first getting the adjusted bitfield... @@ -1528,26 +1537,26 @@ edwards25519_scalarmuldouble_loop: movq %rax, %rsi cmovnzq %r8, %rsi cmovnzq %rax, %r8 - movq %rsi, 352(%rsp) - movq %r8, 384(%rsp) + movq %rsi, BTABENT(%rsp) + movq %r8, BTABENT+32(%rsp) movq %rbx, %rsi cmovnzq %r9, %rsi cmovnzq %rbx, %r9 - movq %rsi, 360(%rsp) - movq %r9, 392(%rsp) + movq %rsi, BTABENT+8(%rsp) + movq %r9, BTABENT+40(%rsp) movq %rcx, %rsi cmovnzq %r10, %rsi cmovnzq %rcx, %r10 - movq %rsi, 368(%rsp) - movq %r10, 400(%rsp) + movq %rsi, BTABENT+16(%rsp) + movq %r10, BTABENT+48(%rsp) movq %rdx, %rsi cmovnzq %r11, %rsi cmovnzq %rdx, %r11 - movq %rsi, 376(%rsp) - movq %r11, 408(%rsp) + movq %rsi, BTABENT+24(%rsp) + movq %r11, BTABENT+56(%rsp) xorq %rdi, %r12 xorq %rdi, %r13 @@ -1558,10 +1567,10 @@ edwards25519_scalarmuldouble_loop: sbbq $0, %r13 sbbq $0, %r14 sbbq $0, %r15 - movq %r12, 416(%rsp) - movq %r13, 424(%rsp) - movq %r14, 432(%rsp) - movq %r15, 440(%rsp) + movq %r12, BTABENT+64(%rsp) + movq %r13, BTABENT+72(%rsp) + movq %r14, BTABENT+80(%rsp) + movq %r15, BTABENT+88(%rsp) // Get table entry, first getting the adjusted bitfield... @@ -1592,7 +1601,7 @@ edwards25519_scalarmuldouble_loop: xorl %r10d, %r10d xorl %r11d, %r11d - leaq 480(%rsp), %rbp + leaq TAB+32(%rsp), %rbp cmpq $1, bf movq (%rbp), %rsi @@ -1745,18 +1754,18 @@ edwards25519_scalarmuldouble_loop: movq 56(%rbp), %rsi cmovzq %rsi, %r11 - movq %rax, 256(%rsp) - movq %rbx, 264(%rsp) - movq %rcx, 272(%rsp) - movq %rdx, 280(%rsp) - movq %r8, 288(%rsp) - movq %r9, 296(%rsp) - movq %r10, 304(%rsp) - movq %r11, 312(%rsp) + movq %rax, TABENT+32(%rsp) + movq %rbx, TABENT+40(%rsp) + movq %rcx, TABENT+48(%rsp) + movq %rdx, TABENT+56(%rsp) + movq %r8, TABENT+64(%rsp) + movq %r9, TABENT+72(%rsp) + movq %r10, TABENT+80(%rsp) + movq %r11, TABENT+88(%rsp) // Now do the X and W fields... - leaq 448(%rsp), %rbp + leaq TAB(%rsp), %rbp xorl %eax, %eax xorl %ebx, %ebx @@ -1950,51 +1959,51 @@ edwards25519_scalarmuldouble_loop: sbbq $0, %rcx sbbq $0, %rdx - movq %rax, 224(%rsp) - movq %rbx, 232(%rsp) - movq %rcx, 240(%rsp) - movq %rdx, 248(%rsp) + movq %rax, TABENT(%rsp) + movq %rbx, TABENT+8(%rsp) + movq %rcx, TABENT+16(%rsp) + movq %rdx, TABENT+24(%rsp) subq %rdi, %r8 sbbq $0, %r9 sbbq $0, %r10 sbbq $0, %r11 - movq %r8, 320(%rsp) - movq %r9, 328(%rsp) - movq %r10, 336(%rsp) - movq %r11, 344(%rsp) + movq %r8, TABENT+96(%rsp) + movq %r9, TABENT+104(%rsp) + movq %r10, TABENT+112(%rsp) + movq %r11, TABENT+120(%rsp) // Double to acc' = 4 * acc - leaq 96(%rsp), %rdi - leaq 96(%rsp), %rsi + leaq ACC(%rsp), %rdi + leaq ACC(%rsp), %rsi callq edwards25519_scalarmuldouble_pdouble // Add tabent := tabent + btabent - leaq 224(%rsp), %rdi - leaq 224(%rsp), %rsi - leaq 352(%rsp), %rbp + leaq TABENT(%rsp), %rdi + leaq TABENT(%rsp), %rsi + leaq BTABENT(%rsp), %rbp callq edwards25519_scalarmuldouble_pepadd // Double to acc' = 8 * acc - leaq 96(%rsp), %rdi - leaq 96(%rsp), %rsi + leaq ACC(%rsp), %rdi + leaq ACC(%rsp), %rsi callq edwards25519_scalarmuldouble_pdouble // Double to acc' = 16 * acc - leaq 96(%rsp), %rdi - leaq 96(%rsp), %rsi + leaq ACC(%rsp), %rdi + leaq ACC(%rsp), %rsi callq edwards25519_scalarmuldouble_epdouble // Add table entry, acc := acc + tabent - leaq 96(%rsp), %rdi - leaq 96(%rsp), %rsi - leaq 224(%rsp), %rbp + leaq ACC(%rsp), %rdi + leaq ACC(%rsp), %rsi + leaq TABENT(%rsp), %rbp callq edwards25519_scalarmuldouble_epadd // Loop down @@ -2003,423 +2012,1375 @@ edwards25519_scalarmuldouble_loop: testq %rax, %rax jnz edwards25519_scalarmuldouble_loop -// Modular inverse setup +// Prepare to call the modular inverse function to get tab = 1/z - movq $4, %rdi - leaq 224(%rsp), %rsi - leaq 160(%rsp), %rdx - leaq edwards25519_scalarmuldouble_p25519(%rip), %rcx - leaq 352(%rsp), %r8 + leaq TAB(%rsp), %rdi + leaq ACC+64(%rsp), %rsi -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "x86/generic/bignum_modinv.S". Note -// that the stack it uses for its own temporaries is 80 bytes so it -// only overwrites local variables that are no longer needed. +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "x86/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 208 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, tab and acc. - movq %rsi, 0x40(%rsp) - movq %r8, 0x38(%rsp) - movq %rcx, 0x48(%rsp) - leaq (%r8,%rdi,8), %r10 - movq %r10, 0x30(%rsp) - leaq (%r10,%rdi,8), %r15 - xorq %r11, %r11 - xorq %r9, %r9 -edwards25519_scalarmuldouble_copyloop: - movq (%rdx,%r9,8), %rax - movq (%rcx,%r9,8), %rbx - movq %rax, (%r10,%r9,8) - movq %rbx, (%r15,%r9,8) - movq %rbx, (%r8,%r9,8) - movq %r11, (%rsi,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmuldouble_copyloop - movq (%r8), %rax - movq %rax, %rbx - decq %rbx - movq %rbx, (%r8) - movq %rax, %rbp - movq %rax, %r12 - shlq $0x2, %rbp - subq %rbp, %r12 - xorq $0x2, %r12 - movq %r12, %rbp - imulq %rax, %rbp - movl $0x2, %eax - addq %rbp, %rax - addq $0x1, %rbp - imulq %rax, %r12 - imulq %rbp, %rbp - movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - imulq %rbp, %rbp - movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - imulq %rbp, %rbp + movq %rdi, 0xc0(%rsp) + xorl %eax, %eax + leaq -0x13(%rax), %rcx + notq %rax + movq %rcx, (%rsp) + movq %rax, 0x8(%rsp) + movq %rax, 0x10(%rsp) + btr $0x3f, %rax + movq %rax, 0x18(%rsp) + movq (%rsi), %rdx + movq 0x8(%rsi), %rcx + movq 0x10(%rsi), %r8 + movq 0x18(%rsi), %r9 movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - movq %r12, 0x28(%rsp) - movq %rdi, %rax - shlq $0x7, %rax - movq %rax, 0x20(%rsp) -edwards25519_scalarmuldouble_outerloop: - movq 0x20(%rsp), %r13 - addq $0x3f, %r13 - shrq $0x6, %r13 - cmpq %rdi, %r13 - cmovaeq %rdi, %r13 - xorq %r12, %r12 - xorq %r14, %r14 - xorq %rbp, %rbp - xorq %rsi, %rsi - xorq %r11, %r11 - movq 0x30(%rsp), %r8 - leaq (%r8,%rdi,8), %r15 - xorq %r9, %r9 -edwards25519_scalarmuldouble_toploop: - movq (%r8,%r9,8), %rbx - movq (%r15,%r9,8), %rcx - movq %r11, %r10 - andq %r12, %r10 - andq %rbp, %r11 - movq %rbx, %rax - orq %rcx, %rax - negq %rax - cmovbq %r10, %r14 - cmovbq %r11, %rsi - cmovbq %rbx, %r12 - cmovbq %rcx, %rbp - sbbq %r11, %r11 - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmuldouble_toploop - movq %r12, %rax - orq %rbp, %rax - bsrq %rax, %rcx - xorq $0x3f, %rcx - shldq %cl, %r14, %r12 - shldq %cl, %rsi, %rbp - movq (%r8), %rax - movq %rax, %r14 - movq (%r15), %rax - movq %rax, %rsi - movl $0x1, %r10d - movl $0x0, %r11d - movl $0x0, %ecx - movl $0x1, %edx - movl $0x3a, %r9d - movq %rdi, 0x8(%rsp) - movq %r13, 0x10(%rsp) - movq %r8, (%rsp) - movq %r15, 0x18(%rsp) -edwards25519_scalarmuldouble_innerloop: + xorl %r10d, %r10d + bts $0x3f, %r9 + adcq %r10, %rax + imulq $0x13, %rax, %rax + addq %rax, %rdx + adcq %r10, %rcx + adcq %r10, %r8 + adcq %r10, %r9 + movl $0x13, %eax + cmovbq %r10, %rax + subq %rax, %rdx + sbbq %r10, %rcx + sbbq %r10, %r8 + sbbq %r10, %r9 + btr $0x3f, %r9 + movq %rdx, 0x20(%rsp) + movq %rcx, 0x28(%rsp) + movq %r8, 0x30(%rsp) + movq %r9, 0x38(%rsp) xorl %eax, %eax + movq %rax, 0x40(%rsp) + movq %rax, 0x48(%rsp) + movq %rax, 0x50(%rsp) + movq %rax, 0x58(%rsp) + movabsq $0xa0f99e2375022099, %rax + movq %rax, 0x60(%rsp) + movabsq $0xa8c68f3f1d132595, %rax + movq %rax, 0x68(%rsp) + movabsq $0x6c6c893805ac5242, %rax + movq %rax, 0x70(%rsp) + movabsq $0x276508b241770615, %rax + movq %rax, 0x78(%rsp) + movq $0xa, 0x90(%rsp) + movq $0x1, 0x98(%rsp) + jmp curve25519_x25519_midloop +curve25519_x25519_inverseloop: + movq %r8, %r9 + sarq $0x3f, %r9 + xorq %r9, %r8 + subq %r9, %r8 + movq %r10, %r11 + sarq $0x3f, %r11 + xorq %r11, %r10 + subq %r11, %r10 + movq %r12, %r13 + sarq $0x3f, %r13 + xorq %r13, %r12 + subq %r13, %r12 + movq %r14, %r15 + sarq $0x3f, %r15 + xorq %r15, %r14 + subq %r15, %r14 + movq %r8, %rax + andq %r9, %rax + movq %r10, %rdi + andq %r11, %rdi + addq %rax, %rdi + movq %rdi, 0x80(%rsp) + movq %r12, %rax + andq %r13, %rax + movq %r14, %rsi + andq %r15, %rsi + addq %rax, %rsi + movq %rsi, 0x88(%rsp) xorl %ebx, %ebx - xorq %r8, %r8 - xorq %r15, %r15 - btq $0x0, %r14 - cmovbq %rbp, %rax - cmovbq %rsi, %rbx - cmovbq %rcx, %r8 - cmovbq %rdx, %r15 - movq %r14, %r13 - subq %rbx, %r14 - subq %r13, %rbx - movq %r12, %rdi - subq %rax, %rdi - cmovbq %r12, %rbp - leaq -0x1(%rdi), %r12 - cmovbq %rbx, %r14 - cmovbq %r13, %rsi - notq %r12 - cmovbq %r10, %rcx - cmovbq %r11, %rdx - cmovaeq %rdi, %r12 - shrq $1, %r14 - addq %r8, %r10 - addq %r15, %r11 - shrq $1, %r12 - addq %rcx, %rcx - addq %rdx, %rdx - decq %r9 - jne edwards25519_scalarmuldouble_innerloop - movq 0x8(%rsp), %rdi - movq 0x10(%rsp), %r13 - movq (%rsp), %r8 - movq 0x18(%rsp), %r15 - movq %r10, (%rsp) - movq %r11, 0x8(%rsp) - movq %rcx, 0x10(%rsp) - movq %rdx, 0x18(%rsp) - movq 0x38(%rsp), %r8 - movq 0x40(%rsp), %r15 - xorq %r14, %r14 - xorq %rsi, %rsi - xorq %r10, %r10 - xorq %r11, %r11 - xorq %r9, %r9 -edwards25519_scalarmuldouble_congloop: - movq (%r8,%r9,8), %rcx movq (%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq $0x0, %rdx - movq %rdx, %r12 - movq 0x10(%rsp), %rax - mulq %rcx + xorq %r9, %rax + mulq %r8 + addq %rax, %rdi + adcq %rdx, %rbx + movq 0x20(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rdi + adcq %rdx, %rbx + xorl %ebp, %ebp + movq (%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rsi + adcq %rdx, %rbp + movq 0x20(%rsp), %rax + xorq %r15, %rax + mulq %r14 addq %rax, %rsi - adcq $0x0, %rdx - movq %rdx, %rbp - movq (%r15,%r9,8), %rcx + adcq %rdx, %rbp + xorl %ecx, %ecx movq 0x8(%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq %rdx, %r12 - shrdq $0x3a, %r14, %r10 - movq %r10, (%r8,%r9,8) - movq %r14, %r10 - movq %r12, %r14 + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x28(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + shrdq $0x3b, %rbx, %rdi + movq %rdi, (%rsp) + xorl %edi, %edi + movq 0x8(%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rbp + adcq %rdx, %rdi + movq 0x28(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rdi + shrdq $0x3b, %rbp, %rsi + movq %rsi, 0x20(%rsp) + xorl %esi, %esi + movq 0x10(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rsi + movq 0x30(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rcx + adcq %rdx, %rsi + shrdq $0x3b, %rcx, %rbx + movq %rbx, 0x8(%rsp) + xorl %ebx, %ebx + movq 0x10(%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rdi + adcq %rdx, %rbx + movq 0x30(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rdi + adcq %rdx, %rbx + shrdq $0x3b, %rdi, %rbp + movq %rbp, 0x28(%rsp) movq 0x18(%rsp), %rax - mulq %rcx + xorq %r9, %rax + movq %rax, %rbp + sarq $0x3f, %rbp + andq %r8, %rbp + negq %rbp + mulq %r8 addq %rax, %rsi adcq %rdx, %rbp - shrdq $0x3a, %rsi, %r11 - movq %r11, (%r15,%r9,8) - movq %rsi, %r11 - movq %rbp, %rsi - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmuldouble_congloop - shldq $0x6, %r10, %r14 - shldq $0x6, %r11, %rsi - movq 0x48(%rsp), %r15 - movq (%r8), %rbx - movq 0x28(%rsp), %r12 - imulq %rbx, %r12 - movq (%r15), %rax + movq 0x38(%rsp), %rax + xorq %r11, %rax + movq %rax, %rdx + sarq $0x3f, %rdx + andq %r10, %rdx + subq %rdx, %rbp + mulq %r10 + addq %rax, %rsi + adcq %rdx, %rbp + shrdq $0x3b, %rsi, %rcx + movq %rcx, 0x10(%rsp) + shrdq $0x3b, %rbp, %rsi + movq 0x18(%rsp), %rax + movq %rsi, 0x18(%rsp) + xorq %r13, %rax + movq %rax, %rsi + sarq $0x3f, %rsi + andq %r12, %rsi + negq %rsi mulq %r12 - addq %rbx, %rax - movq %rdx, %r10 - movl $0x1, %r9d - movq %rdi, %rcx - decq %rcx - je edwards25519_scalarmuldouble_wmontend -edwards25519_scalarmuldouble_wmontloop: - adcq (%r8,%r9,8), %r10 - sbbq %rbx, %rbx - movq (%r15,%r9,8), %rax + addq %rax, %rbx + adcq %rdx, %rsi + movq 0x38(%rsp), %rax + xorq %r15, %rax + movq %rax, %rdx + sarq $0x3f, %rdx + andq %r14, %rdx + subq %rdx, %rsi + mulq %r14 + addq %rax, %rbx + adcq %rdx, %rsi + shrdq $0x3b, %rbx, %rdi + movq %rdi, 0x30(%rsp) + shrdq $0x3b, %rsi, %rbx + movq %rbx, 0x38(%rsp) + movq 0x80(%rsp), %rbx + movq 0x88(%rsp), %rbp + xorl %ecx, %ecx + movq 0x40(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x60(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + xorl %esi, %esi + movq 0x40(%rsp), %rax + xorq %r13, %rax mulq %r12 - subq %rbx, %rdx - addq %r10, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %rdx, %r10 - incq %r9 - decq %rcx - jne edwards25519_scalarmuldouble_wmontloop -edwards25519_scalarmuldouble_wmontend: - adcq %r14, %r10 - movq %r10, -0x8(%r8,%rdi,8) - sbbq %r10, %r10 - negq %r10 - movq %rdi, %rcx - xorq %r9, %r9 -edwards25519_scalarmuldouble_wcmploop: - movq (%r8,%r9,8), %rax - sbbq (%r15,%r9,8), %rax - incq %r9 - decq %rcx - jne edwards25519_scalarmuldouble_wcmploop - sbbq $0x0, %r10 - sbbq %r10, %r10 - notq %r10 - xorq %rcx, %rcx - xorq %r9, %r9 -edwards25519_scalarmuldouble_wcorrloop: - movq (%r8,%r9,8), %rax - movq (%r15,%r9,8), %rbx - andq %r10, %rbx - negq %rcx - sbbq %rbx, %rax - sbbq %rcx, %rcx - movq %rax, (%r8,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmuldouble_wcorrloop + movq %rbx, 0x40(%rsp) + addq %rax, %rbp + adcq %rdx, %rsi + movq 0x60(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rsi + movq %rbp, 0x60(%rsp) + xorl %ebx, %ebx + movq 0x48(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rbx + movq 0x68(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rcx + adcq %rdx, %rbx + xorl %ebp, %ebp + movq 0x48(%rsp), %rax + xorq %r13, %rax + mulq %r12 + movq %rcx, 0x48(%rsp) + addq %rax, %rsi + adcq %rdx, %rbp + movq 0x68(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rsi + adcq %rdx, %rbp + movq %rsi, 0x68(%rsp) + xorl %ecx, %ecx + movq 0x50(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x70(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + xorl %esi, %esi + movq 0x50(%rsp), %rax + xorq %r13, %rax + mulq %r12 + movq %rbx, 0x50(%rsp) + addq %rax, %rbp + adcq %rdx, %rsi + movq 0x70(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rsi + movq %rbp, 0x70(%rsp) + movq 0x58(%rsp), %rax + xorq %r9, %rax + movq %r9, %rbx + andq %r8, %rbx + negq %rbx + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rbx + movq 0x78(%rsp), %rax + xorq %r11, %rax + movq %r11, %rdx + andq %r10, %rdx + subq %rdx, %rbx + mulq %r10 + addq %rax, %rcx + adcq %rbx, %rdx + movq %rdx, %rbx + shldq $0x1, %rcx, %rdx + sarq $0x3f, %rbx + addq %rbx, %rdx + movl $0x13, %eax + imulq %rdx movq 0x40(%rsp), %r8 - movq (%r8), %rbx - movq 0x28(%rsp), %rbp - imulq %rbx, %rbp - movq (%r15), %rax - mulq %rbp - addq %rbx, %rax - movq %rdx, %r11 - movl $0x1, %r9d - movq %rdi, %rcx - decq %rcx - je edwards25519_scalarmuldouble_zmontend -edwards25519_scalarmuldouble_zmontloop: - adcq (%r8,%r9,8), %r11 - sbbq %rbx, %rbx - movq (%r15,%r9,8), %rax - mulq %rbp - subq %rbx, %rdx - addq %r11, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %rdx, %r11 - incq %r9 - decq %rcx - jne edwards25519_scalarmuldouble_zmontloop -edwards25519_scalarmuldouble_zmontend: - adcq %rsi, %r11 - movq %r11, -0x8(%r8,%rdi,8) - sbbq %r11, %r11 - negq %r11 - movq %rdi, %rcx - xorq %r9, %r9 -edwards25519_scalarmuldouble_zcmploop: - movq (%r8,%r9,8), %rax - sbbq (%r15,%r9,8), %rax - incq %r9 - decq %rcx - jne edwards25519_scalarmuldouble_zcmploop - sbbq $0x0, %r11 - sbbq %r11, %r11 - notq %r11 - xorq %rcx, %rcx - xorq %r9, %r9 -edwards25519_scalarmuldouble_zcorrloop: - movq (%r8,%r9,8), %rax - movq (%r15,%r9,8), %rbx - andq %r11, %rbx + addq %rax, %r8 + movq %r8, 0x40(%rsp) + movq 0x48(%rsp), %r8 + adcq %rdx, %r8 + movq %r8, 0x48(%rsp) + movq 0x50(%rsp), %r8 + adcq %rbx, %r8 + movq %r8, 0x50(%rsp) + adcq %rbx, %rcx + shlq $0x3f, %rax + addq %rax, %rcx + movq 0x58(%rsp), %rax + movq %rcx, 0x58(%rsp) + xorq %r13, %rax + movq %r13, %rcx + andq %r12, %rcx negq %rcx - sbbq %rbx, %rax - sbbq %rcx, %rcx - movq %rax, (%r8,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmuldouble_zcorrloop - movq 0x30(%rsp), %r8 - leaq (%r8,%rdi,8), %r15 - xorq %r9, %r9 - xorq %r12, %r12 - xorq %r14, %r14 - xorq %rbp, %rbp - xorq %rsi, %rsi -edwards25519_scalarmuldouble_crossloop: - movq (%r8,%r9,8), %rcx - movq (%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq $0x0, %rdx - movq %rdx, %r10 - movq 0x10(%rsp), %rax - mulq %rcx + mulq %r12 addq %rax, %rsi - adcq $0x0, %rdx - movq %rdx, %r11 - movq (%r15,%r9,8), %rcx - movq 0x8(%rsp), %rax - mulq %rcx - subq %r12, %rdx - subq %rax, %r14 - sbbq %rdx, %r10 - sbbq %r12, %r12 - movq %r14, (%r8,%r9,8) - movq %r10, %r14 - movq 0x18(%rsp), %rax - mulq %rcx - subq %rbp, %rdx + adcq %rdx, %rcx + movq 0x78(%rsp), %rax + xorq %r15, %rax + movq %r15, %rdx + andq %r14, %rdx + subq %rdx, %rcx + mulq %r14 + addq %rax, %rsi + adcq %rcx, %rdx + movq %rdx, %rcx + shldq $0x1, %rsi, %rdx + sarq $0x3f, %rcx + movl $0x13, %eax + addq %rcx, %rdx + imulq %rdx + movq 0x60(%rsp), %r8 + addq %rax, %r8 + movq %r8, 0x60(%rsp) + movq 0x68(%rsp), %r8 + adcq %rdx, %r8 + movq %r8, 0x68(%rsp) + movq 0x70(%rsp), %r8 + adcq %rcx, %r8 + movq %r8, 0x70(%rsp) + adcq %rcx, %rsi + shlq $0x3f, %rax + addq %rax, %rsi + movq %rsi, 0x78(%rsp) +curve25519_x25519_midloop: + movq 0x98(%rsp), %rsi + movq (%rsp), %rdx + movq 0x20(%rsp), %rcx + movq %rdx, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq $0xfffffffffffffffe, %rax + xorl %ebp, %ebp + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 subq %rax, %rsi - sbbq %rdx, %r11 - sbbq %rbp, %rbp - movq %rsi, (%r15,%r9,8) - movq %r11, %rsi - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmuldouble_crossloop - xorq %r9, %r9 - movq %r12, %r10 - movq %rbp, %r11 - xorq %r12, %r14 - xorq %rbp, %rsi -edwards25519_scalarmuldouble_optnegloop: - movq (%r8,%r9,8), %rax - xorq %r12, %rax - negq %r10 - adcq $0x0, %rax - sbbq %r10, %r10 - movq %rax, (%r8,%r9,8) - movq (%r15,%r9,8), %rax - xorq %rbp, %rax - negq %r11 - adcq $0x0, %rax - sbbq %r11, %r11 - movq %rax, (%r15,%r9,8) - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmuldouble_optnegloop - subq %r10, %r14 - subq %r11, %rsi - movq %r13, %r9 -edwards25519_scalarmuldouble_shiftloop: - movq -0x8(%r8,%r9,8), %rax - movq %rax, %r10 - shrdq $0x3a, %r14, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %r10, %r14 - movq -0x8(%r15,%r9,8), %rax - movq %rax, %r11 - shrdq $0x3a, %rsi, %rax - movq %rax, -0x8(%r15,%r9,8) - movq %r11, %rsi - decq %r9 - jne edwards25519_scalarmuldouble_shiftloop - notq %rbp - movq 0x48(%rsp), %rcx - movq 0x38(%rsp), %r8 - movq 0x40(%rsp), %r15 - movq %r12, %r10 - movq %rbp, %r11 - xorq %r9, %r9 -edwards25519_scalarmuldouble_fliploop: - movq %rbp, %rdx - movq (%rcx,%r9,8), %rax - andq %rax, %rdx - andq %r12, %rax - movq (%r8,%r9,8), %rbx - xorq %r12, %rbx - negq %r10 - adcq %rbx, %rax - sbbq %r10, %r10 - movq %rax, (%r8,%r9,8) - movq (%r15,%r9,8), %rbx - xorq %rbp, %rbx - negq %r11 - adcq %rbx, %rdx - sbbq %r11, %r11 - movq %rdx, (%r15,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmuldouble_fliploop - subq $0x3a, 0x20(%rsp) - ja edwards25519_scalarmuldouble_outerloop + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %rdx + leaq (%rcx,%rax), %rdi + shlq $0x16, %rdx + shlq $0x16, %rdi + sarq $0x2b, %rdx + sarq $0x2b, %rdi + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %rbx + leaq (%rcx,%rax), %rcx + sarq $0x2a, %rbx + sarq $0x2a, %rcx + movq %rdx, 0xa0(%rsp) + movq %rbx, 0xa8(%rsp) + movq %rdi, 0xb0(%rsp) + movq %rcx, 0xb8(%rsp) + movq (%rsp), %r12 + imulq %r12, %rdi + imulq %rdx, %r12 + movq 0x20(%rsp), %r13 + imulq %r13, %rbx + imulq %rcx, %r13 + addq %rbx, %r12 + addq %rdi, %r13 + sarq $0x14, %r12 + sarq $0x14, %r13 + movq %r12, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + movq %r13, %rcx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq $0xfffffffffffffffe, %rax + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %r8 + leaq (%rcx,%rax), %r10 + shlq $0x16, %r8 + shlq $0x16, %r10 + sarq $0x2b, %r8 + sarq $0x2b, %r10 + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %r15 + leaq (%rcx,%rax), %r11 + sarq $0x2a, %r15 + sarq $0x2a, %r11 + movq %r13, %rbx + movq %r12, %rcx + imulq %r8, %r12 + imulq %r15, %rbx + addq %rbx, %r12 + imulq %r11, %r13 + imulq %r10, %rcx + addq %rcx, %r13 + sarq $0x14, %r12 + sarq $0x14, %r13 + movq %r12, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + movq %r13, %rcx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq 0xa0(%rsp), %rax + imulq %r8, %rax + movq 0xb0(%rsp), %rdx + imulq %r15, %rdx + imulq 0xa8(%rsp), %r8 + imulq 0xb8(%rsp), %r15 + addq %r8, %r15 + leaq (%rax,%rdx), %r9 + movq 0xa0(%rsp), %rax + imulq %r10, %rax + movq 0xb0(%rsp), %rdx + imulq %r11, %rdx + imulq 0xa8(%rsp), %r10 + imulq 0xb8(%rsp), %r11 + addq %r10, %r11 + leaq (%rax,%rdx), %r13 + movq $0xfffffffffffffffe, %rax + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %r8 + leaq (%rcx,%rax), %r12 + shlq $0x15, %r8 + shlq $0x15, %r12 + sarq $0x2b, %r8 + sarq $0x2b, %r12 + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %r10 + leaq (%rcx,%rax), %r14 + sarq $0x2b, %r10 + sarq $0x2b, %r14 + movq %r9, %rax + imulq %r8, %rax + movq %r13, %rdx + imulq %r10, %rdx + imulq %r15, %r8 + imulq %r11, %r10 + addq %r8, %r10 + leaq (%rax,%rdx), %r8 + movq %r9, %rax + imulq %r12, %rax + movq %r13, %rdx + imulq %r14, %rdx + imulq %r15, %r12 + imulq %r11, %r14 + addq %r12, %r14 + leaq (%rax,%rdx), %r12 + movq %rsi, 0x98(%rsp) + decq 0x90(%rsp) + jne curve25519_x25519_inverseloop + movq (%rsp), %rax + movq 0x20(%rsp), %rcx + imulq %r8, %rax + imulq %r10, %rcx + addq %rcx, %rax + sarq $0x3f, %rax + movq %r8, %r9 + sarq $0x3f, %r9 + xorq %r9, %r8 + subq %r9, %r8 + xorq %rax, %r9 + movq %r10, %r11 + sarq $0x3f, %r11 + xorq %r11, %r10 + subq %r11, %r10 + xorq %rax, %r11 + movq %r12, %r13 + sarq $0x3f, %r13 + xorq %r13, %r12 + subq %r13, %r12 + xorq %rax, %r13 + movq %r14, %r15 + sarq $0x3f, %r15 + xorq %r15, %r14 + subq %r15, %r14 + xorq %rax, %r15 + movq %r8, %rax + andq %r9, %rax + movq %r10, %r12 + andq %r11, %r12 + addq %rax, %r12 + xorl %r13d, %r13d + movq 0x40(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r12 + adcq %rdx, %r13 + movq 0x60(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r12 + adcq %rdx, %r13 + xorl %r14d, %r14d + movq 0x48(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r13 + adcq %rdx, %r14 + movq 0x68(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r13 + adcq %rdx, %r14 + xorl %r15d, %r15d + movq 0x50(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r14 + adcq %rdx, %r15 + movq 0x70(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r14 + adcq %rdx, %r15 + movq 0x58(%rsp), %rax + xorq %r9, %rax + andq %r8, %r9 + negq %r9 + mulq %r8 + addq %rax, %r15 + adcq %rdx, %r9 + movq 0x78(%rsp), %rax + xorq %r11, %rax + movq %r11, %rdx + andq %r10, %rdx + subq %rdx, %r9 + mulq %r10 + addq %rax, %r15 + adcq %rdx, %r9 + movq %r9, %rax + shldq $0x1, %r15, %rax + sarq $0x3f, %r9 + movl $0x13, %ebx + leaq 0x1(%rax,%r9,1), %rax + imulq %rbx + xorl %ebp, %ebp + addq %rax, %r12 + adcq %rdx, %r13 + adcq %r9, %r14 + adcq %r9, %r15 + shlq $0x3f, %rax + addq %rax, %r15 + cmovns %rbp, %rbx + subq %rbx, %r12 + sbbq %rbp, %r13 + sbbq %rbp, %r14 + sbbq %rbp, %r15 + btr $0x3f, %r15 + movq 0xc0(%rsp), %rdi + movq %r12, (%rdi) + movq %r13, 0x8(%rdi) + movq %r14, 0x10(%rdi) + movq %r15, 0x18(%rdi) // Store result movq res, %rdi - leaq 96(%rsp), %rsi - leaq 224(%rsp), %rbp + leaq ACC(%rsp), %rsi + leaq TAB(%rsp), %rbp mul_p25519(x_0,x_1,x_2) movq res, %rdi addq $32, %rdi - leaq 128(%rsp), %rsi - leaq 224(%rsp), %rbp + leaq ACC+32(%rsp), %rsi + leaq TAB(%rsp), %rbp mul_p25519(x_0,x_1,x_2) // Restore stack and registers @@ -2528,14 +3489,6 @@ edwards25519_scalarmuldouble_pepadd: // .section .rodata // **************************************************************************** -// The modulus p_25519 = 2^255 - 19, for the modular inverse - -edwards25519_scalarmuldouble_p25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // Precomputed table of multiples of generator for edwards25519 // all in precomputed extended-projective (y-x,x+y,2*d*x*y) triples. diff --git a/x86_att/curve25519/edwards25519_scalarmuldouble_alt.S b/x86_att/curve25519/edwards25519_scalarmuldouble_alt.S index 7f3dffa3..e17d10b4 100644 --- a/x86_att/curve25519/edwards25519_scalarmuldouble_alt.S +++ b/x86_att/curve25519/edwards25519_scalarmuldouble_alt.S @@ -42,24 +42,33 @@ #define scalar (0*NUMSIZE)(%rsp) #define bscalar (1*NUMSIZE)(%rsp) -#define acc (3*NUMSIZE)(%rsp) +#define tabent (2*NUMSIZE)(%rsp) +#define btabent (6*NUMSIZE)(%rsp) -#define tabent (7*NUMSIZE)(%rsp) -#define btabent (11*NUMSIZE)(%rsp) +#define acc (9*NUMSIZE)(%rsp) -#define tab (14*NUMSIZE)(%rsp) +#define tab (13*NUMSIZE)(%rsp) // Additional variables kept on the stack -#define bf 2*NUMSIZE(%rsp) -#define cf 2*NUMSIZE+8(%rsp) -#define i 2*NUMSIZE+16(%rsp) -#define res 2*NUMSIZE+24(%rsp) +#define bf 45*NUMSIZE(%rsp) +#define cf 45*NUMSIZE+8(%rsp) +#define i 45*NUMSIZE+16(%rsp) +#define res 45*NUMSIZE+24(%rsp) // Total size to reserve on the stack (excluding local subroutines) #define NSPACE (46*NUMSIZE) +// Syntactic variants to make x86_att forms easier to generate + +#define SCALAR (0*NUMSIZE) +#define BSCALAR (1*NUMSIZE) +#define TABENT (2*NUMSIZE) +#define BTABENT (6*NUMSIZE) +#define ACC (9*NUMSIZE) +#define TAB (13*NUMSIZE) + // Sub-references used in local subroutines with local stack #define x_0 0(%rdi) @@ -610,10 +619,10 @@ edwards25519_scalarmuldouble_alt_standard: adcq %r13, %r9 adcq %r14, %r10 adcq %r15, %r11 - movq %r8, 32(%rsp) - movq %r9, 40(%rsp) - movq %r10, 48(%rsp) - movq %r11, 56(%rsp) + movq %r8, BSCALAR(%rsp) + movq %r9, BSCALAR+8(%rsp) + movq %r10, BSCALAR+16(%rsp) + movq %r11, BSCALAR+24(%rsp) movq (%rsi), %r8 movq 8(%rsi), %r9 @@ -634,10 +643,10 @@ edwards25519_scalarmuldouble_alt_standard: adcq %r13, %r9 adcq %r14, %r10 adcq %r15, %r11 - movq %r8, (%rsp) - movq %r9, 8(%rsp) - movq %r10, 16(%rsp) - movq %r11, 24(%rsp) + movq %r8, SCALAR(%rsp) + movq %r9, SCALAR+8(%rsp) + movq %r10, SCALAR+16(%rsp) + movq %r11, SCALAR+24(%rsp) // Create table of multiples 1..8 of the general input point at "tab". // Reduce the input coordinates x and y modulo 2^256 - 38 first, for the @@ -658,13 +667,13 @@ edwards25519_scalarmuldouble_alt_standard: adcq %r10, %rcx adcq %r11, %rsi cmovncq %r8, %rax - movq %rax, 448(%rsp) + movq %rax, TAB(%rsp) cmovncq %r9, %rbx - movq %rbx, 456(%rsp) + movq %rbx, TAB+8(%rsp) cmovncq %r10, %rcx - movq %rcx, 464(%rsp) + movq %rcx, TAB+16(%rsp) cmovncq %r11, %rsi - movq %rsi, 472(%rsp) + movq %rsi, TAB+24(%rsp) movl $38, %eax movq 32(%rdx), %r8 @@ -679,69 +688,69 @@ edwards25519_scalarmuldouble_alt_standard: adcq %r10, %rcx adcq %r11, %rsi cmovncq %r8, %rax - movq %rax, 480(%rsp) + movq %rax, TAB+32(%rsp) cmovncq %r9, %rbx - movq %rbx, 488(%rsp) + movq %rbx, TAB+40(%rsp) cmovncq %r10, %rcx - movq %rcx, 496(%rsp) + movq %rcx, TAB+48(%rsp) cmovncq %r11, %rsi - movq %rsi, 504(%rsp) + movq %rsi, TAB+56(%rsp) movl $1, %eax - movq %rax, 512(%rsp) + movq %rax, TAB+64(%rsp) xorl %eax, %eax - movq %rax, 520(%rsp) - movq %rax, 528(%rsp) - movq %rax, 536(%rsp) + movq %rax, TAB+72(%rsp) + movq %rax, TAB+80(%rsp) + movq %rax, TAB+88(%rsp) - leaq 544(%rsp), %rdi - leaq 448(%rsp), %rsi - leaq 480(%rsp), %rbp + leaq TAB+96(%rsp), %rdi + leaq TAB(%rsp), %rsi + leaq TAB+32(%rsp), %rbp mul_4(x_0,x_1,x_2) // Multiple 2 - leaq 576(%rsp), %rdi - leaq 448(%rsp), %rsi + leaq TAB+1*128(%rsp), %rdi + leaq TAB(%rsp), %rsi callq edwards25519_scalarmuldouble_alt_epdouble // Multiple 3 - leaq 704(%rsp), %rdi - leaq 448(%rsp), %rsi - leaq 576(%rsp), %rbp + leaq TAB+2*128(%rsp), %rdi + leaq TAB(%rsp), %rsi + leaq TAB+1*128(%rsp), %rbp callq edwards25519_scalarmuldouble_alt_epadd // Multiple 4 - leaq 832(%rsp), %rdi - leaq 576(%rsp), %rsi + leaq TAB+3*128(%rsp), %rdi + leaq TAB+1*128(%rsp), %rsi callq edwards25519_scalarmuldouble_alt_epdouble // Multiple 5 - leaq 960(%rsp), %rdi - leaq 448(%rsp), %rsi - leaq 832(%rsp), %rbp + leaq TAB+4*128(%rsp), %rdi + leaq TAB(%rsp), %rsi + leaq TAB+3*128(%rsp), %rbp callq edwards25519_scalarmuldouble_alt_epadd // Multiple 6 - leaq 1088(%rsp), %rdi - leaq 704(%rsp), %rsi + leaq TAB+5*128(%rsp), %rdi + leaq TAB+2*128(%rsp), %rsi callq edwards25519_scalarmuldouble_alt_epdouble // Multiple 7 - leaq 1216(%rsp), %rdi - leaq 448(%rsp), %rsi - leaq 1088(%rsp), %rbp + leaq TAB+6*128(%rsp), %rdi + leaq TAB(%rsp), %rsi + leaq TAB+5*128(%rsp), %rbp callq edwards25519_scalarmuldouble_alt_epadd // Multiple 8 - leaq 1344(%rsp), %rdi - leaq 832(%rsp), %rsi + leaq TAB+7*128(%rsp), %rdi + leaq TAB+3*128(%rsp), %rsi callq edwards25519_scalarmuldouble_alt_epdouble // Handle the initialization, starting the loop counter at i = 252 @@ -753,7 +762,7 @@ edwards25519_scalarmuldouble_alt_standard: // Index for btable entry... - movq 56(%rsp), %rax + movq BSCALAR+24(%rsp), %rax shrq $60, %rax movq %rax, bf @@ -989,22 +998,22 @@ edwards25519_scalarmuldouble_alt_standard: movq 88(%rbp), %rsi cmovzq %rsi, %r15 - movq %rax, 352(%rsp) - movq %rbx, 360(%rsp) - movq %rcx, 368(%rsp) - movq %rdx, 376(%rsp) - movq %r8, 384(%rsp) - movq %r9, 392(%rsp) - movq %r10, 400(%rsp) - movq %r11, 408(%rsp) - movq %r12, 416(%rsp) - movq %r13, 424(%rsp) - movq %r14, 432(%rsp) - movq %r15, 440(%rsp) + movq %rax, BTABENT(%rsp) + movq %rbx, BTABENT+8(%rsp) + movq %rcx, BTABENT+16(%rsp) + movq %rdx, BTABENT+24(%rsp) + movq %r8, BTABENT+32(%rsp) + movq %r9, BTABENT+40(%rsp) + movq %r10, BTABENT+48(%rsp) + movq %r11, BTABENT+56(%rsp) + movq %r12, BTABENT+64(%rsp) + movq %r13, BTABENT+72(%rsp) + movq %r14, BTABENT+80(%rsp) + movq %r15, BTABENT+88(%rsp) // Index for table entry... - movq 24(%rsp), %rax + movq SCALAR+24(%rsp), %rax shrq $60, %rax movq %rax, bf @@ -1020,7 +1029,7 @@ edwards25519_scalarmuldouble_alt_standard: xorl %r10d, %r10d xorl %r11d, %r11d - leaq 480(%rsp), %rbp + leaq TAB+32(%rsp), %rbp cmpq $1, bf movq (%rbp), %rsi @@ -1173,18 +1182,18 @@ edwards25519_scalarmuldouble_alt_standard: movq 56(%rbp), %rsi cmovzq %rsi, %r11 - movq %rax, 256(%rsp) - movq %rbx, 264(%rsp) - movq %rcx, 272(%rsp) - movq %rdx, 280(%rsp) - movq %r8, 288(%rsp) - movq %r9, 296(%rsp) - movq %r10, 304(%rsp) - movq %r11, 312(%rsp) + movq %rax, TABENT+32(%rsp) + movq %rbx, TABENT+40(%rsp) + movq %rcx, TABENT+48(%rsp) + movq %rdx, TABENT+56(%rsp) + movq %r8, TABENT+64(%rsp) + movq %r9, TABENT+72(%rsp) + movq %r10, TABENT+80(%rsp) + movq %r11, TABENT+88(%rsp) // ...followed by the X and W fields - leaq 448(%rsp), %rbp + leaq TAB(%rsp), %rbp xorl %eax, %eax xorl %ebx, %ebx @@ -1346,20 +1355,20 @@ edwards25519_scalarmuldouble_alt_standard: movq 120(%rbp), %rsi cmovzq %rsi, %r11 - movq %rax, 224(%rsp) - movq %rbx, 232(%rsp) - movq %rcx, 240(%rsp) - movq %rdx, 248(%rsp) - movq %r8, 320(%rsp) - movq %r9, 328(%rsp) - movq %r10, 336(%rsp) - movq %r11, 344(%rsp) + movq %rax, TABENT(%rsp) + movq %rbx, TABENT+8(%rsp) + movq %rcx, TABENT+16(%rsp) + movq %rdx, TABENT+24(%rsp) + movq %r8, TABENT+96(%rsp) + movq %r9, TABENT+104(%rsp) + movq %r10, TABENT+112(%rsp) + movq %r11, TABENT+120(%rsp) // Add those elements to initialize the accumulator for bit position 252 - leaq 96(%rsp), %rdi - leaq 224(%rsp), %rsi - leaq 352(%rsp), %rbp + leaq ACC(%rsp), %rdi + leaq TABENT(%rsp), %rsi + leaq BTABENT(%rsp), %rbp callq edwards25519_scalarmuldouble_alt_pepadd // Main loop with acc = [scalar/2^i] * point + [bscalar/2^i] * basepoint @@ -1373,8 +1382,8 @@ edwards25519_scalarmuldouble_alt_loop: // Double to acc' = 2 * acc - leaq 96(%rsp), %rdi - leaq 96(%rsp), %rsi + leaq ACC(%rsp), %rdi + leaq ACC(%rsp), %rsi callq edwards25519_scalarmuldouble_alt_pdouble // Get btable entry, first getting the adjusted bitfield... @@ -1645,26 +1654,26 @@ edwards25519_scalarmuldouble_alt_loop: movq %rax, %rsi cmovnzq %r8, %rsi cmovnzq %rax, %r8 - movq %rsi, 352(%rsp) - movq %r8, 384(%rsp) + movq %rsi, BTABENT(%rsp) + movq %r8, BTABENT+32(%rsp) movq %rbx, %rsi cmovnzq %r9, %rsi cmovnzq %rbx, %r9 - movq %rsi, 360(%rsp) - movq %r9, 392(%rsp) + movq %rsi, BTABENT+8(%rsp) + movq %r9, BTABENT+40(%rsp) movq %rcx, %rsi cmovnzq %r10, %rsi cmovnzq %rcx, %r10 - movq %rsi, 368(%rsp) - movq %r10, 400(%rsp) + movq %rsi, BTABENT+16(%rsp) + movq %r10, BTABENT+48(%rsp) movq %rdx, %rsi cmovnzq %r11, %rsi cmovnzq %rdx, %r11 - movq %rsi, 376(%rsp) - movq %r11, 408(%rsp) + movq %rsi, BTABENT+24(%rsp) + movq %r11, BTABENT+56(%rsp) xorq %rdi, %r12 xorq %rdi, %r13 @@ -1675,10 +1684,10 @@ edwards25519_scalarmuldouble_alt_loop: sbbq $0, %r13 sbbq $0, %r14 sbbq $0, %r15 - movq %r12, 416(%rsp) - movq %r13, 424(%rsp) - movq %r14, 432(%rsp) - movq %r15, 440(%rsp) + movq %r12, BTABENT+64(%rsp) + movq %r13, BTABENT+72(%rsp) + movq %r14, BTABENT+80(%rsp) + movq %r15, BTABENT+88(%rsp) // Get table entry, first getting the adjusted bitfield... @@ -1709,7 +1718,7 @@ edwards25519_scalarmuldouble_alt_loop: xorl %r10d, %r10d xorl %r11d, %r11d - leaq 480(%rsp), %rbp + leaq TAB+32(%rsp), %rbp cmpq $1, bf movq (%rbp), %rsi @@ -1862,18 +1871,18 @@ edwards25519_scalarmuldouble_alt_loop: movq 56(%rbp), %rsi cmovzq %rsi, %r11 - movq %rax, 256(%rsp) - movq %rbx, 264(%rsp) - movq %rcx, 272(%rsp) - movq %rdx, 280(%rsp) - movq %r8, 288(%rsp) - movq %r9, 296(%rsp) - movq %r10, 304(%rsp) - movq %r11, 312(%rsp) + movq %rax, TABENT+32(%rsp) + movq %rbx, TABENT+40(%rsp) + movq %rcx, TABENT+48(%rsp) + movq %rdx, TABENT+56(%rsp) + movq %r8, TABENT+64(%rsp) + movq %r9, TABENT+72(%rsp) + movq %r10, TABENT+80(%rsp) + movq %r11, TABENT+88(%rsp) // Now do the X and W fields... - leaq 448(%rsp), %rbp + leaq TAB(%rsp), %rbp xorl %eax, %eax xorl %ebx, %ebx @@ -2067,51 +2076,51 @@ edwards25519_scalarmuldouble_alt_loop: sbbq $0, %rcx sbbq $0, %rdx - movq %rax, 224(%rsp) - movq %rbx, 232(%rsp) - movq %rcx, 240(%rsp) - movq %rdx, 248(%rsp) + movq %rax, TABENT(%rsp) + movq %rbx, TABENT+8(%rsp) + movq %rcx, TABENT+16(%rsp) + movq %rdx, TABENT+24(%rsp) subq %rdi, %r8 sbbq $0, %r9 sbbq $0, %r10 sbbq $0, %r11 - movq %r8, 320(%rsp) - movq %r9, 328(%rsp) - movq %r10, 336(%rsp) - movq %r11, 344(%rsp) + movq %r8, TABENT+96(%rsp) + movq %r9, TABENT+104(%rsp) + movq %r10, TABENT+112(%rsp) + movq %r11, TABENT+120(%rsp) // Double to acc' = 4 * acc - leaq 96(%rsp), %rdi - leaq 96(%rsp), %rsi + leaq ACC(%rsp), %rdi + leaq ACC(%rsp), %rsi callq edwards25519_scalarmuldouble_alt_pdouble // Add tabent := tabent + btabent - leaq 224(%rsp), %rdi - leaq 224(%rsp), %rsi - leaq 352(%rsp), %rbp + leaq TABENT(%rsp), %rdi + leaq TABENT(%rsp), %rsi + leaq BTABENT(%rsp), %rbp callq edwards25519_scalarmuldouble_alt_pepadd // Double to acc' = 8 * acc - leaq 96(%rsp), %rdi - leaq 96(%rsp), %rsi + leaq ACC(%rsp), %rdi + leaq ACC(%rsp), %rsi callq edwards25519_scalarmuldouble_alt_pdouble // Double to acc' = 16 * acc - leaq 96(%rsp), %rdi - leaq 96(%rsp), %rsi + leaq ACC(%rsp), %rdi + leaq ACC(%rsp), %rsi callq edwards25519_scalarmuldouble_alt_epdouble // Add table entry, acc := acc + tabent - leaq 96(%rsp), %rdi - leaq 96(%rsp), %rsi - leaq 224(%rsp), %rbp + leaq ACC(%rsp), %rdi + leaq ACC(%rsp), %rsi + leaq TABENT(%rsp), %rbp callq edwards25519_scalarmuldouble_alt_epadd // Loop down @@ -2120,423 +2129,1375 @@ edwards25519_scalarmuldouble_alt_loop: testq %rax, %rax jnz edwards25519_scalarmuldouble_alt_loop -// Modular inverse setup +// Prepare to call the modular inverse function to get tab = 1/z - movq $4, %rdi - leaq 224(%rsp), %rsi - leaq 160(%rsp), %rdx - leaq edwards25519_scalarmuldouble_alt_p25519(%rip), %rcx - leaq 352(%rsp), %r8 + leaq TAB(%rsp), %rdi + leaq ACC+64(%rsp), %rsi -// Inline copy of bignum_modinv, identical except for stripping out the -// prologue and epilogue saving and restoring registers and the initial -// test for k = 0 (which is trivially false here since k = 4). For more -// details and explanations see "x86/generic/bignum_modinv.S". Note -// that the stack it uses for its own temporaries is 80 bytes so it -// only overwrites local variables that are no longer needed. +// Inline copy of bignum_inv_p25519, identical except for stripping out +// the prologue and epilogue saving and restoring registers and making +// and reclaiming room on the stack. For more details and explanations see +// "x86/curve25519/bignum_inv_p25519.S". Note that the stack it uses for +// its own temporaries is 208 bytes, so it has no effect on variables +// that are needed in the rest of our computation here: res, tab and acc. - movq %rsi, 0x40(%rsp) - movq %r8, 0x38(%rsp) - movq %rcx, 0x48(%rsp) - leaq (%r8,%rdi,8), %r10 - movq %r10, 0x30(%rsp) - leaq (%r10,%rdi,8), %r15 - xorq %r11, %r11 - xorq %r9, %r9 -edwards25519_scalarmuldouble_alt_copyloop: - movq (%rdx,%r9,8), %rax - movq (%rcx,%r9,8), %rbx - movq %rax, (%r10,%r9,8) - movq %rbx, (%r15,%r9,8) - movq %rbx, (%r8,%r9,8) - movq %r11, (%rsi,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmuldouble_alt_copyloop - movq (%r8), %rax - movq %rax, %rbx - decq %rbx - movq %rbx, (%r8) - movq %rax, %rbp - movq %rax, %r12 - shlq $0x2, %rbp - subq %rbp, %r12 - xorq $0x2, %r12 - movq %r12, %rbp - imulq %rax, %rbp - movl $0x2, %eax - addq %rbp, %rax - addq $0x1, %rbp - imulq %rax, %r12 - imulq %rbp, %rbp - movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - imulq %rbp, %rbp - movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - imulq %rbp, %rbp + movq %rdi, 0xc0(%rsp) + xorl %eax, %eax + leaq -0x13(%rax), %rcx + notq %rax + movq %rcx, (%rsp) + movq %rax, 0x8(%rsp) + movq %rax, 0x10(%rsp) + btr $0x3f, %rax + movq %rax, 0x18(%rsp) + movq (%rsi), %rdx + movq 0x8(%rsi), %rcx + movq 0x10(%rsi), %r8 + movq 0x18(%rsi), %r9 movl $0x1, %eax - addq %rbp, %rax - imulq %rax, %r12 - movq %r12, 0x28(%rsp) - movq %rdi, %rax - shlq $0x7, %rax - movq %rax, 0x20(%rsp) -edwards25519_scalarmuldouble_alt_outerloop: - movq 0x20(%rsp), %r13 - addq $0x3f, %r13 - shrq $0x6, %r13 - cmpq %rdi, %r13 - cmovaeq %rdi, %r13 - xorq %r12, %r12 - xorq %r14, %r14 - xorq %rbp, %rbp - xorq %rsi, %rsi - xorq %r11, %r11 - movq 0x30(%rsp), %r8 - leaq (%r8,%rdi,8), %r15 - xorq %r9, %r9 -edwards25519_scalarmuldouble_alt_toploop: - movq (%r8,%r9,8), %rbx - movq (%r15,%r9,8), %rcx - movq %r11, %r10 - andq %r12, %r10 - andq %rbp, %r11 - movq %rbx, %rax - orq %rcx, %rax - negq %rax - cmovbq %r10, %r14 - cmovbq %r11, %rsi - cmovbq %rbx, %r12 - cmovbq %rcx, %rbp - sbbq %r11, %r11 - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmuldouble_alt_toploop - movq %r12, %rax - orq %rbp, %rax - bsrq %rax, %rcx - xorq $0x3f, %rcx - shldq %cl, %r14, %r12 - shldq %cl, %rsi, %rbp - movq (%r8), %rax - movq %rax, %r14 - movq (%r15), %rax - movq %rax, %rsi - movl $0x1, %r10d - movl $0x0, %r11d - movl $0x0, %ecx - movl $0x1, %edx - movl $0x3a, %r9d - movq %rdi, 0x8(%rsp) - movq %r13, 0x10(%rsp) - movq %r8, (%rsp) - movq %r15, 0x18(%rsp) -edwards25519_scalarmuldouble_alt_innerloop: + xorl %r10d, %r10d + bts $0x3f, %r9 + adcq %r10, %rax + imulq $0x13, %rax, %rax + addq %rax, %rdx + adcq %r10, %rcx + adcq %r10, %r8 + adcq %r10, %r9 + movl $0x13, %eax + cmovbq %r10, %rax + subq %rax, %rdx + sbbq %r10, %rcx + sbbq %r10, %r8 + sbbq %r10, %r9 + btr $0x3f, %r9 + movq %rdx, 0x20(%rsp) + movq %rcx, 0x28(%rsp) + movq %r8, 0x30(%rsp) + movq %r9, 0x38(%rsp) xorl %eax, %eax + movq %rax, 0x40(%rsp) + movq %rax, 0x48(%rsp) + movq %rax, 0x50(%rsp) + movq %rax, 0x58(%rsp) + movabsq $0xa0f99e2375022099, %rax + movq %rax, 0x60(%rsp) + movabsq $0xa8c68f3f1d132595, %rax + movq %rax, 0x68(%rsp) + movabsq $0x6c6c893805ac5242, %rax + movq %rax, 0x70(%rsp) + movabsq $0x276508b241770615, %rax + movq %rax, 0x78(%rsp) + movq $0xa, 0x90(%rsp) + movq $0x1, 0x98(%rsp) + jmp curve25519_x25519_midloop +curve25519_x25519_inverseloop: + movq %r8, %r9 + sarq $0x3f, %r9 + xorq %r9, %r8 + subq %r9, %r8 + movq %r10, %r11 + sarq $0x3f, %r11 + xorq %r11, %r10 + subq %r11, %r10 + movq %r12, %r13 + sarq $0x3f, %r13 + xorq %r13, %r12 + subq %r13, %r12 + movq %r14, %r15 + sarq $0x3f, %r15 + xorq %r15, %r14 + subq %r15, %r14 + movq %r8, %rax + andq %r9, %rax + movq %r10, %rdi + andq %r11, %rdi + addq %rax, %rdi + movq %rdi, 0x80(%rsp) + movq %r12, %rax + andq %r13, %rax + movq %r14, %rsi + andq %r15, %rsi + addq %rax, %rsi + movq %rsi, 0x88(%rsp) xorl %ebx, %ebx - xorq %r8, %r8 - xorq %r15, %r15 - btq $0x0, %r14 - cmovbq %rbp, %rax - cmovbq %rsi, %rbx - cmovbq %rcx, %r8 - cmovbq %rdx, %r15 - movq %r14, %r13 - subq %rbx, %r14 - subq %r13, %rbx - movq %r12, %rdi - subq %rax, %rdi - cmovbq %r12, %rbp - leaq -0x1(%rdi), %r12 - cmovbq %rbx, %r14 - cmovbq %r13, %rsi - notq %r12 - cmovbq %r10, %rcx - cmovbq %r11, %rdx - cmovaeq %rdi, %r12 - shrq $1, %r14 - addq %r8, %r10 - addq %r15, %r11 - shrq $1, %r12 - addq %rcx, %rcx - addq %rdx, %rdx - decq %r9 - jne edwards25519_scalarmuldouble_alt_innerloop - movq 0x8(%rsp), %rdi - movq 0x10(%rsp), %r13 - movq (%rsp), %r8 - movq 0x18(%rsp), %r15 - movq %r10, (%rsp) - movq %r11, 0x8(%rsp) - movq %rcx, 0x10(%rsp) - movq %rdx, 0x18(%rsp) - movq 0x38(%rsp), %r8 - movq 0x40(%rsp), %r15 - xorq %r14, %r14 - xorq %rsi, %rsi - xorq %r10, %r10 - xorq %r11, %r11 - xorq %r9, %r9 -edwards25519_scalarmuldouble_alt_congloop: - movq (%r8,%r9,8), %rcx movq (%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq $0x0, %rdx - movq %rdx, %r12 - movq 0x10(%rsp), %rax - mulq %rcx + xorq %r9, %rax + mulq %r8 + addq %rax, %rdi + adcq %rdx, %rbx + movq 0x20(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rdi + adcq %rdx, %rbx + xorl %ebp, %ebp + movq (%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rsi + adcq %rdx, %rbp + movq 0x20(%rsp), %rax + xorq %r15, %rax + mulq %r14 addq %rax, %rsi - adcq $0x0, %rdx - movq %rdx, %rbp - movq (%r15,%r9,8), %rcx + adcq %rdx, %rbp + xorl %ecx, %ecx movq 0x8(%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq %rdx, %r12 - shrdq $0x3a, %r14, %r10 - movq %r10, (%r8,%r9,8) - movq %r14, %r10 - movq %r12, %r14 + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x28(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + shrdq $0x3b, %rbx, %rdi + movq %rdi, (%rsp) + xorl %edi, %edi + movq 0x8(%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rbp + adcq %rdx, %rdi + movq 0x28(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rdi + shrdq $0x3b, %rbp, %rsi + movq %rsi, 0x20(%rsp) + xorl %esi, %esi + movq 0x10(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rsi + movq 0x30(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rcx + adcq %rdx, %rsi + shrdq $0x3b, %rcx, %rbx + movq %rbx, 0x8(%rsp) + xorl %ebx, %ebx + movq 0x10(%rsp), %rax + xorq %r13, %rax + mulq %r12 + addq %rax, %rdi + adcq %rdx, %rbx + movq 0x30(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rdi + adcq %rdx, %rbx + shrdq $0x3b, %rdi, %rbp + movq %rbp, 0x28(%rsp) movq 0x18(%rsp), %rax - mulq %rcx + xorq %r9, %rax + movq %rax, %rbp + sarq $0x3f, %rbp + andq %r8, %rbp + negq %rbp + mulq %r8 addq %rax, %rsi adcq %rdx, %rbp - shrdq $0x3a, %rsi, %r11 - movq %r11, (%r15,%r9,8) - movq %rsi, %r11 - movq %rbp, %rsi - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmuldouble_alt_congloop - shldq $0x6, %r10, %r14 - shldq $0x6, %r11, %rsi - movq 0x48(%rsp), %r15 - movq (%r8), %rbx - movq 0x28(%rsp), %r12 - imulq %rbx, %r12 - movq (%r15), %rax + movq 0x38(%rsp), %rax + xorq %r11, %rax + movq %rax, %rdx + sarq $0x3f, %rdx + andq %r10, %rdx + subq %rdx, %rbp + mulq %r10 + addq %rax, %rsi + adcq %rdx, %rbp + shrdq $0x3b, %rsi, %rcx + movq %rcx, 0x10(%rsp) + shrdq $0x3b, %rbp, %rsi + movq 0x18(%rsp), %rax + movq %rsi, 0x18(%rsp) + xorq %r13, %rax + movq %rax, %rsi + sarq $0x3f, %rsi + andq %r12, %rsi + negq %rsi mulq %r12 - addq %rbx, %rax - movq %rdx, %r10 - movl $0x1, %r9d - movq %rdi, %rcx - decq %rcx - je edwards25519_scalarmuldouble_alt_wmontend -edwards25519_scalarmuldouble_alt_wmontloop: - adcq (%r8,%r9,8), %r10 - sbbq %rbx, %rbx - movq (%r15,%r9,8), %rax + addq %rax, %rbx + adcq %rdx, %rsi + movq 0x38(%rsp), %rax + xorq %r15, %rax + movq %rax, %rdx + sarq $0x3f, %rdx + andq %r14, %rdx + subq %rdx, %rsi + mulq %r14 + addq %rax, %rbx + adcq %rdx, %rsi + shrdq $0x3b, %rbx, %rdi + movq %rdi, 0x30(%rsp) + shrdq $0x3b, %rsi, %rbx + movq %rbx, 0x38(%rsp) + movq 0x80(%rsp), %rbx + movq 0x88(%rsp), %rbp + xorl %ecx, %ecx + movq 0x40(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x60(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + xorl %esi, %esi + movq 0x40(%rsp), %rax + xorq %r13, %rax mulq %r12 - subq %rbx, %rdx - addq %r10, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %rdx, %r10 - incq %r9 - decq %rcx - jne edwards25519_scalarmuldouble_alt_wmontloop -edwards25519_scalarmuldouble_alt_wmontend: - adcq %r14, %r10 - movq %r10, -0x8(%r8,%rdi,8) - sbbq %r10, %r10 - negq %r10 - movq %rdi, %rcx - xorq %r9, %r9 -edwards25519_scalarmuldouble_alt_wcmploop: - movq (%r8,%r9,8), %rax - sbbq (%r15,%r9,8), %rax - incq %r9 - decq %rcx - jne edwards25519_scalarmuldouble_alt_wcmploop - sbbq $0x0, %r10 - sbbq %r10, %r10 - notq %r10 - xorq %rcx, %rcx - xorq %r9, %r9 -edwards25519_scalarmuldouble_alt_wcorrloop: - movq (%r8,%r9,8), %rax - movq (%r15,%r9,8), %rbx - andq %r10, %rbx - negq %rcx - sbbq %rbx, %rax - sbbq %rcx, %rcx - movq %rax, (%r8,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmuldouble_alt_wcorrloop + movq %rbx, 0x40(%rsp) + addq %rax, %rbp + adcq %rdx, %rsi + movq 0x60(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rsi + movq %rbp, 0x60(%rsp) + xorl %ebx, %ebx + movq 0x48(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rbx + movq 0x68(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rcx + adcq %rdx, %rbx + xorl %ebp, %ebp + movq 0x48(%rsp), %rax + xorq %r13, %rax + mulq %r12 + movq %rcx, 0x48(%rsp) + addq %rax, %rsi + adcq %rdx, %rbp + movq 0x68(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rsi + adcq %rdx, %rbp + movq %rsi, 0x68(%rsp) + xorl %ecx, %ecx + movq 0x50(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %rbx + adcq %rdx, %rcx + movq 0x70(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %rbx + adcq %rdx, %rcx + xorl %esi, %esi + movq 0x50(%rsp), %rax + xorq %r13, %rax + mulq %r12 + movq %rbx, 0x50(%rsp) + addq %rax, %rbp + adcq %rdx, %rsi + movq 0x70(%rsp), %rax + xorq %r15, %rax + mulq %r14 + addq %rax, %rbp + adcq %rdx, %rsi + movq %rbp, 0x70(%rsp) + movq 0x58(%rsp), %rax + xorq %r9, %rax + movq %r9, %rbx + andq %r8, %rbx + negq %rbx + mulq %r8 + addq %rax, %rcx + adcq %rdx, %rbx + movq 0x78(%rsp), %rax + xorq %r11, %rax + movq %r11, %rdx + andq %r10, %rdx + subq %rdx, %rbx + mulq %r10 + addq %rax, %rcx + adcq %rbx, %rdx + movq %rdx, %rbx + shldq $0x1, %rcx, %rdx + sarq $0x3f, %rbx + addq %rbx, %rdx + movl $0x13, %eax + imulq %rdx movq 0x40(%rsp), %r8 - movq (%r8), %rbx - movq 0x28(%rsp), %rbp - imulq %rbx, %rbp - movq (%r15), %rax - mulq %rbp - addq %rbx, %rax - movq %rdx, %r11 - movl $0x1, %r9d - movq %rdi, %rcx - decq %rcx - je edwards25519_scalarmuldouble_alt_zmontend -edwards25519_scalarmuldouble_alt_zmontloop: - adcq (%r8,%r9,8), %r11 - sbbq %rbx, %rbx - movq (%r15,%r9,8), %rax - mulq %rbp - subq %rbx, %rdx - addq %r11, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %rdx, %r11 - incq %r9 - decq %rcx - jne edwards25519_scalarmuldouble_alt_zmontloop -edwards25519_scalarmuldouble_alt_zmontend: - adcq %rsi, %r11 - movq %r11, -0x8(%r8,%rdi,8) - sbbq %r11, %r11 - negq %r11 - movq %rdi, %rcx - xorq %r9, %r9 -edwards25519_scalarmuldouble_alt_zcmploop: - movq (%r8,%r9,8), %rax - sbbq (%r15,%r9,8), %rax - incq %r9 - decq %rcx - jne edwards25519_scalarmuldouble_alt_zcmploop - sbbq $0x0, %r11 - sbbq %r11, %r11 - notq %r11 - xorq %rcx, %rcx - xorq %r9, %r9 -edwards25519_scalarmuldouble_alt_zcorrloop: - movq (%r8,%r9,8), %rax - movq (%r15,%r9,8), %rbx - andq %r11, %rbx + addq %rax, %r8 + movq %r8, 0x40(%rsp) + movq 0x48(%rsp), %r8 + adcq %rdx, %r8 + movq %r8, 0x48(%rsp) + movq 0x50(%rsp), %r8 + adcq %rbx, %r8 + movq %r8, 0x50(%rsp) + adcq %rbx, %rcx + shlq $0x3f, %rax + addq %rax, %rcx + movq 0x58(%rsp), %rax + movq %rcx, 0x58(%rsp) + xorq %r13, %rax + movq %r13, %rcx + andq %r12, %rcx negq %rcx - sbbq %rbx, %rax - sbbq %rcx, %rcx - movq %rax, (%r8,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmuldouble_alt_zcorrloop - movq 0x30(%rsp), %r8 - leaq (%r8,%rdi,8), %r15 - xorq %r9, %r9 - xorq %r12, %r12 - xorq %r14, %r14 - xorq %rbp, %rbp - xorq %rsi, %rsi -edwards25519_scalarmuldouble_alt_crossloop: - movq (%r8,%r9,8), %rcx - movq (%rsp), %rax - mulq %rcx - addq %rax, %r14 - adcq $0x0, %rdx - movq %rdx, %r10 - movq 0x10(%rsp), %rax - mulq %rcx + mulq %r12 addq %rax, %rsi - adcq $0x0, %rdx - movq %rdx, %r11 - movq (%r15,%r9,8), %rcx - movq 0x8(%rsp), %rax - mulq %rcx - subq %r12, %rdx - subq %rax, %r14 - sbbq %rdx, %r10 - sbbq %r12, %r12 - movq %r14, (%r8,%r9,8) - movq %r10, %r14 - movq 0x18(%rsp), %rax - mulq %rcx - subq %rbp, %rdx + adcq %rdx, %rcx + movq 0x78(%rsp), %rax + xorq %r15, %rax + movq %r15, %rdx + andq %r14, %rdx + subq %rdx, %rcx + mulq %r14 + addq %rax, %rsi + adcq %rcx, %rdx + movq %rdx, %rcx + shldq $0x1, %rsi, %rdx + sarq $0x3f, %rcx + movl $0x13, %eax + addq %rcx, %rdx + imulq %rdx + movq 0x60(%rsp), %r8 + addq %rax, %r8 + movq %r8, 0x60(%rsp) + movq 0x68(%rsp), %r8 + adcq %rdx, %r8 + movq %r8, 0x68(%rsp) + movq 0x70(%rsp), %r8 + adcq %rcx, %r8 + movq %r8, 0x70(%rsp) + adcq %rcx, %rsi + shlq $0x3f, %rax + addq %rax, %rsi + movq %rsi, 0x78(%rsp) +curve25519_x25519_midloop: + movq 0x98(%rsp), %rsi + movq (%rsp), %rdx + movq 0x20(%rsp), %rcx + movq %rdx, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq $0xfffffffffffffffe, %rax + xorl %ebp, %ebp + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 subq %rax, %rsi - sbbq %rdx, %r11 - sbbq %rbp, %rbp - movq %rsi, (%r15,%r9,8) - movq %r11, %rsi - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmuldouble_alt_crossloop - xorq %r9, %r9 - movq %r12, %r10 - movq %rbp, %r11 - xorq %r12, %r14 - xorq %rbp, %rsi -edwards25519_scalarmuldouble_alt_optnegloop: - movq (%r8,%r9,8), %rax - xorq %r12, %rax - negq %r10 - adcq $0x0, %rax - sbbq %r10, %r10 - movq %rax, (%r8,%r9,8) - movq (%r15,%r9,8), %rax - xorq %rbp, %rax - negq %r11 - adcq $0x0, %rax - sbbq %r11, %r11 - movq %rax, (%r15,%r9,8) - incq %r9 - cmpq %r13, %r9 - jb edwards25519_scalarmuldouble_alt_optnegloop - subq %r10, %r14 - subq %r11, %rsi - movq %r13, %r9 -edwards25519_scalarmuldouble_alt_shiftloop: - movq -0x8(%r8,%r9,8), %rax - movq %rax, %r10 - shrdq $0x3a, %r14, %rax - movq %rax, -0x8(%r8,%r9,8) - movq %r10, %r14 - movq -0x8(%r15,%r9,8), %rax - movq %rax, %r11 - shrdq $0x3a, %rsi, %rax - movq %rax, -0x8(%r15,%r9,8) - movq %r11, %rsi - decq %r9 - jne edwards25519_scalarmuldouble_alt_shiftloop - notq %rbp - movq 0x48(%rsp), %rcx - movq 0x38(%rsp), %r8 - movq 0x40(%rsp), %r15 - movq %r12, %r10 - movq %rbp, %r11 - xorq %r9, %r9 -edwards25519_scalarmuldouble_alt_fliploop: - movq %rbp, %rdx - movq (%rcx,%r9,8), %rax - andq %rax, %rdx - andq %r12, %rax - movq (%r8,%r9,8), %rbx - xorq %r12, %rbx - negq %r10 - adcq %rbx, %rax - sbbq %r10, %r10 - movq %rax, (%r8,%r9,8) - movq (%r15,%r9,8), %rbx - xorq %rbp, %rbx - negq %r11 - adcq %rbx, %rdx - sbbq %r11, %r11 - movq %rdx, (%r15,%r9,8) - incq %r9 - cmpq %rdi, %r9 - jb edwards25519_scalarmuldouble_alt_fliploop - subq $0x3a, 0x20(%rsp) - ja edwards25519_scalarmuldouble_alt_outerloop + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %rdx + leaq (%rcx,%rax), %rdi + shlq $0x16, %rdx + shlq $0x16, %rdi + sarq $0x2b, %rdx + sarq $0x2b, %rdi + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %rbx + leaq (%rcx,%rax), %rcx + sarq $0x2a, %rbx + sarq $0x2a, %rcx + movq %rdx, 0xa0(%rsp) + movq %rbx, 0xa8(%rsp) + movq %rdi, 0xb0(%rsp) + movq %rcx, 0xb8(%rsp) + movq (%rsp), %r12 + imulq %r12, %rdi + imulq %rdx, %r12 + movq 0x20(%rsp), %r13 + imulq %r13, %rbx + imulq %rcx, %r13 + addq %rbx, %r12 + addq %rdi, %r13 + sarq $0x14, %r12 + sarq $0x14, %r13 + movq %r12, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + movq %r13, %rcx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq $0xfffffffffffffffe, %rax + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %r8 + leaq (%rcx,%rax), %r10 + shlq $0x16, %r8 + shlq $0x16, %r10 + sarq $0x2b, %r8 + sarq $0x2b, %r10 + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %r15 + leaq (%rcx,%rax), %r11 + sarq $0x2a, %r15 + sarq $0x2a, %r11 + movq %r13, %rbx + movq %r12, %rcx + imulq %r8, %r12 + imulq %r15, %rbx + addq %rbx, %r12 + imulq %r11, %r13 + imulq %r10, %rcx + addq %rcx, %r13 + sarq $0x14, %r12 + sarq $0x14, %r13 + movq %r12, %rbx + andq $0xfffff, %rbx + movabsq $0xfffffe0000000000, %rax + orq %rax, %rbx + movq %r13, %rcx + andq $0xfffff, %rcx + movabsq $0xc000000000000000, %rax + orq %rax, %rcx + movq 0xa0(%rsp), %rax + imulq %r8, %rax + movq 0xb0(%rsp), %rdx + imulq %r15, %rdx + imulq 0xa8(%rsp), %r8 + imulq 0xb8(%rsp), %r15 + addq %r8, %r15 + leaq (%rax,%rdx), %r9 + movq 0xa0(%rsp), %rax + imulq %r10, %rax + movq 0xb0(%rsp), %rdx + imulq %r11, %rdx + imulq 0xa8(%rsp), %r10 + imulq 0xb8(%rsp), %r11 + addq %r10, %r11 + leaq (%rax,%rdx), %r13 + movq $0xfffffffffffffffe, %rax + movl $0x2, %edx + movq %rbx, %rdi + movq %rax, %r8 + testq %rsi, %rsi + cmovs %rbp, %r8 + testq $0x1, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + cmovs %rbp, %r8 + movq %rbx, %rdi + testq %rdx, %rcx + cmoveq %rbp, %r8 + cmoveq %rbp, %rdi + sarq $1, %rcx + xorq %r8, %rdi + xorq %r8, %rsi + btq $0x3f, %r8 + cmovbq %rcx, %rbx + movq %rax, %r8 + subq %rax, %rsi + leaq (%rcx,%rdi), %rcx + sarq $1, %rcx + movl $0x100000, %eax + leaq (%rbx,%rax), %r8 + leaq (%rcx,%rax), %r12 + shlq $0x15, %r8 + shlq $0x15, %r12 + sarq $0x2b, %r8 + sarq $0x2b, %r12 + movabsq $0x20000100000, %rax + leaq (%rbx,%rax), %r10 + leaq (%rcx,%rax), %r14 + sarq $0x2b, %r10 + sarq $0x2b, %r14 + movq %r9, %rax + imulq %r8, %rax + movq %r13, %rdx + imulq %r10, %rdx + imulq %r15, %r8 + imulq %r11, %r10 + addq %r8, %r10 + leaq (%rax,%rdx), %r8 + movq %r9, %rax + imulq %r12, %rax + movq %r13, %rdx + imulq %r14, %rdx + imulq %r15, %r12 + imulq %r11, %r14 + addq %r12, %r14 + leaq (%rax,%rdx), %r12 + movq %rsi, 0x98(%rsp) + decq 0x90(%rsp) + jne curve25519_x25519_inverseloop + movq (%rsp), %rax + movq 0x20(%rsp), %rcx + imulq %r8, %rax + imulq %r10, %rcx + addq %rcx, %rax + sarq $0x3f, %rax + movq %r8, %r9 + sarq $0x3f, %r9 + xorq %r9, %r8 + subq %r9, %r8 + xorq %rax, %r9 + movq %r10, %r11 + sarq $0x3f, %r11 + xorq %r11, %r10 + subq %r11, %r10 + xorq %rax, %r11 + movq %r12, %r13 + sarq $0x3f, %r13 + xorq %r13, %r12 + subq %r13, %r12 + xorq %rax, %r13 + movq %r14, %r15 + sarq $0x3f, %r15 + xorq %r15, %r14 + subq %r15, %r14 + xorq %rax, %r15 + movq %r8, %rax + andq %r9, %rax + movq %r10, %r12 + andq %r11, %r12 + addq %rax, %r12 + xorl %r13d, %r13d + movq 0x40(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r12 + adcq %rdx, %r13 + movq 0x60(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r12 + adcq %rdx, %r13 + xorl %r14d, %r14d + movq 0x48(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r13 + adcq %rdx, %r14 + movq 0x68(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r13 + adcq %rdx, %r14 + xorl %r15d, %r15d + movq 0x50(%rsp), %rax + xorq %r9, %rax + mulq %r8 + addq %rax, %r14 + adcq %rdx, %r15 + movq 0x70(%rsp), %rax + xorq %r11, %rax + mulq %r10 + addq %rax, %r14 + adcq %rdx, %r15 + movq 0x58(%rsp), %rax + xorq %r9, %rax + andq %r8, %r9 + negq %r9 + mulq %r8 + addq %rax, %r15 + adcq %rdx, %r9 + movq 0x78(%rsp), %rax + xorq %r11, %rax + movq %r11, %rdx + andq %r10, %rdx + subq %rdx, %r9 + mulq %r10 + addq %rax, %r15 + adcq %rdx, %r9 + movq %r9, %rax + shldq $0x1, %r15, %rax + sarq $0x3f, %r9 + movl $0x13, %ebx + leaq 0x1(%rax,%r9,1), %rax + imulq %rbx + xorl %ebp, %ebp + addq %rax, %r12 + adcq %rdx, %r13 + adcq %r9, %r14 + adcq %r9, %r15 + shlq $0x3f, %rax + addq %rax, %r15 + cmovns %rbp, %rbx + subq %rbx, %r12 + sbbq %rbp, %r13 + sbbq %rbp, %r14 + sbbq %rbp, %r15 + btr $0x3f, %r15 + movq 0xc0(%rsp), %rdi + movq %r12, (%rdi) + movq %r13, 0x8(%rdi) + movq %r14, 0x10(%rdi) + movq %r15, 0x18(%rdi) // Store result movq res, %rdi - leaq 96(%rsp), %rsi - leaq 224(%rsp), %rbp + leaq ACC(%rsp), %rsi + leaq TAB(%rsp), %rbp mul_p25519(x_0,x_1,x_2) movq res, %rdi addq $32, %rdi - leaq 128(%rsp), %rsi - leaq 224(%rsp), %rbp + leaq ACC+32(%rsp), %rsi + leaq TAB(%rsp), %rbp mul_p25519(x_0,x_1,x_2) // Restore stack and registers @@ -2645,14 +3606,6 @@ edwards25519_scalarmuldouble_alt_pepadd: // .section .rodata // **************************************************************************** -// The modulus p_25519 = 2^255 - 19, for the modular inverse - -edwards25519_scalarmuldouble_alt_p25519: - .quad 0xffffffffffffffed - .quad 0xffffffffffffffff - .quad 0xffffffffffffffff - .quad 0x7fffffffffffffff - // Precomputed table of multiples of generator for edwards25519 // all in precomputed extended-projective (y-x,x+y,2*d*x*y) triples.