user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<command_edit>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    -0x5000(%rsp),%r11
L204:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L204
  sub    $0x448,%rsp
  mov    %rdi,0x20(%rsp)
  mov    %esi,0x2c(%rsp)
  mov    %rdx,(%rsp)
  mov    %rcx,0x8(%rsp)
  mov    %r8,0x18(%rsp)
  mov    %r9,0x10(%rsp)
  mov    0x5480(%rsp),%r15
  mov    0x5488(%rsp),%r14
  mov    0x5490(%rsp),%r13
  movss  %xmm0,0x28(%rsp)
  mov    0x5498(%rsp),%r12
  mov    0x54a0(%rsp),%rbp
  mov    0x54a8(%rsp),%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x5438(%rsp)
  xor    %eax,%eax
  lea    0x830(%rsp),%rcx
  lea    0x30(%rsp),%rdx
  sub    $0x8,%rsp
  lea    0x4838(%rsp),%rax
  push   %rax
  lea    0x4040(%rsp),%rax
  push   %rax
  lea    0x3848(%rsp),%rax
  push   %rax
  lea    0x3050(%rsp),%rax
  push   %rax
  lea    0x2858(%rsp),%rax
  push   %rax
  lea    0x2060(%rsp),%rax
  push   %rax
  lea    0x1868(%rsp),%rax
  push   %rax
  lea    0x1070(%rsp),%r9
  lea    0x5070(%rsp),%r8
  call   <database_get_record@plt>
  add    $0x40,%rsp
  test   %rax,%rax
  je     L113
  lea    0x30(%rsp),%rsi
  lea    0x430(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x830(%rsp),%rsi
  lea    0xc30(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x1030(%rsp),%rsi
  lea    0x1430(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x1830(%rsp),%rsi
  lea    0x1c30(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x2030(%rsp),%rsi
  lea    0x2430(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x2830(%rsp),%rsi
  lea    0x2c30(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x3030(%rsp),%rsi
  lea    0x3430(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x3830(%rsp),%rsi
  lea    0x3c30(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x4030(%rsp),%rsi
  lea    0x4430(%rsp),%rdi
  call   <strcpy@plt>
  lea    0x4830(%rsp),%rsi
  lea    0x4c30(%rsp),%rdi
  call   <strcpy@plt>
  mov    $0x0,%eax
  mov    (%rsp),%rcx
  test   %rcx,%rcx
  je     L124
  cmpb   $0x0,(%rcx)
  jne    L192
L124:
  mov    0x8(%rsp),%rdx
  test   %rdx,%rdx
  je     L285
  cmpb   $0x0,(%rdx)
  jne    L199
L285:
  mov    0x10(%rsp),%rcx
  test   %rcx,%rcx
  je     L119
  cmpb   $0x0,(%rcx)
  jne    L161
L119:
  test   %r15,%r15
  je     L330
  cmpb   $0x0,(%r15)
  jne    L309
L330:
  test   %r14,%r14
  je     L254
  cmpb   $0x0,(%r14)
  jne    L234
L254:
  test   %r13,%r13
  je     L189
  cmpb   $0x0,0x0(%r13)
  jne    L273
L189:
  test   %r12,%r12
  je     L38
  cmpb   $0x0,(%r12)
  jne    L42
L38:
  test   %rbp,%rbp
  je     L345
  cmpb   $0x0,0x0(%rbp)
  jne    L85
L345:
  test   %rbx,%rbx
  je     L248
  cmpb   $0x0,(%rbx)
  jne    L73
L248:
  movss  0x28(%rsp),%xmm1
  comiss D2(%rip),%xmm1
  jbe    L305
L143:
  pxor   %xmm0,%xmm0
  cvtss2sd 0x28(%rsp),%xmm0
  lea    0x3430(%rsp),%rdi
  lea    D23(%rip),%rsi
  mov    $0x1,%eax
  call   <sprintf@plt>
L313:
  lea    0x3430(%rsp),%rdi
  call   <atof@plt>
  mov    %eax,%ebx
  lea    0x3030(%rsp),%rdi
  call   <atof@plt>
  lea    0x830(%rsp),%rcx
  lea    0x30(%rsp),%rdx
  sub    $0x8,%rsp
  push   0x20(%rsp)
  lea    0x4c40(%rsp),%rsi
  push   %rsi
  lea    0x4448(%rsp),%rsi
  push   %rsi
  lea    0x3c50(%rsp),%rsi
  push   %rsi
  push   %rbx
  lea    0x2c60(%rsp),%rsi
  push   %rsi
  lea    0x2468(%rsp),%rsi
  push   %rsi
  lea    0x1c70(%rsp),%rsi
  push   %rsi
  lea    0x1478(%rsp),%rsi
  push   %rsi
  lea    0xc80(%rsp),%rsi
  push   %rsi
  lea    0x488(%rsp),%rsi
  push   %rsi
  lea    0x4890(%rsp),%rsi
  push   %rsi
  lea    0x4098(%rsp),%rsi
  push   %rsi
  lea    0x38a0(%rsp),%rsi
  push   %rsi
  push   %rax
  lea    0x28b0(%rsp),%rax
  push   %rax
  lea    0x20b8(%rsp),%rax
  push   %rax
  lea    0x18c0(%rsp),%r9
  lea    0x10c0(%rsp),%r8
  mov    0xbc(%rsp),%esi
  mov    0xb0(%rsp),%rdi
  call   <database_edit_record@plt>
  add    $0x90,%rsp
L20:
  mov    0x5438(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L59
  add    $0x5448,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L113:
  lea    D34(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L20
L192:
  lea    0x430(%rsp),%rdx
  mov    0x18(%rsp),%rsi
  mov    %rcx,%rdi
  call   <convert_date_to_standard@plt>
  mov    $0x1,%eax
  jmp    L124
L199:
  lea    0xc30(%rsp),%rdi
  mov    %rdx,%rsi
  call   <strcpy@plt>
  mov    $0x1,%eax
  jmp    L285
L161:
  lea    0x1430(%rsp),%rdi
  mov    %rcx,%rsi
  call   <strcpy@plt>
  mov    $0x1,%eax
  jmp    L119
L309:
  lea    0x1c30(%rsp),%rdi
  mov    %r15,%rsi
  call   <strcpy@plt>
  mov    $0x1,%eax
  jmp    L330
L234:
  lea    0x2430(%rsp),%rdi
  mov    %r14,%rsi
  call   <strcpy@plt>
  mov    $0x1,%eax
  jmp    L254
L273:
  lea    0x2c30(%rsp),%rdi
  mov    %r13,%rsi
  call   <strcpy@plt>
  mov    $0x1,%eax
  jmp    L189
L42:
  lea    0x3c30(%rsp),%rdi
  mov    %r12,%rsi
  call   <strcpy@plt>
  mov    $0x1,%eax
  jmp    L38
L85:
  lea    0x4430(%rsp),%rdi
  mov    %rbp,%rsi
  call   <strcpy@plt>
  mov    $0x1,%eax
  jmp    L345
L73:
  lea    0x4c30(%rsp),%rdi
  mov    %rbx,%rsi
  call   <strcpy@plt>
  movss  0x28(%rsp),%xmm2
  comiss D2(%rip),%xmm2
  ja     L143
  movw   $0x30,0x3430(%rsp)
  jmp    L313
L305:
  movw   $0x30,0x3430(%rsp)
  test   %eax,%eax
  jne    L313
  mov    $0xffffffff,%eax
  jmp    L20
L59:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: tag: D2
datatype: byte[4]
name: read_data
arguments: tag: D23
datatype: string
name: read_data
arguments: tag: D34
datatype: string

tool: {"D2": [0x00,0x00,0x00,0x00]}

tool: D23: %f

tool: D34: Failed to get transaction


assistant: ```c
int command_edit(char *account, int record_number, char *date, char *timestr, char *date_format, char *status, char *description, char *currency, char *VATrate, float progress, char *supplier, char *receive, char *spend) {
  char prev_date[1024];
  char new_date[1024];
  char prev_timestr[1024];
  char new_timestr[1024];
  char prev_status[1024];
  char new_status[1024];
  char prev_description[1024];
  char new_description[1024];
  char prev_currency[1024];
  char new_currency[1024];
  char prev_VATrate[1024];
  char new_VATrate[1024];
  char prev_progress[1024];
  char new_progress[1024];
  char prev_supplier[1024];
  char new_supplier[1024];
  char prev_receive[1024];
  char new_receive[1024];
  char prev_spend[1024];
  char new_spend[1024];
  char transaction_identifier[1024];
  int changed = 0;
  if (database_get_record(account, record_number, (char *)prev_date, (char *)prev_timestr, (char *)transaction_identifier, (char *)prev_status, (char *)prev_description, (char *)prev_currency, (char *)prev_VATrate, (char *)prev_progress, (char *)prev_supplier, (char *)prev_receive, (char *)prev_spend) == 0) {
    printf("Failed to get transaction\n");
    return 0;
  }
  sprintf(new_date, "%s", prev_date);
  sprintf(new_timestr, "%s", prev_timestr);
  sprintf(new_status, "%s", prev_status);
  sprintf(new_description, "%s", prev_description);
  sprintf(new_currency, "%s", prev_currency);
  sprintf(new_VATrate, "%s", prev_VATrate);
  sprintf(new_progress, "%s", prev_progress);
  sprintf(new_supplier, "%s", prev_supplier);
  sprintf(new_receive, "%s", prev_receive);
  sprintf(new_spend, "%s", prev_spend);
  if (date != 0) {
    if (strlen(date) != 0) {
      convert_date_to_standard(date, date_format, new_date);
      changed = 1;
    }
  }
  if (timestr != 0) {
    if (strlen(timestr) != 0) {
      sprintf((char *)new_timestr, "%s", timestr);
      changed = 1;
    }
  }
  if (status != 0) {
    if (strlen(status) != 0) {
      sprintf((char *)new_status, "%s", status);
      changed = 1;
    }
  }
  if (description != 0) {
    if (strlen(description) != 0) {
      sprintf((char *)new_description, "%s", description);
      changed = 1;
    }
  }
  if (currency != 0) {
    if (strlen(currency) != 0) {
      sprintf((char *)new_currency, "%s", currency);
      changed = 1;
    }
  }
  if (VATrate != 0) {
    if (strlen(VATrate) != 0) {
      sprintf((char *)new_VATrate, "%s", VATrate);
      changed = 1;
    }
  }
  if (supplier != 0) {
    if (strlen(supplier) != 0) {
      sprintf((char *)new_supplier, "%s", supplier);
      changed = 1;
    }
  }
  if (receive != 0) {
    if (strlen(receive) != 0) {
      sprintf((char *)new_receive, "%s", receive);
      changed = 1;
    }
  }
  if (spend != 0) {
    if (strlen(spend) != 0) {
      sprintf((char *)new_spend, "%s", spend);
      changed = 1;
    }
  }
  if (progress > 0) {
    sprintf((char *)new_progress, "%f", progress);
    changed = 1;
  } else
    sprintf(new_progress, "%s", "0");
  if (changed == 0)
    return -1;
  return database_edit_record(account, record_number, (char *)prev_date, (char *)prev_timestr, (char *)prev_status, (char *)prev_description, (char *)prev_currency, (char *)prev_VATrate, atof(prev_progress), (char *)prev_supplier, (char *)prev_receive, (char *)prev_spend, (char *)new_date, (char *)new_timestr, (char *)new_status, (char *)new_description, (char *)new_currency, (char *)new_VATrate, atof(new_progress), (char *)new_supplier, (char *)new_receive, (char *)new_spend, date_format);
}
```