user: Demonstrate the C code that generates the assembly output below:

```asm
<xmlEncodeCdata>:
  endbr64
  mov    %rdx,%r8
  mov    %ecx,%r9d
  test   %esi,%esi
  je     L633
  movb   $0x3c,(%rdi)
  lea    0x1(%rdi),%rdx
  cmp    $0x1,%esi
  je     L889
  movb   $0x21,0x1(%rdi)
  lea    0x2(%rdi),%rdx
  cmp    $0x2,%esi
  je     L889
  movb   $0x5b,0x2(%rdi)
  lea    0x3(%rdi),%rdx
  cmp    $0x3,%esi
  je     L889
  movb   $0x43,0x3(%rdi)
  lea    0x4(%rdi),%rdx
  cmp    $0x4,%esi
  je     L889
  movb   $0x44,0x4(%rdi)
  lea    0x5(%rdi),%rdx
  cmp    $0x5,%esi
  je     L889
  movb   $0x41,0x5(%rdi)
  lea    0x6(%rdi),%rdx
  cmp    $0x6,%esi
  je     L889
  movb   $0x54,0x6(%rdi)
  lea    0x7(%rdi),%rdx
  cmp    $0x7,%esi
  je     L889
  movb   $0x41,0x7(%rdi)
  lea    0x8(%rdi),%r10
  cmp    $0x8,%esi
  je     L853
  movb   $0x5b,0x8(%rdi)
  lea    0x9(%rdi),%r10
  lea    -0x9(%rsi),%esi
  lea    -0x1(%rcx),%ecx
  test   %r9d,%r9d
  je     L350
L582:
  mov    $0x9,%edx
  mov    $0xffffd9ff,%edi
L568:
  movzbl (%r8),%eax
  cmp    $0x5d,%al
  je     L910
  ja     L488
  cmp    $0x1f,%al
  ja     L615
  bt     %rax,%rdi
  jae    L615
L470:
  mov    $0xffffffff,%eax
  ret
  nopl   0x0(%rax)
L889:
  mov    %rdx,%rdi
L633:
  mov    %rdi,%r10
L853:
  lea    -0x1(%r9),%ecx
  test   %r9d,%r9d
  je     L134
  xor    %esi,%esi
  jmp    L582
  nopw   0x0(%rax,%rax,1)
L488:
  cmp    $0x7f,%al
  je     L470
  test   %al,%al
  jns    L615
  test   %ecx,%ecx
  je     L470
  mov    %eax,%r11d
  and    $0xffffffe0,%r11d
  cmp    $0xc0,%r11b
  je     L505
  cmp    $0x1,%ecx
  je     L470
  mov    %eax,%r11d
  and    $0xfffffff0,%r11d
  cmp    $0xe0,%r11b
  je     L580
  cmp    $0x2,%ecx
  jbe    L843
  mov    %eax,%r11d
  and    $0xfffffff8,%r11d
  cmp    $0xf0,%r11b
  jne    L843
  movzbl 0x1(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  movzbl 0x2(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  movzbl 0x3(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  cmp    $0x3,%esi
  jbe    L282
  mov    %al,(%r10)
  movzbl 0x1(%r8),%eax
  sub    $0x4,%esi
  add    $0x4,%r8
  add    $0x4,%r10
  mov    %al,-0x3(%r10)
  movzbl -0x2(%r8),%eax
  mov    %al,-0x2(%r10)
  movzbl -0x1(%r8),%eax
  mov    %al,-0x1(%r10)
L532:
  add    $0x4,%edx
  sub    $0x4,%r9d
  jmp    L880
  nop
L910:
  cmp    $0x1,%ecx
  jbe    L964
  cmpb   $0x5d,0x1(%r8)
  je     L821
L964:
  test   %esi,%esi
  jne    L733
L102:
  add    $0x1,%r8
  add    $0x1,%edx
  mov    %ecx,%r9d
L880:
  lea    -0x1(%r9),%ecx
  test   %r9d,%r9d
  jne    L568
L408:
  test   %esi,%esi
  je     L209
  movb   $0x5d,(%r10)
  cmp    $0x1,%esi
  je     L209
  movb   $0x5d,0x1(%r10)
  cmp    $0x2,%esi
  je     L209
  movb   $0x3e,0x2(%r10)
L209:
  lea    0x3(%rdx),%eax
  ret
  nopw   0x0(%rax,%rax,1)
L615:
  add    $0x1,%r8
  test   %esi,%esi
  je     L621
  mov    %al,(%r10)
  sub    $0x1,%esi
  add    $0x1,%r10
L621:
  add    $0x1,%edx
  mov    %ecx,%r9d
  jmp    L880
  nopw   0x0(%rax,%rax,1)
L733:
  movb   $0x5d,(%r10)
  sub    $0x1,%esi
  add    $0x1,%r10
  jmp    L102
  nopl   (%rax)
L821:
  cmpb   $0x3e,0x2(%r8)
  jne    L964
  test   %esi,%esi
  je     L155
  movb   $0x5d,(%r10)
  cmp    $0x1,%esi
  je     L961
  movzbl 0x1(%r8),%eax
  mov    %al,0x1(%r10)
  cmp    $0x2,%esi
  je     L691
  movb   $0x5d,0x2(%r10)
  cmp    $0x3,%esi
  je     L755
  movb   $0x5d,0x3(%r10)
  cmp    $0x4,%esi
  je     L901
  movb   $0x3e,0x4(%r10)
  cmp    $0x5,%esi
  je     L859
  movb   $0x3c,0x5(%r10)
  cmp    $0x6,%esi
  je     L320
  movb   $0x21,0x6(%r10)
  cmp    $0x7,%esi
  je     L723
  movb   $0x5b,0x7(%r10)
  cmp    $0x8,%esi
  je     L822
  movb   $0x43,0x8(%r10)
  cmp    $0x9,%esi
  je     L74
  movb   $0x44,0x9(%r10)
  cmp    $0xa,%esi
  je     L907
  movb   $0x41,0xa(%r10)
  cmp    $0xb,%esi
  je     L863
  movb   $0x54,0xb(%r10)
  cmp    $0xc,%esi
  je     L79
  movb   $0x41,0xc(%r10)
  cmp    $0xd,%esi
  je     L1002
  movb   $0x5b,0xd(%r10)
  cmp    $0xe,%esi
  je     L997
  movzbl 0x2(%r8),%eax
  sub    $0xf,%esi
  add    $0xf,%r10
  mov    %al,-0x1(%r10)
L155:
  add    $0x3,%r8
  add    $0xf,%edx
  sub    $0x3,%r9d
  jmp    L880
L505:
  movzbl 0x1(%r8),%r11d
  and    $0xffffffc0,%r11d
  cmp    $0x80,%r11b
  je     L903
  nopl   0x0(%rax)
L843:
  cmp    $0x3,%ecx
  jbe    L546
  mov    %eax,%r11d
  and    $0xfffffffc,%r11d
  cmp    $0xf8,%r11b
  jne    L546
  movzbl 0x1(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  movzbl 0x2(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  movzbl 0x3(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  movzbl 0x4(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  cmp    $0x4,%esi
  jbe    L317
  mov    %al,(%r10)
  movzbl 0x1(%r8),%eax
  sub    $0x5,%esi
  add    $0x5,%r8
  add    $0x5,%r10
  mov    %al,-0x4(%r10)
  movzbl -0x3(%r8),%eax
  mov    %al,-0x3(%r10)
  movzbl -0x2(%r8),%eax
  mov    %al,-0x2(%r10)
  movzbl -0x1(%r8),%eax
  mov    %al,-0x1(%r10)
L238:
  add    $0x5,%edx
  sub    $0x5,%r9d
  jmp    L880
  nopl   (%rax)
L580:
  movzbl 0x1(%r8),%r11d
  and    $0xffffffc0,%r11d
  cmp    $0x80,%r11b
  je     L625
L546:
  cmp    $0x4,%ecx
  jbe    L470
  mov    %eax,%ecx
  and    $0xfffffffe,%ecx
  cmp    $0xfc,%cl
  jne    L470
  movzbl 0x1(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  movzbl 0x2(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  movzbl 0x3(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  movzbl 0x4(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  movzbl 0x5(%r8),%ecx
  and    $0xffffffc0,%ecx
  cmp    $0x80,%cl
  jne    L470
  cmp    $0x5,%esi
  jbe    L329
  mov    %al,(%r10)
  movzbl 0x1(%r8),%eax
  sub    $0x6,%esi
  add    $0x6,%r8
  add    $0x6,%r10
  mov    %al,-0x5(%r10)
  movzbl -0x4(%r8),%eax
  mov    %al,-0x4(%r10)
  movzbl -0x3(%r8),%eax
  mov    %al,-0x3(%r10)
  movzbl -0x2(%r8),%eax
  mov    %al,-0x2(%r10)
  movzbl -0x1(%r8),%eax
  mov    %al,-0x1(%r10)
L230:
  add    $0x6,%edx
  sub    $0x6,%r9d
  jmp    L880
  nopl   0x0(%rax,%rax,1)
L329:
  add    $0x6,%r8
  jmp    L230
L625:
  movzbl 0x2(%r8),%r11d
  and    $0xffffffc0,%r11d
  cmp    $0x80,%r11b
  jne    L546
  cmp    $0x2,%esi
  jbe    L126
  mov    %al,(%r10)
  movzbl 0x1(%r8),%eax
  sub    $0x3,%esi
  add    $0x3,%r8
  add    $0x3,%r10
  mov    %al,-0x2(%r10)
  movzbl -0x1(%r8),%eax
  mov    %al,-0x1(%r10)
L379:
  add    $0x3,%edx
  sub    $0x3,%r9d
  jmp    L880
L903:
  cmp    $0x1,%esi
  jbe    L811
  mov    %al,(%r10)
  movzbl 0x1(%r8),%eax
  sub    $0x2,%esi
  add    $0x2,%r8
  add    $0x2,%r10
  mov    %al,-0x1(%r10)
L911:
  add    $0x2,%edx
  sub    $0x2,%r9d
  jmp    L880
L350:
  mov    $0x9,%edx
  jmp    L408
L134:
  mov    $0x9,%edx
  jmp    L209
L811:
  add    $0x2,%r8
  jmp    L911
L126:
  add    $0x3,%r8
  jmp    L379
L997:
  add    $0xe,%r10
  xor    %esi,%esi
  jmp    L155
L1002:
  add    $0xd,%r10
  xor    %esi,%esi
  jmp    L155
L79:
  add    $0xc,%r10
  xor    %esi,%esi
  jmp    L155
L863:
  add    $0xb,%r10
  xor    %esi,%esi
  jmp    L155
L907:
  add    $0xa,%r10
  xor    %esi,%esi
  jmp    L155
L74:
  add    $0x9,%r10
  xor    %esi,%esi
  jmp    L155
L822:
  add    $0x8,%r10
  xor    %esi,%esi
  jmp    L155
L723:
  add    $0x7,%r10
  xor    %esi,%esi
  jmp    L155
L320:
  add    $0x6,%r10
  xor    %esi,%esi
  jmp    L155
L859:
  add    $0x5,%r10
  xor    %esi,%esi
  jmp    L155
L901:
  add    $0x4,%r10
  xor    %esi,%esi
  jmp    L155
L755:
  add    $0x3,%r10
  xor    %esi,%esi
  jmp    L155
L961:
  add    $0x1,%r10
  xor    %esi,%esi
  jmp    L155
L282:
  add    $0x4,%r8
  jmp    L532
L691:
  add    $0x2,%r10
  xor    %esi,%esi
  jmp    L155
L317:
  add    $0x5,%r8
  jmp    L238
```

assistant: ```c
int xmlEncodeCdata(unsigned char *out, unsigned int olen, const unsigned char *in, unsigned int ilen) {
  static const char b[] = "<![CDATA[";
  static const char e[] = "]]>";
  int len;
  unsigned int i;
  len = 0;
  for (i = 0; i < sizeof(b) - 1; i++, len++)
    if (olen > 0) {
      *out++ = b[i];
      olen--;
    }
  for (; ilen--;)
    switch (*in) {
    case 0x00:
    case 0x01:
    case 0x02:
    case 0x03:
    case 0x04:
    case 0x05:
    case 0x06:
    case 0x07:
    case 0x08:
    case 0x0b:
    case 0x0c:
    case 0x0e:
    case 0x0f:
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
    case 0x1a:
    case 0x1b:
    case 0x1c:
    case 0x1d:
    case 0x1e:
    case 0x1f:
    case 0x7f:
      return (-1);
      break;
    case ']':
      if (ilen > 1 && *(in + 1) == ']' && *(in + 2) == '>') {
        if (olen > 0) {
          *out++ = *in;
          olen--;
        }
        in++, len++;
        if (olen > 0) {
          *out++ = *in;
          olen--;
        }
        in++, len++;
        for (i = 0; i < sizeof(e) - 1; i++, len++)
          if (olen > 0) {
            *out++ = e[i];
            olen--;
          }
        for (i = 0; i < sizeof(b) - 1; i++, len++)
          if (olen > 0) {
            *out++ = b[i];
            olen--;
          }
        if (olen > 0) {
          *out++ = *in;
          olen--;
        }
        in++, len++;
        ilen -= 2;
      } else {
        if (olen > 0) {
          *out++ = *in;
          olen--;
        }
        in++, len++;
      }
      break;
    default:
      if ((*in & 0x80) == 0x00) {
        if (olen > 0) {
          *out++ = *in++;
          olen--;
        } else
          in++;
        len++;
      } else if (ilen > 0 && (*in & 0xe0) == 0xc0 && (*(in + 1) & 0xc0) == 0x80) {
        if (olen > 1) {
          *out++ = *in++;
          *out++ = *in++;
          olen -= 2;
        } else
          in += 2;
        len += 2;
        ilen--;
      } else if (ilen > 1 && (*in & 0xf0) == 0xe0 && (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80) {
        if (olen > 2) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 3;
        } else
          in += 3;
        len += 3;
        ilen -= 2;
      } else if (ilen > 2 && (*in & 0xf8) == 0xf0 && (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80 && (*(in + 3) & 0xc0) == 0x80) {
        if (olen > 3) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 4;
        } else
          in += 4;
        len += 4;
        ilen -= 3;
      } else if (ilen > 3 && (*in & 0xfc) == 0xf8 && (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80 && (*(in + 3) & 0xc0) == 0x80 && (*(in + 4) & 0xc0) == 0x80) {
        if (olen > 4) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 5;
        } else
          in += 5;
        len += 5;
        ilen -= 4;
      } else if (ilen > 4 && (*in & 0xfe) == 0xfc && (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80 && (*(in + 3) & 0xc0) == 0x80 && (*(in + 4) & 0xc0) == 0x80 && (*(in + 5) & 0xc0) == 0x80) {
        if (olen > 5) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 6;
        } else
          in += 6;
        len += 6;
        ilen -= 5;
      } else
        return (-1);
      break;
    }
  for (i = 0; i < sizeof(e) - 1; i++, len++)
    if (olen > 0) {
      *out++ = e[i];
      olen--;
    }
  return (len);
}
```