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

```asm
<file_create>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x240,%rsp
  mov    %rdi,-0x238(%rbp)
  mov    %rsi,-0x240(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x22c(%rbp)
  lea    -0x22c(%rbp),%rdx
  mov    -0x238(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <parse_tex@plt>
  mov    %rax,-0x220(%rbp)
  cmpq   $0x0,-0x220(%rbp)
  jne    L105
  mov    $0x0,%eax
  jmp    L64
L105:
  mov    -0x22c(%rbp),%eax
  mov    %eax,%esi
  lea    D147(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  call   <fork@plt>
  mov    %eax,-0x224(%rbp)
  cmpl   $0x0,-0x224(%rbp)
  jne    L52
  mov    -0x238(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  mov    %rdx,%rcx
  lea    D39(%rip),%rdx
  mov    $0x200,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  nop
L132:
  lea    -0x210(%rbp),%rax
  lea    D141(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x218(%rbp)
  cmpq   $0x0,-0x218(%rbp)
  je     L132
  mov    -0x218(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L52:
  lea    -0x230(%rbp),%rax
  mov    %rax,%rdi
  call   <wait@plt>
  call   <fork@plt>
  mov    %eax,-0x224(%rbp)
  cmpl   $0x0,-0x224(%rbp)
  jne    L34
  mov    -0x238(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  mov    %rdx,%rcx
  lea    D190(%rip),%rdx
  mov    $0x200,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  lea    -0x210(%rbp),%rax
  mov    $0x0,%r8d
  mov    %rax,%rcx
  lea    D83(%rip),%rax
  mov    %rax,%rdx
  lea    D50(%rip),%rax
  mov    %rax,%rsi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <execl@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L34:
  lea    -0x230(%rbp),%rax
  mov    %rax,%rdi
  call   <wait@plt>
  mov    -0x22c(%rbp),%eax
  test   %eax,%eax
  jle    L149
  call   <fork@plt>
  mov    %eax,-0x224(%rbp)
  cmpl   $0x0,-0x224(%rbp)
  jne    L9
  mov    -0x238(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  mov    %rdx,%rcx
  lea    D190(%rip),%rdx
  mov    $0x200,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  lea    -0x210(%rbp),%rax
  mov    $0x0,%r8d
  mov    %rax,%rcx
  lea    D83(%rip),%rax
  mov    %rax,%rdx
  lea    D50(%rip),%rax
  mov    %rax,%rsi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <execl@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L9:
  lea    -0x230(%rbp),%rax
  mov    %rax,%rdi
  call   <wait@plt>
L149:
  call   <fork@plt>
  mov    %eax,-0x224(%rbp)
  cmpl   $0x0,-0x224(%rbp)
  jne    L93
  mov    -0x238(%rbp),%rcx
  mov    -0x238(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%r8
  mov    %rdx,%rcx
  lea    D15(%rip),%rdx
  mov    $0x200,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  lea    -0x210(%rbp),%rax
  mov    $0x0,%r8d
  mov    %rax,%rcx
  lea    D83(%rip),%rax
  mov    %rax,%rdx
  lea    D50(%rip),%rax
  mov    %rax,%rsi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <execl@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L93:
  lea    -0x230(%rbp),%rax
  mov    %rax,%rdi
  call   <wait@plt>
  call   <fork@plt>
  mov    %eax,-0x224(%rbp)
  cmpl   $0x0,-0x224(%rbp)
  jne    L68
  mov    -0x238(%rbp),%rcx
  mov    -0x238(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  mov    %rcx,%r9
  lea    D212(%rip),%r8
  mov    %rdx,%rcx
  lea    D94(%rip),%rdx
  mov    $0x200,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  lea    -0x210(%rbp),%rax
  mov    $0x0,%r8d
  mov    %rax,%rcx
  lea    D83(%rip),%rax
  mov    %rax,%rdx
  lea    D50(%rip),%rax
  mov    %rax,%rsi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <execl@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L68:
  lea    -0x230(%rbp),%rax
  mov    %rax,%rdi
  call   <wait@plt>
  movl   $0x1,-0x228(%rbp)
L150:
  mov    -0x228(%rbp),%ecx
  mov    -0x238(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  mov    %ecx,%r8d
  mov    %rdx,%rcx
  lea    D145(%rip),%rdx
  mov    $0x200,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  lea    -0x210(%rbp),%rax
  lea    D141(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x218(%rbp)
  cmpq   $0x0,-0x218(%rbp)
  je     L55
  mov    -0x218(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  jmp    L111
L55:
  subl   $0x1,-0x228(%rbp)
  nop
  movl   $0x1,-0x22c(%rbp)
  jmp    L21
L111:
  addl   $0x1,-0x228(%rbp)
  jmp    L150
L123:
  call   <fork@plt>
  mov    %eax,-0x224(%rbp)
  cmpl   $0x0,-0x224(%rbp)
  jne    L2
  mov    -0x22c(%rbp),%ecx
  mov    -0x22c(%rbp),%esi
  mov    -0x238(%rbp),%rdi
  mov    -0x238(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  sub    $0x8,%rsp
  push   %rcx
  mov    %rdi,%r9
  mov    %esi,%r8d
  mov    %rdx,%rcx
  lea    D22(%rip),%rdx
  mov    $0x200,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  add    $0x10,%rsp
  lea    -0x210(%rbp),%rax
  mov    $0x0,%r8d
  mov    %rax,%rcx
  lea    D83(%rip),%rax
  mov    %rax,%rdx
  lea    D50(%rip),%rax
  mov    %rax,%rsi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <execl@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L2:
  lea    -0x230(%rbp),%rax
  mov    %rax,%rdi
  call   <wait@plt>
  mov    -0x22c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x22c(%rbp)
L21:
  mov    -0x22c(%rbp),%eax
  cmp    %eax,-0x228(%rbp)
  jge    L123
  mov    -0x240(%rbp),%rax
  mov    -0x228(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0x220(%rbp),%rax
L64:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L143
  call   <__stack_chk_fail@plt>
L143:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D147
type_infered: string
name: retrieve_data
arguments: data_tag: D39
type_infered: string
name: retrieve_data
arguments: data_tag: D141
type_infered: string
name: retrieve_data
arguments: data_tag: D190
type_infered: string
name: retrieve_data
arguments: data_tag: D83
type_infered: string
name: retrieve_data
arguments: data_tag: D50
type_infered: string
name: retrieve_data
arguments: data_tag: D15
type_infered: string
name: retrieve_data
arguments: data_tag: D212
type_infered: string
name: retrieve_data
arguments: data_tag: D94
type_infered: string
name: retrieve_data
arguments: data_tag: D145
type_infered: string
name: retrieve_data
arguments: data_tag: D22
type_infered: string

tool: D147: MAP found %d tags that require resolving references.


tool: D39: %s-PREMAP.tex

tool: D141: r+

tool: D190: /usr/bin/latex -interaction=batchmode %s-PREMAP.tex

tool: D83: -c

tool: D50: /bin/sh

tool: D15: /usr/bin/dvips -t letter -f %s-PREMAP.dvi > %s-PREMAP.ps

tool: D212: %02d

tool: D94: /usr/bin/gs -q -dBATCH -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dNOPAUSE -sDEVICE=pnmraw -r100 -sOutputFile=%s-PREMAP%s.pnm %s-PREMAP.ps

tool: D145: %s-PREMAP%02d.pnm

tool: D22: /usr/bin/pnmcrop < %s-PREMAP%02d.pnm | /usr/bin/pnmpad -white -l20 -r20 -t20 -b20 | /usr/bin/pnmtopng > %s-PREMAP%02d.png

assistant: ```c
struct href *file_create(char name[], int *p) {
  char tmp_name[512];
  pid_t child;
  int pages, status, relay = 0;
  FILE *CHECK;
  struct href *hhead;
  if ((hhead = parse_tex(name, &relay)) == NULL)
    return NULL;
  printf("MAP found %d tags that require resolving references.\n", relay);
  if ((child = fork()) == 0) {
    snprintf(tmp_name, 512, "%s-PREMAP.tex", name);
    while ((CHECK = fopen(tmp_name, "r+")) == NULL) {
    }
    fclose(CHECK);
    exit(1);
  }
  wait(&status);
  if ((child = fork()) == 0) {
    snprintf(tmp_name, 512, "/usr/bin/latex -interaction=batchmode %s-PREMAP.tex", name);
    execl("/bin/sh", "/bin/sh", "-c", tmp_name, NULL);
    exit(1);
  }
  wait(&status);
  if (relay > 0) {
    if ((child = fork()) == 0) {
      snprintf(tmp_name, 512, "/usr/bin/latex -interaction=batchmode %s-PREMAP.tex", name);
      execl("/bin/sh", "/bin/sh", "-c", tmp_name, NULL);
      exit(1);
    }
    wait(&status);
  }
  if ((child = fork()) == 0) {
    snprintf(tmp_name, 512, "/usr/bin/dvips -t letter -f %s-PREMAP.dvi > %s-PREMAP.ps", name, name);
    execl("/bin/sh", "/bin/sh", "-c", tmp_name, NULL);
    exit(1);
  }
  wait(&status);
  if ((child = fork()) == 0) {
    snprintf(tmp_name, 512, "/usr/bin/gs -q -dBATCH -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dNOPAUSE -sDEVICE=pnmraw -r100 -sOutputFile=%s-PREMAP%s.pnm %s-PREMAP.ps", name, "%02d", name);
    execl("/bin/sh", "/bin/sh", "-c", tmp_name, NULL);
    exit(1);
  }
  wait(&status);
  for (pages = 1;; pages++) {
    snprintf(tmp_name, 512, "%s-PREMAP%02d.pnm", name, pages);
    if ((CHECK = fopen(tmp_name, "r+")) != NULL) {
      fclose(CHECK);
    } else {
      pages -= 1;
      break;
    }
  }
  for (relay = 1; relay < (pages + 1); relay++) {
    if ((child = fork()) == 0) {
      snprintf(tmp_name, 512, "/usr/bin/pnmcrop < %s-PREMAP%02d.pnm | /usr/bin/pnmpad -white -l20 -r20 -t20 -b20 | /usr/bin/pnmtopng > %s-PREMAP%02d.png", name, relay, name, relay);
      execl("/bin/sh", "/bin/sh", "-c", tmp_name, NULL);
      exit(1);
    }
    wait(&status);
  }
  *p = pages;
  return hhead;
}
```