package GameStatistics.Implementation;
import EnvironmentPluginAPI.Exceptions.TechnicalException;
import EnvironmentPluginAPI.Contract.TEnvironmentDescription;
import EnvironmentPluginAPI.Service.ICycleReplay;
import EnvironmentPluginAPI.Service.ICycleStatisticsSaver;
import ZeroTypes.Exceptions.GameReplayNotContainedInDatabaseException;
import GameStatistics.Implementation.Entities.CycleReplayDescription;
import ZeroTypes.RemoteInterface.ICycleStatistics;
import ZeroTypes.TransportTypes.TCycleReplayDescription;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.*;
/**
* Created with IntelliJ IDEA.
* User: N3trunner
* Date: 08.05.12
* Time: 14:59
* To change this template use File | Settings | File Templates.
*/
public class CycleStatisticsUseCase implements ICycleStatistics, ICycleStatisticsSaver {
// ------------------------------ FIELDS ------------------------------
private GameReplayDescriptionSaverHelper gameReplayDescriptionSaverHelper;
// --------------------------- CONSTRUCTORS ---------------------------
public CycleStatisticsUseCase(GameReplayDescriptionSaverHelper gameReplayDescriptionSaverHelper) {
this.gameReplayDescriptionSaverHelper = gameReplayDescriptionSaverHelper;
}
// ------------------------ INTERFACE METHODS ------------------------
// --------------------- Interface ICycleStatistics ---------------------
@Override
public ICycleReplay getCycleReplay(UUID gameID, TEnvironmentDescription environment) throws TechnicalException, GameReplayNotContainedInDatabaseException {
CycleReplayDescription replay = getGameReplayDescriptionDaoForEnvironment(environment).getGameReplayDescriptionWithGameReplayId(gameID);
if (replay == null) {
throw new GameReplayNotContainedInDatabaseException();
}
return getGameReplayFromFile(replay.getGameReplayFileLocation());
}
@Override
public float getWinLoseRatio(String player, String opponent, TEnvironmentDescription environment) throws TechnicalException {
List<CycleReplayDescription> replays = getGameReplayDescriptionDaoForEnvironment(environment).findAll();
float wins = 0;
float totalGames = 0;
for (CycleReplayDescription replay : replays) {
if (replay.getPlayers().contains(player) && replay.getPlayers().contains(opponent)) {
totalGames++;
if (replay.getWinningPlayer().equals(player)) {
wins++;
}
}
}
if (wins != 0 && totalGames != 0) {
return wins / totalGames;
} else {
return 0;
}
}
@Override
public List<TCycleReplayDescription> getCycleReplayDescriptionsByDeltaTime(Date startingTime, Date endingTime, TEnvironmentDescription environment) throws TechnicalException {
List<CycleReplayDescription> replays = getGameReplayDescriptionDaoForEnvironment(environment).getGameReplaysFromToTime(startingTime, endingTime);
List<TCycleReplayDescription> descriptions = new ArrayList<TCycleReplayDescription>();
for (CycleReplayDescription r : replays) {
//TGameReplay replayTransportType = gameReplayDescriptionDao.getGameReplayForGameReplayDescription(r);
descriptions.add(r.getTransportType());
}
//return new ArrayList<TGameDescription>();
return descriptions;
}
@Override
public float getCurrentGamesPerMinute(TEnvironmentDescription environment) throws TechnicalException {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, -1);
Date startingTime = calendar.getTime();
Date endingTime = Calendar.getInstance().getTime();
List<CycleReplayDescription> replays = getGameReplayDescriptionDaoForEnvironment(environment).getGameReplaysFromToTime(startingTime, endingTime);
return replays.size();
}
@Override
public List<String> getClientNames(TEnvironmentDescription environment) {
try {
return gameReplayDescriptionSaverHelper.getPlayerNameDaoForEnvironment(environment).getAllClientNames();
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<String>();
}
}
@Override
public int getTotalNumberOfCycles(String playerName, TEnvironmentDescription environment) throws TechnicalException {
List<CycleReplayDescription> replays = getGameReplayDescriptionDaoForEnvironment(environment).findAll();
int numberOfReplaysWithSelectedPlayer = 0;
for (CycleReplayDescription g : replays) {
if (g.getPlayers().contains(playerName)) {
numberOfReplaysWithSelectedPlayer++;
}
}
return numberOfReplaysWithSelectedPlayer;
}
@Override
public int getTotalNumberOfCyclesWon(String playerName, TEnvironmentDescription environment) throws TechnicalException {
List<CycleReplayDescription> replays = getGameReplayDescriptionDaoForEnvironment(environment).executeQuery("SELECT g FROM CycleReplayDescription g WHERE g.winningPlayer = \'" + playerName + "\'");
return replays.size();
}
@Override
public int getTotalNumberOfCyclesLost(String playerName, TEnvironmentDescription environment) throws TechnicalException {
List<CycleReplayDescription> replays = getGameReplayDescriptionDaoForEnvironment(environment).findAll();
int gamesLost = 0;
for (CycleReplayDescription r : replays) {
if (r.getPlayers().contains(playerName) && !r.getWinningPlayer().equals(playerName)) {
gamesLost++;
}
}
return gamesLost;
}
@Override
public float getAverageTurnsPerCycle(String playerName, int numberOfLastGames, TEnvironmentDescription environment) throws TechnicalException {
if (numberOfLastGames == 0) {
return 0;
}
List<CycleReplayDescription> replays = getGameReplayDescriptionDaoForEnvironment(environment).findAll();
List<CycleReplayDescription> replaysWithSelectedPlayer = new ArrayList<CycleReplayDescription>();
for (CycleReplayDescription r : replays) {
if (r.getPlayers().contains(playerName)) {
replaysWithSelectedPlayer.add(r);
}
}
float totalTurns = 0;
float totalNumberOfGames;
if (replaysWithSelectedPlayer.size() >= numberOfLastGames) {
totalNumberOfGames = numberOfLastGames;
} else {
totalNumberOfGames = replaysWithSelectedPlayer.size();
}
for (int i = 0; i < totalNumberOfGames; i++) {
totalTurns += replaysWithSelectedPlayer.get(i).getNumberOfTurns();
}
if (totalTurns != 0 && totalNumberOfGames != 0) {
return totalTurns / totalNumberOfGames;
} else {
return 0;
}
}
@Override
public List<TCycleReplayDescription> getDescriptionsForNLastCycles(int numberOfGames, TEnvironmentDescription environment) throws TechnicalException {
int numberOfGamesToGet = numberOfGames;
int numberOfAvailableGames = getGameReplayDescriptionDaoForEnvironment(environment).count();
if(numberOfGamesToGet > numberOfAvailableGames) {
numberOfGamesToGet = numberOfAvailableGames;
}
int[] range = new int[2];
range[0] = numberOfGamesToGet;
range[1] = 0;
List<TCycleReplayDescription> result = new LinkedList<TCycleReplayDescription>();
for(CycleReplayDescription description : getGameReplayDescriptionDaoForEnvironment(environment).findRange(range)) {
result.add(description.getTransportType());
}
return result;
}
// --------------------- Interface ICycleStatisticsSaver ---------------------
@Override
public void SaveReplay(final ICycleReplay replay, final TEnvironmentDescription environment) throws TechnicalException {
final CycleReplayDescription description = new CycleReplayDescription(replay.getReplayId(), replay.getReplayDate(), replay.getAgentSystems(), replay.getAgentSystemsWithGoalReached(), replay.getNumberOfTurns(), environment);
new Thread(new Runnable() {
@Override
public void run() {
gameReplayDescriptionSaverHelper.saveReplay(description, replay, environment);
}
}).start();
}
// -------------------------- PRIVATE METHODS --------------------------
private ICycleReplay getGameReplayFromFile(String fileLocation) throws TechnicalException {
// Read from disk using FileInputStream
FileInputStream f_in = null;
try {
f_in = new
FileInputStream(fileLocation);
// Read object using ObjectInputStream
ObjectInputStream obj_in =
null;
obj_in = new ObjectInputStream(f_in);
// Read an object
Object obj = obj_in.readObject();
obj_in.close();
ICycleReplay replay = (ICycleReplay) obj;
return replay;
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new TechnicalException("");
} catch (IOException e) {
e.printStackTrace();
throw new TechnicalException("");
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new TechnicalException("");
}
}
CycleReplayDescriptionDao getGameReplayDescriptionDaoForEnvironment(TEnvironmentDescription environmentDescription) throws TechnicalException {
return gameReplayDescriptionSaverHelper.getGameReplayDescriptionDaoForEnvironment(environmentDescription);
}
ClientNameDao getPlayerNameDaoForEnvironment(TEnvironmentDescription environmentDescription) throws TechnicalException {
return gameReplayDescriptionSaverHelper.getPlayerNameDaoForEnvironment(environmentDescription);
}
}
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNDDDMNNNNNMNNNDDDDDDDD8888OOOOOZZOOOOOOOOOODMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN8DDNNNNNNNNNNNMNNNNNNDDDDDDDDDDD8888OOOOOZZZZZ$$$$$$$$$77$ZZZDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN88NNNNNNDNNNNNDNNNNNNNNNNMMNNNNDDDDDDDDDD88888OOOOOOZZZZ$$$$$$$$77777$777II7IZMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNO8NNNNNNNNNNNNNNNNNNNNNNNNNNNNDNNNNNNNNDDDDDDDDD888888OOOOZZZZZZ$$$$$$$7777777IIIII:::~+7MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNODNNNNNNNNNNNNNNNNDNNNNNNNNNNNNNNNNNNDNDNNNNDNDDDDDDDDD8888OOOOOZZZZZZ$$$$$$$777777?ZIII=::::::::+8MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$8NNNNNNDNDDNNNNDNNNDNNNDNNNNNNDNDNNNNNNNDNNNNNNNNNNDDDDDDDDD888888OOOZZZZZZ$$$$$$$$777777I$N+ZN8:,~,:::::~~7MMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN$DNNNDDDNNDNDNNNNNDNNDNNDNNNDNNNDNNNNNDNNDNDNNNDNDNNNDDNNNDDDDDDDD888888OOOZOZZZZZ$$$$$$$7777II=~O?~=N,8N,:::::~~~:=MMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$DNDDDNDDDNDDDNDNDNNNNDNDDNDNNNNDNNNDNNNDNDNNNNNNNNDNNDDNNNNDDDDDDDDDDDDD88888OOOOOZZZZZZZZ$$$$$777I?7+???=,:~,::::~~~~:~:~MMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8$DNDDDDDDD?~?=7DNDDDNDDNNDDDNNNNDDNDNNDDNNNNNNNNDNNNNNNDNDNDMNMMDNNDDDDDDDDDDD88888888O8OOOOOOOZZZZZZ$$$$77II?~~::::::::~~~~~~~,.,MMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO8NDDDDDDD?,8DDIODDDNNDDDNNNDDNDDNDNNDNDNNDNDDDNNDDNNDNNDDDNNDNDNNDDDDNDDDDDDDDDD8DDD888888888O88888OOOOOOZZZZ$$$7?+===~:~:~~~~~~==~.,,,OMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZ8DDDDDDDDDO,:~$8DDDDDDDDDDDDDNNDDDDDDDDDNDDNNDNDDDDDDDDDDDDDDDDDDDDDNDDDDNDDDDDDDDDD8D8888888888888888888888OOOOOOOZZ77II?+==~~~=~~~=~:,,,,::MMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM88DDDDDDDZ=,,$DDDDDDDDDDDDDDDDDDDD888NNDNNDDDNDDDDDDDDDDDDDDDDDDDDDDDDDDNDNMDDNDDDDDD888888888888888888888888888888888OOOOZZZ$$77I?+++====~,,,,,:::MMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$DDDDDDD$:D8D+8DDDDDDDDDDDDDDDDDDDDD~?ODDNNDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD88888888888888888888888888888888888888888888888888OOOOOOOZZZ$77I??+==,,:,,:::,MMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMOODDDDDDDZ:~,=8DDDDDDDDDDDDDDDDDDDDDDDDDNDDDDDDDDDDDDDDDDDDDDDDDDD88D888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOO888888888888888O88OOOOOOOZZ$$7I++:::::,~~Z+MMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$DNDDDDDDDDDD8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD88888888888888OOOO8888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88O8888888888888OOOOOOZZZ$7+=~~:::~~Z~MMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD8DD8888888888O8OOOOOOO888OOO8O8OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888O88888888888OOOZZ$$I?+=~=~~::=MMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD8888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888OOZZZ$77?+=~~::~MMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD888888888OOOOOOOO88OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888OOOOZZZ$7II$~:~:MMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD8888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8O888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888OOOZZ$$?$=~~~NMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8DDDDDDDDDDDDDDDDDDDDDDDO=DDDDDDDDDDDDDDDDDDDDD88888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8OO888OO8OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8OOO8OOO8O8OOOOOOO88888888888O8O8888888OOO8$IZ+~~~MMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8DD88DDDDD8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD8D8888888OOOOOOOOOOOOOOOOOOOOZZOOOOOOOO8O8OOOOOOOO88OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8OO88O88OOOOOOOOOOO8O8888O88888888888888DN$O7?=~~MMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDDD8DDDDD8DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD88888888OOOOOOOOOOOOOZZZZZZZZZZZOZOO888OOOOOOOOOOOOOOOO8OOOOOOOOOOOOOOOOOOOO8OOOOOOOOO888O88OO8O8OOOOOOOOOOOO8OOOOO8888888888888888DZ$7I=~~MMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDDD8D88DDDDD88D8DD8DDD8DDDDDD88DDDDDDDDDD88888888OOOOOOOOOOOOZZZZZZZZZZZZZZOOOOO88OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8OO8888888O888888OOOOO8888OOOOO8OOOOOOOOOO8888888888888888OZ$7I+=$MMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDDDD888D8DD8DD888DDDDD8D8888888888DD8DDD88888888OOOOOOOOOOZZZZZZ$$ZZZZZZZZOO8888O8O8OOOOOOOOOOOOO8888OOOOOOOOOOOOOOOOOOOOOOOOOOO8888O888888888OOOOOO8OOOOOOOOOO8OOOOOOO8888888888888OOZ$7?=MMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDNN8DDD8D8DDDD888888888888888888DDDD8888888888OOOOOOOOOOZZZZZZ$$ZZZZZZZZOOOOOOOOOOOOOOOOOOOOOOOO888888888O8OOOOOOO88OOOOOOOOOOOOOOOOOO8OOOO8OOO8OOO8OOOOOOOOOOOOOOOOOOOOOOO888888888888OZ$7?=MMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDDD88DDDD888D88888888888888888888D8DD8888888OOOOOOOOOOZZZZZ$$$$ZZZZZZZOOOOOOOOOO88OO8OOOO888888OOOO88888888OOOO8OO888OOOOOOOOOOOO8O8OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888OZ$7?NMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDDN88NND88D8DD88888888888888888DDD88D88888OOOOOOOOZZZZZZZ$ZZZ$ZZZZZZZOOOOOOOOOOOOOOOOOO88888888OOOOOO8888O8O8OOOOO8O888OOOO8OO888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888OOZ$7+MMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8D88DDNDD888888DD88888888888888DDD8888888OOOOOOOOZZZZZZ$$$$ZZZZZZZZOOOOOOOOOOOOOOOOOO8O88O8888OO8OOOO88O8O88888888888888888O8O888888O8888OOOOOOOOOOOOO8O88OOOOOOOOOOOOOOOOOOOO888OO8888888888OOZ$78MMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDDD8888D888888888888888888888888D8888888OOOOOOOOZZZZ$$$$$$$$ZZZZZZOOOOOOOOOOOOOOOOOOOOOOO8OO8888888OOOO88O888888888888888888O88888888888888OOO8O88OOOOOOOO8OO8OOOOOOOOOOO88OO8888O8OOO888888888OOZ7IMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNDD8888888D888D8888888888888888DD888888OOOOOOOOOZZZ$$$$$$$$$$ZZZZO8OO8OOOOOOOOOOOOOOOOOOOOOO88OO888OOOOOOO888O8888888888888888888888888888888888O8OO888OOOO888888OOOOOOOOO8OO8888OOOOOOOOO88888888OO$7DMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD88D888888DDD888888NN8888888DDD888888OOOOOOOOOOZZZ$Z$$$$$$ZZZZZO88888OOOOOOOOOOOOOOOOOOOOOOOOO88888OOO8O8O888888888888888888888888888888888888888O88888OO8OO888OO88O8OOOOOOOO88OOOOOOOOOOOO88888888OO$7MMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDD88D88D88888888888DN8OD888DD88888888OOOOOOOOZZZZ$Z$$ONN8ZZZZZZO888888O8OOOOOOOOOOOOOOOO8OOO8O8O888888888888888888888888888888888888888888888888888O888888O88O8888888888OOOOOOO8O8OOOO8OOOOOO8O888888OZIMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDD8888D8D88888888888DOO888DMDDDD888OOOOOOOZZZZZ$$$$Z$$Z$DN88DNN88OOOOOOOOOOOOOOOOOOO8O888888888888888888888888888888888888888D88888888888888888888888888888888888888888888O88888O8OOOOO8OOOOOOOO8888888Z7MMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDD8DDD8D888888888888888N888MNND88D8OOOOOOOZZZ$$$$$$$$$$ZZZZZNDDDDDNM8O8O88O8OOO8888888888O888888888888888888888888888888888OOOOOOOOOO888888888888888888888888888888888888888O8OOOOOOOOOOOOOOOOOOOOO88888O7MMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD88888DD88888888888888888NNNNDD88O8OOOOOZZZZ$$$$$$$$$ZZZZZZOOODNDDDDDDNN8888888888888888888888888888888888888888888888888888O8OOOOOOOOZOZZZO888888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOO888OO8OZMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD8888888D8888888888888888D8D8888888OOOOOZZ$$$$$$$$$$ZZZZZOZOOOO888NNDDDDDDDNN88888888888888888888888888888888888888888888888OOOOOOOOOOOZZZZZZZZZ$Z88888888888888888888888888888O8OOOOOOOOOOOOOOOOOOO888O8Z$MMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMND8888888888D88888888888DDDD8D88OO8OOOOOZZ$$$$$$ZZZZZZZZOOOO8888O8O88DNDDDDDDDDNM888D88888888888888888888888888888DDNNNNNNDDD88O8OOOOOO8DDNNOZZZZZ$$$$88888D888888888888888888888OOOOOOOOOOOOOOOOOOO88888OO7MMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD88888888D888D8888888888DDDDDD8OOOOOOOZZ$$$$$$$ZZZZZZZOO88888888888O888DNDDDDDDDDNNNDD888888888888888888888DDNNNNDDD8888888888OOOOOOOOZZZZZZZZ$ZNNZ$Z$$$$DD88888888888888888888888O8OOOOOOOOOOOOOOO8888888Z$MMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8D88888D88888888888888DDDDDDD8OOOOOOZZ$$$$$$$$ZZZZZO8888888888888888888888NDDDDDDNNNNNMD88888888888888DNNNNDDDD8DD88D8888888888OZOOOOZZZZZZZZZZ$$$$$DD$$$$$D88D88888888888888888888888O88OOO8888OO8888888OODMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMND8888888888888888888DDDDDDD8OOOOOOZZ$$$$$$$$$$ZZ8888888888888888888888888888NNDDDNNNNNNNNND888888DNNNDD8888D88DDDDDD8D88888888OOOOOOOOZZZZZ$$$$$$$$$$$78N$$$$D888888888D888888888888888888888OO8888888888OZMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD88888888888888888888DDDDDD8OOOOOOZZZ$$$$$$7$$888888O88O88OOO88O888888888888888NNNNNNNNNMNDDD88DNNDDD888D88D8D8D8DD8DD88DDDNNNNNDDDDDDDDDDND8Z$$$$$7777777$D7$78888888888D88DNNNNDDDDDNNDDD888888888888888ODMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD8888888888888888888DDDDDDD88OOOOZZ$$$$$7$$O8888OOO88O8OO8O88O8888888888888888888NNNNNND88D8DNND8D88D8DD88DD8888DDNNNNNNDD8D8888888OOOOOZZZZZZ$Z8N$777777777NZ778888888DNNNDDDDNND8OOOOOOOZOOOOOOOO888888OZMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD888888888888888888DDDDDD8888OOOOZZ$$$$$O88888888888888O888888888888888888888888D88ND8888DNN8DDDD88888DD8DDDNNND88DDDDDDDDD8D888888DDD8OZODDO$$$7777ZD$777IIIZ87788NNDNNDDDN8O8OOO8OOOOOOOOOOOOOOOOO888O8ZNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD888888888888888888DDDDDD88888OOZZ$$$Z88888888888888888888888888OOOOO88888888888888888DDND888D8D8DD888DDNNND8888888DDDDDDDDD88888888DDDOOZ7+8$$$7777IIIODII??IZZ7NNNNNDND888888888O8OOOOOOOOOOOOOO8888888DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD8888888888888888888DDDD88888OOZZ$$Z888888888888888888888888888888888OOOO88888888888DNN88888888D88DDDNND88888888D8DDDDDDDDDDD8888888888ZZZZZ$$$7777III?I?ZI???INI7NNND888888888888OOOOOOOOOOOOOOOOO888OOZMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD888888888888888888DDDD8888OOOOZO888888888888888888O88O88O88888888888888888O888888DND88888888888DDND8D8888888D88D88DDDDDDDDDDDNNNDDDDDDDDDDDDO$777III????++8???77$N88888888888888OOOOOOOOOOO8O8OOO888O8OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM88888D8888888888888DD888OOOOO888DD8888888888888888888888OO8888888888888888888888NN88888888888DNND8888D888878888DDD8DDNNNNNDD8DDDDNDD8?7OO8D88Z$Z8DI?I??++++7+?IZ$88888888888888OOOOOOOOOO8888O8O888O8ZMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8888888D8888888888888OOOOO888DDDDDDDDDDD88NMMM8888888NMD8D88888888888888888888DND8888888888DND8888888888888888DDDNNNDDDDD+:,DO=?88DDDOOOZ$7?~:~~NDIZN??++++7+??7Z88888888888888OOOOOOO8O888888888888ZMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD888888888888888888OZ?$ZZOOO88DMNDDMDDDDDDM88888DMD888M88888MNO8MMND888888888DND8888888888NN88888888888D8888DNNND8DD88DDDD8DD88888888OOOZOZZ$$77IZII?IN++I=+7?$78888888888OO8OOOOOOOOOOOOO88888888OOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM888888888888888888O$?~+I$ZOMMNMDDNMMMDDDDDDD888888888D88DM8888MD88MN88NMN88ND8888888888ND88888888888888DNND8888D8D8D888DDDDD8D88888888OOOOZZ$7777II??+Z?+++??78888OO88888OOOOOOOOOOOOOOOOOO8O88888MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN8888888888888D888OZ7I,~$ZDMDDNDDDDDDDDDDDDD88888888888888888888NMN888NM88DN888888888DN88888888888888DNN8D88D888D8DDI8888DDDDD888888888OOOOZ$7777II?+++8++7?ZZ8O8888888888OOOOOOOOOOOOOOOOO88888MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8888888888888D8888OOZZZOO888DDDDDDDDDDDD8888888888888888O888888888888DD88DD88888888DN8888888888888DND888888D888D88D8DDD88DDDD888888DNDODDZZ$777III?7+++I+I$$8M8DN8DD8O8ONMDOOOOOOOOOOOOOOO8O8OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM88888888888888DDD8888888888888DDDDDDDDD8D8888888888888888O8888888888888DD88888888DD888DIO888888NN888888888888888DDDD8D8DDDDD8D88888888OOOZ$7IIII???+++IIZDNNNMM8M8888DD8MOOO88MOOOOOOOOOOOOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM888888888888DDDDD88888888888DDDDDDDDD8D8888888888888888888888888888888D88888888DN8888D8Z8888DNDD=~Z88888888888888D8DDD888DDDD888888DDODDZ$7II????++++IZ8888888888888888888MMMOODNMDN+$7$OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8888888888888DDD8888888888DDDDDDDDDD8DD888888888888888888O88888888888ND8888888N8NDN8888888DND$,OOO888888888DDD888DDD8D88DD8DD888O8NNONNO77III???+++$O888888888888888888888888888MO$I,,MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8888888888DDDDD88888888D8DDDDDDDDDDDD88D8888888888888888888888888888DD8888888DOO88NDND88DND8N~8888888888888888888888DDD8DDD888888DDODDZ77I7I???++I88888888888888DDDDD8D88888888OOOO8MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8888888888DDDD88888888D8DDDDDDDDD8DDDD8888888888O88888O888888888O888N8888888N8O8888888DN88DDDD888888888888888888888DDDDD88888888OZOO77777IIII++$88888DDDDDDDDDD8D888DDDDDDD8D888NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN8888888888DDD888888D8D8DDDDDDDDDDDDD888888888888888888888888888888DDO8O888N88O8888O8DDD=,888D8888888888888888888888DDDD8888888OZ8O$$777777??Z88D8DDDDD8DDDDDDDDDDD8D8DDDDD88NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN8888888DDDDD888888888DDDDDDDDDDDDD8888888888888888O8OO88888888888DDO88888DOOO8OOO8DDD,Z8O88888888888888888888888888888DDDD88DD8...?$$77III8888DDDDDDDDDDDDDDDDDDDDD8D888NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN8888888DD8DD888888888DDDDDDDDDD8DDD8DD88888888888888888888O8O88888NOO88O8N8OOOOOOND8888888O8888888888888888888888888DD88888888O$7?:Z$7IZ8888888D8DDDDDDDD8D88DDDDD88DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD88D888D8DDD88888888DDDDD8DDDDDDD88888888888888888O888O88888888O888DOODO8NOOOOOOON8888O888OO888888888888888888888O88888888OZ$OO8DZ?$788888888888DDDDDDD88DDDDD888NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM888N8DNDDD8888888D88DDDDDDDDDDD888D88888888888888888888O88888O88888NO8O8ON88888ON8O88888O8OO888888888888888OOO88O88OO88OO$77I+88$O88888888888888DDD8DDDDDD888NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD888DDN8DD88888888DDDDDDDDDDD8DD888D8888888888888888888888888888OO88DDOOOON8OO88N88O8888O8888888OO88OO888O8888OOOI..,..:~:~OOZ888888888888888888DD888888MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM888888DD8888888DDDDDDDDDDD88DDDD88D888D88D8888888888888888888888888O88NDOOO88OOODD88OO88888O8O8O8OOOON88D88OO:..~...,,,:OOO88888888888888888888888NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZ~:~?NMMM88888DDD88888DD88DDDDDDDD8DD88DDDD8DDD8D8D8888DD888888888888888888888888888DDDDDD88D8OOOOO8O8OOOOOOO8D8DD8OZ=+::,,::~$O8888888888888888888888DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN7+=~,,::,,,+MD8888DDD8888888D88D88DDDDDDDDDDDDDDDDDDDD8DDDD8888888888D8888888888888888DDDDDDDDN8IOZOOZOZOOOOOOOOOOOOO$O888Z$7$,$OOO888888888888D88888NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDZ?+++++?+=~:,I,~MND88D88888888MD88DDDDDDDDDDDDD8DDDDDDDDDDD8D8888D88888888888DD88DD88DD8DDDDDDDDD$ZOOZOZZOOOOOOOOOOOOOOOOOOOOOOOOOO888888888DD8888NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZ8$7777777?+==Z:,,,MM8888DD888888DN8DD8DDDDDDDDDDDDDDDDDD888888888888888888D8D8DDD8DDDD8888DDDDDDDO?ZZZZZZZZZOOOOZOOOOOOOOOOOOOO8O8888888DDD8888MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDZ887I????IIIIOI~:,,,:MMMD8D8D88888D8NNDDDDDDDDDDDDDDDDDDD8D888DD888D88888888DDDDDDDDDDD88888DDDDDDD7I$ZZZZZZZZZZZZZOOOOOOO88888888OO88D88O88NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8ND8Z77$7???II+=~:,,..,MMMMMN8DDDD888DDDDNDDDD88DDDDDDDDD8DDDDD8DD888D888888D88D888D8DDD88888DDDDDDNZ+$Z$$$ZZZZZZOOOOOO8888888OO8D888OOONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMOMDDOZ?++=+II?+~~::,...$MMMMMMMDDDDD88888OODNDDDDDDDDDD8DDDDDDDDDDDD8DDDD88DDDDD88DDDDDD8888888DDDDDI$$$$$$ZZZOZZOOOOOOOOOOOOOOOO88MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMDMDDZ$I??I7==+?~~:,:.,,7MMMMMMMMMMDDDDD888D8DDDDDDD8DDDD8DDDDDDD8D88D88D8DD88DDDDDD8DD888O88888DDDDO+ZZZZ$$ZZZZZZZZZZOOOOOOODMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7ZMMDNNDDZ7I$+=~=?~~~:,,,,:MMMMMMMMMMMMMMMNDDDD888DD888DDDDDDD8DDDD88888888DD8888D8DDDD888DZ88888888DD8I7777777$$$$ZZ$ZO8MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$Z8MMDDMDDDO7+====~~~=:,,::~MMMMMMMMMMMMMMMMMMMMDDDDD88DD88888888888888888888888888888D88888888888888DD7~$$$$$$$ZOOZZOI?MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7ZMDMMMDDNDDDZ?+=++~~=?==+I=MMMMMMMMMMMMMMMMMMMMMMMMMMMNDDDDDD888888888888888888888888888888888888888DD8+Z88D88D888888OINMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7O8DDDMMDDDNDDD8Z$$??+?7IIZONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD88888888888888888888888888888888888DD$+888DDD888D88Z+ZMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$OD8N88NNNNDDDMNDDDDD8O8D8NN:=MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO888888888888888DDDO?8888888DNO$7$MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$O8888ODDDDNNNDDDNNNNDDDDNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8Z?ZO88888888888DDND$+888888DDDD8MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7O88888DDDDDDDNNNDDDDDDDDNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZOOOO88888$~888DDDNO?8D888DDDD8MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN$N8888ODDDDDDDDDNDDNNNNNNNDDDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMI==OOOZO8888$88888DDN877888DDDNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZ$MN888O8DDDDDDDDDDDNNNNNNNDDNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZ+=$$OOOO888888888DDDDNO+8888DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMI$MMD88888DDDDDDDDDDNNNNNDDDDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8I=7OO$ZOO8888888888DDDN87ODDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZZMM8OOOO88DDDDDDDDDNNDND8ZDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN$=IOZ8O$OO8O88888888DDDDDZ?$+MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMIZMM888OOOODDDDDDDDDDD8OZ7IMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMOI=7$D8DD$$OO8888888DDDDDDN8IZDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7ZMN8888OOO8DDDDDDDDDD8OZ7MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDZ=$$8888O8$$OO88~88888DDDDDDZ+MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMM7$MMO8O8OO888OO8DDDDDD8$=,MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8O+7$88=ZO887$$OO8888O888DDDDN87MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMM7OMN8OOOO8ONOOO8OOO8DND$=7MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZO=7IDZ~:87Z$Z7$IZO888888DDDDDND$=MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMM7ZMNOOOOOOODOO8OO88O8NDO$?$MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8O+IIDO::D+$$$$$ZZ$ZO888O88DDDNNNO?MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMM78MD8OOOOO8DOOOO8OOO8NN8I888$?MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7?MMMO7?7D$:~D?ZZZZ$$$$$$ZOOOO88DDNNMND$+MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMN$DDD88OOOODOOOOOOOO8888D888888D8Z=MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMOOOOOO7?ON+?I8IZZZZZZZZ7$$$ZZOOO8DNNNMMN8D88Z$III$NNOZZ8MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMM78DN8O8OOONOOOOOOOOO888D88888888DDDO7NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM88DDDD8I8NO7ID$ZZZZZZZOOO77$$$ZZZ8NNNNNDDDN8I$88D8I?~~+++?7++IOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMZODN8OOOOODO8OOOOOOOO8D88888888M888DDD8+IMMMMMMMMMMMMMMMMMMMMMMMMMMMMD8DDDNDD8DDD8NZOOOOOOOOOOO$77$$$$O8DNNDDDNNMMDDDDDNNNO$NN$.,:=$$I??$MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMN=OMNZDDN888OOODO8O888888OO8MM8OO88888888888DDD$~MMMMMMMMMMMMMMMMMMMMMMMMM88DDDDD8O8NNNOOOOOOOOOOOO8N777$$ZOO8DDDDNNMMDDDDDDNNN8MND..DNNDDNMMMO$ZMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMM8OO8D$D8D88888OOO88888888O7MMMMMMM88888888NN8888DD8?=MMMMMMMMMMMMMMMMMMMMD8NNNND8888D8O8OOOOOOOO88DMMMI7$ZOODDDDMDNMMNDDDDDDMN8NMMD.$N~..,:~~+?NNI88MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMNODD8Z8NM8888888888888888OMMMMMMMMMMMD8888888888888DDDZ:MMMMMMMMMMMMMMMMMMM88NMD88OOOOOO8OOOOO888MMMMMM7$ZZ8DDDDNNNMMMDDDDDDNMNMMMN.77...,IOO7?+7$M=DNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMD8DNDDOND888888888888DD88MMMMMMMMMMMMMMMM8888888888888DDD8=OMMMMMMMMMMMMMMMO8NNN8888O8OOOOOO888DMMMMMMMO$7IDDD8DDDDNNMDDDDDDDMNNMNDZ.8,..:87~=$MNI$8N=NNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMN8DNNDNN8888OO888888D888MMMMMMMMMMMMMMMMMMMMM88888888OO888DDDO~DMMMMMMMMMMNONNNNNN888O88OOOD8DMMMMMMMMMM:,Z88888DDDNNMNDDDDDDNMNODDD~.8..8$..,:~=?NOZON?NNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMM8DNND8N88888OOO88O8D888MMMMMMMMMMMMMMMMMMMMMMMM8888888O88888DDD8+7MMMMMMMN88NNN88DNOO8888D8NMMMMMMMMMMZ,,Z8888DDDDDNNMDDDDDDDNMNDDDD:,7..8..:NN8=+8DOZO8DNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMM8DNNDM88888OOOOO88888MMMMMMMMMMMMMMMMMMMMMMMMMMMMD88888888O8D8DDDDI~MMMMMMDDNN88888N88DD8MMMMMMMMMMM=,,,:88DD8DDDDDNNNNNNDDDDNMNNNNN?.$..8?8D88DD8I8DOOM=NNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMM8MD88O888O88888DDONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD888888O888D88DD8?+MMMNNDDND8DDDD8MMMMMMMMMMMM,:=::~ZDDDDDDDDDNMMNNMNNDDDNMNMMMMD:DODDDDDD8DN??$8OODONNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMNM88OOOOOO888DDZ7MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM88888O888888DDDD7~MMMNN8NNNDNMMMMMMMMMMMM::+:~~=+D88DDDDDDDNNDDNNNNDDDNMNMMMMD:OI.I8.,8ND7+IZN$DDMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMNNNNOOOOOOOOOD8$MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD88888888888DDDDO=OMMMMMMMMMMMMMMMMMM~::~~==+?IDD88D8DDDDDDDNNNNN888DMNNMMMND.8:,7O,:~~=+78NZ8MMDNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMM8NN8NDOO8888D8ODMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM88O88O8888888DD8+=MMMMMMMMMMMMMM?::~==+??II7DD8888888DNNNNNNNN8888NMDMMMNN7,8,,?NO+=?8DD$ZOMNDMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMDN888DNDO8DD8DNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8O88O88888DD8DD8$ZMMMMMMMMM=,:==++?II77$Z8D8DN8NDNNNNNNNNNN88OO8MM8NNNDN8,N8,:~?OZI77$OMM8NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMDDND88D8ON88NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD888888888888DDDZIMMMMM=,:=++??I777$$O8888NDMMDNNNNDDDNNND8OOODMNONNDDD7:=M8~==?I7$DMM8DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMNDNNNNNDD$IMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM88OO888NN8888DDO7N8,~~~I?I7$7$$Z888DDNMMNNMDN8888DDDDD88OOOODMNZNDDDNN8~?D7IMDMMMOO8$MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMNDDD8MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8888888888888D?~==+?7$I$$$Z888NMDMNMMNN88888DDNDMD88OOZZZODNNODNNNMMMM$??II7$$8=$MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM88O8888888DO=+??I$Z$$ZOO8DMDNMNMND88888DDDDDNNNN8OOZZZZOOONMNDMMMMMMMMMMMMMD88MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNOO8888DD+??I7?ZZOOO8NNNMNDMD88888D888D8DDDNNMNOOOOOOOOOODMMNDO+MMMMMMM=ZMIMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM888DD$I77$$ZO888MDMMDND8888D8O8888O88888DNDNNOOOOOOOOO88DNMMNNNNNND$MZIMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM~DDDD7$$ZZOODDDMNDMDDDD8888888888OOO88888DNNDM8OOOO88O888888OI+=+II7=IMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM~~DDDDDZZZOO88NMD8D88888888888888O88OOOO888DDDMDMM888888888888888OZ$7,+MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM~=?NDDD8OOO8DMD8O8888888O8888888888O88O8OO8888DDMMDNMD888888DDDD8OZ$7~+MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM~+?IODD88=888888888888OZ8888OO8888888O88888OO88DMDDNNNMNMMMNDDDDNOZZ$$?DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+=?I7$88D888888888OO888888OO8O8O88888O8888O8888OODDNNDDDDNNNMNND8DN8O88OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+?77$ZZ8888888I88O88OO888OOOOOO~8OO88888888888888888DDDDDDNNDNDD8DD88O8MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7I$ZZO88888888O888888OOO888OOOOO88OOO88888888888888888888DDDDDDD888ODMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7$ZO888888O888888888OOOOOOOO8OOO8OOOOO8888888888888888888888888OONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8=+?I$MMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMZO888888888888OO888OOOOOOO8O888OOOOO88888888888888888888888888MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM~,...~+I7M8MMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM88DDD8888888888OOOOOOOOOOOOO88OOOO8O888888888888888888888DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDM.DMMMMMM$ONMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN8D888888888888OOOO888OOOOOOOO8888O88888888888888888NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMI?$.MMMMM7M8NMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN8888888888888OOOOOOOO8OOOOOOO888888888888888DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD$MM~~MMM7$MMMNMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN8888OO888OOO8OOO88888888888888888DNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM$MMOI7N7ZMMMDMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8OOOOOOO888888888888888DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM8MMMOOZODMMM7MMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD888888888888DMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMDNNMMMIMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMD8OM8MMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7MMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM?=MMN==MM+MDM$DMMM8~=M=MDM8M===8MDZMMM?Z7MMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// GlassGiant.com