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

```asm
<motif_stats_withcounts>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %rdx,-0x58(%rbp)
  mov    %rcx,-0x60(%rbp)
  mov    %r8d,-0x64(%rbp)
  movl   $0x0,-0x3c(%rbp)
  movl   $0x0,-0x38(%rbp)
  movl   $0x0,-0x34(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x64(%rbp),%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <meanf@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x64(%rbp),%ecx
  mov    -0x20(%rbp),%edx
  mov    -0x50(%rbp),%rax
  mov    %ecx,%esi
  movd   %edx,%xmm0
  mov    %rax,%rdi
  call   <stdf@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x64(%rbp),%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <minf@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x64(%rbp),%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <maxf@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x14(%rbp)
  lea    D227(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x60(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x19,%edx
  mov    $0x1,%esi
  lea    D68(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  pxor   %xmm2,%xmm2
  cvtss2sd -0x20(%rbp),%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  lea    D110(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm3,%xmm3
  cvtss2sd -0x20(%rbp),%xmm3
  movq   %xmm3,%rdx
  mov    -0x60(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D110(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  pxor   %xmm4,%xmm4
  cvtss2sd -0x1c(%rbp),%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  lea    D238(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm5,%xmm5
  cvtss2sd -0x1c(%rbp),%xmm5
  movq   %xmm5,%rdx
  mov    -0x60(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D238(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  pxor   %xmm6,%xmm6
  cvtss2sd -0x18(%rbp),%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  lea    D99(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm7,%xmm7
  cvtss2sd -0x18(%rbp),%xmm7
  movq   %xmm7,%rdx
  mov    -0x60(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D99(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  pxor   %xmm2,%xmm2
  cvtss2sd -0x14(%rbp),%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  lea    D87(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm3,%xmm3
  cvtss2sd -0x14(%rbp),%xmm3
  movq   %xmm3,%rdx
  mov    -0x60(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D87(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  mov    -0x48(%rbp),%rax
  mov    %rax,%rsi
  lea    D128(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x48(%rbp),%rdx
  mov    -0x60(%rbp),%rax
  lea    D128(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  movl   $0x1,-0x40(%rbp)
  jmp    L11
L56:
  mov    -0x40(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x8(%rbp)
  cmpl   $0x0,-0x8(%rbp)
  jle    L46
  mov    -0x8(%rbp),%eax
  add    %eax,-0x3c(%rbp)
  mov    -0x8(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jle    L30
  mov    -0x8(%rbp),%eax
  mov    %eax,-0x38(%rbp)
L30:
  addl   $0x1,-0x34(%rbp)
  mov    -0x40(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  -0x30(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,-0x30(%rbp)
  movss  -0x4(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  -0x24(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x24(%rbp)
  movss  -0x2c(%rbp),%xmm0
  comiss -0x4(%rbp),%xmm0
  jbe    L0
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,-0x2c(%rbp)
L0:
  movss  -0x4(%rbp),%xmm0
  comiss -0x28(%rbp),%xmm0
  jbe    L46
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,-0x28(%rbp)
L46:
  addl   $0x1,-0x40(%rbp)
L11:
  mov    -0x40(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jle    L56
  mov    -0x48(%rbp),%rax
  mov    %rax,%rsi
  lea    D230(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x64(%rbp),%eax
  mov    %eax,%esi
  lea    D252(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x34(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D236(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x64(%rbp),%xmm1
  cvtss2sd %xmm1,%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x10(%rbp)
  pxor   %xmm4,%xmm4
  cvtss2sd -0x10(%rbp),%xmm4
  movq   %xmm4,%rdx
  mov    -0x34(%rbp),%eax
  movq   %rdx,%xmm0
  mov    %eax,%esi
  lea    D204(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x3c(%rbp),%eax
  mov    %eax,%esi
  lea    D131(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x3c(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x34(%rbp),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0xc(%rbp)
  pxor   %xmm5,%xmm5
  cvtss2sd -0xc(%rbp),%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x38(%rbp),%eax
  mov    %eax,%esi
  lea    D197(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D300(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x34(%rbp),%xmm1
  movss  -0x30(%rbp),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x30(%rbp)
  pxor   %xmm6,%xmm6
  cvtss2sd -0x30(%rbp),%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm7,%xmm7
  cvtss2sd -0x2c(%rbp),%xmm7
  movq   %xmm7,%rax
  movq   %rax,%xmm0
  lea    D166(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  pxor   %xmm2,%xmm2
  cvtss2sd -0x28(%rbp),%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  lea    D261(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movss  -0x30(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  %xmm0,%xmm1
  movss  -0x24(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x24(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x34(%rbp),%xmm1
  movss  -0x24(%rbp),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x24(%rbp)
  pxor   %xmm3,%xmm3
  cvtss2sd -0x24(%rbp),%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x48(%rbp),%rdx
  mov    -0x60(%rbp),%rax
  lea    D230(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    -0x64(%rbp),%edx
  mov    -0x60(%rbp),%rax
  lea    D252(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  pxor   %xmm4,%xmm4
  cvtss2sd -0x10(%rbp),%xmm4
  movq   %xmm4,%rcx
  mov    -0x34(%rbp),%edx
  mov    -0x60(%rbp),%rax
  movq   %rcx,%xmm0
  lea    D204(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  mov    -0x3c(%rbp),%edx
  mov    -0x60(%rbp),%rax
  lea    D131(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  pxor   %xmm5,%xmm5
  cvtss2sd -0xc(%rbp),%xmm5
  movq   %xmm5,%rdx
  mov    -0x60(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D48(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  mov    -0x38(%rbp),%edx
  mov    -0x60(%rbp),%rax
  lea    D197(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    -0x60(%rbp),%rax
  mov    %rax,%rcx
  mov    $0xd,%edx
  mov    $0x1,%esi
  lea    D305(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  pxor   %xmm6,%xmm6
  cvtss2sd -0x30(%rbp),%xmm6
  movq   %xmm6,%rdx
  mov    -0x60(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D4(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  pxor   %xmm7,%xmm7
  cvtss2sd -0x2c(%rbp),%xmm7
  movq   %xmm7,%rdx
  mov    -0x60(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D166(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  pxor   %xmm2,%xmm2
  cvtss2sd -0x28(%rbp),%xmm2
  movq   %xmm2,%rdx
  mov    -0x60(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D261(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  pxor   %xmm3,%xmm3
  cvtss2sd -0x24(%rbp),%xmm3
  movq   %xmm3,%rdx
  mov    -0x60(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D22(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <fprintf@plt>
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D227
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D68
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D110
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D238
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D99
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D87
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D128
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D230
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D252
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D236
type_guessed: f64
name: extract_symbolic_data
arguments: data_label: D204
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D131
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D48
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D197
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D300
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D4
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D166
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D261
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D22
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D305
type_guessed: string

tool: D227: Overall expression stats

tool: D68: Overall expression stats


tool: D110: 	mean expression=%.2f


tool: D238: 	s.d. expression=%.2f


tool: D99: 	min expression=%.2f


tool: D87: 	max expression=%.2f


tool: D128: 	Occurences of motif %s


tool: D230: ***** Statistics for motif = %s *****


tool: D252: 	Number of transcripts explored = %d


tool: D236: 100

tool: D204: 	Number of transcripts motif is present in = %d (%.1f)


tool: D131: 	Total number of motif occurrences = %d


tool: D48: 		Mean number of occurrences per transcript = %.2f


tool: D197: 		Max number of occurrences per transcript = %d


tool: D300: 
	Expression

tool: D4: 	Mean expression level of transcripts with motif = %.2f


tool: D166: 	Min expression level of transcripts with motif = %.2f


tool: D261: 	Max expression level of transcripts with motif = %.2f


tool: D22: 	S.D. of expression level of transcripts with motif = %.2f


tool: D305: 
	Expression


assistant: ```c
void motif_stats_withcounts(char *motif, float *expression, int *motif_count, FILE *output_file, int n_transcripts) {
  int i;
  int index;
  float curr_expression;
  int n;
  int total_occurrences = 0;
  int max_occurrences_per_transcript = 0;
  float mean_occurrences_per_transcript;
  int n_transcripts_present = 0;
  float mean_expression = 0;
  float min_expression = 0;
  float max_expression = 0;
  float expression_var = 0;
  float expression_std;
  float overall_mean_expression;
  float ptranscripts;
  float oa_std_expression;
  float oa_mean_expression;
  float oa_min_expression;
  float oa_max_expression;
  oa_mean_expression = meanf(expression, n_transcripts);
  oa_std_expression = stdf(expression, oa_mean_expression, n_transcripts);
  oa_min_expression = minf(expression, n_transcripts);
  oa_max_expression = maxf(expression, n_transcripts);
  printf("Overall expression stats\n");
  fprintf(output_file, "Overall expression stats\n");
  printf("\tmean expression=%.2f\n", oa_mean_expression);
  fprintf(output_file, "\tmean expression=%.2f\n", oa_mean_expression);
  printf("\ts.d. expression=%.2f\n", oa_std_expression);
  fprintf(output_file, "\ts.d. expression=%.2f\n", oa_std_expression);
  printf("\tmin expression=%.2f\n", oa_min_expression);
  fprintf(output_file, "\tmin expression=%.2f\n", oa_min_expression);
  printf("\tmax expression=%.2f\n", oa_max_expression);
  fprintf(output_file, "\tmax expression=%.2f\n", oa_max_expression);
  printf("\tOccurences of motif %s\n", motif);
  fprintf(output_file, "\tOccurences of motif %s\n", motif);
  for (i = 1; i <= n_transcripts; i++) {
    n = motif_count[i];
    if (n > 0) {
      total_occurrences = total_occurrences + n;
      if (n > max_occurrences_per_transcript)
        max_occurrences_per_transcript = n;
      n_transcripts_present++;
      curr_expression = expression[i];
      mean_expression = mean_expression + curr_expression;
      expression_var = expression_var + curr_expression * curr_expression;
      if (curr_expression < min_expression)
        min_expression = curr_expression;
      if (curr_expression > max_expression)
        max_expression = curr_expression;
    }
  }
  printf("***** Statistics for motif = %s *****\n", motif);
  printf("\tNumber of transcripts explored = %d\n", n_transcripts);
  ptranscripts = 100.0 * (float)n_transcripts_present / (float)n_transcripts;
  printf("\tNumber of transcripts motif is present in = %d (%.1f)\n", n_transcripts_present, ptranscripts);
  printf("\tTotal number of motif occurrences = %d\n", total_occurrences);
  mean_occurrences_per_transcript = (float)total_occurrences / (float)n_transcripts_present;
  printf("\t\tMean number of occurrences per transcript = %.2f\n", mean_occurrences_per_transcript);
  printf("\t\tMax number of occurrences per transcript = %d\n", max_occurrences_per_transcript);
  printf("\n\tExpression\n");
  mean_expression = mean_expression / (float)n_transcripts_present;
  printf("\tMean expression level of transcripts with motif = %.2f\n", mean_expression);
  printf("\tMin expression level of transcripts with motif = %.2f\n", min_expression);
  printf("\tMax expression level of transcripts with motif = %.2f\n", max_expression);
  expression_var = expression_var - mean_expression * mean_expression;
  expression_var = expression_var / (float)n_transcripts_present;
  printf("\tS.D. of expression level of transcripts with motif = %.2f\n", expression_var);
  fprintf(output_file, "***** Statistics for motif = %s *****\n", motif);
  fprintf(output_file, "\tNumber of transcripts explored = %d\n", n_transcripts);
  fprintf(output_file, "\tNumber of transcripts motif is present in = %d (%.1f)\n", n_transcripts_present, ptranscripts);
  fprintf(output_file, "\tTotal number of motif occurrences = %d\n", total_occurrences);
  fprintf(output_file, "\t\tMean number of occurrences per transcript = %.2f\n", mean_occurrences_per_transcript);
  fprintf(output_file, "\t\tMax number of occurrences per transcript = %d\n", max_occurrences_per_transcript);
  fprintf(output_file, "\n\tExpression\n");
  fprintf(output_file, "\tMean expression level of transcripts with motif = %.2f\n", mean_expression);
  fprintf(output_file, "\tMin expression level of transcripts with motif = %.2f\n", min_expression);
  fprintf(output_file, "\tMax expression level of transcripts with motif = %.2f\n", max_expression);
  fprintf(output_file, "\tS.D. of expression level of transcripts with motif = %.2f\n", expression_var);
}
```