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

```asm
<printText>:
  endbr64
  push   %r15
  mov    $0x10,%r15d
  push   %r14
  sub    %ecx,%r15d
  mov    %rdi,%r14
  push   %r13
  push   %r12
  mov    %ecx,%r12d
  push   %rbp
  push   %rbx
  mov    %esi,%ebx
  sub    $0x18,%rsp
  mov    %rdi,(%rsp)
  mov    %rdx,0x8(%rsp)
  test   %r15d,%r15d
  jle    L62
  xor    %r13d,%r13d
  lea    D23(%rip),%rbp
  nopl   0x0(%rax,%rax,1)
L9:
  xor    %eax,%eax
  mov    %rbp,%rdx
  mov    %ebx,%esi
  mov    %r14,%rdi
  call   <snprintf@plt>
  cmp    %ebx,%eax
  jge    L104
  sub    %eax,%ebx
  add    $0x1,%r13d
  cltq
  add    %rax,%r14
  cmp    %r15d,%r13d
  jne    L9
L62:
  xor    %eax,%eax
  lea    D3(%rip),%rdx
  mov    %ebx,%esi
  mov    %r14,%rdi
  call   <snprintf@plt>
  cmp    %ebx,%eax
  jge    L55
  sub    %eax,%ebx
L130:
  cltq
  lea    (%r14,%rax,1),%rbp
  test   %r12d,%r12d
  jle    L137
  mov    0x8(%rsp),%r13
  lea    -0x1(%r12),%eax
  lea    D6(%rip),%r15
  lea    D48(%rip),%r14
  lea    0x1(%r13,%rax,1),%r12
  nopl   0x0(%rax)
L6:
  movzbl 0x0(%r13),%ecx
  lea    -0x20(%rcx),%eax
  cmp    $0x5e,%al
  ja     L0
L44:
  mov    %r14,%rdx
  mov    %ebx,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <snprintf@plt>
L66:
  cmp    %ebx,%eax
  jge    L120
  sub    %eax,%ebx
  add    $0x1,%r13
  cltq
  add    %rax,%rbp
  cmp    %r13,%r12
  jne    L6
L137:
  lea    D45(%rip),%rdx
  mov    %ebx,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <snprintf@plt>
  lea    -0x1(%rbx),%edx
  cmp    %ebx,%eax
  cmovge %edx,%eax
  add    %ebp,%eax
  sub    (%rsp),%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L104:
  sub    $0x1,%ebx
  add    $0x1,%r13d
  movslq %ebx,%rbx
  add    %rbx,%r14
  mov    $0x1,%ebx
  cmp    %r15d,%r13d
  jne    L9
  jmp    L62
  nopl   0x0(%rax,%rax,1)
L120:
  sub    $0x1,%ebx
  add    $0x1,%r13
  movslq %ebx,%rbx
  add    %rbx,%rbp
  mov    $0x1,%ebx
  cmp    %r13,%r12
  je     L137
  movzbl 0x0(%r13),%ecx
  lea    -0x20(%rcx),%eax
  cmp    $0x5e,%al
  jbe    L44
L0:
  mov    %r15,%rdx
  mov    %ebx,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <snprintf@plt>
  jmp    L66
  nopl   0x0(%rax,%rax,1)
L55:
  lea    -0x1(%rbx),%eax
  mov    $0x1,%ebx
  jmp    L130
```

tool_calls: name: disassemble_data
arguments: label: D23
datatype: string
name: disassemble_data
arguments: label: D3
datatype: string
name: disassemble_data
arguments: label: D6
datatype: string
name: disassemble_data
arguments: label: D48
datatype: string
name: disassemble_data
arguments: label: D45
datatype: string

tool: D23:    

tool: D3:    |

tool: D6: .

tool: D48: %c

tool: D45: |


assistant: ```c
int printText(char *outBuf, int outLen, unsigned char *message, int length) {
  char *startOutBuf = outBuf;
  int len;
  int i;
  for (i = 0; i < 16 - length; ++i) {
    len = snprintf(outBuf, outLen, "   ");
    if (len > outLen - 1)
      len = outLen - 1;
    outBuf += len;
    outLen -= len;
  }
  len = snprintf(outBuf, outLen, "   |");
  if (len > outLen - 1)
    len = outLen - 1;
  outBuf += len;
  outLen -= len;
  for (i = 0; i < length; ++i) {
    unsigned char ch = message[i];
    if (ch >= 32 && ch <= 126) {
      len = snprintf(outBuf, outLen, "%c", ch);
    } else {
      len = snprintf(outBuf, outLen, ".");
    }
    if (len > outLen - 1)
      len = outLen - 1;
    outBuf += len;
    outLen -= len;
  }
  len = snprintf(outBuf, outLen, "|\n");
  if (len > outLen - 1)
    len = outLen - 1;
  outBuf += len;
  outLen -= len;
  return outBuf - startOutBuf;
}
```