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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D61(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x20(%rbp),%rcx
  lea    -0x24(%rbp),%rdx
  lea    -0x28(%rbp),%rax
  mov    %rax,%rsi
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x28(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %eax,%edx
  mov    -0x20(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D52(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x14(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D33(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%edx
  mov    -0x24(%rbp),%eax
  imul   %eax,%edx
  mov    -0x20(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x24(%rbp),%eax
  cmp    %eax,-0x1c(%rbp)
  jle    L16
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
L16:
  mov    -0x20(%rbp),%eax
  cmp    %eax,-0x1c(%rbp)
  jle    L1
  mov    -0x20(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
L1:
  mov    -0x1c(%rbp),%eax
  mov    %eax,%esi
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x24(%rbp),%eax
  cmp    %eax,-0x18(%rbp)
  jge    L25
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x18(%rbp)
L25:
  mov    -0x20(%rbp),%eax
  cmp    %eax,-0x18(%rbp)
  jge    L34
  mov    -0x20(%rbp),%eax
  mov    %eax,-0x18(%rbp)
L34:
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L29
  call   <__stack_chk_fail@plt>
L29:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D61
type_infered: string
name: read_data
arguments: tag: D48
type_infered: string
name: read_data
arguments: tag: D52
type_infered: string
name: read_data
arguments: tag: D33
type_infered: string
name: read_data
arguments: tag: D60
type_infered: string
name: read_data
arguments: tag: D23
type_infered: string
name: read_data
arguments: tag: D49
type_infered: string

tool: D61: Please, enter three integers: 

tool: D48: %d%d%d

tool: D52: Sum is %d


tool: D33: Average is %d


tool: D60: Product is %d


tool: D23: Smallest is %d


tool: D49: Largest is %d


assistant: ```c
int main(void) {
  int a;
  int b;
  int c;
  int sum;
  int avg;
  int prod;
  int small;
  int large;
  printf("Please, enter three integers: ");
  scanf("%d%d%d", &a, &b, &c);
  sum = a + b + c;
  printf("Sum is %d\n", sum);
  avg = sum / 3;
  printf("Average is %d\n", avg);
  prod = a * b * c;
  printf("Product is %d\n", prod);
  small = a;
  if (b < small)
    small = b;
  if (c < small)
    small = c;
  printf("Smallest is %d\n", small);
  large = a;
  if (b > large)
    large = b;
  if (c > large)
    large = c;
  printf("Largest is %d\n", large);
  return 0;
}
```