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

```asm
<sedb_yes_or_no>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%r12
  mov    %esi,0xc(%rsp)
  test   %esi,%esi
  lea    D22(%rip),%rbp
  lea    D35(%rip),%rax
  cmove  %rax,%rbp
  lea    D103(%rip),%r13
  lea    D60(%rip),%rbx
  lea    D22(%rip),%r14
  lea    D113(%rip),%r15
L30:
  mov    %rbp,%r8
  mov    %r12,%rcx
  mov    %r13,%rdx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <sedb_read_line_in@plt>
  test   %eax,%eax
  je     L151
  mov    %rbx,%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L111
  mov    %rbx,%rsi
  mov    %r15,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L11
  mov    %rbx,%rsi
  lea    D45(%rip),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L56
  mov    %rbx,%rsi
  lea    D7(%rip),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L152
  mov    %rbx,%rsi
  lea    D35(%rip),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L117
  mov    %rbx,%rsi
  lea    D23(%rip),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L93
  mov    %rbx,%rsi
  lea    D93(%rip),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L29
  mov    %rbx,%rsi
  lea    D105(%rip),%rdi
  call   <sedb_message@plt>
  jmp    L30
L151:
  mov    0xc(%rsp),%eax
L21:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L111:
  mov    $0x1,%eax
  jmp    L21
L11:
  mov    $0x1,%eax
  jmp    L21
L56:
  mov    $0x1,%eax
  jmp    L21
L152:
  mov    $0x1,%eax
  jmp    L21
L117:
  mov    $0x0,%eax
  jmp    L21
L93:
  mov    $0x0,%eax
  jmp    L21
L29:
  mov    $0x0,%eax
  jmp    L21
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D22
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D35
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D103
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D113
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D45
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D7
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D23
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D93
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D105
type_guessed: string

tool: D22: yes

tool: D35: no

tool: D103: %s (yes/no)? [%s] 

tool: D113: y

tool: D45: oui

tool: D7: o

tool: D23: n

tool: D93: non

tool: D105: The answer '%s' is not clear.


assistant: ```c
int sedb_yes_or_no(char *question, int default_answer) {
  static char answer[4096];
  int again;
  int result;
  int i;
  do {
    again = 0;
    i = sedb_read_line_in(answer, 1, "%s (yes/no)? [%s] ", question, (default_answer ? "yes" : "no"));
    if (i == 0) {
      result = default_answer;
    } else if ((strcmp("yes", answer) == 0) || (strcmp("y", answer) == 0) || (strcmp("oui", answer) == 0) || (strcmp("o", answer) == 0)) {
      result = 1;
    } else if ((strcmp("no", answer) == 0) || (strcmp("n", answer) == 0) || (strcmp("non", answer) == 0)) {
      result = 0;
    } else {
      sedb_message("The answer '%s' is not clear.\n", answer);
      again = 1;
    }
  } while (again);
  return result;
}
```