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

```asm
<get_arguments>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rsi,%r12
  push   %rbx
  sub    $0x48,%rsp
  mov    %edi,-0x50(%rbp)
  mov    %rsp,%rcx
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  xor    %eax,%eax
  movslq %edi,%rax
  mov    %rax,-0x48(%rbp)
  lea    0xf(,%rax,4),%rax
  mov    %rax,%rdx
  and    $0xfffffffffffff000,%rax
  sub    %rax,%rcx
  and    $0xfffffffffffffff0,%rdx
  cmp    %rcx,%rsp
  je     L125
L153:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rcx,%rsp
  jne    L153
L125:
  and    $0xfff,%edx
  sub    %rdx,%rsp
  test   %rdx,%rdx
  jne    L173
L23:
  mov    -0x50(%rbp),%eax
  mov    %rsp,-0x68(%rbp)
  test   %eax,%eax
  jle    L166
  movl   $0x0,-0x54(%rbp)
  xor    %ebx,%ebx
  lea    D15(%rip),%r13
  lea    D3(%rip),%r15
  jmp    L105
L72:
  mov    0x8(%r12,%rbx,8),%rdi
  cmp    %r15,%rdi
  je     L146
  cmp    %r13,%rdi
  je     L146
  call   <atoi@plt>
  mov    %ebx,%r14d
  add    $0x2,%r14d
  mov    %eax,-0x58(%rbp)
  movslq %r14d,%r14
  mov    (%r12,%r14,8),%rdi
  call   <atoi@plt>
  mov    %eax,-0x5c(%rbp)
L146:
  add    $0x1,%rbx
  cmp    -0x48(%rbp),%rbx
  je     L89
L105:
  mov    (%r12,%rbx,8),%r14
  mov    %r13,%rsi
  mov    %ebx,-0x4c(%rbp)
  mov    %r14,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L72
  mov    %r15,%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L146
  mov    %rbx,%r14
  jmp    L164
  nopw   0x0(%rax,%rax,1)
L83:
  mov    (%r12,%r14,8),%rdi
  mov    %r13,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L146
L52:
  add    $0x1,%r14
  cmp    %r14d,-0x50(%rbp)
  jle    L146
L164:
  mov    (%r12,%r14,8),%rdi
  mov    %r13,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L83
  mov    (%r12,%r14,8),%rdi
  mov    %r15,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L83
  mov    (%r12,%r14,8),%rdi
  call   <atoi@plt>
  mov    -0x68(%rbp),%rdx
  mov    %eax,%r8d
  movslq -0x54(%rbp),%rax
  mov    %rax,%rcx
  mov    %r8d,(%rdx,%rax,4)
  add    $0x1,%ecx
  mov    %ecx,-0x54(%rbp)
  jmp    L52
L166:
  movl   $0x0,-0x54(%rbp)
  nopw   0x0(%rax,%rax,1)
L89:
  mov    -0x54(%rbp),%ecx
  mov    -0x68(%rbp),%rdx
  mov    -0x5c(%rbp),%esi
  mov    -0x58(%rbp),%edi
  call   <modulizer@plt>
  mov    -0x38(%rbp),%rax
  sub    %fs:0x28,%rax
  jne    L128
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
L173:
  orq    $0x0,-0x8(%rsp,%rdx,1)
  jmp    L23
L128:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D15
type_guessed: string
name: disassemble_data
arguments: tag: D3
type_guessed: string

tool: D15: -c

tool: D3: -m

assistant: ```c
void get_arguments(int argc, char *argv[]) {
  int index, num_start, num_end, num_mod_c = 0, num_mod[argc];
  char *c_arg = "-c", *m_arg = "-m", *num_char;
  for (index = 0; index < argc; index++) {
    num_char = argv[index];
    int get_arg = index;
    if (strcmp(num_char, c_arg) == 0) {
      if (argv[++get_arg] != c_arg && argv[get_arg] != m_arg) {
        num_start = atoi(argv[get_arg]);
        num_end = atoi(argv[++get_arg]);
      }
    } else if (strcmp(num_char, m_arg) == 0) {
      for (get_arg = index; get_arg < argc; get_arg++) {
        if (strcmp(argv[get_arg], c_arg) != 0 && strcmp(argv[get_arg], m_arg) != 0) {
          num_mod[num_mod_c] = atoi(argv[get_arg]);
          num_mod_c++;
        } else if (strcmp(argv[get_arg], c_arg) == 0)
          break;
      }
    }
  }
  modulizer(num_start, num_end, num_mod, num_mod_c);
  return;
}
```