user: 这段汇编代码用C语言表示是什么样的？

```asm
<RandomFunc>:
  endbr64
  sub    $0x18,%rsp
  mov    (%rdi),%rcx
  mov    %rsi,%rdx
  mov    0x8(%rdi),%rsi
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  mov    %rcx,%rax
  xor    $0x29be1cdb,%rax
  mov    %rax,(%rsp)
  test   %rsi,%rsi
  je     L27
  cmp    $0x29be1cdb,%rcx
  je     L112
  mov    %rax,%rcx
  shr    $0x2,%rcx
  and    $0x6,%ecx
  or     $0x1,%ecx
  shl    %cl,%rax
  mov    %rax,(%rsp)
L112:
  movzbl 0x3(%rsp),%eax
  movzbl 0x1(%rsp),%ecx
  mov    %al,0x1(%rsp)
  mov    %cl,0x3(%rsp)
  mov    (%rsp),%rdi
  mov    %rdi,%rax
  cmp    $0x2,%rsi
  ja     L59
L27:
  or     $0xea3a10e,%rax
  mov    %rax,(%rdx)
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L55
  add    $0x18,%rsp
  ret
  nopw   0x0(%rax,%rax,1)
L59:
  cmp    $0x2,%rdi
  je     L91
  mov    %rdi,%rcx
  shr    $0x2,%rcx
  and    $0x6,%ecx
  or     $0x1,%ecx
  shl    %cl,%rax
  mov    %rax,0x10(%rsp)
  movzbl %ah,%ecx
  cmp    $0x1,%rax
  jbe    L29
  movzbl 0x13(%rsp),%eax
  mov    %cl,0x13(%rsp)
  mov    %al,0x11(%rsp)
L69:
  mov    %rdi,%rax
  cmp    $0x4,%rsi
  jbe    L27
  mov    %rsp,%rdi
  mov    $0x4,%r8d
L43:
  cmp    %r8,%rax
  je     L37
  mov    %rax,%rcx
  shr    $0x2,%rcx
  and    $0x6,%ecx
  or     $0x1,%ecx
  shl    %cl,%rax
  mov    %rax,0x20(%rdi)
L56:
  movzbl 0x21(%rdi),%ecx
  cmp    %rax,%r8
  jbe    L129
  movzbl 0x22(%rdi),%eax
  mov    %cl,0x22(%rdi)
  add    $0x2,%r8
  add    $0x10,%rdi
  movzbl 0x15(%rdi),%ecx
  mov    %al,0x11(%rdi)
  movzbl 0x13(%rdi),%eax
  mov    %cl,0x13(%rdi)
  mov    %al,0x15(%rdi)
  mov    (%rsp),%rax
  cmp    %r8,%rsi
  ja     L43
  jmp    L27
  nopw   0x0(%rax,%rax,1)
L91:
  movq   $0x1,(%rsp)
  movzbl 0x11(%rsp),%ecx
  mov    $0x1,%edi
L29:
  movzbl 0x12(%rsp),%eax
  mov    %cl,0x12(%rsp)
  movzbl 0x15(%rsp),%ecx
  mov    %al,0x11(%rsp)
  movzbl 0x13(%rsp),%eax
  mov    %cl,0x13(%rsp)
  mov    %al,0x15(%rsp)
  jmp    L69
  cs nopw 0x0(%rax,%rax,1)
L129:
  movzbl 0x23(%rdi),%eax
  add    $0x2,%r8
  mov    %cl,0x23(%rdi)
  add    $0x10,%rdi
  mov    %al,0x11(%rdi)
  mov    (%rsp),%rax
  cmp    %rsi,%r8
  jb     L43
  jmp    L27
  nopl   0x0(%rax)
L37:
  mov    %r8,%rcx
  mov    %r8,%rax
  shr    %rcx
  and    $0x6,%ecx
  or     $0x1,%ecx
  shr    %cl,%rax
  mov    %rax,(%rsp)
  jmp    L56
L55:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void RandomFunc(unsigned long input[1], unsigned long output[1]) {
  unsigned long state[1];
  unsigned long local1;
  char copy11;
  char copy12;
  {
    state[0UL] = input[0UL] ^ 700325083UL;
    local1 = 0UL;
    while (local1 < input[1UL]) {
      if (state[0UL] != local1) {
        state[local1] = state[0UL] << (((state[0UL] >> 2UL) & 7UL) | 1UL);
      } else {
        state[0UL] = state[local1] >> (((state[local1] >> 1UL) & 7UL) | 1UL);
      }
      if (state[0UL] < local1) {
        copy11 = *((char *)(&state[local1]) + 2);
        *((char *)(&state[local1]) + 2) = *((char *)(&state[local1]) + 1);
        *((char *)(&state[local1]) + 1) = copy11;
        copy11 = *((char *)(&state[local1]) + 3);
        *((char *)(&state[local1]) + 3) = *((char *)(&state[local1]) + 5);
        *((char *)(&state[local1]) + 5) = copy11;
      } else {
        copy12 = *((char *)(&state[local1]) + 3);
        *((char *)(&state[local1]) + 3) = *((char *)(&state[local1]) + 1);
        *((char *)(&state[local1]) + 1) = copy12;
      }
      local1 += 2UL;
    }
    output[0UL] = state[0UL] | 245604622UL;
  }
}
```