user: Converte this assembly snippet into its equivalent C code:

```asm
<display>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x4,-0xc(%rbp)
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L40:
  lea    D79(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D69(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D103(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0xc(%rbp),%eax
  cmp    $0x4,%eax
  je     L37
  cmp    $0x4,%eax
  jg     L83
  cmp    $0x3,%eax
  je     L134
  cmp    $0x3,%eax
  jg     L83
  cmp    $0x1,%eax
  je     L66
  cmp    $0x2,%eax
  je     L14
  jmp    L83
L66:
  mov    $0x0,%eax
  call   <add_node@plt>
  jmp    L38
L37:
  mov    $0x0,%edi
  call   <exit@plt>
  jmp    L83
L134:
  nop
  jmp    L38
L14:
  nop
L38:
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe(%rbp),%rdx
  lea    -0xd(%rbp),%rax
  mov    %rax,%rsi
  lea    D61(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  jmp    L84
L83:
  nop
L84:
  movzbl -0xe(%rbp),%eax
  cmp    $0x6e,%al
  jne    L40
  movzbl -0xe(%rbp),%eax
  cmp    $0x4e,%al
  jne    L40
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L70
  call   <__stack_chk_fail@plt>
L70:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D20
type_guessed: string
name: unpack_data
arguments: data_label: D10
type_guessed: string
name: unpack_data
arguments: data_label: D79
type_guessed: string
name: unpack_data
arguments: data_label: D69
type_guessed: string
name: unpack_data
arguments: data_label: D58
type_guessed: string
name: unpack_data
arguments: data_label: D60
type_guessed: string
name: unpack_data
arguments: data_label: D46
type_guessed: string
name: unpack_data
arguments: data_label: D103
type_guessed: string
name: unpack_data
arguments: data_label: D38
type_guessed: string
name: unpack_data
arguments: data_label: D30
type_guessed: string
name: unpack_data
arguments: data_label: D61
type_guessed: string

tool: D20: 

	 Telephone Directory

tool: D10: 
	 ===================

tool: D79: 
	 Menu

tool: D69: 
	 1. Add Sudirriber

tool: D58: 
	 2. Search Suscriber

tool: D60: 
	 3. Remove Suscriber

tool: D46: 
	 4. Exit


tool: D103: 

	 ::Enter Your Choice::

tool: D38: %d

tool: D30: 

	 Would you like to continue:::(y/n)

tool: D61: %c%c

assistant: ```c
void display(void) {
  int choice = 4;
  char cnt, temp;
  printf("\n\n\t Telephone Directory");
  printf("\n\t ===================");
  do {
    printf("\n\t Menu");
    printf("\n\t 1. Add Sudirriber");
    printf("\n\t 2. Search Suscriber");
    printf("\n\t 3. Remove Suscriber");
    printf("\n\t 4. Exit\n");
    printf("\n\n\t ::Enter Your Choice::");
    scanf("%d", &choice);
    switch (choice) {
    case 1:
      add_node();
      break;
    case 2:
      break;
    case 3:
      break;
    case 4:
      exit(0);
    default:
      continue;
    }
    printf("\n\n\t Would you like to continue:::(y/n)");
    scanf("%c%c", &temp, &cnt);
  } while (cnt != 'n' || cnt != 'N');
}
```