user: What would the C source look like for the assembly code provided here?

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x18(%rbp)
  lea    -0x1c(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x1c(%rbp),%eax
  test   %eax,%eax
  jne    L128
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xffffffff,%eax
  jmp    L140
L128:
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jne    L91
  mov    $0x30,%edi
  call   <putchar@plt>
  mov    $0x0,%eax
  jmp    L140
L91:
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jns    L15
  negl   -0x18(%rbp)
L15:
  mov    -0x1c(%rbp),%eax
  test   %eax,%eax
  jns    L45
  negl   -0x18(%rbp)
L45:
  mov    -0x20(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  mov    %eax,-0x1c(%rbp)
  cmpl   $0xffffffff,-0x18(%rbp)
  jne    L149
  mov    $0x2d,%edi
  call   <putchar@plt>
L149:
  mov    -0x1c(%rbp),%edx
  mov    -0x20(%rbp),%eax
  cmp    %eax,%edx
  cmovle %edx,%eax
  mov    %eax,-0x14(%rbp)
  jmp    L49
L136:
  mov    -0x20(%rbp),%eax
  cltd
  idivl  -0x14(%rbp)
  mov    %edx,%eax
  test   %eax,%eax
  jne    L71
  mov    -0x1c(%rbp),%eax
  cltd
  idivl  -0x14(%rbp)
  mov    %edx,%eax
  test   %eax,%eax
  je     L118
L71:
  subl   $0x1,-0x14(%rbp)
L49:
  cmpl   $0x1,-0x14(%rbp)
  jg     L136
  jmp    L3
L118:
  nop
L3:
  mov    -0x20(%rbp),%eax
  cltd
  idivl  -0x14(%rbp)
  mov    %eax,-0x20(%rbp)
  mov    -0x1c(%rbp),%eax
  cltd
  idivl  -0x14(%rbp)
  mov    %eax,-0x1c(%rbp)
  mov    -0x20(%rbp),%eax
  mov    -0x1c(%rbp),%ecx
  cltd
  idiv   %ecx
  mov    %eax,-0x10(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  je     L141
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L141:
  mov    -0x20(%rbp),%eax
  mov    -0x1c(%rbp),%ecx
  cltd
  idiv   %ecx
  mov    %edx,-0xc(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  je     L153
  cmpl   $0x0,-0xc(%rbp)
  je     L153
  mov    $0x20,%edi
  call   <putchar@plt>
L153:
  cmpl   $0x0,-0xc(%rbp)
  je     L138
  mov    -0x1c(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D17(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L138:
  mov    $0x0,%eax
L140:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L134
  call   <__stack_chk_fail@plt>
L134:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D23
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D37
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D26
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D17
type_infered: string

tool: D23: %d%d

tool: D37: Divide by zero!

tool: D26: %d

tool: D17: %d/%d

assistant: ```c
int main(void) {
  int num, denom, neg = 1, gcd, whole_no, rmdr;
  scanf("%d%d", &num, &denom);
  if (denom == 0) {
    printf("Divide by zero!");
    return -1;
  } else if (num == 0) {
    printf("0");
    return 0;
  }
  if (num < 0)
    neg *= -1;
  if (denom < 0)
    neg *= -1;
  num = abs(num);
  denom = abs(denom);
  if (neg == -1)
    printf("-");
  gcd = (num < denom) ? num : denom;
  while (gcd > 1) {
    if (num % gcd == 0 && denom % gcd == 0)
      break;
    gcd--;
  }
  num /= gcd;
  denom /= gcd;
  whole_no = num / denom;
  if (whole_no != 0)
    printf("%d", whole_no);
  rmdr = num % denom;
  if (whole_no != 0 && rmdr != 0)
    printf(" ");
  if (rmdr != 0)
    printf("%d/%d", rmdr, denom);
  return 0;
}
```