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

```asm
<check_patients_assess>:
  endbr64
  push   %r15
  push   %r14
  lea    0x50(%rdi),%r14d
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  test   %esi,%esi
  je     L42
  lea    0x38(%rdi),%eax
  mov    %esi,%r13d
  lea    0x5c(%rdi),%r12d
  mov    %edi,%ebx
  mov    %eax,0xc(%rsp)
  lea    0x60(%rdi),%ebp
  jmp    L16
  nopl   0x0(%rax,%rax,1)
L38:
  mov    0x8(%r13d),%rsi
  mov    %esi,%r13d
  test   %esi,%esi
  je     L42
L16:
  mov    (%rsi),%r15
  mov    0x8(%r15d),%eax
  sub    $0x1,%eax
  mov    %eax,0x8(%r15d)
  jne    L38
  mov    0x0(%ebp),%rdi
  call   <my_rand@plt>
  pxor   %xmm0,%xmm0
  mov    0xc(%rsp),%edi
  movss  D9(%rip),%xmm1
  cvtsi2ss %eax,%xmm0
  mulss  %xmm0,%xmm1
  cvtss2sd %xmm0,%xmm0
  comisd D16(%rip),%xmm0
  cvttss2si %xmm1,%rax
  mov    %rax,0x0(%ebp)
  mov    (%r12),%eax
  ja     L30
  test   %eax,%eax
  jne    L88
  mov    %r15,%rsi
L86:
  call   <removeList@plt>
  mov    %r15,%rsi
  lea    0x44(%rbx),%edi
  xor    %eax,%eax
  call   <addList@plt>
  mov    0x8(%r13d),%rsi
  movl   $0xa,0x8(%r15d)
  addl   $0xa,0x4(%r15d)
  mov    %esi,%r13d
  test   %esi,%esi
  jne    L16
L42:
  add    $0x18,%rsp
  mov    %r14,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L88:
  addl   $0x1,0x24(%ebx)
  mov    %r15,%rsi
  xor    %eax,%eax
  call   <removeList@plt>
  mov    %r15,%rsi
  mov    %r14,%rdi
  xor    %eax,%eax
  call   <addList@plt>
  jmp    L38
  nopl   0x0(%rax)
L30:
  mov    %r15,%rsi
  xor    %eax,%eax
  jmp    L86
```

tool_calls: name: retrieve_data
arguments: label: D9
type: byte[4]
name: retrieve_data
arguments: label: D16
type: f64

tool: {"D9": [0x00,0x00,0x00,0x4f]}

tool: D16: 0.1

assistant: ```c
struct List *check_patients_assess(struct Village *village, struct List *list) {
  float rand___0;
  struct Patient *p;
  int label;
  void *__cil_tmp6;
  unsigned int __cil_tmp7;
  unsigned int __cil_tmp8;
  unsigned int __cil_tmp9;
  unsigned int __cil_tmp10;
  unsigned int __cil_tmp11;
  unsigned int __cil_tmp12;
  int __cil_tmp13;
  unsigned int __cil_tmp14;
  unsigned int __cil_tmp15;
  unsigned int __cil_tmp16;
  unsigned int __cil_tmp17;
  int __cil_tmp18;
  unsigned int __cil_tmp19;
  unsigned int __cil_tmp20;
  long __cil_tmp21;
  unsigned int __cil_tmp22;
  unsigned int __cil_tmp23;
  float __cil_tmp24;
  float __cil_tmp25;
  unsigned int __cil_tmp26;
  unsigned int __cil_tmp27;
  double __cil_tmp28;
  unsigned int __cil_tmp29;
  unsigned int __cil_tmp30;
  unsigned int __cil_tmp31;
  struct List *__cil_tmp32;
  unsigned int __cil_tmp33;
  unsigned int __cil_tmp34;
  unsigned int __cil_tmp35;
  struct List *__cil_tmp36;
  unsigned int __cil_tmp37;
  unsigned int __cil_tmp38;
  unsigned int __cil_tmp39;
  unsigned int __cil_tmp40;
  unsigned int __cil_tmp41;
  unsigned int __cil_tmp42;
  int __cil_tmp43;
  unsigned int __cil_tmp44;
  unsigned int __cil_tmp45;
  int __cil_tmp46;
  unsigned int __cil_tmp47;
  unsigned int __cil_tmp48;
  unsigned int __cil_tmp49;
  struct List *__cil_tmp50;
  unsigned int __cil_tmp51;
  unsigned int __cil_tmp52;
  unsigned int __cil_tmp53;
  struct List *__cil_tmp54;
  unsigned int __cil_tmp55;
  unsigned int __cil_tmp56;
  unsigned int __cil_tmp57;
  unsigned int __cil_tmp58;
  unsigned int __cil_tmp59;
  unsigned int __cil_tmp60;
  int __cil_tmp61;
  unsigned int __cil_tmp62;
  unsigned int __cil_tmp63;
  int __cil_tmp64;
  unsigned int __cil_tmp65;
  unsigned int __cil_tmp66;
  unsigned int __cil_tmp67;
  unsigned int __cil_tmp68;
  unsigned int __cil_tmp69;
  unsigned int __cil_tmp70;
  int __cil_tmp71;
  unsigned int __cil_tmp72;
  unsigned int __cil_tmp73;
  unsigned int __cil_tmp74;
  struct List *__cil_tmp75;
  unsigned int __cil_tmp76;
  unsigned int __cil_tmp77;
  unsigned int __cil_tmp78;
  struct List *__cil_tmp79;
  unsigned int __cil_tmp80;
  unsigned int __cil_tmp81;
  unsigned int __cil_tmp82;
  unsigned int __cil_tmp83;
  unsigned int __cil_tmp84;
  struct Patient **mem_85;
  int *mem_86;
  int *mem_87;
  int *mem_88;
  int *mem_89;
  long *mem_90;
  long *mem_91;
  int *mem_92;
  int *mem_93;
  int *mem_94;
  int *mem_95;
  int *mem_96;
  int *mem_97;
  int *mem_98;
  int *mem_99;
  int *mem_100;
  int *mem_101;
  int *mem_102;
  struct List **mem_103;
  {
    {
      while (1) {
      while_4_continue:;
        {
          __cil_tmp6 = (void *)0;
          __cil_tmp7 = (unsigned int)__cil_tmp6;
          __cil_tmp8 = (unsigned int)list;
          if (__cil_tmp8 != __cil_tmp7) {
          } else {
            goto while_4_break;
          }
        }
        mem_85 = (struct Patient **)list;
        p = *mem_85;
        __cil_tmp9 = (unsigned int)p;
        __cil_tmp10 = __cil_tmp9 + 8;
        __cil_tmp11 = (unsigned int)p;
        __cil_tmp12 = __cil_tmp11 + 8;
        mem_86 = (int *)__cil_tmp12;
        __cil_tmp13 = *mem_86;
        mem_87 = (int *)__cil_tmp10;
        *mem_87 = __cil_tmp13 - 1;
        __cil_tmp14 = (unsigned int)village;
        __cil_tmp15 = __cil_tmp14 + 92;
        mem_88 = (int *)__cil_tmp15;
        label = *mem_88;
        {
          __cil_tmp16 = (unsigned int)p;
          __cil_tmp17 = __cil_tmp16 + 8;
          mem_89 = (int *)__cil_tmp17;
          __cil_tmp18 = *mem_89;
          if (__cil_tmp18 == 0) {
            {
              __cil_tmp19 = (unsigned int)village;
              __cil_tmp20 = __cil_tmp19 + 96;
              mem_90 = (long *)__cil_tmp20;
              __cil_tmp21 = *mem_90;
              rand___0 = my_rand(__cil_tmp21);
              __cil_tmp22 = (unsigned int)village;
              __cil_tmp23 = __cil_tmp22 + 96;
              __cil_tmp24 = (float)2147483647;
              __cil_tmp25 = rand___0 * __cil_tmp24;
              mem_91 = (long *)__cil_tmp23;
              *mem_91 = (long)__cil_tmp25;
              __cil_tmp26 = (unsigned int)village;
              __cil_tmp27 = __cil_tmp26 + 92;
              mem_92 = (int *)__cil_tmp27;
              label = *mem_92;
            }
            {
              __cil_tmp28 = (double)rand___0;
              if (__cil_tmp28 > 0.1) {
                {
                  __cil_tmp29 = 32 + 24;
                  __cil_tmp30 = (unsigned int)village;
                  __cil_tmp31 = __cil_tmp30 + __cil_tmp29;
                  __cil_tmp32 = (struct List *)__cil_tmp31;
                  removeList(__cil_tmp32, p);
                  __cil_tmp33 = 32 + 36;
                  __cil_tmp34 = (unsigned int)village;
                  __cil_tmp35 = __cil_tmp34 + __cil_tmp33;
                  __cil_tmp36 = (struct List *)__cil_tmp35;
                  addList(__cil_tmp36, p);
                  __cil_tmp37 = (unsigned int)p;
                  __cil_tmp38 = __cil_tmp37 + 8;
                  mem_93 = (int *)__cil_tmp38;
                  *mem_93 = 10;
                  __cil_tmp39 = (unsigned int)p;
                  __cil_tmp40 = __cil_tmp39 + 4;
                  __cil_tmp41 = (unsigned int)p;
                  __cil_tmp42 = __cil_tmp41 + 8;
                  mem_94 = (int *)__cil_tmp42;
                  __cil_tmp43 = *mem_94;
                  __cil_tmp44 = (unsigned int)p;
                  __cil_tmp45 = __cil_tmp44 + 4;
                  mem_95 = (int *)__cil_tmp45;
                  __cil_tmp46 = *mem_95;
                  mem_96 = (int *)__cil_tmp40;
                  *mem_96 = __cil_tmp46 + __cil_tmp43;
                }
              } else {
                if (label == 0) {
                  {
                    __cil_tmp47 = 32 + 24;
                    __cil_tmp48 = (unsigned int)village;
                    __cil_tmp49 = __cil_tmp48 + __cil_tmp47;
                    __cil_tmp50 = (struct List *)__cil_tmp49;
                    removeList(__cil_tmp50, p);
                    __cil_tmp51 = 32 + 36;
                    __cil_tmp52 = (unsigned int)village;
                    __cil_tmp53 = __cil_tmp52 + __cil_tmp51;
                    __cil_tmp54 = (struct List *)__cil_tmp53;
                    addList(__cil_tmp54, p);
                    __cil_tmp55 = (unsigned int)p;
                    __cil_tmp56 = __cil_tmp55 + 8;
                    mem_97 = (int *)__cil_tmp56;
                    *mem_97 = 10;
                    __cil_tmp57 = (unsigned int)p;
                    __cil_tmp58 = __cil_tmp57 + 4;
                    __cil_tmp59 = (unsigned int)p;
                    __cil_tmp60 = __cil_tmp59 + 8;
                    mem_98 = (int *)__cil_tmp60;
                    __cil_tmp61 = *mem_98;
                    __cil_tmp62 = (unsigned int)p;
                    __cil_tmp63 = __cil_tmp62 + 4;
                    mem_99 = (int *)__cil_tmp63;
                    __cil_tmp64 = *mem_99;
                    mem_100 = (int *)__cil_tmp58;
                    *mem_100 = __cil_tmp64 + __cil_tmp61;
                  }
                } else {
                  {
                    __cil_tmp65 = 32 + 4;
                    __cil_tmp66 = (unsigned int)village;
                    __cil_tmp67 = __cil_tmp66 + __cil_tmp65;
                    __cil_tmp68 = 32 + 4;
                    __cil_tmp69 = (unsigned int)village;
                    __cil_tmp70 = __cil_tmp69 + __cil_tmp68;
                    mem_101 = (int *)__cil_tmp70;
                    __cil_tmp71 = *mem_101;
                    mem_102 = (int *)__cil_tmp67;
                    *mem_102 = __cil_tmp71 + 1;
                    __cil_tmp72 = 32 + 24;
                    __cil_tmp73 = (unsigned int)village;
                    __cil_tmp74 = __cil_tmp73 + __cil_tmp72;
                    __cil_tmp75 = (struct List *)__cil_tmp74;
                    removeList(__cil_tmp75, p);
                    __cil_tmp76 = 32 + 48;
                    __cil_tmp77 = (unsigned int)village;
                    __cil_tmp78 = __cil_tmp77 + __cil_tmp76;
                    __cil_tmp79 = (struct List *)__cil_tmp78;
                    addList(__cil_tmp79, p);
                  }
                }
              }
            }
          } else {
          }
        }
        __cil_tmp80 = (unsigned int)list;
        __cil_tmp81 = __cil_tmp80 + 8;
        mem_103 = (struct List **)__cil_tmp81;
        list = *mem_103;
      }
    while_4_break:;
    }
    {
      __cil_tmp82 = 32 + 48;
      __cil_tmp83 = (unsigned int)village;
      __cil_tmp84 = __cil_tmp83 + __cil_tmp82;
      return ((struct List *)__cil_tmp84);
    }
  }
}
```