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

```asm
<t1_3d_updateflags>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x48(%rbp)
  mov    %esi,-0x4c(%rbp)
  mov    -0x48(%rbp),%rax
  sub    $0x408,%rax
  mov    %rax,-0x40(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x408,%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x41010,%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  sub    $0x408,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x408,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x48(%rbp),%rax
  sub    $0x41010,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  sub    $0x408,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  add    $0x408,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x40(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x40(%rbp),%rax
  sub    $0x4,%rax
  or     $0x2,%edx
  mov    %edx,(%rax)
  mov    -0x40(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x40(%rbp),%rax
  add    $0x4,%rax
  or     $0x4,%edx
  mov    %edx,(%rax)
  mov    -0x38(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x38(%rbp),%rax
  sub    $0x4,%rax
  or     $0x1,%edx
  mov    %edx,(%rax)
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  or     $0x8,%edx
  mov    %edx,(%rax)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  or     $0x40,%eax
  mov    %eax,%edx
  mov    -0x40(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  or     $0x10,%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x48(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x48(%rbp),%rax
  sub    $0x4,%rax
  or     $0x20,%edx
  mov    %edx,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  or     $0x80,%dl
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  or     $0x1,%ah
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  or     $0x2,%ah
  mov    %eax,%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x10(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%rax
  sub    $0x4,%rax
  or     $0x8,%dh
  mov    %edx,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  or     $0x10,%dh
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  sub    $0x4,%rax
  or     $0x4,%dh
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  or     $0x20,%dh
  mov    %edx,(%rax)
  mov    -0x10(%rbp),%rax
  mov    (%rax),%eax
  or     $0x10000,%eax
  mov    %eax,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  or     $0x40,%ah
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x18(%rbp),%rax
  sub    $0x4,%rax
  or     $0x80,%dh
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  or     $0x20000,%edx
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x28(%rbp),%rax
  sub    $0x4,%rax
  or     $0x80000,%edx
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  or     $0x100000,%edx
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x20(%rbp),%rax
  sub    $0x4,%rax
  or     $0x40000,%edx
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  or     $0x200000,%edx
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  or     $0x1000000,%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  or     $0x400000,%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x30(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  sub    $0x4,%rax
  or     $0x800000,%edx
  mov    %edx,(%rax)
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  or     $0x2000000,%edx
  mov    %edx,(%rax)
  cmpl   $0x0,-0x4c(%rbp)
  je     L4
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  or     $0x10000000,%eax
  mov    %eax,%edx
  mov    -0x40(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  or     $0x4000000,%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x48(%rbp),%rax
  sub    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x48(%rbp),%rax
  sub    $0x4,%rax
  or     $0x8000000,%edx
  mov    %edx,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x48(%rbp),%rax
  add    $0x4,%rax
  or     $0x20000000,%edx
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  or     $0x40000000,%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  or     $0x80000000,%eax
  mov    %eax,%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
L4:
  nop
  pop    %rbp
  ret
```

assistant: ```c
void t1_3d_updateflags(unsigned int *fp, int s) {
  unsigned int *np = fp - (256 + 2);
  unsigned int *sp = fp + (256 + 2);
  unsigned int *bwp = fp + ((256 + 2) * (256 + 2));
  unsigned int *bnp = bwp - (256 + 2);
  unsigned int *bsp = bwp + (256 + 2);
  unsigned int *fwp = fp - ((256 + 2) * (256 + 2));
  unsigned int *fnp = fwp - (256 + 2);
  unsigned int *fsp = fwp + (256 + 2);
  np[-1] |= 0x00000002;
  np[1] |= 0x00000004;
  sp[-1] |= 0x00000001;
  sp[1] |= 0x00000008;
  *np |= 0x00000040;
  *sp |= 0x00000010;
  fp[-1] |= 0x00000020;
  fp[1] |= 0x00000080;
  *fwp |= 0x00000100;
  *bwp |= 0x00000200;
  fnp[-1] |= 0x00000800;
  fnp[1] |= 0x00001000;
  fsp[-1] |= 0x00000400;
  fsp[1] |= 0x00002000;
  *fnp |= 0x00010000;
  *fsp |= 0x00004000;
  fwp[-1] |= 0x00008000;
  fwp[1] |= 0x00020000;
  bnp[-1] |= 0x00080000;
  bnp[1] |= 0x00100000;
  bsp[-1] |= 0x00040000;
  bsp[1] |= 0x00200000;
  *bnp |= 0x01000000;
  *bsp |= 0x00400000;
  bwp[-1] |= 0x00800000;
  bwp[1] |= 0x02000000;
  if (s) {
    *np |= (0x1000 << 16);
    *sp |= (0x0400 << 16);
    fp[-1] |= (0x0800 << 16);
    fp[1] |= (0x2000 << 16);
    *fwp |= (0x4000 << 16);
    *bwp |= (0x8000 << 16);
  }
}
```