user: What would the C source look like for the assembly code provided here:

```asm
<test_ber_convert>:
  endbr64
  sub    $0x8,%rsp
  mov    $0xc,%r8d
  lea    D51(%rip),%rsi
  mov    %rsi,%rcx
  mov    $0xc,%edx
  lea    D95(%rip),%rdi
  call   <do_ber_convert@plt>
  mov    %rax,%rdx
  mov    $0x0,%eax
  test   %rdx,%rdx
  jne    L35
L12:
  add    $0x8,%rsp
  ret
L35:
  mov    $0x1c,%r8d
  lea    D65(%rip),%rcx
  mov    $0x14,%edx
  lea    D31(%rip),%rsi
  lea    D86(%rip),%rdi
  call   <do_ber_convert@plt>
  mov    %rax,%rdx
  mov    $0x0,%eax
  test   %rdx,%rdx
  je     L12
  mov    $0x30,%r8d
  lea    D6(%rip),%rcx
  mov    $0x18,%edx
  lea    D50(%rip),%rsi
  lea    D57(%rip),%rdi
  call   <do_ber_convert@plt>
  mov    %rax,%rdx
  mov    $0x0,%eax
  test   %rdx,%rdx
  je     L12
  mov    $0x17c,%r8d
  lea    D64(%rip),%rcx
  mov    $0x154,%edx
  lea    D38(%rip),%rsi
  lea    D53(%rip),%rdi
  call   <do_ber_convert@plt>
  test   %rax,%rax
  setne  %al
  movzbl %al,%eax
  jmp    L12
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D51
datatype: string
name: extract_symbolic_data
arguments: data_label: D95
datatype: string
name: extract_symbolic_data
arguments: data_label: D65
datatype: string
name: extract_symbolic_data
arguments: data_label: D31
datatype: string
name: extract_symbolic_data
arguments: data_label: D86
datatype: string
name: extract_symbolic_data
arguments: data_label: D6
datatype: string
name: extract_symbolic_data
arguments: data_label: D50
datatype: string
name: extract_symbolic_data
arguments: data_label: D57
datatype: string
name: extract_symbolic_data
arguments: data_label: D64
datatype: string
name: extract_symbolic_data
arguments: data_label: D38
datatype: string
name: extract_symbolic_data
arguments: data_label: D53
datatype: string

tool: D51: 

tool: D95: kSimpleBER

tool: D65: 0

tool: D31: 0

tool: D86: kIndefBER

tool: D6: $

tool: D50: 

tool: D57: kOctetStringBER

tool: D64: 0

tool: D38: 0

tool: D53: kNSSBER

assistant: ```c
int test_ber_convert(void) {
  static const uint8_t kSimpleBER[] = {0x01, 0x01, 0x00};
  static const uint8_t kIndefBER[] = {0x30, 0x80, 0x01, 0x01, 0x02, 0x00, 0x00};
  static const uint8_t kIndefDER[] = {0x30, 0x03, 0x01, 0x01, 0x02};
  static const uint8_t kOctetStringBER[] = {0x24, 0x80, 0x04, 0x02, 0, 1, 0x04, 0x02, 2, 3, 0x00, 0x00};
  static const uint8_t kOctetStringDER[] = {0x04, 0x04, 0, 1, 2, 3};
  static const uint8_t kNSSBER[] = {
      0x30, 0x80, 0x02, 0x01, 0x03, 0x30, 0x80, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x80, 0x24, 0x80, 0x04, 0x04, 0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x39, 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14, 0x84, 0x98, 0xfc, 0x66, 0x33, 0xee, 0xba, 0xe7, 0x90, 0xc1, 0xb6, 0xe8, 0x8f, 0xfe, 0x1d, 0xc5, 0xa5, 0x97, 0x93, 0x3e, 0x04, 0x10, 0x38, 0x62, 0xc6, 0x44, 0x12, 0xd5, 0x30, 0x00, 0xf8, 0xf2, 0x1b, 0xf0, 0x6e, 0x10, 0x9b, 0xb8, 0x02, 0x02, 0x07, 0xd0, 0x00, 0x00,
  };
  static const uint8_t kNSSDER[] = {
      0x30, 0x53, 0x02, 0x01, 0x03, 0x30, 0x13, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01, 0xa0, 0x06, 0x04, 0x04, 0x01, 0x02, 0x03, 0x04, 0x30, 0x39, 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14, 0x84, 0x98, 0xfc, 0x66, 0x33, 0xee, 0xba, 0xe7, 0x90, 0xc1, 0xb6, 0xe8, 0x8f, 0xfe, 0x1d, 0xc5, 0xa5, 0x97, 0x93, 0x3e, 0x04, 0x10, 0x38, 0x62, 0xc6, 0x44, 0x12, 0xd5, 0x30, 0x00, 0xf8, 0xf2, 0x1b, 0xf0, 0x6e, 0x10, 0x9b, 0xb8, 0x02, 0x02, 0x07, 0xd0,
  };
  return do_ber_convert("kSimpleBER", kSimpleBER, sizeof(kSimpleBER), kSimpleBER, sizeof(kSimpleBER)) && do_ber_convert("kIndefBER", kIndefDER, sizeof(kIndefDER), kIndefBER, sizeof(kIndefBER)) && do_ber_convert("kOctetStringBER", kOctetStringDER, sizeof(kOctetStringDER), kOctetStringBER, sizeof(kOctetStringBER)) && do_ber_convert("kNSSBER", kNSSDER, sizeof(kNSSDER), kNSSBER, sizeof(kNSSBER));
}
```