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

```asm
<qspToWLower>:
  endbr64
  mov    %edi,%edx
  cmp    $0xff,%edi
  jg     L76
  lea    -0x41(%rdi),%eax
  cmp    $0x19,%eax
  jbe    L121
  lea    -0xc0(%rdi),%eax
  cmp    $0x1e,%eax
  jbe    L121
  cmp    $0xb5,%edi
  mov    $0x3bc,%eax
  cmovne %edi,%eax
  ret
L121:
  lea    0x20(%rdx),%eax
  ret
L76:
  cmp    $0x2ff,%edi
  jg     L457
  lea    -0x100(%rdi),%eax
  cmp    $0x2e,%eax
  jbe    L342
  lea    -0x132(%rdi),%eax
  cmp    $0x4,%eax
  jbe    L342
  lea    -0x14a(%rdi),%eax
  cmp    $0x2c,%eax
  jbe    L342
  lea    -0x1de(%rdi),%eax
  cmp    $0x10,%eax
  jbe    L342
  lea    -0x1f8(%rdi),%eax
  cmp    $0x26,%eax
  jbe    L342
  lea    -0x222(%rdi),%eax
  cmp    $0x10,%eax
  ja     L176
L342:
  mov    %edx,%eax
  and    $0x1,%eax
  cmp    $0x1,%eax
  mov    %edx,%eax
  adc    $0x0,%eax
  ret
L176:
  lea    -0x139(%rdi),%eax
  cmp    $0xe,%eax
  jbe    L473
  lea    -0x1cd(%rdi),%eax
  cmp    $0x900e,%eax
  jbe    L473
  lea    -0x178(%rdi),%ecx
  mov    %edi,%eax
  cmp    $0x7f,%ecx
  ja     L527
  cmp    $0x1b2,%edi
  jg     L160
  lea    -0x178(%rdi),%eax
  cmp    $0x3a,%eax
  ja     L157
  mov    %eax,%eax
  lea    D36(%rip),%rcx
  movslq (%rcx,%rax,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
L473:
  mov    %edx,%eax
  and    $0x1,%eax
  cmp    $0x1,%eax
  mov    %edx,%eax
  sbb    $0xffffffff,%eax
  ret
L160:
  lea    -0x1b3(%rdi),%ecx
  mov    $0x1,%eax
  shl    %cl,%rax
  movabs $0x15555240225,%rcx
  test   %rcx,%rax
  jne    L426
  movabs $0x4000000000920000,%rcx
  test   %rcx,%rax
  jne    L212
  cmp    $0x1b7,%edi
  mov    $0x292,%eax
  cmovne %edi,%eax
  ret
  mov    $0xff,%eax
  ret
L157:
  mov    %edx,%eax
  ret
L426:
  lea    0x1(%rdx),%eax
  ret
L212:
  lea    0x2(%rdi),%eax
  ret
  mov    $0x28a,%eax
  ret
  mov    $0x288,%eax
  ret
  mov    $0x283,%eax
  ret
  mov    $0x280,%eax
  ret
  mov    $0x275,%eax
  ret
  mov    $0x272,%eax
  ret
  mov    $0x26f,%eax
  ret
  mov    $0x268,%eax
  ret
  mov    $0x269,%eax
  ret
  mov    $0x263,%eax
  ret
  mov    $0x260,%eax
  ret
  mov    $0x25b,%eax
  ret
  mov    $0x259,%eax
  ret
  mov    $0x1dd,%eax
  ret
  mov    $0x257,%eax
  ret
  mov    $0x256,%eax
  ret
  mov    $0x254,%eax
  ret
  mov    $0x253,%eax
  ret
  mov    $0x73,%eax
  ret
L457:
  cmp    $0x3ff,%edi
  jg     L42
  lea    -0x391(%rdi),%eax
  cmp    $0x1a,%eax
  ja     L98
  cmp    $0x3a2,%edi
  je     L98
  lea    0x20(%rdi),%eax
  ret
L98:
  lea    -0x3d8(%rdx),%eax
  cmp    $0x16,%eax
  ja     L142
  mov    %edx,%eax
  and    $0x1,%eax
  cmp    $0x1,%eax
  mov    %edx,%eax
  adc    $0x0,%eax
  ret
L142:
  lea    -0x386(%rdx),%eax
  cmp    $0x6f,%eax
  jbe    L242
L232:
  cmp    $0x345,%edx
  mov    $0x3b9,%eax
  cmovne %edx,%eax
  ret
L242:
  ja     L232
  mov    %eax,%eax
  lea    D16(%rip),%rcx
  movslq (%rcx,%rax,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
  mov    $0x3b8,%eax
  ret
  mov    $0x3c3,%eax
  ret
  mov    $0x3c1,%eax
  ret
  mov    $0x3ba,%eax
  ret
  mov    $0x3c0,%eax
  ret
  mov    $0x3c6,%eax
  ret
  mov    $0x3b2,%eax
  ret
  mov    $0x3c3,%eax
  ret
  mov    %edx,%eax
  ret
  mov    $0x3cd,%eax
  ret
  mov    $0x3cc,%eax
  ret
  mov    $0x3af,%eax
  ret
  mov    $0x3ae,%eax
  ret
  mov    $0x3ad,%eax
  ret
  mov    $0x3ac,%eax
  ret
L42:
  cmp    $0x4ff,%edi
  jg     L447
  lea    -0x400(%rdi),%eax
  cmp    $0xf,%eax
  jbe    L79
  lea    -0x410(%rdi),%eax
  cmp    $0x1f,%eax
  jbe    L295
  lea    -0x460(%rdi),%eax
  cmp    $0x20,%eax
  jbe    L103
  lea    -0x48a(%rdi),%eax
  cmp    $0x34,%eax
  jbe    L103
  lea    -0x4d0(%rdi),%eax
  cmp    $0x24,%eax
  jbe    L103
  cmp    $0x4f8,%edi
  jne    L471
L103:
  mov    %edx,%eax
  and    $0x1,%eax
  cmp    $0x1,%eax
  mov    %edx,%eax
  adc    $0x0,%eax
  ret
L79:
  lea    0x50(%rdi),%eax
  ret
L295:
  lea    0x20(%rdi),%eax
  ret
L471:
  lea    -0x4c1(%rdi),%ecx
  mov    %edi,%eax
  cmp    $0xc,%ecx
  ja     L527
  and    $0x1,%eax
  cmp    $0x1,%eax
  mov    %edi,%eax
  sbb    $0xffffffff,%eax
  ret
L447:
  cmp    $0x1eff,%edi
  jg     L316
  lea    -0x500(%rdi),%eax
  cmp    $0xe,%eax
  jbe    L55
  lea    -0x1e00(%rdi),%eax
  cmp    $0x94,%eax
  jbe    L55
  lea    -0x1ea0(%rdi),%eax
  cmp    $0x58,%eax
  ja     L520
L55:
  mov    %edx,%eax
  and    $0x1,%eax
  cmp    $0x1,%eax
  mov    %edx,%eax
  adc    $0x0,%eax
  ret
L520:
  lea    -0x531(%rdi),%eax
  cmp    $0x25,%eax
  jbe    L365
  cmp    $0x1e9b,%edi
  mov    $0x1e61,%eax
  cmovne %edi,%eax
  ret
L365:
  lea    0x30(%rdi),%eax
  ret
L316:
  cmp    $0x1fff,%edi
  jg     L178
  lea    -0x1f08(%rdi),%eax
  cmp    $0x7,%eax
  jbe    L51
  lea    -0x1f18(%rdi),%eax
  cmp    $0x5,%eax
  jbe    L51
  cmp    $0x1f6f,%edi
  jg     L102
  cmp    $0x1f27,%edi
  jg     L99
  mov    %edi,%eax
  ret
L159:
  lea    -0x1f88(%rdx),%eax
  movabs $0xff00ff00ff,%rcx
  bt     %rax,%rcx
  jae    L186
L51:
  lea    -0x8(%rdx),%eax
  ret
L186:
  mov    %edx,%eax
  ret
L99:
  lea    -0x1f28(%rdi),%eax
  cmp    $0x47,%eax
  ja     L272
  mov    %eax,%eax
  lea    D2(%rip),%rcx
  movslq (%rcx,%rax,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
L102:
  cmp    $0x1faf,%edi
  jle    L383
  lea    -0x1fb8(%rdi),%eax
  cmp    $0x44,%eax
  ja     L50
  lea    -0x1fb8(%rdi),%eax
  cmp    $0x44,%eax
  ja     L382
  mov    %eax,%eax
  lea    D35(%rip),%rcx
  movslq (%rcx,%rax,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
L383:
  cmp    $0x1f87,%edi
  jg     L159
  mov    %edi,%eax
  ret
  lea    -0x8(%rdi),%eax
  test   $0x1,%dil
  cmove  %edi,%eax
  ret
  mov    $0x1fe5,%eax
  ret
  lea    -0x8(%rdi),%eax
  ret
  lea    -0x4a(%rdi),%eax
  ret
  lea    -0x56(%rdi),%eax
  ret
  lea    -0x64(%rdi),%eax
  ret
  lea    -0x70(%rdi),%eax
  ret
  lea    -0x7e(%rdi),%eax
  ret
  mov    $0x1fc3,%eax
  ret
  mov    $0x3b9,%eax
  ret
  mov    $0x1fb3,%eax
  ret
  mov    $0x1ff3,%eax
  ret
L178:
  lea    -0x2160(%rdi),%eax
  cmp    $0xf,%eax
  jbe    L362
  lea    -0x24b6(%rdi),%eax
  cmp    $0x19,%eax
  jbe    L413
  lea    -0xff21(%rdi),%eax
  cmp    $0x19,%eax
  jbe    L144
  lea    -0x10400(%rdi),%eax
  cmp    $0x25,%eax
  jbe    L65
  cmp    $0x2126,%edi
  je     L259
  cmp    $0x212a,%edi
  je     L239
  cmp    $0x212b,%edi
  mov    $0xe5,%eax
  cmovne %edi,%eax
  ret
L362:
  lea    0x10(%rdi),%eax
  ret
L413:
  lea    0x1a(%rdi),%eax
  ret
L144:
  lea    0x20(%rdi),%eax
  ret
L65:
  lea    0x28(%rdi),%eax
  ret
  mov    $0x28b,%eax
  ret
  mov    $0x3b5,%eax
  ret
L272:
  mov    %edx,%eax
  ret
L50:
  mov    %edi,%eax
  ret
L382:
  mov    %edx,%eax
  ret
L259:
  mov    $0x3c9,%eax
  ret
L239:
  mov    $0x6b,%eax
L527:
  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;
}
```