user: 请从给定的汇编指令推导出C源代码:

```asm
<romMenu>:
  endbr64
  push   %r12
  lea    D287(%rip),%rdi
  lea    D195(%rip),%r12
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  call   <system@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D473(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D52(%rip),%rdi
  call   <printf@plt>
  lea    D29(%rip),%rdi
  call   <printf@plt>
  lea    D518(%rip),%rdi
  call   <printf@plt>
  lea    D199(%rip),%rdi
  call   <printf@plt>
  lea    D115(%rip),%rdi
  call   <printf@plt>
  lea    D248(%rip),%rdi
  call   <printf@plt>
  lea    D284(%rip),%rdi
  call   <printf@plt>
  lea    D253(%rip),%rdi
  call   <printf@plt>
  lea    D229(%rip),%rdi
  call   <printf@plt>
  lea    D608(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D208(%rip),%rdi
  call   <printf@plt>
  lea    D410(%rip),%rdi
  call   <printf@plt>
  lea    0x4(%rsp),%rsi
  lea    D515(%rip),%rdi
  call   <scanf@plt>
  mov    0x4(%rsp),%r12d
  cmp    $0xa,%r12d
  ja     L44
  lea    D227(%rip),%rdx
  mov    %r12d,%eax
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   (%rax)
  xor    %eax,%eax
  call   <getchar@plt>
  lea    D463(%rip),%rdi
  call   <printf@plt>
  lea    D295(%rip),%rdi
  call   <printf@plt>
  lea    D260(%rip),%rdi
  call   <printf@plt>
  lea    D474(%rip),%rdi
  call   <printf@plt>
  lea    D78(%rip),%rdi
  call   <printf@plt>
  lea    D325(%rip),%rdi
  call   <printf@plt>
  lea    D469(%rip),%rdi
  call   <printf@plt>
  lea    D506(%rip),%rdi
  call   <printf@plt>
  lea    D272(%rip),%rdi
  call   <printf@plt>
  lea    D470(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  call   <romMenu>
  mov    %eax,%r12d
  cs nopw 0x0(%rax,%rax,1)
L81:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L114
  add    $0x10,%rsp
  mov    %r12d,%eax
  pop    %r12
  ret
  xchg   %ax,%ax
  xor    %eax,%eax
  call   <advancedMenu@plt>
  nopw   0x0(%rax,%rax,1)
L107:
  call   <romMenu>
  mov    %eax,%r12d
  jmp    L81
  nopw   0x0(%rax,%rax,1)
  lea    D202(%rip),%rdi
  call   <printf@plt>
  jmp    L81
  xchg   %ax,%ax
  lea    D165(%rip),%rdi
  call   <system@plt>
  lea    D351(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  jmp    L107
  nopl   0x0(%rax)
  lea    D16(%rip),%rdi
  call   <system@plt>
  lea    D294(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  jmp    L107
  nopl   0x0(%rax)
  lea    D590(%rip),%rdi
  call   <system@plt>
  lea    D472(%rip),%rdi
  call   <system@plt>
  lea    D548(%rip),%rdi
  call   <printf@plt>
  lea    D527(%rip),%rdi
  call   <system@plt>
  lea    D271(%rip),%rdi
  call   <system@plt>
  lea    D239(%rip),%rdi
  call   <printf@plt>
  lea    D366(%rip),%rdi
  call   <system@plt>
  lea    D520(%rip),%rdi
  call   <printf@plt>
  lea    D454(%rip),%rdi
  call   <system@plt>
  lea    D617(%rip),%rdi
  call   <printf@plt>
  lea    D91(%rip),%rdi
  call   <system@plt>
  lea    D302(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  jmp    L107
  nopl   0x0(%rax)
  lea    D163(%rip),%rdi
  call   <printf@plt>
  lea    D203(%rip),%rdi
  call   <system@plt>
  lea    D401(%rip),%rdi
  call   <printf@plt>
  lea    D539(%rip),%rdi
  call   <system@plt>
  lea    D339(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  lea    D47(%rip),%rdi
  call   <system@plt>
  jmp    L107
  nopl   0x0(%rax)
  lea    D398(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  lea    D307(%rip),%rdi
  call   <printf@plt>
  lea    D575(%rip),%rdi
  call   <system@plt>
  lea    D83(%rip),%rdi
  call   <system@plt>
  lea    D445(%rip),%rdi
  call   <system@plt>
  lea    D385(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  jmp    L107
  nopl   0x0(%rax,%rax,1)
  lea    D162(%rip),%rdi
  call   <system@plt>
  lea    D8(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  lea    D49(%rip),%rdi
  call   <system@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  jmp    L107
  nop
  lea    D312(%rip),%rdi
  call   <system@plt>
  jmp    L107
  nopl   0x0(%rax)
  xor    %eax,%eax
  call   <getchar@plt>
  lea    D324(%rip),%rdi
  call   <system@plt>
  lea    D267(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  jmp    L107
L44:
  lea    D372(%rip),%rdi
  call   <printf@plt>
  jmp    L107
L114:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D287
data_type: string
name: extract_symbolic_data
arguments: data_label: D195
data_type: string
name: extract_symbolic_data
arguments: data_label: D473
data_type: string
name: extract_symbolic_data
arguments: data_label: D52
data_type: string
name: extract_symbolic_data
arguments: data_label: D29
data_type: string
name: extract_symbolic_data
arguments: data_label: D518
data_type: string
name: extract_symbolic_data
arguments: data_label: D199
data_type: string
name: extract_symbolic_data
arguments: data_label: D115
data_type: string
name: extract_symbolic_data
arguments: data_label: D248
data_type: string
name: extract_symbolic_data
arguments: data_label: D284
data_type: string
name: extract_symbolic_data
arguments: data_label: D253
data_type: string
name: extract_symbolic_data
arguments: data_label: D229
data_type: string
name: extract_symbolic_data
arguments: data_label: D608
data_type: string
name: extract_symbolic_data
arguments: data_label: D208
data_type: string
name: extract_symbolic_data
arguments: data_label: D410
data_type: string
name: extract_symbolic_data
arguments: data_label: D515
data_type: string
name: extract_symbolic_data
arguments: data_label: D463
data_type: string
name: extract_symbolic_data
arguments: data_label: D295
data_type: string
name: extract_symbolic_data
arguments: data_label: D260
data_type: string
name: extract_symbolic_data
arguments: data_label: D474
data_type: string
name: extract_symbolic_data
arguments: data_label: D78
data_type: string
name: extract_symbolic_data
arguments: data_label: D325
data_type: string
name: extract_symbolic_data
arguments: data_label: D469
data_type: string
name: extract_symbolic_data
arguments: data_label: D506
data_type: string
name: extract_symbolic_data
arguments: data_label: D272
data_type: string
name: extract_symbolic_data
arguments: data_label: D470
data_type: string
name: extract_symbolic_data
arguments: data_label: D202
data_type: string
name: extract_symbolic_data
arguments: data_label: D165
data_type: string
name: extract_symbolic_data
arguments: data_label: D351
data_type: string
name: extract_symbolic_data
arguments: data_label: D16
data_type: string
name: extract_symbolic_data
arguments: data_label: D294
data_type: string
name: extract_symbolic_data
arguments: data_label: D590
data_type: string
name: extract_symbolic_data
arguments: data_label: D472
data_type: string
name: extract_symbolic_data
arguments: data_label: D548
data_type: string
name: extract_symbolic_data
arguments: data_label: D527
data_type: string
name: extract_symbolic_data
arguments: data_label: D271
data_type: string
name: extract_symbolic_data
arguments: data_label: D239
data_type: string
name: extract_symbolic_data
arguments: data_label: D366
data_type: string
name: extract_symbolic_data
arguments: data_label: D520
data_type: string
name: extract_symbolic_data
arguments: data_label: D454
data_type: string
name: extract_symbolic_data
arguments: data_label: D617
data_type: string
name: extract_symbolic_data
arguments: data_label: D91
data_type: string
name: extract_symbolic_data
arguments: data_label: D302
data_type: string
name: extract_symbolic_data
arguments: data_label: D163
data_type: string
name: extract_symbolic_data
arguments: data_label: D203
data_type: string
name: extract_symbolic_data
arguments: data_label: D401
data_type: string
name: extract_symbolic_data
arguments: data_label: D539
data_type: string
name: extract_symbolic_data
arguments: data_label: D339
data_type: string
name: extract_symbolic_data
arguments: data_label: D47
data_type: string
name: extract_symbolic_data
arguments: data_label: D398
data_type: string
name: extract_symbolic_data
arguments: data_label: D307
data_type: string
name: extract_symbolic_data
arguments: data_label: D575
data_type: string
name: extract_symbolic_data
arguments: data_label: D83
data_type: string
name: extract_symbolic_data
arguments: data_label: D445
data_type: string
name: extract_symbolic_data
arguments: data_label: D385
data_type: string
name: extract_symbolic_data
arguments: data_label: D162
data_type: string
name: extract_symbolic_data
arguments: data_label: D8
data_type: string
name: extract_symbolic_data
arguments: data_label: D49
data_type: string
name: extract_symbolic_data
arguments: data_label: D312
data_type: string
name: extract_symbolic_data
arguments: data_label: D324
data_type: string
name: extract_symbolic_data
arguments: data_label: D267
data_type: string
name: extract_symbolic_data
arguments: data_label: D372
data_type: string

tool: D287: @cls||clear

tool: D195: =======================================


tool: D473:    ROM Menu                       |


tool: D52: | [1] Create workspace            |


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


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


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


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


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


tool: D284: | [7] Delete workspace            |


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


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


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


tool: D208: [0] Exit


tool: D410: 
What you want?: 

tool: D515: %d

tool: D463: This is information about ROM Menu.


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


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


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


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


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


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


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


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


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


tool: D202: Goodbye ;P


tool: D165: mkdir workspace && cd workspace 

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


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

tool: D294: 
	ROM is unzipped


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

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

tool: D548: 	Unpacking boot.img


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

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

tool: D239: 	Making 'ramdisk' directory


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

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


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

tool: D617: Unpacking ramdisk


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

tool: D302: 
	boot.img and ramdisk ready


tool: D163: 	Repacking ramdisk


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

tool: D401: 	Repacking boot.img


tool: D539: 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: D339: 	boot-new.img ready!


tool: D47: cd ~/*/workspace/

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


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


tool: D575: cd ~/*/workspace

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

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

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


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

tool: D8: Press any key to continue

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

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

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

tool: D267: 	Done


tool: D372: 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();
}
```