diff --git a/ECTrainer2/Worker.cpp b/ECTrainer2/Worker.cpp index 3300504..824562f 100644 --- a/ECTrainer2/Worker.cpp +++ b/ECTrainer2/Worker.cpp @@ -23,6 +23,7 @@ , _Shift(0, 0) , _StartStage(0) , _EnableTrainLevel(false) + , _Error(-1.F) { _pExpTimer = new nkc::HPTimer(); _pContactTimer = new nkc::HPTimer(); @@ -100,7 +101,7 @@ _ShiftLog.push_back(shift ); //nkc::wut::DebugPrintf(_T("Shift %.1f,%.1f\n"), shift.x, shift.y); } - } if (Ect()->PStimulus()->IsCalibCheck()) { + } else if (Ect()->PStimulus()->IsCalibCheck()) { // キャリブレーションチェック if (Ect()->PStimulus()->GetStimTime() >= SHIFT_LOG_STARTTIME && elems.size() > 0) { auto shift = gazeI - cv::Point2f(elems[0].x, elems[0].y); @@ -170,11 +171,11 @@ for (auto& x : _ErrorLog) sum += x; error.x = sum.x / _ErrorLog.size(); error.y = sum.y / _ErrorLog.size(); - auto totalError = sqrtf(error.x * error.x + error.y * error.y); + _Error = sqrtf(error.x * error.x + error.y * error.y); nkc::wut::DebugPrintf(_T("Error x=%.1f, y=%.1f, total=%.1f (Tole=%.1f)\n"), - error.x, error.y, totalError, CALIB_ERROR_TOLERANCE); + error.x, error.y, _Error, CALIB_ERROR_TOLERANCE); _ErrorLog.clear(); - return totalError <= CALIB_ERROR_TOLERANCE; + return _Error <= CALIB_ERROR_TOLERANCE; } // 判定パラメータをリセット @@ -215,13 +216,21 @@ case (int)ECTMSG::CALIB_ERR: // キャリブレーションエラー _AppStatus = APP_STATUS::IDLE; Ect()->PStimulus()->PostMsg((int)ECTMSG::CALIB_FAILED); - this->EventLog(_T("Calibration Failed")); + { + TCHAR buf[256]; + _stprintf_s(buf, 256, _T("Calibration Failed Err=%.1f"), _Error); + this->EventLog(buf); + } break; case (int)ECTMSG::SOFTCALIB_OK: // キャリブレーション成功 _AppStatus = APP_STATUS::IDLE; Ect()->PStimulus()->PostMsg((int)ECTMSG::SOFTCALIB_OK); - this->EventLog(_T("Calibration OK")); + { + TCHAR buf[256]; + _stprintf_s(buf, 256, _T("Calibration OK Err=%.1f"), _Error); + this->EventLog(buf); + } break; case (int)ECTMSG::EXP_START: // 実験開始 @@ -323,13 +332,12 @@ STARTUPINFO si = { sizeof(STARTUPINFO) }; TCHAR cmd[1024]; _stprintf_s(cmd, 1024, _T("EcomAnalysis.exe \"%s\""), _DataLog.Filename().c_str()); - if (CreateProcess( - NULL, - //(LPWSTR)_DataLog.Filename().c_str(), - cmd, + if (CreateProcess(NULL, cmd, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) { this->EventLog(_T("Launch analysis software OK\n")); } else { this->EventLog(_T("Launch analysis software failed\n")); } + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); } diff --git a/ECTrainer2/Worker.h b/ECTrainer2/Worker.h index bb58b52..7e1b2d5 100644 --- a/ECTrainer2/Worker.h +++ b/ECTrainer2/Worker.h @@ -43,6 +43,7 @@ int _TrainingLevel; // トレーニングレベル(高いほど難度UP) std::vector _ShiftLog; // 注視点のずれ記録 std::vector _ErrorLog; // 注視点チェックのずれ記録 + float _Error; // 注視点チェックのずれ量 cv::Point2f _Shift; // 注視点のずれ int _StartStage; // 開始ステージ Logger _DataLog; // データログ diff --git a/EcomAnalysis/EcomAnalysis.csproj b/EcomAnalysis/EcomAnalysis.csproj index 7d749b1..4b27d51 100644 --- a/EcomAnalysis/EcomAnalysis.csproj +++ b/EcomAnalysis/EcomAnalysis.csproj @@ -52,6 +52,7 @@ Form1.cs + diff --git a/EcomAnalysis/Form1.Designer.cs b/EcomAnalysis/Form1.Designer.cs index a7aeb2b..418fd4c 100644 --- a/EcomAnalysis/Form1.Designer.cs +++ b/EcomAnalysis/Form1.Designer.cs @@ -25,25 +25,232 @@ /// private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.TxtFB1 = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.TxtFB2 = new System.Windows.Forms.TextBox(); + this.TxtFB3 = new System.Windows.Forms.TextBox(); + this.TxtFB4 = new System.Windows.Forms.TextBox(); + this.TxtFB5 = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.TxtFBTotal = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.TxtDateTime = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(61, 43); + this.label1.Location = new System.Drawing.Point(12, 9); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(35, 12); + this.label1.Size = new System.Drawing.Size(46, 12); this.label1.TabIndex = 0; - this.label1.Text = "label1"; + this.label1.Text = "Log File"; + // + // textBox1 + // + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.Location = new System.Drawing.Point(64, 6); + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(380, 19); + this.textBox1.TabIndex = 1; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label2.Location = new System.Drawing.Point(57, 149); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(41, 24); + this.label2.TabIndex = 2; + this.label2.Text = "OK"; + // + // TxtFB1 + // + this.TxtFB1.BackColor = System.Drawing.SystemColors.Info; + this.TxtFB1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TxtFB1.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.TxtFB1.Location = new System.Drawing.Point(193, 146); + this.TxtFB1.Name = "TxtFB1"; + this.TxtFB1.ReadOnly = true; + this.TxtFB1.Size = new System.Drawing.Size(199, 24); + this.TxtFB1.TabIndex = 3; + this.TxtFB1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label3.Location = new System.Drawing.Point(57, 190); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(62, 24); + this.label3.TabIndex = 4; + this.label3.Text = "Good"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label4.Location = new System.Drawing.Point(57, 231); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(54, 24); + this.label4.TabIndex = 5; + this.label4.Text = "Nice"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label5.Location = new System.Drawing.Point(57, 272); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(65, 24); + this.label5.TabIndex = 6; + this.label5.Text = "Great"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label6.Location = new System.Drawing.Point(57, 313); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(101, 24); + this.label6.TabIndex = 7; + this.label6.Text = "Excellent"; + // + // TxtFB2 + // + this.TxtFB2.BackColor = System.Drawing.SystemColors.Info; + this.TxtFB2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TxtFB2.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.TxtFB2.Location = new System.Drawing.Point(193, 187); + this.TxtFB2.Name = "TxtFB2"; + this.TxtFB2.ReadOnly = true; + this.TxtFB2.Size = new System.Drawing.Size(199, 24); + this.TxtFB2.TabIndex = 8; + this.TxtFB2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // TxtFB3 + // + this.TxtFB3.BackColor = System.Drawing.SystemColors.Info; + this.TxtFB3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TxtFB3.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.TxtFB3.Location = new System.Drawing.Point(193, 228); + this.TxtFB3.Name = "TxtFB3"; + this.TxtFB3.ReadOnly = true; + this.TxtFB3.Size = new System.Drawing.Size(199, 24); + this.TxtFB3.TabIndex = 9; + this.TxtFB3.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // TxtFB4 + // + this.TxtFB4.BackColor = System.Drawing.SystemColors.Info; + this.TxtFB4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TxtFB4.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.TxtFB4.Location = new System.Drawing.Point(193, 269); + this.TxtFB4.Name = "TxtFB4"; + this.TxtFB4.ReadOnly = true; + this.TxtFB4.Size = new System.Drawing.Size(199, 24); + this.TxtFB4.TabIndex = 10; + this.TxtFB4.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // TxtFB5 + // + this.TxtFB5.BackColor = System.Drawing.SystemColors.Info; + this.TxtFB5.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TxtFB5.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.TxtFB5.Location = new System.Drawing.Point(193, 310); + this.TxtFB5.Name = "TxtFB5"; + this.TxtFB5.ReadOnly = true; + this.TxtFB5.Size = new System.Drawing.Size(199, 24); + this.TxtFB5.TabIndex = 11; + this.TxtFB5.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label7.Location = new System.Drawing.Point(57, 368); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(58, 24); + this.label7.TabIndex = 12; + this.label7.Text = "合計"; + // + // TxtFBTotal + // + this.TxtFBTotal.BackColor = System.Drawing.SystemColors.Info; + this.TxtFBTotal.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TxtFBTotal.Font = new System.Drawing.Font("MS UI Gothic", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.TxtFBTotal.Location = new System.Drawing.Point(193, 365); + this.TxtFBTotal.Name = "TxtFBTotal"; + this.TxtFBTotal.ReadOnly = true; + this.TxtFBTotal.Size = new System.Drawing.Size(199, 24); + this.TxtFBTotal.TabIndex = 13; + this.TxtFBTotal.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("MS UI Gothic", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label8.Location = new System.Drawing.Point(22, 101); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(94, 21); + this.label8.TabIndex = 14; + this.label8.Text = "実施日時"; + // + // TxtDateTime + // + this.TxtDateTime.BackColor = System.Drawing.SystemColors.Control; + this.TxtDateTime.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TxtDateTime.Font = new System.Drawing.Font("MS UI Gothic", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.TxtDateTime.Location = new System.Drawing.Point(137, 101); + this.TxtDateTime.Name = "TxtDateTime"; + this.TxtDateTime.ReadOnly = true; + this.TxtDateTime.Size = new System.Drawing.Size(288, 21); + this.TxtDateTime.TabIndex = 15; + this.TxtDateTime.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("MS UI Gothic", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label9.Location = new System.Drawing.Point(100, 39); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(251, 37); + this.label9.TabIndex = 16; + this.label9.Text = "Ecom実施結果"; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(412, 235); + this.ClientSize = new System.Drawing.Size(456, 415); + this.Controls.Add(this.label9); + this.Controls.Add(this.TxtDateTime); + this.Controls.Add(this.label8); + this.Controls.Add(this.TxtFBTotal); + this.Controls.Add(this.label7); + this.Controls.Add(this.TxtFB5); + this.Controls.Add(this.TxtFB4); + this.Controls.Add(this.TxtFB3); + this.Controls.Add(this.TxtFB2); + this.Controls.Add(this.label6); + this.Controls.Add(this.label5); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.TxtFB1); + this.Controls.Add(this.label2); + this.Controls.Add(this.textBox1); this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; this.Name = "Form1"; - this.Text = "Form1"; + this.Text = "Ecom Analysis"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); this.PerformLayout(); @@ -53,6 +260,22 @@ #endregion private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox TxtFB1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox TxtFB2; + private System.Windows.Forms.TextBox TxtFB3; + private System.Windows.Forms.TextBox TxtFB4; + private System.Windows.Forms.TextBox TxtFB5; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox TxtFBTotal; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox TxtDateTime; + private System.Windows.Forms.Label label9; } } diff --git a/EcomAnalysis/Form1.cs b/EcomAnalysis/Form1.cs index a7ec09e..5c456a7 100644 --- a/EcomAnalysis/Form1.cs +++ b/EcomAnalysis/Form1.cs @@ -7,16 +7,107 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.IO; +using System.Diagnostics; namespace EcomAnalysis { public partial class Form1 : Form { + + private string[] _HeaderItems = { + "stimNo", "sceneNo", "stimTime", "contact time", "Feedback", "RR" }; + private Dictionary _SceneNoAssign = new Dictionary(); + private List _Data = new List(); + public Form1() { InitializeComponent(); + for (int scene = 1, stim = 5; scene <= 10; scene++, stim += 2) { + _SceneNoAssign.Add(stim, scene); + } + for (int scene = 11, stim = 26; scene <= 20; scene++, stim += 2) { + _SceneNoAssign.Add(stim, scene); + } + for (int scene = 21, stim = 47; scene <= 30; scene++, stim += 2) { + _SceneNoAssign.Add(stim, scene); + } + for (int scene = 31, stim = 68; scene <= 40; scene++, stim += 2) { + _SceneNoAssign.Add(stim, scene); + } } private void Form1_Load(object sender, EventArgs e) { + textBox1.Text = "not opened"; var args = Environment.GetCommandLineArgs(); - label1.Text = args.Length > 1 ? args[1] : "no args"; + if (args.Length > 1) { + ReadCSV(args[1]); + Analyze(); + } + } + + private void Analyze() { + var fbCounts = new int[5]; + var fbPts = new int[5]; + for (int i=0; i s.Feedback == i + 1).Count(); + fbPts[i] = fbCounts[i] * (i + 1); + } + TxtFB1.Text = fbCounts[0].ToString("0回") + + fbPts[0].ToString(" 0ポイント"); + TxtFB2.Text = fbCounts[1].ToString("0回") + + fbPts[1].ToString(" 0ポイント"); + TxtFB3.Text = fbCounts[2].ToString("0回") + + fbPts[2].ToString(" 0ポイント"); + TxtFB4.Text = fbCounts[3].ToString("0回") + + fbPts[3].ToString(" 0ポイント"); + TxtFB5.Text = fbCounts[4].ToString("0回") + + fbPts[4].ToString(" 0ポイント"); + TxtFBTotal.Text = fbCounts.Sum().ToString("0回") + + fbPts.Sum().ToString(" 0ポイント"); + } + + private void ReadCSV(string csvfile) { + + char[] sep = { ',' }; + if (!File.Exists(csvfile)) { + MessageBox.Show("ファイルがありません", "Error", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + using (var sr = new StreamReader(csvfile, + Encoding.GetEncoding("shift_jis"))) { + + var readHeader = sr.ReadLine().Split(sep); + var headerCol = new Dictionary(); + foreach (var hi in _HeaderItems) { + headerCol.Add(hi, readHeader.ToList().IndexOf(hi)); + } + if (headerCol.Count < _HeaderItems.Length-1) { + MessageBox.Show("必要な列がありません", "Error", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + _Data.Clear(); + var sceneNoExist = headerCol["sceneNo"] >= 0; + while (sr.Peek() > -1) { + var line = sr.ReadLine().Split(sep); + var ld = new LogData(); + ld.StimNo = int.Parse(line[headerCol["stimNo"]]); + ld.SceneTime = double.Parse(line[headerCol["stimTime"]]); + ld.ContactTime = double.Parse(line[headerCol["contact time"]]); + ld.Feedback = int.Parse(line[headerCol["Feedback"]]); + ld.RR = int.Parse(line[headerCol["RR"]]); + ld.SceneNo = sceneNoExist ? int.Parse(line[headerCol["sceneNo"]]) + : (_SceneNoAssign.ContainsKey(ld.StimNo) ? _SceneNoAssign[ld.StimNo] : 0); + _Data.Add(ld); + } + //Debug.WriteLine(_Data.Count); + textBox1.Text = csvfile; + var filename = Path.GetFileNameWithoutExtension(csvfile); + TxtDateTime.Text = string.Format("{0}年{1}月{2}日 {3}時{4}分", + filename.Substring(0,4), filename.Substring(4, 2), + filename.Substring(6, 2), filename.Substring(9, 2), + filename.Substring(11, 2)); + } } } } diff --git a/EcomAnalysis/LogData.cs b/EcomAnalysis/LogData.cs new file mode 100644 index 0000000..7923dd5 --- /dev/null +++ b/EcomAnalysis/LogData.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EcomAnalysis { + + struct Point2f { public float x; public float y; } + + class LogData { + //public double ElapTime; // 経過時間 + public int StimNo; // 刺激データ番号 + public int SceneNo; // シーン番号 + public double SceneTime; // 刺激提示の経過時間 + //public Point2f GazeV; // 注視点(視野カメラ座標) + //public Point2f Shift; // ずれ + //public Point2f GazeI; // 注視点(画像座標) + //public int Target; // ターゲット判定 + public double ContactTime; // 目標コンタクト時間 + public int Feedback; // フィードバック + //public int TrainingLevel; // トレーニングレベル + public int RR; // バイタル出力(RR間隔) + //public float PupilL; // 瞳孔径 + //public float PupilR; // 瞳孔径 + } +} diff --git a/PrismSoftware.sln b/PrismSoftware.sln index ba45f05..6402357 100644 --- a/PrismSoftware.sln +++ b/PrismSoftware.sln @@ -52,7 +52,6 @@ {EE0E8DA2-9781-44A8-B15A-BAD7D5BB03CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EE0E8DA2-9781-44A8-B15A-BAD7D5BB03CB}.Debug|Any CPU.Build.0 = Debug|Any CPU {EE0E8DA2-9781-44A8-B15A-BAD7D5BB03CB}.Debug|x64.ActiveCfg = Debug|Any CPU - {EE0E8DA2-9781-44A8-B15A-BAD7D5BB03CB}.Debug|x64.Build.0 = Debug|Any CPU {EE0E8DA2-9781-44A8-B15A-BAD7D5BB03CB}.Debug|x86.ActiveCfg = Debug|Any CPU {EE0E8DA2-9781-44A8-B15A-BAD7D5BB03CB}.Debug|x86.Build.0 = Debug|Any CPU {EE0E8DA2-9781-44A8-B15A-BAD7D5BB03CB}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -73,6 +72,7 @@ {7A0F46B7-29AA-4A68-9939-B6A523DA333C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7A0F46B7-29AA-4A68-9939-B6A523DA333C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7A0F46B7-29AA-4A68-9939-B6A523DA333C}.Debug|x64.ActiveCfg = Debug|Any CPU + {7A0F46B7-29AA-4A68-9939-B6A523DA333C}.Debug|x64.Build.0 = Debug|Any CPU {7A0F46B7-29AA-4A68-9939-B6A523DA333C}.Debug|x86.ActiveCfg = Debug|Any CPU {7A0F46B7-29AA-4A68-9939-B6A523DA333C}.Debug|x86.Build.0 = Debug|Any CPU {7A0F46B7-29AA-4A68-9939-B6A523DA333C}.Release|Any CPU.ActiveCfg = Release|Any CPU