diff --git a/Redistribute/README.md b/Redistribute/README.md
deleted file mode 100644
index cc04948..0000000
--- a/Redistribute/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# CS2_Project
-practic project for cs2 group
diff --git a/Redistribute/SqlLocalDBx32.msi b/Redistribute/SqlLocalDBx32.msi
deleted file mode 100644
index 1930374..0000000
Binary files a/Redistribute/SqlLocalDBx32.msi and /dev/null differ
diff --git a/Redistribute/SqlLocalDBx64.msi b/Redistribute/SqlLocalDBx64.msi
deleted file mode 100644
index bdcb80a..0000000
Binary files a/Redistribute/SqlLocalDBx64.msi and /dev/null differ
diff --git a/Solution/ContosoProject/ContosoUI/App.config b/Solution/ContosoProject/ContosoUI/App.config
index 9693546..6e1f0d3 100644
--- a/Solution/ContosoProject/ContosoUI/App.config
+++ b/Solution/ContosoProject/ContosoUI/App.config
@@ -3,17 +3,31 @@
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.Designer.cs b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.Designer.cs
index 97f8f80..2c24291 100644
--- a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.Designer.cs
+++ b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.Designer.cs
@@ -62,9 +62,9 @@ private void InitializeComponent()
this.OkButton.AutoWidthInLayoutControl = true;
this.OkButton.Image = ((System.Drawing.Image)(resources.GetObject("OkButton.Image")));
this.OkButton.ImageLocation = DevExpress.XtraEditors.ImageLocation.MiddleCenter;
- this.OkButton.Location = new System.Drawing.Point(458, 305);
+ this.OkButton.Location = new System.Drawing.Point(588, 505);
this.OkButton.Name = "OkButton";
- this.OkButton.Size = new System.Drawing.Size(64, 44);
+ this.OkButton.Size = new System.Drawing.Size(84, 44);
this.OkButton.StyleController = this.layoutControl1;
this.OkButton.TabIndex = 4;
this.OkButton.Click += new System.EventHandler(this.OkButton_Click);
@@ -80,7 +80,7 @@ private void InitializeComponent()
this.layoutControl1.Name = "layoutControl1";
this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(733, 33, 250, 350);
this.layoutControl1.Root = this.layoutControlGroup1;
- this.layoutControl1.Size = new System.Drawing.Size(534, 361);
+ this.layoutControl1.Size = new System.Drawing.Size(684, 561);
this.layoutControl1.TabIndex = 0;
this.layoutControl1.Text = "layoutControl1";
//
@@ -89,7 +89,7 @@ private void InitializeComponent()
this.LoginPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("LoginPictureBox.Image")));
this.LoginPictureBox.Location = new System.Drawing.Point(12, 12);
this.LoginPictureBox.Name = "LoginPictureBox";
- this.LoginPictureBox.Size = new System.Drawing.Size(510, 289);
+ this.LoginPictureBox.Size = new System.Drawing.Size(660, 489);
this.LoginPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.LoginPictureBox.TabIndex = 8;
this.LoginPictureBox.TabStop = false;
@@ -97,9 +97,9 @@ private void InitializeComponent()
// LoginTextEdit
//
this.LoginTextEdit.EditValue = "";
- this.LoginTextEdit.Location = new System.Drawing.Point(56, 305);
+ this.LoginTextEdit.Location = new System.Drawing.Point(56, 505);
this.LoginTextEdit.Name = "LoginTextEdit";
- this.LoginTextEdit.Size = new System.Drawing.Size(398, 20);
+ this.LoginTextEdit.Size = new System.Drawing.Size(528, 20);
this.LoginTextEdit.StyleController = this.layoutControl1;
this.LoginTextEdit.TabIndex = 4;
this.LoginTextEdit.KeyDown += new System.Windows.Forms.KeyEventHandler(this.LoginTextEdit_KeyDown);
@@ -107,12 +107,12 @@ private void InitializeComponent()
// PasswordEdit
//
this.PasswordEdit.EditValue = "";
- this.PasswordEdit.Location = new System.Drawing.Point(56, 329);
+ this.PasswordEdit.Location = new System.Drawing.Point(56, 529);
this.PasswordEdit.Name = "PasswordEdit";
this.PasswordEdit.Properties.Appearance.Font = new System.Drawing.Font("Tahoma", 8F);
this.PasswordEdit.Properties.Appearance.Options.UseFont = true;
this.PasswordEdit.Properties.UseSystemPasswordChar = true;
- this.PasswordEdit.Size = new System.Drawing.Size(398, 20);
+ this.PasswordEdit.Size = new System.Drawing.Size(528, 20);
this.PasswordEdit.StyleController = this.layoutControl1;
this.PasswordEdit.TabIndex = 6;
this.PasswordEdit.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PasswordEdit_KeyDown);
@@ -127,7 +127,7 @@ private void InitializeComponent()
this.layoutControlGroup4});
this.layoutControlGroup1.Location = new System.Drawing.Point(0, 0);
this.layoutControlGroup1.Name = "Root";
- this.layoutControlGroup1.Size = new System.Drawing.Size(534, 361);
+ this.layoutControlGroup1.Size = new System.Drawing.Size(684, 561);
this.layoutControlGroup1.TextVisible = false;
//
// layoutControlItem1
@@ -137,7 +137,7 @@ private void InitializeComponent()
this.layoutControlItem1.Location = new System.Drawing.Point(0, 0);
this.layoutControlItem1.MinSize = new System.Drawing.Size(104, 24);
this.layoutControlItem1.Name = "layoutControlItem1";
- this.layoutControlItem1.Size = new System.Drawing.Size(514, 293);
+ this.layoutControlItem1.Size = new System.Drawing.Size(664, 493);
this.layoutControlItem1.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
this.layoutControlItem1.TextVisible = false;
@@ -149,9 +149,9 @@ private void InitializeComponent()
this.layoutControlGroup3.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
this.LoginLayoutControlItem,
this.PasswordLayoutControlItem});
- this.layoutControlGroup3.Location = new System.Drawing.Point(0, 293);
+ this.layoutControlGroup3.Location = new System.Drawing.Point(0, 493);
this.layoutControlGroup3.Name = "layoutControlGroup3";
- this.layoutControlGroup3.Size = new System.Drawing.Size(446, 48);
+ this.layoutControlGroup3.Size = new System.Drawing.Size(576, 48);
this.layoutControlGroup3.Text = "layoutControlGroup2";
//
// LoginLayoutControlItem
@@ -161,7 +161,7 @@ private void InitializeComponent()
this.LoginLayoutControlItem.MaxSize = new System.Drawing.Size(0, 24);
this.LoginLayoutControlItem.MinSize = new System.Drawing.Size(98, 24);
this.LoginLayoutControlItem.Name = "LoginLayoutControlItem";
- this.LoginLayoutControlItem.Size = new System.Drawing.Size(446, 24);
+ this.LoginLayoutControlItem.Size = new System.Drawing.Size(576, 24);
this.LoginLayoutControlItem.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
this.LoginLayoutControlItem.Text = "Логин:";
this.LoginLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Left;
@@ -172,7 +172,7 @@ private void InitializeComponent()
this.PasswordLayoutControlItem.Control = this.PasswordEdit;
this.PasswordLayoutControlItem.Location = new System.Drawing.Point(0, 24);
this.PasswordLayoutControlItem.Name = "layoutControlItem3";
- this.PasswordLayoutControlItem.Size = new System.Drawing.Size(446, 24);
+ this.PasswordLayoutControlItem.Size = new System.Drawing.Size(576, 24);
this.PasswordLayoutControlItem.Text = "Пароль:";
this.PasswordLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Left;
this.PasswordLayoutControlItem.TextSize = new System.Drawing.Size(41, 13);
@@ -183,9 +183,9 @@ private void InitializeComponent()
this.layoutControlGroup4.GroupBordersVisible = false;
this.layoutControlGroup4.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
this.simpleButtonLCI});
- this.layoutControlGroup4.Location = new System.Drawing.Point(446, 293);
+ this.layoutControlGroup4.Location = new System.Drawing.Point(576, 493);
this.layoutControlGroup4.Name = "layoutControlGroup4";
- this.layoutControlGroup4.Size = new System.Drawing.Size(68, 48);
+ this.layoutControlGroup4.Size = new System.Drawing.Size(88, 48);
this.layoutControlGroup4.Text = "layoutControlGroup3";
//
// simpleButtonLCI
@@ -196,7 +196,7 @@ private void InitializeComponent()
this.simpleButtonLCI.Location = new System.Drawing.Point(0, 0);
this.simpleButtonLCI.MinSize = new System.Drawing.Size(46, 42);
this.simpleButtonLCI.Name = "simpleButtonLCI";
- this.simpleButtonLCI.Size = new System.Drawing.Size(68, 48);
+ this.simpleButtonLCI.Size = new System.Drawing.Size(88, 48);
this.simpleButtonLCI.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
this.simpleButtonLCI.TextLocation = DevExpress.Utils.Locations.Left;
this.simpleButtonLCI.TextSize = new System.Drawing.Size(0, 0);
@@ -219,7 +219,7 @@ private void InitializeComponent()
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(534, 361);
+ this.ClientSize = new System.Drawing.Size(684, 561);
this.Controls.Add(this.layoutControl1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
diff --git a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.cs b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.cs
index f47188b..35479e0 100644
--- a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.cs
+++ b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.cs
@@ -15,8 +15,8 @@ namespace ContosoUI.Authentication
public partial class AuthenticationForm : DevExpress.XtraEditors.XtraForm
{
public event EventHandler OkButtonClick = null;
- public AuthenticationPresenter presenter = null;
-
+ AuthenticationPresenter presenter = null;
+ public AuthenticationPresenter Presenter { get { return this.presenter; } }
public string Login { get { return LoginTextEdit.Text; } }
public string Password { get { return PasswordEdit.Text; } }
@@ -64,5 +64,15 @@ public void FieldsReset()
PasswordReset();
LoginTextEdit.Text = String.Empty;
}
+
+ internal void UserIsNotActiveDialog()
+ {
+ MessageBox.Show("Извините, данный аккаунт не активен.", "Ошибка!");
+ }
+
+ internal void AccessDenyDialog()
+ {
+ MessageBox.Show("Неверный логин и/или пароль", "Ошибка!");
+ }
}
}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.resx b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.resx
index 2f281fc..50f6483 100644
--- a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.resx
+++ b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationForm.resx
@@ -181,505 +181,1595 @@
- /9j/4AAQSkZJRgABAQEASABIAAD/7gAOQWRvYmUAZAAAAAAB/+ELIEV4aWYAAE1NACoAAAAIAAcBEgAD
- AAAAAQABAAABGgAFAAAAAQAAAGIBGwAFAAAAAQAAAGoBKAADAAAAAQACAAABMQACAAAAHgAAAHIBMgAC
- AAAAFAAAAJCHaQAEAAAAAQAAAKQAAADEAEgAAAABAAAASAAAAAEAAEFkb2JlIFBob3Rvc2hvcCBDUzYg
- KFdpbmRvd3MpADIwMTU6MTA6MjAgMTc6MDg6MTIAAAKgAgAEAAAAAQAAArygAwAEAAAAAQAAAZMAAAAA
- AAAABgEDAAMAAAABAAYAAAEaAAUAAAABAAABEgEbAAUAAAABAAABGgEoAAMAAAABAAIAAAIBAAQAAAAB
- AAABIgICAAQAAAABAAAJ9QAAAAAAAABIAAAAAQAAAEgAAAAB/9j/7QAMQWRvYmVfQ00AAf/uAA5BZG9i
- ZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwM
- DAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwM
- DAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAFwAoAMBIgACEQEDEQH/3QAEAAr/xAE/AAABBQEBAQEB
- AQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUH
- BggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNU
- ZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3
- EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPEl
- BhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdH
- V2d3h5ent8f/2gAMAwEAAhEDEQA/APVUkkklKSSSSUpMkkkpSSSSSlJJJJKUkkuI+u31gy3Xu6PgXuxW
- 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
- AAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3Bh
- Y2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2Ug
- LSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENv
- bmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRp
- b24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8u
- ABDPFAAD7cwABBMLAANcngAAAAFYWVogAAAAAABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAA
- AAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAAQ1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAt
- ADIANwA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADB
- AMYAywDQANUA2wDgAOUA6wDwAPYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1
- AXwBgwGLAZIBmgGhAakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJx
- AnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6
- A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVY
- BWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdP
- B2EHdAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmk
- CboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoMQwxc
- DHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96
- D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMD
- EyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6
- Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3Gp4axRrsGxQbOxtj
- G4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6+HukfEx8+H2kflB+/H+ogFSBB
- IGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWX
- Jccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitp
- K50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6
- MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiM
- OMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o76DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/i
- QCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fA
- SAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAn
- UHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1ka
- WWlZuFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKc
- YvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yv
- bQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdW
- d7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKS
- gvSDV4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45m
- js6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrV
- m0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaLpv2nbqfg
- qFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCszizrrQltJy1E7WK
- tgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPU
- xFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB
- 00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p36/gNuC94UThzOJT
- 4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM
- 8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf///9sAQwAGBAQEBQQG
- BQUGCQYFBgkLCAYGCAsMCgoLCgoMEAwMDAwMDBAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/9sA
- QwEHBwcNDA0YEBAYFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
- DAwMDAwM/8AAEQgBkwK8AwERAAIRAQMRAf/EAB8AAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKC//E
- ALUQAAIBAwMCBAIGBwMEAgYCcwECAxEEAAUhEjFBUQYTYSJxgRQykaEHFbFCI8FS0eEzFmLwJHKC8SVD
- NFOSorJjc8I1RCeTo7M2F1RkdMPS4ggmgwkKGBmElEVGpLRW01UoGvLj88TU5PRldYWVpbXF1eX1ZnaG
- lqa2xtbm9jdHV2d3h5ent8fX5/c4SFhoeIiYqLjI2Oj4KTlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq
- +v/EAB8BAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKC//EALURAAICAQIDBQUEBQYECAMDbQEAAhED
- BCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZF
- GidkdFU38qOzwygp0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhY
- aHiImKi4yNjo+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/dAAQAWP/aAAwDAQACEQMRAD8A9U4q
- 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq
- 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq
- 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//0PVOKuxV2KuxV2KuxV2K
+ /9j/4AAQSkZJRgABAQEASABIAAD/7gAOQWRvYmUAZAAAAAAB/+EP/kV4aWYAAE1NACoAAAAIAAwBAAAD
+ AAAAAQM0AAABAQADAAAAAQIiAAABAgADAAAAAwAAAJ4BBgADAAAAAQACAAABEgADAAAAAQABAAABFQAD
+ AAAAAQADAAABGgAFAAAAAQAAAKQBGwAFAAAAAQAAAKwBKAADAAAAAQACAAABMQACAAAAIgAAALQBMgAC
+ AAAAFAAAANaHaQAEAAAAAQAAAOoAAAEiAAgACAAIAEgAAAABAAAASAAAAAEAAEFkb2JlIFBob3Rvc2hv
+ cCBDQyAyMDE1IChXaW5kb3dzKQAyMDE1OjExOjExIDE1OjUzOjM4AAAEkAAABwAAAAQwMjIxoAEAAwAA
+ AAH//wAAoAIABAAAAAEAAAM0oAMABAAAAAEAAAIiAAAAAAAAAAYBAwADAAAAAQAGAAABGgAFAAAAAQAA
+ AXABGwAFAAAAAQAAAXgBKAADAAAAAQACAAACAQAEAAAAAQAAAYACAgAEAAAAAQAADnUAAAAAAAAASAAA
+ AAEAAABIAAAAAf/Y/+0ADEFkb2JlX0NNAAL/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsK
+ CxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAO
+ DhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAAR
+ CABrAKADASIAAhEBAxEB/90ABAAK/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEB
+ AQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYU
+ kaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSV
+ xNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIE
+ QVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD
+ 03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwD0hJMk
+ kpdJMkkpdJVep59XTem5XUbgXV4lTrnMby7aNGN/ru9q5zO+t3Ven9Aq69k4uPZjZeIy2htZe1zcm17R
+ Vi3b3Wb6W4733etX6fqfZ7K/0P6NJT1qS5fL+tPUmHreHiY9N3Uei2UhrSLAy+u8e1tdbHvtryWO/wCE
+ srs/t+wdf1u6ll9Ev67g0Yz8Kin1bGvNm5j20vfdjueHNba/7b6ddfps/o36WxJT1iS5fF+tfULrujYl
+ lFNeR10C7HsG91bKBj15NpsZ6jbH3/anXY7PfWz06/VVBn+MiuzD6dfZXVg/b6by6+8WWUNyKHek3G/V
+ 9tzKrPbdbf8Apvs9Nlf6P/CJKe3SXIZv15yMZnUrRi1EdFqwn5le4uNj8t1Yurxb2O9NleP6v6O17L/W
+ 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
+ LQpqKSmu/Htc9zm5NjGuIIYGsIb/AFC9jnqvY5tJdVkZtgeQCH+k0ASfzTVU5rvo+9j1oKTOPz/7KSnJ
+ 9So+37fcHAkgek0OOwPDmx6O139X89RbfjtIJz7Hag7XUiDrv2nbTu/k/TWweP8ACdvgn8f5xFTj+rQD
+ rnWgGHCau0h30vR/dbse1GxH12OeG5LskgCWvZs2/wApvsr+luWgP+uKL+30v7SSn//ZAP/bAEMAAgIC
+ AgICAgICAgMCAgIDBAMCAgMEBQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwMDAwMDAwMDAwM
+ DP/bAEMBAwMDBQQFCQYGCQ0KCQoNDw4ODg4PDwwMDAwMDw8MDAwMDAwPDAwMDAwMDAwMDAwMDAwMDAwM
+ DAwMDAwMDAwMDP/AABEIAiIDNAMBEQACEQEDEQH/xAAfAAAABwEBAQEBAAAAAAAAAAAEBQMCBgEABwgJ
+ Cgv/xAC1EAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRy
+ gvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl
+ 9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqq
+ usra6vr/xAAfAQACAgMBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgv/xAC1EQACAgECAwUFBAUGBAgDA20B
+ AAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz0jXiRIMXVJMICQoY
+ GSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2xtbm9kdXZ3eHl6e3x9fn
+ 9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/3QAEAGf/2gAMAwEAAhEDEQA/
+ APtgepxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K
uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K
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
- 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
- /wAE6qTSsQHjyJ/ADDa0jrP8vrWhN25lJH2EAVQfpqcFrSofyx0xpOSkoOtBEhP342mmQaR5S0/T6NFE
- XkH7b0/UNsbWmQRwkAVwJV1XFVwGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVxxVrFW8VdirsVdirsV
- dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//Q9U4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F
- XYq7FXYq7FXYq6mKupirqYq6mKupirqYq6mKupirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVcQD
- iqwxKcVW/Vo8VcLaIdsVXegnhirYjUdMVb4jFW6DFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7
- FXUxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv8A/9H1TirsVdirsVdirsVd
+ uxV2KuxV2KuxV2KuxV2Kt9vpxV//0PtgepxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux
+ V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux
+ V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux
+ V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kt9vpxV//0ftgaVO4xV23iMVdt4jFXbeI
+ xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI
+ xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI
+ xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI
+ xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI
+ xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI
+ xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFXbeI
+ xV23iMVdt4jFXbeIxV23iMVdt4jFXbeIxV23iMVdt4jFW9qdR1xV/9L7WHqcVdirsVdirsVdirsVdirs
+ VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs
+ VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs
+ VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirfb6cVf
+ /9P7WHqcVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd
irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd
irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd
- irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//Z
+ irsVdirsVdirsVdirsVdirfb6cVf/9T7WHqcVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir
+ sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir
+ sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir
+ sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirfb6cVf/9X7UkmpxV1TirqnFXVOKuqc
+ VdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1T
+ irqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuq
+ cVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1
+ TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKu
+ qcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3U0+nFX/9b7UnrirWKuxV2KuxV2
+ KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV8R/85Uf85m+XfyBr5T8vWUXmv8AM25g
+ WZdLlZhZabFIKxy3rIQzM3VYkIYjdmQFeSkB8T/846/mF/zlp/zkz+b+ka0v5g3tr5K8la7pWsed7SC5
+ bStL+opdrI2nLDZpynaeGORVjk5KwB9VwN8UPQvzy/MX/nNP/nGrzt5r87vqtt5r/KPXvMGoT+XoruJd
+ T0+xtbq7d7K1uWVYLq1ZImVABIIyfhVmIGKrP+cRP+coPzc/O7/nJi/j83a6IfLmp+Xbx4fJdirR6Zam
+ 0MRieGN2d/UqzFnZizVpXiFVVJD9KPzc/NzyZ+Snku/88ed75rbTbVlhs7KAB7q9upK+nb20ZI5O1Cdy
+ AoBZiFBOKH4weZ/+c1/+ckfzx88aT5Q/LW+TyBB5k1GLTfL3l/SPTNy73LrHH9Z1GZOdQSSWT01A3K7V
+ xZU+uP8AnKax/wCcnvyv/Kb8tPP3lf8AMu6S5/L3Q7XT/wA15bO6kma8vpmiiF/6VxEUnQSuVYsoYcg3
+ HiCVUBhH/ONX/PxC61jV9O8lfnz9StjqEi2+m/mLbRraxLK2yjUoV/doGbb1YwqrtyULycK0/Wk1KkoR
+ Uj4W6j2PUVxQ/Dn88fz9/wCc7fyK80ponnnz5a6fHrAmutAvtN0jRbjT7mBH4sLeSSwMn7skArL+8AKl
+ vtAlV4p/0Ph/zlb/AOXUP/cD0L/vH4sqfsn/AM4lfnyn59/lRp+t6lcRt518vMNL87wIqx8rtFrHdKih
+ VC3CUccQFDc1H2cUF8Af85Pfnj/zmt+RPn69ttS89W2n+UPMV3d3Hka907SNJns3tEkFIOdzZSTCWFHQ
+ OsjE1NQWUg4qHuv5Uef/APnLQf8AOPP5tfnB+aPme0Fu3k261r8rJZNP0+LUY5o4JJY7x4Le2jh9FlCs
+ izKxbrQLTkofOv8AzjF/zk7/AM5Zfm7+cvk7yxc+cJ/MnlhL2O68628WjaPDHFpcZ/fvLPFZRtGDsoKu
+ GLEBdzikhg35w/8AOaX/ADkv5V/Nz80/LGg/mV9Q0Py55v1zS9Gsf0No0vo2lnfzQwR+pLYu7cUQCrMS
+ epJOKaZ1/wA4tf8AOXX/ADkN+Y359fl55L85/mD+mfLOu3N5Hqum/onSbf1VisbiZB6tvZxSLR41PwsO
+ nhigh5z+Zf8Azl1/zmT+XfnnzL5Q8weerjQL7Sb6aOPTrjQtEqLcuTA6ObBvURkoVcEhhvU4pp+7j63Y
+ 6V5a/wAQ69fw2Gn2GnC/1fU7hljiiiji9SWVzsFAAJOLF+NX59f8/GfOmu6rfaF+RwXyn5YtnaKPzdd2
+ 8c2p33E0MkUU6vHbxtvxBRpKUYlG+FVNPpbyN5F/5yx8x/8AOLOtXlz+Y95H+bXm2/tfNHk67n1GVLmH
+ Smt4XWwaRU4QvOAxEf2FLAOVNeKh8h/k1/z8S/NfyZq8Gmfm1T8wvK5k9K9uDBDa6xaDlQtFJGsUcvHe
+ qSryP+/Fpiyp+2nlDzd5d8+eWtH83+U9Ui1ny9r1utzpmow14uhqCCpAZWVgVZWAKsCCARixfPX/ADlH
+ /wA5Q+Xv+ccvLdo31RPMHnvzCsn+GPLRcpHwjIV7u7dd0hQmgA+KRvhWgDsikB+en5J/mn/zmH/zlP8A
+ mQJtH8+foLyn5YvbG982RWRXS9NtrSSav1RDbxyXErzJHJwV2boeTqADih7Z/wA5Kaz/AM5mfkh5y81f
+ mt5P8zpr35Py3y3Meh8U1CLTbZo44yl5bzQrLFGZATygkKjqWWtMVSX/AJxP/wCcs/ze/PX/AJyJbS/N
+ d9Zaf5WuPLN26eUdMtxHZxz2xhInV5TLOXYlq8pCKGlKUxSQ/UvXte0byvouqeYvMOpQaRoei20l3qmp
+ 3LcIoYYhyZ2PsOw3PQb4ofip+ef/AD8X/MDzJqt9o/5M8PJPlS3kMdt5hmgjn1a9VTQyUmDxW6N2UKXH
+ UuCeIU0+pdP8g/8AOW3/AEKjqM835i3rfnHe60PN1jK+pS/XItGFhEP0T63ExiVmRnEdfT5NuwNTih8p
+ /kf/AM/F/wAxvK2p2elfnCB598qSusdxrMMMNvq9mhoOa+kI4rgL3VwGP+/OxU0/a7y35j0PzfoGkeaP
+ LWpQ6voOu2sd5pWpQGqSwyiqkVoQexBAINQQCCMUJ3irsVfkF/zmD+d3/OXH5EfmO/1D8wrLTvIHm+a5
+ n8gxWelaXOUt7UQ+rBMbu0ml9SIzKGJchq8lpXiqkPkn/ofD/nK3/wAuof8AuB6F/wB4/FNP0i/Ki4/5
+ zV89f848a95yk/MTRz5882/o3U/yuFzpumI8emDk9wJWitltla6R1MfqRuU4/EV5/AsX5x3P/OdH/OWd
+ pcT2lz+aBhuLWRoriJtD0KquhKsp/wBx/YjFlT0n8nv+cmP+c1vzq8+aT5C8o/mhbnUtQWSe4urvRtDj
+ t7e2gXlLNKy6eWoBsAoqSQB1xV+71ss6W8CXUqz3KRqLidF4K7gDkwWp4gneldsWL81P+cp/+c94Py31
+ jUfy6/KK1tNc836ZI1v5i803i+rYafMuzW8ESkevMm/Mk8EPw0duQRSAkP8AzhXrf/OSv5z3fnH8yfPH
+ 5i3l/wCSZNL1Hy9pFvNMLZTrMggkS5gtLSOONVgViOdAatRK0biqXzRf/wDOUf8Azld/zjP+Zer+Q/P3
+ mmHzy/l64jGo6Vq6rd293BMqzRzW16EiuVEkcgKktRTs6VUrimn64/kF+f8A5K/5yD8of4k8rSNZanp7
+ JB5n8r3DKbrTrhwSoelA8cgUmOQCjAEbMrKqxeT/APOXV9/zlLoOkWPmn/nH/V7S00Dy9p93d+dLCO2s
+ brUpBFR/Uhjv4JldEjDHjGQ5PQNUDFIfkz/0Ph/zlb/5dQ/9wPQv+8fimn35/wA4G/8AOUnn/wDODzF5
+ 28k/mr5mTzDrcFjBq3lW5+p2dkwgicw3kXGzggR6GSJhUV+126KCH1X/AM5aefPNf5Zf84+/mB538kar
+ +hPNGifor9Gan6EFz6X1nVbO2l/dXMcsTcopWX4lNK1G9DigPxY/6Hw/5yt/8uof+4HoX/ePxZU+6/8A
+ nCX80/8AnKr87/NFz5q84+frPU/yq8tyTWOuWdxpmmQT3d7Jb8oobc2VrBIpjMiSMzNxp8NGJ2UF6F/z
+ nD54/wCclvyrsdN/MP8AKrzlZaH+XNjBDY+Y7FbCxub2O+uJ2WOdzfW9xyjbkiD0yvE9Qa1Cofml/wBD
+ 4f8AOVv/AJdQ/wDcD0L/ALx+Kafdf5O/mp/zlh+dX/OL3mjzP5G81Raz+bumefpNPsr6Wz0W05aRBp1n
+ O9usc1tHacjLOSGdQ2/2qDFi+QPOv/OW/wDzm7+XOv3Plfzx5zvPLOvWiq8unXugaErGN68ZI2FgVkRq
+ GjoSppscWVP2k/5x881a954/JT8tPN3mi/8A0p5h8waHb3mr6h6UUHrTPXk/pwJHGtfBVAxYvY8Vdirs
+ VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirfb6cVf/1/tSeuKtYq7FXYq7FXYq7FXY
+ q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqwL80vPVp+WX5dedPP8AexieHyppNzfx2pPETTRo
+ fQhr29SQqn04q/lp8y+Y9Z83+YNZ80+Yr6TUtc8wXk1/qt9IfikmnYuxp0AqaADYDYbYsn7I/wDPrpEH
+ 5c/mbIEAkbzJbqz03IWzUgE+AqafPFBfpL5o8taJ5y8u615U8x2KaloXmCzlsdVsZOkkMylWAI3BFagj
+ cGhG+KH4xf8AOG/kO9/LH/nNXzd5AvWaaXynp+u2MdywAM1ujwm3nIHT1YmR/pxSXnH/AD8D/Nq+8+/n
+ df8Ak63unPln8sUGlWVoG/dvqEirJfTlQT8XMiH5R9qnFIeIf84sf+tGfk1/4FNh/wAnMVL91f8AnMv/
+ ANZj/N3/ALZUP/UZb4sQ/mtxZP6D/wDnAX82738zfyNtdJ1q5a68wflxdfoC5uZG5STWSxrJYyvvXaMm
+ Kp6+nXrigo3/AJzJ8o+VvzV0Dy7+Tt76dr+Ynmq01nXPyl1GUqiPqmgpavLp5ckU+twXTKKniOPI1KqM
+ VD+em6tbmyubiyvbeW0vLSV4bu0mRo5YpY2KujowBVlIIIIqDil9Nf8AOI356y/kT+bmlavf3DJ5M8y8
+ NI87W9WKrayuPTu+INOVtJR60J4c1H2sVL9G/wDn50be4/Jv8vbuIxzK/m6I29ylGBjk067b4WFdmoDt
+ 12xQH1x+demXN7/zjX+ZOlaRYvc3MvkDUIbDTrWPk7Eae3GOKNBUmgoFA9hih8wf8+1/y+k8tfk/5g85
+ 6jpZstV8864/1O6kQrJLpdhEkUH2gDx9drgimx64pL8iP+cgv/J9fnd/4H3mX/uqXOKXpf8AzhJ/61J+
+ U3/MZqH/AHTLvFS+4f8An5x+WtxqUX5YfmJo2kTXl+Lifyzq81rA0skguCs2nRsUBO0nrKoNal6DfqoC
+ M/5+N/mxqHlzyJ5B/J3S7h7S582Wy6p5tVW4v9Rs+EdvbsOvGWcMx6f3VNwTiofjVil/WN5J/wCUP8pf
+ 9saw/wCodMWL+VjzZ/ylXmX/ALat7/yffFk/Tj/n2Z+bd/a+ZPNP5M6ldNLpGq2kmv8AlmORqiC8tykd
+ 3FGPCaJg5HQGMnqxqoL5g/5zn8zah5k/5ya/MJL2Vnt/LrWejaTAxqIbe3tY3Kr7NNJJJ82OKQnX/OGP
+ /OTum/8AOPPmjX7PzXZXl95J86rapqk1nSSawuLVpBFdLCxAdeMrCQKeRFCORUKVSH7qeRvzL/LP84/L
+ 8t/5J8zaX5x0e7hMeo2cTBpI0mWjRXdpKBLEWU0KyoKjtixfm3/zjv8AkdrX5R/85yeetJsPL2ow+RtN
+ 0nUrrQNae3l+pix1D0JbWJbll4OYy5h2NSyN4HFW/wDn5x+bN5aW3k38mNLujDBqsX+JPNiIxBlhjlaG
+ whamxX1I5ZCp/aWM9hikPx8xS/ra0cA6PpQIqDZwAg/8Y1xYv5JcWT9dv+fZP5u3ksnm78ldVunmtLaB
+ vMflJZGJEI9RIr+BKkgKzSRyqo7+o3c4oL9d8UOxV+RH/P1Pr+RH/g0f92jFIfkTil/T9/zjR/6z3+S3
+ /gG6P/1CR4sX80Hmz/lKvMv/AG1b3/k++LJ9p/8APuL/ANaPg/8AAa1T/mTipfrb/wA5Yfmvdfk5+Rnn
+ DzXpUpg8xXccej+WZgaGO9vz6azKd/ihj5yjxKAYsQ/mikkkmkkmmkaWWVi8srkszMxqSSdyScWT+gr/
+ AJ94/wDrM3l7/ts6v/1EnFBfmb/z8K/9ad8z/wDbK0f/AKg0xSHn3/OIn5s335R/nn5O1Rblo9A8yXcX
+ l/zXbFqRvZ38ixCVx/xRIUlB6/CR3OKl/SjIIzG4lCmIqRIGpx403rXalMWL+XX8/wD8uz+VX5yfmD5F
+ SIxWGkatLJog7HTrsC5sjXv+4lQH3riyRf8Azjn+ZLflL+dX5f8AneScwabp+ppba+SxVf0deg212WA+
+ 1wikLgH9pQe2Kv1x/wCcw/Psfmj8n/8AnKnytZ3Amsfy+h8iWUqLuovb7Vbe9mYNTesUkKmhIBU964oD
+ 8I8Uv3B/59gf+Sd8+f8AgZS/90+zxQXr/wDzn/8A+suee/8AmM0X/up22Kh/O/il+6v/AD7F/wDJCebv
+ /A+v/wDul6Vigo7/AJya8u+Qf+ctPKv5g+Tfywmh8xfnP+RmoRBIhGbc85ZGiurBbudUidXEUgoHoJYl
+ rQblUPqz8gfKWteRPyW/LLyh5kthZa/oPl+zttYsg6S+hcBOUkReNnRihPElWIJGxIxQ9exV2KuxV2Ku
+ xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kt9vpxV//0PtOWFTiruQxV3IYq7kMVdyGKu5D
+ FXchiruQxV3IYq7kMVdyGKu5DFXchiruQxV3IYq7kMVdyGKu5DFXchiruQxV3IYq7kMVdyGKu5DFXxP/
+ AM/B7ya3/wCcYvNkMTcUv9T0eC5G/wASLfRTAbH+aNTvikP568Uv2t/59eGn5bfmX/4EsH/UGmKC/T/k
+ MUMTt/I/k20833/n+18s6fB511WzTTtR80JAgvZrVOHGJ5acio9NP+BXwGKv5f8A827ybUPzV/M2/uDy
+ uL7zZrVxO25q8t9M7Hck9T3OLJnn/OK//rRn5Nf+BTYf8nMVL91P+cyjX/nGT83v+2VD/wBRlvixD+a/
+ Fk/WH/n1lfSR61+c2nfGYbiy0S5NPsBoZLxBXwJEu2KC9T/5z8u7iz/ND/nEK6s55LW5g8z6k0NxExR1
+ P1zRNww3GKh83/8APxH8gx5K87QfnB5bsvS8sef5zF5jiiSkdrrYUuzmmwF2imT/AF1kJ+0MVD828Uvv
+ /TPM2uf85Hf84kXv5aLdm98//wDOPF1F5i03TiOU+q+WYYZbZhEK1L2KzUIA3RYwOTtir929GYfojSv+
+ YOD/AJNrixTLkMVfy3/85B/+T6/O7/wPvMv/AHVLnFk9N/5wk/8AWpPym/5jNQ/7pl3ipf0h8hixfgb/
+ AM/Irua5/wCcioopDVLHyppkFuN9kMtzKR1/mkOLIPgXFX9Y3kth/g7yn/2xrD/qHTFi/lY82f8AKVeZ
+ f+2re/8AJ98WT6Q/5wduZ7X/AJyk/KpoJWjM0+pQy06NHJpd4GUjuD/b1xUvZ/8An4p+TOseVvzUk/Ni
+ xtJJ/KX5gx263t6gJS01W2hWB4ZDvxEscSyISfiPMD7OKA/OnFKb6B5h17yrqtprvlnWb3y/rVg3Oz1X
+ T55La4iP+TJGVYV7774q/cT/AJwr/wCcw7385Xb8tfzGMK/mFplkbnS9djCxLrMEP97ziUKqTxqQzBNn
+ XkwVeJxQQ/Pz/n4TqM17/wA5OeareVJkj0jS9HtLZpUCqyNZR3JMRH2l5TMKn9oMO2KQ+J8Vf1taMw/R
+ Glf8wcH/ACbXFi/klxZPsj/nAPUbmx/5yl/L62gfjFq9trVperv8US6VdXIGxH+7IEO+Kl/RJyGLF3IY
+ q/Ij/n6oa/8AKiP/AAaP+7TikPyKxS/djS/+cgvO35Mfkf8A8456f5U/I3XPzbh1vyFp1xeX2kzXMa2b
+ RW8KLHIINPvQS4JIqV6dDiin4c61dSX2s6tezWzWct5ezzy2j1LRNJIzFDUKaqTToMUvt/8A59xmn/OR
+ 8A/79rVP+ZOKl9if8/QbyZfyq/LuwVqW9z5raeVN93hsZ1Q9abCVsUB+JWKX9Bf/AD7yNP8AnGfy/wD9
+ tnV/+ok4oL8zv+fhO/8Azk35o/7ZWj/9QaYpD4lVipDKSrKaqw2II7jFX9Zk08lx5WlnmbnNPpTSSvQC
+ rNBUmgoOpxYv5/f+chWH5k/k7+Qn57xObjVDpj/l5+YU7MC/6U0QFrSaU/tSXNuWkJ8AuLJ8a4q/RHyV
+ p/mG7/5wQ/5yX8++Yrue9n84+YvLtva3VyeUkyaVqWmxGXlXcVlMY/1DivV+d2Kv3A/59gmn5OefP/Ay
+ l/7p9nigvX/+c/jX/nFzz3/zGaL/AN1O2xUP54MUv05/5x+/ODzN+SP/ADhB+YPnLyhZ21zrs35mzaXa
+ 3N0jSRWn1vStOH1ngKBmQqOIb4eRFajYrFmv/Pr++u9S8yfnpqOoXEl5f6hFo1ze3cp5SSzSzX7yO7Hq
+ WYkk4pL9fuQxQ7kMVdyGKu5DFXchiruQxV3IYq7kMVdyGKu5DFXchiruQxV3IYq7kMVdyGKu5DFXchir
+ uQxV3IYq7kMVdyGKu5DFXchirfIU+nFX/9H7SnrirWKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux
+ V2KuxV2KuxV2KuxV2Kvkf/nOby1c+Zv+cZfzFjs09S50RbLWVTf+7sruKS4O38sHNvo+nFIfznYpftZ/
+ z69/8lv+Zf8A4EsH/UGmKC/T3FDD4fzA8lXHnW7/AC5h8zWEnnmxsV1K78sCUfWo7V+NJCn+yU0rWhBp
+ Qg4q/m2/5yV8pXXkj8+/zY8v3UfpBPMl7fWS04j6pqMhvbUgdP7mdemLIIz/AJxX/wDWjPya/wDApsP+
+ TmKl+6f/ADmT/wCsyfm9/wBsqH/qMt8WIfzYYsn7Jf8APrrynd2vlr81vO8wIs9a1HTtG0+oIq+nRTTz
+ tXuD9cjHtQ4oKdf8/Bf/ACZH/OI3/gS6l/1GaHioffn5qflxoP5tfl/5m/L7zGn+43zHaNALlVDSW06k
+ Pb3MdducMiq48aUOxOKH8wXnvyVr35c+cfMXkfzPbfVNc8s3sllfxipRim6SRkgVSRCHQ91IOLJkP5Pf
+ mfrX5O/mL5a/MDRCZZdFuR+kdO5FUvbGX4Lq1k7ESRkgVBo1G6qMVf1K2k0dxa21xCpSGeJJIkIAIVlB
+ AIFQKA4sURir+XH/AJyB/wDJ9fnd/wCB95l/7qlziyemf84S/wDrUf5Tf8xmof8AdMu8VL+kLFi/D3/n
+ 5v5UutO/N3yd5vENNN8z+Wks1np9q7025l9YfRFcQ4pD82MUv6w/Jf8Ayh/lP/tjWH/UOmLF/K35s/5S
+ rzL/ANtW8/5PviyfXX/Pvvync+Y/+clPLepxqTaeS9N1PWb9qGnFrdrGIVHQ+rdqfehxUv08sPz+8v8A
+ 5n/85DfmV/zi1538m6Xc+WbaweLSpL1vrB1O4toobi4hlhccPsO0kZXdfTrWtOKxfN/5yf8APs+xu3vN
+ Z/JHzMNLkdjIvkvX3eS3AO/C2v1DyqANlWVXqftSDFNvyy/MH8tfPP5Wa/L5Y8/+W7vy3rEa80guArRz
+ R1oJIJoy0cqE7ckYiu3XFLPv+cXtS1PSv+ciPyZutJDm6l82abZy8K1+rXky21107ehK9fbFS+kv+fk3
+ la60f899N8xmFhp/m/y5aSw3Vfha4snktpoxv1RFiY9viHeuKh+e+Kv619G/45Gl/wDMHB/ybXFi/kox
+ ZPvr/n3D5Tn1z/nIL/EP1cvaeSdAv717orVUnvFWxjTlTZnSeQjxCtipfvfixdir8iv+fqfT8iP/AAaP
+ +7TikPyLxS/p6/5xo/8AWfPyW/8AAN0f/qEjxYl/NJ5s/wCUq8y/9tW8/wCT74sn2j/z7k/9aOg/8BrV
+ P+ZOKl95f8/JPKdxrv5Daf5gtYy7eS/Mlne3xAJ42t1HLZsdun72aLFAfg7il/QT/wA+8/8A1mfy/wD9
+ tnV/+ok4oL8z/wDn4R/6055o/wC2Vo//AFBpikPknyd5avfOfm3yx5R01S1/5n1Wz0q04itJLuZIVNPA
+ FqnFX9V+pQx22g39vEOMUFhLHGpNaKsRA3PsMWL8bv8AnH38uD+aH/OA/wCd2g29ubjV9N846hrmgKqh
+ pDd6Zpel3ASMH9qWNXi/2eKS/L7FL9yfzq8gf8qw/wCfdF75KkhWC+0rRvLkusxr0GoXeuWF1eb0BNJ5
+ XAJ7Yo6vw2xS/cD/AJ9hf+Sc89/+BlL/AN0+zxQXrv8Azn9/6y756/5jNF/7qdtiofzxYpfuL/z7Y07T
+ 9X/5x3886XqtjBqWm3/nnUoL7T7qNZoZon0rSwySRuCrKRsQRigsg/IT8mn/AOcRtX/5yP8APvnO9stL
+ /KyZ4LryrdxTNcXA020lu5USSIAtzVZ44gN2d+nUVUPtryR5z0D8xPKehedfK1017oHmO2F1plw6NE5Q
+ kqQyNQqVZSCD3GKsqxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kt9vpxV//S
+ +0p64q1irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqA1TTLDW9M1HRtUtk
+ vdM1e1mstRs5BVJYLhDHLGw8GViDir+bD/nJL/nHfzR/zj953vNJvbae98m6nPJL5M80FaxXVsSSsUjq
+ OKzxDZ12/mA4kYsg+0/+fan5teSfLcfnX8tvMmuWmg675l1SxvfKy30qwJqEsi/VTawu5CtNz9PhH9p+
+ Xwg0OKC+5fzv/wCcvPyf/JfT9Yt5/MVp5p88WPqwWvkfSplnuRdpt6V5JGHS1CsRy9SjUrxRiKYop82/
+ 84R/l15885+fPO3/ADlf+Z8L2Wo+fIpbfylZFDEJre5eMyXSRt8SwpHCkNvUksnJjUcGZSUb/wA58f8A
+ OL2q/mTZWv5t/l9pkmp+cPL1mLTzLoFqhefUdPiLPHNAi7vNByYFQCzoaCpRVKoL8n/yC8yaT5L/ADt/
+ K/zL5iuDYaNonmWwn1a8YbW8ImCvK468YweTd6A0BO2KX7Y/85ufmb5K0/8A5xp8z26eYbC/u/zEs7OD
+ ybbW1xHK2oRy3MErXEHAtyiSJS5cfD0FasMUB+G35V/lT50/OTzfp/kzyPpbX+o3jA3d44ZbWyt6/Hc3
+ UoBEcaD6SfhUMxAKl/Sx+T/5YaJ+Tn5c+WPy80FjNaaBbcbq/ZeL3d3KxkublxU0MkjMwFTxFFGwxYvy
+ Q/5zw/5yB8oea/zV/K6z8jXlv5mX8nbu5vtT1KB+VnPfXFxaStaxzKSHEYslDMlRViASQaKQ/W38pvzc
+ 8kfnT5QsvOXkbVFvrGcBNQsHKrd2FzxDPbXUQJKSLX5MKMpZSCVD8/8A/n47+Qf6b0Oz/PTy3ZctV8tx
+ xad54iiBLTaez8be7KjqYHfg5pXgwJPGPFIfjHil/Wvo3/HI0v8A5g4P+Ta4sUJ5l8zeXvJ2iX/mXzVr
+ Np5f0DS0V9Q1a+lWGCIMwReTsQKszBVHUkgDc4q/l0/NzzBpvmz81/zO806PKZ9I8y+bNa1XSpypUvbX
+ l9NPCxVgCKo4NCK4snoP/OKvm/y75D/5yB/LXzX5r1JNI8v6XfXC6jqcoJjhFxZz26O/EEhQ8i1PYb4q
+ /pa03UtP1nT7LVtJvoNT0vUoEudP1G1kWWCeGVQySRyISrKwIIINDixfPn/OUv5DWv8AzkB+V9/5ZheK
+ 0816PIdU8l6lNVUS+jRl9GVhuIp1JRutDxehKAYqH84fmfyv5h8l69qflfzXo9zoPmDRpjBqWl3aFJI3
+ H4MrChVlJVgQykgg4sn9Jf5c/nh+Wl7+RegfmVN5v0y28uaLodnH5juWuEBsb2K1j9WylQnkJw54rH9p
+ iV41DLVYv5tZYtQ83eZriPRdMub7UvMOoyNp2k2qNPPJJcyFkiREBZ2+KmwxZP6Af+cMf+cb5vyD8g3V
+ 55mjj/5WJ52MNz5lSNxIllBCG+rWKuCVYx82aRl2LsQCyorFQX5N/wDOR3nDXvy//wCcw/P/AJ08sXf1
+ LXvLfmaG9024IJXnHbw1R1BHJHUlXWu6kjvil+zv5C/85Q/ln+fGi6YdI1m10fzvNCf0t5Bu51S/imiT
+ lMbdG4m4iA+ISRg/D9oKwZQsafnx/wA/Gvzl/Knz3ZeSfJnk7WLDzb5n8u6jcXup67pjpc29nbyRek1o
+ LmMlHaVwrMqE8fTHKhIGKQkn/PvP/nHnW9c862n53+Y9OlsfKflVZh5RM6cf0lqMsbQGWNW3MVursedK
+ GTiFJKPRUv0M/wCctv8AnHqP/nIP8tv0ZpjQ23njyvK+oeTL2chY2kdQJ7SR6fClwqgV7OqMdgRiofzq
+ eYPL+t+VNa1Ly55k0u50XXdHna21PS7tDHNDKvVWU+24PQihGxxS/pd0v89/yx/5UtD+bUHm/TP8K2Wl
+ qZLx50BS9jtw31B4yyv9Y5UUQ7OSRQbjFi/me0TRNY8yatp+g+X9MudZ1rVZlt9N0uziaaeeVuiIiAkn
+ Fk/oj/5w+/5x3H/OP/5cNb6ysUvn3zc8V/5wuIirCExqRb2KSLUMsAdqkGhdnI+GmKC+s8UOxV+MX/Pz
+ 3zp5X13zH+V/lPR9ZttR1/yamtt5n0+Bw7WR1Aac1ukxFQrssDNxO4FCeoxSH5Z4pf0bf845fm3+Wtl/
+ zjH5E8wXnnTS7XSPIXlvTNM843kkwX9HXkMEUTQTr9pXLEBRT4qjjWuLF/O9r95DqGu61f2xJt76/ubi
+ AsKEpLKzrUdtjiyfWX/OCXnbyr5E/wCcgdJ1PzfrVvoGmajpN9plvqN23CAXNwEMSSSfZQNwIBYgVoK7
+ 4qX7++cPKmiefPKnmDyd5ithe6F5nsJtP1KEGhMU6FSyN+yy15Kw3BAI6YsX80/58fkT5y/ITzte+V/M
+ 1pJNpc0kknlbzMiEWup2Yb4ZEbcLIoIEsdao3ipVmWT9Yv8An3F+YvlS9/Jm48hNrVpbeavK+qaje3ei
+ yyqlw1hMY5RdqrEcow0hRmH2SPipUVUF+bX/ADmp558u/mD/AM5E+ddb8qajBrGh20dhpttq9rIJYLl7
+ S0jjmeJ12ZRJyUMCQ1OQJBGKQ+yP+cAP+cWtYstWtPz2/MDTJNNitoXH5daNcqUmkedGjk1GWJgCqCNi
+ sIbdqmSgARmUEv0J/wCcgPzl8ofkt+XWveYPMmpwQ6jdWNzB5X0MuPrOo3pj4xxQxV5FQzqZGAoi7ntV
+ Q/OT/n27+d3k/wAu23mL8mfMt6ular5n1j9LeVbi5alteTzQQ20tmK7LKRCpQH7e69QAykvn/Sv+ceja
+ /wDOcFv+Tv1I/wCHtP8ANn6XWERsYv0DEv6WjjY9g1uFhLVpzNOu2KX6Nf8APwX8xPJ2i/kL5r/L6/12
+ 1j85ecP0U+ieXQ/K6khttUt7mScxrUrGFtnHJqAtsN8UB+A2KX7Nf8+xfOHlmLyT528iy61aw+bbjzBJ
+ q9roMkgW4msvqdrC00SH7YV0IanTvigvV/8An4f538raR+QuseSr/WbeHzV5sutOk0LQ+VbiaK1vYppp
+ uA3EarGRyO1aDriofgdil+0n/Pvvz35P/Ln/AJxo85+ZvPHmG08taFD+YV7C+o3jFUMr6VpZSNQAWZm4
+ miqCTTFBfN//ADmX/wA5mWX5zWI/LX8tBcw/l9Fcpca7rdzE0EurywOHgWOJqNHbowD0cB2YKSq8aMpA
+ fp3/AM4bf+syflD/ANsqb/qMuMWJfTWKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV
+ 2KuxVvt9OKv/0/tISKnfFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuq
+ PHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFWP+Z/Kvlnzpo135
+ d826FY+Y9DvQBdaXqEKTwsR9luLg0ZTuGG4O4OKvlOy/5wQ/IDRvOvlvz15asdb8s6n5W1qx13TbCy1E
+ y2huLC4S5jjkS8juH9NnQcgrg02Urim2TP8A84b/AJE3v5i63+Z/mHy9cebfMeuanLq09trFz62nx3Ez
+ FiFs0WON0FaBZQ48anfFbfUcaRxRpFEixRRKEjjQBVVVFAABsABihfUeOKvm380P+cS/yG/Ny9n1jzP5
+ Khs/MN0S1z5i0eR9Pu5WPV5vRIjmY/zSox98VtJfNv8Azhv+TnnrTfy40fzQNb1LS/yv0RdB8v2QvlgE
+ tqgQA3LwxI7P8A3RlHtim3uXkD8s/IH5W6N+gPy+8q2HlbS2YPPFZp+8ncCgeedy0szUFOUjMabVxQze
+ RI5Y3ikUPHIpWRG3BUihBHvir49u/wDnAv8A5xcurme5/wCVfTWxncuYINY1NI1LbkIv1khR4AbDttim
+ 3t/5Vfkn+WX5KadqWmflt5aXy/b6zLHNq0hubi6muHhDLGXluZZWooY0UEAVO25xQ9G1bS9N13S9S0TV
+ 7SLUNJ1e1mstTsJhWOa3nQxyxuO4ZWIOKvkH/oQP/nFz/qRLz/uNan/2U4pt9kQRR20ENvEOMUCLHGpN
+ aKooNz7DFDEPzA/LzyZ+aXlm78nefNEj8weXb545Z7CSSWE+pC3KN0lgeORGU91YHt0JxV8zf9CB/wDO
+ Ln/UiXn/AHGtT/7KcU2uX/nAT/nFtWVj5CunCkEo2tapQ07Gl0Dv7HFbfVvlfyxoHkvy9pPlXyvpsWj+
+ X9Ct1tdK0yEsUiiXoAzlmY1JJLEkncmuKE/qPHFXlP5nfkj+Vf5x2cVp+Ynk6x8wSWyFLLVCGgvrdSa8
+ YbuBkmVa7lQ3EnqDiryOz/5w1/J/T/yx8w/lHaS69F5O8za7D5gv4PrsbXC3MCRoiRzNASI6RKSDU1/a
+ xTb0P8rP+cc/yZ/Jp2uvIPkq007V5EMcvmG5aS81BlanJRc3DSPGrUFVj4qadMUPb6jxxV4ZL/zjd+Sd
+ 55680/mNq3kLTdf8zecYlh1mTV4xf21BGsTNFa3HOKNnVAGZVqd992qqwzyj/wA4d/kj5A/M7RPzW8k6
+ VqPlnXdCkvJLbSra9aXTXN9az2koaG4WZ1AS4YqscigELQcfhKm2LeR/+cCP+cb/ACVdW99N5ZvPOt5a
+ kNDJ5lu/rcRYU3e1hSC3k6dHjI9sVt9k29vb2kENraQx2trbIsdvbRKEjjRRRVVVAAAGwAxQrVHjirx7
+ 80fyE/KP85YY1/MLyZZa1eQJ6drrKF7W/iUGoVbq3aOXiDvxLFfbFXllv/zhj+T1r+V+o/lBFPr/APgv
+ U/NA82T2xvYjOt4tpFaCJJvQ5elxiDUNW5V+Pj8OKbeoflb+QH5Q/kzE/wDyr7yZZ6RfzIUudclL3WoS
+ Kdypu7hnkCn+RSF9sUPZKjxxV1R44q6o8cVfLHnH/nC//nHPz35m1jzf5g8ivJrvmC5e81i5tdT1C2Se
+ 5lJaSYxRXCxqzk1bioBO/UklTbGP+hA/+cXP+pEvP+41qf8A2U4rbM9L/wCcPf8AnHnSPJ/mXyLZ+Q6e
+ XvN1xZ3WvRSajqDzSzacZDaOs7XHqRmIzPQIQDyIYEEjFbYZ/wBCB/8AOLn/AFIl5/3GtT/7KcVtVi/5
+ wG/5xbiljkPkC5mCMGMUms6oVanZqXQNPpxW32HbwQWsEFrbRrDb20axQQrsqIgCqo9gBTFDH/Nvk7yn
+ 580W48u+c/L2n+ZtEuqGbTdRgSePkPsuoYHi61+Flow7EYq8D8if84gfkx+WfmnW/Nfkax1TQbrXtFvd
+ Cu9OW/a4tUtb4oZDGLlZZA49McSZCB3BxTaC/Ln/AJwp/wCcefy1v7XV9P8AJx8x61ZMr2mqeYp21Bo3
+ RuSyJAwW3DggEMIuQI2IxW31cKAACgA2AGKHjH5tf84/flN+d7aNL+ZHlk63c+X1mTSbuK8urOSJLgqZ
+ EJtpY+YJRTRgadqVNVXmOg/84O/840eXNa0vX9N8iT/pHRrqK9095tX1KREngcSROUa54txYA0YEeIOK
+ be8/8qz8lf8AKx/+Vs/odf8AHn6E/wAPfpn1ZKfUPW9bh6PL0uXLbnx5cfhrx2xQ86/ND/nFz8j/AM4t
+ ej80effJ36T8wpbx2rarb315ZyPDFXgki200aPx5bEryptWm2K28z/6ED/5xc/6kS8/7jWp/9lOKbZz+
+ Xf8AziN+QX5WearDzr5N8mPZeZdKWUaZqNxqN9degZ42hkZI553jqUdlqVJFdqYrad/mr/zjN+S/506x
+ Y+YPzD8pHV9c0+0Wxt9Tgvbuzk+rK7yLE4tpo1cBpGILAkV60xRbyv8A6ED/AOcXP+pEvP8AuNan/wBl
+ OKbZ7B/ziZ+Rlv8AlxeflPD5WuF8jX+uDzHdaV+kr0u2oiBLcS+uZvVA9ONRxDce9MVtgX/Qgf8Azi5/
+ 1Il5/wBxrU/+ynFbfUfkjyX5d/Lvypo3krynaNp/l3QIWg0uzeWSdo42dpCDJKzO3xOepxQyuo8cVdUe
+ OKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV
+ 1R44q6o8cVdUeOKuqPHFXVHjirdRTr364q//1PtCeuKtYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+ q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+ q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXg8/mb82l89r5Phn8qrJPot35gtoXsL0kQQahHax2r
+ Ti/A5vFIGMgjoG24Eb4qlv5e/n5omq6Dqbefb+DRfMmhS+ZZtS+r6ffW9jNp+ha9caP69m0omE7CluJE
+ ikdvUkChQSFCr0PTPzZ8iax5P1/z3p2rTXflzytNeW/mKaGyu5ri0lsKG5R7WKF52MakN8CGqkMKrviq
+ G1b85Py80S2e6vtblWIRWk0PCyvH9YXtrLewLCRDSRzBC0hVSWUU5heS1VQ9n+d35a6jPpcOna7NqEet
+ 2gu9JvLawvZoLjlprawsMbpCQ0xsVM4iHx8duPIhSqmmh/mp5K8w+Tbr8wLG/u4PKFpax3razfafe2SS
+ W0ttFdpNAlzDG8yNHMoBjVgWqgqwIxVinmf84LRdNSHyeZH8xHzLY+W9RtdR0nUZX0yW6Ec7yXNlGsEz
+ Vt3EkYDqJKjixocVY/8AmT+aPmz8udR/LbTdc1/yboUXmjTtTbzLr2pwXSWMF9pdqk59BjeRsI7h39NF
+ bk67U9Qnjiqcwfn15X0PyH5K82fmgsn5eat5o0aHVtR8t3MU882no3pLM04SLmiRvMoJdVI7j4Woqoxf
+ njoXl2y863/5h6na6db+X/M+p6TpH6OtLmWWey0+0t7t5Whja5dmjSY82Win4QF5MqlVkj/nf+WUUmoC
+ XzH6drpun3WqT6o1rdfU2trLT4NVuWhuPS4SmOzuY5iqEnidqlWAVQ+u/nv+WfljTU1XzFrU+jWzeszx
+ XVjdLNHDbGETXDw+kXESfWI/jpxINVJG+KvQrTX4NUt9ck0i0urufRJ5LT0Z4JbRLmdII51+ryzoiSxu
+ JVAlQtHXkOVVYBV4DL+cPnvRtW8z+VPMGiaFPr9rr/lbQPLer6ZJcnTjceZS7SRXSzBZDLYQx+u6ow9V
+ Hi/uufwqsp038z/MV7p+gSNpGnreL57vPJXm1vVkCL9UuJ4EurNByP79Y45OEj1jDlSXK1KqrJ+ZesN+
+ c0H5dPBBoGjmDlY3GradqCy65Ils1zP+ib4cLNvQBUPGSZKJI/HhQ4q9uxV2KuxV2KuxV2KuxV2KuxV2
+ KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVvt9OKv/9X7QnrirWKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2
+ KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2
+ KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVgkvk66f8xLfz6usqot9Dm0FdFNtVDDNNHcmU
+ zeqG5iSNabceNRTlRgq8dl/5xrtLqzSxufOd2qJYeZLOO6tbSOK4jl8y67D5jluEZpJED297bxGIFCvp
+ gq4YtyCr1rTdJ1nyZ5O1QXRuvzK1zi9zc2dtBY6e19J6aRehb27vDbRBlQbNIASWJbfFXk3lv/nH5dM8
+ heStKsNZu/KXmbytrM+vWF2wh1YW63MElkmlzrcKY54bbT2itFI4kCGNlIpiqY3X/OP73HmnSvNf/Kwd
+ Tm1DRruC9sZLyzsriQPHok2iTQep6aFLedJ3maGH01EryMtCUMarMP8AlUmmT/kzYfkxf6tdS6Xpvl+z
+ 8v2eu26rDdomnRxx2dyFPqJ6sfoxuajizD7IU8cVS5vyivJNSl8wS+bAfMmo6/peva5qK6eixXB0a1W0
+ tLVIfVJjiK8nf42cu7FWRaIFU489/lZpv5g+YfLOq69cQXejeX7TVLK48tXFqJob6HWLf6rdrM/qKQPS
+ ACUHwmpPLYBVh3/KjNWj/wAKPbfmfq6XXlfTbjy+b+e0tLqe80aZ45I4rhp1dfrMBjAjuVUNQnmrk1xV
+ df8A5FTzawfMOled59F1uPzBqGtWt0mn29zEINWt7e2vLKWG6MqyIy2kLo+zLIvL4lPHFUvu/wDnHYT6
+ 9Nr0Xn/UvrSRX0Omy3ljY3txHHe6QNK9KaeeJmmiioZUioqVZwQeXIKrbL/nHWHSDodz5e84zeV7zSot
+ SsZLbTNPtzpq6dqkkM0lpZWV6119UEUsIkhKyNwZnFCjBAq94ttO1e3tNZgbXmuJryWVtEuJLaP/AECJ
+ okSKLipHrcHUvyc1atDsBiryS3/Je+Ojppuq+fLvV7uw1XT/ADBo+qPYWsUqaxY3K3JvboxgNcNPxEUi
+ llAiJSPh8JVVOrf8qmsdG0PTLDzC0d1YeaJ/OGs6nPaiVtQ1K6uZruYFBKgiiLzsFRSSqBFDfCSyqfz+
+ SbnVPNGm695h146zYeWtTk1fyfov1SKD6jdS2U1gWknUlpgsVxMEqFoXq3IqhVVn+KuxV2KuxV2KuxV2
+ KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kt9vpxV//9b7QnrirWKuxV2KuxV2KuxV2KuxV2Ku
+ xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku
+ xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku
+ xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kt9vpxV//9f7
+ PFjU4q7kcVdyOKu5HFXcjiruRxV3I4q7kcVdyOKu5HFXcjiruRxV3I4q7kcVdyOKu5HFXcjiruRxV3I4
+ q7kcVdyOKu5HFXcjiruRxV3I4q7kcVdyOKu5HFXcjiruRxV3I4q7kcVdyOKu5HFXcjiruRxV3I4q7kcV
+ dyOKu5HFXcjiruRxV3I4q7kcVdyOKu5HFXcjiruRxV3I4q7kcVdyOKu5HFXcjiruRxV3I4q7kcVdyOKu
+ 5HFXcjiruRxV3I4q7kcVdyOKu5HFXcjiruRxV3I4q7kcVdyOKu5HFXcjiruRxV8c3V1rnl7zh+YH5JXe
+ veZLp/zD1Gy8xeQNc/Suoy31nocyg63b2159YaaA2Rs5TFxYDlcQJvyAxSmGhfnn+YGseW/KfmLSPKWh
+ NofnRPLU3liS/wBYP1hYNZulsp4bgQm8ld7d5I6ysE5MXUx80+JVrzJ+b3maWw/MTy15i0TS4b3QvL99
+ dy6YJr6zh1GGxmt7e9udN1O3k/fxKZJFkRfSmgfhHLTlyxVlmo/nTr0Opyyaboum3ui/4z1DyGlq9w6X
+ 0N/ZafNdpdzFQ6+lJJCVMSrzWNlm5GpjVQjPyZ/N3zJ+Yc9ta+ZdC07SJtU8i+VfPWlNptxNOv1fzEt4
+ rQTetHGQ8clmWHGoo/GpK8nVZd5Tmnh8/wD5sQzardXdnDPpE8FtdXMk0Vn6tlykSFZGIiQkcyq0FST3
+ xVL2nvIvz8t7ddSvWsLzyHc3EmlPcytZrPDqdtGsyW5Yxo5ViCyqCR1xV7DyOKu5HFXcjiruRxV3I4q7
+ kcVdyOKu5HFXcjiruRxV3I4q7kcVdyOKu5HFXcjiruRxV3I4q7kcVdyOKu5HFXcjiruRxV3I4q3yNPpx
+ V//Q+zp64q1irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV
+ dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV
+ dirsVdirsVdirsVdirsVdirsVdiqBk0zTZtStNYlsLeTVrC3ntLHU2jUzwwXTRPPFHIRyVZGgjLAGhKL
+ XoMVYPD+UH5WWxvTa/l55ftDqOpw61ftb6fBEZtRt3aSG6kKIvKSN3ZkY7qSSKE4qjb78svy91NdYTUP
+ JmkXqeYBONbSe1jcXQupY5rgShgeQlkiRnHRiqlq8RiqNHkTyYL+71UeWNNGp38P1e91EW6evLH6H1b4
+ 5KcifR/d8ia8PhrTbFXaD5E8m+VroX3l3y1p+i3a6fb6Ss9pCsTCwtP957UcekUVTwQbLU0AqcVdP5E8
+ m3L+Z3ufLOnXLedIPq3m0zQJJ+koeBiEd0GB9RQh4gN0Gw2xVHDyv5eGvReaBo1qPMUFn+j4dZEYFwtp
+ Xl6AfqI+W/HpXfriqfYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq32+nF
+ X//R+zp64q1irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV
+ dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV
+ dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV
+ dirsVdirsVdirsVdirsVdirfb6cVf//S+zhIqd8VdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPH
+ FXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6
+ o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHj
+ irqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVd
+ UeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjx
+ xV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKu
+ qPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R4
+ 4q3UU69+uKv/0/swRuffFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq2qM32VZvlU4quMMo6xuPm
+ DiqnSnWoxVvFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXcT74qu9N/5X/HFVtKda4q7
+ FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7
+ FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FW6bU98Vf/
+ 1PsyeuKtYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWMedfNEHkryh5i82XFv9bTQrKS5isuRX15vsxR
+ chUgM5AJHbCBaQLfCGp+d/zN8zTtfa/541PR4qgtpelTiygQmh4RxRKSqL0BZizdT1yTYBSXp5j8xQsV
+ s/PvmmH096/pKVmbwrzUjJUqJi/Mb8ybXa0/NvzFGVpxjnS2ugDWtPjjqa/PBS0E1h/Oj82bZuC/mhBf
+ SMQI477R7Rj71KU+WPCEcIZPB+dv5thAX8x6LckdX/Qse/3SU6ZGt14QqP8Anr+Z6qobXNJD78uGjxDr
+ XsZSTTJcIXhCnL+dv5nRxl2802VK9tGtgTQdvipkqC8Icn55/manxNr9iyGtGk0m2NfY0YY0F4QrN/zk
+ B5/iUifXtDV1FSX0lDWvTZZR0ONBeEIG2/5yH/M69mdLXUtBWNfhM0+kBQfFgBNkaC8IV7n89PzIccf8
+ VadakAktb6Pbg+wHN2wgLwhKj+dH5lSRyOPzFK7dV0qxTj8gYzjwheEIUfnD+ZckjRL+Y988n7ASysUB
+ FN/90nHhXhCi/wCb/wCZSMP+Qj6s9WoUCWS9/H6udhhoLwhb/wAre/M9a8fzH1NifshobJiPev1fpjQX
+ hCjcfnH+Z8NSPzK1B2bZYza2Q3r2/c7n8MHCEmITFfzY/NT6uZZ/P19DxX4VSK05/M/6P1wUEcIWf8ri
+ /MhV/wDJg6g7AjdoLQ9qmv8Ao9BjwheEKv8Ayur8x4kVz54nkBJBLWtoQf8AkiMSF4Q2/wCdf5hsOT+f
+ bpEUULQ2lmnI161EJpjQXhCEb84vP1SH/MPWlDDknFbVfl/unvjQTSg/5xee7opEnn3zAeSkvKk0EXGn
+ hSIYkBTEJTL+aXnSQskn5jeZ02Lcv0gq1FO5VAMC8ISVvzB83eqKfmP5r+P/ALWjkbb1FBsThpaCJT80
+ vPtmqsv5o+aIgCxIN2sy/D2/eRn8clQWgjIPzr/NGJgV/NDV2Cj+6uLSyuN/EkwgnwwUpiEzX8+vzeCG
+ SPz7FIUYBluNFsj49aBdsBja8IVP+hkvzftm9NvMnl+5fkSqT6JGCyjrUxzKfuxMUcIR9v8A85T/AJoR
+ j97a+Ub/AIoWKm0uoG28PTnYY0O5TEFMof8AnLjzwjFbjyD5cvGXdvRvb6AtTw5o4GRpHAncP/OY/pcP
+ 0p+U93Rju+n6vA+w6kLPEh+84eFHCye2/wCcvvI8y1n8keaLRqCqVspQK9KsswGCl4S1cf8AOW3lxef1
+ L8uvMV3xIUSS3VjCpJ/2bHGk8DHLj/nMiCKRki/Km+lRRUE6xahjv2/d0wUvB5r9H/5zf/L6a4ZPNPkv
+ zH5S0+OT07nzADBqNpDvRmkEBD8V/aIBp4Y0jhL6D88/m/5A/L78ul/NLV9bTVPKV5HA3l+50krcvq0t
+ 2eNvDZbgM0h2qxAXflSmIFoovkS5/wCc3fMU92ItF/K3STCxIjivdWuXmBG9HeCH06gdeJIr0OS4E8Kc
+ w/8AOY3nGORI738nbC4DD4vqOtOHBFNgs0IHfxx4U8LIrb/nMW34ltQ/J3zAgBozWeo2Uw+gPwx4EcKZ
+ Q/8AOYvleXr+VPnaPrUn6j2NK/3uPCvAr/8AQ3vlWpA/LHznsKlm+oqvXpUzdcjS8JW/9DgeVgaN+WXm
+ xKbVebT139/3pw8K8C1f+cwPLTGi/lh5p2oZCbrTgFr/AM9N8PCngbX/AJy/8tuQqflf5sYk0H+kadQ/
+ 8lcjS8Dm/wCcwfKqFRJ+V/m9WP7Kyac5A8aCbphpHCWx/wA5jeRVQtN+X3nWEDc8YbOWnz4T4eFeEo6P
+ /nL/APLJlVpPLPnODl/NpkTdPlcYOErwlw/5zF/KAFVm07zhAW6V0Yv/AMQmPhh4V4Six/zl7+S1OUkn
+ mmIA0o2hTE/QFc5HhXhKsf8AnLz8i1p6mq+YYQ37T6Dd0Hz41yXCvCUV/wBDafkCP7zzfqEBrQiXRdQW
+ nh/uk4OErwl3/Q2//OOwXk/5hNGAafHpl+u9K94fDHhK8JWD/nLr/nHUniPP8tTWn+4q/wDn/vnph4V4
+ SsP/ADl9/wA45qSG8/zLTqTpV8APpMQyNb0vCV//AEN5/wA439D+ZKKSAwB0+8rQ+P7rJcK8JV1/5yz/
+ AOcdHYKPzIgUn+eyvF/XDkeFHCV6f85Yf846vWn5oWS8djztrtf1xYkUnhK//oa3/nHQUr+a2m0Jpy9C
+ 6IHz/c++HhRwls/85W/844BSx/NvSAo7mO5FT4D9zvg4V4Sgpv8AnLv/AJxtgHL/AJWha3NOot7S7f5f
+ 7qFMlwp4SgJP+cyv+ccIwP8Anerlyegj0u7b/jXHhXhKUzf85u/848REBdY8xXI3o8Gg3bg0NKCtO+PA
+ vCUJ/wBDwfknKoa00zzpeV6cNDZP+JyjHhXhKi3/ADm9+Vgp6PlDztcEnif9x0aUP0yHBwrwOP8Azm7+
+ VgQsfKHnbko+KNdPjY1O1KiXDwp8MoR/+c5fyyoRb+RvO87johsokr77uceFfDKAm/5zp8lx/Y/KzzpJ
+ Q0YkWqAfe+IivhlLZv8AnPDQwOVv+THmyZKkDlc2an2PUjfHgXwylh/5zwkLO8P5Laj6AOyTajCkpA6n
+ ao2x4F4Fv/Q9l60sfH8mpo7dhV2l1eJX+QopHyrjwrwo2H/nPTQ4nVtV/KfWIYOVJGtNVs5pAO9EdVqf
+ pxMV4H19+XP5keUPzX8q2vnDyVfve6TPLJa3UE8ZhurO7ip6ttcwkkpIvIHqQykMpIyJDEimdYEOxV2K
+ uxV2KuxV2KuxV2KuxV2KuxV2KuxVvt9OKv8A/9X7MnrirWKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV
+ 45/zkGob8mfPRYkLHbQSs1aGiXEbGnvQYQyjzfE9vZ6jqMtxdPF9R04mlozmsr1/aYHcg5K6bEa+l2sS
+ xkyssi0qORp8JqegPbHiQxnUSOcDRLSIVUtVhWnuPnilIGKxkMpBC7orKxIFd1PWla5IITee/f0o0j4x
+ UWvwgjenStBtTGlS62u7hpZHUkKD1O/fop74VRTajMRQTsDWvLiCCGJ39q74qoS6h6ayubmU8nVUIoeX
+ zIrQYCqyOU3E8XKZgqkVAoxoBWg9/fEqmk2oxxN6cbrVPiNSRUbU3A22OFUmmu7u4k4qnxyEgRBSWNTQ
+ HrWtemKoM3E0gkIdQyuACfDlTpvXFVB7qZeQ9eNZz8XwkkHen40piqn6lwkazF14KRRhue9aVp/Ziqxb
+ xyjUAaQcqfZ+z2FSR0xVSd53uoPVUMIuMrNTbkRXah7Ys2TzSvPNFIZQIChVoUFAKigNeVflkQxpsTQQ
+ sv76Ilqgk+woAOuNrShdXqklDLGeKsCSKE07bjalfHAqVG7AkdUaJvTKllC1AVjX4gd8VdeTc43KSQ1h
+ oJF22oNqb7gYqorNwhkJRaenyJA269N9jiqWNdySqGSNvip6iuKGnQdBuf1YqpvKsfqKiH9zIooKnkWH
+ y2398mhDfWV5hTFymYshc1oSSKHp0qMiUrJZZF9RvXMIA+B2NNztuafcMINqVa3uqRVZ3fiymUJLXcDb
+ bt1xtCWS3UcjN8U4LxnbmDQkAkk7E4VUUvn/AHf+kBQYeMYcGh6V6A/ScVaN+yqyJIGde9SCoNDWtOmC
+ lae+mZI2+sIrAkOQ/wARAFR95wqira85zCSVhIEWtOWzHw/DAQqZXepLOirsvFRwblUbnbYdxkUsU1XW
+ YLaCQuFDFapHX7IHWuKvJ08zPHfarasEOmTxSNGrHkillIJKmtQw6jFU48g+e9a82+S/Lf5Z+YDbXflj
+ yf59k1PSbWZW4xi5tJi8RUHjwV4A6L/MWxWnv8N5AlvSwhQBfiYxqq9KAsNiQKd8Nqv9aWqOIzVl9Riz
+ dak0r03GSQgXu5t2KhU2pRviqD0oPHFWhqLr6aOH5r8bIlRQ7nv8sBVzaqxjblJLGVbiDSu3v3640ypQ
+ fUDDGDHck8STzKHoPc4WKAi1a8laQeqGjkHwcQV+e5/ViqJ/Sd5xZmlQ0oGc7BaEb7YKVYdTJIk4IySA
+ 8ZeXUGm9dthjSqLXkzw8/gYA7EEjv0wqpDUWLVaNVBNF+KuxFTWuKqC3YE5coKMFpy+yFp41xVGvqKSc
+ QgAjqefwkEmgI3B74qqG6QNQuAFFSRyqNxTbFWpbxOEZDvIsg6FmrUjaoBHfFVFb6Mowf4DHQ8zyI6b1
+ B74quS9h5f3sjAJyCruelR91cVaa4VuYWR+9C1OJ271rgpVvqQJyBkBlbaSP4RxNKipp0xpVOUpKH57l
+ TVo4wDUeFPHGlVWeBIXR4w0YINGFKdDShxpUP68PJuNsvHYuvp7Ef8CfpxpTyQsk1ojNWyRiu/wRrsAS
+ OhWm2NKpi5sxIWSzUEIwZmoK06dgK1xpVH9JtxeQRhdkFRxpXoKCnYHfCrmvrlgY2mdEIoo5AdSKbDvi
+ rUdyqEtcS8qH4U5GpNe4+WKqUupqskhQqiJ8SAbAlfv+jFXNrUKFzG6sJKsSCarUV7DFNIGfVlUSOrkq
+ 56ksv07YskC2tIzkqOYZKAEnamxNPbFUDHfyKnqieOhIBJOzHfYg9MUWpT6k/qSA3UaiMggAg12qaeNR
+ 0xYsZu9XlV5Q8w4UqlDQmu23ypirz7X9dFeKzHiaHiGPEEDrTtXIlL9K/wDn2zq19ezfnLYvK72EFvol
+ 1wJqn1hnuIg3hy9IUr4DIlhN+omRYOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVvt9OKv/9b7Mkip3xVq
+ o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q6o8cVdUeOKvE/8AnIkM
+ /wCUPmuEAtHPCROB/KsbuB9JGEGmUeb5Ehll+r2121wzRy28RiiUb8REpDAk96+GBsCXvMfT+KroSTSu
+ 4O1N6kHrhtLHtVqFdkLqEHFTvTrSvSg6ZJFMfmvCH5Rcyg/vCgoG+VR45KkIeS5WSUqJeRVgjxlQdmNV
+ rQ98aVWiJV40McZWvJkAIUU23J3rhVUD3A+NbchZDQgBqgUPQdhgtUBI94ryK9seEX92oJG9ab16+OFN
+ I62aVncegWAep48TSgA9vHrihQ5SmUI0R4NyLOCv2Sa7Ak16ZEJQjyLHwZhJC8iMqyVVhQGtHPhQ9smG
+ Sgjw8VWOQngQwqFANBXj7A9sDBcskJLGhoiqp+JjUn/PtiqlK4qqxrHJUFigcnjt1rX8MIZBXWOOKNQI
+ vU68n9Rf2iKUrkSUrZ3jRnVQCwADSK4rTqdwN8FoRR1ZvR/dxGQJRY2Kk0329hTfAqiL6RpA3oMzPRix
+ WhpsPs0238MVQdxLKilWhcujPxLBRsTU7bVxQgo7l1eRpXoCiKm61r0qd9+vhiqxrjitxCJkVubMnLrR
+ idiT/DDSoQ6hyRn9RXaNSCgQEL/MCpPQ+IwJS6LUJEEsitHxDIsZJJFRQ1NOn34oRM1xO0U7JMiD1I2V
+ A1V96Cp/twgqgVunV0nE8SCLcgq3E0rstemNqs1DUJ1jYs8POQEoipyqAad6UO+NKEKupheUYSMRgE1d
+ WUPw3Ir1BxPNKXR6rG78fTbmEA5jcGq7njtT542qaWMr3O0VvIaKyCi8QRUUIBO3uTjaKXXkqKgjr8Wy
+ 8iiklyNhWv3Y2qChnVnZXSP1C4DRhTToag7k5JJatnJIpEhYo5apNSFFNvc4CaUJhIZBDK3EBY1UxyJX
+ 4Qdj1NTTIqwDzEsi27SoE3JAq1VI77k71rhKC8VupY7K8juDOY2D8ZOVCGQ9adq06YFZJ+TEvLWb1Yuc
+ 7Q62Z4oxSjL9VvKE12r+rAOa2+wPVuDbrJJarbAMB6RcVqfZSep7+GWISySV1iMYqjtsj0NAo33oP4Yq
+ lqSyRtGzXFVLPJNUt1A2BHauKoaW4dvQInXiVNVBYgD2xSHG+SlDwapPHegYBthvUmtO2LJL5dRDmPhH
+ 8NTJI5YqtT2pQ0OKAhra7Mk8kYVqMCUowCsQdjv0774qV0N1ydpefxckKk7mvj9FN8WK/wBWVohyUyEE
+ soX+YjuCN64s1kVxKFdFjDH068WH2vppXrigqsN3GlCsBjPCoCkEArXriUUrC5RuM8w+EKoIO1QO/wA6
+ 5EFaV/rBmEwMIoHXjWgHxU6bbZJCAmuJDI6SxfCGUFORFD+rfFVMvIdvSJCj4WB+L4SKD3rQ4qu9QLLG
+ rBuLVO5qd1J+ZxVaZEh9JlJbnyRwDQ0Yf0xVEIYBUuAFoC3xEkAgU2p1r2xVTmkj9RAkbGrUKAn7u2LI
+ BqS8jiPMJtSjrUqajYg4opZPfIwLtG1Gbiyg1HFVHEb+BGKFGTVULMzPLFwAoAdunUH6MUgIV7+P4WWW
+ rMDVjWgBoSK+2KEG18Ghd2c15AipBB8PpIGKocXR4+m8XNGOzK1QNuxHWuKtoVZm9RSocUBY08D1HfFV
+ KfUFq/GMNUn4mBBB6Bq03p44pCFk1Dl8Hpq5qCZDuOnh03xTSEa+DQuyx+k6AMF4k1PUGvyxSoPdsqI0
+ nJxKSxJOx22+jvixtALeRiULyO5/vFY8RUEAke+KaQM+pRBHAqzBlWRV2Vaj7QFcUpNNqEbOZiziWMKW
+ 8RSqkCtOoPTFBYXq2ss8cVGKgclMh+1QHuAdtuuAsWCT3jyV9Y+oVP2uhIp92QJpL9hf+fYNh/zpf5za
+ 4wPC68w6Rp8ErdSLexklcfQZcbsMJ9H6eVHjkWDqjxxV1R44q6o8cVdUeOKuqPHFXVHjirqjxxV1R44q
+ 6o8cVdUeOKuqPHFXVHjirqjxxVuop179cVf/1/sqeuKtYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXm
+ f5y2X6R/K7zlbcPU/wBBaQIOvw7f8bYso83whp7NNo2kvKyyynTrVRAhoqgRKPtHrSnQbYtync3Qji9I
+ yINwSoqmxINKniDuBUYqx25vJCEYSwjrz7AE1oRVt6E5IISSRpwzxeoGTnuQ9A4HcCpAocn7mKmBN6LT
+ zwheNESSNxVCd6EUP3YlVAxPIoT1eErDjs3Q8jXcjBaV6oGtuL3zlxT01VjVaDffH3pCipoKNdSvJJQs
+ QSSGBpWp64EKqzRqZBzlb/ioVoOR36UG5GKoFVj/AHcjI6NUqCGI+Gh2rQ+OGiq5o7ZlEcUb8V41HKoI
+ 61HSuGyE8mrdUEtBbPVkZRGWJT/WNOp98SUolFlTk6W5QMpCLy3VgafDXwwBiguUsdEKBXRtozxBG1AS
+ ffBsq4TyRKzmOMoTwcMa1qwI2wySg/0i7QyksiowDVIAFTUAUG/jgpbWJcv6DRtdIrcKB12A3rU1/awn
+ ZQqevEWVnnBKEKHJJJ6cQwrWpyA5pSu5MMksqq1VZWDMCxp7g1O9dsmGJUjyBmk4A/AIzXYqpArQ9a7Y
+ ShCyzA8iIljCAU3Cnw5GvjXpiVWx3UYSNJRGokjJkduFaMdgKCuRIZBDSPFDDcvyCo3FIowwHbbkP5vC
+ mPNUG90I43iUxMZGV2rRTQbkEg9NskRulb9aZI+EYRlYbncqxJ27H59cEkIaeS4njVY2hA9GRZachx49
+ KDuSTiCqyKSclByjFC4k3JIYUHQ9yB1wKgPjLySMLacM1PUAoTt3+jFU3F4oIUFOSkqX5EBuwpuSQB0x
+ VCyuzoeXp80UKoUmtB0PbpiqXwsVuy7zGknxsd6E1IqPA7Yqma0WSE/WHjElR0aq07E/jiqZXN4BbMBf
+ uD6dSCCu53pStNsVeYeabt2gkBvHdV2INelBuBXauKvn7Vrm2Zp0lkblHJ8L1oe9K4ShnH5F3MTea7m3
+ PPjyWTjXiN4blakg9KHIx5ofbFv6DwBo7gSKTVnBIHEdabb03yRShpbir/C0ZqA780oeFaAj32+eSQk7
+ zRzFSOAYhlUVJFaU5Hem/hkSSmkhkuoQWeRVR0HGi8iSrfTtTtkkJbcXUaTSU2VeAVQGPVSaD2w2zQ8M
+ 0Tsq1IfsAP2ujAlh798qtC9bkBpFo5RQ59TrwAG5qO+22SipV45j6EfDia1dtwORaoBrSm/cDJUxRq3s
+ rIrkhyvwKqrUkUoDUH2piqk14xj5MF4/ZndQagEClKdcVQyXvLnVlfkVYCnTbYnAWaK9cOqhJUYAhnAL
+ fCDU0FK0qciha9zKYpiq/GxVkKEgqRTfcUyaKQzGZljAV2IHJzTkARTp3PXvihT9cIqVU/vN3fo2x7j3
+ GLIKqSgPGDCJGHJaFgtPhNKke2KkOnljiKKDGY1AqrniSKb/ADxSpG7hiCUdWBYHkTT2I6b4opq8vrYQ
+ 8k4hmclnrtStKey4sUHfXcbhjCalhUhQdjsAT0PtinkgJtRaSVo2bgEqVotaFtvbpihtp3kT7LMoVSwo
+ NwTXpiqpHdBViQAl2YAsRWg2IPypiqBmn9NZCVKrGAF+GjLQ+Nd8VQyXJEPpNCAGPJR2G+5JB264qior
+ 4GMRIgVlJq2wB37A9vfBaoEXErtPw4xrUl6qKqA1CASen+YxNM0ELuaVp+UYi9JR6bD9o9yUFKAY7BUG
+ bj927GSMHqA5LCgPh8sKodpioUMUJJIATwGxI2xVSeSGOaN2YE8VJ4k0Kq1B2pQYqkl/dRhWLEBndeWx
+ I2HTbFUgvr+RS7CNZFaq8qmgII6jtiwYLf3oZSPTqeTDmGNWHToffFUjinB4qz0JOwbp06bZURSv3r/5
+ 906H+i/+caLTVGj4Tea/NuuX7vT7UcDxWkRr3AEJpgthJ9zYsXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+ Yq32+nFX/9D7KnrirWKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVKtesl1HQdcsJF5Jd6fcxsnc/uyR+
+ IxSOb8v/AC3KzeXdNEnxT2gltp+ioDBM6UrvU0G+EtyNu54IkDzNXktFCqe5r1YbYaVjUlwso4GRqRq3
+ B2UU57sK0phVj8iRBldpahVbhIfsnmwYb+BPTD0QoIzlggqC7gCQAD4qVodq13xpVdJZSykJHHdByUmI
+ I2qainIA9euNqrGdo47hX9MkxE/CSNyNwCCfDJIQ7N6UtHVGXg1FFWBBHcg7fM5HkloPCPqqokRLAVkI
+ 5ihrXqd8CqifV3twVdKFSVcoOVVah3Jr1GTQ3HHYlWoxPIcwfhKqRSlKGu+RKbUlmijkKmNuRPJY5HFK
+ 1Ap8PbbHmqldXcEq/FGDCCSPi7liTTf8DgGypbcXlqVFGRaMVNCWIr3NPGnbFKHkvIBGaMa9BuKrT3+j
+ DSLSn14KPST0ox1Yhj78QCCN+2SQ4XUPpSIWofhQJEpBA5ArvTISLIBf9cEQ2ZpWry9ShAG48FyIVpHL
+ k0VuIQgx9DuQdz+rwyYQg2uWeTgQ6CrCQSOTUbUp8qYShRebgk/J35BVMMXOtKtXbbocRuqEa7CpHIs/
+ JVCsVUgksT7ih6b4kbsqULu+AjKyTozRDmnwqTsKVNR1GCKoB76OSKREaCRubMIWK+1fioO+ElKqLoKj
+ RqIozExYRlQKKfAg75FCNg+rNAnqlASZQpjINCd/iNTSmHiVtY7ZAhWZ+TEBjHQtSu5PWtcSqjcS28SA
+ rLK6H9niGKgipO/jgVT+tLSokmdCqksVXltXqKdvHFVOSeaaFITK6u3JirLQkClKmmKoeJWElZGL1jIV
+ t68hRqjr0+WKo5pKMgCpIHB9Ni3I8qsGDA7V6UpiqAnvkCFWES7cS1QQopUH33xV5x5omDxXCxyRhVC9
+ K1YjqxPcimKvn7Vkl9e5EacyZTRT4fTihlv5IXMX+P3triJHQw2zfvKiNKtdodhuanCObHq+9YmhWESw
+ SGJa8hHF03JBIBqcklJZ5LidiYopBwPxNxNKk9SxpTrtg5KltyJEq9wQgqys540UivQA9T28ciTbJhly
+ ymYFnaBmKIFVeNSKgn4e57nJBbXgOpnkjkDcSvBVJoaDqN9x474JKioW/fJJzK/vBxbkQSB4gH8Mrbaa
+ lidUkIQioJoSxQ1/plkWs81zJPb20XPjKVUFY+SoSW8abnc1OTYIwNL6KD+74EcjzI4gEkgU6e+BUDIw
+ HKNmoxk23LAE70Ir74s1CNYGJRyCFl4qWJqS/QdRUd8Nqi4xAnr+krNwIkJPIfHuNxX8O2QKFIGqSAyF
+ W2JXmKHiakH9fzwKuRF9OoLq/Pju3FmBG1Kbj5YeJVH1EEwVpmMJLKSxPEAHoae/9uSYqaXYJUg8+AcI
+ d6jfcbV7d8BFpDp7pnCK7xuy8SHYg7EHueoGCKVkt3JN6YMyIq8j8dCwqBu21OuIKumnmRCoeNjxCMwV
+ Vatak8SMbQlVw9xwUMVLRkFyaUo2/t0743upQBkR/jAT1WkYFR0qDX+zCSrbuaOzuAjEcSCaUatelfvw
+ Wqw3C0b4XoCoVWbjQca0B8MkhTMwdQ7QyR8iBz5VpQbGlPHFULITuqpJGK0o3Ggoalff6cU0jFuI0PqP
+ uoIRS3UVFf2cBQte7FGaECpLDdipIBDAGhp9GCTJL/rLv6o9WgEpVdyQdifGlfbASqAIMXFVJ4FnJkkY
+ k1O9CSOnhhtUPK5biFG1X9MClQOhFfE9jhBtKGlmWeEPwq8cRdy/2iOXsMlapBLMrVWrUY9C1atv02/V
+ gRbHLu7iWS5Ziyk0NWFASKb7DASxYhcXXPnRwC3Ij6etD26ZEmkpc1xGUYzRKUCljTYinv8ARkOaH9LH
+ /OJmgN5a/wCcYfyL0uSP0riXyrBqN2nQ+rqMkt2SfciQYS1nm+g8CHYq7FXYq7FXYq7FXYq7FXYq7FXY
+ q7FXYq32+nFX/9H7KnrirWKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVfEA0iK/2HPFx7NsfwxV+XcWn
+ /onUfN+kyqVm07zTqUMcZ2Co0vNB4CoauEt6UanG0vwqiqpb7ZYgoqnfbcGuIVjro59NIIw4Ik+MsGFA
+ KEAHt45JUvksZDbJxg5ohPpoXH2FPEAAdvDG+iqFZFSrQ1deFeMhqOJFCT0/HCUNFZhKoKkx834jlX9m
+ p79d98CqbM6FyLduLIPUTjy+yB1JPQDbJWhXmuFIWT7FVWkRUVBc161oRQ98ilDyXLyGNXlROLogfiPi
+ pWgFehwhUFNNAaQyXPCMAihX4/tE/rySFdZrbnIBMeKgB1KEpyqKKSBkCWSEaaUzRKrJEXfizBCaqD2P
+ 9cI5MV09wROyfuyzMF9P0zQEk7+5wMknuLosqr+7Q8iRRAo5b7Gm21N8UJes5dwWZJlUuWpEacV2rTen
+ hXpk0KBAt1nJjciRjRqEbUPQbVxVSE8hk5NaMkka8yQ5DVG43rQ9K5UQyVJXZ5OKRCJfT5cS9Dudyinx
+ +eEBVoZTFKpbo7FZW3oK0FTXpljFQCB/TZpXBUrGSCSCDTsRWvfIkpCgrwIGdZiWglZGBqv2WIDAkU+/
+ fAlZVQJvSumY0/dyykiu1KE9PuwlULclHeYNOpcAsz8WIUn4RxFdutMYqgbmdQpRZaymRgCYwONRxNaA
+ 7DArS3SGMhURF4BQSh33JryINAadMVTCCiLCGhQQo7Dh8QISlSDQHuMVaml9KSMeigZmesYYrQv2Udvp
+ xVAmQNCoSECq/CzM+1Bv16HFVWOVy8acVpKqlqMRSnUAeH4Yqv8AUf0+JQLKvIRSBWYg9T1OKqqBZDGY
+ YQVVBWTiBUsp27f59cVdIjcUJhiHwcg44gCv2QoPj7YqkU7cFZXjijcfCpruKmlBX+btirzPzGzP9Ypx
+ EZPEyB6dQdtvDvih4pqMk8dxJ6dGLEEjAeSq35V3skP5qaaqjnJNbwNFDUguyXcilR4/bpjHmh+iVmL9
+ WDTQx2MIBJRJAwWo6BVqaiuSKQtuS7GQrcSNEqt+7FKUFD+0fbwwJYldK/ElGdmahZxStAxPTr+OHZWP
+ hx6iF5iteRkNQdiKjjy22rhDFREt4wcMylYm58AN1BagoRQb+GNJtFyNOhR2jc8nNFUca7nYeFPHIEMo
+ lQkkKcRIQZOJLD46UJ61ptuMMdt0yKIX0yqyyKuypGpLMfhUbUNKgE9Dk2toTL8EkarxNS9WNRtXdab7
+ eGFXetbMjylYypZiSWoQwIHcbHf6ciQzUHurWNXA+HiA6lSG3pSv01wqo84ZDPHHMy8gCYyq7kg0Y1Io
+ K7DIyQsIX05eEoURo3JaDY037+OBVSR+Tg1dY0Cln6qDswPIb4qgY3/eM6KqRzNswrXc9AK0P9MkGLQn
+ dfWjDIIRy/eDkGoAfDrhVTa6QIeJWMKFAKhiarsQA3jirpr4yBCk0ReNyKuDyr8NR26jvgpNpdPdtJOs
+ ZRaOwYkEilNz+192NIQszu8NBbsU6O5IINCByO/fBSVD05hKSyNEOasCWXcjr86DG0qlvKgVw7EFUBKK
+ VPUE0IJr8sCukmX6vs1WVk+H1BvyoCa/TiqCuZpV4ot0Qx4VCt1Irt8sNobEzRvGY24EDkjEc61NelKY
+ 9FWPclkf1Y+Tc+XEKOVGXc7nf3ySF0UgqykI7oGavUbr8JpXt0rgKoWWd4WrIV4M46HpX7LEA9cjTK0u
+ n1CY+o8cfqQfFxZ1IagFKlSdjkgEoVLuR2jblViAwUf2n2xpjaFkvCS0YduJDLJx471PTetO2FSUjmmc
+ uI2YmrckQEDdRtXqMUMWvZyzkE7mgO/cE+JwEpYuz8X+OvLeq9Pn1yslCFuwZ7ae0ioZbtfq8ApvzmPp
+ oB71bAr+tLy3pCeXvK/lTy/EvCPQdC0zTVTw+q2cUJH3qcWpOMVdirsVdirsVdirsVdirsVdirsVdirs
+ Vdirfb6cVf/S+yp64q1irsVdirsVdirsVdirsVdirsVbp8LMxCov2nYgAfMnbFWL6j5w8v6axjkvfrUw
+ rWG2HqUPgW2UffimmH3P5rWcNfS0aZl3o8koH4KpxZcKWH85bRN5NIRVH/LxTp16rivCl91/zkDoNmjP
+ JoN0wTcstxHxAHi3HbFeB8beZvN2m6/5989a3pkE1vY6xe2uo2FvVXCNLCEkrItAf3kZO3jh6tgY1M0c
+ rJLdO/QsqLQLuOteSjv4ZJUrM9uJVMbovFGZuVKkLQkgCtNtvnkSkJRJNE5MxnHo1DoBHUjkSxUEHcEY
+ eqoa6liaNJTJEiOGkoVbdWAG/c7+OSDEoYtFIjOrlGo4B3oK7dDsATT54ShYrmPk5kaiICHQkcVb7Rod
+ 9/lsMaVB3NywjdEqVlEZRuoqd9h3pTCqlDPxitWaQTGhIdgOu9Nz28fDFV/16dI1lPp8TGzMxNBVRtsd
+ +vXIlIVEvpGQpyjAlVVjk5HlXkK1ANaZApUnuPTaIi6j5FSKozHYE+JOxPhkxyYoSeRvTR4ViERlIDsK
+ kDcDl3774GSBkR3gijL24cyFlUKagE0JNABSvtkbVLVaV2jEU6EnkQgR1WjN0+6vTG1pXkjlpJwn5vyb
+ jyjanxKdlJGxpja0gmYU+KTmW+wpQr0Ar75PhVqSUMFfm3FUBjcAmiPU7E0pUZJBQcMtvtV3KvIeSlAV
+ 3GxG/b2PXFDbPGqDjMzABvgY8m6Dv29sgWQaW6cRy7lpGLUiMiChPWoAIJpTFVKt2yyW5mESkUMNAacd
+ 67V7YoWPJOpP7/i4kZWTg32QBQkEU369cUpYvJ1jVrmOSnJ2dQFAH7QYE0HzxQjJEYqzuU4MvESFRvTw
+ 3xVM4Lq3MScviUOSECKtB4V5eHT8cUoSW8iMknqW6S8g3KN3FAezdeuKrIaGriMoCgCx9S1SN2/hTFVB
+ Zf3odITG0SLxoCpYgfFuTtirSTSNKpWN2JoycAQK8fGnX5YqvkWUvGiW5JYsK1pyFK0FaUPXFULKlY0K
+ glZj6cshcGq+1e3jirHryT0oJRJLTgac0KkAfT12pvirzXXbpArCKRijKfSjVVPI7bmlOlMUPJdRnup5
+ gIYQHHQ0oWp1FMjJWPeVriSz/MTy5LwMbS286spJrVbtWPQgjcYxY9X6Yae9+5R5ZOcb8eKxqtVpuQaj
+ ck5YaDYumZQzKyuilinqSNxAPhkQLQkNz9XlVmY0UMSWZqbggqDQH3rkgEpDPDGyg80cGrFxIrrTcAio
+ /VgAQVGKOWOWNleJROSUGxruAtd6fLJsVtx66ySchEgqaoT3B67GoGVySFkzGV1kWWChj7kk05V3HzOE
+ JtFxeoELy+lydQfg5AMoOwA22B3JybFTeQMp4xsoV1jkCEqwPcHYnAzWvMvplIayCRwqhVBJAWpUgjqM
+ WJUZnHC7Y1Vk2ZDxrRACak0xQl31iSVJqQBiX25kCgFSQelflgIVqNplYyraAtJx9VxVjuaAsAaHwr2w
+ AJtESpKXm9P1PjicKGBKmhpxp2oemEhCXc3jlRppeLR0qpWtGoQeJptXxwq2/wC6RGUpGSasSSadyOnx
+ dMUhCyXEyRx0uEUr8XxUJK8ttiBvkLTShJJLJEQZYAIYyaihPXr0HhhBRSE9RnKyFopBypSnwg8TUA++
+ 2SQsaRlRY12ZhuaAVNBTcbClNsVXQzSCjnmqBQzcepJG9PED3yJDJpGkmeMiQxp6SkNU0J406UBA9sCo
+ NzEysZZm9NOHMUNTRN9vniBar/UtWHEc2EfE8gWDFRUUBA3ph4UocSIJR6bTKFQ8t247D4SNutNickqj
+ IW9L7H2ZKM4rsQK0B8aGmQYoVWZSxeRRyICHfdqE0qB3pkrQsaWVKgGIfEHYk7cqbbd8KoWa5lAMaSxo
+ ZDu2/em5H05EJS03UpZWqgZVC0Vtg9aA/LffDaEtuJWUtyVCzcmck/ZOwNDhVJZJgJCykID8WxFRt32p
+ 1wAqxi9mpMWVvh58adaggn6cilJeY6O1SOoIoQPnkChNtBms7bzL5WubxRLZWet6bd31vI3BZILa7jml
+ VnH2QUQgnt1xV/QXoX/OZ1l5vgbXbL8vzp+i3rvLZahfagIvWRiSHji9LmVPZqAHttkjSOBmun/85K6V
+ elQmgxS02b6vds4H0+nTHhY8DMLf87NMmTk3l665HdVS5i6f7IDBS8DNdH/MHyxrAVPrh0y5P/HvfAIP
+ ksgJQ/eMaRTNFo6LIjLJG32ZUIZT8mBIwIdirsVdirsVdirsVdirsVdirsVb7fTir//T+yJ64q1irsVd
+ irsVdirsVdirYBNaCtMVSDUvM+haUSt3fo8o629v+9f6eOw+k40rzvVfzOuAXTSrOO2Tos1z8bnw+EfC
+ PxwgMuF5/q3mrVtTX/T9RklB3WGtEWv+SKCmNMqphN95jNsu3A0NOJJqD7YaUB5vrP5oraeoCVPpE8tm
+ Bp4+9fbDwsgHleufmzDKHExaJmJCMAK0PQn2xIS+e/NP5zalpNw9L2QW/UxOwI5V69O/gciY0ln/AOWP
+ nnTNXsFv3QenNHNAY60BljuA4AA6giTYbYgWrOrm6iuhIImSOZwGij/l33Fa9qZJikbyBRK3p/vXVlCh
+ qb+FffFVi+lCklEIfiCqAmtBXw236UwdWSBV+KQTMgjiZCJIUYMeJ8R1qD275KJYlDK5o8gYb1/dBgSV
+ JHyqDXCDaFF57kGWROEVSAFZz8IpRgD/AFriWVIY3KrCpWOMyc0K0oAOIK7UbcEd8F2VbW8kjVWEKh1S
+ gkAoQxbYde3fElaWy3sqEOwfkqs78gGUAHoN69TgQpwai6TRNyKrDuqsx2UkLv1HGpw0lAS30h+F+Shi
+ oAD0IBqakkeJw8kFApchpOKTTemXpySuxAJJbbtTrhQhZpVeKICdwyEAgVota0J68q+2QZKSSMOEoZn4
+ xkBlq1SNgWWlflTIlIV1mYwzK0bsCp6FqrTY0BAIwUqGncRSJ6olLM5/eHiwCmlKbE7nbLAxKnLeL6Ua
+ haMFUNyCgAt12qaVpTCULkuvVm+2odqgeogpUDrVT1p3wBKDiaSvBZ4l3I2UPuSOvLEqFAzOvqBlHND8
+ KoOLdTUb9hgVXe5RA8hWYq1eJBWrN0oCdxT54pUGuWZhySZY6l2HUVUd6daeOKopQxQzejQ05KHIBG3c
+ +/yxVVt7olRHJGFPELxPxCrlqcqeHbFVdJKQiEyRRKCfTYCoNTXY0Jp7HDSoeZFVBI88aiED92DsWI/m
+ Ar74FWh2cgQ3as0afEd67dxU4qhVlb0ifrBkCV2CluXIdaMetBtXFVNHL+gpklb1ODKR1ClTVa12Bp37
+ 4q7lKoV+DlRI4CkBhsOjA1BxVCFiRGI4yqqQQGUDdiQw2H0/LFWPX7lI3j9IhaE70c1DHoRSu3TFXmOt
+ XE8wUCIIQrH1NgQa7+AxQ81vRKJKmQF3AIY7/jgJVj2lvx8++WDKCxeG9Qd6kyCn44Ic2PV+oVvp13YR
+ LLd3SNzYdByIJpsCtBsKZaSztIp1YuZBIwHMEkhAncEipJ3xBtKUXRjWJQzqyM3QsKbqe/IfRgCseuZE
+ CyoSnEkNGR8IAG9Nz0rvkmJVGmtmuIf3KCJQsngNjvt3FcNIKDur2KrsqKHcg1YV67U/HK5JCGa5bkod
+ ApkUCRiF5bHau3fBFNIpJ2KEMeDHZq9OSewO38csYuWVRG86SsgNCQI6bAca9d8hJkozPcPEknNm5uvN
+ gpC0Yb0Hj74AVXIKJdKsm29VCkUHEEbnqSOuSBtBSlm4o7SRqySylNwa1PbrXbChtvq61MXqAIKqEpxI
+ JNW3O2C0019YRERYpJEPJ19RmAalQQAd+vbChSEbShJKM/w8Vq6sKksDsp75Esgqzh/RRFZUk5Ellp3H
+ QV6DAqWTekWB9RHAhHpmlWWh+KhBpQ4CFQUrQhFIuikQ/dgMlCwLnsK9e+RSol40kA+FlSoAUU41G21N
+ 6da4bRTSIkokLPHGCQyLU05dS248MnxIpc6KkMvFlJdgAgrQ0WvKtRWuSBtaWRcEk+D96kiKWCKa7Aji
+ DXYE9sFLajIWjf00BLGNPU+E7VG4p3NMKFyBnbknFlfkXqCooBTt4e3fFm5FuiFlR1Cykpx51Ne25oBX
+ InmhRMchSkkvBhXb1ONQRShIwKgpSB6gFyeKBiUDGqkdvmfHFUsu5YB9mejqoI2JooFKdO5xBQoCRWVa
+ zsQGDIOIBoaAUO9MNqlzxIAoIMgRNwOO7A+/bAqAuBGwDklGVqK9B41I3P0YqkFy4HIDgaGnFtiQR9Ix
+ VjN/ITIaBRuGoOxPbcYqkjM1GJWnehG34dMgUJhpMttPremw38ayacsvqXMTH4WjQVKn2J6+2KvqTyX5
+ 21X8xPM5juLt4tE0dAZYYvhjKr8Mcahdvip92SiLZW+2dG1WCG1t44l9McQPQiAVQPE8d/vwrTObHUvV
+ dXHKNBU8R4+3fFaZPb3rg/b4r33JO/sMUMt0fzTrWkyctI1m5spO8cbHg3sVNR+GKkPVdH/OPzDblE1a
+ ztNYt/smRVNrcfOq1Qn5jI0xMHseheePLmvhEgvVsb1gOWn3jLG9f8hieD/QfoxpgRTMGVloCCKio+Xj
+ gQtxV2KuxV2KuxV2KuxVvt9OKv8A/9T7InrirWKuxV2KuxVsAkgAVJ6AYql+oatpWlIX1LVLazA/ZeQF
+ /lwFW/DDRV55qv5t+W7OsWnRz6lcHoxjaOMe+/xEY0yEbeb6p+ZV5qPJJ76aK3etLa3ThGR70NT9Jw0n
+ hYdN5jsiFImaOo25IQKeOFeEpHdeZbdRUTI5ArRG/WKbYprvec6z56htTLwnMTMSoBNfpFdu+LJ5Trvn
+ x5RMgkUSVDKOf2ugqO9fbFXimvecLhuUiyFy/ILzO9BWtV8DlgZPHdc8xHkQjGTnusgNBXqMCvFvOur3
+ DWUsvOpoa79xvTftkZcmJTD8lvzKh0X1YNWlH1D1ZC7yV2LqtKe5K0rkY8kPs3RPP+g6jAslgvqo3xQy
+ rUn4dwWPUV6YUplJ5gZh6iq4t2Zgo3WlR8Qbb8TiqtJrFwX5lUVnUkKzE9ztXYYpQUmpSxRQsiKpU/EB
+ vWtSQatQ++GKqJ1Cf94kgjZnAJ+HiB03pX6KnJWEod7llRvUjT4fhlpsVJ68eXSnjkSbQh5rq1ihAMqB
+ Vc04Eb08Nt6H3wKpm4gmliUySEKgbmKUNegHSmKq73FkY3Czsi0+JGYbGnw0an8MIVL/AKzFEwKXslQ2
+ /ELtRlqK7kn54bYtXN7LJHIPUlkGwYlvAfM0OAlNIa3vZapCrOoHEtJVu/8ANTY+NcSVpESzECZUUlFj
+ UxsDy3ANewBr4+ORtKj9ZmrG7erB6eyEKPiFNwCPClDkgqJjuAqAuKADmVMVaqakld/cbd8lQRaWzXaB
+ 4wQFYIxMLKArLUGtDQEjtvgIQlyypISnD02agNepHUFhQ7dsilCetyk5O1CDzQ8uQCt23HT54pRXrxi4
+ mCsiq1RvTiK02+k74rSnGfUDUkEoiQkLUIKHYj6O2Kotub8g03BTGOcdVNR2A7CpxVoF1lWOOf1mZiHI
+ 7UBKkEUFNtziq9RGsRkMjsJwVZitXqdtgD08MVRdvxb0TzkMMYTk3EKWKsT3rXwxVZdRku/JpQ5YSODx
+ X4gN9vGhw2qDaRIYY0uKVBIR+ZoTvX6CDgVRimVJCriKMPyBKGqtTYH5ivXFWxMkaUh2DSMhBOxoeNa9
+ eh7YOqVWNwscYKKoFfTT4Rx2IoNzUYUNNqBiYCWAAOGLFKdANiR9GKpW2pmcBHRtl+Fiq8uS7cQAADQd
+ 8VYlqM/OJQiy+mUPwqvwAKSB7A4QgvO9W4hpFUmsgoFp38O+BXnV3IPUDKHBXZgw+jAVSfS63P5g+Vgl
+ VMv1lT4gM8YNPffbAGPV+oEsKRQxrHWZAnL94ak999zlhSkl/KkYq0NVVx+85EbUodz7nEBkGJXkvJxJ
+ Kpjii3U81pQCgB23qcKUuN2SHRU/cKWoXcKQd+QNehxFopzytEfVIhZZEAZTICfiagAp3yVliQgHVPjS
+ ZViagRHUhwAep5DbauQlyZR5oQ+knqOCWEQMQUD7QJ+0ak1O2VhnNV9ZYzGyerwJYchxUUIoSR37HfLQ
+ ba6bhuyiyEMS7cWNeIqpagIO/cbDtgISGrm5nQeqeRLM+xZQKDYVHtkAqBeZ5ml9JlIl/Z9QL8JH37kZ
+ MFKCVy6SrJD6vJldRzrzYDxDdsLEqK3ESyKRbFQzfGC1AeSmpKitd/xyJSqiSFmidUCgVodiAT2Ze3sc
+ YqtCwgwCqmRqlUHEEbE7EU/HCRahU5IyJJEgcElGY0H2gRXx+WV9VS5wgFxFNKOLIWAAY0qKDc0/HJIS
+ 0zxj0QxEgJqpKGg4DbYbihwFKJ+uLxWQo1A1RwUVpsGqP45FIFolbmSaJisU44kH1Ao6b/a3qcjbPhCj
+ Nc1h+ISoI3jPplRTcEH5ZZEsCKQhuKOp4yJGqhSu9TSh229++TDBSHxySNwoAVYtU9wRUEnetO+ApC7n
+ A0MvJ3BVFVQtR8W+3X8MeJLUgtordj6pJDhQgJoG4+Fd8CoeSNRKTFHzNeRcDsQAaVPscVQlwUR5Q1uq
+ EchyJpUdRt2OAqg/UUu3JYm5KTSoPTY0OC1bimQBWT0ysbky9jxqNqEfrySEDcygwqBGoNT6iJXp261O
+ KpBPKRSgNTUVANOoI298VY5fUeqnkNqniCAN9wKjFWM3rqJFZXPxAdiNugwFUikumjYry4hjStcihLnv
+ Xt5JJWKE8WELDpuN64o5PqH/AJx0gkHl29v68W1G+pXuViWm30nLIDZMX2ppN0ECgbmla1Nfh8T4VxIZ
+ M8tLyZkWNJGVmBZmXuBuW/hgVlGn6hwFBL6j0qF7/Kg6fLFCdw6pMxIHEAkcq71p4YpTmJpGIP1iQclr
+ UGpI7bjbFUTE8H2fXmJqfgqBX5demK0z3y5+YXmTy0ypZanPc2SEctMvaTwMPapDJ7FTgpiYgvoLyv8A
+ mz5c8wtHa3//ADr+pSUWNbh620rHtHMacT7PT54KYGJD1EqR17gEHxHiMDFrFXYq7FXYq7FW+304q//V
+ +yJ64q1irsVdirsVfK//ADkL+bOs+Xb7S/y48lTJbeZtYs31LW9Werix09SI04xqVZ5JXICrUDxNAckA
+ ziHxHcWPnG8N1PqX5ha9JN1f0o7e3Bd+lQqNttsK5Yz5JE+j+Z0LU/M7XIv3akoDbt8Z+IjeMHrTpkFU
+ pNO86QH1IvzO16Z0koVa3tZUoBViQAvfttiqta+ZfPen3EaN5pi8wQs1WtL62+qysH/laMyR0X3WlMIW
+ kPrPnOVbFNRikeO2mLQ3NqGIMdxFT1IXSpKsgIYb0ZSGG2EFQ811TzLPKppIzeuKgHegHhTpt0wsnnmo
+ 63NGSAzsvLmH5Cpr3PhhpWM6nqk7cjy5GSnJ1oBVfHxwKwe7ndw1WLBdw1dhiwed+av3llJXfkpHXtTI
+ lLx/y3cxwNerNxaO3kSR1YVFASCKfTkBzYAvpLyr53gt4ljgP7lRQAPxA6UGxH35IG2Vh7Jp/mj61Ekp
+ fgGryKtuSRuSGrt/DCUsxg1eLjbc6SoQpYttzBBoBQbfLAlGS6vaAmHgrq7KZQXIoCT27ihxVRm1hY54
+ yjKlSRFFzf4QOlTQ/diqX/XJVErQymRJ3HJSWogO4UEruT7YqrJNcOkMgT4lIZpBQlSa7EVFdyK7Yqil
+ uJo/UiWRaU+F6Ba1IqPtAmnviqtdXL7r8TI/EgcQKKelApJ7Yqov6nCKSOQhDK0h9FmBYdgSV3+X+3ih
+ dc3UnoO4VpIwGZt/tN0G/EHfFKSfWSgiVYm+F0MjNSoqSCOnfGrQqiWT1pYzCkh9IqV4cwaCo47du+Sp
+ bQjyJHIgMAQ0VIlKMaBj0O+wH3HCkFf9Ynb0UZCh9RUUmInpsSQNiDkbWl0tw5l4oKyRxvs0bUBrQACv
+ hkmKFt2lkWVaIEfiH5B1Jr4k7jY1pkSEoiK5lRHmS1tGUUUsGYEFSOhJ/VsMCW5p7hTIsdnEAzndWDA/
+ DWo5fPwyQCVySTyCVPSaJCu9FjapBJHfamRQjGkiWouf3XFKzhkUD7VeQoQCScSbVua8tW5h4BKAVEnA
+ Ab9BQn8Riq03ULJQRycStCy7gFqd/D5fTgpW2mJEYiiYKpZaNUcqHdqqKU3774hVKWSYcmERBSvxMDyJ
+ 6gDbfCtIae4csH9EkLxZ6Iz0pQfLc+AxSRSDnup1nSNbbkGkcAlPi6b1+WICG4bmP92CnAF34pwJKqWB
+ 2oade43yQCLajmgRqk09Ryq70UsASaH5HAU2immtxIwbZlY+m6yLRxxoK7EfRgVJLqa24niOQLA8Fam5
+ NRWo2PtiqQXksToONoWAVgAeO5qTUf5PhipYLqTCQORGE4gVOw69aeJxQ89upGUtyYn4jQgA9O5wHkqA
+ 8voZ/wAx/KKEU5Ncjn1oC0R5U9sEObHq/SIt9Wh5SPJeF1ALhtmruONNqGuWpSq+u5midV08K1ZAULLU
+ VoK4Ad2aRXEk4aEvZgKQjLKoVysgrX4ad/DJWqQXdxzkZXg9Rqoy7cPjJatKdfeuQqkJa13DwnR7eQSz
+ LWMj4aMG5UAqPowhKAN1bPEkoiMcjkVJalD/AJIFRhO6rDfFgV9ZCCCoBrTrvvTbK+FeJCXN64deFxET
+ 8Y9OoBFBuOlMmFVfrd7LawQxyeoZlHxAA/YJNCQPs9MJY9UUZLhYRy3MrSMIuxZa7Ht1GVEUWSDE07qC
+ rLVQGJanwEihANOuSBpCGmmmV2jXi0fMnjRenUbU3oRsceqoWCd2foCxNVUgApx/2P0/PJEWlE+uxiJa
+ QqrAj4SOjkcj9kYgMFIyCORZHugVU/skkbbEnamJVuK+jEILSNzWVXiRmavEAnYBe+VlmDSxNVSSd2Qq
+ wUBn5q5NTuAdx0wgoQS3LMonNsgNDy41HI/y7t77ZLohEB4lWR4bQoaFXNSxOwIGx/EZAhkDSIMiRTFw
+ JIwEB4gkkHjt37UyNNlpSzSGRU9Xn6ij90aU6kj59MLGRS+S9m9UCgVQQFBI2AG1KZNrK+K9LMqGIBUH
+ Fz2qBVaffgKQipL5EjYLEEICkkgDoOoO+RSC6S+QSsVaVR6rsAppTrWmx75NCBuNQTixKvI8jFSzcdtw
+ Pu2xVKLi/wCTmicl5NuVqQvXeuAq5rySUhgFCMGqWToCQBQ+2RSujkQGUOUD70PHcmtO+SCClVy6sFPq
+ 05k0G+5A36eNcKEnuRQNxkSoH21LVoRTb3xVJroENIwLGPhtv8v8zirGb1ySpK/EoANMBFqk8rwnadaC
+ hoaZEoYdrNxFGvGEHgeRUfQBX8ciWMn3T+Run/UfJWggKeU8Rlf+b94S52+4Vy8bBmOj6Vsmd0QE9AqB
+ V2ruSd8KSzDTZZI0dW+yyj4j2Pv8/HIEKGXWXFfTeP4EfjxUblFHv39sVZAJSQJWoxVegHEgV2b2xVFv
+ egKrMfQqKurbcVA6mm3TcYq8d85/nh5V8rzPp8mrRNerskCfvpiegpEvT+mRtXk03/OQeoXT8rKz1y8h
+ AFZo7RYgfnyXx/DDaqY/P7zHGwSPSNSG1I4pWWhPUj4aGgwq9W8mf85s/mP5U9KFLSa90e2o0mn3qm5h
+ VD0pUl4wTt8J2yNo4QX6P/kD/wA5F+W/z1tNRtrewOgea9DgS41XRGlEsckDv6fr2zmjFQ2zKwqpI6jG
+ mucafROBi7FXYq7FW+304q//1vsieuKtYq7FXYq7FX5sec5V1L/nJH86dTmrK2iafo+i2a1UcIm9SeQL
+ XxKgbZIltA5MP1We1+sNygmDSSVoGBAA2AAUeJ75IjZmxeW4hdiTI0fMMrwMDx8QQSPbc4ObFKWkkkSS
+ SO6TmUPwgKoHxbk77mn05IIYNqmrz2jMjIKR/ZNKfYBIHIA9cSypgd7qo1K281IpSK5m0dNTdQDvLpk6
+ KG7kl4Z3UgdFG+ICC86t9Tka1t2qGaM8WCkipBpUkeOFkgNRkWQ82f4lBqAaAD2p1xY2x6aRwGUdxSve
+ n04oY3eMPiUEE7/Co6U8TirCtcLNaP8A1yJUmnhunkJq9/aMQqzRuCBseoO2QHNgya3trjRpxNa3Hq2p
+ NWBOyjxrhplVvV9B8wuY0KykEirNU1rTb5YWT07S/Nl3HInGYpTpHQHoBXqO+HZjxMgbzNLJxkPElotm
+ Cou1exp7YGSkdYd2JdxWRqrHwFNxX33PtilMhennGSwZ9qceRpIvUnrWmKosXsQiQCiVIapZwSKmp32H
+ tTFUXFfQyfBX0zsRIeVa7bHbfbFUWXs3ZQzrHQ1rz47HYBa77nv0xVUnn+ORFcLGSwrKFUM3fdTt08Om
+ KrJ7zhU+sREsa8kQVYk7EVFNh17YeJUC13yljRJCKlCagbDoCByFNsCrY3NH9OXknpvylqKHehAqwpht
+ FKN1dSnjycxlwCpBDAjappyLdD0wcVpUhqNw7wxLK4bmpZaE/DXtv0xVz3zKIkaWQKvwhwTWvI7inf5Y
+ eJWxf3EnAG4kYPswZV3IGwJr4ClMbRSk04UOOAQlTyffYmnwk8unywJV4ZIl5yG24pGquvIFeJNBsTvQ
+ 1+nDxKm1pJbobhvqYaqLQVoOnxGm/wA6jAq+XUIGUkiMgL8Y5KE+I7CjfTiqX3F7HJCCvpbsHHqMOQ2P
+ EGh2JGEFUHDeRO6Ri4XjyVIyH+1UjlQ1FT4YnkxTWK5hEty4uePxyOQsjECvw13rTYe+Qk2Q5qM99b+o
+ paWV+CDiqHb3Br+vAGZUfrqSpMvqSqEQUr8JArsa7V36eAxaybVZ7i5RZHNxyDtRPjK1HED7698kChD/
+ AFuSE26yTc1QBmVq8mDeB2rTJWgqVzqk3KhCJwl5UEYJUkNux8e1MJKqMN/HMQxX4yayVoFHw7mtDlTJ
+ BzTQfCx4tQKA5biDyP40yQQgrtoYwEeBGJNAGckUpXeh8MKsO1FufqgqiKaGq9aMaVpUg9O2KHnN6FEk
+ pY0fkSdq0+VMjPmhDeVWEX5i+TJlYM31mXcjYAtF274jmtP0Ga7hMcEck5LryZmRSn2QR8hlqpPO6FGL
+ 80VqknhWhHYGvcYCWVsaM0JABdgOJKoWXj6gJ5Hcg03yKsdueEdxO6v6nCpVllDLSprSpyd2lK2mSVSz
+ wuVdAGUuGKktUKdx1w2qCadFhZEgMTK3Fih7HsDX4htkAUIRbmL06CDjLXgAjEjiCGNQdjXxw2lArfrI
+ /qemiKrEKw99zQGv0e+RJtCZxzo1uEUMoCsxdmKEmtSQa9P14bVFJeLQoJODbhqMF6io69chS3Sn9ZrN
+ G7SfuwvKgIAHGtQd9/HJKl4vYiJQG+NqtxDdDWvwnlX3w0i1RJYd3V5GkNRUN1UkHcEjrkkKT3TKQoSV
+ S1Cik1Aqw6YqibicAJyZweQWQla/D/kkCv0Yqo/W/SSIRv8AGGCqKNWhBqvSm3fIyZKC6nLCnJrj4nXl
+ QqvKoI67duxyNKl76nLLxAuXZufIyqAtKVINMKERbXYC0M8rggqigACrUFak5ElLdxfiWSXZ39IVOwA2
+ rVlBO3ywMpG0vlvkLGRAeSqCiuwDA07b7bHFjah9eEhZSiBCoAVVoyFtyK8t65IKi47393UR8DGeW1CN
+ htUjbEqhjeIS8hqhNaICQSSRU7dfljS2pS31mJlVZAGIZjyLHavjt36YUIB7pWrSUU+Gm7VJH4YqotcS
+ M8AjmAQu1QpJOwpWm2KomGaX1Ao+PiCD0O/8tCR361yDJUe8kRCxDOQpPKorud+p8MkEJVNcK5jZldiF
+ fckAgkAA9fowoSx2jcH425sAQKD4exO22KoG6KhpuDNxQGgJ2Jr02PtirFrw7MCVIFOND+r5YosMcuWr
+ sCT169QBkCrBdaYtPbQR1DSnpTuzACmCmJ3fpz5D0/6joejWYCq0NnDDsaU+EEj59syA2B6xYCjK6NxV
+ A3Gpqw36HxwKWU2s3A1DhvU/vI2NQDSn45EhAZJDII3A2C0AVBseFN6+wOBKf2782Y8+LgV3oVf6fbFX
+ j35u+cb6yh0ryl5clWPzH5lD+peCp+o2kdTLckLsSg6DuSB3xV882+maRpSg6bZsFDH1b6VjLdXEhHxS
+ TykVZmO+3wjoBiq2a9JipSUfvAfTFVA5dDSvUg1xVKZLnfigkVgwHwbmtKbVqNsVUkvxaCaOjcpyBI7U
+ 3ofH6cVey/8AON3ni78k/nx+W2swXDJBfa2mh6wh2Wew1b/RpIyOuzMrD3GKCLD+gFkKMyHcoSp+YNMg
+ 0rcVdirsVb7fTir/AP/X+yBIqcVaqMVdUYq6oxV1Rir85fMkKR/n5/zkBEVJla40O4+FFb93JbSjv/lD
+ DybQeTznX09O6Yh3aNQA5CrQchShAFant75IGxbI7GmFTwuHiSBGQDkgX7NNiTUAigBHhjE2vJLZppYr
+ dllgZWYAtRt+YYdjUdNwa4RurAtXit5DJLWWKaOoYKysSWb921CBWnf+3GSWFWPK4u9VtkdZnl8va8pH
+ H4yTbCWqn2EfTxwX5q8m0G7Elk0RoAGqhO9T1ydsETcMrjlyBKncdN616Yqx6aUESbndvhr/AJ74qx6c
+ /Cw3V9+R6beGKsV1IF7aYb77174Cgi3hUkYXzQENOM6uCOnVCdshTFlFnpU9sS5nY25AIjPh4b4WQGyY
+ w3As5gsQ+FvEjvit2y3TtVcFWqrGoFOW4rt17YpoJ5Dqyq4ViJAagKSaCv0+OKU7g1OFkQg+mwI+Hm9e
+ nQVB+/FU4j1OrheTbV6SOQKU3oMVR6agByVnZwq1QLIQWPUda/qxSjYtTUHjJPIjCOhUOW3A7mmKo6LU
+ YVkBMhZNiENGI8ACR2O+KpgurwghRdnmpaoeOoIqABxHhirV1rcKSEM0DkKGIKbGu9BQ718TiqVDV4g/
+ P4Hf7ZBStCNvDw2xVTm1wyK4D0CrsfTUUqSTQe3jkEoSfU3mWQtMw+EceSdzSm4PX5ZIBCM057iWVpfU
+ ZVjVSANyQn2Pir77Y2kC0dLcB/SVmZ1RviYDjXck0JPj1woRMNzaGD1pokZU5AEsQAx2BrTcjIlVOS7t
+ Zn4oy+s/wv6ZqCO5oRQYQqISWylejXJKQIVkUmpLbdD3Ip3wqmTahbwyyf6VxLFhVRUDYAEA+AxVD3V/
+ begkwZjITx5DjWle4ofnirHLvVIWVBCqsB8UZIUCletRvgtVK2unZ5GI5Mz1UHc1JBr22wgqmKXLfvVM
+ 6xVJ9RagcWY12Pj88iWUOaikgn9GP6yRHGjCprRm8DQ7jEJkEerKoEqOZOUCqopQCuxpyrUe+T4WCIlu
+ 1ZSFYOHckFlJB4qdyKE1HgMrbOim13ErQfC7MyhuQG5JHUVFRUCuSDWlzX7QwVhYllDM0gqQq8CzbMvi
+ cKEKl/OVWjV5oGKDavXqOO2QZIV75fg34fEGPELuD1NKHfthBpXSXMJ4ngD6u5qoNPh3JG9BhKEjuyrk
+ skEirxA3G3UbVptvkVLzzUwEmk+BqU7ihJP3UyRFoQPlpwvnzyQ/qC3D6jKnqnZYx+7+I9a0wDmh+gct
+ 1Z+mAl2925oOYACsKeAG2WFmxm9uVpIRzCLTjIzgDp0NdvbfBVoDD7q9t4xIFtFR2UBfjB+Jwdz3pgVi
+ 93qcYl2jgMruQZq9vGg8PliqXSXk7soDwsCocOrKBUg7b9DtiqSz6rcIeKzxrTiFYSAmgPh418cVQYv7
+ l0DCQD03NTyHfv7nFCyxvGaQETmpccgaUAIrvTate+Ksqj1CNJWRXZ04gLsPDodsUtPqFo3qGRnjIUuq
+ lQKcRSvfxxVAyS2ISrvI1ahY6BSa+FNh0xQUKbi24IA8xG5ZdjSooaUGxGE8kIaO8kDsRHKEKkKCamm+
+ /QnemISrrcOw58TuFqzmla/s/TkkKRupJpTWROSPQ0Ykjiu1VBG3TFUa164Vz6qKYypQMwKcqEE9d8ie
+ aUrmuiEVXljmeg5PzIoD0r8u+BUsa9VZmUtyNaGhBHEgdRthKuS4CqKkKagsKdN+vtlbJbNfFGlVSGH+
+ 66gMQD0NfowDZBKWSXhLyOyAV+EfCDUUqaZMBCY2bzSs5Ma8di1FAoK7CtNzhVHTz8YqBlRnAPFV+zvv
+ U07eOKUte5h3LuKciD8PUAgnFCFe4gPI0bmRvQcRU7gcq98VQ63UXGn7xtuRYClD1oN/xxVoXMCUoH5A
+ 7MK1FT7HtgBVHRzjmqKzlADzY7EAitTtuSdsbCr57ikbIAWZgFHxAig3NARgB3Qk8krj/dSigpUAH8ck
+ lTgnCB2MQk2AJotBWleuKrpSGWRvSCep9hNgaEnpirFtRUgSKeCVCH7NKkVpig8mF3L/ABFhsB0Fcgi9
+ 0n0m0Oq+cvLumj4vrF3AjL12MnI/hhDHq/ULR4xHECn7A2atSANth3y1tDM7IHejcdhxp95IxSyazYq0
+ nIgGHcmlagDocBYMntijI7FduI41qd67deh8MiyR3wNaStMPs1DANx3G4IPz64Cr5Yv75tX8/ec9RuFZ
+ zp62ujWVWakaf30x26Etx+7JDYJSLUZVjWERyHlU8mCha1r9kfQOu2BDHRecVIQypuikUHI0IHUg7nxw
+ 0qEN56XKOSVuNajeg61oTTxwKg7iZSrfvl5gVerUFT06jFU78iSkefvy/kVgz/4t0X03DCv+9kQ2Phh4
+ Vf0yXlBeXY6fv5Nv9mcraENUYq6oxV1RirdRT6cVf//Q+xp64q1irsVdirsVfnf54EKf85JfnNA8ZVp/
+ L+hXauQOJ4yTIevz64bvZsHIPKfMkUMt07xq3xOA6FSFATsDUd8jjNW3SYXc20ySOkbl4yXLg7ncU+Gt
+ d+XXtljE0g5pLqGExhCryHjSPegLqaGp3r88UMK1F0uXkEkYWUuTInQ1QbUIHjvh5KwrSYbceaNKt3Qs
+ 97NNpzyK1HpdWM0RBpsasw+eIJV4RociwTPESI+DkGM/Edqg0p+snEIKbTuAJY/io/xCort7ZJCQTSCh
+ oTQ0KdK++KsduGUsQd2HWvQ18cVSO6CMJO+xBJ8cWOzwzWF9DzHpztsryKCevU8dvvyB5sEbcPd6fLDK
+ LkzW8w6E1oQSCMNpCNaZJFVu5G5O+RtKpBeGOop9r9qvgcHEzBTyK+BKgCjJ1AP8MeJKbwakg+24So7b
+ EnCCi04h1gkqEmRAK1apH3CuNpTiLU2Cf70AhK8DWhFRXGwqOTU2YqWc8EWoCite4+WFUQmoS/A3qEsy
+ hmNAabAUrX2yJKEe2omWQNwU8/jDUIJp8vfriOabQ/6RcliQrKqgAFSepqKgGh6YbCqb6iiktw3VQBxH
+ Eqa0r7dcbVBSanSSRUH7pq/E7CpJoeXjTY0wbLbf18y8URU51BRWpTcjce2AoT/Rp50SRYigQBjRkUkc
+ RVh1riyBbm1SQuInkoJHBeqABaHkKU7V+nCFRY8wziIBZk5JyVk4heQINaClOuG1btru4WMsJyhaMjiw
+ qDy6Hp2qd8ilPoLtLe2mmupTJIBuoALAmgBqyncjYZK0JZPqlZHAB4F5FDjpSgqRXx8aY2qj9ckl9OKL
+ 0y6ikY5CgHiadsBKpPcXbI0QHpu4XiVSu+9e22BKbW0YW1UsUHIh0i3DCvap8MVQupXcC8ESIP8AH+9k
+ NeJpTanQ74q1BeKISYwFShchXHYbCh6dcVtVXUll4pChMgUmSLkSi9KbfLDaEfNdyqFqGjHKj0G5oCRx
+ B6e+BlxlBfpI83Y1d6/EAtd6EbVI6ZK2KVzahQKjIqlAxAZD4DdiDvXG1WQagBA6q0cdUo0qq56dPvyK
+ LV451RwVHwBYyAEKMWO9fip098bW2RWk8roggAq+7sy8SNj49cUhLtRk9SN09Ql1UNzLEMWLg14jt40x
+ S8y1mJ1eZmcGiVBY+O9KeOTu2KA8rxxf428grczfV4H1ScyXPHkEACfEB36YN7Y9X3rdT6esMZsGDxKn
+ wvxArRd2qKHelckWTyfVvMBaZrYCNWkJDI5I5KO9DTfvjxJYXdaq6qUeKOUmPkUXoKbbUPhgVjV3qZaT
+ 1DbAKyD06LXZTQ1NffBatG5pHGGciMAGJOJoA3Uivv4YVY9PeD1PikfitDyaoNO3QdMNoVYmABIAqACS
+ rA7/AEgfdgVF2kCRIHLgUbcKQ5UADkSO/XriqbqY1QSAyx7EggUJNaU7U2xVcLtVdZSZGBFHDSGp9yNx
+ t2xW0tuL8FpFkklD8+NFkFRXcDbw9zgJVZLqSxBiacwNyWI6AbnG1tKn1hY3hlY82c0L13BJNKHw9zhB
+ VFjVfW5orKORJahJ4b+JOG1XR3UUMMretAZC5ZwOxA60oeteuG0LPrKyq/79PTqCiK9BXj7jtXrkJFUJ
+ cXHpKpDNuoZtlOwNdtq7DbGwlAw3KzzqzpIy7CvELx3r0I3wEoR7zQIgVQ7lyAWJAr9FOg8cjRVLJrmM
+ EqrDlsUXsK9Ca5PhCqCFuXAyBk5DklTvvTYYUpuL0wR+lzkUydVqRQV8D8hhtUJPe8VjDySKpVXi2qdj
+ QilfxyNqlsuoOSBErHuJGUClOlN+uNqgJtTIopZkcbu53JqOgHY++Nq0L/1eKCUhnA2A7HIk2hWaehqs
+ 1SvQlqUI6YqjIpTIKhxRKKzE7Db2r44qiollckI/FeQDEkjbx/2skClCzTEVXlVW6jr079claLCmwk4U
+ 40PMDcj2FT4ZG0pg0BS3IQ0/eU5bVHIVPfJWrENVLqXOxBG4bxHTIksbLCJmYCoUFvE5Fiyb8pdP/SH5
+ qab8NY9Mhe6IIqF4R0BP0tko81HN+jGmJ/o4Jq3wgID1H+YyxtDKLYfBEqjlSlC1aiu/brillVslArV5
+ UWgjapqK0OA2gMktlDxM8YVZHf4Vbrx7Co2r88iq3Ur1YIU9TZEjdrhD8Pwxgk15fCw27Yq+TdDkmudJ
+ i1SqRt5hu7rVZPiHxG4lf0wy7n7CimRJZxHVLr2RVeUl6FWMalF3K8d1FentXJAIkkb3EKSSKscpA4kN
+ vRQvUH398n0QoNKreoVlKbhkqK7UPy8RkTFUvuHUq1GaRGULJyYGhXoN9/lhAVkf5fQiX8xfy8i4hpJf
+ N2i/ZFSf9Mi7Hbt0xKv6Y7ze7uz4zyH/AIc5U46HxV2KuxVvt9OKv//R+xp64q1irsVdirsVfnb+ZoWP
+ /nJ78z+duskcnkjRJXZuxW8YAj51yQjRbY8g8k1VIriRnCqtWAoKkhiCaCjjqB4YyFMxuxy5s4BRvrEk
+ ALESj41JLgNvVSEp38e2FigaTeqk0WpI0avWeKv2wgbag8adcSkMUnjvyJJnMMwYspk9PgStK0IpuKd6
+ 1Bwk2rzu+mk03X9KvxCqfVdWs5OadeCzR8iKeClq+2Ba2eHa3bJovnXzLpyJxS01O5iiU9OHqNSn0YQh
+ E3crMOnE1oop123NO22SQxe6cEkL8TCqmmwpiqSTUNafsiopsa9wTiqSTlTzZaADb/P3xRQeKec09G6t
+ bldzFIevipDDK5bMU1UJqmnyCIgXELGVVWnxK/xKafTkbTST1kVfjBWg+Lbev04oQf1twSpkLFa0UGpx
+ TaYWt7KwUenKzL4KT+oYpBTyKW9an+gzU8SlevzpilMIHv8AcPa+mlOIDPEh277v1xRaPSW7AQhY9vsq
+ biCor/z0xW0yiubuihUjVurAT29AB32kxtKOH1wskaIknfkJoKVHWn73tiqJktdQbZbdmU/bKTQUFR8N
+ KSnFV40/WHUymznIQjiAYjX6BISaCuKCVNLLVXVXjsbllAYD91Xp8t6bYpVYdM1Rzz/R998dOTeg539v
+ hxVM7Ky1GEtL9SvAELAt6EgNBsf2TTHoqYrNeWyuEsrxjIeEX7mXck9QOHbwxVSih1D1Ff8ARF8ighpK
+ xTFa1JqeSHFNo4NcrGwk0m7ZqrxBtZqMxr8PHhhBW1RrtQQJLS4gKiT4mhlC7DZWPAUNcBW1G41L1WKG
+ 54F1DgOWFRt3JFMUIM6tCHIS+ikkJK1Y70rSgoaYptbFqAcuvKGOvIyUbsooK/FiyQhuXRkeKSAb/ZBq
+ R33HbFiSq3PmBSscZnUgsSZAFBPSi122rihKJ9WaeaRZJOKxsQoHHf2r4AYqtm1dyEVDwJiUGtBUcTuK
+ Dv0xVXsbz0fS9Sf97JXgCaUrttv9GKot9SlkAVDydVRSxNRUVpvXfriq5Lm5QMPiZiCXHTetB+vFVKs8
+ sjLLPxC0ZkBIJANKAb1oNsVTF7hEVCG4wqAQ2ymvGvw8gcVRRuYmDyfWA7vQBpANq9qfte9MVZRpLL6Y
+ lkkQsKUVgrAioAUg70JxZpRq19EGmpxVqiuy1+18tumEotg2uTQzTStWSWoAUIoI+e1KHJckIjybafWP
+ Pn5Z2wPomZr28hWahG7yKrEdPi9PB1Y9X1sltcy2szBoy8ZKSBZApqB1odgcLN4b5i1GOHVWt1dnMYPI
+ lwwNDQeNaYqxa4vomZgZEWoBVuQDCla9NqZElix6/vWSj1BUqVRgagd9/wCuBVIasZrYRyGtOKjcdj2p
+ 09qY2qGacSFpGWojG7Ch++pxVXjuYkSvrBFoGfcb/j+vBZVGRX1osDoLxU9ML8DcR1A2r/TLEon9JxtC
+ 4F7G9VChaAVA2O5OKoB9Ti5PGtzEACKfvAR1r+JxVSn1aCOtZ0IRiZE9Q161A/HIz5oSa81m3YqTdr8Q
+ 3PPYn5k74FSw6xDN8Cy8ip+Eg1p3NN9tsUWm8epRrbx8Dx5jZwKEjbvvgspVWvZSJKF14j4vgIHE9BtX
+ Gyq03l4VC1LUOwEZPYb1w2qEEskkh9RpiQCCwBH4UrTFUTHeQwlhzlV6j4aNU1PX6cVU31LlG6xyScSQ
+ ACrbkb9Ox7VwgqlsuolWDPIADUlKEEGu5wWqpFrUKEs7Rhl+JV506Gvhgsql13r4mdyssSgKRtID32O5
+ woJQy61bLFyNzCwCgf3g3r364raE/T9uDQXELbjj8anp9OK2hm1aF5CfXUEntIPp74raKi1SJ3bjcJzG
+ wPLancde+K2ikvUlFROpoCSVIr07e9TilkNjdW8cbAvRQAR7nuTTwxVf+m4SjLHJXiCOQFR0rXfG1QaX
+ iBDynrLJ9mg6E+OKo3T5zK4BkDsCa02p1+KuKp6bpnCKhBBDc+IqCo22Br4Yg0rFtUmaXYrUcSxYChPY
+ UoKfRiUBgE8WoH/dJKMQqtSgqx4j8Tipe2f84/aMx8yectTkFRZiLTo36fvHYlxX5JlkEDm+27AMixIW
+ CBh8LKa79/lkmYZLZErIkbDiBVlbodtjv3GKSU+gq5IDAgOAHrQHj2PgfDFiy7TdogeoINGJ6b71A/Xk
+ GTB/zM1F9O8meY7qIgtHp0sVpMxHJJpv3cfE9uVcFq8Vhju9PsNOs1lThY21rAWAQKGWIcgO/UffiQkG
+ mKXtxO8gEjUkeRwWCKvwrUeG9NuuTjyW0muJ+LS8Y6rJHQE02YGhp0OGqVRoX5BF5IPsgAjoB8wK4ql0
+ 1s/HeMIqgbnbetab74qz78mLJrn85fyhtWNTN5z0kFew4zqw+jbEhiS/pLnPKeZv5pGP4nKWlSxV2Kux
+ Vvt9OKv/0vsaeuKtYq7FXYq7FX56/muRB/zkz58csEabyBpDRliaNxvdztuKVyQOzaeQeLatNE006txP
+ MqVZyeRoCaknYdNslIshyYzNMDCI4zUc/UDo9C2wpWnWh3xtUquHuU9KZpW43AYLKQGBY1HIk1PbAqRX
+ L8mDOG5sArKoopotCH4n6fHCFeeeZfrASdrOSN5vSmmSIii1UcUKlgabjc+OJCvKfzTAj/MXUr+GrQa1
+ DaalDIxqT9ZhRz+LHelMACCkcrNw4qGq6bk/aJPhk0Mbua8nIQpx2ZR132xVJJmpvuSNiK0Wg7ZG0pJM
+ SaBtz2oO+SYSeU+dY+cLOBujg/wyEgxLDNN1q4seMK20V2T8MKuG9ReR6KyEMRXtvkLRbOLHQvO+tL6u
+ n+RWbnuLqeKQfSDMwH4YaJZMqtvyk/Nq/pwtbWwQ9jLGg37URSdsPCVosjtf+ccPzL1Aqt5rmn29dyDL
+ NJT/AIFRh4GXCWVWv/OInmq5ANz51t41NOXG3many5OMHh0vDTJ7X/nCa6uAGm8+FfErp9evzlw+GF4Q
+ yO2/5wY02QfvvPl6K9eFjD9H+7MeAI4U/t/+cD/LL8PU8+aySTSqWVsBX6WPbHwwvCm8P/OBfkcha+eP
+ MHIfaZYbQbnwAQ4+GF4U0g/5wM/LegMnm3zLLTr/ALzJ+Ijx8MJrZMof+cEfyxUhm1/zPNxO5E8KCnh8
+ MW2PhhHCm9v/AM4P/lTGebap5ocj/dY1FUqPYiLDwhPCnMX/ADhl+UcVFNz5mFNpW/TMo5d60VB22x4Q
+ mkXH/wA4efk8sgT1PMxI3ZP05cfEKfZ2UUx4QtI0f84h/kyORe38wyMO7a7e7fKjDHhC0r/9Cnfk1Qql
+ hrpNd/8Ac5fV39/UGDgCrz/zip+T1ebWPmMPUCv+IL+pA6EfvOmEQAVFR/8AOMH5VQJIlsvmaCpq0i69
+ f8ietd3I/DDwhUWv/OOH5eqVMVz5lBX4VrrVwx+QDg9RjwhXD/nHXyHHssmtyDlu8l+zmg7VMf348IVS
+ b/nHv8vyf3lpqM4NeIluuYFO1DH+GPCFQ7/845flpMG56LcbmnI3BUkeFAgx4Qqwf843/lkNzoUtIwAr
+ /WCa0/2O++PCFU5P+cbvy5dqjRptxQkXFOPuPh/HDQVQX/nGz8thVl0W4qejfWa/dVcHCFVB/wA46fl1
+ byBk068SRlYLILhSFJ3NeUZH348IVYf+cdfIi1Jsrp6jg3O4Q8h4bR4aCqMv/OOn5dswrpU6kmgKXLqR
+ 7/DTBwhUluv+cY/y9lLOseqQNQfFHfOwA8fiDYDAFUh1L/nGfyXOZPT1LW7TnRAiTROoA2r8cW2PAFSx
+ /wDnGnSIVZoPNOrAsOKmSC3cV7NtxwcAVKLv/nH/AFez9ZrHzNBIGB4RXFq8TE9ACyOwA+Qx4E28u178
+ oPO2n+rLKiXsSAb2MyyNwXr8BCt9wxMUPH9WjntYJ4P0hDA8UvBbOWqXckhFEiWNl5FmOwHjTCUovStW
+ tPL/AOdvk/RP0jZgeVdLg0qWaeRUt21AxO9xEZTVVb1JWTkduQyALC930XNqXm+9mu9H8seWU1TUZgfU
+ aO6gIgDDq7I7BRQ1q1MmQzSbTP8AnGz8yNemF5r2u6NoDOd7aBZb6QBuu6+nHX6TkfDQ9Q0v/nEzSAob
+ V/NmrXzFR6n1eOC1UlfAUc1+nDwMbLKof+cWfyujCG+tNV1Uruz3N/JU/MR8R9Aw8AZMnsv+cfPyotlV
+ Y/Jts4UD4Z3kkPjU1bqMlQVOI/yW/K2IUTyLpPfmXgLV9zVsaCo2P8p/y3iUrF5C0RBsqsbOMinga1rg
+ pUxj/LjyOissXk3RERD8CCyhIB2qd170wqjE8keV0AWPy1pZVdlpZwfCCew4dMVRK+UfLUfwJ5f0lK9Q
+ bKCgFev932OKr18ueX0O2i6ZVTUN9Ttwanau6YqtXRPLvVtE07m32P8AQ7ele/8AuvFVYaNokajhpthH
+ U9VtYFofGgTFVRNL0o7rYWixk7MbeLYk07L0xVU/R2nb/wCh29ehJhSh/wCF7YqtewsKqotbagGwFun/
+ ADTiqkLKzYgiytxTYH6vGPb+XviqxtPsqEvplrQ/CSYEr+rFVjadY9G062bkNx6MZNPDpiqg2laWTU6X
+ auR1Bgh5D/hcVWHSNJYljpNiTShBtoOn/AVxVQ/w9ojcz+gtNkKgkqLO2Y07/sbYqhG8q+WG+35b0gg1
+ VlawtqeND+7xVCSeQfI8jGSTyjobGlOR021qa7U2jxVQb8v/ACMdj5R0QN0NLCDoOtDwxVQk/LXyDJ9r
+ yjozCg/484gD9w640FS2f8ofyxnJEvkTRpK7NW0UbnwK0xoKks/5C/lHKhV/y+0pUbdkjSaOp9+MgxoI
+ pI5v+cavyfuBUeTRZgggm1u7mI07gfvCMaCQKY9c/wDOK35XuTJZprOnM4IX079nCg+Cyo2+NBFMbf8A
+ 5xW0a2eR9L81X6NMOPp3FvDKFPYVUoe2Q4EsU1H/AJxp80WsMyadqumXlQBR/VtWIG9N+YBPzxEaV5Br
+ P5Fee9PdptR0W6+rwAcTp7rdgAE1JKGv4YkI4Xl+q2+jWGoW9s91cRwaGjX2ui4Vo2HpbwwBXCnnJJxU
+ Dwqcgpe3/wDOPls0XlC41acKJvMGr3F3Kafsx0jG3hy5HLI8li+pLLi7Dg1OBGxG3iMklkVi5WckBSR8
+ CxtuDU7jFmnSyIjgqrcJQSqjevt89sBYMss1YpSNguwWJTuDWtQw2+WRZPIfzavYp9C0nTHg9KXVtes7
+ O4iRqtLCjCVgPHp3HTAArA9QvbW6ErzKUkmfmvJamg+GgYUpT8MJFKxK5jWQgOVKg86lgONT2rv269cN
+ qk0loszSMLmJnYjYk0BG/UfwyQ5JU5I1BXjdRHkpBAelF8KYq6dk4SMJEKxkcuJLbKPwxYPS/wDnHaNb
+ z/nID8kIAP7zzpYHcGv7sO+3j0wFS/oqJqWPiTlTU1irsVdirfb6cVf/0/saeuKtYq7FXYq7FX57fnIG
+ H/OUGuRKrkXP5a2rEISN475KVpXuckOTZHkHj2p2xEgFJXBasnEK3GgblRTvWhyRZsQuLaMNHG/IJzjB
+ HCnw70od6bjKwUpZd2cbMsMkvrANUGjrJsD3XkCD40yaEmkhH1eIRKYxKw4ASUI5A8q8lrXff32xW3n+
+ vFUhkdld14FZZSQvIcugIFTuMsCXkH5g8m0v8udYCVNzo0mmXb9jNp08kLAg+ChfoyseTFjCS+tDzZiW
+ XsvQbVJOG1Y/dvzLDnSp27ZJCQXMoAYDehqT40yISkl1P/lE1NFC7k+AA75JrJTvSvyl1TzWyzaw50fS
+ 5N2h2+tSLTwOyV8Tv7YCLUC3uflj8sPKvlyNP0TpFvDOtA11InrXDn/jI4LfdTCAzjGnrmm+VJ5eIELk
+ kdSv8MU7PQLDyXIQv+jmqgUav47dsV2ZhZeTGU7xKtSCv2mI8fDFNsusfKkKqpkAqR8RGxIHTqMUFPYd
+ DtYaKWHw9W6bkbVrihMI9PtVK+qFAP7APX3PtiqLS3s42/vEXvStK9qUpirla0WvCh4dCTTfqep7jFV7
+ z28a9n4ihHIVAPzxVTN4QAVjKr1Ys2x8Nxiqw3cVC5BRye5pRvfFVL1onNeQjBFSNjWtK1riqi09uKEk
+ DcgMadelBv4eOKtrPENxISYxyoQAp8Sdz1rirheRUO54jetKinzPh3xVYNQjAQFeRO61Fdtifw6Yq576
+ gUhGQtT7vfwxVZ+kIWUKquVIorEEkA1I36n6cVV3uYKEFChQciAd9x7ncYqs+vKoUdwtK7UII+eKrPrc
+ b9yQE2pQHbv8sVaS7jUKu/JgSaCo+ivWmKqC3IFWFwaN8O9NyRvv16YqvF0FUBzQqaKQQR8tsVbaXktK
+ MasSzEdj3I98VUmKl2rUdDRvDriqkzIFXi6szbbrU7nt3xVt4iCzghRXdqV6+GKqLxk1X93RgOI7Edu2
+ KqBhQAUCAnZihqB47dsVSW9t42oooJHB+I7GnscVYXqdkzxvsH4LUK61II6DbxxV81fmT5Y0zWlaSeP6
+ jq1up/RuvQov1q1k6qyuQSaHt91MBFhXwDoX5dalrXn4eUdSmMEa3wi1jWUHNRETyMsfL7TSKPgHid++
+ VgMKJL9ofy88haH5W8u2GiaBpMWkaRbIojsl2d36+rcSfakkbqzMevSg2y1m9Shs44wqIlXFCrcelMVX
+ tFxNFQChNWJpX8Tiqk7gNRVUuACeIJXwxVDGrPyZqotC8QH2SOnviqhLdQ19SQlAfiO5Ir0+Jfo2xVsX
+ QkALR8uPxbLtQd/pGKqRuAoICcircv2TvStKe2KqPI8C7Ej4SZeJAI74qpeohqzSMCN2qPbrgtVM3kSP
+ sATuxJXjsfHrU42rT30ZHwMOPIqCKKG+X9cbVDtfoVojbAnid+g7inhhVY+qULMXCKBuxRtx71/jgtVr
+ amDsZatTagNfo2xtVA6iqEkyHcGignlUdO21TgtKgdWQKh5H4viCEmlK7CvStTjar21QcUHqGh3J/ZqD
+ 064bQpHU1kZ2EnB6HalW27k42qh+lQxBWShHwuNq1IrXbp7jG1U11VY2DM4NNuZ3PE96HG1Xx6xBAxEn
+ Hmw5JIWPwt3UAdz742qn+llbjLFItHPKoqB3odx+OC0uOrR0XkyKJOoJoCBuSadNt8khv9KRvwEfB5q1
+ h4kd+o69fpxVzajxZlCgU2KEqB4mlTiqlJqXHZpviBPNQwUADbv1+jFVI6nIwNTyAA+HmARUdd/fFWv0
+ s5+xyZRtSvY7AeFQd8Vam1U1BWQgcahTUmpNPwxVpNZjJpJxeTZT1Ulh89sVXvqtv9lpCCjEsDuQDtuD
+ ircl/Zs0a+pyQjkgoAT3ocVYn5o8p+TvOdm2n+ZfL+na1A9GT6wlZA1KcllWjqwB6hsFK83X8qrXyxp0
+ Fl5QlePTLAstrpN2xkIXkWIE/jU/tYVSka02n3P1DUoTZXAoRG441p3B6MD4jFWZabqFvNUlgebbkHbY
+ DcYsuTKrcgvCfUYtUhuLUUg9CR3YU2wFaZXbt6cQpRi/wlWruSfDcVPjkVeFfmTfG585+TNPqZYLS2vd
+ TnipvyVPTjJI3P2qUwxViGouzfEjGvAcI2O4Yip/DpieapCxaQzfHQMApNatQCv44AFS4qFZkZxzCqGG
+ 4G39mTSpwxKXh3AAKkEnrUnp93bFUNMIwJQJl4sTX4vE/EOuLB7R/wA4vRKf+cjvyN4kn/nbISo67CCb
+ fAVPJ/QkOgypqdirsVdirfb6cVf/1PsaeuKtYq7FXYq7FX5//m9LGv8AzlVqKGu/5Zwq4FN/9NiIA3Br
+ ieQbByDyfWoUkuKLdcFZv3g32YnelaEdMN02AWwe7/e+lJFccebBallXiB0UjvXxySEmuvrHqekUJPIt
+ zWq0p0KkHb5HbFUqvLqZbBZAtJaK0jUrX4ipAVum3fFDB/MCI0A5RMYhzVTRlJYDlvTp1rXJBQ8n82QJ
+ P+W0jB1/51jzMJCjnlIsWq24Y+5AkiOA3yV5jb3UYhohq5FWanXbpgVKL54xIaMDx6kDanscJVIYbPUN
+ YuhYaRbPdXDdeP2UB7yMdlAwIPJ9BeRPyhltWjvLmD9Iakw+KelI4weoSvT59cmgB9K6J+Woi9Nrho+H
+ 7YCk0r7/ANcWVvQbPyno9lx9OFWddixKg/MdfuxQnsUNhASIljX4QGoanuSTt08TiqZx3cCKWhpIACTI
+ K0UfIDFVjazQlY1o5+zyrQ0H0Yqu/TiSMBwBZlryr0NaUFenzOKrTrzh/iJ4qOIHEUJp0B61xVadaBEc
+ jMrchQN0bbqSadMVQq64ZOLoQpozbippWhJr22wWqD/S5JMjEni3wsI2Kmu4FPYbHBaWl1JpPi40I+MK
+ wI3UV267HtgVaNRkaM/CF9StN2DCgBpv4eOTQhX1FOBJmEZeirIp6V8BX8cVUZNRoKNcqvIVBdgWcCoK
+ 1J2J23xVcupfYrdD94aBhsRx7b/0yJSFdNRPFg08ZAfgHdq7k7D8MQVpa2oxUjBkh48t05E1J3P04FQ/
+ 6TjDOEkiAmFFYAkdKAE/I4q5tcKMpohJoA/ILv8AZrTrXDaty6+gjJjMZWoJUTA0A24k++ELSg2tNIsi
+ i3qSw5kyK5AIqaYLWlJtdKuau6AgfAQpAp1+f0ZJNKUeuKys3NWeUEcuPE0rv07d8VpUOvR8nYygoh4K
+ Aeo3r416dMUqyaugVF5cF4tsxB3pUAUGKohdZgZCvqhKV5emKFQKUJoe/TpiwXxavHzHG4VaUD1BBQ7U
+ GxxVXXVoi/E3BqRRSNwR0PTFXLrEJfilyhda7712FKjbfpiq5dWtXAKOCx3BWtSB0IHQ4LVTGqxuAyvy
+ UgAODsd6dNhtiCq5r1VJRaoXUEjs3j9ONppBtck8w0gUEgmpqR9+FCUarMiqrmRWoSWpQVqO1O3virwL
+ zk6TJcg/Y+LjId6V6D78Wbxr8oPL66z+Z8Blt0liN7E08lBWtqrSb16jpiwfpxbW7QR70qR8JB3AHY5B
+ Ky4vliNeVQ3UKadB44bVJptRcGnpqwA2IPQHqSae2NrSW3OpAKB6vpMzUTcgE+xGNql7akAof6wdwaex
+ U1JPjXAqHm1WOh4iSoYkFlPKpPYmlDQ7ZIIUZNa9MhVDIAnIqW3A9/nXCqXya3KQoDxhvUFTU/EOxPgN
+ sVbbV3ADSenwNT6dSQQK1J8emKqa6zGQ7/E9F+ONeRqT9kigG+QShjqjkLxDr6leJ3qduoHt3riqmNQT
+ gzFTVGPBA1D8WxrTFUC18qq6njGsZUemrtWrVFVHU4aVYdWEbrSQ8m6EljyFKL1Jr9ONJCg2qB1QKjcl
+ LAfESeQ26k/LCQtNNqDGE8HBenJSBuStOoPTjvkUNC+anB59xUniVP2unYdd9sVpTTUE5MqSyxrvRww2
+ Nd+JpitKg1KFqOVkDqQGBNa0HWgG1TitKFxqltV0U0UfacK3FtqqKU/HFUtfViGkRWIUgofg2enTY5IF
+ IQQ10GY0u2NADUoBVv8Ab642xVn1mRVP+lPxNfT+Gn2TuTXxwpAU/wBKO4jYXICsQfs1+GvhT6Mja00+
+ pAKCZAStKBU+GvfbxwLSuupzBQN6SKpHIEDwqK9DXqcNrSFOpSSepWYx1QcDzqvSjEdSNxkkKJvfhArx
+ UqR9stVhvSniNsATSrb6nBIWSOTijFgaE8uRFevbCDbJcdVWrAzFyrExOq1HQHmu5BqRviim5tWYTmMs
+ HjoDsKHp1rXYYoAQ8msoeJLmQqpWoWp5Ht1oab9MWSm+uxKgkNC9SasGNDTan8cUUu/T1sJAwPVuEn2l
+ DbfFuOn0YopdceYJLdJXF23pqQIwhIJLfzePTFQEFf3mj+ZNNEes6Wt/bP8A3TMeEqt3KSLRgdq1GArT
+ yu9i1DyzOsmkX51vTz8S2EpC30Q78eizAeK/F7Y8lL0Tyr5x0/VhHF6oaQkAqNmB+ZoajuDkb2S9fhJ+
+ rJKjiSMV2LUXp9rlQ0qciVfPXm64+sfmlqSQk8dH8txKHBqytJMteQNQSOPyyQ71Y/qs7mWQR3QXkqsx
+ 3BNV6UpSuWBKSfWuSSRAueY/elt/sj5YEFQDKGQtIXSlK16cabDw64qC0gtwFd/Xcmp6bbGlO+KUDfQ2
+ xaRIo5UK0KswBNSBvuT1w2r33/nEqAP/AM5L/krEEasWvSSkN4JaTEGo8MrYS5P6BB0G9dsg1OxV2Kux
+ Vvt9OKv/1fsaeuKtYq7FXYq7FX53/nHME/5ym14lXaJPy2s1lK7cS16nHc9iR2xbI8g8p1N7dZZCPUAB
+ rEOQpuxFKFTXvQYtjA7pRSUwh1YGio6ow223oKjboBk0JTcpOhRvURlXoqgoKOKEDelSRv44q1dy1tXS
+ 4RWMEbqjVFNzsADX2xVh+oSwSxrbgGNvV3AZ0avDenE7dxkhbFg99aQ6l5X876XDJylvdGkureNtzz0i
+ dZ1NKVJZJHFfbBK9k0+ZLS5YxIaiMEDk79a4FVtL0y/8y6rHpdgjMS3GaZRUih33FRXFX2z5C/Kex8v6
+ dE9zEnqn43rUksR1JPUj5b5ND2GC3srGArBESVIB2IHhtT8cVREl8tKxoIudBR6kqSvSpPce2KqCTXDJ
+ IfUEC7j4Qo+49PuwFUumnuHZxHPO4kYACoPWgI7eGJKqr3C/V/imkdiPhCEUIam7UPXbpjaoaW4jScKZ
+ bginLhtyHEfETXoBiCqjPqUcb8isp5gbgfzbqSdxQ/PG1UF1OOIsZPVBIKhGYcCvcnlQAjvhVCya3EIL
+ znMiClUPNAONQPh8NsBVExa2hj4LclC6xqtGUkbk9RX5+GFVH9NSSRLKt1OyySOixcxxhCqB2FKsSTU/
+ RkGSjDqgWrM00qUKEVZiSaAfs+9clWy0hZ9Vdlkf0ZwA7BlAk5Ahvgp8AJr7dcKKQ36QmZWf6tO5+H/d
+ b1rT2Tpv0xWmnlvJ1dfq1yo+0qiN2Y7jb7BpWnbDaQira6mWNy6XkcnBjMVRiKlvtbipNB2GQKAq217c
+ vx+KdAUZirxsvxMDxp3/AAxiyQ76hOXiX0ruZgaMGjcU4rQnZd9zQZOlQct9Tm0lnNSqr8SykfCaggBf
+ hIAGQAKG01aZ51P1eVEJoH9Ny1IwKE/B0bw65Lklx1UPRhGqsrdDD8TA1pTko2qan3whWlvxLHyV4D6j
+ /wB4y8SOI3602GQOyEPcanbvSESQueK1KkkBlGwpU8RhvdLUeqQQrGpjDIG3Q7nald+oXvvhVdHqttJK
+ I/RBAb4XTepUVUEbEYbVEfpJQkIEigyU4Ko+JlK1ApWld+pwWFQ8mqBYpyz8WRTVgP2jsKUJ6E98KKXQ
+ agwaNFkoxOzmoY7VGx2NKY2l0esyAPE3xNJICQG3AWgBp2FevfAilZ9eEcjeosasqhWoCBUmhAYdBhpa
+ WTa6zALVAkgIrwqAqdPp6ZGmLTa1VVYzhGRKvEQdqDYCo2+nGlQMmtSkF43Uq1QZR1DMdlNDt8xhVDxa
+ /diRSXZl5tRGJ2Umg3qag0xTTeoaxKUbmJAY15OvIAkVPh4YrTxzzTfytp11KCeIJVh0K1/n9vfFky7/
+ AJxz0L0vNE17Kw5Q2j3lwabmWTjGtfYLkbQ+vNS1X0P3QqqkijNsK9a8epGC1pi0+sF3LRTKeEg5cmAB
+ PU18CPDFUquNXpMiPIpHphuVSeVen0bYoSubXQqqFmUci4FPiKVHWlN9wMUpHJrkixMpuIi6SATAglhX
+ cEtsBvhAtCDi1ueYycL9QxBL71dwD13rTbCChCrrCyM9br1OBKlT8Vdux8P44VUG1H9ygV5GDVogqCBX
+ oKH54LSGvrVwQWQT0Acd2FRQHbfp1p364LWkwSW6VV4pcBwCQ+5oNh8RJA396eOBLVL8xoEt5/U9cMlW
+ o3xDcksw2riqhMt0DM0xCKaBXaeFBvSoAL9a4qlj3UMHH1rmyhDHizPdxmrmnw1B28cVQJ1WyVog2paW
+ iIzAsbuKqmvwqKk12wyVL216zt4hz1nSFkLngTdoT4EbV2p+OJRa0a3pQRUXzDopXjIQ311FqGXcGory
+ BO3TI2lSOu6MrB28y6Ryl2BW8VjU9zRdgDXftjaqCeYLEVI80aUeALzUuaBVBpxHw9/brjarH816ZFDK
+ X816ZGHG8YnZiCTtQKm/yGFUJJ520Z+bHzPasNlVUExqace0ddutfwwAqsTzXogUf87NGCSvAFZhx4je
+ h9LxxtWl8yaKH5nzVZlyD1SVgCCSf91iny6YVV08y+Xm4F/NNgSTRmaOcfCRyPILH47fPpiqgfM2gECM
+ eZrZHV3rILa4oopVS3w9dqeGC1UT5w0ELGG1j12l+IQwWc5YMp4nqKGvXG1VZfNOl7yM2qSrOR6fo2Mg
+ ViCKAcqcq0OFUFJ5m05UaP6nr7q1WlZbWMcQWrsDUdPHFVsfmO0Zfg0TXZ4FbkHkEMdCwAAFd/ipWvfD
+ atf4oELFF8o6rWErIAZ4QoZ6gV/yW7++BXN5phErc/KWsQqwK+lFNbyAg9qeOEm0IW587ab8CTaN5iin
+ hJDQ+hE1QRtVgd+mINJtDSedfLqSSNL+noGkK7NZgsADv0GxwcS25vPXlEKRHqWtUTfg9iVO4oaGm5Ir
+ jxLbX/KwPKMaN6V/rFw7PzXlZj4ajceJNcHEi1s3nnyncJRjq37xlEqtZMFCnqdt616YLW1WDz15WsoS
+ 8VrrN6EIEZFmV9OngWFK5LjW0h1PzZJqsbldH1aaxnpwhkggIUbD7BA+/ElXnGq+bbDRJbRLOxutN1CR
+ jI97dzEySKu3pmIfDxHY/a9zir6z/K7zZbebNFt2gmY3MZEN3bMwQhh+0hOxr0wFLzFrhLzz9+Y+rpGZ
+ FinttPRyu44KzNWvhXrkoqpX0lo7gTKsYqhYqNuNDQUr7ZIckpM625kkpIqNIoPLkSd6bk02GKChf3TK
+ ro5CCtFII8B2HfFaWA0EgiJBDAR15jY1r45HiSg7yV+bBZNiACV5Aj7xtXGSvpX/AJwwh9b/AJyb/K4E
+ Aray6hch6/GeNlKAD7e2BjLkX72+A8Mg0uxV2KuxVvt9OKv/1vsWWFTiruQxV3IYq7kMVdyGKvzk/N12
+ k/5yq83q5Ppx/l5poRhUU/0tak08DhpsjyDzHWI6tzJKOHZ5qcSFHIbGpBFcDMMLu3Eb/u5EcyGRQnCj
+ df8AJPj3yapXfTzwpEQK+qFbmwYclLcT4iv68VQck8cgdGjEzgyCZidgtQa/EBUkHFWMXsEb8VjIqpYJ
+ HSgagFNwe1Nz09sVSbSo421TSormKkd1cmz1ArtSO/jNuwA6UHqD54d+iC+JvMM0+i2+owFOFxYSTQFD
+ tRomIH6t8CLD7w/JzTPIPljyD5Z81W/1iSbzLpcWrLPeWFxJcIkg4PHWFJIyBIrcSDuKEjFbDMbn80tC
+ huEgaS8R2o9P0RfhuDbLQFRXY5LiSQls/wCbWgAzh5NR3IPw6Re/D4A8h0qOowcS0oP+ZekMQv6P1x3I
+ rxTRZwaUp8PKlAa4krSGP5jWU0KxRaf5jkU8ixi0Ykkg1NPVk2LeOBLbeblYev8A4Z81TcVpEXtLSAMx
+ pQlmlrt22yRKFdvN+uyqjReRdRUMTw+uala26tRhuRGrkitN8iCqFl81+bJaCDy7odoJpBGjXN5PdPXk
+ Qx5IgBBJPT9WG1pSbV/Ozu6K3l2wiAULJFYzzMAP2T6jKCPcY2qhHqHmu5kMTeYLWIEgFk0mAfa3+Hm/
+ YDHkmlT0fME0ayTea7hRNyMhi0+zhqPYlSAOgriFXQw6sOUc/mPVpQWHwI8MRBYfZUJFt1+jEDdUU1ve
+ PIqyeZddYRoWb/TOIB7HaMClSaCmIFqh5IOYf1PMuvB1Wpf9ItxIBBNAF3PvgKQEvezB5sNc1txGqGL0
+ 9SuOMfIsaiijkxHj3yRKoabTkYPxvNbeSOQLA51G4YqlSrLJ0pt3wE2o3U1tHb0+Opay86yv6hXUpxT9
+ k7GhqAPoyIKEL+j7hiqpqGsRem0pDLf3HRCFHQ9q5KXNUTFpiuTwv9UeT6uWRm1OapkFa7k7AHELS2Gx
+ kdnd9T1XclOAv5R1IoVAau+SUlBXGm3IubjnrutwJ6xpINQkIAA2Bp1A6fPFKpBYiMs8XmbV0dCGaRdT
+ lPUdNxxJNTXFUULW9jILedNYV5HVUR7vlsAR/J8VB0xVVWDU29IDzffqgasLu0Uhp1bkrJStD92ROyGr
+ q31VY3W382yGFZZADLZ2rbKoapJjqxJNDvjwqhfS1+QlR5ishHM/wB9MhqpJ+zVWUdB098FlVGW48xRG
+ WT9M6e7kN6aDS09gR/eUHgcNpCi9z5qPI/pzSwiqGAOnKR2p+30HfIklPCqJfeb1kULruiygum8lkqqF
+ PVSA+/StMTJeFT/S3nSMyMmp6JIUkJcGyGw6KAFkpUA7ZIIMUJeap5whlVxeaPcIK/EbN9qivxBW2yQY
+ Je/mTzsx+sfVvL91IJQWkaGccj4clalKjwwFW/8AEfnBzEZPL+gyo45ALNcRUfdtq+Hem2DdIRR1/wAz
+ RQxFvJNhL6yB2NrqUiVAJAqGU0qd8O6FsPmTXKkf4Etg0rcyf0pvVSetBsPDCqmPNuoIY1fyNCOLFCBq
+ lCWpQH7I3G+RtkFOfzNe3CRi48qzW0TsR61vfpIdxQUUqPAVrjxKw2516wuXax1K21SGwlfjcILeOeQx
+ g7rEySAb0oC/zw2tvaPyR84eUL/ypq/mTQo7+01G+nNrrOlTLC01pNayv8ET+oOSSBgQSBvlfEFFlk+t
+ ebFdpY203VW5jhGZLi0TfxqCTXv+GIKsbn81XSLK0PlW6lZ0HprJqVvQKRsWCI1K9fbDapTL5m1xiJ18
+ swW9Ayxpc6oWoBQk0SPscKoSXWvMMtrFysNCt5UmURqzXdy4LVpuCoNDvTFUO+peZ43jZbnToy/JpBBp
+ ocEgVBb1Jd6HphtUA2p+aGKsuv8ApQqaGRdNtI68yBU9TUdiTgsqtn1PzYGPp+ar0lw5Dpa2kdaVXsne
+ nTCN1pRd/MPpxlPNmsVoK8GhjBNadAnWh6YEUhptN1uV09bzHrUkYoADfEUpsoJCj8MUqy6Gy+olzqV5
+ cUKiX17+cghRyUNRuxNBtiq06LpUoje5txLMQXAklmkA3ZR8Rc4qg/8ADehASSLpsE7KygR/EF3FKbsT
+ XFVKTR9HCojaPAeEjNUrvVWqahuoAxVGQ6bpsZVY9CsWb1GLM0CbntQnbpuMVWfVLRDKI9OtId/spbxc
+ yKipqwqtaYqhJobKJ/UCwqZGJdREh40beuwFQD26YCqtbC1QjkkDH1WBf0kJCnpvTr3ONKtMUc9w0hRS
+ wQKXMa0U1FaLx22rhVWZLT0ZiqkimzlVDbHbovcDriqDhnZ5IZkQ7H0+oorUoaUHcdDiqdJM/phWHqEV
+ K8nqaUPX4a9siVS/62jNahnELy86EuQQSK8m4jv4ZIKVN7mQKKTkIHYhVBP2QD1pv9OEhAWoyvKFW5kc
+ zK6yDiy83avEkbdcgWcVSN5Y5VZJJpAZCrSOCOBqAVoe1dsQiXNEiaRlZwppFUGRmIX4Sd6EbEkimSQh
+ XuZOZR19PdHk+IAsSOQoQtBU+OKoRrmZYDSTpG0jCn2Sp2PuR0xVS+uOhMgkTmkZ9RiCPhB25b5IBCJj
+ vy8sHFiArckTc0VgT1640hDzXiPxYsyMoQkKlatQbbDfrXEhVGR0lcNJIImDgyJwI6mleVKDrtkSEhBO
+ 1qWYc2pwPJUUgdarzHUfRkGSjELcFmKu/EMhINQo5VqQRiqbSXNrIvqh5KunAEU5MadSOnbFQLSa6voe
+ DxkPLy6+HL5VoffFSKYpd3zK/KrAICaD4VAI75IlD5d84ajPcearpTIzCFY4o1/lFK0A7dci1Hm+3/8A
+ nHhfS8rX17NLxBkMkkZFSFiUnmBTtkubMclTyR9YuNG1bWBNG7a9q97dorxkOVRvST4+m/E4WS+/uZ+V
+ DHbncemy/B8JO1R2oRkxySkRZy7SJDxVVVqCpqQd9q+OKrIZp04qsTKQ3UDbfqN/lgKqP1iQK8Z5lAeY
+ 5E79+v05EGkIKeVnKVSnKMkDlWgB3AwnfdX1j/zg1ELr/nJnyc4UkWmkavOSd91tXWvtuciWMuT91uQy
+ LU7kMVdyGKu5DFW+Qp9OKv8A/9f7EnrirWKuxV2KuxV+cX5x+nF/zlN5rV3dGm/L+wMbCm9LpOXXw/Xj
+ bd0DzHWYhEZCkjyCqcPV51PJq1oSR2wgpYRdhElDtYL8QduQb94VatWJIFTXoOuSVLH7tHM6RcWX0+ZA
+ otG/arQ13xVCvPMWCykv60ZMaHgpAZa7lhWgp0rXFUkvmb03pC1IVJjZBxJIAAJ4moArTate+KsLup3t
+ I55xE8c1iyyoQeXE29JagU6ArjVq+YPz0sPqfnLzlaxilvNeG8iRaUCXiiddx12fbI8+TGT65/5xi8w3
+ etfkj5Rg+uSh/LRvtGhgDfAslvcNIagkDeKdTv2GCRoLDuey3KenOtxO0kzyBW5qGNeu25pt1rXpthBt
+ mRTHZrwFt4GdQCQnp1JUfDWrVBG/TJEIQd1dGWYrHBLEp+FKjY0NSKihNKb5EtgFIKSaRfq8TRmIkEFZ
+ AE+EnYV7k12xHNEh1RDRysWlaKNEVJFAUk7qo23B7ePXJdWCBd5PTt+BI4qfi6EqxXpyFaADfFUtZU9W
+ 2UyFJYXjqxrxoSXOw6eNRkiUqikyzXaTvzEhjPIM9foOwAPcZFC9fqwjg9XisgkDAMHINKj7NQdl79uu
+ KtvcQc2EsrExyNEJKGlAooOprkgEqCXVuHX94zNNxeXgzFVYqf2TWg2wRQtS6iM0nCYrOgj+yGJIooJd
+ iN6DfDW6V7yqfSVrqYfCW5ekTtI3wDcV9wcieaEJPeKsTGK7nqXjSghYcTyIUcTt37dMkEqMVytxPM3r
+ TFpZAQQpPQnceIFKZGQTDmteeP02HMq0JZpHp8RPLYmuxBB6ZELJbFeSRnaSMNIZY4WCsSWFKCuxBp3y
+ R5JApGwXyy8wXjDxQhIlWEluAqW5Dua7VxYkqMdzFxdybZBLMPScRSIu4Gyiu3gKZIckFq6urUIFdYOR
+ 5sY1Br8Lbb7VFe2FFIZpRHRvSj4yAGrMwIU7H5mtOuSZLZrm25Qo4ERMoIAZ9mb4Qa9a9sBVpLmOOSOp
+ lXkvIh2BILNQEjl1rkJJCs9yskacW/dzNIrM0YoV5AbH+IwMTsoQ/G0I4hHAL+idieVeJoCRUe+5wFMR
+ aI9PjEqH1A4jLM/DcdRueW9cizUlvJBR2gYOyLEwoQCgqduJNOuKpPLch3cOJhIJfigJ4kcj+yaDqBhC
+ SiIpGktrhpLhz6RqitQABRUgcQtB413yTUh3uJX4cHVeKu3w0H2twabbE/dk1pYvNolhVI/3KsJCKcqt
+ StT36/ax2SpRzrHAkcZ5RxEoeY2BPY06UrSpxYlFTzFbe2iCpEVjPxFmKqpahoNtyO1cLGktilMplk5A
+ 8Szjif2evfoBQVxSkl5IXdZI2Rzw580FQGHXqN8gQkISIyyWbRsWZI1V+XI/FyrSp7V9sCXlmtfuEmL3
+ EgcQyMxWpWoBoOvbxwFCn/ziddiZfNdnIEkdT6qxuQC9WNTU+ByK4y+tLmJuEb8mRyVUKeQar1Ap22wg
+ JSC7JhmjBZ2jWiqBy+Ikfa361p06ZJVB5DEksnpp6KSOmwoUpQkVO9TiqAN5NRVMnPk9BwrUJudwvf5Y
+ qghdSlDHNT4CzKHJ4k8fxGKoee5aKNphwJZifgWq9fuPgMNKpy3cwVn2jHphkUAkgk/F9GDorRupppKB
+ 3kXck1+H4QTtt7jFVFrotRg6yJEVRY961ILVFD44qqx3QYK8cfFmYI3JS4ox+1uRWuKplBqMkiRqyiru
+ nCNUWhIBBFD1A7Yq1c3DcnqCgpTmXRh0qxNd6YRaqbpKGkCTEc6K6GRSGB2C960BB64FQL+oSryMhkhb
+ iKktyNBUUB6eOKodogvpOJYTKYxyk4kEkt3NRXFV7wVkkRbji0Zk48m4lQV6mlRucVQ878fVId3RqFAT
+ Q7gbU/jircZSItxRyxZqMWPQGo3G3tiqo0/rCdynxOoHEMSOQoRRSa0piqjBcyHkwhVXQpyBK9ASNhQ+
+ OKq5ll24ukaNvI0bJybwoadidsiVQbzSRvEI+XJagyBlADEfZHw9ffJjmq5XMgDkmNWdi5L0FSNzQL1q
+ NslSA5JYVMXK4+KMbQtKSaHehFOtRlZCVZ5bR6G5jcPDsxcsSBXkd9tqYhV7XNsVi+FwrF4x+8oApFdi
+ dtxhVTkawZVEkSB2EfI13CpvUb9TiqX+qjRuihVHAbLQ0G55AVqTTrTFVJFkWVWaQj10VvTCUqCftbKa
+ V8TiCqLEsiSRq1wVkifipdW+yNx0G1MlSVBnJ5A3SRsWVwKdfGop498KCtKMjSFL1FY7qKUJoe5+npkT
+ zUIKaaQF63Kt8X2aUqopUsQajK0qJkLNKvqRUYvx+Gu/UdTucVX+vWNK0kUn4gAOu4rt8+2Kg0k91NEE
+ Q82BCbECprTc18d64qUkvHUoH2fgpFQncio3PgBhpD5Kv5RfeZ9Sl+0r3b8T4hTxH6sDX1ffvkiT/DX5
+ Q317KfRlh02aS3mUgMRIpGx67nY4b2ZDkivLdnPpfkzy/aiYxldPjklKqSUll/eNv2oWywBne1JRNcXQ
+ IAuCVZgXqDXrtSo3398KChxPdSF1d2oCeZ4dQCTSuKApCSV0PxO1WZlJWm+3jTxyJpKHkUsXPpuSSGDV
+ A61BoMCpVKJGYMN1Csq8jtQ+OHoi32Z/zgFGsv8AzkjpslARB5V1tw3Xf0QP44ES5P3AyDU7FXYq7FW+
+ 304q/wD/0PsSeuKtYq7FXYq7FX5zfnbHHH/zlZePJEJ1m/LyHmhUMaC5j3oT4+GLaDsHmmtvA1xxkilt
+ 6KGkKOxFF2JAatSR1GEBkwee4cc5YrkI2xVpFJXjUhB1NDtv3ySTsl3qXHoGMst0VWUxkkclJFdyaV77
+ fjihLWmUNGXUL6gUPwYvxoCN9jiqUySJIkwhGygbsF+FQDVhSnXwGKsC1WAsz1AEd1GqsfTPQ1rSm/Q/
+ rwxS8O/PGFr7U/LuuEEnX/LNk868QoE1mGtXHT/iquDhpiyb/nDHzA1tqHnLyhLJSO21K01m0g5ADhfI
+ +nXLUPWjGHb6cgURNF9wa4Il9WMyTRGRuErEoaCn7JHSg2PbEbM+e7ya+uLWG5mkNyrRhQ0iNuRU7qtC
+ AKihFMmhdBe20y0LB6GhkdHBFByJrWu34nIlsWXDelIisQGVPhP2uQ5VH7R+7riGMlcTxSQDhcAOeRk4
+ Ia0JFKUPbJDmxQMsLNJC8cbLWNmYncOvqUHxEjc074q64tpRLOouiyiXmWeZaCo8RuPYDFUPRB6koKOW
+ darHIz9hy40U0PjXATYSoXYs2MkJlE/AAB5eq71YU7ZK1CmJAgRlXgC3FC9KBGPwkD8MIKq4uomkJebi
+ qj0zHyBeojYhSAo36eIxHNUMrhCGad3aaChVa1AUgUAO1a/TgJtQulnqIXl2JRaTM3Wh2qCd+lMgWykF
+ JcrEtOEoDz8xyfcfCV2PsKHc/jkw1K0FwvqRskKqjlXXkyggv9rqepAp1xklTOoTS8eB3M5j9PiKGrUF
+ OXf3OBmhHvwFdfUuADOolIWNm3qFof5TTfIlQbRaTmeT4ZmoAyiN1UjvTvtsPo75JiSO5YrPIqypKDHG
+ 6vJ03p9mm/Wo2yfJiVG7YNGn+lwO7IZAzMw5EndS1e3hioWSTSs7eg0bcSnGNm3qyHcNXffJJQS3N3IY
+ VeBAEkV/rEjAFiD9qleoP35FUZNNcO2o8FVXUxiMUJLEtWlQf15AqCjpZ5XtI/UEsUjkhlUAkGtGFKb7
+ eGKnml6OQBA9u9eBaMlKH4R1AABqBgKg0jpry3RYi6upjSP1IegI68tz8NR2yFNyCGpwwCRhWSsdErGK
+ BWaisPGlKnCwSx5k5iWM0RpDRqE7MAFGx233phCy5K3qo0dzbh2VWI+AKxqtRXehrSmTi1qnpQPEWkFx
+ DIiUJblyHXYVFCCdsJKXQQWxaNjcN8VOa1oWJoBQgAH33+WQu1IpSuFhHqFC/wC9kJaUAMxFQCaGlf8A
+ VOTBQUJI0SS2/GXlGyFyhFRSm4PzwsUJJNCVLIKqynnWpUDiKIKDwxVi93cRiQRrujEnieW37NK+G+LI
+ IL1PSWeJXbjEikjgSCoJAHX78jSsA1tjJb3gUKf3D9FIqCtQBviUJH/ziS0v+JfMqI8iH6vQLGAW3bfY
+ 5WxgX29cyXjpxjnupfSoj7gUBryoteg8euSDNhVzcSuVDRNNKtA5aStQBTky706dB9OFUHcP6ZmVleJS
+ GkBolWP7VDuN8VWNdzwz83mcLErFy8gQk0BBIUHbbbFUrF1LK8jzD1OBLRkMzDk1a1Ow+jpiqlLKjSvG
+ qUR+LSMm4r/kgn78VW3EgLr9oHi6CNjTbsDQGlcVQaTsiRSKqcmTgaN15DkWApTamKrlnZ2+Mq8MigKE
+ IJAA2Ap1A61xVVEqvGOU6hAnJVVjyBVuQqvifDFVGOdHRpS5ZBx40PEhuXU++KETczxLLGwkDO61KrKB
+ sBQ0BFDv9+KqFvdmNVMRqAQyHn8NaUJBaoqdwTilR+tM8XFQscVHYqXFQV+KoJO5HYYqgZrt2NufhMjM
+ yuzPyChqHl7bnFFqwkuDRgVAL1q24qUodqd8VU55biMVjkWOiALJUAVp0PLoO2KVkckrW/N5IwsbfvGZ
+ q8eIFaeNK9MVTCiKHWZoZ+SKUPar0JJ4j6fliqHSWKKlWSRuO9FIIGx51G/TtirYkhZREI0AY/ACx6hh
+ 261wEKo3ErsS/pJRJQGZSwUE1oaHoffJBVO1maLlE0KsW4lHo24oQQdz17eGEoDUrljHII1jIbl6lKnf
+ o1K75FKIW4LGZfUQRMxcVB4nw2rUYqvLK8gX4Oak05fZBC1+XfbxxVCSv6XpStKrqqMSajr4HatTXpiq
+ otJCB6YCqQQQWqBQ06Dt+OKoP1FKwvRiECAtVt1FdiNqbjFW5Ht2DO1UDGqguOvQ1Hc74bVaVEokKuhJ
+ jKy0dQTU7AHqOgxBVEIFb1f3iM1NwHTapAr1xKoTm8byiJWZ3QjmChA2NBXtTemRIVYs8rOnJeUYBCiQ
+ L7UNBgpUBzKn+8WknAsVYDYt06HtklQkyj1PSErL14Cuxoa02BpirHNXultbO6mSUsIY3MxIotUUkUNM
+ UHZ8seWrdr/VoSQC9xMCamgPNq5BrD7483xpp35cw6Jbq0UuszWVg8fIcQZnH2a1qKZKm3kyPWGjtIvR
+ SZ+FuixKG3R+CUGykgUpQVyceSWHyXEZWNm58lFdm2Ffor36YUFDFwCpQTlSzKq+pUAddgaV264sUK4J
+ Vj8R5k1BcVA2qfauRkyU2j4tcF0HEMeLVX8KVrgVLzFH6h/e1crWi9N9wDih9u/8+9oQP+chnbdvT8na
+ uXYilOXpgfrxRLk/bHINTsVdirsVb7fTir//0fsSeuKtYq7FXYq7FX56fnpxi/5ylsnBKtP+XzK/+UEu
+ I6DoRQVrhHK2yPIPJtbdzccHUMdiwApSlK1GwNeuMiG2LAL302jnZnZpCRxPAkOR9oN/DJhilCC1hklj
+ jkU81qyPIygAq2wqCDufHBuqGkNurBUnVRG6cAvH4qgDao6b7eOKoGeNuEnORZeYKKQlAx5moDA9abnf
+ FWF65AyCAxxiRVj5Ahigoo60qaCmGJS8d/NGCK98keT9Ujos+m6rqulXAKk8Y5il1AC56ijmm2EhiXgX
+ 5UeZ28lfnB5dvfUEFrrLto183EsQt2QIW69VnWNhlR5sORfrT5gmtZ4orgSvGJqTLH0AJHMjdd+NSDju
+ C2vFNaWSQylVgljUFlhTapduS/Fw2NO1d+2TQgNOMsbOjFYpCgKSEk70qQPh22/28jTLiRl6HilSVjsC
+ 3qVLcqCgNKDbCGK8ySB5OTPIGRn9FWYLvQ9QQe/TCqlyDz1HFTNCFDmjgAmlDUsO3TFWpDaR288QQtxk
+ /vFpuRuSQAdwfoxVQhu50ZxFbKEj4kL6jVr4swArXwyPkm97WNdXjtMrekilmkkDHkSK1G1e3hhC80OL
+ 5jberzh9ZJS8bDdQxBqDWu29aZM81Xx3rNCU5uTGxUoUUAEoSSAAfo9sQd1bSa59VOSuzSxfaPEDZq7m
+ vftkVBQ11O6Mg5qZAFcmUqR6Y/ZoBvUHfBTZaAaWX4axIsSKQeIU05bgbg7A4WpGidIvQDI7JMkMTxB1
+ Aqaneqb77+2LLanXVyiAKBGzJIsfNpVOxLUBYLStBijiUDeLFCiKQQ7KS0T1Wi7D7QBpvufHARumJoIm
+ 2vYklkZJOISNiIyFbeh8e34jCxKxZoWQBb16StWMxqCC/j92SPNKDcxtFIfrAEUQ4qpFeXIg7V6eOPEq
+ CJRi0IeEsyr6sgHGvFOQ3Ar06eODiQ5ZpSLeVZY+XJVjVlD7HYEUHb9eJNqmcszwpeKIUq0qI4oFLGvK
+ rbDf3yNKsF+0jyCOOVf3jFQpHHiFB+EGu4wqhxd3JjV5PVYisckLgEKpG+4G2/SmKoS/uikqoYBJ63EI
+ hPIgqoFSf1eGKTIlQtmNGX0PTlYfuwDuaEk7k++2JCFW7S6RJSVC1ZuSRFaigAVqHoKYqg7JtRT6yWjZ
+ QV5MGMdOPOg6GvagocQaVHzXkzx3nqRtzpEFlCgigPI8Sp/XiqrYSMVRJlCsg5LHwp0Faqa179MFKpy3
+ CPCEZo1j4oW4q4aorQr4VpuThVKZ7mDjF6N4iukKleRavMeIp4HfJWxUDLCohWO8+zyIX9lqitQCB198
+ KpHXmWaMqvCTkFkUVZiQNzy7U+7ASzSi5mdjdOUjkEi/C1QWqN69djv92RQwa89JoLtuAZjHQE7GvH57
+ 1wlDDv8AnF65lh876vFGiStJA37pqHcMRUVpkAxg+5r+6eLkeLqOYWvHkFqaMaV3p44bZsMv7x1lkQGS
+ NFcEJRVAIYjqanfwwqgZp5lnY+oo5lSsdN6sK7kdqHfFUvnu5ZJZ1A7hg6UA40pxqa+PTFUM0chHCOMt
+ IOS8gWqaU7DavemKqkMrrKOJZGRQoNOIpSh3PY0xVQ9RnbkOEjc1AcblidyNuh2xVRZJUWKkbAhi3E0A
+ YMDTpiqiheIxq3QKakMaAVPFdhvT9eKqKSSu7enEZGQs/Hidx3PbY0xVGxM0kcwKmRXqZBUUPEih8QK7
+ YqrpIo9MG35qpIQGQFR1JABqTXFCGW8PCSNXjYF1FK0NPanh74pUbuZmBEsyBEclQKmjdzXscVQfqhxC
+ RI54H4wiEGg8D3xQiJHKs0iRsVRgxBZVJ33p709sUqdyeQlcxR8jQIwoWHIEHx38MVQwmt1jCn4VIr8N
+ CCoIr1Hj1riqMaaJlZ/WkqzAsQwBrUgkAfgMVaeSN4gGn2ZADQ1NW6b1qDiq1Lm2iVD6ksnMnkaDlsNg
+ KV8OpxVA3N6k6OrK6lvtFiN6eI8MUWrQ3Sll9X024rQS1o+24pTxGK25p2lYgxRhlFQzdQCdiaeHtilE
+ JKrpUcC0NRUgb1IPfwxW1j3RdlYECdFpUGnyoKU6D54ota11IwkMZ5chxLbgEGh8KfTiluK4keMtK8wV
+ iRyJ413HSnfFUlN2ileblOH7uSNpBud6ED264oXJfxKBzuoWViORLITsKDfvTFUWmr2voNK19bBljBRO
+ aEj4qEHbrilal9alARLb7Bhu6HcrUM3y7YqtLq1HDoeVeRBr0UkHYnFXG8ReEkhqCh7ewJO3jihR9WLn
+ GFCkclY8diBWpqTscUoiZm4OfTLVo3w/5Q37V3GC1eTfmNqX1Ly9qYcmCWeAW8ad2eZt/wAMFsZcnl/5
+ XaSb/XdNjK1VpV5V2oFwgIi+zPOTiXzB+XWjlXKR3jahKtKrwtoyE6eDZKLNHanJG5k5AF3q5bjwIY7g
+ 7/ZFckBSWMPESJ4yY2LKvGkg6DdqnxrigqZWWnMFSoaoHIEEgAGlOm2LFClJauxAVwwC+FCabkZGTNdI
+ Kua8CQwo1D1G3zwIS+5jb1hVigZqV4E0PY9cVfcn/PvODh+f2pPueHk7VPUb5yRAfTixlyftPkGp2Kux
+ V2Kt9vpxV//S+xJ64q1irsVdirqV2xV+ev59Irf85U+XucnAr+XdyyeBPrxD4tulPfD0bI8g8e8xcoZT
+ PFIJAasEB5IWPxUbqO2JDbFhtxcqluJ2i4rUBmjLBQ27U2I3G+2SYJRNd25L8/hRSojBrzJ2HI1HUZPo
+ yQdw9sXVC1VWRVaOgZKGhrSlevga5BCCkgRYFj9AKwWRgquN1rTkqsNlam1cAVj+qwW8g5BFaP0yrJ8L
+ V5ElduQphV5h5ptYr38tPONqo/faLqOnat9kUCjlaNw+hlrhKLfDnniCSGeO5tmMU8XGWGZDQq6EMpBH
+ ShGVHmxIt+svkPzba+d/y98v+Z7a9guo5tOjiuPhPqpc8f3vNWI/b5AGnauG2Y5MP1ie3BkqY1VuIWIO
+ oJA6DYitCd/45NWPaeYDIHkeOJOIK8nX9o0X9quwG1MVTq5ezWKJW1K25u5LepOp+IsBTly327da4pAt
+ TF9ppmblqUCs0Y4Qsyn4hUcdjQEdziilJtW031OMOsWq7MaIlejfEwCgkEnt4+2KtPqSzRyRrftNJCXc
+ +jazM/QHj8Mex7nFUBM0sk4SG1v7qAsr+stlOo5AftAqPDbDSqE8N4/qudI1Ji1AC0JRWoaBGLuOI3/r
+ jwq5ob4FYhpjAuxcmeaGJqkfFyJmoaU22pgVW9eVGjb6vZRqp9R4pL22UstBQseZ8DXFUNPdyrI7cbEK
+ IxGCdStQvEbnj9rfFUse+kCy+tFYBkhRWI1KEqx5kdlPUdadMVQ0t5BExSS902KRwvBxesV2+Ir8MJqC
+ PxxVv9I2rssx1jR140qgluGoFG/2IepO/tirpNdszGkTahpfJeIUGW4P2SQCR6I6g4aVfba7b8156lpA
+ VyolQtNsiDj1EXTv7Y0rU2t2TSS01LTGWRaKweYVIJNa+l3rsMG6tQ6vaKrldT08KEDQr6roAT1CkxHf
+ HmpXT6xbvF6BubCtRyd76lQx2rWGp2GKLaj1OwWV3F3YoGjKMsupgspoBQfuq+PXFKvFeWDG3lW50dRt
+ xD33xEpvUBY+h6CuJCqc2qxTpWK80ZmSUMsRvGqFFVB3jA/oMapFrEvpkFAdMcl+SlNQShY7VPJOwHfF
+ KnDfXsUW8MRkqzSelf27Ludq1I8cVVLm7u5PRjNlcNMgHKYS2j/BtQ1WTqQaYqhyLhwhGlX8nFN0R4GC
+ sp34t6v44oWX314CQfonUzM5kKnhGQef2QT6p+nFKWhNVEDiLRNWZXVftKnxAMedf3m1MVRQg1tEaBfL
+ 2qAuykyfVTsvifixVVR7yH1C+h6l6fAmq28pIPSpoa7jw6Yqlk99e85PS0/VQyoVSJrSckDetDx3pXfF
+ CAM1zPNQaHq0qpCI0b6lJ8R2WoDAdMVVFe6lIj/w3rHLiyxhLV2+0KE79gRt4nATS2h5ppIo5ZJdF1SC
+ GBF5f6Iw3YUIqFNN++FLGJ9QhaWVIy0MgXh6cytEamnXmo7YotiOtX6WdjeTyCFBFG5bhJzf4QaAKtSa
+ 9tsJVhf/ADjGJn/MO6YVUm0lMyUBI5V7HwPXIBjEPtzXbmaKFvVuJA7cQW9OnFRvvTahptjTNhFxMplB
+ b1ZF5N6ivRT0qNyemSVJ7jVrBZwxljMbUU8mTl08BWuKqEmtwRvcSc52fhT91C7LuKMPgU+G1MVQUV/e
+ tIfT0rUrkSbMUtJSPChqoxW0ygbWFlgkbQtWjSJiFke34DipoOrCgr2PfFUPw8xyOoOh38CI6spZoY6m
+ tBuZB3xRbRTWWofqtvCHkqVmvrdCD1AYcjxriridYZHZ2sBUgUOpQBlIO5IAIIFKfLFKgp1FWLSXOnRc
+ djz1GpAB2NEQ16YqprFdmL1DrWio/IijTSlgG9vTG4xQ03rRPET5j0ZHiIPpr9ZalaqSSF6mmC0ocFlZ
+ i3mXS2alFX6tcuK0oCdt6YbtChLJGoUSa9C4ZvjSKzmYsDsTUuO46YqsW6tI4+H6ZvOCAbR2CbkdP7yT
+ FXLd6WCxbVNSZi4YOsFvHxINdq8j44qslv8ASGkkY3Otyc5RULPCgAp1qE/DFUMt3pYjdFt9VZBsQb1e
+ natEHSmKqrXekS1pZ6i1NwrXxAU9T0UdcVUPrelcgz6ZcyBRTg1/Iu5XZsVbaXTVKxjTioIBq17NvWta
+ 798VUVnsN66XFKo39M3VxUH2PLcYq0bzSSOI0G25I27+tPU1Nafb6YqpLfaaoNNCslahCtzn2B6Gvqdf
+ niq8ahpqAAaJatyrVTLNvXufjxVf+kNPFCuhWi8SaL6024IoeQ5mtB0xVr69p78g2iWg5KA/72cjpsaF
+ 8VWC708gctHsHIYHgWmYUU+BbfFWzdWhVETR9OjAPx8oObbnsSe2KrTqcgLcLDTkUgfAtrEd12ruD1rv
+ iqJF/ciND6VkgpuBZwUHH5jvilRfVJgTzhsJAQQQbKCvE9QNu/jihTbVI6Kf0bptCOLD6oq8vnxYdsVQ
+ Z1iNWJbTNPmSgoDBRqAU68u+KtprlkV4nSrOMUJAEZU9OmzdMVSrWPNehaZAZtTW3tKbRxpy9RhQ7Kga
+ pwFTIB4h5q86ad5ogh0610iWBYJxJb380xLEftVj3FT232yNsDK3tH5F6XbHW3e5jDJFA0lTUUPTYjoc
+ Ns4h7dOh1L8ztQuUlVIPLOnpax+r8S85dzWlN6DfCClWvmZi/wC8t5DxJQLyBIoRQH+GTtKQtUxqUc0X
+ 7SL1AVgRUkHb2wcSFGkipKQwYnrVdi1etfnhtKxgyhnbipUKApG30V+eRQuowqC0YJZiTx2O3Y98VS74
+ FkDGRVCmgUL0FTvQ9a4q+9f+fd0Sn87PM8wFSPKNyA1KU5zQncYsJ8n7J5BrdirsVdirfb6cVf/T+xJ6
+ 4q1irsVdirY64q/Pb8/f/Wo/Lw5hCPy7uCTSv/HxGN6HJBsjyDxPXPT5XIdCDGKpxYbMKio2FR7Ylsia
+ LCbh/V4/vOADKRVa1aoo1KkEYUJdOYYZ5Zmn3EuzMoYlQKbAHqffphHNUE3pOyy0MjLJQLQBmqu9aE19
+ q4gdUqAEAdwJSGQqAVVg6nc1YgUNelMCAkGpFPS5wtHIyuSvxbtTr1HTbtirC4ohcapdaC5AtvNVhe6Y
+ ByBjWW6TlbsSvUrMi09zhPJBfCvnGApbzi5YxS2pMUsbmhEifCwI61qMrIQWMeU/zc/MjyPaLp3lnzbe
+ 2GkJIZP0I5WeyYsasDbyq6UbvQYtd09o03/nJ/UJY1TW/LunxXXELJeWllA6tx6Eqy8l+QOStlxp3H/z
+ kRaSAAXUFulKel9TiSm22wjw2EiQKJX897SXg36Ui5oOI/cwAqCP+MeKeIKg/PGFuXp660Z2PJWRKe9Q
+ o64rxLf+V2gVQeZJ0jHRRNQfLbACE2pP+dSSc1fzJdy8/wBs3MlenclsbCLCAm/NnTWLc9WklJG7PO7V
+ r4gtkuMLaXf8rQ0VTUXh3FD8ZI38d98AkFtSb8zdBoqm4UhK8SGrRT2p4V3xBC22PzO8tlSGZG33BYUw
+ Era7/laXlZFKhYhXqAwP3GmFNqbfmn5bAUI6UUHiOW2+C0cSHf8AM7QSFpKtFHwqW6Y8YC2t/wCVn6GP
+ szqrU6gnHxAthT/5WdpZXj68YpTke5x8RFhofmhpIp+/iPuRvj4gTbTfmdpTdLlKA9cfEBTasv5maQeT
+ Ndxmv7J2/Vg4kcSMj/MvSGbl9bQU6gtv+OPiLYVP+VkaODxFzDxPiQa/PJCQW1jfmNojV5SQb/tct/14
+ mQTYbT8wdBb/AI+YuvxfEAemCU0cSJj8+6Bx4i5g4ezL92DxFsKn+O/LxICzwBf9cfDXCJDvTasvnXRC
+ F43MJG1fjHQeHzw2Atqi+cdIOy3UPFd1+L8Bvh4kKR846YrGl1GQdv7ytO/c48SbVV84acB/vUPiNTSb
+ b9eAyC2iB52sUFRqDg8RxJuG+77WHiW2/wDHNmxB/SroT/eD1iAa9ejZGwtotfP0HHj+m5RXqRcMK169
+ D3xBCGm892zRsg1ic1I+1O1aA9jX8MlaUO3niGjg65IIz0X6wwof+CyPEEIab8wbKJWLeYCKj4maetfb
+ c74bC2kV/wDnLp1olBqcupyKvwIgMhqO1TQDHiQZAPJPMX5pa3rXqxafDHottKvB3iobhl71koONfYfT
+ kSWJla78qvzG/wCVZ+YJtc/RJ1Y3EX1eQC5eAqjsC5JUMX6VA8cQUAvrA/m/5S8wwm4js57pbj7Vq+pS
+ 8BXc8owFP0Y38G20BN540hzI1v5b0pOdCZJfVnaq9CfUcgntklWN57uUB+qjT7DkvGltaRIaU2HTBSUM
+ 3nrWy7S/py4EyklGBCip2qB8sKCl8vm2/mBaXWbli5+MGcjl9xxVDf4lkkLCXUJJVYUYPKxBA37nFbQr
+ 6/bn4Wkqvu56ff0w2qn+nbEFAvphVA3rX7q9sCLDn1yxoQfRWm4JoPoGAlKDPmGxHImSI86Hrg4kWuk8
+ y6cTX10rxp2G3gceJKH/AMT6cB9tdu1enzwiSLXJ5qsQK+sg7dcK2Gv8U2IAb6yqsAfhXpTtgtbQ0nmq
+ zoCtyGoRQ1pTxwpQj+arP4qzovIg1qK4kgItDnzdZD/j5jG25rtTDa2Gv8XWADVuI25bdenhTIcZVZ/j
+ WyXYSxEk7sSK48SVjed7QcgLlBU9NqD78eJFqR892dSfrVD0pUdh3x4ltSPnyxrX6yoHzx4wvEEO3njT
+ akmccidxXHiWwoN5800H+96+Bx4ltb/j3Tv9+cvGp648SOIK3+PtNFT6tCeprU/qxteIKZ8+6cpqJwPk
+ ceJJLTef7En/AHpGPEtrP8f2HU3FaCg2OS4lBWv+Ytlx2kZ69QFwcaCVA/mTa9P3pAqKcdvlg4l4lFvz
+ Jtq/3UrU9vx3xteJCv8AmWFUCOzlahNCaD+OPEV4kouPzF1OQEQWqRe7En8ABhtHEkdx5t8xXIIbUWhU
+ /wC+VCH7+uRY8RY68ryuZJpXmlb7UsjFmPzJxQ3FIIpUeuyEE/LFX3p+SOlyW1hLqkgVLe6txxL7KVoG
+ rU07YQG8Mp8swRywarq1w5WfX76S8KcV5ejyKwqCTX7K8j88kqvdtCWADlnZxxUKBRepp4fxw0qSUj+J
+ uLijgMisd1qOooMChxJozJIw5NsCSQKneh9qdsVUDvuXqCKUFa1OAK2waP4ZSePxCooADsPDp0wqgpou
+ O7sd+9QDSvhSuKvvr/n3cOX5zedG5AmPyixIG/2riEfhixlyfsTkGp2KuxV2Kt9vpxV//9T7EnrirWKu
+ xV2KuxV+fP8AzkAwT/nKDy2xoSfy4ugoqVp/pURZqivbJBsjyDw7WJB686IQTQ8Uc0D/ABEKEFR0B3GN
+ M2FJC0SxkRyiGvKUrU1KE02qdtu2HmqWXRZSQzniFBYSR0JrvU1AIHbDFKW/AEDEQSGQsvJJOLqw7FgS
+ CMJVuUsvAxWqwq42aM8h1oa9N9sihLrqJZl9NkBAkkYIxClfhNCADviryzVrL6zILdpHiJ/eQ3yOQ8Lg
+ 8kkTb7SlQwqO2Hoh8/fmR5B1bz/OvmDStPFxr1xzl1/Q7YEM1wpIkuLdf245DV+I3WvQDIndBFsF8vf8
+ 46+dNeEbfo26tkkFRLNGYkAHcl6be+RRwBni/wDOK1xava2+sasLK9vVL29qXVWZFPEtRiNq+OK8ARM3
+ /OKE8bxg6oIllqqGWWMHkvUEcqDDS8CEf/nFsxqTJq0LsCAEFxEp37mr/hgpPCpP/wA4uyqodNRjapoF
+ E0TbnsfixrzXhUIv+cXryVh/pqFSCW/fRilOvVh0xql4UaP+cXW5MpvAyoVDSJPGVHL3rvjwo4Vx/wCc
+ YI0LBrnkFH2vWT8RXDTLgREX/OMELlFMpLPuvCQPUVI2od+mNI4Qj4f+cYbGoDq8jEfDGrVNSaCtDsKn
+ CQvCEUn/ADjBaBhW0YpX4uboKEdRu22Cl4QrSf8AONmhJ8FvALi4ShljDp0PUgcvHGl4QhP+hbdNKq31
+ PgHYcRzWvEmnQt1wELwhYf8AnGrT3/u7cnieOx6n7+ox4V4QhZv+cZI0ootZAzcjxYkMKCoqCdqjFeFL
+ m/5xpl9V4hZShhugrtSlak1wUjhXf9C0oG4FxyGxAcbGu4Jr1x4V4UQn/ONdmTRhPx3HqAbbHxrjS8Kp
+ P/zjfpKAAPIrALUlXO7HpQV3xpnwClKb/nGi2jBYw3DhACyhXB3Py264eFjwhAw/844JNz52tzFwahLA
+ geO9cFLwhRk/5xuZN47eeYA0IQE1r0w0kY7bi/5xzBI9S2mQlqcWqaADfp4Yp8JEv/zjnbIaei1B1foK
+ DqcaY8IS+5/5x6Eah0tZWU/DQA1rjwo4VOL/AJx6D1VoZUINHjNaitaeHWnfDSeFCt+QCNIkaxzKTXk/
+ F+K8dzjS8KEm/IGRD8IuGqQFojmtdvDGl4UHP+RFzbhaR3bk/s8WqPDp440V4V8X5FXTLV4rhDXjxZXr
+ v02xrzXhW/8AKjbjcKk7FQCQA9aH6O+Dw14Qpv8AkddxiItFPzmdkjj4yciUpXoNhQ7V648KOFBTfknq
+ KKKQXIYsVCkP2xMSnhXxfkdqDqXf11VTQkhvDpjS8Lv+VIzMSU9ViOg4tv8Ahg3XhQrfknqhp6MU7rXj
+ sjdfDpg3XhCsn5GatT42YHai0J65KijgCa235AX0y/vJHh47sXUjbrjwleENSfkRJAPUTUm9Q/Z9FjU/
+ 5+GHhPevCF0n5I65Go+rarehjXjHUnYb/TgITwpdL+UnnNGRYdWuJg32QN6YKWiuP5R+dQKSaxMr1Ox8
+ B1OClorz+UHmtQjPrcoD/ZAIqaCuNErRWn8o/M/EsusXL0rQDetOvQZKk01b/k95kuQWk1W6jiqByNQD
+ XwJGPCtIhfyQ1l6sdauuC133Hzpt+GGkcKlN+SusD7GtXT06E1I26/djS8KB/wCVLa+zUfU5kTlTm4Ip
+ UbdcCOBMF/IjUCnOTXZRtuKCpPgKnFeBZL+Rt1ENtdkYU3pxb9Rx4V4FH/lRupheZ1mTjQkbdQPpxXgV
+ YfyK1CYiusShW2VgOp8NzikQc35EXX2U1mVyKhwQNiPDfDS8KCf8jtQVgq6mWJJCkjrTr37Y8KOBy/kX
+ qbSMhviKCpPHx+nGk8KKj/IW8Z0U6i1WNKBenj1xpeFr/lRrcgh1GVpD9hOI3xpHAFZPyKLFlGpOSv2q
+ gbV/XgIXgCuPyGjKhv0yemwKgVrg4SnhChJ+RqRmg1RnoASQlaVxEV4W7f8AIwTFa3spJ6UAAP0npkiF
+ 4UcfyGtkLJJfyJIoaoLoB8J3ofbGkcKjL+RdrGTTUnf+VVZSTtXoN9xjS8Cmn5I2btxW7mYn6NsCeFED
+ 8jLQBq3cgKmg3H3Hww0vCpj8kbMH4rmRl8eVPkPbBS8KufyU0lGVTcSEGm/MdTvivCpT/k1p0JIVpCVN
+ HHLcV9sNLwq0f5O6cFDOtehLM9B+vHhXhVZPyl0gKKW45NQBuRO5+nGl4Utl/KO2Ut+6cb7MtSPuxpeF
+ VT8m7d+aMJIpYxWUGoIqK9PljRXhSi4/J2Ucnt5XZEP2TtUUr8PjtgMSvCGv+VRFrcTLLIGbZAakcv5T
+ tjwleEI+D8qtLeOKO9SSFnoskgqChO1fljwo4Xu3kDSvMflvy3qnlbVJ2vIdSul07ybMwAc2jpyuZNvi
+ 4woCOXY5IBkA9HdYLZPR4x2kEISKMnkRwQUjXdOoA64UsVu5LctI78ASz1ooYUHyAphB2SlzG3LpEDQh
+ l+yeIIU7dx0GRKEMisGleNXKKCfUDAjiWKgdaUyLIDZpRs4pQADkSQRv9PcZIMVXixHJgKkuaAggGtCf
+ fCqXzqGkFXDAU+IV3Ir9JxV+gP8Az7m5S/mx+Y0oNUi8qxLQihHK6iAr92LGZ2fsHkGp2KuxV2Kt9vpx
+ V//V+xJ64q1irsVdirsVfnx+fYNx/wA5P6UgXe1/La4NKDcPcx9K9emEFsjyDw/XCDLIpRaLGSzM3dqH
+ r+uhxtmwq5g4ukvpB1GyorAqoqCtR1HjXrklQF00fqTxyW9JGKqCzEcjvUKSdqHx8ckAlIJUX4B6Tonw
+ niu44lviqKk7Y2q6WFCqxxOGKt6fECleJqq1B298HEhDzhjMShJIYj0179qbDArzTXY/QczKshcEoVZF
+ bdSOW4psMN7Khfy8i0bV/Omi6RrtgNVsZVvJ1s/VkiWSeK3dozI0bodmFaKwrQVqNsTyRT3TU9J0LT7p
+ 4LPR7cQXiGi3DGWgC1Kjm5A6d8jSQxp7CzkmF5LY2LypUPK0McrvUgcfUkDN28abbYVTCS3012AbTbRo
+ o1kk9VrZQG3A3PHY4Cq4z6SsUnp2tom6uK26AcV2CkcSKcu+RSuMelTBZH0+1m4gU5W8RIAqWBHCmwHb
+ tisdkTdJpS+lGmnWsayBF2t4FdlG9BVd6VyIbUM9rp620jrpNrGOYpIIISSxOxIAp2oPxw3uxS+O1s5I
+ iTpluFLEzKYIhyLdSajtXJBEuTc1vYR/DFo8EskICMohiVgzE1JoKGvXJ01q8gQWaxDTLZI3bmqLAgA4
+ 0B7UO1NxklCCS30+X1fU0mzZmLEN6UbMDw3O/XamAskJbWGh27cZdIto43Ueo5t4j2FeWxNenT6chyQt
+ urLy/M9sZ9ItT6AX04UiRUqwbwI3FenjkeieqMttP8tiMMNGtIWkn58uBrVe5YHYGlPfvkxzQpx6Xof1
+ x5DoVkPrUjmX4iCzUqQQW6gHthKGriysBcLIuhRzIoasZVWWlaA05V/swJbFvo6QRyP5dtGk4+m4aBSy
+ kCm1PbfFVgt9E4mNdAtojDIwVFipQuBxqK0JGKtMmm2xgSLQ4S8y85eIJ6kmoq3sPowAKl13FYTsvKxi
+ dJA3NPjNagkkkPuckAgqNy1pexQRXdrC/wBTZY7YuXASIDYChFfs9TU4CKTTYtdMVZC+lwTKTurFtytK
+ VHLbrUdsgyAtGtZaM0cn+4S2ZpuQVgXUjptyVgBuOuTYoF9D0KMyPJpVoxlUsC0kjfZFTUMxIG/U9TgJ
+ TWynBZeXmjjM2m2IbZXWr/ZA+dcQUIE2GiGXmbG0eqA0CzNX4jvu9KjbfCpNqN1p+nyJFFb6ZDEwU0WP
+ 1QWHIk713O+SASiRaWbxQKNKiChCzEGZSQooG+0TviQqiNK0wLJL+iYSJY+dWZ6oSvWhbrvg4UFBvYaa
+ BKH06FjEv2w8h4tTcAhxuMPClDwafpUk/wANmiUDBCGc7diSHPTIoV/qOmsEQWoUrKpLrNKPioanZ99t
+ 8VQZ0bTkjW4WwLKj/FykkJC1I+L4zWtNycVRUWm6bHKHNkQwiCx/vZalyprsHp0OAqprpmlN6gm095FW
+ hWQSy1AHQAepsT4YKVcNM0VKRx6UQj0enqyU5NtyBD9xthpXJYaYsoc2PoxSEqkYklYsqmlD8WFUU9np
+ jFHNvMAkq+kwuJlFKHaofxphAtWk07T+LhnuRI8NR6dzIKSE8jty64CoUUtLJjJNLPqIkokdFunCpRfg
+ ACmm3cU9zXIMgLWfoyzR0V7m+EakR8jdS8ipO3Q9a+OC08KGubLRliW3KagVto2VAby48Sxr8VSa98K8
+ K/8AROki0iR7SeSbhEByvJgCHBJrWT23xTwuW30+1ilhSHgnps293MxFSKBTz6+3bJWx4dlW4stMVZRD
+ bAslFdTd3D9aVNOQp41wsUsS1sPWkZ4pHCuFSNLmfiD0A3bFVS5t7eG4ZIIpYxwYgCaY8adQTzNa4KVF
+ pb29uhRIpH9Uges88rcQGDfASxAr+rEBVgg5LcMY5TG7iEEyt8PM1HFfAdsKqS6VapcvIXlVQaS8Jpfh
+ B3496dK4qun0qyhYKbqYiSTlKqTvxoRUKvQ79/DIlVi2tmqzI80iCFvjInl+zyqrVBP2q0wJUZ7WzKmO
+ 3MqP+2WkkIHf4T4nscmxK2GKiwERXHJWJE3rNQnj0Pv9G+Krkdm4CZrvkUFW9RwQX6cRypsB1w0toeWK
+ OEyqYpfVeisrSScVJoQU/ebN7+5xpUXcQ2xiWaG2nXgehnkbcn4wPiNT74aQgmmA9ROE4Uxb0kcUIOzd
+ e/TIptVuGtwoJScKVqirM3FWFNqf5VThpUFyiaK4jVLoo7gpIZ3qxGx+KtaU69hjS2qpEkEkZkNyVRyk
+ ircOd6dTvtTsKZElKMS3Lqhke6Dy8w4M+232acgT93frgJVLo4UEjMZ75VIBD+uocAjxCjv+GEKiHtbQ
+ 8Cb3UuZ+It9ZPEVPQgiu3YDCimpbWx4qhvtS5VUlvrPzAr8NfbFKAe0gEirHd3ZD0Rma5dqV60oABTFU
+ RBaQcJWWS5kIYj95Kx+EgBSB2oe+R6qpLYpyjBlu+RNGHqA70PcjxySr5tPT03jje7MQ4/Esw5HmtR1H
+ XxxVL5LGAR1BuhJHWhadqtvQkGtNuuKoiO2sRbq7xzSSR1Lu0kjdO1OdKfRgtUFNYwLMCEuShjC8VnkH
+ xUoDUtXChv6nZzQxlVnb0+RFZX5VU1b9qorTFUxdIEjMa+tDFMxI9Ocir9A1ak9DTFKFgkZY3iZWLqT6
+ fqEsaHY03piqceTQV8w6xJe3M2q3jacklrd3TFzbwNIUa3iAoFUsoJNKnv0xUJvqbFlL/VgkbHYDnSle
+ hUg0P44qWHXEkK+rAQCY6L6gXkOpJJp37Yqgnb94fgARNjVNjy2rWv4YCqgGLFlJj/dqUHwAV22Fdsil
+ RVGdWAKKGNDRaVr0PXpkggqhgotXIq3wKuyAUbfoe2FUvuCxlJEnQbKdgNj098UF+iP/AD7cUHz9+alx
+ 9pV8t2UaMO1byM7/AHYsZ8n68jfINbsVdirsVb7fTir/AP/W+xJ64q1irsVdirsVfnj+dcpk/wCcpr/i
+ zA6b+XNqoK9jNdLX3FQMW6I9IeN6oqzXcrKY35FqiIgVotalG4mtcISwm5a4aYFkICThyBSgoBX9k09x
+ klS+9ut5FIkBdiEoa1HLuD27YQaVJpbiOoaWKvqAIjFFIKmqkGm9cbVfKsMKzNX042IMTAcSKfETQkgE
+ 9/uwKkN0syAzJKCJACpooJ5CgIoetT3xVget/XUojQBgrjjIoIoy+4J237YqxX8v7gp+ZnloBRC00t0j
+ cqkU+ryg/CR1wlD6q1OGITyyB1VkBchFWoqKHr+AwJDGJltzLHDR5EjpVnoV4klqA7jf78G6VCSZKVWM
+ xJIgAYsCRzP2SOlRTEi0IT6wGPo+kPSflzYojCgOwO3jkwEoj6xCxRUWEj1GV+qVKg170Fa9KZEhCoZo
+ 2BJMDiOjAt2C7fa59u22QZgoea8s+McZEDqdgxDAUArsvLv7/RkaZoP60gkSOFU4QglpakCg6btX+OSF
+ sJFBtLbMsgPqL6rpXgmwr/Ke/wDTLmBVTNACEHryD0zxJUfsNuAPCoxQFslxAsjSLaOPULKWNKgVpXZt
+ uuxwS5Ml8t/ces6lEjbgGZhuAwoAN8ihY1607bzemxAYn0t+4CE02rTrkaVat24ScAoyoNlUdyPu2ywB
+ QuEwCmoKFKs5deZp4AU3wEKh5Z5DRDByJVeNUYUDVJ41oSKDpgVe13waT9ysaxbr1AUkb/EDU7DpiqwT
+ xK0Y9R/30hP2j047E7HoT0xVCxtAeTCVgFQcCfiICg16j7qYRzVSk9KQxD6wvxFQ8tWoeO9KAb1yS0h5
+ lDv6sUqJFGfj3JI5Ag7AGtfbAaSrtGh9cO6zox5EMSfshRx7fdkK3W6c7QgJIsScD8Uta0Ck0PLffY42
+ hCxTwBmZYuMSco+bMOgIBHcjIsx3F15NZxSODzRgB+9qtSpAIoKePbJsEvlv4BDxEkkbRx8WWtCTyLHk
+ tNga/RhComPUUkgiZ7qWOR4j8SknkOW4H0dsklUWaERpItzL6gepLuKfu6FQAT298UbrT6SQwkyCRzyK
+ FXqStftVPY1pXFKBdKs8TVQqhblWpNOlP7cWCHbisj1R1SAMY3RiClD06da+O2RPNkmXFGh+GBx8YjMf
+ QnlyJIJFQDtlbIBScUiVCKIyGkhq5+18RNF3G3fvh6oMaXSFlDLUMPgUgVYkqtVA7giuIQt9Rj8SLUK4
+ ZuSkqSQK14nxrklUGklZ4hxfiKFWKANQFgNz74AqmlzMZizRcZBIeCgDdf2SAfYb74QLVZJe1jjLw8eT
+ oYiCVK7spXp1ocmi1iTRsQFtyzx/aHIkECu52r27ZWUhSW6COwZJCQaqAAtDuQQDkCyiOq43QXgfSCvI
+ 1GUAEbb9BWvzwBsU11OodTCBXkoZADtUEBvlkmKu03qKoCqEVFYPRQQY9uw6b4ptDyXQUu5+Iux9VHUA
+ mp60FKdOuEMCVSe4DuWkjeVTUKpKgkim5Fa07YSxtQeXgJS1uXXmNuSrw47Go6jcj5YVRE88gVnND6iB
+ FPJARUD4jTruOnfAVUfrZZJY2agK8VCrtsBsD2qe+FVsgkVZq8uJlV5HAJUFTvt7eGKqbSOomeJ5JZg5
+ lhJiI+EDc1r0NcVQ5la4dFWapQh0FArV4/ENz9GRKqT8nE8Su3CSsjcQvM0NTQVwgKVCNnbkvD1EZedK
+ sF7Ba+FaZMBirQLdAr6tVFQEUv3A2O5oOtMKqnqXSraKk61RiAeQoQd6A1pSuKoRri7YP+8CfvCaswIB
+ 40rtvtiqvHe3iIQ0gKsSY9q1r1K7Gn8cVc13LIpaS5hDOu7dDy33CkV7dMFKr+ojlOdwjs25AI/lANKA
+ UocKoZRIiSICZFCMoUbMWIqBQkbeOAqvKh1QtCwfcq1ADWooSa5AsgsWNlEDrHykMz8lLivSpYCv4ZFn
+ sUMxFEosVfUU8qkbcjvvttWu+LFQjYq6s0iGOp9NuVeLFuvsNsNoauGmLycTyUiTYUJrUEU3oO+/bJKq
+ xzTCEOrhFQcVJO4B2J7nvkSqn9ZnEkYWWNRwAZahQV7EMDtvgSva5vFWJmnjLoarKG7A1oKdRirb3MzJ
+ OrOr8kjIVGY0avQADwxVSYy1oZQVZalQTuGAodxTY4q0rNG4UykBQdhWp22HT3yXNCnOQPTkdi5AqQCF
+ HSop3p4YVaRKSKJGKhmDHlQfAQeRO2/tXFUO5AjCkhniUANVSK9QKHcdOmC1S2W6ZZEAUBkY8TuKL1I2
+ rhQn3lO4eTXdRUTRRsNIHp8mK1P1g/CBTfY1xVkd/JI8btzVi7A1L1q3fkNj7YpY8JjVkIBUU5NuaV6D
+ fpTwriqEeQB6yn4as1TWhp709xiqz4DzBeKMFQyABq8QP1g5Bsit9KJiK3SqeC1ahPTpXx+WKCLWSQRk
+ CRpuQRgGUEkbnY7jJWwQLiEyShuNYzsoDNyJFAB9/XCr9I/+fb1uB5h/N+4Khgul6VEslKdbhmI/DFhP
+ k/WAdMg1t4q7FXYq32+nFX//1/sSeuKtYq7FXYq7FX5qfm3cFv8AnJz80rn1NtN8naRbLESKEtNy4kde
+ 2Dq3x+kPJtQnTmF9WNJZXB5OxDE8eW5IIGw6ZIKkdy0skDMixTRvHy5qF2anelN9tq9ckrH7z1uYl4hF
+ 4Vgk4FR8RJJBDGo8MVQEpLLz5rxDECimQitDsRtuMNKpTyO1rMKwAo25AZSBtuRUHltvgVJ72d35kIsi
+ curJ1YilNxvWm/fwOKsM1qOEPLsOMdSQBQAkKNiKbeG2KsY8hwxD80/JlAZF+uuroxYcl+rykrvyoT0r
+ 9OMuS0+r9Yjtg1w7BoTGrqiK1WVW6KxX7RA2rkY8lYlcCBXSSGKNzKQrBixPMmtRuNj0ySpYOSIaLAiI
+ 9Yo/THLdj8Va1ND9+KpX6prAzXaJJycBTCONSag1HSuIKlYzzSCizIzyMavxBYb1ZgDT5H8Mndpc9eLP
+ zUgFgsRQ8ZR3J69KdshVIUZpYTHGyzgOSx4emKoUooBr0qBtTbFkJKccsUjKOSSBlcleNBzG+zAkrTuc
+ IQTaHmllZHAurZSyKWQBqNxH2ag7GnbbJK0l1VJB8LKsJBorcQSeI4itfoySqsykJ6aojtKCFPEgEoAe
+ Q3pkCVUXS4Uu0kaKppQuPGpO5bp7ZFAWzTEBySjGUKOQI4ioNK7k98iElDkxAIKLTjT0yAVqTvxpv8qZ
+ YFRfGFGljSJ5ZJV4EhCDUU4nevhkSbQ28klLcqJTKCFZVTYqCe1aDbFUuku3LvIVkDfHR1UgISB4/PFV
+ 8U83GkzRIQwYlhXiRSlT1qR2xVYsqkAhF2JBALAAVNWqN6EHpipWtBDI4JVeQBZIw8grxH2h0oAMlxJU
+ o3ieG4oiSuwDFY+ShVJrsD06b5FICyWSkbA26yFUEoV3AWhAAAJFe3XFIjS5GU1YIw5qOUfNNjUDY9jT
+ bIIkieLBVpYyMrxsTKrKFBqBWgrWvSnbrkqYpdcyDkeVtIFaQEM01QONOP6sKpbdTfvHT0krXdy9diw2
+ G3gPliDSq0BmKpKk4pG9IUq3JaGhIX2rh4kqvKkUnK54srSbFa/D8Neu9fbHiVbdTCvF76vCpBFfg47V
+ I9uwwgqhSY1/4/HaZ0LSS7morXpv8jhVCzNasFlV5XdqLJVuJUHcg9iBkCbQiZLqKvJA8nJQI2LsOUgF
+ StCNq9BkaZcStKizxqkiMrIx5uXetC3WlOnLD1Qoyw+mzBoj8NVkZSzGoHj0IONIWmSaJq+oUVvhmahr
+ 8RIA2pQkDocKrfVuD6ai6f042Kk06CvQA9BviqrJcypFCJXcGR3CBitAN6EEgH4tjhCoRpSWC/vDwFFk
+ ZlGymhA6b1OG0U2SzS1qARHxJLcQpTvtv365ApDo1dY4ubK4oD64Y71JpsD45FKjI/prxFuRzBbd6gEG
+ lSK4s+JYJIRPbhICY+TBpRJWhO9fiFKClN8WF7KiXIMfq0jVAsarRSzdzsN9tt8NIU3lldkVXbk54txR
+ UBBao+0Nj4YQFXenJIJlBbkpSvLhQ9O+woAO2FUOWRGLAMxm+yXYUqo36dNsVdK8VI2CxhZIuAX1N12B
+ BpvuffFWpJSygF1iC7gI5DCpUHiP9XFVrB39NRcDgZW4iSVqtQbV6bbnt0xVTUKY+PI3ANOXF/hFCaUH
+ WhxVocXbonFDyQb126U+/AQqnIUShaDk3WgAArUVB36e+FXRAh5E4lVZCSadeHQfa/VhCEKHQCNCzBqi
+ gLEtuP2TU+PvjaqnrLwhb1ByWjFipFDuO3tja0oCZ15RO8aorAEk1ZeWwO/QY2q+EsHCF0So9PkGYEAb
+ V2HtjaqwZ/SQtX1FPpg0rRenwkitd++NqoJcsPtqxiRjUCqjau5qO+BWpJY2kPphqKo50JemxAHxAVxS
+ qem03JIw4Uyiuw+0VB3A8e9MVXceTcERnPL9sCmwI7n2yJCoVyknCoFDSgoG3A8SR4dcCVN2RTzMKh1q
+ ZTQEmg6Ur92GkK8zxeoV+07KBw49ARsAanb6cIVTDQKjRuxrHKQeCggNT9k16Y0qkUt2JIcr6f8Ausih
+ 38APnjStu1tUxxsCAQQKD4abdvHBSrkeD4h644zKol4qw+yw7/RhpVCVxsFaU8ZAFJJpUbntjSrvXPGI
+ Rs7CSoJBJJB6D5VwotAmQMqM6eoHVQW3qO21DWgptiqqlwzTUZAqtRep2I27/hioU5dgX9Kjn7S0BrSu
+ /wBHfIFkgpVDFBSgP8yUDHp+zTahw2hNfK/G08y3ocGZZtOiHFAQR++YgGoPzySszvXUwuZNgGUkBR1G
+ 4bcDFUhcRVBJYlmAdqA7V5CtD7YqljxAeqyyqeamp3BBrTocVakjlNJKtxCmNmqaV969RkSUhpzLzCiZ
+ qqBx4dK+PTwwJMrQxaQiRqSn1DWjH7VOte3bpihBSCQuOTfaer0YV3HXb8cmh+pP/Pt6ydbL83dTK0R7
+ 7TLJX8SqzSUB8KDpi1zfqEDtXwyDB1RhpXVGBXVofEYQFXV+Gvvklf/Q+xRBqcVaocVdQ4q6hxV1Dir8
+ 4f8AnIfRrzQ/zu826gYgIfPflKwuNGkKms02n3HC5jjYUNUVqtTtudsj1bo8g+crm9AlE4ndAJUDhyTR
+ xsTuKb++WAJSae5DvJINoTAUotSahtyeIp8Ve3TCqVySMnogU4uo4sGJ3HQ9vuxVLXupOUicnPpq/Jlo
+ RyoDxAA6d8Vck1Vf44yrALwcK1O55ElSd98VS6+4N+5L/F8DCROS/CwodjXuBiqRXUMk9SuySx7uGotC
+ ACdx4jDFUl8k6VcwfmX5TnmjdbW3lup5phQ8QltNQmnSm3XGSX0HrOpCSMGJarIGWQgdFUdKipJNPvwI
+ YRcTTzKga19TnVQSxG9elDQDfFUBcJIEYtDEqs5qBISooTUqCx6dMVSWXjHJFyjj9HkTy+yAp+GlOXTt
+ irllfgoMYIE3FQQQvToKEkHFUzdpYpP3QYcAQ4X4QarU7Me2KpZ9cuTc8mZ41dhwAKg8gKVpviqOjKxo
+ 9SvJnKyStRTUnY0WleuKoV4qijzj1QTULTiV4kcaHxPhh4lS539KY1d0MvIKPU2XYkbkU+XtgVMC6ETF
+ SzCJX4qGBqHQU3offFXO1yF2UfEgVwzKakVI4j6RvTFUC0s3qKCq8woAg+EioJpQkipamKqkIUzxqxkj
+ kZD6bIgpSvKo+Lf54qmUkcrrIwcKxhLSJRkBUup+Egnc1/XiqBD0MXJWLgsIyeagnmaU3r9k4qhLiaRH
+ NBVAwb4ZGTjtxU1YUxVZFPcFmCrJIqVo3wkkDry8RTbfFXSTOClIjGY5VblxHHiO1R8+uKr2vJj6PwAp
+ +05Usx6jqG+gYqgPrBcRxNGkKUo7iu1GPX4j9IGAsuJU+sSvaz/GJeRIBKk1BHUA9/HIqTbluJOCVmVw
+ CWVKdDxAINK77fLCLQTa6a6KIqxAkSRMJGJcj2Hxdh45JCXXN1AOcnomiqgO7/aHuPlXFUN66Osx9Nmo
+ Kq55DevanU4qjbaSsDEssXAKSQDSvUGm9a969MBSBatcO3CRQVK8mKyMDUHiu/XY74UJdJLO7xIQXcgk
+ yinfxJ7+2KqDtI0arIFoitRB8PXf3/DFULcvOJKFSqMqgMoFD8I+I998VRsUjyQxqHlBZwooq0CmnWg7
+ eAxVXaa4We5QiVqFmD9OlRUkDwOKqMsslGLfDSNQOXKoCimy7VPzxVAGSRpZC6RgMwBRmPelCAT2rWuK
+ hVivLiFmCLGKIyeoUDfCaigrUd6VxVXlubiT6sgCGlCWdVPTr1BxVZLP8JmchqDYUGxqelVrviqDS5fk
+ 6hkJoAHD8ACRsNvxxVWjuXeGPijCOGpLF67E1ocFKh5pZFM4aIqu3IB/Ekk06ivgMaVDPdEmD0/URFcE
+ N9okLUE7U3r0wq6KQz0UqaGlCeQPXoKEYqiPVZJZiVruQjMnLZTUEVbbFVr3ERHqRqGHLhUomwJ3O9e9
+ cVWVq3LcRByqiqKvSoBCiu+Kr1SqwhV5NxNF5UoePwmntiqlHA5rLMWoyjmOVGXxPIdKn2piquIj6rFl
+ BYMx5A7fZG437+OKqRFqh5jZywKEqD077E098VUYkiYSN6XNjQmsdCK19yN8VauUjb05GjEZYbLxVaFT
+ SlO1PbFUN6RLFSSQrHgAoHE0/ViqqUuQ6svJhxX7B4nagA3+WKr6z8SZObniOT89gpPSlegxVSSoMjMG
+ IHxFwa138Se2KocySRykeoy1ashrUn269sUNO6LI59eUEn4R2BrU+++KqrBaNzlmYOa8lHXxHtimmrgl
+ U+CVl5AbhWAI5d9++Kr45bjZ1uN6qT6ikbUoTXsdsVU1JqnpoqUqxNakCp6716nFUOxkr8TAtsKha0r1
+ 2O2+KqoRucbcY/jYF0WP9ojoaHFVWUsZAlKDgq7psBT2/riqHUpHzEkRMQdWEajrQda9cVVGgiZ5PgYg
+ 8iQTSo6ildwfliqwQWjBpCjKxHXnSlO3scVUGMSlFAflWtQwI67ntQ+GKqU3ESyNzkoH+AEjY0qQNzti
+ hVItibV3eVVAq4CgMVqaAb0GKqY9IhFLtsBQca0oN6EeNcVVEiKutCpJKceS1JINSKn3xVbJE5+xEvJK
+ lqKCSxBB/X9GApQDx8VakakIAVBXiRU/51wUqa+WJCmt6jNvWGyjVHDABgzuaDl12whWQ3eohlk/euhi
+ ZSEPetQRWu9MKpG0nqK7CZXJb4DxA36VB7UxVYWZ1pyIDHgoHE79SD1yNqhwHLEV2G4FaCuBKnI/FpmZ
+ +INEAHGniR89sVWyAIONAoVF25AfCeu4GEBCjHD8ZkLVUsRyZuW/cCgySv2U/wCff3lyXS/yXvvMM8Xp
+ P508w3Fzb1FKwWCC2VvcM/Oh9sWqXN94CtDtkGLqHww2rqHwxtWsd1X/ALH047q//9H7GnrirWKuxV2K
+ uxV57+Z35b6L+aXld/L2rSGwu7edLzQfMMCj63p11H/u23k6rzX4HA6jFlGVF8EXn/OIPnC7nkktvzSj
+ s/VdjIs7Xrjr1Coijrucr8Ytzk/5w080yLxuvznCkmnK2sbhvg7r+9mFfnkfFK0G1/5wpuk4F/zk1RnE
+ heSSLT0QheqhAZj36k9sfFKpgv8AzhfF9YFy35xeY4229RYrW14mnXZicPilFIh/+cMNLRD9X/N3zZ6m
+ 9BJBZGPrXdQlT9+DxpJACj5d/wCcMYtd1nWdO1v82NZt/wBEwW8sMthY21ZIrkkKGaatGHE+I8MtjMlh
+ I8LI9b/5wT8laXo+pan/AMrX87XctnDzjgYWMcZJYdeEYPftjKdC0RlZp5npP/OKGix6zZQ6X+Y2v2l5
+ ecrMXlzHFOirOKOTFWjVp3yqGokTTZIAB6of+cGb6rxP+dM31dmPqqmiQh232NTKRUZdZa/EHcqQ/wDO
+ A/l5VAuPzm82SkkljFZ2MY37Ab0pivieSN/6EL8lGH02/NrznI5+07JZ0IIp0CjG0cSyP/n3/wDlqRyu
+ /wAxPN91PyqshMCqAPsjiDTbFfELov8AnAX8vLdJ4oPPvmDjcp6c7yQwu5StaBi/wknqVocbXiW/9CB/
+ l+Sef5geYiP2QI028dzKSa42viFBt/z768gGUOv5j+YwgG9YYyxbsa+qAPoGNrxLm/5wD8lhQifmLrq7
+ klzAtSKU/wB/42njU/8AoQDyUAn/ACE3zICpJFII+ta7VmxRxoO5/wCff/lDiDB+aPmHl3E9vGyGnTZZ
+ hhBXjQP/AEIRoSq1PzN1Dk+zE2sm49/9J/VgteJcn/OA/lr0wlz+YuptwPJHhtWBB+b3JxXjUv8AoQTy
+ wzus35kavLbsQdrX94DTxa5K/hivGiR/zgP5GWBFHn7XhOq8fWFvHSlakA+tyoe++K8aBX/nArQjOGl/
+ MO+MC/ZMdrIJaDp1uuGKfERv/QhflAqVX8yPMSljVv3MZG/WlZtq4o42z/zgZ5VYEN+ZWv7hRT6tERRf
+ +e2KfEQ8f/OA/k+KV5V/MbzD6klecnoRgk+P99TFeNdL/wA4EeUnUsv5l+ZRLT4WaCEAeGwkxRxqf/Qi
+ WnqqrD+bWtqOjh7SMqVO5pSXrjaeNL5f+cCYWb93+buqcQP3YaxXlXxPGSmNrxhsf84GgKo/5W3qBAqa
+ fUiKn3pJivGFEf8AOBkwlLn827gKD+7QWT/CN67epQ9e+Cyk5A6T/nAuSifV/wA3blfTUBfW04sB40pJ
+ v7Vw2jjCGH/OAjhCr/m5O7M3Kg048Numxftja8YUR/zgHdmqN+bjmOtVpYzKRTpsJAMbXjCIH/OASxo6
+ w/m3el5BSZpLNwD8gJD3xXjDh/zgGXL+v+bt2FkNWENm3gATVn6nFeMLD/z7/iZqD83L4JtQtZEsBShp
+ SQAeONrxhd/0T60yhb/lber+qTWhshw3FNv3tdsbXjCVzf8APvmZiVT825WU04+paThhtTbjJtja8YRC
+ f8++Yx/5V695cuVRaSnoKbVmG+Nrxhtv+ffTgMU/OC6ZzXjG9i5Tc77+qTvivGEsm/59/eYizfV/zatO
+ JoB6llcE071674QV4wjIf+ffV2VpdfnC/LqBb6a1Afbk42xu1413/RPWQSM4/OO6UNsw/RxO1amn7wYg
+ 0vGvb/n3zOY+C/nPdjr9rTajf5SVpja8YQc//PvrVWb4PznV46bmbTJC3Lt0cjBa8YUB/wA+9NYLmR/z
+ mhUsBXhpUlNvm47YaK8YVv8AonrqatVPzoqtKFDpjgfg5w0vG3/0TzvJJOdx+cezGjiLSmBIPhWTbBRX
+ jCqP+fd6qgX/AJXDdk15Fjpp+0OnSTAvGFyf8+67dSJG/N699bqaWDceVa1A9XYe2GivGFY/8+9WcfF+
+ cV0CeoXTdia1rvLgXjCh/wBE8CDx/wCVx3Jj7odL69+vqYaK8YQt1/z7tueEktl+cDC4dhxW501xHx/a
+ r6bk18NskvGFw/596amRxf8AOSLgOnHSH5A08TLvijjUm/594aj0j/OagpuraZIKH2pIaj54rxrv+ieu
+ sABR+c0VN/h/RcnfrvzrivGh2/5946yCjL+c1uGXox0yb6Ng/TFeMNL/AM+79XEblvzmiWZ67rpkrKBv
+ 4uDv3wFeNCSf8+8NeYD/AJDBZtwqBXTJyaN16t7VwWnjCAl/594+ax/cfnHp70HwmbTbkb/7GuO68YUm
+ /wCfffn0UP8Ayt7RW4iin9HXNSOtCeGIKeJcP+ffHntufL82tF+I1qdOuKgE70+Hww2jjCJX/n3r5yFR
+ /wArh0llI+JG0u4I/UOmFHGuX/n3l5vYAz/nBoob9oppFxsO1K0+nFeNUf8A593+ZAP3f5w6bIe4fSrh
+ B96scV4whx/z758+xk+n+b2jMm/EPZXf3/YP04CnjQkn/Pvb8wZuKyfm7ocSA15LYXbb/IoMaXjCvH/z
+ 7u85IOI/OXSq1BodNuSD8602phXjDm/593ecgQ0f5xaK3HoG0q5XcnfcVyNFeMKa/wDPurzmwJk/OjSF
+ Ykniml3JHtuaYaXjDX/RO3zsSgH5xaMoQUBOm3NT/wALgorxhe3/AD7w89cHWP8AOXQ25UoJNJuTSnh4
+ Y0V4whv+ieX5hOW9T83fLyg0oV0y62p3+yMkvGEQf+fevn2gI/N7QHdf220m6B3+RwEI41Nf+feXn9lI
+ f83/AC9VgOmk3e33nCvGsX/n3b58UGn5w+XVr2GkXVP44p4w1/0Tw/MKrAfnD5dXkauf0TdN922KONU/
+ 6J6fmLxKf8ri8vbCgb9FXXT3FMU8YUP+ien5lRGkP5t+W5Fpvz0+8Xf/AIE4o40PN/z7x/NWnqW/5peV
+ J5l+JLd7O8RGP8pYxmg98U8YSaX/AJwF/wCcgIWb6rq3kfUVO6s+ozwbD2aDIlImEPH/AM+/f+cj7hiD
+ e+QYg7fu1OqzEpy69If1YFMg8oP/ADjL+Ytpq+sWV/500TT7rSrqXTL8Wdu88TSW7blHZK8Ry2OVT1MY
+ mqZiJIepz/8AOBX5hHyGvn2P84NClt7m2S5j0VtPuUmYPJ6YjM3Exgk96UGWjIDG6YcjTAo/+cOfzbaH
+ 4/NOhROxqYBdclB/1hbU2GVHOGzhQ5/5w6/OVCSmv6C5YceS36IKHqSrWuDx4rSyT/nDj86iP3evaIzb
+ UT9JQitOm5tR1x8eK8BSK5/5xG/5yASRk9HTp1J3kh1/Tl5e5DRA4+PHzXgKHm/5xW/P2FI0GkwTotC4
+ j13Sn2A6gFVNa9sfHiF4U+g/5xM/5yOu7bTotP8AKP6V0zUrkWT63ay27CAs4WSScxyfuwgO78aZbCfF
+ uGJ2fuX5N8r6N5K8t+X/ACnoFqtnovlnT7fTdNtkPIBIEAZuZoWLvyYsdyTXJFpJssu5gYELuVe+Kur7
+ 4q7FV1Rw+nFX/9L7IECp2xV1B4Yq6g8MVdQeGKuoPDFW0A5rt3xHNXnDr++m8ObU+85iuQv8mRxan/ib
+ 66ouxYasba15benGIlqgpT9qp3yzHEENczuzM6Tph2NjEfY1/rk+CLHiLf6K0z/lgi+4/wBcPAO5Fld+
+ jdNHSxh29j/XDwx7lsq8Vvbwc/Qt44TKQZSigFioopY9TQbDECkWknmxC/lfXUUfF9VJp8mXBP6T7mUN
+ pB836VIqeYtDY9RqEK1/1jT+OYWM+oN0/pfWbrR3FOhOZ7jrKqO4xVoFT0piq6g8MVdQeGKup3oMVWGv
+ fFVNj2rTFVhde5xVQaRAO22KqLSxHuBiqkZ4x3GKqJuI6mpAPyxVYbiE/tDFVn1mPxxVsXkXiDirvrsX
+ ehxVd9ci7UAxVsXcfSoPvirf1qLxBPhirX1qP2xV31uM9KE4q39chxV31mH+3FXfWIvDFXevEP2sVb+s
+ xdCK++Kt/WI/bFVhnhJqSPuxVaLiEdwK4q0biHqTiq0XEO9SBXpiq714/EYq39Zi8Rirf1qMbbYqu+tR
+ kDYYq4XURHQYqt9eD2xVsTxDoRTFV31qLp1xVr61H4D8MVd9ZTl1GKuN1GdiRtk1W/WYxtyAwclXfW4/
+ 5lJ98KtfWk8RirZuo+xGKuN1GabrgpVnrwnvj5K360NftCmNK39ZhApUY8ld9Yi8RTEq160X8wx5q714
+ f5xjStepCey1HQ7bVwq0Zoq9F+eKtGZB4D3xVr10p1B9sVaM8RxVr6xHiq4Tw9iB7YquE8XalO+KuM0X
+ XYDxxVr14vY+GKuM8VKchv8ALFWvXjFaMPntirX1mLxGKt+vF4j8MVb9eLvx/DFXevF2I+7FXevH0+Hf
+ 5Yq711UbKDx6DYHFVT6xH1pue2KrVujzIKqEA2cHevuMVRKXcSuhqPtDf6cHJX533cyXXmbzo5AJbzJq
+ XL5iQDrmsy/UXKh9IfaPk6x0/V/yx8uaJqUZlsrrS0jmQNxdf3jMrKw6MDQg5nYx6B7miZ9RXr+XHltF
+ os18PcyqT/xDI+BFPilY35d+X+1zeL780P61x8CK+KVn/KvND/5br332j/CoweCF8UpRrnkHSNP0fV9W
+ i1a8Mmm2c11HE6xcGaJCwViADQkb0wHAE+KXkNs31mxt7tlAa4hWQqOg5AHb2zGcgPoH8vQkflOxB6m4
+ uW+9/wCzM3D9IcSXNm4ZPDfxGWEMV3qj5Y0rfrr/ADYaV3rr3NPpxIVv108fxxCu9ZePX9rGlf/T+ypB
+ qdsVdQ4q6hxV1DirqHFW1B5DbvirzS4JFxOOnGR/+JHMYt4WflvJ/pf5hW9DWHXkcH/jLbq+W4js15Ob
+ 02hyxg6hxV1DirqHFWP+bNJ1TXfK+v6Lousf4d1jVbNrfTfMHoLc/U5mIIm9F6LJQAih8cBFiikGnypa
+ f841fmo2pWV1q3/ORV1dWcF1FcXdlb6BbW7zLE4cxrKj1TkRQkdsrGGIZ8b61i0uarSXupT30jEsRQRo
+ K77BScta0wSCKMDjGBT6f14qq0p0GKuO3XFVNpOO5xVAzXqp70xVKZ9aCVFQKdMVSafzCy1+IUxVKZvM
+ TVPxinbFUsl8yODT1feuKQgm8zMK/van54k0tIVvMjbkyD33wWlQbzOw6tUHpvhBtFKX+J2p9uuC0rT5
+ pP8AMcFopr/FJ7tTww2tLT5q8Wpja07/ABX/AJWNoXf4sFa8ziCyVF82r3NPfGwimx5rT+cn6cbSqjzX
+ HT7VD41w2xXL5oi68/prgtJb/wAWRH/dn44U0vHmqL+f8cWLf+Kov9+Vp0oa4ppv/FKfz/jitNf4rj/n
+ 69N8VpafNaA0L/jitKTeaF/n6eJwWlTPmlT+3+OPGFW/4qUbc6fTjarx5rX+cU+eNop3+K0/n/HCml/+
+ KY/5/wAcFsVw81J3k/HCrh5oj7P07Yq3/ihP5/xGKuHmqIdX/HFXf4rjPR/xxTTX+KU3+OtPfFC4+a4j
+ sG3+eKaa/wAUJ/N+rDaFn+Ko/wCep7b4E00fNSfzD78UNjzZGOrD78Vb/wAVRdfU+iuG1po+bIf9+b42
+ mnHzXGP28CGv8Vp/P+OKu/xXH/vxT9OKtf4rj/mBHzxTTf8AitP5h9+KHf4rjG9R9+GyrX+LU7MBgTTj
+ 5sWtQ9PA4bQ7/Fw/n+842rf+LlPVwfpxtNO/xan8/wCOBad/itK9Rhsod/iuPxFcbKtHzag/aH342kBv
+ /Fi9Q3442hYfNo/mJ+ZxtNNf4vXpXf542tNjzap6HG0Kn+LU2A6+OElVw81ptv171xtVQeaFJH9cKqn+
+ JQfCvzxVcPMlTtTb3xVVHmKu/wANO++Kqy+YiBQAU7/Firv8QVr8C1P+VgtUHc+ZZYviSFZCu/H1KV+m
+ mRV+aWoeW/8AnLfSdd18aTZ+TNe02/1W7vrTUby4VZ5VuH5BpQvp0alKjj1ymWnEjbcMlB+hv5Xa9rdn
+ 5C8n6f5sgtrfzTZaXDF5ijsWL2gu6sZBAzblN9svjEAU1SNl6RHr0IPwbciSfcnqckhEfppW7jb3xVcN
+ YG249t8VYv5216O38mea55GpHFpc5c+1KfxwT5FMebxSxNNPsgpoPq8X3FQc1pcwvbvKF/8AVtAsYgNg
+ ZD97nM3D9IcSXNlP6UHdqfTlzFo6mD+0KfPFVp1KvVh9+KtHUh2YffirX6Tr1bb54q79KLx+1+10wWtP
+ /9T7NFTU4q7icVdxOKu4nFXcTirar8S/MYq8wulIurxRU0mk/wCJHMaXNvjyUPy3NdZ/MeMbk6pZyH/Z
+ WoyzG15Ob1XictYO4nFXcTiruJxV3E4qtxV2KuxVaWA7/TiqGklArviqTXV8Frv074qxe81H7VD44qxW
+ 81ClfixVjd1qgFfixVj1xqxBPxdsVSafWgK1fG6VKJtcUV+PI8TJAyeYAK/vMDFCN5jH8/TFUO3mMf78
+ qfnimlNvMa9DJ+OKGh5i8H+W+Krv8Rnu4P04snDzGP8Afg+/FXf4hB/3ZirX+IR/P9+EhVn+ISv7dfHD
+ zV3+IqGvPGtqVcPMdP2+vvhpV3+JKftA+9cVp3+JKftg4qu/xMB+2N/fFXf4oH84+/FaWt5n6/vPlviq
+ z/E1dw344rS0+Z6/t/LFaUz5nP8AvwfQcVpSbzKdv3mICKW/4moB+86b1rilWHmrp+8H34opv/FH/Fg+
+ /FabHmo9pB8q4rTY8106yD78Vpv/ABUOnMU8cVpv/FYP+7B9+K04+ah3kH3jFC0+aB2kB8d8VaXzQAac
+ /mK4siF/+J/CT8cUELf8UV/b/HFaa/xNv/efRXFaWHzOR1lr9OK01/icf78A+nFSFw800/3YPvxQ2PNB
+ /nxV3+KK/wC7K4q7/FH+X+OKu/xQP5wPeuKrv8Tj/fgGKaa/xR/xbvimnHzNTZX+muKKWf4oPT1dvCuK
+ 01/icj/dlMUNf4pI/wB24qtHmpj/ALsxTTf+K2PSQYTutO/xS3+/cCaXf4oB/wB2fjiinHzPttID9OEb
+ LTv8UD/fn442tLf8Tj/fmBabHmn/AIt+iuK0uHmjxk/HFaV4/NAFP3gqffJBCLTzSBQ+oD4iuFUQvmlK
+ /wB4PYVxVWHmlP8Afv44qrR+ak/34PvxVEJ5nQ/7s/HFUYnmOKgHq7+BOC1VP09C4oXBB7VxtaaXUIHa
+ pIAxCp5balGgAU7YVTdNUBANaYqiF1MUHxbeGK0rLqoPQ4rTBvzO1bj+XXnUcqctMdBXxd0X+OQnyZwH
+ qCAtiFsrRR2t4fwRc17lvQ9IvTFp9ogPRTUfMnM3D9AcSScDUjQVbtlzB36QYbVr74CVaOoP2OC1Ad9d
+ J/a3xtad9cfxwJpd9df06V/b6/Rimn//1ftAV3O2Ku4e2Ku4e2Ku4e2Ku4e2Ku47g06Yq8y1H4dQ1ADp
+ 67/rzHlzb48kv/LwBPN35iR9fVXTLgD5w8f4ZPEGub13h7Zawdw9sVdw9sVaoB2xVYSBiqkTviqmdvn4
+ YqsZgOuKLQM1yErU9MICUgu7+nLienXGlYteX4+Ik7YaViV7qVOQDdeu+RViF7qvXcffhIpWJXmsKpPx
+ VOBWK3eubmjeOKQGNXGudat38cBCUnn13/K2yKpRNr3+V0xVKpfMBFaPixQUnmFhX4+vviyAtCnzG1T8
+ f44s6Cw+YpO0h2xTQWjzG/8APixoNf4lf+f8cUgNjzK9ftGmC1oLx5lf+f8AHCghd/iRj+1itBd/iM/z
+ /jigilw8xE/t0w2hd/iFqf3m/wA8PEy4VM+YD2fBbGi7/EJH+7PxxtJDX+Ij/vw/fjagOPmIn/dn442h
+ b/iBqf3p+/G1W/4hb+fr748RVafMJI+3v88RI9VW/wCID/vzGyq06+f58Nq1/iA933Hvg4ld/iFv5z9+
+ BXf4gYb8/wAcINKtOvt/vzf54bVb/iB/9+EfTjarT5gf/fmNqt/xE3+/MFlFu/xFJ/vz8cbZcubY8xt3
+ ffxrjaALX/4jP+/PxxtNFo+ZmrTnkrUtnzNvu+/zxQvHmQ/78p9OJNK0PMRP+7AMHGEW3/iNv9+DG027
+ /EZ/n/HCqz/EbD/dlfpwWrR8xsdjJ+OPGFa/xGf58Nq3/iVv9+YOMK2PMTd3+muNq7/En/FmFXf4jJNf
+ UIxVo+Y22/eH5VxVr/ER6mT7jiq5fMRH+7MVWnzEf5/xxVr/ABGabSfjiq8eYz2k+44k0rR8xt2l/HBx
+ hVI+Y22/eU8cNq7/ABHJ/vzb543Stf4kcf7tOKrx5jfvLiTSqg8xsKfvPprg4wq8eZHJ/vK/ThVWXzI/
+ 89PpxVEL5kfr6pHhiquvmR67yE4qjYvMbHo9PeuKphH5icivqb/PFUyi19tvjr9OKpxba4TT4/xw2rJL
+ TWm2+Pr0wLTJrbViwALYbRSbx31T126gY2UIuO6YdD198eSbee/m3elPy481dQ0sNvED2+O5iGQyHZnD
+ eQDNYEb0Yl6BY0A+gAZguQn1pKUhiHQgUrX3OZ2L6Q40uaYiY03bLWFqnrAnrhpQGxL4ZGmS/wBXxwUq
+ 4Sk9/wAcC2q8/wB11/a/hitv/9b7SnrirWKuxV2KuxV2KvMNY+HVtQXpWdtvmAcx5/U2x5Jd5DHp+ffP
+ CdBNpWlSD5jkuTxom9gy1rdirsVWnsMVUH64qpHbthCAouw8aHElKX3FwFBFd/HHkgMdu7z7QBr75JLF
+ 7u7+0a09sVYjf332hWmKsLv7/r8XjgKsJ1DUBRgGxCsEvtTNT8WRTTEbzUWP7WKWOXOoGp+L6cVSaa/P
+ GvOmVlUnmv8Axbr3wqlk1+d/ixZD3JdLfsejb4pApCfXWG3PfAEqTXz/AM/TEqpm+c9WwFWvrzH9rAq7
+ 66R3OSpXHUD/ADYVd+lCP2qYq1+lD/NirX6Uao+M4qu/SrUpzOKrf0mT+3iq39JuejHFWv0m/wDOcVd+
+ lG/35iig79KE7czil36Tb+bFWjqJP7ZxVr9JH+fFWjqTdOZ+eKrDqbD9s4q1+lG/mOKu/SZ8cUUHHUmP
+ 7ZxS1+km/n/Xirv0k3Xl0+eKuOpHqWxVadRr+1irX6Q/y8VcdRp+1iqmdSp+2cVaOpsOjYqs/SjfzHFW
+ /wBJsNyxxRQW/pZxWjYpbGrydC2Kt/pR/E/Riig1+lG7sfpxS79Jn+fFW/0m38+KtfpVuz0xRQcNVI/a
+ wWgCl36VeleeFOzv0q2/xYLWlp1ZqfaxtKw6ww/bwq4aw/Y/rxRQb/S7H9o1xXZ36WbsxxXZsas5/a2x
+ XZx1Ujvio5Lf0qf5sUqg1Vj+1TFaDf6UYdWpiq/9Kt2bFVUaoT+30xRQV11RjT48UohNSbryyXEx4UZH
+ qTn9vHiXhRseonb48eJBCZQ6kf5jkrQmsGpHYcgSe2BWQ2momq/FirKbO/6Vau+Ksss74mnxfI4qyi1v
+ CQKtXJqnsFyCK8tzgpiXnv5wTcvIGqpWhnv9LhrXs97EMry8mzFzetsQjMv8pIp8swXKVVm+FRypt2zP
+ x/SHEPNFCbf7dRljBWWcnvXFbVBLitq/r174qvE3vTFVb1f3XX9rr9GKv//X+05UVOKu4jFXcRiruIxV
+ 3EYq7iMVeWa/8Gs6gAP92g/eozGn9Rbo8kB5KBXz95gJFBc6DaFf+ecxB/Xk8bGb2LiMua3cRiq007Yq
+ senb6cUBRYjv3xSosw+7FUvuJVQGnXfbJAKxq8u1Ffip44VYrd3YBNTX2rirE76+UA1bFWF39+N6N08T
+ irBdR1AHl8W+QVguoX5Nfi2BxTTDby7JJocUsYurmp6nbviqQzyk1IrgkeipJcSyb9TTpkVSaWSQ16k0
+ 2xSKS9/VNftb9sWaFZZTXY79MVUuEtd6/LFVhSTpQ/LFVMpJvSuKreEv8rfPFWisnShriqmyyU6HFVMh
+ +4OKrDzr3xVYfU36nFVtX8TiruT96jFXVfxxY8TuUnapxSDbXKQ9a4pdycdK4q7nJ3JxVcDIdqnFVpMg
+ r19sVW1k8TirXx++Kuq/virqv74qpmR/DbFWvUfFW/Ufw6YqpmWQ7itMUHks9R/fFRfVsyydq4pU/Vk9
+ 8UHksMr++LGy71JafxxRZbEj98Vst+s3c1xWysMrb5G08TXqVNKnDSSW/VcbYWNlb6rA7VxTxFoyuT9k
+ 4rxFv1pP5DivEXc38DivEWjI/YHFSQWvUlGw/jikUdm/Vl+zv+OK2AsaST3xZLeT96/PFV3qN44ooO5t
+ /nvivC0Xf3xWg2HfsTijZou+/XFQQ1zceOKilyyuK70+eCl2CsJ36/fkwEW4TSeH040tolXfwORZolHY
+ BcVRKSt3r3xVEpOwNN98NNdlHxzMDt9ONM0wimNepxAUhM4J2Boa5Jgn9rckUOKsosrwgrud8VZbZXhP
+ EE7YqyuzuyKUbFWSW1zWgr+OTVhv5qP6vlCGEH++1/Q4yPGt6hO30ZVm2DLHzezXkoS4lG/226fPMEN6
+ GiYsB1FRv4ZnR5OKUYjGlCa5JCKjJp164qiAxFPDJqqqTvviqoDU0xVWqfS6bc/4Yq//0PtSeuKtYq7F
+ XYq7FXYq8t8y7a1eCnX02B+aDMbLtJthyQXlEcfOruf93aNIv/ASqf45LGbRN6/l7W7FVjUBJ6DFUPJI
+ orvTFQgZbpF/axVKrjUQn2W38cVY5d6ixrvv75KqVjd3duQdia9sKsZvJ5GLUrv0xVid567ctifbFWK3
+ ltcvUAEe2KsXutJu324nvXbAVY7ceWryQ/ZJ+jGk2lE3lO8ep9NqH2xpeJLZPJN2/wDuo/dgpbQEnkK7
+ NR6TdfDGltASeQbqlfSYfRjwraEb8v7mv90d/Y48K2ot+XlwafuzT5Y8K8Sh/wAq9uN/3fbuDjwhPEpt
+ +XtxuPRJ+jJcKOJQP5f3HaM5HhCeJTb8v5+8Zx4UcSkfy/n6+kafTkuFbUm8hXFP7o/PI8LISQ7+Qrgd
+ IyfoyXCxtDt5Duf99H5UyPhram3ka5qf3Dfdjws+JRbyLcb/ALo/KmPCEcSj/ga4H+6T92PhrxLT5Guj
+ 9mMj6MeFTJr/AAHdf77P3Y8LG2v8C3P++z92PCtuPkW56+m30DHhSC1/ga6/32aeFMeFTJb/AIHuf99k
+ /RiRSLbHku4U/wB0TT2wUyBWt5JujuIiK+2GkcS0eSLn/fZ+dMSEWsbyVdjpG33Y0niUz5Muu0TfcciB
+ SLa/wXc/tRE/RiQyElP/AAXc/wC+SPamHhTxLT5Luv8AfRH0Y8No4lv+Crr/AH0fbbHw14lv+CLv+Q4e
+ EMbd/gq7/wB9n7sTFla0+Srqv90R7UOPCF4mv8E3Q39I/Ohx4QvEpN5Luh0iP3Y8IY2t/wAFXVf7s/SM
+ lwpUz5NuuvpkU9uuQpNqL+Tron+6PypjSFv+Dbkf7qI+jBwsrDY8nXIP90fux4Sglv8Awfdf74P3Y8KH
+ HyfdH/dR+dMjwoumh5Oue8R+7JhbXf4Pu/5D9xxW3f4Puv5T9xxW1v8Ag+6/kPvtim1X/B9yBXgfuw0i
+ 1v8AhG53/dn7saS1/hC57Rn7jjStf4Quf99Ej2GDhtRJv/CFz/vpvuP9MTBlxLf8JXH++jkaXia/wjcj
+ /dZOSpFr/wDCVx/vtseBSQpHylcUP7tt8NIWf4SuCd4zTGgrX+E7roImoPbGlXjypc0qEp9GBbbHlacd
+ YiT8sUhePLFyu3pMR8sSFBVR5ZuaCkTfdgASSqjy3cnYRkYaRaqvly4HWM0pii1ZPL1wNwhPtTFbRUeh
+ XH8h+e+KphFok4/YNfliqbwaVMKUQ7dMVTu206YEbUNcVZJa2kq0HEjFWS2sMg41BqMVZNaxvtUZNWNf
+ mBC0mj6DEVoJvM+jAj/VuOR/VlOf6WWPm9TvZqzyH+ZmIP0nMJyEzt4CVjIBpxB/DNgHFkjltjTphpii
+ kt27D6MNKri2Y0qOmFVVbdt8VVRbECvfviqr9XPpdD9vw9sVf//R+1hAqdsVdQeGKuoPDFXUHhirqDwx
+ V1B4Yq8f876lp1hrk6XWpWVpI0ELGK4uYonoV2PF3U0PbMfKN22B2Yj5Z87eVrf8wtE02XX7A3OpaTqL
+ 26xXEUo42/BnLlGYL1AFep6ZLGd0Te2HzV5e6pqcMvh6dW/VlzW0NftJa+gksvgQhocVaN5cSg8YGHhX
+ FUO63bjZTiqFexu5CSQ2+KqT6ROwPWp7ZK1Qz+X5mO4xtUJJ5Ylbt9ONopAyeUZD+zUntTG1pBv5Nff9
+ 388KUKfJBPWIUxVRPkbevoj7sVWf4EXtD89sVa/wEn++Nvliqw+QlIP+j7eNMWKi3kJB/ugfdiyUH8gx
+ kU+rio9sVQ58hIP+Pbp1OLFSPkSL/ln/AAriqk3kOH/fH4ZK1U28iQ9PQH3DG1UD5EgP+6fwxtVjeQoO
+ 0Ab6MbVRbyBCesA+7DaqDfl9bgf3H4DFNqZ/L+A9IR9IxQh2/LuA9YBt7Y2qmfy8t/8AfC/djaqB/LqA
+ 9bcfdim1M/lzb0/uBXwphtbWf8q5g/5Z1+7Ad1tr/lXEHaAV7bbYAh3/ACrmH/fCj6MKrf8AlXFvv+4H
+ 3Yptafy6txv6Cn2pitqf/KuYN/3AHyxW1n/KuYAP7gfOmCgttH8uIN/3A367Y0trP+Vbwgf7zj7saW1p
+ /LmEbmGgPTbGltS/5V1B3t/ww0EWt/5Vzb9rf8MFMlh/LmCv+8/4Y0i1p/LmA/8AHvT6MeS2t/5VxAD/
+ AHFK9NsK23/yrmL/AHz+GNBba/5VvCf90j7saC21/wAq2h/5Z/w/sxW2j+W8IH9xX6MFBbUz+W0PaCn0
+ Y0tqbflrEP8AdG3yw0FtSP5bQf746+2NBbWH8tIdx6W3yxoLamfy2hB/uK/RgpbW/wDKtof98b+4xpba
+ /wCVbRD/AHTT/Y40tqP/ACrWMf7pp70xpbb/AOVaxf77/DGlt3/Ktov98j58caW3f8q2i/3yPnxxpbb/
+ AOVbRf75A+jGltafy2i7RCvhTGltr/lW6jrCPoGNBbab8uIxt6H00xpbWH8uY6bQV/2ONLbX/KuYv99j
+ /gcaW2v+VcxD/dNfoxpbd/yrmPvBT3pjS2tP5bxdfSH3Y0tqZ/LiMn+6H3Y0trT+XEe/7r/hcaW1v/Ku
+ I/8AfX4Y0Ftr/lW8X++h/wADjS27/lW8J6w/8LjQW2/+VbRdoR92NLbv+VcJ/vofdgpbXf8AKuIx/ur8
+ MaW2v+Vcx/77p9GNLbv+VcqP91D50w0tu/5V2B+wPuxpbXL+Xqqa+n+GAhbVV8gqN/Tp9GNFIKKTyNTc
+ Rn22xoraKTyXx/YxoptHx+UqU+Aj6K4EWmUPlwIPsU+jFWD/AJiaQkdh5crQcdfs5KbVIi5MaDvTvTKc
+ w9LPHzbnuA7lh7n78wnLe1W2jj0YgV39NP1DNkHClzRX6LVegGFDvqKig2J7Yq2LReoG2KrhaV7frxVf
+ 9WH8u/jiq76t+76ftfwxV//S+1h6nFXYq7FXYq7FXYq8p87/AJF/lB+ZGsDX/PfkLT/MutC3itP0lctO
+ shghr6cZ9KRBRamm2K2Ur8uf845/kb5Su21Dy9+Wej6bfFeH1lPXkYLWtP3krd8aV6za6PpFigjs9Mtr
+ ZF2VY4lHT6MVRwjQCgUKPYUxVvgvhT2xV3BfDFXcRiruIxV3EYq7iMVa4CnvirXpjwGKtekv8oxV3or1
+ 4jDarfq6/wAo+7ArvRHgMVa9BPAb42rRt0P7AxVY1sn8gw2q02sR/YFfHG1WfU4j1jFcFlFLTYxU3Qfc
+ Mla0pnToiKBQPmMbWlP9Gxb/AAj7sbWmjp0P8o+VMbC0sOlw/wAgxsLTR0uEkfBth4lpb+iYa/3Y+kY8
+ S0pnSISPsD5Ux4lpROiwk/YB+jBa079Cw/77H3ZK1pY2iQH/AHWMbQsOiQD/AHWMbVr9CQ/76GBVp0OD
+ vGBhtVp0OGh+D8MbVSOiR9l/AY2q06HEf2cCu/QUP8o+7DarG0OL/fYHvTG00pnQoz+z9NMbQsOhJv8A
+ Dv22xtVn6CSv2QfmMbVYdCSv2cCqZ0NDuV/VkrVYdDjP7H8MSVd+g0/k+RxBVb+hB/J+AxtXfoVR1GNq
+ 79Cx/wAn3Y2q06Mg/Z69MbVadGT+T5Y2qz9Cp/IT7UxtVP8AQifyY2qw6Kn8lMbVb+hk3+H8MbVYdGUn
+ +7/DG1cdFUfsA/RjaAFv6FX+UU+WFKmdGQfsj7sVWfohf5PwwWrjpC/yU+jG0lb+iR/JhQ0dHU78PwxV
+ r9EKNuHz2GKrDpCV/u8FqtOkJ0EdMKrf0Qn++vwGKtfodf8AfY+7FV36IXvGPuxVadIQ/wC6v8/liqw6
+ SvQR9PbFVh0hO8eKtjSY/wDff3jFWjpEf8nz2xVb+io/5fwxRYaOlR1+xiladJj7IMVa/RSf77GDdWv0
+ Wn++x92FW/0Un+++vtirv0XGOqfRirv0XF/IPuxVd+i4v5PwwBXfoyOn93t8sSq4aZEP2B92NptWFhD/
+ AL7H3ZFbbbT7fasK/PFLyH80vywl896LBZaXrtx5T1rTbpb7QvMFvGJntbgAoxMbEBldCVIwSFilBp4l
+ Zf8AOPf5xLOpm/5yDlnhqOSnQYORodxUv4ZT4AbPFL6zsfKtyI0E+t3U5CqD8IFaD55cGspsnlpE6yzS
+ V7scKohdBQCgBIHcnfFVddH4/s4qqjSAPAA9sVXfopR0UEYqv/RY4U4inLpir//T+15AqcVdQYq6gxV1
+ BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGKu
+ oMVdQYq74fAYq1xX+UYq16a+GKu4LirjGPAHFVvp+2Ku9P2xVxQeFcVa4DwxVooK9BirvTXsMVa9MeAx
+ V3AeA2xRTXAd1GK01xA6LitNekn9uGyhr0VrtTATau9EeIxVr6uPAYBsrvQU+GG1aaBPbFVpgQ9q0w2V
+ UzbJXYY2qm1uAdl/DCCqz6sT2GStXfVv8gY2rvqw8BjatG2HdcCu+qr/ACHFVhtVP7GOzJabZRX4cVWG
+ 2X+Wn0Yqt+rJ/mMUW39WQ/24ra02sfgMUtfVFOKu+qL4YqsNmuKrDZp/KMVaNkvXiK4qotYKe2Kqf1Bf
+ 5fwxRSw2S/y0xS19RHH7OKrPqS+GHiVxsR4bYFUjYbn4cUUt+pV6jFCw2nam2KtfU/bFVv1Jf5cNK0bN
+ R+zjQVr6ovgB7ZJWvqi+FcVWm1B3piqmbQDfjgtVhtUPbBatG1Hhth3Vb9UHh+GO6rPqi9xTCrX1UV6D
+ BatfVB4DCrf1UeAxsK76svgPuwWq36v4D8MbVoQew+7Iqu9Adtj8smqwwfLIKpm1Vuqg4qqJZICDwxZJ
+ pFAoAApTFVb0tvsimKLb9D/JGKWzDTtirvT332rirvSB64qu9BOP04op/9T7YHqcVdirsVdirsVdirsV
+ dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVaoMVdQYq6g
+ xV1BiruI8cVa4++Ku4++Ku4++KtcTirfFvDFWuJxVxXvSuKraDFWuPjirXHFFOKD54opriP5cVpxH0D5
+ YrTXH2r7Y0tO4j5Y0tO440tLDEOu++HcJpow1HTBaFvp/wCTjatGH/JpTG1W+iD2xtW/SA2IxtWvS9sP
+ GVd6J8MeMqp+j4YbVpoqjpjarfSO+PEq0x02IBwslvAb0UYotb6Y7imKWvTTvii1piXtitu9Bex3+WKV
+ hth12GKtfVsVcban8MVWm370r9GKqZt/bf5Yqpeh7DFFN/V/bFaUzD7YrS0wA9MVpr6qP5cVpTMHbp9G
+ G0LDb/f8sbKrTb+O/wBGBVMwAdq+2KrDEvYHDYVZ6e52G2Bk70z/ACnDSLWGKv7ONIW+l/nTAyXej0+H
+ 5nFWvRPhirfoeAxVUWI0xRavHEQaEH6cUIoR+Jp7Ysl3pYq16Rp1xVSKgGlMAKKXBK1oBhSqekOHbr4Y
+ q//V+2hAqcVaoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGK
+ uoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gx
+ V1BirqDFXUGKuoMVdQYq6gxV1BirqDwGKtcF7DFW+K+GKreP+SDiq2g8MVdQeGKuKqe2KuoMVa4r4Yq7
+ ivhirRQYq1w9sVdwrXbFWio7jFVvAVrirfH2GKu4+ww2riop0H0YQVWcV8BjsriniAMKtFKdsVWlQeg+
+ eKqZjFemKrDHuemKrTED2GLE2o3Fs80E0Udw9tJKjIl1EELxlgQHUSK6Er1HJSPEHFk+M/KH5n/mJZ/l
+ j+RP5r675l/xNafmPqWh6P5w8uXNnaw+k2vT/VIrjTZLOGF1MMzozRy+rzTlQqwGBWfx/wDOSvly50y4
+ 1+x8m+Zp/LUMGk6hF5oktUt9Pk0zV7s2iXonlkUBYCUlmQ/GkLiTiQHCqpx5i/PnRvL7zRDyl5g124gu
+ L6tno9ul7O9jYXw0+S8SGN+bK0ok4KByYRuQPsc1Ut8ufmhqenat5s8t6hHqXnrzE/m3XrfyxpFstjBc
+ LpWk2ljPLVibSIrE92kak1dmkTlUcnCqCtv+cmvKl99S1Gx8qeYbjync/wCG2uvOXGxWztYfNTiHTppo
+ zd/WOJmYRSBYiyNuy8aEq0qP/wA5J+XzZ3Gp2XkfzVqmieppK6TrltbWy2d9HrOprpVtJDNPcxJ/fSxM
+ VJ5cJFalA/BVkui/nFHr2o+Z9Bs/JGrjzP5S0yS91nyo9xpg1CO4WG2litPTF4V/fm4ZIpuXou0Uvx0C
+ llWvzu1/zT5N8p6d570HUJ7DSvKmp2V75/0tILeeSbQHmRNQdGkjmKSWsbGaqHdVddyVZVWK6v8AnBF5
+ W1rXvMOpS6hrPki5uZrHy+1qunizjOkm2g1GSKZzFPPI1xNIqRBnNLed9lC0VQVr+b115Y1L81LTX4tU
+ 843en+e7vSfJ2iafb25uUsbfy9pWqSQr6awhlSS5cKz8nJdQxI+IKFTWfz0iu9G82zaf5L856PZeXbGw
+ utR8yLDpEM1oupW9vdQA2l9dmUPwn4sjwFkKsCoPGpWmeaZ+auial+Yk/wCWx029s9aSDUriCaY25SSP
+ S3s0mdo0maWNZPrqGIug5qGYUFOSr5+/Mv8ANrzt5N1787ZdP1jV7yP8vE0K68taJDpFtcaWw1G3M1wm
+ p3i2qtBApXeVrhPTU825gUwK9Uv/AM+NJsNR80WMnlHXJbbyvqdlos+swNYS2lzqGpw2NxYxW3C7Mzia
+ K/WQN6YCorcuLUQlaU5PzuU2Pli6i/LrzPHL5uvI9L0nTblLW1vnvmubmCeJLeedWZbeO2Ny8tPT9Flc
+ MSSoVp595X/P6by15P1q48+aTruv3uhxeedYtfMEaaWg1PTvK3mGbT5o4o45rcLJbwy24PKJOYDFeRG4
+ Wmd6h+feiaf+mLG48neYh5n0bVrnSpfKCRWs19IbbTbfVfWj9C4liKPBdxBRz5c2CsAKsCtJvpP5wWGr
+ 6pNo0XlXWbPUfU0J7DTb1Ibe6ubPXbea6iult3kEiLBHbTeqjqrq0Ui8SV3VpOfy6/MvSPzGk1y2sNMv
+ dJvdAWyfULK9a3d4xfxNLGjm2mmVJYyjpLGTVHUqcVYt+e/5i6x+XehWFx5bW1uNYikOt6pY3Lory6Fp
+ EkUuqR2wevKeZHWGJQKkuWXdcCUq85+fr6w82Wd7o+sX195N1H8qfMnmqK10iOwklklsbnSfq19aSXaq
+ rOILyQqsknpNtVSepQm1n+c+nfpnTvL83ljX5o3v9G0e78zyJYC2W51uyW6s3kSK5EtJSwQ8IaKx3CrQ
+ lWmS/l5+aOifmHqfmHR9O0+803UPLdrp17qNpdtAzxx6m10kMcggll9OZGs5Flib4kIocVp4j+Vn5nea
+ /P8A5481fl9N5zm0zUPJPmvX11C5uLWxiuNR0jTtSudPs7bT42tQstPRD3U6j4DxRRWSsQV6+/5p2uqS
+ HQrSw1LSNS1TUfMegWmqj6rJ9WvdBhkkkl4uZFZXCEx1Rv8ALUYVec+T/wA849L8oeXPMHnnUdWvLsfl
+ p5C1/wAwyyRafBphm8ySTW76j6yBJIqzI31j1CsUaIrIg+IsE0jovzp1LSfzB8wvq+l6xfeSb7SfIMtj
+ bx/oxk0O58z6jqGmc5XjlWSZJ5Vg3jaYABmUhaAqvqIxA9qY0rgijthVUp8NKftYq//W+2p64q1irsVd
+ irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd
+ irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVaIqMVWYq7FXYq7FXYq7FXYq7FXYqtp77Yq7iOxxVr
+ icVdQ4q1SnbFXUqcNqtPXbDatUr2xtWiu+xwq18XjirZB/zGKoe4heWCaFJpLZ5Y2RLmLj6kZYUDpzVl
+ qvUVUjxBxV5N5Z/I7yL5YtPJunQDUdU038vSH8laXqd5JPbafIqNGkyQjijyIrsEklDulTxIqcCrtA/I
+ /wAieXdB8weVbSLUb3yxr9hdaSPLuoX093ZWOm3nL1rKxhlZlhhbmfhFSAFWvFVAVdqf5J+SdTPlNkGr
+ aS/k/SG8v2Emlalc2LXGkusavZXZgdfWjYwo2+4YVBFTUoan/JjyrJqZ12G+1ax15NYvtattctblYrmG
+ bU4Y7e9iQiPj6M0cMYZGBoUV14uobArDNB/Iq20/zbrT3EUFl+XMFr5Wt/KvlKxvJHjY+Vy8lo17FJaq
+ w9KXg6BLhg5X96G6YpTmP/nH3yTb6bc6NaX2vw6PJqFtqFhpJ1Oae209rS/j1SKKyin9RYYxdwxylVG/
+ BUr6dUKrIL38pdCv9c1LzDLq2sxare2OoWFjeW956MunR6oY2ujZToizRljEjKC7KjDkiqzMWVegX2l2
+ eo2F3pWoQLd6df28lpe20tWWWGVCkiP4hlJBwq8avv8AnHr8u7vQfK3lxIdU07S/KPlyfyrpiadqNxZu
+ +l3RtnmineFlLl5LSJ2bYsw+KqllIVXvfyM8nXtzd351LX7TVLjzCvmeDWLPUpLe7t9QFimmO0U8YDlJ
+ bSJIZEcsrBQx+OrFVGz/AJN+VJ9N816P9a1SPTfOUFhbazbi5DH09Nhjt7cRyyI0gIjiVWYsS3ViWJOK
+ u0X8mPJ2g+bI/Odm+rPrUNxq91AJtQna2STXpo7jUSturLHSaWFHIK0BAoAAoBQhta/JTyn5gvfO1zql
+ 9rUkH5iRQW3nLTIb020F7bW8Rgjt29BY5FjERKMEcFwSHLVNVV17+SnkvULTzXZTfpCKDzdqOnavdG2u
+ TbSWd/pEVtBYXFjLCqSQPBHZwqvFqfBuCS3JW0MfyO8rnU7LWRrXmL9LWOk3OjJqMmovNM1vezm4u29S
+ ZZGWSd6c5EKtxVEBCogCqU3v/OOnkfUdNbSLu/1mXT3svMGnSQfWIhyt/NN4t9rCchCCDczqrVBqlKR8
+ RUYraZah+RflXU9VvtfuNV12DzDfaxHrja/ZXxsruO6Sxj0xxHJapFSOW0hjieOhU8FanOrFW2Uf8q08
+ oJ5h0TzMNMI1jy/oE3lnTrn1ZCRp0zRNwYklmZPSIRyeQDyb/GcVYJpP5CaF5Ti0yPyR5i17y/JaT6DH
+ dTtqd1cLJpnl9j6Fj6LSCMo8J9AginE8mDNXkEvTh5Sshr+ueYje3kl7r2m2+lXFvI0clvDb2pmaP0YX
+ jYKeU8jMTXnUB+QRApV51p35BeTdL03StHtNQ1sadonlnUPJ+mQSXaSmPRtUMTXNt6jxFyCYIuLFuScA
+ FIFQQqLH5KeWvXM7alrDl73StRliM0AV7jRYUt7JzSAEcI0AIUgN1ap3woR35f8A5O+UPy0uJLry0dT9
+ WTR9P0ELfahPdRrYaUZjZwrHI3AekJ3VTStCe7MWVSOX/nH7yLNDYBrjV477SvM955w0zXIbpYb+31XU
+ XeW9eK5jjV1juHkJkiB9NvslePw4EplJ+SnlSTX08yfpPXYtQiur/UIYItQdLVLzU7YWt3cC2VRFylUc
+ iCvHkWooDMCqp6f+SHlfSYbaHSdV1vTmsvL2j+V7CeG5iLQ6boMkkmnxUeFlf0zNIG9RWEiuVlDilEml
+ Qy/84/eRoLa4s7STU7CyubfQbZ7K3miWMJ5avX1HS+AMJ4+jdSPJQbHlxIKBVUBXonlLQL3y7ptzZ3+t
+ 3mvT3Wo3t+lxeyvO0Ed3O8yWsckhZzHCG4LU9BsFWirJWTcV8MVX8RTp3xV//9f7cECpxVqgxV1BirqD
+ FXUGKuoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGKuoMVdQ
+ Yq6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDFXUGKuoMVdQYq6gxV1Birq
+ DFXUGKuoMVbUCvTFBXUH8uKHUH8uKuoP5cVU3UA4pCygxS6gxV1BirqDFXUGKuoMVdQYq6gxV1BirqDF
+ XUGKuoMVWsBXp1xVbxXwxV3FfDFXcV8MVcAMNqsoPDJKtbtkFa+jDyVbQYlXUGBXUGKtNQjfCN1Ucki1
+ Ge5trRBJdXEdtGTxDyuEBJ3pViN9siShSXUNOkCNHf28iySCFCsqEGRgSqCh3YgbDriCqL41w2qyh8ML
+ JDy3VpDJFDNcRQyzECGJ3VWck0HEE1O/hiqlFcW1wC9rcxXMYPEvE6uAetCVJxVUrii3YoUZp4LZPVuJ
+ o7eMEAySMEWp6bmgxVbFe2c0gihu4ZZSgkEaSKzFDQhqA1pv1xZInFXYq2QD1GKqJWh36djiqhFNFJJc
+ QpNHLPbELcwqwLRsyhlDgGqkqQRXtiquvw1Z6Ki7sx2AA7nFV0U0E6CSCZJoz0dGDDx6jFW+K+GKrGmt
+ opIYpJUjluCVt4mYBpCoLEKCakgAk07Yqqmn0YqtJVQWYhVUVZjsABirUM0VxFFPDKs8E6LJDNGwZXRh
+ VWVhUEEGoIxVcVBFBse2KqVDWnhiq79itd69MVf/0PtyeuKtYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq
+ 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq
+ 7FXYq7FV3I4saW4ppcD3GKHEA0r2xVbxGK20V8MUgrMUuxV2KuxV2KuxV2KuxV2KrTXtirgD32xV3H3x
+ VbirsVaPT54hVuTVojscgq2lScmrVCMjStYFWkkdB9OKCVhJOIQtyVJp81f85bNZL+SOq/XHs4z/AIi8
+ p/VWvuJiD/4i04sSGIqBHz5UP2OXauClAYNrF35StPMflGMX3k9tZh/M7QZJ7jy4iQQJb3GlXkVvHMeT
+ L9YLpJUci3AxVorIMSFYnp/5/wDnzWdA0TX7Hz15XtLrWtY8o6b5h8ryW7Xd55c1DU9ah07U9PvU4WYi
+ VY5W4xyuZqxSOshjasYWlC+/5yR8z2NlY27edtGudX0TWtasr9zFZ20GqWulebF0dZm5yOxL2FZDHaqC
+ ppM8iRcVchkzP/nKCXXJPOf/ADj1J5EbS5PPUms67J5dS+eGJ5F/QF6WWF50kRJXrxgaRGjWcxl1YVBJ
+ QFHRPzJ8oT6J+Tnl38jfM+i+RbTzX5m1Dy75r0S/tYbnVrG/XSNRvJPrkUk6ObsXlqiuzlvWeRW5uGHN
+ VILf/nIDzTf3HnWw0fzbomp3MFpbTaLFdS2OlzLcJ5kfSLu1gWRbhLaRoPTWIXvqUmdHm9OJwgVTfSvz
+ 6vrrzP5AspPOdokGrHRRq2iapbWdlcSw6vLfwluCPJJLIkkMSiSDhbrQ/FN6icW1p6D/AM5C+YPKXmb/
+ AJxj/NPzBpms6Xr3l3U/KupnR9XgmhuLWedY5I4vRlBZGcTLxXia8htvirx/QPzRsPJumfnBPqOh6Sn/
+ ADkboOjTaja2sHC5tdY0WNXbSZND9H03lsIoqE26ESBg3qEu/qFQybUvza85Q+bNC8t6R580m68r6z5v
+ 0zSdP8+z2ltKLi01LQNR1KaCsckMBltprWHiyqPhmjV1Yg81KV+Wfzq86+ZLr8vbabzRaFPM+g28N1No
+ cdlNcLq8qakpknsZo5ZkWY2yNDJCZIkZJUmjCkMoKsU8n/8AOQOp2OjfklYN+Y1jqTX3lzyK3mltUa19
+ R5NbM9rqEsk7ES3LxSxKg9PgInDCd5ZHVAhVLVfzq896l5R1mG5/MOxY655J8y69b3+jQ21pcad+gvMF
+ tYAiQtPVZ7S5cs/wlRHyShq+FWdX/wCZ2r2vnXXdI8t+fvLdvHqfnny3pB1v6hZyTz2eo6B9YMlw0csQ
+ mlrEvGQ0HHioUKKFVlWo+aLTz/8A840fpbzj5yttBbVJbXStS86WsUUlml5DrcdhDcXEDOIjbTTIhuI2
+ YIYXdSQuKvNPKnnXzF5dubDyxZf4W8hat5m/NM6L528xeXEhutE1dp/K73f6Q01JSi28tbKBJYm58ZWq
+ xbnQqusP+cgfPen6Bpetaj5l0bzAdb8q2Or6iYLWK3i0dBr1tpN9qHFZZHaOG0me4kDkqGjLfDFVVVT+
+ 7/MLUJPMmiXV/JYeZ9a8o+bvM+l/lxrarDHP5htYPKkt6ET0PhdhcSfV5GhVUaRBRVb4Qqlul/nb5u1q
+ byI+lfmr5Vv9J85+Z9O0ufUre2W4l09bzQ9Tvbq0nLJaRxzRXFnFwiblLEJFWfnVfUVXaN+d3mHzCnke
+ 38xeYdKutD8yeW44vMS2Is3D3ssWpCc39nIDPHDOtqpjlgdo0KTLMqqVdVUk/Jn8z/Nd/wDkLp/+GtWE
+ Hmz8r/KnlmZvy3ihtLm4vtDtNOtXmuLeVlLPJeQpKIiDSGYelIrFTir7H/LrWtR8zeV7XzRfySG38zTz
+ 6n5ft5ohDJDpNxIW05ZE4IwdrfhIwcclZihJ41wqzrcnFVvBafTir//R+3ZUVOKu4jFXcRiruIxV3EYq
+ 7iMVdxGKu4jFXcRiruIxV3EYq7iMVdxGKu4jFXcRiruIxV3EYq7iMVdxGKu4jFXcRiruIxV3EYq7iMVd
+ xGKu4jFXcRiruIxV3EYq7iMVdxGKu4jFXcRiruIxV3EYq7iMVdxGKu4jFXcRiruIxV3EYq7iMVdxGKu4
+ jFXcRiruIxV3EYq4inhig2sxRZdhAZOxpW8aRTVPc40tOp7nGlp1Pc4KWmuIxS7iMVdxGKu4jFXcRiru
+ IxV3EYq7iMVbC9cUEuof5V+/FjZdQ/yr9+K2WmIG1B88WQU6A4pdQYq0VBFMVWFdzirXEYq7iMVcVBxV
+ YVpiruI+jFVMpTsSO+KKa9P/ACThBWmuG3Q4bS7gPlhVYkUMZcxxiMytzkKgDkxAHI06mgG+CkU08MMj
+ h3iR3UEI5UEgNQkAnxoMKW2UE1BqMVWcRiqi9payI8b20Txy1MkbICrVPI1BG9TvgtWxb244kQIOAVUo
+ o2CbqB7DtjaoHR9F0vQNPh0rSLRbKxgeWRIVZmJknkaaaR3cszvJI7O7MSzMSxJJwWqZFQak742qGigh
+ hRUijESAkhEAAqxqdh4k1ySKWm2tjMLgwIbhRxWfiOYB7cutMVpv0Leob0l5AAA8RWgPIfjvja0qmNGV
+ lZeQYUKkVBB7HFLsVU3iSReLqHWoPFgCKg1B38CMBVZFaxQRrFBGkESV9OGNQqipqaAUHU4VXekGqCKj
+ uDgJpWo4kiRY4o1jjQBUjUAKAOgAHTIksVqwxopEUaxhmLuFAFWY1LGnc98QU2sa0hMiz+jGZ1BCzcQX
+ APUBuu+G1tjvmrytZ+bdKbRtQvtRsbGaRWvBpt09pJPEAVe3kkjo3pyKxDAEE9iMCWTQxxxxpFGixxQq
+ EjjUAKqgUAAGwAGNoKqoFeuEJX0HH6ckr//S+3p64q1irsVdirsVdirsVdirsVdirsVdirsVdirsVdir
+ sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVaJ7
+ DFBW4odirWG0h2BLsINK7G1dgV2KuxV2KuxV2KLdituxW3YrbeKHYqtavh8jikLMUuxVx2xVby9sVW4q
+ 7FXVpiq3kMVaJrirWKuxV2KuxVqg7gfPFVMgA7dO2TVaRXpiqzicVcQTgIVbkVdirsVdiq3gtTtirdAO
+ 2KtcVPYHFVrADoPnhCrMkrsVdirsVdgpFNcRjS0338MaS7gKV/DGlb298aRTWFK7+uKv/9P7enrirWKu
+ xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku
+ xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVaO/zOLEtYq7FWsUh2KXYq7FXYq7FXYq7FXYq3ixdirsVdirs
+ Vdiq1umKhZiydirR6YqsxV2KuxVTPU4q7FXYq7FXYq7FXYq032Tiqjk1dirsVdiqlkSrsCuxV2KuxV2K
+ uxVRbr3+nJBWsKuxV2KuxV2KtYoLeKXYquP0fRiq3FWu3frir//Z
diff --git a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationPresenter.cs b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationPresenter.cs
index feaf798..e8fbcb3 100644
--- a/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationPresenter.cs
+++ b/Solution/ContosoProject/ContosoUI/Authentication/AuthenticationPresenter.cs
@@ -11,11 +11,12 @@
namespace ContosoUI.Authentication
{
- public class AuthenticationPresenter : BaseMD5
+ public class AuthenticationPresenter
{
IUserRepository model = null;
AuthenticationForm view = null;
- public User user = null;
+ User user = null;
+ public User User { get { return this.user; } }
public AuthenticationPresenter(AuthenticationForm view)
{
@@ -27,7 +28,7 @@ public AuthenticationPresenter(AuthenticationForm view)
void OkButtonClickHendler(object sender, System.EventArgs e)
{
- if (model.TryFindByLoginPassword(out this.user, view.Login, view.Password == "admin"?"admin":GetMd5Hash(view.Password)))
+ if (model.TryFindByLoginPassword(out this.user, view.Login, view.Password.ToMD5()))
{
if (user.IsActive)
{
@@ -36,14 +37,14 @@ void OkButtonClickHendler(object sender, System.EventArgs e)
}
else
{
- MessageBox.Show("Извините, данный аккаунт не активен.", "Ошибка!");
+ view.UserIsNotActiveDialog();
view.FieldsReset();
}
}
else
{
- MessageBox.Show("Неверный логин и/или пароль", "Ошибка!");
+ view.AccessDenyDialog();
view.PasswordReset();
}
}
diff --git a/Solution/ContosoProject/ContosoUI/Authentication/BaseMD5.cs b/Solution/ContosoProject/ContosoUI/Authentication/MD5Extension.cs
similarity index 68%
rename from Solution/ContosoProject/ContosoUI/Authentication/BaseMD5.cs
rename to Solution/ContosoProject/ContosoUI/Authentication/MD5Extension.cs
index 5889667..bdd85cd 100644
--- a/Solution/ContosoProject/ContosoUI/Authentication/BaseMD5.cs
+++ b/Solution/ContosoProject/ContosoUI/Authentication/MD5Extension.cs
@@ -7,12 +7,12 @@
namespace ContosoUI.Authentication
{
- public class BaseMD5
+ public static class MD5Extension
{
- protected string GetMd5Hash(string input)
+ public static string ToMD5(this string input)
{
- MD5 md5Hash = MD5.Create();
- byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
+ MD5 md = MD5.Create();
+ byte[] data = md.ComputeHash(Encoding.UTF8.GetBytes(input));
StringBuilder sBuilder = new StringBuilder();
foreach (var d in data)
{
diff --git a/Solution/ContosoProject/ContosoUI/ContosoUI.csproj b/Solution/ContosoProject/ContosoUI/ContosoUI.csproj
index 652b143..985c20b 100644
--- a/Solution/ContosoProject/ContosoUI/ContosoUI.csproj
+++ b/Solution/ContosoProject/ContosoUI/ContosoUI.csproj
@@ -33,24 +33,60 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
False
..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll
@@ -58,11 +94,19 @@
..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll
+
+ ..\packages\EntityFramework.SqlServerCompact.6.1.3\lib\net45\EntityFramework.SqlServerCompact.dll
+ True
+
+
+ ..\packages\Microsoft.SqlServer.Compact.4.0.8876.1\lib\net40\System.Data.SqlServerCe.dll
+ True
+
@@ -84,7 +128,9 @@
AuthenticationForm.cs
-
+
+
+
Form
@@ -100,35 +146,42 @@
CustomersListViev.cs
-
+
Form
-
- AddGoods.cs
+
+ AddGoodsView.cs
-
+
Form
-
- GoodsForm.cs
+
+ GoodsFormView.cs
-
-
-
+
+
+
+
Form
-
- AddOrderXtraForm.cs
+
+ AddEditOrderView.cs
-
Form
-
+
SearchView.cs
+
+
+ Form
+
+
+ ProductCategoryView.cs
+
Form
@@ -178,18 +231,21 @@
CustomersListViev.cs
-
- AddGoods.cs
+
+ AddGoodsView.cs
-
- GoodsForm.cs
+
+ GoodsFormView.cs
-
- AddOrderXtraForm.cs
+
+ AddEditOrderView.cs
SearchView.cs
+
+ ProductCategoryView.cs
+
UserEditForm.cs
@@ -217,11 +273,15 @@
+
+
+
+
CustomerListView.cs
@@ -229,6 +289,7 @@
OrderListView.cs
+
@@ -242,7 +303,9 @@
-
+
+ Designer
+
@@ -256,6 +319,13 @@
+
+
+ if not exist "$(TargetDir)x86" md "$(TargetDir)x86"
+ xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\x86\*.*" "$(TargetDir)x86"
+ if not exist "$(TargetDir)amd64" md "$(TargetDir)amd64"
+ xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\amd64\*.*" "$(TargetDir)amd64"
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsPresenter.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsPresenter.cs
index 347f50f..a2ccd20 100644
--- a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsPresenter.cs
+++ b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsPresenter.cs
@@ -1,89 +1,166 @@
using Data.DumbData;
+using Data.EFData;
using Domain.DAO;
using Domain.Entities;
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ContosoUI.GoodsAll.AddGoods
{
- public class AddGoodsPresenter
+ public class AddGoodsPresenter : INotifyPropertyChanged
{
AddGoods view;
- IGoodsRepository model = new GoodsDao();
+ public GoodsCategoryService service = new GoodsCategoryService();
+
Goods thisGoods;
- public List productCategoryList = new List();
- public List Comments { get { return thisGoods.Coments; } set { } }
+ public List Categories { get; private set; }
+ public List Comments { get { return thisGoods.Coments.ToList(); } set { } }
public AddGoodsPresenter(AddGoods view, int id)
{
- foreach (ProductCategory pc in Storage.categoryCollection)
- {
- productCategoryList.Add(pc.CategoryName);
- }
+ Categories = new List();
+ Categories.AddRange(service.CategoryDao.GetAll());
+
this.view = view;
if (id < 1)
{
- thisGoods = new Goods();
+ thisGoods = new Goods() { Category = Categories[0]};
}
else
{
- thisGoods = model.GetById(id);
+ thisGoods = service.GoodsDao.GetById(id);
}
}
public string Name
{
get { return thisGoods.Name; }
- set { thisGoods.Name = value; }
+
+ set
+ {
+ if (thisGoods.Name != value)
+ {
+ thisGoods.Name = value;
+ NotifyPropertyChanged("Name");
+ }
+ }
}
public string SKU
{
get { return thisGoods.SKU; }
- set { thisGoods.SKU = value; }
+ set
+ {
+ if (thisGoods.SKU != value)
+ {
+ thisGoods.SKU = value;
+ NotifyPropertyChanged("SKU");
+ }
+ }
}
public double Price
{
get { return thisGoods.Price; }
- set { thisGoods.Price = value; }
+ set
+ {
+ if (thisGoods.Price != value)
+ {
+ thisGoods.Price = value;
+ NotifyPropertyChanged("Price");
+ }
+ }
}
public int Count
{
get { return thisGoods.Count; }
- set { thisGoods.Count = value; }
+ set
+ {
+ if (thisGoods.Count != value)
+ {
+ thisGoods.Count = value;
+ NotifyPropertyChanged("Count");
+ }
+ }
}
- public string Category
+ public ProductCategory Category
{
- get { return thisGoods.Category.CategoryName; }
- set { thisGoods.Category.CategoryName = value; }
+ get { return thisGoods.Category; }
+ set
+ {
+ if (thisGoods.Category != value)
+ {
+ thisGoods.Category = value;
+ NotifyPropertyChanged("Category");
+ }
+ }
}
- public string Coments
+ public bool IsActive
{
- get { return thisGoods.Coments.ToString(); }
- //set { thisGoods.Coments = value; }
+ get { return thisGoods.IsActive; }
+ set
+ {
+ if (thisGoods.IsActive != value)
+ {
+ thisGoods.IsActive = value;
+ NotifyPropertyChanged("IsActive");
+ }
+ }
}
- public bool IsActive
+ private string currentComment = string.Empty;
+ public string CurentComment
{
- get { return thisGoods.IsActive; }
- set { thisGoods.IsActive = value; }
+ get { return currentComment; }
+ set
+ {
+ if (currentComment != value)
+ {
+ currentComment = value;
+
+ } NotifyPropertyChanged("CurentComment");
+ }
}
- public void Save(Goods goods)
+ public void Save()
{
- model.Add(goods);
+ //когда попадаю сюда, нективный товар становится активным
+ if (!string.IsNullOrWhiteSpace(currentComment))
+ {
+ thisGoods.Coments.Add(new Comment() { Message = currentComment, Type = CommentType.Goods });
+ currentComment = string.Empty;
+ }
+ if (thisGoods.Id > 0)
+ {
+ service.GoodsDao.Update(thisGoods);
+ }
+ else
+ {
+ service.GoodsDao.Add(thisGoods);
+ }
+ NotifyPropertyChanged("Save");
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+ private void NotifyPropertyChanged(String info)
+ {
+ if (PropertyChanged != null)
+ {
+ PropertyChanged(this, new PropertyChangedEventArgs(info));
+ }
}
- public void Update(Goods goods)
+ public void SaveAndNew(Goods g)
{
- model.Update(goods);
+ this.Save();
+ NotifyPropertyChanged("New goods");
}
}
}
diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoods.Designer.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.Designer.cs
similarity index 55%
rename from Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoods.Designer.cs
rename to Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.Designer.cs
index bbd009a..ae49c31 100644
--- a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoods.Designer.cs
+++ b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.Designer.cs
@@ -28,50 +28,60 @@ protected override void Dispose(bool disposing)
///
private void InitializeComponent()
{
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddGoods));
this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+ this.groupControl4 = new DevExpress.XtraEditors.GroupControl();
+ this.textBox1 = new System.Windows.Forms.TextBox();
this.groupControl2 = new DevExpress.XtraEditors.GroupControl();
+ this.addGoodsCheckBoxIsActive = new DevExpress.XtraEditors.CheckEdit();
+ this.ribbonControl1 = new DevExpress.XtraBars.Ribbon.RibbonControl();
+ this.saveGoodsButton1 = new DevExpress.XtraBars.BarButtonItem();
+ this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();
+ this.saveOrEditribbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+ this.label7 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
this.AddGoodsTextBoxUser = new DevExpress.XtraEditors.TextEdit();
- this.AddGoodsTextBoxCount = new DevExpress.XtraEditors.TextEdit();
- this.AddGoodsTextBoxPrice = new DevExpress.XtraEditors.TextEdit();
+ this.addGoodsTextBoxCount = new DevExpress.XtraEditors.TextEdit();
+ this.addGoodsTextBoxPrice = new DevExpress.XtraEditors.TextEdit();
this.groupControl1 = new DevExpress.XtraEditors.GroupControl();
+ this.addGoodsLookUpEditCategory = new DevExpress.XtraEditors.LookUpEdit();
+ this.productCategoryBindingSource = new System.Windows.Forms.BindingSource(this.components);
+ this.label4 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
- this.AddGoodsComboBoxEditCategory = new DevExpress.XtraEditors.ComboBoxEdit();
- this.AddGoodsTextBoxSKU = new DevExpress.XtraEditors.TextEdit();
- this.AddGoodsTextBoxName = new DevExpress.XtraEditors.TextEdit();
+ this.addGoodsTextBoxComent = new DevExpress.XtraEditors.TextEdit();
+ this.addGoodsTextBoxSKU = new DevExpress.XtraEditors.TextEdit();
+ this.addGoodsTextBoxName = new DevExpress.XtraEditors.TextEdit();
this.layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
- this.AddGoodsCheckBoxIsActive = new System.Windows.Forms.CheckBox();
- this.AddGoodsSaveButton = new System.Windows.Forms.Button();
- this.groupControl4 = new DevExpress.XtraEditors.GroupControl();
this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
- this.textBox1 = new System.Windows.Forms.TextBox();
- this.AddGoodsTextBoxComent = new DevExpress.XtraEditors.TextEdit();
- this.label2 = new System.Windows.Forms.Label();
- 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.label7 = new System.Windows.Forms.Label();
+ this.saveGoodsButton = new DevExpress.XtraBars.BarButtonItem();
((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
this.layoutControl1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.groupControl4)).BeginInit();
+ this.groupControl4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.groupControl2)).BeginInit();
this.groupControl2.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsCheckBoxIsActive.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxUser.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxCount.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxPrice.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxCount.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxPrice.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit();
this.groupControl1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsComboBoxEditCategory.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxSKU.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxName.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsLookUpEditCategory.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.productCategoryBindingSource)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxComent.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxSKU.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxName.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.groupControl4)).BeginInit();
- this.groupControl4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxComent.Properties)).BeginInit();
this.SuspendLayout();
//
// layoutControl1
@@ -84,63 +94,208 @@ private void InitializeComponent()
this.layoutControl1.Name = "layoutControl1";
this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(491, 311, 250, 350);
this.layoutControl1.Root = this.layoutControlGroup1;
- this.layoutControl1.Size = new System.Drawing.Size(725, 353);
+ this.layoutControl1.Size = new System.Drawing.Size(725, 380);
this.layoutControl1.TabIndex = 11;
this.layoutControl1.Text = "layoutControl1";
//
+ // groupControl4
+ //
+ this.groupControl4.Controls.Add(this.textBox1);
+ this.groupControl4.Location = new System.Drawing.Point(12, 224);
+ this.groupControl4.Name = "groupControl4";
+ this.groupControl4.Size = new System.Drawing.Size(701, 144);
+ this.groupControl4.TabIndex = 1;
+ this.groupControl4.Text = "История коментариев";
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(5, 23);
+ this.textBox1.Multiline = true;
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(691, 117);
+ this.textBox1.TabIndex = 0;
+ //
// groupControl2
//
+ this.groupControl2.Controls.Add(this.addGoodsCheckBoxIsActive);
this.groupControl2.Controls.Add(this.label7);
this.groupControl2.Controls.Add(this.label6);
this.groupControl2.Controls.Add(this.label5);
- this.groupControl2.Controls.Add(this.AddGoodsSaveButton);
- this.groupControl2.Controls.Add(this.AddGoodsCheckBoxIsActive);
this.groupControl2.Controls.Add(this.AddGoodsTextBoxUser);
- this.groupControl2.Controls.Add(this.AddGoodsTextBoxCount);
- this.groupControl2.Controls.Add(this.AddGoodsTextBoxPrice);
+ this.groupControl2.Controls.Add(this.addGoodsTextBoxCount);
+ this.groupControl2.Controls.Add(this.addGoodsTextBoxPrice);
this.groupControl2.Location = new System.Drawing.Point(367, 12);
this.groupControl2.Name = "groupControl2";
- this.groupControl2.Size = new System.Drawing.Size(346, 180);
+ this.groupControl2.Size = new System.Drawing.Size(346, 208);
this.groupControl2.TabIndex = 5;
this.groupControl2.Text = "Данные товара";
//
+ // addGoodsCheckBoxIsActive
+ //
+ this.addGoodsCheckBoxIsActive.EditValue = true;
+ this.addGoodsCheckBoxIsActive.Location = new System.Drawing.Point(6, 148);
+ this.addGoodsCheckBoxIsActive.MenuManager = this.ribbonControl1;
+ this.addGoodsCheckBoxIsActive.Name = "addGoodsCheckBoxIsActive";
+ this.addGoodsCheckBoxIsActive.Properties.Caption = "Активный";
+ this.addGoodsCheckBoxIsActive.Size = new System.Drawing.Size(75, 19);
+ this.addGoodsCheckBoxIsActive.TabIndex = 7;
+ this.addGoodsCheckBoxIsActive.CheckedChanged += new System.EventHandler(this.addGoodsCheckBoxIsActive_CheckedChanged);
+ //
+ // ribbonControl1
+ //
+ this.ribbonControl1.Dock = System.Windows.Forms.DockStyle.None;
+ this.ribbonControl1.ExpandCollapseItem.Id = 0;
+ this.ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] {
+ this.ribbonControl1.ExpandCollapseItem,
+ this.saveGoodsButton1});
+ this.ribbonControl1.Location = new System.Drawing.Point(0, -1);
+ this.ribbonControl1.MaxItemId = 3;
+ this.ribbonControl1.Name = "ribbonControl1";
+ this.ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] {
+ this.mainRibbonPage});
+ this.ribbonControl1.Size = new System.Drawing.Size(713, 141);
+ //
+ // saveGoodsButton1
+ //
+ this.saveGoodsButton1.Caption = "Сохранить";
+ this.saveGoodsButton1.Glyph = ((System.Drawing.Image)(resources.GetObject("saveGoodsButton1.Glyph")));
+ this.saveGoodsButton1.Id = 2;
+ this.saveGoodsButton1.Name = "saveGoodsButton1";
+ this.saveGoodsButton1.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large;
+ this.saveGoodsButton1.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveGoodsButton1_ItemClick);
+ //
+ // mainRibbonPage
+ //
+ this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
+ this.saveOrEditribbonPageGroup});
+ this.mainRibbonPage.MergeOrder = 1;
+ this.mainRibbonPage.Name = "mainRibbonPage";
+ this.mainRibbonPage.Text = "Меню";
+ //
+ // saveOrEditribbonPageGroup
+ //
+ this.saveOrEditribbonPageGroup.ItemLinks.Add(this.saveGoodsButton1);
+ this.saveOrEditribbonPageGroup.MergeOrder = 5;
+ this.saveOrEditribbonPageGroup.Name = "saveOrEditribbonPageGroup";
+ this.saveOrEditribbonPageGroup.Text = "Сохранение";
+ //
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.Location = new System.Drawing.Point(8, 96);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(79, 13);
+ this.label7.TabIndex = 6;
+ this.label7.Text = "Пользователь";
+ this.label7.Visible = false;
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Location = new System.Drawing.Point(8, 59);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(67, 13);
+ this.label6.TabIndex = 5;
+ this.label6.Text = "Количество";
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Location = new System.Drawing.Point(5, 20);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(33, 13);
+ this.label5.TabIndex = 4;
+ this.label5.Text = "Цена";
+ //
// AddGoodsTextBoxUser
//
this.AddGoodsTextBoxUser.Location = new System.Drawing.Point(6, 112);
this.AddGoodsTextBoxUser.Name = "AddGoodsTextBoxUser";
this.AddGoodsTextBoxUser.Size = new System.Drawing.Size(335, 20);
this.AddGoodsTextBoxUser.TabIndex = 2;
+ this.AddGoodsTextBoxUser.Visible = false;
//
- // AddGoodsTextBoxCount
+ // addGoodsTextBoxCount
//
- this.AddGoodsTextBoxCount.Location = new System.Drawing.Point(5, 74);
- this.AddGoodsTextBoxCount.Name = "AddGoodsTextBoxCount";
- this.AddGoodsTextBoxCount.Size = new System.Drawing.Size(336, 20);
- this.AddGoodsTextBoxCount.TabIndex = 1;
+ this.addGoodsTextBoxCount.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.addGoodsTextBoxCount.Location = new System.Drawing.Point(5, 74);
+ this.addGoodsTextBoxCount.Name = "addGoodsTextBoxCount";
+ this.addGoodsTextBoxCount.Size = new System.Drawing.Size(336, 20);
+ this.addGoodsTextBoxCount.TabIndex = 1;
//
- // AddGoodsTextBoxPrice
+ // addGoodsTextBoxPrice
//
- this.AddGoodsTextBoxPrice.Location = new System.Drawing.Point(6, 36);
- this.AddGoodsTextBoxPrice.Name = "AddGoodsTextBoxPrice";
- this.AddGoodsTextBoxPrice.Size = new System.Drawing.Size(335, 20);
- this.AddGoodsTextBoxPrice.TabIndex = 0;
+ this.addGoodsTextBoxPrice.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.addGoodsTextBoxPrice.Location = new System.Drawing.Point(6, 36);
+ this.addGoodsTextBoxPrice.Name = "addGoodsTextBoxPrice";
+ this.addGoodsTextBoxPrice.Size = new System.Drawing.Size(335, 20);
+ this.addGoodsTextBoxPrice.TabIndex = 0;
//
// groupControl1
//
+ this.groupControl1.Controls.Add(this.addGoodsLookUpEditCategory);
this.groupControl1.Controls.Add(this.label4);
this.groupControl1.Controls.Add(this.label3);
this.groupControl1.Controls.Add(this.label2);
this.groupControl1.Controls.Add(this.label1);
- this.groupControl1.Controls.Add(this.AddGoodsComboBoxEditCategory);
- this.groupControl1.Controls.Add(this.AddGoodsTextBoxComent);
- this.groupControl1.Controls.Add(this.AddGoodsTextBoxSKU);
- this.groupControl1.Controls.Add(this.AddGoodsTextBoxName);
+ this.groupControl1.Controls.Add(this.addGoodsTextBoxComent);
+ this.groupControl1.Controls.Add(this.addGoodsTextBoxSKU);
+ this.groupControl1.Controls.Add(this.addGoodsTextBoxName);
this.groupControl1.Location = new System.Drawing.Point(12, 12);
this.groupControl1.Name = "groupControl1";
- this.groupControl1.Size = new System.Drawing.Size(351, 180);
+ this.groupControl1.Size = new System.Drawing.Size(351, 208);
this.groupControl1.TabIndex = 4;
this.groupControl1.Text = "Описание товара";
//
+ // addGoodsLookUpEditCategory
+ //
+ this.addGoodsLookUpEditCategory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.addGoodsLookUpEditCategory.Location = new System.Drawing.Point(5, 112);
+ this.addGoodsLookUpEditCategory.MenuManager = this.ribbonControl1;
+ this.addGoodsLookUpEditCategory.Name = "addGoodsLookUpEditCategory";
+ this.addGoodsLookUpEditCategory.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+ new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+ this.addGoodsLookUpEditCategory.Properties.Columns.AddRange(new DevExpress.XtraEditors.Controls.LookUpColumnInfo[] {
+ new DevExpress.XtraEditors.Controls.LookUpColumnInfo("CategoryName", "Category Name", 98, DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Near)});
+ this.addGoodsLookUpEditCategory.Properties.DataSource = this.productCategoryBindingSource;
+ this.addGoodsLookUpEditCategory.Properties.DisplayMember = "CategoryName";
+ this.addGoodsLookUpEditCategory.Size = new System.Drawing.Size(341, 20);
+ this.addGoodsLookUpEditCategory.TabIndex = 7;
+ //
+ // productCategoryBindingSource
+ //
+ this.productCategoryBindingSource.DataSource = typeof(Domain.Entities.ProductCategory);
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(6, 133);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(68, 13);
+ this.label4.TabIndex = 7;
+ this.label4.Text = "Каментарий";
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(6, 98);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(61, 13);
+ this.label3.TabIndex = 6;
+ this.label3.Text = "Категория";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(7, 59);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(50, 13);
+ this.label2.TabIndex = 5;
+ this.label2.Text = "Артикул";
+ //
// label1
//
this.label1.AutoSize = true;
@@ -150,29 +305,32 @@ private void InitializeComponent()
this.label1.TabIndex = 4;
this.label1.Text = "Название";
//
- // AddGoodsComboBoxEditCategory
+ // addGoodsTextBoxComent
//
- this.AddGoodsComboBoxEditCategory.Location = new System.Drawing.Point(5, 112);
- this.AddGoodsComboBoxEditCategory.Name = "AddGoodsComboBoxEditCategory";
- this.AddGoodsComboBoxEditCategory.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
- new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
- this.AddGoodsComboBoxEditCategory.Size = new System.Drawing.Size(341, 20);
- this.AddGoodsComboBoxEditCategory.TabIndex = 3;
+ this.addGoodsTextBoxComent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.addGoodsTextBoxComent.Location = new System.Drawing.Point(5, 148);
+ this.addGoodsTextBoxComent.Name = "addGoodsTextBoxComent";
+ this.addGoodsTextBoxComent.Size = new System.Drawing.Size(341, 20);
+ this.addGoodsTextBoxComent.TabIndex = 2;
//
- // AddGoodsTextBoxSKU
+ // addGoodsTextBoxSKU
//
- this.AddGoodsTextBoxSKU.Location = new System.Drawing.Point(5, 74);
- this.AddGoodsTextBoxSKU.Name = "AddGoodsTextBoxSKU";
- this.AddGoodsTextBoxSKU.Size = new System.Drawing.Size(341, 20);
- this.AddGoodsTextBoxSKU.TabIndex = 1;
+ this.addGoodsTextBoxSKU.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.addGoodsTextBoxSKU.Location = new System.Drawing.Point(5, 74);
+ this.addGoodsTextBoxSKU.Name = "addGoodsTextBoxSKU";
+ this.addGoodsTextBoxSKU.Size = new System.Drawing.Size(341, 20);
+ this.addGoodsTextBoxSKU.TabIndex = 1;
//
- // AddGoodsTextBoxName
+ // addGoodsTextBoxName
//
- this.AddGoodsTextBoxName.Location = new System.Drawing.Point(5, 36);
- this.AddGoodsTextBoxName.Name = "AddGoodsTextBoxName";
- this.AddGoodsTextBoxName.Size = new System.Drawing.Size(341, 20);
- this.AddGoodsTextBoxName.TabIndex = 0;
- // this.AddGoodsTextBoxName.EditValueChanged += new System.EventHandler(this.textEdit1_EditValueChanged);
+ this.addGoodsTextBoxName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.addGoodsTextBoxName.Location = new System.Drawing.Point(5, 36);
+ this.addGoodsTextBoxName.Name = "addGoodsTextBoxName";
+ this.addGoodsTextBoxName.Size = new System.Drawing.Size(341, 20);
+ this.addGoodsTextBoxName.TabIndex = 0;
//
// layoutControlGroup1
//
@@ -184,7 +342,7 @@ private void InitializeComponent()
this.layoutControlItem5});
this.layoutControlGroup1.Location = new System.Drawing.Point(0, 0);
this.layoutControlGroup1.Name = "Root";
- this.layoutControlGroup1.Size = new System.Drawing.Size(725, 353);
+ this.layoutControlGroup1.Size = new System.Drawing.Size(725, 380);
this.layoutControlGroup1.TextVisible = false;
//
// layoutControlItem1
@@ -192,7 +350,7 @@ private void InitializeComponent()
this.layoutControlItem1.Control = this.groupControl1;
this.layoutControlItem1.Location = new System.Drawing.Point(0, 0);
this.layoutControlItem1.Name = "layoutControlItem1";
- this.layoutControlItem1.Size = new System.Drawing.Size(355, 184);
+ this.layoutControlItem1.Size = new System.Drawing.Size(355, 212);
this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
this.layoutControlItem1.TextVisible = false;
//
@@ -201,149 +359,65 @@ private void InitializeComponent()
this.layoutControlItem2.Control = this.groupControl2;
this.layoutControlItem2.Location = new System.Drawing.Point(355, 0);
this.layoutControlItem2.Name = "layoutControlItem2";
- this.layoutControlItem2.Size = new System.Drawing.Size(350, 184);
+ this.layoutControlItem2.Size = new System.Drawing.Size(350, 212);
this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
this.layoutControlItem2.TextVisible = false;
//
- // AddGoodsCheckBoxIsActive
- //
- this.AddGoodsCheckBoxIsActive.AutoSize = true;
- this.AddGoodsCheckBoxIsActive.Location = new System.Drawing.Point(6, 151);
- this.AddGoodsCheckBoxIsActive.Name = "AddGoodsCheckBoxIsActive";
- this.AddGoodsCheckBoxIsActive.Size = new System.Drawing.Size(77, 17);
- this.AddGoodsCheckBoxIsActive.TabIndex = 3;
- this.AddGoodsCheckBoxIsActive.Text = "Активный";
- this.AddGoodsCheckBoxIsActive.UseVisualStyleBackColor = true;
- //
- // AddGoodsSaveButton
- //
- this.AddGoodsSaveButton.Location = new System.Drawing.Point(271, 151);
- this.AddGoodsSaveButton.Name = "AddGoodsSaveButton";
- this.AddGoodsSaveButton.Size = new System.Drawing.Size(75, 23);
- this.AddGoodsSaveButton.TabIndex = 1;
- this.AddGoodsSaveButton.Text = "Сохранить";
- this.AddGoodsSaveButton.UseVisualStyleBackColor = true;
- // this.AddGoodsSaveButton.Click += new System.EventHandler(this.AddGoodsSaveButton_Click);
- //
- // groupControl4
- //
- this.groupControl4.Controls.Add(this.textBox1);
- this.groupControl4.Location = new System.Drawing.Point(12, 196);
- this.groupControl4.Name = "groupControl4";
- this.groupControl4.Size = new System.Drawing.Size(701, 145);
- this.groupControl4.TabIndex = 1;
- this.groupControl4.Text = "История коментариев";
- //
// layoutControlItem5
//
this.layoutControlItem5.Control = this.groupControl4;
- this.layoutControlItem5.Location = new System.Drawing.Point(0, 184);
+ this.layoutControlItem5.Location = new System.Drawing.Point(0, 212);
this.layoutControlItem5.Name = "layoutControlItem5";
- this.layoutControlItem5.Size = new System.Drawing.Size(705, 149);
+ this.layoutControlItem5.Size = new System.Drawing.Size(705, 148);
this.layoutControlItem5.TextSize = new System.Drawing.Size(0, 0);
this.layoutControlItem5.TextVisible = false;
//
- // textBox1
- //
- this.textBox1.Location = new System.Drawing.Point(5, 23);
- this.textBox1.Multiline = true;
- this.textBox1.Name = "textBox1";
- this.textBox1.Size = new System.Drawing.Size(691, 117);
- this.textBox1.TabIndex = 0;
- //
- // AddGoodsTextBoxComent
- //
- this.AddGoodsTextBoxComent.Location = new System.Drawing.Point(5, 148);
- this.AddGoodsTextBoxComent.Name = "AddGoodsTextBoxComent";
- this.AddGoodsTextBoxComent.Size = new System.Drawing.Size(341, 20);
- this.AddGoodsTextBoxComent.TabIndex = 2;
- //this.AddGoodsTextBoxComent.EditValueChanged += new System.EventHandler(this.textEdit3_EditValueChanged);
- //
- // label2
- //
- this.label2.AutoSize = true;
- this.label2.Location = new System.Drawing.Point(7, 59);
- this.label2.Name = "label2";
- this.label2.Size = new System.Drawing.Size(50, 13);
- this.label2.TabIndex = 5;
- this.label2.Text = "Артикул";
+ // saveGoodsButton
//
- // label3
- //
- this.label3.AutoSize = true;
- this.label3.Location = new System.Drawing.Point(6, 98);
- this.label3.Name = "label3";
- this.label3.Size = new System.Drawing.Size(61, 13);
- this.label3.TabIndex = 6;
- this.label3.Text = "Категория";
- //
- // label4
- //
- this.label4.AutoSize = true;
- this.label4.Location = new System.Drawing.Point(6, 133);
- this.label4.Name = "label4";
- this.label4.Size = new System.Drawing.Size(68, 13);
- this.label4.TabIndex = 7;
- this.label4.Text = "Каментарий";
- //
- // label5
- //
- this.label5.AutoSize = true;
- this.label5.Location = new System.Drawing.Point(5, 20);
- this.label5.Name = "label5";
- this.label5.Size = new System.Drawing.Size(33, 13);
- this.label5.TabIndex = 4;
- this.label5.Text = "Цена";
- //
- // label6
- //
- this.label6.AutoSize = true;
- this.label6.Location = new System.Drawing.Point(8, 59);
- this.label6.Name = "label6";
- this.label6.Size = new System.Drawing.Size(67, 13);
- this.label6.TabIndex = 5;
- this.label6.Text = "Количество";
- //
- // label7
- //
- this.label7.AutoSize = true;
- this.label7.Location = new System.Drawing.Point(8, 96);
- this.label7.Name = "label7";
- this.label7.Size = new System.Drawing.Size(79, 13);
- this.label7.TabIndex = 6;
- this.label7.Text = "Пользователь";
+ this.saveGoodsButton.Caption = "Сохранить";
+ this.saveGoodsButton.Glyph = ((System.Drawing.Image)(resources.GetObject("saveGoodsButton.Glyph")));
+ this.saveGoodsButton.Id = 1;
+ this.saveGoodsButton.MergeOrder = 1;
+ this.saveGoodsButton.Name = "saveGoodsButton";
+ this.saveGoodsButton.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large;
+ this.saveGoodsButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveGoodsButton_ItemClick);
//
// AddGoods
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(725, 353);
+ this.ClientSize = new System.Drawing.Size(725, 380);
+ this.Controls.Add(this.ribbonControl1);
this.Controls.Add(this.layoutControl1);
this.Name = "AddGoods";
this.Text = "AddGoods";
((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
this.layoutControl1.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.groupControl4)).EndInit();
+ this.groupControl4.ResumeLayout(false);
+ this.groupControl4.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.groupControl2)).EndInit();
this.groupControl2.ResumeLayout(false);
this.groupControl2.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsCheckBoxIsActive.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxUser.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxCount.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxPrice.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxCount.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxPrice.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit();
this.groupControl1.ResumeLayout(false);
this.groupControl1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsComboBoxEditCategory.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxSKU.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxName.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsLookUpEditCategory.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.productCategoryBindingSource)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxComent.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxSKU.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.addGoodsTextBoxName.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.groupControl4)).EndInit();
- this.groupControl4.ResumeLayout(false);
- this.groupControl4.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.AddGoodsTextBoxComent.Properties)).EndInit();
this.ResumeLayout(false);
+ this.PerformLayout();
}
@@ -356,23 +430,28 @@ private void InitializeComponent()
private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxUser;
- private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxCount;
- private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxPrice;
+ private DevExpress.XtraEditors.TextEdit addGoodsTextBoxCount;
+ private DevExpress.XtraEditors.TextEdit addGoodsTextBoxPrice;
private System.Windows.Forms.Label label1;
- private DevExpress.XtraEditors.ComboBoxEdit AddGoodsComboBoxEditCategory;
- private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxSKU;
- private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxName;
- private System.Windows.Forms.Button AddGoodsSaveButton;
- private System.Windows.Forms.CheckBox AddGoodsCheckBoxIsActive;
+ private DevExpress.XtraEditors.TextEdit addGoodsTextBoxSKU;
+ private DevExpress.XtraEditors.TextEdit addGoodsTextBoxName;
private DevExpress.XtraEditors.GroupControl groupControl4;
private System.Windows.Forms.TextBox textBox1;
private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
- private DevExpress.XtraEditors.TextEdit AddGoodsTextBoxComent;
+ private DevExpress.XtraEditors.TextEdit addGoodsTextBoxComent;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
+ private DevExpress.XtraBars.Ribbon.RibbonControl ribbonControl1;
+ private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage;
+ private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveOrEditribbonPageGroup;
+ private DevExpress.XtraEditors.LookUpEdit addGoodsLookUpEditCategory;
+ private System.Windows.Forms.BindingSource productCategoryBindingSource;
+ private DevExpress.XtraEditors.CheckEdit addGoodsCheckBoxIsActive;
+ private DevExpress.XtraBars.BarButtonItem saveGoodsButton1;
+ private DevExpress.XtraBars.BarButtonItem saveGoodsButton;
}
}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.cs
new file mode 100644
index 0000000..33650f0
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.cs
@@ -0,0 +1,116 @@
+using DevExpress.XtraEditors;
+using Domain.Entities;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ContosoUI.GoodsAll.AddGoods
+{
+ public partial class AddGoods : XtraForm
+ {
+ private readonly AddGoodsPresenter presenter;
+ int idGoods;
+ BindingSource bs;
+
+ public AddGoods(int id = -1)
+ {
+ InitializeComponent();
+ presenter = new AddGoodsPresenter(this, id);
+ bs = new BindingSource();
+ bs.DataSource = presenter;
+ this.Text = "Редактировать товар";
+ // addGoodsCheckBoxIsActive.Checked = true;
+ if (presenter.Categories.Count < 1)
+ {
+ MessageBox.Show("Нет категорий товаров. Невозможно добавить новый товар");
+ //return;
+ }
+
+ else
+ {
+ addGoodsTextBoxName.DataBindings.Add("EditValue", bs, "Name");
+ addGoodsTextBoxSKU.DataBindings.Add("EditValue", bs, "SKU");
+ addGoodsTextBoxCount.DataBindings.Add("EditValue", bs, "Count");
+ addGoodsTextBoxPrice.DataBindings.Add("EditValue", bs, "Price");
+
+ addGoodsLookUpEditCategory.Properties.DataSource = presenter.Categories;
+ addGoodsLookUpEditCategory.DataBindings.Add("EditValue", bs, "Category");
+
+ addGoodsTextBoxComent.DataBindings.Add("EditValue", bs, "CurentComment");
+
+ addGoodsCheckBoxIsActive.DataBindings.Add("EditValue", bs, "IsActive");
+
+ }
+
+ }
+
+
+ private void saveGoodsButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ {
+
+
+ }
+
+ private void addGoodsCheckBoxIsActive_CheckedChanged(object sender, EventArgs e)
+ {
+ bs.EndEdit();
+ }
+
+ private void saveGoodsButton1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ {
+ if (addGoodsTextBoxName.Text == "" || addGoodsTextBoxSKU.Text == "" || addGoodsTextBoxPrice.Text == "" ||
+ addGoodsTextBoxCount.Text == "")
+ { MessageBox.Show("Вы заполнили не все поля");
+ return;
+ }
+ if (addGoodsTextBoxName.Text.Length > 255)
+ { MessageBox.Show("Значие поля Название слишком длинное");
+ return;
+ }
+
+ if (addGoodsTextBoxSKU.Text.Length > 50)
+ { MessageBox.Show("Значение поля Артикул слишком длинное");
+ return;
+ }
+ double price;
+ Int16 count;
+ Goods goods = new Goods();
+ goods.Name = addGoodsTextBoxName.Text;
+ goods.SKU = addGoodsTextBoxSKU.Text;
+ if (!Double.TryParse(addGoodsTextBoxPrice.Text, out price))
+ { MessageBox.Show("Вы заполнили поле Цена неправильно");
+ return;
+ };
+ goods.Price = price;
+ Comment newComment = new Comment();
+ newComment.Message = addGoodsTextBoxComent.Text;
+ goods.Coments.Add(newComment);
+ if (!Int16.TryParse(addGoodsTextBoxCount.Text, out count))
+ { MessageBox.Show("Вы заполнили поле Количество неправильно");
+ return;
+ };
+ goods.Count = count;
+
+ if (addGoodsCheckBoxIsActive.Checked)
+ {
+ goods.IsActive = true;
+ }
+ else goods.IsActive = false;
+
+
+ var categorySt = addGoodsLookUpEditCategory.GetColumnValue("Id");
+ //goods.Category=categorySt;
+ bs.EndEdit();
+ presenter.Save();
+
+ }
+
+
+ }
+}
diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.resx b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.resx
new file mode 100644
index 0000000..93df5f6
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/GoodsAll/AddGoods/AddGoodsView.resx
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ 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
+ rkJggg==
+
+
+
+ 17, 17
+
+
+
+ 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
+ rkJggg==
+
+
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.Designer.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.Designer.cs
similarity index 57%
rename from Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.Designer.cs
rename to Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.Designer.cs
index ef61c70..57c6e03 100644
--- a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.Designer.cs
+++ b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.Designer.cs
@@ -30,13 +30,12 @@ private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
DevExpress.XtraGrid.GridLevelNode gridLevelNode1 = new DevExpress.XtraGrid.GridLevelNode();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GoodsForm));
this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
- this.GoodsPrintButton = new System.Windows.Forms.Button();
- this.IsActiveCheckBox = new System.Windows.Forms.CheckBox();
- this.GoodsButtonSave = new System.Windows.Forms.Button();
- this.GoodsGridControl = new DevExpress.XtraGrid.GridControl();
+ this.isActiveCheckBox = new System.Windows.Forms.CheckBox();
+ this.goodsGridControl = new DevExpress.XtraGrid.GridControl();
this.goodsBindingSource = new System.Windows.Forms.BindingSource(this.components);
- this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+ this.goodsGreedView = new DevExpress.XtraGrid.Views.Grid.GridView();
this.colName = new DevExpress.XtraGrid.Columns.GridColumn();
this.colSKU = new DevExpress.XtraGrid.Columns.GridColumn();
this.colPrice = new DevExpress.XtraGrid.Columns.GridColumn();
@@ -47,13 +46,11 @@ private void InitializeComponent()
this.colIsActive = new DevExpress.XtraGrid.Columns.GridColumn();
this.colEditTime = new DevExpress.XtraGrid.Columns.GridColumn();
this.gridView2 = new DevExpress.XtraGrid.Views.Grid.GridView();
- this.GoodsComboBoxCategory = new DevExpress.XtraEditors.ComboBoxEdit();
+ this.goodsComboBoxCategory = new DevExpress.XtraEditors.ComboBoxEdit();
this.layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
- this.layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
this.layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
- this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
this.colName1 = new DevExpress.XtraGrid.Columns.GridColumn();
this.colSKU1 = new DevExpress.XtraGrid.Columns.GridColumn();
this.colPrice1 = new DevExpress.XtraGrid.Columns.GridColumn();
@@ -62,28 +59,35 @@ private void InitializeComponent()
this.colUser1 = new DevExpress.XtraGrid.Columns.GridColumn();
this.colId1 = new DevExpress.XtraGrid.Columns.GridColumn();
this.colIsActive1 = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.ribbonControl1 = new DevExpress.XtraBars.Ribbon.RibbonControl();
+ this.exportBarButtonItem = new DevExpress.XtraBars.BarButtonItem();
+ this.printBarButtonItem = new DevExpress.XtraBars.BarButtonItem();
+ this.SearchbarButtonItem1 = new DevExpress.XtraBars.BarButtonItem();
+ this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();
+ this.saveOrEditribbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+ this.searchRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+ this.ribbonPageGroup2 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+ this.ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+ this.ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
this.layoutControl1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.GoodsGridControl)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.goodsGridControl)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.goodsBindingSource)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.goodsGreedView)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridView2)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.GoodsComboBoxCategory.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.goodsComboBoxCategory.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).BeginInit();
this.SuspendLayout();
//
// layoutControl1
//
- this.layoutControl1.Controls.Add(this.GoodsPrintButton);
- this.layoutControl1.Controls.Add(this.IsActiveCheckBox);
- this.layoutControl1.Controls.Add(this.GoodsButtonSave);
- this.layoutControl1.Controls.Add(this.GoodsGridControl);
- this.layoutControl1.Controls.Add(this.GoodsComboBoxCategory);
+ this.layoutControl1.Controls.Add(this.isActiveCheckBox);
+ this.layoutControl1.Controls.Add(this.goodsGridControl);
+ this.layoutControl1.Controls.Add(this.goodsComboBoxCategory);
this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.layoutControl1.Location = new System.Drawing.Point(0, 0);
this.layoutControl1.Name = "layoutControl1";
@@ -93,60 +97,38 @@ private void InitializeComponent()
this.layoutControl1.TabIndex = 1;
this.layoutControl1.Text = "layoutControl1";
//
- // GoodsPrintButton
+ // isActiveCheckBox
//
- this.GoodsPrintButton.Location = new System.Drawing.Point(541, 12);
- this.GoodsPrintButton.Name = "GoodsPrintButton";
- this.GoodsPrintButton.Size = new System.Drawing.Size(148, 20);
- this.GoodsPrintButton.TabIndex = 8;
- this.GoodsPrintButton.Text = "Печать";
- this.GoodsPrintButton.UseVisualStyleBackColor = true;
- this.GoodsPrintButton.Click += new System.EventHandler(this.GoodsPrintButton_Click);
+ this.isActiveCheckBox.Location = new System.Drawing.Point(436, 12);
+ this.isActiveCheckBox.Name = "isActiveCheckBox";
+ this.isActiveCheckBox.Size = new System.Drawing.Size(423, 20);
+ this.isActiveCheckBox.TabIndex = 7;
+ this.isActiveCheckBox.Text = "Товар активен";
+ this.isActiveCheckBox.UseVisualStyleBackColor = true;
+ this.isActiveCheckBox.CheckedChanged += new System.EventHandler(this.IsActiveCheckBox_CheckedChanged);
//
- // IsActiveCheckBox
+ // goodsGridControl
//
- this.IsActiveCheckBox.Location = new System.Drawing.Point(436, 12);
- this.IsActiveCheckBox.Name = "IsActiveCheckBox";
- this.IsActiveCheckBox.Size = new System.Drawing.Size(101, 20);
- this.IsActiveCheckBox.TabIndex = 7;
- this.IsActiveCheckBox.Text = "Товар активен";
- this.IsActiveCheckBox.UseVisualStyleBackColor = true;
- this.IsActiveCheckBox.CheckedChanged += new System.EventHandler(this.IsActiveCheckBox_CheckedChanged);
- //
- // GoodsButtonSave
- //
- this.GoodsButtonSave.Location = new System.Drawing.Point(693, 12);
- this.GoodsButtonSave.Name = "GoodsButtonSave";
- this.GoodsButtonSave.Size = new System.Drawing.Size(166, 20);
- this.GoodsButtonSave.TabIndex = 6;
- this.GoodsButtonSave.Text = "Сохранить";
- this.GoodsButtonSave.UseVisualStyleBackColor = true;
- this.GoodsButtonSave.Click += new System.EventHandler(this.GoodsButtonSave_Click);
- //
- // GoodsGridControl
- //
- this.GoodsGridControl.DataSource = this.goodsBindingSource;
+ this.goodsGridControl.DataSource = this.goodsBindingSource;
gridLevelNode1.RelationName = "Level1";
- this.GoodsGridControl.LevelTree.Nodes.AddRange(new DevExpress.XtraGrid.GridLevelNode[] {
+ this.goodsGridControl.LevelTree.Nodes.AddRange(new DevExpress.XtraGrid.GridLevelNode[] {
gridLevelNode1});
- this.GoodsGridControl.Location = new System.Drawing.Point(12, 52);
- this.GoodsGridControl.MainView = this.gridView1;
- this.GoodsGridControl.Name = "GoodsGridControl";
- this.GoodsGridControl.Size = new System.Drawing.Size(847, 315);
- this.GoodsGridControl.TabIndex = 5;
- this.GoodsGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
- this.gridView1,
+ this.goodsGridControl.Location = new System.Drawing.Point(12, 52);
+ this.goodsGridControl.MainView = this.goodsGreedView;
+ this.goodsGridControl.Name = "goodsGridControl";
+ this.goodsGridControl.Size = new System.Drawing.Size(847, 315);
+ this.goodsGridControl.TabIndex = 5;
+ this.goodsGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+ this.goodsGreedView,
this.gridView2});
- this.GoodsGridControl.Click += new System.EventHandler(this.GoodsGridControl_Click);
- this.GoodsGridControl.DoubleClick += new System.EventHandler(this.GoodsGridControl_Click);
//
// goodsBindingSource
//
this.goodsBindingSource.DataSource = typeof(Domain.Entities.Goods);
//
- // gridView1
+ // goodsGreedView
//
- this.gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+ this.goodsGreedView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
this.colName,
this.colSKU,
this.colPrice,
@@ -156,8 +138,10 @@ private void InitializeComponent()
this.colId,
this.colIsActive,
this.colEditTime});
- this.gridView1.GridControl = this.GoodsGridControl;
- this.gridView1.Name = "gridView1";
+ this.goodsGreedView.GridControl = this.goodsGridControl;
+ this.goodsGreedView.Name = "goodsGreedView";
+ this.goodsGreedView.OptionsBehavior.Editable = false;
+ this.goodsGreedView.DoubleClick += new System.EventHandler(this.goodsGreedView_DoubleClick);
//
// colName
//
@@ -198,46 +182,39 @@ private void InitializeComponent()
//
this.colUser.FieldName = "User";
this.colUser.Name = "colUser";
- this.colUser.Visible = true;
- this.colUser.VisibleIndex = 5;
//
// colId
//
this.colId.FieldName = "Id";
this.colId.Name = "colId";
- this.colId.Visible = true;
- this.colId.VisibleIndex = 6;
//
// colIsActive
//
this.colIsActive.FieldName = "IsActive";
this.colIsActive.Name = "colIsActive";
- this.colIsActive.Visible = true;
- this.colIsActive.VisibleIndex = 7;
//
// colEditTime
//
this.colEditTime.FieldName = "EditTime";
this.colEditTime.Name = "colEditTime";
- this.colEditTime.Visible = true;
- this.colEditTime.VisibleIndex = 8;
//
// gridView2
//
- this.gridView2.GridControl = this.GoodsGridControl;
+ this.gridView2.GridControl = this.goodsGridControl;
this.gridView2.Name = "gridView2";
//
- // GoodsComboBoxCategory
+ // goodsComboBoxCategory
//
- this.GoodsComboBoxCategory.EditValue = "Категории продуктов";
- this.GoodsComboBoxCategory.Location = new System.Drawing.Point(108, 12);
- this.GoodsComboBoxCategory.Name = "GoodsComboBoxCategory";
- this.GoodsComboBoxCategory.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+ this.goodsComboBoxCategory.EditValue = "";
+ this.goodsComboBoxCategory.Location = new System.Drawing.Point(121, 12);
+ this.goodsComboBoxCategory.Name = "goodsComboBoxCategory";
+ this.goodsComboBoxCategory.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
- this.GoodsComboBoxCategory.Size = new System.Drawing.Size(324, 20);
- this.GoodsComboBoxCategory.StyleController = this.layoutControl1;
- this.GoodsComboBoxCategory.TabIndex = 4;
- this.GoodsComboBoxCategory.SelectedIndexChanged += new System.EventHandler(this.GoodsComboBoxCategory_SelectedIndexChanged);
+ this.goodsComboBoxCategory.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
+ this.goodsComboBoxCategory.Size = new System.Drawing.Size(311, 20);
+ this.goodsComboBoxCategory.StyleController = this.layoutControl1;
+ this.goodsComboBoxCategory.TabIndex = 4;
+ this.goodsComboBoxCategory.SelectedIndexChanged += new System.EventHandler(this.GoodsComboBoxCategory_SelectedIndexChanged);
//
// layoutControlGroup1
//
@@ -246,9 +223,7 @@ private void InitializeComponent()
this.layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
this.layoutControlItem2,
this.layoutControlItem1,
- this.layoutControlItem3,
- this.layoutControlItem4,
- this.layoutControlItem5});
+ this.layoutControlItem4});
this.layoutControlGroup1.Location = new System.Drawing.Point(0, 0);
this.layoutControlGroup1.Name = "Root";
this.layoutControlGroup1.Size = new System.Drawing.Size(871, 379);
@@ -257,49 +232,32 @@ private void InitializeComponent()
//
// layoutControlItem2
//
- this.layoutControlItem2.Control = this.GoodsGridControl;
+ this.layoutControlItem2.Control = this.goodsGridControl;
this.layoutControlItem2.Location = new System.Drawing.Point(0, 24);
this.layoutControlItem2.Name = "layoutControlItem2";
this.layoutControlItem2.Size = new System.Drawing.Size(851, 335);
this.layoutControlItem2.Text = " ";
this.layoutControlItem2.TextLocation = DevExpress.Utils.Locations.Top;
- this.layoutControlItem2.TextSize = new System.Drawing.Size(93, 13);
+ this.layoutControlItem2.TextSize = new System.Drawing.Size(106, 13);
//
// layoutControlItem1
//
- this.layoutControlItem1.Control = this.GoodsComboBoxCategory;
+ this.layoutControlItem1.Control = this.goodsComboBoxCategory;
this.layoutControlItem1.Location = new System.Drawing.Point(0, 0);
this.layoutControlItem1.Name = "layoutControlItem1";
this.layoutControlItem1.Size = new System.Drawing.Size(424, 24);
- this.layoutControlItem1.TextSize = new System.Drawing.Size(93, 13);
- //
- // layoutControlItem3
- //
- this.layoutControlItem3.Control = this.GoodsButtonSave;
- this.layoutControlItem3.Location = new System.Drawing.Point(681, 0);
- this.layoutControlItem3.Name = "layoutControlItem3";
- this.layoutControlItem3.Size = new System.Drawing.Size(170, 24);
- this.layoutControlItem3.TextSize = new System.Drawing.Size(0, 0);
- this.layoutControlItem3.TextVisible = false;
+ this.layoutControlItem1.Text = "Категория продукта";
+ this.layoutControlItem1.TextSize = new System.Drawing.Size(106, 13);
//
// layoutControlItem4
//
- this.layoutControlItem4.Control = this.IsActiveCheckBox;
+ this.layoutControlItem4.Control = this.isActiveCheckBox;
this.layoutControlItem4.Location = new System.Drawing.Point(424, 0);
this.layoutControlItem4.Name = "layoutControlItem4";
- this.layoutControlItem4.Size = new System.Drawing.Size(105, 24);
+ this.layoutControlItem4.Size = new System.Drawing.Size(427, 24);
this.layoutControlItem4.TextSize = new System.Drawing.Size(0, 0);
this.layoutControlItem4.TextVisible = false;
//
- // layoutControlItem5
- //
- this.layoutControlItem5.Control = this.GoodsPrintButton;
- this.layoutControlItem5.Location = new System.Drawing.Point(529, 0);
- this.layoutControlItem5.Name = "layoutControlItem5";
- this.layoutControlItem5.Size = new System.Drawing.Size(152, 24);
- this.layoutControlItem5.TextSize = new System.Drawing.Size(0, 0);
- this.layoutControlItem5.TextVisible = false;
- //
// colName1
//
this.colName1.FieldName = "Name";
@@ -340,37 +298,122 @@ private void InitializeComponent()
this.colIsActive1.FieldName = "IsActive";
this.colIsActive1.Name = "colIsActive1";
//
+ // ribbonControl1
+ //
+ this.ribbonControl1.ExpandCollapseItem.Id = 0;
+ this.ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] {
+ this.ribbonControl1.ExpandCollapseItem,
+ this.exportBarButtonItem,
+ this.printBarButtonItem,
+ this.SearchbarButtonItem1});
+ this.ribbonControl1.Location = new System.Drawing.Point(0, 0);
+ this.ribbonControl1.MaxItemId = 6;
+ this.ribbonControl1.Name = "ribbonControl1";
+ this.ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] {
+ this.mainRibbonPage});
+ this.ribbonControl1.Size = new System.Drawing.Size(871, 141);
+ this.ribbonControl1.ToolbarLocation = DevExpress.XtraBars.Ribbon.RibbonQuickAccessToolbarLocation.Above;
+ //
+ // exportBarButtonItem
+ //
+ this.exportBarButtonItem.Caption = "Экспорт";
+ this.exportBarButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("exportBarButtonItem.Glyph")));
+ this.exportBarButtonItem.Id = 1;
+ this.exportBarButtonItem.Name = "exportBarButtonItem";
+ this.exportBarButtonItem.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large;
+ this.exportBarButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.exportBarButtonItem_ItemClick);
+ //
+ // printBarButtonItem
+ //
+ this.printBarButtonItem.Caption = "Печать";
+ this.printBarButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("printBarButtonItem.Glyph")));
+ this.printBarButtonItem.Id = 3;
+ this.printBarButtonItem.Name = "printBarButtonItem";
+ this.printBarButtonItem.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large;
+ //
+ // SearchbarButtonItem1
+ //
+ this.SearchbarButtonItem1.Caption = "Поиск";
+ this.SearchbarButtonItem1.Glyph = ((System.Drawing.Image)(resources.GetObject("SearchbarButtonItem1.Glyph")));
+ this.SearchbarButtonItem1.Id = 5;
+ this.SearchbarButtonItem1.MergeOrder = 1;
+ this.SearchbarButtonItem1.Name = "SearchbarButtonItem1";
+ this.SearchbarButtonItem1.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large;
+ this.SearchbarButtonItem1.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.SearchbarButtonItem1_ItemClick);
+ //
+ // mainRibbonPage
+ //
+ this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
+ this.saveOrEditribbonPageGroup,
+ this.searchRibbonPageGroup});
+ this.mainRibbonPage.Name = "mainRibbonPage";
+ this.mainRibbonPage.Text = "Меню";
+ //
+ // saveOrEditribbonPageGroup
+ //
+ this.saveOrEditribbonPageGroup.ItemLinks.Add(this.exportBarButtonItem);
+ this.saveOrEditribbonPageGroup.ItemLinks.Add(this.printBarButtonItem);
+ this.saveOrEditribbonPageGroup.MergeOrder = 5;
+ this.saveOrEditribbonPageGroup.Name = "saveOrEditribbonPageGroup";
+ this.saveOrEditribbonPageGroup.Text = "Сохранение";
+ //
+ // searchRibbonPageGroup
+ //
+ this.searchRibbonPageGroup.ItemLinks.Add(this.SearchbarButtonItem1);
+ this.searchRibbonPageGroup.MergeOrder = 6;
+ this.searchRibbonPageGroup.Name = "searchRibbonPageGroup";
+ this.searchRibbonPageGroup.Text = "Поиск";
+ //
+ // ribbonPageGroup2
+ //
+ this.ribbonPageGroup2.Name = "ribbonPageGroup2";
+ this.ribbonPageGroup2.Text = "ribbonPageGroup2";
+ //
+ // ribbonPageGroup1
+ //
+ this.ribbonPageGroup1.Name = "ribbonPageGroup1";
+ this.ribbonPageGroup1.Text = "ribbonPageGroup1";
+ //
+ // ribbonPage1
+ //
+ this.ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
+ this.ribbonPageGroup1,
+ this.ribbonPageGroup2});
+ this.ribbonPage1.Name = "ribbonPage1";
+ this.ribbonPage1.Text = "ribbonPage1";
+ //
// GoodsForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(871, 379);
+ this.Controls.Add(this.ribbonControl1);
this.Controls.Add(this.layoutControl1);
this.Name = "GoodsForm";
- this.Text = "GoodsForm";
+ this.Text = "Список товаров";
((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
this.layoutControl1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.GoodsGridControl)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.goodsGridControl)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.goodsBindingSource)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.goodsGreedView)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridView2)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.GoodsComboBoxCategory.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.goodsComboBoxCategory.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).EndInit();
this.ResumeLayout(false);
+ this.PerformLayout();
}
#endregion
private DevExpress.XtraLayout.LayoutControl layoutControl1;
- private DevExpress.XtraGrid.GridControl GoodsGridControl;
- private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
- private DevExpress.XtraEditors.ComboBoxEdit GoodsComboBoxCategory;
+ private DevExpress.XtraGrid.GridControl goodsGridControl;
+ private DevExpress.XtraGrid.Views.Grid.GridView goodsGreedView;
+ private DevExpress.XtraEditors.ComboBoxEdit goodsComboBoxCategory;
private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
@@ -384,12 +427,8 @@ private void InitializeComponent()
private DevExpress.XtraGrid.Columns.GridColumn colId;
private DevExpress.XtraGrid.Columns.GridColumn colIsActive;
private DevExpress.XtraGrid.Columns.GridColumn colEditTime;
- private System.Windows.Forms.CheckBox IsActiveCheckBox;
- private System.Windows.Forms.Button GoodsButtonSave;
- private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+ private System.Windows.Forms.CheckBox isActiveCheckBox;
private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
- private System.Windows.Forms.Button GoodsPrintButton;
- private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
private DevExpress.XtraGrid.Views.Grid.GridView gridView2;
private DevExpress.XtraGrid.Columns.GridColumn colName1;
private DevExpress.XtraGrid.Columns.GridColumn colSKU1;
@@ -399,5 +438,15 @@ private void InitializeComponent()
private DevExpress.XtraGrid.Columns.GridColumn colUser1;
private DevExpress.XtraGrid.Columns.GridColumn colId1;
private DevExpress.XtraGrid.Columns.GridColumn colIsActive1;
+ private DevExpress.XtraBars.Ribbon.RibbonControl ribbonControl1;
+ private DevExpress.XtraBars.BarButtonItem exportBarButtonItem;
+ private DevExpress.XtraBars.BarButtonItem printBarButtonItem;
+ private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup2;
+ private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
+ private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1;
+ private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage;
+ private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveOrEditribbonPageGroup;
+ private DevExpress.XtraBars.Ribbon.RibbonPageGroup searchRibbonPageGroup;
+ private DevExpress.XtraBars.BarButtonItem SearchbarButtonItem1;
}
}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.cs
similarity index 58%
rename from Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.cs
rename to Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.cs
index bcaf4e2..112c988 100644
--- a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.cs
+++ b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.cs
@@ -23,39 +23,51 @@ public GoodsForm()
List categoryList = new List();
InitializeComponent();
presenter = new GoodsPresenter(this);
- GoodsComboBoxCategory.Properties.Items.Add("Все");
- GoodsComboBoxCategory.Properties.Items.AddRange(presenter.productCategoryList.ToArray());
- // GoodsComboBoxCategory.SelectedIndex = 0;
-
- this.GoodsComboBoxCategory.SelectedIndexChanged += new EventHandler(GoodsComboBoxCategory_SelectedIndexChanged);
+ goodsComboBoxCategory.Properties.Items.Add("Все");
+ goodsComboBoxCategory.Properties.Items.AddRange(presenter.productCategoryList.ToArray());
+ goodsComboBoxCategory.SelectedIndex = 0;
+ this.goodsComboBoxCategory.SelectedIndexChanged += new EventHandler(GoodsComboBoxCategory_SelectedIndexChanged);
+ isActiveCheckBox.Checked = true;
}
public void SetGoodsCategory(List categoryList)
{
foreach (ProductCategory productCategory in categoryList)
{
- GoodsComboBoxCategory.Properties.Items.Add("Все");
- GoodsComboBoxCategory.Properties.Items.Add(productCategory.CategoryName);
+ goodsComboBoxCategory.Properties.Items.Add("Все");
+ goodsComboBoxCategory.Properties.Items.Add(productCategory.CategoryName);
}
}
private void IsActiveCheckBox_CheckedChanged(object sender, EventArgs e)
{
- this.goodsBindingSource.DataSource = presenter.SearchGoodsOnActivity(IsActiveCheckBox.Checked);
+ this.goodsBindingSource.DataSource = presenter.SearchGoodsOnActivity(isActiveCheckBox.Checked);
+ goodsGridControl.RefreshDataSource();
}
private void GoodsComboBoxCategory_SelectedIndexChanged(object sender, EventArgs e)
{
- //this.goodsBindingSource.Clear();
- this.goodsBindingSource.DataSource = presenter.SearchGoodsOnCategory(GoodsComboBoxCategory.SelectedItem.ToString());
- GoodsGridControl.RefreshDataSource();
+ this.goodsBindingSource.DataSource = presenter.SearchGoodsOnCategory(goodsComboBoxCategory.SelectedItem.ToString(), isActiveCheckBox.Checked);
+ goodsGridControl.RefreshDataSource();
}
- private void GoodsGridControl_Click(object sender, EventArgs e)
+ private void GoodsPrintBarButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
- GridHitInfo hitInfo = gridView1.CalcHitInfo(GoodsGridControl.PointToClient(MousePosition));
- if (hitInfo.InRowCell)
+ goodsGridControl.ShowPrintPreview();
+ goodsGridControl.Print();
+ }
+
+
+ private void GoodsComboBoxCategory_TextChanged(object sender, EventArgs e)
+ {
+ presenter.productCategoryList.Add(goodsComboBoxCategory.Text);
+ }
+
+ private void goodsGreedView_DoubleClick(object sender, EventArgs e)
+ {
+ GridHitInfo hitInfo = goodsGreedView.CalcHitInfo(goodsGridControl.PointToClient(MousePosition));
+ if (hitInfo.InRow || hitInfo.InRowCell)
{
GridView gv = (GridView)sender;
GridHitInfo gridInfo = gv.CalcHitInfo(gv.GridControl.PointToClient(Control.MousePosition));
@@ -65,35 +77,16 @@ private void GoodsGridControl_Click(object sender, EventArgs e)
frm.MdiParent = this.MdiParent;
frm.Show();
}
-
}
- private void GoodsButtonSave_Click(object sender, EventArgs e)
+ private void SearchbarButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
- SaveFileDialog saveDialog = new SaveFileDialog();
- saveDialog.Filter = "xls files (*.xls)|*.xls|All files(*.*)|*.*";
-
- if (saveDialog.ShowDialog() == DialogResult.OK)
- {
- string fileName = saveDialog.FileName;
- GoodsGridControl.ExportToXls(fileName);
-
- }
- }
-
- private void GoodsPrintButton_Click(object sender, EventArgs e)
- {
- GoodsGridControl.ShowPrintPreview();
- GoodsGridControl.Print();
- }
-
- private void GoodsPrintBarButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
- {
- GoodsGridControl.ShowPrintPreview();
- GoodsGridControl.Print();
+ this.goodsBindingSource.DataSource = presenter.SearchGoodsOnCategory(goodsComboBoxCategory.SelectedItem.ToString(), isActiveCheckBox.Checked);
+
+ goodsGridControl.RefreshDataSource();
}
- private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ private void exportBarButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Filter = "xls files (*.xls)|*.xls|All files(*.*)|*.*";
@@ -101,11 +94,12 @@ private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemCli
if (saveDialog.ShowDialog() == DialogResult.OK)
{
string fileName = saveDialog.FileName;
- GoodsGridControl.ExportToXls(fileName);
+ goodsGridControl.ExportToXls(fileName);
}
}
+
}
}
diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.resx b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.resx
new file mode 100644
index 0000000..af127b7
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsFormView.resx
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ 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
+ rkJggg==
+
+
+
+
+ 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
+ Ms4wYRfT/gu8o4xNyxWpOwAAAABJRU5ErkJggg==
+
+
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsListViewModel.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsListViewModel.cs
similarity index 93%
rename from Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsListViewModel.cs
rename to Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsListViewModel.cs
index d27f0e0..1ca07c8 100644
--- a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsListViewModel.cs
+++ b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsListViewModel.cs
@@ -6,7 +6,7 @@
namespace ContosoUI.GoodsAll.GoodsF
{
- class GoodsListViewModel
+ public class GoodsListViewModel
{
public int Id { get; set; }
public string Name { get; set; }
diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsPresenter.cs b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsPresenter.cs
similarity index 67%
rename from Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsPresenter.cs
rename to Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsPresenter.cs
index 80d8cc9..caa4f3c 100644
--- a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsPresenter.cs
+++ b/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsView/GoodsPresenter.cs
@@ -1,4 +1,4 @@
-using Data.DumbData;
+using Data.EFData;
using Domain.DAO;
using Domain.Entities;
using System;
@@ -10,10 +10,11 @@
namespace ContosoUI.GoodsAll.GoodsF
{
- class GoodsPresenter : INotifyPropertyChanged
+ public class GoodsPresenter : INotifyPropertyChanged//, IProductCategoryRepository
{
- private IGoodsRepository model = new GoodsDao();
- private IProductCategoryRepository modelCategory = new ProductCategoryDao();
+ GoodsCategoryService service = new GoodsCategoryService();
+ //private IGoodsRepository model = new EFGoodsDao();
+ // private IProductCategoryRepository modelCategory = new ProductCategoryDao();
private GoodsForm goodsView;
public List viewModel = new List();
@@ -24,7 +25,8 @@ class GoodsPresenter : INotifyPropertyChanged
public GoodsPresenter(GoodsForm goodsView)
{
this.goodsView = goodsView;
- foreach (ProductCategory pc in Storage.categoryCollection)
+ var categories = service.CategoryDao.GetAll().ToList();
+ foreach (ProductCategory pc in categories)
{
productCategoryList.Add(pc.CategoryName);
}
@@ -32,11 +34,11 @@ public GoodsPresenter(GoodsForm goodsView)
public List SearchGoodsOnActivity(bool isActive)
{
- goodsForLoad = model.GetAll().ToList();
+ goodsForLoad = service.GoodsDao.GetAll().ToList();
viewModel.Clear();
foreach (Goods g in goodsForLoad)
{
- if (g.Category.IsActive == isActive)
+ if (g.IsActive)
{
viewModel.Add(new GoodsListViewModel
{
@@ -55,27 +57,30 @@ public List SearchGoodsOnActivity(bool isActive)
return viewModel;
}
- public List SearchGoodsOnCategory(string category)
+ public List SearchGoodsOnCategory(string category, bool isActive)
{
- goodsForLoad = model.GetAll().ToList();
+ goodsForLoad =service.GoodsDao.GetAll().ToList();
viewModel.Clear();
if (category == "Все")
{
foreach (Goods g in goodsForLoad)
{
- viewModel.Add(new GoodsListViewModel
+ if (g.IsActive == isActive)
{
- Id = g.Id,
- Name = g.Name,
- SKU = g.SKU,
- Price = g.Price,
- Count = g.Count,
- Category = g.Category.CategoryName,
- Coment = g.Coments.ToString(),
- isActive = g.IsActive,
- //User = g.User.Login
- });
+ viewModel.Add(new GoodsListViewModel
+ {
+ Id = g.Id,
+ Name = g.Name,
+ SKU = g.SKU,
+ Price = g.Price,
+ Count = g.Count,
+ Category = g.Category.CategoryName,
+ Coment = g.Coments.ToString(),
+ isActive = g.IsActive,
+ //User = g.User.Login
+ });
+ }
}
}
@@ -84,7 +89,7 @@ public List SearchGoodsOnCategory(string category)
foreach (Goods g in goodsForLoad)
{
- if (g.Category.CategoryName == category)
+ if (g.Category.CategoryName == category&&g.IsActive==isActive)
{
viewModel.Add(new GoodsListViewModel
{
@@ -116,5 +121,6 @@ private void NotifyPropertyChanged(String info)
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
+
}
}
diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.Designer.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.Designer.cs
deleted file mode 100644
index ea89f08..0000000
--- a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.Designer.cs
+++ /dev/null
@@ -1,159 +0,0 @@
-namespace ContosoUI.GoodsForm1
-{
- partial class GoodsForm
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.GoodsCategoryComboBoxDE = new DevExpress.XtraEditors.ComboBoxEdit();
- this.label1 = new System.Windows.Forms.Label();
- this.GoodsGroupBox = new System.Windows.Forms.GroupBox();
- this.GoodsButtonSearch = new System.Windows.Forms.Button();
- this.GoodsButtonReport = new System.Windows.Forms.Button();
- this.GoodsGridControl = new DevExpress.XtraGrid.GridControl();
- this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
- this.GoodsButtonCancel = new System.Windows.Forms.Button();
- ((System.ComponentModel.ISupportInitialize)(this.GoodsCategoryComboBoxDE.Properties)).BeginInit();
- this.GoodsGroupBox.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.GoodsGridControl)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
- this.SuspendLayout();
- //
- // GoodsCategoryComboBoxDE
- //
- this.GoodsCategoryComboBoxDE.Location = new System.Drawing.Point(6, 35);
- this.GoodsCategoryComboBoxDE.Name = "GoodsCategoryComboBoxDE";
- this.GoodsCategoryComboBoxDE.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
- new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
- this.GoodsCategoryComboBoxDE.Size = new System.Drawing.Size(195, 20);
- this.GoodsCategoryComboBoxDE.TabIndex = 0;
- //
- // label1
- //
- this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(6, 16);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(93, 13);
- this.label1.TabIndex = 1;
- this.label1.Text = "Products category";
- //
- // GoodsGroupBox
- //
- this.GoodsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.GoodsGroupBox.Controls.Add(this.GoodsButtonReport);
- this.GoodsGroupBox.Controls.Add(this.GoodsButtonSearch);
- this.GoodsGroupBox.Controls.Add(this.label1);
- this.GoodsGroupBox.Controls.Add(this.GoodsCategoryComboBoxDE);
- this.GoodsGroupBox.Location = new System.Drawing.Point(3, 2);
- this.GoodsGroupBox.Name = "GoodsGroupBox";
- this.GoodsGroupBox.Size = new System.Drawing.Size(917, 100);
- this.GoodsGroupBox.TabIndex = 2;
- this.GoodsGroupBox.TabStop = false;
- this.GoodsGroupBox.Text = "Filter";
- //
- // GoodsButtonSearch
- //
- this.GoodsButtonSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.GoodsButtonSearch.Location = new System.Drawing.Point(836, 71);
- this.GoodsButtonSearch.Name = "GoodsButtonSearch";
- this.GoodsButtonSearch.Size = new System.Drawing.Size(75, 23);
- this.GoodsButtonSearch.TabIndex = 2;
- this.GoodsButtonSearch.Text = "Search";
- this.GoodsButtonSearch.UseVisualStyleBackColor = true;
- this.GoodsButtonSearch.Click += new System.EventHandler(this.GoodsButtonSearch_Click);
- //
- // GoodsButtonReport
- //
- this.GoodsButtonReport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.GoodsButtonReport.Location = new System.Drawing.Point(735, 71);
- this.GoodsButtonReport.Name = "GoodsButtonReport";
- this.GoodsButtonReport.Size = new System.Drawing.Size(75, 23);
- this.GoodsButtonReport.TabIndex = 3;
- this.GoodsButtonReport.Text = "Report";
- this.GoodsButtonReport.UseVisualStyleBackColor = true;
- this.GoodsButtonReport.Click += new System.EventHandler(this.GoodsButtonReport_Click);
- //
- // GoodsGridControl
- //
- this.GoodsGridControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.GoodsGridControl.Location = new System.Drawing.Point(3, 109);
- this.GoodsGridControl.MainView = this.gridView1;
- this.GoodsGridControl.Name = "GoodsGridControl";
- this.GoodsGridControl.Size = new System.Drawing.Size(917, 242);
- this.GoodsGridControl.TabIndex = 3;
- this.GoodsGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
- this.gridView1});
- //
- // gridView1
- //
- this.gridView1.GridControl = this.GoodsGridControl;
- this.gridView1.Name = "gridView1";
- //
- // GoodsButtonCancel
- //
- this.GoodsButtonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.GoodsButtonCancel.Location = new System.Drawing.Point(838, 358);
- this.GoodsButtonCancel.Name = "GoodsButtonCancel";
- this.GoodsButtonCancel.Size = new System.Drawing.Size(75, 23);
- this.GoodsButtonCancel.TabIndex = 4;
- this.GoodsButtonCancel.Text = "Cancel";
- this.GoodsButtonCancel.UseVisualStyleBackColor = true;
- this.GoodsButtonCancel.Click += new System.EventHandler(this.GoodsButtonCancel_Click);
- //
- // GoodsForm
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(919, 385);
- this.Controls.Add(this.GoodsButtonCancel);
- this.Controls.Add(this.GoodsGridControl);
- this.Controls.Add(this.GoodsGroupBox);
- this.Name = "GoodsForm";
- this.Text = "GoodsForm";
- ((System.ComponentModel.ISupportInitialize)(this.GoodsCategoryComboBoxDE.Properties)).EndInit();
- this.GoodsGroupBox.ResumeLayout(false);
- this.GoodsGroupBox.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.GoodsGridControl)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private DevExpress.XtraEditors.ComboBoxEdit GoodsCategoryComboBoxDE;
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.GroupBox GoodsGroupBox;
- private System.Windows.Forms.Button GoodsButtonReport;
- private System.Windows.Forms.Button GoodsButtonSearch;
- private DevExpress.XtraGrid.GridControl GoodsGridControl;
- private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
- private System.Windows.Forms.Button GoodsButtonCancel;
- }
-}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.cs
deleted file mode 100644
index c22b791..0000000
--- a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using Data.DumbData;
-using Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace ContosoUI.GoodsForm1
-{
- public partial class GoodsForm : Form, IGoodsView
- {
- int goodsID;
- private GoodsPresenter presenter;
-
- public GoodsForm()
- {
- InitializeComponent();
- presenter = new GoodsPresenter(this, new GoodsModel());//тут ругается на this
- }
-
- private void GoodsButtonSearch_Click(object sender, EventArgs e)
- {
-
-
- }
-
- private void GoodsButtonReport_Click(object sender, EventArgs e)
- {
-
- }
-
- private void GoodsButtonCancel_Click(object sender, EventArgs e)
- {
- this.Close();
- }
-
- public void SetGoodsData(List goodsList)
- {
- throw new NotImplementedException();
- }
-
- public void SetGoodsCategory(List categoryList)
- {
- foreach (ProductCategory productCategory in categoryList)
- {
- GoodsCategoryComboBoxDE.Properties.Items.Add(productCategory.CategoryName);
- }
- }
-
-
- public event EventHandler loadGoodsForm;
-
- public event EventHandler searchButtonClick;
- }
-}
diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.resx b/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.resx
deleted file mode 100644
index 1af7de1..0000000
--- a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsForm.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsModel.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsModel.cs
deleted file mode 100644
index 7969c6b..0000000
--- a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsModel.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using Data.DumbData;
-using Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ContosoUI
-{
- class GoodsModel:IGoodsModel
- {
-
- public List GetListCategory()
- {
- return Storage.categoryCollection;
- }
-
-
- public List GetListGoods(string category)
- {
- List newListGoods = new List();
- foreach (Goods g in Storage.goodsCollection)
- {
- if (g.Category.CategoryName == category)
- {
- newListGoods.Add(g);
- }
- }
-
- return newListGoods;
- }
-
- public List GetListGoods()
- {
- return Storage.goodsCollection;
- }
-
-
- }
-}
diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsPresenter.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsPresenter.cs
deleted file mode 100644
index 3b0d681..0000000
--- a/Solution/ContosoProject/ContosoUI/GoodsForm1/GoodsPresenter.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ContosoUI
-{
- class GoodsPresenter
-
- {
- private IGoodsModel model;
- private IGoodsView view;
-
- public List forLoad;
-
- public GoodsPresenter(IGoodsView view, IGoodsModel model)
- {
- this.view = view;
- this.model = model;
- this.view.loadGoodsForm += new EventHandler(OnGoodsFormLoad);
- this.view.searchButtonClick += new EventHandler(OnSearchButtonClick);
- }
-
-
- private void OnGoodsFormLoad(object sender, EventArgs e)
- {
- forLoad=this.model.GetListGoods();
- }
-
- private void OnSearchButtonClick(object sender, EventArgs e)
- {
-
- }
- }
-}
diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsModel.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsModel.cs
deleted file mode 100644
index 58c9002..0000000
--- a/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsModel.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-
-namespace ContosoUI
-{
- interface IGoodsModel
- {
- List GetListCategory();
- List GetListGoods(string category);
- List GetListGoods();
- }
-}
diff --git a/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsView.cs b/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsView.cs
deleted file mode 100644
index 71a0d7e..0000000
--- a/Solution/ContosoProject/ContosoUI/GoodsForm1/IGoodsView.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ContosoUI
-{
- interface IGoodsView
- {
- void SetGoodsData(List goodsList);
-
- void SetGoodsCategory(List categoryList);
-
- event EventHandler loadGoodsForm;
-
- event EventHandler searchButtonClick;
- }
-}
diff --git a/Solution/ContosoProject/ContosoUI/IUserNotify.cs b/Solution/ContosoProject/ContosoUI/IUserNotify.cs
new file mode 100644
index 0000000..5966903
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/IUserNotify.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ContosoUI
+{
+ interface IUserNotify
+ {
+ void ShowError(string text, string header);
+ void ShowWarning(string text, string header);
+ void ShowInfo(string text, string header);
+ bool ShowYesNo(string text, string header);
+ }
+}
diff --git a/Solution/ContosoProject/ContosoUI/MainView.Designer.cs b/Solution/ContosoProject/ContosoUI/MainView.Designer.cs
index e0404d3..2c6b90b 100644
--- a/Solution/ContosoProject/ContosoUI/MainView.Designer.cs
+++ b/Solution/ContosoProject/ContosoUI/MainView.Designer.cs
@@ -43,6 +43,7 @@ private void InitializeComponent()
this.addGoodsBarButton = new DevExpress.XtraBars.BarButtonItem();
this.RolesButton = new DevExpress.XtraBars.BarButtonItem();
this.ChangePasswordBtn = new DevExpress.XtraBars.BarButtonItem();
+ this.productCategoryButton = new DevExpress.XtraBars.BarButtonItem();
this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();
this.customersMenuGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
this.ordersMenuGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
@@ -70,9 +71,10 @@ private void InitializeComponent()
this.goodsMenuBtn,
this.addGoodsBarButton,
this.RolesButton,
- this.ChangePasswordBtn});
+ this.ChangePasswordBtn,
+ this.productCategoryButton});
this.ribbonControl.Location = new System.Drawing.Point(0, 0);
- this.ribbonControl.MaxItemId = 15;
+ this.ribbonControl.MaxItemId = 16;
this.ribbonControl.MdiMergeStyle = DevExpress.XtraBars.Ribbon.RibbonMdiMergeStyle.Always;
this.ribbonControl.Name = "ribbonControl";
this.ribbonControl.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] {
@@ -185,6 +187,14 @@ private void InitializeComponent()
this.ChangePasswordBtn.Name = "ChangePasswordBtn";
this.ChangePasswordBtn.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem1_ItemClick_1);
//
+ // productCategoryButton
+ //
+ this.productCategoryButton.Caption = "Категории товаров";
+ this.productCategoryButton.Id = 15;
+ this.productCategoryButton.ImageUri.Uri = "Filter";
+ this.productCategoryButton.Name = "productCategoryButton";
+ this.productCategoryButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.productCategoryButton_ItemClick);
+ //
// mainRibbonPage
//
this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
@@ -201,6 +211,7 @@ private void InitializeComponent()
//
this.customersMenuGroup.ItemLinks.Add(this.customersMenuBtn);
this.customersMenuGroup.ItemLinks.Add(this.addNewCustomerBtn);
+ this.customersMenuGroup.MergeOrder = 10;
this.customersMenuGroup.Name = "customersMenuGroup";
this.customersMenuGroup.Text = "Клиенты";
//
@@ -208,6 +219,7 @@ private void InitializeComponent()
//
this.ordersMenuGroup.ItemLinks.Add(this.ordersMenuBtn);
this.ordersMenuGroup.ItemLinks.Add(this.addNewOrderBtn);
+ this.ordersMenuGroup.MergeOrder = 20;
this.ordersMenuGroup.Name = "ordersMenuGroup";
this.ordersMenuGroup.Text = "Заказы";
//
@@ -215,6 +227,8 @@ private void InitializeComponent()
//
this.goodsMenuGroup.ItemLinks.Add(this.goodsMenuBtn);
this.goodsMenuGroup.ItemLinks.Add(this.addGoodsBarButton);
+ this.goodsMenuGroup.ItemLinks.Add(this.productCategoryButton);
+ this.goodsMenuGroup.MergeOrder = 30;
this.goodsMenuGroup.Name = "goodsMenuGroup";
this.goodsMenuGroup.Text = "Товары";
//
@@ -223,6 +237,7 @@ private void InitializeComponent()
this.usersMenuGroup.ItemLinks.Add(this.usersMenuBtn);
this.usersMenuGroup.ItemLinks.Add(this.addNewUserBtn);
this.usersMenuGroup.ItemLinks.Add(this.RolesButton);
+ this.usersMenuGroup.MergeOrder = 40;
this.usersMenuGroup.Name = "usersMenuGroup";
this.usersMenuGroup.Text = "Пользователи";
//
@@ -231,6 +246,7 @@ private void InitializeComponent()
this.System.ItemLinks.Add(this.logoutBtn);
this.System.ItemLinks.Add(this.ChangePasswordBtn);
this.System.ItemLinks.Add(this.exitBtn);
+ this.System.MergeOrder = 50;
this.System.Name = "System";
this.System.Text = "Системные";
//
@@ -240,6 +256,7 @@ private void InitializeComponent()
//
// MainView
//
+ this.CausesValidation = false;
this.ClientSize = new System.Drawing.Size(1028, 621);
this.Controls.Add(this.ribbonControl);
this.IsMdiContainer = true;
@@ -274,5 +291,6 @@ private void InitializeComponent()
private DevExpress.XtraBars.Ribbon.RibbonPageGroup usersMenuGroup;
private DevExpress.XtraBars.BarButtonItem RolesButton;
private DevExpress.XtraBars.BarButtonItem ChangePasswordBtn;
+ private DevExpress.XtraBars.BarButtonItem productCategoryButton;
}
}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/MainView.cs b/Solution/ContosoProject/ContosoUI/MainView.cs
index 6efe971..5492b0e 100644
--- a/Solution/ContosoProject/ContosoUI/MainView.cs
+++ b/Solution/ContosoProject/ContosoUI/MainView.cs
@@ -12,14 +12,17 @@
using ContosoUI.Customers.Add;
using ContosoUI.Users.Edit;
using ContosoUI.Order;
+using ContosoUI.ProductCategoryList;
namespace ContosoUI
{
- public partial class MainView : DevExpress.XtraEditors.XtraForm
+ public partial class MainView : DevExpress.XtraEditors.XtraForm, IUserNotify
{
public MainView()
{
InitializeComponent();
+ this.Text = String.Format("[{0}] {1} {2} {3}",Program.AuthUser.Login, Program.AuthUser.PersonalInfo.LastName,
+ Program.AuthUser.PersonalInfo.FirstName,Program.AuthUser.PersonalInfo.MiddleName);
if (!Program.AuthUser.Role.Permissions.Any(x => x.Type == Domain.PermissionType.NewUser))
{
this.addNewUserBtn.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
@@ -56,6 +59,10 @@ public MainView()
{
this.addGoodsBarButton.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
}
+ if (!Program.AuthUser.Role.Permissions.Any(x => x.Type == Domain.PermissionType.EditProductCategory))
+ {
+ this.productCategoryButton.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
+ }
}
private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
@@ -138,5 +145,34 @@ private void addGoodsBarButton_ItemClick(object sender, DevExpress.XtraBars.Item
form.MdiParent = this;
form.Show();
}
+
+ private void productCategoryButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ {
+ var form = new ProductCategoryView();
+ form.MdiParent = this;
+ form.Show();
+ }
+# region IUserNotify
+ public void ShowError(string text, string header)
+ {
+ XtraMessageBox.Show(text, header, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+
+ public void ShowWarning(string text, string header)
+ {
+ XtraMessageBox.Show(text, header, MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ }
+
+ public void ShowInfo(string text, string header)
+ {
+ XtraMessageBox.Show(text, header, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+
+ public bool ShowYesNo(string text, string header)
+ {
+ DialogResult dialog = XtraMessageBox.Show(text, header, MessageBoxButtons.YesNo, MessageBoxIcon.Information);
+ return dialog == DialogResult.Yes;
+ }
+# endregion
}
}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/MainView.resx b/Solution/ContosoProject/ContosoUI/MainView.resx
index fb5fbe5..6d5b7ac 100644
--- a/Solution/ContosoProject/ContosoUI/MainView.resx
+++ b/Solution/ContosoProject/ContosoUI/MainView.resx
@@ -319,4 +319,7 @@
17, 17
+
+ 25
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderPresenter.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderPresenter.cs
new file mode 100644
index 0000000..54123ec
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderPresenter.cs
@@ -0,0 +1,179 @@
+using Data.EFData;
+using ContosoUI.Presenter;
+using Domain.Entities;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace ContosoUI.Order.AddEdit
+{
+ public class AddEditOrderPresenter : BasePresenter
+ {
+ public AddEditOrderPresenter(AddEditOrderView view, int orderId)
+ {
+ this.view = view;
+
+ goods.AddRange(modelProxy.GoodsModel.GetAll().Where(x => x.IsActive == true));
+
+ if (orderId >= 0)
+ {
+ order = modelProxy.OrderModel.GetById(orderId);
+ }
+ else
+ {
+ order = new Domain.Entities.Order();
+ }
+ }
+
+ readonly AddEditOrderView view;
+ readonly AddOrderProxy modelProxy = new AddOrderProxy();
+ IUserNotify notifyManager = Program.MainWiewInstance;
+ Domain.Entities.Order order;
+
+ public List GoodsListSource
+ {
+ get { return order.GoodsList.ToList(); }
+ }
+
+ public List Customers
+ {
+ get { return modelProxy.CustomerModel.GetAll().Where(x => x.IsActive == true).ToList(); }
+ }
+
+ public List Statuses
+ {
+ get { return modelProxy.OrderStatusModel.GetAll().Distinct().ToList(); }
+ }
+
+ List goods = new List();
+ public List Goods
+ {
+ get { return goods; }
+ }
+
+ public List Comments
+ {
+ get { return order.Comments.ToList(); }
+ set
+ {
+ if (Comments != value)
+ {
+ Comments = value;
+ NotifyPropertyChanged("Comments");
+ }
+ }
+ }
+
+ public Customer Customer
+ {
+ get { return order.Customer; }
+ set
+ {
+ if (order.Customer != value)
+ {
+ order.Customer = value;
+ NotifyPropertyChanged("Customer");
+ }
+ }
+ }
+
+ public OrderStatus Status
+ {
+ get { return order.Status; }
+ set
+ {
+ if (order.Status != value)
+ {
+ order.Status = value;
+ NotifyPropertyChanged("Status");
+ }
+ }
+ }
+
+ private Goods selectedGood { get; set; }
+ public Goods SelectedGood
+ {
+ get { return selectedGood; }
+ set
+ {
+ if (selectedGood != value)
+ {
+ selectedGood = value;
+ NotifyPropertyChanged("SelectedGood");
+ }
+ }
+ }
+
+ private int countOfGood;
+ public int CountOfGood
+ {
+ get { return countOfGood; }
+ set
+ {
+ if (countOfGood != value)
+ {
+ countOfGood = value;
+ NotifyPropertyChanged("CountOfGood");
+ }
+ }
+ }
+
+ public double TotalCost
+ {
+ get { return order.TotalCost; }
+ }
+
+ private string message;
+ public string Message
+ {
+ get { return message; }
+ set
+ {
+ if (message != value)
+ {
+ message = value;
+ NotifyPropertyChanged("Message");
+ }
+ }
+ }
+
+ public Comment Comment
+ {
+ get { return new Comment() { Message = message, Type = CommentType.Order }; }
+ }
+
+ public void AddGoodRow()
+ {
+ GoodsRow newGoodsRow = new GoodsRow() { Goods = SelectedGood, Count = CountOfGood, Price = SelectedGood.Price };
+ order.GoodsList.Add(newGoodsRow);
+ NotifyPropertyChanged("AddGoodRow");
+ }
+
+ public void AddComment()
+ {
+ order.Comments.Add(Comment);
+ message = string.Empty;
+ NotifyPropertyChanged("CommentsAdd");
+ }
+
+ public void Save()
+ {
+ if (order.Id > 0)
+ {
+ modelProxy.OrderModel.Update(order);
+ notifyManager.ShowInfo("Заказ обновлен", "Сообщение");
+ }
+ else
+ {
+ modelProxy.OrderModel.Add(order);
+ notifyManager.ShowInfo("Заказ добавлен", "Сообщение");
+ }
+ }
+
+ public void SaveAndNew()
+ {
+ Save();
+ order = new Domain.Entities.Order();
+ NotifyPropertyChanged("SaveAndNew");
+ }
+ }
+}
diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.Designer.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.Designer.cs
new file mode 100644
index 0000000..be4153d
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.Designer.cs
@@ -0,0 +1,539 @@
+namespace ContosoUI.Order
+{
+ partial class AddEditOrderView
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddEditOrderView));
+ this.mainLayoutControl = new DevExpress.XtraLayout.LayoutControl();
+ this.goodsRowGridControl = new DevExpress.XtraGrid.GridControl();
+ this.goodsRowBindingSource = new System.Windows.Forms.BindingSource(this.components);
+ this.ordersGridView = new DevExpress.XtraGrid.Views.Grid.GridView();
+ this.colGoods = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colCount = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colPrice = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colTotalPrice = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colId = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colIsActive1 = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colEditTime = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.mainRibbonControl = new DevExpress.XtraBars.Ribbon.RibbonControl();
+ this.saveOrderButton = new DevExpress.XtraBars.BarButtonItem();
+ this.saveAndNewOrderButton = new DevExpress.XtraBars.BarButtonItem();
+ this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();
+ this.saveRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+ this.priceEdit = new DevExpress.XtraEditors.TextEdit();
+ this.addGoodButton = new DevExpress.XtraEditors.SimpleButton();
+ this.addCommentButton = new DevExpress.XtraEditors.SimpleButton();
+ this.commentTextEdit = new DevExpress.XtraEditors.TextEdit();
+ this.commentsListBox = new DevExpress.XtraEditors.ListBoxControl();
+ this.countOfGoodTextEdit = new DevExpress.XtraEditors.TextEdit();
+ this.goodsComboBox = new System.Windows.Forms.ComboBox();
+ this.customerComboBox = new System.Windows.Forms.ComboBox();
+ this.statusComboBox = new System.Windows.Forms.ComboBox();
+ this.layoutControlGroup = new DevExpress.XtraLayout.LayoutControlGroup();
+ this.goodLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.statusLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.customerLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+ this.commentLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
+ this.layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+ this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+ this.priceLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.gridLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.layoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.colIsActive = new DevExpress.XtraGrid.Columns.GridColumn();
+ ((System.ComponentModel.ISupportInitialize)(this.mainLayoutControl)).BeginInit();
+ this.mainLayoutControl.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.goodsRowGridControl)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.goodsRowBindingSource)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.ordersGridView)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.mainRibbonControl)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.priceEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.commentTextEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.commentsListBox)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.countOfGoodTextEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.goodLayoutControlItem)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.customerLayoutControlItem)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.commentLayoutControlItem)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.priceLayoutControlItem)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.gridLayoutControlItem)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem)).BeginInit();
+ this.SuspendLayout();
+ //
+ // mainLayoutControl
+ //
+ this.mainLayoutControl.Controls.Add(this.goodsRowGridControl);
+ this.mainLayoutControl.Controls.Add(this.priceEdit);
+ this.mainLayoutControl.Controls.Add(this.addGoodButton);
+ this.mainLayoutControl.Controls.Add(this.addCommentButton);
+ this.mainLayoutControl.Controls.Add(this.commentTextEdit);
+ this.mainLayoutControl.Controls.Add(this.commentsListBox);
+ this.mainLayoutControl.Controls.Add(this.countOfGoodTextEdit);
+ this.mainLayoutControl.Controls.Add(this.goodsComboBox);
+ this.mainLayoutControl.Controls.Add(this.customerComboBox);
+ this.mainLayoutControl.Controls.Add(this.statusComboBox);
+ this.mainLayoutControl.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.mainLayoutControl.Location = new System.Drawing.Point(0, 0);
+ this.mainLayoutControl.Name = "mainLayoutControl";
+ this.mainLayoutControl.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(582, 363, 250, 350);
+ this.mainLayoutControl.Root = this.layoutControlGroup;
+ this.mainLayoutControl.Size = new System.Drawing.Size(784, 561);
+ this.mainLayoutControl.TabIndex = 0;
+ this.mainLayoutControl.Text = "layoutControl1";
+ //
+ // goodsRowGridControl
+ //
+ this.goodsRowGridControl.DataSource = this.goodsRowBindingSource;
+ this.goodsRowGridControl.Location = new System.Drawing.Point(290, 120);
+ this.goodsRowGridControl.MainView = this.ordersGridView;
+ this.goodsRowGridControl.MenuManager = this.mainRibbonControl;
+ this.goodsRowGridControl.Name = "goodsRowGridControl";
+ this.goodsRowGridControl.Size = new System.Drawing.Size(482, 405);
+ this.goodsRowGridControl.TabIndex = 20;
+ this.goodsRowGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+ this.ordersGridView});
+ //
+ // goodsRowBindingSource
+ //
+ this.goodsRowBindingSource.DataSource = typeof(Domain.Entities.GoodsRow);
+ //
+ // ordersGridView
+ //
+ this.ordersGridView.ActiveFilterEnabled = false;
+ this.ordersGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+ this.colGoods,
+ this.colCount,
+ this.colPrice,
+ this.colTotalPrice,
+ this.colId,
+ this.colIsActive1,
+ this.colEditTime});
+ this.ordersGridView.GridControl = this.goodsRowGridControl;
+ this.ordersGridView.Name = "ordersGridView";
+ this.ordersGridView.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(this.ordersGridView_CellValueChanged);
+ //
+ // colGoods
+ //
+ this.colGoods.Caption = "Товар";
+ this.colGoods.FieldName = "Goods";
+ this.colGoods.Name = "colGoods";
+ this.colGoods.Visible = true;
+ this.colGoods.VisibleIndex = 0;
+ //
+ // colCount
+ //
+ this.colCount.Caption = "Кол-во";
+ this.colCount.FieldName = "Count";
+ this.colCount.Name = "colCount";
+ this.colCount.Visible = true;
+ this.colCount.VisibleIndex = 1;
+ //
+ // colPrice
+ //
+ this.colPrice.FieldName = "Price";
+ this.colPrice.Name = "colPrice";
+ //
+ // colTotalPrice
+ //
+ this.colTotalPrice.Caption = "Цена";
+ this.colTotalPrice.FieldName = "TotalPrice";
+ this.colTotalPrice.Name = "colTotalPrice";
+ this.colTotalPrice.OptionsColumn.ReadOnly = true;
+ this.colTotalPrice.Visible = true;
+ this.colTotalPrice.VisibleIndex = 2;
+ //
+ // colId
+ //
+ this.colId.FieldName = "Id";
+ this.colId.Name = "colId";
+ //
+ // colIsActive1
+ //
+ this.colIsActive1.Caption = "Активен";
+ this.colIsActive1.FieldName = "IsActive";
+ this.colIsActive1.Name = "colIsActive1";
+ this.colIsActive1.Visible = true;
+ this.colIsActive1.VisibleIndex = 3;
+ //
+ // colEditTime
+ //
+ this.colEditTime.FieldName = "EditTime";
+ this.colEditTime.Name = "colEditTime";
+ //
+ // mainRibbonControl
+ //
+ this.mainRibbonControl.Dock = System.Windows.Forms.DockStyle.None;
+ this.mainRibbonControl.ExpandCollapseItem.Id = 0;
+ this.mainRibbonControl.Items.AddRange(new DevExpress.XtraBars.BarItem[] {
+ this.mainRibbonControl.ExpandCollapseItem,
+ this.saveOrderButton,
+ this.saveAndNewOrderButton});
+ this.mainRibbonControl.Location = new System.Drawing.Point(0, 0);
+ this.mainRibbonControl.MaxItemId = 11;
+ this.mainRibbonControl.Name = "mainRibbonControl";
+ this.mainRibbonControl.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] {
+ this.mainRibbonPage});
+ this.mainRibbonControl.Size = new System.Drawing.Size(784, 141);
+ //
+ // saveOrderButton
+ //
+ this.saveOrderButton.Caption = "Сохранить";
+ this.saveOrderButton.Glyph = ((System.Drawing.Image)(resources.GetObject("saveOrderButton.Glyph")));
+ this.saveOrderButton.Id = 1;
+ this.saveOrderButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("saveOrderButton.LargeGlyph")));
+ this.saveOrderButton.Name = "saveOrderButton";
+ this.saveOrderButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveOrderButton_ItemClick);
+ //
+ // saveAndNewOrderButton
+ //
+ this.saveAndNewOrderButton.Caption = "Сохранить и Добавить";
+ this.saveAndNewOrderButton.Glyph = ((System.Drawing.Image)(resources.GetObject("saveAndNewOrderButton.Glyph")));
+ this.saveAndNewOrderButton.Id = 2;
+ this.saveAndNewOrderButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("saveAndNewOrderButton.LargeGlyph")));
+ this.saveAndNewOrderButton.Name = "saveAndNewOrderButton";
+ this.saveAndNewOrderButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveAndNewOrderButton_ItemClick);
+ //
+ // mainRibbonPage
+ //
+ this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
+ this.saveRibbonPageGroup});
+ this.mainRibbonPage.Name = "mainRibbonPage";
+ this.mainRibbonPage.Text = "Меню";
+ //
+ // saveRibbonPageGroup
+ //
+ this.saveRibbonPageGroup.ItemLinks.Add(this.saveOrderButton);
+ this.saveRibbonPageGroup.ItemLinks.Add(this.saveAndNewOrderButton);
+ this.saveRibbonPageGroup.MergeOrder = 5;
+ this.saveRibbonPageGroup.Name = "saveRibbonPageGroup";
+ this.saveRibbonPageGroup.Text = "Сохранить";
+ //
+ // priceEdit
+ //
+ this.priceEdit.Enabled = false;
+ this.priceEdit.Location = new System.Drawing.Point(82, 529);
+ this.priceEdit.MenuManager = this.mainRibbonControl;
+ this.priceEdit.Name = "priceEdit";
+ this.priceEdit.Properties.ReadOnly = true;
+ this.priceEdit.Size = new System.Drawing.Size(690, 20);
+ this.priceEdit.StyleController = this.mainLayoutControl;
+ this.priceEdit.TabIndex = 9;
+ //
+ // addGoodButton
+ //
+ this.addGoodButton.Location = new System.Drawing.Point(290, 94);
+ this.addGoodButton.Name = "addGoodButton";
+ this.addGoodButton.Size = new System.Drawing.Size(482, 22);
+ this.addGoodButton.StyleController = this.mainLayoutControl;
+ this.addGoodButton.TabIndex = 7;
+ this.addGoodButton.Text = "Добавить";
+ this.addGoodButton.Click += new System.EventHandler(this.addGoodButton_Click);
+ //
+ // addCommentButton
+ //
+ this.addCommentButton.Location = new System.Drawing.Point(12, 93);
+ this.addCommentButton.Name = "addCommentButton";
+ this.addCommentButton.Size = new System.Drawing.Size(274, 22);
+ this.addCommentButton.StyleController = this.mainLayoutControl;
+ this.addCommentButton.TabIndex = 6;
+ this.addCommentButton.Text = "Добавить";
+ this.addCommentButton.Click += new System.EventHandler(this.addCommentButton_Click);
+ //
+ // commentTextEdit
+ //
+ this.commentTextEdit.Location = new System.Drawing.Point(12, 69);
+ this.commentTextEdit.MenuManager = this.mainRibbonControl;
+ this.commentTextEdit.Name = "commentTextEdit";
+ this.commentTextEdit.Size = new System.Drawing.Size(274, 20);
+ this.commentTextEdit.StyleController = this.mainLayoutControl;
+ this.commentTextEdit.TabIndex = 3;
+ //
+ // commentsListBox
+ //
+ this.commentsListBox.Location = new System.Drawing.Point(12, 120);
+ this.commentsListBox.Name = "commentsListBox";
+ this.commentsListBox.Size = new System.Drawing.Size(274, 405);
+ this.commentsListBox.StyleController = this.mainLayoutControl;
+ this.commentsListBox.TabIndex = 8;
+ //
+ // countOfGoodTextEdit
+ //
+ this.countOfGoodTextEdit.Location = new System.Drawing.Point(679, 69);
+ this.countOfGoodTextEdit.MenuManager = this.mainRibbonControl;
+ this.countOfGoodTextEdit.Name = "countOfGoodTextEdit";
+ this.countOfGoodTextEdit.Size = new System.Drawing.Size(93, 20);
+ this.countOfGoodTextEdit.StyleController = this.mainLayoutControl;
+ this.countOfGoodTextEdit.TabIndex = 5;
+ //
+ // goodsComboBox
+ //
+ this.goodsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.goodsComboBox.FormattingEnabled = true;
+ this.goodsComboBox.Location = new System.Drawing.Point(290, 69);
+ this.goodsComboBox.Name = "goodsComboBox";
+ this.goodsComboBox.Size = new System.Drawing.Size(385, 21);
+ this.goodsComboBox.TabIndex = 4;
+ //
+ // customerComboBox
+ //
+ this.customerComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.customerComboBox.FormattingEnabled = true;
+ this.customerComboBox.Location = new System.Drawing.Point(290, 28);
+ this.customerComboBox.Name = "customerComboBox";
+ this.customerComboBox.Size = new System.Drawing.Size(482, 21);
+ this.customerComboBox.TabIndex = 2;
+ //
+ // statusComboBox
+ //
+ this.statusComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.statusComboBox.FormattingEnabled = true;
+ this.statusComboBox.Location = new System.Drawing.Point(12, 28);
+ this.statusComboBox.Name = "statusComboBox";
+ this.statusComboBox.Size = new System.Drawing.Size(274, 21);
+ this.statusComboBox.TabIndex = 0;
+ //
+ // layoutControlGroup
+ //
+ this.layoutControlGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+ this.layoutControlGroup.GroupBordersVisible = false;
+ this.layoutControlGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+ this.goodLayoutControlItem,
+ this.statusLayoutControlItem,
+ this.customerLayoutControlItem,
+ this.layoutControlItem1,
+ this.commentLayoutControlItem,
+ this.layoutControlItem5,
+ this.layoutControlItem4,
+ this.layoutControlItem2,
+ this.priceLayoutControlItem,
+ this.gridLayoutControlItem});
+ this.layoutControlGroup.Location = new System.Drawing.Point(0, 0);
+ this.layoutControlGroup.Name = "Root";
+ this.layoutControlGroup.Size = new System.Drawing.Size(784, 561);
+ this.layoutControlGroup.TextVisible = false;
+ //
+ // goodLayoutControlItem
+ //
+ this.goodLayoutControlItem.Control = this.goodsComboBox;
+ this.goodLayoutControlItem.Location = new System.Drawing.Point(278, 41);
+ this.goodLayoutControlItem.Name = "goodLayoutControlItem";
+ this.goodLayoutControlItem.Size = new System.Drawing.Size(389, 41);
+ this.goodLayoutControlItem.Text = "Товары";
+ this.goodLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top;
+ this.goodLayoutControlItem.TextSize = new System.Drawing.Size(67, 13);
+ //
+ // statusLayoutControlItem
+ //
+ this.statusLayoutControlItem.Control = this.statusComboBox;
+ this.statusLayoutControlItem.CustomizationFormText = "Статус";
+ this.statusLayoutControlItem.Location = new System.Drawing.Point(0, 0);
+ this.statusLayoutControlItem.Name = "statusLayoutControlItem";
+ this.statusLayoutControlItem.Size = new System.Drawing.Size(278, 41);
+ this.statusLayoutControlItem.Text = "Статус";
+ this.statusLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top;
+ this.statusLayoutControlItem.TextSize = new System.Drawing.Size(67, 13);
+ //
+ // customerLayoutControlItem
+ //
+ this.customerLayoutControlItem.Control = this.customerComboBox;
+ this.customerLayoutControlItem.Location = new System.Drawing.Point(278, 0);
+ this.customerLayoutControlItem.Name = "customerLayoutControlItem";
+ this.customerLayoutControlItem.Size = new System.Drawing.Size(486, 41);
+ this.customerLayoutControlItem.Text = "Клиент";
+ this.customerLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top;
+ this.customerLayoutControlItem.TextSize = new System.Drawing.Size(67, 13);
+ //
+ // layoutControlItem1
+ //
+ this.layoutControlItem1.Control = this.commentsListBox;
+ this.layoutControlItem1.Location = new System.Drawing.Point(0, 108);
+ this.layoutControlItem1.Name = "layoutControlItem1";
+ this.layoutControlItem1.Size = new System.Drawing.Size(278, 409);
+ this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
+ this.layoutControlItem1.TextVisible = false;
+ //
+ // commentLayoutControlItem
+ //
+ this.commentLayoutControlItem.Control = this.commentTextEdit;
+ this.commentLayoutControlItem.Location = new System.Drawing.Point(0, 41);
+ this.commentLayoutControlItem.Name = "commentLayoutControlItem";
+ this.commentLayoutControlItem.Size = new System.Drawing.Size(278, 40);
+ this.commentLayoutControlItem.Text = "Комментарий";
+ this.commentLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top;
+ this.commentLayoutControlItem.TextSize = new System.Drawing.Size(67, 13);
+ //
+ // layoutControlItem5
+ //
+ this.layoutControlItem5.Control = this.addCommentButton;
+ this.layoutControlItem5.Location = new System.Drawing.Point(0, 81);
+ this.layoutControlItem5.Name = "layoutControlItem5";
+ this.layoutControlItem5.Size = new System.Drawing.Size(278, 27);
+ this.layoutControlItem5.TextSize = new System.Drawing.Size(0, 0);
+ this.layoutControlItem5.TextVisible = false;
+ //
+ // layoutControlItem4
+ //
+ this.layoutControlItem4.Control = this.addGoodButton;
+ this.layoutControlItem4.Location = new System.Drawing.Point(278, 82);
+ this.layoutControlItem4.MinSize = new System.Drawing.Size(82, 26);
+ this.layoutControlItem4.Name = "layoutControlItem4";
+ this.layoutControlItem4.Size = new System.Drawing.Size(486, 26);
+ this.layoutControlItem4.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+ this.layoutControlItem4.TextSize = new System.Drawing.Size(0, 0);
+ this.layoutControlItem4.TextVisible = false;
+ //
+ // layoutControlItem2
+ //
+ this.layoutControlItem2.Control = this.countOfGoodTextEdit;
+ this.layoutControlItem2.Location = new System.Drawing.Point(667, 41);
+ this.layoutControlItem2.Name = "layoutControlItem2";
+ this.layoutControlItem2.Size = new System.Drawing.Size(97, 41);
+ this.layoutControlItem2.Text = "Кол-во";
+ this.layoutControlItem2.TextLocation = DevExpress.Utils.Locations.Top;
+ this.layoutControlItem2.TextSize = new System.Drawing.Size(67, 13);
+ //
+ // priceLayoutControlItem
+ //
+ this.priceLayoutControlItem.Control = this.priceEdit;
+ this.priceLayoutControlItem.Location = new System.Drawing.Point(0, 517);
+ this.priceLayoutControlItem.Name = "priceLayoutControlItem";
+ this.priceLayoutControlItem.Size = new System.Drawing.Size(764, 24);
+ this.priceLayoutControlItem.Text = "Цена заказа";
+ this.priceLayoutControlItem.TextSize = new System.Drawing.Size(67, 13);
+ //
+ // gridLayoutControlItem
+ //
+ this.gridLayoutControlItem.Control = this.goodsRowGridControl;
+ this.gridLayoutControlItem.Location = new System.Drawing.Point(278, 108);
+ this.gridLayoutControlItem.Name = "gridLayoutControlItem";
+ this.gridLayoutControlItem.Size = new System.Drawing.Size(486, 409);
+ this.gridLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top;
+ this.gridLayoutControlItem.TextSize = new System.Drawing.Size(0, 0);
+ this.gridLayoutControlItem.TextVisible = false;
+ //
+ // layoutControlItem
+ //
+ this.layoutControlItem.Location = new System.Drawing.Point(382, 120);
+ this.layoutControlItem.Name = "layoutControlItem7";
+ this.layoutControlItem.Size = new System.Drawing.Size(382, 281);
+ this.layoutControlItem.TextSize = new System.Drawing.Size(50, 20);
+ //
+ // colIsActive
+ //
+ this.colIsActive.Caption = "Активен";
+ this.colIsActive.FieldName = "IsActive";
+ this.colIsActive.Name = "colIsActive";
+ this.colIsActive.Visible = true;
+ this.colIsActive.VisibleIndex = 1;
+ //
+ // AddEditOrderView
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(784, 561);
+ this.Controls.Add(this.mainLayoutControl);
+ this.Controls.Add(this.mainRibbonControl);
+ this.Name = "AddEditOrderView";
+ this.Text = "Добавить/Редактировать заказ";
+ this.Load += new System.EventHandler(this.AddEditOrderView_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.mainLayoutControl)).EndInit();
+ this.mainLayoutControl.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.goodsRowGridControl)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.goodsRowBindingSource)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.ordersGridView)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.mainRibbonControl)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.priceEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.commentTextEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.commentsListBox)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.countOfGoodTextEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.goodLayoutControlItem)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.customerLayoutControlItem)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.commentLayoutControlItem)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.priceLayoutControlItem)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.gridLayoutControlItem)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private DevExpress.XtraLayout.LayoutControl mainLayoutControl;
+ private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup;
+ private DevExpress.XtraLayout.LayoutControlItem layoutControlItem;
+ private DevExpress.XtraBars.Ribbon.RibbonControl mainRibbonControl;
+ private DevExpress.XtraBars.BarButtonItem saveOrderButton;
+ private DevExpress.XtraBars.BarButtonItem saveAndNewOrderButton;
+ private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage;
+ private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveRibbonPageGroup;
+ private System.Windows.Forms.ComboBox customerComboBox;
+ private DevExpress.XtraLayout.LayoutControlItem customerLayoutControlItem;
+ private System.Windows.Forms.ComboBox statusComboBox;
+ private DevExpress.XtraLayout.LayoutControlItem statusLayoutControlItem;
+ private DevExpress.XtraEditors.TextEdit countOfGoodTextEdit;
+ private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+ private DevExpress.XtraEditors.SimpleButton addGoodButton;
+ private DevExpress.XtraEditors.SimpleButton addCommentButton;
+ private DevExpress.XtraEditors.TextEdit commentTextEdit;
+ private DevExpress.XtraEditors.ListBoxControl commentsListBox;
+ private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+ private DevExpress.XtraLayout.LayoutControlItem commentLayoutControlItem;
+ private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
+ private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+ private System.Windows.Forms.ComboBox goodsComboBox;
+ private DevExpress.XtraLayout.LayoutControlItem goodLayoutControlItem;
+ private DevExpress.XtraGrid.Columns.GridColumn colIsActive;
+ private DevExpress.XtraGrid.GridControl goodsRowGridControl;
+ private DevExpress.XtraGrid.Views.Grid.GridView ordersGridView;
+ private DevExpress.XtraLayout.LayoutControlItem gridLayoutControlItem;
+ private DevExpress.XtraEditors.TextEdit priceEdit;
+ private DevExpress.XtraLayout.LayoutControlItem priceLayoutControlItem;
+ private System.Windows.Forms.BindingSource goodsRowBindingSource;
+ private DevExpress.XtraGrid.Columns.GridColumn colGoods;
+ private DevExpress.XtraGrid.Columns.GridColumn colCount;
+ private DevExpress.XtraGrid.Columns.GridColumn colPrice;
+ private DevExpress.XtraGrid.Columns.GridColumn colTotalPrice;
+ private DevExpress.XtraGrid.Columns.GridColumn colId;
+ private DevExpress.XtraGrid.Columns.GridColumn colIsActive1;
+ private DevExpress.XtraGrid.Columns.GridColumn colEditTime;
+ }
+}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.cs
new file mode 100644
index 0000000..b5f97ca
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.cs
@@ -0,0 +1,99 @@
+using System;
+using System.Windows.Forms;
+using DevExpress.XtraEditors;
+using ContosoUI.Order.AddEdit;
+using DevExpress.XtraGrid.Views.Grid;
+using Domain.Entities;
+
+namespace ContosoUI.Order
+{
+ public partial class AddEditOrderView : XtraForm
+ {
+ AddEditOrderPresenter presenter;
+ IUserNotify notifyManager = Program.MainWiewInstance;
+ BindingSource bindings;
+
+ public AddEditOrderView(int id = -1)
+ {
+ InitializeComponent();
+ presenter = new AddEditOrderPresenter(this, id);
+ }
+
+ private void AddEditOrderView_Load(object sender, EventArgs e)
+ {
+ bindings = new BindingSource();
+ bindings.DataSource = presenter;
+
+ customerComboBox.DataBindings.Clear();
+ customerComboBox.DataBindings.Add("DataSource", bindings, "Customers");
+ customerComboBox.DataBindings.Add("SelectedItem", bindings, "Customer");
+
+ priceEdit.DataBindings.Add("EditValue", bindings, "TotalCost");
+
+ statusComboBox.DataBindings.Clear();
+ statusComboBox.DataBindings.Add("DataSource", bindings, "Statuses");
+ statusComboBox.DataBindings.Add("SelectedItem", bindings, "Status");
+
+ goodsComboBox.DataBindings.Add("DataSource", bindings, "Goods");
+
+ commentsListBox.DataBindings.Add("DataSource", bindings, "Comments");
+
+ commentTextEdit.DataBindings.Add("EditValue", bindings, "Message");
+
+ goodsRowGridControl.DataBindings.Add("DataSource", bindings, "GoodsListSource");
+ goodsComboBox.DataBindings.Add("SelectedItem", bindings, "SelectedGood");
+
+ countOfGoodTextEdit.DataBindings.Add("EditValue", bindings, "CountOfGood");
+
+ }
+
+ private void addCommentButton_Click(object sender, EventArgs e)
+ {
+ bindings.EndEdit();
+ presenter.AddComment();
+ }
+
+ private void addGoodButton_Click(object sender, EventArgs e)
+ {
+ bindings.EndEdit();
+
+ if (ValidateCount())
+ {
+ presenter.AddGoodRow();
+ priceEdit.Text = Convert.ToString(presenter.TotalCost);
+ }
+ else
+ {
+ notifyManager.ShowInfo("Некорректное кол-во товаров", "Сообщение");
+ }
+
+ goodsRowGridControl.RefreshDataSource();
+ }
+
+ private void saveOrderButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ {
+ bindings.EndEdit();
+ presenter.Save();
+ }
+
+ private void saveAndNewOrderButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ {
+ bindings.EndEdit();
+ presenter.SaveAndNew();
+ goodsRowGridControl.RefreshDataSource();
+ }
+
+ private void ordersGridView_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
+ {
+ priceEdit.Text = Convert.ToString(presenter.TotalCost);
+ }
+
+ private bool ValidateCount()
+ {
+ int temp;
+ int.TryParse(countOfGoodTextEdit.Text, out temp);
+
+ return temp > 0 && temp < int.MaxValue;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.resx b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.resx
new file mode 100644
index 0000000..4093204
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddEditOrderView.resx
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0
+ bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM
+ r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd
+ EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ
+ ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2
+ 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt
+ kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi
+ T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA
+ rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS
+ KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi
+ 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW
+ ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF
+ 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd
+ /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf
+ AAAAAElFTkSuQmCC
+
+
+
+
+ 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
+ rkJggg==
+
+
+
+
+ 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
+ yid5+T/OWngYNBFkcAAAAABJRU5ErkJggg==
+
+
+
+ True
+
+
+ 49
+
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.Designer.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.Designer.cs
deleted file mode 100644
index 4fdda83..0000000
--- a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.Designer.cs
+++ /dev/null
@@ -1,402 +0,0 @@
-namespace ContosoUI.Order
-{
- partial class AddEditOrderView
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddEditOrderView));
- this.mainLayoutControl = new DevExpress.XtraLayout.LayoutControl();
- this.commentsListBoxControl = new DevExpress.XtraEditors.ListBoxControl();
- this.goodsListBoxControl = new DevExpress.XtraEditors.ListBoxControl();
- this.statusComboBoxEdit = new DevExpress.XtraEditors.ComboBoxEdit();
- this.mainRibbonControl = new DevExpress.XtraBars.Ribbon.RibbonControl();
- this.saveOrderButton = new DevExpress.XtraBars.BarButtonItem();
- this.saveAndNewOrderButton = new DevExpress.XtraBars.BarButtonItem();
- this.addGoodButton = new DevExpress.XtraBars.BarButtonItem();
- this.addCommentButton = new DevExpress.XtraBars.BarButtonItem();
- this.barButtonItem1 = new DevExpress.XtraBars.BarButtonItem();
- this.barButtonItem2 = new DevExpress.XtraBars.BarButtonItem();
- this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();
- this.addGroupPage = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
- this.deleteRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
- this.ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
- this.commentTextEdit = new DevExpress.XtraEditors.TextEdit();
- this.totalCostTextEdit = new DevExpress.XtraEditors.TextEdit();
- this.customerComboBoxEdit = new DevExpress.XtraEditors.ComboBoxEdit();
- this.goodComboBoxEdit = new DevExpress.XtraEditors.ComboBoxEdit();
- this.layoutControlGroup = new DevExpress.XtraLayout.LayoutControlGroup();
- this.goodLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
- this.customerLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
- this.totalCostlayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
- this.commenLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
- this.layoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
- this.statusLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
- this.layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem();
- ((System.ComponentModel.ISupportInitialize)(this.mainLayoutControl)).BeginInit();
- this.mainLayoutControl.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.commentsListBoxControl)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.goodsListBoxControl)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.statusComboBoxEdit.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.mainRibbonControl)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.commentTextEdit.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.totalCostTextEdit.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.customerComboBoxEdit.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.goodComboBoxEdit.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.goodLayoutControlItem)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.customerLayoutControlItem)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.totalCostlayoutControlItem)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.commenLayoutControlItem)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem7)).BeginInit();
- this.SuspendLayout();
- //
- // mainLayoutControl
- //
- this.mainLayoutControl.Controls.Add(this.commentsListBoxControl);
- this.mainLayoutControl.Controls.Add(this.goodsListBoxControl);
- this.mainLayoutControl.Controls.Add(this.statusComboBoxEdit);
- this.mainLayoutControl.Controls.Add(this.commentTextEdit);
- this.mainLayoutControl.Controls.Add(this.totalCostTextEdit);
- this.mainLayoutControl.Controls.Add(this.customerComboBoxEdit);
- this.mainLayoutControl.Controls.Add(this.goodComboBoxEdit);
- this.mainLayoutControl.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.mainLayoutControl.Location = new System.Drawing.Point(0, 140);
- this.mainLayoutControl.Name = "mainLayoutControl";
- this.mainLayoutControl.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(878, 363, 250, 350);
- this.mainLayoutControl.Root = this.layoutControlGroup;
- this.mainLayoutControl.Size = new System.Drawing.Size(784, 421);
- this.mainLayoutControl.TabIndex = 0;
- this.mainLayoutControl.Text = "layoutControl1";
- //
- // commentsListBoxControl
- //
- this.commentsListBoxControl.Location = new System.Drawing.Point(394, 132);
- this.commentsListBoxControl.Name = "commentsListBoxControl";
- this.commentsListBoxControl.Size = new System.Drawing.Size(378, 277);
- this.commentsListBoxControl.StyleController = this.mainLayoutControl;
- this.commentsListBoxControl.TabIndex = 0;
- //
- // goodsListBoxControl
- //
- this.goodsListBoxControl.Location = new System.Drawing.Point(12, 132);
- this.goodsListBoxControl.Name = "goodsListBoxControl";
- this.goodsListBoxControl.Size = new System.Drawing.Size(760, 277);
- this.goodsListBoxControl.StyleController = this.mainLayoutControl;
- this.goodsListBoxControl.TabIndex = 9;
- //
- // statusComboBoxEdit
- //
- this.statusComboBoxEdit.Location = new System.Drawing.Point(82, 36);
- this.statusComboBoxEdit.MenuManager = this.mainRibbonControl;
- this.statusComboBoxEdit.Name = "statusComboBoxEdit";
- this.statusComboBoxEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
- new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
- this.statusComboBoxEdit.Size = new System.Drawing.Size(690, 20);
- this.statusComboBoxEdit.StyleController = this.mainLayoutControl;
- this.statusComboBoxEdit.TabIndex = 8;
- //
- // mainRibbonControl
- //
- this.mainRibbonControl.ExpandCollapseItem.Id = 0;
- this.mainRibbonControl.Items.AddRange(new DevExpress.XtraBars.BarItem[] {
- this.mainRibbonControl.ExpandCollapseItem,
- this.saveOrderButton,
- this.saveAndNewOrderButton,
- this.addGoodButton,
- this.addCommentButton,
- this.barButtonItem1,
- this.barButtonItem2});
- this.mainRibbonControl.Location = new System.Drawing.Point(0, 0);
- this.mainRibbonControl.MaxItemId = 7;
- this.mainRibbonControl.Name = "mainRibbonControl";
- this.mainRibbonControl.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] {
- this.mainRibbonPage});
- this.mainRibbonControl.Size = new System.Drawing.Size(784, 141);
- //
- // saveOrderButton
- //
- this.saveOrderButton.Caption = "Сохранить";
- this.saveOrderButton.Glyph = ((System.Drawing.Image)(resources.GetObject("saveOrderButton.Glyph")));
- this.saveOrderButton.Id = 1;
- this.saveOrderButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("saveOrderButton.LargeGlyph")));
- this.saveOrderButton.Name = "saveOrderButton";
- //
- // saveAndNewOrderButton
- //
- this.saveAndNewOrderButton.Caption = "Сохранить и Добавить";
- this.saveAndNewOrderButton.Glyph = ((System.Drawing.Image)(resources.GetObject("saveAndNewOrderButton.Glyph")));
- this.saveAndNewOrderButton.Id = 2;
- this.saveAndNewOrderButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("saveAndNewOrderButton.LargeGlyph")));
- this.saveAndNewOrderButton.Name = "saveAndNewOrderButton";
- //
- // addGoodButton
- //
- this.addGoodButton.Caption = "Добавить товар";
- this.addGoodButton.Glyph = ((System.Drawing.Image)(resources.GetObject("addGoodButton.Glyph")));
- this.addGoodButton.Id = 3;
- this.addGoodButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("addGoodButton.LargeGlyph")));
- this.addGoodButton.Name = "addGoodButton";
- //
- // addCommentButton
- //
- this.addCommentButton.Caption = "Добавить комментарий";
- this.addCommentButton.Glyph = ((System.Drawing.Image)(resources.GetObject("addCommentButton.Glyph")));
- this.addCommentButton.Id = 4;
- this.addCommentButton.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("addCommentButton.LargeGlyph")));
- this.addCommentButton.Name = "addCommentButton";
- //
- // barButtonItem1
- //
- this.barButtonItem1.Caption = "Удалить товар";
- this.barButtonItem1.Glyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem1.Glyph")));
- this.barButtonItem1.Id = 5;
- this.barButtonItem1.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem1.LargeGlyph")));
- this.barButtonItem1.Name = "barButtonItem1";
- //
- // barButtonItem2
- //
- this.barButtonItem2.Caption = "Удалить комментарий";
- this.barButtonItem2.Glyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem2.Glyph")));
- this.barButtonItem2.Id = 6;
- this.barButtonItem2.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem2.LargeGlyph")));
- this.barButtonItem2.Name = "barButtonItem2";
- //
- // mainRibbonPage
- //
- this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
- this.addGroupPage,
- this.deleteRibbonPageGroup,
- this.ribbonPageGroup1});
- this.mainRibbonPage.Name = "mainRibbonPage";
- this.mainRibbonPage.Text = "Главная";
- //
- // addGroupPage
- //
- this.addGroupPage.ItemLinks.Add(this.addGoodButton);
- this.addGroupPage.ItemLinks.Add(this.addCommentButton);
- this.addGroupPage.MergeOrder = 10;
- this.addGroupPage.Name = "addGroupPage";
- this.addGroupPage.Text = "Добавить";
- //
- // deleteRibbonPageGroup
- //
- this.deleteRibbonPageGroup.ItemLinks.Add(this.barButtonItem1);
- this.deleteRibbonPageGroup.ItemLinks.Add(this.barButtonItem2);
- this.deleteRibbonPageGroup.MergeOrder = 20;
- this.deleteRibbonPageGroup.Name = "deleteRibbonPageGroup";
- this.deleteRibbonPageGroup.Text = "Удалить";
- //
- // ribbonPageGroup1
- //
- this.ribbonPageGroup1.ItemLinks.Add(this.saveOrderButton);
- this.ribbonPageGroup1.ItemLinks.Add(this.saveAndNewOrderButton);
- this.ribbonPageGroup1.MergeOrder = 30;
- this.ribbonPageGroup1.Name = "ribbonPageGroup1";
- this.ribbonPageGroup1.Text = "Сохранить";
- //
- // commentTextEdit
- //
- this.commentTextEdit.Location = new System.Drawing.Point(82, 84);
- this.commentTextEdit.MenuManager = this.mainRibbonControl;
- this.commentTextEdit.Name = "commentTextEdit";
- this.commentTextEdit.Size = new System.Drawing.Size(690, 20);
- this.commentTextEdit.StyleController = this.mainLayoutControl;
- this.commentTextEdit.TabIndex = 7;
- //
- // totalCostTextEdit
- //
- this.totalCostTextEdit.Location = new System.Drawing.Point(82, 60);
- this.totalCostTextEdit.MenuManager = this.mainRibbonControl;
- this.totalCostTextEdit.Name = "totalCostTextEdit";
- this.totalCostTextEdit.Size = new System.Drawing.Size(690, 20);
- this.totalCostTextEdit.StyleController = this.mainLayoutControl;
- this.totalCostTextEdit.TabIndex = 6;
- //
- // customerComboBoxEdit
- //
- this.customerComboBoxEdit.Location = new System.Drawing.Point(82, 12);
- this.customerComboBoxEdit.MenuManager = this.mainRibbonControl;
- this.customerComboBoxEdit.Name = "customerComboBoxEdit";
- this.customerComboBoxEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
- new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
- this.customerComboBoxEdit.Size = new System.Drawing.Size(690, 20);
- this.customerComboBoxEdit.StyleController = this.mainLayoutControl;
- this.customerComboBoxEdit.TabIndex = 5;
- //
- // goodComboBoxEdit
- //
- this.goodComboBoxEdit.Location = new System.Drawing.Point(82, 108);
- this.goodComboBoxEdit.MenuManager = this.mainRibbonControl;
- this.goodComboBoxEdit.Name = "goodComboBoxEdit";
- this.goodComboBoxEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
- new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
- this.goodComboBoxEdit.Size = new System.Drawing.Size(690, 20);
- this.goodComboBoxEdit.StyleController = this.mainLayoutControl;
- this.goodComboBoxEdit.TabIndex = 4;
- //
- // layoutControlGroup
- //
- this.layoutControlGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
- this.layoutControlGroup.GroupBordersVisible = false;
- this.layoutControlGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
- this.goodLayoutControlItem,
- this.customerLayoutControlItem,
- this.totalCostlayoutControlItem,
- this.commenLayoutControlItem,
- this.layoutControlItem,
- this.statusLayoutControlItem});
- this.layoutControlGroup.Location = new System.Drawing.Point(0, 0);
- this.layoutControlGroup.Name = "Root";
- this.layoutControlGroup.Size = new System.Drawing.Size(784, 421);
- this.layoutControlGroup.TextVisible = false;
- //
- // goodLayoutControlItem
- //
- this.goodLayoutControlItem.Control = this.goodComboBoxEdit;
- this.goodLayoutControlItem.Location = new System.Drawing.Point(0, 96);
- this.goodLayoutControlItem.Name = "goodLayoutControlItem";
- this.goodLayoutControlItem.Size = new System.Drawing.Size(764, 24);
- this.goodLayoutControlItem.Text = "Товар";
- this.goodLayoutControlItem.TextSize = new System.Drawing.Size(67, 13);
- //
- // customerLayoutControlItem
- //
- this.customerLayoutControlItem.Control = this.customerComboBoxEdit;
- this.customerLayoutControlItem.Location = new System.Drawing.Point(0, 0);
- this.customerLayoutControlItem.Name = "customerLayoutControlItem";
- this.customerLayoutControlItem.Size = new System.Drawing.Size(764, 24);
- this.customerLayoutControlItem.Text = "Клиент";
- this.customerLayoutControlItem.TextSize = new System.Drawing.Size(67, 13);
- //
- // totalCostlayoutControlItem
- //
- this.totalCostlayoutControlItem.Control = this.totalCostTextEdit;
- this.totalCostlayoutControlItem.Location = new System.Drawing.Point(0, 48);
- this.totalCostlayoutControlItem.Name = "totalCostlayoutControlItem";
- this.totalCostlayoutControlItem.Size = new System.Drawing.Size(764, 24);
- this.totalCostlayoutControlItem.Text = "Цена";
- this.totalCostlayoutControlItem.TextSize = new System.Drawing.Size(67, 13);
- //
- // commenLayoutControlItem
- //
- this.commenLayoutControlItem.Control = this.commentTextEdit;
- this.commenLayoutControlItem.Location = new System.Drawing.Point(0, 72);
- this.commenLayoutControlItem.Name = "commenLayoutControlItem";
- this.commenLayoutControlItem.Size = new System.Drawing.Size(764, 24);
- this.commenLayoutControlItem.Text = "Комментарий";
- this.commenLayoutControlItem.TextSize = new System.Drawing.Size(67, 13);
- //
- // layoutControlItem
- //
- this.layoutControlItem.Control = this.goodsListBoxControl;
- this.layoutControlItem.Location = new System.Drawing.Point(0, 120);
- this.layoutControlItem.Name = "layoutControlItem";
- this.layoutControlItem.Size = new System.Drawing.Size(764, 281);
- this.layoutControlItem.TextSize = new System.Drawing.Size(0, 0);
- this.layoutControlItem.TextVisible = false;
- //
- // statusLayoutControlItem
- //
- this.statusLayoutControlItem.Control = this.statusComboBoxEdit;
- this.statusLayoutControlItem.Location = new System.Drawing.Point(0, 24);
- this.statusLayoutControlItem.Name = "statusLayoutControlItem";
- this.statusLayoutControlItem.Size = new System.Drawing.Size(764, 24);
- this.statusLayoutControlItem.Text = "Статус";
- this.statusLayoutControlItem.TextSize = new System.Drawing.Size(67, 13);
- //
- // layoutControlItem7
- //
- this.layoutControlItem7.Location = new System.Drawing.Point(382, 120);
- this.layoutControlItem7.Name = "layoutControlItem7";
- this.layoutControlItem7.Size = new System.Drawing.Size(382, 281);
- this.layoutControlItem7.TextSize = new System.Drawing.Size(50, 20);
- //
- // AddEditOrderView
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(784, 561);
- this.Controls.Add(this.mainRibbonControl);
- this.Controls.Add(this.mainLayoutControl);
- this.Name = "AddEditOrderView";
- this.Text = "Добавить/Редактировать заказ";
- ((System.ComponentModel.ISupportInitialize)(this.mainLayoutControl)).EndInit();
- this.mainLayoutControl.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.commentsListBoxControl)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.goodsListBoxControl)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.statusComboBoxEdit.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.mainRibbonControl)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.commentTextEdit.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.totalCostTextEdit.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.customerComboBoxEdit.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.goodComboBoxEdit.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.goodLayoutControlItem)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.customerLayoutControlItem)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.totalCostlayoutControlItem)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.commenLayoutControlItem)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem7)).EndInit();
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private DevExpress.XtraLayout.LayoutControl mainLayoutControl;
- private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup;
- private DevExpress.XtraBars.Ribbon.RibbonControl mainRibbonControl;
- private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage;
- private DevExpress.XtraBars.Ribbon.RibbonPageGroup addGroupPage;
- private DevExpress.XtraEditors.ComboBoxEdit goodComboBoxEdit;
- private DevExpress.XtraLayout.LayoutControlItem goodLayoutControlItem;
- private DevExpress.XtraEditors.TextEdit totalCostTextEdit;
- private DevExpress.XtraEditors.ComboBoxEdit customerComboBoxEdit;
- private DevExpress.XtraLayout.LayoutControlItem customerLayoutControlItem;
- private DevExpress.XtraLayout.LayoutControlItem totalCostlayoutControlItem;
- private DevExpress.XtraEditors.TextEdit commentTextEdit;
- private DevExpress.XtraLayout.LayoutControlItem commenLayoutControlItem;
- private DevExpress.XtraEditors.ComboBoxEdit statusComboBoxEdit;
- private DevExpress.XtraLayout.LayoutControlItem statusLayoutControlItem;
- private DevExpress.XtraEditors.ListBoxControl commentsListBoxControl;
- private DevExpress.XtraEditors.ListBoxControl goodsListBoxControl;
- private DevExpress.XtraLayout.LayoutControlItem layoutControlItem;
- private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
- private DevExpress.XtraBars.BarButtonItem saveOrderButton;
- private DevExpress.XtraBars.BarButtonItem saveAndNewOrderButton;
- private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
- private DevExpress.XtraBars.BarButtonItem addGoodButton;
- private DevExpress.XtraBars.BarButtonItem addCommentButton;
- private DevExpress.XtraBars.BarButtonItem barButtonItem1;
- private DevExpress.XtraBars.BarButtonItem barButtonItem2;
- private DevExpress.XtraBars.Ribbon.RibbonPageGroup deleteRibbonPageGroup;
- }
-}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.cs
deleted file mode 100644
index 57f7888..0000000
--- a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Linq;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using DevExpress.XtraEditors;
-
-namespace ContosoUI.Order
-{
- public partial class AddEditOrderView : DevExpress.XtraEditors.XtraForm
- {
- public AddEditOrderView()
- {
- InitializeComponent();
- }
- }
-}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.resx b/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.resx
deleted file mode 100644
index ff71b62..0000000
--- a/Solution/ContosoProject/ContosoUI/Order/AddEdit/AddOrderXtraForm.resx
+++ /dev/null
@@ -1,495 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0
- bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM
- r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd
- EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ
- ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2
- 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt
- kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi
- T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA
- rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS
- KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi
- 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW
- ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF
- 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd
- /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf
- AAAAAElFTkSuQmCC
-
-
-
-
- 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
- rkJggg==
-
-
-
-
- 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
- yid5+T/OWngYNBFkcAAAAABJRU5ErkJggg==
-
-
-
-
- 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
- SUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACN0RVh0VGl0
- bGUAQWRkO0ZpbGU7QWRkRmlsZTtCYXJzO1JpYmJvbjsV3KoKAAADJElEQVQ4T02TaUhUURiGr2tqFkUF
- /fFHOLbaRgtTFFqhWaE1KhFlppHiMla2KIrlWi5NTo6OuYJaQaWSUhnZItnmaFoUgaH5ozQxLXNWvTPj
- 23fOJHTguR/33Ps+9zvn3ivQsCuo6nx+paoTjIIqDfIrNSgg8io6iQ7klmuQW/YWl8s6kFP6so0y9gAE
- Bhv2+RUaTNMZhw42pjnWGaw2sopfsZTD/wKHS+Vvecg0aYGRMJhs6I1mjs5ogZYQLVakK9tZyvF/gSOz
- MoHeZAvYQmYuM5LINEXCSTNEswW5at6BU1a9v8Bgwyld+YK3qzOK0BlEEokY/j2E5s5rUD44AroRhVSb
- NYVofqZhAheL1SBk3PHjAudURRtf58S/p3/+psGlxv141FOM72MfYbboeG3pViHzdiDirm6RUc4+7eYu
- LpiVnPeUC/7ozfgxNoicu0HoG+6AaP0NdVMqzpUeRMm9c9BOfUHv0HOk1OzQRmZu9KKsHRO4JmY/hoV2
- WEvt321X4GFXCQziN4wYXiOxOAS9A2M4rQrB1z/1GJhoQuObHMiLtlZQ1pEJ3OTpLVwwoZvEhZr96B1p
- huKOHCeVwUgg2L7IqcYXypB9KxxP+pMQp5QOU3YWE8yOTbtP6ySBfhIJqm14N5KJOMUBfOr7iXGSjuum
- eGUjJj8INz774ET+JpGyLkzgHp3SBLPZinGtiVregyd9ciRV+yMqLxBRuYEYnTAi6nIgThBnK/2g6tiA
- sIx1rAMumHs8uYnesRWj40aUNmag+GEoqj5uhrpnDY5n7+VPjszci9IP3lC/90bq7fU4cGZlLWWdueDY
- 2UZMkUCrFzEw2I+ILCmuv/SFqns5EtS+OHoxAPISHxR1L0VO6zKEJK0ySGUeaynrwARuh2Lr2sNO1+Pw
- qXooKtpRVFuH0PPrkFi9GlmtEhR2eVL1RHyZF2SJ3lZpsEcY5Zz3yZeyvGDPJMQ8Yj6xgFi8TLrQZ2fE
- koaAGMlYQJwX/GMkv3zDlzSs2L5oC113Jex2x0gE/kPMsDtWIvBJ2wfC2mOb5E7MJeb8O2fzdn7RnoJf
- tKfwF7guZQwBlVFoAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACN0RVh0VGl0
- bGUAQWRkO0ZpbGU7QWRkRmlsZTtCYXJzO1JpYmJvbjsV3KoKAAAILklEQVRYR4WXaVBUVxqGmySzZJbM
- TGYr50fKEZxEU9boWE4S42gSIxqNE41VWsaJKyASjcsAARQFBBQQWVQ0UTSJoilwonGJG7gjSixLnUlc
- cAVZuukNuummu4F33u/0bdJtY/yqnjr3IpznPefec85VB6AbvwrReII8+Qie6gH5ufzdD1aAM+CGVfjZ
- uYqCz8+BLQqEbZUo3OZt84m3PYv8rWeRV3wWa9muLT6jSMn9Oo1dSBAJHpJWUK5Lyz+qSyX+FeAMuGGJ
- 9HHlcnlgd7hgbXFAb2zFvTozw1aiorIGCav2rGQ3PyIqRJO5XZeUc1C67i528b0z4IaVz46kPJ1d8Hg6
- 2XbC7elSuHgvOJwe2NpcMLc40dhsw637JuRsPoWuLmBf+XdYlFKWzq5+TFSIuPS90nV3+XxC4A1LplbK
- TZHgk7rcDODuRLuGw+lCq92FZlMbbt9vRvqGchXA5vBgz9H/ITpxRwa7+wkJei98PiHwhpXHZyklQjdF
- XrlXqlpXJ5x8BO3aYzBaHai5b0Tymq9VAAf/XULsPngFsxdvzWSXPyUBIXw+IfCGlasF8BfKtVNaTS44
- hHYPTHwPau42IzZjrwogj0p+1+bowBf7LmFazMagED6fEHjDWsNnKSUjFKQzp9srVWJKfdjb3bC0OnHz
- rhELlpepv5MQHZ0M0iFBOrBzTzUmRxRICN87EegMuGHlfOINEDBShvBK3ZqYON3EwwDtuNtgwbKc/Yj6
- qAQRcTsQEbsDc/4tbFdExpdI5z8jMguBzoAbVtbHJ3nJANoo/UcrQp9Y2lauhBaiN7fhVq0Zl683oPrq
- fVRduofT1XdwvKoGp8/f4vtxSDr/JXl8gFUbT/CSL5OSUq6Ebtj8cVBObHwJpZVZaLZwT+CKaDDYUFtv
- xW0GunGnmSvEiKSsg9L5M0Q2qUBnwA0ro6gCfIzd0xws9kqFFoFL0WprV62FrVnCcGU0meyo17dyo7Ih
- IWu/dP4rogIE1MMB0tdp61lJPV4Zr7uldk1KWmze1iotEbmCG5Tewtkw2mGytiE+QwX4NXl8gLSCY9qG
- 4hstRSJTUrdXqEktGuaWdpg4epkBq81JHAznVPJWXmeuOyqdP0ueSikbqUstfVOXUjpS+YICpOQdUQHU
- SP1GrEbrJ/WKnQqR3W2qwVcXClF0eC7SdocjrSwcRYeisK+6ELuPHJPO/0hkKYbYPTd1yTvfEF1wgBVr
- DzFAlzZifzFHyOm1tHqvRWwiMtqKKyXI2jMRR67moUZ/BHb3DXIdNU2HcfhyLjJK/4kFBa/IIfULojak
- pdtfE11wAFkyEiBgmik2+WHklMsWbLS2oPhYLDZXRKPeWgmL6wIetJXiprUA35ozccOSj1rbTtw2HcCm
- w5GIKx5eMfC1P8nL+P3W/HCARC6ZTglAsb9UIWLSbJWpd2D32Vx8fnIxWlxXUG/fi+/MWVhdMhML1kxS
- ZJZMxyXDUlw2pOJey05sPhqDheuHbqBGDil1UgYFSFh9AJ08ik2caqOMVtDERk65gevdwNFfu/9frPxi
- PPT2Stxr3U5JMmXL8EH2JDSbHYqY7HdxoTEWVQ1LcK5+Ma4aCpG4bVTH1IS/DqFKVkRwgPjMr7wBREh5
- s4yYYgVHrrcwhNmGXcezcfBiNupsX+KiPgnVjfFKNm/1u3xv2tHGpRu9agJO183HqdoYnKidR2Kw49R8
- RGYPkVmQA+qJoABx6XtUAK9Ypts75QaNRm67BnMrVpZMRuXtXFwxZCFl21REZ07EXCFjIoycJTtXUGT6
- O4oIkvTJJByomYbt30xGRNaQG1T9nDwZFGBJ6pc8zbq6hXpBtlmOvIk0crvVG61YVDQcVQ9WoOTqGESl
- T8DdWgvuPLDgJlu9kfsAX+IGYxu+vWPGVW7Js1LGo+j8EGyqehWzMge3UuU9Gx4OsGjFf7oDiNSHyJtM
- DtRzr28yWDC/8FUcv7MQ6y8MxpzUd9CoSX1LVnZE34sry3VG8jjkVQ5A3plBeD91kJ0qORuCAoQsTN6t
- AiipiXIi4gaNOr0NDXoL4orext4rc7Hu/GAs2TAWM5e/jRkaIpQXdvqycXh/qTAWHxaOxpoz/ZFxaAAm
- Jw64SVePMxAyf1kpPPyiELnQwJE18GCRfV2oM9jxQG/GhrJkrD84GRsvvIxN1a+g+OIIxb+SxvJRtHC1
- ODEt8S1s/uYfiqLzLyHndD/EfToQ4z/st4WuHt+BkJhEbwAl1qgXmnm6kTo5bpssPPerELH6ZXx6MZwd
- 91edZ5P3Et7Cdb4HMmtT48cg68TzWH2KsM049jymJL3YMXTSc8Ppkr0geBlGJ+zi55T3C6hNHck+vMex
- fIDIZ5jBZEF+SRLiPx6OnJP9uyUxuSMxJW40psSORvSakVh1vC8yjoeRUMzMegHhkWHF1Pi+DYIDzI3f
- eSiKn1CRcSSWn1hkTqx8Wu3AbH5ezV5CFn+GeQkl2LqrHFEpEyn6G5YfoKgiDPlnB2F91Uvk77weiJXl
- oVi2PxRT0/piVFTYqd/0eroXNY/eCf1K9uofQvZz2UyefWNGn5UTlvRzxmx8AR+VhSG1vI8ivjQUEYWh
- GPNB3/Zh7z0nh9Fvtb/p+Sx4HL4at+AvuuvGTXIpo5Aj9pmB4b2Gjpjee8ubc0KvjZobytGGYuSsPteG
- Teu95cXX/zCMvyOHUPfIX5/9ZzasnkSPwlfh0X11o6LD5FJGIR3K83yayLOVD4/fkd8TGbH8TP6t+/+L
- w2f21o2Y0ZuXrJ5Ej+IR5Xsk0rlMrYj8kXBKrOFXOt3/AbGCGaaY1ZGOAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACl0RVh0VGl0
- bGUAUmVtb3ZlO0RlbGV0ZTtCYXJzO1JpYmJvbjtTdGFuZGFyZDtjVkgwAAACeElEQVQ4T6WTW0iTYRjH
- LXdw6nKtm0jaliWlkkrJKrtJb5KROYvMdEtrHqrNQ03zgI1ouF2kUnPqTSeJWVC2K01CyoEHyEGWkYEU
- HcjoYGu1Sq/+vc+3aV91Vw/8vu99/8/z/2/f9/KFAfgvgpdftZQhCN2XkBAqWoczhAzqcz1+AAmCh6WH
- zkwfK/s4uDv7CNvTMOmEcLRYZ6Te+OEiK9uLSecHhI8X623vr3RgfnIIU6fr0ZuZaWS6iIY9hfmmmfaz
- rOfBu0tOjOgL7EwX8gNEE0V63/dRNwK9bZgbvoGJk1W4nKau6tuTW/2yzYZ5bx8CN1sRGOjGxEG9j3kk
- /ACBa1u68YHJgK/udvi7rfhxrwf3K8rxzG7B3JgbX65aOX04X4tz8QnH6Uf5AfSc4s6k5MoR3T74upsx
- 21WPQP8FfLt9EZ+6GjDbWYdBTQZssSozm40kDz+AikIkdsVa812tBh8cNXhrNTBKuHv/jq1olK+sZzPR
- DDqloPePgMjzqeraMYMeb6zleFWzf5FRXR5aUtIa2YyU8VcAZ25JSDV7dPmYaa3FdIkG06Uh2Pq19SiG
- 8vbCtj558V/wA0TNaxLNd3Ky8cJShicFGZhiXFunxPWEeG5NPD9RiAFNFizKDQ3M89spRHcoEv1PTQcw
- mbsdj3LS0ROngFEQfcoojLL0xKkwqU3neFy0C05lkp95ZPyAiKYVKod78yZ4s9RwKVajUiSl540hTOKY
- JpdKCe/OLbiVshF1cmUH06P4AfRSYmqksQ6bTOmrCJqXhXSuZ4xY3sR6n6ulq5xsLyedH0BFg3S+MoYk
- tF+ohR4Z6QXShxX00uXfQdhPmOi/wI4pGN8AAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACl0RVh0VGl0
- bGUAUmVtb3ZlO0RlbGV0ZTtCYXJzO1JpYmJvbjtTdGFuZGFyZDtjVkgwAAAH1klEQVRYR8WWe1RVVR7H
- rzWTJSimiDQoXBB8XEF5KAqooMhDAVEBHQcZy1R8BKmAgoCggshDFDELRkB80SJsQT7CUBDE14gilK6k
- iIsP0CBFc6TVxPnO73cu5ybc66r+mX5rfdibffb+fb97n733uTIAfypaG/+fqP5ojz7EK91w/Y8E9+89
- XiPHywxIA/9K9O2G67/XCPd5lXiNeKMbzsFtPcZrMyAN7lu5cGGoMnlHpzI5qbMiIOA9anu9+1mfG4sX
- y5jaxYEqAlXwM+IvxBtlfvNDGhMTOxsTEjpL585dR239up+pTfQ2IIm/fm6Bf+SdvWn47706EeWeFJzx
- 8wujZzwb0UTXg69kIq3Ml9SkFu93ytd3fdOuJPysvIafm2rwHdVPzfGNpmc63X1EE9oMvFbu57e+mcR/
- ulmNJ6WF6Dh+BD/VVaApIwWlvj1n8ktLveyX+/VUVYvrfObtE9aYnoTnV79A+6EP0JadimdVxWjcuR0n
- vLwjqA+vJL9ODQOvTJLLdRvi4zufXzuDjpLDeFyUK/KoKAfPa8rAiY97+fBKvDgTtXjxbK+wb1MT8J/L
- pWjLy8CDfUl4uDcRrRnb0PH5UdyKiu4ca2ioR315FTUMvOplMXLgxWUrnrQX5eOHgqxfOfoR2o98SIlP
- gQWKZ81mE7oEbzRG95jHrPCG5G14duEk2vanozWThbeidVc8WtJicTc5GtVLlz9zNjYZzFqE5goQffdZ
- 2bxdGRTY1XYgE2353RzYg+/zmAz8eL4EDTu24hM3z3DqP5ApdPOIuJ20BT9WleBhVipadm3B/fQ43Cfh
- e8mbcGd7JM76enftVox/l/rzPtL6Cngp2Vm/3WMsV1YsWtj1IDsND/+1Ew+zmTQ8yCI+SsHTs0X4OiEO
- h6a7Rh1ycY26lbAZTys+ResHSbi/czPupsTg7g4STtyI5m3hOO3l2ZVsPnoN5e5P8JFmLQ0DHNL71E0Z
- MWp12fx5XS17t4uJuWyhZW3ZQ2Qk4DG905vx0SIdZYViGy8zz/ZOwgY0bw2HMm4dTrrNFBLk5nyMBxBq
- cQ4NAzkWCi64A3fsv93EfPXnPt5dd9PjcY/ZGYd7aTTDVNUsfyg+gEcnDlNbHM10A5Q0W2X8ejSRcGN0
- KEpcnIW4v5mEUC7eeLxXelxmGgay5SNlTyuOcVUyMSB+mHzNCU+PruakKNwhmmmGzYmRUNIsldsioNwS
- hiYWjV2L72JCSTgE325chSInRyFqiFEo5eB9ohbfa2RKhSo0DOwbZibr+KJA1nG6gP9Vm4geahRyzGGS
- cHtNEL6JCEbjhlVojFqDRkkwYiUa1r2L26FLcGtZAD62Hi9EDBr6Po3tId5ekifbPXQYVVWhYWDPW8ay
- RycOEvmyR8fzuUk8GYR+mL5hWKGtjVC/0BNfMgs8UB+goi7AHfX+7qjzd8MRxRjhPb3BfOEYENKl06et
- MEvG7BxsSP+qQsPASRc3Wfun+2Xtx/bzv7wCPJiTDMmwsd98cclifBU0Fzfmu3UzE7XzXFE7nxDLmaj6
- ewDSrOziacxQQjpyfR4czpQxqQPZlyo0DHw2xVX2fcE+rkrivHxvZlrbb7q0fCmUyVGoW+SF63Nn4Lov
- Mx3X5kzHdR8XKp1R4+OMbzatxvklQUi3nBBDY/nS4RUUTbTkpMk+mTCFqqrQMFDs4MKFJM4DB+0eNyG6
- +p1/oikhHLULPFHjTULe04ipqPGaiqte03B1NpUSs6bg6/DlqAxchFSFTSzlYBPqL+nHto5UqELDAEUP
- 8XRL25iqoEA0xq1FrZ8b/k3JRTydcIXxYBy7ccAVdwdcdp+My26TcTNkCcoXBCBp1LjNlEufUO8HQoze
- BnqIpylsYug2RAMt6TVack5+RUxOIiRwaeZk5I0wFZiLMybhkqu9ihkTqZyIi1TWBy9C2bx5SDC3jKOc
- Q4geJrQZ4Hc+KGW0dcxZfz9ayhW01C6/Jic48QWXicgzkwsrdPRimQMWI4Rq5wnUbkfY4oKzLaqn2RG2
- uPGOH0q9vbHVbKxkgieoYYAb+B31T7SwCjvtMwe33n8bV2ZNpYSqxNXOlJw4T4lzTU2ENboDN1J/I2a1
- 7sDIPPMRQtUUa5xXM16kymkcrv3DB8dd3RErH72B+vOtKH7KexvgS0f/qJ1zR11wIC7TO66eaoPzIpSQ
- qHKyRo7cWBLn88Q/ThgDNpFrZiqcc7BCJXFuMmOJc5NUXPbzQL6V4xPqy8dT/CZoNXDQ2qnt4mxnElO5
- r3JkKBklzTEZLrAQ9WNx6ecZw3WDVbp6UbmmcqHcXoGKiYT9GKjqY3BmoiVyFfbt3I/QaoATDYg0Hhlc
- aGMvVDqw87GoIMqJ/cbDeotLm4nhOrcNXamjtylXbiKcsRuFs0S5LZXE4VFWwjpD09XUh69n8Ui+aICD
- E/Em1I8wMl9bYGUjlNkpcGaCAllGRlrFa5cFyGqX+lO1hwlDNpE9fLhwevxIlI6zwEGLsUKogZx/RfHy
- SxeTSruXAX4gXr1hb5mt/FBu1U48CtbR4+85i6uPUbKevuxFuK37mbgSy3X0QjOHKx5nDlO0hxiY8I+R
- HlczoWGAQ0rCLnm38iCGl01yLg5+Sbw4/k2CvzwM19W3ISGGNgMcUhI+KvxKGK7/lrgUv3v8ywxIwZ1f
- 5I/Gb45XG/jzgOx/2ZzKgxEwf90AAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
- dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAcdEVYdFRpdGxlAERlbGV0ZUNvbW1lbnQ7Q29tbWVu
- dDtp3lUYAAACvklEQVQ4T6WSa0iTYRTH39TScihJMYhAqpkfchVooCgZeAHTDEv8YpsaVpZ30bJCIQUv
- leUsUtSmK0Nc3sJAU/OWabpYFyMy53UqLZ33TQXl33lWVAv6EB34cV7OeZ/fe87LwwH4L1iYEZv+wPwv
- bCQ2GAmUJeL2d7IwMN6Whn6nhBGCNwypGErGfTEURcEdTGIkUOQHYX1Vg/WVL1hfniQmsKYfx7pejTXd
- KDGMtaUhQoVuyQk2s4WR4NXdQKwtfMDKZB1WJmqxoq4i5FgeLYd++BH0Q6XQDUqpV4fOnONMsNlI0JUb
- gFVNCxb7MqD/nA/dQBH0gyVYorz0KY/qWZhXJEOnKkRbti8TbDESdNz0N9jne5Mw15OI2Z4EzHbHYaYr
- FvPKNOjGmrA40oBlTS/6aq8zgRXBfrwJwXGtmUehH6nA7MtozLyIhLbjPHEO2vYz0I3UQ/1MitYgfyjT
- kzDQWYXqI24PGjzdJ8sPu3obJE3p3tD1F0PbEo7p52GYbg7FVLMYU40izKueGA4vtNVg6F42GgJ8MXiH
- VmqU46m7m5oEZlxDqgfteRtzihRa4Sq0bRG0wkUiicZvRnvCWfSlRGJBnovpykIsVhfgdVQwJII9UhKY
- cnmBe1slx2yR62dLK8TR+DGovuyOHJ+dqM+Jh6JGCpmbM8bTLmAqKwqjySLc2r1rzIXHszasQGFB8Msi
- nEgQj8okZ4TY8yRUsyG2ljk5VnxMTcDXzCj0h/thPPYk3keLINsvLKK+KXfDawdlzkp2+iAeJ7pAZGc4
- bEkwu5n8kKNm7Eo4mjydcI3PV9e7CqESe0G2z2GS9bksDz5ljlcscsApgSU7zCNMMty3s7pJgdDB56FQ
- qLlks016wNzcOsbaWloksNdIBHY+rM9eYmFKsK+ydX4Wf4RhEoK9w55Z/nUPfr9V/w64bwk2Mu3OISlY
- AAAAAElFTkSuQmCC
-
-
-
-
- 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
-
-
-
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/Class1.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/Class1.cs
new file mode 100644
index 0000000..cc87a25
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Order/AddEdit/Class1.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ContosoUI.Order.AddEdit
+{
+ class Class1
+ {
+ }
+}
diff --git a/Solution/ContosoProject/ContosoUI/Order/AddEdit/Presenter.cs b/Solution/ContosoProject/ContosoUI/Order/AddEdit/Presenter.cs
deleted file mode 100644
index 73a29c1..0000000
--- a/Solution/ContosoProject/ContosoUI/Order/AddEdit/Presenter.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using Data.DumbData;
-using Domain.DAO;
-using Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ContosoUI.Order.AddEdit
-{
- public class AddEditOrderPresenter
- {
- readonly AddEditOrderView view = new AddEditOrderView();
- readonly IOrderRepository model = new OrderDao();
- Domain.Entities.Order order;
-
- public AddEditOrderPresenter(AddEditOrderView view)
- {
- this.view = view;
- }
-
- public Customer Customer
- {
- get
- {
- return order.Customer;
- }
-
- set { order.Customer = value; }
- }
-
- public List goodsList
- {
- get
- {
- return order.GoodsList;
- }
-
- set { }
- }
- public double TotalCost
- {
- get
- {
- return order.TotalCost;
- }
-
- set { order.TotalCost = value; }
- }
-
- public OrderStatus Status
- {
- get
- {
- return order.Status;
- }
-
- set { order.Status = Status; }
- }
- public List comments
- {
- get
- {
- return order.Comments;
- }
-
- set { }
- }
-
- }
-
- public class AddEditViewModel
- {
- public Customer Customer { get; set; }
- public List goodsList { get; set; }
- public double TotalCost { get; set; }
- public OrderStatus Status { get; set; }
- public List comments { get; set; }
- }
-}
diff --git a/Solution/ContosoProject/ContosoUI/Order/Search/SearchPresenter.cs b/Solution/ContosoProject/ContosoUI/Order/Search/SearchPresenter.cs
index 4d76e1d..28229d0 100644
--- a/Solution/ContosoProject/ContosoUI/Order/Search/SearchPresenter.cs
+++ b/Solution/ContosoProject/ContosoUI/Order/Search/SearchPresenter.cs
@@ -1,32 +1,52 @@
-using ContosoUI.Order.Search;
-using Domain.DAO;
+using Domain.DAO;
+using Data.EFData;
using Domain.Entities;
-using System;
using System.Collections.Generic;
using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using ContosoUI.Presenter;
namespace ContosoUI.Order.Search
{
- class SearchPresenter
+ class SearchPresenter : BasePresenter
{
readonly SearchView view;
- readonly IOrderRepository model = new Data.DumbData.OrderDao();
- List ordersList = new List();
+ readonly List statuses;
+ const string defaultStatus = "Все статусы";
+ IUserNotify notifyManager = Program.MainWiewInstance;
+ readonly IOrderRepository orderModel = new OrderDao();
+ readonly IOrderStatusRepository orderStatusModel = new OrderStatusDao();
public SearchPresenter(SearchView view)
{
this.view = view;
+ orders = new List();
+ statuses = orderStatusModel.GetAll().Distinct().ToList();
+ statuses.Add(new OrderStatus() { Status = defaultStatus });
}
- }
- public class SearchViewModel
- {
- public OrderStatus Status { get; set; }
- public Customer Customer { get; set; }
- public int countOfGoods { get; set; }
- public double TotalCost { get; set; }
- public int countOfComments { get; set; }
+ private List orders;
+ public List OrdersList
+ {
+ get { return orders; }
+ }
+
+ public List StatusesList
+ {
+ get { return statuses; }
+ }
+
+ public void SelectOrdersByStatus(OrderStatus status)
+ {
+ if (status.Status == defaultStatus)
+ {
+ orders = orderModel.GetAll().ToList();
+ }
+ else if (statuses.Any(x=>x.Status == status.Status))
+ {
+ orders = orderModel.GetOrderByStatus(status).ToList();
+ }
+
+ NotifyPropertyChanged("SelectOrdersByStatus");
+ }
}
}
diff --git a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.Designer.cs b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.Designer.cs
index 226c403..e422737 100644
--- a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.Designer.cs
+++ b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.Designer.cs
@@ -30,27 +30,36 @@ private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SearchView));
+ DevExpress.XtraGrid.GridLevelNode gridLevelNode1 = new DevExpress.XtraGrid.GridLevelNode();
this.ribbonControl = new DevExpress.XtraBars.Ribbon.RibbonControl();
this.searchBarButtonItem = new DevExpress.XtraBars.BarButtonItem();
+ this.barButtonItem1 = new DevExpress.XtraBars.BarButtonItem();
+ this.barButtonItem2 = new DevExpress.XtraBars.BarButtonItem();
this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();
this.searchRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+ this.ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
this.layoutControl = new DevExpress.XtraLayout.LayoutControl();
this.statusComboBox = new System.Windows.Forms.ComboBox();
this.resultGridControl = new DevExpress.XtraGrid.GridControl();
- this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+ this.orderBindingSource = new System.Windows.Forms.BindingSource(this.components);
+ this.ordersGridView = new DevExpress.XtraGrid.Views.Grid.GridView();
this.colCustomer = new DevExpress.XtraGrid.Columns.GridColumn();
- this.colcountOfGoods = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colGoodsList = new DevExpress.XtraGrid.Columns.GridColumn();
this.colTotalCost = new DevExpress.XtraGrid.Columns.GridColumn();
this.colStatus = new DevExpress.XtraGrid.Columns.GridColumn();
- this.colcountOfComments = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colComments = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colIsActive = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colEditTime = new DevExpress.XtraGrid.Columns.GridColumn();
this.layoutControlGroup = new DevExpress.XtraLayout.LayoutControlGroup();
this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
this.statusLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.colId = new DevExpress.XtraGrid.Columns.GridColumn();
((System.ComponentModel.ISupportInitialize)(this.ribbonControl)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControl)).BeginInit();
this.layoutControl.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.resultGridControl)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.orderBindingSource)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.ordersGridView)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).BeginInit();
@@ -61,9 +70,11 @@ private void InitializeComponent()
this.ribbonControl.ExpandCollapseItem.Id = 0;
this.ribbonControl.Items.AddRange(new DevExpress.XtraBars.BarItem[] {
this.ribbonControl.ExpandCollapseItem,
- this.searchBarButtonItem});
+ this.searchBarButtonItem,
+ this.barButtonItem1,
+ this.barButtonItem2});
this.ribbonControl.Location = new System.Drawing.Point(0, 0);
- this.ribbonControl.MaxItemId = 2;
+ this.ribbonControl.MaxItemId = 6;
this.ribbonControl.Name = "ribbonControl";
this.ribbonControl.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] {
this.mainRibbonPage});
@@ -71,102 +82,159 @@ private void InitializeComponent()
//
// searchBarButtonItem
//
- this.searchBarButtonItem.Caption = "Искать";
+ this.searchBarButtonItem.Caption = "Искать заказы";
this.searchBarButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("searchBarButtonItem.Glyph")));
this.searchBarButtonItem.Id = 1;
this.searchBarButtonItem.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("searchBarButtonItem.LargeGlyph")));
this.searchBarButtonItem.Name = "searchBarButtonItem";
+ this.searchBarButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.searchBarButtonItem_ItemClick);
+ //
+ // barButtonItem1
+ //
+ this.barButtonItem1.Caption = "Сохранить";
+ this.barButtonItem1.Glyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem1.Glyph")));
+ this.barButtonItem1.Id = 4;
+ this.barButtonItem1.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem1.LargeGlyph")));
+ this.barButtonItem1.Name = "barButtonItem1";
+ this.barButtonItem1.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem1_ItemClick);
+ //
+ // barButtonItem2
+ //
+ this.barButtonItem2.Caption = "Печатать";
+ this.barButtonItem2.Glyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem2.Glyph")));
+ this.barButtonItem2.Id = 5;
+ this.barButtonItem2.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("barButtonItem2.LargeGlyph")));
+ this.barButtonItem2.Name = "barButtonItem2";
+ this.barButtonItem2.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem2_ItemClick);
//
// mainRibbonPage
//
this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
- this.searchRibbonPageGroup});
+ this.searchRibbonPageGroup,
+ this.ribbonPageGroup1});
this.mainRibbonPage.Name = "mainRibbonPage";
- this.mainRibbonPage.Text = "Главная";
+ this.mainRibbonPage.Text = "Меню";
//
// searchRibbonPageGroup
//
this.searchRibbonPageGroup.ItemLinks.Add(this.searchBarButtonItem);
- this.searchRibbonPageGroup.MergeOrder = 10;
+ this.searchRibbonPageGroup.MergeOrder = 5;
this.searchRibbonPageGroup.Name = "searchRibbonPageGroup";
this.searchRibbonPageGroup.Text = "Поиск";
//
+ // ribbonPageGroup1
+ //
+ this.ribbonPageGroup1.ItemLinks.Add(this.barButtonItem1);
+ this.ribbonPageGroup1.ItemLinks.Add(this.barButtonItem2);
+ this.ribbonPageGroup1.MergeOrder = 6;
+ this.ribbonPageGroup1.Name = "ribbonPageGroup1";
+ this.ribbonPageGroup1.Text = "Сохранить";
+ //
// layoutControl
//
this.layoutControl.Controls.Add(this.statusComboBox);
this.layoutControl.Controls.Add(this.resultGridControl);
- this.layoutControl.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.layoutControl.Location = new System.Drawing.Point(0, 137);
+ this.layoutControl.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.layoutControl.Location = new System.Drawing.Point(0, 141);
this.layoutControl.Name = "layoutControl";
this.layoutControl.Root = this.layoutControlGroup;
- this.layoutControl.Size = new System.Drawing.Size(784, 424);
+ this.layoutControl.Size = new System.Drawing.Size(784, 420);
this.layoutControl.TabIndex = 1;
this.layoutControl.Text = "layoutControl1";
//
// statusComboBox
//
+ this.statusComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.statusComboBox.FormattingEnabled = true;
- this.statusComboBox.Location = new System.Drawing.Point(51, 12);
+ this.statusComboBox.Location = new System.Drawing.Point(12, 28);
this.statusComboBox.Name = "statusComboBox";
- this.statusComboBox.Size = new System.Drawing.Size(721, 21);
+ this.statusComboBox.Size = new System.Drawing.Size(760, 21);
this.statusComboBox.TabIndex = 5;
//
// resultGridControl
//
- this.resultGridControl.Location = new System.Drawing.Point(12, 37);
- this.resultGridControl.MainView = this.gridView1;
+ this.resultGridControl.DataSource = this.orderBindingSource;
+ gridLevelNode1.RelationName = "Level1";
+ this.resultGridControl.LevelTree.Nodes.AddRange(new DevExpress.XtraGrid.GridLevelNode[] {
+ gridLevelNode1});
+ this.resultGridControl.Location = new System.Drawing.Point(12, 53);
+ this.resultGridControl.MainView = this.ordersGridView;
this.resultGridControl.MenuManager = this.ribbonControl;
this.resultGridControl.Name = "resultGridControl";
- this.resultGridControl.Size = new System.Drawing.Size(760, 375);
+ this.resultGridControl.Size = new System.Drawing.Size(760, 355);
this.resultGridControl.TabIndex = 4;
this.resultGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
- this.gridView1});
+ this.ordersGridView});
+ //
+ // orderBindingSource
//
- // gridView1
+ this.orderBindingSource.DataSource = typeof(Domain.Entities.Order);
//
- this.gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+ // ordersGridView
+ //
+ this.ordersGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+ this.colId,
this.colCustomer,
- this.colcountOfGoods,
+ this.colGoodsList,
this.colTotalCost,
this.colStatus,
- this.colcountOfComments});
- this.gridView1.GridControl = this.resultGridControl;
- this.gridView1.Name = "gridView1";
+ this.colComments,
+ this.colIsActive,
+ this.colEditTime});
+ this.ordersGridView.GridControl = this.resultGridControl;
+ this.ordersGridView.Name = "ordersGridView";
+ this.ordersGridView.OptionsBehavior.Editable = false;
+ this.ordersGridView.DoubleClick += new System.EventHandler(this.ordersGridView__DoubleClick);
//
// colCustomer
//
+ this.colCustomer.Caption = "Клиент";
this.colCustomer.FieldName = "Customer";
this.colCustomer.Name = "colCustomer";
this.colCustomer.Visible = true;
- this.colCustomer.VisibleIndex = 0;
+ this.colCustomer.VisibleIndex = 2;
+ this.colCustomer.Width = 455;
//
- // colcountOfGoods
+ // colGoodsList
//
- this.colcountOfGoods.FieldName = "countOfGoods";
- this.colcountOfGoods.Name = "colcountOfGoods";
- this.colcountOfGoods.Visible = true;
- this.colcountOfGoods.VisibleIndex = 1;
+ this.colGoodsList.Caption = "Список товаров";
+ this.colGoodsList.FieldName = "GoodsList";
+ this.colGoodsList.Name = "colGoodsList";
+ this.colGoodsList.Width = 268;
//
// colTotalCost
//
+ this.colTotalCost.Caption = "Цена";
this.colTotalCost.FieldName = "TotalCost";
this.colTotalCost.Name = "colTotalCost";
+ this.colTotalCost.OptionsColumn.ReadOnly = true;
this.colTotalCost.Visible = true;
- this.colTotalCost.VisibleIndex = 2;
+ this.colTotalCost.VisibleIndex = 3;
+ this.colTotalCost.Width = 128;
//
// colStatus
//
+ this.colStatus.Caption = "Статус";
this.colStatus.FieldName = "Status";
this.colStatus.Name = "colStatus";
this.colStatus.Visible = true;
- this.colStatus.VisibleIndex = 3;
+ this.colStatus.VisibleIndex = 1;
+ this.colStatus.Width = 100;
+ //
+ // colComments
+ //
+ this.colComments.FieldName = "Comments";
+ this.colComments.Name = "colComments";
+ //
+ // colIsActive
//
- // colcountOfComments
+ this.colIsActive.FieldName = "IsActive";
+ this.colIsActive.Name = "colIsActive";
//
- this.colcountOfComments.FieldName = "countOfComments";
- this.colcountOfComments.Name = "colcountOfComments";
- this.colcountOfComments.Visible = true;
- this.colcountOfComments.VisibleIndex = 4;
+ // colEditTime
+ //
+ this.colEditTime.FieldName = "EditTime";
+ this.colEditTime.Name = "colEditTime";
//
// layoutControlGroup
//
@@ -176,16 +244,16 @@ private void InitializeComponent()
this.layoutControlItem1,
this.statusLayoutControlItem});
this.layoutControlGroup.Location = new System.Drawing.Point(0, 0);
- this.layoutControlGroup.Name = "layoutControlGroup";
- this.layoutControlGroup.Size = new System.Drawing.Size(784, 424);
+ this.layoutControlGroup.Name = "Root";
+ this.layoutControlGroup.Size = new System.Drawing.Size(784, 420);
this.layoutControlGroup.TextVisible = false;
//
// layoutControlItem1
//
this.layoutControlItem1.Control = this.resultGridControl;
- this.layoutControlItem1.Location = new System.Drawing.Point(0, 25);
+ this.layoutControlItem1.Location = new System.Drawing.Point(0, 41);
this.layoutControlItem1.Name = "layoutControlItem1";
- this.layoutControlItem1.Size = new System.Drawing.Size(764, 379);
+ this.layoutControlItem1.Size = new System.Drawing.Size(764, 359);
this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
this.layoutControlItem1.TextVisible = false;
//
@@ -194,10 +262,20 @@ private void InitializeComponent()
this.statusLayoutControlItem.Control = this.statusComboBox;
this.statusLayoutControlItem.Location = new System.Drawing.Point(0, 0);
this.statusLayoutControlItem.Name = "statusLayoutControlItem";
- this.statusLayoutControlItem.Size = new System.Drawing.Size(764, 25);
+ this.statusLayoutControlItem.Size = new System.Drawing.Size(764, 41);
this.statusLayoutControlItem.Text = "Статус";
+ this.statusLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top;
this.statusLayoutControlItem.TextSize = new System.Drawing.Size(36, 13);
//
+ // colId
+ //
+ this.colId.Caption = "Номер";
+ this.colId.FieldName = "Id";
+ this.colId.Name = "colId";
+ this.colId.Visible = true;
+ this.colId.VisibleIndex = 0;
+ this.colId.Width = 59;
+ //
// SearchView
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -207,11 +285,13 @@ private void InitializeComponent()
this.Controls.Add(this.ribbonControl);
this.Name = "SearchView";
this.Text = "Поиск";
+ this.Load += new System.EventHandler(this.SearchView_Load);
((System.ComponentModel.ISupportInitialize)(this.ribbonControl)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControl)).EndInit();
this.layoutControl.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.resultGridControl)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.orderBindingSource)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.ordersGridView)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.statusLayoutControlItem)).EndInit();
@@ -229,14 +309,21 @@ private void InitializeComponent()
private DevExpress.XtraLayout.LayoutControl layoutControl;
private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup;
private DevExpress.XtraGrid.GridControl resultGridControl;
- private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+ private DevExpress.XtraGrid.Views.Grid.GridView ordersGridView;
private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
private System.Windows.Forms.ComboBox statusComboBox;
private DevExpress.XtraLayout.LayoutControlItem statusLayoutControlItem;
+ private DevExpress.XtraBars.BarButtonItem barButtonItem1;
+ private DevExpress.XtraBars.BarButtonItem barButtonItem2;
+ private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
+ private System.Windows.Forms.BindingSource orderBindingSource;
private DevExpress.XtraGrid.Columns.GridColumn colCustomer;
- private DevExpress.XtraGrid.Columns.GridColumn colcountOfGoods;
+ private DevExpress.XtraGrid.Columns.GridColumn colGoodsList;
private DevExpress.XtraGrid.Columns.GridColumn colTotalCost;
private DevExpress.XtraGrid.Columns.GridColumn colStatus;
- private DevExpress.XtraGrid.Columns.GridColumn colcountOfComments;
+ private DevExpress.XtraGrid.Columns.GridColumn colComments;
+ private DevExpress.XtraGrid.Columns.GridColumn colIsActive;
+ private DevExpress.XtraGrid.Columns.GridColumn colEditTime;
+ private DevExpress.XtraGrid.Columns.GridColumn colId;
}
}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.cs b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.cs
index 7b589a9..577f7ec 100644
--- a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.cs
+++ b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.cs
@@ -1,21 +1,71 @@
using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Linq;
-using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraEditors;
+using DevExpress.XtraGrid.Views.Grid.ViewInfo;
+using DevExpress.XtraGrid.Views.Grid;
namespace ContosoUI.Order.Search
{
- public partial class SearchView : DevExpress.XtraEditors.XtraForm
+ public partial class SearchView : XtraForm
{
+ SearchPresenter presenter;
+ IUserNotify notifyManager = Program.MainWiewInstance;
+ const int defaultIndex = 5;
+
public SearchView()
{
InitializeComponent();
+ presenter = new SearchPresenter(this);
+ }
+
+ private void SearchView_Load(object sender, EventArgs e)
+ {
+ orderBindingSource.DataSource = presenter;
+
+ statusComboBox.DataBindings.Add("DataSource", orderBindingSource, "StatusesList");
+ statusComboBox.SelectedIndex = defaultIndex;
+
+ resultGridControl.DataBindings.Add("DataSource", orderBindingSource, "OrdersList");
+
+ }
+
+ private void searchBarButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ {
+ presenter.SelectOrdersByStatus(statusComboBox.SelectedValue as Domain.Entities.OrderStatus);
+ resultGridControl.RefreshDataSource();
+ }
+
+ private void ordersGridView__DoubleClick(object sender, EventArgs e)
+ {
+ GridHitInfo hi = ordersGridView.CalcHitInfo(resultGridControl.PointToClient(MousePosition));
+ if (hi.InRowCell)
+ {
+ GridView view = (GridView)sender;
+ GridHitInfo info = view.CalcHitInfo(view.GridControl.PointToClient(MousePosition));
+ int id = (int)view.GetRowCellValue(info.RowHandle, "Id");
+ var form = new AddEditOrderView(id);
+ form.MdiParent = MdiParent;
+ form.Show();
+ }
+ }
+
+ private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ {
+ SaveFileDialog saveFileDialog = new SaveFileDialog();
+
+ saveFileDialog.Filter = "xls files (*.xls)|*.xls|All files (*.*)|*.*";
+
+ if (saveFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ string FileName = saveFileDialog.FileName;
+ ordersGridView.ExportToXls(FileName);
+ }
+ }
+
+ private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ {
+ ordersGridView.ShowPrintPreview();
+ ordersGridView.Print();
}
}
}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.resx b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.resx
index 717cf0e..6b99a3b 100644
--- a/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.resx
+++ b/Solution/ContosoProject/ContosoUI/Order/Search/SearchView.resx
@@ -185,4 +185,136 @@
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
+ GQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAOdEVYdFRpdGxlAFByaW50ZXI7579hxQAAAr9JREFU
+ OE99k9lPU1EQxssW2URwSXz1xT9AIT4ZUCTyAEoiEAJxARIUTBCKCilFgqzFlD0YJAEjJL4ZiQQkYpEa
+ AlIK+IYSEVq7UAp0B0rbz5lr0JQHT/LL3HPuzDdn5s4VAfgLrYD2V+qJzsEFdA7OC3QQ7QNqgZa+L5Pk
+ E+wX47cRiYJIAF6fD16vDx7G48M+4d73Qt6vYqcjfjF+G5EoRN43KwSZLTvY2HYROzBtO7Hr9kD2Yoad
+ wg7FCCuACCLCZb0zQjbjppNwwEDWYHbCtbOP+u4pjoghgolAQliBjT3KpI7Br3N54i4UVb7E7p4H+g07
+ dCYHYYPWZIfduYd88XNkFTRSKer5qtbRZIrlpKKQtoHFdSNlySxoQB45OVxuaI02rBmt0BisWCO2bLvI
+ KWpBSo4EepMTTb0qE8WGskCovH+BygFSsiXILmyB1bGHVb0FP3UWrOi2BbgfN/IakHi9RPCt7Z7lciJY
+ ILyhZw5utxfpd6qQmPaQnIhrTBkuM6liXEoRI4FIzSoTfKWtQj+iWCCyunOasrrxXqFGcvoDXEjMRVxC
+ LmLjb+N8/C2cu3gTscSVlCKMjM/CSv141DTJAtEsEFXxTAnDlhM/DDasCNjp2mR1duHs4FywdK6nL1P8
+ dJwFjrNAdGm9At91ViwumxGXLPkvC8sbWNJYUSgdY4ETLBBz/8kHzH0zQzGvRW3XFCy2PdSN/ULNqBbS
+ YS0eD61ikwaL342rVqFa2kB++QgLnGSByMx7/VM5xa+Rcbcf1e1KYQqrhjWQvNOg/O0axG9WYdpyobpN
+ iaSMOlzNkiEhTTpNsUITeRj44RRxRir/hHVyXqc6GZ4Po5kmkmylfIKzniVOE8eI4MP/QlhpzbCyovkj
+ KpoVBFnZAQqU1Ax9Jp8Ivxi/zZ/bRBLcXa6P4Zsx/HyUCPoXA9Fvk15uVlve/joAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAOdEVYdFRpdGxlAFByaW50ZXI7579hxQAACE1JREFU
+ WEell3tQVNcdx2ltHkZr0tQ4SR/Tpp12Ov3DJplpk5hOJrWSih2TiJppjR0ChKBheSsgpIjGF6kIQkAB
+ 5RXwgchbKoEgyht5GQwsC+yLxy6wsDyXl/jt73furixgzJjemc+ee8899/f9nnPuOfe3NgAWYD6+Ryz7
+ PLfxWlreLTCpFnKbCKmk+/NkNyIlh+Ayu0GQnNWAsxm11ynWY8T3OfASvSUV0sEGHuGA/+9xJuMmB11B
+ LOPAVLVQb0mFdLDbxxIv12N2dg6mqTswTc5igpDKGcG4SWJMMI2xCWYGo+PTAtPUDE6fq+Kgq4gfcOAl
+ eksqpIMNPB53sRZT03P3hMZJZJRELIww41PENIbHpgRGZpSZFM9EpZRz0KeIhzawPDq1CpPUCyEyxiKE
+ ObgkRCUxRAyOEMMSBqMJA8MmMQphZ0o56I+IhzLA87UiPKlMDPUQBWcGKagQEJAIC5npH5oQ9DGD48QE
+ jPTM0ZhiDvpj4hEO/A16Sw42sPLT2GtiXoXIEGMWoeAW9IZx6AfGoBsYR69gDL39Y+ghDMYJhEQUsMpq
+ gg3wy/3AgxswPFyrDn1WJOZ1XkSCRVhA0DeG7r5RCf0ouvQj0Ook2GBgaC4beJZ43ByXp3eJEa7gG9yA
+ nT5BrAkOKxDDzsF7iC6GBLpIyCKi1Q1DQ6W6lxkWqHoYozDo+0kmG/g1wdPwQ2I5wRr3jPDPssMRF59P
+ yKjNSMqq7/X8OAq++6PhdyyHhnxcCGjMAhoKrqbgLKJkuo1mhtDZZUSn1ogO7RA6uoagJbOyjy/CMzAC
+ uwPCEZ1aoYtI+DLHyS3k96TJIyL2hmXHojLXXrxya1hJD03Q0vnQ7wQSrrTA5+BlMbdCgINT2UltOs0C
+ LNSuHSSGoNBQSSjUg2gTGKAiw67+qYjNaoSTZyjGaDUp1ANIyKgZcfM7sY60eYe0efR0WkV2h8ZAy2YK
+ d+/exfueR3Dqch3cyD0PvxAgIYsIB5cYhFzFGCBXGtBKiJKuW5UDwqyzbwqiLlRhx64QzMzcwQCtkLbO
+ fhyNLrhK2jwlNstjUitHtL1GdOmMZAD4p+t+RJ6rhN1Wb8ILdvbe2EjlRvuF/I3Z4mnGA2++I2ErcIft
+ 2xKRaZXY6rBPxO7UGqCkToSeLp4gbX4vbFacTK6AQtkPDc0jj4Ddux44EJVrRd78eeSia+v6yMXtLOd5
+ 2PD2LszN3UU76TTLe3Hosy/45VzDBlYep93qtkKHTpqGO9Ro03YZHGShcPYMg7NXOHb7x5iJhntQLLz2
+ nyUSrMp5ZEFxUtsA6Rln73A4eoThL393xuydObS061HfrEXwCbE/8PK0WXX0VDEaW3rQphrADDXaF3KS
+ hs4Ndtt4CizQVCy63mQ+32RdL86ltpu4pLr1m3fBN/A4pugdaG7ToapRjX3S/vATNvDkgchC3LylpVHQ
+ Y3J6FvJ2NWzfcsUbm1yx4S0381zSvN7Dcj0/z0uv3fHXzTK8vtEFb9g5oqVNJT5O9be7UVbbiT2fZLGB
+ n7GBp/5NG055nQoNX3eLrxx/aDTd/cK17eYP8dKft+OldcRr2/Hium10vg0vvirxwqtbzdjjhVck/vCy
+ Pda+vAXrSdjLPxTqrj4Rkz9a3PviCgU8919iAz9nA08H0HCUVHWgukkDw4gJev6Y0J5vHJsUhsS3/jsg
+ dWZSxNJRTOYG9b6gtBUfBZ1nA79gA6v3HMrCf6/Lcf2mUnxQ1LS9WlCZud+1db3AshWbr3kjsm7HZVG5
+ AtlfNNNml8oGfskGnvE5mImsotsopJudtM220iZjQb6o/C5YP5tX0oIL+Y34YO/nbOBXbGCNZ0gGzhfc
+ Qg7d/LpzAA1tejSaaaAXk68tdaKkOuv74vw+7cS9RfcvFX6F5Ow6sUOSNn+kbJ51D06nygakX21GXasO
+ lc09eE8Wgz9uDMSfCC4fBLd5UDuOVflVj4iblteI+PRaOPoksYHfsIHn3IIuIP7STUq7m1DW1IWiWhXc
+ g1NpntJgomUZcV2PMzUDiCfO1PQjrrofsVV9iK7QI+iKFoH5WgTkabA3R409WSp4X1bBOUlBb/0Udrid
+ hltQMopqlLhWr0FiZh2i06rg4CUM/FYY2B14DqfOVyMhq16I55e3o4yWCy8VzoQ/LekhsT7EENHlfYgi
+ Isv0OFLcg30k7J+rgV82iRM+mWp4kQGnpDZaUVM01EkoqVUgv6wNhdVKxKbX4CQlqv/ySLg3Amtc9qYM
+ hyWWIY5GIb+iA9mlcqRdbSLnF2g5zeBQYRcibugQTiNxolSP46U6/KdEhyDquV8O9TxbI3ruk6kS4p4Z
+ SjgmtqGfkhkHrwQk5dZSzFbkUceiz1XjWFwJTUvcCGmLVbDqTfu9ju/JYg07ZfHY6RaPf+w+hS1O4dgh
+ ixVrOThfg9Ave3CMKe7GkaIeHCzsJlE1fBkS9iFhrwwVPC6pIEtXwiFBTuvfhHccIvD65iBs2HYYtu8e
+ ge32w1hvf2Bo7Ss7PiJtzhVFevQk8RzBG8PzBA/NWi9aHUZKxf1zVPCnHvqRkF+mEnsI9/MdcElVwCVF
+ gQ+SFWLOedgdE+Uk3gaHs3LaeExwkZbbaxyP4EzodwRrsLhISERKRjxqruCcbSWxmhOSQZrHwWFGyvkH
+ GMqS9dQ7PWfFhM7AO51JlL2LMC+3nxLcSY7L+SanY5a8UBxswho29ISLX/IN14A0SqskePdyYahXDG8m
+ zr5MCpx8mGQJ72Q4Eu97J2GnLK6CYrG4dUZs4Rv/KPBNS3bMD/M/m6fNcBbD8BBaeMYMJxjW8D1+/qH/
+ HfNhGQlLqn4/eNq+jQX/BRbqweZ/Pa0K/+6HvEAAAAAASUVORK5CYII=
+
+
+
+ 17, 17
+
+
+ 51
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Presenter/BasePresenter.cs b/Solution/ContosoProject/ContosoUI/Presenter/BasePresenter.cs
new file mode 100644
index 0000000..7c3b403
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Presenter/BasePresenter.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ContosoUI.Presenter
+{
+ public class BasePresenter : INotifyPropertyChanged
+ {
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ protected void NotifyPropertyChanged(String info)
+ {
+ if (PropertyChanged != null)
+ {
+ PropertyChanged(this, new PropertyChangedEventArgs(info));
+ }
+ }
+ }
+}
diff --git a/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryPresenter.cs b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryPresenter.cs
new file mode 100644
index 0000000..1bb7a70
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryPresenter.cs
@@ -0,0 +1,71 @@
+using ContosoUI.Presenter;
+using Data.EFData;
+using Domain.DAO;
+using Domain.Entities;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ContosoUI.ProductCategoryList
+{
+ public class ProductCategoryPresenter : BasePresenter
+ {
+ readonly ProductCategoryView view;
+ readonly IProductCategoryRepository model = new ProductCategoryDao();
+ IUserNotify notifyManager = Program.MainWiewInstance;
+ public ProductCategoryPresenter(ProductCategoryView view)
+ {
+ this.view = view;
+ categories = model.GetAll().ToList();
+ }
+ List categories = new List();
+ public List Categories
+ {
+ get { return categories; }
+ set
+ {
+ if (value != categories)
+ {
+ categories = value;
+ NotifyPropertyChanged("Categories");
+ }
+ }
+ }
+
+ public void Save()
+ {
+ if (Validation())
+ {
+ foreach (var category in categories)
+ {
+ model.AddOrUpdate(category);
+ }
+ notifyManager.ShowInfo("Изменения сохранены", "Информация");
+ }
+ Categories.RemoveAll(x => !x.IsActive);
+ NotifyPropertyChanged("Save");
+ }
+ bool Validation()
+ {
+ bool isValid = true;
+ if (categories.Any(x => x.IsActive == false))
+ {
+ bool result = notifyManager.ShowYesNo("Вы уверенны, что хотите деактивировать категорию товаров? После деактивации категория будет удалена из списка!", "Деактивация категории");
+ if (!result)
+ {
+ isValid = false;
+ }
+ }
+ if (categories.Any(x => string.IsNullOrWhiteSpace (x.CategoryName)))
+ {
+
+ notifyManager.ShowWarning("Название категории не заполнено или поле содержит менее 2 или более 50 знаков. Проверьте правильность заполнения поля", "Предупреждение");
+ isValid = false;
+ }
+ return isValid;
+ }
+ }
+}
diff --git a/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.Designer.cs b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.Designer.cs
new file mode 100644
index 0000000..fa7ff34
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.Designer.cs
@@ -0,0 +1,251 @@
+namespace ContosoUI.ProductCategoryList
+{
+ partial class ProductCategoryView
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.categoryAddOrEditRibbonControl = new DevExpress.XtraBars.Ribbon.RibbonControl();
+ this.saveAndNew = new DevExpress.XtraBars.BarButtonItem();
+ this.saveButton = new DevExpress.XtraBars.BarButtonItem();
+ this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();
+ this.saveRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+ this.categoryViewLayoutControl = new DevExpress.XtraLayout.LayoutControl();
+ this.productCategoryGridControl = new DevExpress.XtraGrid.GridControl();
+ this.productCategoryBindingSource = new System.Windows.Forms.BindingSource(this.components);
+ this.categoriesGridView = new DevExpress.XtraGrid.Views.Grid.GridView();
+ this.colCategoryName = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colId = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colIsActive = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.colEditTime = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.categoryLayoutControlGroup = new DevExpress.XtraLayout.LayoutControlGroup();
+ this.productCategoryControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ ((System.ComponentModel.ISupportInitialize)(this.categoryAddOrEditRibbonControl)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.categoryViewLayoutControl)).BeginInit();
+ this.categoryViewLayoutControl.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.productCategoryGridControl)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.productCategoryBindingSource)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.categoriesGridView)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.categoryLayoutControlGroup)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.productCategoryControlItem)).BeginInit();
+ this.SuspendLayout();
+ //
+ // categoryAddOrEditRibbonControl
+ //
+ this.categoryAddOrEditRibbonControl.ExpandCollapseItem.Id = 0;
+ this.categoryAddOrEditRibbonControl.Items.AddRange(new DevExpress.XtraBars.BarItem[] {
+ this.categoryAddOrEditRibbonControl.ExpandCollapseItem,
+ this.saveAndNew,
+ this.saveButton});
+ this.categoryAddOrEditRibbonControl.Location = new System.Drawing.Point(0, 0);
+ this.categoryAddOrEditRibbonControl.MaxItemId = 3;
+ this.categoryAddOrEditRibbonControl.Name = "categoryAddOrEditRibbonControl";
+ this.categoryAddOrEditRibbonControl.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] {
+ this.mainRibbonPage});
+ this.categoryAddOrEditRibbonControl.Size = new System.Drawing.Size(805, 141);
+ //
+ // saveAndNew
+ //
+ this.saveAndNew.Caption = "Добавить";
+ this.saveAndNew.Id = 1;
+ this.saveAndNew.ImageUri.Uri = "SaveAndNew";
+ this.saveAndNew.Name = "saveAndNew";
+ this.saveAndNew.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveAndNew_ItemClick);
+ //
+ // saveButton
+ //
+ this.saveButton.Caption = "Сохранить";
+ this.saveButton.Id = 2;
+ this.saveButton.ImageUri.Uri = "Save";
+ this.saveButton.Name = "saveButton";
+ this.saveButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.saveButton_ItemClick);
+ //
+ // mainRibbonPage
+ //
+ this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
+ this.saveRibbonPageGroup});
+ this.mainRibbonPage.Name = "mainRibbonPage";
+ this.mainRibbonPage.Text = "Меню";
+ //
+ // saveRibbonPageGroup
+ //
+ this.saveRibbonPageGroup.ItemLinks.Add(this.saveAndNew);
+ this.saveRibbonPageGroup.ItemLinks.Add(this.saveButton);
+ this.saveRibbonPageGroup.MergeOrder = 5;
+ this.saveRibbonPageGroup.Name = "saveRibbonPageGroup";
+ this.saveRibbonPageGroup.Text = "Сохранение";
+ //
+ // categoryViewLayoutControl
+ //
+ this.categoryViewLayoutControl.Controls.Add(this.productCategoryGridControl);
+ this.categoryViewLayoutControl.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.categoryViewLayoutControl.Location = new System.Drawing.Point(0, 141);
+ this.categoryViewLayoutControl.Name = "categoryViewLayoutControl";
+ this.categoryViewLayoutControl.Root = this.categoryLayoutControlGroup;
+ this.categoryViewLayoutControl.Size = new System.Drawing.Size(805, 358);
+ this.categoryViewLayoutControl.TabIndex = 1;
+ this.categoryViewLayoutControl.Text = "layoutControl1";
+ //
+ // productCategoryGridControl
+ //
+ this.productCategoryGridControl.DataSource = this.productCategoryBindingSource;
+ this.productCategoryGridControl.Location = new System.Drawing.Point(12, 12);
+ this.productCategoryGridControl.MainView = this.categoriesGridView;
+ this.productCategoryGridControl.MenuManager = this.categoryAddOrEditRibbonControl;
+ this.productCategoryGridControl.Name = "productCategoryGridControl";
+ this.productCategoryGridControl.Size = new System.Drawing.Size(781, 334);
+ this.productCategoryGridControl.TabIndex = 4;
+ this.productCategoryGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+ this.categoriesGridView});
+ //
+ // productCategoryBindingSource
+ //
+ this.productCategoryBindingSource.DataSource = typeof(Domain.Entities.ProductCategory);
+ //
+ // categoriesGridView
+ //
+ this.categoriesGridView.ColumnPanelRowHeight = 50;
+ this.categoriesGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+ this.colCategoryName,
+ this.colId,
+ this.colIsActive,
+ this.colEditTime});
+ this.categoriesGridView.GridControl = this.productCategoryGridControl;
+ this.categoriesGridView.Name = "categoriesGridView";
+ this.categoriesGridView.OptionsView.ColumnHeaderAutoHeight = DevExpress.Utils.DefaultBoolean.True;
+ this.categoriesGridView.OptionsView.RowAutoHeight = true;
+ //
+ // colCategoryName
+ //
+ this.colCategoryName.Caption = "Название категории";
+ this.colCategoryName.FieldName = "CategoryName";
+ this.colCategoryName.Name = "colCategoryName";
+ this.colCategoryName.OptionsEditForm.RowSpan = 2;
+ this.colCategoryName.OptionsEditForm.VisibleIndex = 2;
+ this.colCategoryName.Visible = true;
+ this.colCategoryName.VisibleIndex = 1;
+ this.colCategoryName.Width = 318;
+ //
+ // colId
+ //
+ this.colId.FieldName = "Id";
+ this.colId.Name = "colId";
+ this.colId.OptionsColumn.AllowEdit = false;
+ this.colId.OptionsColumn.ReadOnly = true;
+ this.colId.OptionsEditForm.VisibleIndex = 1;
+ this.colId.Visible = true;
+ this.colId.VisibleIndex = 0;
+ this.colId.Width = 39;
+ //
+ // colIsActive
+ //
+ this.colIsActive.Caption = "Статус (активировать / деактивировать)";
+ this.colIsActive.FieldName = "IsActive";
+ this.colIsActive.Name = "colIsActive";
+ this.colIsActive.OptionsEditForm.RowSpan = 2;
+ this.colIsActive.OptionsEditForm.VisibleIndex = 3;
+ this.colIsActive.Visible = true;
+ this.colIsActive.VisibleIndex = 2;
+ this.colIsActive.Width = 213;
+ //
+ // colEditTime
+ //
+ this.colEditTime.Caption = "Дата редактирования";
+ this.colEditTime.FieldName = "EditTime";
+ this.colEditTime.Name = "colEditTime";
+ this.colEditTime.OptionsColumn.AllowEdit = false;
+ this.colEditTime.OptionsColumn.ReadOnly = true;
+ this.colEditTime.OptionsEditForm.RowSpan = 2;
+ this.colEditTime.OptionsEditForm.VisibleIndex = 4;
+ this.colEditTime.Visible = true;
+ this.colEditTime.VisibleIndex = 3;
+ this.colEditTime.Width = 193;
+ //
+ // categoryLayoutControlGroup
+ //
+ this.categoryLayoutControlGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+ this.categoryLayoutControlGroup.GroupBordersVisible = false;
+ this.categoryLayoutControlGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+ this.productCategoryControlItem});
+ this.categoryLayoutControlGroup.Location = new System.Drawing.Point(0, 0);
+ this.categoryLayoutControlGroup.Name = "categoryLayoutControlGroup";
+ this.categoryLayoutControlGroup.Size = new System.Drawing.Size(805, 358);
+ this.categoryLayoutControlGroup.TextVisible = false;
+ //
+ // productCategoryControlItem
+ //
+ this.productCategoryControlItem.Control = this.productCategoryGridControl;
+ this.productCategoryControlItem.Location = new System.Drawing.Point(0, 0);
+ this.productCategoryControlItem.Name = "productCategoryControlItem";
+ this.productCategoryControlItem.Size = new System.Drawing.Size(785, 338);
+ this.productCategoryControlItem.Text = "Список категорий товаров";
+ this.productCategoryControlItem.TextLocation = DevExpress.Utils.Locations.Top;
+ this.productCategoryControlItem.TextSize = new System.Drawing.Size(0, 0);
+ this.productCategoryControlItem.TextVisible = false;
+ //
+ // ProductCategoryView
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(805, 499);
+ this.Controls.Add(this.categoryViewLayoutControl);
+ this.Controls.Add(this.categoryAddOrEditRibbonControl);
+ this.Name = "ProductCategoryView";
+ this.Text = "Категории товаров";
+ this.Load += new System.EventHandler(this.ProductCategoryView_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.categoryAddOrEditRibbonControl)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.categoryViewLayoutControl)).EndInit();
+ this.categoryViewLayoutControl.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.productCategoryGridControl)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.productCategoryBindingSource)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.categoriesGridView)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.categoryLayoutControlGroup)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.productCategoryControlItem)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private DevExpress.XtraBars.Ribbon.RibbonControl categoryAddOrEditRibbonControl;
+ private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveRibbonPageGroup;
+ private DevExpress.XtraBars.BarButtonItem saveAndNew;
+ private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage;
+ private DevExpress.XtraBars.BarButtonItem saveButton;
+ private DevExpress.XtraLayout.LayoutControl categoryViewLayoutControl;
+ private DevExpress.XtraGrid.GridControl productCategoryGridControl;
+ private System.Windows.Forms.BindingSource productCategoryBindingSource;
+ private DevExpress.XtraGrid.Views.Grid.GridView categoriesGridView;
+ private DevExpress.XtraGrid.Columns.GridColumn colCategoryName;
+ private DevExpress.XtraGrid.Columns.GridColumn colId;
+ private DevExpress.XtraGrid.Columns.GridColumn colIsActive;
+ private DevExpress.XtraGrid.Columns.GridColumn colEditTime;
+ private DevExpress.XtraLayout.LayoutControlGroup categoryLayoutControlGroup;
+ private DevExpress.XtraLayout.LayoutControlItem productCategoryControlItem;
+ }
+}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.cs b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.cs
new file mode 100644
index 0000000..ab50633
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.cs
@@ -0,0 +1,44 @@
+using DevExpress.XtraGrid.Views.Grid;
+using Domain.Entities;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ContosoUI.ProductCategoryList
+{
+ public partial class ProductCategoryView : DevExpress.XtraEditors.XtraForm
+ {
+ readonly ProductCategoryPresenter presenter;
+ public ProductCategoryView()
+ {
+ InitializeComponent();
+ presenter = new ProductCategoryPresenter(this);
+ }
+
+ private void saveAndNew_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ {
+ presenter.Categories.Add(new ProductCategory());
+ productCategoryGridControl.RefreshDataSource();
+
+ }
+
+ private void saveButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+ {
+ categoriesGridView.CloseEditor();
+ categoriesGridView.UpdateCurrentRow();
+ presenter.Save();
+ productCategoryGridControl.RefreshDataSource();
+ }
+
+ private void ProductCategoryView_Load(object sender, EventArgs e)
+ {
+ productCategoryGridControl.DataSource = presenter.Categories;
+ }
+ }
+}
diff --git a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.resx b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.resx
similarity index 97%
rename from Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.resx
rename to Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.resx
index 11e22ad..f4e21bb 100644
--- a/Solution/ContosoProject/ContosoUI/GoodsAll/GoodsF/GoodsForm.resx
+++ b/Solution/ContosoProject/ContosoUI/ProductCategoryList/ProductCategoryView.resx
@@ -117,7 +117,7 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
17, 17
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Program.cs b/Solution/ContosoProject/ContosoUI/Program.cs
index da78404..4db94bf 100644
--- a/Solution/ContosoProject/ContosoUI/Program.cs
+++ b/Solution/ContosoProject/ContosoUI/Program.cs
@@ -1,6 +1,4 @@
-using ContosoUI.Customers.Search;
-using ContosoUI.Customers.Add;
-using Data.DumbData;
+using Data.DumbData;
using Domain.DAO;
using Domain.Entities;
using System;
@@ -9,22 +7,27 @@
using System.Threading.Tasks;
using System.Windows.Forms;
using ContosoUI.Authentication;
+using System.IO;
+using System.Reflection;
namespace ContosoUI
{
static class Program
{
public static User AuthUser { get; private set; }
+ public static MainView MainWiewInstance { get; private set; }
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
+ AppDomain.CurrentDomain.SetData("DataDirectory", Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));
+
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
GetAuthUser();
- Application.Run(new MainView());
+ Application.Run(MainWiewInstance = new MainView());
}
private static void GetAuthUser()
@@ -33,7 +36,7 @@ private static void GetAuthUser()
auth.ShowDialog();
if (auth.DialogResult==DialogResult.OK)
{
- AuthUser = auth.presenter.user;
+ AuthUser = auth.Presenter.User;
}
else
{
diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditOrderPresenter.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditOrderPresenter.datasource
new file mode 100644
index 0000000..cf39cd3
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditOrderPresenter.datasource
@@ -0,0 +1,10 @@
+
+
+
+ ContosoUI.Order.AddEdit.AddEditOrderPresenter, ContosoUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditViewModel.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditViewModel.datasource
new file mode 100644
index 0000000..4e2391a
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.AddEdit.AddEditViewModel.datasource
@@ -0,0 +1,10 @@
+
+
+
+ ContosoUI.Order.AddEdit.AddEditViewModel, ContosoUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel.datasource
new file mode 100644
index 0000000..5a05078
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel.datasource
@@ -0,0 +1,10 @@
+
+
+
+ ContosoUI.Order.Search.SearchViewModel, ContosoUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel1.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel1.datasource
new file mode 100644
index 0000000..5a05078
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/ContosoUI.Order.Search.SearchViewModel1.datasource
@@ -0,0 +1,10 @@
+
+
+
+ ContosoUI.Order.Search.SearchViewModel, ContosoUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.GoodsRow.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.GoodsRow.datasource
new file mode 100644
index 0000000..ecd07db
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.GoodsRow.datasource
@@ -0,0 +1,10 @@
+
+
+
+ Domain.Entities.GoodsRow, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.ProductCategory.datasource b/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.ProductCategory.datasource
new file mode 100644
index 0000000..4aa44bd
--- /dev/null
+++ b/Solution/ContosoProject/ContosoUI/Properties/DataSources/Domain.Entities.ProductCategory.datasource
@@ -0,0 +1,10 @@
+
+
+
+ Domain.Entities.ProductCategory, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Properties/licenses.licx b/Solution/ContosoProject/ContosoUI/Properties/licenses.licx
index d3e9d73..5368de3 100644
--- a/Solution/ContosoProject/ContosoUI/Properties/licenses.licx
+++ b/Solution/ContosoProject/ContosoUI/Properties/licenses.licx
@@ -1,8 +1,10 @@
-DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.Patch.InMemoryPatch, DevExpress.Patch.Common, Version=6.2.0.0, Culture=neutral, PublicKeyToken=7fc7bfca2443de66
+DevExpress.XtraTabbedMdi.XtraTabbedMdiManager, DevExpress.XtraBars.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraReports.UI.XtraReport, DevExpress.XtraReports.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraTabbedMdi.XtraTabbedMdiManager, DevExpress.XtraBars.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.LookUpEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v15.1, Version=15.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
diff --git a/Solution/ContosoProject/ContosoUI/Roles/RolesPresenter.cs b/Solution/ContosoProject/ContosoUI/Roles/RolesPresenter.cs
index 82df6fd..ba540b6 100644
--- a/Solution/ContosoProject/ContosoUI/Roles/RolesPresenter.cs
+++ b/Solution/ContosoProject/ContosoUI/Roles/RolesPresenter.cs
@@ -1,4 +1,5 @@
-using Data.EFData;
+using ContosoUI.Presenter;
+using Data.EFData;
using Domain.DAO;
using Domain.Entities;
using System;
@@ -7,20 +8,29 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using System.Windows.Forms;
namespace ContosoUI.Roles
{
- public class RolesPresenter : INotifyPropertyChanged
+ public class RolesPresenter : BasePresenter
{
readonly RolesView view;
- readonly IRoleRepository model = new RoleDao();
- readonly IPermissionRepository modelPermission = new PermissionDao();
- Role role;
+ readonly RoleViewService modelProxy = new RoleViewService();
+ IUserNotify notifyManager = Program.MainWiewInstance;
public RolesPresenter(RolesView view)
{
this.view = view;
- Roles = model.GetAll().ToList();
- Permissions = modelPermission.GetAll().ToList();
+ Roles = modelProxy.RoleDao.GetAll().ToList();
+ Permissions = modelProxy.PermissionDao.GetAll().ToList();
+ foreach (var role in Roles)
+ {
+ List listPermissions = new List();
+ foreach (var permission in role.Permissions)
+ {
+ listPermissions.Add(Permissions.First(x => x.Id == permission.Id));
+ }
+ role.Permissions = listPermissions;
+ }
}
List roles = new List();
public List Roles
@@ -49,24 +59,45 @@ public List Permissions
}
}
}
- public event PropertyChangedEventHandler PropertyChanged;
- private void NotifyPropertyChanged(String info)
+ public void Save()
{
- if (PropertyChanged != null)
+ if (ValidationRolesBeforeSave())
{
- PropertyChanged(this, new PropertyChangedEventArgs(info));
+ foreach (var role in roles)
+ {
+ modelProxy.RoleDao.AddOrUpdate(role);
+ }
+ notifyManager.ShowInfo("Изменения сохранены", "Информация");
}
+ Roles.RemoveAll(x => !x.IsActive);
+ NotifyPropertyChanged("Save");
}
- public void Save()
+ bool ValidationRolesBeforeSave()
{
- if (role.Id > 0)
+ bool isValid = true;
+ if (roles.Any(x => x.IsActive == false))
{
- model.Update(this.role);
+ bool result = notifyManager.ShowYesNo("Вы уверенны, что хотите деактивировать роль пользователя? После деактивации роль будет удалена из списка!", "Предупреждение");
+ if (!result)
+ {
+ isValid = false;
+ }
+ }
+ if (roles.Any(x => string.IsNullOrWhiteSpace( x.Name)))
+ {
+ notifyManager.ShowWarning("Запрещено создавать роль без названия", "Предупреждение");
+ isValid = false;
}
- else
+ foreach (var role in roles)
{
- model.Add(role);
+ if (role == null || role.Permissions.Count == 0)
+ {
+ string roleName = role.Name;
+ notifyManager.ShowWarning("Роль " + roleName + " не содержит разрешений. Запрещено создавать роль без назначения разрешений", "Предупреждение");
+ isValid = false;
+ }
}
+ return isValid;
}
}
}
diff --git a/Solution/ContosoProject/ContosoUI/Roles/RolesView.Designer.cs b/Solution/ContosoProject/ContosoUI/Roles/RolesView.Designer.cs
index d740c63..c82405d 100644
--- a/Solution/ContosoProject/ContosoUI/Roles/RolesView.Designer.cs
+++ b/Solution/ContosoProject/ContosoUI/Roles/RolesView.Designer.cs
@@ -28,44 +28,33 @@ protected override void Dispose(bool disposing)
///
private void InitializeComponent()
{
- this.components = new System.ComponentModel.Container();
this.rolesRibbomItem = new DevExpress.XtraBars.Ribbon.RibbonControl();
this.saveRoleButton = new DevExpress.XtraBars.BarButtonItem();
this.addNewRoleButton = new DevExpress.XtraBars.BarButtonItem();
this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();
this.saveRoleRibbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
- this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
- this.newRoleTextEdit = new DevExpress.XtraEditors.TextEdit();
+ this.roleLayoutControl = new DevExpress.XtraLayout.LayoutControl();
this.permissionsCheckedListBoxControl = new DevExpress.XtraEditors.CheckedListBoxControl();
this.rolesGridControl = new DevExpress.XtraGrid.GridControl();
this.rolesGridView = new DevExpress.XtraGrid.Views.Grid.GridView();
- this.layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
- this.roleControlItem = new DevExpress.XtraLayout.LayoutControlItem();
- this.permissionsControlItem = new DevExpress.XtraLayout.LayoutControlItem();
- this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
- this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
- this.emptySpaceItem2 = new DevExpress.XtraLayout.EmptySpaceItem();
- this.roleBindingSource = new System.Windows.Forms.BindingSource(this.components);
- this.roleBindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.colName = new DevExpress.XtraGrid.Columns.GridColumn();
this.colId = new DevExpress.XtraGrid.Columns.GridColumn();
this.colIsActive = new DevExpress.XtraGrid.Columns.GridColumn();
this.colEditTime = new DevExpress.XtraGrid.Columns.GridColumn();
+ this.rolePermissionLayoutControlGroup = new DevExpress.XtraLayout.LayoutControlGroup();
+ this.roleControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.permissionsControlItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
((System.ComponentModel.ISupportInitialize)(this.rolesRibbomItem)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
- this.layoutControl1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.newRoleTextEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.roleLayoutControl)).BeginInit();
+ this.roleLayoutControl.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.permissionsCheckedListBoxControl)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.rolesGridControl)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.rolesGridView)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.rolePermissionLayoutControlGroup)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.roleControlItem)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.permissionsControlItem)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.roleBindingSource)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.roleBindingSource1)).BeginInit();
this.SuspendLayout();
//
// rolesRibbomItem
@@ -102,6 +91,7 @@ private void InitializeComponent()
//
this.mainRibbonPage.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
this.saveRoleRibbonPageGroup});
+ this.mainRibbonPage.MergeOrder = 1;
this.mainRibbonPage.Name = "mainRibbonPage";
this.mainRibbonPage.Text = "Меню";
//
@@ -109,31 +99,22 @@ private void InitializeComponent()
//
this.saveRoleRibbonPageGroup.ItemLinks.Add(this.saveRoleButton);
this.saveRoleRibbonPageGroup.ItemLinks.Add(this.addNewRoleButton);
+ this.saveRoleRibbonPageGroup.MergeOrder = 5;
this.saveRoleRibbonPageGroup.Name = "saveRoleRibbonPageGroup";
this.saveRoleRibbonPageGroup.Text = "Сохранение";
//
- // layoutControl1
- //
- this.layoutControl1.Controls.Add(this.newRoleTextEdit);
- this.layoutControl1.Controls.Add(this.permissionsCheckedListBoxControl);
- this.layoutControl1.Controls.Add(this.rolesGridControl);
- this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.layoutControl1.Location = new System.Drawing.Point(0, 141);
- this.layoutControl1.Name = "layoutControl1";
- this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(196, 127, 328, 350);
- this.layoutControl1.Root = this.layoutControlGroup1;
- this.layoutControl1.Size = new System.Drawing.Size(799, 527);
- this.layoutControl1.TabIndex = 1;
- this.layoutControl1.Text = "layoutControl1";
- //
- // newRoleTextEdit
- //
- this.newRoleTextEdit.Location = new System.Drawing.Point(115, 495);
- this.newRoleTextEdit.MenuManager = this.rolesRibbomItem;
- this.newRoleTextEdit.Name = "newRoleTextEdit";
- this.newRoleTextEdit.Size = new System.Drawing.Size(404, 20);
- this.newRoleTextEdit.StyleController = this.layoutControl1;
- this.newRoleTextEdit.TabIndex = 6;
+ // roleLayoutControl
+ //
+ this.roleLayoutControl.Controls.Add(this.permissionsCheckedListBoxControl);
+ this.roleLayoutControl.Controls.Add(this.rolesGridControl);
+ this.roleLayoutControl.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.roleLayoutControl.Location = new System.Drawing.Point(0, 141);
+ this.roleLayoutControl.Name = "roleLayoutControl";
+ this.roleLayoutControl.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(196, 127, 328, 350);
+ this.roleLayoutControl.Root = this.rolePermissionLayoutControlGroup;
+ this.roleLayoutControl.Size = new System.Drawing.Size(799, 527);
+ this.roleLayoutControl.TabIndex = 1;
+ this.roleLayoutControl.Text = "layoutControl1";
//
// permissionsCheckedListBoxControl
//
@@ -142,26 +123,26 @@ private void InitializeComponent()
this.permissionsCheckedListBoxControl.Location = new System.Drawing.Point(540, 28);
this.permissionsCheckedListBoxControl.Name = "permissionsCheckedListBoxControl";
this.permissionsCheckedListBoxControl.SelectionMode = System.Windows.Forms.SelectionMode.None;
- this.permissionsCheckedListBoxControl.Size = new System.Drawing.Size(247, 463);
+ this.permissionsCheckedListBoxControl.Size = new System.Drawing.Size(247, 487);
this.permissionsCheckedListBoxControl.SortOrder = System.Windows.Forms.SortOrder.Ascending;
- this.permissionsCheckedListBoxControl.StyleController = this.layoutControl1;
+ this.permissionsCheckedListBoxControl.StyleController = this.roleLayoutControl;
this.permissionsCheckedListBoxControl.TabIndex = 5;
this.permissionsCheckedListBoxControl.ValueMember = "Id";
//
// rolesGridControl
//
- this.rolesGridControl.DataSource = this.roleBindingSource1;
this.rolesGridControl.Location = new System.Drawing.Point(12, 28);
this.rolesGridControl.MainView = this.rolesGridView;
this.rolesGridControl.MenuManager = this.rolesRibbomItem;
this.rolesGridControl.Name = "rolesGridControl";
- this.rolesGridControl.Size = new System.Drawing.Size(507, 463);
+ this.rolesGridControl.Size = new System.Drawing.Size(507, 487);
this.rolesGridControl.TabIndex = 4;
this.rolesGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
this.rolesGridView});
//
// rolesGridView
//
+ this.rolesGridView.ColumnPanelRowHeight = 50;
this.rolesGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
this.colName,
this.colId,
@@ -169,30 +150,70 @@ private void InitializeComponent()
this.colEditTime});
this.rolesGridView.GridControl = this.rolesGridControl;
this.rolesGridView.Name = "rolesGridView";
+ this.rolesGridView.OptionsView.ColumnHeaderAutoHeight = DevExpress.Utils.DefaultBoolean.True;
+ this.rolesGridView.OptionsView.RowAutoHeight = true;
this.rolesGridView.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.rolesGridView_FocusedRowChanged);
this.rolesGridView.BeforeLeaveRow += new DevExpress.XtraGrid.Views.Base.RowAllowEventHandler(this.rolesGridView_BeforeLeaveRow);
//
- // layoutControlGroup1
+ // colName
+ //
+ this.colName.Caption = "Имя роли";
+ this.colName.FieldName = "Name";
+ this.colName.Name = "colName";
+ this.colName.Visible = true;
+ this.colName.VisibleIndex = 1;
+ this.colName.Width = 171;
+ //
+ // colId
+ //
+ this.colId.FieldName = "Id";
+ this.colId.Name = "colId";
+ this.colId.OptionsColumn.AllowEdit = false;
+ this.colId.OptionsColumn.ReadOnly = true;
+ this.colId.Visible = true;
+ this.colId.VisibleIndex = 0;
+ this.colId.Width = 72;
+ //
+ // colIsActive
+ //
+ this.colIsActive.Caption = "Статус (активировать/ деактивировать)";
+ this.colIsActive.FieldName = "IsActive";
+ this.colIsActive.Name = "colIsActive";
+ this.colIsActive.OptionsEditForm.RowSpan = 2;
+ this.colIsActive.Visible = true;
+ this.colIsActive.VisibleIndex = 2;
+ this.colIsActive.Width = 124;
+ //
+ // colEditTime
+ //
+ this.colEditTime.Caption = "Дата редактирования";
+ this.colEditTime.FieldName = "EditTime";
+ this.colEditTime.Name = "colEditTime";
+ this.colEditTime.OptionsColumn.AllowEdit = false;
+ this.colEditTime.OptionsColumn.ReadOnly = true;
+ this.colEditTime.Visible = true;
+ this.colEditTime.VisibleIndex = 3;
+ this.colEditTime.Width = 122;
+ //
+ // rolePermissionLayoutControlGroup
//
- this.layoutControlGroup1.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
- this.layoutControlGroup1.GroupBordersVisible = false;
- this.layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+ this.rolePermissionLayoutControlGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+ this.rolePermissionLayoutControlGroup.GroupBordersVisible = false;
+ this.rolePermissionLayoutControlGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
this.roleControlItem,
this.permissionsControlItem,
- this.emptySpaceItem1,
- this.layoutControlItem1,
- this.emptySpaceItem2});
- this.layoutControlGroup1.Location = new System.Drawing.Point(0, 0);
- this.layoutControlGroup1.Name = "Root";
- this.layoutControlGroup1.Size = new System.Drawing.Size(799, 527);
- this.layoutControlGroup1.TextVisible = false;
+ this.emptySpaceItem1});
+ this.rolePermissionLayoutControlGroup.Location = new System.Drawing.Point(0, 0);
+ this.rolePermissionLayoutControlGroup.Name = "rolePermissionLayoutControlGroup";
+ this.rolePermissionLayoutControlGroup.Size = new System.Drawing.Size(799, 527);
+ this.rolePermissionLayoutControlGroup.TextVisible = false;
//
// roleControlItem
//
this.roleControlItem.Control = this.rolesGridControl;
this.roleControlItem.Location = new System.Drawing.Point(0, 0);
this.roleControlItem.Name = "roleControlItem";
- this.roleControlItem.Size = new System.Drawing.Size(511, 483);
+ this.roleControlItem.Size = new System.Drawing.Size(511, 507);
this.roleControlItem.Text = "Список ролей";
this.roleControlItem.TextLocation = DevExpress.Utils.Locations.Top;
this.roleControlItem.TextSize = new System.Drawing.Size(100, 13);
@@ -202,7 +223,7 @@ private void InitializeComponent()
this.permissionsControlItem.Control = this.permissionsCheckedListBoxControl;
this.permissionsControlItem.Location = new System.Drawing.Point(528, 0);
this.permissionsControlItem.Name = "permissionsControlItem";
- this.permissionsControlItem.Size = new System.Drawing.Size(251, 483);
+ this.permissionsControlItem.Size = new System.Drawing.Size(251, 507);
this.permissionsControlItem.Text = "Список разрешений";
this.permissionsControlItem.TextLocation = DevExpress.Utils.Locations.Top;
this.permissionsControlItem.TextSize = new System.Drawing.Size(100, 13);
@@ -212,83 +233,29 @@ private void InitializeComponent()
this.emptySpaceItem1.AllowHotTrack = false;
this.emptySpaceItem1.Location = new System.Drawing.Point(511, 0);
this.emptySpaceItem1.Name = "emptySpaceItem1";
- this.emptySpaceItem1.Size = new System.Drawing.Size(17, 483);
+ this.emptySpaceItem1.Size = new System.Drawing.Size(17, 507);
this.emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0);
//
- // layoutControlItem1
- //
- this.layoutControlItem1.Control = this.newRoleTextEdit;
- this.layoutControlItem1.Location = new System.Drawing.Point(0, 483);
- this.layoutControlItem1.Name = "layoutControlItem1";
- this.layoutControlItem1.Size = new System.Drawing.Size(511, 24);
- this.layoutControlItem1.Text = "Новая роль";
- this.layoutControlItem1.TextSize = new System.Drawing.Size(100, 13);
- //
- // emptySpaceItem2
- //
- this.emptySpaceItem2.AllowHotTrack = false;
- this.emptySpaceItem2.Location = new System.Drawing.Point(511, 483);
- this.emptySpaceItem2.Name = "emptySpaceItem2";
- this.emptySpaceItem2.Size = new System.Drawing.Size(268, 24);
- this.emptySpaceItem2.TextSize = new System.Drawing.Size(0, 0);
- //
- // roleBindingSource1
- //
- this.roleBindingSource1.DataSource = typeof(Domain.Entities.Role);
- //
- // colName
- //
- this.colName.FieldName = "Name";
- this.colName.Name = "colName";
- this.colName.Visible = true;
- this.colName.VisibleIndex = 0;
- //
- // colId
- //
- this.colId.FieldName = "Id";
- this.colId.Name = "colId";
- this.colId.Visible = true;
- this.colId.VisibleIndex = 1;
- //
- // colIsActive
- //
- this.colIsActive.FieldName = "IsActive";
- this.colIsActive.Name = "colIsActive";
- this.colIsActive.Visible = true;
- this.colIsActive.VisibleIndex = 2;
- //
- // colEditTime
- //
- this.colEditTime.FieldName = "EditTime";
- this.colEditTime.Name = "colEditTime";
- this.colEditTime.Visible = true;
- this.colEditTime.VisibleIndex = 3;
- //
// RolesView
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(799, 668);
- this.Controls.Add(this.layoutControl1);
+ this.Controls.Add(this.roleLayoutControl);
this.Controls.Add(this.rolesRibbomItem);
this.Name = "RolesView";
this.Text = "Роли пользователя";
this.Load += new System.EventHandler(this.RolesView_Load);
((System.ComponentModel.ISupportInitialize)(this.rolesRibbomItem)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
- this.layoutControl1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.newRoleTextEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.roleLayoutControl)).EndInit();
+ this.roleLayoutControl.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.permissionsCheckedListBoxControl)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.rolesGridControl)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.rolesGridView)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.rolePermissionLayoutControlGroup)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.roleControlItem)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.permissionsControlItem)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.roleBindingSource)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.roleBindingSource1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@@ -301,19 +268,14 @@ private void InitializeComponent()
private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveRoleRibbonPageGroup;
private DevExpress.XtraBars.BarButtonItem saveRoleButton;
private DevExpress.XtraBars.BarButtonItem addNewRoleButton;
- private DevExpress.XtraLayout.LayoutControl layoutControl1;
- private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
+ private DevExpress.XtraLayout.LayoutControl roleLayoutControl;
+ private DevExpress.XtraLayout.LayoutControlGroup rolePermissionLayoutControlGroup;
private DevExpress.XtraGrid.GridControl rolesGridControl;
private DevExpress.XtraGrid.Views.Grid.GridView rolesGridView;
private DevExpress.XtraLayout.LayoutControlItem roleControlItem;
private DevExpress.XtraEditors.CheckedListBoxControl permissionsCheckedListBoxControl;
private DevExpress.XtraLayout.LayoutControlItem permissionsControlItem;
private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
- private DevExpress.XtraEditors.TextEdit newRoleTextEdit;
- private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
- private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem2;
- private System.Windows.Forms.BindingSource roleBindingSource;
- private System.Windows.Forms.BindingSource roleBindingSource1;
private DevExpress.XtraGrid.Columns.GridColumn colName;
private DevExpress.XtraGrid.Columns.GridColumn colId;
private DevExpress.XtraGrid.Columns.GridColumn colIsActive;
diff --git a/Solution/ContosoProject/ContosoUI/Roles/RolesView.cs b/Solution/ContosoProject/ContosoUI/Roles/RolesView.cs
index 5c4a59d..f126f30 100644
--- a/Solution/ContosoProject/ContosoUI/Roles/RolesView.cs
+++ b/Solution/ContosoProject/ContosoUI/Roles/RolesView.cs
@@ -1,4 +1,5 @@
-using DevExpress.XtraGrid.Views.Grid;
+using DevExpress.XtraEditors.Controls;
+using DevExpress.XtraGrid.Views.Grid;
using Domain.Entities;
using System;
using System.Collections.Generic;
@@ -27,13 +28,16 @@ public RolesView()
this.saveRoleButton.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
}
presenter = new RolesPresenter(this);
+ List items = new List();
+ foreach (var perm in presenter.Permissions)
+ {
+ items.Add(new CheckedListBoxItem(perm, perm.Name, false));
+ }
+ permissionsCheckedListBoxControl.Items.AddRange(items.ToArray());
}
private void RolesView_Load(object sender, EventArgs e)
{
rolesGridControl.DataSource = presenter.Roles;
- permissionsCheckedListBoxControl.DataSource = presenter.Permissions;
- permissionsCheckedListBoxControl.DisplayMember = "Name";
- permissionsCheckedListBoxControl.ValueMember = "Id";
}
private void rolesGridView_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
@@ -49,9 +53,10 @@ private void rolesGridView_FocusedRowChanged(object sender, DevExpress.XtraGrid.
private void SetCheckedPermissions(ICollection permissions)
{
permissionsCheckedListBoxControl.UnCheckAll();
- foreach (var perm in permissions)
+ foreach (var permission in permissions)
{
- permissionsCheckedListBoxControl.SetItemChecked(perm.Id - 1, true);
+ var permissionIndex = permissionsCheckedListBoxControl.FindString(permission.Name);
+ permissionsCheckedListBoxControl.SetItemChecked(permissionIndex, true);
}
}
@@ -62,20 +67,33 @@ private void addNewRoleButton_ItemClick(object sender, DevExpress.XtraBars.ItemC
}
private void saveRoleButton_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
+ SavePermissions();
+ rolesGridView.CloseEditor();
+ rolesGridView.UpdateCurrentRow();
presenter.Save();
+ rolesGridControl.RefreshDataSource();
}
private void rolesGridView_BeforeLeaveRow(object sender, DevExpress.XtraGrid.Views.Base.RowAllowEventArgs e)
{
- GridView view = sender as GridView;
+ SavePermissions();
+ rolesGridView.CloseEditor();
+ rolesGridView.UpdateCurrentRow();
+ }
+ void SavePermissions()
+ {
+ GridView view = rolesGridView;
object roleObj = view.GetRow(view.FocusedRowHandle);
Role role = roleObj as Role;
-
- var permissions = permissionsCheckedListBoxControl.CheckedItems;
- role.Permissions.Clear();
- foreach (var p in permissions)
+ if (role != null)
{
- role.Permissions.Add(p as Permission);
+ var permissions = permissionsCheckedListBoxControl.CheckedItems;
+ role.Permissions.Clear();
+ foreach (var p in permissions)
+ {
+ var checkedListItem = p as CheckedListBoxItem;
+ role.Permissions.Add(checkedListItem.Value as Permission);
+ }
}
}
}
diff --git a/Solution/ContosoProject/ContosoUI/Roles/RolesView.resx b/Solution/ContosoProject/ContosoUI/Roles/RolesView.resx
index 7d71f23..1af7de1 100644
--- a/Solution/ContosoProject/ContosoUI/Roles/RolesView.resx
+++ b/Solution/ContosoProject/ContosoUI/Roles/RolesView.resx
@@ -117,10 +117,4 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 168, 17
-
-
- 17, 17
-
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.Designer.cs b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.Designer.cs
index 7cc3fc6..7a6be38 100644
--- a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.Designer.cs
+++ b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.Designer.cs
@@ -32,70 +32,72 @@ private void InitializeComponent()
this.ChangePasswordBarBtn = new DevExpress.XtraBars.BarButtonItem();
this.mainRibbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();
this.saveOrEditribbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
- this.MiddleNameTextEdit = new DevExpress.XtraEditors.TextEdit();
- this.LastNameTextEdit = new DevExpress.XtraEditors.TextEdit();
- this.FirstNameTextEdit = new DevExpress.XtraEditors.TextEdit();
+ this.middleNameTextEdit = new DevExpress.XtraEditors.TextEdit();
+ this.lastNameTextEdit = new DevExpress.XtraEditors.TextEdit();
+ this.firstNameTextEdit = new DevExpress.XtraEditors.TextEdit();
this.OldPasswordTextEdit = new DevExpress.XtraEditors.TextEdit();
this.loginTextEdit = new DevExpress.XtraEditors.TextEdit();
- this.NewPasswordTextEdit = new DevExpress.XtraEditors.TextEdit();
- this.ConfimPasswordTextEdit = new DevExpress.XtraEditors.TextEdit();
- this.SelectRoleComboBox = new DevExpress.XtraEditors.ComboBoxEdit();
- this.customerGroup = new DevExpress.XtraLayout.LayoutControlGroup();
- this.personalInfoGroup = new DevExpress.XtraLayout.LayoutControlGroup();
+ this.newPasswordTextEdit = new DevExpress.XtraEditors.TextEdit();
+ this.confimPasswordTextEdit = new DevExpress.XtraEditors.TextEdit();
+ this.selectRoleComboBox = new DevExpress.XtraEditors.ComboBoxEdit();
+ this.userGroup = new DevExpress.XtraLayout.LayoutControlGroup();
+ this.authInfoGroup = new DevExpress.XtraLayout.LayoutControlGroup();
this.oldPasswordLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
this.loginLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
this.newPasswordLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
this.confimPasswordLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
- this.contactInfoGroup = new DevExpress.XtraLayout.LayoutControlGroup();
- this.lastNameItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.personalInfoGroup = new DevExpress.XtraLayout.LayoutControlGroup();
this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
this.middleNameItem = new DevExpress.XtraLayout.LayoutControlItem();
- this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+ this.rol = new DevExpress.XtraLayout.LayoutControlItem();
this.IsActiveUserLayoutControl = new DevExpress.XtraLayout.LayoutControlItem();
+ this.lastNameItem = new DevExpress.XtraLayout.LayoutControlItem();
+ this.RoleLayoutControlItem = new DevExpress.XtraLayout.LayoutControlItem();
this.userEditBindingSource = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
this.layoutControl1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.IsActiveUserCheckEdit.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.MiddleNameTextEdit.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.LastNameTextEdit.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.FirstNameTextEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.middleNameTextEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.lastNameTextEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.firstNameTextEdit.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.OldPasswordTextEdit.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.loginTextEdit.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.NewPasswordTextEdit.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.ConfimPasswordTextEdit.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.SelectRoleComboBox.Properties)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.customerGroup)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.personalInfoGroup)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.newPasswordTextEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.confimPasswordTextEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.selectRoleComboBox.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.userGroup)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.authInfoGroup)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.oldPasswordLayoutControlItem)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.loginLayoutControlItem)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.newPasswordLayoutControlItem)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.confimPasswordLayoutControlItem)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.contactInfoGroup)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.lastNameItem)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.personalInfoGroup)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.middleNameItem)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.rol)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.IsActiveUserLayoutControl)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.lastNameItem)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.RoleLayoutControlItem)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.userEditBindingSource)).BeginInit();
this.SuspendLayout();
//
// layoutControl1
//
this.layoutControl1.Controls.Add(this.IsActiveUserCheckEdit);
- this.layoutControl1.Controls.Add(this.MiddleNameTextEdit);
- this.layoutControl1.Controls.Add(this.LastNameTextEdit);
- this.layoutControl1.Controls.Add(this.FirstNameTextEdit);
+ this.layoutControl1.Controls.Add(this.middleNameTextEdit);
+ this.layoutControl1.Controls.Add(this.lastNameTextEdit);
+ this.layoutControl1.Controls.Add(this.firstNameTextEdit);
this.layoutControl1.Controls.Add(this.OldPasswordTextEdit);
this.layoutControl1.Controls.Add(this.loginTextEdit);
- this.layoutControl1.Controls.Add(this.NewPasswordTextEdit);
- this.layoutControl1.Controls.Add(this.ConfimPasswordTextEdit);
- this.layoutControl1.Controls.Add(this.SelectRoleComboBox);
+ this.layoutControl1.Controls.Add(this.newPasswordTextEdit);
+ this.layoutControl1.Controls.Add(this.confimPasswordTextEdit);
+ this.layoutControl1.Controls.Add(this.selectRoleComboBox);
this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.layoutControl1.Location = new System.Drawing.Point(0, 143);
this.layoutControl1.Name = "layoutControl1";
this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(413, 69, 631, 398);
- this.layoutControl1.Root = this.customerGroup;
+ this.layoutControl1.Root = this.userGroup;
this.layoutControl1.Size = new System.Drawing.Size(953, 522);
this.layoutControl1.TabIndex = 0;
this.layoutControl1.Text = "layoutControl1";
@@ -129,6 +131,7 @@ private void InitializeComponent()
// saveEditButtonItem
//
this.saveEditButtonItem.Caption = "Сохранить";
+ this.saveEditButtonItem.CausesValidation = true;
this.saveEditButtonItem.Id = 1;
this.saveEditButtonItem.ImageUri.Uri = "Save";
this.saveEditButtonItem.Name = "saveEditButtonItem";
@@ -150,45 +153,56 @@ private void InitializeComponent()
// saveOrEditribbonPageGroup
//
this.saveOrEditribbonPageGroup.ItemLinks.Add(this.saveEditButtonItem);
+ this.saveOrEditribbonPageGroup.MergeOrder = 5;
this.saveOrEditribbonPageGroup.Name = "saveOrEditribbonPageGroup";
this.saveOrEditribbonPageGroup.Text = "Сохранение";
//
- // MiddleNameTextEdit
- //
- this.MiddleNameTextEdit.Location = new System.Drawing.Point(306, 138);
- this.MiddleNameTextEdit.Name = "MiddleNameTextEdit";
- this.MiddleNameTextEdit.Properties.Mask.EditMask = "\\p{L}+";
- this.MiddleNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
- this.MiddleNameTextEdit.Properties.Mask.ShowPlaceHolders = false;
- this.MiddleNameTextEdit.Size = new System.Drawing.Size(623, 20);
- this.MiddleNameTextEdit.StyleController = this.layoutControl1;
- this.MiddleNameTextEdit.TabIndex = 6;
- //
- // LastNameTextEdit
- //
- this.LastNameTextEdit.Location = new System.Drawing.Point(306, 98);
- this.LastNameTextEdit.Name = "LastNameTextEdit";
- this.LastNameTextEdit.Properties.Mask.EditMask = "\\p{L}+";
- this.LastNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
- this.LastNameTextEdit.Properties.Mask.ShowPlaceHolders = false;
- this.LastNameTextEdit.Size = new System.Drawing.Size(623, 20);
- this.LastNameTextEdit.StyleController = this.layoutControl1;
- this.LastNameTextEdit.TabIndex = 5;
- //
- // FirstNameTextEdit
- //
- this.FirstNameTextEdit.Location = new System.Drawing.Point(306, 58);
- this.FirstNameTextEdit.Name = "FirstNameTextEdit";
- this.FirstNameTextEdit.Properties.Mask.EditMask = "\\p{L}+";
- this.FirstNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
- this.FirstNameTextEdit.Properties.Mask.ShowPlaceHolders = false;
- this.FirstNameTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true;
- this.FirstNameTextEdit.Size = new System.Drawing.Size(623, 20);
- this.FirstNameTextEdit.StyleController = this.layoutControl1;
- this.FirstNameTextEdit.TabIndex = 4;
+ // middleNameTextEdit
+ //
+ this.middleNameTextEdit.Location = new System.Drawing.Point(306, 138);
+ this.middleNameTextEdit.Name = "middleNameTextEdit";
+ this.middleNameTextEdit.Properties.Mask.EditMask = "\\p{L}+";
+ this.middleNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
+ this.middleNameTextEdit.Properties.Mask.ShowPlaceHolders = false;
+ this.middleNameTextEdit.Size = new System.Drawing.Size(623, 20);
+ this.middleNameTextEdit.StyleController = this.layoutControl1;
+ this.middleNameTextEdit.TabIndex = 6;
+ this.middleNameTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.PersonalInfoTextEdit_InvalidValue);
+ this.middleNameTextEdit.Modified += new System.EventHandler(this.AnyTextEdit_Modified);
+ this.middleNameTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.PersonalInfoTextEdit_Validating);
+ //
+ // lastNameTextEdit
+ //
+ this.lastNameTextEdit.Location = new System.Drawing.Point(306, 58);
+ this.lastNameTextEdit.Name = "lastNameTextEdit";
+ this.lastNameTextEdit.Properties.Mask.EditMask = "\\p{L}+";
+ this.lastNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
+ this.lastNameTextEdit.Properties.Mask.ShowPlaceHolders = false;
+ this.lastNameTextEdit.Size = new System.Drawing.Size(623, 20);
+ this.lastNameTextEdit.StyleController = this.layoutControl1;
+ this.lastNameTextEdit.TabIndex = 5;
+ this.lastNameTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.PersonalInfoTextEdit_InvalidValue);
+ this.lastNameTextEdit.Modified += new System.EventHandler(this.AnyTextEdit_Modified);
+ this.lastNameTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.PersonalInfoTextEdit_Validating);
+ //
+ // firstNameTextEdit
+ //
+ this.firstNameTextEdit.Location = new System.Drawing.Point(306, 98);
+ this.firstNameTextEdit.Name = "firstNameTextEdit";
+ this.firstNameTextEdit.Properties.Mask.EditMask = "\\p{L}+";
+ this.firstNameTextEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
+ this.firstNameTextEdit.Properties.Mask.ShowPlaceHolders = false;
+ this.firstNameTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true;
+ this.firstNameTextEdit.Size = new System.Drawing.Size(623, 20);
+ this.firstNameTextEdit.StyleController = this.layoutControl1;
+ this.firstNameTextEdit.TabIndex = 4;
+ this.firstNameTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.PersonalInfoTextEdit_InvalidValue);
+ this.firstNameTextEdit.Modified += new System.EventHandler(this.AnyTextEdit_Modified);
+ this.firstNameTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.PersonalInfoTextEdit_Validating);
//
// OldPasswordTextEdit
//
+ this.OldPasswordTextEdit.CausesValidation = false;
this.OldPasswordTextEdit.Location = new System.Drawing.Point(24, 98);
this.OldPasswordTextEdit.Name = "OldPasswordTextEdit";
this.OldPasswordTextEdit.Properties.Mask.EditMask = "\\p{L}+";
@@ -209,65 +223,77 @@ private void InitializeComponent()
this.loginTextEdit.Size = new System.Drawing.Size(254, 20);
this.loginTextEdit.StyleController = this.layoutControl1;
this.loginTextEdit.TabIndex = 1;
- //
- // NewPasswordTextEdit
- //
- this.NewPasswordTextEdit.Location = new System.Drawing.Point(24, 138);
- this.NewPasswordTextEdit.Name = "NewPasswordTextEdit";
- this.NewPasswordTextEdit.Properties.Mask.EditMask = "\\p{L}+";
- this.NewPasswordTextEdit.Properties.Mask.ShowPlaceHolders = false;
- this.NewPasswordTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true;
- this.NewPasswordTextEdit.Properties.UseSystemPasswordChar = true;
- this.NewPasswordTextEdit.Size = new System.Drawing.Size(254, 20);
- this.NewPasswordTextEdit.StyleController = this.layoutControl1;
- this.NewPasswordTextEdit.TabIndex = 3;
- //
- // ConfimPasswordTextEdit
- //
- this.ConfimPasswordTextEdit.Location = new System.Drawing.Point(24, 178);
- this.ConfimPasswordTextEdit.Name = "ConfimPasswordTextEdit";
- this.ConfimPasswordTextEdit.Properties.Mask.EditMask = "\\p{L}+";
- this.ConfimPasswordTextEdit.Properties.Mask.ShowPlaceHolders = false;
- this.ConfimPasswordTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true;
- this.ConfimPasswordTextEdit.Properties.UseSystemPasswordChar = true;
- this.ConfimPasswordTextEdit.Size = new System.Drawing.Size(254, 20);
- this.ConfimPasswordTextEdit.StyleController = this.layoutControl1;
- this.ConfimPasswordTextEdit.TabIndex = 4;
- //
- // SelectRoleComboBox
- //
- this.SelectRoleComboBox.Location = new System.Drawing.Point(306, 178);
- this.SelectRoleComboBox.Name = "SelectRoleComboBox";
- this.SelectRoleComboBox.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+ this.loginTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.loginTextEdit_InvalidValue);
+ this.loginTextEdit.Modified += new System.EventHandler(this.AnyPasswordTextEdit_Modified);
+ this.loginTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.loginTextEdit_Validating);
+ //
+ // newPasswordTextEdit
+ //
+ this.newPasswordTextEdit.Location = new System.Drawing.Point(24, 138);
+ this.newPasswordTextEdit.Name = "newPasswordTextEdit";
+ this.newPasswordTextEdit.Properties.Mask.EditMask = "\\p{L}+";
+ this.newPasswordTextEdit.Properties.Mask.ShowPlaceHolders = false;
+ this.newPasswordTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true;
+ this.newPasswordTextEdit.Properties.UseSystemPasswordChar = true;
+ this.newPasswordTextEdit.Size = new System.Drawing.Size(254, 20);
+ this.newPasswordTextEdit.StyleController = this.layoutControl1;
+ this.newPasswordTextEdit.TabIndex = 3;
+ this.newPasswordTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.PasswordTextEdit_InvalidValue);
+ this.newPasswordTextEdit.Modified += new System.EventHandler(this.AnyPasswordTextEdit_Modified);
+ this.newPasswordTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.PasswordTextEdit_Validating);
+ //
+ // confimPasswordTextEdit
+ //
+ this.confimPasswordTextEdit.Location = new System.Drawing.Point(24, 178);
+ this.confimPasswordTextEdit.Name = "confimPasswordTextEdit";
+ this.confimPasswordTextEdit.Properties.Mask.EditMask = "\\p{L}+";
+ this.confimPasswordTextEdit.Properties.Mask.ShowPlaceHolders = false;
+ this.confimPasswordTextEdit.Properties.Mask.UseMaskAsDisplayFormat = true;
+ this.confimPasswordTextEdit.Properties.UseSystemPasswordChar = true;
+ this.confimPasswordTextEdit.Size = new System.Drawing.Size(254, 20);
+ this.confimPasswordTextEdit.StyleController = this.layoutControl1;
+ this.confimPasswordTextEdit.TabIndex = 4;
+ this.confimPasswordTextEdit.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.PasswordTextEdit_InvalidValue);
+ this.confimPasswordTextEdit.Modified += new System.EventHandler(this.AnyPasswordTextEdit_Modified);
+ this.confimPasswordTextEdit.Validating += new System.ComponentModel.CancelEventHandler(this.PasswordTextEdit_Validating);
+ //
+ // selectRoleComboBox
+ //
+ this.selectRoleComboBox.Location = new System.Drawing.Point(306, 178);
+ this.selectRoleComboBox.Name = "selectRoleComboBox";
+ this.selectRoleComboBox.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
- this.SelectRoleComboBox.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
- this.SelectRoleComboBox.Size = new System.Drawing.Size(623, 20);
- this.SelectRoleComboBox.StyleController = this.layoutControl1;
- this.SelectRoleComboBox.TabIndex = 7;
- //
- // customerGroup
- //
- this.customerGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
- this.customerGroup.GroupBordersVisible = false;
- this.customerGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
- this.personalInfoGroup,
- this.contactInfoGroup});
- this.customerGroup.Location = new System.Drawing.Point(0, 0);
- this.customerGroup.Name = "Root";
- this.customerGroup.Size = new System.Drawing.Size(953, 522);
- this.customerGroup.TextVisible = false;
- //
- // personalInfoGroup
- //
- this.personalInfoGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+ this.selectRoleComboBox.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
+ this.selectRoleComboBox.Size = new System.Drawing.Size(623, 20);
+ this.selectRoleComboBox.StyleController = this.layoutControl1;
+ this.selectRoleComboBox.TabIndex = 7;
+ this.selectRoleComboBox.InvalidValue += new DevExpress.XtraEditors.Controls.InvalidValueExceptionEventHandler(this.selectRoleComboBox_InvalidValue);
+ this.selectRoleComboBox.Modified += new System.EventHandler(this.AnyTextEdit_Modified);
+ this.selectRoleComboBox.Validating += new System.ComponentModel.CancelEventHandler(this.selectRoleComboBox_Validating);
+ //
+ // userGroup
+ //
+ this.userGroup.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+ this.userGroup.GroupBordersVisible = false;
+ this.userGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+ this.authInfoGroup,
+ this.personalInfoGroup});
+ this.userGroup.Location = new System.Drawing.Point(0, 0);
+ this.userGroup.Name = "userGroup";
+ this.userGroup.Size = new System.Drawing.Size(953, 522);
+ this.userGroup.TextVisible = false;
+ //
+ // authInfoGroup
+ //
+ this.authInfoGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
this.oldPasswordLayoutControlItem,
this.loginLayoutControlItem,
this.newPasswordLayoutControlItem,
this.confimPasswordLayoutControlItem});
- this.personalInfoGroup.Location = new System.Drawing.Point(0, 0);
- this.personalInfoGroup.Name = "personalInfoGroup";
- this.personalInfoGroup.Size = new System.Drawing.Size(282, 502);
- this.personalInfoGroup.Text = "Данные авторизации";
+ this.authInfoGroup.Location = new System.Drawing.Point(0, 0);
+ this.authInfoGroup.Name = "authInfoGroup";
+ this.authInfoGroup.Size = new System.Drawing.Size(282, 502);
+ this.authInfoGroup.Text = "Данные авторизации";
//
// oldPasswordLayoutControlItem
//
@@ -293,7 +319,7 @@ private void InitializeComponent()
//
// newPasswordLayoutControlItem
//
- this.newPasswordLayoutControlItem.Control = this.NewPasswordTextEdit;
+ this.newPasswordLayoutControlItem.Control = this.newPasswordTextEdit;
this.newPasswordLayoutControlItem.CustomizationFormText = "Имя";
this.newPasswordLayoutControlItem.Location = new System.Drawing.Point(0, 80);
this.newPasswordLayoutControlItem.Name = "newPasswordLayoutControlItem";
@@ -304,7 +330,7 @@ private void InitializeComponent()
//
// confimPasswordLayoutControlItem
//
- this.confimPasswordLayoutControlItem.Control = this.ConfimPasswordTextEdit;
+ this.confimPasswordLayoutControlItem.Control = this.confimPasswordTextEdit;
this.confimPasswordLayoutControlItem.CustomizationFormText = "Имя";
this.confimPasswordLayoutControlItem.Location = new System.Drawing.Point(0, 120);
this.confimPasswordLayoutControlItem.Name = "confimPasswordLayoutControlItem";
@@ -313,34 +339,24 @@ private void InitializeComponent()
this.confimPasswordLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top;
this.confimPasswordLayoutControlItem.TextSize = new System.Drawing.Size(109, 13);
//
- // contactInfoGroup
+ // personalInfoGroup
//
- this.contactInfoGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
- this.lastNameItem,
+ this.personalInfoGroup.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
this.layoutControlItem2,
this.middleNameItem,
- this.layoutControlItem1,
- this.IsActiveUserLayoutControl});
- this.contactInfoGroup.Location = new System.Drawing.Point(282, 0);
- this.contactInfoGroup.Name = "contactInfoGroup";
- this.contactInfoGroup.Size = new System.Drawing.Size(651, 502);
- this.contactInfoGroup.Text = "Личная информация";
- //
- // lastNameItem
- //
- this.lastNameItem.Control = this.LastNameTextEdit;
- this.lastNameItem.Location = new System.Drawing.Point(0, 40);
- this.lastNameItem.Name = "lastNameItem";
- this.lastNameItem.Size = new System.Drawing.Size(627, 40);
- this.lastNameItem.Text = "Фамилия";
- this.lastNameItem.TextLocation = DevExpress.Utils.Locations.Top;
- this.lastNameItem.TextSize = new System.Drawing.Size(109, 13);
+ this.rol,
+ this.IsActiveUserLayoutControl,
+ this.lastNameItem});
+ this.personalInfoGroup.Location = new System.Drawing.Point(282, 0);
+ this.personalInfoGroup.Name = "personalInfoGroup";
+ this.personalInfoGroup.Size = new System.Drawing.Size(651, 502);
+ this.personalInfoGroup.Text = "Личная информация";
//
// layoutControlItem2
//
- this.layoutControlItem2.Control = this.FirstNameTextEdit;
+ this.layoutControlItem2.Control = this.firstNameTextEdit;
this.layoutControlItem2.CustomizationFormText = "Имя";
- this.layoutControlItem2.Location = new System.Drawing.Point(0, 0);
+ this.layoutControlItem2.Location = new System.Drawing.Point(0, 40);
this.layoutControlItem2.Name = "layoutControlItem2";
this.layoutControlItem2.Size = new System.Drawing.Size(627, 40);
this.layoutControlItem2.Text = "Имя";
@@ -349,7 +365,7 @@ private void InitializeComponent()
//
// middleNameItem
//
- this.middleNameItem.Control = this.MiddleNameTextEdit;
+ this.middleNameItem.Control = this.middleNameTextEdit;
this.middleNameItem.Location = new System.Drawing.Point(0, 80);
this.middleNameItem.Name = "middleNameItem";
this.middleNameItem.Size = new System.Drawing.Size(627, 40);
@@ -357,15 +373,15 @@ private void InitializeComponent()
this.middleNameItem.TextLocation = DevExpress.Utils.Locations.Top;
this.middleNameItem.TextSize = new System.Drawing.Size(109, 13);
//
- // layoutControlItem1
+ // rol
//
- this.layoutControlItem1.Control = this.SelectRoleComboBox;
- this.layoutControlItem1.Location = new System.Drawing.Point(0, 120);
- this.layoutControlItem1.Name = "layoutControlItem1";
- this.layoutControlItem1.Size = new System.Drawing.Size(627, 40);
- this.layoutControlItem1.Text = "Роль";
- this.layoutControlItem1.TextLocation = DevExpress.Utils.Locations.Top;
- this.layoutControlItem1.TextSize = new System.Drawing.Size(109, 13);
+ this.rol.Control = this.selectRoleComboBox;
+ this.rol.Location = new System.Drawing.Point(0, 120);
+ this.rol.Name = "layoutControlItem1";
+ this.rol.Size = new System.Drawing.Size(627, 40);
+ this.rol.Text = "Роль";
+ this.rol.TextLocation = DevExpress.Utils.Locations.Top;
+ this.rol.TextSize = new System.Drawing.Size(109, 13);
//
// IsActiveUserLayoutControl
//
@@ -376,6 +392,26 @@ private void InitializeComponent()
this.IsActiveUserLayoutControl.TextSize = new System.Drawing.Size(0, 0);
this.IsActiveUserLayoutControl.TextVisible = false;
//
+ // lastNameItem
+ //
+ this.lastNameItem.Control = this.lastNameTextEdit;
+ this.lastNameItem.Location = new System.Drawing.Point(0, 0);
+ this.lastNameItem.Name = "lastNameItem";
+ this.lastNameItem.Size = new System.Drawing.Size(627, 40);
+ this.lastNameItem.Text = "Фамилия";
+ this.lastNameItem.TextLocation = DevExpress.Utils.Locations.Top;
+ this.lastNameItem.TextSize = new System.Drawing.Size(109, 13);
+ //
+ // RoleLayoutControlItem
+ //
+ this.RoleLayoutControlItem.Control = this.selectRoleComboBox;
+ this.RoleLayoutControlItem.Location = new System.Drawing.Point(0, 120);
+ this.RoleLayoutControlItem.Name = "RoleLayoutControlItem";
+ this.RoleLayoutControlItem.Size = new System.Drawing.Size(627, 40);
+ this.RoleLayoutControlItem.Text = "Роль";
+ this.RoleLayoutControlItem.TextLocation = DevExpress.Utils.Locations.Top;
+ this.RoleLayoutControlItem.TextSize = new System.Drawing.Size(109, 13);
+ //
// userEditBindingSource
//
this.userEditBindingSource.DataSource = typeof(ContosoUI.Users.Edit.UserEditPresenter);
@@ -391,31 +427,33 @@ private void InitializeComponent()
this.Name = "UserEditForm";
this.Ribbon = this.ribbonControl1;
this.Text = "Пользователь";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.UserEditForm_FormClosing);
this.Load += new System.EventHandler(this.UserEditForm_Load);
((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
this.layoutControl1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.IsActiveUserCheckEdit.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.ribbonControl1)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.MiddleNameTextEdit.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.LastNameTextEdit.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.FirstNameTextEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.middleNameTextEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.lastNameTextEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.firstNameTextEdit.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.OldPasswordTextEdit.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.loginTextEdit.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.NewPasswordTextEdit.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.ConfimPasswordTextEdit.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.SelectRoleComboBox.Properties)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.customerGroup)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.personalInfoGroup)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.newPasswordTextEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.confimPasswordTextEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.selectRoleComboBox.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.userGroup)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.authInfoGroup)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.oldPasswordLayoutControlItem)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.loginLayoutControlItem)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.newPasswordLayoutControlItem)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.confimPasswordLayoutControlItem)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.contactInfoGroup)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.lastNameItem)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.personalInfoGroup)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.middleNameItem)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.rol)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.IsActiveUserLayoutControl)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.lastNameItem)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.RoleLayoutControlItem)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.userEditBindingSource)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@@ -425,25 +463,25 @@ private void InitializeComponent()
#endregion
private DevExpress.XtraLayout.LayoutControl layoutControl1;
- private DevExpress.XtraLayout.LayoutControlGroup customerGroup;
- private DevExpress.XtraEditors.TextEdit MiddleNameTextEdit;
- private DevExpress.XtraEditors.TextEdit LastNameTextEdit;
- private DevExpress.XtraLayout.LayoutControlGroup personalInfoGroup;
+ private DevExpress.XtraLayout.LayoutControlGroup userGroup;
+ private DevExpress.XtraEditors.TextEdit middleNameTextEdit;
+ private DevExpress.XtraEditors.TextEdit lastNameTextEdit;
+ private DevExpress.XtraLayout.LayoutControlGroup authInfoGroup;
private DevExpress.XtraLayout.LayoutControlItem lastNameItem;
private DevExpress.XtraLayout.LayoutControlItem middleNameItem;
- private DevExpress.XtraLayout.LayoutControlGroup contactInfoGroup;
+ private DevExpress.XtraLayout.LayoutControlGroup personalInfoGroup;
private DevExpress.XtraBars.Ribbon.RibbonPage mainRibbonPage;
private DevExpress.XtraBars.Ribbon.RibbonPageGroup saveOrEditribbonPageGroup;
private DevExpress.XtraBars.BarButtonItem saveEditButtonItem;
private DevExpress.XtraBars.Ribbon.RibbonControl ribbonControl1;
- private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
- private DevExpress.XtraEditors.TextEdit FirstNameTextEdit;
+ private DevExpress.XtraLayout.LayoutControlItem RoleLayoutControlItem;
+ private DevExpress.XtraEditors.TextEdit firstNameTextEdit;
private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
private DevExpress.XtraEditors.TextEdit OldPasswordTextEdit;
private DevExpress.XtraEditors.TextEdit loginTextEdit;
- private DevExpress.XtraEditors.TextEdit NewPasswordTextEdit;
- private DevExpress.XtraEditors.TextEdit ConfimPasswordTextEdit;
- private DevExpress.XtraEditors.ComboBoxEdit SelectRoleComboBox;
+ private DevExpress.XtraEditors.TextEdit newPasswordTextEdit;
+ private DevExpress.XtraEditors.TextEdit confimPasswordTextEdit;
+ private DevExpress.XtraEditors.ComboBoxEdit selectRoleComboBox;
private DevExpress.XtraLayout.LayoutControlItem oldPasswordLayoutControlItem;
private DevExpress.XtraLayout.LayoutControlItem loginLayoutControlItem;
private DevExpress.XtraLayout.LayoutControlItem newPasswordLayoutControlItem;
@@ -452,6 +490,7 @@ private void InitializeComponent()
private DevExpress.XtraBars.BarButtonItem ChangePasswordBarBtn;
private DevExpress.XtraEditors.CheckEdit IsActiveUserCheckEdit;
private DevExpress.XtraLayout.LayoutControlItem IsActiveUserLayoutControl;
+ private DevExpress.XtraLayout.LayoutControlItem rol;
}
}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.cs b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.cs
index 62edcf7..df9f2c9 100644
--- a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.cs
+++ b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditForm.cs
@@ -8,6 +8,7 @@
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraBars;
+using DevExpress.XtraEditors.Controls;
namespace ContosoUI.Users.Edit
{
@@ -16,9 +17,10 @@ public partial class UserEditForm : DevExpress.XtraBars.Ribbon.RibbonForm
UserEditPresenter presenter;
public event EventHandler SaveBtnClick;
public event EventHandler PasswordChange;
+ IUserNotify notifyManager = Program.MainWiewInstance;
public string OldPassword { get { return OldPasswordTextEdit.Text; } }
- public string NewPassword { get { return NewPasswordTextEdit.Text; } }
+ public string NewPassword { get { return newPasswordTextEdit.Text; } }
public UserEditForm()
{
@@ -38,42 +40,172 @@ public UserEditForm(int id)
}
}
+ # region Validation
+
+ private enum ValidLength
+ {
+ minLogin = 3,
+ maxLogin = 25,
+ minPassword = 5,
+ maxPassword = 40,
+ minPersonalInfo = 2,
+ maxPersonalInfo = 25
+ }
+
+ private void loginTextEdit_Validating(object sender, CancelEventArgs e)
+ {
+ var textEditControl = sender as DevExpress.XtraEditors.TextEdit;
+ var length = textEditControl.Text.Length;
+ if ((length < (int)ValidLength.minLogin || length > (int)ValidLength.maxLogin) && isPersonalInfoModified)
+ {
+ e.Cancel = true;
+ }
+ }
+ private void loginTextEdit_InvalidValue(object sender, DevExpress.XtraEditors.Controls.InvalidValueExceptionEventArgs e)
+ {
+ e.ErrorText = String.Format("Необходимо от {0} до {1} символов.", (int)ValidLength.minLogin, (int)ValidLength.maxLogin);
+ }
+
+ private void PasswordTextEdit_Validating(object sender, CancelEventArgs e)
+ {
+ var textEditControl = sender as DevExpress.XtraEditors.TextEdit;
+ var length = textEditControl.Text.Length;
+ if ((length < (int)ValidLength.minPassword || length > (int)ValidLength.maxPassword) && isPasswordModified)
+ {
+ e.Cancel = true;
+ }
+ }
+ private void PasswordTextEdit_InvalidValue(object sender, InvalidValueExceptionEventArgs e)
+ {
+ e.ErrorText = String.Format("Необходимо от {0} до {1} символов.", (int)ValidLength.minPassword, (int)ValidLength.maxPassword);
+ }
+
+ private void PersonalInfoTextEdit_Validating(object sender, CancelEventArgs e)
+ {
+ var textEditControl = sender as DevExpress.XtraEditors.TextEdit;
+ var length = textEditControl.Text.Length;
+ if ((length < (int)ValidLength.minPersonalInfo || length > (int)ValidLength.maxPersonalInfo) && isPersonalInfoModified)
+ {
+ e.Cancel = true;
+ }
+ }
+ private void PersonalInfoTextEdit_InvalidValue(object sender, InvalidValueExceptionEventArgs e)
+ {
+ e.ErrorText = String.Format("Необходимо от {0} до {1} символов.", (int)ValidLength.minPersonalInfo, (int)ValidLength.maxPersonalInfo);
+ }
+
+ private void selectRoleComboBox_Validating(object sender, CancelEventArgs e)
+ {
+ var combo = sender as DevExpress.XtraEditors.ComboBoxEdit;
+ if (combo.SelectedItem == null || combo.SelectedItem.ToString() == null)
+ {
+ e.Cancel = true;
+ }
+ }
+ private void selectRoleComboBox_InvalidValue(object sender, InvalidValueExceptionEventArgs e)
+ {
+ e.ErrorText = "Выберите роль";
+ }
+ # endregion
+
private void UserEditForm_Load(object sender, EventArgs e)
{
this.userEditBindingSource.DataSource = presenter;
- FirstNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "FirstName");
- LastNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "LastName");
- MiddleNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "MiddleName");
+ firstNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "FirstName");
+ lastNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "LastName");
+ middleNameTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "MiddleName");
loginTextEdit.DataBindings.Add("EditValue", userEditBindingSource, "Login");
- SelectRoleComboBox.DataBindings.Add("EditValue", userEditBindingSource, "Role");
- SelectRoleComboBox.Properties.Items.AddRange(presenter.AllRoles);
+ selectRoleComboBox.DataBindings.Add("EditValue", userEditBindingSource, "Role");
+ selectRoleComboBox.Properties.Items.AddRange(presenter.AllRoles);
IsActiveUserCheckEdit.DataBindings.Add("EditValue", userEditBindingSource, "IsActive");
}
+ bool asPasswordChange = false;
internal void AsPasswordChange()
{
- this.contactInfoGroup.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
+ this.personalInfoGroup.HideToCustomization();
+ asPasswordChange = true;
+ selectRoleComboBox.CausesValidation = false;
+ }
+
+ private bool isPersonalInfoModified = false;
+ private bool isPasswordModified = false;
+
+ private void AnyTextEdit_Modified(object sender, EventArgs e)
+ {
+ isPersonalInfoModified = true;
+ }
+
+ private void AnyPasswordTextEdit_Modified(object sender, EventArgs e)
+ {
+ isPasswordModified = true;
}
private void saveEditButtonItem_ItemClick(object sender, ItemClickEventArgs e)
{
- if (loginTextEdit.Text!=String.Empty&&NewPasswordTextEdit.Text==ConfimPasswordTextEdit.Text)
+ if (newPasswordTextEdit.Text==confimPasswordTextEdit.Text&&
+ (firstNameTextEdit.Text!=String.Empty||asPasswordChange)&&
+ loginTextEdit.Text!= String.Empty)
{
+ isPersonalInfoModified = false;
+ isPasswordModified = false;
userEditBindingSource.EndEdit();
- SaveBtnClick.Invoke(sender, e);
- if (NewPasswordTextEdit.Text!=String.Empty)
+ if (newPasswordTextEdit.Text!=String.Empty)
{
PasswordChange.Invoke(sender, e);
}
+ SaveBtnClick.Invoke(sender, e);
}
else
{
- MessageBox.Show("Логин не введен или пароли не совпадают.", "Ошибка!");
+ notifyManager.ShowError("Заполнены не все поля или пароли не совпадают.", "Ошибка!");
}
}
+
+ private void UserEditForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (isPersonalInfoModified || isPasswordModified)
+ {
+ if (notifyManager.ShowYesNo("Внимание, данные не сохранены!\n Вы уверены что хотите закрыть?", "Сообщение"))
+ {
+ e.Cancel = false;
+ }
+ else
+ {
+ e.Cancel = true;
+ }
+ }
+ else
+ {
+ e.Cancel = false;
+ }
+ }
+
+ internal void UserUpdateDialog()
+ {
+ notifyManager.ShowInfo("Данные обновлены.", "Сообщеие");
+ }
+
+ internal void UserAddDialog()
+ {
+ notifyManager.ShowInfo("Новый пользователь добавлен.", "Сообщение");
+ }
+
+ internal void WrongLoginDialog()
+ {
+ notifyManager.ShowError("Пользовател с таким логином уже существует.", "Ошибка!");
+ isPersonalInfoModified = true;
+ }
+
+ internal void WrongPasswordDialog()
+ {
+ notifyManager.ShowError("Введен неверный пароль.", "Ошибка!");
+ OldPasswordTextEdit.Text = String.Empty;
+ }
}
+
}
\ No newline at end of file
diff --git a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditPresenter.cs b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditPresenter.cs
index b6ea6d8..961e7bc 100644
--- a/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditPresenter.cs
+++ b/Solution/ContosoProject/ContosoUI/Users/Edit/UserEditPresenter.cs
@@ -1,5 +1,6 @@
using ContosoUI.Authentication;
-using Data.DumbData;
+using ContosoUI.Presenter;
+using Data.EFData;
using Domain.DAO;
using Domain.Entities;
using System;
@@ -12,24 +13,22 @@
namespace ContosoUI.Users.Edit
{
- class UserEditPresenter : BaseMD5, INotifyPropertyChanged
+ class UserEditPresenter : BasePresenter
{
User user = null;
UserEditForm view = null;
List roles = null;
- IUserRepository model = new UserDao();
- IRoleRepository role = new RoleDao();
+ UserRoleService model = new UserRoleService();
bool userIsFromBase = false;
- public event PropertyChangedEventHandler PropertyChanged;
public UserEditPresenter(UserEditForm view)
{
this.user = new User();
this.view = view;
- this.roles = this.role.GetAll().ToList();
+ this.roles = this.model.RoleDao.GetAll().ToList();
this.view.SaveBtnClick += new EventHandler(SaveBtnClickHandler);
this.view.PasswordChange += new EventHandler(PasswordChangedHandler);
}
@@ -38,7 +37,7 @@ public UserEditPresenter(UserEditForm view)
public UserEditPresenter(UserEditForm view, int id)
: this(view)
{
- this.user = model.GetById(id);
+ this.user = model.UserDao.GetById(id);
this.userIsFromBase = true;
}
@@ -46,45 +45,40 @@ private void SaveBtnClickHandler(object sender, EventArgs e)
{
if (userIsFromBase)
{
- model.Update(user);
+ model.UserDao.Update(user);
+ view.UserUpdateDialog();
}
- else if (!model.GetAll().ToList().Any(x => x.Login == this.user.Login))
+ else if (!model.UserDao.GetAll().ToList().Any(x => x.Login == this.user.Login))
{
- model.Add(user);
+ model.UserDao.Add(user);
+ view.UserAddDialog();
}
else
{
- MessageBox.Show("Пользователь с данным логином уже существует.", "Ошибка!");
+ view.WrongLoginDialog();
}
}
private void PasswordChangedHandler(object sender, EventArgs e)
{
if (Program.AuthUser.Role.Permissions.Any(x => x.Type == Domain.PermissionType.EditUser) ||
- GetMd5Hash(view.OldPassword) == user.Password)
+ view.OldPassword.ToMD5() == user.Password)
{
- user.Password = GetMd5Hash(view.NewPassword);
- }
+ user.Password = view.NewPassword.ToMD5();
+ }
else
{
- MessageBox.Show("Введен неверный пароль.", "Ошибка!");
+ view.WrongPasswordDialog();
}
}
- private void NotifyPropertyChanged(String info)
- {
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs(info));
- }
- }
public string FirstName
{
get { return user.PersonalInfo.FirstName; }
set
{
- if (user.PersonalInfo.FirstName != value)
+ if (user.PersonalInfo.FirstName != value&&value != String.Empty)
{
user.PersonalInfo.FirstName = value;
NotifyPropertyChanged("FirstName");
@@ -97,7 +91,7 @@ public string LastName
get { return user.PersonalInfo.LastName; }
set
{
- if (user.PersonalInfo.LastName != value)
+ if (user.PersonalInfo.LastName != value && value != String.Empty)
{
user.PersonalInfo.LastName = value;
NotifyPropertyChanged("LastName");
@@ -110,7 +104,7 @@ public string MiddleName
get { return user.PersonalInfo.MiddleName; }
set
{
- if (user.PersonalInfo.MiddleName != value)
+ if (user.PersonalInfo.MiddleName != value && value != String.Empty)
{
user.PersonalInfo.MiddleName = value;
NotifyPropertyChanged("MiddleName");
@@ -142,7 +136,7 @@ public Role Role
get { return user.Role; }
set
{
- if (user.Role != value)
+ if (user.Role != value&&value.Name!=String.Empty)
{
user.Role = value;
NotifyPropertyChanged("Role");
diff --git a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.Designer.cs b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.Designer.cs
index 73c47ad..0b946bd 100644
--- a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.Designer.cs
+++ b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.Designer.cs
@@ -83,8 +83,8 @@ private void InitializeComponent()
this.colPersonalInfo.OptionsColumn.AllowFocus = false;
this.colPersonalInfo.OptionsColumn.ReadOnly = true;
this.colPersonalInfo.Visible = true;
- this.colPersonalInfo.VisibleIndex = 0;
- this.colPersonalInfo.Width = 257;
+ this.colPersonalInfo.VisibleIndex = 2;
+ this.colPersonalInfo.Width = 499;
//
// colRole
//
@@ -94,8 +94,8 @@ private void InitializeComponent()
this.colRole.OptionsColumn.AllowFocus = false;
this.colRole.OptionsColumn.ReadOnly = true;
this.colRole.Visible = true;
- this.colRole.VisibleIndex = 1;
- this.colRole.Width = 143;
+ this.colRole.VisibleIndex = 0;
+ this.colRole.Width = 133;
//
// colLogin
//
@@ -105,8 +105,8 @@ private void InitializeComponent()
this.colLogin.OptionsColumn.AllowFocus = false;
this.colLogin.OptionsColumn.ReadOnly = true;
this.colLogin.Visible = true;
- this.colLogin.VisibleIndex = 2;
- this.colLogin.Width = 195;
+ this.colLogin.VisibleIndex = 1;
+ this.colLogin.Width = 120;
//
// colId
//
@@ -114,9 +114,7 @@ private void InitializeComponent()
this.colId.Name = "colId";
this.colId.OptionsColumn.AllowFocus = false;
this.colId.OptionsColumn.ReadOnly = true;
- this.colId.Visible = true;
- this.colId.VisibleIndex = 3;
- this.colId.Width = 89;
+ this.colId.Width = 85;
//
// colIsActive
//
@@ -126,8 +124,8 @@ private void InitializeComponent()
this.colIsActive.OptionsColumn.AllowFocus = false;
this.colIsActive.OptionsColumn.ReadOnly = true;
this.colIsActive.Visible = true;
- this.colIsActive.VisibleIndex = 4;
- this.colIsActive.Width = 137;
+ this.colIsActive.VisibleIndex = 3;
+ this.colIsActive.Width = 115;
//
// colEditTime
//
@@ -137,8 +135,8 @@ private void InitializeComponent()
this.colEditTime.OptionsColumn.AllowFocus = false;
this.colEditTime.OptionsColumn.ReadOnly = true;
this.colEditTime.Visible = true;
- this.colEditTime.VisibleIndex = 5;
- this.colEditTime.Width = 165;
+ this.colEditTime.VisibleIndex = 4;
+ this.colEditTime.Width = 119;
//
// UserReportGridControl
//
@@ -211,6 +209,7 @@ private void InitializeComponent()
this.ribbonPageGroup1.ItemLinks.Add(this.barButtonGroup1);
this.ribbonPageGroup1.ItemLinks.Add(this.userReportSaveBtn);
this.ribbonPageGroup1.ItemLinks.Add(this.userReportPrintBtn);
+ this.ribbonPageGroup1.MergeOrder = 5;
this.ribbonPageGroup1.Name = "ribbonPageGroup1";
this.ribbonPageGroup1.Text = "Сохранение";
//
diff --git a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.resx b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.resx
index f78321d..604c542 100644
--- a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.resx
+++ b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportForm.resx
@@ -123,152 +123,152 @@
- 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
+ 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
- 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
- f/QEgOiffNHExjV+0RkAAAAASUVORK5CYII=
+ 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
+ GQAAAABJRU5ErkJggg==
- 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
+ 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
- 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
+ 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
diff --git a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportPresenter.cs b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportPresenter.cs
index 3fb643f..d2d847f 100644
--- a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportPresenter.cs
+++ b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportPresenter.cs
@@ -1,4 +1,4 @@
-using Data.DumbData;
+using Data.EFData;
using Domain.DAO;
using Domain.Entities;
using System;
@@ -11,8 +11,8 @@ namespace ContosoUI.EditUserForm
{
class UserReportPresenter
{
- readonly UserReportForm view;
- readonly IUserRepository model = new UserDao();
+ UserReportForm view;
+ IUserRepository model = new UserDao();
List users = new List();
public List viewModels = new List();
diff --git a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportViewModel.cs b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportViewModel.cs
index 5d082e9..ea11043 100644
--- a/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportViewModel.cs
+++ b/Solution/ContosoProject/ContosoUI/Users/ReportForm/UserReportViewModel.cs
@@ -1,5 +1,4 @@
using Domain.Entities;
-using Data.DumbData.tempDAO;
using Domain.DAO;
using System;
using System.Collections.Generic;
@@ -33,17 +32,7 @@ public string Role
}
public string IsActive
{
- get
- {
- if (user.IsActive)
- {
- return "Да";
- }
- else
- {
- return "Нет";
- }
- }
+ get { return string.Format(user.IsActive ? "Да" : "Нет");}
}
public int Id
{
diff --git a/Solution/ContosoProject/ContosoUI/packages.config b/Solution/ContosoProject/ContosoUI/packages.config
index 9e8db31..4e57f9f 100644
--- a/Solution/ContosoProject/ContosoUI/packages.config
+++ b/Solution/ContosoProject/ContosoUI/packages.config
@@ -1,4 +1,6 @@
+
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/Data/App.config b/Solution/ContosoProject/Data/App.config
index c115e7c..91a9335 100644
--- a/Solution/ContosoProject/Data/App.config
+++ b/Solution/ContosoProject/Data/App.config
@@ -3,14 +3,28 @@
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/Data/Data.csproj b/Solution/ContosoProject/Data/Data.csproj
index 62efb0f..cfa9d6c 100644
--- a/Solution/ContosoProject/Data/Data.csproj
+++ b/Solution/ContosoProject/Data/Data.csproj
@@ -38,9 +38,17 @@
..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll
True
+
+ ..\packages\EntityFramework.SqlServerCompact.6.1.3\lib\net45\EntityFramework.SqlServerCompact.dll
+ True
+
+
+ ..\packages\Microsoft.SqlServer.Compact.4.0.8876.1\lib\net40\System.Data.SqlServerCe.dll
+ True
+
@@ -49,8 +57,9 @@
-
-
+
+
+
@@ -61,10 +70,12 @@
+
+
@@ -74,21 +85,26 @@
+
-
-
- 201510291530109_Init.cs
+
+
+
+ 201511031214147_Init.cs
-
-
- 201511021009598_Second.cs
+
+
+ 201511031420293_Vbre.cs
-
+
+ Designer
+
+
@@ -97,14 +113,21 @@
-
- 201510291530109_Init.cs
+
+ 201511031214147_Init.cs
-
- 201511021009598_Second.cs
+
+ 201511031420293_Vbre.cs
+
+
+ if not exist "$(TargetDir)x86" md "$(TargetDir)x86"
+ xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\x86\*.*" "$(TargetDir)x86"
+ if not exist "$(TargetDir)amd64" md "$(TargetDir)amd64"
+ xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\amd64\*.*" "$(TargetDir)amd64"
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 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
-
-
- dbo
-
-
\ No newline at end of file
diff --git a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.cs b/Solution/ContosoProject/Data/Migrations/201511021009598_Second.cs
deleted file mode 100644
index b72b168..0000000
--- a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-namespace Data.Migrations
-{
- using System;
- using System.Data.Entity.Migrations;
-
- public partial class Second : DbMigration
- {
- public override void Up()
- {
- AddColumn("dbo.PersonalInfoes", "IsActive", c => c.Boolean(nullable: false));
- AddColumn("dbo.PersonalInfoes", "EditTime", c => c.DateTime(nullable: false));
- }
-
- public override void Down()
- {
- DropColumn("dbo.PersonalInfoes", "EditTime");
- DropColumn("dbo.PersonalInfoes", "IsActive");
- }
- }
-}
diff --git a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.resx b/Solution/ContosoProject/Data/Migrations/201511021009598_Second.resx
deleted file mode 100644
index 21eee49..0000000
--- a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.resx
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 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
-
-
- dbo
-
-
\ No newline at end of file
diff --git a/Solution/ContosoProject/Data/Migrations/201510291530109_Init.Designer.cs b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.Designer.cs
similarity index 93%
rename from Solution/ContosoProject/Data/Migrations/201510291530109_Init.Designer.cs
rename to Solution/ContosoProject/Data/Migrations/201511031214147_Init.Designer.cs
index 8a07f14..f66deeb 100644
--- a/Solution/ContosoProject/Data/Migrations/201510291530109_Init.Designer.cs
+++ b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.Designer.cs
@@ -13,7 +13,7 @@ public sealed partial class Init : IMigrationMetadata
string IMigrationMetadata.Id
{
- get { return "201510291530109_Init"; }
+ get { return "201511031214147_Init"; }
}
string IMigrationMetadata.Source
diff --git a/Solution/ContosoProject/Data/Migrations/201510291530109_Init.cs b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.cs
similarity index 90%
rename from Solution/ContosoProject/Data/Migrations/201510291530109_Init.cs
rename to Solution/ContosoProject/Data/Migrations/201511031214147_Init.cs
index b832f0c..9b89b02 100644
--- a/Solution/ContosoProject/Data/Migrations/201510291530109_Init.cs
+++ b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.cs
@@ -12,7 +12,7 @@ public override void Up()
c => new
{
Id = c.Int(nullable: false, identity: true),
- CategoryName = c.String(),
+ CategoryName = c.String(maxLength: 50),
IsActive = c.Boolean(nullable: false),
EditTime = c.DateTime(nullable: false),
})
@@ -23,8 +23,8 @@ public override void Up()
c => new
{
Id = c.Int(nullable: false, identity: true),
- Name = c.String(),
- SKU = c.String(),
+ Name = c.String(nullable: false, maxLength: 255),
+ SKU = c.String(nullable: false, maxLength: 50),
Price = c.Double(nullable: false),
Count = c.Int(nullable: false),
IsActive = c.Boolean(nullable: false),
@@ -40,7 +40,7 @@ public override void Up()
c => new
{
Id = c.Int(nullable: false, identity: true),
- Message = c.String(),
+ Message = c.String(maxLength: 2000),
Type = c.Int(nullable: false),
IsActive = c.Boolean(nullable: false),
EditTime = c.DateTime(nullable: false),
@@ -57,41 +57,40 @@ public override void Up()
.Index(t => t.Order_Id);
CreateTable(
- "dbo.Customers",
+ "dbo.ContactInfoes",
c => new
{
Id = c.Int(nullable: false, identity: true),
+ City = c.String(maxLength: 25),
+ Adress = c.String(maxLength: 100),
+ Telephone = c.String(maxLength: 15),
+ Email = c.String(maxLength: 40),
IsActive = c.Boolean(nullable: false),
EditTime = c.DateTime(nullable: false),
- Contacts_Id = c.Int(),
- PersonalInfo_Id = c.Int(),
})
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.ContactInfoes", t => t.Contacts_Id)
- .ForeignKey("dbo.PersonalInfoes", t => t.PersonalInfo_Id)
- .Index(t => t.Contacts_Id)
- .Index(t => t.PersonalInfo_Id);
+ .PrimaryKey(t => t.Id);
CreateTable(
- "dbo.ContactInfoes",
+ "dbo.Customers",
c => new
{
Id = c.Int(nullable: false, identity: true),
- City = c.String(),
- Adress = c.String(),
- Telephone = c.String(),
- Email = c.String(),
IsActive = c.Boolean(nullable: false),
EditTime = c.DateTime(nullable: false),
+ Contacts_Id = c.Int(),
+ PersonalInfo_Id = c.Int(),
})
- .PrimaryKey(t => t.Id);
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.ContactInfoes", t => t.Contacts_Id)
+ .ForeignKey("dbo.PersonalInfoes", t => t.PersonalInfo_Id)
+ .Index(t => t.Contacts_Id)
+ .Index(t => t.PersonalInfo_Id);
CreateTable(
"dbo.Orders",
c => new
{
Id = c.Int(nullable: false, identity: true),
- TotalCost = c.Double(nullable: false),
IsActive = c.Boolean(nullable: false),
EditTime = c.DateTime(nullable: false),
Customer_Id = c.Int(),
@@ -127,7 +126,7 @@ public override void Up()
c => new
{
Id = c.Int(nullable: false, identity: true),
- Status = c.String(),
+ Status = c.String(maxLength: 4000),
IsActive = c.Boolean(nullable: false),
EditTime = c.DateTime(nullable: false),
})
@@ -138,9 +137,11 @@ public override void Up()
c => new
{
Id = c.Int(nullable: false, identity: true),
- FirstName = c.String(),
- MiddleName = c.String(),
- LastName = c.String(),
+ FirstName = c.String(maxLength: 25),
+ MiddleName = c.String(maxLength: 25),
+ LastName = c.String(maxLength: 25),
+ IsActive = c.Boolean(nullable: false),
+ EditTime = c.DateTime(nullable: false),
})
.PrimaryKey(t => t.Id);
@@ -150,7 +151,7 @@ public override void Up()
{
Id = c.Int(nullable: false, identity: true),
Type = c.Int(nullable: false),
- Name = c.String(),
+ Name = c.String(maxLength: 120),
IsActive = c.Boolean(nullable: false),
EditTime = c.DateTime(nullable: false),
})
@@ -161,7 +162,7 @@ public override void Up()
c => new
{
Id = c.Int(nullable: false, identity: true),
- Name = c.String(),
+ Name = c.String(maxLength: 50),
IsActive = c.Boolean(nullable: false),
EditTime = c.DateTime(nullable: false),
})
@@ -172,8 +173,8 @@ public override void Up()
c => new
{
Id = c.Int(nullable: false, identity: true),
- Login = c.String(),
- Password = c.String(),
+ Login = c.String(maxLength: 25),
+ Password = c.String(maxLength: 40),
IsActive = c.Boolean(nullable: false),
EditTime = c.DateTime(nullable: false),
PersonalInfo_Id = c.Int(),
@@ -238,8 +239,8 @@ public override void Down()
DropTable("dbo.OrderStatus");
DropTable("dbo.GoodsRows");
DropTable("dbo.Orders");
- DropTable("dbo.ContactInfoes");
DropTable("dbo.Customers");
+ DropTable("dbo.ContactInfoes");
DropTable("dbo.Comments");
DropTable("dbo.Goods");
DropTable("dbo.ProductCategories");
diff --git a/Solution/ContosoProject/Data/Migrations/201511031214147_Init.resx b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.resx
new file mode 100644
index 0000000..c7ae81f
--- /dev/null
+++ b/Solution/ContosoProject/Data/Migrations/201511031214147_Init.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ dbo
+
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.Designer.cs b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.Designer.cs
similarity index 82%
rename from Solution/ContosoProject/Data/Migrations/201511021009598_Second.Designer.cs
rename to Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.Designer.cs
index 918cf7b..8c7d8b9 100644
--- a/Solution/ContosoProject/Data/Migrations/201511021009598_Second.Designer.cs
+++ b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.Designer.cs
@@ -7,13 +7,13 @@ namespace Data.Migrations
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
- public sealed partial class Second : IMigrationMetadata
+ public sealed partial class Vbre : IMigrationMetadata
{
- private readonly ResourceManager Resources = new ResourceManager(typeof(Second));
+ private readonly ResourceManager Resources = new ResourceManager(typeof(Vbre));
string IMigrationMetadata.Id
{
- get { return "201511021009598_Second"; }
+ get { return "201511031420293_Vbre"; }
}
string IMigrationMetadata.Source
diff --git a/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.cs b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.cs
new file mode 100644
index 0000000..3af05be
--- /dev/null
+++ b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.cs
@@ -0,0 +1,20 @@
+namespace Data.Migrations
+{
+ using System;
+ using System.Data.Entity.Migrations;
+
+ public partial class Vbre : DbMigration
+ {
+ public override void Up()
+ {
+ DropColumn("dbo.GoodsRows", "Price");
+ DropColumn("dbo.GoodsRows", "TotalPrice");
+ }
+
+ public override void Down()
+ {
+ AddColumn("dbo.GoodsRows", "TotalPrice", c => c.Double(nullable: false));
+ AddColumn("dbo.GoodsRows", "Price", c => c.Double(nullable: false));
+ }
+ }
+}
diff --git a/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.resx b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.resx
new file mode 100644
index 0000000..e6548ff
--- /dev/null
+++ b/Solution/ContosoProject/Data/Migrations/201511031420293_Vbre.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ dbo
+
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/Data/Migrations/Configuration.cs b/Solution/ContosoProject/Data/Migrations/Configuration.cs
index 1553c67..95c3d30 100644
--- a/Solution/ContosoProject/Data/Migrations/Configuration.cs
+++ b/Solution/ContosoProject/Data/Migrations/Configuration.cs
@@ -1,4 +1,4 @@
-namespace Data.Migrations
+namespace Data.Migrations
{
using Domain.Entities;
using System;
@@ -11,45 +11,68 @@ internal sealed class Configuration : DbMigrationsConfiguration
{
- new Permission{Name = " ", Type = Domain.PermissionType.ListClient},
- new Permission{Name = " ", Type = Domain.PermissionType.NewClient},
- new Permission{Name = " ", Type = Domain.PermissionType.EditClient},
- new Permission{Name = " ", Type = Domain.PermissionType.ListOrder},
- new Permission{Name = " ", Type = Domain.PermissionType.NewOrder},
- new Permission{Name = " ", Type = Domain.PermissionType.EditOrder},
- new Permission{Name = " ", Type = Domain.PermissionType.ListGoods},
- new Permission{Name = " ", Type = Domain.PermissionType.NewGoods},
- new Permission{Name = " ", Type = Domain.PermissionType.EditGoods},
- new Permission{Name = " ", Type = Domain.PermissionType.ListUser},
- new Permission{Name = " ", Type = Domain.PermissionType.NewUser},
- new Permission{Name = " ", Type = Domain.PermissionType.EditUser},
- new Permission{Name = " ", Type = Domain.PermissionType.SaveListClients},
- new Permission{Name = " ", Type = Domain.PermissionType.SaveListOrders},
- new Permission{Name = " ", Type = Domain.PermissionType.SaveListGoods},
- new Permission{Name = " ", Type = Domain.PermissionType.SaveListUsers},
- new Permission{Name = " ", Type = Domain.PermissionType.PrintReportClients},
- new Permission{Name = " ", Type = Domain.PermissionType.PrintReportOrders},
- new Permission{Name = " ", Type = Domain.PermissionType.PrintReportGoods},
- new Permission{Name = " ", Type = Domain.PermissionType.PrintReportUsers},
-
- new Permission{Name = " ", Type = Domain.PermissionType.ListRoles},
- new Permission{Name = " ", Type = Domain.PermissionType.NewRole},
- new Permission{Name = " ", Type = Domain.PermissionType.EditRole}
+ new Permission{Name = "Список клиентов", Type = Domain.PermissionType.ListClient},
+ new Permission{Name = "Добавление клиента", Type = Domain.PermissionType.NewClient},
+ new Permission{Name = "Редактирование клиента", Type = Domain.PermissionType.EditClient},
+ new Permission{Name = "Список заказов", Type = Domain.PermissionType.ListOrder},
+ new Permission{Name = "Новый заказ", Type = Domain.PermissionType.NewOrder},
+ new Permission{Name = "Редактирование заказа", Type = Domain.PermissionType.EditOrder},
+ new Permission{Name = "Список товаров", Type = Domain.PermissionType.ListGoods},
+ new Permission{Name = "Новый товар", Type = Domain.PermissionType.NewGoods},
+ new Permission{Name = "Редактирование товара", Type = Domain.PermissionType.EditGoods},
+ new Permission{Name = "Список пользователей", Type = Domain.PermissionType.ListUser},
+ new Permission{Name = "Новый пользователь", Type = Domain.PermissionType.NewUser},
+ new Permission{Name = "Редактирование пользователя", Type = Domain.PermissionType.EditUser},
+ new Permission{Name = "Сохранить список клиентов", Type = Domain.PermissionType.SaveListClients},
+ new Permission{Name = "Сохранить список заказов", Type = Domain.PermissionType.SaveListOrders},
+ new Permission{Name = "Сохранить список товаров", Type = Domain.PermissionType.SaveListGoods},
+ new Permission{Name = "Сохранить список пользователей", Type = Domain.PermissionType.SaveListUsers},
+ new Permission{Name = "Печатать отчет по клиентам", Type = Domain.PermissionType.PrintReportClients},
+ new Permission{Name = "Печатать отчет по заказам", Type = Domain.PermissionType.PrintReportOrders},
+ new Permission{Name = "Печатать отчет по товарам", Type = Domain.PermissionType.PrintReportGoods},
+ new Permission{Name = "Печатать отчет по пользователям", Type = Domain.PermissionType.PrintReportUsers},
+
+ new Permission{Name = "Список ролей", Type = Domain.PermissionType.ListRoles},
+ new Permission{Name = "Добавление роли", Type = Domain.PermissionType.NewRole},
+ new Permission{Name = "Редактирование роли", Type = Domain.PermissionType.EditRole},
+ new Permission{Name = "Редактирование категории товаров", Type = Domain.PermissionType.EditProductCategory}
+ };
+
+ var role = new Role { Name = "Администратор", Permissions = permissions };
+ if (context.Roles.Count() == 0)
+ {
+ context.Roles.AddOrUpdate(x => x.Name, new Role[] { role });
+ }
+
+ var info = new PersonalInfo { FirstName = "Админ", LastName = "Админов", MiddleName = "Администраторович" };
+ context.PersonalInfoes.AddOrUpdate(info);
+ var admin = new User { Login = "admin", Password = "21232f297a57a5a743894a0e4a801fc3", Role = role, PersonalInfo = info };
+
+ if (context.Users.Count() == 0)
+ {
+ context.Users.AddOrUpdate(x => x.Login, new User[] { admin });
+ }
+
+ var statuses = new List()
+ {
+ new OrderStatus() { Status = "Открыт"},
+ new OrderStatus() { Status = "Оплачен"},
+ new OrderStatus() { Status = "Готов"},
+ new OrderStatus() { Status = "Отгружен"},
+ new OrderStatus() { Status = "Закрыт"},
};
-
- var role = new Role { Name = "Administrator", Permissions = permissions };
- context.Roles.AddOrUpdate(x => x.Name, new Role[]{role});
- var info = new PersonalInfo { FirstName = "admin", LastName = "admin", MiddleName = "admin" };
- var admin = new User { Login = "admin", Password = "admin", Role = role, PersonalInfo = info };
- context.Users.AddOrUpdate(x => x.Login, new User[]{admin});
+ if (context.OrderStatus.Count() == 0)
+ {
+ context.OrderStatus.AddRange(statuses);
+ }
context.SaveChanges();
}
}
diff --git a/Solution/ContosoProject/Data/Properties/DataSources/Domain.Entities.Order.datasource b/Solution/ContosoProject/Data/Properties/DataSources/Domain.Entities.Order.datasource
new file mode 100644
index 0000000..683a1a2
--- /dev/null
+++ b/Solution/ContosoProject/Data/Properties/DataSources/Domain.Entities.Order.datasource
@@ -0,0 +1,10 @@
+
+
+
+ Domain.Entities.Order, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/Data/packages.config b/Solution/ContosoProject/Data/packages.config
index 9e8db31..4e57f9f 100644
--- a/Solution/ContosoProject/Data/packages.config
+++ b/Solution/ContosoProject/Data/packages.config
@@ -1,4 +1,6 @@
+
+
\ No newline at end of file
diff --git a/Solution/ContosoProject/DataBases/README.md b/Solution/ContosoProject/DataBases/README.md
deleted file mode 100644
index bc55f44..0000000
--- a/Solution/ContosoProject/DataBases/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# CS1_Project
-practic project for cs1 group
diff --git a/Solution/ContosoProject/Domain/DAO/IDAO/IOrderRepository.cs b/Solution/ContosoProject/Domain/DAO/IDAO/IOrderRepository.cs
index 8a559b7..7088f64 100644
--- a/Solution/ContosoProject/Domain/DAO/IDAO/IOrderRepository.cs
+++ b/Solution/ContosoProject/Domain/DAO/IDAO/IOrderRepository.cs
@@ -10,5 +10,6 @@ namespace Domain.DAO
{
public interface IOrderRepository : IRepository
{
+ ICollection GetOrderByStatus(OrderStatus status);
}
}
diff --git a/Solution/ContosoProject/Domain/DAO/IDAO/IOrderStstusRepository.cs b/Solution/ContosoProject/Domain/DAO/IDAO/IOrderStatusRepository.cs
similarity index 71%
rename from Solution/ContosoProject/Domain/DAO/IDAO/IOrderStstusRepository.cs
rename to Solution/ContosoProject/Domain/DAO/IDAO/IOrderStatusRepository.cs
index 3e6d43c..06247ca 100644
--- a/Solution/ContosoProject/Domain/DAO/IDAO/IOrderStstusRepository.cs
+++ b/Solution/ContosoProject/Domain/DAO/IDAO/IOrderStatusRepository.cs
@@ -7,7 +7,8 @@
namespace Domain.DAO
{
- public interface IOrderStstusRepository : IRepository
+ public interface IOrderStatusRepository : IRepository
{
+
}
}
diff --git a/Solution/ContosoProject/Domain/DAO/IDAO/IProductCategoryRepository.cs b/Solution/ContosoProject/Domain/DAO/IDAO/IProductCategoryRepository.cs
index 867c8e4..0fd7eda 100644
--- a/Solution/ContosoProject/Domain/DAO/IDAO/IProductCategoryRepository.cs
+++ b/Solution/ContosoProject/Domain/DAO/IDAO/IProductCategoryRepository.cs
@@ -9,5 +9,6 @@ namespace Domain.DAO
{
public interface IProductCategoryRepository : IRepository
{
+ void AddOrUpdate(ProductCategory entity);
}
}
diff --git a/Solution/ContosoProject/Domain/DAO/IDAO/IRoleRepository.cs b/Solution/ContosoProject/Domain/DAO/IDAO/IRoleRepository.cs
index c27f7e4..0b303fd 100644
--- a/Solution/ContosoProject/Domain/DAO/IDAO/IRoleRepository.cs
+++ b/Solution/ContosoProject/Domain/DAO/IDAO/IRoleRepository.cs
@@ -10,5 +10,6 @@ namespace Domain.DAO
{
public interface IRoleRepository : IRepository
{
+ void AddOrUpdate(Role role);
}
}
diff --git a/Solution/ContosoProject/Domain/Domain.csproj b/Solution/ContosoProject/Domain/Domain.csproj
index d44eded..f14daa4 100644
--- a/Solution/ContosoProject/Domain/Domain.csproj
+++ b/Solution/ContosoProject/Domain/Domain.csproj
@@ -31,6 +31,7 @@
+
@@ -45,7 +46,7 @@
-
+
diff --git a/Solution/ContosoProject/Domain/Entities/BaseEntity.cs b/Solution/ContosoProject/Domain/Entities/BaseEntity.cs
index 14f9385..1b148b9 100644
--- a/Solution/ContosoProject/Domain/Entities/BaseEntity.cs
+++ b/Solution/ContosoProject/Domain/Entities/BaseEntity.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -8,6 +9,7 @@ namespace Domain.Entities
{
public abstract class BaseEntity
{
+ [Key]
public int Id { get; set; }
public bool IsActive { get; set; }
public DateTime EditTime { get; set; }
diff --git a/Solution/ContosoProject/Domain/Entities/Comment.cs b/Solution/ContosoProject/Domain/Entities/Comment.cs
index 99cbd5b..430d8f1 100644
--- a/Solution/ContosoProject/Domain/Entities/Comment.cs
+++ b/Solution/ContosoProject/Domain/Entities/Comment.cs
@@ -3,15 +3,18 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
namespace Domain.Entities
{
- public class Comment:BaseEntity
+ public class Comment : BaseEntity
{
-
- public string Message { get; set; }
-
- public CommentType Type { get; set; }
-
+ [MaxLength(2000)]
+ public string Message { get; set; }
+ public CommentType Type { get; set; }
+ public override string ToString()
+ {
+ return Message;
+ }
}
}
diff --git a/Solution/ContosoProject/Domain/Entities/ContactInfo.cs b/Solution/ContosoProject/Domain/Entities/ContactInfo.cs
index c394f16..443a5e9 100644
--- a/Solution/ContosoProject/Domain/Entities/ContactInfo.cs
+++ b/Solution/ContosoProject/Domain/Entities/ContactInfo.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -8,9 +9,16 @@ namespace Domain.Entities
{
public class ContactInfo: BaseEntity
{
+ [MinLength(3), MaxLength(25)]
public string City { get; set; }
+
+ [MinLength(3), MaxLength(100)]
public string Adress { get; set; }
+
+ [MinLength(3), MaxLength(15)]
public string Telephone { get; set; }
+
+ [MinLength(3), MaxLength(40)]
public string Email { get; set; }
}
}
diff --git a/Solution/ContosoProject/Domain/Entities/Customer.cs b/Solution/ContosoProject/Domain/Entities/Customer.cs
index 11adb69..6fd639d 100644
--- a/Solution/ContosoProject/Domain/Entities/Customer.cs
+++ b/Solution/ContosoProject/Domain/Entities/Customer.cs
@@ -3,15 +3,20 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
namespace Domain.Entities
{
public class Customer : BaseEntity
{
public PersonalInfo PersonalInfo { get; set; }
+
public ContactInfo Contacts { get; set; }
- public List Orders { get; set; }
- public List Comments { get; set; }
+
+ public virtual ICollection Orders { get; set; }
+
+ public virtual ICollection Comments { get; set; }
+
public Customer()
{
Orders = new List();
@@ -19,5 +24,10 @@ public Customer()
PersonalInfo = new PersonalInfo();
Contacts = new ContactInfo();
}
+
+ public override string ToString()
+ {
+ return String.Format("{0} {1} {2}", PersonalInfo.LastName, PersonalInfo.FirstName, PersonalInfo.MiddleName);
+ }
}
}
diff --git a/Solution/ContosoProject/Domain/Entities/Goods.cs b/Solution/ContosoProject/Domain/Entities/Goods.cs
index 09ac624..82dc52b 100644
--- a/Solution/ContosoProject/Domain/Entities/Goods.cs
+++ b/Solution/ContosoProject/Domain/Entities/Goods.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -8,17 +9,32 @@ namespace Domain.Entities
{
public class Goods: BaseEntity
{
+ [Required]
+ [MaxLength(255)]
public string Name { get; set; }
+
+ [Required]
+ [MaxLength(50)]
public string SKU { get; set; }
+
+ [Required]
public double Price { get; set; }
+
public int Count { get; set; }
+
public ProductCategory Category { get; set; }
- public List Coments { get; set; }
+
+ public virtual ICollection Coments { get; set; }
+
public Goods()
{
Coments = new List();
Category = new ProductCategory();
}
+ public override string ToString()
+ {
+ return Name + " " + Category.CategoryName;
+ }
}
}
diff --git a/Solution/ContosoProject/Domain/Entities/GoodsRow.cs b/Solution/ContosoProject/Domain/Entities/GoodsRow.cs
index 9f694ab..b16abed 100644
--- a/Solution/ContosoProject/Domain/Entities/GoodsRow.cs
+++ b/Solution/ContosoProject/Domain/Entities/GoodsRow.cs
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -11,21 +13,23 @@ public class GoodsRow : BaseEntity
public Goods Goods { get; set; }
public int Count { get; set; }
public double Price { get; set; }
- double totalPrise;
+
public double TotalPrice
{
get
{
- return totalPrise;
- }
- set
- {
- totalPrise = Price * Count;
+ return Goods.Price * Count;
}
}
- public GoodsRow() { Goods = new Goods(); }
-
+ public GoodsRow()
+ {
+ Goods = new Goods();
+ }
+ public override string ToString()
+ {
+ return Goods.ToString() + " " + Convert.ToString(Count) + " " + Convert.ToString(TotalPrice);
+ }
}
}
diff --git a/Solution/ContosoProject/Domain/Entities/Order.cs b/Solution/ContosoProject/Domain/Entities/Order.cs
index 16e0206..85cdf98 100644
--- a/Solution/ContosoProject/Domain/Entities/Order.cs
+++ b/Solution/ContosoProject/Domain/Entities/Order.cs
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -9,10 +11,31 @@ namespace Domain.Entities
public class Order : BaseEntity
{
public Customer Customer { get; set; }
- public List GoodsList { get; set; }
- public double TotalCost { get; set; }
+
+ public virtual ICollection GoodsList { get; set; }
+
+ [NotMapped]
+ public double TotalCost
+ {
+ get
+ {
+ double result = 0;
+
+ foreach (GoodsRow row in GoodsList)
+ {
+ if (row.IsActive)
+ {
+ result += row.TotalPrice;
+ }
+ }
+
+ return result;
+ }
+ }
+
public OrderStatus Status { get; set; }
- public List Comments { get; set; }
+
+ public virtual ICollection Comments { get; set; }
public Order()
{
diff --git a/Solution/ContosoProject/Domain/Entities/OrderStatus.cs b/Solution/ContosoProject/Domain/Entities/OrderStatus.cs
index d9c1a94..9d878ee 100644
--- a/Solution/ContosoProject/Domain/Entities/OrderStatus.cs
+++ b/Solution/ContosoProject/Domain/Entities/OrderStatus.cs
@@ -1,13 +1,23 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Domain.Entities
{
- public class OrderStatus:BaseEntity
+ public class OrderStatus : BaseEntity
{
public string Status { get; set; }
+
+ public OrderStatus()
+ {
+ }
+
+ public override string ToString()
+ {
+ return Status;
+ }
}
}
diff --git a/Solution/ContosoProject/Domain/Entities/Permission.cs b/Solution/ContosoProject/Domain/Entities/Permission.cs
index 10f3d4a..8930fc8 100644
--- a/Solution/ContosoProject/Domain/Entities/Permission.cs
+++ b/Solution/ContosoProject/Domain/Entities/Permission.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -9,6 +10,8 @@ namespace Domain.Entities
public class Permission : BaseEntity
{
public PermissionType Type { get; set; }
+
+ [MinLength(3), MaxLength(120)]
public string Name { get; set; }
public virtual ICollection Roles { get; set; }
diff --git a/Solution/ContosoProject/Domain/Entities/PersonalInfo.cs b/Solution/ContosoProject/Domain/Entities/PersonalInfo.cs
index 0bd7e42..aa8bed8 100644
--- a/Solution/ContosoProject/Domain/Entities/PersonalInfo.cs
+++ b/Solution/ContosoProject/Domain/Entities/PersonalInfo.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -8,8 +9,18 @@ namespace Domain.Entities
{
public class PersonalInfo : BaseEntity
{
+ [MinLength(2), MaxLength(25)]
public string FirstName { get; set; }
+
+ [MinLength(2), MaxLength(25)]
public string MiddleName { get; set; }
+
+ [MinLength(2), MaxLength(25)]
public string LastName { get; set; }
+
+ public override string ToString()
+ {
+ return LastName + " " + FirstName + " " + MiddleName;
+ }
}
}
diff --git a/Solution/ContosoProject/Domain/Entities/ProductCategory.cs b/Solution/ContosoProject/Domain/Entities/ProductCategory.cs
index 59d29cb..f2fb585 100644
--- a/Solution/ContosoProject/Domain/Entities/ProductCategory.cs
+++ b/Solution/ContosoProject/Domain/Entities/ProductCategory.cs
@@ -1,18 +1,28 @@
-using System;
+using Domain.DAO;
+using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Domain.Entities
{
- public class ProductCategory: BaseEntity
+ public class ProductCategory : BaseEntity
{
+ [MinLength(2), MaxLength(50)]
public string CategoryName { get; set; }
- public List Goods { get; set; }
+
+ public virtual ICollection Goods { get; set; }
+
public ProductCategory()
{
Goods = new List();
}
+
+ public override string ToString()
+ {
+ return CategoryName;
+ }
}
}
diff --git a/Solution/ContosoProject/Domain/Entities/Role.cs b/Solution/ContosoProject/Domain/Entities/Role.cs
index f1fe6e2..eef4b40 100644
--- a/Solution/ContosoProject/Domain/Entities/Role.cs
+++ b/Solution/ContosoProject/Domain/Entities/Role.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -8,14 +9,17 @@ namespace Domain.Entities
{
public class Role : BaseEntity
- {
- public virtual ICollection Permissions { get; set; }
+ {
+ [MinLength(2), MaxLength(50)]
public string Name { get; set; }
+ public virtual ICollection Permissions { get; set; }
+
public Role()
{
Permissions = new List();
}
+
public override string ToString()
{
return this.Name;
diff --git a/Solution/ContosoProject/Domain/Entities/User.cs b/Solution/ContosoProject/Domain/Entities/User.cs
index cd15d34..8954107 100644
--- a/Solution/ContosoProject/Domain/Entities/User.cs
+++ b/Solution/ContosoProject/Domain/Entities/User.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -9,8 +10,13 @@ namespace Domain.Entities
public class User : BaseEntity
{
public PersonalInfo PersonalInfo { get; set; }
+
public Role Role { get; set; }
+
+ [MinLength(3), MaxLength(25)]
public string Login { get; set; }
+
+ [MinLength(5), MaxLength(40)]
public string Password { get; set; }
public User()
diff --git a/Solution/ContosoProject/Domain/PermissionType.cs b/Solution/ContosoProject/Domain/PermissionType.cs
index 6b6ee2a..098e7c3 100644
--- a/Solution/ContosoProject/Domain/PermissionType.cs
+++ b/Solution/ContosoProject/Domain/PermissionType.cs
@@ -38,6 +38,8 @@ public enum PermissionType
PrintReportGoods = 22,
PrintReportUsers = 23,
+ EditProductCategory = 24,
+
None = 0
}
}