user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    -0x14000(%rsp),%r11
L77:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L77
  sub    $0xd68,%rsp
  movdqa D132(%rip),%xmm0
  mov    $0x7e,%ecx
  mov    $0xa,%edx
  mov    %fs:0x28,%rax
  mov    %rax,0x14d58(%rsp)
  xor    %eax,%eax
  movaps %xmm0,0x13d20(%rsp)
  mov    %edi,%ebp
  mov    %rsi,%r13
  movdqa D49(%rip),%xmm0
  lea    0x14560(%rsp),%rdi
  lea    0x40(%rsp),%rbx
  mov    %dx,0x13cde(%rsp)
  lea    0x240(%rsp),%rdx
  lea    0x13d00(%rsp),%r12
  mov    $0x20,%esi
  movb   $0x0,0x13d40(%rsp)
  movaps %xmm0,0x13d30(%rsp)
  mov    %r12,%r9
  movdqa D19(%rip),%xmm0
  lea    0x14950(%rsp),%r15
  mov    %si,0x13cf0(%rsp)
  lea    0x13cd2(%rsp),%rsi
  movaps %xmm0,0x14550(%rsp)
  movdqa D25(%rip),%xmm0
  rep stos %rax,%es:(%rdi)
  mov    $0x28,%ecx
  movabs $0x5d64255b646e6564,%rdi
  movb   $0x0,0x13d18(%rsp)
  mov    %rdi,0x13d10(%rsp)
  movabs $0x7325732573257325,%rdi
  mov    %rdi,0x13cd2(%rsp)
  movabs $0x435753203a206425,%rdi
  mov    %rdi,0x13cc8(%rsp)
  mov    %rbx,%rdi
  mov    %cx,0x13cd0(%rsp)
  mov    $0x40,%ecx
  rep stos %rax,%es:(%rdi)
  mov    %rdx,%rdi
  movaps %xmm0,0x13d00(%rsp)
  movdqa D130(%rip),%xmm0
  mov    $0x40,%ecx
  lea    0x13cc8(%rsp),%rdx
  movl   $0x73257325,0x13cda(%rsp)
  rep stos %rax,%es:(%rdi)
  mov    %r12,%rcx
  mov    %r15,%rdi
  movaps %xmm0,0x13ce0(%rsp)
  movl   $0x203a2029,0x13cc3(%rsp)
  movb   $0x0,0x13cc7(%rsp)
  push   %r12
  lea    0x13ce8(%rsp),%rax
  push   %rax
  xor    %eax,%eax
  lea    0x13cd3(%rsp),%r8
  call   <sprintf@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  pop    %rdi
  pop    %r8
  cmp    $0x1,%ebp
  je     L165
  cmp    $0x3,%ebp
  je     L132
L159:
  mov    0x8(%r13),%rdi
  lea    D84(%rip),%rsi
  mov    $0x80,%ebp
  xor    %r12d,%r12d
  lea    0x13d50(%rsp),%r13
  call   <fopen@plt>
  movl   $0x0,0xc(%rsp)
  mov    %rax,%r14
  lea    0x20(%rsp),%rax
  mov    %rax,(%rsp)
  nopl   0x0(%rax,%rax,1)
L13:
  mov    %r14,%rdx
  mov    $0x400,%esi
  mov    %r13,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L139
  lea    0x14(%rsp),%rax
  lea    0x1c(%rsp),%rdx
  mov    %r15,%rsi
  mov    %r13,%rdi
  lea    0x18(%rsp),%rcx
  push   %rax
  lea    0x40(%rsp),%rax
  push   %rax
  lea    0x40(%rsp),%rax
  push   %rax
  lea    0x40(%rsp),%rax
  push   %rax
  mov    0x20(%rsp),%r9
  lea    0x30(%rsp),%r8
  call   <sscanf@plt>
  mov    0x34(%rsp),%edx
  add    $0x20,%rsp
  cmp    $0xffffffff,%edx
  je     L70
  mov    0x444(%rsp),%eax
  cmp    $0xffffffff,%eax
  je     L7
  lea    0x448(%rsp),%rcx
  mov    $0x1,%r8d
  jmp    L51
  nopl   0x0(%rax)
L186:
  mov    (%rcx),%eax
  add    $0x4,%rcx
  add    $0x1,%r8d
  cmp    $0xffffffff,%eax
  je     L164
L51:
  cmp    %eax,%edx
  jne    L186
  movsd  0x38(%rsp),%xmm3
  mov    0x1c(%rsp),%ecx
  mov    %ebp,%edx
  mov    %r12,%rdi
  movsd  0x30(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm1
  lea    D137(%rip),%rsi
  movsd  0x20(%rsp),%xmm0
  call   <fprintf@plt>
  mov    0x10(%rsp),%edx
  movslq %ebp,%rax
  addl   $0x1,0xc(%rsp)
  add    $0x1,%ebp
  mov    %edx,0x440(%rsp,%rax,4)
  movslq 0x1c(%rsp),%rax
  addl   $0x1,0x40(%rsp,%rax,4)
  jmp    L13
L70:
  movslq 0x1c(%rsp),%rax
  lea    0x14150(%rsp),%rbp
  lea    0x14550(%rsp),%rdx
  lea    0x13d20(%rsp),%rsi
  mov    %rbp,%rdi
  mov    0x240(%rsp,%rax,4),%r8d
  mov    %rax,%rcx
  xor    %eax,%eax
  call   <sprintf@plt>
  test   %r12,%r12
  je     L96
  mov    %r12,%rdi
  call   <fclose@plt>
L96:
  lea    D74(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x2,%ebp
  call   <fopen@plt>
  mov    %rax,%rdi
  mov    %rax,%r12
  call   <printHeader@plt>
  mov    $0x13880,%edx
  mov    $0xff,%esi
  lea    0x440(%rsp),%rdi
  call   <memset@plt>
  movsd  0x38(%rsp),%xmm3
  mov    0x1c(%rsp),%ecx
  mov    $0xffffffff,%r8d
  movsd  0x30(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm1
  mov    %r12,%rdi
  mov    $0x1,%edx
  movsd  0x20(%rsp),%xmm0
  lea    D137(%rip),%rsi
  call   <fprintf@plt>
  mov    0x18(%rsp),%edx
  mov    0x1c(%rsp),%esi
  xor    %eax,%eax
  lea    D7(%rip),%rdi
  mov    %edx,0x444(%rsp)
  call   <printf@plt>
  movslq 0x1c(%rsp),%rax
  addl   $0x1,0x240(%rsp,%rax,4)
  jmp    L13
L7:
  mov    $0x1,%r8d
L164:
  mov    %r8d,%edx
  mov    %ebp,%esi
  lea    D36(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L139:
  mov    %r12,%rdi
  xor    %ebp,%ebp
  lea    D66(%rip),%r12
  call   <fclose@plt>
  mov    %r14,%rdi
  call   <fclose@plt>
  mov    0xc(%rsp),%esi
  lea    D5(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L59
  nopl   0x0(%rax)
L52:
  add    $0x1,%rbp
  cmp    $0x80,%rbp
  je     L66
L59:
  mov    (%rbx,%rbp,4),%edx
  mov    %ebp,%esi
  test   %edx,%edx
  je     L52
  mov    %r12,%rdi
  xor    %eax,%eax
  add    $0x1,%rbp
  call   <printf@plt>
  cmp    $0x80,%rbp
  jne    L59
L66:
  xor    %eax,%eax
L5:
  mov    0x14d58(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L74
  add    $0x14d68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L132:
  mov    0x10(%r13),%rdi
  lea    0x14550(%rsp),%rsi
  call   <strcpy@plt>
  jmp    L159
L74:
  call   <__stack_chk_fail@plt>
L165:
  lea    D1(%rip),%rdi
  call   <puts@plt>
  or     $0xffffffff,%eax
  jmp    L5
```

tool_calls: name: extract_symbolic_data
arguments: tag: D132
datatype: byte[16]
name: extract_symbolic_data
arguments: tag: D49
datatype: byte[16]
name: extract_symbolic_data
arguments: tag: D19
datatype: byte[16]
name: extract_symbolic_data
arguments: tag: D25
datatype: byte[16]
name: extract_symbolic_data
arguments: tag: D130
datatype: byte[16]
name: extract_symbolic_data
arguments: tag: D84
datatype: string
name: extract_symbolic_data
arguments: tag: D137
datatype: string
name: extract_symbolic_data
arguments: tag: D74
datatype: string
name: extract_symbolic_data
arguments: tag: D7
datatype: string
name: extract_symbolic_data
arguments: tag: D36
datatype: string
name: extract_symbolic_data
arguments: tag: D66
datatype: string
name: extract_symbolic_data
arguments: tag: D5
datatype: string
name: extract_symbolic_data
arguments: tag: D1
datatype: string

tool: {"D132": [0x25,0x73,0x43,0x65,0x6c,0x6c,0x5f,0x42,0x4e,0x5f,0x31,0x30,0x35,0x36,0x5f,0x6e]}

tool: {"D49": [0x6f,0x64,0x65,0x25,0x64,0x5f,0x70,0x61,0x72,0x74,0x25,0x64,0x2e,0x73,0x77,0x63]}

tool: {"D19": [0x2e,0x2f,0x73,0x70,0x6c,0x69,0x74,0x5f,0x73,0x77,0x63,0x2f,0x00,0x00,0x00,0x00]}

tool: {"D25": [0x43,0x65,0x6c,0x6c,0x5f,0x42,0x4e,0x5f,0x31,0x30,0x35,0x36,0x5b,0x30,0x5d,0x2e]}

tool: {"D130": [0x20,0x25,0x6c,0x66,0x20,0x25,0x6c,0x66,0x20,0x25,0x6c,0x66,0x20,0x25,0x6c,0x66]}

tool: D84: r

tool: D137: %d %d %f %f %f %f %d


tool: D74: w

tool: D7: node = %d, root = %d


tool: D36: error i=%d j=%d


tool: D66:  NODE%d : %d comp


tool: D5: Total Compartments : %d


tool: D1: USEAGE : 

assistant: ```c
int main(int argc, char **argv) {
  FILE *fp;
  FILE *output_fp = NULL;
  char buf[1024];
  int table[20000];
  int id, parent, root;
  double x, y, z, diam;
  int i, j, hit;
  int node;
  char filename_template[] = "%sCell_BN_1056_node%d_part%d.swc";
  char filename[1024];
  char dirname[1024] = "./split_swc/";
  char cell_name[] = "Cell_BN_1056[0].dend[%d]";
  char scanf_template[] = "%s%s%s%s%s%s\n";
  char scanf_template1[] = "%d : SWC(";
  char scanf_template2[] = ") : ";
  char scanf_template3[] = " %lf %lf %lf %lf ";
  char scanf_format[1024];
  int comp_counter = 0;
  int comp_counter_node[128];
  int part_node[128];
  for (i = 0; i < 128; i++) {
    comp_counter_node[i] = 0;
    part_node[i] = 0;
  }
  sprintf(scanf_format, scanf_template, scanf_template1, cell_name, scanf_template2, cell_name, scanf_template3, cell_name);
  printf("%s\n", cell_name);
  if (argc == 1) {
    printf("USEAGE : \n");
    return (-1);
  } else if (argc == 3) {
    strcpy(argv[2], dirname);
  }
  fp = fopen(argv[1], "r");
  while (1) {
    if (fgets(buf, 1024, fp) == NULL) {
      break;
    }
    sscanf(buf, scanf_format, &node, &root, &id, &x, &y, &z, &diam, &parent);
    if (parent == -1) {
      sprintf(filename, filename_template, dirname, node, part_node[node]);
      if (output_fp != NULL) {
        fclose(output_fp);
      }
      output_fp = fopen(filename, "w");
      printHeader(output_fp);
      for (i = 0; i < 20000; i++) {
        table[i] = -1;
      }
      fprintf(output_fp, "%d %d %f %f %f %f %d\n", 1, node, x, y, z, diam, -1);
      table[1] = root;
      printf("node = %d, root = %d\n", node, root);
      part_node[node]++;
      i = 1;
    } else {
      j = 1;
      hit = 0;
      while (table[j] != -1) {
        if (table[j] == parent) {
          hit = 1;
          break;
        }
        j++;
      }
      if (hit == 0) {
        printf("error i=%d j=%d\n", i, j);
        break;
      }
      fprintf(output_fp, "%d %d %f %f %f %f %d\n", i, node, x, y, z, diam, j);
      table[i] = id;
      comp_counter++;
      comp_counter_node[node]++;
    }
    i++;
  }
  fclose(output_fp);
  fclose(fp);
  printf("Total Compartments : %d\n", comp_counter);
  for (i = 0; i < 128; i++) {
    if (comp_counter_node[i] != 0) {
      printf(" NODE%d : %d comp\n", i, comp_counter_node[i]);
    }
  }
  return (0);
}
```