user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movq   $0x0,-0x70(%rbp)
  movq   $0x0,-0x68(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x58(%rbp)
  lea    -0x50(%rbp),%rax
  mov    %rax,-0x80(%rbp)
  lea    -0x70(%rbp),%rax
  mov    %rax,-0x78(%rbp)
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <print_input@plt>
  mov    -0x80(%rbp),%rax
  lea    0x20(%rax),%rcx
  mov    -0x78(%rbp),%rdx
  mov    -0x80(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <run@plt>
  mov    -0x78(%rbp),%rsi
  mov    -0x80(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0xffffffff,%edx
  mov    %rax,%rdi
  call   <fill@plt>
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <print_input@plt>
  mov    -0x80(%rbp),%rax
  lea    0x20(%rax),%rcx
  mov    -0x78(%rbp),%rdx
  mov    -0x80(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <run@plt>
  mov    -0x78(%rbp),%rsi
  mov    -0x80(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0xf0f0f0f0,%edx
  mov    %rax,%rdi
  call   <fill@plt>
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <print_input@plt>
  mov    -0x80(%rbp),%rax
  lea    0x20(%rax),%rcx
  mov    -0x78(%rbp),%rdx
  mov    -0x80(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <run@plt>
  mov    -0x78(%rbp),%rsi
  mov    -0x80(%rbp),%rax
  mov    $0x1010101,%ecx
  mov    $0x1010101,%edx
  mov    %rax,%rdi
  call   <fill@plt>
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <print_input@plt>
  mov    -0x80(%rbp),%rax
  lea    0x20(%rax),%rcx
  mov    -0x78(%rbp),%rdx
  mov    -0x80(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <run@plt>
  mov    -0x78(%rbp),%rsi
  mov    -0x80(%rbp),%rax
  mov    $0xfefefeff,%ecx
  mov    $0xffffffff,%edx
  mov    %rax,%rdi
  call   <fill@plt>
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <print_input@plt>
  mov    -0x80(%rbp),%rax
  lea    0x20(%rax),%rcx
  mov    -0x78(%rbp),%rdx
  mov    -0x80(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <run@plt>
  mov    -0x78(%rbp),%rsi
  mov    -0x80(%rbp),%rax
  mov    $0x1010101,%ecx
  mov    $0x0,%edx
  mov    %rax,%rdi
  call   <fill@plt>
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <print_input@plt>
  mov    -0x80(%rbp),%rax
  lea    0x20(%rax),%rcx
  mov    -0x78(%rbp),%rdx
  mov    -0x80(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <run@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L3
  call   <__stack_chk_fail@plt>
L3:
  leave
  ret
```

assistant: ```c
int main(void) {
  char _input[256 / 8 * 2] = {0};
  char _output[256 / 8] = {0};
  void *input = _input;
  void *output = _output;
  print_input(input);
  run(input, input + 32, output);
  fill(input, output, 0xffffffffffffffffl, 0);
  print_input(input);
  run(input, input + 32, output);
  fill(input, output, 0xf0f0f0f0f0f0f0f0l, 0);
  print_input(input);
  run(input, input + 32, output);
  fill(input, output, 0x0101010101010101l, 0x9456010101010101l);
  print_input(input);
  run(input, input + 32, output);
  fill(input, output, 0xffffffffffffffffl, -0x0101010101010101l);
  print_input(input);
  run(input, input + 32, output);
  fill(input, output, 0, 0x0101010101010101l);
  print_input(input);
  run(input, input + 32, output);
  return 0;
}
```