user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  lea    -0x2c(%rbp),%rdx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rsi
  lea    D41(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    -0x1c(%rbp),%rdx
  lea    -0x24(%rbp),%rax
  mov    %rax,%rsi
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x30(%rbp),%eax
  cmp    $0x1,%eax
  jne    L28
  movss  -0x2c(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D43(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm4,%xmm4
  cvtsd2ss %xmm0,%xmm4
  movd   %xmm4,%eax
  movd   %eax,%xmm0
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L45
L28:
  movss  -0x24(%rbp),%xmm0
  movss  %xmm0,-0x10(%rbp)
  movss  -0x1c(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  movl   $0x0,-0x18(%rbp)
  jmp    L35
L2:
  lea    -0x20(%rbp),%rdx
  lea    -0x28(%rbp),%rax
  mov    %rax,%rsi
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  -0x1c(%rbp),%xmm2
  movss  -0x24(%rbp),%xmm1
  movss  -0x20(%rbp),%xmm0
  mov    -0x28(%rbp),%eax
  movaps %xmm2,%xmm3
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <find_dist@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  -0x14(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x28(%rbp),%xmm0
  movss  %xmm0,-0x24(%rbp)
  movss  -0x20(%rbp),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  addl   $0x1,-0x18(%rbp)
L35:
  mov    -0x30(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x18(%rbp)
  jl     L2
  movss  -0x20(%rbp),%xmm0
  mov    -0x28(%rbp),%eax
  movss  -0xc(%rbp),%xmm2
  movss  -0x10(%rbp),%xmm1
  movaps %xmm2,%xmm3
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <find_dist@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  -0x14(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x14(%rbp),%xmm1
  movss  -0x2c(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movsd  D43(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  movd   %eax,%xmm0
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
L45:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L33
  call   <__stack_chk_fail@plt>
L33:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D41
data_type: string
name: extract_symbolic_data
arguments: data_tag: D25
data_type: string
name: extract_symbolic_data
arguments: data_tag: D43
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D4
data_type: string

tool: D41: %d %f

tool: D25: %f %f

tool: {"D43": [0x6e,0x86,0x1b,0xf0,0xf9,0x21,0x19,0x40]}

tool: D4: %0.2f

assistant: ```c
int main() {
  int n, i;
  float r, dist_curr, dist = 0;
  float num1_curr, num1_prev, num1_init;
  float num2_curr, num2_prev, num2_init;
  scanf("%d %f", &n, &r);
  scanf("%f %f", &num1_prev, &num2_prev);
  if (n == 1) {
    printf("%0.2f", 2 * 3.14159 * r);
    return 0;
  }
  num1_init = num1_prev;
  num2_init = num2_prev;
  for (i = 0; i < n - 1; i++) {
    scanf("%f %f", &num1_curr, &num2_curr);
    dist += find_dist(num1_curr, num2_curr, num1_prev, num2_prev);
    num1_prev = num1_curr;
    num2_prev = num2_curr;
  }
  dist += find_dist(num1_curr, num2_curr, num1_init, num2_init);
  dist += 2 * 3.14159 * r;
  printf("%0.2f", dist);
  return 0;
}
```