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

```asm
<quick_sort>:
  endbr64
  push   %r15
  mov    %rdi,%r9
  mov    %edx,%ecx
  push   %r14
  mov    %esi,%r14d
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %edx,0x38(%rsp)
L980:
  mov    %r14d,%edx
  mov    %ecx,%esi
  add    %ecx,%edx
  mov    %r14d,%ecx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  mov    (%r9,%rax,4),%edx
L993:
  cmp    %esi,%ecx
  jg     L109
L69:
  movslq %ecx,%rax
  movslq %esi,%rbx
  shl    $0x2,%rax
  lea    (%r9,%rbx,4),%r11
  lea    (%r9,%rax,1),%r8
  mov    (%r11),%edi
  lea    0x4(%r9,%rax,1),%rax
  mov    (%r8),%r10d
  cmp    %edx,%r10d
  jge    L494
  nopl   (%rax)
L136:
  mov    %rax,%r8
  mov    (%rax),%r10d
  lea    0x4(%rax),%rax
  add    $0x1,%ecx
  cmp    %edx,%r10d
  jl     L136
  cmp    %edi,%edx
  jge    L286
L546:
  lea    -0x4(%r9,%rbx,4),%rax
  nopl   0x0(%rax,%rax,1)
L75:
  mov    %rax,%r11
  mov    (%rax),%edi
  sub    $0x4,%rax
  sub    $0x1,%esi
  cmp    %edx,%edi
  jg     L75
L286:
  cmp    %ecx,%esi
  jl     L993
  mov    %edi,(%r8)
  add    $0x1,%ecx
  sub    $0x1,%esi
  mov    %r10d,(%r11)
L631:
  cmp    %esi,%ecx
  jle    L69
L109:
  mov    %ecx,0x10(%rsp)
  mov    %esi,0x18(%rsp)
  cmp    %r14d,%esi
  jg     L753
L713:
  mov    0x38(%rsp),%ebx
  cmp    %ebx,0x10(%rsp)
  jge    L442
  mov    0x10(%rsp),%r14d
  mov    %ebx,%ecx
  jmp    L980
L494:
  cmp    %edi,%edx
  jl     L546
  mov    %edi,(%r8)
  add    $0x1,%ecx
  sub    $0x1,%esi
  mov    %r10d,(%r11)
  jmp    L631
L914:
  mov    %ecx,0x1c(%rsp)
  mov    %esi,0x20(%rsp)
  cmp    %ecx,%r14d
  jl     L213
L900:
  mov    0x20(%rsp),%ebx
  cmp    %ebx,0x18(%rsp)
  jle    L713
  mov    %ebx,%r14d
L753:
  mov    0x18(%rsp),%ebx
  mov    %r14d,%esi
  mov    %ebx,%edx
  mov    %ebx,%ecx
  add    %r14d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  mov    (%r9,%rax,4),%edx
L892:
  cmp    %ecx,%esi
  jg     L914
  movslq %esi,%rax
  movslq %ecx,%rbx
  shl    $0x2,%rax
  lea    (%r9,%rbx,4),%r11
  lea    (%r9,%rax,1),%r8
  mov    (%r11),%edi
  lea    0x4(%r9,%rax,1),%rax
  mov    (%r8),%r10d
  cmp    %r10d,%edx
  jle    L428
  xchg   %ax,%ax
L157:
  mov    %rax,%r8
  mov    (%rax),%r10d
  lea    0x4(%rax),%rax
  add    $0x1,%esi
  cmp    %r10d,%edx
  jg     L157
  cmp    %edi,%edx
  jge    L214
L466:
  lea    -0x4(%r9,%rbx,4),%rax
  nopl   0x0(%rax,%rax,1)
L0:
  mov    %rax,%r11
  mov    (%rax),%edi
  sub    $0x4,%rax
  sub    $0x1,%ecx
  cmp    %edi,%edx
  jl     L0
L214:
  cmp    %esi,%ecx
  jl     L892
  mov    %edi,(%r8)
  add    $0x1,%esi
  sub    $0x1,%ecx
  mov    %r10d,(%r11)
  jmp    L892
L428:
  cmp    %edi,%edx
  jl     L466
  mov    %edi,(%r8)
  add    $0x1,%esi
  sub    $0x1,%ecx
  mov    %r10d,(%r11)
  jmp    L892
L606:
  mov    %ecx,0x24(%rsp)
  mov    %esi,0x28(%rsp)
  cmp    %ecx,%r14d
  jl     L639
L498:
  mov    0x28(%rsp),%ebx
  cmp    %ebx,0x1c(%rsp)
  jle    L900
  mov    %ebx,%r14d
L213:
  mov    0x1c(%rsp),%ebx
  mov    %r14d,%esi
  mov    %ebx,%edx
  mov    %ebx,%ecx
  add    %r14d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  mov    (%r9,%rax,4),%edx
  nopl   0x0(%rax,%rax,1)
L756:
  cmp    %ecx,%esi
  jg     L606
  movslq %esi,%rax
  movslq %ecx,%rbx
  shl    $0x2,%rax
  lea    (%r9,%rbx,4),%r11
  lea    (%r9,%rax,1),%r8
  mov    (%r11),%edi
  lea    0x4(%r9,%rax,1),%rax
  mov    (%r8),%r10d
  cmp    %r10d,%edx
  jle    L87
  xchg   %ax,%ax
L162:
  mov    %rax,%r8
  mov    (%rax),%r10d
  lea    0x4(%rax),%rax
  add    $0x1,%esi
  cmp    %r10d,%edx
  jg     L162
  cmp    %edi,%edx
  jge    L532
L27:
  lea    -0x4(%r9,%rbx,4),%rax
  nopl   0x0(%rax,%rax,1)
L140:
  mov    %rax,%r11
  mov    (%rax),%edi
  sub    $0x4,%rax
  sub    $0x1,%ecx
  cmp    %edi,%edx
  jl     L140
L532:
  cmp    %esi,%ecx
  jl     L756
  mov    %edi,(%r8)
  add    $0x1,%esi
  sub    $0x1,%ecx
  mov    %r10d,(%r11)
  jmp    L756
L87:
  cmp    %edi,%edx
  jl     L27
  mov    %edi,(%r8)
  add    $0x1,%esi
  sub    $0x1,%ecx
  mov    %r10d,(%r11)
  jmp    L756
L640:
  mov    %edx,0x2c(%rsp)
  mov    %ecx,0x30(%rsp)
  cmp    %edx,%r14d
  jl     L725
L215:
  mov    0x30(%rsp),%ebx
  cmp    %ebx,0x24(%rsp)
  jle    L498
  mov    %ebx,%r14d
L639:
  mov    0x24(%rsp),%ebx
  mov    %r14d,%ecx
  mov    %ebx,%edx
  add    %r14d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebx,%edx
  sar    %eax
  cltq
  mov    (%r9,%rax,4),%esi
  nopl   0x0(%rax,%rax,1)
L962:
  cmp    %edx,%ecx
  jg     L640
  movslq %ecx,%rax
  movslq %edx,%rbx
  shl    $0x2,%rax
  lea    (%r9,%rbx,4),%r11
  lea    (%r9,%rax,1),%rdi
  mov    (%r11),%r10d
  lea    0x4(%r9,%rax,1),%rax
  mov    (%rdi),%r8d
  cmp    %r8d,%esi
  jle    L976
  xchg   %ax,%ax
L515:
  mov    %rax,%rdi
  mov    (%rax),%r8d
  lea    0x4(%rax),%rax
  add    $0x1,%ecx
  cmp    %r8d,%esi
  jg     L515
  cmp    %r10d,%esi
  jge    L512
L186:
  lea    -0x4(%r9,%rbx,4),%rax
  nopl   0x0(%rax)
L181:
  mov    %rax,%r11
  mov    (%rax),%r10d
  sub    $0x4,%rax
  sub    $0x1,%edx
  cmp    %r10d,%esi
  jl     L181
L512:
  cmp    %ecx,%edx
  jl     L962
  mov    %r10d,(%rdi)
  add    $0x1,%ecx
  sub    $0x1,%edx
  mov    %r8d,(%r11)
  jmp    L962
L976:
  cmp    %r10d,%esi
  jl     L186
  mov    %r10d,(%rdi)
  add    $0x1,%ecx
  sub    $0x1,%edx
  mov    %r8d,(%r11)
  jmp    L962
L725:
  mov    %r9,%r11
L842:
  mov    0x2c(%rsp),%ebx
  mov    %r14d,%esi
  mov    %ebx,%edx
  mov    %ebx,%ecx
  add    %r14d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  mov    (%r11,%rax,4),%edx
L166:
  cmp    %ecx,%esi
  jg     L1013
  movslq %esi,%rax
  movslq %ecx,%rbx
  shl    $0x2,%rax
  lea    (%r11,%rbx,4),%r10
  lea    (%r11,%rax,1),%r9
  mov    (%r10),%edi
  lea    0x4(%r11,%rax,1),%rax
  mov    (%r9),%r8d
  cmp    %r8d,%edx
  jle    L852
  nopl   0x0(%rax)
L855:
  mov    %rax,%r9
  mov    (%rax),%r8d
  lea    0x4(%rax),%rax
  add    $0x1,%esi
  cmp    %r8d,%edx
  jg     L855
  cmp    %edi,%edx
  jge    L674
L218:
  lea    -0x4(%r11,%rbx,4),%rax
  nopl   0x0(%rax,%rax,1)
L766:
  mov    %rax,%r10
  mov    (%rax),%edi
  sub    $0x4,%rax
  sub    $0x1,%ecx
  cmp    %edi,%edx
  jl     L766
L674:
  cmp    %ecx,%esi
  jle    L159
L1013:
  mov    %ecx,0x14(%rsp)
  mov    %esi,0x34(%rsp)
  cmp    %ecx,%r14d
  jl     L893
L581:
  mov    0x34(%rsp),%ebx
  cmp    %ebx,0x2c(%rsp)
  jle    L329
  mov    %ebx,%r14d
  jmp    L842
L765:
  cmp    %r15d,%r14d
  jl     L1007
L158:
  cmp    %r10d,0x14(%rsp)
  jle    L581
  mov    %r10d,%r14d
L893:
  mov    0x14(%rsp),%r15d
  mov    %r14d,%r10d
  mov    %r15d,%edx
  add    %r14d,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  mov    (%r11,%rax,4),%edx
  nopl   0x0(%rax,%rax,1)
L630:
  cmp    %r15d,%r10d
  jg     L765
  movslq %r10d,%rax
  movslq %r15d,%r9
  shl    $0x2,%rax
  lea    (%r11,%r9,4),%r8
  lea    (%r11,%rax,1),%rdi
  mov    (%r8),%ecx
  lea    0x4(%r11,%rax,1),%rax
  mov    (%rdi),%esi
  cmp    %edx,%esi
  jge    L862
  nopl   (%rax)
L597:
  mov    %rax,%rdi
  mov    (%rax),%esi
  lea    0x4(%rax),%rax
  add    $0x1,%r10d
  cmp    %esi,%edx
  jg     L597
  cmp    %ecx,%edx
  jge    L785
L384:
  lea    -0x4(%r11,%r9,4),%rax
  nopw   0x0(%rax,%rax,1)
L810:
  mov    %rax,%r8
  mov    (%rax),%ecx
  sub    $0x4,%rax
  sub    $0x1,%r15d
  cmp    %ecx,%edx
  jl     L810
L785:
  cmp    %r10d,%r15d
  jl     L630
  mov    %ecx,(%rdi)
  add    $0x1,%r10d
  sub    $0x1,%r15d
  mov    %esi,(%r8)
  jmp    L630
L862:
  cmp    %ecx,%edx
  jl     L384
  mov    %ecx,(%rdi)
  add    $0x1,%r10d
  sub    $0x1,%r15d
  mov    %esi,(%r8)
  jmp    L630
L852:
  cmp    %edi,%edx
  jl     L218
L159:
  mov    %edi,(%r9)
  add    $0x1,%esi
  sub    $0x1,%ecx
  mov    %r8d,(%r10)
  jmp    L166
L1007:
  mov    %r10d,0x3c(%rsp)
  mov    %r15d,0xc(%rsp)
  mov    %r11,%r15
L616:
  mov    0xc(%rsp),%r13d
  mov    %r14d,%r10d
  lea    0x0(%r13,%r14,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%edx
  nopw   0x0(%rax,%rax,1)
L744:
  cmp    %r13d,%r14d
  jg     L686
L539:
  movslq %r14d,%rax
  movslq %r13d,%r9
  shl    $0x2,%rax
  lea    (%r15,%r9,4),%r8
  lea    (%r15,%rax,1),%rdi
  mov    (%r8),%ecx
  lea    0x4(%r15,%rax,1),%rax
  mov    (%rdi),%esi
  cmp    %edx,%esi
  jge    L758
  nopl   (%rax)
L589:
  mov    %rax,%rdi
  mov    (%rax),%esi
  lea    0x4(%rax),%rax
  add    $0x1,%r14d
  cmp    %esi,%edx
  jg     L589
  cmp    %ecx,%edx
  jge    L868
L865:
  lea    -0x4(%r15,%r9,4),%rax
  nopw   0x0(%rax,%rax,1)
L918:
  mov    %rax,%r8
  mov    (%rax),%ecx
  sub    $0x4,%rax
  sub    $0x1,%r13d
  cmp    %ecx,%edx
  jl     L918
L868:
  cmp    %r14d,%r13d
  jl     L744
  mov    %ecx,(%rdi)
  add    $0x1,%r14d
  sub    $0x1,%r13d
  mov    %esi,(%r8)
L273:
  cmp    %r13d,%r14d
  jle    L539
L686:
  cmp    %r13d,%r10d
  jl     L847
L716:
  cmp    %r14d,0xc(%rsp)
  jg     L616
  mov    0x3c(%rsp),%r10d
  mov    %r15,%r11
  jmp    L158
L758:
  cmp    %ecx,%edx
  jl     L865
  mov    %ecx,(%rdi)
  add    $0x1,%r14d
  sub    $0x1,%r13d
  mov    %esi,(%r8)
  jmp    L273
L884:
  cmp    %ebp,%r10d
  jl     L995
L1022:
  cmp    %r12d,%r13d
  jle    L716
  mov    %r12d,%r10d
L847:
  lea    0x0(%r13,%r10,1),%edx
  mov    %r13d,%ebp
  mov    %r10d,%r12d
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%edx
  nopl   0x0(%rax,%rax,1)
L946:
  cmp    %ebp,%r12d
  jg     L884
  movslq %r12d,%rax
  movslq %ebp,%r9
  shl    $0x2,%rax
  lea    (%r15,%r9,4),%r8
  lea    (%r15,%rax,1),%rdi
  mov    (%r8),%ecx
  lea    0x4(%r15,%rax,1),%rax
  mov    (%rdi),%esi
  cmp    %edx,%esi
  jge    L910
  nopl   (%rax)
L307:
  mov    %rax,%rdi
  mov    (%rax),%esi
  lea    0x4(%rax),%rax
  add    $0x1,%r12d
  cmp    %esi,%edx
  jg     L307
  cmp    %ecx,%edx
  jge    L453
L978:
  lea    -0x4(%r15,%r9,4),%rax
  nopw   0x0(%rax,%rax,1)
L253:
  mov    %rax,%r8
  mov    (%rax),%ecx
  sub    $0x4,%rax
  sub    $0x1,%ebp
  cmp    %ecx,%edx
  jl     L253
L453:
  cmp    %r12d,%ebp
  jl     L946
  mov    %ecx,(%rdi)
  add    $0x1,%r12d
  sub    $0x1,%ebp
  mov    %esi,(%r8)
  jmp    L946
L910:
  cmp    %ecx,%edx
  jl     L978
  mov    %ecx,(%rdi)
  add    $0x1,%r12d
  sub    $0x1,%ebp
  mov    %esi,(%r8)
  jmp    L946
L132:
  cmp    %edx,%r10d
  jl     L858
L490:
  cmp    %ebx,%ebp
  jle    L1022
  mov    %ebx,%r10d
L995:
  lea    0x0(%rbp,%r10,1),%edx
  mov    %r10d,%ebx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebp,%edx
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%edi
  nopw   0x0(%rax,%rax,1)
L32:
  cmp    %edx,%ebx
  jg     L132
  movslq %ebx,%rax
  movslq %edx,%r11
  shl    $0x2,%rax
  lea    (%r15,%r11,4),%r9
  lea    (%r15,%rax,1),%rsi
  mov    (%r9),%r8d
  lea    0x4(%r15,%rax,1),%rax
  mov    (%rsi),%ecx
  cmp    %edi,%ecx
  jge    L256
  nopl   0x0(%rax)
L229:
  mov    %rax,%rsi
  mov    (%rax),%ecx
  lea    0x4(%rax),%rax
  add    $0x1,%ebx
  cmp    %ecx,%edi
  jg     L229
  cmp    %r8d,%edi
  jge    L461
L18:
  lea    -0x4(%r15,%r11,4),%rax
  nopw   0x0(%rax,%rax,1)
L763:
  mov    %rax,%r9
  mov    (%rax),%r8d
  sub    $0x4,%rax
  sub    $0x1,%edx
  cmp    %r8d,%edi
  jl     L763
L461:
  cmp    %ebx,%edx
  jl     L32
  mov    %r8d,(%rsi)
  add    $0x1,%ebx
  sub    $0x1,%edx
  mov    %ecx,(%r9)
  jmp    L32
  nopl   0x0(%rax)
L256:
  cmp    %r8d,%edi
  jl     L18
  mov    %r8d,(%rsi)
  add    $0x1,%ebx
  sub    $0x1,%edx
  mov    %ecx,(%r9)
  jmp    L32
L329:
  mov    %r11,%r9
  jmp    L215
L442:
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L858:
  mov    %r10d,%esi
  mov    %r15,%rdi
  call   <quick_sort>
  jmp    L490
```

assistant: ```c
void quick_sort(int *A, int left, int right) {
  int i = left;
  int j = right;
  int pivot = A[(left + right) / 2];
  while (i <= j) {
    while (A[i] < pivot) {
      i++;
    }
    while (A[j] > pivot) {
      j--;
    }
    if (i <= j) {
      int temp = A[i];
      A[i] = A[j];
      A[j] = temp;
      i++;
      j--;
    }
  }
  if (left < j) {
    quick_sort(A, left, j);
  }
  if (i < right) {
    quick_sort(A, i, right);
  }
}
```