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

```asm
<main>:
  endbr64
  push   %r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  mov    %edi,%r12d
  xor    %edi,%edi
  push   %rbp
  push   %rbx
  mov    $0x1,%ebx
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rbp
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
L10:
  cmp    %ebx,%r12d
  jle    L89
  mov    0x0(%r13,%rbx,8),%rdi
  xor    %edx,%edx
  xor    %esi,%esi
  call   <strtoll@plt>
  mov    %eax,-0x4(%rbp,%rbx,4)
  add    $0x1,%rbx
  cmp    $0x5,%rbx
  jne    L10
L102:
  lea    0x10(%rsp),%r12
  mov    %rbp,%rdi
  mov    %rbp,%rbx
  mov    %r12,%rsi
  lea    D16(%rip),%rbp
  lea    D18(%rip),%r14
  call   <convert_uint32_float@plt>
  lea    D58(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  lea    0x1(%rax),%r13d
  test   %eax,%eax
  jne    L59
L23:
  mov    (%rbx),%esi
  mov    %r14,%rdi
  xor    %eax,%eax
  call   <printf@plt>
L88:
  mov    %r13d,%eax
  add    $0x4,%rbx
  lea    0x1(%rax),%r13d
  test   %eax,%eax
  je     L23
L59:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    (%rbx),%esi
  xor    %eax,%eax
  mov    %r14,%rdi
  call   <printf@plt>
  cmp    $0x4,%r13d
  jne    L88
  lea    D43(%rip),%r13
  mov    %r12,%rbx
  lea    D15(%rip),%r14
  mov    %r13,%rdi
  call   <puts@plt>
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  lea    0x1(%rax),%r12d
  test   %eax,%eax
  jne    L100
L80:
  pxor   %xmm0,%xmm0
  mov    %r14,%rdi
  mov    $0x1,%eax
  cvtss2sd (%rbx),%xmm0
  call   <printf@plt>
L63:
  mov    %r12d,%eax
  add    $0x4,%rbx
  lea    0x1(%rax),%r12d
  test   %eax,%eax
  je     L80
L100:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  mov    %r14,%rdi
  mov    $0x1,%eax
  cvtss2sd (%rbx),%xmm0
  call   <printf@plt>
  cmp    $0x4,%r12d
  jne    L63
  mov    %r13,%rdi
  call   <puts@plt>
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L68
  add    $0x30,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopw   0x0(%rax,%rax,1)
L89:
  xor    %eax,%eax
  call   <rand@plt>
  mov    %eax,-0x4(%rbp,%rbx,4)
  add    $0x1,%rbx
  cmp    $0x5,%rbx
  jne    L10
  jmp    L102
L68:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_label: D16
type_guessed: string
name: retrieve_data
arguments: data_label: D18
type_guessed: string
name: retrieve_data
arguments: data_label: D58
type_guessed: string
name: retrieve_data
arguments: data_label: D43
type_guessed: string
name: retrieve_data
arguments: data_label: D15
type_guessed: string
name: retrieve_data
arguments: data_label: D7
type_guessed: string

tool: D16: , 

tool: D18: %u

tool: D58: uint32_t[4] = {

tool: D43: }

tool: D15: %0.3f

tool: D7: float[4] = {

assistant: ```c
int main(int argc, char *argv[]) {
  uint32_t v_in[4];
  float v_out[4];
  int i;
  srand(time(NULL));
  for (i = 1; i <= 4; i++) {
    if (i < argc)
      v_in[i - 1] = strtoll(argv[i], NULL, 0);
    else
      v_in[i - 1] = rand();
  }
  convert_uint32_float(v_in, v_out);
  printf("uint32_t[4] = {");
  for (unsigned i = 0; i < 4; i++) {
    if (i > 0) {
      printf(", ");
    }
    printf("%u", v_in[i]);
  }
  printf("}\n");
  printf("float[4] = {");
  for (unsigned i = 0; i < 4; i++) {
    if (i > 0) {
      printf(", ");
    }
    printf("%0.3f", v_out[i]);
  }
  printf("}\n");
  return 0;
}
```