user: What would the C source look like for the assembly code provided here:

```asm
<mult_scalar>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  mov    %edi,%ebx
  sub    $0x128,%rsp
  mov    0x10(%rbp),%rax
  mov    %rcx,-0x108(%rbp)
  mov    %rsi,-0x128(%rbp)
  mov    %rsp,%rdx
  mov    %rax,-0x130(%rbp)
  mov    0x18(%rbp),%rax
  mov    %r8,-0xf8(%rbp)
  mov    %rax,-0x138(%rbp)
  mov    0x20(%rbp),%rax
  mov    %r9,-0x100(%rbp)
  mov    %rax,-0x140(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  xor    %eax,%eax
  test   %edi,%edi
  lea    0x1f(%rdi),%eax
  cmovns %edi,%eax
  sar    $0x5,%eax
  lea    0x1(%rax),%r12d
  mov    %eax,-0x10c(%rbp)
  movslq %r12d,%rax
  lea    0xf(,%rax,4),%rcx
  mov    %rcx,%rax
  mov    %rcx,-0x120(%rbp)
  and    $0xfffffffffffff000,%rcx
  sub    %rcx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L1207
L899:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L899
L1207:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  jne    L438
L316:
  mov    -0x120(%rbp),%rcx
  lea    0x3(%rsp),%rax
  mov    %rsp,%rdx
  mov    %rax,%r13
  and    $0xfffffffffffffffc,%rax
  mov    %rax,-0x58(%rbp)
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  shr    $0x2,%r13
  sub    %rcx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L690
L584:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L584
L690:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  jne    L23
L940:
  mov    -0x120(%rbp),%rcx
  mov    %rsp,%rdx
  mov    %rsp,-0x60(%rbp)
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  sub    %rcx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L103
L517:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L517
L103:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L59
  orq    $0x0,-0x8(%rsp,%rax,1)
L59:
  mov    -0x120(%rbp),%rcx
  mov    %rsp,%rdx
  mov    %rsp,-0x68(%rbp)
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  sub    %rcx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L554
L1115:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L1115
L554:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L832
  orq    $0x0,-0x8(%rsp,%rax,1)
L832:
  lea    0x3(%rsp),%rax
  mov    %rax,%r15
  and    $0xfffffffffffffffc,%rax
  mov    %rax,-0x70(%rbp)
  shr    $0x2,%r15
  test   %r12d,%r12d
  jle    L267
  mov    -0x10c(%rbp),%eax
  mov    -0x60(%rbp),%rdi
  xor    %esi,%esi
  lea    0x4(,%rax,4),%r14
  mov    %r14,%rdx
  call   <memset@plt>
  mov    -0x70(%rbp),%rdi
  mov    %r14,%rdx
  xor    %esi,%esi
  call   <memset@plt>
  mov    -0x58(%rbp),%rdi
  mov    %r14,%rdx
  xor    %esi,%esi
  call   <memset@plt>
  mov    -0x100(%rbp),%rsi
  mov    -0x68(%rbp),%rdi
  mov    %r14,%rdx
  call   <memcpy@plt>
L267:
  mov    -0x120(%rbp),%rcx
  lea    (%r12,%r12,1),%eax
  mov    %rsp,%rdx
  movl   $0x1,0x0(,%r15,4)
  mov    %eax,-0xd0(%rbp)
  movl   $0x1,0x0(,%r13,4)
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  sub    %rcx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L937
L564:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L564
L937:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L1086
  orq    $0x0,-0x8(%rsp,%rax,1)
L1086:
  movslq -0xd0(%rbp),%rax
  mov    %rsp,%rdx
  mov    %rsp,-0xa8(%rbp)
  lea    0xf(,%rax,4),%rcx
  mov    %rax,-0x148(%rbp)
  mov    %rcx,-0x118(%rbp)
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  sub    %rcx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L693
L1130:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L1130
L693:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L1217
  orq    $0x0,-0x8(%rsp,%rax,1)
L1217:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,%rdx
  mov    %rsp,%r13
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  sub    %rcx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L707
L535:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L535
L707:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L739
  orq    $0x0,-0x8(%rsp,%rax,1)
L739:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,%rdx
  mov    %rsp,%r14
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  sub    %rcx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L1042
L1186:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L1186
L1042:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L1212
  orq    $0x0,-0x8(%rsp,%rax,1)
L1212:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,%rdx
  mov    %rsp,-0x48(%rbp)
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  sub    %rcx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L793
L610:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L610
L793:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L1008
  orq    $0x0,-0x8(%rsp,%rax,1)
L1008:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,%rdx
  mov    %rsp,%r15
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  sub    %rcx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L87
L580:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L580
L87:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L89
  orq    $0x0,-0x8(%rsp,%rax,1)
L89:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0x50(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L1060:
  cmp    %rdx,%rsp
  je     L866
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L1060
  nopl   0x0(%rax)
L438:
  orq    $0x0,-0x8(%rsp,%rax,1)
  jmp    L316
L23:
  orq    $0x0,-0x8(%rsp,%rax,1)
  jmp    L940
L866:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L255
  orq    $0x0,-0x8(%rsp,%rax,1)
L255:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0xb0(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L578:
  cmp    %rdx,%rsp
  je     L1108
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L578
L1108:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L372
  orq    $0x0,-0x8(%rsp,%rax,1)
L372:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0xb8(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L253:
  cmp    %rdx,%rsp
  je     L145
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L253
L145:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L376
  orq    $0x0,-0x8(%rsp,%rax,1)
L376:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0x78(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L452:
  cmp    %rdx,%rsp
  je     L7
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L452
L7:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L185
  orq    $0x0,-0x8(%rsp,%rax,1)
L185:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0xd8(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L132:
  cmp    %rdx,%rsp
  je     L475
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L132
L475:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L462
  orq    $0x0,-0x8(%rsp,%rax,1)
L462:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0xe0(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L561:
  cmp    %rdx,%rsp
  je     L116
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L561
L116:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L350
  orq    $0x0,-0x8(%rsp,%rax,1)
L350:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0x80(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L1181:
  cmp    %rdx,%rsp
  je     L256
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L1181
L256:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L246
  orq    $0x0,-0x8(%rsp,%rax,1)
L246:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0xc0(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L948:
  cmp    %rdx,%rsp
  je     L403
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L948
L403:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L859
  orq    $0x0,-0x8(%rsp,%rax,1)
L859:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0xc8(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L664:
  cmp    %rdx,%rsp
  je     L404
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L664
L404:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L381
  orq    $0x0,-0x8(%rsp,%rax,1)
L381:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0x88(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L148:
  cmp    %rdx,%rsp
  je     L102
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L148
L102:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L513
  orq    $0x0,-0x8(%rsp,%rax,1)
L513:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0xe8(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L583:
  cmp    %rdx,%rsp
  je     L323
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L583
L323:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L791
  orq    $0x0,-0x8(%rsp,%rax,1)
L791:
  mov    -0x118(%rbp),%rcx
  mov    %rsp,-0xf0(%rbp)
  mov    %rsp,%rdx
  mov    %rcx,%rax
  and    $0xfffffffffffff000,%rcx
  and    $0xfffffffffffffff0,%rax
  sub    %rcx,%rdx
L689:
  cmp    %rdx,%rsp
  je     L474
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L689
L474:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L122
  orq    $0x0,-0x8(%rsp,%rax,1)
L122:
  mov    %rsp,-0x90(%rbp)
  cmp    $0xffffffe1,%ebx
  jl     L363
  mov    -0xd0(%rbp),%eax
  sub    $0x1,%eax
  lea    0x4(,%rax,4),%rbx
  mov    -0x10c(%rbp),%eax
  mov    %eax,-0xcc(%rbp)
  nopl   0x0(%rax)
L139:
  movl   $0x1f,-0x98(%rbp)
  movl   $0x80000000,-0xa0(%rbp)
  jmp    L1005
  nopl   0x0(%rax)
L540:
  mov    -0x70(%rbp),%rdx
  mov    -0x58(%rbp),%rsi
  mov    %r13,%rcx
  mov    %r12d,%edi
  call   <f2m_mult@plt>
  mov    -0x60(%rbp),%rdx
  mov    -0x68(%rbp),%rsi
  mov    %r14,%rcx
  mov    %r12d,%edi
  call   <f2m_mult@plt>
  mov    %r13,%rdi
  call   <f2m_reduce@plt>
  mov    %r14,%rdi
  call   <f2m_reduce@plt>
  mov    -0x48(%rbp),%rcx
  mov    %r14,%rdx
  mov    %r13,%rsi
  mov    %r12d,%edi
  call   <f2m_mult@plt>
  mov    -0x48(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    %r14,%rdx
  mov    %r13,%rsi
  mov    %r12d,%edi
  mov    -0xa8(%rbp),%rcx
  call   <f2m_Add@plt>
  mov    -0xa8(%rbp),%rsi
  mov    %r15,%rdx
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    %r15,%rdi
  call   <f2m_reduce@plt>
  mov    -0x60(%rbp),%rdx
  mov    %r15,%rsi
  mov    %r12d,%edi
  call   <copy@plt>
  mov    -0x50(%rbp),%rcx
  mov    %r15,%rdx
  mov    %r12d,%edi
  mov    -0x100(%rbp),%rsi
  call   <f2m_mult@plt>
  mov    -0x50(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x58(%rbp),%rcx
  mov    -0x48(%rbp),%rdx
  mov    %r12d,%edi
  mov    -0x50(%rbp),%rsi
  call   <f2m_Add@plt>
  mov    -0xb0(%rbp),%rdx
  mov    -0x68(%rbp),%rsi
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    -0xb0(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0xb8(%rbp),%rdx
  mov    -0x70(%rbp),%rsi
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    -0xb8(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x78(%rbp),%rcx
  mov    -0xb8(%rbp),%rdx
  mov    %r12d,%edi
  mov    -0xb0(%rbp),%rsi
  call   <f2m_mult@plt>
  mov    -0x78(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x70(%rbp),%rdx
  mov    -0x78(%rbp),%rsi
  mov    %r12d,%edi
  call   <copy@plt>
  mov    -0xd8(%rbp),%rdx
  mov    -0xb0(%rbp),%rsi
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    -0xd8(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0xe0(%rbp),%rdx
  mov    -0xb8(%rbp),%rsi
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    -0xe0(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x80(%rbp),%rcx
  mov    -0xe0(%rbp),%rdx
  mov    %r12d,%edi
  mov    -0x108(%rbp),%rsi
  call   <f2m_mult@plt>
  mov    -0x80(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x68(%rbp),%rcx
  mov    -0x80(%rbp),%rdx
  mov    %r12d,%edi
  mov    -0xd8(%rbp),%rsi
  call   <f2m_Add@plt>
  sarl   -0xa0(%rbp)
  subl   $0x1,-0x98(%rbp)
  js     L1011
L1005:
  cmpl   $0x1f,-0x98(%rbp)
  jne    L1020
  mov    -0xcc(%rbp),%ecx
  cmp    %ecx,-0x10c(%rbp)
  je     L189
L1020:
  mov    -0xd0(%rbp),%eax
  test   %eax,%eax
  jle    L751
  mov    %rbx,%rdx
  xor    %esi,%esi
  mov    %r13,%rdi
  call   <memset@plt>
  mov    %rbx,%rdx
  xor    %esi,%esi
  mov    %r14,%rdi
  call   <memset@plt>
  mov    -0x48(%rbp),%rdi
  mov    %rbx,%rdx
  xor    %esi,%esi
  call   <memset@plt>
  mov    -0x50(%rbp),%rdi
  mov    %rbx,%rdx
  xor    %esi,%esi
  call   <memset@plt>
  mov    -0x78(%rbp),%rdi
  mov    %rbx,%rdx
  xor    %esi,%esi
  call   <memset@plt>
  mov    -0x80(%rbp),%rdi
  mov    %rbx,%rdx
  xor    %esi,%esi
  call   <memset@plt>
  mov    -0x88(%rbp),%rdi
  mov    %rbx,%rdx
  xor    %esi,%esi
  call   <memset@plt>
  mov    -0x90(%rbp),%rdi
  mov    %rbx,%rdx
  xor    %esi,%esi
  call   <memset@plt>
L751:
  movslq -0xcc(%rbp),%rax
  mov    -0xf8(%rbp),%rsi
  mov    -0xa0(%rbp),%ecx
  and    (%rsi,%rax,4),%ecx
  jne    L540
  mov    -0x60(%rbp),%rdx
  mov    -0x68(%rbp),%rsi
  mov    %r14,%rcx
  mov    %r12d,%edi
  call   <f2m_mult@plt>
  mov    %r14,%rdi
  call   <f2m_reduce@plt>
  mov    -0x70(%rbp),%rdx
  mov    -0x58(%rbp),%rsi
  mov    %r13,%rcx
  mov    %r12d,%edi
  call   <f2m_mult@plt>
  mov    %r13,%rdi
  call   <f2m_reduce@plt>
  mov    -0x48(%rbp),%rcx
  mov    %r14,%rdx
  mov    %r13,%rsi
  mov    %r12d,%edi
  call   <f2m_mult@plt>
  mov    -0x48(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    %r14,%rdx
  mov    %r13,%rsi
  mov    %r12d,%edi
  mov    -0xa8(%rbp),%rcx
  call   <f2m_Add@plt>
  mov    -0xa8(%rbp),%rsi
  mov    %r15,%rdx
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    %r15,%rdi
  call   <f2m_reduce@plt>
  mov    -0x70(%rbp),%rdx
  mov    %r15,%rsi
  mov    %r12d,%edi
  call   <copy@plt>
  mov    -0x50(%rbp),%rcx
  mov    %r15,%rdx
  mov    %r12d,%edi
  mov    -0x100(%rbp),%rsi
  call   <f2m_mult@plt>
  mov    -0x50(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x68(%rbp),%rcx
  mov    -0x48(%rbp),%rdx
  mov    %r12d,%edi
  mov    -0x50(%rbp),%rsi
  call   <f2m_Add@plt>
  mov    -0xc0(%rbp),%rdx
  mov    -0x58(%rbp),%rsi
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    -0xc0(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0xc8(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    -0xc8(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x88(%rbp),%rcx
  mov    -0xc8(%rbp),%rdx
  mov    %r12d,%edi
  mov    -0xc0(%rbp),%rsi
  call   <f2m_mult@plt>
  mov    -0x88(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x60(%rbp),%rdx
  mov    -0x88(%rbp),%rsi
  mov    %r12d,%edi
  call   <copy@plt>
  mov    -0xe8(%rbp),%rdx
  mov    -0xc0(%rbp),%rsi
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    -0xe8(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0xf0(%rbp),%rdx
  mov    -0xc8(%rbp),%rsi
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    -0xf0(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x90(%rbp),%rcx
  mov    -0xf0(%rbp),%rdx
  mov    %r12d,%edi
  mov    -0x108(%rbp),%rsi
  call   <f2m_mult@plt>
  mov    -0x90(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x58(%rbp),%rcx
  mov    -0x90(%rbp),%rdx
  mov    %r12d,%edi
  mov    -0xe8(%rbp),%rsi
  call   <f2m_Add@plt>
  sarl   -0xa0(%rbp)
  subl   $0x1,-0x98(%rbp)
  jns    L1005
L1011:
  subl   $0x1,-0xcc(%rbp)
  jns    L139
L363:
  mov    -0x120(%rbp),%rbx
  mov    %rsp,%rdx
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  sub    %rbx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L926
L235:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L235
L926:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L593
  orq    $0x0,-0x8(%rsp,%rax,1)
L593:
  mov    -0x120(%rbp),%rbx
  mov    %rsp,%rdx
  mov    %rsp,%r8
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  sub    %rbx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L676
L482:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L482
L676:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L48
  orq    $0x0,-0x8(%rsp,%rax,1)
L48:
  mov    -0x120(%rbp),%rbx
  mov    %rsp,%rdx
  mov    %rsp,-0x80(%rbp)
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  sub    %rbx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L1146
L0:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L0
L1146:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L483
  orq    $0x0,-0x8(%rsp,%rax,1)
L483:
  mov    -0x120(%rbp),%rbx
  mov    %rsp,%rdx
  mov    %rsp,-0x50(%rbp)
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  sub    %rbx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L1176
L356:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L356
L1176:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L472
  orq    $0x0,-0x8(%rsp,%rax,1)
L472:
  mov    -0x120(%rbp),%rbx
  mov    %rsp,%rdx
  mov    %rsp,-0x88(%rbp)
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  sub    %rbx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L477
L594:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L594
L477:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L743
  orq    $0x0,-0x8(%rsp,%rax,1)
L743:
  mov    -0x120(%rbp),%rbx
  mov    %rsp,%rdx
  mov    %rsp,-0x90(%rbp)
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  sub    %rbx,%rdx
  and    $0xfffffffffffffff0,%rax
  cmp    %rdx,%rsp
  je     L837
L1062:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rdx,%rsp
  jne    L1062
L837:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L833
  orq    $0x0,-0x8(%rsp,%rax,1)
L833:
  mov    -0x120(%rbp),%rbx
  mov    %rsp,-0x98(%rbp)
  mov    %rsp,%rdx
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  and    $0xfffffffffffffff0,%rax
  sub    %rbx,%rdx
L101:
  cmp    %rdx,%rsp
  je     L1118
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L101
  nop
L189:
  mov    -0xf8(%rbp),%rsi
  mov    %r12d,%edi
  call   <getDegree@plt>
  test   %eax,%eax
  lea    0x1f(%rax),%edx
  cmovns %eax,%edx
  sar    $0x5,%edx
  mov    %edx,-0xcc(%rbp)
  cltd
  shr    $0x1b,%edx
  add    %edx,%eax
  and    $0x1f,%eax
  sub    %edx,%eax
  mov    %eax,-0x98(%rbp)
  jmp    L1020
L1118:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L1219
  orq    $0x0,-0x8(%rsp,%rax,1)
L1219:
  mov    -0x120(%rbp),%rax
  mov    %rsp,-0xa0(%rbp)
  mov    %rsp,%rcx
  mov    %rax,%rdx
  and    $0xfffffffffffff000,%rax
  and    $0xfffffffffffffff0,%rdx
  sub    %rax,%rcx
L595:
  cmp    %rcx,%rsp
  je     L351
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L595
L351:
  mov    %rdx,%rax
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L506
  orq    $0x0,-0x8(%rsp,%rax,1)
L506:
  mov    -0x118(%rbp),%rbx
  mov    %rsp,-0xa8(%rbp)
  mov    %rsp,%rdx
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  and    $0xfffffffffffffff0,%rax
  sub    %rbx,%rdx
L1025:
  cmp    %rdx,%rsp
  je     L681
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L1025
L681:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L757
  orq    $0x0,-0x8(%rsp,%rax,1)
L757:
  mov    -0x118(%rbp),%rbx
  mov    %rsp,%rdx
  mov    %rsp,%r14
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  and    $0xfffffffffffffff0,%rax
  sub    %rbx,%rdx
L268:
  cmp    %rdx,%rsp
  je     L486
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L268
L486:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L302
  orq    $0x0,-0x8(%rsp,%rax,1)
L302:
  mov    -0x118(%rbp),%rbx
  mov    %rsp,-0x48(%rbp)
  mov    %rsp,%rdx
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  and    $0xfffffffffffffff0,%rax
  sub    %rbx,%rdx
L1061:
  cmp    %rdx,%rsp
  je     L959
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L1061
L959:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L388
  orq    $0x0,-0x8(%rsp,%rax,1)
L388:
  mov    -0x118(%rbp),%rbx
  mov    %rsp,-0x78(%rbp)
  mov    %rsp,%rdx
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  and    $0xfffffffffffffff0,%rax
  sub    %rbx,%rdx
L120:
  cmp    %rdx,%rsp
  je     L985
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L120
L985:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L4
  orq    $0x0,-0x8(%rsp,%rax,1)
L4:
  mov    -0x118(%rbp),%rbx
  mov    %rsp,%rdx
  mov    %rsp,%r15
  mov    %rbx,%rax
  and    $0xfffffffffffff000,%rbx
  and    $0xfffffffffffffff0,%rax
  sub    %rbx,%rdx
L109:
  cmp    %rdx,%rsp
  je     L731
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L109
L731:
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L124
  orq    $0x0,-0x8(%rsp,%rax,1)
L124:
  mov    -0x118(%rbp),%rax
  mov    %rsp,%rcx
  mov    %rsp,%r13
  mov    %rax,%rdx
  and    $0xfffffffffffff000,%rax
  and    $0xfffffffffffffff0,%rdx
  sub    %rax,%rcx
L287:
  cmp    %rcx,%rsp
  je     L84
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L287
L84:
  mov    %rdx,%rax
  and    $0xfff,%eax
  sub    %rax,%rsp
  test   %rax,%rax
  je     L177
  orq    $0x0,-0x8(%rsp,%rax,1)
L177:
  cmpl   $0x0,-0xd0(%rbp)
  mov    %rsp,%rbx
  jle    L435
  mov    -0x148(%rbp),%rdx
  xor    %esi,%esi
  mov    %r14,%rdi
  mov    %r8,-0xb8(%rbp)
  shl    $0x2,%rdx
  mov    %rdx,-0xb0(%rbp)
  call   <memset@plt>
  mov    -0xb0(%rbp),%rdx
  mov    -0x48(%rbp),%rdi
  xor    %esi,%esi
  call   <memset@plt>
  mov    -0xb0(%rbp),%rdx
  xor    %esi,%esi
  mov    %r15,%rdi
  call   <memset@plt>
  mov    -0xb0(%rbp),%rdx
  xor    %esi,%esi
  mov    %r13,%rdi
  call   <memset@plt>
  mov    -0xb0(%rbp),%rdx
  xor    %esi,%esi
  mov    %rbx,%rdi
  call   <memset@plt>
  mov    -0xb8(%rbp),%r8
L435:
  mov    -0x128(%rbp),%rdx
  mov    -0x60(%rbp),%rsi
  mov    %r8,%rcx
  mov    %r12d,%edi
  mov    %r8,-0xb0(%rbp)
  call   <f2m_calculateInverse@plt>
  mov    -0x58(%rbp),%rsi
  mov    %r14,%rcx
  mov    %r12d,%edi
  mov    -0xb0(%rbp),%rdx
  call   <f2m_mult@plt>
  mov    %r14,%rdi
  call   <f2m_reduce@plt>
  mov    -0x138(%rbp),%rdx
  mov    %r14,%rsi
  mov    %r12d,%edi
  call   <copy@plt>
  mov    -0x50(%rbp),%rcx
  mov    %r14,%rsi
  mov    %r12d,%edi
  mov    -0x100(%rbp),%rdx
  call   <f2m_Add@plt>
  mov    -0x80(%rbp),%rcx
  mov    -0x70(%rbp),%rsi
  mov    %r12d,%edi
  mov    -0x128(%rbp),%rdx
  call   <f2m_calculateInverse@plt>
  mov    -0x48(%rbp),%r14
  mov    -0x80(%rbp),%rdx
  mov    %r12d,%edi
  mov    -0x68(%rbp),%rsi
  mov    %r14,%rcx
  call   <f2m_mult@plt>
  mov    %r14,%rdi
  mov    %r14,-0x48(%rbp)
  call   <f2m_reduce@plt>
  mov    -0x100(%rbp),%r14
  mov    -0x48(%rbp),%rsi
  mov    %r12d,%edi
  mov    -0x88(%rbp),%rcx
  mov    %r14,%rdx
  call   <f2m_Add@plt>
  mov    -0x78(%rbp),%rdx
  mov    %r14,%rsi
  mov    %r12d,%edi
  call   <f2m_square@plt>
  mov    -0x78(%rbp),%rdi
  call   <f2m_reduce@plt>
  mov    -0x50(%rbp),%rdx
  mov    %r15,%rcx
  mov    %r12d,%edi
  mov    -0x88(%rbp),%rsi
  call   <f2m_mult@plt>
  mov    %r15,%rdi
  call   <f2m_reduce@plt>
  mov    -0x78(%rbp),%rdx
  mov    %r15,%rsi
  mov    %r12d,%edi
  mov    -0x90(%rbp),%rcx
  call   <f2m_Add@plt>
  mov    -0x98(%rbp),%r15
  mov    -0x130(%rbp),%rdx
  mov    %r12d,%edi
  mov    -0x90(%rbp),%rsi
  mov    %r15,%rcx
  call   <f2m_Add@plt>
  mov    -0x50(%rbp),%rsi
  mov    %r15,%rdx
  mov    %r13,%rcx
  mov    %r12d,%edi
  call   <f2m_mult@plt>
  mov    %r13,%rdi
  call   <f2m_reduce@plt>
  mov    -0xa0(%rbp),%r15
  mov    %r14,%rsi
  mov    %r12d,%edi
  mov    -0x128(%rbp),%rdx
  mov    %r15,%rcx
  call   <f2m_calculateInverse@plt>
  mov    %r15,%rsi
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    %r12d,%edi
  call   <f2m_mult@plt>
  mov    %rbx,%rdi
  call   <f2m_reduce@plt>
  mov    -0xa8(%rbp),%r15
  mov    %rbx,%rsi
  mov    %r12d,%edi
  mov    -0x130(%rbp),%rdx
  mov    %r15,%rcx
  call   <f2m_Add@plt>
  mov    -0x140(%rbp),%rdx
  mov    %r15,%rsi
  mov    %r12d,%edi
  call   <copy@plt>
  mov    -0x38(%rbp),%rax
  sub    %fs:0x28,%rax
  jne    L1058
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
L1058:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void mult_scalar(uint32_t m, uint32_t *F, uint32_t *a, uint32_t *b, uint32_t *d, uint32_t *xP, uint32_t *yP, uint32_t *xQ, uint32_t *yQ) {
  uint32_t t = (m / 32) + 1;
  uint32_t Xq[t], Zq[t], Xr[t], Zr[t];
  uint32_t y;
  for (y = 0; y < t; y++) {
    Zq[y] = 0x0;
    Zr[y] = 0x0;
    Xq[y] = 0x0;
    Xr[y] = xP[y];
  }
  Zr[0] = 0x1;
  Xq[0] = 0x1;
  uint32_t t2 = t * 2;
  uint32_t XrZqPLUSXqZr[t];
  uint32_t XqZr[t2], XrZq[t2], XqZrXrZq[t2], XrZqPLUSXqZrSquared[t2], xpXrZqPLUSXqZrSquared[t2];
  uint32_t XrSquard[t2], ZrSquard[t2], XrSquardZrSquard[t2], XrPow4[t2], ZrPow4[t2], bZrPow4[t2];
  uint32_t XqSquard[t2], ZqSquard[t2], XqSquardZqSquard[t2], XqPow4[t2], ZqPow4[t2], bZqPow4[t2];
  int i;
  for (i = t - 1; i >= 0; i--) {
    uint32_t bitMask = 0x80000000;
    int y;
    for (y = 31; y >= 0; y--) {
      if ((i == t - 1) && (y == 31)) {
        int deg = getDegree(t, d);
        i = deg / 32;
        y = deg - (i * 32);
      }
      uint32_t z;
      for (z = 0; z < t2; z++) {
        XqZr[z] = 0x0;
        XrZq[z] = 0x0;
        XqZrXrZq[z] = 0x0;
        xpXrZqPLUSXqZrSquared[z] = 0x0;
        XrSquardZrSquard[z] = 0x0;
        bZrPow4[z] = 0x0;
        XqSquardZqSquard[z] = 0x0;
        bZqPow4[z] = 0x0;
      }
      if ((d[i] & bitMask) != 0) {
        f2m_mult(t, Xq, Zr, XqZr);
        f2m_mult(t, Xr, Zq, XrZq);
        f2m_reduce(XqZr);
        f2m_reduce(XrZq);
        f2m_mult(t, XqZr, XrZq, XqZrXrZq);
        f2m_reduce(XqZrXrZq);
        f2m_Add(t, XqZr, XrZq, XrZqPLUSXqZr);
        f2m_square(t, XrZqPLUSXqZr, XrZqPLUSXqZrSquared);
        f2m_reduce(XrZqPLUSXqZrSquared);
        copy(t, XrZqPLUSXqZrSquared, Zq);
        f2m_mult(t, xP, XrZqPLUSXqZrSquared, xpXrZqPLUSXqZrSquared);
        f2m_reduce(xpXrZqPLUSXqZrSquared);
        f2m_Add(t, xpXrZqPLUSXqZrSquared, XqZrXrZq, Xq);
        f2m_square(t, Xr, XrSquard);
        f2m_reduce(XrSquard);
        f2m_square(t, Zr, ZrSquard);
        f2m_reduce(ZrSquard);
        f2m_mult(t, XrSquard, ZrSquard, XrSquardZrSquard);
        f2m_reduce(XrSquardZrSquard);
        copy(t, XrSquardZrSquard, Zr);
        f2m_square(t, XrSquard, XrPow4);
        f2m_reduce(XrPow4);
        f2m_square(t, ZrSquard, ZrPow4);
        f2m_reduce(ZrPow4);
        f2m_mult(t, b, ZrPow4, bZrPow4);
        f2m_reduce(bZrPow4);
        f2m_Add(t, XrPow4, bZrPow4, Xr);
      } else {
        f2m_mult(t, Xr, Zq, XrZq);
        f2m_reduce(XrZq);
        f2m_mult(t, Xq, Zr, XqZr);
        f2m_reduce(XqZr);
        f2m_mult(t, XqZr, XrZq, XqZrXrZq);
        f2m_reduce(XqZrXrZq);
        f2m_Add(t, XqZr, XrZq, XrZqPLUSXqZr);
        f2m_square(t, XrZqPLUSXqZr, XrZqPLUSXqZrSquared);
        f2m_reduce(XrZqPLUSXqZrSquared);
        copy(t, XrZqPLUSXqZrSquared, Zr);
        f2m_mult(t, xP, XrZqPLUSXqZrSquared, xpXrZqPLUSXqZrSquared);
        f2m_reduce(xpXrZqPLUSXqZrSquared);
        f2m_Add(t, xpXrZqPLUSXqZrSquared, XqZrXrZq, Xr);
        f2m_square(t, Xq, XqSquard);
        f2m_reduce(XqSquard);
        f2m_square(t, Zq, ZqSquard);
        f2m_reduce(ZqSquard);
        f2m_mult(t, XqSquard, ZqSquard, XqSquardZqSquard);
        f2m_reduce(XqSquardZqSquard);
        copy(t, XqSquardZqSquard, Zq);
        f2m_square(t, XqSquard, XqPow4);
        f2m_reduce(XqPow4);
        f2m_square(t, ZqSquard, ZqPow4);
        f2m_reduce(ZqPow4);
        f2m_mult(t, b, ZqPow4, bZqPow4);
        f2m_reduce(bZqPow4);
        f2m_Add(t, XqPow4, bZqPow4, Xq);
      }
      bitMask >>= 1;
    }
  }
  uint32_t ZqInverse[t], ZrInverse[t], Xq_ZqInverse_PLUS_xP[t], Xr_ZrInverse_PLUS_xP[t], term2[t], term3[t], xPInverse[t], result[t];
  uint32_t Xq_ZqInverse[t2], Xr_ZrInverse[t2], xPSquared[t2], term1[t2], term4[t2], term5[t2];
  for (y = 0; y < t2; y++) {
    Xq_ZqInverse[y] = 0x0;
    Xr_ZrInverse[y] = 0x0;
    term1[y] = 0x0;
    term4[y] = 0x0;
    term5[y] = 0x0;
  }
  f2m_calculateInverse(t, Zq, F, ZqInverse);
  f2m_mult(t, Xq, ZqInverse, Xq_ZqInverse);
  f2m_reduce(Xq_ZqInverse);
  copy(t, Xq_ZqInverse, xQ);
  f2m_Add(t, Xq_ZqInverse, xP, Xq_ZqInverse_PLUS_xP);
  f2m_calculateInverse(t, Zr, F, ZrInverse);
  f2m_mult(t, Xr, ZrInverse, Xr_ZrInverse);
  f2m_reduce(Xr_ZrInverse);
  f2m_Add(t, Xr_ZrInverse, xP, Xr_ZrInverse_PLUS_xP);
  f2m_square(t, xP, xPSquared);
  f2m_reduce(xPSquared);
  f2m_mult(t, Xr_ZrInverse_PLUS_xP, Xq_ZqInverse_PLUS_xP, term1);
  f2m_reduce(term1);
  f2m_Add(t, term1, xPSquared, term2);
  f2m_Add(t, term2, yP, term3);
  f2m_mult(t, Xq_ZqInverse_PLUS_xP, term3, term4);
  f2m_reduce(term4);
  f2m_calculateInverse(t, xP, F, xPInverse);
  f2m_mult(t, xPInverse, term4, term5);
  f2m_reduce(term5);
  f2m_Add(t, term5, yP, result);
  copy(t, result, yQ);
}
```