user: 请将以下的汇编代码转换成C语言代码：

```asm
<cvd_female_validation>:
  endbr64
  push   %r15
  mov    %ecx,%r15d
  push   %r14
  mov    %r8d,%r14d
  push   %r13
  push   %r12
  mov    $0x1,%r12d
  push   %rbp
  push   %rbx
  mov    %edx,%ebx
  sub    $0x38,%rsp
  mov    0x80(%rsp),%rbp
  mov    %esi,0x2c(%rsp)
  mov    %r9d,0x28(%rsp)
  mov    0x88(%rsp),%r13d
  movb   $0x0,0x0(%rbp)
  movsd  %xmm0,0x8(%rsp)
  movsd  %xmm1,0x10(%rsp)
  movsd  %xmm2,0x18(%rsp)
  movsd  %xmm3,0x20(%rsp)
  call   <is_boolean@plt>
  mov    0x2c(%rsp),%r10d
  test   %eax,%eax
  je     L123
  mov    %r10d,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  je     L83
L197:
  mov    %ebx,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  je     L21
L127:
  mov    %r15d,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  je     L50
L55:
  mov    %r14d,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  je     L43
L217:
  movsd  0x8(%rsp),%xmm0
  mov    $0x28,%esi
  mov    $0x14,%edi
  call   <d_in_range@plt>
  test   %eax,%eax
  je     L225
L34:
  mov    0x28(%rsp),%edi
  mov    $0x9,%edx
  mov    $0x1,%esi
  call   <i_in_range@plt>
  test   %eax,%eax
  je     L159
L86:
  mov    0x70(%rsp),%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  je     L2
L138:
  movsd  0x10(%rsp),%xmm0
  mov    $0xc,%esi
  mov    $0x1,%edi
  call   <d_in_range@plt>
  test   %eax,%eax
  je     L235
L129:
  movsd  0x18(%rsp),%xmm0
  mov    $0xd2,%esi
  mov    $0x46,%edi
  call   <d_in_range@plt>
  test   %eax,%eax
  je     L229
L209:
  mov    0x78(%rsp),%edi
  xor    %esi,%esi
  mov    $0x4,%edx
  call   <i_in_range@plt>
  test   %eax,%eax
  je     L199
L71:
  movsd  0x20(%rsp),%xmm0
  mov    $0xb,%esi
  mov    $0xfffffff9,%edi
  call   <d_in_range@plt>
  test   %eax,%eax
  je     L63
L116:
  add    $0x38,%rsp
  mov    %r12d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L123:
  mov    %rbp,%rdi
  mov    %r13d,%edx
  lea    D102(%rip),%rsi
  mov    %eax,%r12d
  call   <strlcat@plt>
  mov    0x2c(%rsp),%r10d
  mov    %r10d,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  jne    L197
L83:
  mov    %rbp,%rdi
  mov    %r13d,%edx
  lea    D2(%rip),%rsi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  mov    %ebx,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  jne    L127
L21:
  mov    %rbp,%rdi
  mov    %r13d,%edx
  lea    D15(%rip),%rsi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  mov    %r15d,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  jne    L55
L50:
  mov    %rbp,%rdi
  mov    %r13d,%edx
  lea    D56(%rip),%rsi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  mov    %r14d,%edi
  call   <is_boolean@plt>
  test   %eax,%eax
  jne    L217
L43:
  mov    %r13d,%edx
  lea    D45(%rip),%rsi
  mov    %rbp,%rdi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  jmp    L217
  nopw   0x0(%rax,%rax,1)
L63:
  mov    %r13d,%edx
  lea    D81(%rip),%rsi
  mov    %rbp,%rdi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  jmp    L116
  nopw   0x0(%rax,%rax,1)
L199:
  mov    %r13d,%edx
  lea    D46(%rip),%rsi
  mov    %rbp,%rdi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  jmp    L71
  nopw   0x0(%rax,%rax,1)
L229:
  mov    %r13d,%edx
  lea    D109(%rip),%rsi
  mov    %rbp,%rdi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  jmp    L209
  nopw   0x0(%rax,%rax,1)
L235:
  mov    %r13d,%edx
  lea    D95(%rip),%rsi
  mov    %rbp,%rdi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  jmp    L129
  nopw   0x0(%rax,%rax,1)
L2:
  mov    %r13d,%edx
  lea    D83(%rip),%rsi
  mov    %rbp,%rdi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  jmp    L138
  nopw   0x0(%rax,%rax,1)
L159:
  mov    %r13d,%edx
  lea    D70(%rip),%rsi
  mov    %rbp,%rdi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  jmp    L86
  nopw   0x0(%rax,%rax,1)
L225:
  mov    %r13d,%edx
  lea    D39(%rip),%rsi
  mov    %rbp,%rdi
  xor    %r12d,%r12d
  call   <strlcat@plt>
  jmp    L34
```

tool_calls: name: parse_data
arguments: label: D102
datatype: string
name: parse_data
arguments: label: D2
datatype: string
name: parse_data
arguments: label: D15
datatype: string
name: parse_data
arguments: label: D56
datatype: string
name: parse_data
arguments: label: D45
datatype: string
name: parse_data
arguments: label: D81
datatype: string
name: parse_data
arguments: label: D46
datatype: string
name: parse_data
arguments: label: D109
datatype: string
name: parse_data
arguments: label: D95
datatype: string
name: parse_data
arguments: label: D83
datatype: string
name: parse_data
arguments: label: D70
datatype: string
name: parse_data
arguments: label: D39
datatype: string

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


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


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


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


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


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


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


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


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


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


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


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


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;
}
```