user: Demonstrate the C code that generates the assembly output below:

```asm
<romMenu>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D276(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D463(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D41(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D463(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D514(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D243(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D390(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D637(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D82(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D605(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D429(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D463(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D389(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D580(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D582(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0xc(%rbp),%eax
  cmp    $0xa,%eax
  ja     L106
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D307(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D307(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D533(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D177(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D379(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D658(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D394(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D284(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  call   <romMenu>
  jmp    L73
  lea    D439(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L73
  lea    D592(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D411(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L1
  lea    D362(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D308(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L1
  lea    D147(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D641(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D508(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D150(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D531(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D520(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D62(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D393(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D617(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D563(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D208(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D413(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L1
  lea    D444(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D483(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D332(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D643(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  jmp    L1
  lea    D289(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D197(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D134(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D155(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D218(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L1
  lea    D77(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D543(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D480(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L1
  lea    D138(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  jmp    L1
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D571(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D261(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L1
  mov    $0x0,%eax
  call   <advancedMenu@plt>
  jmp    L1
L106:
  lea    D252(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L1:
  call   <romMenu>
L73:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L29
  call   <__stack_chk_fail@plt>
L29:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D276
type_guessed: string
name: parse_data
arguments: label: D463
type_guessed: string
name: parse_data
arguments: label: D41
type_guessed: string
name: parse_data
arguments: label: D514
type_guessed: string
name: parse_data
arguments: label: D243
type_guessed: string
name: parse_data
arguments: label: D390
type_guessed: string
name: parse_data
arguments: label: D637
type_guessed: string
name: parse_data
arguments: label: D82
type_guessed: string
name: parse_data
arguments: label: D605
type_guessed: string
name: parse_data
arguments: label: D14
type_guessed: string
name: parse_data
arguments: label: D38
type_guessed: string
name: parse_data
arguments: label: D429
type_guessed: string
name: parse_data
arguments: label: D45
type_guessed: string
name: parse_data
arguments: label: D389
type_guessed: string
name: parse_data
arguments: label: D580
type_guessed: string
name: parse_data
arguments: label: D582
type_guessed: string
name: parse_data
arguments: label: D533
type_guessed: string
name: parse_data
arguments: label: D177
type_guessed: string
name: parse_data
arguments: label: D379
type_guessed: string
name: parse_data
arguments: label: D658
type_guessed: string
name: parse_data
arguments: label: D1
type_guessed: string
name: parse_data
arguments: label: D113
type_guessed: string
name: parse_data
arguments: label: D91
type_guessed: string
name: parse_data
arguments: label: D394
type_guessed: string
name: parse_data
arguments: label: D284
type_guessed: string
name: parse_data
arguments: label: D121
type_guessed: string
name: parse_data
arguments: label: D439
type_guessed: string
name: parse_data
arguments: label: D592
type_guessed: string
name: parse_data
arguments: label: D411
type_guessed: string
name: parse_data
arguments: label: D362
type_guessed: string
name: parse_data
arguments: label: D308
type_guessed: string
name: parse_data
arguments: label: D147
type_guessed: string
name: parse_data
arguments: label: D641
type_guessed: string
name: parse_data
arguments: label: D508
type_guessed: string
name: parse_data
arguments: label: D150
type_guessed: string
name: parse_data
arguments: label: D531
type_guessed: string
name: parse_data
arguments: label: D520
type_guessed: string
name: parse_data
arguments: label: D62
type_guessed: string
name: parse_data
arguments: label: D393
type_guessed: string
name: parse_data
arguments: label: D617
type_guessed: string
name: parse_data
arguments: label: D563
type_guessed: string
name: parse_data
arguments: label: D208
type_guessed: string
name: parse_data
arguments: label: D413
type_guessed: string
name: parse_data
arguments: label: D444
type_guessed: string
name: parse_data
arguments: label: D49
type_guessed: string
name: parse_data
arguments: label: D483
type_guessed: string
name: parse_data
arguments: label: D6
type_guessed: string
name: parse_data
arguments: label: D332
type_guessed: string
name: parse_data
arguments: label: D643
type_guessed: string
name: parse_data
arguments: label: D289
type_guessed: string
name: parse_data
arguments: label: D197
type_guessed: string
name: parse_data
arguments: label: D36
type_guessed: string
name: parse_data
arguments: label: D134
type_guessed: string
name: parse_data
arguments: label: D155
type_guessed: string
name: parse_data
arguments: label: D218
type_guessed: string
name: parse_data
arguments: label: D77
type_guessed: string
name: parse_data
arguments: label: D543
type_guessed: string
name: parse_data
arguments: label: D480
type_guessed: string
name: parse_data
arguments: label: D138
type_guessed: string
name: parse_data
arguments: label: D571
type_guessed: string
name: parse_data
arguments: label: D261
type_guessed: string
name: parse_data
arguments: label: D252
type_guessed: string

tool: D276: @cls||clear

tool: D463: =======================================


tool: D41:    ROM Menu                       |


tool: D514: | [1] Create workspace            |


tool: D243: | [2] Extract ROM.zip             |


tool: D390: | [3] Extract boot.img            |


tool: D637: | [4] Repack boot.img             |


tool: D82: | [5] Extract system.img          |


tool: D605: | [6] Extract system.new.dat      |


tool: D14: | [7] Delete workspace            |


tool: D38: | [8] Install SuperSU(root)       |


tool: D429: | [9] Information about menu      |


tool: D45: | [10] Enter to advanced ROM menu |


tool: D389: [0] Exit


tool: D580: 
What you want?: 

tool: D582: %d

tool: D533: This is information about ROM Menu.


tool: D177: 1. For working with ROM's you must create personal workspace. Press [1] to do it.


tool: D379: 2. If you need extract .zip with you ROM, place him to 'workspace' folder, then press [2].


tool: D658: 3. If you need extract boot.img, press [3].


tool: D1: 4. For repacking boot.img press [4]


tool: D113: 5. When you want unpack some images (for example system.img), use this feature - [5]


tool: D91: 6. For unpacking system.new.dat, press [6]. // Repack feature in progress...


tool: D394: 7. If you tired of your workspace, you can delete it. Just press [7]


tool: D284: 8. Also you can install SuperSU in your ROM. Press [8] to do it.


tool: D121: 10. I think it doesn't need to explain... And next items too.


tool: D439: Goodbye ;P


tool: D592: mkdir workspace && cd workspace 

tool: D411: Done. Replace your ROMZIP in on 'workspace' folder


tool: D362: cd workspace && unzip *.zip && cd ..

tool: D308: 
	ROM is unzipped


tool: D147: cd ~/*/workspace/ && mkdir boot

tool: D641: cp ~/*/insides/boot/* ~/*/workspace/boot

tool: D508: 	Unpacking boot.img


tool: D150: cd ~/*/workspace/ && cp boot.img ~/*/workspace/boot

tool: D531: cd ~/*/workspace/boot && ./unpackbootimg -i boot.img

tool: D520: 	Making 'ramdisk' directory


tool: D62: cd ~/*/workspace/boot && mkdir ramdisk

tool: D393: 	Replacing boot.img-ramdisk.gz to 'ramdisk'


tool: D617: cd ~/*/workspace/boot && mv boot.img-ramdisk.gz ramdisk

tool: D563: Unpacking ramdisk


tool: D208: cd ~/*/workspace/boot/ramdisk && gzip -dc boot.img-ramdisk.gz | cpio -i

tool: D413: 
	boot.img and ramdisk ready


tool: D444: 	Repacking ramdisk


tool: D49: cd ~/*/workspace/boot/ && ./mkbootfs ./ramdisk | gzip > boot.img-ramdisk.gz

tool: D483: 	Repacking boot.img


tool: D6: cd ~/*/workspace/boot/ && ./mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel boot.img-kernel --ramdisk boot.img-ramdisk.gz -o boot-new.img

tool: D332: 	boot-new.img ready!


tool: D643: cd ~/*/workspace/

tool: D289: 	
Put your system.img in ROM folder.


tool: D197: 	
I'm working! Please wait!


tool: D36: cd ~/*/workspace

tool: D134: cp ~/*/workspace/system.img ~/Universal_Tool/

tool: D155: mkdir extractedsystem && sudo mount -t ext4 -o loop system.img extractedsystem

tool: D218: 	Done. .img file extracted to Universal_Tool/extractedsystem/


tool: D77: cd ~/*/insides/rom/ && cp sdat2img/* ~/Universal_Tool/workspace/ 

tool: D543: Press any key to continue

tool: D480: cd ~/*/workspace/ && ./sdat2img.py system.transfer.list system.new.dat system.img

tool: D138: cd ~/Universal_Tool/ && rm -rf workspace && rm -rf extractedsystem

tool: D571: cp ~/*/insides/rom/supersu ~/*/workspace/system/priv-app

tool: D261: 	Done


tool: D252: Make a choice!


assistant: ```c
int romMenu(void) {
  int user_key;
  system("@cls||clear");
  printf("=======================================\n");
  printf("   ROM Menu                       |\n");
  printf("=======================================\n");
  printf("| [1] Create workspace            |\n");
  printf("| [2] Extract ROM.zip             |\n");
  printf("| [3] Extract boot.img            |\n");
  printf("| [4] Repack boot.img             |\n");
  printf("| [5] Extract system.img          |\n");
  printf("| [6] Extract system.new.dat      |\n");
  printf("| [7] Delete workspace            |\n");
  printf("| [8] Install SuperSU(root)       |\n");
  printf("| [9] Information about menu      |\n");
  printf("| [10] Enter to advanced ROM menu |\n");
  printf("=======================================\n");
  printf("[0] Exit\n");
  printf("\nWhat you want?: ");
  scanf("%d", &user_key);
  switch (user_key) {
  case 9:
    getchar();
    printf("This is information about ROM Menu.\n");
    printf("1. For working with ROM's you must create personal workspace. Press [1] to do it.\n");
    printf("2. If you need extract .zip with you ROM, place him to 'workspace' folder, then press [2].\n");
    printf("3. If you need extract boot.img, press [3].\n");
    printf("4. For repacking boot.img press [4]\n");
    printf("5. When you want unpack some images (for example system.img), use this feature - [5]\n");
    printf("6. For unpacking system.new.dat, press [6]. // Repack feature in progress...\n");
    printf("7. If you tired of your workspace, you can delete it. Just press [7]\n");
    printf("8. Also you can install SuperSU in your ROM. Press [8] to do it.\n");
    printf("10. I think it doesn't need to explain... And next items too.\n");
    getchar();
    return romMenu();
    break;
  case 0:
    printf("Goodbye ;P\n");
    return 0;
  case 1: {
    system("mkdir workspace && cd workspace ");
    printf("Done. Replace your ROMZIP in on 'workspace' folder\n");
    getchar();
    break;
  }
  case 2: {
    system("cd workspace && unzip *.zip && cd ..");
    printf("\n\tROM is unzipped\n");
    getchar();
    break;
  }
  case 3: {
    system("cd ~/*/workspace/ && mkdir boot");
    system("cp ~/*/insides/boot/* ~/*/workspace/boot");
    printf("\tUnpacking boot.img\n");
    system("cd ~/*/workspace/ && cp boot.img ~/*/workspace/boot");
    system("cd ~/*/workspace/boot && ./unpackbootimg -i boot.img");
    printf("\tMaking 'ramdisk' directory\n");
    system("cd ~/*/workspace/boot && mkdir ramdisk");
    printf("\tReplacing boot.img-ramdisk.gz to 'ramdisk'\n");
    system("cd ~/*/workspace/boot && mv boot.img-ramdisk.gz ramdisk");
    printf("Unpacking ramdisk\n");
    system("cd ~/*/workspace/boot/ramdisk && gzip -dc boot.img-ramdisk.gz | cpio -i");
    printf("\n\tboot.img and ramdisk ready\n");
    getchar();
    break;
  }
  case 4: {
    printf("\tRepacking ramdisk\n");
    system("cd ~/*/workspace/boot/ && ./mkbootfs ./ramdisk | gzip > boot.img-ramdisk.gz");
    printf("\tRepacking boot.img\n");
    system("cd ~/*/workspace/boot/ && ./mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel boot.img-kernel --ramdisk boot.img-ramdisk.gz -o boot-new.img");
    printf("\tboot-new.img ready!\n");
    getchar();
    system("cd ~/*/workspace/");
    break;
  }
  case 5: {
    printf("\t\nPut your system.img in ROM folder.\n");
    getchar();
    printf("\t\nI'm working! Please wait!\n");
    system("cd ~/*/workspace");
    system("cp ~/*/workspace/system.img ~/Universal_Tool/");
    system("mkdir extractedsystem && sudo mount -t ext4 -o loop system.img extractedsystem");
    printf("\tDone. .img file extracted to Universal_Tool/extractedsystem/\n");
    getchar();
    break;
  }
  case 6: {
    system("cd ~/*/insides/rom/ && cp sdat2img/* ~/Universal_Tool/workspace/ ");
    printf("Press any key to continue");
    getchar();
    system("cd ~/*/workspace/ && ./sdat2img.py system.transfer.list system.new.dat system.img");
    getchar();
    break;
  }
  case 7:
    system("cd ~/Universal_Tool/ && rm -rf workspace && rm -rf extractedsystem");
    break;
  case 8: {
    getchar();
    system("cp ~/*/insides/rom/supersu ~/*/workspace/system/priv-app");
    printf("\tDone\n");
    getchar();
    break;
  }
  case 10:
    advancedMenu();
    break;
  default:
    printf("Make a choice!\n");
  }
  return romMenu();
}
```