diff --git a/EgtBEAMWALL.DataLayer/Controllers/MachGroupController.cs b/EgtBEAMWALL.DataLayer/Controllers/MachGroupController.cs index 2378b639..b90aff24 100644 --- a/EgtBEAMWALL.DataLayer/Controllers/MachGroupController.cs +++ b/EgtBEAMWALL.DataLayer/Controllers/MachGroupController.cs @@ -90,7 +90,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers { answ = new MachGroupModel() { - Assign = "", + SupervisorId = "", Name = coreMachGroup.Name, Locked = true, MachGroupId = coreMachGroup.Id, @@ -120,7 +120,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers { answ = new MachGroupModel() { - Assign = "", + SupervisorId = "", Name = coreMachGroup.Name, Locked = true, MachGroupId = coreMachGroup.Id, @@ -194,21 +194,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers .SingleOrDefault(); } - /// - /// Get filtered data by Assign (ASC ordered) - /// - /// - /// - public List GetByAssign(string Assign) - { - return dbCtx - .MachGroupList - .Where(x => x.Assign == Assign) - .OrderBy(x => x.Order) - .ThenBy(x => x.MachGroupId) - .ToList(); - } - /// /// Get filtered data by ProdId (ASC ordered) /// @@ -216,6 +201,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers /// public List GetByProdAsc(int ProdId) { + // verificare fattibilità in 1 solo passo // recupero int ProdDbId = 0; try @@ -250,6 +236,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers { // recupero int ProdDbId = 0; + + // verificare fattibilità in 1 solo passo try { var currProd = dbCtx @@ -273,6 +261,22 @@ namespace EgtBEAMWALL.DataLayer.Controllers .ToList(); } + /// + /// Get filtered data by Assign (ASC ordered) + /// + /// + /// + /// + public List GetByProdSupervisor(int ProdId, string SupervisorId) + { + return dbCtx + .MachGroupList + .Where(x => x.Prod.ProdId == ProdId && x.SupervisorId == SupervisorId) + .OrderBy(x => x.Order) + .ThenBy(x => x.MachGroupId) + .ToList(); + } + /// /// Update single MachGroup /// @@ -305,38 +309,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers return done; } - /// - /// Set Status for MachGroup - /// - /// - /// - /// - public bool UpdateAssign(int MachGroupId, string newAssign) - { - bool done = false; - try - { - // aggiorno - var currRecord = dbCtx - .MachGroupList - .Where(x => x.MachGroupId == MachGroupId) - .FirstOrDefault(); - - currRecord.Assign = newAssign; - currRecord.State = Core.ItemState.Assigned; - - // Commit changes - dbCtx.SaveChanges(); - done = true; - } - catch (Exception exc) - { - Console.WriteLine($"EXCEPTION on UpdateAssign: {exc}"); - } - - return done; - } - /// /// Set Status for MachGroup /// @@ -366,6 +338,39 @@ namespace EgtBEAMWALL.DataLayer.Controllers return done; } + /// + /// Set Supervisor & state for MachGroup + /// + /// + /// + /// + /// + public bool UpdateSupervisor(int ProdId, int MachGroupId, string SupervisorId) + { + bool done = false; + try + { + // aggiorno + var currRecord = dbCtx + .MachGroupList + .Where(x => x.Prod.ProdId == ProdId && x.MachGroupId == MachGroupId) + .FirstOrDefault(); + + currRecord.SupervisorId = SupervisorId; + currRecord.State = Core.ItemState.Assigned; + + // Commit changes + dbCtx.SaveChanges(); + done = true; + } + catch (Exception exc) + { + Console.WriteLine($"EXCEPTION on UpdateAssign: {exc}"); + } + + return done; + } + #endregion Public Methods } } \ No newline at end of file diff --git a/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs b/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs index 4f1cf6dd..8d95dcc1 100644 --- a/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs +++ b/EgtBEAMWALL.DataLayer/Controllers/ProdController.cs @@ -173,6 +173,11 @@ namespace EgtBEAMWALL.DataLayer.Controllers .ToList(); } + protected List ProjIdByProd(int ProdId) + { + return DbManager.obj.ProjCtr.GetByProdAsc(ProdId).Select(y => y.ProjId).ToList(); + } + #endregion Protected Methods #region Public Methods @@ -267,6 +272,18 @@ namespace EgtBEAMWALL.DataLayer.Controllers .SingleOrDefault(); } + /// + /// Get record by ProdId ass Core.ProdFileM + /// + /// + /// + public Core.ProdFileM FindCoreByProdId(int ProdId) + { + var currProd = FindByProdId(ProdId); + + return Core.ProdFileM.CreateProdFileM(currProd.ProdId, ProjIdByProd(ProdId), currProd.DtCreated, currProd.Description); + } + /// /// Elenco progetti /// @@ -275,12 +292,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers public List GetLastDesc(int numRecord) { List result = new List(); - var dbResult = GetLastDbModelDesc(numRecord); - // conversione - result = dbResult.Select(x => Core.ProdFileM.CreateProdFileM(x.ProdId, DbManager.obj.ProjCtr.GetByProdAsc(x.ProdId).Select(y => y.ProjId).ToList(), x.DtCreated, x.Description)).ToList(); - + result = dbResult.Select(x => Core.ProdFileM.CreateProdFileM(x.ProdId, ProjIdByProd(x.ProdId), x.DtCreated, x.Description)).ToList(); return result; } @@ -314,7 +328,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers // creo nuovo PROD... var newProd = dbCtx .ProdList - .Add(new ProdModel() { ProdId = nextId, Locked = true }); + .Add(new ProdModel() { ProdId = nextId, Locked = true, DtCreated = DateTime.Now }); // cerco Proj var currProj = dbCtx diff --git a/EgtBEAMWALL.DataLayer/DatabaseModels/MachGroupModel.cs b/EgtBEAMWALL.DataLayer/DatabaseModels/MachGroupModel.cs index f85d7b19..da65ce6a 100644 --- a/EgtBEAMWALL.DataLayer/DatabaseModels/MachGroupModel.cs +++ b/EgtBEAMWALL.DataLayer/DatabaseModels/MachGroupModel.cs @@ -15,9 +15,6 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels { #region Public Properties - [Column("Assign")] - public string Assign { get; set; } = ""; - /// /// Data End /// @@ -75,6 +72,9 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels [Column("State")] public Core.ItemState State { get; set; } = Core.ItemState.ND; + [Column("SupervisorId")] + public string SupervisorId { get; set; } = ""; + [Column("W")] public double W { get; set; } = 0; diff --git a/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj b/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj index 567d4cf2..3828ba4f 100644 --- a/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj +++ b/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj @@ -92,9 +92,9 @@ - - - 202104150626082_FullDbInit.cs + + + 202104150749157_FullDbInit.cs @@ -110,8 +110,8 @@ - - 202104150626082_FullDbInit.cs + + 202104150749157_FullDbInit.cs diff --git a/EgtBEAMWALL.DataLayer/Migrations/202104150626082_FullDbInit.Designer.cs b/EgtBEAMWALL.DataLayer/Migrations/202104150749157_FullDbInit.Designer.cs similarity index 93% rename from EgtBEAMWALL.DataLayer/Migrations/202104150626082_FullDbInit.Designer.cs rename to EgtBEAMWALL.DataLayer/Migrations/202104150749157_FullDbInit.Designer.cs index 82ec6298..a4854a6c 100644 --- a/EgtBEAMWALL.DataLayer/Migrations/202104150626082_FullDbInit.Designer.cs +++ b/EgtBEAMWALL.DataLayer/Migrations/202104150749157_FullDbInit.Designer.cs @@ -13,7 +13,7 @@ namespace EgtBEAMWALL.DataLayer.Migrations string IMigrationMetadata.Id { - get { return "202104150626082_FullDbInit"; } + get { return "202104150749157_FullDbInit"; } } string IMigrationMetadata.Source diff --git a/EgtBEAMWALL.DataLayer/Migrations/202104150626082_FullDbInit.cs b/EgtBEAMWALL.DataLayer/Migrations/202104150749157_FullDbInit.cs similarity index 99% rename from EgtBEAMWALL.DataLayer/Migrations/202104150626082_FullDbInit.cs rename to EgtBEAMWALL.DataLayer/Migrations/202104150749157_FullDbInit.cs index 25111701..89e48508 100644 --- a/EgtBEAMWALL.DataLayer/Migrations/202104150626082_FullDbInit.cs +++ b/EgtBEAMWALL.DataLayer/Migrations/202104150749157_FullDbInit.cs @@ -93,7 +93,6 @@ c => new { DbId = c.Int(nullable: false, identity: true), - Assign = c.String(unicode: false), DtEnd = c.DateTime(nullable: false, precision: 0), DtStart = c.DateTime(nullable: false, precision: 0), H = c.Double(nullable: false), @@ -106,6 +105,7 @@ Order = c.Int(nullable: false), ProdDbId = c.Int(nullable: false), State = c.Int(nullable: false), + SupervisorId = c.String(unicode: false), W = c.Double(nullable: false), }) .PrimaryKey(t => t.DbId) diff --git a/EgtBEAMWALL.DataLayer/Migrations/202104150626082_FullDbInit.resx b/EgtBEAMWALL.DataLayer/Migrations/202104150749157_FullDbInit.resx similarity index 59% rename from EgtBEAMWALL.DataLayer/Migrations/202104150626082_FullDbInit.resx rename to EgtBEAMWALL.DataLayer/Migrations/202104150749157_FullDbInit.resx index aa622e55..fa14e19d 100644 --- a/EgtBEAMWALL.DataLayer/Migrations/202104150626082_FullDbInit.resx +++ b/EgtBEAMWALL.DataLayer/Migrations/202104150749157_FullDbInit.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - H4sIAAAAAAAEAO1dX2/juBF/L9DvIOix2LOT3R7QBs4dsnaya9ROgjh727cFIzFe3emPK1FpgqKfrA/9SP0Kpf6TIkWRFG0re4u7hzVF/kgOZ4bDIWfyv//8d/bzc+BbTzBOvCg8t08nJ7YFQydyvXB7bqfo8Ye/2D//9Mc/zC7d4Nn6par3LquHW4bJuf0Vod3ZdJo4X2EAkkngOXGURI9o4kTBFLjR9O3JyV+np6dTiCFsjGVZs7s0RF4A8x/45zwKHbhDKfDXkQv9pCzHXzY5qnUNApjsgAPP7csten95sf58sVpNFgCBFXiBsW1d+B7Ag9lA/9G2QBhGCCA81LNPCdygOAq3mx0uAP79yw7ieo/AT2A5hbOmuuxsTt5ms5k2DSsoJ01QFCgCnr4ryTNtN9cisl2TDxPwEhMavWSzzol4br+/X92CGOWEtq12h2dzP84qd9A5/9cDSGCxThMS7I3FbfKm5pq3k7eTU/z/G2ue+iiN4XkIUxQD3PI2ffA952/w5T76DYbnYer75CzwPPA3qgAX3cbRDsbo5Q4+0nNbPCxd25rSANM2Qt2e17igwTJE797a1jUeDnjwYc02BL02KIrhBxjCGCDo3gKEYIxXfenCnPDMMFqdzi9W8y8bjAX7+uzBub4fBrC4qdq/jyIfglAZ4WMFsIjwakLl9quB7deYiDGW8AoGiz1WYra1Bs8rGG7R16zKs21dec/QrUpK5E+hh3UeboTitLej64v13vvIOLGfD3swFtcDAeLoVxlxEKN8Vl3Xa/DkbXPp4owHOsi27qCff0++ertC51Oa6Etd8SqOgrvIb6m96vuXTZTGTiZ5kaDSPYi3ENGjnE0bvSrUthmIGVVbI41AzzaMoapkZVnKnIbFa3rl+TD7sXepXaB5DLNR1iyPf9x7gboyW6DL510Um4BaJtfwn0OV+8pL0EFIuIqc35pJ6w4X/3Q5bNav7pSVnUhZuVxNVQvyl6JKo6PoL4x2an0eqpdcY3rJHZFecrX1Eo9h9qiXFjBxYm9XWPmvRi+ZUSbGZFxNXKWlYxVt18D56oXQjIy08EYgKXhEeoJSNzzYCSl0Drd/H1QmL58wBcZkKeQDyjDqyWf7FVGqfCLLeb7hlr0Rcw2TBGz3zyCbgSeqX4CfQqXzkIrO2qS7jBOM6SwS77vOUtnbDcn2Cj5BnxLGZlXKb6oieSBBqYxT7tCrj2YYP9MyH+Io3ZnhexpuBGxfD0iP+VvNDyUCF0nibQ+yi4YmTtsbBOLh8npsF6gZwxoL6h18GrbR1Vw31Ht4OK/uIQzMm9jNLqsGOmWlTqo9hgx55ZCr5yWCQVl6TAcv32dCK2XGccL5zHhPeHWGuVCM3aKN6QpN//7s8Jdn3Td2h7l0G9fm8+Hudu/669gbnMiYGcs+8nu5Hby7GXjlPM49qFQqfNd9fTlY1yK89+2PrAOfqcHbgESDq/m/Z3hEPd4A68+CITZ11HbJNCD2SMJ3tEyufLBtnt7I7ZlzvEE0Hih6f8y+NVvj6eQk+09yZ8Tyhi0x/wXLJ8nC9DKsYfAA44ZbCydb7sM5t0+YVaOq452BqHwqrny9qGv+cMoSuiCpgMyMV2AAsVtYxyT5UprYhyd0JRRGKF2AHZW7U6xmnrwkimVpvoqAW7+zOAz1ie1hANlrlGPSu3CPyKuTeRQ+enEgr1I+L2/rqqxxRFXNjkKpQ0C/E9ffODHY7Yj6fza87Jg4kePl69h+RlMc/ejOsKq1xBfojYVBvMdZ45X1dngt8TZ2bv+JmUMnLMe3SVyn07Ankwm7UPi0BePsiAN8vK4J5isvROzRzAsdbwd84SBarZRuxTPy1720vyzgDobZOUxI2qHd1720zpp9FJpNCR4Rsw73YVjXSotfiTXrTT+ileck4QMzGTY9bZN8dhMuoA8RtC6c4sHxHCQOcFmLF4uaa4APRVOQZAfu2zElbhSt09BBHIAnee6sLpYR+rYajmnfgsjzpMgxJqPijs+SghkcTD8KlukVKEn2YNu5F3afcgle0dGN3adjScVrcK/tGorMUgqCENR23C5KGxjEQVmqcUb0Lz3HM2GMrViPhrT+3AdrMcORWVfhZbAmezE0NzIQ4yxWOJxwG4Rb1IeL6iolK4fPiHMS/IQ/FofBpPSutlklw91ARItO9uLZthovF1cBMVxHQ2VmRgcOYeH1g7jdIK4cSPMCsQOKefLYD1i5iToB6fdIPYA1Q3XgtQW0j2rdS9i9fgTn0YtIXjsSlfgvutui0Hs+rcdOcgwjUb3nURrG5cFQwoVrSkyfH1jDEqH/nCV/0iJmQkmjgCbCk5UEgTUow72UZgnTa+xLm/vENFrSIiCMyLzfD8dwbkk4MiO2OCVtTnICMlzSbWPKsdwgahCXMiJ6dJhL0gaTPk1YA0mW4wR0qW6K6o27/jabFtHdZcFs2hEGPluD3c4Lt0RYeFlibYqY8PkPG/VI6aDAmDoJJ2C6Hm3dE4pisIWtr5lj1oVXXpygyhCxrbkbMNXaZkrH5lX1xloi7PpVu1rVJvt3eR3CfXRCWS6siVfCXOFZBpmVmL/NYKWio7mVheoDH8SiJxrzyE+DsLTbuGZjNxD5ZoPEmQPfKYsVwLJoaQolK5BvnwVLU5O5UWn9kW78UaXtim67UmnbPIEgIZpSeaT8jQMJkhfIt6/eL5AQauyQv14gm+cFCu1rByAF0ukW7Eb6TEN85rWdTVvSxZyWGHFmHGW0hpDSH7WtM1x5NMcVdc0haLv/5aHCf0kw6oOC6DehdJQGaIpVsJrQHRqsKZdHK0PzKJkqihTUSx3mS2mZulQBqXyKTOHgMkUhdblc0OEqFfOTnMI5nqi65kTVHSCqXW33v0hU9B0lD+SH44iqEeEyJBKjZuSWo2k4O7cdU+pM3YvQvWBbA4YrGb9K2Zzkh2NKSRmr1tqBisJjbWbEw0ESjChWsXvrMFTa8K2LFbCq+DkKqSqUx9m0zNeNkvVahpGSAGXRmPQA6R82ogcof7KWHhAj7FUPmJKz8oUntYkURYfn4spNRMLwnzQXnHQUTqQdV8MZsXURoc6HfQAiPUZcuQ1hxio6k8SoypRYOmS1fagoFmX0C41SFo7fqWLCqKsCLmmMokxtm6tDLvU9Kwa9RIzJo2rrlOGSJERZdIxDJMf7qOx5HLO3yJyreYifWcPJbMbD3OmqFr6l6cYz6rEek6rNAw1JjLxg/KpasH/2vGYRYX73qVMBgWT7vOB3pl+Z6852lbr3+tqzdb05K68a+1NhM3ePRRXbwkR58tzs3nH9svmHn2vmSf7Pue/l542qxhqE3iNMUBHMYv84+bGVSns8aa2nSeL6nKtaIkCo+45SLvhdL/CdjEX2MuL2hrWrJndudgyiF/0M0TrNm/zQD1GknneoDhx3BwaOa7Zvh3/7Ubgt3gs2QIrR3boQLWbRD9vWat7Kv5tjME8ml6ELn8/tf+WNzqzl379U7d5YuQF+Zp1Y/9YP0pZaRI0cyxoi33WnqJ7KeC+iz8lerMt3TBJQF/9AeaaJ2xg6XvGXHU4MJCA0BEzlGtXSOu2sxbqkKw70AwbSHDeVxc4ViZ1pfaORP1hP5gyl6d2LzHGygI5N5gyIxlCW3gtbCa/qXrcNx6ax1WYqk/xJJaoc+47AJKjVMYGYrLS6xGvl0tSF2Qwy6KiMsmbtKuF92asWxv2wPZWtVYszzTAUHd1mUDuLLq5eNT/QyUoHKNPQvHFNJYczhHrs0/hg44NOUaoja8NO4cbcCQbMASqnqKZPYC+HE/UkcDqj35dT4Rv0I3LyZcquNdF0yFnUiCfz9ehZIiWnrnQfW1VzM27Kcg3VeAjffHffEjdq+s1HomyH5Peq4t21k29xwqh1M4Tp5vHqfJ4v7yqztHJ3vYZUNEr5uhSX0GiqIn7s+YA0YcPSwh0n+da3lm1LUcPsiaHauS6k89S8Xh3V+6p2dIpKPmeWln7o27y4gPvWNsqiby5N0TeY9kpbzEfJGxoSfGDuGEvOKjZnRHsluRmpysVj8hnRn4s3YNhCf4jw8he2uSijCSfd1K9dPRHfeN3cduXW4fThCvpwxX3w89RwElTRCa14GaroGrz+mkoyPdIZr3g90jU6eiwr9fbY1hJMh+0KvP7EiV2YpRMwYg8XdrLgAdJu0ezWinVmNQH3hMFNacCYdWNJsKU4cIHB0pUEZvjU95JBa8hq8wWKF7U1fPLG02RprVqX4cCNyDA5aYPZsLRXbU+TV0h5xb71xtZGGma+5+LXAuZ/KKCCmGHMEDqUnVHXWYaPUWX1tEZUVWFunBFwsRFyESPvETgIf3ZgkuR/tahM2X8ZPEB3Gd6kaJciPGUYPPjUX+bKzCZR/3leL3rMs5v89UpiYgp4mF7mrr8J36ee3/xRgiuOP7IDIrPHymuWbC1Rdt2yfamRrqP25t8FVJKvNiPvYbDzMVhyE27AE9QZ26cEruAWOC+35Yv9bpD+haDJPlt4YBuDICkxmvb4J+ZhN3j+6f9XngQcI4wAAA== + H4sIAAAAAAAEAO1dX2/juBF/L9DvIOix2LOT3R7QBs4dsnaya5ydBHH2tm8LRmK8utMfV6LSBEU/WR/6kfoVSv0nRYoiKcp2tou7hzVF/kgOZ4bDIWfy33//Z/bzc+BbTzBOvCg8t08nJ7YFQydyvXB7bqfo8Ye/2D//9Mc/zC7d4Nn6tar3LquHW4bJuf0Vod3ZdJo4X2EAkkngOXGURI9o4kTBFLjR9O3JyV+np6dTiCFsjGVZs7s0RF4A8x/45zwKHbhDKfDXkQv9pCzHXzY5qnUNApjsgAPP7csten95sf58sVpNFgCBFXiBsW1d+B7Ag9lA/9G2QBhGCCA81LNPCdygOAq3mx0uAP79yw7ieo/AT2A5hbOmuuxsTt5ms5k2DSsoJ01QFCgCnr4ryTNtN9cisl2TDxPwEhMavWSzzol4br+/X92CGOWEtq12h2dzP84qd9A5/9cDSGCxThMS7I3FbfKm5pq3k7eTU/z/G2ue+iiN4XkIUxQD3PI2ffA95xf4ch/9DsPzMPV9chZ4HvgbVYCLbuNoB2P0cgcf6bktHpaubU1pgGkboW7Pa1zQYBmid29t6xoPBzz4sGYbgl4bFMXwAwxhDBB0bwFCMMarvnRhTnhmGK1O5xer+ZcNxoJ9ffbgXN8PA1jcVO3fR5EPQaiM8LECWER4NaFy+9XA9mtMxBhLeAWDxR4rMdtag+cVDLfoa1bl2bauvGfoViUl8qfQwzoPN0Jx2tvR9cV69D4yTuznwx6MxfVAgDj6TUYcxCifVdf1Gjx521y6OOOBDrKtO+jn35Ov3q7Q+ZQm+lJXvIqj4C7yW2qv+v5lE6Wxk0leJKh0D+ItRPQoZ9NGrwq1bQZiRtXWSEegZxvGUFWysixlTsPiNb3yfJj9GF1qF2gew2yUNcvjH/deoK7MFujyeRfFJqCWyTX8x1DlvvIStBcSriLn92bSusPFP10Om/WrO2VlJ1JWLldT1YL8pajS6Cj6C6OdWp+H6iXXmF5yj0gvudp6iccwI+qlBUyc2NsVVv6r0UtmlIkxGVcTV2npWEXbNXC+eiE0IyMtvCOQFDwiPUGpG+7thBQ6+9u/9yqTl0+YAsdkKeQDyjDqyWf7FVGqfCLLeb7hltGIuYZJArbjM8hm4InqV+CnUOk8pKKzNuku4wRjOovE+66zVPZ2Q7K9gk/Qp4SxWZXym6pI7klQKuOUO/TqoxnGz7TMhzhKd2b4noY7AravB6TH/K3mexSB0MQxeINAPFyQDu2bNGPxYgm6g0/DdqCaHYa69fbnbt2H5XcTu9kt0kBvqdQRssfCIO8Ccr25RDAoS1WxUvzryUuieA8mmFE3L99zQqtmxn3C+cz4UHh1hjlSjN2lHdNFmv4t2v6v0Lrv7fZz9XZcO92Hu9vRRf3Qu6nIpDmWTev/5Y7w7mbgxbPJDc/cHlQqFb4Dv74irGsRPvz2R9aNz9TgbUCiwdX83zM8oh5vgPVnwRCbOmq7ZBoQeyThQVomVz7YNg9w5PbMOd4gGj8UvT9m35qt8XRykv0nuTNiecNmn/+C5ZNkYXoZ1jB4gHHDrYWrLffknNsnzKpR1fHOQFQ+FVe+XtQ1fzhlCV2QVEBmxjcwgNgtrEOSfClN7P0TuhIKI5QuwA7K3fWBQZbmqwi49WuL/VCf2B4GkL1GOSS9L5LE24by6mQehY9eHMirlM/L27oqaxxRVbOjUOoQ0O/E9TdODHY7ov6fDS87Jk7kePk6th/TFEc/ujOsai3xNXpjYRCvctZ4Zb0dXku8jZ3bf2Lm0AnL8XASl+o07Mlkwi4UPm3BODviAB+va4L5ygsRezTzQsfbAV84iFYrpbvxjPx1L+0vC7iDYXYOE5J2aPd1L62zZh+FZlOCR8Ssw30e1rXS4rdizXrTT2nlOUn4zEyGTU/bJJ/dhAvoQwStC6d4djwHiQNc1uLFouYa4EPRFCTZgfuCTIkbRes0dBB74EmeO6uLZYS+rYZj2nch8jwpcozJqLjDs6RgBnvTj4JlegVKkj3Ydu6F3adcgld0dGP36VhS8Rrca7uGIrOUglAEtR23i9IGBrFXlmqcEf1Lz/FMGGMr1qMhrT/HYC1mODLrKrwS1mQvhuZGBmKcxQqHE26DcIv6cFFdpWTl8BlxToKf8MfiMJiU3tU2q2S4G4ho0cnePdtW4+XiKiCG62iozMzowCEsvH4QtxvElQNp3iF2QDEPH/sBKzdRJyD9KqkHsGaoDry2gPZRrXsJu9eP4Dx6EclrR6IS/113WxR6z6f12EmOYSSq9zxKw7g8GEq4cE2J6fPDa1gi9J+z5E9axEwoaRTQRHiykiCwBmW4l9IsYXqNfWlzn5hGS1oEhBGZ9+NwDOeWhCMzYotT0uYkJyDDJd02phzLDaIGcSkjokeHuSRtMOnThDWQZDlOQJfqpqjeuOtvs2kR410WzKYdweCzNdjtvHBLBIeXJdamiAyf/7BRj5cOCoypk3DCpuvR1j2hKAZb2PqaOWZdeOXFCaoMEduauwFTrW2mdGxeVW+sJcKuX7WrVW2yf5fXIdxHJ5Tlwpp4JcwVnmWQWYn52wxWKjqaW1nAPvBBLHqiMY/8NAhLu41rNnYDkW82SJw58J2yWAEsi5mmULIC+fZZyDQ1mRuV1h/pxh9V2q7otiuVts0TCBKiKZVHyt84kCB5gXz76v0CCaHGDvnrBbJ5XqDQvnYAUiCdbsFupM80xGde29m0JV3MaYkRZ8ZRRmsIKf1R2zrDlUdzXFHXHIK24y8PFQRMglEfFES/CaijNEBTrILVBPDQYE25PFoZoEfJVFGkoF7qYF9Ky9SlCkjlu2cKB5cpCqnL5YIOV6mYn+QUzuFE1TUnqu4AUe1qO/4iUTF4lDyQHw4jqkaEy5BIHDUjtxxNw9m57ZhSZ+pehO4F2xowXMkoVsrmJD8cUkrKiLXWDlQUHmozIx4OkmBEsYrdWwej0oZvXayAVUXRUUhVoTzOpmW+bpSs1zKYlAQoi45JD5D+YSN6gPIna+kBMcKoesCUnJUvPKlNpCjaPxdXbiIShv+kueCkg3Ai7bgazoitiwh1PuwDEOkx4sptIDOGrJ4OFTHKuBUapSw8fneICXOsisukMYoytQ2qjszU94kY9O8wxoqqlVJGVZIQZdEhjn8cv6Gyz5AOqaSgqC/fhufInNt5iM9Zw+Fsxtvc6bYWvqvpxjPqvT4m5Z0HHZIYecHxK3/BXtrzskWE+d2/TgUHku3zgv1q7IPrV+bqs12l7r2+Am1ddc7Ka8f+5NjMPWRRxbYwUZ48N7uDXL9s/u7nmnmS/3Pue/nZo6qxBqH3CBNUBLbYP05+bCXXPp5E19MkcX3OtS0RLNR9XykXCK8XBE/GJXsZcXtD3FXTPTc7BtGLfs5oneZNxuiHKFLPRFQHkbsDg8g127dDwf0o3BZvBxsgxUhvXYgWs+iHcGs1b2XkzTGY55PL0IXP5/Y/80Zn1vJvX6p2b6zcpD+zTqx/6QdsSy2iRtZlDZHvul9UT248iuhz8hnr8h2TFtTFP1CedeI2ho5X/K2HEwMpCQ0BU9lHtbROO4+xLukKF8GAgTQHWGWxc0ViZ1rfaGQU1pM5Q4l7R5E5Tl7QY5M5A6IxlKVHYSvhtd3rtuHYxLbaTGWSP6nUlce+IzApa3VMICZPrS7xWtk1dWE2gww6KsesWbtKeHf2qoVxHLan8rdqcaYZhqIj3QxqZ9El1mvnh9C8WUyleDOEeuhz9GCzgc5qqiMlw87PxhwBBjZyKg2p5ml+lGOFeio3ndHzEpbqknIs18I36E3kZNCU5Rui6ZATqRF/5uvR2USSTl32PrTa5+bglOUaqvEQvvnuxCXu1Qbo3aGiZ0bZDsn4VUXAa6fj4gRW6+YM083s1flgX95hZmll83oNyWmUMngpLqHR5EX8aPQBicOGJYo7TDquby3/lqKGGYmh2tkvpDPXvF4d1fvO9ugUlXwWLS390Ld5cQHH1jbKom8ucdE3mAhLW8yPkjc0JHjP3HEsWazYLBLtleTmqCoXj8lwRH8uXoJhC/0hwstf2OaiHCecBFS/dfVEfON1c9uVbYfThyvowxX3wc9cw0lZRae44uWsomvw+msqyfRI58Di9UjX6OixrNTbY1tLMB22K/D6E6d6YZZOwIg9XNjJgntIxEWzWyv6mdUE3BMGN8kBY9YdS8otxYELDJautDDDpz5KTq0hq80XKF4c1/DJG0+cpbVqXYYDNy7D5KQN5sfSXrWRJq+QBIt98Y2tjTTMfM/FrwXM/3RABTHDmCF0KDujrrMMH6PK6mmNqKrC3Dsj4GIj5CJG3iNwEP7swCTJ/45RmcT/MniA7jK8SdEuRXjKMHjwqb/VlZlNov7zTF/0mGc3+RuWxMQU8DC9zF1/E75PPb/5MwVXHH9kB0Rmj5XXLNlaouy6ZftSI11H7c2/C6gkX21G3sNg52Ow5CbcgCeoM7ZPCVzBLXBebst3+90g/QtBk3228MA2BkFSYjTt8U/Mw27w/NP/ANNWx+47jAAA dbo