user: 这段汇编代码用C语言表示是什么样的：

```asm
<hpgs_parse_papersize>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  mov    %rsi,%r12
  lea    D28(%rip),%rsi
  push   %rbp
  mov    %rdx,%rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L35
  mov    D149(%rip),%rax
  mov    %rax,(%r12)
  mov    D275(%rip),%rax
  mov    %rax,0x0(%rbp)
  xor    %eax,%eax
L212:
  mov    0x28(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L140
  add    $0x30,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax,%rax,1)
L35:
  lea    D29(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L194
  mov    D275(%rip),%rax
  mov    %rax,(%r12)
  mov    D182(%rip),%rax
  mov    %rax,0x0(%rbp)
  xor    %eax,%eax
  jmp    L212
  cs nopw 0x0(%rax,%rax,1)
L194:
  lea    D172(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L237
  mov    D182(%rip),%rax
  mov    %rax,(%r12)
  mov    D44(%rip),%rax
  mov    %rax,0x0(%rbp)
  xor    %eax,%eax
  jmp    L212
  nopl   0x0(%rax)
L237:
  lea    D61(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L248
  mov    D44(%rip),%rax
  mov    %rax,(%r12)
  mov    D96(%rip),%rax
  mov    %rax,0x0(%rbp)
  xor    %eax,%eax
  jmp    L212
  nopl   0x0(%rax)
L248:
  lea    D159(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L126
  mov    D96(%rip),%rax
  mov    %rax,(%r12)
  mov    D191(%rip),%rax
  mov    %rax,0x0(%rbp)
  xor    %eax,%eax
  jmp    L212
L126:
  lea    D129(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L49
  mov    D149(%rip),%rax
  mov    %rax,0x0(%rbp)
  mov    D275(%rip),%rax
  mov    %rax,(%r12)
  xor    %eax,%eax
  jmp    L212
L49:
  lea    D104(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L41
  mov    D275(%rip),%rax
  mov    %rax,0x0(%rbp)
  mov    D182(%rip),%rax
  mov    %rax,(%r12)
  xor    %eax,%eax
  jmp    L212
L140:
  call   <__stack_chk_fail@plt>
L41:
  lea    D155(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L187
  mov    D182(%rip),%rax
  mov    %rax,0x0(%rbp)
  mov    D44(%rip),%rax
  mov    %rax,(%r12)
  xor    %eax,%eax
  jmp    L212
L187:
  lea    D254(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L71
  mov    D44(%rip),%rax
  mov    %rax,0x0(%rbp)
  mov    D96(%rip),%rax
  mov    %rax,(%r12)
  xor    %eax,%eax
  jmp    L212
L71:
  lea    D287(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L242
  mov    D96(%rip),%rax
  mov    %rax,0x0(%rbp)
  mov    D191(%rip),%rax
  mov    %rax,(%r12)
  xor    %eax,%eax
  jmp    L212
L242:
  mov    $0x78,%esi
  mov    %rbx,%rdi
  call   <strchr@plt>
  mov    %rax,%r13
  test   %rax,%rax
  je     L124
  sub    %rbx,%r13
  mov    %r13d,%edx
  cmp    $0x1f,%r13d
  jg     L124
  mov    %rsp,%r14
  mov    %rbx,%rsi
  mov    %r14,%rdi
  call   <strncpy@plt>
  movslq %r13d,%rax
  mov    %r12,%rsi
  mov    %r14,%rdi
  movb   $0x0,(%rsp,%rax,1)
  call   <hpgs_parse_length@plt>
  test   %rax,%rax
  jne    L124
  lea    0x1(%r13),%eax
  mov    %rbp,%rsi
  cltq
  lea    (%rbx,%rax,1),%rdi
  call   <hpgs_parse_length@plt>
  test   %rax,%rax
  je     L212
L124:
  or     $0xffffffff,%eax
  jmp    L212
```

tool_calls: name: unpack_data
arguments: label: D28
datatype: string
name: unpack_data
arguments: label: D149
datatype: f64
name: unpack_data
arguments: label: D275
datatype: f64
name: unpack_data
arguments: label: D29
datatype: string
name: unpack_data
arguments: label: D182
datatype: f64
name: unpack_data
arguments: label: D172
datatype: string
name: unpack_data
arguments: label: D44
datatype: f64
name: unpack_data
arguments: label: D61
datatype: string
name: unpack_data
arguments: label: D96
datatype: f64
name: unpack_data
arguments: label: D159
datatype: string
name: unpack_data
arguments: label: D191
datatype: f64
name: unpack_data
arguments: label: D129
datatype: string
name: unpack_data
arguments: label: D104
datatype: string
name: unpack_data
arguments: label: D155
datatype: string
name: unpack_data
arguments: label: D254
datatype: string
name: unpack_data
arguments: label: D287
datatype: string

tool: D28: A4

tool: D149: 595.9108454553883

tool: D275: 842.7451996082275

tool: D29: A3

tool: D182: 1191.8216909107766

tool: D172: A2

tool: D44: 1685.490399216455

tool: D61: A1

tool: D96: 2383.6433818215532

tool: D159: A0

tool: D191: 3370.98079843291

tool: D129: A4l

tool: D104: A3l

tool: D155: A2l

tool: D254: A1l

tool: D287: A0l

assistant: ```c
int hpgs_parse_papersize(const char *str, double *pt_width, double *pt_height) {
  if (strcmp(str, "A4") == 0) {
    *pt_width = 595.91084545538825881889;
    *pt_height = 842.74519960822752756850;
  } else if (strcmp(str, "A3") == 0) {
    *pt_width = 842.74519960822752756850;
    *pt_height = 1191.82169091077651766614;
  } else if (strcmp(str, "A2") == 0) {
    *pt_width = 1191.82169091077651766614;
    *pt_height = 1685.49039921645505516535;
  } else if (strcmp(str, "A1") == 0) {
    *pt_width = 1685.49039921645505516535;
    *pt_height = 2383.64338182155303536062;
  } else if (strcmp(str, "A0") == 0) {
    *pt_width = 2383.64338182155303536062;
    *pt_height = 3370.98079843291011035905;
  } else if (strcmp(str, "A4l") == 0) {
    *pt_height = 595.91084545538825881889;
    *pt_width = 842.74519960822752756850;
  } else if (strcmp(str, "A3l") == 0) {
    *pt_height = 842.74519960822752756850;
    *pt_width = 1191.82169091077651766614;
  } else if (strcmp(str, "A2l") == 0) {
    *pt_height = 1191.82169091077651766614;
    *pt_width = 1685.49039921645505516535;
  } else if (strcmp(str, "A1l") == 0) {
    *pt_height = 1685.49039921645505516535;
    *pt_width = 2383.64338182155303536062;
  } else if (strcmp(str, "A0l") == 0) {
    *pt_height = 2383.64338182155303536062;
    *pt_width = 3370.98079843291011035905;
  } else {
    const char *x = strchr(str, 'x');
    char wstr[32];
    int l;
    if (!x)
      return -1;
    l = x - str;
    if (l > 31)
      return -1;
    strncpy(wstr, str, l);
    wstr[l] = '\0';
    if (hpgs_parse_length(wstr, pt_width))
      return -1;
    if (hpgs_parse_length(str + l + 1, pt_height))
      return -1;
  }
  return 0;
}
```