internal static Challenge CreateNewChallenge(Challenge original, int PT, int ST)
            {
                Challenge newChal;

                if (original.Source == null)
                {
                    newChal = new Challenge(original);
                }
                else
                {
                    newChal = new Challenge(original.Source);
                }

                bool shouldCheckCR = true;
                int  CR            = original.CalculateCR(PT, ST);

                while (true)
                {
                    if (shouldCheckCR)// depends if we get back to this step or only the next step
                    {
                        if (CR >= 0)
                        {
                            newChal.AddRandomAction();
                        }
                        else
                        {
                            //newChal.LowerDifficulty();
                            if (!newChal.LowerDifficulty())
                            {// All the actions are at the minimum difficulty
                                newChal.AddRandomAction(_DifficultyMin);
                            }
                        }
                    }

                    float Hdif = newChal.GetChallengeDifficulty() - original.GetChallengeDifficulty();
                    newChal.LF = CL * CR;

                    if (Hdif < newChal.LF)
                    {
                        if (!newChal.HigherDifficulty())
                        {
                            shouldCheckCR = true;
                        }
                        else
                        {
                            shouldCheckCR = false;
                        }
                        //shouldCheckCR = true;
                        //continue;
                    }
                    else if (Hdif > newChal.LF)
                    {
                        if (!newChal.LowerDifficulty())
                        {
                            stuckCounter++;
                            if (stuckCounter == StuckRefreshMaxCount)
                            {
                                stuckCounter = 0;
                                newChal.ReplaceWithRandomAction();
                            }
                            break;
                        }
                        else
                        {
                            shouldCheckCR = false;
                        }
                    }
                    else if (Hdif == newChal.LF)
                    {
                        break;
                    }
                }
                //newChal.LF /= 10;
                return(newChal);
            }