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

```asm
<validateExpressionSequence>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    0x4(%rsp),%r14
  lea    0x10(%rsp),%r15
  lea    0x8(%rsp),%r13
  mov    %r14,%rcx
  mov    %r15,%rdx
  mov    %r13,%rsi
  call   <readNextName@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  jne    L195
  mov    0x4(%rsp),%eax
  cmp    $0x8c1ebdba,%eax
  je     L3
  ja     L259
  cmp    $0x1e3e6e58,%eax
  je     L18
  jbe    L57
  cmp    $0x2256798a,%eax
  je     L188
  cmp    $0x57c58bf7,%eax
  jne    L287
  mov    $0x15,%ebx
  xchg   %ax,%ax
L316:
  lea    0x2(%rsp),%rbp
  mov    0x10(%rsp),%rdi
  mov    %r15,%rdx
  mov    %r13,%rsi
  mov    %rbp,%rcx
  call   <readNextValue@plt>
  mov    %rbp,%rcx
  test   %eax,%eax
  jne    L161
  cmpb   $0x6,0x2(%rsp)
  jne    L509
  mov    0x8(%rsp),%rbp
L331:
  mov    %r14,%rcx
  mov    %r15,%rdx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <readNextName@plt>
  test   %eax,%eax
  jne    L74
  lea    0x2(%rsp),%r14
  mov    0x10(%rsp),%rdi
  mov    %r15,%rdx
  mov    %r13,%rsi
  mov    %r14,%rcx
  call   <readNextValue@plt>
  test   %eax,%eax
  jne    L85
  lea    -0x16(%rbx),%eax
  cmp    $0x1,%al
  jbe    L274
  sub    $0x14,%ebx
  movzbl 0x2(%rsp),%eax
  cmp    $0x1,%bl
  jbe    L289
L398:
  cmp    $0x5,%al
  je     L509
  cmp    $0x6,%al
  je     L468
  nopl   0x0(%rax,%rax,1)
L195:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L60
  add    $0x28,%rsp
  mov    %r12d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L259:
  cmp    $0xc26a9cdd,%eax
  je     L432
  jbe    L524
  cmp    $0xd9478a07,%eax
  je     L163
  cmp    $0xdf4edc64,%eax
  jne    L222
L94:
  mov    0x10(%rsp),%rdi
  lea    0x2(%rsp),%rbx
  mov    %r15,%rdx
  mov    %r13,%rsi
  mov    %rbx,%rcx
  call   <readNextValue@plt>
  cmpb   $0x5,0x2(%rsp)
  je     L79
  cs nopw 0x0(%rax,%rax,1)
L509:
  mov    $0x66,%r12d
  jmp    L195
  nopl   0x0(%rax,%rax,1)
L57:
  cmp    $0x1451e652,%eax
  je     L94
  cmp    $0x1642deee,%eax
  jne    L481
  mov    $0x7,%ebx
  jmp    L316
  nopl   0x0(%rax,%rax,1)
L524:
  cmp    $0x944c46f5,%eax
  je     L512
  cmp    $0x9b4c51fa,%eax
  jne    L166
  mov    $0x8,%ebx
  jmp    L316
L287:
  cmp    $0x205a47fb,%eax
  jne    L166
  mov    $0x1,%ebx
  jmp    L316
L222:
  cmp    $0xc96f2510,%eax
  jne    L166
  mov    $0x17,%ebx
  jmp    L316
L481:
  cmp    $0xf42d3e9,%eax
  jne    L166
  mov    $0x5,%ebx
  jmp    L316
  nopl   0x0(%rax,%rax,1)
L512:
  mov    $0x6,%ebx
  jmp    L316
  nopw   0x0(%rax,%rax,1)
L163:
  mov    $0x4,%ebx
  jmp    L316
  nopw   0x0(%rax,%rax,1)
L188:
  mov    $0x14,%ebx
  jmp    L316
  nopw   0x0(%rax,%rax,1)
L85:
  mov    %r14,%rcx
L161:
  mov    0x10(%rsp),%rdi
  mov    %r15,%rdx
  mov    %r13,%rsi
  call   <readNextValue@plt>
  mov    %eax,%r12d
  jmp    L195
  nopl   0x0(%rax,%rax,1)
L74:
  mov    0x8(%rsp),%rdi
  mov    %r14,%rcx
  mov    %r15,%rdx
  mov    %r13,%rsi
  call   <readNextName@plt>
  mov    %eax,%r12d
  jmp    L195
  nopl   0x0(%rax,%rax,1)
L432:
  mov    $0x16,%ebx
  jmp    L316
  nopw   0x0(%rax,%rax,1)
L18:
  mov    $0x3,%ebx
  jmp    L316
  nopw   0x0(%rax,%rax,1)
L289:
  cmp    $0x1,%al
  jne    L509
  mov    0x10(%rsp),%rsi
  mov    0x8(%rsp),%rdi
  call   <validateRegex@plt>
  test   %eax,%eax
  jne    L337
  movzbl 0x2(%rsp),%eax
  jmp    L398
  nopl   0x0(%rax)
L79:
  mov    0x8(%rsp),%rdi
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r13,%rsi
  call   <readNextArrayValue@plt>
  test   %eax,%eax
  jne    L311
L452:
  mov    0x8(%rsp),%rdi
  call   <validateExpressionSequence>
  test   %eax,%eax
  jne    L337
  mov    0x10(%rsp),%rdi
  mov    %rbx,%rcx
  mov    %r15,%rdx
  mov    %r13,%rsi
  call   <readNextArrayValue@plt>
  test   %eax,%eax
  je     L452
L311:
  cmp    $0x64,%eax
  cmovne %eax,%r12d
  jmp    L195
  nopl   0x0(%rax)
L468:
  mov    0x8(%rsp),%rdi
  lea    0x3(%rsp),%rsi
  movb   $0x0,0x3(%rsp)
  call   <validateExpression@plt>
  mov    %eax,%r12d
  jmp    L195
  nopl   0x0(%rax)
L3:
  mov    $0x2,%ebx
  jmp    L316
L166:
  mov    %rbp,0x8(%rsp)
  mov    $0x5,%ebx
  jmp    L331
  nopl   0x0(%rax)
L274:
  mov    0x8(%rsp),%rdi
  call   <validateExpressionSequence>
  mov    %eax,%r12d
  jmp    L195
  nopw   0x0(%rax,%rax,1)
L337:
  mov    %eax,%r12d
  jmp    L195
L60:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
unsigned int validateExpressionSequence(char *rule) {
  char *first;
  char *last;
  unsigned char type;
  unsigned char operator= 0;
  unsigned int hash;
  unsigned int result = readNextName(rule, &first, &last, &hash);
  if (result != 0) {
    return result;
  }
  switch (hash) {
  case 256037865:
    operator= 0x05;
    break;
  case 2488026869:
    operator= 0x06;
    break;
  case 507407960:
    operator= 0x03;
    break;
  case 3645344263:
    operator= 0x04;
    break;
  case 373481198:
    operator= 0x07;
    break;
  case 2605470202:
    operator= 0x08;
    break;
  case 576092554:
    operator= 0x14;
    break;
  case 1472564215:
    operator= 0x15;
    break;
  case 3261766877:
    operator= 0x16;
    break;
  case 3379504400:
    operator= 0x17;
    break;
  case 542787579:
    operator= 0x01;
    break;
  case 2350824890:
    operator= 0x02;
    break;
  case 3746487396:
  case 340911698:
    result = readNextValue(last, &first, &last, &type);
    if (type != 0x05) {
      return 102;
    }
    result = readNextArrayValue(first, &first, &last, &type);
    while (result == 0) {
      do {
        unsigned int result = validateExpressionSequence(first);
        if (result != 0) {
          return result;
        }
      } while (0);
      result = readNextArrayValue(last, &first, &last, &type);
    }
    return (result == 100 ? 0 : result);
  }
  if (operator== 0) {
    operator= 0x05;
    first = rule;
  } else {
    do {
      if (readNextValue(last, &first, &last, &type) != 0) {
        return readNextValue(last, &first, &last, &type);
      }
    } while (0);
    if (type != 0x06) {
      return 102;
    }
  }
  do {
    if (readNextName(first, &first, &last, &hash) != 0) {
      return readNextName(first, &first, &last, &hash);
    }
  } while (0);
  do {
    if (readNextValue(last, &first, &last, &type) != 0) {
      return readNextValue(last, &first, &last, &type);
    }
  } while (0);
  if (operator== 0x16 || operator== 0x17) {
    result = validateExpressionSequence(first);
    return result;
  }
  if (operator== 0x14 || operator== 0x15) {
    if (type != 0x01) {
      return 102;
    }
    do {
      unsigned int result = validateRegex(first, last);
      if (result != 0) {
        return result;
      }
    } while (0);
  }
  if (type == 0x05) {
    return 102;
  }
  if (type == 0x06) {
    unsigned char expressionType = 0;
    do {
      unsigned int result = validateExpression(first, &expressionType);
      if (result != 0) {
        return result;
      }
    } while (0);
  }
  return 0;
}
```