user: Converte this assembly snippet into its equivalent C code:

```asm
<hide_pixels>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %edx,-0x44(%rbp)
  mov    %ecx,-0x48(%rbp)
  mov    %r8d,-0x4c(%rbp)
  mov    %r9d,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movabs $0x8040201008040201,%rax
  mov    %rax,-0x18(%rbp)
  movabs $0x7fbfdfeff7fbfdfe,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x4c(%rbp),%ecx
  mov    -0x48(%rbp),%edx
  mov    -0x44(%rbp),%eax
  mov    %eax,%esi
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x20(%rbp)
  jmp    L90
L82:
  movl   $0x0,-0x24(%rbp)
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x44(%rbp),%eax
  cltq
  add    %rax,%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  mov    %al,-0x26(%rbp)
  mov    -0x50(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x1c(%rbp)
  jmp    L56
L84:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x48(%rbp),%ecx
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  cltq
  add    %rax,%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  mov    %al,-0x27(%rbp)
  mov    -0x1c(%rbp),%eax
  cltq
  movzbl -0x18(%rbp,%rax,1),%eax
  and    -0x26(%rbp),%al
  mov    %al,-0x25(%rbp)
  cmpb   $0x0,-0x25(%rbp)
  je     L81
  cmpl   $0x0,-0x4c(%rbp)
  je     L5
  movzbl -0x18(%rbp),%eax
  or     %al,-0x27(%rbp)
  jmp    L30
L5:
  movzbl -0x11(%rbp),%eax
  or     %al,-0x27(%rbp)
  jmp    L30
L81:
  cmpl   $0x0,-0x4c(%rbp)
  je     L96
  movzbl -0x10(%rbp),%eax
  and    %al,-0x27(%rbp)
  jmp    L30
L96:
  movzbl -0x9(%rbp),%eax
  and    %al,-0x27(%rbp)
L30:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x48(%rbp),%ecx
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  cltq
  add    %rax,%rax
  add    %rax,%rdx
  movsbw -0x27(%rbp),%ax
  mov    %ax,(%rdx)
  addl   $0x1,-0x24(%rbp)
  subl   $0x1,-0x1c(%rbp)
L56:
  cmpl   $0x0,-0x1c(%rbp)
  jns    L84
  addl   $0x1,-0x20(%rbp)
L90:
  mov    -0x20(%rbp),%eax
  cltq
  cmp    %rax,0x10(%rbp)
  jg     L82
  mov    $0x1,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L57
  call   <__stack_chk_fail@plt>
L57:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D7
type_guessed: string

tool: D7: 
HP> mie=%d   cie=%d   lsb=%d

assistant: ```c
int hide_pixels(cover_image, message_image, mie, cie, lsb, n, mlength)
int cie, lsb, mie, n;
long mlength;
short **cover_image, **message_image;
{
  char result, new_message, sample;
  char mask1[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
  char mask2[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};
  int c_counter, i, j;
  printf("\nHP> mie=%d   cie=%d   lsb=%d", mie, cie, lsb);
  for (i = 0; i < mlength; i++) {
    c_counter = 0;
    sample = message_image[i][mie];
    for (j = n - 1; j > -1; j--) {
      new_message = cover_image[i][cie + c_counter];
      result = sample & mask1[j];
      if (result != 0x00) {
        if (lsb)
          new_message = new_message | mask1[0];
        else
          new_message = new_message | mask1[7];
      } else {
        if (lsb)
          new_message = new_message & mask2[0];
        else
          new_message = new_message & mask2[7];
      }
      cover_image[i][cie + c_counter] = new_message;
      c_counter++;
    }
  }
  return (1);
}
```