/// <summary>
        /// Starts the dictionary cracking process.
        /// </summary>
        public static void RunCracking()
        {
            List <string>   usersRaw  = ServerMessaging.SetupPasswords();
            List <UserInfo> userInfos = PasswordHandler.ReadPasswordList(usersRaw);

            remainingPasswords = userInfos.Count;
            List <UserInfoClearText> result = new List <UserInfoClearText>();

            while (ServerMessaging.SetupValidChunk())
            {
                foreach (string line in Client.Instance.Chunk)
                {
                    IEnumerable <UserInfoClearText> partialResult = CheckVariations.CheckWordWithVariations(line, userInfos);
                    result.AddRange(partialResult);
                    remainingPasswords -= partialResult.Count();
                }
                if (result.Count > 0)
                {
                    ServerMessaging.WriteResults(result);
                }
                result = new List <UserInfoClearText>();
            }
        }