// File: /workspace/github_c_makefile_star2_O0/videolan[P]bitstream/examples/./bitstream/scte/35.h
// Function: scte35_validate
static inline bool scte35_validate(const uint8_t *p_scte35)
{
    if (psi_get_syntax(p_scte35) ||
        psi_get_tableid(p_scte35) != SCTE35_TABLE_ID ||
        psi_get_length(p_scte35) <  SCTE35_HEADER2_SIZE + PSI_CRC_SIZE)
        return false;

    if (!psi_check_crc(p_scte35))
        return false;
    if (scte35_get_protocol(p_scte35))
        return false;

    uint16_t i_section_size = psi_get_length(p_scte35) + PSI_HEADER_SIZE
                               - PSI_CRC_SIZE;
    if (i_section_size < SCTE35_HEADER_SIZE)
        return false;

    uint16_t i_command_length = scte35_get_command_length(p_scte35);
    if (i_command_length != 0xfff &&
        (i_section_size < SCTE35_HEADER_SIZE + i_command_length +
                          SCTE35_HEADER2_SIZE ||
         i_section_size < SCTE35_HEADER_SIZE + i_command_length +
                          SCTE35_HEADER2_SIZE +
                          scte35_get_desclength(p_scte35)))
        return false;

    switch (scte35_get_command_type(p_scte35)) {
        case SCTE35_NULL_COMMAND:
            if (!scte35_null_validate(p_scte35))
                return false;
            break;
        case SCTE35_INSERT_COMMAND:
            if (!scte35_insert_validate(p_scte35))
                return false;
            break;
        case SCTE35_TIME_SIGNAL_COMMAND:
            if (!scte35_time_signal_validate(p_scte35))
                return false;
            break;
        case SCTE35_BANDWIDTH_RESERVATION_COMMAND:
            if (!scte35_bandwidth_reservation_validate(p_scte35))
                return false;
            break;
        case SCTE35_PRIVATE_COMMAND:
            if (!scte35_private_validate(p_scte35))
                return false;
            break;
        default:
            break;
    }

    if (i_command_length != 0xfff &&
        !descl_validate(scte35_get_descl(p_scte35),
                        scte35_get_desclength(p_scte35)))
        return false;

    return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x4360
testb $0x1, %al
jne 0x2037d
movq -0x10(%rbp), %rdi
callq 0x3530
movzbl %al, %eax
cmpl $0xfc, %eax
jne 0x2037d
movq -0x10(%rbp), %rdi
callq 0x3500
movzwl %ax, %eax
cmpl $0x6, %eax
jge 0x20386
movb $0x0, -0x1(%rbp)
jmp 0x20524
movq -0x10(%rbp), %rdi
callq 0x5480
testb $0x1, %al
jne 0x2039c
movb $0x0, -0x1(%rbp)
jmp 0x20524
movq -0x10(%rbp), %rdi
callq 0x206f0
cmpb $0x0, %al
je 0x203b2
movb $0x0, -0x1(%rbp)
jmp 0x20524
movq -0x10(%rbp), %rdi
callq 0x3500
movzwl %ax, %eax
addl $0x3, %eax
subl $0x4, %eax
movw %ax, -0x12(%rbp)
movzwl -0x12(%rbp), %eax
cmpl $0xe, %eax
jge 0x203da
movb $0x0, -0x1(%rbp)
jmp 0x20524
movq -0x10(%rbp), %rdi
callq 0x20710
movw %ax, -0x14(%rbp)
movzwl -0x14(%rbp), %eax
cmpl $0xfff, %eax            # imm = 0xFFF
je 0x2043c
movzwl -0x12(%rbp), %eax
movzwl -0x14(%rbp), %ecx
addl $0xe, %ecx
addl $0x2, %ecx
cmpl %ecx, %eax
jl 0x20433
movzwl -0x12(%rbp), %eax
movl %eax, -0x18(%rbp)
movzwl -0x14(%rbp), %eax
addl $0xe, %eax
addl $0x2, %eax
movl %eax, -0x1c(%rbp)
movq -0x10(%rbp), %rdi
callq 0x20740
movl -0x1c(%rbp), %ecx
movw %ax, %dx
movl -0x18(%rbp), %eax
movzwl %dx, %edx
addl %edx, %ecx
cmpl %ecx, %eax
jge 0x2043c
movb $0x0, -0x1(%rbp)
jmp 0x20524
movq -0x10(%rbp), %rdi
callq 0x20530
movzbl %al, %ecx
movl %ecx, -0x20(%rbp)
testb %al, %al
je 0x2047b
jmp 0x20451
movl -0x20(%rbp), %eax
subl $0x5, %eax
je 0x20493
jmp 0x2045b
movl -0x20(%rbp), %eax
subl $0x6, %eax
je 0x204a8
jmp 0x20465
movl -0x20(%rbp), %eax
subl $0x7, %eax
je 0x204bd
jmp 0x2046f
movl -0x20(%rbp), %eax
subl $0xff, %eax
je 0x204d2
jmp 0x204e7
movq -0x10(%rbp), %rdi
callq 0x207b0
testb $0x1, %al
jne 0x20491
movb $0x0, -0x1(%rbp)
jmp 0x20524
jmp 0x204e9
movq -0x10(%rbp), %rdi
callq 0x207c0
testb $0x1, %al
jne 0x204a6
movb $0x0, -0x1(%rbp)
jmp 0x20524
jmp 0x204e9
movq -0x10(%rbp), %rdi
callq 0x209f0
testb $0x1, %al
jne 0x204bb
movb $0x0, -0x1(%rbp)
jmp 0x20524
jmp 0x204e9
movq -0x10(%rbp), %rdi
callq 0x20a40
testb $0x1, %al
jne 0x204d0
movb $0x0, -0x1(%rbp)
jmp 0x20524
jmp 0x204e9
movq -0x10(%rbp), %rdi
callq 0x20a50
testb $0x1, %al
jne 0x204e5
movb $0x0, -0x1(%rbp)
jmp 0x20524
jmp 0x204e9
jmp 0x204e9
movzwl -0x14(%rbp), %eax
cmpl $0xfff, %eax            # imm = 0xFFF
je 0x20520
movq -0x10(%rbp), %rdi
callq 0x20a80
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rdi
callq 0x20740
movq -0x28(%rbp), %rdi
movzwl %ax, %esi
callq 0x5ab0
testb $0x1, %al
jne 0x20520
movb $0x0, -0x1(%rbp)
jmp 0x20524
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x30, %rsp
popq %rbp
retq
nop