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

```asm
<cvd_female_validation>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  mov    %ecx,-0x20(%rbp)
  mov    %r8d,-0x24(%rbp)
  movsd  %xmm0,-0x30(%rbp)
  mov    %r9d,-0x28(%rbp)
  movsd  %xmm1,-0x38(%rbp)
  movsd  %xmm2,-0x40(%rbp)
  movsd  %xmm3,-0x48(%rbp)
  movl   $0x1,-0x4(%rbp)
  mov    0x20(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x14(%rbp),%eax
  mov    %eax,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  jne    L28
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D83(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L28:
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  jne    L6
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D12(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L6:
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  jne    L26
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D110(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L26:
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  jne    L92
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D94(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L92:
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  jne    L115
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D22(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L115:
  mov    -0x30(%rbp),%rax
  mov    $0x28,%esi
  mov    $0x14,%edi
  movq   %rax,%xmm0
  call   <d_in_range@plt>
  test   %eax,%eax
  jne    L114
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D4(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L114:
  mov    -0x28(%rbp),%eax
  mov    $0x9,%edx
  mov    $0x1,%esi
  mov    %eax,%edi
  call   <i_in_range@plt>
  test   %eax,%eax
  jne    L101
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D6(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L101:
  mov    0x10(%rbp),%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  jne    L90
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D63(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L90:
  mov    -0x38(%rbp),%rax
  mov    $0xc,%esi
  mov    $0x1,%edi
  movq   %rax,%xmm0
  call   <d_in_range@plt>
  test   %eax,%eax
  jne    L80
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D82(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L80:
  mov    -0x40(%rbp),%rax
  mov    $0xd2,%esi
  mov    $0x46,%edi
  movq   %rax,%xmm0
  call   <d_in_range@plt>
  test   %eax,%eax
  jne    L67
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D23(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L67:
  mov    0x18(%rbp),%eax
  mov    $0x4,%edx
  mov    $0x0,%esi
  mov    %eax,%edi
  call   <i_in_range@plt>
  test   %eax,%eax
  jne    L39
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D13(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L39:
  mov    -0x48(%rbp),%rax
  mov    $0xb,%esi
  mov    $0xfffffff9,%edi
  movq   %rax,%xmm0
  call   <d_in_range@plt>
  test   %eax,%eax
  jne    L62
  movl   $0x0,-0x4(%rbp)
  mov    0x28(%rbp),%edx
  mov    0x20(%rbp),%rax
  lea    D79(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strlcat@plt>
L62:
  mov    -0x4(%rbp),%eax
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D83
data_type: string
name: retrieve_data
arguments: data_label: D12
data_type: string
name: retrieve_data
arguments: data_label: D110
data_type: string
name: retrieve_data
arguments: data_label: D94
data_type: string
name: retrieve_data
arguments: data_label: D22
data_type: string
name: retrieve_data
arguments: data_label: D4
data_type: string
name: retrieve_data
arguments: data_label: D6
data_type: string
name: retrieve_data
arguments: data_label: D63
data_type: string
name: retrieve_data
arguments: data_label: D82
data_type: string
name: retrieve_data
arguments: data_label: D23
data_type: string
name: retrieve_data
arguments: data_label: D13
data_type: string
name: retrieve_data
arguments: data_label: D79
data_type: string

tool: D83: error: b_AF must be in range (0,1)


tool: D12: error: b_ra must be in range (0,1)


tool: D110: error: b_renal must be in range (0,1)


tool: D94: error: b_treatedhyp must be in range (0,1)


tool: D22: error: b_type2 must be in range (0,1)


tool: D4: error: bmi must be in range (20,40)


tool: D6: error: ethrisk must be in range (1,9)


tool: D63: error: fh_cvd must be in range (0,1)


tool: D82: error: rati must be in range (1,12)


tool: D23: error: sbp must be in range (70,210)


tool: D13: error: smoke_cat must be in range (0,4)


tool: D79: error: town must be in range (-7,11)


assistant: ```c
int cvd_female_validation(int b_AF, int b_ra, int b_renal, int b_treatedhyp, int b_type2, double bmi, int ethrisk, int fh_cvd, double rati, double sbp, int smoke_cat, double town, char *errorBuf, int errorBufSize) {
  int ok = 1;
  *errorBuf = 0;
  if (!is_boolean(b_AF)) {
    ok = 0;
    strlcat(errorBuf, "error: b_AF must be in range (0,1)\n", errorBufSize);
  }
  if (!is_boolean(b_ra)) {
    ok = 0;
    strlcat(errorBuf, "error: b_ra must be in range (0,1)\n", errorBufSize);
  }
  if (!is_boolean(b_renal)) {
    ok = 0;
    strlcat(errorBuf, "error: b_renal must be in range (0,1)\n", errorBufSize);
  }
  if (!is_boolean(b_treatedhyp)) {
    ok = 0;
    strlcat(errorBuf, "error: b_treatedhyp must be in range (0,1)\n", errorBufSize);
  }
  if (!is_boolean(b_type2)) {
    ok = 0;
    strlcat(errorBuf, "error: b_type2 must be in range (0,1)\n", errorBufSize);
  }
  if (!d_in_range(bmi, 20, 40)) {
    ok = 0;
    strlcat(errorBuf, "error: bmi must be in range (20,40)\n", errorBufSize);
  }
  if (!i_in_range(ethrisk, 1, 9)) {
    ok = 0;
    strlcat(errorBuf, "error: ethrisk must be in range (1,9)\n", errorBufSize);
  }
  if (!is_boolean(fh_cvd)) {
    ok = 0;
    strlcat(errorBuf, "error: fh_cvd must be in range (0,1)\n", errorBufSize);
  }
  if (!d_in_range(rati, 1, 12)) {
    ok = 0;
    strlcat(errorBuf, "error: rati must be in range (1,12)\n", errorBufSize);
  }
  if (!d_in_range(sbp, 70, 210)) {
    ok = 0;
    strlcat(errorBuf, "error: sbp must be in range (70,210)\n", errorBufSize);
  }
  if (!i_in_range(smoke_cat, 0, 4)) {
    ok = 0;
    strlcat(errorBuf, "error: smoke_cat must be in range (0,4)\n", errorBufSize);
  }
  if (!d_in_range(town, -7, 11)) {
    ok = 0;
    strlcat(errorBuf, "error: town must be in range (-7,11)\n", errorBufSize);
  }
  return ok;
}
```