//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 //	* New Method: Update Stopping Phase
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 private void UpdateStoppingPhase()
 {
     if (m_ttFinishWaitTimer.Update())
     {
         CurrentChallenge.StopChallenge();
         m_eChallengePhase = ChallengePhase.INACTIVE;
     }
 }
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 //	* New Method: Update Results Phase
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 private void UpdateResultsPhase()
 {
     if (m_ttFinishWaitTimer.Update())
     {
         CurrentChallenge.StopChallenge();
         m_rResultsManager.BeginFadein(CurrentChallenge.m_ePlaylistTrack, m_iCurrentScore, CheckForUnlockedItems());
         m_eChallengePhase = ChallengePhase.INACTIVE;
     }
 }
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 //	* New Method: Begin Challenge
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 public void BeginChallenge()
 {
     if (!CurrentChallenge.IsChallengeMode && !CurrentChallenge.IsPracticeMode)
     {
         CurrentChallenge.StartChallenge();
         m_eChallengePhase = ChallengePhase.PLAYING;
         StartMetronome(CurrentTrackBPM);
         ButtonManager.ToggleAllButtonsExcept(ButtonManager.ButtonType.GAME, false);
     }
 }
    public void StopChallenge(bool showResults)
    {
        StopMetronome();
        m_ttFinishWaitTimer.Reset();
        ButtonManager.ToggleAllButtons(true);

        if (TutorialManager_Base.TutorialOpened)
        {
            m_eChallengePhase = ChallengePhase.STOPPING;
        }
        else
        {
            m_eChallengePhase = (showResults ? ChallengePhase.RESULTS : ChallengePhase.STOPPING);
        }
    }