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

```asm
<thruster_cluster>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x98,%rsp
  movss  %xmm0,0x8(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  mov    $0x3,%edi
  call   <randn@plt>
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <onion@plt>
  movss  0x8(%rsp),%xmm5
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm5,%xmm3
  movsd  %xmm3,(%rsp)
  movapd %xmm3,%xmm4
  mulsd  D104(%rip),%xmm4
  movsd  %xmm4,0x18(%rsp)
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm4,%xmm0
  mov    $0x1,%edi
  movaps %xmm5,%xmm2
  movaps %xmm5,%xmm1
  call   <cyl@plt>
  movsd  (%rsp),%xmm0
  mulsd  D190(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <xlate@plt>
  mov    D144(%rip),%rax
  movq   %rax,%xmm0
  call   <randf@plt>
  subsd  D83(%rip),%xmm0
  addsd  D198(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x10(%rsp)
  mov    D144(%rip),%rax
  movq   %rax,%xmm0
  call   <randf@plt>
  subsd  D83(%rip),%xmm0
  addsd  D198(%rip),%xmm0
  pxor   %xmm6,%xmm6
  cvtsd2ss %xmm0,%xmm6
  movss  %xmm6,0xc(%rsp)
  mov    D144(%rip),%rax
  movq   %rax,%xmm0
  call   <randf@plt>
  subsd  D83(%rip),%xmm0
  addsd  D198(%rip),%xmm0
  pxor   %xmm7,%xmm7
  cvtsd2ss %xmm0,%xmm7
  movss  %xmm7,0x14(%rsp)
  test   %ebx,%ebx
  jne    L0
  movss  0xc(%rsp),%xmm6
  movss  0x8(%rsp),%xmm5
  mulss  %xmm5,%xmm6
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm6,%xmm1
  mulsd  D196(%rip),%xmm1
  movss  0x10(%rsp),%xmm0
  mulss  %xmm5,%xmm0
  mulss  D94(%rip),%xmm0
  mulss  %xmm7,%xmm5
  movaps %xmm5,%xmm2
  cvtsd2ss %xmm1,%xmm1
  call   <thruster@plt>
L3:
  mov    $0x0,%eax
  call   <end@plt>
  mov    $0x0,%eax
  call   <end@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L17
  add    $0x98,%rsp
  pop    %rbx
  pop    %rbp
  ret
L0:
  mov    $0x7,%edi
  call   <randn@plt>
  mov    %eax,%ebx
  movsd  (%rsp),%xmm1
  mulsd  D150(%rip),%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd 0x10(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm6,%xmm6
  cvtsd2ss %xmm0,%xmm6
  movss  %xmm6,0x8(%rsp)
  pxor   %xmm0,%xmm0
  cvtss2sd 0xc(%rsp),%xmm0
  mulsd  0x18(%rsp),%xmm0
  pxor   %xmm7,%xmm7
  cvtsd2ss %xmm0,%xmm7
  movss  %xmm7,0x10(%rsp)
  mov    D156(%rip),%edx
  lea    0x1(%rdx),%eax
  mov    %eax,D164(%rip)
  lea    0x20(%rsp),%rbp
  lea    D164(%rip),%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  movss  0x14(%rsp),%xmm2
  movss  0x8(%rsp),%xmm6
  mulss  %xmm6,%xmm2
  mulss  0xc(%rsp),%xmm6
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm6,%xmm1
  mulsd  D196(%rip),%xmm1
  movss  D94(%rip),%xmm3
  mulss  %xmm2,%xmm3
  movaps %xmm3,%xmm0
  cvtsd2ss %xmm1,%xmm1
  call   <thruster@plt>
  movss  0x14(%rsp),%xmm2
  movss  0x10(%rsp),%xmm7
  mulss  %xmm7,%xmm2
  movss  0xc(%rsp),%xmm4
  mulss  %xmm7,%xmm4
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm4,%xmm1
  mulsd  D196(%rip),%xmm1
  movss  D94(%rip),%xmm4
  mulss  %xmm2,%xmm4
  movaps %xmm4,%xmm0
  cvtsd2ss %xmm1,%xmm1
  mov    %rbp,%rdi
  call   <thruster_module@plt>
  movsd  (%rsp),%xmm0
  mulsd  D114(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  lea    0x2(%rbx),%edi
  call   <radial_dist@plt>
  mov    %rbp,%rdi
  call   <call_module@plt>
  mov    $0x0,%eax
  call   <end_radial_dist@plt>
  jmp    L3
L17:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D104
type_guessed: f64
name: parse_data
arguments: data_tag: D190
type_guessed: f64
name: parse_data
arguments: data_tag: D144
type_guessed: f64
name: parse_data
arguments: data_tag: D83
type_guessed: f64
name: parse_data
arguments: data_tag: D198
type_guessed: f64
name: parse_data
arguments: data_tag: D196
type_guessed: f64
name: parse_data
arguments: data_tag: D94
type_guessed: f32
name: parse_data
arguments: data_tag: D150
type_guessed: f64
name: parse_data
arguments: data_tag: D164
type_guessed: string
name: parse_data
arguments: data_tag: D114
type_guessed: f64

tool: D104: 0.2

tool: D190: 0.19

tool: D144: 0.3

tool: D83: 0.15

tool: D198: 1

tool: D196: 0.4

tool: D94: 1.5

tool: D150: 0.5

tool: D164: thruster_r_%d

tool: D114: 0.7

assistant: ```c
void thruster_cluster(float r) {
  static int modnum = 0;
  int ttype = randn(3);
  float v1, v2, v3;
  float r1, r2, r3;
  int n;
  char modname[100];
  onion();
  cyl(r * 0.2, r1 = r, r2 = r, 1);
  xlate(0, 0, r * 0.19);
  v1 = randf(0.3) - 0.15 + 1.0;
  v2 = randf(0.3) - 0.15 + 1.0;
  v3 = randf(0.3) - 0.15 + 1.0;
  switch (ttype) {
  case 0:
    thruster(r * v1 * 1.5, r * v2 * 0.4, r * v3);
    break;
  default:
    n = randn(7) + 2;
    r1 = r * 0.5 * v1;
    r2 = r * 0.2 * v2;
    r3 = r * 0.7;
    sprintf(modname, "thruster_r_%d", modnum++);
    thruster(r1 * v3 * 1.5, r1 * v2 * 0.4, r1 * v3);
    thruster_module(modname, r2 * v3 * 1.5, r2 * v2 * 0.4, r2 * v3);
    radial_dist(n, r3);
    call_module(modname);
    end_radial_dist();
    break;
  }
  end();
  end();
}
```