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

```asm
<alpn_desc>:
  endbr64
  push   %rbp
  lea    D144(%rip),%rsi
  mov    %rdi,%rbp
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D134(%rip),%rax
  test   %r8,%r8
  jne    L2
L23:
  pop    %rbp
  ret
  nopl   (%rax)
L2:
  lea    D73(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D74(%rip),%rax
  test   %r8,%r8
  je     L23
  lea    D46(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D2(%rip),%rax
  test   %r8,%r8
  je     L23
  lea    D183(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D58(%rip),%rax
  test   %r8,%r8
  je     L23
  lea    D113(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D151(%rip),%rax
  test   %r8,%r8
  je     L23
  lea    D198(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D190(%rip),%rax
  test   %r8,%r8
  je     L23
  lea    D12(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D16(%rip),%rax
  test   %r8,%r8
  je     L23
  lea    D23(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D42(%rip),%rax
  test   %r8,%r8
  je     L23
  lea    D209(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D28(%rip),%rax
  test   %r8,%r8
  je     L23
  lea    D172(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D100(%rip),%rax
  test   %r8,%r8
  je     L23
  lea    D54(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  lea    D120(%rip),%rax
  test   %r8,%r8
  je     L23
  mov    %rbp,%rdi
  lea    D242(%rip),%rsi
  call   <strcmp@plt>
  lea    D175(%rip),%rdx
  pop    %rbp
  test   %rax,%rax
  lea    D217(%rip),%rax
  cmovne %rdx,%rax
  ret
```

tool_calls: name: read_data
arguments: label: D144
data_type: string
name: read_data
arguments: label: D134
data_type: string
name: read_data
arguments: label: D73
data_type: string
name: read_data
arguments: label: D74
data_type: string
name: read_data
arguments: label: D46
data_type: string
name: read_data
arguments: label: D2
data_type: string
name: read_data
arguments: label: D183
data_type: string
name: read_data
arguments: label: D58
data_type: string
name: read_data
arguments: label: D113
data_type: string
name: read_data
arguments: label: D151
data_type: string
name: read_data
arguments: label: D198
data_type: string
name: read_data
arguments: label: D190
data_type: string
name: read_data
arguments: label: D12
data_type: string
name: read_data
arguments: label: D16
data_type: string
name: read_data
arguments: label: D23
data_type: string
name: read_data
arguments: label: D42
data_type: string
name: read_data
arguments: label: D209
data_type: string
name: read_data
arguments: label: D28
data_type: string
name: read_data
arguments: label: D172
data_type: string
name: read_data
arguments: label: D100
data_type: string
name: read_data
arguments: label: D54
data_type: string
name: read_data
arguments: label: D120
data_type: string
name: read_data
arguments: label: D242
data_type: string
name: read_data
arguments: label: D175
data_type: string
name: read_data
arguments: label: D217
data_type: string

tool: D144: http/1.1

tool: D134: HTTP/1.1

tool: D73: spdy/1

tool: D74: SPDY/1

tool: D46: spdy/2

tool: D2: SPDY/2

tool: D183: spdy/3

tool: D58: SPDY/3

tool: D113: spdy/3.1

tool: D151: SPDY/3.1

tool: D198: stun.turn

tool: D190: Traversal Using Relays around NAT (TURN)

tool: D12: stun.nat-discovery

tool: D16: NAT discovery using Session Traversal Utilities for NAT (STUN)

tool: D23: h2

tool: D42: HTTP/2 over TLS

tool: D209: h2c

tool: D28: HTTP/2 over TCP

tool: D172: webrtc

tool: D100: WebRTC Media and Data

tool: D54: c-webrtc

tool: D120: Confidential WebRTC Media and Data

tool: D242: ftp

tool: 

tool: D217: FTP

assistant: ```c
const char *alpn_desc(char *code) {
  if (strcmp(code, "http/1.1") == 0)
    return "HTTP/1.1";
  else if (strcmp(code, "spdy/1") == 0)
    return "SPDY/1";
  else if (strcmp(code, "spdy/2") == 0)
    return "SPDY/2";
  else if (strcmp(code, "spdy/3") == 0)
    return "SPDY/3";
  else if (strcmp(code, "spdy/3.1") == 0)
    return "SPDY/3.1";
  else if (strcmp(code, "stun.turn") == 0)
    return "Traversal Using Relays around NAT (TURN)";
  else if (strcmp(code, "stun.nat-discovery") == 0)
    return "NAT discovery using Session Traversal Utilities for NAT (STUN)";
  else if (strcmp(code, "h2") == 0)
    return "HTTP/2 over TLS";
  else if (strcmp(code, "h2c") == 0)
    return "HTTP/2 over TCP";
  else if (strcmp(code, "webrtc") == 0)
    return "WebRTC Media and Data";
  else if (strcmp(code, "c-webrtc") == 0)
    return "Confidential WebRTC Media and Data";
  else if (strcmp(code, "ftp") == 0)
    return "FTP";
  else
    return "";
}
```