user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x188,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x178(%rsp)
  xor    %eax,%eax
  mov    $0x2d8,%edi
  call   <malloc@plt>
  mov    %rax,%rbp
  mov    $0x168,%edi
  call   <malloc@plt>
  mov    %rax,%r12
  mov    $0x168,%edi
  call   <malloc@plt>
  mov    %rax,(%rsp)
  mov    $0x7ff8,%edi
  call   <malloc@plt>
  mov    %rax,0x18(%rsp)
  mov    $0x167e98,%edi
  call   <malloc@plt>
  mov    %rax,0x20(%rsp)
  mov    $0x167e98,%edi
  call   <malloc@plt>
  mov    %rax,0x28(%rsp)
  lea    D246(%rip),%rsi
  lea    D142(%rip),%rdi
  call   <fopen@plt>
  mov    %rax,%rbx
  test   %rax,%rax
  je     L232
L208:
  mov    %rbp,%r15
  lea    0x2d8(%rbp),%r14
  lea    0x70(%rsp),%r13
L169:
  mov    %rbx,%rdx
  mov    $0x100,%esi
  mov    %r13,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L323
  mov    $0x0,%esi
  mov    %r13,%rdi
  call   <strtod@plt>
  movsd  %xmm0,0x0(%rbp)
  add    $0x8,%rbp
  cmp    %r14,%rbp
  jne    L169
L323:
  mov    %r12,0x10(%rsp)
  lea    0x168(%r12),%r13
  mov    %r12,%rbp
  lea    0x70(%rsp),%r12
L211:
  mov    %rbx,%rdx
  mov    $0x100,%esi
  mov    %r12,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L367
  mov    $0x0,%esi
  mov    %r12,%rdi
  call   <strtod@plt>
  movsd  %xmm0,0x0(%rbp)
  add    $0x8,%rbp
  cmp    %r13,%rbp
  jne    L211
L367:
  mov    (%rsp),%rbp
  mov    %rbp,0x8(%rsp)
  lea    0x168(%rbp),%r13
  lea    0x70(%rsp),%r12
L377:
  mov    %rbx,%rdx
  mov    $0x100,%esi
  mov    %r12,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L417
  mov    $0x0,%esi
  mov    %r12,%rdi
  call   <strtod@plt>
  movsd  %xmm0,0x0(%rbp)
  add    $0x8,%rbp
  cmp    %r13,%rbp
  jne    L377
L417:
  mov    0x18(%rsp),%rbp
  mov    %rbp,%r14
  lea    0x7ff8(%rbp),%r13
  lea    0x70(%rsp),%r12
L240:
  mov    %rbx,%rdx
  mov    $0x100,%esi
  mov    %r12,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L279
  mov    $0x0,%esi
  mov    %r12,%rdi
  call   <strtod@plt>
  movsd  %xmm0,0x0(%rbp)
  add    $0x8,%rbp
  cmp    %r13,%rbp
  jne    L240
L279:
  mov    0x20(%rsp),%rbp
  mov    %rbp,%r13
  lea    0x167e98(%rbp),%rax
  mov    %rax,(%rsp)
  lea    0x70(%rsp),%r12
L410:
  mov    %rbx,%rdx
  mov    $0x100,%esi
  mov    %r12,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L411
  mov    $0x0,%esi
  mov    %r12,%rdi
  call   <strtod@plt>
  movsd  %xmm0,0x0(%rbp)
  add    $0x8,%rbp
  cmp    (%rsp),%rbp
  jne    L410
L411:
  mov    0x28(%rsp),%rbp
  mov    %rbp,%r12
  lea    0x167e98(%rbp),%rax
  mov    %rax,0x18(%rsp)
  lea    0x70(%rsp),%rax
  mov    %rax,(%rsp)
L518:
  mov    %rbx,%rdx
  mov    $0x100,%esi
  mov    (%rsp),%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L530
  mov    $0x0,%esi
  mov    (%rsp),%rdi
  call   <strtod@plt>
  movsd  %xmm0,0x0(%rbp)
  add    $0x8,%rbp
  cmp    0x18(%rsp),%rbp
  jne    L518
L530:
  mov    %rbx,%rdi
  call   <fclose@plt>
  mov    $0x2d,%ecx
  mov    $0x2d,%edx
  mov    $0x5b,%esi
  lea    D289(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x5b,%esi
  lea    D175(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
  mov    $0x1,%ebp
  lea    0x30(%rsp),%rbx
  jmp    L511
L232:
  lea    D142(%rip),%rdi
  call   <perror@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L208
L349:
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,(%rsp)
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    (%rsp),%eax
  cmp    $0x6e,%eax
  jle    L66
L360:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
L66:
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
  cmp    $0x5a,%ebp
  jg     L617
L461:
  add    $0x8,%r15
  add    $0x1,%ebp
L511:
  movsd  (%r15),%xmm0
  lea    D174(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  lea    -0x1(%rbp),%eax
  cmp    $0x59,%eax
  jg     L349
  lea    D91(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,(%rsp)
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    (%rsp),%eax
  cmp    $0x6e,%eax
  jg     L360
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
  jmp    L461
L617:
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jne    L444
L440:
  lea    D367(%rip),%rdi
  call   <puts@plt>
  mov    $0x2d,%esi
  lea    D83(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
  mov    $0x1,%ebp
  lea    0x30(%rsp),%rbx
  lea    D174(%rip),%r15
  jmp    L81
L444:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L440
L213:
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,(%rsp)
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    (%rsp),%eax
  cmp    $0x6e,%eax
  jle    L200
  jmp    L336
L474:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L71
L122:
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,(%rsp)
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    (%rsp),%eax
  cmp    $0x6e,%eax
  jle    L555
  jmp    L493
L357:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L581
L82:
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,(%rsp)
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    (%rsp),%eax
  cmp    $0x6e,%eax
  jle    L259
L305:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
L259:
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
  cmp    $0xffe,%ebp
  jg     L28
L194:
  add    $0x8,%r14
  add    $0x1,%ebp
L397:
  movsd  (%r14),%xmm0
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  lea    -0x1(%rbp),%eax
  cmp    $0xffd,%eax
  jg     L82
  lea    D91(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,(%rsp)
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    (%rsp),%eax
  cmp    $0x6e,%eax
  jg     L305
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
  jmp    L194
L28:
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jne    L332
L390:
  lea    D367(%rip),%rdi
  call   <puts@plt>
  mov    $0x2cfd3,%esi
  lea    D125(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
  mov    $0x1,%ebp
  lea    0x30(%rsp),%rbx
  lea    D174(%rip),%r14
  lea    D91(%rip),%r15
  jmp    L475
L332:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L390
L249:
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,(%rsp)
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    (%rsp),%eax
  cmp    $0x6e,%eax
  jle    L586
L146:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
L586:
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
  cmp    $0x2cfd2,%ebp
  jg     L151
L535:
  add    $0x8,%r13
  add    $0x1,%ebp
L475:
  movsd  0x0(%r13),%xmm0
  mov    %r14,%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  lea    -0x1(%rbp),%eax
  cmp    $0x2cfd1,%eax
  jg     L249
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,(%rsp)
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    (%rsp),%eax
  cmp    $0x6e,%eax
  jg     L146
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
  jmp    L535
L151:
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jne    L221
L528:
  lea    D367(%rip),%rdi
  call   <puts@plt>
  mov    $0x2cfd3,%esi
  lea    D366(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
  mov    $0x1,%r13d
  lea    0x30(%rsp),%rbx
  lea    D174(%rip),%r14
  lea    D91(%rip),%r15
  jmp    L178
L221:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L528
L165:
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,%ebp
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    %eax,%ebp
  cmp    $0x6e,%ebp
  jle    L442
L152:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
L442:
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
  cmp    $0x2cfd2,%r13d
  jg     L270
L340:
  add    $0x8,%r12
  add    $0x1,%r13d
L178:
  movsd  (%r12),%xmm0
  mov    %r14,%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  lea    -0x1(%r13),%eax
  cmp    $0x2cfd1,%eax
  jg     L165
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,%ebp
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    %ebp,%eax
  cmp    $0x6e,%eax
  jg     L152
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
  jmp    L340
L270:
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jne    L458
L476:
  lea    D367(%rip),%rdi
  call   <puts@plt>
  mov    0x178(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L143
  mov    $0x0,%eax
  add    $0x188,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L458:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L476
L341:
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
L88:
  addq   $0x8,0x8(%rsp)
  add    $0x1,%ebp
L507:
  mov    0x8(%rsp),%rax
  movsd  (%rax),%xmm0
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  lea    -0x1(%rbp),%eax
  cmp    $0x2b,%eax
  jg     L122
  lea    D91(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,(%rsp)
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    (%rsp),%eax
  cmp    $0x6e,%eax
  jle    L341
L493:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
L555:
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
  cmp    $0x2c,%ebp
  jle    L88
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jne    L357
L581:
  lea    D367(%rip),%rdi
  call   <puts@plt>
  mov    $0xfff,%esi
  lea    D248(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
  mov    $0x1,%ebp
  lea    0x30(%rsp),%rbx
  lea    D174(%rip),%r15
  jmp    L397
L57:
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
L548:
  addq   $0x8,0x10(%rsp)
  add    $0x1,%ebp
L81:
  mov    0x10(%rsp),%rax
  movsd  (%rax),%xmm0
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  lea    -0x1(%rbp),%eax
  cmp    $0x2b,%eax
  jg     L213
  lea    D91(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  mov    %eax,(%rsp)
  mov    %rbx,%rdi
  call   <strlen@plt>
  add    (%rsp),%eax
  cmp    $0x6e,%eax
  jle    L57
L336:
  lea    0x70(%rsp),%rsi
  lea    D350(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
L200:
  lea    0x70(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcat@plt>
  cmp    $0x2c,%ebp
  jle    L548
  lea    0x70(%rsp),%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jne    L474
L71:
  lea    D367(%rip),%rdi
  call   <puts@plt>
  mov    $0x2d,%esi
  lea    D397(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movb   $0x0,0x70(%rsp)
  mov    $0x1,%ebp
  lea    0x30(%rsp),%rbx
  lea    D174(%rip),%r15
  jmp    L507
L143:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: label: D246
data_type: string
name: read_data
arguments: label: D142
data_type: string
name: read_data
arguments: label: D289
data_type: string
name: read_data
arguments: label: D175
data_type: string
name: read_data
arguments: label: D350
data_type: string
name: read_data
arguments: label: D174
data_type: string
name: read_data
arguments: label: D91
data_type: string
name: read_data
arguments: label: D367
data_type: string
name: read_data
arguments: label: D83
data_type: string
name: read_data
arguments: label: D125
data_type: string
name: read_data
arguments: label: D366
data_type: string
name: read_data
arguments: label: D248
data_type: string
name: read_data
arguments: label: D397
data_type: string

tool: D246: r

tool: D142: gsw_data_v3_0.dat

tool: D289: static int	gsw_nx=%d, gsw_ny=%d, gsw_nz=%d;


tool: D175: static double	longs_ref[%d] = {


tool: D350: 	%s


tool: D174: %.17g

tool: D91: ,

tool: D367: 	};

tool: D83: static double	lats_ref[%d] = {


tool: D125: static double	saar_ref[%d] = {


tool: D366: static double	delta_sa_ref[%d] = {


tool: D248: static double	ndepth_ref[%d] = {


tool: D397: static double	p_ref[%d] = {


assistant: ```c
int main(int argc, char **argv) {
  int nx = 91, ny = 45, nz = 45;
  int i;
  double *longs_ref, *lats_ref, *p_ref, *ndepth_ref, *saar_ref, *delta_sa_ref;
  FILE *fin;
  char buf[256], b[64], *pC;
  longs_ref = malloc(nx * sizeof(double));
  lats_ref = malloc(ny * sizeof(double));
  p_ref = malloc(nz * sizeof(double));
  ndepth_ref = malloc(nx * ny * sizeof(double));
  saar_ref = malloc(nx * ny * nz * sizeof(double));
  delta_sa_ref = malloc(nx * ny * nz * sizeof(double));
  if ((fin = fopen("gsw_data_v3_0.dat", "r")) == NULL) {
    perror("gsw_data_v3_0.dat");
    exit(1);
  }
  for (i = 0; i < nx; i++) {
    if (fgets(buf, sizeof(buf), fin) == NULL)
      break;
    longs_ref[i] = strtod(buf, NULL);
  }
  for (i = 0; i < ny; i++) {
    if (fgets(buf, sizeof(buf), fin) == NULL)
      break;
    lats_ref[i] = strtod(buf, NULL);
  }
  for (i = 0; i < nz; i++) {
    if (fgets(buf, sizeof(buf), fin) == NULL)
      break;
    p_ref[i] = strtod(buf, NULL);
  }
  for (i = 0; i < nx * ny; i++) {
    if (fgets(buf, sizeof(buf), fin) == NULL)
      break;
    ndepth_ref[i] = strtod(buf, NULL);
  }
  for (i = 0; i < nx * ny * nz; i++) {
    if (fgets(buf, sizeof(buf), fin) == NULL)
      break;
    saar_ref[i] = strtod(buf, NULL);
  }
  for (i = 0; i < nx * ny * nz; i++) {
    if (fgets(buf, sizeof(buf), fin) == NULL)
      break;
    delta_sa_ref[i] = strtod(buf, NULL);
  }
  fclose(fin);
  printf("static int\tgsw_nx=%d, gsw_ny=%d, gsw_nz=%d;\n", nx, ny, nz);
  printf("static double\tlongs_ref[%d] = {\n", nx);
  buf[0] = '\0';
  for (i = 0; i < nx; i++) {
    sprintf(b, "%.17g", longs_ref[i]);
    if (i < (nx - 1))
      strcat(b, ",");
    if (strlen(buf) + strlen(b) > 110) {
      printf("\t%s\n", buf);
      buf[0] = '\0';
    }
    strcat(buf, b);
  }
  if (strlen(buf) != 0)
    printf("\t%s\n", buf);
  printf("\t};\n");
  printf("static double\tlats_ref[%d] = {\n", ny);
  buf[0] = '\0';
  for (i = 0; i < ny; i++) {
    sprintf(b, "%.17g", lats_ref[i]);
    if (i < (ny - 1))
      strcat(b, ",");
    if (strlen(buf) + strlen(b) > 110) {
      printf("\t%s\n", buf);
      buf[0] = '\0';
    }
    strcat(buf, b);
  }
  if (strlen(buf) != 0)
    printf("\t%s\n", buf);
  printf("\t};\n");
  printf("static double\tp_ref[%d] = {\n", nz);
  buf[0] = '\0';
  for (i = 0; i < nz; i++) {
    sprintf(b, "%.17g", p_ref[i]);
    if (i < (nz - 1))
      strcat(b, ",");
    if (strlen(buf) + strlen(b) > 110) {
      printf("\t%s\n", buf);
      buf[0] = '\0';
    }
    strcat(buf, b);
  }
  if (strlen(buf) != 0)
    printf("\t%s\n", buf);
  printf("\t};\n");
  printf("static double\tndepth_ref[%d] = {\n", nx * ny);
  buf[0] = '\0';
  for (i = 0; i < nx * ny; i++) {
    sprintf(b, "%.17g", ndepth_ref[i]);
    if (i < (nx * ny - 1))
      strcat(b, ",");
    if (strlen(buf) + strlen(b) > 110) {
      printf("\t%s\n", buf);
      buf[0] = '\0';
    }
    strcat(buf, b);
  }
  if (strlen(buf) != 0)
    printf("\t%s\n", buf);
  printf("\t};\n");
  printf("static double\tsaar_ref[%d] = {\n", nx * ny * nz);
  buf[0] = '\0';
  for (i = 0; i < nx * ny * nz; i++) {
    sprintf(b, "%.17g", saar_ref[i]);
    if (i < (nx * ny * nz - 1))
      strcat(b, ",");
    if (strlen(buf) + strlen(b) > 110) {
      printf("\t%s\n", buf);
      buf[0] = '\0';
    }
    strcat(buf, b);
  }
  if (strlen(buf) != 0)
    printf("\t%s\n", buf);
  printf("\t};\n");
  printf("static double\tdelta_sa_ref[%d] = {\n", nx * ny * nz);
  buf[0] = '\0';
  for (i = 0; i < nx * ny * nz; i++) {
    sprintf(b, "%.17g", delta_sa_ref[i]);
    if (i < (nx * ny * nz - 1))
      strcat(b, ",");
    if (strlen(buf) + strlen(b) > 110) {
      printf("\t%s\n", buf);
      buf[0] = '\0';
    }
    strcat(buf, b);
  }
  if (strlen(buf) != 0)
    printf("\t%s\n", buf);
  printf("\t};\n");
  return (0);
}
```