user: 请将以下的汇编代码转换成C语言代码:

```asm
<cg_prologue>:
  endbr64
  push   %r15
  lea    D28(%rip),%rdi
  lea    D333(%rip),%r15
  push   %r14
  lea    D84(%rip),%r14
  push   %r13
  lea    D335(%rip),%r13
  push   %r12
  lea    D173(%rip),%r12
  push   %rbp
  lea    D468(%rip),%rbp
  push   %rbx
  lea    D162(%rip),%rbx
  sub    $0x8,%rsp
  call   <printf@plt>
  lea    D95(%rip),%rdi
  call   <printf@plt>
  lea    D96(%rip),%rdi
  call   <printf@plt>
  lea    D387(%rip),%rdi
  call   <printf@plt>
  lea    D484(%rip),%rdi
  call   <printf@plt>
  lea    D64(%rip),%rdi
  call   <printf@plt>
  lea    D482(%rip),%rdi
  call   <printf@plt>
  lea    D339(%rip),%rdi
  call   <printf@plt>
  lea    D267(%rip),%rdi
  call   <printf@plt>
  lea    D341(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D448(%rip),%rdi
  call   <printf@plt>
  mov    %rbx,%rdi
  call   <printf@plt>
  mov    %r15,%rdi
  call   <printf@plt>
  lea    D188(%rip),%rdi
  call   <printf@plt>
  lea    D309(%rip),%rdi
  call   <printf@plt>
  lea    D1(%rip),%rdi
  call   <printf@plt>
  lea    D50(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D202(%rip),%rdi
  call   <printf@plt>
  lea    D99(%rip),%rdi
  call   <printf@plt>
  lea    D233(%rip),%rdi
  call   <printf@plt>
  lea    D345(%rip),%rdi
  call   <printf@plt>
  lea    D431(%rip),%rdi
  call   <printf@plt>
  lea    D478(%rip),%rdi
  call   <printf@plt>
  lea    D6(%rip),%rdi
  call   <printf@plt>
  lea    D268(%rip),%rdi
  call   <printf@plt>
  lea    D123(%rip),%rdi
  call   <printf@plt>
  lea    D225(%rip),%rdi
  call   <printf@plt>
  lea    D340(%rip),%rdi
  call   <printf@plt>
  lea    D236(%rip),%rdi
  call   <printf@plt>
  lea    D176(%rip),%rdi
  call   <printf@plt>
  lea    D258(%rip),%r8
  mov    %r8,%rdi
  call   <printf@plt>
  lea    D362(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D388(%rip),%rdi
  call   <printf@plt>
  mov    %r14,%rdi
  call   <printf@plt>
  mov    %r13,%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D258(%rip),%r8
  mov    %r8,%rdi
  call   <printf@plt>
  lea    D314(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  mov    %rbx,%rdi
  call   <printf@plt>
  mov    %r15,%rdi
  call   <printf@plt>
  lea    D48(%rip),%rdi
  call   <printf@plt>
  lea    D198(%rip),%rdi
  call   <printf@plt>
  lea    D51(%rip),%rdi
  call   <printf@plt>
  mov    %r14,%rdi
  call   <printf@plt>
  mov    %r13,%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D460(%rip),%rdi
  call   <printf@plt>
  lea    D140(%rip),%rdi
  call   <printf@plt>
  lea    D228(%rip),%rdi
  call   <printf@plt>
  lea    D158(%rip),%rdi
  call   <printf@plt>
  lea    D115(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D347(%rip),%rdi
  call   <printf@plt>
  lea    D91(%rip),%rdi
  call   <printf@plt>
  lea    D372(%rip),%rdi
  call   <printf@plt>
  lea    D385(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  add    $0x8,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: disassemble_data
arguments: label: D28
type_infered: string
name: disassemble_data
arguments: label: D333
type_infered: string
name: disassemble_data
arguments: label: D84
type_infered: string
name: disassemble_data
arguments: label: D335
type_infered: string
name: disassemble_data
arguments: label: D173
type_infered: string
name: disassemble_data
arguments: label: D468
type_infered: string
name: disassemble_data
arguments: label: D162
type_infered: string
name: disassemble_data
arguments: label: D95
type_infered: string
name: disassemble_data
arguments: label: D96
type_infered: string
name: disassemble_data
arguments: label: D387
type_infered: string
name: disassemble_data
arguments: label: D484
type_infered: string
name: disassemble_data
arguments: label: D64
type_infered: string
name: disassemble_data
arguments: label: D482
type_infered: string
name: disassemble_data
arguments: label: D339
type_infered: string
name: disassemble_data
arguments: label: D267
type_infered: string
name: disassemble_data
arguments: label: D341
type_infered: string
name: disassemble_data
arguments: label: D448
type_infered: string
name: disassemble_data
arguments: label: D188
type_infered: string
name: disassemble_data
arguments: label: D309
type_infered: string
name: disassemble_data
arguments: label: D1
type_infered: string
name: disassemble_data
arguments: label: D50
type_infered: string
name: disassemble_data
arguments: label: D202
type_infered: string
name: disassemble_data
arguments: label: D99
type_infered: string
name: disassemble_data
arguments: label: D233
type_infered: string
name: disassemble_data
arguments: label: D345
type_infered: string
name: disassemble_data
arguments: label: D431
type_infered: string
name: disassemble_data
arguments: label: D478
type_infered: string
name: disassemble_data
arguments: label: D6
type_infered: string
name: disassemble_data
arguments: label: D268
type_infered: string
name: disassemble_data
arguments: label: D123
type_infered: string
name: disassemble_data
arguments: label: D225
type_infered: string
name: disassemble_data
arguments: label: D340
type_infered: string
name: disassemble_data
arguments: label: D236
type_infered: string
name: disassemble_data
arguments: label: D176
type_infered: string
name: disassemble_data
arguments: label: D258
type_infered: string
name: disassemble_data
arguments: label: D362
type_infered: string
name: disassemble_data
arguments: label: D388
type_infered: string
name: disassemble_data
arguments: label: D314
type_infered: string
name: disassemble_data
arguments: label: D48
type_infered: string
name: disassemble_data
arguments: label: D198
type_infered: string
name: disassemble_data
arguments: label: D51
type_infered: string
name: disassemble_data
arguments: label: D460
type_infered: string
name: disassemble_data
arguments: label: D140
type_infered: string
name: disassemble_data
arguments: label: D228
type_infered: string
name: disassemble_data
arguments: label: D158
type_infered: string
name: disassemble_data
arguments: label: D115
type_infered: string
name: disassemble_data
arguments: label: D347
type_infered: string
name: disassemble_data
arguments: label: D91
type_infered: string
name: disassemble_data
arguments: label: D372
type_infered: string
name: disassemble_data
arguments: label: D385
type_infered: string

tool: D28: #include <stdlib.h>


tool: D333: 	int done;


tool: D84: 	ERR = ecode;


tool: D335: 	STOP = 1;


tool: D173: {


tool: D468: }



tool: D162: 	va_list arg;


tool: D95: #include <string.h>


tool: D96: #include <stdarg.h>


tool: D387: #include <stdio.h>


tool: D484: #include "utils.h"


tool: D64: #include "niff.h"



tool: D482: #define COVERAGEIN


tool: D339: #define COVERAGEOUT



tool: D267: static inline int


tool: D341: dbg(const char *format, ...)


tool: D448: 	return 0;


tool: D188: 	va_start (arg, format);


tool: D309: 	done = vprintf (format, arg);


tool: D1: 	va_end (arg);


tool: D50: 	return done;


tool: D202: static NifStream *R;


tool: D99: static Stream *S;


tool: D233: static int ERR;


tool: D345: static int STOP;



tool: D431: #define GETMEM(SIZE) malloc (SIZE)



tool: D478: #define READERARGLST register NifStream *r


tool: D6: #define READER R



tool: D268: #define ENONE 0


tool: D123: #define EM 1


tool: D225: #define EIO 2


tool: D340: #define ENIF 3


tool: D236: #define EBUG 4



tool: D176: // Nif Parsing Failed


tool: D258: static void


tool: D362: NPF(const char *msg, int ecode)


tool: D388: 	dbg ("*** %%s\n", msg);


tool: D314: NPFF(int ecode, const char *msg, ...)


tool: D48: 	va_start (arg, msg);


tool: D198: 	done = vprintf (msg, arg);


tool: D51: 	va_end (arg);



tool: D460: static unsigned int Version;


tool: D140: static unsigned int UserVersion;


tool: D228: static unsigned int UserVersion2;


tool: D158: static int


tool: D115: VersionCheck (unsigned int a, unsigned int b)


tool: D347: 	if (a == 0 && b == 0) return 1;


tool: D91: 	if (a != 0 && b == 0) return Version >= a;


tool: D372: 	if (a == 0 && b != 0) return Version <= b;


tool: D385: 	return Version >= a && Version <= b;


assistant: ```c
int cg_prologue() {
  printf("#include <stdlib.h>\n");
  printf("#include <string.h>\n");
  printf("#include <stdarg.h>\n");
  printf("#include <stdio.h>\n");
  printf("#include \"utils.h\"\n");
  printf("#include \"niff.h\"\n\n");
  printf("#define COVERAGEIN\n");
  printf("#define COVERAGEOUT\n\n");
  printf("static inline int\n");
  printf("dbg(const char *format, ...)\n");
  printf("{\n");
  printf("	return 0;\n");
  printf("	va_list arg;\n");
  printf("	int done;\n");
  printf("	va_start (arg, format);\n");
  printf("	done = vprintf (format, arg);\n");
  printf("	va_end (arg);\n");
  printf("	return done;\n");
  printf("}\n\n");
  printf("static NifStream *R;\n");
  printf("static Stream *S;\n");
  printf("static int ERR;\n");
  printf("static int STOP;\n\n");
  printf("#define GETMEM(SIZE) malloc (SIZE)\n\n");
  printf("#define READERARGLST register NifStream *r\n");
  printf("#define READER R\n\n");
  printf("#define ENONE 0\n");
  printf("#define EM 1\n");
  printf("#define EIO 2\n");
  printf("#define ENIF 3\n");
  printf("#define EBUG 4\n\n");
  printf("// Nif Parsing Failed\n");
  printf("static void\n");
  printf("NPF(const char *msg, int ecode)\n");
  printf("{\n");
  printf("	dbg (\"*** %%s\\n\", msg);\n");
  printf("	ERR = ecode;\n");
  printf("	STOP = 1;\n");
  printf("}\n\n");
  printf("static void\n");
  printf("NPFF(int ecode, const char *msg, ...)\n");
  printf("{\n");
  printf("	va_list arg;\n");
  printf("	int done;\n");
  printf("	va_start (arg, msg);\n");
  printf("	done = vprintf (msg, arg);\n");
  printf("	va_end (arg);\n\n");
  printf("	ERR = ecode;\n");
  printf("	STOP = 1;\n");
  printf("}\n\n");
  printf("static unsigned int Version;\n");
  printf("static unsigned int "
         "UserVersion"
         ";\n");
  printf("static unsigned int "
         "UserVersion2"
         ";\n");
  printf("static int\n");
  printf("VersionCheck"
         " (unsigned int a, unsigned int b)\n");
  printf("{\n");
  printf("\tif (a == 0 && b == 0) return 1;\n");
  printf("\tif (a != 0 && b == 0) return Version >= a;\n");
  printf("\tif (a == 0 && b != 0) return Version <= b;\n");
  printf("\treturn Version >= a && Version <= b;\n");
  printf("}\n\n");
  return 1;
}
```