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

```asm
<main>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  mov    $0x0,%ebx
  lea    D216(%rip),%r14
  lea    D65(%rip),%r13
  lea    D209(%rip),%r12
  lea    D102(%rip),%rbp
  jmp    L113
  mov    %rbx,%rdi
  call   <read_from_file@plt>
  mov    %rax,%rbx
  mov    %rax,%rdi
  call   <class_print@plt>
L113:
  mov    %r14,%rdi
  call   <system@plt>
  mov    %r13,%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D83(%rip),%rdi
  call   <printf@plt>
  lea    D264(%rip),%rdi
  call   <printf@plt>
  lea    D186(%rip),%rdi
  call   <printf@plt>
  lea    D177(%rip),%rdi
  call   <printf@plt>
  lea    D146(%rip),%rdi
  call   <printf@plt>
  lea    D81(%rip),%rdi
  call   <printf@plt>
  lea    D185(%rip),%rdi
  call   <printf@plt>
  lea    D152(%rip),%rdi
  call   <printf@plt>
  lea    D231(%rip),%rdi
  call   <printf@plt>
  lea    D86(%rip),%rdi
  call   <printf@plt>
  lea    D148(%rip),%rdi
  call   <printf@plt>
  lea    D203(%rip),%rdi
  call   <printf@plt>
  lea    D180(%rip),%rdi
  call   <printf@plt>
  lea    D211(%rip),%rdi
  call   <printf@plt>
  lea    D28(%rip),%rdi
  call   <printf@plt>
  lea    D166(%rip),%rdi
  call   <printf@plt>
  lea    D235(%rip),%rdi
  call   <printf@plt>
  lea    D171(%rip),%rdi
  call   <printf@plt>
  lea    D97(%rip),%rdi
  call   <printf@plt>
  lea    D121(%rip),%rdi
  call   <printf@plt>
  lea    0x4(%rsp),%rsi
  lea    D44(%rip),%rdi
  call   <scanf@plt>
  cmpl   $0xe,0x4(%rsp)
  ja     L113
  mov    0x4(%rsp),%eax
  lea    D232(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    %rbx,%rdi
  call   <write_to_file@plt>
  jmp    L113
  mov    %rbx,%rdi
  call   <class_print@plt>
  jmp    L113
  mov    %rbx,%rdi
  call   <print_head@plt>
  jmp    L113
  mov    %rbx,%rdi
  call   <tail_print@plt>
  jmp    L113
  mov    %rbx,%rdi
  call   <name_search_print@plt>
  jmp    L113
  mov    %rbx,%rdi
  call   <print_nth@plt>
  jmp    L113
  mov    %rbx,%rdi
  call   <student_statistics@plt>
  jmp    L113
  mov    %rbx,%rdi
  call   <assignment_statistics@plt>
  jmp    L113
  mov    %rbx,%rdi
  call   <update_assignments@plt>
  jmp    L113
  mov    %rbx,%rdi
  call   <add_student@plt>
  mov    %rax,%rbx
  jmp    L113
  mov    %rbx,%rdi
  call   <remove_student@plt>
  mov    %rax,%rbx
  jmp    L113
  mov    %rbx,%rdi
  call   <num_students@plt>
  jmp    L113
  lea    D7(%rip),%rdi
  call   <printf@plt>
  lea    D216(%rip),%rdi
  call   <system@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L1
  mov    $0x0,%eax
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L1:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D216
type_infered: string
name: unpack_data
arguments: data_tag: D65
type_infered: string
name: unpack_data
arguments: data_tag: D209
type_infered: string
name: unpack_data
arguments: data_tag: D102
type_infered: string
name: unpack_data
arguments: data_tag: D83
type_infered: string
name: unpack_data
arguments: data_tag: D264
type_infered: string
name: unpack_data
arguments: data_tag: D186
type_infered: string
name: unpack_data
arguments: data_tag: D177
type_infered: string
name: unpack_data
arguments: data_tag: D146
type_infered: string
name: unpack_data
arguments: data_tag: D81
type_infered: string
name: unpack_data
arguments: data_tag: D185
type_infered: string
name: unpack_data
arguments: data_tag: D152
type_infered: string
name: unpack_data
arguments: data_tag: D231
type_infered: string
name: unpack_data
arguments: data_tag: D86
type_infered: string
name: unpack_data
arguments: data_tag: D148
type_infered: string
name: unpack_data
arguments: data_tag: D203
type_infered: string
name: unpack_data
arguments: data_tag: D180
type_infered: string
name: unpack_data
arguments: data_tag: D211
type_infered: string
name: unpack_data
arguments: data_tag: D28
type_infered: string
name: unpack_data
arguments: data_tag: D166
type_infered: string
name: unpack_data
arguments: data_tag: D235
type_infered: string
name: unpack_data
arguments: data_tag: D171
type_infered: string
name: unpack_data
arguments: data_tag: D97
type_infered: string
name: unpack_data
arguments: data_tag: D121
type_infered: string
name: unpack_data
arguments: data_tag: D44
type_infered: string
name: unpack_data
arguments: data_tag: D7
type_infered: string

tool: D216: clear

tool: D65: ----------Gradebook Menu----------



tool: D209: Please note: Some functions will require pressing enter 

tool: D102: multiple times
in order to return to this menu.



tool: D83: ------------Read Write------------


tool: D264: 1 -- Load Gradebook from File


tool: D186: 2 -- Write Current Gradebook to File



tool: D177: -------View Grades Statistics-----


tool: D146: 3 -- View Entire Gradebook


tool: D81: 4 -- View the First Student's Information/Assignments


tool: D185: 5 -- View the Last Student's Information/Assignments


tool: D152: 6 -- View a Student's Information/Assignments by Name Search


tool: D231: 7 -- View the n'th Student's Information/Assignments


tool: D86: 8 -- View a specific Student's Statistics


tool: D148: 9 -- View a specific  Assignment's Statistics



tool: D203: ------------Add Grades------------


tool: D180: 10-- Add Assignment/s & Grade/s to Student



tool: D211: ---------Add Remove Students------


tool: D28: 11-- Add a New Student


tool: D166: 12-- Remove a Student



tool: D235: -----------Extra Functions--------


tool: D171: 13-- Display the Number of Students in the Class


tool: D97: 14-- Exit Program



tool: D121: Enter Selection: 

tool: D44: %d

tool: D7: 


assistant: ```c
int main(int argc, char **argv) {
  int menuloop = 1;
  struct student *head = NULL;
  while (menuloop != 0) {
    int menuchoice;
    system("clear");
    printf("----------Gradebook Menu----------\n\n");
    printf("Please note: Some functions will require pressing enter ");
    printf("multiple times\nin order to return to this menu.\n\n");
    printf("------------Read Write------------\n");
    printf("1 -- Load Gradebook from File\n");
    printf("2 -- Write Current Gradebook to File\n\n");
    printf("-------View Grades Statistics-----\n");
    printf("3 -- View Entire Gradebook\n");
    printf("4 -- View the First Student's Information/Assignments\n");
    printf("5 -- View the Last Student's Information/Assignments\n");
    printf("6 -- View a Student's Information/Assignments by Name Search\n");
    printf("7 -- View the n'th Student's Information/Assignments\n");
    printf("8 -- View a specific Student's Statistics\n");
    printf("9 -- View a specific  Assignment's Statistics\n\n");
    printf("------------Add Grades------------\n");
    printf("10-- Add Assignment/s & Grade/s to Student\n\n");
    printf("---------Add Remove Students------\n");
    printf("11-- Add a New Student\n");
    printf("12-- Remove a Student\n\n");
    printf("-----------Extra Functions--------\n");
    printf("13-- Display the Number of Students in the Class\n");
    printf("14-- Exit Program\n\n");
    printf("Enter Selection: ");
    scanf("%d", &menuchoice);
    switch (menuchoice) {
    case 1:
      head = read_from_file(head);
      class_print(head);
      break;
    case 2:
      write_to_file(head);
      break;
    case 3:
      class_print(head);
      break;
    case 4:
      print_head(head);
      break;
    case 5:
      tail_print(head);
      break;
    case 6:
      name_search_print(head);
      break;
    case 7:
      print_nth(head);
      break;
    case 8:
      student_statistics(head);
      break;
    case 9:
      assignment_statistics(head);
      break;
    case 10:
      update_assignments(head);
      break;
    case 11:
      head = add_student(head);
      break;
    case 12:
      head = remove_student(head);
      break;
    case 13:
      num_students(head);
      break;
    case 14:
      menuloop = 0;
      break;
    }
  }
  printf("\n");
  system("clear");
  return 0;
}
```