user: 请从给定的汇编指令推导出C源代码:

```asm
<qspToWLower>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  cmpl   $0xff,-0x14(%rbp)
  jg     L1813
  cmpl   $0x40,-0x14(%rbp)
  jle    L2004
  cmpl   $0x5a,-0x14(%rbp)
  jle    L17
L2004:
  cmpl   $0xbf,-0x14(%rbp)
  jle    L44
  cmpl   $0xde,-0x14(%rbp)
  jg     L44
L17:
  mov    -0x14(%rbp),%eax
  add    $0x20,%eax
  jmp    L1447
L44:
  cmpl   $0xb5,-0x14(%rbp)
  jne    L561
  mov    $0x3bc,%eax
  jmp    L1447
L561:
  mov    -0x14(%rbp),%eax
  jmp    L1447
L1813:
  cmpl   $0x2ff,-0x14(%rbp)
  jg     L836
  cmpl   $0xff,-0x14(%rbp)
  jle    L355
  cmpl   $0x12e,-0x14(%rbp)
  jle    L837
L355:
  cmpl   $0x131,-0x14(%rbp)
  jle    L527
  cmpl   $0x136,-0x14(%rbp)
  jle    L837
L527:
  cmpl   $0x149,-0x14(%rbp)
  jle    L656
  cmpl   $0x176,-0x14(%rbp)
  jle    L837
L656:
  cmpl   $0x1dd,-0x14(%rbp)
  jle    L1857
  cmpl   $0x1ee,-0x14(%rbp)
  jle    L837
L1857:
  cmpl   $0x1f7,-0x14(%rbp)
  jle    L1429
  cmpl   $0x21e,-0x14(%rbp)
  jle    L837
L1429:
  cmpl   $0x221,-0x14(%rbp)
  jle    L1512
  cmpl   $0x232,-0x14(%rbp)
  jg     L1512
L837:
  mov    -0x14(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L503
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L1447
L503:
  mov    -0x14(%rbp),%eax
  jmp    L1447
L1512:
  cmpl   $0x138,-0x14(%rbp)
  jle    L872
  cmpl   $0x147,-0x14(%rbp)
  jle    L2097
L872:
  cmpl   $0x1cc,-0x14(%rbp)
  jle    L1198
  cmpl   $0x91db,-0x14(%rbp)
  jg     L1198
L2097:
  mov    -0x14(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L1880
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L1447
L1880:
  mov    -0x14(%rbp),%eax
  jmp    L1447
L1198:
  cmpl   $0x177,-0x14(%rbp)
  jle    L1787
  cmpl   $0x1f7,-0x14(%rbp)
  jg     L1787
  cmpl   $0x1f7,-0x14(%rbp)
  je     L1381
  cmpl   $0x1f7,-0x14(%rbp)
  jg     L1132
  cmpl   $0x1f6,-0x14(%rbp)
  je     L1295
  cmpl   $0x1f6,-0x14(%rbp)
  jg     L1132
  cmpl   $0x1f4,-0x14(%rbp)
  je     L803
  cmpl   $0x1f4,-0x14(%rbp)
  jg     L1132
  cmpl   $0x1f2,-0x14(%rbp)
  je     L803
  cmpl   $0x1f2,-0x14(%rbp)
  jg     L1132
  cmpl   $0x1b2,-0x14(%rbp)
  jg     L1047
  cmpl   $0x178,-0x14(%rbp)
  jge    L1167
  jmp    L1132
L1290:
  mov    -0x14(%rbp),%eax
  sub    $0x1b3,%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  movabs $0x15555240225,%rdx
  and    %rax,%rdx
  test   %rdx,%rdx
  setne  %dl
  test   %dl,%dl
  jne    L803
  movabs $0x4000000000920000,%rdx
  and    %rax,%rdx
  test   %rdx,%rdx
  setne  %dl
  test   %dl,%dl
  jne    L1445
  and    $0x10,%eax
  test   %rax,%rax
  setne  %al
  test   %al,%al
  jne    L690
  jmp    L1132
L1167:
  mov    -0x14(%rbp),%eax
  sub    $0x178,%eax
  cmp    $0x3a,%eax
  ja     L1132
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D12(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D12(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
L1047:
  cmpl   $0x1f1,-0x14(%rbp)
  jg     L1132
  cmpl   $0x1b3,-0x14(%rbp)
  jge    L1290
  jmp    L1132
  movl   $0xff,-0xc(%rbp)
  jmp    L1483
L803:
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L1483
  movl   $0x73,-0xc(%rbp)
  jmp    L1483
  movl   $0x253,-0xc(%rbp)
  jmp    L1483
  movl   $0x254,-0xc(%rbp)
  jmp    L1483
  movl   $0x256,-0xc(%rbp)
  jmp    L1483
  movl   $0x257,-0xc(%rbp)
  jmp    L1483
  movl   $0x1dd,-0xc(%rbp)
  jmp    L1483
  movl   $0x259,-0xc(%rbp)
  jmp    L1483
  movl   $0x25b,-0xc(%rbp)
  jmp    L1483
  movl   $0x260,-0xc(%rbp)
  jmp    L1483
  movl   $0x263,-0xc(%rbp)
  jmp    L1483
  movl   $0x269,-0xc(%rbp)
  jmp    L1483
  movl   $0x268,-0xc(%rbp)
  jmp    L1483
  movl   $0x26f,-0xc(%rbp)
  jmp    L1483
  movl   $0x272,-0xc(%rbp)
  jmp    L1483
  movl   $0x275,-0xc(%rbp)
  jmp    L1483
  movl   $0x280,-0xc(%rbp)
  jmp    L1483
  movl   $0x283,-0xc(%rbp)
  jmp    L1483
  movl   $0x288,-0xc(%rbp)
  jmp    L1483
  movl   $0x28a,-0xc(%rbp)
  jmp    L1483
  movl   $0x28b,-0xc(%rbp)
  jmp    L1483
L690:
  movl   $0x292,-0xc(%rbp)
  jmp    L1483
L1445:
  mov    -0x14(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L1483
L1295:
  movl   $0x195,-0xc(%rbp)
  jmp    L1483
L1381:
  movl   $0x1bf,-0xc(%rbp)
  jmp    L1483
L1132:
  movl   $0x0,-0xc(%rbp)
L1483:
  cmpl   $0x0,-0xc(%rbp)
  je     L1787
  mov    -0xc(%rbp),%eax
  jmp    L1447
L1787:
  cmpl   $0x220,-0x14(%rbp)
  jne    L821
  mov    $0x19e,%eax
  jmp    L1447
L836:
  cmpl   $0x3ff,-0x14(%rbp)
  jg     L1139
  cmpl   $0x390,-0x14(%rbp)
  jle    L2099
  cmpl   $0x3ab,-0x14(%rbp)
  jg     L2099
  cmpl   $0x3a2,-0x14(%rbp)
  je     L2099
  mov    -0x14(%rbp),%eax
  add    $0x20,%eax
  jmp    L1447
L2099:
  cmpl   $0x3d7,-0x14(%rbp)
  jle    L1642
  cmpl   $0x3ee,-0x14(%rbp)
  jg     L1642
  mov    -0x14(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L1642
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L1447
L1642:
  cmpl   $0x385,-0x14(%rbp)
  jle    L726
  cmpl   $0x3f5,-0x14(%rbp)
  jg     L726
  mov    -0x14(%rbp),%eax
  sub    $0x386,%eax
  cmp    $0x6f,%eax
  ja     L1530
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D2(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D2(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  movl   $0x3ac,-0x8(%rbp)
  jmp    L1061
  movl   $0x3ad,-0x8(%rbp)
  jmp    L1061
  movl   $0x3ae,-0x8(%rbp)
  jmp    L1061
  movl   $0x3af,-0x8(%rbp)
  jmp    L1061
  movl   $0x3cc,-0x8(%rbp)
  jmp    L1061
  movl   $0x3cd,-0x8(%rbp)
  jmp    L1061
  movl   $0x38f,-0x8(%rbp)
  jmp    L1061
  movl   $0x3c3,-0x8(%rbp)
  jmp    L1061
  movl   $0x3b2,-0x8(%rbp)
  jmp    L1061
  movl   $0x3b8,-0x8(%rbp)
  jmp    L1061
  movl   $0x3c6,-0x8(%rbp)
  jmp    L1061
  movl   $0x3c0,-0x8(%rbp)
  jmp    L1061
  movl   $0x3ba,-0x8(%rbp)
  jmp    L1061
  movl   $0x3c1,-0x8(%rbp)
  jmp    L1061
  movl   $0x3c3,-0x8(%rbp)
  jmp    L1061
  movl   $0x3b8,-0x8(%rbp)
  jmp    L1061
  movl   $0x3b5,-0x8(%rbp)
  jmp    L1061
L1530:
  movl   $0x0,-0x8(%rbp)
L1061:
  cmpl   $0x0,-0x8(%rbp)
  je     L726
  mov    -0x8(%rbp),%eax
  jmp    L1447
L726:
  cmpl   $0x345,-0x14(%rbp)
  jne    L821
  mov    $0x3b9,%eax
  jmp    L1447
L1139:
  cmpl   $0x4ff,-0x14(%rbp)
  jg     L1104
  cmpl   $0x3ff,-0x14(%rbp)
  jle    L1434
  cmpl   $0x40f,-0x14(%rbp)
  jg     L1434
  mov    -0x14(%rbp),%eax
  add    $0x50,%eax
  jmp    L1447
L1434:
  cmpl   $0x40f,-0x14(%rbp)
  jle    L177
  cmpl   $0x42f,-0x14(%rbp)
  jg     L177
  mov    -0x14(%rbp),%eax
  add    $0x20,%eax
  jmp    L1447
L177:
  cmpl   $0x45f,-0x14(%rbp)
  jle    L1326
  cmpl   $0x480,-0x14(%rbp)
  jle    L1253
L1326:
  cmpl   $0x489,-0x14(%rbp)
  jle    L2037
  cmpl   $0x4be,-0x14(%rbp)
  jle    L1253
L2037:
  cmpl   $0x4cf,-0x14(%rbp)
  jle    L207
  cmpl   $0x4f4,-0x14(%rbp)
  jle    L1253
L207:
  cmpl   $0x4f8,-0x14(%rbp)
  jne    L206
L1253:
  mov    -0x14(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L667
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L1447
L667:
  mov    -0x14(%rbp),%eax
  jmp    L1447
L206:
  cmpl   $0x4c0,-0x14(%rbp)
  jle    L821
  cmpl   $0x4cd,-0x14(%rbp)
  jg     L821
  mov    -0x14(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L2007
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L1447
L2007:
  mov    -0x14(%rbp),%eax
  jmp    L1447
L1104:
  cmpl   $0x1eff,-0x14(%rbp)
  jg     L1176
  cmpl   $0x4ff,-0x14(%rbp)
  jle    L270
  cmpl   $0x50e,-0x14(%rbp)
  jle    L884
L270:
  cmpl   $0x1dff,-0x14(%rbp)
  jle    L1081
  cmpl   $0x1e94,-0x14(%rbp)
  jle    L884
L1081:
  cmpl   $0x1e9f,-0x14(%rbp)
  jle    L1865
  cmpl   $0x1ef8,-0x14(%rbp)
  jg     L1865
L884:
  mov    -0x14(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L1264
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  jmp    L1447
L1264:
  mov    -0x14(%rbp),%eax
  jmp    L1447
L1865:
  cmpl   $0x530,-0x14(%rbp)
  jle    L1566
  cmpl   $0x556,-0x14(%rbp)
  jg     L1566
  mov    -0x14(%rbp),%eax
  add    $0x30,%eax
  jmp    L1447
L1566:
  cmpl   $0x1e9b,-0x14(%rbp)
  jne    L821
  mov    $0x1e61,%eax
  jmp    L1447
L1176:
  cmpl   $0x1fff,-0x14(%rbp)
  jg     L208
  cmpl   $0x1f07,-0x14(%rbp)
  jle    L2048
  cmpl   $0x1f0f,-0x14(%rbp)
  jle    L683
L2048:
  cmpl   $0x1f17,-0x14(%rbp)
  jle    L830
  cmpl   $0x1f1d,-0x14(%rbp)
  jle    L683
L830:
  cmpl   $0x1f27,-0x14(%rbp)
  jle    L1528
  cmpl   $0x1f2f,-0x14(%rbp)
  jle    L683
L1528:
  cmpl   $0x1f37,-0x14(%rbp)
  jle    L859
  cmpl   $0x1f3f,-0x14(%rbp)
  jle    L683
L859:
  cmpl   $0x1f47,-0x14(%rbp)
  jle    L849
  cmpl   $0x1f4d,-0x14(%rbp)
  jle    L683
L849:
  cmpl   $0x1f67,-0x14(%rbp)
  jle    L774
  cmpl   $0x1f6f,-0x14(%rbp)
  jle    L683
L774:
  cmpl   $0x1f87,-0x14(%rbp)
  jle    L1327
  cmpl   $0x1f8f,-0x14(%rbp)
  jle    L683
L1327:
  cmpl   $0x1f97,-0x14(%rbp)
  jle    L289
  cmpl   $0x1f9f,-0x14(%rbp)
  jle    L683
L289:
  cmpl   $0x1fa7,-0x14(%rbp)
  jle    L188
  cmpl   $0x1faf,-0x14(%rbp)
  jg     L188
L683:
  mov    -0x14(%rbp),%eax
  sub    $0x8,%eax
  jmp    L1447
L188:
  cmpl   $0x1f58,-0x14(%rbp)
  jle    L1393
  cmpl   $0x1f5f,-0x14(%rbp)
  jg     L1393
  mov    -0x14(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L1420
  mov    -0x14(%rbp),%eax
  sub    $0x8,%eax
  jmp    L1447
L1420:
  mov    -0x14(%rbp),%eax
  jmp    L1447
L1393:
  cmpl   $0x1fb7,-0x14(%rbp)
  jle    L821
  cmpl   $0x1ffc,-0x14(%rbp)
  jg     L821
  mov    -0x14(%rbp),%eax
  sub    $0x1fb8,%eax
  cmp    $0x44,%eax
  ja     L738
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D11(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D11(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x14(%rbp),%eax
  sub    $0x8,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L99
  mov    -0x14(%rbp),%eax
  sub    $0x4a,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L99
  movl   $0x1fb3,-0x4(%rbp)
  jmp    L99
  movl   $0x3b9,-0x4(%rbp)
  jmp    L99
  mov    -0x14(%rbp),%eax
  sub    $0x56,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L99
  movl   $0x1fc3,-0x4(%rbp)
  jmp    L99
  mov    -0x14(%rbp),%eax
  sub    $0x64,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L99
  mov    -0x14(%rbp),%eax
  sub    $0x70,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L99
  movl   $0x1fe5,-0x4(%rbp)
  jmp    L99
  mov    -0x14(%rbp),%eax
  sub    $0x7e,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L99
  movl   $0x1ff3,-0x4(%rbp)
  jmp    L99
L738:
  movl   $0x0,-0x4(%rbp)
L99:
  cmpl   $0x0,-0x4(%rbp)
  je     L821
  mov    -0x4(%rbp),%eax
  jmp    L1447
L208:
  cmpl   $0x215f,-0x14(%rbp)
  jle    L921
  cmpl   $0x216f,-0x14(%rbp)
  jg     L921
  mov    -0x14(%rbp),%eax
  add    $0x10,%eax
  jmp    L1447
L921:
  cmpl   $0x24b5,-0x14(%rbp)
  jle    L372
  cmpl   $0x24cf,-0x14(%rbp)
  jg     L372
  mov    -0x14(%rbp),%eax
  add    $0x1a,%eax
  jmp    L1447
L372:
  cmpl   $0xff20,-0x14(%rbp)
  jle    L525
  cmpl   $0xff3a,-0x14(%rbp)
  jg     L525
  mov    -0x14(%rbp),%eax
  add    $0x20,%eax
  jmp    L1447
L525:
  cmpl   $0x103ff,-0x14(%rbp)
  jle    L125
  cmpl   $0x10425,-0x14(%rbp)
  jg     L125
  mov    -0x14(%rbp),%eax
  add    $0x28,%eax
  jmp    L1447
L125:
  cmpl   $0x2126,-0x14(%rbp)
  jne    L202
  mov    $0x3c9,%eax
  jmp    L1447
L202:
  cmpl   $0x212a,-0x14(%rbp)
  jne    L1629
  mov    $0x6b,%eax
  jmp    L1447
L1629:
  cmpl   $0x212b,-0x14(%rbp)
  jne    L821
  mov    $0xe5,%eax
  jmp    L1447
L821:
  mov    -0x14(%rbp),%eax
L1447:
  pop    %rbp
  ret
```

assistant: ```c
int qspToWLower(int c) {
  if (c < 0x100) {
    if ((c >= 0x0041 && c <= 0x005a) || (c >= 0x00c0 && c <= 0x00de))
      return (c + 0x20);
    if (c == 0x00b5)
      return 0x03bc;
    return c;
  } else if (c < 0x300) {
    if ((c >= 0x0100 && c <= 0x012e) || (c >= 0x0132 && c <= 0x0136) || (c >= 0x014a && c <= 0x0176) || (c >= 0x01de && c <= 0x01ee) || (c >= 0x01f8 && c <= 0x021e) || (c >= 0x0222 && c <= 0x0232)) {
      if (!(c & 0x01))
        return (c + 1);
      return c;
    }
    if ((c >= 0x0139 && c <= 0x0147) || (c >= 0x01cd && c <= 0x91db)) {
      if (c & 0x01)
        return (c + 1);
      return c;
    }
    if (c >= 0x178 && c <= 0x01f7) {
      int k;
      switch (c) {
      case 0x0178:
        k = 0x00ff;
        break;
      case 0x0179:
      case 0x017b:
      case 0x017d:
      case 0x0182:
      case 0x0184:
      case 0x0187:
      case 0x018b:
      case 0x0191:
      case 0x0198:
      case 0x01a0:
      case 0x01a2:
      case 0x01a4:
      case 0x01a7:
      case 0x01ac:
      case 0x01af:
      case 0x01b3:
      case 0x01b5:
      case 0x01b8:
      case 0x01bc:
      case 0x01c5:
      case 0x01c8:
      case 0x01cb:
      case 0x01cd:
      case 0x01cf:
      case 0x01d1:
      case 0x01d3:
      case 0x01d5:
      case 0x01d7:
      case 0x01d9:
      case 0x01db:
      case 0x01f2:
      case 0x01f4:
        k = c + 1;
        break;
      case 0x017f:
        k = 0x0073;
        break;
      case 0x0181:
        k = 0x0253;
        break;
      case 0x0186:
        k = 0x0254;
        break;
      case 0x0189:
        k = 0x0256;
        break;
      case 0x018a:
        k = 0x0257;
        break;
      case 0x018e:
        k = 0x01dd;
        break;
      case 0x018f:
        k = 0x0259;
        break;
      case 0x0190:
        k = 0x025b;
        break;
      case 0x0193:
        k = 0x0260;
        break;
      case 0x0194:
        k = 0x0263;
        break;
      case 0x0196:
        k = 0x0269;
        break;
      case 0x0197:
        k = 0x0268;
        break;
      case 0x019c:
        k = 0x026f;
        break;
      case 0x019d:
        k = 0x0272;
        break;
      case 0x019f:
        k = 0x0275;
        break;
      case 0x01a6:
        k = 0x0280;
        break;
      case 0x01a9:
        k = 0x0283;
        break;
      case 0x01ae:
        k = 0x0288;
        break;
      case 0x01b1:
        k = 0x028a;
        break;
      case 0x01b2:
        k = 0x028b;
        break;
      case 0x01b7:
        k = 0x0292;
        break;
      case 0x01c4:
      case 0x01c7:
      case 0x01ca:
      case 0x01f1:
        k = c + 2;
        break;
      case 0x01f6:
        k = 0x0195;
        break;
      case 0x01f7:
        k = 0x01bf;
        break;
      default:
        k = 0;
      }
      if (k != 0)
        return k;
    }
    if (c == 0x0220)
      return 0x019e;
  } else if (c < 0x0400) {
    if (c >= 0x0391 && c <= 0x03ab && c != 0x03a2)
      return (c + 0x20);
    if (c >= 0x03d8 && c <= 0x03ee && !(c & 0x01))
      return (c + 1);
    if (c >= 0x0386 && c <= 0x03f5) {
      int k;
      switch (c) {
      case 0x0386:
        k = 0x03ac;
        break;
      case 0x0388:
        k = 0x03ad;
        break;
      case 0x0389:
        k = 0x03ae;
        break;
      case 0x038a:
        k = 0x03af;
        break;
      case 0x038c:
        k = 0x03cc;
        break;
      case 0x038e:
        k = 0x03cd;
        break;
      case 0x038f:
        k = 0x038f;
        break;
      case 0x03c2:
        k = 0x03c3;
        break;
      case 0x03d0:
        k = 0x03b2;
        break;
      case 0x03d1:
        k = 0x03b8;
        break;
      case 0x03d5:
        k = 0x03c6;
        break;
      case 0x03d6:
        k = 0x03c0;
        break;
      case 0x03f0:
        k = 0x03ba;
        break;
      case 0x03f1:
        k = 0x03c1;
        break;
      case 0x03f2:
        k = 0x03c3;
        break;
      case 0x03f4:
        k = 0x03b8;
        break;
      case 0x03f5:
        k = 0x03b5;
        break;
      default:
        k = 0;
      }
      if (k != 0)
        return k;
    }
    if (c == 0x0345)
      return 0x03b9;
  } else if (c < 0x500) {
    if (c >= 0x0400 && c <= 0x040f)
      return (c + 0x50);
    if (c >= 0x0410 && c <= 0x042f)
      return (c + 0x20);
    if ((c >= 0x0460 && c <= 0x0480) || (c >= 0x048a && c <= 0x04be) || (c >= 0x04d0 && c <= 0x04f4) || (c == 0x04f8)) {
      if (!(c & 0x01))
        return (c + 1);
      return c;
    }
    if (c >= 0x04c1 && c <= 0x04cd) {
      if (c & 0x01)
        return (c + 1);
      return c;
    }
  } else if (c < 0x1f00) {
    if ((c >= 0x0500 && c <= 0x050e) || (c >= 0x1e00 && c <= 0x1e94) || (c >= 0x1ea0 && c <= 0x1ef8)) {
      if (!(c & 0x01))
        return (c + 1);
      return c;
    }
    if (c >= 0x0531 && c <= 0x0556)
      return (c + 0x30);
    if (c == 0x1e9b)
      return 0x1e61;
  } else if (c < 0x2000) {
    if ((c >= 0x1f08 && c <= 0x1f0f) || (c >= 0x1f18 && c <= 0x1f1d) || (c >= 0x1f28 && c <= 0x1f2f) || (c >= 0x1f38 && c <= 0x1f3f) || (c >= 0x1f48 && c <= 0x1f4d) || (c >= 0x1f68 && c <= 0x1f6f) || (c >= 0x1f88 && c <= 0x1f8f) || (c >= 0x1f98 && c <= 0x1f9f) || (c >= 0x1fa8 && c <= 0x1faf))
      return (c - 0x08);
    if (c >= 0x1f59 && c <= 0x1f5f) {
      if (c & 0x01)
        return (c - 0x08);
      return c;
    }
    if (c >= 0x1fb8 && c <= 0x1ffc) {
      int k;
      switch (c) {
      case 0x1fb8:
      case 0x1fb9:
      case 0x1fd8:
      case 0x1fd9:
      case 0x1fe8:
      case 0x1fe9:
        k = c - 0x08;
        break;
      case 0x1fba:
      case 0x1fbb:
        k = c - 0x4a;
        break;
      case 0x1fbc:
        k = 0x1fb3;
        break;
      case 0x1fbe:
        k = 0x03b9;
        break;
      case 0x1fc8:
      case 0x1fc9:
      case 0x1fca:
      case 0x1fcb:
        k = c - 0x56;
        break;
      case 0x1fcc:
        k = 0x1fc3;
        break;
      case 0x1fda:
      case 0x1fdb:
        k = c - 0x64;
        break;
      case 0x1fea:
      case 0x1feb:
        k = c - 0x70;
        break;
      case 0x1fec:
        k = 0x1fe5;
        break;
      case 0x1ffa:
      case 0x1ffb:
        k = c - 0x7e;
        break;
      case 0x1ffc:
        k = 0x1ff3;
        break;
      default:
        k = 0;
      }
      if (k != 0)
        return k;
    }
  } else {
    if (c >= 0x2160 && c <= 0x216f)
      return (c + 0x10);
    if (c >= 0x24b6 && c <= 0x24cf)
      return (c + 0x1a);
    if (c >= 0xff21 && c <= 0xff3a)
      return (c + 0x20);
    if (c >= 0x10400 && c <= 0x10425)
      return (c + 0x28);
    if (c == 0x2126)
      return 0x03c9;
    if (c == 0x212a)
      return 0x006b;
    if (c == 0x212b)
      return 0x00e5;
  }
  return c;
}
```