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

```asm
<main>:
  endbr64
  sub    $0x98,%rsp
  lea    D48(%rip),%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  movl   $0x0,0xc(%rsp)
  call   <printf@plt>
  lea    0xc(%rsp),%rsi
  lea    D49(%rip),%rdi
  call   <scanf@plt>
  mov    0xc(%rsp),%eax
  test   %eax,%eax
  jle    L138
  mov    %eax,%esi
  cmp    $0x3,%eax
  jle    L15
  movdqa D31(%rip),%xmm2
  movd   %eax,%xmm3
  movdqa D19(%rip),%xmm1
  mov    %eax,%ecx
  pshufd $0x0,%xmm3,%xmm0
  movslq %eax,%rdx
  shr    $0x2,%ecx
  lea    0x4(%rsp,%rdx,4),%rdx
  paddd  %xmm0,%xmm2
  paddd  %xmm0,%xmm1
  movups %xmm2,(%rdx)
  cmp    $0x1,%ecx
  je     L21
  movdqa D105(%rip),%xmm2
  pshufd $0x1b,%xmm1,%xmm1
  movups %xmm1,-0x10(%rdx)
  paddd  %xmm0,%xmm2
  cmp    $0x2,%ecx
  je     L21
  movdqa D112(%rip),%xmm1
  pshufd $0x1b,%xmm2,%xmm2
  movups %xmm2,-0x20(%rdx)
  paddd  %xmm0,%xmm1
  cmp    $0x3,%ecx
  je     L21
  movdqa D58(%rip),%xmm2
  pshufd $0x1b,%xmm1,%xmm1
  movups %xmm1,-0x30(%rdx)
  paddd  %xmm0,%xmm2
  cmp    $0x4,%ecx
  je     L21
  movdqa D74(%rip),%xmm1
  pshufd $0x1b,%xmm2,%xmm2
  movups %xmm2,-0x40(%rdx)
  paddd  %xmm0,%xmm1
  cmp    $0x5,%ecx
  je     L21
  pshufd $0x1b,%xmm1,%xmm1
  paddd  D5(%rip),%xmm0
  movups %xmm1,-0x50(%rdx)
  cmp    $0x6,%ecx
  je     L21
  pshufd $0x1b,%xmm0,%xmm0
  movups %xmm0,-0x60(%rdx)
L21:
  mov    %eax,%edx
  and    $0xfffffffc,%edx
  sub    %edx,%eax
  cmp    %edx,%esi
  je     L111
L15:
  movslq %eax,%rdx
  mov    %eax,0x10(%rsp,%rdx,4)
  mov    %eax,%edx
  sub    $0x1,%edx
  je     L111
  movslq %edx,%rcx
  mov    %edx,0x10(%rsp,%rcx,4)
  sub    $0x2,%eax
  je     L111
  movslq %eax,%rdx
  mov    %eax,0x10(%rsp,%rdx,4)
L111:
  lea    -0x1(%rsi),%edx
  movss  D63(%rip),%xmm0
  lea    0x14(%rsp),%rax
  lea    0x18(%rsp,%rdx,4),%rdx
  nopl   0x0(%rax)
L42:
  pxor   %xmm1,%xmm1
  add    $0x4,%rax
  cvtsi2ssl -0x4(%rax),%xmm1
  mulss  %xmm1,%xmm0
  cmp    %rdx,%rax
  jne    L42
L109:
  lea    D81(%rip),%rdi
  mov    $0x1,%eax
  cvtss2sd %xmm0,%xmm0
  call   <printf@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L56
  xor    %eax,%eax
  add    $0x98,%rsp
  ret
L138:
  movss  D63(%rip),%xmm0
  jmp    L109
L56:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D48
type_guessed: string
name: disassemble_data
arguments: data_label: D49
type_guessed: string
name: disassemble_data
arguments: data_label: D31
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D19
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D105
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D112
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D58
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D74
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D5
type_guessed: byte[16]
name: disassemble_data
arguments: data_label: D63
type_guessed: f32
name: disassemble_data
arguments: data_label: D81
type_guessed: string

tool: D48: deger girin: 

tool: D49: %d

tool: {"D31": [0xfd,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00]}

tool: {"D19": [0xfc,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xf9,0xff,0xff,0xff]}

tool: {"D105": [0xf8,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xf6,0xff,0xff,0xff,0xf5,0xff,0xff,0xff]}

tool: {"D112": [0xf4,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xf2,0xff,0xff,0xff,0xf1,0xff,0xff,0xff]}

tool: {"D58": [0xf0,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xee,0xff,0xff,0xff,0xed,0xff,0xff,0xff]}

tool: {"D74": [0xec,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xea,0xff,0xff,0xff,0xe9,0xff,0xff,0xff]}

tool: {"D5": [0xe8,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xe6,0xff,0xff,0xff,0xe5,0xff,0xff,0xff]}

tool: D63: 1

tool: D81: Factoriyel = %.f


assistant: ```c
int main() {
  int deger = 0, i, j;
  int dizi[30];
  float total = 1;
  printf("deger girin: ");
  scanf("%d", &deger);
  for (i = deger; i > 0; i--) {
    dizi[i] = i;
  }
  for (i = 0; i < deger; i++) {
    total *= dizi[i + 1];
  }
  printf("Factoriyel = %.f\n", total);
}
```