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

```asm
<shiftByOffset>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,%eax
  mov    %esi,-0x18(%rbp)
  mov    %al,-0x14(%rbp)
  movsbl -0x14(%rbp),%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0x40,-0x4(%rbp)
  jle    L206
  cmpl   $0x5a,-0x4(%rbp)
  jg     L206
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  cmp    $0x40,%eax
  jle    L127
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  cmp    $0x5a,%eax
  jg     L127
  mov    -0x18(%rbp),%eax
  add    %eax,-0x4(%rbp)
  jmp    L197
L127:
  mov    -0x18(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  cmp    $0x5a,%eax
  jle    L15
  cmpl   $0x0,-0x18(%rbp)
  jle    L221
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  sub    $0x1a,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L197
L221:
  mov    -0x4(%rbp),%eax
  sub    -0x18(%rbp),%eax
  sub    $0x1a,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L197
L15:
  mov    -0x18(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  cmp    $0x40,%eax
  jg     L197
  cmpl   $0x0,-0x18(%rbp)
  jle    L192
  mov    $0x41,%eax
  sub    -0x4(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  add    %eax,%edx
  mov    $0x5b,%eax
  sub    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L197
L192:
  mov    $0x41,%eax
  sub    -0x4(%rbp),%eax
  sub    -0x18(%rbp),%eax
  mov    %eax,%edx
  mov    $0x5b,%eax
  sub    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L197
L206:
  cmpl   $0x60,-0x4(%rbp)
  jle    L19
  cmpl   $0x7a,-0x4(%rbp)
  jg     L19
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  cmp    $0x60,%eax
  jle    L66
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  cmp    $0x7a,%eax
  jg     L66
  mov    -0x18(%rbp),%eax
  add    %eax,-0x4(%rbp)
  jmp    L19
L66:
  mov    -0x18(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  cmp    $0x7a,%eax
  jle    L170
  cmpl   $0x0,-0x18(%rbp)
  jle    L116
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  sub    $0x1a,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L19
L116:
  mov    -0x4(%rbp),%eax
  sub    -0x18(%rbp),%eax
  sub    $0x1a,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L19
L170:
  mov    -0x18(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  cmp    $0x60,%eax
  jg     L19
  cmpl   $0x0,-0x18(%rbp)
  jle    L178
  mov    $0x61,%eax
  sub    -0x4(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  add    %eax,%edx
  mov    $0x7b,%eax
  sub    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L19
L178:
  mov    $0x61,%eax
  sub    -0x4(%rbp),%eax
  sub    -0x18(%rbp),%eax
  mov    %eax,%edx
  mov    $0x7b,%eax
  sub    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L19
L197:
  nop
L19:
  mov    -0x4(%rbp),%eax
  pop    %rbp
  ret
```

assistant: ```c
char shiftByOffset(const char a, const int offset) {
  int c = (int)a;
  if (65 <= c && c <= 90) {
    if (65 <= c + offset && c + offset <= 90)
      c = c + offset;
    else if (90 < offset + c) {
      if (offset > 0)
        c = 64 + (c + offset - 90);
      else
        c = 64 + (c - offset - 90);
    } else if (offset + c < 65) {
      if (offset > 0)
        c = 91 - (65 - c + offset);
      else
        c = 91 - (65 - c - offset);
    }
  } else if (97 <= c && c <= 122) {
    if (97 <= c + offset && c + offset <= 122)
      c = c + offset;
    else if (122 < offset + c) {
      if (offset > 0)
        c = 96 + (c + offset - 122);
      else
        c = 96 + (c - offset - 122);
    } else if (offset + c < 97) {
      if (offset > 0)
        c = 123 - (97 - c + offset);
      else
        c = 123 - (97 - c - offset);
    }
  }
  return (char)c;
}
```