static void find_best_state(uint8_t best_state[256][256], const uint8_t one_state[256]){

    int i,j,k,m;

    double l2tab[256];



    for(i=1; i<256; i++)

        l2tab[i]= log2(i/256.0);



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

        double best_len[256];

        double p= i/256.0;



        for(j=0; j<256; j++)

            best_len[j]= 1<<30;



        for(j=FFMAX(i-10,1); j<FFMIN(i+11,256); j++){

            double occ[256]={0};

            double len=0;

            occ[j]=1.0;

            for(k=0; k<256; k++){

                double newocc[256]={0};

                for(m=0; m<256; m++){

                    if(occ[m]){

                        len -=occ[m]*(     p *l2tab[    m]

                                      + (1-p)*l2tab[256-m]);

                    }

                }

                if(len < best_len[k]){

                    best_len[k]= len;

                    best_state[i][k]= j;

                }

                for(m=0; m<256; m++){

                    if(occ[m]){

                        newocc[    one_state[    m]] += occ[m]*   p ;

                        newocc[256-one_state[256-m]] += occ[m]*(1-p);

                    }

                }

                memcpy(occ, newocc, sizeof(occ));

            }

        }

    }

}

static void find_best_state(uint8_t best_state[256][256], const uint8_t one_state[256]){

    int i,j,k,m;

    double l2tab[256];



    for(i=1; i<256; i++)

        l2tab[i]= log2(i/256.0);



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

        double best_len[256];

        double p= i/256.0;



        for(j=0; j<256; j++)

            best_len[j]= 1<<30;



        for(j=FFMAX(i-10,1); j<FFMIN(i+11,256); j++){

            double occ[256]={0};

            double len=0;

            occ[j]=1.0;

            for(k=0; k<256; k++){

                double newocc[256]={0};

                for(m=0; m<256; m++){

                    if(occ[m]){

                        len -=occ[m]*(     p *l2tab[    m]

                                      + (1-p)*l2tab[256-m]);

                    }

                }

                if(len < best_len[k]){

                    best_len[k]= len;

                    best_state[i][k]= j;

                }

                for(m=0; m<256; m++){

                    if(occ[m]){

                        newocc[    one_state[    m]] += occ[m]*   p ;

                        newocc[256-one_state[256-m]] += occ[m]*(1-p);

                    }

                }

                memcpy(occ, newocc, sizeof(occ));

            }

        }

    }

}

static void FUNC_0(uint8_t VAR_0[256][256], const uint8_t VAR_1[256]){

    int VAR_2,VAR_3,VAR_4,VAR_5;

    double VAR_6[256];



    for(VAR_2=1; VAR_2<256; VAR_2++)

        VAR_6[VAR_2]= log2(VAR_2/256.0);



    for(VAR_2=0; VAR_2<256; VAR_2++){

        double VAR_7[256];

        double VAR_8= VAR_2/256.0;



        for(VAR_3=0; VAR_3<256; VAR_3++)

            VAR_7[VAR_3]= 1<<30;



        for(VAR_3=FFMAX(VAR_2-10,1); VAR_3<FFMIN(VAR_2+11,256); VAR_3++){

            double VAR_9[256]={0};

            double VAR_10=0;

            VAR_9[VAR_3]=1.0;

            for(VAR_4=0; VAR_4<256; VAR_4++){

                double VAR_11[256]={0};

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

                    if(VAR_9[VAR_5]){

                        VAR_10 -=VAR_9[VAR_5]*(     VAR_8 *VAR_6[    VAR_5]

                                      + (1-VAR_8)*VAR_6[256-VAR_5]);

                    }

                }

                if(VAR_10 < VAR_7[VAR_4]){

                    VAR_7[VAR_4]= VAR_10;

                    VAR_0[VAR_2][VAR_4]= VAR_3;

                }

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

                    if(VAR_9[VAR_5]){

                        VAR_11[    VAR_1[    VAR_5]] += VAR_9[VAR_5]*   VAR_8 ;

                        VAR_11[256-VAR_1[256-VAR_5]] += VAR_9[VAR_5]*(1-VAR_8);

                    }

                }

                memcpy(VAR_9, VAR_11, sizeof(VAR_9));

            }

        }

    }

}

static void FUNC_0(uint8_t VAR_0[256][256], const uint8_t VAR_1[256]){ int VAR_2,VAR_3,VAR_4,VAR_5; double VAR_6[256]; for(VAR_2=1; VAR_2<256; VAR_2++) VAR_6[VAR_2]= log2(VAR_2/256.0); for(VAR_2=0; VAR_2<256; VAR_2++){ double VAR_7[256]; double VAR_8= VAR_2/256.0; for(VAR_3=0; VAR_3<256; VAR_3++) VAR_7[VAR_3]= 1<<30; for(VAR_3=FFMAX(VAR_2-10,1); VAR_3<FFMIN(VAR_2+11,256); VAR_3++){ double VAR_9[256]={0}; double VAR_10=0; VAR_9[VAR_3]=1.0; for(VAR_4=0; VAR_4<256; VAR_4++){ double VAR_11[256]={0}; for(VAR_5=0; VAR_5<256; VAR_5++){ if(VAR_9[VAR_5]){ VAR_10 -=VAR_9[VAR_5]*(     VAR_8 *VAR_6[    VAR_5]
+ (1-VAR_8)*VAR_6[256-VAR_5]); } } if(VAR_10 < VAR_7[VAR_4]){ VAR_7[VAR_4]= VAR_10; VAR_0[VAR_2][VAR_4]= VAR_3; } for(VAR_5=0; VAR_5<256; VAR_5++){ if(VAR_9[VAR_5]){ VAR_11[    VAR_1[    VAR_5]] += VAR_9[VAR_5]*   VAR_8 ; VAR_11[256-VAR_1[256-VAR_5]] += VAR_9[VAR_5]*(1-VAR_8); } } memcpy(VAR_9, VAR_11, sizeof(VAR_9)); } } } }