user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<main>:
  endbr64
  push   %r14
  lea    D271(%rip),%rdi
  push   %r13
  push   %r12
  push   %rbp
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    0xe(%rsp),%r14
  lea    0x6(%rsp),%rbp
  lea    0xa(%rsp),%r12
  lea    0x8(%rsp),%r13
  call   <printf@plt>
  mov    %r14,%rdi
  call   <gets@plt>
  mov    %r14,%rdi
  mov    %r12,%r8
  mov    %r13,%rcx
  lea    D169(%rip),%rsi
  mov    %rbp,%rdx
  call   <sscanf@plt>
  lea    D9(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L213
  lea    D229(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L338
L213:
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D306(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L47:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L141
  add    $0x28,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L338:
  lea    D216(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L313
  lea    D196(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L328
L313:
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D111(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L47
L328:
  lea    D108(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L0
  lea    D40(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L229
L0:
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D21(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L47
L229:
  lea    D296(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L219
  lea    D25(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L32
L219:
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D297(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L47
L32:
  lea    D308(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L64
  lea    D126(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L35
L64:
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D313(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L47
L141:
  call   <__stack_chk_fail@plt>
L35:
  lea    D230(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L273
  lea    D39(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L82
L273:
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D333(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L47
L82:
  lea    D7(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L285
  lea    D114(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L267
L285:
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D3(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L47
L267:
  lea    D343(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L182
  lea    D259(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L214
L182:
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D28(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L47
L214:
  lea    D360(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L247
  lea    D375(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L11
L247:
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D303(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L47
L11:
  lea    D56(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L296
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D325(%rip),%rdi
  call   <printf@plt>
  jmp    L47
L296:
  lea    D252(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L316
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D213(%rip),%rdi
  call   <printf@plt>
  jmp    L47
L316:
  lea    D98(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L140
  mov    %r12,%rdx
  mov    %r13,%rsi
  lea    D280(%rip),%rdi
  call   <printf@plt>
  jmp    L47
L140:
  lea    D160(%rip),%rdi
  call   <puts@plt>
  mov    %rbp,%rsi
  lea    D298(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r13,%rsi
  lea    D304(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  lea    D12(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L47
```

tool_calls: name: parse_data
arguments: tag: D271
type_infered: string
name: parse_data
arguments: tag: D169
type_infered: string
name: parse_data
arguments: tag: D9
type_infered: string
name: parse_data
arguments: tag: D229
type_infered: string
name: parse_data
arguments: tag: D306
type_infered: string
name: parse_data
arguments: tag: D216
type_infered: string
name: parse_data
arguments: tag: D196
type_infered: string
name: parse_data
arguments: tag: D111
type_infered: string
name: parse_data
arguments: tag: D108
type_infered: string
name: parse_data
arguments: tag: D40
type_infered: string
name: parse_data
arguments: tag: D21
type_infered: string
name: parse_data
arguments: tag: D296
type_infered: string
name: parse_data
arguments: tag: D25
type_infered: string
name: parse_data
arguments: tag: D297
type_infered: string
name: parse_data
arguments: tag: D308
type_infered: string
name: parse_data
arguments: tag: D126
type_infered: string
name: parse_data
arguments: tag: D313
type_infered: string
name: parse_data
arguments: tag: D230
type_infered: string
name: parse_data
arguments: tag: D39
type_infered: string
name: parse_data
arguments: tag: D333
type_infered: string
name: parse_data
arguments: tag: D7
type_infered: string
name: parse_data
arguments: tag: D114
type_infered: string
name: parse_data
arguments: tag: D3
type_infered: string
name: parse_data
arguments: tag: D343
type_infered: string
name: parse_data
arguments: tag: D259
type_infered: string
name: parse_data
arguments: tag: D28
type_infered: string
name: parse_data
arguments: tag: D360
type_infered: string
name: parse_data
arguments: tag: D375
type_infered: string
name: parse_data
arguments: tag: D303
type_infered: string
name: parse_data
arguments: tag: D56
type_infered: string
name: parse_data
arguments: tag: D325
type_infered: string
name: parse_data
arguments: tag: D252
type_infered: string
name: parse_data
arguments: tag: D213
type_infered: string
name: parse_data
arguments: tag: D98
type_infered: string
name: parse_data
arguments: tag: D280
type_infered: string
name: parse_data
arguments: tag: D160
type_infered: string
name: parse_data
arguments: tag: D298
type_infered: string
name: parse_data
arguments: tag: D304
type_infered: string
name: parse_data
arguments: tag: D12
type_infered: string

tool: D271: Enter date. [E.g. 04 29 1980] : 

tool: D169: %s %s %s

tool: D9: 1

tool: D229: 01

tool: D306:  January %s, %s


tool: D216: 2

tool: D196: 02

tool: D111:  February %s, %s


tool: D108: 3

tool: D40: 03

tool: D21:  March %s, %s


tool: D296: 4

tool: D25: 04

tool: D297:  April %s, %s


tool: D308: 5

tool: D126: 05

tool: D313:  May %s, %s


tool: D230: 6

tool: D39: 06

tool: D333:  June %s, %s


tool: D7: 7

tool: D114: 07

tool: D3:  July %s, %s


tool: D343: 8

tool: D259: 08

tool: D28:  August %s, %s


tool: D360: 9

tool: D375: 09

tool: D303:  September %s, %s


tool: D56: 10

tool: D325:  October %s, %s


tool: D252: 11

tool: D213:  November %s, %s


tool: D98: 12

tool: D280:  December %s, %s


tool: D160: No matching value.

tool: D298: MONTH:	%s


tool: D304: DATE:	%s


tool: D12: YEAR:	%s


assistant: ```c
int main() {
  char ST[10], MM[2], DD[2], YY[4];
  printf("Enter date. [E.g. 04 29 1980] : ");
  gets(ST);
  sscanf(ST, "%s %s %s", MM, DD, YY);
  if ((strcmp(MM, "1") == 0) || (strcmp(MM, "01") == 0)) {
    printf(" January %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "2") == 0) || (strcmp(MM, "02") == 0)) {
    printf(" February %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "3") == 0) || (strcmp(MM, "03") == 0)) {
    printf(" March %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "4") == 0) || (strcmp(MM, "04") == 0)) {
    printf(" April %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "5") == 0) || (strcmp(MM, "05") == 0)) {
    printf(" May %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "6") == 0) || (strcmp(MM, "06") == 0)) {
    printf(" June %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "7") == 0) || (strcmp(MM, "07") == 0)) {
    printf(" July %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "8") == 0) || (strcmp(MM, "08") == 0)) {
    printf(" August %s, %s\n", DD, YY);
  } else if ((strcmp(MM, "9") == 0) || (strcmp(MM, "09") == 0)) {
    printf(" September %s, %s\n", DD, YY);
  } else if (strcmp(MM, "10") == 0) {
    printf(" October %s, %s\n", DD, YY);
  } else if (strcmp(MM, "11") == 0) {
    printf(" November %s, %s\n", DD, YY);
  } else if (strcmp(MM, "12") == 0) {
    printf(" December %s, %s\n", DD, YY);
  } else {
    printf("No matching value.\n");
    printf("MONTH:\t%s\n", MM);
    printf("DATE:\t%s\n", DD);
    printf("YEAR:\t%s\n", YY);
  }
  return 0;
}
```