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

```asm
<find_sas_connector_type>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %edx,-0x8(%rbp)
  cmpl   $0x3f,-0x4(%rbp)
  ja     L133
  mov    -0x4(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D172(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D172(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D52(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D67(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D189(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D54(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D196(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D132(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D65(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D110(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D91(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D141(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D134(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
  mov    -0x8(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    D126(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L89
L133:
  cmpl   $0xf,-0x4(%rbp)
  jg     L20
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x10(%rbp),%rax
  mov    %edx,%ecx
  lea    D112(%rip),%rdx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L76
L20:
  cmpl   $0x1f,-0x4(%rbp)
  jg     L92
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x10(%rbp),%rax
  mov    %edx,%ecx
  lea    D165(%rip),%rdx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L76
L92:
  cmpl   $0x2f,-0x4(%rbp)
  jg     L66
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x10(%rbp),%rax
  mov    %edx,%ecx
  lea    D148(%rip),%rdx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L76
L66:
  cmpl   $0x6f,-0x4(%rbp)
  jg     L74
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x10(%rbp),%rax
  mov    %edx,%ecx
  lea    D184(%rip),%rdx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L76
L74:
  cmpl   $0x7f,-0x4(%rbp)
  jg     L108
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x10(%rbp),%rax
  mov    %edx,%ecx
  lea    D79(%rip),%rdx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  jmp    L76
L108:
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x10(%rbp),%rax
  mov    %edx,%ecx
  lea    D58(%rip),%rdx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
L76:
  nop
L89:
  mov    -0x10(%rbp),%rax
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D52
type_guessed: string
name: unpack_data
arguments: tag: D67
type_guessed: string
name: unpack_data
arguments: tag: D189
type_guessed: string
name: unpack_data
arguments: tag: D54
type_guessed: string
name: unpack_data
arguments: tag: D196
type_guessed: string
name: unpack_data
arguments: tag: D132
type_guessed: string
name: unpack_data
arguments: tag: D65
type_guessed: string
name: unpack_data
arguments: tag: D110
type_guessed: string
name: unpack_data
arguments: tag: D91
type_guessed: string
name: unpack_data
arguments: tag: D141
type_guessed: string
name: unpack_data
arguments: tag: D134
type_guessed: string
name: unpack_data
arguments: tag: D126
type_guessed: string
name: unpack_data
arguments: tag: D112
type_guessed: string
name: unpack_data
arguments: tag: D165
type_guessed: string
name: unpack_data
arguments: tag: D148
type_guessed: string
name: unpack_data
arguments: tag: D184
type_guessed: string
name: unpack_data
arguments: tag: D79
type_guessed: string
name: unpack_data
arguments: tag: D58
type_guessed: string

tool: D52: No information

tool: D67: SAS 4x receptacle (SFF-8470) [max 4 phys]

tool: D189: Mini SAS 4x receptacle (SFF-8088) [max 4 phys]

tool: D54: Vendor specific external connector

tool: D196: SAS 4i plug (SFF-8484) [max 4 phys]

tool: D132: Mini SAS 4i receptacle (SFF-8087) [max 4 phys]

tool: D65: SAS Drive backplane receptacle (SFF-8482) [max 2 phys]

tool: D110: SATA host plug [max 1 phy]

tool: D91: SAS Drive plug (SFF-8482) [max 2 phys]

tool: D141: SATA device plug [max 1 phy]

tool: D134: SAS virtual connector [max 1 phy]

tool: D126: Vendor specific internal connector

tool: D112: unknown external connector type: 0x%x

tool: D165: unknown internal wide connector type: 0x%x

tool: D148: unknown internal connector to end device, type: 0x%x

tool: D184: reserved connector type: 0x%x

tool: D79: vendor specific connector type: 0x%x

tool: D58: unexpected connector type: 0x%x

assistant: ```c
char *find_sas_connector_type(int conn_type, char *buff, int buff_len) {
  switch (conn_type) {
  case 0x0:
    snprintf(buff, buff_len, "No information");
    break;
  case 0x1:
    snprintf(buff, buff_len,
             "SAS 4x receptacle (SFF-8470) "
             "[max 4 phys]");
    break;
  case 0x2:
    snprintf(buff, buff_len,
             "Mini SAS 4x receptacle (SFF-8088) "
             "[max 4 phys]");
    break;
  case 0xf:
    snprintf(buff, buff_len, "Vendor specific external connector");
    break;
  case 0x10:
    snprintf(buff, buff_len, "SAS 4i plug (SFF-8484) [max 4 phys]");
    break;
  case 0x11:
    snprintf(buff, buff_len,
             "Mini SAS 4i receptacle (SFF-8087) "
             "[max 4 phys]");
    break;
  case 0x20:
    snprintf(buff, buff_len,
             "SAS Drive backplane receptacle (SFF-8482) "
             "[max 2 phys]");
    break;
  case 0x21:
    snprintf(buff, buff_len, "SATA host plug [max 1 phy]");
    break;
  case 0x22:
    snprintf(buff, buff_len, "SAS Drive plug (SFF-8482) [max 2 phys]");
    break;
  case 0x23:
    snprintf(buff, buff_len, "SATA device plug [max 1 phy]");
    break;
  case 0x2f:
    snprintf(buff, buff_len, "SAS virtual connector [max 1 phy]");
    break;
  case 0x3f:
    snprintf(buff, buff_len, "Vendor specific internal connector");
    break;
  default:
    if (conn_type < 0x10)
      snprintf(buff, buff_len, "unknown external connector type: 0x%x", conn_type);
    else if (conn_type < 0x20)
      snprintf(buff, buff_len,
               "unknown internal wide connector type: "
               "0x%x",
               conn_type);
    else if (conn_type < 0x30)
      snprintf(buff, buff_len,
               "unknown internal connector to end "
               "device, type: 0x%x",
               conn_type);
    else if (conn_type < 0x70)
      snprintf(buff, buff_len, "reserved connector type: 0x%x", conn_type);
    else if (conn_type < 0x80)
      snprintf(buff, buff_len, "vendor specific connector type: 0x%x", conn_type);
    else
      snprintf(buff, buff_len, "unexpected connector type: 0x%x", conn_type);
    break;
  }
  return buff;
}
```