user: What is the c source code of the assembly code below?

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  push   %rbx
  lea    -0x20000(%rsp),%r11
L108:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L108
  sub    $0xd0,%rsp
  mov    %edi,-0x200d4(%rbp)
  mov    %rsi,-0x200e0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    -0x200e0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x200b4(%rbp)
  mov    -0x200e0(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x200b0(%rbp)
  mov    -0x200b0(%rbp),%edx
  mov    -0x200b4(%rbp),%eax
  mov    %eax,%esi
  lea    D104(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D133(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x200b4(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%esi
  lea    D182(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D75(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x200c8(%rbp)
  jmp    L23
L22:
  cmpl   $0xe,-0x200c8(%rbp)
  jg     L32
  lea    D314(%rip),%rax
  jmp    L133
L32:
  lea    D197(%rip),%rax
L133:
  mov    -0x200c8(%rbp),%edx
  lea    0x7ff1(%rdx),%ecx
  mov    %rax,%rdx
  mov    %ecx,%esi
  lea    D345(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x200c8(%rbp)
L23:
  cmpl   $0xf,-0x200c8(%rbp)
  jle    L22
  lea    D42(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x1,-0x20020(%rbp)
  movl   $0x1,-0x200cc(%rbp)
  jmp    L121
L182:
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x200cc(%rbp),%xmm0
  mov    -0x200b0(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x200ac(%rbp)
  movss  -0x200ac(%rbp),%xmm1
  movss  D283(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x200ac(%rbp),%xmm1
  movss  D140(%rip),%xmm0
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  sub    $0x1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  movss  -0x200ac(%rbp),%xmm0
  movaps %xmm0,%xmm2
  addss  %xmm0,%xmm2
  divss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,-0x200a8(%rbp)
  mov    -0x200a8(%rbp),%eax
  movd   %eax,%xmm0
  call   <log@plt>
  movsd  D302(%rip),%xmm1
  divsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm1,%xmm0
  movss  %xmm0,-0x200a4(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x200a4(%rbp),%xmm1
  movsd  D188(%rip),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <exp@plt>
  shl    $0x8,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D81(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  mov    -0x200cc(%rbp),%edx
  movslq %edx,%rdx
  mov    %eax,-0x20020(%rbp,%rdx,4)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x200a4(%rbp),%xmm1
  movsd  D302(%rip),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <exp@plt>
  mov    $0x1,%edx
  sub    %eax,%edx
  pxor   %xmm0,%xmm0
  cvtsi2ss %edx,%xmm0
  movss  %xmm0,-0x200a0(%rbp)
  movl   $0x1,-0x200c8(%rbp)
  jmp    L127
L62:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x200a4(%rbp),%xmm1
  movsd  D302(%rip),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <exp@plt>
  mov    %eax,%ebx
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x200c8(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D237(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movq   D157(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd -0x200a4(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <exp@plt>
  mov    %eax,%r12d
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x200c8(%rbp),%xmm0
  movss  D166(%rip),%xmm1
  xorps  %xmm1,%xmm0
  divss  -0x200a4(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,%edi
  call   <exp@plt>
  mov    %eax,%edx
  mov    %r12d,%eax
  sub    %edx,%eax
  imul   %ebx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mov    -0x200c8(%rbp),%eax
  cltq
  movss  %xmm0,-0x200a0(%rbp,%rax,4)
  addl   $0x1,-0x200c8(%rbp)
L127:
  cmpl   $0xe,-0x200c8(%rbp)
  jle    L62
  pxor   %xmm1,%xmm1
  cvtss2sd -0x200a4(%rbp),%xmm1
  movsd  D302(%rip),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <exp@plt>
  mov    %eax,%ebx
  pxor   %xmm1,%xmm1
  cvtss2sd -0x200a4(%rbp),%xmm1
  movsd  D299(%rip),%xmm0
  divsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <exp@plt>
  imul   %ebx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x20064(%rbp)
  movl   $0x0,-0x200c4(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x200bc(%rbp)
  movl   $0x0,-0x200b8(%rbp)
  movl   $0x0,-0x200c8(%rbp)
  jmp    L231
L213:
  mov    -0x200c8(%rbp),%eax
  cltq
  movss  -0x200a0(%rbp,%rax,4),%xmm0
  comiss -0x200bc(%rbp),%xmm0
  jbe    L228
  mov    -0x200c8(%rbp),%eax
  cltq
  movss  -0x200a0(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x200bc(%rbp)
  mov    -0x200c8(%rbp),%eax
  mov    %eax,-0x200b8(%rbp)
L228:
  mov    -0x200c8(%rbp),%eax
  cltq
  movss  -0x200a0(%rbp,%rax,4),%xmm1
  movss  D195(%rip),%xmm0
  mulss  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D81(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  mov    -0x200c8(%rbp),%edx
  movslq %edx,%rdx
  mov    %eax,-0x20060(%rbp,%rdx,4)
  mov    -0x200c8(%rbp),%eax
  cltq
  mov    -0x20060(%rbp,%rax,4),%eax
  test   %eax,%eax
  jne    L226
  mov    -0x200c8(%rbp),%eax
  cltq
  movl   $0x1,-0x20060(%rbp,%rax,4)
L226:
  mov    -0x200c8(%rbp),%eax
  cltq
  mov    -0x20060(%rbp,%rax,4),%eax
  add    %eax,-0x200c4(%rbp)
  addl   $0x1,-0x200c8(%rbp)
L231:
  cmpl   $0xf,-0x200c8(%rbp)
  jle    L213
  mov    -0x200b8(%rbp),%eax
  cltq
  mov    -0x20060(%rbp,%rax,4),%edx
  mov    $0x8000,%eax
  sub    -0x200c4(%rbp),%eax
  add    %eax,%edx
  mov    -0x200b8(%rbp),%eax
  cltq
  mov    %edx,-0x20060(%rbp,%rax,4)
  movl   $0x0,-0x200c0(%rbp)
  lea    D75(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x200c8(%rbp)
  jmp    L88
L157:
  mov    -0x200c8(%rbp),%eax
  cltq
  mov    -0x20060(%rbp,%rax,4),%eax
  add    %eax,-0x200c0(%rbp)
  cmpl   $0xe,-0x200c8(%rbp)
  jg     L222
  lea    D314(%rip),%rax
  jmp    L145
L222:
  lea    D197(%rip),%rax
L145:
  mov    -0x200c0(%rbp),%ecx
  mov    %rax,%rdx
  mov    %ecx,%esi
  lea    D345(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x200c8(%rbp)
L88:
  cmpl   $0xf,-0x200c8(%rbp)
  jle    L157
  mov    -0x200cc(%rbp),%eax
  cmp    -0x200b4(%rbp),%eax
  jge    L168
  lea    D314(%rip),%rax
  jmp    L225
L168:
  lea    D197(%rip),%rax
L225:
  mov    %rax,%rsi
  lea    D183(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x200cc(%rbp)
L121:
  mov    -0x200cc(%rbp),%eax
  cmp    -0x200b4(%rbp),%eax
  jle    L182
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D152(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x200b4(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%esi
  lea    D288(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x200cc(%rbp)
  jmp    L132
L80:
  mov    -0x200cc(%rbp),%eax
  cmp    -0x200b4(%rbp),%eax
  jge    L6
  lea    D314(%rip),%rax
  jmp    L14
L6:
  lea    D197(%rip),%rax
L14:
  mov    -0x200cc(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x20020(%rbp,%rdx,4),%ecx
  mov    %rax,%rdx
  mov    %ecx,%esi
  lea    D208(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x200cc(%rbp)
L132:
  mov    -0x200cc(%rbp),%eax
  cmp    -0x200b4(%rbp),%eax
  jle    L80
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L58
  call   <__stack_chk_fail@plt>
L58:
  add    $0x200d0,%rsp
  pop    %rbx
  pop    %r12
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D104
type_guessed: string
name: disassemble_data
arguments: data_label: D133
type_guessed: string
name: disassemble_data
arguments: data_label: D182
type_guessed: string
name: disassemble_data
arguments: data_label: D75
type_guessed: string
name: disassemble_data
arguments: data_label: D314
type_guessed: string
name: disassemble_data
arguments: data_label: D197
type_guessed: string
name: disassemble_data
arguments: data_label: D345
type_guessed: string
name: disassemble_data
arguments: data_label: D42
type_guessed: string
name: disassemble_data
arguments: data_label: D283
type_guessed: byte[4]
name: disassemble_data
arguments: data_label: D140
type_guessed: f32
name: disassemble_data
arguments: data_label: D302
type_guessed: byte[8]
name: disassemble_data
arguments: data_label: D188
type_guessed: byte[8]
name: disassemble_data
arguments: data_label: D81
type_guessed: byte[8]
name: disassemble_data
arguments: data_label: D237
type_guessed: byte[8]
name: disassemble_data
arguments: data_label: D157
type_guessed: byte[8]
name: disassemble_data
arguments: data_label: D166
type_guessed: byte[4]
name: disassemble_data
arguments: data_label: D299
type_guessed: byte[8]
name: disassemble_data
arguments: data_label: D195
type_guessed: byte[4]
name: disassemble_data
arguments: data_label: D183
type_guessed: string
name: disassemble_data
arguments: data_label: D48
type_guessed: string
name: disassemble_data
arguments: data_label: D152
type_guessed: string
name: disassemble_data
arguments: data_label: D288
type_guessed: string
name: disassemble_data
arguments: data_label: D208
type_guessed: string

tool: D104: /* This file is auto-generated using "gen_cdf %d %d" */



tool: D133: #include "pvq_code.h"


tool: D182: const ogg_uint16_t cdf_table[%d][16] = {


tool: D75:   {

tool: D314: ,

tool: 

tool: D345: %5d%s

tool: D42: },

tool: {"D283": [0x00,0x00,0x80,0x40]}

tool: D140: 1

tool: {"D302": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xbf]}

tool: {"D188": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

tool: {"D81": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: {"D237": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D157": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

tool: {"D166": [0x00,0x00,0x00,0x80]}

tool: {"D299": [0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0xc0]}

tool: {"D195": [0x00,0x00,0x00,0x47]}

tool: D183: }%s


tool: D48: };

tool: D152: 


tool: D288: const unsigned char decayE[%d] = {


tool: D208:   %d%s


assistant: ```c
int main(int argc, char **argv) {
  int i;
  int N;
  int shift;
  int j;
  float p[16];
  int pi[16];
  int sum;
  int aN[32768];
  N = atoi(argv[1]);
  shift = atoi(argv[2]);
  printf("/* This file is auto-generated using \"gen_cdf %d %d\" */\n\n", N, shift);
  printf("#include \"pvq_code.h\"\n\n");
  printf("const ogg_uint16_t cdf_table[%d][16] = {\n", N + 1);
  printf("  {");
  for (j = 0; j < 16; j++) {
    printf("%5d%s", 32768U - 15 + j, j + 1 < 16 ? "," : "");
  }
  printf("},\n");
  aN[0] = 1;
  for (i = 1; i <= N; i++) {
    float Ex;
    float gamma;
    float a;
    int cdf;
    float maxp;
    int maxj;
    Ex = (float)i / (1 << shift);
    gamma = (sqrt(1 + 4 * Ex * Ex) - 1) / (2 * Ex);
    a = -.5 / log(gamma);
    aN[i] = floor(.5 + 256 * exp(-1. / a));
    p[0] = 1 - exp(-.5 / a);
    for (j = 1; j < 15; j++)
      p[j] = exp(-.5 / a) * (exp(-((float)j - 1.) / a) - exp(-(float)j / a));
    p[15] = exp(-.5 / a) * exp(-14. / a);
    sum = 0;
    maxp = 0;
    maxj = 0;
    for (j = 0; j < 16; j++) {
      if (p[j] > maxp) {
        maxp = p[j];
        maxj = j;
      }
      pi[j] = floor(.5 + 32768 * p[j]);
      if (pi[j] == 0)
        pi[j] = 1;
      sum += pi[j];
    }
    pi[maxj] += 32768 - sum;
    cdf = 0;
    printf("  {");
    for (j = 0; j < 16; j++) {
      cdf += pi[j];
      printf("%5d%s", cdf, j + 1 < 16 ? "," : "");
    }
    printf("}%s\n", i + 1 <= N ? "," : "");
  }
  printf("};\n");
  printf("\n\n");
  printf("const unsigned char decayE[%d] = {\n", N + 1);
  for (i = 0; i <= N; i++)
    printf("  %d%s\n", aN[i], i + 1 <= N ? "," : "");
  printf("};\n");
  return 0;
}
```