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

```asm
<runmeltsNoCO2>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1a8,%rsp
  mov    %rdi,%rbp
  mov    %rsi,%rbx
  mov    %rdx,0x10(%rsp)
  mov    %rcx,%rdi
  mov    %rcx,0x18(%rsp)
  mov    %r8,%r15
  movsd  %xmm0,0x8(%rsp)
  mov    %r9,0x20(%rsp)
  mov    0x1e0(%rsp),%r13
  mov    0x1e8(%rsp),%r14
  movsd  %xmm1,0x28(%rsp)
  movsd  %xmm2,0x30(%rsp)
  movsd  %xmm3,0x38(%rsp)
  movsd  %xmm4,0x40(%rsp)
  movsd  %xmm5,0x48(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x198(%rsp)
  xor    %eax,%eax
  movw   $0x21,0x5a(%rsp)
  movw   $0x0,0x5c(%rsp)
  movw   $0x21,0x5e(%rsp)
  lea    D69(%rip),%rsi
  call   <strcasecmp@plt>
  test   %rax,%rax
  jne    L11
  movb   $0x0,0x5e(%rsp)
L11:
  mov    %rbx,%rax
  lea    0x80(%rbx),%rcx
  mov    %rbx,%rdx
  pxor   %xmm1,%xmm1
L27:
  addsd  (%rdx),%xmm1
  add    $0x8,%rdx
  cmp    %rcx,%rdx
  jne    L27
  movsd  D59(%rip),%xmm2
L69:
  movapd %xmm2,%xmm0
  mulsd  (%rax),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  add    $0x8,%rax
  cmp    %rcx,%rax
  jne    L69
  lea    0x60(%rsp),%r12
  mov    %rbp,%rdx
  lea    D0(%rip),%rsi
  mov    %r12,%rdi
  call   <sprintf@plt>
  lea    D55(%rip),%rsi
  mov    %r12,%rdi
  call   <fopen@plt>
  mov    %rax,%r12
  sub    $0x8,%rsp
  push   0x78(%rbx)
  push   0x68(%rbx)
  push   0x60(%rbx)
  push   0x58(%rbx)
  push   0x50(%rbx)
  push   0x48(%rbx)
  push   0x40(%rbx)
  movsd  0x38(%rbx),%xmm7
  movsd  0x30(%rbx),%xmm6
  movsd  0x28(%rbx),%xmm5
  movsd  0x20(%rbx),%xmm4
  movsd  0x18(%rbx),%xmm3
  movsd  0x10(%rbx),%xmm2
  movsd  0x8(%rbx),%xmm1
  movsd  (%rbx),%xmm0
  lea    D6(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x8,%eax
  call   <fprintf@plt>
  add    $0x40,%rsp
  mov    %r15,%rdx
  movsd  0x30(%rsp),%xmm1
  movsd  0x28(%rsp),%xmm0
  lea    D112(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x2,%eax
  call   <fprintf@plt>
  movsd  0x8(%rsp),%xmm7
  ucomisd D13(%rip),%xmm7
  jp     L34
  jne    L34
L2:
  mov    %r12,%rdi
  call   <fclose@plt>
  lea    0x60(%rsp),%rbx
  mov    %rbp,%rdx
  lea    D145(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  lea    D55(%rip),%r15
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <fopen@plt>
  mov    %rax,%r12
  sub    $0x8,%rsp
  lea    0x64(%rsp),%rax
  push   %rax
  push   %r13
  lea    0x72(%rsp),%rax
  push   %rax
  push   %rax
  push   %r14
  movsd  0x78(%rsp),%xmm6
  mov    %r14,%r9
  movsd  D106(%rip),%xmm5
  movsd  D12(%rip),%xmm4
  movsd  D144(%rip),%xmm3
  movsd  D73(%rip),%xmm2
  movsd  0x68(%rsp),%xmm1
  movsd  0x70(%rsp),%xmm0
  lea    0x8e(%rsp),%r8
  mov    0x48(%rsp),%rcx
  mov    0x40(%rsp),%rdx
  lea    D121(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x7,%eax
  call   <fprintf@plt>
  add    $0x30,%rsp
  mov    %r12,%rdi
  call   <fclose@plt>
  mov    %rbp,%rdx
  lea    D94(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <fopen@plt>
  mov    %rax,%rbx
  mov    %rax,%rsi
  mov    0x20(%rsp),%rdi
  call   <fputs@plt>
  mov    %rbx,%rdi
  call   <fclose@plt>
  lea    0xd0(%rsp),%rbx
  mov    %rbp,%rdx
  lea    D20(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %rbx,%rdi
  call   <system@plt>
  mov    0x198(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L18
  add    $0x1a8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L34:
  movsd  0x8(%rsp),%xmm0
  lea    D18(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  jmp    L2
L18:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D69
data_type: string
name: parse_data
arguments: data_label: D59
data_type: f32[2]
name: parse_data
arguments: data_label: D0
data_type: string
name: parse_data
arguments: data_label: D55
data_type: string
name: parse_data
arguments: data_label: D6
data_type: string
name: parse_data
arguments: data_label: D112
data_type: string
name: parse_data
arguments: data_label: D13
data_type: f32[2]
name: parse_data
arguments: data_label: D145
data_type: string
name: parse_data
arguments: data_label: D106
data_type: f64
name: parse_data
arguments: data_label: D12
data_type: f64
name: parse_data
arguments: data_label: D144
data_type: f64
name: parse_data
arguments: data_label: D73
data_type: f64
name: parse_data
arguments: data_label: D121
data_type: string
name: parse_data
arguments: data_label: D94
data_type: string
name: parse_data
arguments: data_label: D20
data_type: string
name: parse_data
arguments: data_label: D18
data_type: string

tool: D69: ptpath

tool: {"D59": [0.0,3.390625]}

tool: D0: %ssc.melts

tool: D55: w

tool: D6: Title: dummy			
Initial Composition: SiO2 %.4f			
Initial Composition: TiO2 %.4f			
Initial Composition: Al2O3 %.4f			
Initial Composition: Fe2O3 %.4f			
Initial Composition: Cr2O3 %.4f			
Initial Composition: FeO %.4f			
Initial Composition: MnO %.4f			
Initial Composition: MgO %.4f			
Initial Composition: NiO %.4f			
Initial Composition: CoO %.4f			
Initial Composition: CaO %.4f			
Initial Composition: Na2O %.4f			
Initial Composition: K2O %.4f			
Initial Composition: P2O5 %.4f			
Initial Composition: H2O %.4f


tool: D112: Initial Temperature: %.2f			
Initial Pressure: %.2f			
log fo2 Path: %s


tool: {"D13": [0.0,0.0]}

tool: D145: %smelts_env

tool: D106: 600

tool: D12: 3000

tool: D144: 1

tool: D73: 90000

tool: D121: 
ALPHAMELTS_VERSION		%s			
ALPHAMELTS_MODE			%s			
%sALPHAMELTS_PTPATH_FILE		ptpath			
ALPHAMELTS_DELTAP		%.0f			
ALPHAMELTS_DELTAT		%.0f			
ALPHAMELTS_MAXP			%.0f			
ALPHAMELTS_MINP			%.0f			
ALPHAMELTS_MAXT			%.0f			
ALPHAMELTS_MINT			%.0f			
%sALPHAMELTS_FRACTIONATE_SOLIDS	true			
%sALPHAMELTS_MASSIN		%g			
%sALPHAMELTS_FRACTIONATE_WATER	true			
%sALPHAMELTS_MINW			0.005			
%sALPHAMELTS_SAVE_ALL		true			
%sALPHAMELTS_CELSIUS_OUTPUT	true


tool: D94: %sbatch

tool: D20: cd %s; run_alphamelts_v1.41.pl -f melts_env -b batch > /dev/null

tool: D18: log fo2 Delta: %.2f


assistant: ```c
void runmeltsNoCO2(const char prefix[], double sc[], const char version[], const char mode[], const char fo2Path[], double fo2Delta, char batchString[], const char saveAll[], const char fractionateSolids[], double Ti, double Pi, double dT, double dP, double massin) {
  char fractionateWater[2] = "!", celciusOutput[2] = "", ptpath[2] = "!";
  if (strcasecmp(mode, "ptpath") == 0)
    ptpath[0] = '\0';
  double Pmax = 90000, Pmin = 1, Tmax = 3000, Tmin = 600;
  FILE *fp;
  char path_string[100];
  double normconst = 0;
  int i;
  for (i = 0; i < 16; i++) {
    normconst = normconst + sc[i];
  }
  for (i = 0; i < 16; i++) {
    sc[i] = sc[i] * 100 / normconst;
  }
  sprintf(path_string, "%ssc.melts", prefix);
  fp = fopen(path_string, "w");
  fprintf(fp, "Title: dummy			\nInitial Composition: SiO2 %.4f			\nInitial Composition: TiO2 %.4f			\nInitial Composition: Al2O3 %.4f			\nInitial Composition: Fe2O3 %.4f			\nInitial Composition: Cr2O3 %.4f			\nInitial Composition: FeO %.4f			\nInitial Composition: MnO %.4f			\nInitial Composition: MgO %.4f			\nInitial Composition: NiO %.4f			\nInitial Composition: CoO %.4f			\nInitial Composition: CaO %.4f			\nInitial Composition: Na2O %.4f			\nInitial Composition: K2O %.4f			\nInitial Composition: P2O5 %.4f			\nInitial Composition: H2O %.4f\n", sc[0], sc[1], sc[2], sc[3], sc[4], sc[5], sc[6], sc[7], sc[8], sc[9], sc[10], sc[11], sc[12], sc[13], sc[15]);
  fprintf(fp, "Initial Temperature: %.2f			\nInitial Pressure: %.2f			\nlog fo2 Path: %s\n", Ti, Pi, fo2Path);
  if (fo2Delta != 0) {
    fprintf(fp, "log fo2 Delta: %.2f\n", fo2Delta);
  }
  fclose(fp);
  sprintf(path_string, "%smelts_env", prefix);
  fp = fopen(path_string, "w");
  fprintf(fp, "\nALPHAMELTS_VERSION\t\t%s			\nALPHAMELTS_MODE\t\t\t%s			\n%sALPHAMELTS_PTPATH_FILE\t\tptpath			\nALPHAMELTS_DELTAP\t\t%.0f			\nALPHAMELTS_DELTAT\t\t%.0f			\nALPHAMELTS_MAXP\t\t\t%.0f			\nALPHAMELTS_MINP\t\t\t%.0f			\nALPHAMELTS_MAXT\t\t\t%.0f			\nALPHAMELTS_MINT\t\t\t%.0f			\n%sALPHAMELTS_FRACTIONATE_SOLIDS\ttrue			\n%sALPHAMELTS_MASSIN\t\t%g			\n%sALPHAMELTS_FRACTIONATE_WATER\ttrue			\n%sALPHAMELTS_MINW\t\t\t0.005			\n%sALPHAMELTS_SAVE_ALL\t\ttrue			\n%sALPHAMELTS_CELSIUS_OUTPUT\ttrue\n", version, mode, ptpath, dP, dT, Pmax, Pmin, Tmax, Tmin, fractionateSolids, fractionateSolids, massin, fractionateWater, fractionateWater, saveAll, celciusOutput);
  fclose(fp);
  sprintf(path_string, "%sbatch", prefix);
  fp = fopen(path_string, "w");
  fputs(batchString, fp);
  fclose(fp);
  char cmd_string[200];
  sprintf(cmd_string, "cd %s; run_alphamelts_v1.41.pl -f melts_env -b batch > /dev/null", prefix);
  system(cmd_string);
}
```