public Crashlog(string crashdata)
        {
            //Only use splitted Crash data!
            rawdata = crashdata;

            Assertion = Regex.Match(crashdata, @"Assertion: ?(?<data>.*)").Groups["data"].Value;
            if (Assertion == "")
            {
                Assertion = Regex.Match(crashdata, @"Exception: ?(?<data>.*\n.*)").Groups["data"].Value;
            }

            Filename  = Regex.Match(crashdata, @"File: ?(?<data>.*)").Groups["data"].Value;
            Exename   = Regex.Match(crashdata, @"App: ?(?<data>.*)").Groups["data"].Value;
            Pid       = UInt16.Parse(Regex.Match(crashdata, @"Pid: ?(?<data>.*)").Groups["data"].Value);
            Arguments = Regex.Match(crashdata, @"Cmdline: ?(?<data>.*)").Groups["data"].Value.Split('-');
            BaseAddr  = Regex.Match(crashdata, @"BaseAddr: ?(?<data>.*)").Groups["data"].Value;
            ProgramID = Regex.Match(crashdata, @"ProgramId: ?(?<data>.*)").Groups["data"].Value;
            Build     = Regex.Match(crashdata, @"Build: ?(?<data>.*)").Groups["data"].Value;
            CrashTime = Regex.Match(crashdata, @"When: ?(?<data>.*)").Groups["data"].Value;
            UpTime    = Regex.Match(crashdata, @"Uptime: ?(?<data>.*)").Groups["data"].Value;

            Username   = Regex.Match(crashdata, @"Name: ?(?<data>.*)").Groups["data"].Value;
            IPAdress   = Regex.Match(crashdata, @"IpAddr: ?(?<data>.*)").Groups["data"].Value;
            Processors = Regex.Match(crashdata, @"Processors: ?(?<data>.*)").Groups["data"].Value;
            OS         = Regex.Match(crashdata, @"OSVersion: ?(?<data>.*)").Groups["data"].Value;

            DllList      = Regex.Matches(crashdata, @"\w:\\.*.dll").Cast <Match>().Select(m => m.Value).ToArray();
            Solutionkey  = CrashLibrary.ClassifyCrash(this);
            Solutioninfo = CrashLibrary.SolutionInfo[Solutionkey];
        }
 public void Solve()
 {
     if (IsSolveable)
     {
         CrashLibrary.ApplySolution(Solutionkey);
     }
 }