user: What is the c source code of the assembly code below?

```asm
<picket_fence>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    $0x0,%eax
  call   <glPushMatrix@plt>
  mov    $0x0,%esi
  mov    D73(%rip),%eax
  movd   %eax,%xmm0
  mov    $0x0,%edi
  call   <glTranslatef@plt>
  mov    $0x0,%eax
  call   <rail@plt>
  mov    $0x0,%eax
  call   <glPopMatrix@plt>
  mov    $0x0,%eax
  call   <glPushMatrix@plt>
  mov    $0x0,%esi
  mov    D12(%rip),%eax
  movd   %eax,%xmm0
  mov    $0x0,%edi
  call   <glTranslatef@plt>
  mov    $0x0,%eax
  call   <rail@plt>
  mov    $0x0,%eax
  call   <glPopMatrix@plt>
  mov    $0x0,%eax
  call   <glPushMatrix@plt>
  mov    $0x0,%esi
  mov    D73(%rip),%eax
  movd   %eax,%xmm0
  mov    $0x0,%edi
  call   <glTranslatef@plt>
  mov    $0x0,%eax
  call   <side_rail@plt>
  mov    $0x0,%eax
  call   <glPopMatrix@plt>
  mov    $0x0,%eax
  call   <glPushMatrix@plt>
  mov    $0x0,%esi
  mov    D73(%rip),%eax
  movd   %eax,%xmm0
  mov    $0x8,%edi
  call   <glTranslatef@plt>
  mov    $0x0,%eax
  call   <side_rail@plt>
  mov    $0x0,%eax
  call   <glPopMatrix@plt>
  movss  D29(%rip),%xmm0
  movss  %xmm0,-0x4(%rbp)
  jmp    L11
L8:
  mov    $0x0,%eax
  call   <glPushMatrix@plt>
  movss  -0x4(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    $0x0,%esi
  mov    D73(%rip),%edx
  movd   %edx,%xmm0
  mov    %eax,%edi
  call   <glTranslatef@plt>
  mov    $0x0,%eax
  call   <pickets@plt>
  mov    $0x0,%eax
  call   <glPopMatrix@plt>
  mov    $0x0,%eax
  call   <glPushMatrix@plt>
  movss  -0x4(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    $0x0,%esi
  mov    D12(%rip),%edx
  movd   %edx,%xmm0
  mov    %eax,%edi
  call   <glTranslatef@plt>
  mov    $0x0,%eax
  call   <pickets@plt>
  mov    $0x0,%eax
  call   <glPopMatrix@plt>
  mov    $0x0,%eax
  call   <glPushMatrix@plt>
  mov    -0x4(%rbp),%eax
  mov    $0x0,%esi
  movd   %eax,%xmm0
  mov    $0x0,%edi
  call   <glTranslatef@plt>
  mov    $0x0,%eax
  call   <side_pickets@plt>
  mov    $0x0,%eax
  call   <glPopMatrix@plt>
  mov    $0x0,%eax
  call   <glPushMatrix@plt>
  mov    -0x4(%rbp),%eax
  mov    $0x0,%esi
  movd   %eax,%xmm0
  mov    $0x8,%edi
  call   <glTranslatef@plt>
  mov    $0x0,%eax
  call   <side_pickets@plt>
  mov    $0x0,%eax
  call   <glPopMatrix@plt>
  movss  -0x4(%rbp),%xmm1
  movss  D6(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
L11:
  movss  D87(%rip),%xmm0
  comiss -0x4(%rbp),%xmm0
  jae    L8
  nop
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D73
type: byte[4]
name: disassemble_data
arguments: tag: D12
type: byte[4]
name: disassemble_data
arguments: tag: D29
type: byte[4]
name: disassemble_data
arguments: tag: D6
type: f32
name: disassemble_data
arguments: tag: D87
type: byte[4]

tool: {"D73": [0x00,0x00,0x00,0x00]}

tool: {"D12": [0x00,0x00,0x00,0x41]}

tool: {"D29": [0x00,0x00,0x80,0xc0]}

tool: D6: 0.375

tool: {"D87": [0x00,0x00,0x80,0x40]}

assistant: ```c
void picket_fence(void) {
  glPushMatrix();
  glTranslatef(0, 0, 0);
  rail();
  glPopMatrix();
  glPushMatrix();
  glTranslatef(0, 8, 0);
  rail();
  glPopMatrix();
  glPushMatrix();
  glTranslatef(0, 0, 0);
  side_rail();
  glPopMatrix();
  glPushMatrix();
  glTranslatef(8, 0, 0);
  side_rail();
  glPopMatrix();
  float a;
  for (a = -4; a <= 4; a += 0.375) {
    glPushMatrix();
    glTranslatef(a, 0, 0);
    pickets();
    glPopMatrix();
    glPushMatrix();
    glTranslatef(a, 8, 0);
    pickets();
    glPopMatrix();
    glPushMatrix();
    glTranslatef(0, a, 0);
    side_pickets();
    glPopMatrix();
    glPushMatrix();
    glTranslatef(8, a, 0);
    side_pickets();
    glPopMatrix();
  }
}
```