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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x40(%rbp)
  jmp    L156
L199:
  movl   $0x2,-0x30(%rbp)
  jmp    L261
L241:
  movl   $0x1,-0x20(%rbp)
  jmp    L86
L242:
  movl   $0x0,-0x3c(%rbp)
  jmp    L3
L95:
  movl   $0x2,-0x2c(%rbp)
  jmp    L244
L265:
  movl   $0x1,-0x1c(%rbp)
  jmp    L39
L237:
  movl   $0x0,-0x38(%rbp)
  jmp    L84
L157:
  movl   $0x2,-0x28(%rbp)
  jmp    L182
L234:
  movl   $0x1,-0x18(%rbp)
  jmp    L48
L59:
  movl   $0x0,-0x34(%rbp)
  jmp    L115
L45:
  movl   $0x2,-0x24(%rbp)
  jmp    L88
L126:
  movl   $0x1,-0x14(%rbp)
  jmp    L38
L272:
  mov    -0x40(%rbp),%ecx
  mov    -0x30(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x20(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  cmp    $0x7,%eax
  jg     L146
  mov    -0x3c(%rbp),%ecx
  mov    -0x2c(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x1c(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  cmp    $0x5,%eax
  jg     L146
  mov    -0x38(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x18(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  cmp    $0x3,%eax
  jg     L146
  mov    -0x34(%rbp),%ecx
  mov    -0x24(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x14(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  cmp    $0x5,%eax
  jg     L146
  lea    -0x20(%rbp),%rdx
  lea    -0x30(%rbp),%rcx
  lea    -0x40(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test@plt>
L146:
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x14(%rbp)
L38:
  mov    -0x14(%rbp),%eax
  cmp    $0x5,%eax
  jle    L272
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x24(%rbp)
L88:
  mov    -0x24(%rbp),%eax
  cmp    $0x6,%eax
  jle    L126
  mov    -0x34(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x34(%rbp)
L115:
  mov    -0x34(%rbp),%eax
  cmp    $0x5,%eax
  jle    L45
  mov    -0x18(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x18(%rbp)
L48:
  mov    -0x18(%rbp),%eax
  cmp    $0x3,%eax
  jle    L59
  mov    -0x28(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x28(%rbp)
L182:
  mov    -0x28(%rbp),%eax
  cmp    $0x4,%eax
  jle    L234
  mov    -0x38(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x38(%rbp)
L84:
  mov    -0x38(%rbp),%eax
  cmp    $0x3,%eax
  jle    L157
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x1c(%rbp)
L39:
  mov    -0x1c(%rbp),%eax
  cmp    $0x5,%eax
  jle    L237
  mov    -0x2c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
L244:
  mov    -0x2c(%rbp),%eax
  cmp    $0x6,%eax
  jle    L265
  mov    -0x3c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x3c(%rbp)
L3:
  mov    -0x3c(%rbp),%eax
  cmp    $0x5,%eax
  jle    L95
  mov    -0x20(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x20(%rbp)
L86:
  mov    -0x20(%rbp),%eax
  cmp    $0x7,%eax
  jle    L242
  mov    -0x30(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x30(%rbp)
L261:
  mov    -0x30(%rbp),%eax
  cmp    $0x8,%eax
  jle    L241
  mov    -0x40(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x40(%rbp)
L156:
  mov    -0x40(%rbp),%eax
  cmp    $0x7,%eax
  jle    L199
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L21
  call   <__stack_chk_fail@plt>
L21:
  leave
  ret
```

assistant: ```c
int main() {
  int start[4], len[4], stride[4];
  for (start[0] = 0; start[0] < 8; start[0]++) {
    for (len[0] = 2; len[0] <= 8; len[0]++) {
      for (stride[0] = 1; stride[0] < 8; stride[0]++) {
        for (start[1] = 0; start[1] < 6; start[1]++) {
          for (len[1] = 2; len[1] <= 6; len[1]++) {
            for (stride[1] = 1; stride[1] < 6; stride[1]++) {
              for (start[2] = 0; start[2] < 4; start[2]++) {
                for (len[2] = 2; len[2] <= 4; len[2]++) {
                  for (stride[2] = 1; stride[2] < 4; stride[2]++) {
                    for (start[3] = 0; start[3] < 6; start[3]++) {
                      for (len[3] = 2; len[3] <= 6; len[3]++) {
                        for (stride[3] = 1; stride[3] < 6; stride[3]++) {
                          if ((start[0] + (len[0] - 1) * stride[0] < 8) && (start[1] + (len[1] - 1) * stride[1] < 6) && (start[2] + (len[2] - 1) * stride[2] < 4) && (start[3] + (len[3] - 1) * stride[3] < 6)) {
                            test(start, len, stride);
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return 0;
}
```