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

```asm
<water_energy_balance>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x270,%rsp
  mov    %edi,-0x1b4(%rbp)
  mov    %rsi,-0x1c0(%rbp)
  mov    %rdx,-0x1c8(%rbp)
  mov    %ecx,-0x1b8(%rbp)
  mov    %r8d,-0x1cc(%rbp)
  movsd  %xmm0,-0x1d8(%rbp)
  movsd  %xmm1,-0x1e0(%rbp)
  movsd  %xmm2,-0x1e8(%rbp)
  movsd  %xmm3,-0x1f0(%rbp)
  movsd  %xmm4,-0x1f8(%rbp)
  movsd  %xmm5,-0x200(%rbp)
  movsd  %xmm6,-0x208(%rbp)
  movsd  %xmm7,-0x210(%rbp)
  mov    %r9,-0x218(%rbp)
  mov    0x38(%rbp),%rax
  mov    %rax,-0x220(%rbp)
  mov    0x40(%rbp),%rax
  mov    %rax,-0x228(%rbp)
  mov    0x48(%rbp),%rax
  mov    %rax,-0x230(%rbp)
  mov    0x50(%rbp),%rax
  mov    %rax,-0x238(%rbp)
  mov    0x58(%rbp),%rax
  mov    %rax,-0x240(%rbp)
  mov    0x60(%rbp),%rax
  mov    %rax,-0x248(%rbp)
  mov    0x70(%rbp),%rax
  mov    %rax,-0x250(%rbp)
  mov    0x78(%rbp),%rax
  mov    %rax,-0x258(%rbp)
  mov    0x80(%rbp),%rax
  mov    %rax,-0x260(%rbp)
  mov    0x88(%rbp),%rax
  mov    %rax,-0x268(%rbp)
  mov    0x90(%rbp),%rax
  mov    %rax,-0x270(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D164(%rip),%xmm0
  movsd  %xmm0,-0x178(%rbp)
  movsd  D90(%rip),%xmm0
  movsd  %xmm0,-0x180(%rbp)
  movsd  D90(%rip),%xmm0
  movsd  %xmm0,-0x170(%rbp)
  mov    -0x230(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x188(%rbp)
  movl   $0x0,-0x1a4(%rbp)
  movl   $0x0,-0x1a8(%rbp)
  jmp    L39
L1:
  mov    -0x1a8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x230(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x1a8(%rbp),%eax
  cltq
  movsd  %xmm0,-0x150(%rbp,%rax,8)
  addl   $0x1,-0x1a8(%rbp)
L39:
  mov    -0x1a8(%rbp),%eax
  cmp    -0x1b4(%rbp),%eax
  jl     L1
  mov    -0x238(%rbp),%r9
  mov    -0x258(%rbp),%r8
  mov    -0x1c0(%rbp),%rcx
  movsd  -0x1e0(%rbp),%xmm0
  mov    -0x1d8(%rbp),%rdi
  mov    -0x1b4(%rbp),%edx
  lea    -0x198(%rbp),%rsi
  mov    -0x230(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <energycalc@plt>
  jmp    L34
L69:
  cmpl   $0x0,-0x1a4(%rbp)
  jne    L92
  mov    -0x230(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x188(%rbp)
  jmp    L6
L92:
  movsd  -0x180(%rbp),%xmm0
  movsd  %xmm0,-0x188(%rbp)
L6:
  movsd  -0x188(%rbp),%xmm1
  movsd  D180(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x168(%rbp)
  movsd  -0x1f0(%rbp),%xmm1
  movsd  D180(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x160(%rbp)
  mov    -0x218(%rbp),%rcx
  mov    -0x1c8(%rbp),%rdx
  movsd  -0x210(%rbp),%xmm4
  movsd  -0x208(%rbp),%xmm3
  movsd  -0x200(%rbp),%xmm2
  movsd  -0x1f8(%rbp),%xmm1
  movsd  -0x160(%rbp),%xmm0
  mov    -0x168(%rbp),%rax
  sub    $0x8,%rsp
  push   0x30(%rbp)
  mov    %rcx,%rsi
  mov    %rdx,%rdi
  movsd  0x10(%rbp),%xmm7
  movapd %xmm4,%xmm6
  movapd %xmm3,%xmm5
  movapd %xmm2,%xmm4
  movapd %xmm1,%xmm3
  pxor   %xmm2,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <latsens@plt>
  add    $0x10,%rsp
  movsd  -0x1f8(%rbp),%xmm1
  movsd  D4(%rip),%xmm0
  movapd %xmm1,%xmm2
  mulsd  %xmm0,%xmm2
  movsd  D203(%rip),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D101(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x158(%rbp)
  mov    -0x1c8(%rbp),%rax
  movsd  (%rax),%xmm0
  movq   D96(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0x158(%rbp),%xmm0
  mov    -0x220(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x168(%rbp),%xmm1
  movsd  D65(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x168(%rbp),%xmm0
  mulsd  -0x168(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x168(%rbp),%xmm1
  movsd  0x18(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  mov    -0x228(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x1e0(%rbp),%xmm2
  movsd  -0x1d8(%rbp),%xmm1
  mov    -0x1b4(%rbp),%edi
  movsd  -0x1e8(%rbp),%xmm0
  lea    -0xb0(%rbp),%rcx
  mov    -0x238(%rbp),%rdx
  mov    -0x230(%rbp),%rsi
  mov    -0x200(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  mov    %edi,%r8d
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x1,%edi
  call   <eddy@plt>
  mov    -0x220(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x218(%rbp),%rax
  movsd  (%rax),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x228(%rbp),%rax
  movsd  (%rax),%xmm0
  movapd %xmm1,%xmm2
  addsd  %xmm0,%xmm2
  movsd  0x20(%rbp),%xmm1
  movsd  D84(%rip),%xmm0
  movapd %xmm1,%xmm5
  mulsd  %xmm0,%xmm5
  movsd  0x20(%rbp),%xmm1
  movsd  D57(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movsd  -0x1e0(%rbp),%xmm1
  movsd  -0x1d8(%rbp),%xmm0
  mov    -0x1c0(%rbp),%r9
  mov    -0x1b8(%rbp),%r10d
  lea    -0xb0(%rbp),%rcx
  mov    -0x238(%rbp),%rdx
  lea    -0x150(%rbp),%rsi
  mov    -0x230(%rbp),%rdi
  push   -0x268(%rbp)
  push   -0x258(%rbp)
  lea    -0x190(%rbp),%r8
  push   %r8
  mov    -0x1b4(%rbp),%r8d
  push   %r8
  movapd %xmm1,%xmm4
  movapd %xmm0,%xmm3
  mov    %r10d,%r8d
  movapd %xmm5,%xmm1
  movq   %rax,%xmm0
  call   <temp_area@plt>
  add    $0x20,%rsp
  movsd  -0x150(%rbp),%xmm1
  movsd  -0x1f0(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L94
  movsd  0x98(%rbp),%xmm3
  mov    -0x258(%rbp),%r9
  movsd  -0x1e0(%rbp),%xmm2
  movsd  -0x1d8(%rbp),%xmm1
  mov    -0x1b8(%rbp),%r8d
  mov    -0x1b4(%rbp),%ecx
  mov    -0x250(%rbp),%rdx
  movsd  0x68(%rbp),%xmm0
  mov    -0x1f0(%rbp),%rdi
  lea    -0x150(%rbp),%rsi
  mov    -0x248(%rbp),%rax
  push   -0x270(%rbp)
  push   -0x238(%rbp)
  push   -0x260(%rbp)
  push   -0x1c0(%rbp)
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <iceform@plt>
  add    $0x20,%rsp
  mov    -0x238(%rbp),%r9
  mov    -0x258(%rbp),%r8
  mov    -0x1c0(%rbp),%rcx
  movsd  -0x1e0(%rbp),%xmm0
  mov    -0x1d8(%rbp),%rdi
  mov    -0x1b4(%rbp),%edx
  lea    -0x1a0(%rbp),%rsi
  lea    -0x150(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <energycalc@plt>
  movsd  -0x1a0(%rbp),%xmm0
  movsd  -0x198(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x1c0(%rbp),%rax
  movsd  (%rax),%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x1b8(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  movsd  D83(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x240(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L150
L94:
  movsd  -0x190(%rbp),%xmm0
  movsd  -0x198(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x1c0(%rbp),%rax
  movsd  (%rax),%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x1b8(%rbp),%xmm1
  mulsd  %xmm1,%xmm2
  movsd  D83(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x240(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x248(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
L150:
  movsd  -0x150(%rbp),%xmm1
  mov    -0x230(%rbp),%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  D32(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x180(%rbp)
  mov    -0x228(%rbp),%rax
  movsd  (%rax),%xmm0
  addsd  0x20(%rbp),%xmm0
  mov    -0x268(%rbp),%rax
  movsd  (%rax),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  mov    -0x218(%rbp),%rax
  movsd  (%rax),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x220(%rbp),%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x240(%rbp),%rax
  movsd  (%rax),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  mov    -0x248(%rbp),%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x170(%rbp)
  addl   $0x1,-0x1a4(%rbp)
L34:
  movsd  -0x180(%rbp),%xmm0
  subsd  -0x188(%rbp),%xmm0
  movq   D195(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x178(%rbp),%xmm0
  jbe    L103
  cmpl   $0x31,-0x1a4(%rbp)
  jle    L69
L103:
  movsd  -0x180(%rbp),%xmm0
  subsd  -0x188(%rbp),%xmm0
  movq   D195(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  -0x178(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jb     L40
  movl   $0x0,-0x1a8(%rbp)
  jmp    L31
L15:
  mov    -0x1a8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x230(%rbp),%rax
  add    %rax,%rdx
  mov    -0x1a8(%rbp),%eax
  cltq
  movsd  -0x150(%rbp,%rax,8),%xmm0
  movsd  %xmm0,(%rdx)
  addl   $0x1,-0x1a8(%rbp)
L31:
  mov    -0x1a8(%rbp),%eax
  cmp    -0x1b4(%rbp),%eax
  jl     L15
  mov    $0x0,%eax
  jmp    L116
L40:
  mov    -0x230(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D180(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x168(%rbp)
  movsd  -0x1f0(%rbp),%xmm1
  movsd  D180(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x160(%rbp)
  mov    -0x218(%rbp),%rcx
  mov    -0x1c8(%rbp),%rdx
  movsd  -0x210(%rbp),%xmm4
  movsd  -0x208(%rbp),%xmm3
  movsd  -0x200(%rbp),%xmm2
  movsd  -0x1f8(%rbp),%xmm1
  movsd  -0x160(%rbp),%xmm0
  mov    -0x168(%rbp),%rax
  sub    $0x8,%rsp
  push   0x30(%rbp)
  mov    %rcx,%rsi
  mov    %rdx,%rdi
  movsd  0x10(%rbp),%xmm7
  movapd %xmm4,%xmm6
  movapd %xmm3,%xmm5
  movapd %xmm2,%xmm4
  movapd %xmm1,%xmm3
  pxor   %xmm2,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <latsens@plt>
  add    $0x10,%rsp
  movsd  -0x1f8(%rbp),%xmm1
  movsd  D4(%rip),%xmm0
  movapd %xmm1,%xmm2
  mulsd  %xmm0,%xmm2
  movsd  D203(%rip),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D101(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x158(%rbp)
  mov    -0x1c8(%rbp),%rax
  movsd  (%rax),%xmm0
  movq   D96(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0x158(%rbp),%xmm0
  mov    -0x220(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x168(%rbp),%xmm1
  movsd  D65(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x168(%rbp),%xmm0
  mulsd  -0x168(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x168(%rbp),%xmm1
  movsd  0x18(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  mov    -0x228(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x230(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  -0x1f0(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L118
  movsd  0x98(%rbp),%xmm3
  mov    -0x258(%rbp),%r9
  movsd  -0x1e0(%rbp),%xmm2
  movsd  -0x1d8(%rbp),%xmm1
  mov    -0x1b8(%rbp),%r8d
  mov    -0x1b4(%rbp),%ecx
  mov    -0x250(%rbp),%rdx
  movsd  0x68(%rbp),%xmm0
  mov    -0x1f0(%rbp),%rdi
  mov    -0x230(%rbp),%rsi
  mov    -0x248(%rbp),%rax
  push   -0x270(%rbp)
  push   -0x238(%rbp)
  push   -0x260(%rbp)
  push   -0x1c0(%rbp)
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <iceform@plt>
  add    $0x20,%rsp
  jmp    L71
L118:
  mov    -0x248(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
L71:
  mov    -0x240(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    $0x0,%eax
L116:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L14
  call   <__stack_chk_fail@plt>
L14:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D164
type_infered: f64
name: unpack_data
arguments: data_tag: D90
type_infered: f32[2]
name: unpack_data
arguments: data_tag: D180
type_infered: f64
name: unpack_data
arguments: data_tag: D4
type_infered: f64
name: unpack_data
arguments: data_tag: D203
type_infered: f64
name: unpack_data
arguments: data_tag: D101
type_infered: f64
name: unpack_data
arguments: data_tag: D96
type_infered: f32[2]
name: unpack_data
arguments: data_tag: D65
type_infered: byte[8]
name: unpack_data
arguments: data_tag: D84
type_infered: f64
name: unpack_data
arguments: data_tag: D57
type_infered: f64
name: unpack_data
arguments: data_tag: D83
type_infered: f32[2]
name: unpack_data
arguments: data_tag: D32
type_infered: f64
name: unpack_data
arguments: data_tag: D195
type_infered: qword

tool: D164: 0.0001

tool: {"D90": [0.0,-4.4755859375]}

tool: D180: 273.15

tool: D4: 0.002361

tool: D203: 2.501

tool: D101: 1000000

tool: {"D96": [0.0,-0.0]}

tool: {"D65": [0x3b,0x5f,0x91,0xe5,0x64,0xd4,0x6d,0x3e]}

tool: D84: 0.3

tool: D57: 0.7

tool: {"D83": [0.0,5.37890625]}

tool: D32: 2

tool: D195: 9223372036854775807

assistant: ```c
int water_energy_balance(int numnod, double *surface, double *evapw, int dt, int freezeflag, double dz, double surfdz, double lat, double Tcutoff, double Tair, double wind, double pressure, double vp, double air_density, double longwave, double shortwave, double sumjoulb, double wind_h, double *Qh, double *Qle, double *LWnet, double *T, double *water_density, double *deltaH, double *energy_ice_formation, double fracprv, double *new_ice_area, double *cp, double *new_ice_height, double *energy_out_bottom, double *new_ice_water_eq, double lvolume) {
  double Ts;
  double Tcutk;
  double Tskin;
  double Tnew[20];
  int k;
  double sumjouli;
  double Tmean;
  int iterations;
  double Le;
  double jouleold;
  double joulenew;
  double error;
  double Told;
  double Tupper, Tlower;
  double de[20];
  double epsilon = 0.0001;
  Tmean = -999.;
  error = -999.;
  Ts = T[0];
  iterations = 0;
  for (k = 0; k < numnod; k++)
    Tnew[k] = T[k];
  energycalc(T, &jouleold, numnod, dz, surfdz, surface, cp, water_density);
  while ((fabs(Tmean - Ts) > epsilon) && iterations < 50) {
    if (iterations == 0)
      Ts = T[0];
    else
      Ts = Tmean;
    Tskin = Ts + 273.15;
    Tcutk = Tcutoff + 273.15;
    latsens(Tskin, Tcutk, 0.0, Tair, wind, pressure, vp, air_density, evapw, Qh, wind_h);
    Le = (2.501 - 0.002361 * Tair) * 1.0e6;
    *Qle = -1. * (*evapw) * Le;
    *LWnet = longwave - .98 * 5.6696e-8 * Tskin * Tskin * Tskin * Tskin;
    eddy(1, wind, T, water_density, de, lat, numnod, dz, surfdz);
    temp_area(shortwave * 0.7, shortwave * 0.3, *Qle + *Qh + *LWnet, T, Tnew, water_density, de, dt, surface, numnod, dz, surfdz, &joulenew, cp, energy_out_bottom);
    if (Tnew[0] < Tcutoff) {
      iceform(energy_ice_formation, Tnew, Tcutoff, fracprv, new_ice_area, numnod, dt, dz, surfdz, cp, surface, new_ice_height, water_density, new_ice_water_eq, lvolume);
      energycalc(Tnew, &sumjouli, numnod, dz, surfdz, surface, cp, water_density);
      *deltaH = (sumjouli - jouleold) / (surface[0] * dt * 3600);
    } else {
      *deltaH = (joulenew - jouleold) / (surface[0] * dt * 3600);
      *energy_ice_formation = 0.0;
    }
    Tmean = (Tnew[0] + T[0]) / 2.;
    error = *LWnet + shortwave - *energy_out_bottom + *Qh + *Qle - *deltaH + *energy_ice_formation;
    iterations += 1;
  }
  if (fabs(Tmean - Ts) <= epsilon) {
    for (k = 0; k < numnod; k++)
      T[k] = Tnew[k];
    return (0);
  } else {
    Tskin = T[0] + 273.15;
    Tcutk = Tcutoff + 273.15;
    latsens(Tskin, Tcutk, 0.0, Tair, wind, pressure, vp, air_density, evapw, Qh, wind_h);
    Le = (2.501 - 0.002361 * Tair) * 1.0e6;
    *Qle = -1. * (*evapw) * Le;
    *LWnet = longwave - .98 * 5.6696e-8 * Tskin * Tskin * Tskin * Tskin;
    if (T[0] < Tcutoff) {
      iceform(energy_ice_formation, T, Tcutoff, fracprv, new_ice_area, numnod, dt, dz, surfdz, cp, surface, new_ice_height, water_density, new_ice_water_eq, lvolume);
    } else {
      *energy_ice_formation = 0.0;
    }
    *deltaH = 0.0;
    return (0);
  }
}
```