user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<test_urldecode>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D83(%rip),%rax
  mov    %rax,-0x98(%rbp)
  movq   $0x0,-0x90(%rbp)
  movq   $0x0,-0x88(%rbp)
  movq   $0x0,-0x80(%rbp)
  movq   $0x0,-0x78(%rbp)
  movq   $0x0,-0x70(%rbp)
  movq   $0x0,-0x68(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x58(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  mov    -0x98(%rbp),%rcx
  lea    -0x90(%rbp),%rax
  mov    $0x80,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <urldecode@plt>
  test   %eax,%eax
  jne    L18
  lea    D85(%rip),%rax
  mov    %rax,%rdx
  lea    D136(%rip),%rax
  mov    %rax,%rsi
  lea    D126(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D159(%rip),%rax
  mov    %rax,%rsi
  lea    D102(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L38
L18:
  lea    -0x90(%rbp),%rax
  lea    D107(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L49
  lea    D146(%rip),%rax
  mov    %rax,%rdx
  lea    D21(%rip),%rax
  mov    %rax,%rsi
  lea    D51(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x90(%rbp),%rax
  mov    %rax,%rsi
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D107(%rip),%rax
  mov    %rax,%rsi
  lea    D111(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D159(%rip),%rax
  mov    %rax,%rsi
  lea    D102(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L38
L49:
  lea    D159(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L38:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L21
  call   <__stack_chk_fail@plt>
L21:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D83
type_guessed: string
name: retrieve_data
arguments: label: D85
type_guessed: string
name: retrieve_data
arguments: label: D136
type_guessed: string
name: retrieve_data
arguments: label: D126
type_guessed: string
name: retrieve_data
arguments: label: D159
type_guessed: string
name: retrieve_data
arguments: label: D102
type_guessed: string
name: retrieve_data
arguments: label: D107
type_guessed: string
name: retrieve_data
arguments: label: D146
type_guessed: string
name: retrieve_data
arguments: label: D21
type_guessed: string
name: retrieve_data
arguments: label: D51
type_guessed: string
name: retrieve_data
arguments: label: D20
type_guessed: string
name: retrieve_data
arguments: label: D111
type_guessed: string
name: retrieve_data
arguments: label: D29
type_guessed: string

tool: D83: %26bla+r

tool: D85: Failed to decode.

tool: D136: urldecode(dest, param, 128)

tool: D126: [%s] failed: %s


tool: D159: test_urldecode

tool: D102: %s -> FAILED


tool: D107: &bla r

tool: D146: "&bla r"

tool: D21: dest

tool: D51: expected [%s == %s]


tool: D20:  a = "%s"


tool: D111:  b = "%s"


tool: D29: %s -> OK


assistant: ```c
void test_urldecode() {
  char *param = "%26bla+r";
  char dest[128] = {
      0,
  };
  do {
    if (!urldecode(dest, param, 128)) {
      printf("[%s] failed: %s\n", "urldecode(dest, param, 128)", "Failed to decode.");
      printf("%s -> FAILED\n", __func__);
      return;
    }
  } while (0);
  do {
    if (strcmp(dest, "&bla r")) {
      printf("expected [%s == %s]\n", "dest", "\"&bla r\"");
      printf(" a = \"%s\"\n", dest);
      printf(" b = \"%s\"\n", "&bla r");
      printf("%s -> FAILED\n", __func__);
      return;
    }
  } while (0);
  printf("%s -> OK\n", __func__);
}
```