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

```asm
<Gammln>:
  endbr64
  pxor   %xmm1,%xmm1
  comiss %xmm0,%xmm1
  jae    L1
  sub    $0x28,%rsp
  movsd  D39(%rip),%xmm2
  pxor   %xmm3,%xmm3
  movsd  D61(%rip),%xmm5
  cvtss2sd %xmm0,%xmm3
  movsd  D33(%rip),%xmm0
  subsd  %xmm2,%xmm3
  movapd %xmm3,%xmm4
  addsd  D115(%rip),%xmm4
  movsd  %xmm3,0x18(%rsp)
  divsd  %xmm4,%xmm0
  movapd %xmm4,%xmm1
  movsd  %xmm4,0x10(%rsp)
  subsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm5
  subsd  %xmm2,%xmm1
  addsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm5
  movsd  D101(%rip),%xmm0
  divsd  %xmm1,%xmm0
  subsd  %xmm2,%xmm1
  addsd  %xmm5,%xmm0
  movsd  D22(%rip),%xmm5
  divsd  %xmm1,%xmm5
  subsd  %xmm2,%xmm1
  addsd  %xmm0,%xmm5
  movsd  D114(%rip),%xmm0
  divsd  %xmm1,%xmm0
  subsd  %xmm2,%xmm1
  addsd  %xmm5,%xmm0
  movsd  D95(%rip),%xmm5
  divsd  %xmm1,%xmm5
  subsd  %xmm2,%xmm1
  addsd  %xmm0,%xmm5
  movsd  D34(%rip),%xmm0
  divsd  %xmm1,%xmm0
  subsd  %xmm2,%xmm1
  addsd  %xmm5,%xmm0
  movsd  D163(%rip),%xmm5
  divsd  %xmm1,%xmm5
  subsd  %xmm2,%xmm1
  addsd  %xmm0,%xmm5
  movsd  D161(%rip),%xmm0
  divsd  %xmm1,%xmm0
  subsd  %xmm2,%xmm1
  addsd  %xmm5,%xmm0
  movsd  D45(%rip),%xmm5
  divsd  %xmm1,%xmm5
  subsd  %xmm2,%xmm1
  addsd  %xmm0,%xmm5
  movsd  D72(%rip),%xmm0
  divsd  %xmm1,%xmm0
  addsd  %xmm5,%xmm0
  call   <log@plt>
  movsd  0x10(%rsp),%xmm4
  addsd  D103(%rip),%xmm4
  movsd  %xmm0,0x8(%rsp)
  movapd %xmm4,%xmm0
  movsd  %xmm4,0x10(%rsp)
  call   <log@plt>
  movsd  D103(%rip),%xmm6
  movsd  0x18(%rsp),%xmm3
  movapd %xmm0,%xmm1
  movsd  0x10(%rsp),%xmm4
  addsd  %xmm3,%xmm6
  movapd %xmm6,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  D97(%rip),%xmm0
  subsd  %xmm4,%xmm0
  addsd  0x8(%rsp),%xmm0
  add    $0x28,%rsp
  cvtsd2ss %xmm0,%xmm0
  ret
  nopl   0x0(%rax)
L1:
  movss  D17(%rip),%xmm0
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D39
data_type: f64
name: extract_symbolic_data
arguments: label: D61
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D33
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D115
data_type: f64
name: extract_symbolic_data
arguments: label: D101
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D22
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D114
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D95
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D34
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D163
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D161
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D45
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D72
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D103
data_type: f64
name: extract_symbolic_data
arguments: label: D97
data_type: f64
name: extract_symbolic_data
arguments: label: D17
data_type: f32

tool: D39: 1

tool: {"D61": [0x03,0x43,0xd5,0xc2,0x0c,0x68,0x2e,0xbf]}

tool: {"D33": [0x5a,0xfb,0x52,0xca,0xd0,0x33,0xe1,0x3d]}

tool: D115: 11

tool: {"D101": [0x26,0x34,0x26,0xc2,0xb3,0x9c,0xd2,0x3f]}

tool: {"D22": [0xe2,0x66,0xf5,0xa9,0x31,0x8d,0x3f,0xc0]}

tool: {"D114": [0x30,0x02,0x6e,0x4b,0xaf,0x74,0x8b,0x40]}

tool: {"D95": [0x40,0x52,0x71,0xd1,0xcb,0xc0,0xc2,0xc0]}

tool: {"D34": [0xf4,0xe5,0x52,0xda,0xbe,0x91,0xe8,0x40]}

tool: {"D163": [0x65,0x85,0xf0,0xd1,0x6b,0xf4,0x00,0xc1]}

tool: {"D161": [0x7a,0x7f,0x87,0xa7,0x47,0x35,0x09,0x41]}

tool: {"D45": [0xa0,0xe3,0x8d,0x2a,0xe4,0x0c,0x03,0xc1]}

tool: {"D72": [0xc6,0xe5,0x23,0xb5,0x39,0xec,0xe6,0x40]}

tool: D103: 0.5

tool: D97: 0.918938533

tool: D17: 999999

assistant: ```c
float Gammln(float x) {
  int i;
  double xx, tx;
  double tmp, value;
  static double cof[11] = {4.694580336184385e+04, -1.560605207784446e+05, 2.065049568014106e+05, -1.388934775095388e+05, 5.031796415085709e+04, -9.601592329182778e+03, 8.785855930895250e+02, -3.155153906098611e+01, 2.908143421162229e-01, -2.319827630494973e-04, 1.251639670050933e-10};
  if (x <= 0.0)
    return 999999.;
  xx = x - 1.0;
  tx = tmp = xx + 11.0;
  value = 1.0;
  for (i = 10; i >= 0; i--) {
    value += cof[i] / tmp;
    tmp -= 1.0;
  }
  value = log(value);
  tx += 0.5;
  value += 0.918938533 + (xx + 0.5) * log(tx) - tx;
  return (float)value;
}
```