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

```asm
<decrypt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %ecx,-0x2c(%rbp)
  mov    %r8d,-0x30(%rbp)
  mov    %r9d,-0x34(%rbp)
  mov    -0x28(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x2c(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <KeySchedule@plt>
  cmpl   $0x3e900,-0x2c(%rbp)
  je     L211
  cmpl   $0x3e900,-0x2c(%rbp)
  jg     L90
  cmpl   $0x3e8c0,-0x2c(%rbp)
  je     L131
  cmpl   $0x3e8c0,-0x2c(%rbp)
  jg     L90
  cmpl   $0x3e880,-0x2c(%rbp)
  je     L111
  cmpl   $0x3e880,-0x2c(%rbp)
  jg     L90
  cmpl   $0x2ef00,-0x2c(%rbp)
  je     L26
  cmpl   $0x2ef00,-0x2c(%rbp)
  jg     L90
  cmpl   $0x2eec0,-0x2c(%rbp)
  je     L49
  cmpl   $0x2eec0,-0x2c(%rbp)
  jg     L90
  cmpl   $0x2ee80,-0x2c(%rbp)
  je     L46
  cmpl   $0x2ee80,-0x2c(%rbp)
  jg     L90
  cmpl   $0x1f500,-0x2c(%rbp)
  je     L26
  cmpl   $0x1f500,-0x2c(%rbp)
  jg     L90
  cmpl   $0x1f480,-0x2c(%rbp)
  je     L247
  cmpl   $0x1f4c0,-0x2c(%rbp)
  je     L49
  jmp    L90
L247:
  movl   $0xa,-0x34(%rbp)
  movl   $0x4,-0x30(%rbp)
  jmp    L90
L49:
  movl   $0xc,-0x34(%rbp)
  movl   $0x6,-0x30(%rbp)
  jmp    L90
L46:
  movl   $0xc,-0x34(%rbp)
  movl   $0x4,-0x30(%rbp)
  jmp    L90
L26:
  movl   $0xe,-0x34(%rbp)
  movl   $0x8,-0x30(%rbp)
  jmp    L90
L111:
  movl   $0xe,-0x34(%rbp)
  movl   $0x4,-0x30(%rbp)
  jmp    L90
L131:
  movl   $0xe,-0x34(%rbp)
  movl   $0x6,-0x30(%rbp)
  jmp    L90
L211:
  movl   $0xe,-0x34(%rbp)
  movl   $0x8,-0x30(%rbp)
  nop
L90:
  mov    -0x34(%rbp),%ecx
  mov    -0x2c(%rbp),%edx
  mov    -0x28(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <AddRoundKey@plt>
  mov    -0x30(%rbp),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <InversShiftRow_ByteSub@plt>
  mov    -0x34(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L40
L151:
  mov    -0x4(%rbp),%ecx
  mov    -0x30(%rbp),%edx
  mov    -0x28(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <AddRoundKey_InversMixColumn@plt>
  mov    -0x30(%rbp),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <InversShiftRow_ByteSub@plt>
  subl   $0x1,-0x4(%rbp)
L40:
  cmpl   $0x0,-0x4(%rbp)
  jg     L151
  mov    -0x2c(%rbp),%edx
  mov    -0x28(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    $0x0,%ecx
  mov    %rax,%rdi
  call   <AddRoundKey@plt>
  mov    $0x0,%eax
  leave
  ret
```

assistant: ```c
int decrypt(int statemt[32], int key[32], int word[4][120], int type, int nb, int round) {
  int i;
  KeySchedule(type, key, word);
  switch (type) {
  case 128128:
    round = 10;
    nb = 4;
    break;
  case 128192:
  case 192192:
    round = 12;
    nb = 6;
    break;
  case 192128:
    round = 12;
    nb = 4;
    break;
  case 128256:
  case 192256:
    round = 14;
    nb = 8;
    break;
  case 256128:
    round = 14;
    nb = 4;
    break;
  case 256192:
    round = 14;
    nb = 6;
    break;
  case 256256:
    round = 14;
    nb = 8;
    break;
  }
  AddRoundKey(statemt, word, type, round);
  InversShiftRow_ByteSub(statemt, nb);
#pragma unroll
  for (i = round - 1; i >= 1; --i) {
    AddRoundKey_InversMixColumn(statemt, word, nb, i);
    InversShiftRow_ByteSub(statemt, nb);
  }
  AddRoundKey(statemt, word, type, 0);
  return 0;
}
```