user: Translate the below assembly code into C programming language:

```asm
<test_mktime>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x60,%rsp
  movdqa D93(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%rbp
  movaps %xmm0,0x10(%rsp)
  movdqa D0(%rip),%xmm0
  mov    %rbp,%rdi
  movaps %xmm0,0x20(%rsp)
  call   <mktime@plt>
  mov    %eax,0xc(%rsp)
  cmp    $0x50ce4029,%eax
  jne    L106
  mov    0x28(%rsp),%r12d
  test   %r12d,%r12d
  jne    L40
  cmpl   $0x15e,0x2c(%rsp)
  je     L76
  mov    $0x30,%edx
  lea    D44(%rip),%rsi
  lea    D202(%rip),%rdi
  call   <printf@plt>
L204:
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L130
  add    $0x60,%rsp
  mov    %r12d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
L76:
  lea    0x30(%rsp),%rbx
  lea    0xc(%rsp),%rdi
  mov    %rbx,%rsi
  call   <gmtime_r@plt>
  cmp    %rax,%rbx
  jne    L198
  cmpl   $0x70,0x30(%rsp)
  jne    L74
  cmpl   $0xb,0x34(%rsp)
  jne    L23
  cmpl   $0x10,0x38(%rsp)
  jne    L121
  cmpl   $0x15,0x3c(%rsp)
  jne    L84
  mov    %rbp,%rdi
  movl   $0x0,0x10(%rsp)
  call   <mktime@plt>
  cmp    $0xffffffff,%eax
  je     L201
  mov    $0x3a,%edx
  lea    D22(%rip),%rsi
  lea    D202(%rip),%rdi
  call   <printf@plt>
  jmp    L204
  nopl   (%rax)
L106:
  mov    $0x2e,%edx
  lea    D148(%rip),%rsi
  lea    D202(%rip),%rdi
  xor    %r12d,%r12d
  call   <printf@plt>
  jmp    L204
  nopl   0x0(%rax,%rax,1)
L198:
  mov    $0x32,%edx
  lea    D162(%rip),%rsi
  lea    D202(%rip),%rdi
  call   <printf@plt>
  jmp    L204
  nopl   (%rax)
L40:
  mov    $0x2f,%edx
  lea    D88(%rip),%rsi
  lea    D202(%rip),%rdi
  xor    %r12d,%r12d
  call   <printf@plt>
  jmp    L204
L74:
  mov    $0x34,%edx
  lea    D5(%rip),%rsi
  lea    D202(%rip),%rdi
  call   <printf@plt>
  jmp    L204
  nopl   (%rax)
L84:
  mov    $0x37,%edx
  lea    D128(%rip),%rsi
  lea    D202(%rip),%rdi
  call   <printf@plt>
  jmp    L204
  nopl   (%rax)
L23:
  mov    $0x35,%edx
  lea    D32(%rip),%rsi
  lea    D202(%rip),%rdi
  call   <printf@plt>
  jmp    L204
  nopl   (%rax)
L121:
  mov    $0x36,%edx
  lea    D169(%rip),%rsi
  lea    D202(%rip),%rdi
  call   <printf@plt>
  jmp    L204
  nopl   (%rax)
L201:
  mov    %rbp,%rdi
  movl   $0x7dc,0x10(%rsp)
  call   <mktime@plt>
  cmp    $0xffffffff,%eax
  jne    L171
  mov    $0x1,%r12d
  jmp    L204
L171:
  mov    $0x3d,%edx
  lea    D22(%rip),%rsi
  lea    D202(%rip),%rdi
  call   <printf@plt>
  jmp    L204
L130:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D93
type_guessed: byte[16]
name: parse_data
arguments: data_label: D0
type_guessed: byte[16]
name: parse_data
arguments: data_label: D44
type_guessed: string
name: parse_data
arguments: data_label: D202
type_guessed: string
name: parse_data
arguments: data_label: D22
type_guessed: string
name: parse_data
arguments: data_label: D148
type_guessed: string
name: parse_data
arguments: data_label: D162
type_guessed: string
name: parse_data
arguments: data_label: D88
type_guessed: string
name: parse_data
arguments: data_label: D5
type_guessed: string
name: parse_data
arguments: data_label: D128
type_guessed: string
name: parse_data
arguments: data_label: D32
type_guessed: string
name: parse_data
arguments: data_label: D169
type_guessed: string

tool: {"D93": [0x70,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x00,0x00]}

tool: {"D0": [0x2a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00]}

tool: D44: tm.tm_yday == 350

tool: D202: expression '%s' untrue at %d


tool: D22: -1 == mktime(&tm)

tool: D148: t == 1355694121

tool: D162: &tm2 == gmtime_r(&t, &tm2)

tool: D88: tm.tm_wday == 0

tool: D5: tm2.tm_year == 112

tool: D128: tm2.tm_hour == 21

tool: D32: tm2.tm_mon == 11

tool: D169: tm2.tm_mday == 16

assistant: ```c
int test_mktime(void) {
  struct tm tm = {
      .tm_year = 112,
      .tm_mon = 11,
      .tm_mday = 16,
      .tm_hour = 21,
      .tm_min = 42,
      .tm_sec = 1,
      .tm_wday = 10,
      .tm_yday = 10,
  };
  struct tm tm2;
  time_t t;
  t = mktime(&tm);
  do {
    if (!(t == 1355694121)) {
      printf("expression '%s' untrue at %d\n", "t == 1355694121", 46);
      return 0;
    }
  } while (0);
  do {
    if (!(tm.tm_wday == 0)) {
      printf("expression '%s' untrue at %d\n", "tm.tm_wday == 0", 47);
      return 0;
    }
  } while (0);
  do {
    if (!(tm.tm_yday == 350)) {
      printf("expression '%s' untrue at %d\n", "tm.tm_yday == 350", 48);
      return 0;
    }
  } while (0);
  do {
    if (!(&tm2 == gmtime_r(&t, &tm2))) {
      printf("expression '%s' untrue at %d\n", "&tm2 == gmtime_r(&t, &tm2)", 50);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_year == 112)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_year == 112", 52);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_mon == 11)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_mon == 11", 53);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_mday == 16)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_mday == 16", 54);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_hour == 21)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_hour == 21", 55);
      return 0;
    }
  } while (0);
  tm.tm_year = 0;
  do {
    if (!(-1 == mktime(&tm))) {
      printf("expression '%s' untrue at %d\n", "-1 == mktime(&tm)", 58);
      return 0;
    }
  } while (0);
  tm.tm_year = 2012;
  do {
    if (!(-1 == mktime(&tm))) {
      printf("expression '%s' untrue at %d\n", "-1 == mktime(&tm)", 61);
      return 0;
    }
  } while (0);
  return 1;
}
```