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

```asm
<cg_prologue>:
  endbr64
  push   %r15
  lea    D424(%rip),%rdi
  lea    D241(%rip),%r15
  push   %r14
  lea    D463(%rip),%r14
  push   %r13
  lea    D391(%rip),%r13
  push   %r12
  lea    D22(%rip),%r12
  push   %rbp
  lea    D51(%rip),%rbp
  push   %rbx
  lea    D259(%rip),%rbx
  sub    $0x8,%rsp
  call   <printf@plt>
  lea    D48(%rip),%rdi
  call   <printf@plt>
  lea    D108(%rip),%rdi
  call   <printf@plt>
  lea    D158(%rip),%rdi
  call   <printf@plt>
  lea    D436(%rip),%rdi
  call   <printf@plt>
  lea    D496(%rip),%rdi
  call   <printf@plt>
  lea    D363(%rip),%rdi
  call   <printf@plt>
  lea    D85(%rip),%rdi
  call   <printf@plt>
  lea    D399(%rip),%rdi
  call   <printf@plt>
  lea    D297(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D12(%rip),%rdi
  call   <printf@plt>
  mov    %rbx,%rdi
  call   <printf@plt>
  mov    %r15,%rdi
  call   <printf@plt>
  lea    D304(%rip),%rdi
  call   <printf@plt>
  lea    D381(%rip),%rdi
  call   <printf@plt>
  lea    D404(%rip),%rdi
  call   <printf@plt>
  lea    D444(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D232(%rip),%rdi
  call   <printf@plt>
  lea    D9(%rip),%rdi
  call   <printf@plt>
  lea    D167(%rip),%rdi
  call   <printf@plt>
  lea    D388(%rip),%rdi
  call   <printf@plt>
  lea    D393(%rip),%rdi
  call   <printf@plt>
  lea    D375(%rip),%rdi
  call   <printf@plt>
  lea    D279(%rip),%rdi
  call   <printf@plt>
  lea    D498(%rip),%rdi
  call   <printf@plt>
  lea    D177(%rip),%rdi
  call   <printf@plt>
  lea    D374(%rip),%rdi
  call   <printf@plt>
  lea    D230(%rip),%rdi
  call   <printf@plt>
  lea    D396(%rip),%rdi
  call   <printf@plt>
  lea    D255(%rip),%rdi
  call   <printf@plt>
  lea    D56(%rip),%r8
  mov    %r8,%rdi
  call   <printf@plt>
  lea    D162(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D78(%rip),%rdi
  call   <printf@plt>
  mov    %r14,%rdi
  call   <printf@plt>
  mov    %r13,%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D56(%rip),%r8
  mov    %r8,%rdi
  call   <printf@plt>
  lea    D31(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  mov    %rbx,%rdi
  call   <printf@plt>
  mov    %r15,%rdi
  call   <printf@plt>
  lea    D181(%rip),%rdi
  call   <printf@plt>
  lea    D84(%rip),%rdi
  call   <printf@plt>
  lea    D422(%rip),%rdi
  call   <printf@plt>
  mov    %r14,%rdi
  call   <printf@plt>
  mov    %r13,%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D92(%rip),%rdi
  call   <printf@plt>
  lea    D58(%rip),%rdi
  call   <printf@plt>
  lea    D271(%rip),%rdi
  call   <printf@plt>
  lea    D27(%rip),%rdi
  call   <printf@plt>
  lea    D346(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rdi
  call   <printf@plt>
  lea    D320(%rip),%rdi
  call   <printf@plt>
  lea    D497(%rip),%rdi
  call   <printf@plt>
  lea    D508(%rip),%rdi
  call   <printf@plt>
  lea    D273(%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: extract_symbolic_data
arguments: tag: D424
type: string
name: extract_symbolic_data
arguments: tag: D241
type: string
name: extract_symbolic_data
arguments: tag: D463
type: string
name: extract_symbolic_data
arguments: tag: D391
type: string
name: extract_symbolic_data
arguments: tag: D22
type: string
name: extract_symbolic_data
arguments: tag: D51
type: string
name: extract_symbolic_data
arguments: tag: D259
type: string
name: extract_symbolic_data
arguments: tag: D48
type: string
name: extract_symbolic_data
arguments: tag: D108
type: string
name: extract_symbolic_data
arguments: tag: D158
type: string
name: extract_symbolic_data
arguments: tag: D436
type: string
name: extract_symbolic_data
arguments: tag: D496
type: string
name: extract_symbolic_data
arguments: tag: D363
type: string
name: extract_symbolic_data
arguments: tag: D85
type: string
name: extract_symbolic_data
arguments: tag: D399
type: string
name: extract_symbolic_data
arguments: tag: D297
type: string
name: extract_symbolic_data
arguments: tag: D12
type: string
name: extract_symbolic_data
arguments: tag: D304
type: string
name: extract_symbolic_data
arguments: tag: D381
type: string
name: extract_symbolic_data
arguments: tag: D404
type: string
name: extract_symbolic_data
arguments: tag: D444
type: string
name: extract_symbolic_data
arguments: tag: D232
type: string
name: extract_symbolic_data
arguments: tag: D9
type: string
name: extract_symbolic_data
arguments: tag: D167
type: string
name: extract_symbolic_data
arguments: tag: D388
type: string
name: extract_symbolic_data
arguments: tag: D393
type: string
name: extract_symbolic_data
arguments: tag: D375
type: string
name: extract_symbolic_data
arguments: tag: D279
type: string
name: extract_symbolic_data
arguments: tag: D498
type: string
name: extract_symbolic_data
arguments: tag: D177
type: string
name: extract_symbolic_data
arguments: tag: D374
type: string
name: extract_symbolic_data
arguments: tag: D230
type: string
name: extract_symbolic_data
arguments: tag: D396
type: string
name: extract_symbolic_data
arguments: tag: D255
type: string
name: extract_symbolic_data
arguments: tag: D56
type: string
name: extract_symbolic_data
arguments: tag: D162
type: string
name: extract_symbolic_data
arguments: tag: D78
type: string
name: extract_symbolic_data
arguments: tag: D31
type: string
name: extract_symbolic_data
arguments: tag: D181
type: string
name: extract_symbolic_data
arguments: tag: D84
type: string
name: extract_symbolic_data
arguments: tag: D422
type: string
name: extract_symbolic_data
arguments: tag: D92
type: string
name: extract_symbolic_data
arguments: tag: D58
type: string
name: extract_symbolic_data
arguments: tag: D271
type: string
name: extract_symbolic_data
arguments: tag: D27
type: string
name: extract_symbolic_data
arguments: tag: D346
type: string
name: extract_symbolic_data
arguments: tag: D320
type: string
name: extract_symbolic_data
arguments: tag: D497
type: string
name: extract_symbolic_data
arguments: tag: D508
type: string
name: extract_symbolic_data
arguments: tag: D273
type: string

tool: D424: #include <stdlib.h>


tool: D241: 	int done;


tool: D463: 	ERR = ecode;


tool: D391: 	STOP = 1;


tool: D22: {


tool: D51: }



tool: D259: 	va_list arg;


tool: D48: #include <string.h>


tool: D108: #include <stdarg.h>


tool: D158: #include <stdio.h>


tool: D436: #include "utils.h"


tool: D496: #include "niff.h"



tool: D363: #define COVERAGEIN


tool: D85: #define COVERAGEOUT



tool: D399: static inline int


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


tool: D12: 	return 0;


tool: D304: 	va_start (arg, format);


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


tool: D404: 	va_end (arg);


tool: D444: 	return done;


tool: D232: static NifStream *R;


tool: D9: static Stream *S;


tool: D167: static int ERR;


tool: D388: static int STOP;



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



tool: D375: #define READERARGLST register NifStream *r


tool: D279: #define READER R



tool: D498: #define ENONE 0


tool: D177: #define EM 1


tool: D374: #define EIO 2


tool: D230: #define ENIF 3


tool: D396: #define EBUG 4



tool: D255: // Nif Parsing Failed


tool: D56: static void


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


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


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


tool: D181: 	va_start (arg, msg);


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


tool: D422: 	va_end (arg);



tool: D92: static unsigned int Version;


tool: D58: static unsigned int UserVersion;


tool: D271: static unsigned int UserVersion2;


tool: D27: static int


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


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


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


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


tool: D273: 	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;
}
```