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

```asm
<enorm>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %edi,-0x64(%rbp)
  mov    %rsi,-0x70(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x64(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D51(%rip),%xmm0
  divsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movl   $0x0,-0x54(%rbp)
  jmp    L61
L207:
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movq   D19(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  D44(%rip),%xmm0
  comisd -0x10(%rbp),%xmm0
  jae    L17
  movsd  -0x10(%rbp),%xmm0
  comisd -0x18(%rbp),%xmm0
  jb     L95
L17:
  movsd  -0x10(%rbp),%xmm0
  comisd D44(%rip),%xmm0
  jbe    L55
  movsd  -0x10(%rbp),%xmm0
  comisd -0x30(%rbp),%xmm0
  jbe    L121
  movsd  -0x30(%rbp),%xmm0
  divsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x48(%rbp),%xmm1
  movsd  D61(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  jmp    L216
L121:
  movsd  -0x10(%rbp),%xmm0
  divsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  -0x48(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  jmp    L216
L55:
  movsd  -0x10(%rbp),%xmm0
  comisd -0x28(%rbp),%xmm0
  jbe    L196
  movsd  -0x28(%rbp),%xmm0
  divsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x38(%rbp),%xmm1
  movsd  D61(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  jmp    L216
L196:
  pxor   %xmm0,%xmm0
  ucomisd -0x10(%rbp),%xmm0
  jp     L99
  pxor   %xmm0,%xmm0
  ucomisd -0x10(%rbp),%xmm0
  je     L216
L99:
  movsd  -0x10(%rbp),%xmm0
  divsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  -0x38(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L216
L95:
  movsd  -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  -0x40(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  jmp    L50
L216:
  nop
L50:
  addl   $0x1,-0x54(%rbp)
L61:
  mov    -0x54(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jl     L207
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L191
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  je     L52
L191:
  movsd  -0x40(%rbp),%xmm0
  divsd  -0x30(%rbp),%xmm0
  divsd  -0x30(%rbp),%xmm0
  addsd  -0x48(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  -0x30(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  jmp    L142
L52:
  pxor   %xmm0,%xmm0
  ucomisd -0x40(%rbp),%xmm0
  jp     L178
  pxor   %xmm0,%xmm0
  ucomisd -0x40(%rbp),%xmm0
  je     L158
L178:
  movsd  -0x40(%rbp),%xmm0
  comisd -0x28(%rbp),%xmm0
  jb     L79
  movsd  -0x28(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0x40(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D61(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x40(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x50(%rbp)
  jmp    L142
L79:
  movsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0x28(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  mulsd  -0x28(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x50(%rbp)
  jmp    L142
L158:
  mov    -0x38(%rbp),%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  -0x28(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
L142:
  movsd  -0x50(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D51
data_type: byte[8]
name: unpack_data
arguments: label: D19
data_type: qword
name: unpack_data
arguments: label: D44
data_type: byte[16]
name: unpack_data
arguments: label: D61
data_type: f64

tool: {"D51": [0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xec,0x5f]}

tool: D19: 9223372036854775807

tool: {"D44": [0xcd,0xcc,0xcc,0xcc,0xcc,0xcc,0xfc,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: D61: 1

assistant: ```c
double enorm(int n, const double *x) {
  double ret_val, d1;
  int i;
  double s1, s2, s3, xabs, x1max, x3max, agiant, floatn;
  s1 = 0.;
  s2 = 0.;
  s3 = 0.;
  x1max = 0.;
  x3max = 0.;
  floatn = (double)(n);
  agiant = (1.3407807929942596e+154 * 0.9) / floatn;
  for (i = 0; i < n; ++i) {
    xabs = fabs(x[i]);
    if (xabs <= (1.4916681462400413e-154 * 0.9) || xabs >= agiant) {
      if (xabs > (1.4916681462400413e-154 * 0.9)) {
        if (xabs > x1max) {
          d1 = x1max / xabs;
          s1 = 1. + s1 * (d1 * d1);
          x1max = xabs;
        } else {
          d1 = xabs / x1max;
          s1 += d1 * d1;
        }
      } else {
        if (xabs > x3max) {
          d1 = x3max / xabs;
          s3 = 1. + s3 * (d1 * d1);
          x3max = xabs;
        } else {
          if (xabs != 0.) {
            d1 = xabs / x3max;
            s3 += d1 * d1;
          }
        }
      }
    } else {
      s2 += xabs * xabs;
    }
  }
  if (s1 != 0.) {
    ret_val = x1max * sqrt(s1 + (s2 / x1max) / x1max);
  } else {
    if (s2 != 0.) {
      if (s2 >= x3max) {
        ret_val = sqrt(s2 * (1. + (x3max / s2) * (x3max * s3)));
      } else {
        ret_val = sqrt(x3max * ((s2 / x3max) + (x3max * s3)));
      }
    } else {
      ret_val = x3max * sqrt(s3);
    }
  }
  return ret_val;
}
```