user: 请从给定的汇编指令推导出C源代码:

```asm
<handleParams>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rcx,%r12
  push   %rbp
  push   %rbx
  mov    %rdx,%rbx
  sub    $0x18,%rsp
  mov    %r8,0x8(%rsp)
  mov    %r9,(%rsp)
  test   %edi,%edi
  jle    L83
  mov    %edi,%eax
  lea    0x8(%rsi),%r13
  lea    D5(%rip),%rbp
  sub    $0x1,%eax
  lea    D6(%rip),%r14
  lea    0x10(%rsi,%rax,8),%r15
  jmp    L113
  nopl   0x0(%rax,%rax,1)
L183:
  add    $0x8,%r13
  cmp    %r13,%r15
  je     L83
L113:
  mov    -0x8(%r13),%rax
  cmpb   $0x2d,(%rax)
  jne    L183
  movzbl 0x1(%rax),%eax
  sub    $0x42,%eax
  cmp    $0x32,%al
  ja     L183
  movzbl %al,%eax
  movslq 0x0(%rbp,%rax,4),%rax
  add    %rbp,%rax
  notrack jmp *%rax
  mov    0x0(%r13),%rdi
  add    $0x8,%r13
  call   <atoi@plt>
  mov    0x80(%rsp),%rcx
  mov    %eax,(%rcx)
  cmp    %r13,%r15
  jne    L113
  nop
L83:
  mov    0x80(%rsp),%rax
  mov    (%r12),%edx
  mov    (%rbx),%esi
  cmpl   $0x1,(%rax)
  je     L33
  lea    D41(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L124:
  mov    0x58(%rsp),%rax
  mov    (%rax),%eax
  cmp    (%rbx),%eax
  jge    L198
  xor    %r8d,%r8d
  cmp    (%r12),%eax
  jl     L30
L198:
  lea    D7(%rip),%rdi
  call   <puts@plt>
  mov    (%rbx),%ecx
  mov    (%r12),%edx
  lea    -0x1(%rcx),%esi
  cmp    %edx,%ecx
  lea    -0x1(%rdx),%eax
  mov    0x58(%rsp),%rcx
  cmovl  %esi,%eax
  xor    %r8d,%r8d
  mov    %eax,(%rcx)
L30:
  add    $0x18,%rsp
  mov    %r8d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  mov    0x0(%r13),%rdi
  call   <atoi@plt>
  mov    0x60(%rsp),%rcx
  mov    %eax,(%rcx)
  jmp    L183
  mov    0x0(%r13),%rdi
  call   <atof@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  mov    0xa0(%rsp),%rax
  movsd  %xmm0,(%rax)
  jmp    L183
  mov    0x0(%r13),%rdi
  call   <strdup@plt>
  mov    0x50(%rsp),%rcx
  mov    %rax,(%rcx)
  jmp    L183
  mov    0x0(%r13),%rdi
  call   <strdup@plt>
  lea    D51(%rip),%rdi
  mov    %rax,%rsi
  mov    (%rsp),%rax
  mov    %rsi,(%rax)
  xor    %eax,%eax
  call   <printf@plt>
  mov    (%rsp),%rax
  mov    %r14,%rcx
  mov    %r12,%rdx
  mov    %rbx,%rsi
  mov    (%rax),%rdi
  call   <DataCounter@plt>
  test   %eax,%eax
  jne    L192
  mov    (%rbx),%edi
  imul   (%r12),%edi
  mov    $0x8,%esi
  call   <calloc@plt>
  mov    0x8(%rsp),%rdx
  mov    (%rbx),%esi
  mov    %r14,%r8
  mov    %rax,%rcx
  mov    %rax,(%rdx)
  mov    (%rsp),%rax
  mov    (%r12),%edx
  mov    (%rax),%rdi
  call   <extractData@plt>
  jmp    L183
  mov    0x0(%r13),%rdi
  call   <atoi@plt>
  mov    0x68(%rsp),%rdx
  mov    %eax,(%rdx)
  jmp    L183
  mov    0x0(%r13),%rdi
  call   <atoi@plt>
  mov    0x98(%rsp),%rdx
  mov    %eax,(%rdx)
  jmp    L183
  mov    0x0(%r13),%rdi
  call   <atoi@plt>
  mov    0x58(%rsp),%rcx
  mov    %eax,(%rcx)
  jmp    L183
  mov    0x70(%rsp),%rax
  mov    0x0(%r13),%rdi
  movl   $0x1,(%rax)
  call   <strdup@plt>
  mov    0x78(%rsp),%rdx
  mov    %rax,(%rdx)
  jmp    L183
  mov    0x0(%r13),%rdi
  call   <atof@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  mov    0x90(%rsp),%rax
  movsd  %xmm0,(%rax)
  jmp    L183
  nopw   0x0(%rax,%rax,1)
L33:
  mov    0x8(%rsp),%rax
  mov    (%rax),%rdi
  call   <tr@plt>
  mov    (%r12),%eax
  mov    (%rbx),%edx
  lea    D41(%rip),%rdi
  mov    %eax,(%rbx)
  xor    %eax,%eax
  mov    %edx,(%r12)
  mov    (%rbx),%esi
  call   <printf@plt>
  jmp    L124
L192:
  mov    $0x1,%r8d
  jmp    L30
```

tool_calls: name: unpack_data
arguments: data_label: D6
type_infered: string
name: unpack_data
arguments: data_label: D41
type_infered: string
name: unpack_data
arguments: data_label: D7
type_infered: string
name: unpack_data
arguments: data_label: D51
type_infered: string

tool: D6: genotypes

tool: D41: %i snps typed on %i individuals


tool: D7: ***WARNING*** K must be lower than the rank of the design matrix

tool: D51: Genotypes in file %s


assistant: ```c
int handleParams(int argc, char *argv[], int *nSNP, int *nIND, double **Genotypes, char **GenoFileName, char **OutputFileName, int *K, int *nsteps, int *burnin, int *runSVD, char **subSampleName, int *transpose, int *prior, double *b, int *sc, double *prop) {
  int i, tmp;
  for (i = 0; i < argc; i++) {
    if (argv[i][0] == '-') {
      switch (argv[i][1]) {
      case 'i':
        *GenoFileName = strdup(argv[i + 1]);
        printf("Genotypes in file %s\n", *GenoFileName);
        if (!DataCounter(*GenoFileName, nSNP, nIND, "genotypes")) {
          *Genotypes = calloc((*nSNP) * (*nIND), sizeof(double));
          int res;
          res = extractData(*GenoFileName, *nSNP, *nIND, *Genotypes, "genotypes");
        } else {
          return 1;
        }
        break;
      case 'K':
        *K = atoi(argv[i + 1]);
        break;
      case 's':
        *nsteps = atoi(argv[i + 1]);
        break;
      case 'b':
        *burnin = atoi(argv[i + 1]);
        break;
      case 'o':
        *OutputFileName = strdup(argv[i + 1]);
        break;
      case 'I':
        *runSVD = 1;
        *subSampleName = strdup(argv[i + 1]);
        break;
      case 't':
        *transpose = atoi(argv[i + 1]);
        break;
      case 'p':
        *prop = (double)atof(argv[i + 1]);
        break;
      case 'B':
        *b = (double)atof(argv[i + 1]);
        break;
      case 'S':
        *sc = atoi(argv[i + 1]);
        break;
      }
    }
  }
  if (*transpose == 1) {
    tr(*Genotypes, *nSNP, *nIND);
    tmp = *nSNP;
    *nSNP = *nIND;
    *nIND = tmp;
    printf("%i snps typed on %i individuals\n", *nSNP, *nIND);
  } else {
    printf("%i snps typed on %i individuals\n", *nSNP, *nIND);
  }
  if (*K >= *nSNP || *K >= *nIND) {
    printf("***WARNING*** K must be lower than the rank of the design matrix\n");
    *K = *nSNP < *nIND ? *nSNP - 1 : *nIND - 1;
  }
  return 0;
}
```