user: Translate the below assembly code into C programming language:

```asm
<cbFix>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  movq   $0x0,-0x10(%rbp)
  jmp    L43
L115:
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x25,%al
  jne    L29
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x43,%al
  je     L138
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x42,%al
  je     L138
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x55,%al
  je     L138
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x4f,%al
  je     L138
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x52,%al
  jne    L29
L138:
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x43,%al
  jne    L35
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movb   $0x3,(%rax)
L35:
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x42,%al
  jne    L81
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movb   $0x2,(%rax)
L81:
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x55,%al
  jne    L117
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movb   $0x25,(%rax)
L117:
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x4f,%al
  jne    L16
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movb   $0x11,(%rax)
L16:
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x52,%al
  jne    L91
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movb   $0x1a,(%rax)
L91:
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L51
L106:
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    -0x18(%rbp),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  addq   $0x1,-0x8(%rbp)
L51:
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  sub    $0x1,%eax
  cltq
  cmp    %rax,-0x8(%rbp)
  jb     L106
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
L29:
  addq   $0x1,-0x10(%rbp)
L43:
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  cmp    %rax,-0x10(%rbp)
  jb     L115
  nop
  nop
  leave
  ret
```

assistant: ```c
void cbFix(char *line) {
  size_t i;
  for (i = 0; i < strlen(line); i++) {
    size_t j;
    if (line[i] == '%') {
      if ((line[i + 1] == 'C') || (line[i + 1] == 'B') || (line[i + 1] == 'U') || (line[i + 1] == 'O') || (line[i + 1] == 'R')) {
        if (line[i + 1] == 'C')
          line[i] = 3;
        if (line[i + 1] == 'B')
          line[i] = 2;
        if (line[i + 1] == 'U')
          line[i] = 37;
        if (line[i + 1] == 'O')
          line[i] = 17;
        if (line[i + 1] == 'R')
          line[i] = 26;
        for (j = i + 1; j < strlen(line) - 1; j++) {
          line[j] = line[j + 1];
        }
        line[strlen(line) - 1] = 0;
      }
    }
  }
}
```