user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0xc(%rbp)
  lea    D75(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x11(%rbp),%rax
  mov    %rax,%rsi
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D17(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movzbl -0x11(%rbp),%eax
  cmp    $0x44,%al
  je     L123
  movzbl -0x11(%rbp),%eax
  cmp    $0x53,%al
  je     L123
  mov    -0x10(%rbp),%eax
  cmp    $0x8,%eax
  jne    L143
L123:
  movl   $0x1,-0xc(%rbp)
  jmp    L35
L143:
  movzbl -0x11(%rbp),%eax
  cmp    $0x56,%al
  jne    L146
  mov    -0x10(%rbp),%eax
  cmp    $0x7,%eax
  jne    L146
  movl   $0x1,-0xc(%rbp)
  jmp    L35
L146:
  movzbl -0x11(%rbp),%eax
  cmp    $0x4c,%al
  je     L176
  movzbl -0x11(%rbp),%eax
  cmp    $0x4d,%al
  je     L176
  movzbl -0x11(%rbp),%eax
  cmp    $0x58,%al
  je     L176
  movzbl -0x11(%rbp),%eax
  cmp    $0x4a,%al
  je     L176
  movzbl -0x11(%rbp),%eax
  cmp    $0x44,%al
  jne    L141
L176:
  mov    -0x10(%rbp),%eax
  test   %eax,%eax
  jns    L35
  mov    -0x10(%rbp),%eax
  cmp    $0xc,%eax
  jle    L35
L141:
  lea    D57(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L8
L35:
  cmpl   $0x0,-0xc(%rbp)
  je     L131
  lea    D54(%rip),%rax
  mov    %rax,%rsi
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L120
L131:
  lea    D54(%rip),%rax
  mov    %rax,%rsi
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L120:
  mov    $0x0,%eax
L8:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L32
  call   <__stack_chk_fail@plt>
L32:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D75
data_type: string
name: retrieve_data
arguments: data_label: D27
data_type: string
name: retrieve_data
arguments: data_label: D91
data_type: string
name: retrieve_data
arguments: data_label: D6
data_type: string
name: retrieve_data
arguments: data_label: D17
data_type: string
name: retrieve_data
arguments: data_label: D57
data_type: string
name: retrieve_data
arguments: data_label: D54
data_type: string
name: retrieve_data
arguments: data_label: D36
data_type: string
name: retrieve_data
arguments: data_label: D35
data_type: string

tool: D75: 
		--------------		
		QUAN ES FESTA?		
		--------------


tool: D27: Dies de la semana[L:Dilluns, M:Dimarts, X:Dimecres, J:Dijous, V:Divendres, S:Dissabte, D:Diumenge]
Mesos del any del 1 al 12
	Dia a comprovar ==>

tool: D91: %c

tool: D6: 	Del mes ==>

tool: D17: %d

tool: D57: Data invalida.

tool: D54: El dia introduit es 

tool: D36: %sFesta.


tool: D35: %sno-festiu


assistant: ```c
int main() {
  char dia;
  int mes;
  int festa = 0;
  printf("\n\t\t--------------		\n\t\tQUAN ES FESTA?		\n\t\t--------------\n\n");
  printf("Dies de la semana[L:Dilluns, M:Dimarts, X:Dimecres, J:Dijous, V:Divendres, S:Dissabte, D:Diumenge]\nMesos del any del 1 al 12\n\tDia a comprovar ==>");
  scanf("%c", &dia);
  printf("\tDel mes ==>");
  scanf("%d", &mes);
  if (dia == 'D' || dia == 'S' || mes == 8) {
    festa = 1;
  } else if (dia == 'V' && mes == 7) {
    festa = 1;
  } else {
    if (dia != 'L' && dia != 'M' && dia != 'X' && dia != 'J' && dia != 'D' || mes < 0 && mes > 12) {
      printf("Data invalida.\n");
      return 0;
    }
  }
  if (festa) {
    printf("%sFesta.\n", "El dia introduit es ");
  } else {
    printf("%sno-festiu\n", "El dia introduit es ");
  }
  return 0;
}
```