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

```asm
<gen_key>:
  endbr64
  sub    $0x8,%rsp
  mov    %rdx,%rax
  mov    0x60(%rdx),%edx
  mov    0x4(%rsi),%ecx
  push   %rdx
  mov    0x5c(%rax),%edx
  push   %rdx
  mov    0x58(%rax),%edx
  push   %rdx
  mov    0x54(%rax),%edx
  push   %rdx
  mov    0x50(%rax),%edx
  push   %rdx
  mov    0x4c(%rax),%edx
  push   %rdx
  mov    0x48(%rax),%edx
  push   %rdx
  mov    0x44(%rax),%edx
  push   %rdx
  mov    0x40(%rax),%edx
  push   %rdx
  mov    0x3c(%rax),%edx
  push   %rdx
  mov    0x38(%rax),%edx
  push   %rdx
  mov    0x34(%rax),%edx
  push   %rdx
  mov    0x30(%rax),%edx
  push   %rdx
  mov    0x2c(%rax),%edx
  push   %rdx
  mov    0x28(%rax),%edx
  push   %rdx
  mov    0x24(%rax),%edx
  push   %rdx
  mov    0x20(%rax),%edx
  push   %rdx
  mov    0x1c(%rax),%edx
  push   %rdx
  mov    0x18(%rax),%edx
  push   %rdx
  mov    0x14(%rax),%edx
  push   %rdx
  mov    0x10(%rax),%edx
  push   %rdx
  mov    0xc(%rax),%edx
  push   %rdx
  mov    0x8(%rax),%edx
  push   %rdx
  mov    0x4(%rax),%edx
  push   %rdx
  mov    (%rax),%eax
  push   %rax
  mov    0x30(%rsi),%eax
  push   %rax
  mov    0x2c(%rsi),%eax
  push   %rax
  mov    0x28(%rsi),%eax
  push   %rax
  mov    0x24(%rsi),%eax
  push   %rax
  mov    0x20(%rsi),%eax
  push   %rax
  mov    0x1c(%rsi),%eax
  push   %rax
  mov    0x18(%rsi),%eax
  push   %rax
  mov    0x14(%rsi),%eax
  push   %rax
  mov    0x10(%rsi),%eax
  push   %rax
  mov    0xc(%rsi),%r9d
  mov    0x8(%rsi),%r8d
  mov    (%rsi),%edx
  lea    D0(%rip),%rsi
  call   <sprintf@plt>
  add    $0x110,%rsp
  cmp    $0x1c9,%eax
  ja     L3
  add    $0x8,%rsp
  ret
  xchg   %ax,%ax
L3:
  lea    D4(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  add    $0x8,%rsp
  jmp    1090 <exit@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D0
type_infered: string
name: unpack_data
arguments: data_tag: D4
type_infered: string

tool: D0: %i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_%i

tool: D4: sprintf Fehlgeschlagen!

assistant: ```c
void gen_key(char *key, int *hamming_weight_polynomial, int *double_weight_polynomial) {
  int n = sprintf(key,
                  "%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_"
                  "%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_"
                  "%i_%i_%i_%i_%i_%i_%i_%i_%i_%i_"
                  "%i_%i_%i_%i_%i_%i_%i_%i",
                  hamming_weight_polynomial[0], hamming_weight_polynomial[1], hamming_weight_polynomial[2], hamming_weight_polynomial[3], hamming_weight_polynomial[4], hamming_weight_polynomial[5], hamming_weight_polynomial[6], hamming_weight_polynomial[7], hamming_weight_polynomial[8], hamming_weight_polynomial[9], hamming_weight_polynomial[10], hamming_weight_polynomial[11], hamming_weight_polynomial[12], double_weight_polynomial[0], double_weight_polynomial[1], double_weight_polynomial[2], double_weight_polynomial[3], double_weight_polynomial[4], double_weight_polynomial[5], double_weight_polynomial[6], double_weight_polynomial[7], double_weight_polynomial[8], double_weight_polynomial[9], double_weight_polynomial[10], double_weight_polynomial[11], double_weight_polynomial[12], double_weight_polynomial[13], double_weight_polynomial[14], double_weight_polynomial[15], double_weight_polynomial[16], double_weight_polynomial[17], double_weight_polynomial[18], double_weight_polynomial[19], double_weight_polynomial[20], double_weight_polynomial[21], double_weight_polynomial[22], double_weight_polynomial[23], double_weight_polynomial[24]);
  if (n < 0 || n > 457) {
    printf("sprintf Fehlgeschlagen!");
    exit(1);
  }
}
```