user: 下面的汇编指令对应的C源代码是什么：

```asm
<IsUTF8Text>:
  endbr64
  test   %esi,%esi
  jle    L207
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%r9
  mov    %esi,%r8d
  mov    $0x0,%edi
  mov    $0x1,%r10d
  mov    $0x6,%ebp
  mov    $0x5,%r13d
  mov    $0x4,%r12d
  mov    $0x3,%ebx
  mov    $0x2,%r11d
L374:
  movslq %edi,%rdx
  lea    (%r9,%rdx,1),%rcx
  movzbl (%rcx),%eax
  mov    %r10d,%esi
  test   %al,%al
  js     L445
L342:
  add    %esi,%edi
  cmp    %edi,%r8d
  jg     L374
  mov    $0x1,%eax
  jmp    L181
L445:
  movsbl %al,%esi
  mov    %eax,%r14d
  and    $0xe0,%r14d
  cmp    $0xc0,%r14d
  je     L352
  mov    %esi,%r14d
  and    $0xf0,%r14d
  cmp    $0xe0,%r14d
  je     L30
  mov    %esi,%r14d
  and    $0xf8,%r14d
  cmp    $0xf0,%r14d
  je     L297
  mov    %esi,%r14d
  and    $0xfc,%r14d
  cmp    $0xf8,%r14d
  je     L275
  and    $0xfe,%esi
  cmp    $0xfc,%esi
  jne    L63
  lea    0x6(%rdi),%esi
  cmp    %r8d,%esi
  jg     L429
  test   $0x1,%al
  jne    L71
  testb  $0x3e,0x1(%r9,%rdx,1)
  je     L155
  mov    %ebp,%esi
  jmp    L379
L352:
  lea    0x2(%rdi),%edx
  cmp    %r8d,%edx
  jg     L409
  test   $0x1e,%al
  je     L321
  mov    %r11d,%esi
L379:
  mov    $0x1,%edx
L20:
  movsbl (%rcx,%rdx,1),%eax
  and    $0xc0,%eax
  cmp    $0x80,%eax
  jne    L175
  add    $0x1,%rdx
  cmp    %edx,%esi
  jg     L20
  jmp    L342
L30:
  lea    0x3(%rdi),%esi
  cmp    %r8d,%esi
  jg     L355
  test   $0xf,%al
  jne    L56
  testb  $0x20,0x1(%r9,%rdx,1)
  je     L148
  mov    %ebx,%esi
  jmp    L379
L297:
  lea    0x4(%rdi),%esi
  cmp    %r8d,%esi
  jg     L250
  test   $0x7,%al
  jne    L433
  testb  $0x30,0x1(%r9,%rdx,1)
  je     L316
  mov    %r12d,%esi
  jmp    L379
L275:
  lea    0x5(%rdi),%esi
  cmp    %r8d,%esi
  jg     L31
  test   $0x3,%al
  jne    L416
  testb  $0x38,0x1(%r9,%rdx,1)
  je     L94
  mov    %r13d,%esi
  jmp    L379
L207:
  mov    $0x1,%eax
  ret
L409:
  mov    $0x0,%eax
  jmp    L181
L321:
  mov    $0x0,%eax
  jmp    L181
L355:
  mov    $0x0,%eax
  jmp    L181
L148:
  mov    $0x0,%eax
  jmp    L181
L250:
  mov    $0x0,%eax
  jmp    L181
L316:
  mov    $0x0,%eax
  jmp    L181
L31:
  mov    $0x0,%eax
  jmp    L181
L94:
  mov    $0x0,%eax
  jmp    L181
L63:
  mov    $0x0,%eax
  jmp    L181
L429:
  mov    $0x0,%eax
  jmp    L181
L155:
  mov    $0x0,%eax
  jmp    L181
L175:
  mov    $0x0,%eax
L181:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L56:
  mov    %ebx,%esi
  jmp    L379
L433:
  mov    %r12d,%esi
  jmp    L379
L416:
  mov    %r13d,%esi
  jmp    L379
L71:
  mov    %ebp,%esi
  jmp    L379
```

assistant: ```c
int IsUTF8Text(const char *utf8, int len) {
  int i;
  int j;
  int clen;
  for (i = 0; i < len; i += clen) {
    if ((0 == ((utf8[i]) & 0x80))) {
      clen = 1;
    } else if ((0xC0 == ((utf8[i]) & 0xE0))) {
      clen = 2;
      if ((i + clen) > len)
        return 0;
      if (0 == (utf8[i] & 0x1E))
        return 0;
    } else if ((0xE0 == ((utf8[i]) & 0xF0))) {
      clen = 3;
      if ((i + clen) > len)
        return 0;
      if ((0xED == utf8[i]) && (0xA0 == (utf8[i + 1] & 0xA0)))
        return 0;
      if ((0 == (utf8[i] & 0x0F)) && (0 == (utf8[i + 1] & 0x20)))
        return 0;
    } else if ((0xF0 == ((utf8[i]) & 0xF8))) {
      clen = 4;
      if ((i + clen) > len)
        return 0;
      if ((0 == (utf8[i] & 0x07)) && (0 == (utf8[i + 1] & 0x30)))
        return 0;
    } else if ((0xF8 == ((utf8[i]) & 0xFC))) {
      clen = 5;
      if ((i + clen) > len)
        return 0;
      if ((0 == (utf8[i] & 0x03)) && (0 == (utf8[i + 1] & 0x38)))
        return 0;
    } else if ((0xFC == ((utf8[i]) & 0xFE))) {
      clen = 6;
      if ((i + clen) > len)
        return 0;
      if ((0 == (utf8[i] & 0x01)) && (0 == (utf8[i + 1] & 0x3E)))
        return 0;
    } else {
      return 0;
    }
    for (j = 1; j < clen; j++) {
      if (!(0x80 == ((utf8[i + j]) & 0xC0)))
        return 0;
    }
  }
  return 1;
}
```