diff --git a/Plugins/Mineplex.Core/src/mineplex/core/disguise/DisguiseManager.java b/Plugins/Mineplex.Core/src/mineplex/core/disguise/DisguiseManager.java index 27b1dd35a..14037083f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/disguise/DisguiseManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/disguise/DisguiseManager.java @@ -2,6 +2,7 @@ package mineplex.core.disguise; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -58,6 +59,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable private NautHashMap _entityDisguiseMap = new NautHashMap(); private NautHashMap _addTempList = new NautHashMap(); private HashSet _delTempList = new HashSet(); + private NautHashMap> _disguisePlayerMap = new NautHashMap>(); private Field _attributesA; private Field _soundB; @@ -105,12 +107,44 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable return _spawnPacketMap.get(entity.getEntityId()); } - public void disguise(DisguiseBase disguise) + public void addViewerToDisguise(DisguiseBase disguise, Player player) + { + _disguisePlayerMap.get(disguise).add(player); + + reApplyDisguise(disguise, player); + } + + public void removeViewerToDisguise(DisguiseBase disguise, Player player) + { + _disguisePlayerMap.get(disguise).remove(player); + + EntityPlayer entityPlayer = ((CraftPlayer)player).getHandle(); + entityPlayer.playerConnection.sendPacket(new PacketPlayOutEntityDestroy(disguise.GetEntity().getId())); + + if (disguise.GetEntity() instanceof EntityPlayer) + { + player.hidePlayer(Bukkit.getPlayer(disguise.GetEntity().getName())); + player.showPlayer(Bukkit.getPlayer(disguise.GetEntity().getName())); + } + else + { + entityPlayer.playerConnection.sendPacket(new PacketPlayOutSpawnEntityLiving((net.minecraft.server.v1_7_R4.EntityLiving)disguise.GetEntity())); + } + } + + public void disguise(DisguiseBase disguise, Player...players) { if (!disguise.GetEntity().isAlive()) return; + if (players == null || players.length == 0) + { + players = Bukkit.getOnlinePlayers().toArray(new Player[Bukkit.getOnlinePlayers().size()]); + } + _spawnPacketMap.put(disguise.GetEntityId(), disguise); + _disguisePlayerMap.put(disguise, new HashSet()); + _disguisePlayerMap.get(disguise).addAll(Arrays.asList(players)); reApplyDisguise(disguise); } @@ -120,11 +154,11 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable if (!_spawnPacketMap.containsKey(entity.getEntityId())) return; - _spawnPacketMap.remove(entity.getEntityId()); + DisguiseBase disguise = _spawnPacketMap.remove(entity.getEntityId()); _movePacketMap.remove(entity.getEntityId()); _moveTempMap.remove(entity.getEntityId()); - for (Player player : Bukkit.getOnlinePlayers()) + for (Player player : _disguisePlayerMap.get(disguise)) { if (entity == player) continue; @@ -146,14 +180,16 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable public void reApplyDisguise(final DisguiseBase disguise) { - for (Player player : Bukkit.getOnlinePlayers()) + PacketPlayOutEntityDestroy destroyPacket = new PacketPlayOutEntityDestroy(disguise.GetEntityId()); + + for (Player player : _disguisePlayerMap.get(disguise)) { if (disguise.GetEntity() == ((CraftPlayer)player).getHandle()) continue; EntityPlayer entityPlayer = ((CraftPlayer)player).getHandle(); - entityPlayer.playerConnection.sendPacket(new PacketPlayOutEntityDestroy(disguise.GetEntityId())); + entityPlayer.playerConnection.sendPacket(destroyPacket); } List tempArmor = new ArrayList(); @@ -173,7 +209,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable { public void run() { - for (Player player : Bukkit.getOnlinePlayers()) + for (Player player : _disguisePlayerMap.get(disguise)) { if (disguise.GetEntity() == ((CraftPlayer)player).getHandle()) continue; @@ -189,10 +225,49 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable } }); } + + public void reApplyDisguise(final DisguiseBase disguise, final Player player) + { + PacketPlayOutEntityDestroy destroyPacket = new PacketPlayOutEntityDestroy(disguise.GetEntityId()); + + if (disguise.GetEntity() == ((CraftPlayer)player).getHandle()) + return; + EntityPlayer entityPlayer = ((CraftPlayer)player).getHandle(); + + entityPlayer.playerConnection.sendPacket(destroyPacket); + + List tempArmor = new ArrayList(); + + if (disguise instanceof DisguiseInsentient && disguise.GetEntity() instanceof LivingEntity) + { + if (((DisguiseInsentient)disguise).armorVisible()) + { + for (Packet armorPacket : ((DisguiseInsentient)disguise).getArmorPackets()) + tempArmor.add(armorPacket); + } + } + + final List armorPackets = tempArmor; + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(GetPlugin(), new Runnable() + { + public void run() + { + EntityPlayer entityPlayer = ((CraftPlayer)player).getHandle(); + entityPlayer.playerConnection.sendPacket(disguise.GetSpawnPacket()); + + for (Packet packet : armorPackets) + { + entityPlayer.playerConnection.sendPacket(packet); + } + } + }); + } + public void updateDisguise(DisguiseBase disguise) { - for (Player player : Bukkit.getOnlinePlayers()) + for (Player player : _disguisePlayerMap.get(disguise)) { if (disguise.GetEntity() == ((CraftPlayer)player).getHandle()) continue; @@ -265,6 +340,11 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable public void PlayerQuit(PlayerQuitEvent event) { undisguise(event.getPlayer()); + + for (DisguiseBase disguise : _disguisePlayerMap.keySet()) + { + _disguisePlayerMap.get(disguise).remove(event.getPlayer()); + } } @Override @@ -274,7 +354,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable { int entityId = ((PacketPlayOutNamedEntitySpawn)packet).a; - if (_spawnPacketMap.containsKey(entityId)) + if (_spawnPacketMap.containsKey(entityId) && _disguisePlayerMap.get(_spawnPacketMap.get(entityId)).contains(owner)) { packetList.forceProcess(_spawnPacketMap.get(entityId).GetSpawnPacket()); return false; @@ -284,7 +364,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable { int entityId = ((PacketPlayOutSpawnEntity)packet).a; - if (_spawnPacketMap.containsKey(entityId)) + if (_spawnPacketMap.containsKey(entityId) && _disguisePlayerMap.get(_spawnPacketMap.get(entityId)).contains(owner)) { packetList.forceProcess(_spawnPacketMap.get(entityId).GetSpawnPacket()); return false; @@ -307,7 +387,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable e.printStackTrace(); } - if (_spawnPacketMap.containsKey(entityId) && owner.getEntityId() != entityId) + if (_spawnPacketMap.containsKey(entityId) && owner.getEntityId() != entityId && _disguisePlayerMap.get(_spawnPacketMap.get(entityId)).contains(owner)) { // Crash clients with meta to a block id. if (_spawnPacketMap.get(entityId) instanceof DisguiseBlock) @@ -318,7 +398,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable { int entityId = ((PacketPlayOutAnimation)packet).a; - if (_spawnPacketMap.containsKey(entityId) && owner.getEntityId() != entityId) + if (containsSpawnDisguise(owner, entityId) && owner.getEntityId() != entityId) { return false; } @@ -327,7 +407,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable { int entityId = ((PacketPlayOutEntityMetadata)packet).a; - if (_spawnPacketMap.containsKey(entityId) && owner.getEntityId() != entityId) + if (containsSpawnDisguise(owner, entityId) && owner.getEntityId() != entityId) { packetList.forceProcess(_spawnPacketMap.get(entityId).GetMetaDataPacket()); return false; @@ -337,7 +417,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable { int entityId = ((PacketPlayOutEntityEquipment)packet).a; - if (_spawnPacketMap.containsKey(entityId) && _spawnPacketMap.get(entityId) instanceof DisguiseInsentient) + if (containsSpawnDisguise(owner, entityId) && _spawnPacketMap.get(entityId) instanceof DisguiseInsentient) { if (!((DisguiseInsentient)_spawnPacketMap.get(entityId)).armorVisible() && ((PacketPlayOutEntityEquipment)packet).b != 0) { @@ -378,7 +458,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable _movePacketMap.remove(movePacket.a); } - if (!_spawnPacketMap.containsKey(movePacket.a)) + if (!containsSpawnDisguise(owner, movePacket.a)) return true; final PacketPlayOutEntityVelocity velocityPacket = new PacketPlayOutEntityVelocity(); @@ -430,7 +510,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable _movePacketMap.remove(movePacket.a); } - if (!_spawnPacketMap.containsKey(movePacket.a)) + if (!containsSpawnDisguise(owner, movePacket.a)) return true; final PacketPlayOutEntityVelocity velocityPacket = new PacketPlayOutEntityVelocity(); @@ -491,6 +571,11 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable return true; } + private boolean containsSpawnDisguise(Player owner, int entityId) + { + return _spawnPacketMap.containsKey(entityId) && (_disguisePlayerMap.containsKey(_spawnPacketMap.get(entityId)) && _disguisePlayerMap.get(_spawnPacketMap.get(entityId)).contains(owner)); + } + public void PrepAddDisguise(Player caller, EntityType entityType) { _addTempList.put(caller.getName(), entityType); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguisePlayer.java b/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguisePlayer.java index f17553e2b..4e8fcc8b3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguisePlayer.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguisePlayer.java @@ -8,6 +8,7 @@ import net.minecraft.util.com.mojang.authlib.GameProfile; public class DisguisePlayer extends DisguiseHuman { private GameProfile _profile; + private boolean _sneaking; public DisguisePlayer(org.bukkit.entity.Entity entity) { @@ -26,6 +27,24 @@ public class DisguisePlayer extends DisguiseHuman _profile = profile; } + public void setSneaking(boolean sneaking) + { + _sneaking = sneaking; + } + + @Override + public void UpdateDataWatcher() + { + super.UpdateDataWatcher(); + + byte b0 = DataWatcher.getByte(0); + + if (_sneaking) + DataWatcher.watch(0, Byte.valueOf((byte) (b0 | 1 << 1))); + else + DataWatcher.watch(0, Byte.valueOf((byte) (b0 & ~(1 << 1)))); + } + @Override public Packet GetSpawnPacket() { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java index 50e9954cc..a1f2ef1dd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/Donor.java @@ -31,7 +31,6 @@ public class Donor _transactions = token.Transactions; _coinTransactions = token.CoinRewards; - if (_salesPackagesOwned == null) { _salesPackagesOwned = new ArrayList(); @@ -42,10 +41,15 @@ public class Donor _unknownSalesPackagesOwned = new ArrayList(); } - if (_unknownSalesPackagesOwned == null) + if (_transactions == null) { _transactions = new ArrayList(); } + + if (_coinTransactions == null) + { + _coinTransactions = new ArrayList(); + } } public int GetGems() diff --git a/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DDoSProtectionSwitcher.java b/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DDoSProtectionSwitcher.java index fd22fa8fa..67a04c331 100644 --- a/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DDoSProtectionSwitcher.java +++ b/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DDoSProtectionSwitcher.java @@ -47,8 +47,9 @@ public class DDoSProtectionSwitcher //while (true) //{ - if (_repository.switchToDDOSProt()) - { + //if (_repository.switchToDDOSProt()) + //{ + /* System.out.println("Starting DDoS Protection Switch at " + dateFormat.format(new Date())); DomainRecords records = new ApiGetCall("https://api.dnsmadeeasy.com/V2.0/dns/managed/", 962728, @@ -110,7 +111,7 @@ public class DDoSProtectionSwitcher + idBuilder.toString()).Execute(); System.out.println("Deleted " + recordsToDelete.size() + " records."); } - +*/ // Switching US Bungees switchServer("10.35.74.130", "108.178.20.166", "108.163.222.202", "108.178.20.165", "108.163.222.201"); switchServer("10.35.74.132", "108.163.217.110", "108.178.44.50", "108.163.217.109", "108.178.44.49"); @@ -133,6 +134,7 @@ public class DDoSProtectionSwitcher switchServer("10.32.214.249", "107.6.158.78", "184.154.13.38", "107.6.158.77", "184.154.13.37"); switchServer("10.32.214.247", "184.154.13.118", "108.163.242.98", "184.154.13.117", "108.163.242.97"); + /* // Switching EU Bungees switchServer("10.82.2.202", "107.6.176.194", "107.6.176.34", "107.6.176.193", "107.6.176.33"); switchServer("10.82.2.204", "107.6.176.122", "107.6.176.50", "107.6.176.121", "107.6.176.49"); @@ -142,9 +144,9 @@ public class DDoSProtectionSwitcher switchServer("10.82.2.227", "107.6.176.26", "107.6.176.46", "107.6.176.25", "107.6.176.45"); switchServer("10.82.2.228", "107.6.176.110", "107.6.176.70", "107.6.176.109", "107.6.176.69"); switchServer("10.82.2.226", "107.6.176.138", "107.6.176.234", "107.6.176.137", "107.6.176.233"); - - sendMail(); - } + */ + //sendMail(); + //} int processWaits = 0; diff --git a/Plugins/Nautilus.Core.CraftBukkit/.externalToolBuilders/CB2.launch b/Plugins/Nautilus.Core.CraftBukkit/.externalToolBuilders/CB2.launch index 00db81307..4067ec440 100644 --- a/Plugins/Nautilus.Core.CraftBukkit/.externalToolBuilders/CB2.launch +++ b/Plugins/Nautilus.Core.CraftBukkit/.externalToolBuilders/CB2.launch @@ -10,7 +10,7 @@ - + diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java index 7765d4375..64a59747e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -30,6 +30,7 @@ import mineplex.core.mount.MountManager; import mineplex.core.npc.NpcManager; import mineplex.core.packethandler.PacketHandler; import mineplex.core.pet.PetManager; +import mineplex.core.playerTracker.PlayerTracker; import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; import mineplex.core.projectile.ProjectileManager; @@ -117,7 +118,8 @@ public class Arcade extends JavaPlugin //Arcade Manager _gameManager = new ArcadeManager(this, serverStatusManager, ReadServerConfig(), _clientManager, _donationManager, _damageManager, disguiseManager, creature, teleport, new Blood(this), antistack, portal, packetHandler, preferenceManager, inventoryManager, cosmeticManager, projectileManager, webServerAddress); - + new PlayerTracker(this, serverStatusManager.getCurrentServerName(), serverStatusManager.getUs()); + new MemoryFix(this); //Updates diff --git a/Website/LOC.Core/LOC.Core.csproj b/Website/LOC.Core/LOC.Core.csproj index e83cfeeab..b1fdf484f 100644 --- a/Website/LOC.Core/LOC.Core.csproj +++ b/Website/LOC.Core/LOC.Core.csproj @@ -59,10 +59,6 @@ - - - - diff --git a/Website/LOC.Core/Data/IRepository.cs b/Website/LOC.Website.Common/Contexts/IRepository.cs similarity index 100% rename from Website/LOC.Core/Data/IRepository.cs rename to Website/LOC.Website.Common/Contexts/IRepository.cs diff --git a/Website/LOC.Core/Data/IRepositoryFactory.cs b/Website/LOC.Website.Common/Contexts/IRepositoryFactory.cs similarity index 100% rename from Website/LOC.Core/Data/IRepositoryFactory.cs rename to Website/LOC.Website.Common/Contexts/IRepositoryFactory.cs diff --git a/Website/LOC.Core/Data/Repository.cs b/Website/LOC.Website.Common/Contexts/Repository.cs similarity index 89% rename from Website/LOC.Core/Data/Repository.cs rename to Website/LOC.Website.Common/Contexts/Repository.cs index f9746a6c9..de90ffa75 100644 --- a/Website/LOC.Core/Data/Repository.cs +++ b/Website/LOC.Website.Common/Contexts/Repository.cs @@ -7,6 +7,7 @@ using System.Data.Entity.Validation; using System.Linq; using System.Linq.Expressions; + using LOC.Website.Common; public class Repository : IRepository where TContext : DbContext @@ -56,12 +57,14 @@ catch (DbEntityValidationException ex) { var l = (from err in ex.EntityValidationErrors from ve in err.ValidationErrors select ve.ErrorMessage).ToList(); + Log("ERROR", PREFIX + String.Join("; ", l)); throw new ApplicationException(PREFIX + String.Join("; ", l), ex); // contains the human-readable validation exception } catch (DbUpdateException e) { if (e.InnerException != null && e.InnerException.InnerException != null && !String.IsNullOrEmpty(e.InnerException.InnerException.Message)) { + Log("ERROR", PREFIX + String.Join("; ", e.InnerException.InnerException.Message)); throw new ApplicationException(PREFIX + String.Join("; ", e.InnerException.InnerException.Message), e); // contains the reason } throw; @@ -121,6 +124,17 @@ } } } + + private void Log(string category, string message) + { + Add(new LogEntry + { + Date = DateTime.Now, + Category = category, + Message = message + }); + CommitChanges(); + } } } diff --git a/Website/LOC.Core/Data/RepositoryFactory.cs b/Website/LOC.Website.Common/Contexts/RepositoryFactory.cs similarity index 100% rename from Website/LOC.Core/Data/RepositoryFactory.cs rename to Website/LOC.Website.Common/Contexts/RepositoryFactory.cs diff --git a/Website/LOC.Website.Common/LOC.Website.Common.csproj b/Website/LOC.Website.Common/LOC.Website.Common.csproj index 2f4ed5aca..bcce2c618 100644 --- a/Website/LOC.Website.Common/LOC.Website.Common.csproj +++ b/Website/LOC.Website.Common/LOC.Website.Common.csproj @@ -68,6 +68,12 @@ + + + + + + @@ -95,8 +101,6 @@ - - diff --git a/Website/LOC.Website.Common/Models/AccountAdministrator.cs b/Website/LOC.Website.Common/Models/AccountAdministrator.cs index aed5208f5..67a0492bb 100644 --- a/Website/LOC.Website.Common/Models/AccountAdministrator.cs +++ b/Website/LOC.Website.Common/Models/AccountAdministrator.cs @@ -92,12 +92,14 @@ account.Name = loginToken.Name; } + /* // Expire ranks if ((account.Rank.Name == "ULTRA" || account.Rank.Name == "HERO") && !account.RankPerm && DateTime.Now.CompareTo(account.RankExpire) >= 0) { account.Rank = repository.Where(x => x.Name == "ALL").First(); repository.Attach(account.Rank); } + * */ repository.CommitChanges(); @@ -538,10 +540,12 @@ public string UpdateRank(RankUpdateToken token) { + Rank rank = null; + using (var repository = _repositoryFactory.CreateRepository()) { var account = repository.Where(x => String.Equals(x.Name, token.Name)).Include(x => x.Rank).FirstOrDefault(); - var rank = repository.Where(x => String.Equals(x.Name, token.Rank)).FirstOrDefault(); + rank = repository.Where(x => String.Equals(x.Name, token.Rank)).FirstOrDefault(); if (account == null) return "ALL"; @@ -556,11 +560,10 @@ account.RankExpire = DateTime.Now.AddMonths(1); account.RankPerm = token.Perm; - if ((rank.Name == "HERO" || rank.Name == "ULTRA") && token.Perm == true) - { - repository.Attach(account); - repository.Edit(account); + repository.Edit(account); + if ((rank.Name == "HERO" || rank.Name == "ULTRA") && token.Perm) + { addAccountTransaction(repository, account, "Bacon Brawl Bebe Piggles", 0, 0); addAccountTransaction(repository, account, "Bacon Brawl `Pig`", 0, 0); addAccountTransaction(repository, account, "A Barbarians Life Barbarian Archer", 0, 0); @@ -628,9 +631,17 @@ } repository.CommitChanges(); - - return rank.Name.ToString(); + + _logger.Log("INFO", "TOKEN " + token.Name + "'s rank has been updated to " + token.Rank + " " + (token.Perm ? "Permanently" : "Monthly") + "." + " Rank expire : " + account.RankExpire.ToString()); } + + using (var repository = _repositoryFactory.CreateRepository()) + { + var account = repository.Where(x => String.Equals(x.Name, token.Name)).Include(x => x.Rank).FirstOrDefault(); + _logger.Log("INFO", "ACCOUNT " + account.Name + "'s rank is " + account.Rank.Name + " " + (account.RankPerm ? "Permanently" : "Monthly") + "." + " Rank expire : " + account.RankExpire.ToString()); + } + + return rank.Name.ToString(); } public void RemoveBan(RemovePunishmentToken token) diff --git a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml index d6f0e2641..f6af927bc 100644 --- a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml +++ b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml @@ -1,11 +1,13 @@  + + @@ -16,18 +18,19 @@ - + - + + - - + + @@ -41,24 +44,27 @@ + + + + - - - + + @@ -69,23 +75,24 @@ - + + - + + - - - + + @@ -93,7 +100,7 @@ - + @@ -101,43 +108,40 @@ - - - + - - + + - + + - + - - - + @@ -148,63 +152,58 @@ - + - - - - + + - - - + - - - + + - + - - - + + - + + - + - + @@ -212,61 +211,62 @@ - + - + - + - - + - + - + + - - + + - + + - - + + - + - - + + - - + + - + + - @@ -282,16 +282,14 @@ - - + - + - @@ -305,25 +303,25 @@ - - + - + + @@ -334,29 +332,30 @@ - - + + - - + + - + + @@ -364,43 +363,41 @@ + - + - - + - + - - - - - + + - + + @@ -411,29 +408,35 @@ - + - + + + + + + - + + @@ -441,95 +444,92 @@ - + - + - + - - - + - + - - + + - + - + - + - - - + + - + + - - + - - + + - + - - + + - + - - - - - + + + + + - + + - @@ -543,50 +543,50 @@ - + - + + - - - + + - + + - + - - + - + @@ -597,73 +597,70 @@ - - - + + - - - + + - + - - + + - + - - + + - + - - + - + - + @@ -674,125 +671,128 @@ - + - + + + + + + - - + - + - + - + + - + - + - + + - - + - + - + - - + + - - + + - + - - + - + - + - - + - - + + - + - - + + - + - - - - - + + + + + - + + - @@ -806,40 +806,40 @@ - + - + + - - + - + + - + - @@ -848,8 +848,8 @@ - + @@ -860,31 +860,29 @@ - - - + + - - - + + - + @@ -892,41 +890,40 @@ - + - - + + - + - - + - + - + @@ -937,119 +934,122 @@ - + - + + + + + + - - + - + + - + - + - + + - - + - + - + - - + + - - + + - + - - + - + - - + - - + + - + - - + + - + - - - - - + + + + + - + \ No newline at end of file diff --git a/Website/LOCWebsite.suo b/Website/LOCWebsite.suo index 3f9f119c2..04d379ca9 100644 Binary files a/Website/LOCWebsite.suo and b/Website/LOCWebsite.suo differ