user: What would the C source look like for the assembly code provided here:

```asm
<geo_map>:
  endbr64
  mov    %rsi,%rax
  movslq %edx,%rsi
  test   $0xfffffffb,%ecx
  jne    L213
  imul   $0x64,%ecx,%r8d
L148:
  test   %r8d,%r8d
  je     L240
  cmp    $0x190,%r8d
  jne    L574
L240:
  mov    %edi,%r8d
  cmp    $0xffffffff,%edi
  je     L379
L311:
  mov    %r8d,%eax
  ret
  nopl   0x0(%rax)
L574:
  mov    $0xffffffff,%r8d
  mov    %r8d,%eax
  ret
  nopw   0x0(%rax,%rax,1)
L213:
  imul   $0x64,%ecx,%ecx
  add    %ecx,%r8d
  cmp    $0x26c,%r8d
  jg     L574
  cmp    $0x1f3,%r8d
  jle    L148
  sub    $0x1f4,%r8d
  cmp    $0x78,%r8d
  ja     L574
  lea    D8(%rip),%rcx
  movslq (%rcx,%r8,4),%rdx
  add    %rcx,%rdx
  notrack jmp *%rdx
  cmp    $0xfffffffe,%edi
  je     L379
L540:
  lea    0x1(%rdi),%r8d
  jmp    L311
  add    $0x1,%rax
  movslq %esi,%rcx
  xor    %edx,%edx
  div    %rcx
  mov    %esi,%eax
  sub    %edx,%eax
  lea    -0x1(%rax),%r8d
  cmp    $0xffffffff,%edi
  je     L311
  cmp    $0xfffffffe,%edi
  je     L555
  sub    $0x1,%esi
  cmp    %r8d,%esi
  je     L540
  cmp    %r8d,%edi
  jge    L335
L175:
  mov    %edi,%r8d
  jmp    L311
  movslq %esi,%rcx
  xor    %edx,%edx
  div    %rcx
  mov    %esi,%eax
  sub    %edx,%eax
  cmp    $0xffffffff,%edi
  je     L482
L167:
  add    %edi,%eax
L555:
  cltd
  idiv   %esi
L472:
  mov    %edx,%r8d
  jmp    L311
  nopw   0x0(%rax,%rax,1)
  movslq %esi,%rcx
  xor    %edx,%edx
  div    %rcx
  mov    %edx,%r8d
  cmp    $0xffffffff,%edi
  je     L311
  cmp    $0xfffffffe,%edi
  je     L125
  sub    $0x1,%esi
  cmp    %edx,%esi
  je     L540
  cmp    %edx,%edi
  jl     L175
  nopl   0x0(%rax)
L335:
  lea    0x2(%rdi),%r8d
  jmp    L311
  nopl   0x0(%rax)
L379:
  lea    -0x1(%rsi),%r8d
  jmp    L311
  xor    %r8d,%r8d
  cmp    $0xffffffff,%edi
  je     L311
  mov    $0x1,%r8d
  cmp    $0xfffffffe,%edi
  jne    L335
  jmp    L311
  lea    -0x1(%rsi),%r8d
  cmp    $0xfffffffe,%edi
  je     L311
  movslq %r8d,%rcx
  xor    %edx,%edx
  div    %rcx
  cmp    $0xffffffff,%edi
  je     L472
  lea    0x1(%rdi,%rdx,1),%eax
  cltd
  idiv   %r8d
  mov    %edx,%r8d
  jmp    L311
  lea    -0x1(%rsi),%r8d
  cmp    $0xfffffffe,%edi
  je     L311
  movslq %r8d,%rcx
  xor    %edx,%edx
  div    %rcx
  mov    %r8d,%eax
  sub    %edx,%eax
  cmp    $0xffffffff,%edi
  je     L482
  add    %edi,%eax
  cltd
  idiv   %r8d
  mov    %edx,%r8d
  jmp    L311
  movslq %esi,%rcx
  xor    %edx,%edx
  div    %rcx
  mov    %edx,%r8d
  cmp    $0xffffffff,%edi
  je     L311
  lea    0x1(%rdi,%rdx,1),%eax
  cltd
  idiv   %esi
  mov    %edx,%r8d
  jmp    L311
  nopl   0x0(%rax,%rax,1)
L482:
  lea    -0x1(%rax),%r8d
  jmp    L311
  movslq %esi,%rcx
  xor    %edx,%edx
  div    %rcx
  mov    %edx,%r8d
  cmp    $0xffffffff,%edi
  je     L311
  cmp    $0xfffffffe,%edi
  je     L125
  lea    0x2(%rdi,%rdx,1),%eax
  cltd
  idiv   %esi
  mov    %edx,%r8d
  jmp    L311
  movslq %esi,%rcx
  xor    %edx,%edx
  div    %rcx
  mov    %esi,%eax
  sub    %edx,%eax
  cmp    $0xffffffff,%edi
  je     L482
  cmp    $0xfffffffe,%edi
  je     L555
  lea    0x1(%rax,%rdi,1),%eax
  cltd
  idiv   %esi
  mov    %edx,%r8d
  jmp    L311
  lea    -0x1(%rsi),%r8d
  cmp    $0xfffffffe,%edi
  je     L311
  movslq %r8d,%r8
  xor    %edx,%edx
  sub    $0x2,%esi
  div    %r8
  sub    %edx,%esi
  mov    %esi,%r8d
  cmp    $0xffffffff,%edi
  je     L311
L392:
  cmp    %r8d,%edi
  jge    L540
  jmp    L175
  movslq %esi,%rcx
  xor    %edx,%edx
  div    %rcx
  mov    %esi,%eax
  sub    %edx,%eax
  lea    -0x1(%rax),%r8d
  cmp    $0xffffffff,%edi
  je     L311
  cmp    $0xfffffffe,%edi
  jne    L167
  lea    -0x1(%r8,%rsi,1),%eax
  cltd
  idiv   %esi
  mov    %edx,%r8d
  jmp    L311
  cmp    $0xfffffffe,%edi
  je     L379
  lea    -0x2(%rsi),%r8d
  cmp    $0xffffffff,%edi
  cmovne %edi,%r8d
  jmp    L311
  xor    %edx,%edx
  lea    -0x1(%rsi),%r8d
  div    %rsi
  sub    %edx,%r8d
  cmp    $0xffffffff,%edi
  jne    L392
  jmp    L311
  xor    %edx,%edx
  div    %rsi
  mov    %edx,%r8d
  cmp    $0xffffffff,%edi
  je     L311
L528:
  cmp    %edx,%edi
  jge    L540
  jmp    L175
  lea    -0x1(%rsi),%r8d
  cmp    $0xfffffffe,%edi
  je     L311
  movslq %r8d,%r8
  xor    %edx,%edx
  div    %r8
  mov    %edx,%r8d
  cmp    $0xffffffff,%edi
  jne    L528
  jmp    L311
  nopl   0x0(%rax,%rax,1)
L125:
  lea    0x1(%rdx),%eax
  cltd
  idiv   %esi
  mov    %edx,%r8d
  jmp    L311
```

assistant: ```c
int geo_map(int block, unsigned long long stripe, int raid_disks, int level, int layout) {
  int pd;
  if ((level == 0) || (level == 4))
    layout = 0;
  switch (level * 100 + layout) {
  case 000:
  case 400:
  case 500 + 5:
    if (block == -1)
      return raid_disks - 1;
    return block;
  case 500 + 0:
    pd = (raid_disks - 1) - stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block >= pd)
      block++;
    return block;
  case 500 + 1:
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block >= pd)
      block++;
    return block;
  case 500 + 2:
    pd = (raid_disks - 1) - stripe % raid_disks;
    if (block == -1)
      return pd;
    return (pd + 1 + block) % raid_disks;
  case 500 + 3:
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    return (pd + 1 + block) % raid_disks;
  case 500 + 4:
    return block + 1;
  case 600 + 5:
    if (block == -2)
      return raid_disks - 1;
    if (block == -1)
      return raid_disks - 2;
    return block;
  case 600 + 16:
    if (block == -2)
      return raid_disks - 1;
    raid_disks--;
    pd = (raid_disks - 1) - stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block >= pd)
      block++;
    return block;
  case 600 + 17:
    if (block == -2)
      return raid_disks - 1;
    raid_disks--;
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block >= pd)
      block++;
    return block;
  case 600 + 18:
    if (block == -2)
      return raid_disks - 1;
    raid_disks--;
    pd = (raid_disks - 1) - stripe % raid_disks;
    if (block == -1)
      return pd;
    return (pd + 1 + block) % raid_disks;
  case 600 + 19:
    if (block == -2)
      return raid_disks - 1;
    raid_disks--;
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    return (pd + 1 + block) % raid_disks;
  case 600 + 20:
    if (block == -2)
      return raid_disks - 1;
    return block + 1;
  case 600 + 4:
    if (block == -1)
      return 0;
    if (block == -2)
      return 1;
    return block + 2;
  case 600 + 0:
    pd = raid_disks - 1 - (stripe % raid_disks);
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + 1) % raid_disks;
    if (pd == raid_disks - 1)
      return block + 1;
    if (block >= pd)
      return block + 2;
    return block;
  case 600 + 8:
  case 600 + 1:
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + 1) % raid_disks;
    if (pd == raid_disks - 1)
      return block + 1;
    if (block >= pd)
      return block + 2;
    return block;
  case 600 + 2:
    pd = raid_disks - 1 - (stripe % raid_disks);
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + 1) % raid_disks;
    return (pd + 2 + block) % raid_disks;
  case 600 + 3:
    pd = stripe % raid_disks;
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + 1) % raid_disks;
    return (pd + 2 + block) % raid_disks;
  case 600 + 9:
    pd = raid_disks - 1 - ((stripe + 1) % raid_disks);
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + 1) % raid_disks;
    if (pd == raid_disks - 1)
      return block + 1;
    if (block >= pd)
      return block + 2;
    return block;
  case 600 + 10:
    pd = raid_disks - 1 - (stripe % raid_disks);
    if (block == -1)
      return pd;
    if (block == -2)
      return (pd + raid_disks - 1) % raid_disks;
    return (pd + 1 + block) % raid_disks;
  }
  return -1;
}
```