static uint8_t *read_huffman_tables(FourXContext *f, uint8_t * const buf){

    int frequency[512];

    uint8_t flag[512];

    int up[512];

    uint8_t len_tab[257];

    int bits_tab[257];

    int start, end;

    uint8_t *ptr= buf;

    int j;

    

    memset(frequency, 0, sizeof(frequency));

    memset(up, -1, sizeof(up));



    start= *ptr++;

    end= *ptr++;

    for(;;){

        int i;

        

        for(i=start; i<=end; i++){

            frequency[i]= *ptr++;

//            printf("%d %d %d\n", start, end, frequency[i]);

        }

        start= *ptr++;

        if(start==0) break;

        

        end= *ptr++;

    }

    frequency[256]=1;



    while((ptr - buf)&3) ptr++; // 4byte align 



//    for(j=0; j<16; j++)

//        printf("%2X", ptr[j]);

    

    for(j=257; j<512; j++){

        int min_freq[2]= {256*256, 256*256};

        int smallest[2]= {0, 0};

        int i;

        for(i=0; i<j; i++){

            if(frequency[i] == 0) continue;

            if(frequency[i] < min_freq[1]){

                if(frequency[i] < min_freq[0]){

                    min_freq[1]= min_freq[0]; smallest[1]= smallest[0];

                    min_freq[0]= frequency[i];smallest[0]= i;

                }else{

                    min_freq[1]= frequency[i];smallest[1]= i;

                }

            }

        }

        if(min_freq[1] == 256*256) break;

        

        frequency[j]= min_freq[0] + min_freq[1];

        flag[ smallest[0] ]= 0;

        flag[ smallest[1] ]= 1;

        up[ smallest[0] ]= 

        up[ smallest[1] ]= j;

        frequency[ smallest[0] ]= frequency[ smallest[1] ]= 0;

    }



    for(j=0; j<257; j++){

        int node;

        int len=0;

        int bits=0;



        for(node= j; up[node] != -1; node= up[node]){

            bits += flag[node]<<len;

            len++;

            if(len > 31) av_log(f->avctx, AV_LOG_ERROR, "vlc length overflow\n"); //can this happen at all ?

        }

        

        bits_tab[j]= bits;

        len_tab[j]= len;

    }

    

    init_vlc(&f->pre_vlc, ACDC_VLC_BITS, 257, 

             len_tab , 1, 1,

             bits_tab, 4, 4);

             

    return ptr;

}

static uint8_t *read_huffman_tables(FourXContext *f, uint8_t * const buf){

    int frequency[512];

    uint8_t flag[512];

    int up[512];

    uint8_t len_tab[257];

    int bits_tab[257];

    int start, end;

    uint8_t *ptr= buf;

    int j;

    

    memset(frequency, 0, sizeof(frequency));

    memset(up, -1, sizeof(up));



    start= *ptr++;

    end= *ptr++;

    for(;;){

        int i;

        

        for(i=start; i<=end; i++){

            frequency[i]= *ptr++;



        }

        start= *ptr++;

        if(start==0) break;

        

        end= *ptr++;

    }

    frequency[256]=1;



    while((ptr - buf)&3) ptr++; 







    

    for(j=257; j<512; j++){

        int min_freq[2]= {256*256, 256*256};

        int smallest[2]= {0, 0};

        int i;

        for(i=0; i<j; i++){

            if(frequency[i] == 0) continue;

            if(frequency[i] < min_freq[1]){

                if(frequency[i] < min_freq[0]){

                    min_freq[1]= min_freq[0]; smallest[1]= smallest[0];

                    min_freq[0]= frequency[i];smallest[0]= i;

                }else{

                    min_freq[1]= frequency[i];smallest[1]= i;

                }

            }

        }

        if(min_freq[1] == 256*256) break;

        

        frequency[j]= min_freq[0] + min_freq[1];

        flag[ smallest[0] ]= 0;

        flag[ smallest[1] ]= 1;

        up[ smallest[0] ]= 

        up[ smallest[1] ]= j;

        frequency[ smallest[0] ]= frequency[ smallest[1] ]= 0;

    }



    for(j=0; j<257; j++){

        int node;

        int len=0;

        int bits=0;



        for(node= j; up[node] != -1; node= up[node]){

            bits += flag[node]<<len;

            len++;

            if(len > 31) av_log(f->avctx, AV_LOG_ERROR, "vlc length overflow\n"); 

        }

        

        bits_tab[j]= bits;

        len_tab[j]= len;

    }

    

    init_vlc(&f->pre_vlc, ACDC_VLC_BITS, 257, 

             len_tab , 1, 1,

             bits_tab, 4, 4);

             

    return ptr;

}

             bits_tab, 4, 4);
static uint8_t *FUNC_0(FourXContext *f, uint8_t * const buf){

    int VAR_0[512];

    uint8_t flag[512];

    int VAR_1[512];

    uint8_t len_tab[257];

    int VAR_2[257];

    int VAR_3, VAR_4;

    uint8_t *ptr= buf;

    int VAR_5;

    

    memset(VAR_0, 0, sizeof(VAR_0));

    memset(VAR_1, -1, sizeof(VAR_1));



    VAR_3= *ptr++;

    VAR_4= *ptr++;

    for(;;){

        int VAR_9;

        

        for(VAR_9=VAR_3; VAR_9<=VAR_4; VAR_9++){

            VAR_0[VAR_9]= *ptr++;



        }

        VAR_3= *ptr++;

        if(VAR_3==0) break;

        

        VAR_4= *ptr++;

    }

    VAR_0[256]=1;



    while((ptr - buf)&3) ptr++; 







    

    for(VAR_5=257; VAR_5<512; VAR_5++){

        int VAR_7[2]= {256*256, 256*256};

        int VAR_8[2]= {0, 0};

        int VAR_9;

        for(VAR_9=0; VAR_9<VAR_5; VAR_9++){

            if(VAR_0[VAR_9] == 0) continue;

            if(VAR_0[VAR_9] < VAR_7[1]){

                if(VAR_0[VAR_9] < VAR_7[0]){

                    VAR_7[1]= VAR_7[0]; VAR_8[1]= VAR_8[0];

                    VAR_7[0]= VAR_0[VAR_9];VAR_8[0]= VAR_9;

                }else{

                    VAR_7[1]= VAR_0[VAR_9];VAR_8[1]= VAR_9;

                }

            }

        }

        if(VAR_7[1] == 256*256) break;

        

        VAR_0[VAR_5]= VAR_7[0] + VAR_7[1];

        flag[ VAR_8[0] ]= 0;

        flag[ VAR_8[1] ]= 1;

        VAR_1[ VAR_8[0] ]= 

        VAR_1[ VAR_8[1] ]= VAR_5;

        VAR_0[ VAR_8[0] ]= VAR_0[ VAR_8[1] ]= 0;

    }



    for(VAR_5=0; VAR_5<257; VAR_5++){

        int VAR_9;

        int VAR_10=0;

        int VAR_11=0;



        for(VAR_9= VAR_5; VAR_1[VAR_9] != -1; VAR_9= VAR_1[VAR_9]){

            VAR_11 += flag[VAR_9]<<VAR_10;

            VAR_10++;

            if(VAR_10 > 31) av_log(f->avctx, AV_LOG_ERROR, "vlc length overflow\n"); 

        }

        

        VAR_2[VAR_5]= VAR_11;

        len_tab[VAR_5]= VAR_10;

    }

    

    init_vlc(&f->pre_vlc, ACDC_VLC_BITS, 257, 

             len_tab , 1, 1,

             VAR_2, 4, 4);

             

    return ptr;

}

static uint8_t *FUNC_0(FourXContext *f, uint8_t * const buf){ int VAR_0[512]; uint8_t flag[512]; int VAR_1[512]; uint8_t len_tab[257]; int VAR_2[257]; int VAR_3, VAR_4; uint8_t *ptr= buf; int VAR_5; memset(VAR_0, 0, sizeof(VAR_0)); memset(VAR_1, -1, sizeof(VAR_1)); VAR_3= *ptr++; VAR_4= *ptr++; for(;;){ int VAR_9; for(VAR_9=VAR_3; VAR_9<=VAR_4; VAR_9++){ VAR_0[VAR_9]= *ptr++; } VAR_3= *ptr++; if(VAR_3==0) break; VAR_4= *ptr++; } VAR_0[256]=1; while((ptr - buf)&3) ptr++; for(VAR_5=257; VAR_5<512; VAR_5++){ int VAR_7[2]= {256*256, 256*256}; int VAR_8[2]= {0, 0}; int VAR_9; for(VAR_9=0; VAR_9<VAR_5; VAR_9++){ if(VAR_0[VAR_9] == 0) continue; if(VAR_0[VAR_9] < VAR_7[1]){ if(VAR_0[VAR_9] < VAR_7[0]){ VAR_7[1]= VAR_7[0]; VAR_8[1]= VAR_8[0]; VAR_7[0]= VAR_0[VAR_9];VAR_8[0]= VAR_9; }else{ VAR_7[1]= VAR_0[VAR_9];VAR_8[1]= VAR_9; } } } if(VAR_7[1] == 256*256) break; VAR_0[VAR_5]= VAR_7[0] + VAR_7[1]; flag[ VAR_8[0] ]= 0; flag[ VAR_8[1] ]= 1; VAR_1[ VAR_8[0] ]=
VAR_1[ VAR_8[1] ]= VAR_5; VAR_0[ VAR_8[0] ]= VAR_0[ VAR_8[1] ]= 0; } for(VAR_5=0; VAR_5<257; VAR_5++){ int VAR_9; int VAR_10=0; int VAR_11=0; for(VAR_9= VAR_5; VAR_1[VAR_9] != -1; VAR_9= VAR_1[VAR_9]){ VAR_11 += flag[VAR_9]<<VAR_10; VAR_10++; if(VAR_10 > 31) av_log(f->avctx, AV_LOG_ERROR, "vlc length overflow\n"); } VAR_2[VAR_5]= VAR_11; len_tab[VAR_5]= VAR_10; } init_vlc(&f->pre_vlc, ACDC_VLC_BITS, 257,
len_tab , 1, 1,
VAR_2, 4, 4); return ptr; }