user: Translate the below assembly code into C programming language:

```asm
<timesteps>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xf0,%rsp
  mov    %edi,-0xe4(%rbp)
  mov    %esi,-0xe8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D21(%rip),%rax
  mov    %rax,-0xd0(%rbp)
  lea    D236(%rip),%rax
  mov    %rax,-0xc8(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0xc0(%rbp)
  lea    D57(%rip),%rax
  mov    %rax,-0xb8(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0xb0(%rbp)
  lea    D57(%rip),%rax
  mov    %rax,-0xa8(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0xa0(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x98(%rbp)
  lea    D57(%rip),%rax
  mov    %rax,-0x90(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x88(%rbp)
  lea    D57(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x78(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x70(%rbp)
  lea    D188(%rip),%rax
  mov    %rax,-0x68(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x60(%rbp)
  lea    D57(%rip),%rax
  mov    %rax,-0x58(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x50(%rbp)
  lea    D57(%rip),%rax
  mov    %rax,-0x48(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x40(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x38(%rbp)
  lea    D57(%rip),%rax
  mov    %rax,-0x30(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x28(%rbp)
  lea    D57(%rip),%rax
  mov    %rax,-0x20(%rbp)
  lea    D21(%rip),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0xe4(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L10
  mov    -0xe8(%rbp),%ecx
  movslq %ecx,%rax
  imul   $0x2aaaaaab,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %ecx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  shl    $0x2,%eax
  sub    %eax,%ecx
  mov    %ecx,%edx
  movslq %edx,%rax
  mov    -0xd0(%rbp,%rax,8),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0xd4(%rbp)
L10:
  mov    -0xe4(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  jne    L20
  mov    -0xe8(%rbp),%ecx
  movslq %ecx,%rax
  imul   $0x2aaaaaab,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %ecx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  shl    $0x2,%eax
  mov    %ecx,%edx
  sub    %eax,%edx
  movslq %edx,%rax
  mov    -0x70(%rbp,%rax,8),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0xd4(%rbp)
L20:
  mov    -0xd4(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L4
  call   <__stack_chk_fail@plt>
L4:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D21
data_type: string
name: disassemble_data
arguments: tag: D236
data_type: string
name: disassemble_data
arguments: tag: D57
data_type: string
name: disassemble_data
arguments: tag: D188
data_type: string

tool: D21: 31

tool: D236: 28

tool: D57: 30

tool: D188: 29

assistant: ```c
int timesteps(int yy, int mt) {
  int val;
  char *regular[] = {"31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"};
  char *leap[] = {"31", "29", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"};
  if (yy % 4 != 0)
    val = atoi(regular[mt % 12]);
  if (yy % 4 == 0)
    val = atoi(leap[mt % 12]);
  return val;
}
```