Răsfoiți Sursa

Merge pull request #200 from vcmi/feature/VCMIMapFormat2

VCMI map format part 2
Alexander Shishkin 8 ani în urmă
părinte
comite
62b8991b6a
70 a modificat fișierele cu 18685 adăugiri și 644 ștergeri
  1. 6 0
      AI/VCAI/Goals.cpp
  2. 2 2
      client/CPreGame.cpp
  3. 69 0
      config/factions/random.json
  4. 99 2
      lib/CArtHandler.cpp
  5. 11 4
      lib/CArtHandler.h
  6. 14 0
      lib/CCreatureHandler.cpp
  7. 6 0
      lib/CCreatureHandler.h
  8. 79 32
      lib/CCreatureSet.cpp
  9. 7 8
      lib/CCreatureSet.h
  10. 10 2
      lib/CGameInfoCallback.cpp
  11. 62 17
      lib/CGameState.cpp
  12. 2 1
      lib/CHeroHandler.cpp
  13. 65 3
      lib/CModHandler.cpp
  14. 9 1
      lib/CModHandler.h
  15. 66 18
      lib/CTownHandler.cpp
  16. 21 14
      lib/CTownHandler.h
  17. 23 2
      lib/GameConstants.h
  18. 1 2
      lib/IGameCallback.h
  19. 3 0
      lib/IHandlerBase.h
  20. 82 20
      lib/JsonDetail.cpp
  21. 60 8
      lib/JsonNode.cpp
  22. 15 3
      lib/JsonNode.h
  23. 3 3
      lib/NetPacksLib.cpp
  24. 14 0
      lib/ResourceSet.cpp
  25. 3 0
      lib/ResourceSet.h
  26. 24 2
      lib/StringConstants.h
  27. 200 21
      lib/mapObjects/CGHeroInstance.cpp
  28. 11 3
      lib/mapObjects/CGHeroInstance.h
  29. 104 0
      lib/mapObjects/CGPandoraBox.cpp
  30. 3 0
      lib/mapObjects/CGPandoraBox.h
  31. 193 26
      lib/mapObjects/CGTownInstance.cpp
  32. 28 6
      lib/mapObjects/CGTownInstance.h
  33. 2 0
      lib/mapObjects/CObjectClassesHandler.h
  34. 7 27
      lib/mapObjects/CObjectHandler.cpp
  35. 251 0
      lib/mapObjects/CQuest.cpp
  36. 6 0
      lib/mapObjects/CQuest.h
  37. 1 1
      lib/mapObjects/CRewardableConstructor.cpp
  38. 1 1
      lib/mapObjects/JsonRandom.cpp
  39. 15 36
      lib/mapObjects/MiscObjects.cpp
  40. 18 6
      lib/mapObjects/ObjectTemplate.cpp
  41. 9 0
      lib/mapObjects/ObjectTemplate.h
  42. 33 9
      lib/mapping/CMap.cpp
  43. 22 3
      lib/mapping/CMap.h
  44. 5 6
      lib/mapping/CMapEditManager.cpp
  45. 8 9
      lib/mapping/CMapEditManager.h
  46. 64 29
      lib/mapping/MapFormatH3M.cpp
  47. 2 0
      lib/mapping/MapFormatH3M.h
  48. 454 140
      lib/mapping/MapFormatJson.cpp
  49. 12 8
      lib/mapping/MapFormatJson.h
  50. 3 3
      lib/rmg/CRmgTemplateZone.cpp
  51. 1 1
      lib/serializer/CSerializer.h
  52. 111 29
      lib/serializer/JsonDeserializer.cpp
  53. 10 6
      lib/serializer/JsonDeserializer.h
  54. 127 23
      lib/serializer/JsonSerializeFormat.cpp
  55. 314 39
      lib/serializer/JsonSerializeFormat.h
  56. 72 22
      lib/serializer/JsonSerializer.cpp
  57. 10 6
      lib/serializer/JsonSerializer.h
  58. 1 1
      lib/spells/CSpellHandler.cpp
  59. 6 2
      test/CMakeLists.txt
  60. 140 34
      test/CMapFormatTest.cpp
  61. 1 1
      test/CVcmiTestConfig.cpp
  62. 204 1
      test/MapComparer.cpp
  63. 47 1
      test/MapComparer.h
  64. 367 0
      test/testdata/ObjectPropertyTest/header.json
  65. 7389 0
      test/testdata/ObjectPropertyTest/objects.ex.json
  66. 7389 0
      test/testdata/ObjectPropertyTest/objects.json
  67. 144 0
      test/testdata/ObjectPropertyTest/surface_terrain.json
  68. 144 0
      test/testdata/ObjectPropertyTest/underground_terrain.json
  69. 0 0
      test/testdata/TerrainViewTest.h3m
  70. 0 0
      test/testdata/terrainViewMappings.json

+ 6 - 0
AI/VCAI/Goals.cpp

@@ -327,6 +327,12 @@ TSubgoal Win::whatToDoToAchieve()
 			break; // Should be only used in calculation of candidates (see toBool lambda)
 		case EventCondition::CONST_VALUE:
 			break;
+
+		case EventCondition::HAVE_0:
+		case EventCondition::HAVE_BUILDING_0:
+		case EventCondition::DESTROY_0:
+			//TODO: support new condition format
+			return sptr (Goals::Conquer());
 		default:
 			assert(0);
 		}

+ 2 - 2
client/CPreGame.cpp

@@ -2512,9 +2512,9 @@ void OptionsTab::recreate()
 		entries.insert(std::make_pair(it->first, new PlayerOptionsEntry(this, it->second)));
 		const std::vector<SHeroName> &heroes = SEL->current->mapHeader->players[it->first.getNum()].heroesNames;
 		for(auto & heroe : heroes)
-			usedHeroes.insert(heroe.heroId);
+			if(heroe.heroId >= 0)//in VCMI map format heroId = -1 means random hero
+				usedHeroes.insert(heroe.heroId);
 	}
-
 }
 
 void OptionsTab::setTurnLength( int npos )

+ 69 - 0
config/factions/random.json

@@ -0,0 +1,69 @@
+{
+	"random":
+	{
+        "index": -1,
+        "town":
+		{
+			"mapObject" :
+			{
+				"templates" :
+				{
+					"castle" :  { "editorAnimation" : "AVCRANX0.def" },
+					"village" : { "editorAnimation" : "AVCRAND0.def" },
+					"capitol" : { "editorAnimation" : "AVCRANZ0.def" }
+				}
+			},
+			"buildings" :
+			{
+				"mageGuild1":     { "id" : 0 },
+				"mageGuild2":     { "id" : 1,  "upgrades" : "mageGuild1" },
+				"mageGuild3":     { "id" : 2,  "upgrades" : "mageGuild2" },
+				"mageGuild4":     { "id" : 3,  "upgrades" : "mageGuild3" },
+				"mageGuild5":     { "id" : 4,  "upgrades" : "mageGuild4" },
+
+				"tavern":         { "id" : 5 },
+				"shipyard":       { "id" : 6 },
+				"fort":           { "id" : 7 },
+				"citadel":        { "id" : 8,  "upgrades" : "fort" },
+				"castle":         { "id" : 9,  "upgrades" : "citadel" },
+
+
+				"villageHall":    { "id" : 10, "mode" : "auto", "produce" : { "gold": 500 } },
+				"townHall":       { "id" : 11, "upgrades" : "villageHall", "requires" : [ "tavern" ], "produce" : { "gold": 1000 } },
+				"cityHall":       { "id" : 12, "upgrades" : "townHall", "requires" : [ "allOf", [ "mageGuild1" ], [ "marketplace" ], [ "blacksmith" ] ], "produce": { "gold": 2000 } },
+				"capitol":        { "id" : 13, "upgrades" : "cityHall", "requires" : [ "castle" ], "produce" : { "gold": 4000 } },
+
+
+				"marketplace":    { "id" : 14 },
+				"resourceSilo":   { "id" : 15, "upgrades" : "marketplace" },
+				"blacksmith":     { "id" : 16 },
+
+				"horde1":         { "id" : -30, "upgrades" : "dwellingLvl1" },
+				"horde2":         { "id" : -31, "upgrades" : "dwellingLvl2" },
+				"horde3":         { "id" : -32, "upgrades" : "dwellingLvl3" },
+				"horde4":         { "id" : -33, "upgrades" : "dwellingLvl4" },
+				"horde5":         { "id" : -34, "upgrades" : "dwellingLvl5" },
+				"horde6":         { "id" : -35, "upgrades" : "dwellingLvl6" },
+				"horde7":         { "id" : -36, "upgrades" : "dwellingLvl7" },
+
+				"grail":          { "id" : 26, "mode" : "grail", "produce" : { "gold": 5000 } },
+
+				"dwellingLvl1":   { "id" : 30 },
+				"dwellingLvl2":   { "id" : 31 },
+				"dwellingLvl3":   { "id" : 32 },
+				"dwellingLvl4":   { "id" : 33 },
+				"dwellingLvl5":   { "id" : 34 },
+				"dwellingLvl6":   { "id" : 35 },
+				"dwellingLvl7":   { "id" : 36 },
+
+				"dwellingUpLvl1": { "id" : 37, "upgrades" : "dwellingLvl1" },
+				"dwellingUpLvl2": { "id" : 38, "upgrades" : "dwellingLvl2" },
+				"dwellingUpLvl3": { "id" : 39, "upgrades" : "dwellingLvl3" },
+				"dwellingUpLvl4": { "id" : 40, "upgrades" : "dwellingLvl4" },
+				"dwellingUpLvl5": { "id" : 41, "upgrades" : "dwellingLvl5" },
+				"dwellingUpLvl6": { "id" : 42, "upgrades" : "dwellingLvl6" },
+				"dwellingUpLvl7": { "id" : 43, "upgrades" : "dwellingLvl7" }
+			}
+		}
+	}
+}

+ 99 - 2
lib/CArtHandler.cpp

@@ -23,6 +23,7 @@
 
 #include "mapObjects/CObjectClassesHandler.h"
 #include "mapping/CMap.h"
+#include "serializer/JsonSerializeFormat.h"
 
 // Note: list must match entries in ArtTraits.txt
 #define ART_POS_LIST    \
@@ -1220,6 +1221,8 @@ bool CCombinedArtifactInstance::ConstituentInfo::operator==(const ConstituentInf
 	return art == rhs.art && slot == rhs.slot;
 }
 
+CArtifactSet::~CArtifactSet() = default;
+
 const CArtifactInstance* CArtifactSet::getArt(ArtifactPosition pos, bool excludeLocked /*= true*/) const
 {
 	if(const ArtSlotInfo *si = getSlot(pos))
@@ -1377,12 +1380,106 @@ void CArtifactSet::artDeserializationFix(CBonusSystemNode *node)
 			node->attachTo(elem.second.artifact);
 }
 
-void CArtifactSet::writeJson(JsonNode& json) const
+void CArtifactSet::serializeJsonArtifacts(JsonSerializeFormat & handler, const std::string & fieldName, CMap * map)
+{
+	//todo: creature and commander artifacts
+	if(handler.saving && artifactsInBackpack.empty() && artifactsWorn.empty())
+		return;
+
+	if(!handler.saving)
+	{
+		assert(map);
+		artifactsInBackpack.clear();
+		artifactsWorn.clear();
+	}
+
+	auto s = handler.enterStruct(fieldName);
+
+	switch(bearerType())
+	{
+	case ArtBearer::HERO:
+		serializeJsonHero(handler, map);
+		break;
+	case ArtBearer::CREATURE:
+		serializeJsonCreature(handler, map);
+		break;
+	case ArtBearer::COMMANDER:
+		serializeJsonCommander(handler, map);
+		break;
+	default:
+		assert(false);
+		break;
+	}
+}
+
+void CArtifactSet::serializeJsonHero(JsonSerializeFormat & handler, CMap * map)
+{
+	for(ArtifactPosition ap = ArtifactPosition::HEAD; ap < ArtifactPosition::AFTER_LAST; ap.advance(1))
+	{
+		serializeJsonSlot(handler, ap, map);
+	}
+
+	std::vector<ArtifactID> backpackTemp;
+
+	if(handler.saving)
+	{
+		backpackTemp.reserve(artifactsInBackpack.size());
+		for(const ArtSlotInfo & info : artifactsInBackpack)
+			backpackTemp.push_back(info.artifact->artType->id);
+	}
+	handler.serializeIdArray(NArtifactPosition::backpack, backpackTemp, &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
+	if(!handler.saving)
+	{
+        for(const ArtifactID & artifactID : backpackTemp)
+		{
+			auto artifact = CArtifactInstance::createArtifact(map, artifactID.toEnum());
+			auto slot = ArtifactPosition(GameConstants::BACKPACK_START + artifactsInBackpack.size());
+			if(artifact->canBePutAt(this, slot))
+				putArtifact(slot, artifact);
+		}
+	}
+}
+
+void CArtifactSet::serializeJsonCreature(JsonSerializeFormat & handler, CMap * map)
 {
+	logGlobal->error("CArtifactSet::serializeJsonCreature not implemented");
+}
 
+void CArtifactSet::serializeJsonCommander(JsonSerializeFormat & handler, CMap * map)
+{
+	logGlobal->error("CArtifactSet::serializeJsonCommander not implemented");
 }
 
-void CArtifactSet::readJson(const JsonNode& json)
+void CArtifactSet::serializeJsonSlot(JsonSerializeFormat & handler, const ArtifactPosition & slot, CMap * map)
 {
+	ArtifactID artifactID;
+
+	if(handler.saving)
+	{
+		const ArtSlotInfo * info = getSlot(slot);
+
+		if(info != nullptr && !info->locked)
+		{
+			artifactID = info->artifact->artType->id;
+			handler.serializeId(NArtifactPosition::namesHero[slot.num], artifactID, ArtifactID::NONE, &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
+		}
+	}
+	else
+	{
+		handler.serializeId(NArtifactPosition::namesHero[slot.num], artifactID, ArtifactID::NONE, &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
 
+		if(artifactID != ArtifactID::NONE)
+		{
+			auto artifact = CArtifactInstance::createArtifact(map, artifactID.toEnum());
+
+			if(artifact->canBePutAt(this, slot))
+			{
+				putArtifact(slot, artifact);
+			}
+			else
+			{
+				logGlobal->debugStream() << "Artifact can't be put at the specified location."; //TODO add more debugging information
+			}
+		}
+	}
 }

+ 11 - 4
lib/CArtHandler.h

@@ -25,6 +25,7 @@ class CArtifactSet;
 class CArtifactInstance;
 class CRandomGenerator;
 class CMap;
+class JsonSerializeFormat;
 
 #define ART_BEARER_LIST \
 	ART_BEARER(HERO)\
@@ -322,7 +323,8 @@ public:
 	bool isPositionFree(ArtifactPosition pos, bool onlyLockCheck = false) const;
 
 	virtual ArtBearer::ArtBearer bearerType() const = 0;
-	virtual ~CArtifactSet() = default;
+	virtual void putArtifact(ArtifactPosition pos, CArtifactInstance * art) = 0;
+	virtual ~CArtifactSet();
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
@@ -331,10 +333,15 @@ public:
 
 	void artDeserializationFix(CBonusSystemNode *node);
 
+	void serializeJsonArtifacts(JsonSerializeFormat & handler, const std::string & fieldName, CMap * map);
 protected:
-	void writeJson(JsonNode & json) const;
-	void readJson(const JsonNode & json);
 
-protected:
+
 	std::pair<const CCombinedArtifactInstance *, const CArtifactInstance *> searchForConstituent(int aid) const;
+private:
+	void serializeJsonHero(JsonSerializeFormat & handler, CMap * map);
+	void serializeJsonCreature(JsonSerializeFormat & handler, CMap * map);
+	void serializeJsonCommander(JsonSerializeFormat & handler, CMap * map);
+
+	void serializeJsonSlot(JsonSerializeFormat & handler, const ArtifactPosition & slot, CMap * map);//normal slots
 };

+ 14 - 0
lib/CCreatureHandler.cpp

@@ -460,6 +460,20 @@ std::vector<bool> CCreatureHandler::getDefaultAllowed() const
 	return ret;
 }
 
+si32 CCreatureHandler::decodeCreature(const std::string& identifier)
+{
+	auto rawId = VLC->modh->identifiers.getIdentifier("core", "creature", identifier);
+	if(rawId)
+		return rawId.get();
+	else
+		return -1;
+}
+
+std::string CCreatureHandler::encodeCreature(const si32 index)
+{
+	return VLC->creh->creatures[index]->identifier;
+}
+
 void CCreatureHandler::loadCrExpBon()
 {
 	if (VLC->modh->modules.STACK_EXP) 	//reading default stack experience bonuses

+ 6 - 0
lib/CCreatureHandler.h

@@ -216,6 +216,12 @@ public:
 
 	std::vector<bool> getDefaultAllowed() const override;
 
+	///json serialization helper
+	static si32 decodeCreature(const std::string & identifier);
+
+	///json serialization helper
+	static std::string encodeCreature(const si32 index);
+
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
 		//TODO: should be optimized, not all these informations needs to be serialized (same for ccreature)

+ 79 - 32
lib/CCreatureSet.cpp

@@ -12,6 +12,7 @@
 #include "CHeroHandler.h"
 #include "IBonusTypeHandler.h"
 #include "serializer/JsonSerializeFormat.h"
+#include "NetPacksBase.h"
 
 /*
  * CCreatureSet.cpp, part of VCMI engine
@@ -483,31 +484,46 @@ void CCreatureSet::armyChanged()
 
 }
 
-void CCreatureSet::serializeJson(JsonSerializeFormat & handler, const std::string & fieldName)
+void CCreatureSet::serializeJson(JsonSerializeFormat & handler, const std::string & fieldName, const boost::optional<int> fixedSize)
 {
 	if(handler.saving && stacks.empty())
 		return;
-	JsonNode & json = handler.getCurrent()[fieldName];
+
+	auto a = handler.enterArray(fieldName);
+
 
 	if(handler.saving)
 	{
+		size_t sz = 0;
+
+		for(const auto & p : stacks)
+			vstd::amax(sz, p.first.getNum()+1);
+
+		if(fixedSize)
+			vstd::amax(sz, fixedSize.get());
+
+		a.resize(sz, JsonNode::DATA_STRUCT);
+
 		for(const auto & p : stacks)
 		{
-			JsonNode stack_node;
-			p.second->writeJson(stack_node);
-			json.Vector()[p.first.getNum()] = stack_node;
+			auto s = a.enterStruct(p.first.getNum());
+			p.second->serializeJson(handler);
 		}
 	}
 	else
 	{
-		for(size_t idx = 0; idx < json.Vector().size(); idx++)
+		for(size_t idx = 0; idx < a.size(); idx++)
 		{
-			if(json.Vector()[idx]["amount"].Float() > 0)
-			{
-				CStackInstance * new_stack = new CStackInstance();
+			auto s = a.enterStruct(idx);
+
+			TQuantity amount = 0;
 
-				new_stack->readJson(json.Vector()[idx]);
+			handler.serializeInt("amount", amount);
 
+			if(amount > 0)
+			{
+				CStackInstance * new_stack = new CStackInstance();
+				new_stack->serializeJson(handler);
 				putStack(SlotID(idx), new_stack);
 			}
 		}
@@ -624,7 +640,8 @@ void CStackInstance::setType(const CCreature *c)
 			experience *= VLC->creh->expAfterUpgrade / 100.0;
 	}
 
-	type = c;
+	CStackBasicDescriptor::setType(c);
+
 	if(type)
 		attachTo(const_cast<CCreature*>(type));
 }
@@ -733,23 +750,43 @@ ArtBearer::ArtBearer CStackInstance::bearerType() const
 	return ArtBearer::CREATURE;
 }
 
-void CStackInstance::writeJson(JsonNode& json) const
+void CStackInstance::putArtifact(ArtifactPosition pos, CArtifactInstance * art)
 {
-	if(idRand > -1)
-	{
-		json["level"].Float() = (int)idRand / 2;
-		json["upgraded"].Bool() = (idRand % 2) > 0;
-	}
-	CStackBasicDescriptor::writeJson(json);
+	assert(!getArt(pos));
+	art->putAt(ArtifactLocation(this, pos));
 }
 
-void CStackInstance::readJson(const JsonNode& json)
+void CStackInstance::serializeJson(JsonSerializeFormat & handler)
 {
-	if(json["type"].String() == "")
+	//todo: artifacts
+	CStackBasicDescriptor::serializeJson(handler);//must be first
+
+	if(handler.saving)
+	{
+		if(idRand > -1)
+		{
+			int level = (int)idRand / 2;
+
+			boost::logic::tribool upgraded = (idRand % 2) > 0;
+
+			handler.serializeInt("level", level, 0);
+			handler.serializeBool("upgraded", upgraded);
+		}
+	}
+	else
 	{
-		idRand = json["level"].Float() * 2 + (int)json["upgraded"].Bool();
+		//type set by CStackBasicDescriptor::serializeJson
+		if(type == nullptr)
+		{
+			int level = 0;
+			bool upgraded = false;
+
+			handler.serializeInt("level", level, 0);
+			handler.serializeBool("upgraded", upgraded);
+
+			idRand = level * 2 + (int)(bool)upgraded;
+		}
 	}
-	CStackBasicDescriptor::readJson(json);
 }
 
 CCommanderInstance::CCommanderInstance()
@@ -844,20 +881,30 @@ CStackBasicDescriptor::CStackBasicDescriptor(const CCreature *c, TQuantity Count
 {
 }
 
-void CStackBasicDescriptor::writeJson(JsonNode& json) const
+void CStackBasicDescriptor::setType(const CCreature * c)
 {
-	json.setType(JsonNode::DATA_STRUCT);
-	if(type)
-		json["type"].String() = type->identifier;
-	json["amount"].Float() = count;
+	type = c;
 }
 
-void CStackBasicDescriptor::readJson(const JsonNode& json)
+void CStackBasicDescriptor::serializeJson(JsonSerializeFormat & handler)
 {
-	auto typeName = json["type"].String();
-	if(typeName != "")
-		type = VLC->creh->getCreature("core", json["type"].String());
-	count = json["amount"].Float();
+	handler.serializeInt("amount", count);
+
+	if(handler.saving)
+	{
+		if(type)
+		{
+			std::string typeName = type->identifier;
+			handler.serializeString("type", typeName);
+		}
+	}
+	else
+	{
+		std::string typeName("");
+		handler.serializeString("type", typeName);
+		if(typeName != "")
+			setType(VLC->creh->getCreature("core", typeName));
+	}
 }
 
 DLL_LINKAGE std::ostream & operator<<(std::ostream & str, const CStackInstance & sth)

+ 7 - 8
lib/CCreatureSet.h

@@ -32,14 +32,14 @@ public:
 	CStackBasicDescriptor(const CCreature *c, TQuantity Count);
 	virtual ~CStackBasicDescriptor() = default;
 
+	virtual void setType(const CCreature * c);
+
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
 		h & type & count;
 	}
 
-	void writeJson(JsonNode & json) const;
-
-	void readJson(const JsonNode & json);
+	void serializeJson(JsonSerializeFormat & handler);
 };
 
 class DLL_LINKAGE CStackInstance : public CBonusSystemNode, public CStackBasicDescriptor, public CArtifactSet
@@ -65,9 +65,7 @@ public:
 		BONUS_TREE_DESERIALIZATION_FIX
 	}
 
-	void writeJson(JsonNode & json) const;
-
-	void readJson(const JsonNode & json);
+	void serializeJson(JsonSerializeFormat & handler);
 
 	//overrides CBonusSystemNode
 	std::string bonusToString(const std::shared_ptr<Bonus>& bonus, bool description) const override; // how would bonus description look for this particular type of node
@@ -88,10 +86,11 @@ public:
 	virtual ~CStackInstance();
 
 	void setType(CreatureID creID);
-	void setType(const CCreature *c);
+	void setType(const CCreature * c) override;
 	void setArmyObj(const CArmedInstance *ArmyObj);
 	virtual void giveStackExp(TExpType exp);
 	bool valid(bool allowUnrandomized) const;
+	void putArtifact(ArtifactPosition pos, CArtifactInstance * art) override;//from CArtifactSet
 	ArtBearer::ArtBearer bearerType() const override; //from CArtifactSet
 	virtual std::string nodeName() const override; //from CBonusSystemnode
 	void deserializationFix();
@@ -222,7 +221,7 @@ public:
 		h & stacks & formation;
 	}
 
-	void serializeJson(JsonSerializeFormat & handler, const std::string & fieldName);
+	void serializeJson(JsonSerializeFormat & handler, const std::string & fieldName, const boost::optional<int> fixedSize = boost::none);
 
 	operator bool() const
 	{

+ 10 - 2
lib/CGameInfoCallback.cpp

@@ -99,8 +99,16 @@ const CTown * CGameInfoCallback::getNativeTown(PlayerColor color) const
 
 const CGObjectInstance * CGameInfoCallback::getObjByQuestIdentifier(int identifier) const
 {
-	ERROR_RET_VAL_IF(!vstd::contains(gs->map->questIdentifierToId, identifier), "There is no object with such quest identifier!", nullptr);
-	return getObj(gs->map->questIdentifierToId[identifier]);
+	if(gs->map->questIdentifierToId.empty())
+	{
+		//assume that it is VCMI map and quest identifier equals instance identifier
+		return getObj(ObjectInstanceID(identifier), true);
+	}
+	else
+	{
+		ERROR_RET_VAL_IF(!vstd::contains(gs->map->questIdentifierToId, identifier), "There is no object with such quest identifier!", nullptr);
+		return getObj(gs->map->questIdentifierToId[identifier]);
+	}
 }
 
 /************************************************************************/

+ 62 - 17
lib/CGameState.cpp

@@ -510,8 +510,29 @@ std::pair<Obj,int> CGameState::pickObject (CGObjectInstance *obj)
 			if (auto info = dynamic_cast<CCreGenAsCastleInfo*>(dwl->info))
 			{
 				faction = getRandomGenerator().nextInt(VLC->townh->factions.size() - 1);
-				if (info->asCastle)
+				if(info->asCastle && info->instanceId != "")
 				{
+					auto iter = map->instanceNames.find(info->instanceId);
+
+					if(iter == map->instanceNames.end())
+						logGlobal->errorStream() << "Map object not found: " << info->instanceId;
+					else
+					{
+						auto elem = iter->second;
+						if(elem->ID==Obj::RANDOM_TOWN)
+						{
+							randomizeObject(elem.get()); //we have to randomize the castle first
+							faction = elem->subID;
+						}
+						else if(elem->ID==Obj::TOWN)
+							faction = elem->subID;
+						else
+							logGlobal->errorStream() << "Map object must be town: " << info->instanceId;
+					}
+				}
+				else if(info->asCastle)
+				{
+
 					for(auto & elem : map->objects)
 					{
 						if(!elem)
@@ -534,12 +555,16 @@ std::pair<Obj,int> CGameState::pickObject (CGObjectInstance *obj)
 				}
 				else
 				{
-					while(!(info->castles[0]&(1<<faction)))
-					{
-						if((faction>7) && (info->castles[1]&(1<<(faction-8))))
-							break;
-						faction = getRandomGenerator().nextInt(GameConstants::F_NUMBER - 1);
-					}
+					std::set<int> temp;
+
+					for(int i = 0; i < info->allowedFactions.size(); i++)
+						if(info->allowedFactions[i])
+							temp.insert(i);
+
+					if(temp.empty())
+						logGlobal->error("Random faction selection failed. Nothing is allowed. Fall back to random.");
+					else
+						faction = *RandomGeneratorUtil::nextItem(temp, getRandomGenerator());
 				}
 			}
 			else // castle alignment fixed
@@ -1119,7 +1144,7 @@ void CGameState::placeCampaignHeroes()
 
 				hero->subID = heroTypeId;
 				hero->portrait = hero->subID;
-				map->getEditManager()->insertObject(hero, hero->pos);
+				map->getEditManager()->insertObject(hero);
 			}
 		}
 	}
@@ -1127,10 +1152,11 @@ void CGameState::placeCampaignHeroes()
 
 void CGameState::placeStartingHero(PlayerColor playerColor, HeroTypeID heroTypeId, int3 townPos)
 {
-	townPos.x += 1;
+	townPos.x -= 2; //FIXME: use actual visitable offset of town
 
-	CGHeroInstance * hero =  static_cast<CGHeroInstance*>(createObject(Obj::HERO, heroTypeId.getNum(), townPos, playerColor));
-	map->getEditManager()->insertObject(hero, townPos);
+	CGObjectInstance * hero = createObject(Obj::HERO, heroTypeId.getNum(), townPos, playerColor);
+	hero->pos += hero->getVisitableOffset();
+	map->getEditManager()->insertObject(hero);
 }
 
 CGameState::CrossoverHeroesList CGameState::getCrossoverHeroesFromPreviousScenarios() const
@@ -1651,7 +1677,7 @@ void CGameState::initTowns()
 					PlayerInfo & pi = map->players[owner->color.getNum()];
 
 					if (owner->human && //human-owned
-						map->towns[g]->pos == pi.posOfMainTown + int3(2, 0, 0))
+						map->towns[g]->pos == pi.posOfMainTown)
 					{
 						map->towns[g]->builtBuildings.insert(
 							CBuildingHandler::campToERMU(chosenBonus->info1, map->towns[g]->subID, map->towns[g]->builtBuildings));
@@ -2351,9 +2377,28 @@ bool CGameState::checkForVictory(PlayerColor player, const EventCondition & cond
 		{
 			return condition.value; // just convert to bool
 		}
+		case EventCondition::HAVE_0:
+		{
+			logGlobal->debug("Not implemented event condition type: %d", (int)condition.condition);
+			//TODO: support new condition format
+			return false;
+		}
+		case EventCondition::HAVE_BUILDING_0:
+		{
+			logGlobal->debug("Not implemented event condition type: %d", (int)condition.condition);
+			//TODO: support new condition format
+			return false;
+		}
+		case EventCondition::DESTROY_0:
+		{
+			logGlobal->debug("Not implemented event condition type: %d", (int)condition.condition);
+			//TODO: support new condition format
+			return false;
+		}
+		default:
+			logGlobal->error("Invalid event condition type: %d", (int)condition.condition);
+			return false;
 	}
-	assert(0);
-	return false;
 }
 
 PlayerColor CGameState::checkForStandardWin() const
@@ -3126,7 +3171,7 @@ DuelParameters DuelParameters::fromJSON(const std::string &fname)
 			i++;
 		}
 
-		if(n["heroid"].getType() == JsonNode::DATA_FLOAT)
+		if(n["heroid"].isNumber())
 			ss.heroId = n["heroid"].Float();
 		else
 			ss.heroId = -1;
@@ -3169,7 +3214,7 @@ DuelParameters DuelParameters::fromJSON(const std::string &fname)
 		}
 		else
 		{
-			assert(n.getType() == JsonNode::DATA_FLOAT);
+			assert(n.isNumber());
 			oi->ID = 21;
 			oi->pos = n.Float();
 		}
@@ -3183,7 +3228,7 @@ DuelParameters DuelParameters::fromJSON(const std::string &fname)
 		cc.id = n["id"].Float();
 
 #define retrieve(name)								\
-	if(n[ #name ].getType() == JsonNode::DATA_FLOAT)\
+	if(n[ #name ].isNumber())\
 	cc.name = n[ #name ].Float();			\
 	else											\
 	cc.name = -1;

+ 2 - 1
lib/CHeroHandler.cpp

@@ -281,6 +281,7 @@ CHeroHandler::CHeroHandler()
 	for (int i = 0; i < GameConstants::SKILL_QUANTITY; ++i)
 	{
 		VLC->modh->identifiers.registerObject("core", "skill", NSecondarySkill::names[i], i);
+		VLC->modh->identifiers.registerObject("core", "secondarySkill", NSecondarySkill::names[i], i);
 	}
 	loadObstacles();
 	loadTerrains();
@@ -542,7 +543,7 @@ void CHeroHandler::loadObject(std::string scope, std::string name, const JsonNod
 {
 	auto object = loadFromJson(data, normalizeIdentifier(scope, "core", name));
 	object->ID = HeroTypeID(heroes.size());
-	object->imageIndex = heroes.size() + 30; // 2 special frames + some extra portraits
+	object->imageIndex = heroes.size() + GameConstants::HERO_PORTRAIT_SHIFT; // 2 special frames + some extra portraits
 
 	heroes.push_back(object);
 

+ 65 - 3
lib/CModHandler.cpp

@@ -181,6 +181,20 @@ boost::optional<si32> CIdentifierStorage::getIdentifier(const JsonNode & name, b
 	return boost::optional<si32>();
 }
 
+boost::optional<si32> CIdentifierStorage::getIdentifier(std::string scope, std::string fullName, bool silent)
+{
+	auto pair  = splitString(fullName, ':'); // remoteScope:<type.name>
+	auto pair2 = splitString(pair.second,   '.'); // type.name
+	auto idList = getPossibleIdentifiers(ObjectCallback(scope, pair.first, pair2.first, pair2.second, std::function<void(si32)>(), silent));
+
+	if (idList.size() == 1)
+		return idList.front().id;
+	if (!silent)
+		logGlobal->errorStream() << "Failed to resolve identifier " << fullName << " of type " << pair2.first << " from mod " << scope;
+
+	return boost::optional<si32>();
+}
+
 void CIdentifierStorage::registerObject(std::string scope, std::string type, std::string name, si32 identifier)
 {
 	ObjectData data;
@@ -387,6 +401,12 @@ bool CContentHandler::ContentTypeHandler::loadMod(std::string modName, bool vali
 	return result;
 }
 
+
+void CContentHandler::ContentTypeHandler::loadCustom()
+{
+	handler->loadCustom();
+}
+
 void CContentHandler::ContentTypeHandler::afterLoadFinalization()
 {
 	handler->afterLoadFinalization();
@@ -426,6 +446,14 @@ bool CContentHandler::loadMod(std::string modName, bool validate)
 	return result;
 }
 
+void CContentHandler::loadCustom()
+{
+	for(auto & handler : handlers)
+	{
+		handler.second.loadCustom();
+	}
+}
+
 void CContentHandler::afterLoadFinalization()
 {
 	for(auto & handler : handlers)
@@ -574,8 +602,10 @@ CModHandler::CModHandler()
 	}
 
 	for(int i=0; i<GameConstants::PRIMARY_SKILLS; ++i)
+	{
 		identifiers.registerObject("core", "primSkill", PrimarySkill::names[i], i);
-
+		identifiers.registerObject("core", "primarySkill", PrimarySkill::names[i], i);
+	}
 }
 
 CModHandler::~CModHandler()
@@ -918,6 +948,8 @@ void CModHandler::load()
 	for(const TModID & modName : activeMods)
 		content.load(allMods[modName]);
 
+	content.loadCustom();
+
 	logGlobal->infoStream() << "\tLoading mod data: " << timer.getDiff() << "ms";
 
 	VLC->creh->loadCrExpBon();
@@ -946,7 +978,7 @@ void CModHandler::afterLoad()
 	file << modSettings;
 }
 
-std::string CModHandler::normalizeIdentifier(const std::string & scope, const std::string & remoteScope, const std::string & identifier) const
+std::string CModHandler::normalizeIdentifier(const std::string & scope, const std::string & remoteScope, const std::string & identifier)
 {
 	auto p = splitString(identifier, ':');
 
@@ -956,5 +988,35 @@ std::string CModHandler::normalizeIdentifier(const std::string & scope, const st
 	if(p.first == remoteScope)
 		p.first.clear();
 
-	return p.first.empty() ? p.second : p.first +":"+p.second;
+	return p.first.empty() ? p.second : p.first + ":" + p.second;
+}
+
+void CModHandler::parseIdentifier(const std::string & fullIdentifier, std::string & scope, std::string & type, std::string & identifier)
+{
+	auto p = splitString(fullIdentifier, ':');
+
+	scope = p.first;
+
+	auto p2 = splitString(p.second, '.');
+
+	if(p2.first != "")
+	{
+		type = p2.first;
+		identifier = p2.second;
+	}
+	else
+	{
+		type = p.second;
+		identifier = "";
+	}
+}
+
+std::string CModHandler::makeFullIdentifier(const std::string & scope, const std::string & type, const std::string & identifier)
+{
+	auto p = splitString(identifier, ':');
+
+	if(p.first != "")
+		return p.first + ":" + type + "." + p.second;//ignore type if identifier is scoped
+	else
+		return scope == "" ? (identifier == "" ? type : type + "." + identifier) : scope + ":" + type + "." + identifier;
 }

+ 9 - 1
lib/CModHandler.h

@@ -89,6 +89,7 @@ public:
 	boost::optional<si32> getIdentifier(std::string scope, std::string type, std::string name, bool silent = false);
 	boost::optional<si32> getIdentifier(std::string type, const JsonNode & name, bool silent = false);
 	boost::optional<si32> getIdentifier(const JsonNode & name, bool silent = false);
+	boost::optional<si32> getIdentifier(std::string scope, std::string fullName, bool silent = false);
 
 	/// registers new object
 	void registerObject(std::string scope, std::string type, std::string name, si32 identifier);
@@ -132,6 +133,7 @@ class CContentHandler
 		/// returns true if loading was successful
 		bool preloadModData(std::string modName, std::vector<std::string> fileList, bool validate);
 		bool loadMod(std::string modName, bool validate);
+		void loadCustom();
 		void afterLoadFinalization();
 	};
 
@@ -152,6 +154,8 @@ public:
 	/// actually loads data in mod
 	void load(CModInfo & mod);
 
+	void loadCustom();
+
 	/// all data was loaded, time for final validation / integration
 	void afterLoadFinalization();
 };
@@ -297,7 +301,11 @@ public:
 	CModHandler();
 	virtual ~CModHandler();
 
-	std::string normalizeIdentifier(const std::string & scope, const std::string & remoteScope, const std::string & identifier) const;
+	static std::string normalizeIdentifier(const std::string & scope, const std::string & remoteScope, const std::string & identifier);
+
+	static void parseIdentifier(const std::string & fullIdentifier, std::string & scope, std::string & type, std::string & identifier);
+
+	static std::string makeFullIdentifier(const std::string & scope, const std::string & type, const std::string & identifier);
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{

+ 66 - 18
lib/CTownHandler.cpp

@@ -82,7 +82,7 @@ CFaction::~CFaction()
 CTown::CTown()
 	: faction(nullptr), mageLevel(0), primaryRes(0), moatDamage(0), defaultTavernChance(0)
 {
-
+	faction = nullptr;
 }
 
 CTown::~CTown()
@@ -100,13 +100,47 @@ std::vector<BattleHex> CTown::defaultMoatHexes()
 	return moatHexes;
 }
 
+std::string CTown::getFactionName() const
+{
+	if(faction == nullptr)
+		return "Random";
+	else
+		return faction->name;
+}
+
+std::string CTown::getBuildingScope() const
+{
+	if(faction == nullptr)
+		//no faction == random faction
+		return "building";
+	else
+		return "building." + faction->identifier;
+}
+
+std::set<si32> CTown::getAllBuildings() const
+{
+	std::set<si32> res;
+
+	for(const auto & b : buildings)
+	{
+		res.insert(b.first.num);
+	}
+
+	return std::move(res);
+}
+
+
 CTownHandler::CTownHandler()
 {
 	VLC->townh = this;
+
+	randomTown = new CTown();
 }
 
 CTownHandler::~CTownHandler()
 {
+	delete randomTown;
+
 	for(auto faction : factions)
 		faction.dellNull();
 }
@@ -120,8 +154,6 @@ JsonNode readBuilding(CLegacyConfigParser & parser)
 	for(const std::string & resID : GameConstants::RESOURCE_NAMES)
 		cost[resID].Float() = parser.readNumber();
 
-
-
 	cost.Struct().erase("mithril"); // erase mithril to avoid confusing validator
 
 	parser.endLine();
@@ -283,28 +315,28 @@ std::vector<JsonNode> CTownHandler::loadLegacyData(size_t dataSize)
 	return dest;
 }
 
-void CTownHandler::loadBuildingRequirements(CTown &town, CBuilding & building, const JsonNode & source)
+void CTownHandler::loadBuildingRequirements(CBuilding * building, const JsonNode & source)
 {
 	if (source.isNull())
 		return;
 
 	BuildingRequirementsHelper hlp;
-	hlp.building = &building;
-	hlp.faction  = town.faction;
+	hlp.building = building;
+	hlp.town = building->town;
 	hlp.json = source;
 	requirementsToLoad.push_back(hlp);
 }
 
-void CTownHandler::loadBuilding(CTown &town, const std::string & stringID, const JsonNode & source)
+void CTownHandler::loadBuilding(CTown * town, const std::string & stringID, const JsonNode & source)
 {
-	auto  ret = new CBuilding;
+	auto ret = new CBuilding;
 
 	static const std::string modes [] = {"normal", "auto", "special", "grail"};
 
 	ret->mode = static_cast<CBuilding::EBuildMode>(boost::find(modes, source["mode"].String()) - modes);
 
 	ret->identifier = stringID;
-	ret->town = &town;
+	ret->town = town;
 	ret->bid = BuildingID(source["id"].Float());
 	ret->name = source["name"].String();
 	ret->description = source["description"].String();
@@ -339,7 +371,7 @@ void CTownHandler::loadBuilding(CTown &town, const std::string & stringID, const
 		}
 	}
 
-	loadBuildingRequirements(town, *ret, source["requires"]);
+	loadBuildingRequirements(ret, source["requires"]);
 
 	if (!source["upgrades"].isNull())
 	{
@@ -347,10 +379,10 @@ void CTownHandler::loadBuilding(CTown &town, const std::string & stringID, const
 		if(stringID == source["upgrades"].String())
 		{
 			throw std::runtime_error(boost::str(boost::format("Building with ID '%s' of town '%s' can't be an upgrade of the same building.") %
-												stringID % town.faction->name));
+												stringID % ret->town->getFactionName()));
 		}
 
-		VLC->modh->identifiers.requestIdentifier("building." + town.faction->identifier, source["upgrades"], [=](si32 identifier)
+		VLC->modh->identifiers.requestIdentifier(ret->town->getBuildingScope(), source["upgrades"], [=](si32 identifier)
 		{
 			ret->upgrade = BuildingID(identifier);
 		});
@@ -358,13 +390,14 @@ void CTownHandler::loadBuilding(CTown &town, const std::string & stringID, const
 	else
 		ret->upgrade = BuildingID::NONE;
 
-	town.buildings[ret->bid] = ret;
-	VLC->modh->identifiers.registerObject(source.meta, "building." + town.faction->identifier, ret->identifier, ret->bid);
+	ret->town->buildings[ret->bid] = ret;
+
+	VLC->modh->identifiers.registerObject(source.meta, ret->town->getBuildingScope(), ret->identifier, ret->bid);
 }
 
-void CTownHandler::loadBuildings(CTown &town, const JsonNode & source)
+void CTownHandler::loadBuildings(CTown * town, const JsonNode & source)
 {
-	for(auto &node : source.Struct())
+	for(auto & node : source.Struct())
 	{
 		if (!node.second.isNull())
 		{
@@ -624,7 +657,7 @@ void CTownHandler::loadTown(CTown &town, const JsonNode & source)
 		town.dwellingNames.push_back (d["name"].String());
 	}
 
-	loadBuildings(town, source["buildings"]);
+	loadBuildings(&town, source["buildings"]);
 	loadClientData(town,source);
 }
 
@@ -756,6 +789,20 @@ void CTownHandler::loadObject(std::string scope, std::string name, const JsonNod
 	VLC->modh->identifiers.registerObject(scope, "faction", name, object->index);
 }
 
+void CTownHandler::loadRandomFaction()
+{
+	static const ResourceID randomFactionPath("config/factions/random.json");
+
+	JsonNode randomFactionJson(randomFactionPath);
+	randomFactionJson.setMeta("core", true);
+	loadBuildings(randomTown, randomFactionJson["random"]["town"]["buildings"]);
+}
+
+void CTownHandler::loadCustom()
+{
+    loadRandomFaction();
+}
+
 void CTownHandler::afterLoadFinalization()
 {
 	initializeRequirements();
@@ -773,7 +820,7 @@ void CTownHandler::initializeRequirements()
 				logGlobal->warnStream() << "Unexpected length of town buildings requirements: " << node.Vector().size();
 				logGlobal->warnStream() << "Entry contains " << node;
 			}
-			return BuildingID(VLC->modh->identifiers.getIdentifier("building." + requirement.faction->identifier, node.Vector()[0]).get());
+			return BuildingID(VLC->modh->identifiers.getIdentifier(requirement.town->getBuildingScope(), node.Vector()[0]).get());
 		});
 	}
 	requirementsToLoad.clear();
@@ -788,6 +835,7 @@ std::vector<bool> CTownHandler::getDefaultAllowed() const
 	}
 	return allowedFactions;
 }
+
 std::set<TFaction> CTownHandler::getAllowedFactions(bool withTown /*=true*/) const
 {
 	std::set<TFaction> allowedFactions;

+ 21 - 14
lib/CTownHandler.h

@@ -143,6 +143,10 @@ public:
 	// TODO: remove once save and mod compatability not needed
 	static std::vector<BattleHex> defaultMoatHexes();
 
+	std::string getFactionName() const;
+	std::string getBuildingScope() const;
+	std::set<si32> getAllBuildings() const;
+
 	CFaction * faction;
 
 	std::vector<std::string> names; //names of the town instances
@@ -222,16 +226,6 @@ public:
 			moatHexes = defaultMoatHexes();
 		}
 		h & defaultTavernChance;
-
-		auto findNull = [](const std::pair<BuildingID, ConstTransitivePtr<CBuilding>> &building)
-		{ return building.second == nullptr; };
-
-		//Fix #1444 corrupted save
-		while(auto badElem = vstd::tryFindIf(buildings, findNull))
-		{
-			logGlobal->errorStream() << "#1444-like bug encountered in CTown::serialize, fixing buildings list by removing bogus entry " << badElem->first << " from " << faction->name;
-			buildings.erase(badElem->first);
-		}
 	}
 };
 
@@ -241,16 +235,16 @@ class DLL_LINKAGE CTownHandler : public IHandlerBase
 	{
 		JsonNode json;
 		CBuilding * building;
-		CFaction * faction;
+		CTown * town;
 	};
 
 	std::vector<BuildingRequirementsHelper> requirementsToLoad;
 	void initializeRequirements();
 
 	/// loads CBuilding's into town
-	void loadBuildingRequirements(CTown &town, CBuilding & building, const JsonNode & source);
-	void loadBuilding(CTown &town, const std::string & stringID, const JsonNode & source);
-	void loadBuildings(CTown &town, const JsonNode & source);
+	void loadBuildingRequirements(CBuilding * building, const JsonNode & source);
+	void loadBuilding(CTown * town, const std::string & stringID, const JsonNode & source);
+	void loadBuildings(CTown * town, const JsonNode & source);
 
 	/// loads CStructure's into town
 	void loadStructure(CTown &town, const std::string & stringID, const JsonNode & source);
@@ -268,9 +262,12 @@ class DLL_LINKAGE CTownHandler : public IHandlerBase
 
 	CFaction * loadFromJson(const JsonNode & data, const std::string & identifier);
 
+	void loadRandomFaction();
 public:
 	std::vector<ConstTransitivePtr<CFaction> > factions;
 
+	CTown * randomTown;
+
 	CTownHandler(); //c-tor, set pointer in VLC to this
 	~CTownHandler();
 
@@ -279,6 +276,7 @@ public:
 	void loadObject(std::string scope, std::string name, const JsonNode & data) override;
 	void loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) override;
 
+	void loadCustom() override;
 	void afterLoadFinalization() override;
 
 	std::vector<bool> getDefaultAllowed() const override;
@@ -293,5 +291,14 @@ public:
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
 		h & factions;
+
+		if(version >= 770)
+		{
+			h & randomTown;
+		}
+		else if(!h.saving)
+		{
+			loadRandomFaction();
+		}
 	}
 };

+ 23 - 2
lib/GameConstants.h

@@ -54,11 +54,14 @@ namespace GameConstants
 	const int CREATURES_COUNT = 197;
 
 	const ui32 BASE_MOVEMENT_COST = 100; //default cost for non-diagonal movement
+
+	const int HERO_PORTRAIT_SHIFT = 30;// 2 special frames + some extra portraits
 }
 
 class CArtifact;
 class CArtifactInstance;
 class CCreature;
+class CHero;
 class CSpell;
 class CGameInfoCallback;
 class CNonConstInfoCallback;
@@ -203,7 +206,6 @@ class ArtifactInstanceID : public BaseForID<ArtifactInstanceID, si32>
 	friend class CNonConstInfoCallback;
 };
 
-
 class QueryID : public BaseForID<QueryID, si32>
 {
 	INSTID_LIKE_CLASS_COMMON(QueryID, si32)
@@ -223,7 +225,6 @@ class ObjectInstanceID : public BaseForID<ObjectInstanceID, si32>
 	friend class CNonConstInfoCallback;
 };
 
-
 class HeroTypeID : public BaseForID<HeroTypeID, si32>
 {
 	INSTID_LIKE_CLASS_COMMON(HeroTypeID, si32)
@@ -1067,6 +1068,26 @@ enum class ESpellSchool: ui8
 	EARTH 	= 3
 };
 
+enum class EMetaclass: ui8
+{
+	INVALID = 0,
+	ARTIFACT,
+	CREATURE,
+	FACTION,
+	EXPERIENCE,
+	HERO,
+	HEROCLASS,
+	LUCK,
+	MANA,
+	MORALE,
+	MOVEMENT,
+	OBJECT,
+	PRIMARY_SKILL,
+	SECONDARY_SKILL,
+	SPELL,
+	RESOURCE
+};
+
 // Typedef declarations
 typedef ui8 TFaction;
 typedef si64 TExpType;

+ 1 - 2
lib/IGameCallback.h

@@ -51,7 +51,7 @@ public:
 	virtual void setBlockVis(ObjectInstanceID objid, bool bv)=0;
 	virtual void setOwner(const CGObjectInstance * objid, PlayerColor owner)=0;
 	virtual void changePrimSkill(const CGHeroInstance * hero, PrimarySkill::PrimarySkill which, si64 val, bool abs=false)=0;
-	virtual void changeSecSkill(const CGHeroInstance * hero, SecondarySkill which, int val, bool abs=false)=0; 
+	virtual void changeSecSkill(const CGHeroInstance * hero, SecondarySkill which, int val, bool abs=false)=0;
 	virtual void showBlockingDialog(BlockingDialog *iw) =0;
 	virtual void showGarrisonDialog(ObjectInstanceID upobj, ObjectInstanceID hid, bool removableUnits) =0; //cb will be called when player closes garrison window
 	virtual void showTeleportDialog(TeleportDialog *iw) =0;
@@ -94,7 +94,6 @@ public:
 	virtual void changeObjPos(ObjectInstanceID objid, int3 newPos, ui8 flags)=0;
 	virtual void sendAndApply(CPackForClient * info)=0;
 	virtual void heroExchange(ObjectInstanceID hero1, ObjectInstanceID hero2)=0; //when two heroes meet on adventure map
-	virtual void addQuest(int player, QuestInfo & quest){};
 	virtual void changeFogOfWar(int3 center, ui32 radius, PlayerColor player, bool hide) = 0;
 	virtual void changeFogOfWar(std::unordered_set<int3, ShashInt3> &tiles, PlayerColor player, bool hide) = 0;
 };

+ 3 - 0
lib/IHandlerBase.h

@@ -39,6 +39,9 @@ public:
 	/// allows handlers to alter object configuration before validation and actual load
 	virtual void beforeValidate(JsonNode & object){};
 
+	/// allows handler to load some custom internal data before identifier finalization
+	virtual void loadCustom(){};
+
 	/// allows handler to do post-loading step for validation or integration of loaded data
 	virtual void afterLoadFinalization(){};
 

+ 82 - 20
lib/JsonDetail.cpp

@@ -60,17 +60,17 @@ void JsonWriter::writeEntry(JsonVector::const_iterator entry)
 
 void JsonWriter::writeString(const std::string &string)
 {
-	static const std::string escaped = "\"\\\b\f\n\r\t";
-	
-	static const std::array<char, 7> escaped_code = {'\"', '\\', 'b', 'f', 'n', 'r', 't'};
-	
+	static const std::string escaped = "\"\\\b\f\n\r\t/";
+
+	static const std::array<char, 8> escaped_code = {'\"', '\\', 'b', 'f', 'n', 'r', 't', '/'};
+
 	out <<'\"';
 	size_t pos=0, start=0;
 	for (; pos<string.size(); pos++)
 	{
-		//we need to check if special character was been already escaped		
-		if((string[pos] == '\\') 
-			&& (pos+1 < string.size()) 
+		//we need to check if special character was been already escaped
+		if((string[pos] == '\\')
+			&& (pos+1 < string.size())
 			&& (std::find(escaped_code.begin(), escaped_code.end(), string[pos+1]) != escaped_code.end()) )
 		{
 			pos++; //write unchanged, next simbol also checked
@@ -84,7 +84,7 @@ void JsonWriter::writeString(const std::string &string)
 				out.write(string.data()+start, pos - start);
 				out << '\\' << escaped_code[escapedPos];
 				start = pos+1;
-			}			
+			}
 		}
 
 	}
@@ -120,6 +120,8 @@ void JsonWriter::writeNode(const JsonNode &node)
 			out << "{" << "\n";
 			writeContainer(node.Struct().begin(), node.Struct().end());
 			out << prefix << "}";
+		break; case JsonNode::DATA_INTEGER:
+			out << node.Integer();
 	}
 }
 
@@ -252,6 +254,7 @@ bool JsonParser::extractEscaping(std::string &str)
 		break; case 'n': str += '\n';
 		break; case 'r': str += '\r';
 		break; case 't': str += '\t';
+		break; case '/': str += '/';
 		break; default: return error("Unknown escape sequence!", true);
 	};
 	return true;
@@ -458,6 +461,8 @@ bool JsonParser::extractFloat(JsonNode &node)
 	assert(input[pos] == '-' || (input[pos] >= '0' && input[pos] <= '9'));
 	bool negative=false;
 	double result=0;
+	si64 integerPart = 0;
+	bool isFloat = false;
 
 	if (input[pos] == '-')
 	{
@@ -471,13 +476,16 @@ bool JsonParser::extractFloat(JsonNode &node)
 	//Extract integer part
 	while (input[pos] >= '0' && input[pos] <= '9')
 	{
-		result = result*10+(input[pos]-'0');
+		integerPart = integerPart*10+(input[pos]-'0');
 		pos++;
 	}
 
+	result = integerPart;
+
 	if (input[pos] == '.')
 	{
 		//extract fractional part
+		isFloat = true;
 		pos++;
 		double fractMult = 0.1;
 		if (input[pos] < '0' || input[pos] > '9')
@@ -490,12 +498,57 @@ bool JsonParser::extractFloat(JsonNode &node)
 			pos++;
 		}
 	}
-	//TODO: exponential part
-	if (negative)
-		result = -result;
 
-	node.setType(JsonNode::DATA_FLOAT);
-	node.Float() = result;
+	if(input[pos] == 'e')
+	{
+		//extract exponential part
+		pos++;
+		isFloat = true;
+		bool powerNegative = false;
+		double power = 0;
+
+		if(input[pos] == '-')
+		{
+			pos++;
+			powerNegative = true;
+		}
+		else if(input[pos] == '+')
+		{
+			pos++;
+		}
+
+		if (input[pos] < '0' || input[pos] > '9')
+			return error("Exponential part expected!");
+
+		while (input[pos] >= '0' && input[pos] <= '9')
+		{
+			power = power*10 + (input[pos]-'0');
+			pos++;
+		}
+
+		if(powerNegative)
+			power = -power;
+
+		result *= std::pow(10, power);
+	}
+
+	if(isFloat)
+	{
+		if(negative)
+			result = -result;
+
+		node.setType(JsonNode::DATA_FLOAT);
+		node.Float() = result;
+	}
+	else
+	{
+		if(negative)
+			integerPart = -integerPart;
+
+		node.setType(JsonNode::DATA_INTEGER);
+		node.Integer() = integerPart;
+	}
+
 	return true;
 }
 
@@ -513,13 +566,15 @@ bool JsonParser::error(const std::string &message, bool warning)
 
 ///////////////////////////////////////////////////////////////////////////////
 
+//TODO: integer support
+
 static const std::unordered_map<std::string, JsonNode::JsonType> stringToType =
 {
-	{"null",   JsonNode::DATA_NULL},   
+	{"null",   JsonNode::DATA_NULL},
 	{"boolean", JsonNode::DATA_BOOL},
-	{"number", JsonNode::DATA_FLOAT},  
+	{"number", JsonNode::DATA_FLOAT},
 	{"string",  JsonNode::DATA_STRING},
-	{"array",  JsonNode::DATA_VECTOR}, 
+	{"array",  JsonNode::DATA_VECTOR},
 	{"object",  JsonNode::DATA_STRUCT}
 };
 
@@ -612,8 +667,13 @@ namespace
 			{
 				return validator.makeErrorMessage("Unknown type in schema:" + typeName);
 			}
-			
+
 			JsonNode::JsonType type = it->second;
+
+			//FIXME: hack for integer values
+			if(data.isNumber() && type == JsonNode::DATA_FLOAT)
+				return "";
+
 			if(type != data.getType() && data.getType() != JsonNode::DATA_NULL)
 				return validator.makeErrorMessage("Type mismatch! Expected " + schema.String());
 			return "";
@@ -969,7 +1029,7 @@ namespace
 				return testAnimation(node.String().substr(0, node.String().find(':')), node.meta);
 			return "Image file \"" + node.String() + "\" was not found";
 		}
-		
+
 		std::string videoFile(const JsonNode & node)
 		{
 			TEST_FILE(node.meta, "Video/", node.String(), EResType::VIDEO);
@@ -1128,7 +1188,9 @@ namespace Validation
 
 		switch (type)
 		{
-			case JsonNode::DATA_FLOAT:  return numberFields;
+			case JsonNode::DATA_FLOAT:
+			case JsonNode::DATA_INTEGER:
+				return numberFields;
 			case JsonNode::DATA_STRING: return stringFields;
 			case JsonNode::DATA_VECTOR: return vectorFields;
 			case JsonNode::DATA_STRUCT: return structFields;

+ 60 - 8
lib/JsonNode.cpp

@@ -83,11 +83,12 @@ JsonNode::JsonNode(const JsonNode &copy):
 	switch(type)
 	{
 		break; case DATA_NULL:
-		break; case DATA_BOOL:   Bool() =   copy.Bool();
-		break; case DATA_FLOAT:  Float() =  copy.Float();
-		break; case DATA_STRING: String() = copy.String();
-		break; case DATA_VECTOR: Vector() = copy.Vector();
-		break; case DATA_STRUCT: Struct() = copy.Struct();
+		break; case DATA_BOOL:   Bool()    = copy.Bool();
+		break; case DATA_FLOAT:  Float()   = copy.Float();
+		break; case DATA_STRING: String()  = copy.String();
+		break; case DATA_VECTOR: Vector()  = copy.Vector();
+		break; case DATA_STRUCT: Struct()  = copy.Struct();
+		break; case DATA_INTEGER:Integer() = copy.Integer();
 	}
 }
 
@@ -122,6 +123,7 @@ bool JsonNode::operator == (const JsonNode &other) const
 			case DATA_STRING: return String() == other.String();
 			case DATA_VECTOR: return Vector() == other.Vector();
 			case DATA_STRUCT: return Struct() == other.Struct();
+			case DATA_INTEGER:return Integer()== other.Integer();
 		}
 	}
 	return false;
@@ -167,6 +169,22 @@ void JsonNode::setType(JsonType Type)
 	if (type == Type)
 		return;
 
+	//float<->int conversion
+	if(type == DATA_FLOAT && Type == DATA_INTEGER)
+	{
+		si64 converted = data.Float;
+		type = Type;
+		data.Integer = converted;
+		return;
+	}
+	else if(type == DATA_INTEGER && Type == DATA_FLOAT)
+	{
+		double converted = data.Integer;
+		type = Type;
+		data.Float = converted;
+		return;
+	}
+
 	//Reset node to nullptr
 	if (Type != DATA_NULL)
 		setType(DATA_NULL);
@@ -189,6 +207,7 @@ void JsonNode::setType(JsonType Type)
 		break; case DATA_STRING: data.String = new std::string();
 		break; case DATA_VECTOR: data.Vector = new JsonVector();
 		break; case DATA_STRUCT: data.Struct = new JsonMap();
+		break; case DATA_INTEGER: data.Integer = 0;
 	}
 }
 
@@ -197,6 +216,11 @@ bool JsonNode::isNull() const
 	return type == DATA_NULL;
 }
 
+bool JsonNode::isNumber() const
+{
+	return type == DATA_INTEGER || type == DATA_FLOAT;
+}
+
 void JsonNode::clear()
 {
 	setType(DATA_NULL);
@@ -214,6 +238,12 @@ double & JsonNode::Float()
 	return data.Float;
 }
 
+si64 & JsonNode::Integer()
+{
+	setType(DATA_INTEGER);
+	return data.Integer;
+}
+
 std::string & JsonNode::String()
 {
 	setType(DATA_STRING);
@@ -233,7 +263,7 @@ JsonMap & JsonNode::Struct()
 }
 
 const bool boolDefault = false;
-const bool & JsonNode::Bool() const
+bool JsonNode::Bool() const
 {
 	if (type == DATA_NULL)
 		return boolDefault;
@@ -242,14 +272,29 @@ const bool & JsonNode::Bool() const
 }
 
 const double floatDefault = 0;
-const double & JsonNode::Float() const
+double JsonNode::Float() const
 {
-	if (type == DATA_NULL)
+	if(type == DATA_NULL)
 		return floatDefault;
+	else if(type == DATA_INTEGER)
+		return data.Integer;
+
 	assert(type == DATA_FLOAT);
 	return data.Float;
 }
 
+const si64 integetDefault = 0;
+si64 JsonNode::Integer() const
+{
+	if(type == DATA_NULL)
+		return integetDefault;
+	else if(type == DATA_FLOAT)
+		return data.Float;
+
+	assert(type == DATA_INTEGER);
+	return data.Integer;
+}
+
 const std::string stringDefault = std::string();
 const std::string & JsonNode::String() const
 {
@@ -385,6 +430,9 @@ void JsonUtils::resolveIdentifier(si32 &var, const JsonNode &node, std::string n
 	{
 		switch (value.getType())
 		{
+			case JsonNode::DATA_INTEGER:
+				var = value.Integer();
+				break;
 			case JsonNode::DATA_FLOAT:
 				var = value.Float();
 				break;
@@ -404,6 +452,9 @@ void JsonUtils::resolveIdentifier(const JsonNode &node, si32 &var)
 {
 	switch (node.getType())
 	{
+		case JsonNode::DATA_INTEGER:
+			var = node.Integer();
+			break;
 		case JsonNode::DATA_FLOAT:
 			var = node.Float();
 			break;
@@ -738,6 +789,7 @@ void JsonUtils::merge(JsonNode & dest, JsonNode & source)
 		}
 		case JsonNode::DATA_BOOL:
 		case JsonNode::DATA_FLOAT:
+		case JsonNode::DATA_INTEGER:
 		case JsonNode::DATA_STRING:
 		case JsonNode::DATA_VECTOR:
 		{

+ 15 - 3
lib/JsonNode.h

@@ -29,7 +29,8 @@ public:
 		DATA_FLOAT,
 		DATA_STRING,
 		DATA_VECTOR,
-		DATA_STRUCT
+		DATA_STRUCT,
+		DATA_INTEGER
 	};
 
 private:
@@ -40,6 +41,7 @@ private:
 		std::string* String;
 		JsonVector* Vector;
 		JsonMap* Struct;
+		si64 Integer;
 	};
 
 	JsonType type;
@@ -75,19 +77,24 @@ public:
 	JsonType getType() const;
 
 	bool isNull() const;
+	bool isNumber() const;
 	/// removes all data from node and sets type to null
 	void clear();
 
 	/// non-const accessors, node will change type on type mismatch
 	bool & Bool();
 	double & Float();
+	si64 & Integer();
 	std::string & String();
 	JsonVector & Vector();
 	JsonMap & Struct();
 
 	/// const accessors, will cause assertion failure on type mismatch
-	const bool & Bool() const;
-	const double & Float() const;
+	bool Bool() const;
+	///float and integer allowed
+	double Float() const;
+	///only integer allowed
+	si64 Integer() const;
 	const std::string & String() const;
 	const JsonVector & Vector() const;
 	const JsonMap & Struct() const;
@@ -118,6 +125,11 @@ public:
 			break; case DATA_VECTOR: h & data.Vector;
 			break; case DATA_STRUCT: h & data.Struct;
 		}
+		if(version >= 770)
+		{
+            if(type == DATA_INTEGER)
+				h & data.Integer;
+		}
 	}
 };
 

+ 3 - 3
lib/NetPacksLib.cpp

@@ -451,12 +451,12 @@ DLL_LINKAGE void RemoveObject::applyGs(CGameState *gs)
 		{
 			if (cond.object == obj)
 			{
-				if (cond.condition == EventCondition::DESTROY)
+				if (cond.condition == EventCondition::DESTROY || cond.condition == EventCondition::DESTROY_0)
 				{
 					cond.condition = EventCondition::CONST_VALUE;
 					cond.value = 1; // destroyed object, from now on always fulfilled
 				}
-				if (cond.condition == EventCondition::CONTROL)
+				else if (cond.condition == EventCondition::CONTROL || cond.condition == EventCondition::HAVE_0)
 				{
 					cond.condition = EventCondition::CONST_VALUE;
 					cond.value = 0; // destroyed object, from now on can not be fulfilled
@@ -1629,7 +1629,7 @@ DLL_LINKAGE void StacksHealedOrResurrected::applyGs(CGameState *gs)
 		if(canOverheal) //for example WoG ghost soul steal ability allows getting more units than before battle
 			res = elem.healedHP / changedStack->MaxHealth();
 		else
-			res = std::min(elem.healedHP / changedStack->MaxHealth() , changedStack->baseAmount - changedStack->count);		
+			res = std::min(elem.healedHP / changedStack->MaxHealth() , changedStack->baseAmount - changedStack->count);
 		changedStack->count += res;
 		if(elem.lowLevelResurrection)
 			changedStack->resurrected += res;

+ 14 - 0
lib/ResourceSet.cpp

@@ -12,6 +12,7 @@
 #include "ResourceSet.h"
 #include "StringConstants.h"
 #include "JsonNode.h"
+#include "serializer/JsonSerializeFormat.h"
 
 Res::ResourceSet::ResourceSet()
 {
@@ -25,6 +26,19 @@ Res::ResourceSet::ResourceSet(const JsonNode & node)
 		push_back(node[name].Float());
 }
 
+void Res::ResourceSet::serializeJson(JsonSerializeFormat & handler, const std::string & fieldName)
+{
+	if(!handler.saving)
+		resize(GameConstants::RESOURCE_QUANTITY, 0);
+	if(handler.saving && !nonZero())
+		return;
+	auto s = handler.enterStruct(fieldName);
+
+	//TODO: add proper support for mithril to map format
+	for(int idx = 0; idx < GameConstants::RESOURCE_QUANTITY - 1; idx ++)
+		handler.serializeInt(GameConstants::RESOURCE_NAMES[idx], this->operator[](idx), 0);
+}
+
 bool Res::ResourceSet::nonZero() const
 {
 	for(auto & elem : *this)

+ 3 - 0
lib/ResourceSet.h

@@ -14,6 +14,7 @@ typedef si32 TResource;
 typedef si64 TResourceCap; //to avoid overflow when adding integers. Signed values are easier to control.
 
 class JsonNode;
+class JsonSerializeFormat;
 
 namespace Res
 {
@@ -124,6 +125,8 @@ namespace Res
 			h & static_cast<std::vector<int>&>(*this);
 		}
 
+		DLL_LINKAGE void serializeJson(JsonSerializeFormat & handler, const std::string & fieldName);
+
 		DLL_LINKAGE void amax(const TResourceCap &val); //performs vstd::amax on each element
 		DLL_LINKAGE void amin(const TResourceCap &val); //performs vstd::amin on each element
 		DLL_LINKAGE void positive(); //values below 0 are set to 0 - upgrade cost can't be negative, for example

+ 24 - 2
lib/StringConstants.h

@@ -53,7 +53,7 @@ namespace NSecondarySkill
 		"sorcery",      "resistance",   "firstAid"
 	};
 
-	const std::string levels [4] =
+	const std::vector<std::string> levels =
 	{
 	    "none", "basic", "advanced", "expert"
 	};
@@ -87,7 +87,7 @@ namespace ETownType
 
 namespace NArtifactPosition
 {
-	const std::string names [19] =
+	const std::string namesHero [19] =
 	{
 		"head", "shoulders", "neck", "rightHand", "leftHand", "torso", //5
 		"rightRing", "leftRing", "feet", //8
@@ -96,5 +96,27 @@ namespace NArtifactPosition
 		"spellbook", "misc5" //18
 	};
 
+	const std::string namesCreature[1] =
+	{
+		"creature1"
+	};
+
+	const std::string namesCommander[6] =
+	{
+		"commander1", "commander2", "commander3", "commander4", "commander5", "commander6",
+	};
+
+
 	const std::string backpack = "backpack";
 }
+
+namespace NMetaclass
+{
+    const std::string names [16] =
+    {
+		"",
+		"artifact", "creature", "faction", "experience", "hero",
+		"heroClass", "luck", "mana", "morale", "movement",
+		"object", "primarySkill", "secondarySkill", "spell", "resource"
+    };
+}

+ 200 - 21
lib/mapObjects/CGHeroInstance.cpp

@@ -26,6 +26,7 @@
 #include "../mapping/CMap.h"
 #include "CGTownInstance.h"
 #include "../serializer/JsonSerializeFormat.h"
+#include "../StringConstants.h"
 
 ///helpers
 static void showInfoDialog(const PlayerColor playerID, const ui32 txtID, const ui16 soundID)
@@ -1542,47 +1543,225 @@ bool CGHeroInstance::hasVisions(const CGObjectInstance * target, const int subty
 	return (distance < visionsRange) && (target->pos.z == pos.z);
 }
 
-void CGHeroInstance::serializeJsonOptions(JsonSerializeFormat& handler)
+std::string CGHeroInstance::getHeroTypeName() const
 {
-	serializeJsonOwner(handler);
-
-	if(handler.saving)
+	if(ID == Obj::HERO || ID == Obj::PRISON)
 	{
 		if(type)
 		{
-			handler.serializeString("type", type->identifier);
+			return type->identifier;
 		}
 		else
 		{
-			auto temp = VLC->heroh->heroes[subID]->identifier;
-			handler.serializeString("type", temp);
+			return VLC->heroh->heroes[subID]->identifier;
 		}
 	}
-	else
+	return "";
+}
+
+void CGHeroInstance::setHeroTypeName(const std::string & identifier)
+{
+	if(ID == Obj::HERO || ID == Obj::PRISON)
 	{
-		if(ID == Obj::HERO || ID == Obj::PRISON)
-		{
-			std::string typeName;
-			handler.serializeString("type", typeName);
+		auto rawId = VLC->modh->identifiers.getIdentifier("core", "hero", identifier);
+
+		if(rawId)
+			subID = rawId.get();
+		else
+			subID = 0; //fallback to Orrin, throw error instead?
+	}
+}
+
+void CGHeroInstance::serializeCommonOptions(JsonSerializeFormat & handler)
+{
+	handler.serializeString("biography", biography);
+	handler.serializeInt("experience", exp, 0);
+	handler.serializeString("name", name);
+	handler.serializeBool<ui8>("female", sex, 1, 0, 0xFF);
 
-			auto rawId = VLC->modh->identifiers.getIdentifier("core", "hero", typeName);
+	{
+		const int legacyHeroes = VLC->modh->settings.data["textData"]["hero"].Integer();
+		const int moddedStart = legacyHeroes + GameConstants::HERO_PORTRAIT_SHIFT;
 
-			if(rawId)
-				subID = rawId.get();
+		if(handler.saving)
+		{
+			if(portrait >= 0)
+			{
+				if(portrait < legacyHeroes || portrait >= moddedStart)
+					handler.serializeId("portrait", portrait, -1, &VLC->heroh->decodeHero, &VLC->heroh->encodeHero);
+				else
+					handler.serializeInt("portrait", portrait, -1);
+			}
+		}
+		else
+		{
+			const JsonNode & portraitNode = handler.getCurrent()["portrait"];
+
+			if(portraitNode.getType() == JsonNode::DATA_STRING)
+				handler.serializeId("portrait", portrait, -1, &VLC->heroh->decodeHero, &VLC->heroh->encodeHero);
 			else
-				subID = 0; //fallback to Orrin, throw error instead?
+				handler.serializeInt("portrait", portrait, -1);
 		}
 	}
-	CCreatureSet::serializeJson(handler, "army");
 
 	{
-		auto artifacts = handler.enterStruct("artifacts");
 		if(handler.saving)
-			CArtifactSet::writeJson(handler.getCurrent());
+		{
+			bool haveSkills = false;
+
+			for(int i = 0; i < GameConstants::PRIMARY_SKILLS; ++i)
+			{
+				if(valOfBonuses(Selector::typeSubtype(Bonus::PRIMARY_SKILL, i).And(Selector::sourceType(Bonus::HERO_BASE_SKILL))) != 0)
+				{
+					haveSkills = true;
+					break;
+				}
+			}
+
+			if(haveSkills)
+			{
+				auto primarySkills = handler.enterStruct("primarySkills");
+
+				for(int i = 0; i < GameConstants::PRIMARY_SKILLS; ++i)
+				{
+					int value = valOfBonuses(Selector::typeSubtype(Bonus::PRIMARY_SKILL, i).And(Selector::sourceType(Bonus::HERO_BASE_SKILL)));
+
+					handler.serializeInt(PrimarySkill::names[i], value, 0);
+				}
+			}
+		}
 		else
-			CArtifactSet::readJson(handler.getCurrent());
+		{
+			auto primarySkills = handler.enterStruct("primarySkills");
+
+			for(int i = 0; i < GameConstants::PRIMARY_SKILLS; ++i)
+			{
+				int value = 0;
+				handler.serializeInt(PrimarySkill::names[i], value, 0);
+				if(value != 0)
+					pushPrimSkill(static_cast<PrimarySkill::PrimarySkill>(i), value);
+			}
+		}
 	}
 
+	//secondary skills
+	if(handler.saving)
+	{
+		//does hero have default skills?
+		bool defaultSkills = false;
+		bool normalSkills = false;
+		for(const auto & p : secSkills)
+		{
+			if(p.first == SecondarySkill(SecondarySkill::DEFAULT))
+				defaultSkills = true;
+			else
+				normalSkills = true;
+		}
+
+		if(defaultSkills && normalSkills)
+			logGlobal->error("Mixed default and normal secondary skills");
+
+		//in json default skills means no field/null
+		if(!defaultSkills)
+		{
+			//enter structure here as handler initialize it
+			auto secondarySkills = handler.enterStruct("secondarySkills");
+
+			for(auto & p : secSkills)
+			{
+				const si32 rawId = p.first.num;
+
+				if(rawId < 0 || rawId >= GameConstants::SKILL_QUANTITY)
+					logGlobal->errorStream() << "Invalid secondary skill " << rawId;
+
+				handler.serializeEnum(NSecondarySkill::names[rawId], p.second, 0, NSecondarySkill::levels);
+			}
+		}
+	}
+	else
+	{
+		auto secondarySkills = handler.enterStruct("secondarySkills");
+		const JsonNode & skillMap = handler.getCurrent();
+
+		secSkills.clear();
+		if(skillMap.getType() == JsonNode::DATA_NULL)
+		{
+			secSkills.push_back(std::pair<SecondarySkill,ui8>(SecondarySkill::DEFAULT, -1));
+		}
+		else
+		{
+			for(const auto & p : skillMap.Struct())
+			{
+				const std::string id = p.first;
+				const std::string levelId =  p.second.String();
+
+				const int rawId = vstd::find_pos(NSecondarySkill::names, id);
+				if(rawId < 0)
+				{
+					logGlobal->errorStream() << "Invalid secondary skill " << id;
+					continue;
+				}
+
+				const int level = vstd::find_pos(NSecondarySkill::levels, levelId);
+				if(level < 0)
+				{
+					logGlobal->errorStream() << "Invalid secondary skill level" << levelId;
+					continue;
+				}
+
+				secSkills.push_back(std::pair<SecondarySkill,ui8>(SecondarySkill(rawId), level));
+			}
+		}
+	}
+
+	handler.serializeIdArray("spellBook", spells, &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell);
+
+	if(handler.saving)
+		CArtifactSet::serializeJsonArtifacts(handler, "artifacts", nullptr);
+}
+
+void CGHeroInstance::serializeJsonOptions(JsonSerializeFormat & handler)
+{
+	serializeCommonOptions(handler);
+
+	serializeJsonOwner(handler);
+
+	if(ID == Obj::HERO || ID == Obj::PRISON)
+	{
+		std::string typeName;
+		if(handler.saving)
+			typeName = getHeroTypeName();
+		handler.serializeString("type", typeName);
+		if(!handler.saving)
+			setHeroTypeName(typeName);
+	}
+
+	CCreatureSet::serializeJson(handler, "army", 7);
+	handler.serializeBool<ui8>("tightFormation", formation, 1, 0, 0);
+
+	{
+		static const int NO_PATROLING = -1;
+		int rawPatrolRadius = NO_PATROLING;
+
+		if(handler.saving)
+		{
+			rawPatrolRadius = patrol.patrolling ? patrol.patrolRadius : NO_PATROLING;
+		}
+
+		handler.serializeInt("patrolRadius", rawPatrolRadius, NO_PATROLING);
+
+		if(!handler.saving)
+		{
+			patrol.patrolling = (rawPatrolRadius > NO_PATROLING);
+			patrol.initialPos = convertPosition(pos, false);
+			patrol.patrolRadius = (rawPatrolRadius > NO_PATROLING) ? rawPatrolRadius : 0;
+		}
+	}
+}
+
+void CGHeroInstance::serializeJsonDefinition(JsonSerializeFormat & handler)
+{
+	serializeCommonOptions(handler);
 }
 
 bool CGHeroInstance::isMissionCritical() const
@@ -1591,7 +1770,7 @@ bool CGHeroInstance::isMissionCritical() const
 	{
 		if(event.trigger.test([&](const EventCondition & condition)
 		{
-			if (condition.condition == EventCondition::CONTROL && condition.object)
+			if ((condition.condition == EventCondition::CONTROL || condition.condition == EventCondition::HAVE_0) && condition.object)
 			{
 				auto hero = dynamic_cast<const CGHeroInstance*>(condition.object);
 				return (hero != this);

+ 11 - 3
lib/mapObjects/CGHeroInstance.h

@@ -65,8 +65,8 @@ public:
 	ConstTransitivePtr<CCommanderInstance> commander;
 	const CGBoat *boat; //set to CGBoat when sailing
 
-	static const ui32 UNINITIALIZED_PORTRAIT = -1;
-	static const ui32 UNINITIALIZED_MANA = -1;
+	static const si32 UNINITIALIZED_PORTRAIT = -1;
+	static const si32 UNINITIALIZED_MANA = -1;
 	static const ui32 UNINITIALIZED_MOVEMENT = -1;
 
 	//std::vector<const CArtifact*> artifacts; //hero's artifacts from bag
@@ -204,7 +204,7 @@ public:
 	void initHero(CRandomGenerator & rand);
 	void initHero(CRandomGenerator & rand, HeroTypeID SUBID);
 
-	void putArtifact(ArtifactPosition pos, CArtifactInstance *art);
+	void putArtifact(ArtifactPosition pos, CArtifactInstance * art) override;
 	void putInBackpack(CArtifactInstance *art);
 	void initExp(CRandomGenerator & rand);
 	void initArmy(CRandomGenerator & rand, IArmyDescriptor *dst = nullptr);
@@ -258,12 +258,20 @@ public:
 	std::string getObjectName() const override;
 protected:
 	void setPropertyDer(ui8 what, ui32 val) override;//synchr
+	///common part of hero instance and hero definition
+	void serializeCommonOptions(JsonSerializeFormat & handler);
+
 	void serializeJsonOptions(JsonSerializeFormat & handler) override;
 
 private:
 	void levelUpAutomatically(CRandomGenerator & rand);
 
 public:
+	std::string getHeroTypeName() const;
+	void setHeroTypeName(const std::string & identifier);
+
+	void serializeJsonDefinition(JsonSerializeFormat & handler);
+
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
 		h & static_cast<CArmedInstance&>(*this);

+ 104 - 0
lib/mapObjects/CGPandoraBox.cpp

@@ -17,6 +17,8 @@
 #include "../spells/CSpellHandler.h"
 #include "../StartInfo.h"
 #include "../IGameCallback.h"
+#include "../StringConstants.h"
+#include "../serializer/JsonSerializeFormat.h"
 
 ///helpers
 static void showInfoDialog(const PlayerColor playerID, const ui32 txtID, const ui16 soundID)
@@ -375,6 +377,85 @@ CGEvent::CGEvent()
 
 }
 
+void CGPandoraBox::serializeJsonOptions(JsonSerializeFormat & handler)
+{
+	CCreatureSet::serializeJson(handler, "guards", 7);
+	handler.serializeString("guardMessage", message);
+
+	handler.serializeInt("experience", gainedExp, 0);
+	handler.serializeInt("mana", manaDiff, 0);
+	handler.serializeInt("morale", moraleDiff, 0);
+	handler.serializeInt("luck", luckDiff, 0);
+
+	resources.serializeJson(handler, "resources");
+
+	{
+		if(!handler.saving)
+			primskills.resize(GameConstants::PRIMARY_SKILLS,0);
+
+		auto s = handler.enterStruct("primarySkills");
+		for(int idx = 0; idx < primskills.size(); idx ++)
+			handler.serializeInt(PrimarySkill::names[idx], primskills[idx], 0);
+
+	}
+	if(handler.saving)
+	{
+		if(handler.getCurrent()["primarySkills"].Struct().empty())
+			handler.getCurrent().Struct().erase("primarySkills");
+	}
+
+	if(handler.saving)
+	{
+		if(!abilities.empty())
+		{
+			auto s = handler.enterStruct("secondarySkills");
+
+			for(size_t idx = 0; idx < abilities.size(); idx++)
+			{
+				handler.serializeEnum(NSecondarySkill::names[abilities[idx]], abilityLevels[idx], NSecondarySkill::levels);
+			}
+		}
+	}
+	else
+	{
+		auto s = handler.enterStruct("secondarySkills");
+
+		const JsonNode & skillMap = handler.getCurrent();
+
+		abilities.clear();
+		abilityLevels.clear();
+
+		for(const auto & p : skillMap.Struct())
+		{
+			const std::string id = p.first;
+			const std::string levelId =  p.second.String();
+
+			const int rawId = vstd::find_pos(NSecondarySkill::names, id);
+			if(rawId < 0)
+			{
+				logGlobal->errorStream() << "Invalid secondary skill " << id;
+				continue;
+			}
+
+			const int level = vstd::find_pos(NSecondarySkill::levels, levelId);
+			if(level < 0)
+			{
+				logGlobal->errorStream() << "Invalid secondary skill level" << levelId;
+				continue;
+			}
+
+			abilities.push_back(SecondarySkill(rawId));
+			abilityLevels.push_back(level);
+		}
+	}
+
+
+	handler.serializeIdArray("artifacts", artifacts, &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
+	handler.serializeIdArray("spells", spells, &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell);
+
+	creatures.serializeJson(handler, "creatures");
+}
+
 void CGEvent::onHeroVisit( const CGHeroInstance * h ) const
 {
 	if(!(availableFor & (1 << h->tempOwner.getNum())))
@@ -416,3 +497,26 @@ void CGEvent::afterSuccessfulVisit() const
 	else if(hasGuardians)
 		hasGuardians = false;
 }
+
+void CGEvent::serializeJsonOptions(JsonSerializeFormat & handler)
+{
+	CGPandoraBox::serializeJsonOptions(handler);
+
+	handler.serializeBool<bool>("aIActivable", computerActivate, true, false, false);
+	handler.serializeBool<bool>("humanActivable", humanActivate, true, false, true);
+	handler.serializeBool<bool>("removeAfterVisit", removeAfterVisit, true, false, false);
+
+	{
+		auto decodePlayer = [](const std::string & id)->si32
+		{
+			return vstd::find_pos(GameConstants::PLAYER_COLOR_NAMES, id);
+		};
+
+		auto encodePlayer = [](si32 idx)->std::string
+		{
+			return GameConstants::PLAYER_COLOR_NAMES[idx];
+		};
+
+		handler.serializeIdArray<ui8, PlayerColor::PLAYER_LIMIT_I>("availableFor", availableFor, GameConstants::ALL_PLAYERS, decodePlayer, encodePlayer);
+    }
+}

+ 3 - 0
lib/mapObjects/CGPandoraBox.h

@@ -51,6 +51,7 @@ public:
 protected:
 	void giveContentsUpToExp(const CGHeroInstance *h) const;
 	void giveContentsAfterExp(const CGHeroInstance *h) const;
+	void serializeJsonOptions(JsonSerializeFormat & handler) override;
 private:
 	void getText( InfoWindow &iw, bool &afterBattle, int val, int negative, int positive, const CGHeroInstance * h ) const;
 	void getText( InfoWindow &iw, bool &afterBattle, int text, const CGHeroInstance * h ) const;
@@ -73,6 +74,8 @@ public:
 
 	CGEvent();
 	void onHeroVisit(const CGHeroInstance * h) const override;
+protected:
+	void serializeJsonOptions(JsonSerializeFormat & handler) override;
 private:
 	void activated(const CGHeroInstance * h) const;
 	void afterSuccessfulVisit() const override;

+ 193 - 26
lib/mapObjects/CGTownInstance.cpp

@@ -25,6 +25,64 @@
 std::vector<const CArtifact *> CGTownInstance::merchantArtifacts;
 std::vector<int> CGTownInstance::universitySkills;
 
+void CCreGenAsCastleInfo::serializeJson(JsonSerializeFormat & handler)
+{
+	handler.serializeString("sameAsTown", instanceId);
+
+	if(!handler.saving)
+	{
+		asCastle = (instanceId != "");
+		allowedFactions.clear();
+	}
+
+	if(!asCastle)
+	{
+		std::vector<bool> standard;
+		standard.resize(VLC->townh->factions.size(), true);
+
+		JsonSerializeFormat::LIC allowedLIC(standard, &CTownHandler::decodeFaction, &CTownHandler::encodeFaction);
+		allowedLIC.any = allowedFactions;
+
+		handler.serializeLIC("allowedFactions", allowedLIC);
+
+		if(!handler.saving)
+		{
+			allowedFactions = allowedLIC.any;
+		}
+	}
+}
+
+void CCreGenLeveledInfo::serializeJson(JsonSerializeFormat & handler)
+{
+	handler.serializeInt("minLevel", minLevel, ui8(1));
+	handler.serializeInt("maxLevel", maxLevel, ui8(7));
+
+	if(!handler.saving)
+	{
+		//todo: safely allow any level > 7
+		vstd::amax(minLevel, 1);
+		vstd::amin(minLevel, 7);
+		vstd::abetween(maxLevel, minLevel, 7);
+	}
+}
+
+void CCreGenLeveledCastleInfo::serializeJson(JsonSerializeFormat & handler)
+{
+	CCreGenAsCastleInfo::serializeJson(handler);
+	CCreGenLeveledInfo::serializeJson(handler);
+}
+
+CGDwelling::CGDwelling():
+	CArmedInstance()
+{
+	info = nullptr;
+}
+
+CGDwelling::~CGDwelling()
+{
+	vstd::clear_pointer(info);
+}
+
 void CGDwelling::initObj(CRandomGenerator & rand)
 {
 	switch(ID)
@@ -58,6 +116,23 @@ void CGDwelling::initObj(CRandomGenerator & rand)
 	}
 }
 
+void CGDwelling::initRandomObjectInfo()
+{
+	vstd::clear_pointer(info);
+	switch(ID)
+	{
+		case Obj::RANDOM_DWELLING: info = new CCreGenLeveledCastleInfo();
+			break;
+		case Obj::RANDOM_DWELLING_LVL: info = new CCreGenAsCastleInfo();
+			break;
+		case Obj::RANDOM_DWELLING_FACTION: info = new CCreGenLeveledInfo();
+			break;
+	}
+
+	if(info)
+		info->owner = this;
+}
+
 void CGDwelling::setPropertyDer(ui8 what, ui32 val)
 {
 	switch (what)
@@ -318,9 +393,24 @@ void CGDwelling::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer)
 
 void CGDwelling::serializeJsonOptions(JsonSerializeFormat & handler)
 {
-	//todo: CGDwelling::serializeJsonOptions
-	if(ID != Obj::WAR_MACHINE_FACTORY && ID != Obj::REFUGEE_CAMP)
+	if(!handler.saving)
+		initRandomObjectInfo();
+
+	switch (ID)
+	{
+	case Obj::WAR_MACHINE_FACTORY:
+	case Obj::REFUGEE_CAMP:
+		//do nothing
+		break;
+	case Obj::RANDOM_DWELLING:
+	case Obj::RANDOM_DWELLING_LVL:
+	case Obj::RANDOM_DWELLING_FACTION:
+		info->serializeJson(handler);
+		//fall through
+	default:
 		serializeJsonOwner(handler);
+		break;
+	}
 }
 
 int CGTownInstance::getSightRadius() const //returns sight distance
@@ -495,7 +585,7 @@ bool CGTownInstance::hasCapitol() const
 	return hasBuilt(BuildingID::CAPITOL);
 }
 CGTownInstance::CGTownInstance()
-	:IShipyard(this), IMarket(this), town(nullptr), builded(0), destroyed(0), identifier(0), alignment(0xff)
+	:CGDwelling(), IShipyard(this), IMarket(this), town(nullptr), builded(0), destroyed(0), identifier(0), alignment(0xff)
 {
 
 }
@@ -1101,6 +1191,21 @@ bool CGTownInstance::armedGarrison() const
 	return stacksCount() || garrisonHero;
 }
 
+const CTown * CGTownInstance::getTown() const
+{
+    if(ID == Obj::RANDOM_TOWN)
+		return VLC->townh->randomTown;
+	else
+	{
+		if(nullptr == town)
+		{
+			return VLC->townh->factions[subID]->town;
+		}
+		else
+			return town;
+	}
+}
+
 int CGTownInstance::getTownLevel() const
 {
 	// count all buildings that are not upgrades
@@ -1214,34 +1319,100 @@ void CGTownInstance::battleFinished(const CGHeroInstance *hero, const BattleResu
 void CGTownInstance::serializeJsonOptions(JsonSerializeFormat & handler)
 {
 	CGObjectInstance::serializeJsonOwner(handler);
-	CCreatureSet::serializeJson(handler, "army");
-	handler.serializeBool<ui8>("tightFormation", 1, 0, formation);
+	CCreatureSet::serializeJson(handler, "army", 7);
+	handler.serializeBool<ui8>("tightFormation", formation, 1, 0, 0);
 	handler.serializeString("name", name);
 
+	{
+		auto decodeBuilding = [this](const std::string & identifier) -> si32
+		{
+			auto rawId = VLC->modh->identifiers.getIdentifier("core", getTown()->getBuildingScope(), identifier);
 
+			if(rawId)
+				return rawId.get();
+			else
+				return -1;
+		};
 
-	if(!handler.saving)
-	{
-		builtBuildings.insert(BuildingID::DEFAULT);//just in case
-	}
+		auto encodeBuilding = [this](si32 index) -> std::string
+		{
+			return getTown()->buildings.at(BuildingID(index))->identifier;
+		};
+
+		const std::set<si32> standard = getTown()->getAllBuildings();//by default all buildings are allowed
+		JsonSerializeFormat::LICSet buildingsLIC(standard, decodeBuilding, encodeBuilding);
+
+		if(handler.saving)
+		{
+			bool customBuildings = false;
+
+			boost::logic::tribool hasFort(false);
+
+			for(const BuildingID id : forbiddenBuildings)
+			{
+				buildingsLIC.none.insert(id);
+				customBuildings = true;
+			}
+
+			for(const BuildingID id : builtBuildings)
+			{
+				if(id == BuildingID::DEFAULT)
+					continue;
 
-	//todo: serialize buildings
-//	{
-//		std::vector<bool> standard;
-//		standard.resize(44, true);
-//
-//
-//		JsonSerializeFormat::LIC buildingsLIC(, CTownHandler::decodeBuilding, CTownHandler::encodeBuilding);
-//	}
+				const CBuilding * building = getTown()->buildings.at(id);
+
+				if(building->mode == CBuilding::BUILD_AUTO)
+					continue;
+
+				if(id == BuildingID::FORT)
+					hasFort = true;
+
+				buildingsLIC.all.insert(id);
+				customBuildings = true;
+			}
+
+			if(customBuildings)
+				handler.serializeLIC("buildings", buildingsLIC);
+			else
+				handler.serializeBool("hasFort",hasFort);
+		}
+		else
+		{
+			handler.serializeLIC("buildings", buildingsLIC);
+
+			builtBuildings.insert(BuildingID::VILLAGE_HALL);
+
+			if(buildingsLIC.none.empty() && buildingsLIC.all.empty())
+			{
+				builtBuildings.insert(BuildingID::DEFAULT);
+
+				bool hasFort = false;
+				handler.serializeBool("hasFort",hasFort);
+				if(hasFort)
+					builtBuildings.insert(BuildingID::FORT);
+			}
+			else
+			{
+				for(const si32 item : buildingsLIC.none)
+					forbiddenBuildings.insert(BuildingID(item));
+				for(const si32 item : buildingsLIC.all)
+					builtBuildings.insert(BuildingID(item));
+			}
+		}
+	}
 
 	{
-		JsonSerializeFormat::LIC spellsLIC(VLC->spellh->getDefaultAllowed(), CSpellHandler::decodeSpell, CSpellHandler::encodeSpell);
+		std::vector<bool> standard = VLC->spellh->getDefaultAllowed();
+		JsonSerializeFormat::LIC spellsLIC(standard, CSpellHandler::decodeSpell, CSpellHandler::encodeSpell);
 
-		for(SpellID id : possibleSpells)
-			spellsLIC.any[id.num] = true;
+		if(handler.saving)
+		{
+			for(SpellID id : possibleSpells)
+				spellsLIC.any[id.num] = true;
 
-		for(SpellID id : obligatorySpells)
-			spellsLIC.all[id.num] = true;
+			for(SpellID id : obligatorySpells)
+				spellsLIC.all[id.num] = true;
+		}
 
 		handler.serializeLIC("spells", spellsLIC);
 
@@ -1251,18 +1422,14 @@ void CGTownInstance::serializeJsonOptions(JsonSerializeFormat & handler)
 			for(si32 idx = 0; idx < spellsLIC.any.size(); idx++)
 			{
 				if(spellsLIC.any[idx])
-				{
 					possibleSpells.push_back(SpellID(idx));
-				}
 			}
 
 			obligatorySpells.clear();
 			for(si32 idx = 0; idx < spellsLIC.all.size(); idx++)
 			{
 				if(spellsLIC.all[idx])
-				{
 					obligatorySpells.push_back(SpellID(idx));
-				}
 			}
 		}
 	}

+ 28 - 6
lib/mapObjects/CGTownInstance.h

@@ -18,30 +18,46 @@
 
 class CCastleEvent;
 class CGTownInstance;
+class CGDwelling;
 
 class DLL_LINKAGE CSpecObjInfo
 {
 public:
-	virtual ~CSpecObjInfo(){};
-	PlayerColor player; //owner
+	CSpecObjInfo() = default;
+	virtual ~CSpecObjInfo() = default;
+
+	virtual void serializeJson(JsonSerializeFormat & handler) = 0;
+
+	const CGDwelling * owner;
 };
 
 class DLL_LINKAGE CCreGenAsCastleInfo : public virtual CSpecObjInfo
 {
 public:
+	CCreGenAsCastleInfo() = default;
 	bool asCastle;
-	ui32 identifier;
-	ui8 castles[2]; //allowed castles
+	ui32 identifier;//h3m internal identifier
+
+	std::vector<bool> allowedFactions;
+
+	std::string instanceId;//vcmi map instance identifier
+	void serializeJson(JsonSerializeFormat & handler) override;
 };
 
 class DLL_LINKAGE CCreGenLeveledInfo : public virtual CSpecObjInfo
 {
 public:
-	ui8 minLevel, maxLevel; //minimal and maximal level of creature in dwelling: <0, 6>
+	CCreGenLeveledInfo() = default;
+	ui8 minLevel, maxLevel; //minimal and maximal level of creature in dwelling: <1, 7>
+
+	void serializeJson(JsonSerializeFormat & handler) override;
 };
 
 class DLL_LINKAGE CCreGenLeveledCastleInfo : public CCreGenAsCastleInfo, public CCreGenLeveledInfo
 {
+public:
+	CCreGenLeveledCastleInfo() = default;
+	void serializeJson(JsonSerializeFormat & handler) override;
 };
 
 class DLL_LINKAGE CGDwelling : public CArmedInstance
@@ -49,9 +65,13 @@ class DLL_LINKAGE CGDwelling : public CArmedInstance
 public:
 	typedef std::vector<std::pair<ui32, std::vector<CreatureID> > > TCreaturesSet;
 
-	CSpecObjInfo * info; //h3m info about dewlling
+	CSpecObjInfo * info; //random dwelling options; not serialized
 	TCreaturesSet creatures; //creatures[level] -> <vector of alternative ids (base creature and upgrades, creatures amount>
 
+	CGDwelling();
+	virtual ~CGDwelling();
+
+	void initRandomObjectInfo();
 protected:
 	void serializeJsonOptions(JsonSerializeFormat & handler) override;
 
@@ -245,6 +265,8 @@ public:
 	void clearArmy() const;
 	void addHeroToStructureVisitors(const CGHeroInstance *h, si32 structureInstanceID) const; //hero must be visiting or garrisoned in town
 
+	const CTown * getTown() const ;
+
 	CGTownInstance();
 	virtual ~CGTownInstance();
 

+ 2 - 0
lib/mapObjects/CObjectClassesHandler.h

@@ -242,6 +242,8 @@ public:
 	/// Returns handler string describing the handler (for use in client)
 	std::string getObjectHandlerName(si32 type) const;
 
+
+
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
 		h & objects;

+ 7 - 27
lib/mapObjects/CObjectHandler.cpp

@@ -328,9 +328,9 @@ void CGObjectInstance::serializeJson(JsonSerializeFormat & handler)
 		handler.serializeString("type", typeName);
 		handler.serializeString("subtype", subTypeName);
 
-		handler.serializeNumeric("x", pos.x);
-		handler.serializeNumeric("y", pos.y);
-		handler.serializeNumeric("l", pos.z);
+		handler.serializeInt("x", pos.x);
+		handler.serializeInt("y", pos.y);
+		handler.serializeInt("l", pos.z);
 		appearance.writeJson(handler.getCurrent()["template"], false);
 	}
 
@@ -352,32 +352,12 @@ void CGObjectInstance::serializeJsonOptions(JsonSerializeFormat & handler)
 
 void CGObjectInstance::serializeJsonOwner(JsonSerializeFormat & handler)
 {
-	std::string temp;
+	ui8 temp = tempOwner.getNum();
 
-	//todo: use enum serialize
-	if(handler.saving)
-	{
-		if(tempOwner.isValidPlayer())
-		{
-			temp = GameConstants::PLAYER_COLOR_NAMES[tempOwner.getNum()];
-			handler.serializeString("owner", temp);
-		}
-	}
-	else
-	{
-		tempOwner = PlayerColor::NEUTRAL;//this method assumes that object is ownable
-
-		handler.serializeString("owner", temp);
+	handler.serializeEnum("owner", temp, PlayerColor::NEUTRAL.getNum(), GameConstants::PLAYER_COLOR_NAMES);
 
-		if(temp != "")
-		{
-			auto rawOwner = vstd::find_pos(GameConstants::PLAYER_COLOR_NAMES, temp);
-			if(rawOwner >=0)
-				tempOwner = PlayerColor(rawOwner);
-			else
-				logGlobal->errorStream() << "Invalid owner :" << temp;
-		}
-	}
+	if(!handler.saving)
+		tempOwner = PlayerColor(temp);
 }
 
 CGObjectInstanceBySubIdFinder::CGObjectInstanceBySubIdFinder(CGObjectInstance * obj) : obj(obj)

+ 251 - 0
lib/mapObjects/CQuest.cpp

@@ -20,6 +20,12 @@
 #include "MiscObjects.h"
 #include "../IGameCallback.h"
 #include "../CGameState.h"
+#include "../serializer/JsonSerializeFormat.h"
+#include "../CModHandler.h"
+#include "../GameConstants.h"
+#include "../StringConstants.h"
+#include "../spells/CSpellHandler.h"
+
 
 std::map <PlayerColor, std::set <ui8> > CGKeys::playerKeyMap;
 
@@ -395,6 +401,86 @@ void CQuest::getCompletionText(MetaString &iwText, std::vector<Component> &compo
 	}
 }
 
+void CQuest::serializeJson(JsonSerializeFormat & handler, const std::string & fieldName)
+{
+	auto q = handler.enterStruct(fieldName);
+
+	handler.serializeString("firstVisitText", firstVisitText);
+	handler.serializeString("nextVisitText", nextVisitText);
+	handler.serializeString("completedText", completedText);
+
+	if(!handler.saving)
+	{
+		isCustomFirst = firstVisitText.size() > 0;
+		isCustomNext = nextVisitText.size() > 0;
+		isCustomComplete = completedText.size() > 0;
+	}
+
+	static const std::vector<std::string> MISSION_TYPE_JSON =
+	{
+		"None", "Level", "PrimaryStat", "KillHero", "KillCreature", "Artifact", "Army", "Resources", "Hero", "Player"
+	};
+
+	handler.serializeEnum("missionType", missionType, Emission::MISSION_NONE, MISSION_TYPE_JSON);
+	handler.serializeInt("timeLimit", lastDay, -1);
+
+	switch (missionType)
+	{
+	case MISSION_NONE:
+		break;
+	case MISSION_LEVEL:
+		handler.serializeInt("heroLevel", m13489val, -1);
+		break;
+	case MISSION_PRIMARY_STAT:
+		{
+			auto primarySkills = handler.enterStruct("primarySkills");
+			if(!handler.saving)
+				m2stats.resize(GameConstants::PRIMARY_SKILLS);
+
+			for(int i = 0; i < GameConstants::PRIMARY_SKILLS; ++i)
+				handler.serializeInt(PrimarySkill::names[i], m2stats[i], 0);
+		}
+		break;
+	case MISSION_KILL_HERO:
+	case MISSION_KILL_CREATURE:
+		handler.serializeInstance<ui32>("killTarget", m13489val, ui32(-1));
+		break;
+	case MISSION_ART:
+		//todo: ban artifacts
+		handler.serializeIdArray("artifacts", m5arts, &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
+		break;
+	case MISSION_ARMY:
+        {
+			auto a = handler.enterArray("creatures");
+			a.serializeStruct(m6creatures);
+        }
+		break;
+	case MISSION_RESOURCES:
+        {
+        	auto r = handler.enterStruct("resources");
+
+        	if(!handler.saving)
+				m7resources.resize(GameConstants::RESOURCE_QUANTITY-1);
+
+			for(size_t idx = 0; idx < (GameConstants::RESOURCE_QUANTITY - 1); idx++)
+			{
+				handler.serializeInt(GameConstants::RESOURCE_NAMES[idx], m7resources[idx], 0);
+			}
+        }
+		break;
+	case MISSION_HERO:
+		handler.serializeId<ui32>("hero", m13489val, 0, &CHeroHandler::decodeHero, &CHeroHandler::encodeHero);
+		break;
+	case MISSION_PLAYER:
+		handler.serializeEnum("player",  m13489val, PlayerColor::CANNOT_DETERMINE.getNum(), GameConstants::PLAYER_COLOR_NAMES);
+		break;
+	default:
+		logGlobal->error("Invalid quest mission type");
+		break;
+	}
+
+}
+
 CGSeerHut::CGSeerHut() : IQuestObject(),
 	rewardType(NOTHING), rID(-1), rVal(-1)
 {
@@ -763,6 +849,165 @@ void CGSeerHut::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer)
 	finishQuest(hero, answer);
 }
 
+void CGSeerHut::serializeJsonOptions(JsonSerializeFormat & handler)
+{
+	static const std::map<ERewardType, std::string> REWARD_MAP =
+	{
+		{NOTHING,		""},
+		{EXPERIENCE,	"experience"},
+		{MANA_POINTS,	"mana"},
+		{MORALE_BONUS,	"morale"},
+		{LUCK_BONUS,	"luck"},
+		{RESOURCES,		"resource"},
+		{PRIMARY_SKILL,	"primarySkill"},
+		{SECONDARY_SKILL,"secondarySkill"},
+		{ARTIFACT,		"artifact"},
+		{SPELL,			"spell"},
+		{CREATURE,		"creature"}
+	};
+
+	static const std::map<std::string, ERewardType> REWARD_RMAP =
+	{
+		{"experience",    EXPERIENCE},
+		{"mana",          MANA_POINTS},
+		{"morale",        MORALE_BONUS},
+		{"luck",          LUCK_BONUS},
+		{"resource",      RESOURCES},
+		{"primarySkill",  PRIMARY_SKILL},
+		{"secondarySkill",SECONDARY_SKILL},
+		{"artifact",      ARTIFACT},
+		{"spell",         SPELL},
+		{"creature",      CREATURE}
+	};
+
+	//quest and reward
+	quest->serializeJson(handler, "quest");
+
+	//only one reward is supported
+	//todo: full reward format support after CRewardInfo integration
+
+	auto s = handler.enterStruct("reward");
+	std::string fullIdentifier, metaTypeName, scope, identifier;
+
+	if(handler.saving)
+	{
+		si32 amount = rVal;
+
+		metaTypeName = REWARD_MAP.at(rewardType);
+		switch (rewardType)
+		{
+		case NOTHING:
+			break;
+		case EXPERIENCE:
+		case MANA_POINTS:
+		case MORALE_BONUS:
+		case LUCK_BONUS:
+			identifier = "";
+			break;
+		case RESOURCES:
+			identifier = GameConstants::RESOURCE_NAMES[rID];
+			break;
+		case PRIMARY_SKILL:
+			identifier = PrimarySkill::names[rID];
+			break;
+		case SECONDARY_SKILL:
+			identifier = NSecondarySkill::names[rID];
+			break;
+		case ARTIFACT:
+			identifier = ArtifactID(rID).toArtifact()->identifier;
+			amount = 1;
+			break;
+		case SPELL:
+			identifier = SpellID(rID).toSpell()->identifier;
+			amount = 1;
+			break;
+		case CREATURE:
+			identifier = CreatureID(rID).toCreature()->identifier;
+			break;
+		default:
+			assert(false);
+			break;
+		}
+		if(rewardType != NOTHING)
+		{
+			fullIdentifier = CModHandler::makeFullIdentifier(scope, metaTypeName, identifier);
+			handler.serializeInt(fullIdentifier, amount);
+		}
+	}
+	else
+	{
+		rewardType = NOTHING;
+
+		const JsonNode & rewardsJson = handler.getCurrent();
+
+		fullIdentifier = "";
+
+		if(rewardsJson.Struct().empty())
+			return;
+		else
+		{
+			auto iter = rewardsJson.Struct().begin();
+			fullIdentifier = iter->first;
+		}
+
+		CModHandler::parseIdentifier(fullIdentifier, scope, metaTypeName, identifier);
+
+		auto it = REWARD_RMAP.find(metaTypeName);
+
+		if(it == REWARD_RMAP.end())
+		{
+			logGlobal->errorStream() << instanceName << ": invalid metatype in reward item " << fullIdentifier;
+			return;
+		}
+		else
+		{
+			rewardType = it->second;
+		}
+
+		bool doRequest = false;
+
+		switch (rewardType)
+		{
+		case NOTHING:
+			return;
+		case EXPERIENCE:
+		case MANA_POINTS:
+		case MORALE_BONUS:
+		case LUCK_BONUS:
+			break;
+		case PRIMARY_SKILL:
+			doRequest = true;
+			break;
+		case RESOURCES:
+		case SECONDARY_SKILL:
+		case ARTIFACT:
+		case SPELL:
+		case CREATURE:
+			doRequest = true;
+			break;
+		default:
+			assert(false);
+			break;
+		}
+
+		if(doRequest)
+		{
+			auto rawId = VLC->modh->identifiers.getIdentifier("core", fullIdentifier, false);
+
+			if(rawId)
+			{
+				rID = rawId.get();
+			}
+			else
+			{
+				rewardType = NOTHING;//fallback in case of error
+				return;
+			}
+		}
+		handler.serializeInt(fullIdentifier, rVal);
+	}
+}
+
 void CGQuestGuard::init(CRandomGenerator & rand)
 {
 	blockVisit = true;
@@ -775,6 +1020,12 @@ void CGQuestGuard::completeQuest(const CGHeroInstance *h) const
 	cb->removeObject(this);
 }
 
+void CGQuestGuard::serializeJsonOptions(JsonSerializeFormat & handler)
+{
+	//quest only, do not call base class
+	quest->serializeJson(handler, "quest");
+}
+
 void CGKeys::reset()
 {
 	playerKeyMap.clear();

+ 6 - 0
lib/mapObjects/CQuest.h

@@ -80,6 +80,8 @@ public:
 			completedOption = 1;
 		}
 	}
+
+	void serializeJson(JsonSerializeFormat & handler, const std::string & fieldName);
 };
 
 class DLL_LINKAGE IQuestObject
@@ -133,6 +135,8 @@ protected:
 	static const int OBJPROP_VISITED = 10;
 
 	void setPropertyDer(ui8 what, ui32 val) override;
+
+	void serializeJsonOptions(JsonSerializeFormat & handler) override;
 };
 
 class DLL_LINKAGE CGQuestGuard : public CGSeerHut
@@ -146,6 +150,8 @@ public:
 	{
 		h & static_cast<CGSeerHut&>(*this);
 	}
+protected:
+	void serializeJsonOptions(JsonSerializeFormat & handler) override;
 };
 
 class DLL_LINKAGE CGKeys : public CGObjectInstance //Base class for Keymaster and guards

+ 1 - 1
lib/mapObjects/CRewardableConstructor.cpp

@@ -21,7 +21,7 @@ namespace {
 	MetaString loadMessage(const JsonNode & value)
 	{
 		MetaString ret;
-		if (value.getType() == JsonNode::DATA_FLOAT)
+		if (value.isNumber())
 			ret.addTxt(MetaString::ADVOB_TXT, value.Float());
 		else
 			ret << value.String();

+ 1 - 1
lib/mapObjects/JsonRandom.cpp

@@ -28,7 +28,7 @@ namespace JsonRandom
 	{
 		if (value.isNull())
 			return defaultValue;
-		if (value.getType() == JsonNode::DATA_FLOAT)
+		if (value.isNumber())
 			return value.Float();
 		if (!value["amount"].isNull())
 			return value["amount"].Float();

+ 15 - 36
lib/mapObjects/MiscObjects.cpp

@@ -600,50 +600,30 @@ static const std::vector<std::string> CHARACTER_JSON  =
 
 void CGCreature::serializeJsonOptions(JsonSerializeFormat & handler)
 {
-	handler.serializeNumericEnum("character", CHARACTER_JSON, (si8)0, character);
+	handler.serializeEnum("character", character, CHARACTER_JSON);
 
 	if(handler.saving)
 	{
 		if(hasStackAtSlot(SlotID(0)))
 		{
 			si32 amount = getStack(SlotID(0)).count;
-			handler.serializeNumeric("amount", amount);
+			handler.serializeInt("amount", amount, 0);
 		}
-
-		if(resources.nonZero())
-		{
-			for(size_t idx = 0; idx < resources.size(); idx++)
-				handler.getCurrent()["rewardResources"][GameConstants::RESOURCE_NAMES[idx]].Float() = resources[idx];
-		}
-
-		auto tmp = (gainedArtifact == ArtifactID(ArtifactID::NONE) ? "" : gainedArtifact.toArtifact()->identifier);
-		handler.serializeString("rewardArtifact", tmp);
 	}
 	else
 	{
 		si32 amount = 0;
-		handler.serializeNumeric("amount", amount);
+		handler.serializeInt("amount", amount);
 		auto  hlp = new CStackInstance();
 		hlp->count = amount;
 		//type will be set during initialization
 		putStack(SlotID(0), hlp);
-		{
-			TResources tmp(handler.getCurrent()["rewardResources"]);
-			std::swap(tmp,resources);
-		}
-		{
-			gainedArtifact = ArtifactID(ArtifactID::NONE);
-			std::string tmp;
-			handler.serializeString("rewardArtifact", tmp);
-
-			if(tmp != "")
-			{
-				auto artid = VLC->modh->identifiers.getIdentifier("core", "artifact", tmp);
-				if(artid)
-					gainedArtifact = ArtifactID(artid.get());
-			}
-		}
 	}
+
+	resources.serializeJson(handler, "rewardResources");
+
+	handler.serializeId("rewardArtifact", gainedArtifact, ArtifactID(ArtifactID::NONE), &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
+
 	handler.serializeBool("noGrowing", notGrowingTeam);
 	handler.serializeBool("neverFlees", neverFlees);
 	handler.serializeString("rewardMessage", message);
@@ -793,7 +773,7 @@ void CGMine::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) con
 
 void CGMine::serializeJsonOptions(JsonSerializeFormat & handler)
 {
-	CCreatureSet::serializeJson(handler, "army");
+	CCreatureSet::serializeJson(handler, "army", 7);
 
 	if(isAbandoned())
 	{
@@ -934,8 +914,8 @@ void CGResource::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer)
 
 void CGResource::serializeJsonOptions(JsonSerializeFormat & handler)
 {
-	CCreatureSet::serializeJson(handler, "guards");
-	handler.serializeNumeric("amount", amount);
+	CCreatureSet::serializeJson(handler, "guards", 7);
+	handler.serializeInt("amount", amount, 0);
 	handler.serializeString("guardMessage", message);
 }
 
@@ -1428,15 +1408,14 @@ void CGArtifact::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer)
 void CGArtifact::serializeJsonOptions(JsonSerializeFormat& handler)
 {
 	handler.serializeString("guardMessage", message);
-	CCreatureSet::serializeJson(handler, "guards");
+	CCreatureSet::serializeJson(handler, "guards" ,7);
 
 	if(handler.saving && ID == Obj::SPELL_SCROLL)
 	{
 		const std::shared_ptr<Bonus> b = storedArtifact->getBonusLocalFirst(Selector::type(Bonus::SPELL));
 		SpellID spellId(b->subtype);
 
-		std::string spell = SpellID(b->subtype).toSpell()->identifier;
-		handler.serializeString("spell", spell);
+		handler.serializeId("spell", spellId, SpellID::NONE, &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell);
 	}
 }
 
@@ -1665,7 +1644,7 @@ std::string CGShrine::getHoverText(const CGHeroInstance * hero) const
 
 void CGShrine::serializeJsonOptions(JsonSerializeFormat& handler)
 {
-	handler.serializeId("spell", &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell, SpellID(SpellID::NONE), spell);
+	handler.serializeId("spell", spell, SpellID::NONE, &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell);
 }
 
 void CGSignBottle::initObj(CRandomGenerator & rand)
@@ -1861,7 +1840,7 @@ void CGGarrison::serializeJsonOptions(JsonSerializeFormat& handler)
 {
 	handler.serializeBool("removableUnits", removableUnits);
 	serializeJsonOwner(handler);
-	CCreatureSet::serializeJson(handler, "army");
+	CCreatureSet::serializeJson(handler, "army", 7);
 }
 
 void CGMagi::reset()

+ 18 - 6
lib/mapObjects/ObjectTemplate.cpp

@@ -64,7 +64,8 @@ ObjectTemplate::ObjectTemplate(const ObjectTemplate& other):
 	id(other.id),
 	subid(other.subid),
 	printPriority(other.printPriority),
-	animationFile(other.animationFile)
+	animationFile(other.animationFile),
+	editorAnimationFile(other.editorAnimationFile)
 {
 	//default copy constructor is failing with usedTiles this for unknown reason
 
@@ -81,6 +82,7 @@ ObjectTemplate & ObjectTemplate::operator=(const ObjectTemplate & rhs)
 	subid = rhs.subid;
 	printPriority = rhs.printPriority;
 	animationFile = rhs.animationFile;
+	editorAnimationFile = rhs.editorAnimationFile;
 
 	usedTiles.clear();
 	usedTiles.resize(rhs.usedTiles.size());
@@ -89,6 +91,16 @@ ObjectTemplate & ObjectTemplate::operator=(const ObjectTemplate & rhs)
 	return *this;
 }
 
+void ObjectTemplate::afterLoadFixup()
+{
+	if(id == Obj::EVENT)
+	{
+		setSize(1,1);
+		usedTiles[0][0] = VISITABLE;
+		visitDir = 0xFF;
+	}
+}
+
 void ObjectTemplate::readTxt(CLegacyConfigParser & parser)
 {
 	std::string data = parser.readString();
@@ -207,16 +219,13 @@ void ObjectTemplate::readMap(CBinaryReader & reader)
 	reader.skip(16);
 	readMsk();
 
-	if (id == Obj::EVENT)
-	{
-		setSize(1,1);
-		usedTiles[0][0] = VISITABLE;
-	}
+	afterLoadFixup();
 }
 
 void ObjectTemplate::readJson(const JsonNode &node, const bool withTerrain)
 {
 	animationFile = node["animation"].String();
+	editorAnimationFile = node["editorAnimation"].String();
 
 	const JsonVector & visitDirs = node["visitableFrom"].Vector();
 	if (!visitDirs.empty())
@@ -284,11 +293,14 @@ void ObjectTemplate::readJson(const JsonNode &node, const bool withTerrain)
 	}
 
 	printPriority = node["zIndex"].Float();
+
+	afterLoadFixup();
 }
 
 void ObjectTemplate::writeJson(JsonNode & node, const bool withTerrain) const
 {
 	node["animation"].String() = animationFile;
+	node["editorAnimation"].String() = editorAnimationFile;
 
 	if(visitDir != 0x0 && isVisitable())
 	{

+ 9 - 0
lib/mapObjects/ObjectTemplate.h

@@ -33,6 +33,8 @@ class DLL_LINKAGE ObjectTemplate
 	/// list of terrains on which this object can be placed
 	std::set<ETerrainType> allowedTerrains;
 
+	void afterLoadFixup();
+
 public:
 	/// H3 ID/subID of this object
 	Obj id;
@@ -42,6 +44,9 @@ public:
 	/// animation file that should be used to display object
 	std::string animationFile;
 
+	/// map editor only animation file
+	std::string editorAnimationFile;
+
 	/// string ID, equals to def base name for h3m files (lower case, no extension) or specified in mod data
 	std::string stringID;
 
@@ -86,6 +91,10 @@ public:
 	{
 		h & usedTiles & allowedTerrains & animationFile & stringID;
 		h & id & subid & printPriority & visitDir;
+		if(version >= 770)
+		{
+			h & editorAnimationFile;
+		}
 	}
 };
 

+ 33 - 9
lib/mapping/CMap.cpp

@@ -11,6 +11,7 @@
 #include "../CGeneralTextHandler.h"
 #include "../spells/CSpellHandler.h"
 #include "CMapEditManager.h"
+#include "../serializer/JsonSerializeFormat.h"
 
 SHeroName::SHeroName() : heroId(-1)
 {
@@ -18,8 +19,8 @@ SHeroName::SHeroName() : heroId(-1)
 }
 
 PlayerInfo::PlayerInfo(): canHumanPlay(false), canComputerPlay(false),
-	aiTactic(EAiTactic::RANDOM), isFactionRandom(false), mainCustomHeroPortrait(-1), mainCustomHeroId(-1), hasMainTown(false),
-	generateHeroAtMainTown(false), team(TeamID::NO_TEAM), hasRandomHero(false), /* following are unused */ generateHero(false), p7(0), powerPlaceholders(-1)
+	aiTactic(EAiTactic::RANDOM), isFactionRandom(false), hasRandomHero(false), mainCustomHeroPortrait(-1), mainCustomHeroId(-1), hasMainTown(false),
+	generateHeroAtMainTown(false), team(TeamID::NO_TEAM), /* following are unused */ generateHero(false), p7(0), powerPlaceholders(-1)
 {
 	allowedFactions = VLC->townh->getAllowedFactions();
 }
@@ -61,6 +62,7 @@ bool PlayerInfo::hasCustomMainHero() const
 
 EventCondition::EventCondition(EWinLoseType condition):
 	object(nullptr),
+	metaType(EMetaclass::INVALID),
 	value(-1),
 	objectType(-1),
 	objectSubtype(-1),
@@ -71,6 +73,7 @@ EventCondition::EventCondition(EWinLoseType condition):
 
 EventCondition::EventCondition(EWinLoseType condition, si32 value, si32 objectType, int3 position):
 	object(nullptr),
+	metaType(EMetaclass::INVALID),
 	value(value),
 	objectType(objectType),
 	objectSubtype(-1),
@@ -78,6 +81,12 @@ EventCondition::EventCondition(EWinLoseType condition, si32 value, si32 objectTy
 	condition(condition)
 {}
 
+void Rumor::serializeJson(JsonSerializeFormat & handler)
+{
+	handler.serializeString("name", name);
+	handler.serializeString("text", text);
+}
+
 DisposedHero::DisposedHero() : heroId(0), portrait(255), players(0)
 {
 
@@ -503,22 +512,26 @@ void CMap::checkForObjectives()
 		{
 			switch (cond.condition)
 			{
-				break; case EventCondition::HAVE_ARTIFACT:
+				case EventCondition::HAVE_ARTIFACT:
 					boost::algorithm::replace_first(event.onFulfill, "%s", VLC->arth->artifacts[cond.objectType]->Name());
+					break;
 
-				break; case EventCondition::HAVE_CREATURES:
+				case EventCondition::HAVE_CREATURES:
 					boost::algorithm::replace_first(event.onFulfill, "%s", VLC->creh->creatures[cond.objectType]->nameSing);
 					boost::algorithm::replace_first(event.onFulfill, "%d", boost::lexical_cast<std::string>(cond.value));
+					break;
 
-				break; case EventCondition::HAVE_RESOURCES:
+				case EventCondition::HAVE_RESOURCES:
 					boost::algorithm::replace_first(event.onFulfill, "%s", VLC->generaltexth->restypes[cond.objectType]);
 					boost::algorithm::replace_first(event.onFulfill, "%d", boost::lexical_cast<std::string>(cond.value));
+					break;
 
-				break; case EventCondition::HAVE_BUILDING:
+				case EventCondition::HAVE_BUILDING:
 					if (isInTheMap(cond.position))
 						cond.object = getObjectiveObjectFrom(cond.position, Obj::TOWN);
+					break;
 
-				break; case EventCondition::CONTROL:
+				case EventCondition::CONTROL:
 					if (isInTheMap(cond.position))
 						cond.object = getObjectiveObjectFrom(cond.position, Obj::EObj(cond.objectType));
 
@@ -531,8 +544,9 @@ void CMap::checkForObjectives()
 						if (hero)
 							boost::algorithm::replace_first(event.onFulfill, "%s", hero->name);
 					}
+					break;
 
-				break; case EventCondition::DESTROY:
+				case EventCondition::DESTROY:
 					if (isInTheMap(cond.position))
 						cond.object = getObjectiveObjectFrom(cond.position, Obj::EObj(cond.objectType));
 
@@ -542,12 +556,22 @@ void CMap::checkForObjectives()
 						if (hero)
 							boost::algorithm::replace_first(event.onFulfill, "%s", hero->name);
 					}
-				break; case EventCondition::TRANSPORT:
+					break;
+				case EventCondition::TRANSPORT:
 					cond.object = getObjectiveObjectFrom(cond.position, Obj::TOWN);
+					break;
 				//break; case EventCondition::DAYS_PASSED:
 				//break; case EventCondition::IS_HUMAN:
 				//break; case EventCondition::DAYS_WITHOUT_TOWN:
 				//break; case EventCondition::STANDARD_WIN:
+
+				//TODO: support new condition format
+				case EventCondition::HAVE_0:
+					break;
+				case EventCondition::DESTROY_0:
+					break;
+				case EventCondition::HAVE_BUILDING_0:
+					break;
 			}
 			return cond;
 		};

+ 22 - 3
lib/mapping/CMap.h

@@ -68,16 +68,22 @@ struct DLL_LINKAGE PlayerInfo
 	std::set<TFaction> allowedFactions;
 	bool isFactionRandom;
 
-	si32 mainCustomHeroPortrait; /// The default value is -1.
+	///main hero instance (VCMI maps only)
+	std::string mainHeroInstance;
+	/// Player has a random main hero
+	bool hasRandomHero;
+	/// The default value is -1.
+	si32 mainCustomHeroPortrait;
 	std::string mainCustomHeroName;
-	si32 mainCustomHeroId; /// ID of custom hero (only if portrait and hero name are set, otherwise unpredicted value), -1 if none (not always -1)
+	/// ID of custom hero (only if portrait and hero name are set, otherwise unpredicted value), -1 if none (not always -1)
+	si32 mainCustomHeroId;
 
 	std::vector<SHeroName> heroesNames; /// list of placed heroes on the map
 	bool hasMainTown; /// The default value is false.
 	bool generateHeroAtMainTown; /// The default value is false.
 	int3 posOfMainTown;
 	TeamID team; /// The default value NO_TEAM
-	bool hasRandomHero; /// Player has a random hero
+
 
 	bool generateHero; /// Unused.
 	si32 p7; /// Unknown and unused.
@@ -91,6 +97,11 @@ struct DLL_LINKAGE PlayerInfo
 		h & p7 & hasRandomHero & mainCustomHeroId & canHumanPlay & canComputerPlay & aiTactic & allowedFactions & isFactionRandom &
 				mainCustomHeroPortrait & mainCustomHeroName & heroesNames & hasMainTown & generateHeroAtMainTown &
 				posOfMainTown & team & generateHero;
+
+		if(version >= 770)
+		{
+			h & mainHeroInstance;
+		}
 	}
 };
 
@@ -124,6 +135,7 @@ struct DLL_LINKAGE EventCondition
 	EventCondition(EWinLoseType condition, si32 value, si32 objectType, int3 position = int3(-1, -1, -1));
 
 	const CGObjectInstance * object; // object that was at specified position or with instance name on start
+	EMetaclass metaType;
 	si32 value;
 	si32 objectType;
 	si32 objectSubtype;
@@ -144,6 +156,8 @@ struct DLL_LINKAGE EventCondition
 			h & objectSubtype;
 			h & objectInstanceName;
 		}
+		if(version >= 770)
+			h & metaType;
 	}
 };
 
@@ -203,11 +217,16 @@ struct DLL_LINKAGE Rumor
 	std::string name;
 	std::string text;
 
+	Rumor() = default;
+	~Rumor() = default;
+
 	template <typename Handler>
 	void serialize(Handler & h, const int version)
 	{
 		h & name & text;
 	}
+
+	void serializeJson(JsonSerializeFormat & handler);
 };
 
 /// The disposed hero struct describes which hero can be hired from which player.

+ 5 - 6
lib/mapping/CMapEditManager.cpp

@@ -247,9 +247,9 @@ void CMapEditManager::drawRoad(ERoadType::ERoadType roadType, CRandomGenerator*
 }
 
 
-void CMapEditManager::insertObject(CGObjectInstance * obj, const int3 & pos)
+void CMapEditManager::insertObject(CGObjectInstance * obj)
 {
-	execute(make_unique<CInsertObjectOperation>(map, obj, pos));
+	execute(make_unique<CInsertObjectOperation>(map, obj));
 }
 
 void CMapEditManager::execute(std::unique_ptr<CMapOperation> && operation)
@@ -422,7 +422,7 @@ CTerrainViewPatternConfig::CTerrainViewPatternConfig()
 						flipPattern(terGroupPattern, i); //FIXME: we flip in place - doesn't make much sense now, but used to work
 						terrainViewPatternFlips.push_back(terGroupPattern);
 					}
-					terrainViewPatterns[terGroup].push_back(terrainViewPatternFlips);	
+					terrainViewPatterns[terGroup].push_back(terrainViewPatternFlips);
 				}
 			}
 			else if(i == 1)
@@ -1069,15 +1069,14 @@ std::string CClearTerrainOperation::getLabel() const
 	return "Clear Terrain";
 }
 
-CInsertObjectOperation::CInsertObjectOperation(CMap * map, CGObjectInstance * obj, const int3 & pos)
-	: CMapOperation(map), pos(pos), obj(obj)
+CInsertObjectOperation::CInsertObjectOperation(CMap * map, CGObjectInstance * obj)
+	: CMapOperation(map), obj(obj)
 {
 
 }
 
 void CInsertObjectOperation::execute()
 {
-	obj->pos = pos;
 	obj->id = ObjectInstanceID(map->objects.size());
 
 	boost::format fmt("%s_%d");

+ 8 - 9
lib/mapping/CMapEditManager.h

@@ -119,10 +119,10 @@ public:
 	static const int FLIP_PATTERN_VERTICAL = 2;
 	static const int FLIP_PATTERN_BOTH = 3;
 
-protected:	
+protected:
 	MapRect extendTileAround(const int3 & centerPos) const;
-	MapRect extendTileAroundSafely(const int3 & centerPos) const; /// doesn't exceed map size	
-	
+	MapRect extendTileAroundSafely(const int3 & centerPos) const; /// doesn't exceed map size
+
 	CMap * map;
 };
 
@@ -170,11 +170,11 @@ public:
 
 	/// Draws terrain at the current terrain selection. The selection will be cleared automatically.
 	void drawTerrain(ETerrainType terType, CRandomGenerator * gen = nullptr);
-	
+
 	/// Draws roads at the current terrain selection. The selection will be cleared automatically.
 	void drawRoad(ERoadType::ERoadType roadType, CRandomGenerator * gen = nullptr);
-	
-	void insertObject(CGObjectInstance * obj, const int3 & pos);	
+
+	void insertObject(CGObjectInstance * obj);
 
 	CTerrainSelection & getTerrainSelection();
 	CObjectSelection & getObjectSelection();
@@ -267,7 +267,7 @@ struct DLL_LINKAGE TerrainViewPattern
 		/// Optional. A rule can have points. Patterns may have a minimum count of points to reach to be successful.
 		int points;
 
-	private:		
+	private:
 		bool standardRule;
 		bool anyRule;
 		bool dirtRule;
@@ -421,7 +421,7 @@ private:
 class CInsertObjectOperation : public CMapOperation
 {
 public:
-	CInsertObjectOperation(CMap * map, CGObjectInstance * obj, const int3 & pos);
+	CInsertObjectOperation(CMap * map, CGObjectInstance * obj);
 
 	void execute() override;
 	void undo() override;
@@ -429,6 +429,5 @@ public:
 	std::string getLabel() const override;
 
 private:
-	int3 pos;
 	CGObjectInstance * obj;
 };

+ 64 - 29
lib/mapping/MapFormatH3M.cpp

@@ -130,6 +130,7 @@ void CMapLoaderH3M::init()
 		}
 	}
 	map->calculateGuardingGreaturePositions();
+	afterRead();
 }
 
 void CMapLoaderH3M::readHeader()
@@ -1322,7 +1323,8 @@ void CMapLoaderH3M::readObjects()
 		case Obj::RANDOM_DWELLING_LVL: //same as castle, fixed level
 		case Obj::RANDOM_DWELLING_FACTION: //level range, fixed faction
 			{
-				nobj = new CGDwelling();
+				auto dwelling = new CGDwelling();
+				nobj = dwelling;
 				CSpecObjInfo * spec = nullptr;
 				switch(objTempl.id)
 				{
@@ -1330,18 +1332,31 @@ void CMapLoaderH3M::readObjects()
 					break; case Obj::RANDOM_DWELLING_LVL: spec = new CCreGenAsCastleInfo();
 					break; case Obj::RANDOM_DWELLING_FACTION: spec = new CCreGenLeveledInfo();
 				}
+				spec->owner = dwelling;
 
-				spec->player = PlayerColor(reader.readUInt32());
+				nobj->setOwner(PlayerColor(reader.readUInt32()));
 
 				//216 and 217
 				if (auto castleSpec = dynamic_cast<CCreGenAsCastleInfo *>(spec))
 				{
-					castleSpec->identifier =  reader.readUInt32();
+					castleSpec->instanceId = "";
+					castleSpec->identifier = reader.readUInt32();
 					if(!castleSpec->identifier)
 					{
 						castleSpec->asCastle = false;
-						castleSpec->castles[0] = reader.readUInt8();
-						castleSpec->castles[1] = reader.readUInt8();
+						const int MASK_SIZE = 8;
+						ui8 mask[2];
+						mask[0] = reader.readUInt8();
+						mask[1] = reader.readUInt8();
+
+						castleSpec->allowedFactions.clear();
+						castleSpec->allowedFactions.resize(VLC->townh->factions.size(), false);
+
+						for(int i = 0; i < MASK_SIZE; i++)
+							castleSpec->allowedFactions[i] = ((mask[0] & (1 << i))>0);
+
+						for(int i = 0; i < (GameConstants::F_NUMBER-MASK_SIZE); i++)
+							castleSpec->allowedFactions[i+MASK_SIZE] = ((mask[1] & (1 << i))>0);
 					}
 					else
 					{
@@ -1355,8 +1370,7 @@ void CMapLoaderH3M::readObjects()
 					lvlSpec->minLevel = std::max(reader.readUInt8(), ui8(1));
 					lvlSpec->maxLevel = std::min(reader.readUInt8(), ui8(7));
 				}
-				nobj->setOwner(spec->player);
-				static_cast<CGDwelling *>(nobj)->info = spec;
+				dwelling->info = spec;
 				break;
 			}
 		case Obj::QUEST_GUARD:
@@ -1819,9 +1833,9 @@ void CMapLoaderH3M::readQuest(IQuestObject * guard)
 
 	switch(guard->quest->missionType)
 	{
-	case 0:
+	case CQuest::MISSION_NONE:
 		return;
-	case 2:
+	case CQuest::MISSION_PRIMARY_STAT:
 		{
 			guard->quest->m2stats.resize(4);
 			for(int x = 0; x < 4; ++x)
@@ -1830,14 +1844,14 @@ void CMapLoaderH3M::readQuest(IQuestObject * guard)
 			}
 		}
 		break;
-	case 1:
-	case 3:
-	case 4:
+	case CQuest::MISSION_LEVEL:
+	case CQuest::MISSION_KILL_HERO:
+	case CQuest::MISSION_KILL_CREATURE:
 		{
 			guard->quest->m13489val = reader.readUInt32();
 			break;
 		}
-	case 5:
+	case CQuest::MISSION_ART:
 		{
 			int artNumber = reader.readUInt8();
 			for(int yy = 0; yy < artNumber; ++yy)
@@ -1848,7 +1862,7 @@ void CMapLoaderH3M::readQuest(IQuestObject * guard)
 			}
 			break;
 		}
-	case 6:
+	case CQuest::MISSION_ARMY:
 		{
 			int typeNumber = reader.readUInt8();
 			guard->quest->m6creatures.resize(typeNumber);
@@ -1859,7 +1873,7 @@ void CMapLoaderH3M::readQuest(IQuestObject * guard)
 			}
 			break;
 		}
-	case 7:
+	case CQuest::MISSION_RESOURCES:
 		{
 			guard->quest->m7resources.resize(7);
 			for(int x = 0; x < 7; ++x)
@@ -1868,8 +1882,8 @@ void CMapLoaderH3M::readQuest(IQuestObject * guard)
 			}
 			break;
 		}
-	case 8:
-	case 9:
+	case CQuest::MISSION_HERO:
+	case CQuest::MISSION_PLAYER:
 		{
 			guard->quest->m13489val = reader.readUInt8();
 			break;
@@ -2134,7 +2148,6 @@ void CMapLoaderH3M::readMessageAndGuards(std::string& message, CCreatureSet* gua
 	}
 }
 
-
 void CMapLoaderH3M::readSpells(std::set<SpellID>& dest)
 {
 	readBitmask(dest,9,GameConstants::SPELLS_QUANTITY,false);
@@ -2149,8 +2162,8 @@ void CMapLoaderH3M::readResourses(TResources& resources)
 	}
 }
 
-template <class Indenifier>
-void CMapLoaderH3M::readBitmask(std::set<Indenifier>& dest, const int byteCount, const int limit, bool negate)
+template <class Indentifier>
+void CMapLoaderH3M::readBitmask(std::set<Indentifier>& dest, const int byteCount, const int limit, bool negate)
 {
 	std::vector<bool> temp;
 	temp.resize(limit,true);
@@ -2160,18 +2173,11 @@ void CMapLoaderH3M::readBitmask(std::set<Indenifier>& dest, const int byteCount,
 	{
 		if(temp[i])
 		{
-			dest.insert(static_cast<Indenifier>(i));
+			dest.insert(static_cast<Indentifier>(i));
 		}
-//		else
-//		{
-//			dest.erase(static_cast<Indenifier>(i));
-//		}
 	}
-
 }
 
-
-
 void CMapLoaderH3M::readBitmask(std::vector<bool>& dest, const int byteCount, const int limit, bool negate)
 {
 	for(int byte = 0; byte < byteCount; ++byte)
@@ -2189,7 +2195,6 @@ void CMapLoaderH3M::readBitmask(std::vector<bool>& dest, const int byteCount, co
 	}
 }
 
-
 ui8 CMapLoaderH3M::reverse(ui8 arg)
 {
 	ui8 ret = 0;
@@ -2202,3 +2207,33 @@ ui8 CMapLoaderH3M::reverse(ui8 arg)
 	}
 	return ret;
 }
+
+void CMapLoaderH3M::afterRead()
+{
+    //convert main town positions for all players to actual object position, in H3M it is position of active tile
+
+    for(auto & p : map->players)
+	{
+		int3 posOfMainTown = p.posOfMainTown;
+		if(posOfMainTown.valid() && map->isInTheMap(posOfMainTown))
+		{
+			const TerrainTile & t = map->getTile(posOfMainTown);
+
+			const CGObjectInstance * mainTown = nullptr;
+
+			for(auto obj : t.visitableObjects)
+			{
+				if(obj->ID = Obj::TOWN)
+				{
+					mainTown = obj;
+					break;
+				}
+			}
+
+			if(mainTown == nullptr)
+				continue;
+
+			p.posOfMainTown = posOfMainTown + mainTown->getVisitableOffset();
+		}
+	}
+}

+ 2 - 0
lib/mapping/MapFormatH3M.h

@@ -242,6 +242,8 @@ private:
 		return p;
 	}
 
+	void afterRead();
+
 	/** List of templates loaded from the map, used on later stage to create
 	 *  objects but not needed for fully functional CMap */
 	std::vector<ObjectTemplate> templates;

+ 454 - 140
lib/mapping/MapFormatJson.cpp

@@ -15,6 +15,7 @@
 #include "../filesystem/COutputStream.h"
 #include "CMap.h"
 #include "../CModHandler.h"
+#include "../CCreatureHandler.h"
 #include "../CHeroHandler.h"
 #include "../CTownHandler.h"
 #include "../VCMI_Lib.h"
@@ -28,6 +29,65 @@
 #include "../serializer/JsonDeserializer.h"
 #include "../serializer/JsonSerializer.h"
 
+class MapObjectResolver: public IInstanceResolver
+{
+public:
+	MapObjectResolver(const CMapFormatJson * owner_);
+
+	si32 decode (const std::string & identifier) const override;
+	std::string encode(si32 identifier) const override;
+
+private:
+	const CMapFormatJson * owner;
+};
+
+MapObjectResolver::MapObjectResolver(const CMapFormatJson * owner_):
+	owner(owner_)
+{
+
+}
+
+si32 MapObjectResolver::decode(const std::string & identifier) const
+{
+	//always decode as ObjectInstanceID
+
+	auto it = owner->map->instanceNames.find(identifier);
+
+	if(it != owner->map->instanceNames.end())
+	{
+		return (*it).second->id.getNum();
+	}
+	else
+	{
+		logGlobal->errorStream() << "Object not found: " << identifier;
+		return -1;
+	}
+}
+
+std::string MapObjectResolver::encode(si32 identifier) const
+{
+	ObjectInstanceID id;
+
+	//use h3m questIdentifiers if they are present
+	if(owner->map->questIdentifierToId.empty())
+	{
+		id = ObjectInstanceID(identifier);
+	}
+	else
+	{
+		id = owner->map->questIdentifierToId[identifier];
+	}
+
+	si32 oid = id.getNum();
+	if(oid < 0  ||  oid >= owner->map->objects.size())
+	{
+        logGlobal->errorStream() << "Cannot get object with id " << oid;
+		return "";
+	}
+
+	return owner->map->objects[oid]->instanceName;
+}
+
 namespace HeaderDetail
 {
 	static const ui8 difficultyDefault = 1;//normal
@@ -40,6 +100,12 @@ namespace HeaderDetail
 		"EXPERT",
 		"IMPOSSIBLE"
 	};
+
+	static const std::vector<std::string> canPlayMap =
+	{
+		"AIOnly",
+		"PlayerOrAI"
+	};
 }
 
 namespace TriggeredEventsDetail
@@ -53,12 +119,67 @@ namespace TriggeredEventsDetail
 		"have_0", "haveBuilding_0", "destroy_0"
 	};
 
-
 	static const std::array<std::string, 2> typeNames = { "victory", "defeat" };
 
+	static EMetaclass decodeMetaclass(const std::string & source)
+	{
+		if(source == "")
+			return EMetaclass::INVALID;
+		auto rawId = vstd::find_pos(NMetaclass::names, source);
+
+		if(rawId >= 0)
+			return (EMetaclass)rawId;
+		else
+			return EMetaclass::INVALID;
+	}
+
+	static std::string encodeIdentifier(EMetaclass metaType, si32 type)
+	{
+		std::string metaclassName = NMetaclass::names[(int)metaType];
+		std::string identifier = "";
+
+		switch(metaType)
+		{
+		case EMetaclass::ARTIFACT:
+			{
+				identifier = CArtHandler::encodeArtifact(type);
+			}
+			break;
+		case EMetaclass::CREATURE:
+			{
+				identifier = CCreatureHandler::encodeCreature(type);
+			}
+			break;
+		case EMetaclass::OBJECT:
+			{
+				//TODO
+				std::set<si32> subtypes = VLC->objtypeh->knownSubObjects(type);
+				if(!subtypes.empty())
+				{
+					si32 subtype = *subtypes.begin();
+					auto handler = VLC->objtypeh->getHandlerFor(type, subtype);
+					identifier = handler->typeName;
+				}
+			}
+			break;
+		case EMetaclass::RESOURCE:
+			{
+				identifier = GameConstants::RESOURCE_NAMES[type];
+			}
+			break;
+		default:
+			{
+				logGlobal->error("Unsupported metaclass %s for event condition", metaclassName);
+				return "";
+			}
+			break;
+		}
+
+		return VLC->modh->makeFullIdentifier("", metaclassName, identifier);
+	}
+
 	static EventCondition JsonToCondition(const JsonNode & node)
 	{
-		//todo: support of new condition format
 		EventCondition event;
 
 		const auto & conditionName = node.Vector()[0].String();
@@ -66,23 +187,57 @@ namespace TriggeredEventsDetail
 		auto pos = vstd::find_pos(conditionNames, conditionName);
 
 		event.condition = EventCondition::EWinLoseType(pos);
+
 		if (node.Vector().size() > 1)
 		{
 			const JsonNode & data = node.Vector()[1];
-			if (data["type"].getType() == JsonNode::DATA_STRING)
+
+			switch (event.condition)
 			{
-				auto identifier = VLC->modh->identifiers.getIdentifier(data["type"]);
-				if(identifier)
-					event.objectType = identifier.get();
-				else
-					throw std::runtime_error("Identifier resolution failed in event condition");
-			}
+			case EventCondition::HAVE_0:
+			case EventCondition::DESTROY_0:
+				{
+					//todo: support subtypes
+
+					std::string fullIdentifier = data["type"].String(), metaTypeName = "", scope = "" , identifier = "";
+					CModHandler::parseIdentifier(fullIdentifier, scope, metaTypeName, identifier);
 
-			if (data["type"].getType() == JsonNode::DATA_FLOAT)
-				event.objectType = data["type"].Float();
+					event.metaType = decodeMetaclass(metaTypeName);
 
-			if (!data["value"].isNull())
-				event.value = data["value"].Float();
+					auto type = VLC->modh->identifiers.getIdentifier("core", fullIdentifier, false);
+
+					if(type)
+						event.objectType = type.get();
+					event.objectInstanceName = data["object"].String();
+					if(data["value"].isNumber())
+						event.value = data["value"].Integer();
+				}
+				break;
+			case EventCondition::HAVE_BUILDING_0:
+				{
+					//todo: support of new condition format HAVE_BUILDING_0
+				}
+				break;
+			default:
+				{
+					//old format
+					if (data["type"].getType() == JsonNode::DATA_STRING)
+					{
+						auto identifier = VLC->modh->identifiers.getIdentifier(data["type"]);
+						if(identifier)
+							event.objectType = identifier.get();
+						else
+							throw std::runtime_error("Identifier resolution failed in event condition");
+					}
+
+					if (data["type"].isNumber())
+						event.objectType = data["type"].Float();
+
+					if (!data["value"].isNull())
+						event.value = data["value"].Float();
+				}
+				break;
+			}
 
 			if (!data["position"].isNull())
 			{
@@ -91,21 +246,15 @@ namespace TriggeredEventsDetail
 				event.position.y = position.at(1).Float();
 				event.position.z = position.at(2).Float();
 			}
-
-//			if(!data["subtype"].isNull())
-//			{
-//				//todo
-//			}
-//			event.objectInstanceName = data["object"].String();
 		}
 		return event;
 	}
 
-	static JsonNode ConditionToJson(const EventCondition& event)
+	static JsonNode ConditionToJson(const EventCondition & event)
 	{
 		JsonNode json;
 
-		JsonVector& asVector = json.Vector();
+		JsonVector & asVector = json.Vector();
 
 		JsonNode condition;
 		condition.String() = conditionNames.at(event.condition);
@@ -113,15 +262,41 @@ namespace TriggeredEventsDetail
 
 		JsonNode data;
 
-		//todo: save identifier
+		switch (event.condition)
+		{
+		case EventCondition::HAVE_0:
+		case EventCondition::DESTROY_0:
+			{
+				//todo: support subtypes
+
+				if(event.metaType != EMetaclass::INVALID)
+					data["type"].String() = encodeIdentifier(event.metaType, event.objectType);
+
+				if(event.value > 0)
+					data["value"].Integer() = event.value;
 
-		if(event.objectType != -1)
-			data["type"].Float() = event.objectType;
+				if(event.objectInstanceName != "")
+					data["object"].String() = event.objectInstanceName;
+			}
+			break;
+		case EventCondition::HAVE_BUILDING_0:
+			{
+			//todo: support of new condition format HAVE_BUILDING_0
+			}
+			break;
+		default:
+			{
+				//old format
+				if(event.objectType != -1)
+					data["type"].Integer() = event.objectType;
 
-		if(event.value != -1)
-			data["value"].Float() = event.value;
+				if(event.value != -1)
+					data["value"].Integer() = event.value;
+			}
+			break;
+		}
 
-		if(event.position != int3(-1,-1,-1))
+		if(event.position != int3(-1, -1, -1))
 		{
 			auto & position = data["position"].Vector();
 			position.resize(3);
@@ -153,7 +328,7 @@ namespace TerrainDetail
 		"", "rw", "ri", "rm", "rl"
 	};
 
-	static const std::array<char, 10> flipCodes =
+	static const std::array<char, 4> flipCodes =
 	{
 		'_', '-', '|', '+'
 	};
@@ -166,6 +341,12 @@ const int CMapFormatJson::VERSION_MINOR = 0;
 const std::string CMapFormatJson::HEADER_FILE_NAME = "header.json";
 const std::string CMapFormatJson::OBJECTS_FILE_NAME = "objects.json";
 
+CMapFormatJson::CMapFormatJson():
+	mapObjectResolver(make_unique<MapObjectResolver>(this))
+{
+
+}
+
 void CMapFormatJson::serializeAllowedFactions(JsonSerializeFormat & handler, std::set<TFaction> & value)
 {
 	//TODO: unify allowed factions with others - make them std::vector<bool>
@@ -196,14 +377,20 @@ void CMapFormatJson::serializeHeader(JsonSerializeFormat & handler)
 {
 	handler.serializeString("name", mapHeader->name);
 	handler.serializeString("description", mapHeader->description);
-	handler.serializeNumeric("heroLevelLimit", mapHeader->levelLimit);
+	handler.serializeInt("heroLevelLimit", mapHeader->levelLimit, 0);
 
 	//todo: support arbitrary percentage
-	handler.serializeNumericEnum("difficulty", HeaderDetail::difficultyMap, HeaderDetail::difficultyDefault, mapHeader->difficulty);
+	handler.serializeEnum("difficulty", mapHeader->difficulty, HeaderDetail::difficultyMap);
 
 	serializePlayerInfo(handler);
 
 	handler.serializeLIC("allowedHeroes", &CHeroHandler::decodeHero, &CHeroHandler::encodeHero, VLC->heroh->getDefaultAllowed(), mapHeader->allowedHeroes);
+
+	handler.serializeString("victoryString", mapHeader->victoryMessage);
+	handler.serializeInt("victoryIconIndex", mapHeader->victoryIconIndex);
+
+	handler.serializeString("defeatString", mapHeader->defeatMessage);
+	handler.serializeInt("defeatIconIndex", mapHeader->defeatIconIndex);
 }
 
 void CMapFormatJson::serializePlayerInfo(JsonSerializeFormat & handler)
@@ -235,48 +422,100 @@ void CMapFormatJson::serializePlayerInfo(JsonSerializeFormat & handler)
 
 		serializeAllowedFactions(handler, info.allowedFactions);
 
-		handler.serializeEnum("canPlay", "PlayerOrAI", "AIOnly", info.canHumanPlay);
+		handler.serializeEnum("canPlay", info.canHumanPlay, HeaderDetail::canPlayMap);
 
 		//saving whole structure only if position is valid
 		if(!handler.saving || info.posOfMainTown.valid())
 		{
 			auto mainTown = handler.enterStruct("mainTown");
 			handler.serializeBool("generateHero", info.generateHeroAtMainTown);
-			handler.serializeNumeric("x", info.posOfMainTown.x);
-			handler.serializeNumeric("y", info.posOfMainTown.y);
-			handler.serializeNumeric("l", info.posOfMainTown.z);
+			handler.serializeInt("x", info.posOfMainTown.x, -1);
+			handler.serializeInt("y", info.posOfMainTown.y, -1);
+			handler.serializeInt("l", info.posOfMainTown.z, -1);
 		}
 		if(!handler.saving)
 		{
 			info.hasMainTown = info.posOfMainTown.valid();
 		}
 
-		//mainHero
-
-		//mainHeroPortrait
-
-		//mainCustomHeroName
+		handler.serializeString("mainHero", info.mainHeroInstance);//must be before "heroes"
 
 		//heroes
+		if(handler.saving)
 		{
-			//auto heroes = playerData.enterStruct("heroes");
+			//ignoring heroesNames and saving from actual map objects
+			//TODO: optimize
+			for(auto & obj : map->objects)
+			{
+				if((obj->ID == Obj::HERO || obj->ID == Obj::RANDOM_HERO) && obj->tempOwner == PlayerColor(player))
+				{
+					CGHeroInstance * hero = dynamic_cast<CGHeroInstance *>(obj.get());
 
+					auto heroes = playerData.enterStruct("heroes");
+					if(hero)
+					{
+						auto heroData = heroes.enterStruct(hero->instanceName);
+						heroData->serializeString("name", hero->name);
+
+						if(hero->ID == Obj::HERO)
+						{
+							if(hero->type)
+							{
+								handler.serializeString("type", hero->type->identifier);
+							}
+							else
+							{
+								auto temp = VLC->heroh->heroes[hero->subID]->identifier;
+								handler.serializeString("type", temp);
+							}
+						}
+					}
+				}
+			}
 		}
-
-		if(!handler.saving)
+		else
 		{
-			//isFactionRandom indicates that player may select faction, depends on towns & heroes
-			// true if main town is random and generateHeroAtMainTown==true
-			// or main hero is random
-			//TODO: recheck mechanics
-			info.isFactionRandom = info.allowedFactions.size() > 1;
+			info.heroesNames.clear();
+
+			auto heroes = playerData.enterStruct("heroes");
+
+			for(const auto & hero : handler.getCurrent().Struct())
+			{
+                const JsonNode & data = hero.second;
+                const std::string instanceName = hero.first;
+
+                SHeroName hname;
+				hname.heroId = -1;
+				std::string rawId = data["type"].String();
+
+				if(rawId != "")
+				{
+					hname.heroId = VLC->heroh->decodeHero(rawId);
+				}
+
+                hname.heroName = data["name"].String();
+
+                if(instanceName == info.mainHeroInstance)
+				{
+					//this is main hero
+					info.mainCustomHeroName = hname.heroName;
+					info.hasRandomHero = (hname.heroId == -1);
+					info.mainCustomHeroId = hname.heroId;
+					info.mainCustomHeroPortrait = -1;
+					//todo:mainHeroPortrait
+				}
+
+                info.heroesNames.push_back(hname);
+			}
 		}
+
+		handler.serializeBool("randomFaction", info.isFactionRandom);
 	}
 }
 
 void CMapFormatJson::readTeams(JsonDeserializer & handler)
 {
-	auto teams = handler.enterStruct("teams");
+	auto teams = handler.enterArray("teams");
 	const JsonNode & src = teams.get();
 
     if(src.getType() != JsonNode::DATA_VECTOR)
@@ -287,12 +526,8 @@ void CMapFormatJson::readTeams(JsonDeserializer & handler)
 
 		mapHeader->howManyTeams = 0;
 		for(int i = 0; i < PlayerColor::PLAYER_LIMIT_I; i++)
-		{
 			if(mapHeader->players[i].canComputerPlay || mapHeader->players[i].canHumanPlay)
-			{
 				mapHeader->players[i].team = TeamID(mapHeader->howManyTeams++);
-			}
-		}
 	}
 	else
 	{
@@ -300,34 +535,22 @@ void CMapFormatJson::readTeams(JsonDeserializer & handler)
 		mapHeader->howManyTeams = srcVector.size();
 
 		for(int team = 0; team < mapHeader->howManyTeams; team++)
-		{
 			for(const JsonNode & playerData : srcVector[team].Vector())
 			{
 				PlayerColor player = PlayerColor(vstd::find_pos(GameConstants::PLAYER_COLOR_NAMES, playerData.String()));
 				if(player.isValidPlayer())
-				{
 					if(mapHeader->players[player.getNum()].canAnyonePlay())
-					{
 						mapHeader->players[player.getNum()].team = TeamID(team);
-					}
-				}
 			}
-		}
 
 		for(PlayerInfo & player : mapHeader->players)
-		{
 			if(player.canAnyonePlay() && player.team == TeamID::NO_TEAM)
 				player.team = TeamID(mapHeader->howManyTeams++);
-		}
-
 	}
 }
 
-
 void CMapFormatJson::writeTeams(JsonSerializer & handler)
 {
-	auto teams = handler.enterStruct("teams");
-	JsonNode & dest = teams.get();
 	std::vector<std::set<PlayerColor>> teamsData;
 
 	teamsData.resize(mapHeader->howManyTeams);
@@ -347,41 +570,35 @@ void CMapFormatJson::writeTeams(JsonSerializer & handler)
 		return elem.size() <= 1;
 	});
 
-	//construct output
-	dest.setType(JsonNode::DATA_VECTOR);
-
-	for(const std::set<PlayerColor> & teamData : teamsData)
+	if(!teamsData.empty())
 	{
-		JsonNode team(JsonNode::DATA_VECTOR);
-		for(const PlayerColor & player : teamData)
+		auto teams = handler.enterArray("teams");
+		JsonNode & dest = teams.get();
+
+		//construct output
+		dest.setType(JsonNode::DATA_VECTOR);
+
+		for(const std::set<PlayerColor> & teamData : teamsData)
 		{
-			JsonNode member(JsonNode::DATA_STRING);
-			member.String() = GameConstants::PLAYER_COLOR_NAMES[player.getNum()];
-			team.Vector().push_back(std::move(member));
+			JsonNode team(JsonNode::DATA_VECTOR);
+			for(const PlayerColor & player : teamData)
+			{
+				JsonNode member(JsonNode::DATA_STRING);
+				member.String() = GameConstants::PLAYER_COLOR_NAMES[player.getNum()];
+				team.Vector().push_back(std::move(member));
+			}
+			dest.Vector().push_back(std::move(team));
 		}
-		dest.Vector().push_back(std::move(team));
 	}
 }
 
-void CMapFormatJson::serializeTriggeredEvents(JsonSerializeFormat & handler)
-{
-	handler.serializeString("victoryString", mapHeader->victoryMessage);
-	handler.serializeNumeric("victoryIconIndex", mapHeader->victoryIconIndex);
-
-	handler.serializeString("defeatString", mapHeader->defeatMessage);
-	handler.serializeNumeric("defeatIconIndex", mapHeader->defeatIconIndex);
-}
-
-
 void CMapFormatJson::readTriggeredEvents(JsonDeserializer & handler)
 {
 	const JsonNode & input = handler.getCurrent();
 
-	serializeTriggeredEvents(handler);
-
 	mapHeader->triggeredEvents.clear();
 
-	for (auto & entry : input["triggeredEvents"].Struct())
+	for(auto & entry : input["triggeredEvents"].Struct())
 	{
 		TriggeredEvent event;
 		event.identifier = entry.first;
@@ -405,34 +622,138 @@ void CMapFormatJson::writeTriggeredEvents(JsonSerializer & handler)
 {
 	JsonNode & output = handler.getCurrent();
 
-	serializeTriggeredEvents(handler);
-
 	JsonMap & triggeredEvents = output["triggeredEvents"].Struct();
 
 	for(auto event : mapHeader->triggeredEvents)
 		writeTriggeredEvent(event, triggeredEvents[event.identifier]);
 }
 
-void CMapFormatJson::writeTriggeredEvent(const TriggeredEvent& event, JsonNode& dest)
+void CMapFormatJson::writeTriggeredEvent(const TriggeredEvent & event, JsonNode & dest)
 {
 	using namespace TriggeredEventsDetail;
 
-	dest["message"].String() = event.onFulfill;
-	dest["description"].String() = event.description;
+	if(!event.onFulfill.empty())
+		dest["message"].String() = event.onFulfill;
+
+	if(!event.description.empty())
+		dest["description"].String() = event.description;
 
 	dest["effect"]["type"].String() = typeNames.at(size_t(event.effect.type));
-	dest["effect"]["messageToSend"].String() = event.effect.toOtherMessage;
+
+	if(!event.effect.toOtherMessage.empty())
+		dest["effect"]["messageToSend"].String() = event.effect.toOtherMessage;
 
 	dest["condition"] = event.trigger.toJson(ConditionToJson);
 }
 
-void CMapFormatJson::serializeOptions(JsonSerializeFormat & handler)
+void CMapFormatJson::readDisposedHeroes(JsonSerializeFormat & handler)
+{
+	auto definitions = handler.enterStruct("predefinedHeroes");//DisposedHeroes are part of predefinedHeroes in VCMI map format
+
+	JsonNode & data = handler.getCurrent();
+
+	for(const auto & entry : data.Struct())
+	{
+		HeroTypeID type(VLC->heroh->decodeHero(entry.first));
+
+		ui8 mask = 0;
+
+		for(const JsonNode & playerData : entry.second["availableFor"].Vector())
+		{
+			PlayerColor player = PlayerColor(vstd::find_pos(GameConstants::PLAYER_COLOR_NAMES, playerData.String()));
+			if(player.isValidPlayer())
+			{
+				mask |= 1 << player.getNum();
+			}
+		}
+
+		if(mask != 0 && mask != GameConstants::ALL_PLAYERS && type.getNum() >= 0)
+		{
+			DisposedHero hero;
+
+			hero.heroId = type.getNum();
+			hero.players = mask;
+			//name and portrait are not used
+
+			map->disposedHeroes.push_back(hero);
+		}
+	}
+}
+
+void CMapFormatJson::writeDisposedHeroes(JsonSerializeFormat & handler)
+{
+	if(map->disposedHeroes.empty())
+		return;
+
+	auto definitions = handler.enterStruct("predefinedHeroes");//DisposedHeroes are part of predefinedHeroes in VCMI map format
+
+	JsonNode & data = handler.getCurrent();
+
+	for(const DisposedHero & hero : map->disposedHeroes)
+	{
+		std::string type = VLC->heroh->encodeHero(hero.heroId);
+
+		JsonVector & players = data[type]["availableFor"].Vector();
+
+		for(int playerNum = 0; playerNum < PlayerColor::PLAYER_LIMIT_I; playerNum++)
+            if((1 << playerNum) & hero.players)
+			{
+				JsonNode player(JsonNode::DATA_STRING);
+				player.String() = GameConstants::PLAYER_COLOR_NAMES[playerNum];
+				players.push_back(player);
+			}
+	}
+}
+
+void CMapFormatJson::serializeRumors(JsonSerializeFormat & handler)
 {
-	//rumors
+	auto rumors = handler.enterArray("rumors");
+	rumors.serializeStruct(map->rumors);
+}
 
-	//disposedHeroes
+void CMapFormatJson::serializePredefinedHeroes(JsonSerializeFormat & handler)
+{
+    //todo:serializePredefinedHeroes
 
-	//predefinedHeroes
+    if(handler.saving)
+	{
+		if(!map->predefinedHeroes.empty())
+		{
+			auto predefinedHeroes = handler.enterStruct("predefinedHeroes");
+
+            for(auto & hero : map->predefinedHeroes)
+			{
+                auto predefinedHero = handler.enterStruct(hero->getHeroTypeName());
+
+                hero->serializeJsonDefinition(handler);
+			}
+		}
+	}
+	else
+	{
+		auto predefinedHeroes = handler.enterStruct("predefinedHeroes");
+
+        const JsonNode & data = handler.getCurrent();
+
+        for(const auto & p : data.Struct())
+		{
+			auto predefinedHero = handler.enterStruct(p.first);
+
+			CGHeroInstance * hero = new CGHeroInstance();
+			hero->ID = Obj::HERO;
+            hero->setHeroTypeName(p.first);
+            hero->serializeJsonDefinition(handler);
+
+            map->predefinedHeroes.push_back(hero);
+		}
+	}
+}
+
+void CMapFormatJson::serializeOptions(JsonSerializeFormat & handler)
+{
+	serializeRumors(handler);
+
+	serializePredefinedHeroes(handler);
 
 	handler.serializeLIC("allowedAbilities", &CHeroHandler::decodeSkill, &CHeroHandler::encodeSkill, VLC->heroh->getDefaultAllowedAbilities(), map->allowedAbilities);
 
@@ -440,22 +761,24 @@ void CMapFormatJson::serializeOptions(JsonSerializeFormat & handler)
 
 	handler.serializeLIC("allowedSpells", &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell, VLC->spellh->getDefaultAllowed(), map->allowedSpell);
 
-	//events
+	//todo:events
 }
 
 void CMapFormatJson::readOptions(JsonDeserializer & handler)
 {
+	readDisposedHeroes(handler);
 	serializeOptions(handler);
 }
 
 void CMapFormatJson::writeOptions(JsonSerializer & handler)
 {
+	writeDisposedHeroes(handler);
 	serializeOptions(handler);
 }
 
-
 ///CMapPatcher
 CMapPatcher::CMapPatcher(JsonNode stream):
+	CMapFormatJson(),
 	input(stream)
 {
 	//todo: update map patches and change this
@@ -473,13 +796,13 @@ void CMapPatcher::patchMapHeader(std::unique_ptr<CMapHeader> & header)
 
 void CMapPatcher::readPatchData()
 {
-	JsonDeserializer handler(input);
+	JsonDeserializer handler(mapObjectResolver.get(), input);
 	readTriggeredEvents(handler);
 }
 
-
 ///CMapLoaderJson
 CMapLoaderJson::CMapLoaderJson(CInputStream * stream):
+	CMapFormatJson(),
 	buffer(stream),
 	ioApi(new CProxyROIOApi(buffer)),
 	loader("", "_", ioApi)
@@ -487,17 +810,6 @@ CMapLoaderJson::CMapLoaderJson(CInputStream * stream):
 
 }
 
-si32 CMapLoaderJson::getIdentifier(const std::string& type, const std::string& name)
-{
-	boost::optional<si32> res = VLC->modh->identifiers.getIdentifier("core", type, name, false);
-
-	if(!res)
-	{
-		throw new std::runtime_error("Map load failed. Identifier not resolved.");
-	}
-	return res.get();
-}
-
 std::unique_ptr<CMap> CMapLoaderJson::loadMap()
 {
 	LOG_TRACE(logGlobal);
@@ -560,10 +872,10 @@ void CMapLoaderJson::readHeader(const bool complete)
 
 	if(fileVersionMinor > VERSION_MINOR)
 	{
-		logGlobal->traceStream() << "Too new map format revision: " << fileVersionMinor << ". This map should work but some of map features may be ignored.";
+		logGlobal->warnStream() << "Too new map format revision: " << fileVersionMinor << ". This map should work but some of map features may be ignored.";
 	}
 
-	JsonDeserializer handler(header);
+	JsonDeserializer handler(mapObjectResolver.get(), header);
 
 	mapHeader->version = EMapFormat::VCMI;//todo: new version field
 
@@ -586,20 +898,18 @@ void CMapLoaderJson::readHeader(const bool complete)
 
 	readTriggeredEvents(handler);
 
-
 	readTeams(handler);
-	//TODO: readHeader
+	//TODO: check mods
 
 	if(complete)
 		readOptions(handler);
 }
 
-
-void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
+void CMapLoaderJson::readTerrainTile(const std::string & src, TerrainTile & tile)
 {
 	using namespace TerrainDetail;
 	{//terrain type
-		const std::string typeCode = src.substr(0,2);
+		const std::string typeCode = src.substr(0, 2);
 
 		int rawType = vstd::find_pos(terrainCodes, typeCode);
 
@@ -616,7 +926,7 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
 		int len = pos - startPos;
 		if(len<=0)
 			throw new std::runtime_error("Invalid terrain view in "+src);
-		const std::string rawCode = src.substr(startPos,len);
+		const std::string rawCode = src.substr(startPos, len);
 		tile.terView = atoi(rawCode.c_str());
 		startPos+=len;
 	}
@@ -631,7 +941,7 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
 		return;
 	bool hasRoad = true;
 	{//road type
-		const std::string typeCode = src.substr(startPos,2);
+		const std::string typeCode = src.substr(startPos, 2);
 		startPos+=2;
 		int rawType = vstd::find_pos(roadCodes, typeCode);
 		if(rawType < 0)
@@ -656,7 +966,7 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
 		int len = pos - startPos;
 		if(len<=0)
 			throw new std::runtime_error("Invalid road dir in "+src);
-		const std::string rawCode = src.substr(startPos,len);
+		const std::string rawCode = src.substr(startPos, len);
 		tile.roadDir = atoi(rawCode.c_str());
 		startPos+=len;
 	}
@@ -672,7 +982,7 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
 		return;
 	if(hasRoad)
 	{//river type
-		const std::string typeCode = src.substr(startPos,2);
+		const std::string typeCode = src.substr(startPos, 2);
 		startPos+=2;
 		int rawType = vstd::find_pos(riverCodes, typeCode);
 		if(rawType < 0)
@@ -686,7 +996,7 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
 		int len = pos - startPos;
 		if(len<=0)
 			throw new std::runtime_error("Invalid river dir in "+src);
-		const std::string rawCode = src.substr(startPos,len);
+		const std::string rawCode = src.substr(startPos, len);
 		tile.riverDir = atoi(rawCode.c_str());
 		startPos+=len;
 	}
@@ -699,9 +1009,9 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
 	}
 }
 
-void CMapLoaderJson::readTerrainLevel(const JsonNode& src, const int index)
+void CMapLoaderJson::readTerrainLevel(const JsonNode & src, const int index)
 {
-	int3 pos(0,0,index);
+	int3 pos(0, 0, index);
 
 	const JsonVector & rows = src.Vector();
 
@@ -734,15 +1044,15 @@ void CMapLoaderJson::readTerrain()
 
 }
 
-CMapLoaderJson::MapObjectLoader::MapObjectLoader(CMapLoaderJson * _owner, JsonMap::value_type& json):
-	owner(_owner), instance(nullptr),id(-1), jsonKey(json.first), configuration(json.second)
+CMapLoaderJson::MapObjectLoader::MapObjectLoader(CMapLoaderJson * _owner, JsonMap::value_type & json):
+	owner(_owner), instance(nullptr), id(-1), jsonKey(json.first), configuration(json.second)
 {
 
 }
 
 void CMapLoaderJson::MapObjectLoader::construct()
 {
-	logGlobal->debugStream() <<"Loading: " <<jsonKey;
+	//logGlobal->debugStream() <<"Loading: " <<jsonKey;
 
 	//TODO:consider move to ObjectTypeHandler
 	//find type handler
@@ -778,9 +1088,9 @@ void CMapLoaderJson::MapObjectLoader::construct()
 
 	ObjectTemplate appearance;
 
-	appearance.readJson(configuration["template"], false);
 	appearance.id = Obj(handler->type);
 	appearance.subid = handler->subtype;
+	appearance.readJson(configuration["template"], false);
 
 	instance = handler->create(appearance);
 
@@ -795,14 +1105,15 @@ void CMapLoaderJson::MapObjectLoader::configure()
 	if(nullptr == instance)
 		return;
 
-	JsonDeserializer handler(configuration);
+	JsonDeserializer handler(owner->mapObjectResolver.get(), configuration);
 
 	instance->serializeJson(handler);
 
+	//artifact instance serialization requires access to Map object, handle it here for now
+	//todo: find better solution for artifact instance serialization
+
 	if(auto art = dynamic_cast<CGArtifact *>(instance))
 	{
-		//todo: find better place for this code
-
 		int artID = ArtifactID::NONE;
 		int spellID = -1;
 
@@ -824,6 +1135,12 @@ void CMapLoaderJson::MapObjectLoader::configure()
 
 		art->storedArtifact = CArtifactInstance::createArtifact(owner->map, artID, spellID);
 	}
+
+	if(auto hero = dynamic_cast<CGHeroInstance *>(instance))
+	{
+		auto o = handler.enterStruct("options");
+		hero->serializeJsonArtifacts(handler, "artifacts", owner->map);
+	}
 }
 
 void CMapLoaderJson::readObjects()
@@ -853,6 +1170,7 @@ void CMapLoaderJson::readObjects()
 
 ///CMapSaverJson
 CMapSaverJson::CMapSaverJson(CInputOutputStream * stream):
+	CMapFormatJson(),
 	buffer(stream),
 	ioApi(new CProxyIOApi(buffer)),
 	saver(ioApi, "_")
@@ -866,7 +1184,7 @@ CMapSaverJson::~CMapSaverJson()
 
 }
 
-void CMapSaverJson::addToArchive(const JsonNode& data, const std::string& filename)
+void CMapSaverJson::addToArchive(const JsonNode & data, const std::string & filename)
 {
 	std::ostringstream out;
 	out << data;
@@ -893,7 +1211,7 @@ void CMapSaverJson::saveMap(const std::unique_ptr<CMap>& map)
 void CMapSaverJson::writeHeader()
 {
 	JsonNode header;
-	JsonSerializer handler(header);
+	JsonSerializer handler(mapObjectResolver.get(), header);
 
 	header["versionMajor"].Float() = VERSION_MAJOR;
 	header["versionMinor"].Float() = VERSION_MINOR;
@@ -933,14 +1251,10 @@ const std::string CMapSaverJson::writeTerrainTile(const TerrainTile & tile)
 	out << terrainCodes.at(int(tile.terType)) << (int)tile.terView << flipCodes[tile.extTileFlags % 4];
 
 	if(tile.roadType != ERoadType::NO_ROAD)
-	{
 		out << roadCodes.at(int(tile.roadType)) << (int)tile.roadDir << flipCodes[(tile.extTileFlags >> 4) % 4];
-	}
 
 	if(tile.riverType != ERiverType::NO_RIVER)
-	{
 		out << riverCodes.at(int(tile.riverType)) << (int)tile.riverDir << flipCodes[(tile.extTileFlags >> 2) % 4];
-	}
 
 	return out.str();
 }
@@ -983,7 +1297,7 @@ void CMapSaverJson::writeObjects()
 {
 	JsonNode data(JsonNode::DATA_STRUCT);
 
-	JsonSerializer handler(data);
+	JsonSerializer handler(mapObjectResolver.get(), data);
 
 	for(CGObjectInstance * obj : map->objects)
 	{

+ 12 - 8
lib/mapping/MapFormatJson.h

@@ -17,6 +17,8 @@
 #include "../filesystem/CZipLoader.h"
 #include "../GameConstants.h"
 
+#include "../serializer/JsonSerializeFormat.h"
+
 struct TriggeredEvent;
 struct TerrainTile;
 struct PlayerInfo;
@@ -39,6 +41,8 @@ public:
 	int fileVersionMajor;
 	int fileVersionMinor;
 protected:
+	friend class MapObjectResolver;
+	std::unique_ptr<IInstanceResolver> mapObjectResolver;
 
 	/** ptr to the map object which gets filled by data from the buffer or written to buffer */
 	CMap * map;
@@ -49,6 +53,8 @@ protected:
 	 */
 	CMapHeader * mapHeader;
 
+	CMapFormatJson();
+
 	void serializeAllowedFactions(JsonSerializeFormat & handler, std::set<TFaction> & value);
 
 	///common part of header saving/loading
@@ -67,10 +73,6 @@ protected:
 	 */
 	void writeTeams(JsonSerializer & handler);
 
-
-	///common part triggered events of saving/loading
-	void serializeTriggeredEvents(JsonSerializeFormat & handler);
-
 	/**
 	 * Reads triggered events, including victory/loss conditions
 	 */
@@ -91,7 +93,13 @@ protected:
 	 */
 	void writeTriggeredEvent(const TriggeredEvent & event, JsonNode & dest);
 
+	void writeDisposedHeroes(JsonSerializeFormat & handler);
+
+	void readDisposedHeroes(JsonSerializeFormat & handler);
 
+	void serializePredefinedHeroes(JsonSerializeFormat & handler);
+
+	void serializeRumors(JsonSerializeFormat & handler);
 
 	///common part of map attributes saving/loading
 	void serializeOptions(JsonSerializeFormat & handler);
@@ -130,7 +138,6 @@ private:
 	 */
 	void readPatchData();
 
-
 	JsonNode input;
 };
 
@@ -174,11 +181,8 @@ private:
 
 		///configures object
 		void configure();
-
 	};
 
-	si32 getIdentifier(const std::string & type, const std::string & name);
-
 	/**
 	 * Reads the map header.
 	 */

+ 3 - 3
lib/rmg/CRmgTemplateZone.cpp

@@ -763,7 +763,7 @@ bool CRmgTemplateZone::createRoad(CMapGenerator* gen, const int3& src, const int
 	auto pq = std::move(createPiorityQueue());    // The set of tentative nodes to be evaluated, initially containing the start node
 	std::map<int3, int3> cameFrom;  // The map of navigated nodes.
 	std::map<int3, float> distances;
-	
+
 	gen->setRoad (src, ERoadType::NO_ROAD); //just in case zone guard already has road under it. Road under nodes will be added at very end
 
 	cameFrom[src] = int3(-1, -1, -1); //first node points to finish condition
@@ -1432,7 +1432,7 @@ void CRmgTemplateZone::initTownType (CMapGenerator* gen)
 			playerInfo.allowedFactions.clear();
 			playerInfo.allowedFactions.insert(townType);
 			playerInfo.hasMainTown = true;
-			playerInfo.posOfMainTown = town->pos - town->getVisitableOffset();
+			playerInfo.posOfMainTown = town->pos;
 			playerInfo.generateHeroAtMainTown = true;
 
 			//now create actual towns
@@ -2092,7 +2092,7 @@ void CRmgTemplateZone::checkAndPlaceObject(CMapGenerator* gen, CGObjectInstance*
 		object->appearance = templates.front();
 	}
 
-	gen->editManager->insertObject(object, pos);
+	gen->editManager->insertObject(object);
 	//logGlobal->traceStream() << boost::format ("Successfully inserted object (%d,%d) at pos %s") %object->ID %object->subID %pos();
 }
 

+ 1 - 1
lib/serializer/CSerializer.h

@@ -14,7 +14,7 @@
 #include "../ConstTransitivePtr.h"
 #include "../GameConstants.h"
 
-const ui32 SERIALIZATION_VERSION = 762;
+const ui32 SERIALIZATION_VERSION = 770;
 const ui32 MINIMAL_SERIALIZATION_VERSION = 753;
 const std::string SAVEGAME_MAGIC = "VCMISVG";
 

+ 111 - 29
lib/serializer/JsonDeserializer.cpp

@@ -14,63 +14,88 @@
 
 #include "../JsonNode.h"
 
-JsonDeserializer::JsonDeserializer(JsonNode & root_):
-	JsonSerializeFormat(root_, false)
+JsonDeserializer::JsonDeserializer(const IInstanceResolver * instanceResolver_, JsonNode & root_):
+	JsonSerializeFormat(instanceResolver_, root_, false)
 {
 
 }
 
-void JsonDeserializer::serializeBool(const std::string & fieldName, bool & value)
+void JsonDeserializer::serializeInternal(const std::string & fieldName, boost::logic::tribool & value)
 {
-	value = current->operator[](fieldName).Bool();
+	const JsonNode & data = current->operator[](fieldName);
+	if(data.getType() != JsonNode::DATA_BOOL)
+		value = boost::logic::indeterminate;
+	else
+		value = data.Bool();
 }
 
-void JsonDeserializer::serializeEnum(const std::string & fieldName, const std::string & trueValue, const std::string & falseValue, bool & value)
+void JsonDeserializer::serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const TDecoder & decoder, const TEncoder & encoder)
 {
-	const JsonNode & tmp = current->operator[](fieldName);
+	std::string identifier;
+	serializeString(fieldName, identifier);
 
-	value = tmp.String() == trueValue;
+	value = defaultValue ? defaultValue.get() : 0;
+
+	if(identifier != "")
+	{
+		si32 rawId = decoder(identifier);
+		if(rawId >= 0)
+			value = rawId;
+	}
 }
 
-void JsonDeserializer::serializeFloat(const std::string & fieldName, double & value)
+void JsonDeserializer::serializeInternal(const std::string & fieldName, std::vector<si32> & value, const TDecoder & decoder, const TEncoder & encoder)
 {
-	value = current->operator[](fieldName).Float();
+	const JsonVector & data = current->operator[](fieldName).Vector();
+
+	value.clear();
+	value.reserve(data.size());
+
+	for(const JsonNode elem : data)
+	{
+		si32 rawId = decoder(elem.String());
+
+		if(rawId >= 0)
+			value.push_back(rawId);
+	}
 }
 
-void JsonDeserializer::serializeIntEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const si32 defaultValue, si32 & value)
+void JsonDeserializer::serializeInternal(const std::string & fieldName, double & value, const boost::optional<double> & defaultValue)
 {
-	const std::string & valueName = current->operator[](fieldName).String();
+	const JsonNode & data = current->operator[](fieldName);
 
-	si32 rawValue = vstd::find_pos(enumMap, valueName);
-	if(rawValue < 0)
-		value = defaultValue;
+	if(!data.isNumber())
+		value = defaultValue ? defaultValue.get() : 0;//todo: report error on not null?
 	else
-		value = rawValue;
+		value = data.Float();
 }
 
-void JsonDeserializer::serializeIntId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const si32 defaultValue, si32 & value)
+void JsonDeserializer::serializeInternal(const std::string & fieldName, si64 & value, const boost::optional<si64> & defaultValue)
 {
-	std::string identifier;
-	serializeString(fieldName, identifier);
+	const JsonNode & data = current->operator[](fieldName);
 
-	if(identifier == "")
-	{
-		value = defaultValue;
-		return;
-	}
+	if(!data.isNumber())
+		value = defaultValue ? defaultValue.get() : 0;//todo: report error on not null?
+	else
+		value = data.Integer();
+}
+
+void JsonDeserializer::serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const std::vector<std::string> & enumMap)
+{
+	const std::string & valueName = current->operator[](fieldName).String();
 
-	si32 rawId = decoder(identifier);
-	if(rawId >= 0)
-		value = rawId;
+	const si32 actualOptional = defaultValue ? defaultValue.get() : 0;
+
+	si32 rawValue = vstd::find_pos(enumMap, valueName);
+	if(rawValue < 0)
+		value = actualOptional;
 	else
-		value = defaultValue;
+		value = rawValue;
 }
 
 void JsonDeserializer::serializeLIC(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const std::vector<bool> & standard, std::vector<bool> & value)
 {
 	const JsonNode & field = current->operator[](fieldName);
-	if(field.isNull())
-		return;
 
 	const JsonNode & anyOf = field["anyOf"];
 	const JsonNode & allOf = field["allOf"];
@@ -139,6 +164,51 @@ void JsonDeserializer::serializeLIC(const std::string & fieldName, LIC & value)
 	}
 }
 
+void JsonDeserializer::serializeLIC(const std::string & fieldName, LICSet & value)
+{
+	const JsonNode & field = current->operator[](fieldName);
+
+	const JsonNode & anyOf = field["anyOf"];
+	const JsonNode & allOf = field["allOf"];
+	const JsonNode & noneOf = field["noneOf"];
+
+	value.all.clear();
+	value.none.clear();
+
+	if(anyOf.Vector().empty())
+	{
+		//permissive mode
+		value.any = value.standard;
+	}
+	else
+	{
+		//restrictive mode
+		value.any.clear();
+		readLICPart(anyOf, value.decoder, value.any);
+
+		for(si32 item : value.standard)
+			if(!vstd::contains(value.any, item))
+				value.none.insert(item);
+	}
+
+	readLICPart(allOf, value.decoder, value.all);
+	readLICPart(noneOf, value.decoder, value.none);
+
+	//remove any banned from allowed and required
+	auto isBanned = [&value](const si32 item)->bool
+	{
+		return vstd::contains(value.none, item);
+	};
+	vstd::erase_if(value.all, isBanned);
+	vstd::erase_if(value.any, isBanned);
+
+	//add all required to allowed
+	for(si32 item : value.all)
+	{
+		value.any.insert(item);
+	}
+}
+
 void JsonDeserializer::serializeString(const std::string & fieldName, std::string & value)
 {
 	value = current->operator[](fieldName).String();
@@ -161,3 +231,15 @@ void JsonDeserializer::readLICPart(const JsonNode & part, const TDecoder & decod
 	}
 }
 
+void JsonDeserializer::readLICPart(const JsonNode & part, const TDecoder & decoder, std::set<si32> & value)
+{
+	for(size_t index = 0; index < part.Vector().size(); index++)
+	{
+		const std::string & identifier = part.Vector()[index].String();
+
+		const si32 rawId = decoder(identifier);
+		if(rawId != -1)
+			value.insert(rawId);
+	}
+}
+

+ 10 - 6
lib/serializer/JsonDeserializer.h

@@ -17,18 +17,22 @@ class JsonNode;
 class JsonDeserializer: public JsonSerializeFormat
 {
 public:
-	JsonDeserializer(JsonNode & root_);
+	JsonDeserializer(const IInstanceResolver * instanceResolver_, JsonNode & root_);
 
-	void serializeBool(const std::string & fieldName, bool & value) override;
-	void serializeEnum(const std::string & fieldName, const std::string & trueValue, const std::string & falseValue, bool & value) override;
 	void serializeLIC(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const std::vector<bool> & standard, std::vector<bool> & value) override;
 	void serializeLIC(const std::string & fieldName, LIC & value) override;
+	void serializeLIC(const std::string & fieldName, LICSet & value) override;
 	void serializeString(const std::string & fieldName, std::string & value) override;
 
 protected:
-	void serializeFloat(const std::string & fieldName, double & value) override;
-	void serializeIntEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const si32 defaultValue, si32 & value) override;
-	void serializeIntId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const si32 defaultValue, si32 & value) override;
+	void serializeInternal(const std::string & fieldName, boost::logic::tribool & value) override;
+	void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const TDecoder & decoder, const TEncoder & encoder)	override;
+	void serializeInternal(const std::string & fieldName, std::vector<si32> & value, const TDecoder & decoder, const TEncoder & encoder) override;
+	void serializeInternal(const std::string & fieldName, double & value, const boost::optional<double> & defaultValue) override;
+	void serializeInternal(const std::string & fieldName, si64 & value, const boost::optional<si64> & defaultValue) override;
+	void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const std::vector<std::string> & enumMap) override;
+
 private:
 	void readLICPart(const JsonNode & part, const TDecoder & decoder, const bool val, std::vector<bool> & value);
+	void readLICPart(const JsonNode & part, const TDecoder & decoder, std::set<si32> & value);
 };

+ 127 - 23
lib/serializer/JsonSerializeFormat.cpp

@@ -14,57 +14,147 @@
 
 #include "../JsonNode.h"
 
-
-//JsonStructSerializer
-JsonStructSerializer::JsonStructSerializer(JsonStructSerializer&& other):
-	restoreState(false),
+//JsonSerializeHelper
+JsonSerializeHelper::JsonSerializeHelper(JsonSerializeHelper && other):
 	owner(other.owner),
+	thisNode(other.thisNode),
 	parentNode(other.parentNode),
-	thisNode(other.thisNode)
+	restoreState(false)
 {
-
+	std::swap(restoreState, other.restoreState);
 }
 
-JsonStructSerializer::~JsonStructSerializer()
+JsonSerializeHelper::~JsonSerializeHelper()
 {
 	if(restoreState)
 		owner.current = parentNode;
 }
 
-JsonStructSerializer::JsonStructSerializer(JsonSerializeFormat& owner_, const std::string& fieldName):
-	restoreState(true),
+JsonNode & JsonSerializeHelper::get()
+{
+	return * thisNode;
+}
+
+JsonSerializeFormat * JsonSerializeHelper::operator->()
+{
+	return &owner;
+}
+
+JsonSerializeHelper::JsonSerializeHelper(JsonSerializeFormat & owner_, JsonNode * thisNode_):
 	owner(owner_),
+	thisNode(thisNode_),
 	parentNode(owner.current),
-	thisNode(&(parentNode->operator[](fieldName)))
+	restoreState(true)
 {
 	owner.current = thisNode;
 }
 
-JsonStructSerializer::JsonStructSerializer(JsonStructSerializer & parent, const std::string & fieldName):
-	restoreState(true),
+JsonSerializeHelper::JsonSerializeHelper(JsonSerializeHelper & parent, const std::string & fieldName):
 	owner(parent.owner),
+	thisNode(&(parent.thisNode->operator[](fieldName))),
 	parentNode(parent.thisNode),
-	thisNode(&(parentNode->operator[](fieldName)))
+	restoreState(true)
 {
 	owner.current = thisNode;
 }
 
-JsonStructSerializer JsonStructSerializer::enterStruct(const std::string & fieldName)
+JsonStructSerializer JsonSerializeHelper::enterStruct(const std::string & fieldName)
 {
 	return JsonStructSerializer(*this, fieldName);
 }
 
-JsonNode& JsonStructSerializer::get()
+JsonArraySerializer JsonSerializeHelper::enterArray(const std::string & fieldName)
 {
-	return *thisNode;
+	return JsonArraySerializer(*this, fieldName);
 }
 
-JsonSerializeFormat * JsonStructSerializer::operator->()
+//JsonStructSerializer
+JsonStructSerializer::JsonStructSerializer(JsonStructSerializer && other):
+	JsonSerializeHelper(std::move(static_cast<JsonSerializeHelper &>(other))),
+	optional(other.optional)
 {
-	return &owner;
+
+}
+
+JsonStructSerializer::JsonStructSerializer(JsonSerializeFormat & owner_, const std::string & fieldName):
+	JsonSerializeHelper(owner_, &(owner_.current->operator[](fieldName))),
+	optional(false)
+{
+	if(owner.saving)
+		thisNode->setType(JsonNode::DATA_STRUCT);
+}
+
+JsonStructSerializer::JsonStructSerializer(JsonSerializeHelper & parent, const std::string & fieldName):
+	JsonSerializeHelper(parent, fieldName),
+	optional(false)
+{
+	if(owner.saving)
+		thisNode->setType(JsonNode::DATA_STRUCT);
+}
+
+JsonStructSerializer::JsonStructSerializer(JsonSerializeFormat & owner_, JsonNode * thisNode_):
+	JsonSerializeHelper(owner_, thisNode_),
+	optional(false)
+{
+	if(owner.saving)
+		thisNode->setType(JsonNode::DATA_STRUCT);
+}
+
+JsonStructSerializer::~JsonStructSerializer()
+{
+	//todo: delete empty optional node
+	if(owner.saving && optional && thisNode->Struct().empty())
+	{
+		//
+	}
+}
+
+//JsonArraySerializer
+JsonArraySerializer::JsonArraySerializer(JsonStructSerializer && other):
+	JsonSerializeHelper(std::move(static_cast<JsonSerializeHelper &>(other)))
+{
+
 }
 
-JsonSerializeFormat::LIC::LIC(const std::vector<bool> & Standard, const TDecoder & Decoder, const TEncoder & Encoder):
+JsonArraySerializer::JsonArraySerializer(JsonSerializeFormat & owner_, const std::string & fieldName):
+	JsonSerializeHelper(owner_, &(owner_.current->operator[](fieldName)))
+{
+
+}
+
+JsonArraySerializer::JsonArraySerializer(JsonSerializeHelper & parent, const std::string & fieldName):
+	JsonSerializeHelper(parent, fieldName)
+{
+
+}
+
+JsonStructSerializer JsonArraySerializer::enterStruct(const size_t index)
+{
+    return JsonStructSerializer(owner, &(thisNode->Vector()[index]));
+}
+
+void JsonArraySerializer::resize(const size_t newSize)
+{
+    thisNode->Vector().resize(newSize);
+}
+
+void JsonArraySerializer::resize(const size_t newSize, JsonNode::JsonType type)
+{
+	resize(newSize);
+
+	for(JsonNode & n : thisNode->Vector())
+		if(n.getType() == JsonNode::DATA_NULL)
+			n.setType(type);
+}
+
+
+size_t JsonArraySerializer::size() const
+{
+    return thisNode->Vector().size();
+}
+
+//JsonSerializeFormat::LIC
+JsonSerializeFormat::LIC::LIC(const std::vector<bool> & Standard, const TDecoder Decoder, const TEncoder Encoder):
 	standard(Standard), decoder(Decoder), encoder(Encoder)
 {
 	any.resize(standard.size(), false);
@@ -72,19 +162,33 @@ JsonSerializeFormat::LIC::LIC(const std::vector<bool> & Standard, const TDecoder
 	none.resize(standard.size(), false);
 }
 
+JsonSerializeFormat::LICSet::LICSet(const std::set<si32>& Standard, const TDecoder Decoder, const TEncoder Encoder):
+	standard(Standard), decoder(Decoder), encoder(Encoder)
+{
+
+}
 
 //JsonSerializeFormat
-JsonSerializeFormat::JsonSerializeFormat(JsonNode & root_, const bool saving_):
+JsonSerializeFormat::JsonSerializeFormat(const IInstanceResolver * instanceResolver_, JsonNode & root_, const bool saving_):
 	saving(saving_),
 	root(&root_),
-	current(root)
+	current(root),
+	instanceResolver(instanceResolver_)
 {
 
 }
 
 JsonStructSerializer JsonSerializeFormat::enterStruct(const std::string & fieldName)
 {
-	JsonStructSerializer res(*this, fieldName);
+	return JsonStructSerializer(*this, fieldName);
+}
 
-	return res;
+JsonArraySerializer JsonSerializeFormat::enterArray(const std::string & fieldName)
+{
+	return JsonArraySerializer(*this, fieldName);
+}
+
+void JsonSerializeFormat::serializeBool(const std::string & fieldName, bool & value)
+{
+	serializeBool<bool>(fieldName, value, true, false, false);
 }

+ 314 - 39
lib/serializer/JsonSerializeFormat.h

@@ -10,30 +10,96 @@
 
 #pragma once
 
-class JsonNode;
+#include "../JsonNode.h"
 
 class JsonSerializeFormat;
+class JsonStructSerializer;
+class JsonArraySerializer;
 
-class JsonStructSerializer: public boost::noncopyable
+class IInstanceResolver
 {
 public:
-	JsonStructSerializer(JsonStructSerializer && other);
-	virtual ~JsonStructSerializer();
+	virtual ~IInstanceResolver(){};
+	virtual si32 decode(const std::string & identifier) const = 0;
+	virtual std::string encode(si32 identifier) const = 0;
+};
 
-	JsonStructSerializer enterStruct(const std::string & fieldName);
+class JsonSerializeHelper: public boost::noncopyable
+{
+public:
+	JsonSerializeHelper(JsonSerializeHelper && other);
+	virtual ~JsonSerializeHelper();
 
 	JsonNode & get();
 
 	JsonSerializeFormat * operator->();
-private:
-	JsonStructSerializer(JsonSerializeFormat & owner_, const std::string & fieldName);
-	JsonStructSerializer(JsonStructSerializer & parent, const std::string & fieldName);
 
-	bool restoreState;
+	JsonStructSerializer enterStruct(const std::string & fieldName);
+	JsonArraySerializer enterArray(const std::string & fieldName);
+
+protected:
+	JsonSerializeHelper(JsonSerializeFormat & owner_, JsonNode * thisNode_);
+	JsonSerializeHelper(JsonSerializeHelper & parent, const std::string & fieldName);
+
 	JsonSerializeFormat & owner;
-	JsonNode * parentNode;
+
 	JsonNode * thisNode;
+	JsonNode * parentNode;
+
+	friend class JsonStructSerializer;
+
+private:
+	bool restoreState;
+};
+
+class JsonStructSerializer: public JsonSerializeHelper
+{
+public:
+	bool optional;
+	JsonStructSerializer(JsonStructSerializer && other);
+	~JsonStructSerializer();
+protected:
+	JsonStructSerializer(JsonSerializeFormat & owner_, JsonNode * thisNode_);
+	JsonStructSerializer(JsonSerializeFormat & owner_, const std::string & fieldName);
+	JsonStructSerializer(JsonSerializeHelper & parent, const std::string & fieldName);
+
 	friend class JsonSerializeFormat;
+	friend class JsonSerializeHelper;
+	friend class JsonArraySerializer;
+};
+
+class JsonArraySerializer: public JsonSerializeHelper
+{
+public:
+	JsonArraySerializer(JsonStructSerializer && other);
+
+	JsonStructSerializer enterStruct(const size_t index);
+
+	template <typename Container>
+	void syncSize(Container & c, JsonNode::JsonType type = JsonNode::DATA_NULL);
+
+	///vector of serializable <-> Json vector of structs
+	template <typename Element>
+	void serializeStruct(std::vector<Element> & value)
+	{
+		syncSize(value, JsonNode::DATA_STRUCT);
+
+		for(size_t idx = 0; idx < size(); idx++)
+		{
+			auto s = enterStruct(idx);
+			value[idx].serializeJson(owner);
+		}
+	}
+
+	void resize(const size_t newSize);
+	void resize(const size_t newSize, JsonNode::JsonType type);
+	size_t size() const;
+protected:
+	JsonArraySerializer(JsonSerializeFormat & owner_, const std::string & fieldName);
+	JsonArraySerializer(JsonSerializeHelper & parent, const std::string & fieldName);
+
+	friend class JsonSerializeFormat;
+	friend class JsonSerializeHelper;
 };
 
 class JsonSerializeFormat: public boost::noncopyable
@@ -47,16 +113,28 @@ public:
 	///may assume that object index is valid
 	typedef std::function<std::string(si32)> TEncoder;
 
+	typedef std::function<void(JsonSerializeFormat &)> TSerialize;
+
 	struct LIC
 	{
-		LIC(const std::vector<bool> & Standard, const TDecoder & Decoder, const TEncoder & Encoder);
+		LIC(const std::vector<bool> & Standard, const TDecoder Decoder, const TEncoder Encoder);
 
 		const std::vector<bool> & standard;
-		const TDecoder & decoder;
-		const TEncoder & encoder;
+		const TDecoder decoder;
+		const TEncoder encoder;
 		std::vector<bool> all, any, none;
 	};
 
+	struct LICSet
+	{
+		LICSet(const std::set<si32> & Standard, const TDecoder Decoder, const TEncoder Encoder);
+
+		const std::set<si32> & standard;
+		const TDecoder decoder;
+		const TEncoder encoder;
+		std::set<si32> all, any, none;
+	};
+
 	const bool saving;
 
 	JsonSerializeFormat() = delete;
@@ -73,19 +151,39 @@ public:
 	};
 
 	JsonStructSerializer enterStruct(const std::string & fieldName);
+	JsonArraySerializer enterArray(const std::string & fieldName);
 
+	///Anything comparable <-> Json bool
 	template <typename T>
-	void serializeBool(const std::string & fieldName, const T trueValue, const T falseValue, T & value)
+	void serializeBool(const std::string & fieldName, T & value, const T trueValue, const T falseValue, const T defaultValue)
 	{
-		bool temp = (value == trueValue);
-		serializeBool(fieldName, temp);
+		boost::logic::tribool temp(boost::logic::indeterminate);
+
+		if(value == defaultValue)
+			;//leave as indeterminate
+		else if(value == trueValue)
+			temp = true;
+		else if(value == falseValue)
+			temp = false;
+
+		serializeInternal(fieldName, temp);
 		if(!saving)
-			value = temp ? trueValue : falseValue;
+		{
+			if(boost::logic::indeterminate(temp))
+				value = defaultValue;
+			else
+				value = temp ? trueValue : falseValue;
+		}
 	}
 
-	virtual void serializeBool(const std::string & fieldName, bool & value) = 0;
+	///bool <-> Json bool
+	void serializeBool(const std::string & fieldName, bool & value);
 
-	virtual void serializeEnum(const std::string & fieldName, const std::string & trueValue, const std::string & falseValue, bool & value) = 0;
+	///tribool <-> Json bool
+	void serializeBool(const std::string & fieldName, boost::logic::tribool & value)
+	{
+		serializeInternal(fieldName, value);
+	};
 
 	/** @brief Restrictive ("anyOf") simple serialization of Logical identifier condition, simple deserialization (allOf=anyOf)
 	 *
@@ -101,48 +199,225 @@ public:
 	 */
 	virtual void serializeLIC(const std::string & fieldName, LIC & value) = 0;
 
+	/** @brief Complete serialization of Logical identifier condition. (Special version)
+	 * Assumes that all values are allowed by default, and standard contains them
+	 */
+	virtual void serializeLIC(const std::string & fieldName, LICSet & value) = 0;
+
+	///String <-> Json string
+	virtual void serializeString(const std::string & fieldName, std::string & value) = 0;
+
+	///si32-convertible enum <-> Json string enum
 	template <typename T>
-	void serializeNumericEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const T defaultValue, T & value)
+	void serializeEnum(const std::string & fieldName, T & value, const std::vector<std::string> & enumMap)
 	{
-		si32 temp = value;
-		serializeIntEnum(fieldName, enumMap, defaultValue, temp);
-		if(!saving)
-			value = temp;
+		doSerializeInternal<T, T, si32>(fieldName, value, boost::none, enumMap);
 	};
 
+	///si32-convertible enum <-> Json string enum
+	template <typename T, typename U>
+	void serializeEnum(const std::string & fieldName, T & value, const U & defaultValue, const std::vector<std::string> & enumMap)
+	{
+		doSerializeInternal<T, U, si32>(fieldName, value, defaultValue, enumMap);
+	};
+
+	template <typename T, typename U, typename C>
+	void serializeEnum(const std::string & fieldName, T & value, const U & defaultValue, const C & enumMap)
+	{
+		std::vector<std::string> enumMapCopy;
+
+		std::copy(std::begin(enumMap), std::end(enumMap), std::back_inserter(enumMapCopy));
+
+		doSerializeInternal<T, U, si32>(fieldName, value, defaultValue, enumMapCopy);
+	};
+
+	///Anything double-convertible <-> Json double
 	template <typename T>
-	void serializeNumeric(const std::string & fieldName, T & value)
+	void serializeFloat(const std::string & fieldName, T & value)
 	{
-		double temp = value;
-		serializeFloat(fieldName, temp);
-		if(!saving)
-			value = temp;
+		doSerializeInternal<T, T, double>(fieldName, value, boost::none);
 	};
 
-	virtual void serializeString(const std::string & fieldName, std::string & value) = 0;
+	///Anything double-convertible <-> Json double
+	template <typename T, typename U>
+	void serializeFloat(const std::string & fieldName, T & value, const U & defaultValue)
+	{
+		doSerializeInternal<T, U, double>(fieldName, value, defaultValue);
+	};
+
+	///Anything int64-convertible <-> Json integer
+	template <typename T>
+	void serializeInt(const std::string & fieldName, T & value)
+	{
+		doSerializeInternal<T, T, si64>(fieldName, value, boost::none);
+	};
+
+	///Anything int64-convertible <-> Json integer
+	template <typename T, typename U>
+	void serializeInt(const std::string & fieldName, T & value, const U & defaultValue)
+	{
+		doSerializeInternal<T, U, si64>(fieldName, value, defaultValue);
+	};
+
+	///si32-convertible identifier <-> Json string
+	template <typename T, typename U>
+	void serializeId(const std::string & fieldName, T & value, const U & defaultValue, const TDecoder & decoder, const TEncoder & encoder)
+	{
+		doSerializeInternal<T, U, si32>(fieldName, value, defaultValue, decoder, encoder);
+	}
 
+	///si32-convertible identifier vector <-> Json array of string
 	template <typename T>
-	void serializeId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const T & defaultValue, T & value)
+	void serializeIdArray(const std::string & fieldName, std::vector<T> & value, const TDecoder & decoder, const TEncoder & encoder)
 	{
-		const si32 tempDefault = defaultValue.num;
-		si32 tempValue = value.num;
-		serializeIntId(fieldName, decoder, encoder, tempDefault, tempValue);
+		std::vector<si32> temp;
+
+		if(saving)
+		{
+			temp.reserve(value.size());
+
+			for(const T & vitem : value)
+			{
+				si32 item = static_cast<si32>(vitem);
+				temp.push_back(item);
+			}
+		}
+
+		serializeInternal(fieldName, temp, decoder, encoder);
 		if(!saving)
-			value = T(tempValue);
+		{
+			value.clear();
+			value.reserve(temp.size());
+
+			for(const si32 item : temp)
+			{
+				T vitem = static_cast<T>(item);
+				value.push_back(vitem);
+			}
+		}
+	}
+
+	///si32-convertible identifier set <-> Json array of string
+	template <typename T>
+	void serializeIdArray(const std::string & fieldName, std::set<T> & value, const TDecoder & decoder, const TEncoder & encoder)
+	{
+		std::vector<si32> temp;
+
+		if(saving)
+		{
+			temp.reserve(value.size());
+
+			for(const T & vitem : value)
+			{
+				si32 item = static_cast<si32>(vitem);
+				temp.push_back(item);
+			}
+		}
+
+		serializeInternal(fieldName, temp, decoder, encoder);
+		if(!saving)
+		{
+			value.clear();
+
+			for(const si32 item : temp)
+			{
+				T vitem = static_cast<T>(item);
+				value.insert(vitem);
+			}
+		}
+	}
+
+	///bitmask <-> Json array of string
+	template <typename T, int Size>
+	void serializeIdArray(const std::string & fieldName, T & value, const T & defaultValue, const TDecoder & decoder, const TEncoder & encoder)
+	{
+		static_assert(8 * sizeof(T) >= Size, "Mask size too small");
+
+		std::vector<si32> temp;
+		temp.reserve(Size);
+
+		if(saving && value != defaultValue)
+		{
+			for(si32 i = 0; i < Size; i++)
+				if(value & (1 << i))
+					temp.push_back(i);
+			serializeInternal(fieldName, temp, decoder, encoder);
+		}
+
+		if(!saving)
+		{
+			serializeInternal(fieldName, temp, decoder, encoder);
+
+			if(temp.empty())
+				value = defaultValue;
+			else
+			{
+				value = 0;
+				for(auto i : temp)
+					value |= (1 << i);
+			}
+		}
+	}
+
+	///si32-convertible instance identifier <-> Json string
+	template <typename T>
+	void serializeInstance(const std::string & fieldName, T & value, const T & defaultValue)
+	{
+		const TDecoder decoder = std::bind(&IInstanceResolver::decode, instanceResolver, _1);
+		const TEncoder endoder = std::bind(&IInstanceResolver::encode, instanceResolver, _1);
+
+		serializeId<T>(fieldName, value, defaultValue, decoder, endoder);
 	}
 
 protected:
 	JsonNode * root;
 	JsonNode * current;
 
-	JsonSerializeFormat(JsonNode & root_, const bool saving_);
+	JsonSerializeFormat(const IInstanceResolver * instanceResolver_, JsonNode & root_, const bool saving_);
+
+	///bool <-> Json bool, indeterminate is default
+	virtual void serializeInternal(const std::string & fieldName, boost::logic::tribool & value) = 0;
+
+	///Numeric Id <-> String Id
+	virtual void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const TDecoder & decoder, const TEncoder & encoder) = 0;
+
+	///Numeric Id vector <-> String Id vector
+	virtual void serializeInternal(const std::string & fieldName, std::vector<si32> & value, const TDecoder & decoder, const TEncoder & encoder) = 0;
+
+	///Numeric <-> Json double
+	virtual void serializeInternal(const std::string & fieldName, double & value, const boost::optional<double> & defaultValue) = 0;
 
-	virtual void serializeFloat(const std::string & fieldName, double & value) = 0;
+	///Numeric <-> Json integer
+	virtual void serializeInternal(const std::string & fieldName, si64 & value, const boost::optional<si64> & defaultValue) = 0;
 
-	virtual void serializeIntEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const si32 defaultValue, si32 & value) = 0;
+	///Enum/Numeric <-> Json string enum
+	virtual void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const std::vector<std::string> & enumMap) = 0;
 
-	virtual void serializeIntId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const si32 defaultValue, si32 & value) = 0;
 private:
+	const IInstanceResolver * instanceResolver;
+
+    template <typename VType, typename DVType, typename IType, typename... Args>
+    void doSerializeInternal(const std::string & fieldName, VType & value, const boost::optional<DVType> & defaultValue, Args ... args)
+    {
+		const boost::optional<IType> tempDefault = defaultValue ? boost::optional<IType>(static_cast<IType>(defaultValue.get())) : boost::none;
+		IType temp = static_cast<IType>(value);
+
+		serializeInternal(fieldName, temp, tempDefault, args...);
+
+		if(!saving)
+			value = static_cast<VType>(temp);
+    }
+
+	friend class JsonSerializeHelper;
 	friend class JsonStructSerializer;
+	friend class JsonArraySerializer;
 };
 
+template <typename Container>
+void JsonArraySerializer::syncSize(Container & c, JsonNode::JsonType type)
+{
+	if(owner.saving)
+		resize(c.size(), type);
+	else
+		c.resize(size());
+}

+ 72 - 22
lib/serializer/JsonSerializer.cpp

@@ -14,41 +14,58 @@
 
 #include "../JsonNode.h"
 
-JsonSerializer::JsonSerializer(JsonNode & root_):
-	JsonSerializeFormat(root_, true)
+JsonSerializer::JsonSerializer(const IInstanceResolver * instanceResolver_, JsonNode & root_):
+	JsonSerializeFormat(instanceResolver_, root_, true)
 {
 
 }
 
-void JsonSerializer::serializeBool(const std::string & fieldName, bool & value)
+void JsonSerializer::serializeInternal(const std::string & fieldName, boost::logic::tribool & value)
 {
-	if(value)
-		current->operator[](fieldName).Bool() = true;
+	if(!boost::logic::indeterminate(value))
+		current->operator[](fieldName).Bool() = value;
 }
 
-void JsonSerializer::serializeEnum(const std::string & fieldName, const std::string & trueValue, const std::string & falseValue, bool & value)
+void JsonSerializer::serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const TDecoder & decoder, const TEncoder & encoder)
 {
-	current->operator[](fieldName).String() = value ? trueValue : falseValue;
+	if(!defaultValue || defaultValue.get() != value)
+	{
+		std::string identifier = encoder(value);
+		serializeString(fieldName, identifier);
+	}
 }
 
-void JsonSerializer::serializeFloat(const std::string & fieldName, double & value)
+void JsonSerializer::serializeInternal(const std::string & fieldName, double & value, const boost::optional<double> & defaultValue)
 {
-	if(value != 0)
+	if(!defaultValue || defaultValue.get() != value)
 		current->operator[](fieldName).Float() = value;
 }
 
-void JsonSerializer::serializeIntEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const si32 defaultValue, si32 & value)
+void JsonSerializer::serializeInternal(const std::string & fieldName, si64 & value, const boost::optional<si64> & defaultValue)
 {
-	if(defaultValue != value)
+	if(!defaultValue || defaultValue.get() != value)
+		current->operator[](fieldName).Integer() = value;
+}
+
+void JsonSerializer::serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const std::vector<std::string> & enumMap)
+{
+	if(!defaultValue || defaultValue.get() != value)
 		current->operator[](fieldName).String() = enumMap.at(value);
 }
 
-void JsonSerializer::serializeIntId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const si32 defaultValue, si32 & value)
+void JsonSerializer::serializeInternal(const std::string & fieldName, std::vector<si32> & value, const TDecoder & decoder, const TEncoder & encoder)
 {
-	if(defaultValue != value)
+	if(value.empty())
+		return;
+
+	JsonVector & data = current->operator[](fieldName).Vector();
+	data.reserve(value.size());
+
+	for(const si32 rawId : value)
 	{
-		std::string identifier = encoder(value);
-		serializeString(fieldName, identifier);
+        JsonNode jsonElement(JsonNode::DATA_STRING);
+        jsonElement.String() = encoder(rawId);
+        data.push_back(std::move(jsonElement));
 	}
 }
 
@@ -64,9 +81,16 @@ void JsonSerializer::serializeLIC(const std::string & fieldName, const TDecoder
 void JsonSerializer::serializeLIC(const std::string & fieldName, LIC & value)
 {
 	if(value.any != value.standard)
-	{
 		writeLICPart(fieldName, "anyOf", value.encoder, value.any);
-	}
+
+	writeLICPart(fieldName, "allOf", value.encoder, value.all);
+	writeLICPart(fieldName, "noneOf", value.encoder, value.none);
+}
+
+void JsonSerializer::serializeLIC(const std::string & fieldName, LICSet & value)
+{
+	if(value.any != value.standard)
+		writeLICPart(fieldName, "anyOf", value.encoder, value.any);
 
 	writeLICPart(fieldName, "allOf", value.encoder, value.all);
 	writeLICPart(fieldName, "noneOf", value.encoder, value.none);
@@ -78,15 +102,41 @@ void JsonSerializer::serializeString(const std::string & fieldName, std::string
 		current->operator[](fieldName).String() = value;
 }
 
-void JsonSerializer::writeLICPart(const std::string& fieldName, const std::string& partName, const TEncoder& encoder, const std::vector<bool> & data)
+void JsonSerializer::writeLICPart(const std::string & fieldName, const std::string & partName, const TEncoder & encoder, const std::vector<bool> & data)
 {
-	auto & target = current->operator[](fieldName)[partName].Vector();
-	for(si32 idx = 0; idx < data.size(); idx ++)
-	{
+	std::vector<std::string> buf;
+	buf.reserve(data.size());
+
+	for(si32 idx = 0; idx < data.size(); idx++)
 		if(data[idx])
+			buf.push_back(encoder(idx));
+
+	writeLICPartBuffer(fieldName, partName, buf);
+}
+
+void JsonSerializer::writeLICPart(const std::string & fieldName, const std::string & partName, const TEncoder & encoder, const std::set<si32> & data)
+{
+	std::vector<std::string> buf;
+	buf.reserve(data.size());
+
+	for(const si32 item : data)
+		buf.push_back(encoder(item));
+
+	writeLICPartBuffer(fieldName, partName, buf);
+}
+
+void JsonSerializer::writeLICPartBuffer(const std::string & fieldName, const std::string & partName, std::vector<std::string> & buffer)
+{
+	if(!buffer.empty())
+	{
+		std::sort(buffer.begin(), buffer.end());
+
+		auto & target = current->operator[](fieldName)[partName].Vector();
+
+		for(auto & s : buffer)
 		{
 			JsonNode val(JsonNode::DATA_STRING);
-			val.String() = encoder(idx);
+			std::swap(val.String(), s);
 			target.push_back(std::move(val));
 		}
 	}

+ 10 - 6
lib/serializer/JsonSerializer.h

@@ -17,19 +17,23 @@ class JsonNode;
 class JsonSerializer: public JsonSerializeFormat
 {
 public:
-	JsonSerializer(JsonNode & root_);
+	JsonSerializer(const IInstanceResolver * instanceResolver_, JsonNode & root_);
 
-	void serializeBool(const std::string & fieldName, bool & value) override;
-	void serializeEnum(const std::string & fieldName, const std::string & trueValue, const std::string & falseValue, bool & value) override;
 	void serializeLIC(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const std::vector<bool> & standard, std::vector<bool> & value) override;
 	void serializeLIC(const std::string & fieldName, LIC & value) override;
+	void serializeLIC(const std::string & fieldName, LICSet & value) override;
 	void serializeString(const std::string & fieldName, std::string & value) override;
 
 protected:
-	void serializeFloat(const std::string & fieldName, double & value) override;
-	void serializeIntEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const si32 defaultValue, si32 & value) override;
-	void serializeIntId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const si32 defaultValue, si32 & value) override;
+	void serializeInternal(const std::string & fieldName, boost::logic::tribool & value) override;
+	void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const TDecoder & decoder, const TEncoder & encoder)	override;
+	void serializeInternal(const std::string & fieldName, std::vector<si32> & value, const TDecoder & decoder, const TEncoder & encoder) override;
+	void serializeInternal(const std::string & fieldName, double & value, const boost::optional<double> & defaultValue) override;
+	void serializeInternal(const std::string & fieldName, si64 & value, const boost::optional<si64> & defaultValue) override;
+	void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const std::vector<std::string> & enumMap) override;
 
 private:
 	void writeLICPart(const std::string & fieldName, const std::string & partName, const TEncoder & encoder, const std::vector<bool> & data);
+	void writeLICPart(const std::string & fieldName, const std::string & partName, const TEncoder & encoder, const std::set<si32> & data);
+	void writeLICPartBuffer(const std::string & fieldName, const std::string & partName, std::vector<std::string> & buffer);
 };

+ 1 - 1
lib/spells/CSpellHandler.cpp

@@ -925,7 +925,7 @@ CSpell * CSpellHandler::loadFromJson(const JsonNode & json, const std::string &
 				if("bottom" == vPosStr)
 					newItem.verticalPosition = VerticalPosition::BOTTOM;
 			}
-			else if(item.getType() == JsonNode::DATA_FLOAT)
+			else if(item.isNumber())
 			{
 				newItem.pause = item.Float();
 			}

+ 6 - 2
test/CMakeLists.txt

@@ -23,8 +23,12 @@ cotire(vcmitest)
 # Files to copy to the build directory
 add_custom_target(vcmitestFiles ALL)
 set(vcmitest_FILES
-                TerrainViewTest.h3m
-                terrainViewMappings.json
+		testdata/TerrainViewTest.h3m
+		testdata/terrainViewMappings.json
+		testdata/ObjectPropertyTest/header.json
+		testdata/ObjectPropertyTest/objects.json
+		testdata/ObjectPropertyTest/surface_terrain.json
+		testdata/ObjectPropertyTest/underground_terrain.json
 )
 
 foreach(file ${vcmitest_FILES})

+ 140 - 34
test/CMapFormatTest.cpp

@@ -13,6 +13,7 @@
 #include <boost/test/unit_test.hpp>
 
 #include "../lib/filesystem/CMemoryBuffer.h"
+#include "../lib/filesystem/Filesystem.h"
 
 #include "../lib/mapping/CMap.h"
 #include "../lib/rmg/CMapGenOptions.h"
@@ -23,54 +24,41 @@
 
 #include "MapComparer.h"
 
-
 static const int TEST_RANDOM_SEED = 1337;
 
-static std::unique_ptr<CMap> initialMap;
-
-class CMapTestFixture
+BOOST_AUTO_TEST_CASE(MapFormat_Random)
 {
-public:
-	CMapTestFixture()
-	{
-		CMapGenOptions opt;
+	logGlobal->info("MapFormat_Random start");
+	BOOST_TEST_CHECKPOINT("MapFormat_Random start");
+	std::unique_ptr<CMap> initialMap;
 
-		opt.setHeight(CMapHeader::MAP_SIZE_MIDDLE);
-		opt.setWidth(CMapHeader::MAP_SIZE_MIDDLE);
-		opt.setHasTwoLevels(true);
-		opt.setPlayerCount(4);
+	CMapGenOptions opt;
 
-		opt.setPlayerTypeForStandardPlayer(PlayerColor(0), EPlayerType::HUMAN);
-		opt.setPlayerTypeForStandardPlayer(PlayerColor(1), EPlayerType::AI);
-		opt.setPlayerTypeForStandardPlayer(PlayerColor(2), EPlayerType::AI);
-		opt.setPlayerTypeForStandardPlayer(PlayerColor(3), EPlayerType::AI);
+	opt.setHeight(CMapHeader::MAP_SIZE_MIDDLE);
+	opt.setWidth(CMapHeader::MAP_SIZE_MIDDLE);
+	opt.setHasTwoLevels(true);
+	opt.setPlayerCount(4);
 
-		CMapGenerator gen;
+	opt.setPlayerTypeForStandardPlayer(PlayerColor(0), EPlayerType::HUMAN);
+	opt.setPlayerTypeForStandardPlayer(PlayerColor(1), EPlayerType::AI);
+	opt.setPlayerTypeForStandardPlayer(PlayerColor(2), EPlayerType::AI);
+	opt.setPlayerTypeForStandardPlayer(PlayerColor(3), EPlayerType::AI);
 
-		initialMap = gen.generate(&opt, TEST_RANDOM_SEED);
-		initialMap->name = "Test";
-	};
-	~CMapTestFixture()
-	{
-		initialMap.reset();
-	};
-};
+	CMapGenerator gen;
 
-BOOST_GLOBAL_FIXTURE(CMapTestFixture);
+	initialMap = gen.generate(&opt, TEST_RANDOM_SEED);
+	initialMap->name = "Test";
+	BOOST_TEST_CHECKPOINT("MapFormat_Random generated");
 
-BOOST_AUTO_TEST_CASE(CMapFormatVCMI_Simple)
-{
-	logGlobal->info("CMapFormatVCMI_Simple start");
-	BOOST_TEST_CHECKPOINT("CMapFormatVCMI_Simple start");
 	CMemoryBuffer serializeBuffer;
 	{
 		CMapSaverJson saver(&serializeBuffer);
 		saver.saveMap(initialMap);
 	}
-	BOOST_TEST_CHECKPOINT("CMapFormatVCMI_Simple serialized");
+	BOOST_TEST_CHECKPOINT("MapFormat_Random serialized");
 	#if 1
 	{
-		auto path = VCMIDirs::get().userDataPath()/"test.vmap";
+		auto path = VCMIDirs::get().userDataPath()/"test_random.vmap";
 		boost::filesystem::remove(path);
 		boost::filesystem::ofstream tmp(path, boost::filesystem::ofstream::binary);
 
@@ -81,7 +69,7 @@ BOOST_AUTO_TEST_CASE(CMapFormatVCMI_Simple)
 		logGlobal->info("Test map has been saved to:");
 		logGlobal->info(path.string());
 	}
-	BOOST_TEST_CHECKPOINT("CMapFormatVCMI_Simple saved");
+	BOOST_TEST_CHECKPOINT("MapFormat_Random saved");
 
 	#endif // 1
 
@@ -94,5 +82,123 @@ BOOST_AUTO_TEST_CASE(CMapFormatVCMI_Simple)
 		c(serialized, initialMap);
 	}
 
-	logGlobal->info("CMapFormatVCMI_Simple finish");
+	logGlobal->info("MapFormat_Random finish");
+}
+
+static JsonNode getFromArchive(CZipLoader & archive, const std::string & archiveFilename)
+{
+	ResourceID resource(archiveFilename, EResType::TEXT);
+
+	if(!archive.existsResource(resource))
+		throw new std::runtime_error(archiveFilename+" not found");
+
+	auto data = archive.load(resource)->readAll();
+
+	JsonNode res(reinterpret_cast<char*>(data.first.get()), data.second);
+
+	return std::move(res);
+}
+
+
+static void addToArchive(CZipSaver & saver, const JsonNode & data, const std::string & filename)
+{
+	std::ostringstream out;
+	out << data;
+	out.flush();
+
+	{
+		auto s = out.str();
+		std::unique_ptr<COutputStream> stream = saver.addFile(filename);
+
+		if(stream->write((const ui8*)s.c_str(), s.size()) != s.size())
+			throw new std::runtime_error("CMapSaverJson::saveHeader() zip compression failed.");
+	}
+}
+
+BOOST_AUTO_TEST_CASE(MapFormat_Objects)
+{
+	logGlobal->info("MapFormat_Objects start");
+
+	static const std::string MAP_DATA_PATH = "test/ObjectPropertyTest/";
+
+	const JsonNode initialHeader(ResourceID(MAP_DATA_PATH+"header.json"));
+	const JsonNode expectedHeader(ResourceID(MAP_DATA_PATH+"header.json"));//same as initial for now
+
+	const JsonNode initialObjects(ResourceID(MAP_DATA_PATH+"objects.json"));
+	const JsonNode expectedObjects(ResourceID(MAP_DATA_PATH+"objects.ex.json"));
+
+	const JsonNode expectedSurface(ResourceID(MAP_DATA_PATH+"surface_terrain.json"));
+	const JsonNode expectedUnderground(ResourceID(MAP_DATA_PATH+"underground_terrain.json"));
+
+	std::unique_ptr<CMap> originalMap;
+	{
+		CMemoryBuffer initialBuffer;
+
+		std::shared_ptr<CIOApi> originalDataIO(new CProxyIOApi(&initialBuffer));
+
+		{
+			CZipSaver initialSaver(originalDataIO, "_");
+
+			addToArchive(initialSaver, initialHeader, "header.json");
+			addToArchive(initialSaver, initialObjects, "objects.json");
+			addToArchive(initialSaver, expectedSurface, "surface_terrain.json");
+			addToArchive(initialSaver, expectedUnderground, "underground_terrain.json");
+		}
+
+		initialBuffer.seek(0);
+
+		{
+			CMapLoaderJson initialLoader(&initialBuffer);
+
+			originalMap = initialLoader.loadMap();
+		}
+	}
+
+	CMemoryBuffer serializeBuffer;
+	{
+		CMapSaverJson saver(&serializeBuffer);
+		saver.saveMap(originalMap);
+	}
+
+	std::shared_ptr<CIOApi> actualDataIO(new CProxyROIOApi(&serializeBuffer));
+	CZipLoader actualDataLoader("", "_", actualDataIO);
+
+	const JsonNode actualHeader = getFromArchive(actualDataLoader, "header.json");
+	const JsonNode actualObjects = getFromArchive(actualDataLoader, "objects.json");
+	const JsonNode actualSurface = getFromArchive(actualDataLoader, "surface_terrain.json");
+	const JsonNode actualUnderground = getFromArchive(actualDataLoader, "underground_terrain.json");
+
+	{
+		auto path = VCMIDirs::get().userDataPath()/"test_object_property.vmap";
+		boost::filesystem::remove(path);
+		boost::filesystem::ofstream tmp(path, boost::filesystem::ofstream::binary);
+
+		tmp.write((const char *)serializeBuffer.getBuffer().data(),serializeBuffer.getSize());
+		tmp.flush();
+		tmp.close();
+
+		logGlobal->infoStream() << "Test map has been saved to " << path;
+	}
+
+	{
+		JsonMapComparer c;
+		c.compareHeader(actualHeader, expectedHeader);
+	}
+
+	{
+		JsonMapComparer c;
+		c.compareObjects(actualObjects, expectedObjects);
+	}
+
+	{
+		JsonMapComparer c;
+		c.compareTerrain("surface", actualSurface, expectedSurface);
+	}
+
+	{
+		JsonMapComparer c;
+		c.compareTerrain("underground", actualUnderground, expectedUnderground);
+	}
+
+	logGlobal->info("MapFormat_Objects finish");
 }

+ 1 - 1
test/CVcmiTestConfig.cpp

@@ -35,7 +35,7 @@ CVcmiTestConfig::CVcmiTestConfig()
 
 	/* TEST_DATA_DIR may be wrong, if yes below test don't run,
 	find your test data folder in your build and change TEST_DATA_DIR for it*/
-	const std::string TEST_DATA_DIR = "test/";
+	const std::string TEST_DATA_DIR = "test/testdata/";
 	auto path = boost::filesystem::current_path();
 	path+= "/" + TEST_DATA_DIR;
 	if(boost::filesystem::exists(path)){

+ 204 - 1
test/MapComparer.cpp

@@ -13,6 +13,9 @@
 
 #include "MapComparer.h"
 
+#include "../lib/ScopeGuard.h"
+#include "../lib/mapping/CMap.h"
+
 #define VCMI_CHECK_FIELD_EQUAL_P(field) BOOST_CHECK_EQUAL(actual->field, expected->field)
 
 #define VCMI_CHECK_FIELD_EQUAL(field) BOOST_CHECK_EQUAL(actual.field, expected.field)
@@ -147,6 +150,7 @@ void checkEqual(const TerrainTile & actual, const TerrainTile & expected)
 
 }
 
+//MapComparer
 void MapComparer::compareHeader()
 {
 	//map size parameters are vital for further checks
@@ -192,7 +196,6 @@ void MapComparer::compareOptions()
 	checkEqual(actual->allowedAbilities, expected->allowedAbilities);
 	checkEqual(actual->allowedArtifact, expected->allowedArtifact);
 	checkEqual(actual->allowedSpell, expected->allowedSpell);
-	//checkEqual(actual->allowedAbilities, expected->allowedAbilities);
 
 	//todo: compareOptions  events
 }
@@ -272,3 +275,203 @@ void MapComparer::operator() (const std::unique_ptr<CMap>& actual, const std::un
 	this->expected = expected.get();
 	compare();
 }
+
+//JsonMapComparer
+JsonMapComparer::JsonMapComparer():
+	strict(false)
+{
+
+}
+
+vstd::ScopeGuard<JsonMapComparer::TScopeGuard> JsonMapComparer::pushName(const std::string & name)
+{
+	namePath.push_back(name);
+	return vstd::makeScopeGuard<TScopeGuard>([this](){namePath.pop_back();});
+}
+
+std::string JsonMapComparer::buildMessage(const std::string & message)
+{
+	std::stringstream buf;
+
+	for(auto & s : namePath)
+		buf << s << "|";
+	buf << " " << message;
+	return buf.str();
+}
+
+void JsonMapComparer::addError(const std::string & message)
+{
+	BOOST_ERROR(buildMessage(message));
+}
+
+void JsonMapComparer::addWarning(const std::string & message)
+{
+	BOOST_WARN_MESSAGE(false, buildMessage(message));
+}
+
+bool JsonMapComparer::isEmpty(const JsonNode & value)
+{
+	switch (value.getType())
+	{
+	case JsonNode::DATA_NULL:
+		return true;
+	case JsonNode::DATA_BOOL:
+		return !value.Bool();
+	case JsonNode::DATA_FLOAT:
+		return value.Float() == 0;
+	case JsonNode::DATA_STRING:
+		return value.String() == "";
+	case JsonNode::DATA_VECTOR:
+		return value.Vector().empty();
+	case JsonNode::DATA_STRUCT:
+		return value.Struct().empty();
+		break;
+	default:
+		BOOST_FAIL("Unknown Json type");
+		return false;
+	}
+}
+
+void JsonMapComparer::check(const bool condition, const std::string & message)
+{
+	if(strict)
+		BOOST_REQUIRE_MESSAGE(condition, buildMessage(message));
+	else
+		BOOST_CHECK_MESSAGE(condition, buildMessage(message));
+}
+
+void JsonMapComparer::checkEqualInteger(const si64 actual, const si64 expected)
+{
+	if(actual != expected)
+	{
+		check(false, boost::str(boost::format("'%d' != '%d'") % actual % expected));
+	}
+}
+
+void JsonMapComparer::checkEqualFloat(const double actual, const double expected)
+{
+	if(std::abs(actual - expected) > 1e-6)
+	{
+		check(false, boost::str(boost::format("'%d' != '%d' (diff %d)") % actual % expected % (expected - actual)));
+	}
+}
+
+void JsonMapComparer::checkEqualString(const std::string & actual, const std::string & expected)
+{
+	if(actual != expected)
+	{
+		check(false, boost::str(boost::format("'%s' != '%s'") % actual % expected));
+	}
+}
+
+void JsonMapComparer::checkEqualJson(const JsonMap & actual, const JsonMap & expected)
+{
+    for(const auto & p : expected)
+		checkStructField(actual, p.first, p.second);
+	for(const auto & p : actual)
+		checkExcessStructField(p.second, p.first, expected);
+}
+
+void JsonMapComparer::checkEqualJson(const JsonVector & actual, const JsonVector & expected)
+{
+	check(actual.size() == expected.size(), "size mismatch");
+
+	size_t sz = std::min(actual.size(), expected.size());
+
+	for(size_t idx = 0; idx < sz; idx ++)
+	{
+		auto guard = pushName(boost::to_string(idx));
+
+		checkEqualJson(actual.at(idx), expected.at(idx));
+	}
+}
+
+void JsonMapComparer::checkEqualJson(const JsonNode & actual, const JsonNode & expected)
+{
+	//name has been pushed before
+
+	const bool validType = actual.getType() == expected.getType();
+
+	if(!validType)
+		addError("type mismatch");
+
+	//do detail checks avoiding assertions in JsonNode
+	if(validType)
+	{
+		switch (actual.getType())
+		{
+		case JsonNode::DATA_NULL:
+			break; //do nothing
+		case JsonNode::DATA_BOOL:
+			check(actual.Bool() == expected.Bool(), "mismatch");
+			break;
+		case JsonNode::DATA_FLOAT:
+			checkEqualFloat(actual.Float(),expected.Float());
+			break;
+		case JsonNode::DATA_STRING:
+			checkEqualString(actual.String(),expected.String());
+			break;
+		case JsonNode::DATA_VECTOR:
+			checkEqualJson(actual.Vector(), expected.Vector());
+			break;
+		case JsonNode::DATA_STRUCT:
+			checkEqualJson(actual.Struct(), expected.Struct());
+			break;
+		case JsonNode::DATA_INTEGER:
+			checkEqualInteger(actual.Integer(), expected.Integer());
+			break;
+		default:
+			BOOST_FAIL("Unknown Json type");
+			break;
+		}
+	}
+}
+
+void JsonMapComparer::checkExcessStructField(const JsonNode & actualValue, const std::string & name, const JsonMap & expected)
+{
+	auto guard = pushName(name);
+
+	if(!vstd::contains(expected, name))
+	{
+		if(isEmpty(actualValue))
+			addWarning("excess");
+		else
+			addError("excess");
+	}
+}
+
+void JsonMapComparer::checkStructField(const JsonMap & actual, const std::string & name, const JsonNode & expectedValue)
+{
+	auto guard = pushName(name);
+
+	if(!vstd::contains(actual, name))
+	{
+		if(isEmpty(expectedValue))
+			addWarning("missing");
+		else
+			addError("missing");
+	}
+	else
+		checkEqualJson(actual.at(name), expectedValue);
+}
+
+void JsonMapComparer::compareHeader(const JsonNode & actual, const JsonNode & expected)
+{
+	strict = false;
+	auto guard = pushName("hdr");
+	checkEqualJson(actual, expected);
+}
+
+void JsonMapComparer::compareObjects(const JsonNode & actual, const JsonNode & expected)
+{
+	strict = false;
+	auto guard = pushName("obj");
+	checkEqualJson(actual, expected);
+}
+
+void JsonMapComparer::compareTerrain(const std::string & levelName, const JsonNode & actual, const JsonNode & expected)
+{
+	strict = true;
+	auto guard = pushName(levelName);
+	checkEqualJson(actual, expected);
+}

+ 47 - 1
test/MapComparer.h

@@ -10,7 +10,17 @@
 
 #pragma once
 
-#include "../lib/mapping/CMap.h"
+#include "../lib/ScopeGuard.h"
+#include "../lib/JsonNode.h"
+
+namespace vstd
+{
+	template<typename Func>
+	class ScopeGuard;
+}
+
+class CMap;
+class CGObjectInstance;
 
 struct MapComparer
 {
@@ -28,4 +38,40 @@ struct MapComparer
 	void operator() (const std::unique_ptr<CMap>& actual, const std::unique_ptr<CMap>& expected);
 };
 
+struct JsonMapComparer
+{
+	typedef std::function<void(void)> TScopeGuard;
+
+	bool strict;
+	std::list<std::string> namePath;
+
+	JsonMapComparer();
+
+	vstd::ScopeGuard<TScopeGuard> pushName(const std::string & name);
+
+	std::string buildMessage(const std::string & message);
+
+	void addError(const std::string & message);
+	void addWarning(const std::string & message);
+
+	bool isEmpty(const JsonNode & value);
+
+	void check(const bool condition, const std::string & message);
+
+	void checkExcessStructField(const JsonNode & actualValue, const std::string & name, const JsonMap & expected);
+	void checkStructField(const JsonMap & actual, const std::string & name, const JsonNode & expectedValue);
+
+	void checkEqualInteger(const si64 actual, const si64 expected);
+	void checkEqualFloat(const double actual, const double expected);
+	void checkEqualString(const std::string & actual, const std::string & expected);
+
+	void checkEqualJson(const JsonNode & actual, const JsonNode & expected);
+	void checkEqualJson(const JsonMap & actual, const JsonMap & expected);
+	void checkEqualJson(const JsonVector & actual, const JsonVector & expected);
+
+    void compareHeader(const JsonNode & actual, const JsonNode & expected);
+	void compareObjects(const JsonNode & actual, const JsonNode & expected);
+	void compareTerrain(const std::string & levelName, const JsonNode & actual, const JsonNode & expected);
+};
+
 

+ 367 - 0
test/testdata/ObjectPropertyTest/header.json

@@ -0,0 +1,367 @@
+{
+	"allowedAbilities" : {
+		"anyOf" : [
+			"airMagic",
+			"archery",
+			"armorer",
+			"artillery",
+			"ballistics",
+			"diplomacy",
+			"earthMagic",
+			"estates",
+			"fireMagic",
+			"firstAid",
+			"intelligence",
+			"leadership",
+			"learning",
+			"logistics",
+			"luck",
+			"mysticism",
+			"navigation",
+			"necromancy",
+			"offence",
+			"pathfinding",
+			"resistance",
+			"scholar",
+			"scouting",
+			"sorcery",
+			"tactics",
+			"waterMagic",
+			"wisdom"
+		]
+	},
+	"allowedArtifacts" : {
+		"anyOf" : [
+			"admiralsHat",
+			"angelicAlliance",
+			"armageddonsBlade",
+			"armorOfTheDamned",
+			"bowOfTheSharpshooter",
+			"cloakOfTheUndeadKing",
+			"cornucopia",
+			"elixirOfLife",
+			"powerOfTheDragonFather",
+			"ringOfTheMagi",
+			"statueOfLegion",
+			"titansThunder",
+			"vialOfDragonBlood",
+			"wizardsWell"
+		]
+	},
+	"allowedHeroes" : {
+		"anyOf" : [
+			"adela",
+			"adelaide",
+			"aenain",
+			"aeris",
+			"aine",
+			"aislinn",
+			"ajit",
+			"alagar",
+			"alamar",
+			"alkin",
+			"andra",
+			"arlach",
+			"ash",
+			"astral",
+			"axsis",
+			"ayden",
+			"brissa",
+			"broghild",
+			"bron",
+			"caitlin",
+			"calh",
+			"calid",
+			"charna",
+			"christian",
+			"ciele",
+			"clancy",
+			"clavius",
+			"coronius",
+			"cragHack",
+			"cuthbert",
+			"cyra",
+			"dace",
+			"damacon",
+			"daremyth",
+			"darkstorn",
+			"deemer",
+			"dessa",
+			"drakon",
+			"elleshar",
+			"erdamon",
+			"fafner",
+			"fiona",
+			"fiur",
+			"galthran",
+			"gelare",
+			"gem",
+			"geon",
+			"gerwulf",
+			"gird",
+			"gretchin",
+			"grindan",
+			"gundula",
+			"gunnar",
+			"gurnisson",
+			"halon",
+			"ignatius",
+			"ignissa",
+			"inteus",
+			"iona",
+			"isra",
+			"ivor",
+			"jabarkas",
+			"jaegar",
+			"jeddite",
+			"jenova",
+			"josephine",
+			"kalt",
+			"korbac",
+			"krellion",
+			"kyrre",
+			"labetha",
+			"lacus",
+			"lorelei",
+			"loynis",
+			"malcom",
+			"malekith",
+			"marius",
+			"melodia",
+			"mephala",
+			"merist",
+			"mirlanda",
+			"moandor",
+			"monere",
+			"nagash",
+			"neela",
+			"nimbus",
+			"nymus",
+			"octavia",
+			"olema",
+			"oris",
+			"pasis",
+			"piquedram",
+			"pyre",
+			"rashka",
+			"rion",
+			"rissa",
+			"rosic",
+			"ryland",
+			"sandro",
+			"sanya",
+			"saurug",
+			"sephinroth",
+			"septienna",
+			"serena",
+			"shakti",
+			"shiva",
+			"sirMullich",
+			"solmyr",
+			"straker",
+			"styg",
+			"sylvia",
+			"synca",
+			"tamika",
+			"tazar",
+			"terek",
+			"thane",
+			"thant",
+			"theodorus",
+			"thorgrim",
+			"thunar",
+			"tiva",
+			"torosar ",
+			"tyraxor",
+			"tyris",
+			"ufretin",
+			"uland",
+			"verdish",
+			"vey",
+			"vidomina",
+			"vokial",
+			"voy",
+			"wystan",
+			"xarfax",
+			"xsi",
+			"xyron",
+			"yog",
+			"zubin",
+			"zydar"
+		]
+	},
+	"allowedSpells" : {
+		"anyOf" : [
+			"airElemental",
+			"airShield",
+			"animateDead",
+			"antiMagic",
+			"armageddon",
+			"berserk",
+			"bless",
+			"blind",
+			"bloodlust",
+			"chainLightning",
+			"clone",
+			"counterstrike",
+			"cure",
+			"curse",
+			"deathRipple",
+			"destroyUndead",
+			"dimensionDoor",
+			"disguise",
+			"dispel",
+			"disruptingRay",
+			"earthElemental",
+			"earthquake",
+			"fireElemental",
+			"fireShield",
+			"fireWall",
+			"fireball",
+			"fly",
+			"forceField",
+			"forgetfulness",
+			"fortune",
+			"frenzy",
+			"frostRing",
+			"haste",
+			"hypnotize",
+			"iceBolt",
+			"implosion",
+			"inferno",
+			"landMine",
+			"lightningBolt",
+			"magicArrow",
+			"magicMirror",
+			"meteorShower",
+			"mirth",
+			"misfortune",
+			"prayer",
+			"precision",
+			"protectAir",
+			"protectEarth",
+			"protectFire",
+			"protectWater",
+			"quicksand",
+			"removeObstacle",
+			"resurrection",
+			"sacrifice",
+			"scuttleBoat",
+			"shield",
+			"slayer",
+			"slow",
+			"sorrow",
+			"stoneSkin",
+			"summonBoat",
+			"teleport",
+			"titanBolt",
+			"townPortal",
+			"viewAir",
+			"viewEarth",
+			"visions",
+			"waterElemental",
+			"waterWalk",
+			"weakness"
+		]
+	},
+	"defeatIconIndex" : 3,
+	"defeatString" : "Test defeatString",
+	"difficulty" : "NORMAL",
+	"mapLevels" : {
+		"surface" : {
+			"height" : 144,
+			"index" : 0,
+			"width" : 144
+		},
+		"underground" : {
+			"height" : 144,
+			"index" : 1,
+			"width" : 144
+		}
+	},
+	"mods" : {},
+	"name" : "ObjectPropertyTest v1",
+	"players" : {
+		"blue" : {
+			"canPlay" : "AIOnly",
+			"heroes" : {
+				"randomHero_104" : {}
+			}
+		},
+		"green" : {
+			"canPlay" : "AIOnly",
+			"heroes" : {
+				"randomHero_105" : {}
+			}
+		},
+		"orange" : {
+			"canPlay" : "AIOnly",
+			"heroes" : {
+				"randomHero_106" : {}
+			}
+		},
+		"pink" : {
+			"canPlay" : "AIOnly",
+			"heroes" : {
+				"randomHero_109" : {}
+			}
+		},
+		"purple" : {
+			"canPlay" : "AIOnly",
+			"heroes" : {
+				"randomHero_107" : {}
+			}
+		},
+		"red" : {
+			"canPlay" : "PlayerOrAI",
+			"mainHero" : "hero_101",
+			"heroes" : {
+				"hero_101" : {
+					"type" : "ingham"
+				}
+			}
+		},
+		"tan" : {
+			"canPlay" : "AIOnly",
+			"heroes" : {
+				"randomHero_103" : {}
+			}
+		},
+		"teal" : {
+			"canPlay" : "AIOnly",
+			"heroes" : {
+				"randomHero_108" : {}
+			}
+		}
+	},
+	"triggeredEvents" : {
+		"standardVictory" : {
+			"condition" : [
+				"standardWin"
+
+			],
+			"effect" : {
+				"messageToSend" : "%s standardVictory effect test message",
+				"type" : "victory"
+			},
+			"message" : "Test standardVictory message"
+		},
+		"standardDefeat" : {
+			"condition" : [
+				"daysWithoutTown",
+				{
+					"value" : 7
+				}
+			],
+			"effect" : {
+				"messageToSend" : "%s standardDefeat effect test message",
+				"type" : "defeat"
+			},
+			"message" : "%s, standardDefeat"
+		}
+	},
+	"victoryIconIndex" : 11,
+	"victoryString" : "Test victoryString",
+	"versionMajor" : 1,
+	"versionMinor" : 0
+}

+ 7389 - 0
test/testdata/ObjectPropertyTest/objects.ex.json

@@ -0,0 +1,7389 @@
+{
+	"mine_0" : {
+		"l" : 0,
+		"subtype" : "alchemistLab",
+		"template" : {
+			"animation" : "AVMALCH0",
+			"editorAnimation" : "AVMALCH0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"BAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 10,
+		"y" : 1,
+		"options" : {
+			"owner" : "red"
+		}
+	},
+	"mine_1" : {
+		"l" : 0,
+		"subtype" : "crystalCavern",
+		"template" : {
+			"animation" : "AVMCRDR0",
+			"editorAnimation" : "AVMCRDR0",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 14,
+		"y" : 1,
+		"options" : {
+			"owner" : "blue"
+		}
+	},
+	"mine_2" : {
+		"l" : 0,
+		"subtype" : "gemPond",
+		"template" : {
+			"animation" : "AVMGEDR0",
+			"editorAnimation" : "AVMGEDR0",
+			"mask" : [
+				"BBB",
+				"BAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			],
+			"zIndex" : 100
+		},
+		"type" : "mine",
+		"x" : 18,
+		"y" : 1,
+		"options" : {
+			"owner" : "tan"
+		}
+	},
+	"mine_3" : {
+		"l" : 0,
+		"subtype" : "goldMine",
+		"template" : {
+			"animation" : "AVMGODR0",
+			"editorAnimation" : "AVMGODR0",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 22,
+		"y" : 1,
+		"options" : {
+			"owner" : "green"
+		}
+	},
+	"mine_4" : {
+		"l" : 0,
+		"subtype" : "orePit",
+		"template" : {
+			"animation" : "AVMORDR0",
+			"editorAnimation" : "AVMORDR0",
+			"mask" : [
+				"BBB",
+				"BAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			],
+			"zIndex" : 100
+		},
+		"type" : "mine",
+		"x" : 26,
+		"y" : 1,
+		"options" : {
+			"owner" : "orange"
+		}
+	},
+	"mine_5" : {
+		"l" : 0,
+		"subtype" : "sawmill",
+		"template" : {
+			"animation" : "AVMSAWD0",
+			"editorAnimation" : "AVMSAWD0",
+			"mask" : [
+				"VVVVV",
+				"VVVBB",
+				"VBBAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 31,
+		"y" : 1,
+		"options" : {
+			"owner" : "purple"
+		}
+	},
+	"mine_6" : {
+		"l" : 0,
+		"subtype" : "sulfurDune",
+		"template" : {
+			"animation" : "AVMSULF0",
+			"editorAnimation" : "AVMSULF0",
+			"mask" : [
+				"VVV",
+				"BAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 35,
+		"y" : 1,
+		"options" : {
+			"owner" : "teal"
+		}
+	},
+	"mine_7" : {
+		"l" : 0,
+		"subtype" : "abandoned",
+		"template" : {
+			"animation" : "AVXABND0",
+			"editorAnimation" : "AVXABND0",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 39,
+		"y" : 1,
+		"options" : {
+			"possibleResources" : [
+				"mercury",
+				"ore",
+				"sulfur",
+				"crystal",
+				"gems",
+				"gold"
+			]
+		}
+	},
+	"mine_8" : {
+		"l" : 0,
+		"subtype" : "abandoned",
+		"template" : {
+			"animation" : "AVXABND0",
+			"editorAnimation" : "AVXABND0",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 43,
+		"y" : 1,
+		"options" : {
+			"possibleResources" : [
+				"mercury"
+			]
+		}
+	},
+	"sign_9" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 4,
+		"y" : 1
+	},
+	"sign_10" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 6,
+		"y" : 1,
+		"options" : {
+			"text" : "Previus one have random sign"
+		}
+	},
+	"oceanBottle_11" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBTTL0",
+			"editorAnimation" : "AVXBTTL0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "oceanBottle",
+		"x" : 81,
+		"y" : 5
+	},
+	"oceanBottle_12" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBTTL0",
+			"editorAnimation" : "AVXBTTL0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "oceanBottle",
+		"x" : 83,
+		"y" : 5,
+		"options" : {
+			"text" : "Other one have random text"
+		}
+	},
+	"boat_13" : {
+		"l" : 0,
+		"subtype" : "evil",
+		"template" : {
+			"animation" : "AVXBOAT0",
+			"editorAnimation" : "AVXBOAT0",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "boat",
+		"x" : 80,
+		"y" : 5
+	},
+	"creatureGeneratorCommon_14" : {
+		"l" : 0,
+		"subtype" : "guardhouse",
+		"template" : {
+			"animation" : "AVGPIKE0",
+			"editorAnimation" : "AVGPIKE0",
+			"mask" : [
+				"VVV",
+				"VBV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "creatureGeneratorCommon",
+		"x" : 5,
+		"y" : 8
+	},
+	"creatureGeneratorCommon_15" : {
+		"l" : 0,
+		"subtype" : "archersTower",
+		"template" : {
+			"animation" : "AVGCROS0",
+			"editorAnimation" : "AVGCROS0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "creatureGeneratorCommon",
+		"x" : 9,
+		"y" : 8,
+		"options" : {
+			"owner" : "red"
+		}
+	},
+	"creatureGeneratorCommon_16" : {
+		"l" : 0,
+		"subtype" : "griffinTower",
+		"template" : {
+			"animation" : "AVGGRFF0",
+			"editorAnimation" : "AVGGRFF0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "creatureGeneratorCommon",
+		"x" : 13,
+		"y" : 8,
+		"options" : {
+			"owner" : "tan"
+		}
+	},
+	"witchHut_17" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVSWTCH0",
+			"editorAnimation" : "AVSWTCH0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "witchHut",
+		"x" : 17,
+		"y" : 8,
+		"options" : {
+			"allowedSkills" : {
+				"anyOf" : [
+					"airMagic"
+				]
+			}
+		}
+	},
+	"witchHut_18" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVSWTCH0",
+			"editorAnimation" : "AVSWTCH0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "witchHut",
+		"x" : 20,
+		"y" : 8,
+		"options" : {
+			"allowedSkills" : {
+				"anyOf" : [
+					"airMagic",
+					"archery",
+					"armorer",
+					"artillery"
+				]
+			}
+		}
+	},
+	"witchHut_19" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVSWTCH0",
+			"editorAnimation" : "AVSWTCH0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "witchHut",
+		"x" : 23,
+		"y" : 8,
+		"options" : {
+			"allowedSkills" : {
+				"anyOf" : [
+					"airMagic",
+					"archery",
+					"armorer",
+					"artillery",
+					"ballistics",
+					"diplomacy",
+					"eagleEye",
+					"earthMagic",
+					"estates",
+					"fireMagic",
+					"firstAid",
+					"intelligence",
+					"learning",
+					"logistics",
+					"luck",
+					"mysticism",
+					"navigation",
+					"offence",
+					"pathfinding",
+					"resistance",
+					"scholar",
+					"scouting",
+					"sorcery",
+					"tactics",
+					"waterMagic",
+					"wisdom"
+				]
+			}
+		}
+	},
+	"randomDwelling_20" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 5,
+		"y" : 12,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"conflux",
+					"dungeon",
+					"fortress",
+					"inferno",
+					"necropolis",
+					"rampart",
+					"stronghold",
+					"tower"
+				]
+			},
+			"maxLevel" : 6
+		}
+	},
+	"sign_21" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 15,
+		"y" : 8,
+		"options" : {
+			"text" : "Air Magic"
+		}
+	},
+	"sign_22" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 18,
+		"y" : 8,
+		"options" : {
+			"text" : "Air Magic, Archery, Armorer,Artillery"
+		}
+	},
+	"sign_23" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 8,
+		"options" : {
+			"text" : "Any random skill exclude necromancy (default)"
+		}
+	},
+	"sign_24" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 8,
+		"options" : {
+			"text" : "Not owned by anyone"
+		}
+	},
+	"sign_25" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 7,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by red player"
+		}
+	},
+	"sign_26" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 11,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by tan player"
+		}
+	},
+	"sign_27" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 12,
+		"options" : {
+			"text" : "Default: not owned by anyone, level 1-7, all alignments"
+		}
+	},
+	"sign_28" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 15,
+		"options" : {
+			"text" : "Owned by red, level 6-7, castle, dungeon or fortress"
+		}
+	},
+	"randomDwelling_29" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 5,
+		"y" : 15,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"dungeon",
+					"fortress"
+				]
+			},
+			"maxLevel" : 6,
+			"minLevel" : 5,
+			"owner" : "red"
+		}
+	},
+	"randomDwelling_30" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 7,
+		"y" : 12,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"conflux",
+					"dungeon",
+					"fortress",
+					"inferno",
+					"necropolis",
+					"rampart",
+					"stronghold",
+					"tower"
+				]
+			},
+			"maxLevel" : 6
+		}
+	},
+	"randomDwelling_31" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 9,
+		"y" : 12,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"conflux",
+					"dungeon",
+					"fortress",
+					"inferno",
+					"necropolis",
+					"rampart",
+					"stronghold",
+					"tower"
+				]
+			},
+			"maxLevel" : 6
+		}
+	},
+	"randomDwelling_32" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 11,
+		"y" : 12,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"conflux",
+					"dungeon",
+					"fortress",
+					"inferno",
+					"necropolis",
+					"rampart",
+					"stronghold",
+					"tower"
+				]
+			},
+			"maxLevel" : 6
+		}
+	},
+	"randomDwelling_33" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 13,
+		"y" : 12,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"conflux",
+					"dungeon",
+					"fortress",
+					"inferno",
+					"necropolis",
+					"rampart",
+					"stronghold",
+					"tower"
+				]
+			},
+			"maxLevel" : 6
+		}
+	},
+	"randomDwelling_34" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 7,
+		"y" : 15,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"dungeon",
+					"fortress"
+				]
+			},
+			"maxLevel" : 6,
+			"minLevel" : 5,
+			"owner" : "red"
+		}
+	},
+	"randomDwelling_35" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 9,
+		"y" : 15,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"dungeon",
+					"fortress"
+				]
+			},
+			"maxLevel" : 6,
+			"minLevel" : 5,
+			"owner" : "red"
+		}
+	},
+	"randomDwelling_36" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 11,
+		"y" : 15,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"dungeon",
+					"fortress"
+				]
+			},
+			"maxLevel" : 6,
+			"minLevel" : 5,
+			"owner" : "red"
+		}
+	},
+	"randomDwelling_37" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 13,
+		"y" : 15,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"dungeon",
+					"fortress"
+				]
+			},
+			"maxLevel" : 6,
+			"minLevel" : 5,
+			"owner" : "red"
+		}
+	},
+	"sign_38" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 18,
+		"options" : {
+			"text" : "Level 1 template! Owned by tan, rampart of conflux"
+		}
+	},
+	"randomDwellingLvl_39" : {
+		"l" : 0,
+		"subtype" : "objectLvl1",
+		"template" : {
+			"animation" : "AVRCGEN1",
+			"editorAnimation" : "AVRCGEN1",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingLvl",
+		"x" : 5,
+		"y" : 18,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"conflux",
+					"rampart"
+				]
+			},
+			"owner" : "tan"
+		}
+	},
+	"randomDwellingLvl_40" : {
+		"l" : 0,
+		"subtype" : "objectLvl1",
+		"template" : {
+			"animation" : "AVRCGEN1",
+			"editorAnimation" : "AVRCGEN1",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingLvl",
+		"x" : 7,
+		"y" : 18,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"conflux",
+					"rampart"
+				]
+			},
+			"owner" : "tan"
+		}
+	},
+	"randomDwellingLvl_41" : {
+		"l" : 0,
+		"subtype" : "objectLvl1",
+		"template" : {
+			"animation" : "AVRCGEN1",
+			"editorAnimation" : "AVRCGEN1",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingLvl",
+		"x" : 9,
+		"y" : 18,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"conflux",
+					"rampart"
+				]
+			},
+			"owner" : "tan"
+		}
+	},
+	"randomDwellingLvl_42" : {
+		"l" : 0,
+		"subtype" : "objectLvl1",
+		"template" : {
+			"animation" : "AVRCGEN1",
+			"editorAnimation" : "AVRCGEN1",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingLvl",
+		"x" : 11,
+		"y" : 18,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"conflux",
+					"rampart"
+				]
+			},
+			"owner" : "tan"
+		}
+	},
+	"randomDwellingLvl_43" : {
+		"l" : 0,
+		"subtype" : "objectLvl1",
+		"template" : {
+			"animation" : "AVRCGEN1",
+			"editorAnimation" : "AVRCGEN1",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingLvl",
+		"x" : 13,
+		"y" : 18,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"conflux",
+					"rampart"
+				]
+			},
+			"owner" : "tan"
+		}
+	},
+	"randomDwellingFaction_44" : {
+		"l" : 0,
+		"subtype" : "objectConflux",
+		"template" : {
+			"animation" : "AVRCGN08",
+			"editorAnimation" : "AVRCGN08",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingFaction",
+		"x" : 5,
+		"y" : 22,
+		"options" : {
+			"maxLevel" : 5,
+			"minLevel" : 2,
+			"owner" : "teal"
+		}
+	},
+	"sign_45" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 22,
+		"options" : {
+			"text" : "Conflux template! Owned by teal, level 3-6"
+		}
+	},
+	"randomDwellingFaction_46" : {
+		"l" : 0,
+		"subtype" : "objectConflux",
+		"template" : {
+			"animation" : "AVRCGN08",
+			"editorAnimation" : "AVRCGN08",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingFaction",
+		"x" : 7,
+		"y" : 22,
+		"options" : {
+			"maxLevel" : 5,
+			"minLevel" : 2,
+			"owner" : "teal"
+		}
+	},
+	"randomDwellingFaction_47" : {
+		"l" : 0,
+		"subtype" : "objectConflux",
+		"template" : {
+			"animation" : "AVRCGN08",
+			"editorAnimation" : "AVRCGN08",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingFaction",
+		"x" : 9,
+		"y" : 22,
+		"options" : {
+			"maxLevel" : 5,
+			"minLevel" : 2,
+			"owner" : "teal"
+		}
+	},
+	"randomDwellingFaction_48" : {
+		"l" : 0,
+		"subtype" : "objectConflux",
+		"template" : {
+			"animation" : "AVRCGN08",
+			"editorAnimation" : "AVRCGN08",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingFaction",
+		"x" : 11,
+		"y" : 22,
+		"options" : {
+			"maxLevel" : 5,
+			"minLevel" : 2,
+			"owner" : "teal"
+		}
+	},
+	"randomDwellingFaction_49" : {
+		"l" : 0,
+		"subtype" : "objectConflux",
+		"template" : {
+			"animation" : "AVRCGN08",
+			"editorAnimation" : "AVRCGN08",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingFaction",
+		"x" : 13,
+		"y" : 22,
+		"options" : {
+			"maxLevel" : 5,
+			"minLevel" : 2,
+			"owner" : "teal"
+		}
+	},
+	"shrineOfMagicLevel1_50" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL1SH0",
+			"editorAnimation" : "AVXL1SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel1",
+		"x" : 25,
+		"y" : 8
+	},
+	"sign_51" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 24,
+		"y" : 8,
+		"options" : {
+			"text" : "Random level 1 spell"
+		}
+	},
+	"shrineOfMagicLevel1_52" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL1SH0",
+			"editorAnimation" : "AVXL1SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel1",
+		"x" : 28,
+		"y" : 8,
+		"options" : {
+			"spell" : "haste"
+		}
+	},
+	"sign_53" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 27,
+		"y" : 8,
+		"options" : {
+			"text" : "Level 1 spell: Haste "
+		}
+	},
+	"shrineOfMagicLevel2_54" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL2SH0",
+			"editorAnimation" : "AVXL2SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel2",
+		"x" : 31,
+		"y" : 8
+	},
+	"sign_55" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 30,
+		"y" : 8,
+		"options" : {
+			"text" : "Random level 2 spell"
+		}
+	},
+	"sign_56" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 33,
+		"y" : 8,
+		"options" : {
+			"text" : "Level 2 spell: Quicksand"
+		}
+	},
+	"shrineOfMagicLevel2_57" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL2SH0",
+			"editorAnimation" : "AVXL2SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel2",
+		"x" : 34,
+		"y" : 8,
+		"options" : {
+			"spell" : "quicksand"
+		}
+	},
+	"shrineOfMagicLevel3_58" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL3SH0",
+			"editorAnimation" : "AVXL3SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel3",
+		"x" : 37,
+		"y" : 8
+	},
+	"shrineOfMagicLevel3_59" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL3SH0",
+			"editorAnimation" : "AVXL3SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel3",
+		"x" : 40,
+		"y" : 8,
+		"options" : {
+			"spell" : "teleport"
+		}
+	},
+	"sign_60" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 36,
+		"y" : 8,
+		"options" : {
+			"text" : "Random level 3 spell"
+		}
+	},
+	"sign_61" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 39,
+		"y" : 8,
+		"options" : {
+			"text" : "Level 3 spell: teleport"
+		}
+	},
+	"lighthouse_62" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXLTHS0",
+			"editorAnimation" : "AVXLTHS0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VVV",
+				"VVA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "lighthouse",
+		"x" : 43,
+		"y" : 8,
+		"options" : {
+			"owner" : "green"
+		}
+	},
+	"sign_63" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 42,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by green player"
+		}
+	},
+	"garrisonHorizontal_64" : {
+		"l" : 0,
+		"subtype" : "normal",
+		"template" : {
+			"animation" : "AVCGAR10",
+			"editorAnimation" : "AVCGAR10",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "garrisonHorizontal",
+		"x" : 48,
+		"y" : 8,
+		"options" : {
+			"owner" : "blue",
+			"removableUnits" : true
+		}
+	},
+	"sign_65" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 45,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by blue player and troops are removable (default)"
+		}
+	},
+	"garrisonHorizontal_66" : {
+		"l" : 0,
+		"subtype" : "normal",
+		"template" : {
+			"animation" : "AVCGAR10",
+			"editorAnimation" : "AVCGAR10",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "garrisonHorizontal",
+		"x" : 53,
+		"y" : 8,
+		"options" : {
+			"owner" : "blue"
+		}
+	},
+	"sign_67" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 50,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by blue player and troops are NOT removable"
+		}
+	},
+	"garrisonHorizontal_68" : {
+		"l" : 0,
+		"subtype" : "antiMagic",
+		"template" : {
+			"animation" : "AVCGAR20",
+			"editorAnimation" : "AVCGAR20",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "garrisonHorizontal",
+		"x" : 58,
+		"y" : 8,
+		"options" : {
+			"army" : [
+				{
+					"amount" : 100,
+					"type" : "enchanter"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 10,
+					"type" : "azureDragon"
+				},
+				{},
+				{}
+			],
+			"owner" : "red"
+		}
+	},
+	"sign_69" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 55,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by red player, troops are NOT removable and contain following troops: slot 1 - 100 enchanters, slot 5 - 10 azure dragons"
+		}
+	},
+	"garrisonHorizontal_70" : {
+		"l" : 0,
+		"subtype" : "antiMagic",
+		"template" : {
+			"animation" : "AVCGAR20",
+			"editorAnimation" : "AVCGAR20",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "garrisonHorizontal",
+		"x" : 63,
+		"y" : 8,
+		"options" : {
+			"army" : [
+				{
+					"amount" : 11,
+					"type" : "gremlin"
+				},
+				{
+					"amount" : 12,
+					"type" : "masterGremlin"
+				},
+				{
+					"amount" : 13,
+					"type" : "stoneGargoyle"
+				},
+				{
+					"amount" : 14,
+					"type" : "obsidianGargoyle"
+				},
+				{
+					"amount" : 15,
+					"type" : "ironGolem"
+				},
+				{
+					"amount" : 16,
+					"type" : "stoneGolem"
+				},
+				{
+					"amount" : 17,
+					"type" : "mage"
+				}
+			]
+		}
+	},
+	"sign_71" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 60,
+		"y" : 8,
+		"options" : {
+			"text" : "NOT owned by anyone, troops are removable and contain following troops: slot 1 - 11 gremlins, slot 2 - 12 master gremlins, slot 3 - 13 stone garg, etc"
+		}
+	},
+	"scholar_72" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 66,
+		"y" : 8
+	},
+	"scholar_73" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 69,
+		"y" : 8,
+		"options" : {
+			"rewardPrimSkill" : "attack"
+		}
+	},
+	"scholar_74" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 72,
+		"y" : 8,
+		"options" : {
+			"rewardPrimSkill" : "defence"
+		}
+	},
+	"shipyard_75" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSHYD0",
+			"editorAnimation" : "AVXSHYD0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"BAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shipyard",
+		"x" : 81,
+		"y" : 12,
+		"options" : {
+			"owner" : "pink"
+		}
+	},
+	"sign_76" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 78,
+		"y" : 12,
+		"options" : {
+			"text" : "Owned by pink player"
+		}
+	},
+	"sign_77" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 65,
+		"y" : 8,
+		"options" : {
+			"text" : "Random reward"
+		}
+	},
+	"sign_78" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 68,
+		"y" : 8,
+		"options" : {
+			"text" : "Primary skill: attack"
+		}
+	},
+	"sign_79" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 71,
+		"y" : 8,
+		"options" : {
+			"text" : "Primary skill: defense"
+		}
+	},
+	"sign_80" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 74,
+		"y" : 8,
+		"options" : {
+			"text" : "Primary skill: spell power"
+		}
+	},
+	"sign_81" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 77,
+		"y" : 8,
+		"options" : {
+			"text" : "Primary skill: knowledge"
+		}
+	},
+	"scholar_82" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 75,
+		"y" : 8,
+		"options" : {
+			"rewardPrimSkill" : "spellpower"
+		}
+	},
+	"scholar_83" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 78,
+		"y" : 8,
+		"options" : {
+			"rewardPrimSkill" : "knowledge"
+		}
+	},
+	"scholar_84" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 66,
+		"y" : 10,
+		"options" : {
+			"rewardSkill" : "sorcery"
+		}
+	},
+	"sign_85" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 65,
+		"y" : 10,
+		"options" : {
+			"text" : "Secondary skill: sorcery"
+		}
+	},
+	"sign_86" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 68,
+		"y" : 10,
+		"options" : {
+			"text" : "Secondary skill: first aid"
+		}
+	},
+	"scholar_87" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 69,
+		"y" : 10,
+		"options" : {
+			"rewardSkill" : "firstAid"
+		}
+	},
+	"sign_88" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 71,
+		"y" : 10,
+		"options" : {
+			"text" : "Spell: stone skin"
+		}
+	},
+	"scholar_89" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 72,
+		"y" : 10,
+		"options" : {
+			"rewardSpell" : "stoneSkin"
+		}
+	},
+	"scholar_90" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 75,
+		"y" : 10,
+		"options" : {
+			"rewardSpell" : "fly"
+		}
+	},
+	"sign_91" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 74,
+		"y" : 10,
+		"options" : {
+			"text" : "Spell: fly"
+		}
+	},
+	"sign_92" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 59,
+		"y" : 20,
+		"options" : {
+			"text" : "EVENT TESTING ZONE"
+		}
+	},
+	"sign_93" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 61,
+		"y" : 18,
+		"options" : {
+			"text" : "Message: test. All players. Computer players can trigger"
+		}
+	},
+	"sign_94" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 65,
+		"y" : 18,
+		"options" : {
+			"text" : "Message: lol, computers CANT trigger, disappear after visit, players 1,3,5 creatures: archer, basilik, pegasus (1 of each)"
+		}
+	},
+	"sign_95" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 69,
+		"y" : 18,
+		"options" : {
+			"text" : "all non default: messagenondefault, players 1,8; allow comp trigger; don't cancel; guardians, pikeman, halberdman, etc; take -777 spell points"
+		}
+	},
+	"sign_96" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 73,
+		"y" : 18,
+		"options" : {
+			"text" : "All pos: 99 999 999 exp, 999 spell points, morale\/luck +3, res 9,8,7,6,5,4,3;pskills: 1,2,3,4; sskill: adv. offence; art: rib cage, sp: blind, 1 troll"
+		}
+	},
+	"event_97" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"0"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 62,
+		"y" : 18,
+		"options" : {
+			"aIActivable" : true,
+			"guardMessage" : "test",
+			"removeAfterVisit" : true
+		}
+	},
+	"event_98" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"0"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 66,
+		"y" : 18,
+		"options" : {
+			"availableFor" : [
+				"red",
+				"tan",
+				"orange"
+			],
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "archer"
+				},
+				{
+					"amount" : 1,
+					"type" : "basilisk"
+				},
+				{
+					"amount" : 1,
+					"type" : "pegasus"
+				},
+				{},
+				{},
+				{},
+				{}
+			],
+			"removeAfterVisit" : true
+		}
+	},
+	"event_99" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"0"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 74,
+		"y" : 18,
+		"options" : {
+			"artifacts" : [
+				"ribCage"
+			],
+			"creatures" : [
+				{
+					"amount" : 1,
+					"type" : "troll"
+				}
+			],
+			"experience" : 99999999,
+			"luck" : 3,
+			"mana" : 999,
+			"morale" : 3,
+			"primarySkills" : {
+				"attack" : 1,
+				"defence" : 2,
+				"knowledge" : 4,
+				"spellpower" : 3
+			},
+			"removeAfterVisit" : true,
+			"resources" : {
+				"crystal" : 5,
+				"gems" : 4,
+				"gold" : 3,
+				"mercury" : 8,
+				"ore" : 7,
+				"sulfur" : 6,
+				"wood" : 9
+			},
+			"secondarySkills" : {
+				"offence" : "advanced"
+			},
+			"spells" : [
+				"blind"
+			]
+		}
+	},
+	"event_100" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"0"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 70,
+		"y" : 18,
+		"options" : {
+			"aIActivable" : true,
+			"availableFor" : [
+				"red",
+				"pink"
+			],
+			"guardMessage" : "messagenondefault",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				}
+			],
+			"mana" : -777
+		}
+	},
+	"hero_101" : {
+		"l" : 0,
+		"subtype" : "cleric",
+		"template" : {
+			"animation" : "AH01_E",
+			"editorAnimation" : "AH01_E",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "hero",
+		"x" : 2,
+		"y" : 1,
+		"options" : {
+			"army" : [
+				{
+					"amount" : 1,
+					"type" : "crystalDragon"
+				},
+				{
+					"amount" : 1,
+					"type" : "fairieDragon"
+				},
+				{
+					"amount" : 1,
+					"type" : "rustDragon"
+				},
+				{
+					"amount" : 1,
+					"type" : "azureDragon"
+				},
+				{},
+				{},
+				{}
+			],
+			"artifacts" : {
+				"feet" : "bootsOfLevitation",
+				"spellbook" : "spellBook"
+			},
+			"biography" : "321",
+			"owner" : "red",
+			"primarySkills" : {
+				"attack" : 55,
+				"defence" : 44,
+				"knowledge" : 22,
+				"spellpower" : 33
+			},
+			"secondarySkills" : {
+				"wisdom" : "expert",
+				"sorcery" : "expert"
+			},
+			"spellBook" : [
+				"fly"
+			],
+			"tightFormation" : true,
+			"type" : "ingham"
+		}
+	},
+	"sign_102" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 0,
+		"y" : 1,
+		"options" : {
+			"text" : "Hero: Ingham, bio:321,prim skills:55,44,33,22,spells:fly,arts:spellbook,boots of levithation,creatures:4 dragons,grouped,s skills:wisdom,sorcery exper"
+		}
+	},
+	"randomHero_103" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 124,
+		"y" : 143,
+		"options" : {
+			"owner" : "tan"
+		}
+	},
+	"randomHero_104" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 119,
+		"y" : 143,
+		"options" : {
+			"owner" : "blue"
+		}
+	},
+	"randomHero_105" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 129,
+		"y" : 143,
+		"options" : {
+			"owner" : "green"
+		}
+	},
+	"randomHero_106" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 134,
+		"y" : 143,
+		"options" : {
+			"owner" : "orange"
+		}
+	},
+	"randomHero_107" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 139,
+		"y" : 143,
+		"options" : {
+			"owner" : "purple"
+		}
+	},
+	"randomHero_108" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 144,
+		"y" : 143,
+		"options" : {
+			"owner" : "teal"
+		}
+	},
+	"randomHero_109" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 114,
+		"y" : 143,
+		"options" : {
+			"owner" : "pink"
+		}
+	},
+	"event_110" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"0"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 78,
+		"y" : 18,
+		"options" : {
+			"removeAfterVisit" : true
+		}
+	},
+	"event_111" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"0"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 82,
+		"y" : 18,
+		"options" : {
+			"artifacts" : [
+				"admiralsHat",
+				"ambassadorsSash",
+				"amuletOfTheUndertaker",
+				"angelFeatherArrows",
+				"angelWings",
+				"angelicAlliance",
+				"angelicAlliance",
+				"armageddonsBlade",
+				"armorOfTheDamned",
+				"armorOfWonder",
+				"badgeOfCourage",
+				"birdOfPerception",
+				"blackshardOfTheDeadKnight",
+				"bootsOfLevitation",
+				"bootsOfPolarity",
+				"bootsOfSpeed",
+				"bowOfElvenCherrywood",
+				"bowOfTheSharpshooter",
+				"bowstringOfTheUnicornsMane",
+				"breastplateOfBrimstone",
+				"breastplateOfPetrifiedWood",
+				"bucklerOfTheGnollKing",
+				"capeOfVelocity",
+				"cardsOfProphecy",
+				"celestialNecklaceOfBliss",
+				"centaurAxe",
+				"charmOfMana",
+				"cloakOfTheUndeadKing",
+				"cloverOfFortune",
+				"collarOfConjuring",
+				"cornucopia",
+				"crestOfValor",
+				"capeOfConjuring",
+				"crownOfDragontooth",
+				"crownOfTheSupremeMagi",
+				"deadMansBoots",
+				"diplomatsRing",
+				"dragonScaleArmor",
+				"dragonScaleShield",
+				"dragonWingTabard",
+				"dragonboneGreaves",
+				"elixirOfLife",
+				"emblemOfCognizance",
+				"endlessPurseOfGold",
+				"endlessSackOfGold",
+				"endlessBagOfGold",
+				"equestriansGloves",
+				"everflowingCrystalCloak",
+				"everpouringVialOfMercury",
+				"eversmokingRingOfSulfur",
+				"garnitureOfInterference",
+				"glyphOfGallantry",
+				"goldenBow",
+				"greaterGnollsFlail",
+				"headOfLegion",
+				"hellstormHelmet",
+				"hellstormHelmet",
+				"helmOfChaos",
+				"helmOfHeavenlyEnlightenment",
+				"helmOfTheAlabasterUnicorn",
+				"helmOfTheAlabasterUnicorn",
+				"hourglassOfTheEvilHour",
+				"inexhaustibleCartOfLumber",
+				"inexhaustibleCartOfOre"
+			],
+			"removeAfterVisit" : true
+		}
+	},
+	"event_112" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"0"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 86,
+		"y" : 18,
+		"options" : {
+			"removeAfterVisit" : true,
+			"spells" : [
+				"airElemental",
+				"airShield",
+				"animateDead",
+				"antiMagic",
+				"armageddon",
+				"berserk",
+				"bless",
+				"blind",
+				"bloodlust",
+				"chainLightning",
+				"clone",
+				"counterstrike",
+				"cure",
+				"curse",
+				"deathRipple",
+				"destroyUndead",
+				"dimensionDoor",
+				"disguise",
+				"dispel",
+				"disruptingRay",
+				"earthElemental",
+				"earthquake",
+				"fireElemental",
+				"fireShield",
+				"fireWall",
+				"fireball",
+				"fly",
+				"forceField",
+				"forgetfulness",
+				"fortune",
+				"frenzy",
+				"frostRing",
+				"haste",
+				"hypnotize",
+				"iceBolt",
+				"implosion",
+				"inferno",
+				"landMine",
+				"lightningBolt",
+				"magicArrow",
+				"magicMirror",
+				"meteorShower",
+				"mirth",
+				"misfortune",
+				"prayer",
+				"precision",
+				"protectEarth",
+				"protectWater",
+				"protectAir",
+				"protectFire",
+				"quicksand",
+				"removeObstacle",
+				"resurrection",
+				"sacrifice",
+				"scuttleBoat",
+				"shield",
+				"slayer",
+				"slow",
+				"sorrow",
+				"stoneSkin",
+				"summonBoat",
+				"teleport",
+				"townPortal",
+				"viewAir",
+				"viewEarth",
+				"visions",
+				"waterElemental",
+				"waterWalk",
+				"weakness"
+			]
+		}
+	},
+	"event_113" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"0"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 90,
+		"y" : 18,
+		"options" : {
+			"creatures" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				}
+			],
+			"removeAfterVisit" : true
+		}
+	},
+	"event_114" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"0"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 94,
+		"y" : 18,
+		"options" : {
+			"creatures" : [
+				{
+					"amount" : 9999,
+					"type" : "rustDragon"
+				},
+				{
+					"amount" : 9999,
+					"type" : "fairieDragon"
+				},
+				{
+					"amount" : 9999,
+					"type" : "crystalDragon"
+				},
+				{
+					"amount" : 9999,
+					"type" : "azureDragon"
+				},
+				{
+					"amount" : 9999,
+					"type" : "enchanter"
+				},
+				{
+					"amount" : 9999,
+					"type" : "diamondGolem"
+				},
+				{
+					"amount" : 9999,
+					"type" : "troll"
+				}
+			],
+			"removeAfterVisit" : true
+		}
+	},
+	"sign_115" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 77,
+		"y" : 18,
+		"options" : {
+			"text" : "give 30 wizard well's"
+		}
+	},
+	"sign_116" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 81,
+		"y" : 18,
+		"options" : {
+			"text" : "Give 64 first artifacts up to Inexhaustible card of Ore"
+		}
+	},
+	"sign_117" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 85,
+		"y" : 18,
+		"options" : {
+			"text" : "gives all possible spells"
+		}
+	},
+	"sign_118" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 89,
+		"y" : 18,
+		"options" : {
+			"text" : "Give 7 stacks of 1 pikeman"
+		}
+	},
+	"sign_119" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 93,
+		"y" : 18,
+		"options" : {
+			"text" : "Give 9999 of each last creature in list: Rust, Faerie, Azure, Crystal dragons, Enchanters, Diamond Golems, Trolls"
+		}
+	},
+	"sign_120" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 32,
+		"options" : {
+			"text" : "Resource template: default"
+		}
+	},
+	"randomResource_121" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 4,
+		"y" : 32
+	},
+	"randomResource_122" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 5,
+		"y" : 32
+	},
+	"randomResource_123" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 6,
+		"y" : 32
+	},
+	"randomResource_124" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 7,
+		"y" : 32
+	},
+	"randomResource_125" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 8,
+		"y" : 32
+	},
+	"sign_126" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 34,
+		"options" : {
+			"text" : "Resource template: amount 150"
+		}
+	},
+	"randomResource_127" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 4,
+		"y" : 34,
+		"options" : {
+			"amount" : 150
+		}
+	},
+	"randomResource_128" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 5,
+		"y" : 34,
+		"options" : {
+			"amount" : 150
+		}
+	},
+	"randomResource_129" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 6,
+		"y" : 34,
+		"options" : {
+			"amount" : 150
+		}
+	},
+	"randomResource_130" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 7,
+		"y" : 34,
+		"options" : {
+			"amount" : 150
+		}
+	},
+	"randomResource_131" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 8,
+		"y" : 34,
+		"options" : {
+			"amount" : 150
+		}
+	},
+	"sign_132" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 36,
+		"options" : {
+			"text" : "Resource template: amount 255, message:testresource, creatures: pikeman, halberdier, archer (slots and amount 1,2,3) and 15 fairie dragons (slot 7)"
+		}
+	},
+	"randomResource_133" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 4,
+		"y" : 36,
+		"options" : {
+			"amount" : 255,
+			"guardMessage" : "testresource",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 2,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 3,
+					"type" : "archer"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 15,
+					"type" : "fairieDragon"
+				}
+			]
+		}
+	},
+	"randomResource_134" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 5,
+		"y" : 36,
+		"options" : {
+			"amount" : 255,
+			"guardMessage" : "testresource",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 2,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 3,
+					"type" : "archer"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 15,
+					"type" : "fairieDragon"
+				}
+			]
+		}
+	},
+	"randomResource_135" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 6,
+		"y" : 36,
+		"options" : {
+			"amount" : 255,
+			"guardMessage" : "testresource",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 2,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 3,
+					"type" : "archer"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 15,
+					"type" : "fairieDragon"
+				}
+			]
+		}
+	},
+	"randomResource_136" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 7,
+		"y" : 36,
+		"options" : {
+			"amount" : 255,
+			"guardMessage" : "testresource",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 2,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 3,
+					"type" : "archer"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 15,
+					"type" : "fairieDragon"
+				}
+			]
+		}
+	},
+	"randomResource_137" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 8,
+		"y" : 36,
+		"options" : {
+			"amount" : 255,
+			"guardMessage" : "testresource",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 2,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 3,
+					"type" : "archer"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 15,
+					"type" : "fairieDragon"
+				}
+			]
+		}
+	},
+	"resource_138" : {
+		"l" : 0,
+		"subtype" : "crystal",
+		"template" : {
+			"animation" : "AVTCRYS0",
+			"editorAnimation" : "AVTCRYS0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "resource",
+		"x" : 4,
+		"y" : 38
+	},
+	"sign_139" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 38,
+		"options" : {
+			"text" : "Resource crystal: default"
+		}
+	},
+	"sign_140" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 40,
+		"options" : {
+			"text" : "Resource crystal: default, amount 400"
+		}
+	},
+	"resource_141" : {
+		"l" : 0,
+		"subtype" : "crystal",
+		"template" : {
+			"animation" : "AVTCRYS0",
+			"editorAnimation" : "AVTCRYS0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "resource",
+		"x" : 4,
+		"y" : 40,
+		"options" : {
+			"amount" : 400
+		}
+	},
+	"sign_142" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 42,
+		"options" : {
+			"text" : "Resource crystal: default, amount 500, message: crystalalot"
+		}
+	},
+	"resource_143" : {
+		"l" : 0,
+		"subtype" : "crystal",
+		"template" : {
+			"animation" : "AVTCRYS0",
+			"editorAnimation" : "AVTCRYS0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "resource",
+		"x" : 4,
+		"y" : 42,
+		"options" : {
+			"amount" : 500,
+			"guardMessage" : "crystalalot"
+		}
+	},
+	"sign_144" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 44,
+		"options" : {
+			"text" : "Resource crystal: default, amount 600, message: crystalguard, creatures: 100 rust dragons (slot 1)"
+		}
+	},
+	"resource_145" : {
+		"l" : 0,
+		"subtype" : "crystal",
+		"template" : {
+			"animation" : "AVTCRYS0",
+			"editorAnimation" : "AVTCRYS0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "resource",
+		"x" : 4,
+		"y" : 44,
+		"options" : {
+			"amount" : 600,
+			"guardMessage" : "crystalguard",
+			"guards" : [
+				{
+					"amount" : 100,
+					"type" : "rustDragon"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"sign_146" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 46,
+		"options" : {
+			"text" : "Spell scroll: default (always magic arrow?)"
+		}
+	},
+	"spellScroll_147" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0001",
+			"editorAnimation" : "AVA0001",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "spellScroll",
+		"x" : 4,
+		"y" : 46,
+		"options" : {
+			"spell" : "magicArrow"
+		}
+	},
+	"sign_148" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 48,
+		"options" : {
+			"text" : "Spell scroll: spell prayer, message \"prayerspell\""
+		}
+	},
+	"spellScroll_149" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0001",
+			"editorAnimation" : "AVA0001",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "spellScroll",
+		"x" : 4,
+		"y" : 48,
+		"options" : {
+			"guardMessage" : "prayerspell",
+			"spell" : "prayer"
+		}
+	},
+	"sign_150" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 50,
+		"options" : {
+			"text" : "Spell scroll: spell inferno, message \"infernospell\", creatures: slot 6 - 666 devils"
+		}
+	},
+	"spellScroll_151" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0001",
+			"editorAnimation" : "AVA0001",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "spellScroll",
+		"x" : 4,
+		"y" : 50,
+		"options" : {
+			"guardMessage" : "infernospell",
+			"guards" : [
+				{},
+				{},
+				{},
+				{},
+				{},
+				{
+					"amount" : 666,
+					"type" : "devil"
+				},
+				{}
+			],
+			"spell" : "inferno"
+		}
+	},
+	"artifact_152" : {
+		"l" : 0,
+		"subtype" : "centaurAxe",
+		"template" : {
+			"animation" : "AVA0007",
+			"editorAnimation" : "AVA0007",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "artifact",
+		"x" : 4,
+		"y" : 52
+	},
+	"sign_153" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 52,
+		"options" : {
+			"text" : "Artifact centaurs axe: default"
+		}
+	},
+	"sign_154" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 54,
+		"options" : {
+			"text" : "Artifact centaurs axe: message longtext"
+		}
+	},
+	"artifact_155" : {
+		"l" : 0,
+		"subtype" : "centaurAxe",
+		"template" : {
+			"animation" : "AVA0007",
+			"editorAnimation" : "AVA0007",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "artifact",
+		"x" : 4,
+		"y" : 54,
+		"options" : {
+			"guardMessage" : "longtext"
+		}
+	},
+	"sign_156" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 56,
+		"options" : {
+			"text" : "Artifact centaurs axe: message trolled, creatures: slot 3 - 44 trolls"
+		}
+	},
+	"artifact_157" : {
+		"l" : 0,
+		"subtype" : "centaurAxe",
+		"template" : {
+			"animation" : "AVA0007",
+			"editorAnimation" : "AVA0007",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "artifact",
+		"x" : 4,
+		"y" : 56,
+		"options" : {
+			"guardMessage" : "trolled",
+			"guards" : [
+				{},
+				{},
+				{
+					"amount" : 44,
+					"type" : "troll"
+				},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifact_158" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 4,
+		"y" : 58
+	},
+	"sign_159" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 58,
+		"options" : {
+			"text" : "Artifact template: default"
+		}
+	},
+	"randomArtifact_160" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 5,
+		"y" : 58
+	},
+	"randomArtifact_161" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 6,
+		"y" : 58
+	},
+	"randomArtifact_162" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 7,
+		"y" : 58
+	},
+	"randomArtifact_163" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 8,
+		"y" : 58
+	},
+	"sign_164" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 60,
+		"options" : {
+			"text" : "Artifact template: message \"artifactdefault\", creatures slot 1 -: 500 mages"
+		}
+	},
+	"randomArtifact_165" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 4,
+		"y" : 60,
+		"options" : {
+			"guardMessage" : "artifactdefault",
+			"guards" : [
+				{
+					"amount" : 500,
+					"type" : "mage"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifact_166" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 5,
+		"y" : 60,
+		"options" : {
+			"guardMessage" : "artifactdefault",
+			"guards" : [
+				{
+					"amount" : 500,
+					"type" : "mage"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifact_167" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 6,
+		"y" : 60,
+		"options" : {
+			"guardMessage" : "artifactdefault",
+			"guards" : [
+				{
+					"amount" : 500,
+					"type" : "mage"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifact_168" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 7,
+		"y" : 60,
+		"options" : {
+			"guardMessage" : "artifactdefault",
+			"guards" : [
+				{
+					"amount" : 500,
+					"type" : "mage"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifact_169" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 8,
+		"y" : 60,
+		"options" : {
+			"guardMessage" : "artifactdefault",
+			"guards" : [
+				{
+					"amount" : 500,
+					"type" : "mage"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifactMajor_170" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 4,
+		"y" : 62
+	},
+	"sign_171" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 62,
+		"options" : {
+			"text" : "Artifact template 3: default"
+		}
+	},
+	"randomArtifactMajor_172" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 5,
+		"y" : 62
+	},
+	"randomArtifactMajor_173" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 6,
+		"y" : 62
+	},
+	"randomArtifactMajor_174" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 8,
+		"y" : 62
+	},
+	"randomArtifactMajor_175" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 7,
+		"y" : 62
+	},
+	"sign_176" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 64,
+		"options" : {
+			"text" : "Artifact template 3: message \"artifactthree\", creatures: slot 3 - 333 of royal griffins"
+		}
+	},
+	"randomArtifactMajor_177" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 4,
+		"y" : 64,
+		"options" : {
+			"guardMessage" : "artifactthree",
+			"guards" : [
+				{},
+				{},
+				{
+					"amount" : 333,
+					"type" : "royalGriffin"
+				},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"pandoraBox_178" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0128",
+			"editorAnimation" : "AVA0128",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "pandoraBox",
+		"x" : 4,
+		"y" : 66
+	},
+	"sign_179" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 66,
+		"options" : {
+			"text" : "Pandora box: default"
+		}
+	},
+	"sign_180" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 68,
+		"options" : {
+			"text" : "Pandora box: message \"giveexp\", creatures: slot 5 - 5 pixies, take mana points -555"
+		}
+	},
+	"pandoraBox_181" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0128",
+			"editorAnimation" : "AVA0128",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "pandoraBox",
+		"x" : 4,
+		"y" : 68,
+		"options" : {
+			"guardMessage" : "giveexp",
+			"guards" : [
+				{},
+				{},
+				{},
+				{},
+				{
+					"amount" : 5,
+					"type" : "pixie"
+				},
+				{},
+				{}
+			],
+			"mana" : -555
+		}
+	},
+	"sign_182" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 70,
+		"options" : {
+			"text" : "Pandora box: 1000exp, give 100 mana points, +3 morale, +2 luck, resource + 9,8,7,6,5,4, primary skills +9,8,7,6"
+		}
+	},
+	"pandoraBox_183" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0128",
+			"editorAnimation" : "AVA0128",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "pandoraBox",
+		"x" : 4,
+		"y" : 70,
+		"options" : {
+			"experience" : 1000,
+			"luck" : 2,
+			"mana" : 100,
+			"morale" : 3,
+			"primarySkills" : {
+				"attack" : 9,
+				"defence" : 8,
+				"knowledge" : 6,
+				"spellpower" : 7
+			},
+			"resources" : {
+				"crystal" : 6,
+				"gems" : 5,
+				"gold" : 4,
+				"mercury" : 9,
+				"ore" : 8,
+				"sulfur" : 7,
+				"wood" : 10
+			}
+		}
+	},
+	"sign_184" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 72,
+		"options" : {
+			"text" : "Pandora box: secondar skills: expert pathfinding, advanced wisdom, basic necromancy, expert armorer"
+		}
+	},
+	"pandoraBox_185" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0128",
+			"editorAnimation" : "AVA0128",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "pandoraBox",
+		"x" : 4,
+		"y" : 72,
+		"options" : {
+			"secondarySkills" : {
+				"pathfinding" : "expert",
+				"wisdom" : "advanced",
+				"necromancy" : "basic",
+				"armorer" : "expert"
+			}
+		}
+	},
+	"sign_186" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 74,
+		"options" : {
+			"text" : "Pandora box: artifacts: angel winge, helm of chaos, wizards well, spells: armageddon, water elemental; creatures: 111 crusader, 100 rogues"
+		}
+	},
+	"pandoraBox_187" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0128",
+			"editorAnimation" : "AVA0128",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "pandoraBox",
+		"x" : 4,
+		"y" : 74,
+		"options" : {
+			"artifacts" : [
+				"angelWings",
+				"helmOfChaos",
+				"wizardsWell"
+			],
+			"creatures" : [
+				{
+					"amount" : 111,
+					"type" : "crusader"
+				},
+				{
+					"amount" : 100,
+					"type" : "rogue"
+				}
+			],
+			"spells" : [
+				"armageddon",
+				"waterElemental"
+			]
+		}
+	},
+	"town_188" : {
+		"l" : 0,
+		"subtype" : "castle",
+		"template" : {
+			"animation" : "AVCCASX0",
+			"editorAnimation" : "AVCCASX0",
+			"mask" : [
+				"VVVVVV",
+				"VVVVVV",
+				"VVVVVV",
+				"VVBBBV",
+				"VBBBBB",
+				"VBBABB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "town",
+		"x" : 26,
+		"y" : 14,
+		"options" : {
+			"army" : [
+				{
+					"amount" : 7,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 6,
+					"type" : "archer"
+				},
+				{
+					"amount" : 5,
+					"type" : "griffin"
+				},
+				{
+					"amount" : 4,
+					"type" : "swordsman"
+				},
+				{
+					"amount" : 3,
+					"type" : "monk"
+				},
+				{
+					"amount" : 2,
+					"type" : "cavalier"
+				},
+				{
+					"amount" : 1,
+					"type" : "angel"
+				}
+			],
+			"buildings" : {},
+			"hasFort" : false,
+			"spells" : {},
+			"tightFormation" : true
+		}
+	},
+	"sign_189" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 14,
+		"options" : {
+			"text" : "Don't owned by anyone, dont have fort, non-upgraded creatures: 7,6,5,4,3,2,1"
+		}
+	},
+	"randomTown_190" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVCRANX0",
+			"editorAnimation" : "AVCRANX0",
+			"mask" : [
+				"VVVVVV",
+				"VVVVVV",
+				"VVVVVV",
+				"VVBBBV",
+				"VBBBBB",
+				"VBBABB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomTown",
+		"x" : 26,
+		"y" : 21,
+		"options" : {
+			"buildings" : {
+				"allOf" : [
+					"blacksmith",
+					"capitol",
+					"castle",
+					"citadel",
+					"cityHall",
+					"dwellingLvl1",
+					"dwellingLvl2",
+					"dwellingLvl3",
+					"dwellingLvl4",
+					"dwellingLvl5",
+					"dwellingLvl6",
+					"dwellingLvl7",
+					"dwellingUpLvl1",
+					"dwellingUpLvl2",
+					"dwellingUpLvl3",
+					"dwellingUpLvl4",
+					"dwellingUpLvl5",
+					"dwellingUpLvl6",
+					"dwellingUpLvl7",
+					"fort",
+					"grail",
+					"horde1",
+					"horde2",
+					"horde3",
+					"horde4",
+					"horde5",
+					"mageGuild1",
+					"mageGuild2",
+					"mageGuild3",
+					"mageGuild4",
+					"mageGuild5",
+					"marketplace",
+					"resourceSilo",
+					"shipyard",
+					"tavern",
+					"townHall"
+				]
+			},
+			"name" : "TownAsRed",
+			"spells" : {}
+		}
+	},
+	"sign_191" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 21,
+		"options" : {
+			"text" : "Same as red player, name \"TownAsRed\". everything built"
+		}
+	},
+	"randomTown_192" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVCRANX0",
+			"editorAnimation" : "AVCRANX0",
+			"mask" : [
+				"VVVVVV",
+				"VVVVVV",
+				"VVVVVV",
+				"VVBBBV",
+				"VBBBBB",
+				"VBBABB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomTown",
+		"x" : 26,
+		"y" : 27,
+		"options" : {
+			"buildings" : {},
+			"hasFort" : false,
+			"spells" : {}
+		}
+	},
+	"sign_193" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 27,
+		"options" : {
+			"text" : "Don't have fort, one timed evernt on day 3, every 3 days"
+		}
+	},
+	"randomTown_194" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVCRANX0",
+			"editorAnimation" : "AVCRANX0",
+			"mask" : [
+				"VVVVVV",
+				"VVVVVV",
+				"VVVVVV",
+				"VVBBBV",
+				"VBBBBB",
+				"VBBABB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomTown",
+		"x" : 26,
+		"y" : 32,
+		"options" : {
+			"buildings" : {
+				"allOf" : [
+					"grail"
+				],
+				"noneOf" : [
+					"blacksmith",
+					"dwellingLvl1",
+					"dwellingLvl2",
+					"dwellingLvl3",
+					"dwellingLvl4",
+					"dwellingLvl5",
+					"dwellingLvl6",
+					"dwellingLvl7",
+					"fort",
+					"mageGuild1",
+					"marketplace",
+					"shipyard",
+					"tavern",
+					"townHall"
+				]
+			},
+			"spells" : {}
+		}
+	},
+	"sign_195" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 32,
+		"options" : {
+			"text" : "Don't have fort, all buildings blocked, grail built"
+		}
+	},
+	"seerHut_196" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 4,
+		"y" : 83,
+		"options" : {
+			"quest" : {},
+			"reward" : {}
+		}
+	},
+	"sign_197" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 83,
+		"options" : {
+			"text" : "Default quest objects: empty"
+		}
+	},
+	"sign_198" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 86,
+		"options" : {
+			"text" : "Require red player, deadline 1 month, reward 999 diamond golems, messages: text1one, text2two, text3three"
+		}
+	},
+	"seerHut_199" : {
+		"l" : 0,
+		"subtype" : "0",
+		"template" : {
+			"animation" : "AVXSEER0",
+			"editorAnimation" : "AVXSEER0",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 6,
+		"y" : 83,
+		"options" : {
+			"quest" : {},
+			"reward" : {}
+		}
+	},
+	"seerHut_200" : {
+		"l" : 0,
+		"subtype" : "1",
+		"template" : {
+			"animation" : "AVXSEEY0",
+			"editorAnimation" : "AVXSEEY0",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 8,
+		"y" : 83,
+		"options" : {
+			"quest" : {},
+			"reward" : {}
+		}
+	},
+	"seerHut_201" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 4,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"completedText" : "text3three",
+				"firstVisitText" : "text1one",
+				"missionType" : "Player",
+				"nextVisitText" : "text2two",
+				"player" : "red",
+				"timeLimit" : 28
+			},
+			"reward" : {
+				"creature.diamondGolem" : 999
+			}
+		}
+	},
+	"questGuard_202" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 19,
+		"y" : 83,
+		"options" : {
+			"quest" : {}
+		}
+	},
+	"questGuard_203" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 22,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"missionType" : "Resources",
+				"resources" : {
+					"crystal" : 5,
+					"gems" : 6,
+					"gold" : 7,
+					"mercury" : 2,
+					"ore" : 3,
+					"sulfur" : 4,
+					"wood" : 1
+				},
+				"timeLimit" : 56
+			}
+		}
+	},
+	"questGuard_204" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 25,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"completedText" : "testextthree",
+				"firstVisitText" : "testextone",
+				"missionType" : "PrimaryStat",
+				"nextVisitText" : "testexttwo",
+				"primarySkills" : {
+					"attack" : 5,
+					"defence" : 6,
+					"knowledge" : 8,
+					"spellpower" : 7
+				}
+			}
+		}
+	},
+	"questGuard_205" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 28,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"heroLevel" : 4,
+				"missionType" : "Level",
+				"timeLimit" : 4
+			}
+		}
+	},
+	"sign_206" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 18,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: empty default"
+		}
+	},
+	"sign_207" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: require 1,2,3,4,5,6,7 resources, deadline 3 months, "
+		}
+	},
+	"sign_208" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 24,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: require skill 5,6,7,8; Texts: testextone, testexttwo, testextthree"
+		}
+	},
+	"sign_209" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 27,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: require level 4, deadline 5 days"
+		}
+	},
+	"sign_210" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 30,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: defeat specific hero: Orrin"
+		}
+	},
+	"questGuard_211" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 31,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"killTarget" : "prison_266",
+				"missionType" : "KillHero"
+			}
+		}
+	},
+	"sign_212" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 33,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: defeat specific monster: Pikeman above"
+		}
+	},
+	"questGuard_213" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 34,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"killTarget" : "monster_214",
+				"missionType" : "KillCreature"
+			}
+		}
+	},
+	"monster_214" : {
+		"l" : 0,
+		"subtype" : "pikeman",
+		"template" : {
+			"animation" : "AVWPIKE",
+			"editorAnimation" : "AVWPIKE",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "monster",
+		"x" : 34,
+		"y" : 81,
+		"options" : {
+			"character" : "aggressive"
+		}
+	},
+	"sign_215" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 36,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: return with specific artifact: diplomat's ring"
+		}
+	},
+	"questGuard_216" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 37,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"artifacts" : [
+					"diplomatsRing"
+				],
+				"missionType" : "Artifact"
+			}
+		}
+	},
+	"sign_217" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 39,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: return with specific creature: 1 azure dragon"
+		}
+	},
+	"questGuard_218" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 40,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"creatures" : [
+					{
+						"amount" : 1,
+						"type" : "azureDragon"
+					}
+				],
+				"missionType" : "Army"
+			}
+		}
+	},
+	"sign_219" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 42,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: be specific hero: Wizard, Solmyr"
+		}
+	},
+	"questGuard_220" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 43,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"hero" : "solmyr",
+				"missionType" : "Hero"
+			}
+		}
+	},
+	"sign_221" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 42,
+		"y" : 85,
+		"options" : {
+			"text" : "Quest guard: belong to player: teal"
+		}
+	},
+	"questGuard_222" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 43,
+		"y" : 85,
+		"options" : {
+			"quest" : {
+				"missionType" : "Player",
+				"player" : "teal"
+			}
+		}
+	},
+	"randomMonster_223" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 89,
+		"options" : {
+			"character" : "aggressive"
+		}
+	},
+	"sign_224" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 89,
+		"options" : {
+			"text" : "monster template: default"
+		}
+	},
+	"sign_225" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 91,
+		"options" : {
+			"text" : "monster template: custom amount 543"
+		}
+	},
+	"randomMonster_226" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 91,
+		"options" : {
+			"amount" : 543,
+			"character" : "aggressive"
+		}
+	},
+	"sign_227" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 93,
+		"options" : {
+			"text" : "monster template: custom amount 432, don't grow, savage, never flees, message: savagemonster"
+		}
+	},
+	"sign_228" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 95,
+		"options" : {
+			"text" : "monster template: treasure resources: 1,2,3,4,5,6,7 and artifact: diplomat's ring"
+		}
+	},
+	"sign_229" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 97,
+		"options" : {
+			"text" : "monster template: treasure artifact: angel wings"
+		}
+	},
+	"sign_230" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 99,
+		"options" : {
+			"text" : "monster template: message: treasureresources; treature resources: wood 10, gold 1000"
+		}
+	},
+	"sign_231" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 101,
+		"options" : {
+			"text" : "monster template all non-default options: quanlity don't grow 1, complaint, never flees, msg test123, resource treasure: 7,6,5,4,3,2,1, art: spyglass"
+		}
+	},
+	"randomMonster_232" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 95,
+		"options" : {
+			"character" : "aggressive",
+			"rewardArtifact" : "diplomatsRing",
+			"rewardResources" : {
+				"crystal" : 5,
+				"gems" : 6,
+				"gold" : 7,
+				"mercury" : 2,
+				"ore" : 3,
+				"sulfur" : 4,
+				"wood" : 1
+			}
+		}
+	},
+	"randomMonster_233" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 97,
+		"options" : {
+			"character" : "aggressive",
+			"rewardArtifact" : "angelWings"
+		}
+	},
+	"randomMonster_234" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 99,
+		"options" : {
+			"character" : "aggressive",
+			"neverFlees" : true,
+			"rewardMessage" : "treasureresources",
+			"rewardResources" : {
+				"gold" : 1000,
+				"wood" : 10
+			}
+		}
+	},
+	"randomMonster_235" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 101,
+		"options" : {
+			"amount" : 1,
+			"character" : "compliant",
+			"neverFlees" : true,
+			"noGrowing" : true,
+			"rewardArtifact" : "spyglass",
+			"rewardMessage" : "test123",
+			"rewardResources" : {
+				"crystal" : 3,
+				"gems" : 2,
+				"gold" : 1,
+				"mercury" : 6,
+				"ore" : 5,
+				"sulfur" : 4,
+				"wood" : 7
+			}
+		}
+	},
+	"randomMonster_236" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 93,
+		"options" : {
+			"amount" : 432,
+			"character" : "savage",
+			"neverFlees" : true,
+			"noGrowing" : true,
+			"rewardMessage" : "savagemonster"
+		}
+	},
+	"sign_237" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 103,
+		"options" : {
+			"text" : "monster lvl 7 template: random quanlity don't grow, hostile, never flees"
+		}
+	},
+	"randomMonsterLevel7_238" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMON7",
+			"editorAnimation" : "AVWMON7",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonsterLevel7",
+		"x" : 3,
+		"y" : 103,
+		"options" : {
+			"character" : "hostile",
+			"neverFlees" : true,
+			"noGrowing" : true
+		}
+	},
+	"sign_239" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 5,
+		"y" : 86,
+		"options" : {
+			"text" : "Require achieve level 99; reward: 100 exp"
+		}
+	},
+	"seerHut_240" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 7,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"heroLevel" : 99,
+				"missionType" : "Level"
+			},
+			"reward" : {
+				"experience" : 100
+			}
+		}
+	},
+	"sign_241" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 8,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: achieve primary skills: 5,4,3,2; reward: 999 mana"
+		}
+	},
+	"seerHut_242" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 10,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"missionType" : "PrimaryStat",
+				"primarySkills" : {
+					"attack" : 5,
+					"defence" : 4,
+					"knowledge" : 2,
+					"spellpower" : 3
+				}
+			},
+			"reward" : {
+				"mana" : 999
+			}
+		}
+	},
+	"seerHut_243" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 13,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"killTarget" : "prison_263",
+				"missionType" : "KillHero"
+			},
+			"reward" : {
+				"morale" : 3
+			}
+		}
+	},
+	"sign_244" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 11,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: defeat specific hero: Valeska the Knight; reward: morale +3 "
+		}
+	},
+	"seerHut_245" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 16,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"killTarget" : "monster_214",
+				"missionType" : "KillCreature"
+			},
+			"reward" : {
+				"luck" : 2
+			}
+		}
+	},
+	"sign_246" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 14,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: defeat specific monster: Pikeman at quest guard; reward: luck +2"
+		}
+	},
+	"sign_247" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 17,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: return with artifacts: angel wings; reward: 99999 gold"
+		}
+	},
+	"seerHut_248" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 19,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"artifacts" : [
+					"angelWings"
+				],
+				"missionType" : "Artifact"
+			},
+			"reward" : {
+				"resource.gold" : 99999
+			}
+		}
+	},
+	"sign_249" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 20,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: creature 100 archers ; reward: 99 knowledge"
+		}
+	},
+	"sign_250" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 23,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: resources 10,20,30,40,50,60,70 ; reward: expert Necromancy"
+		}
+	},
+	"sign_251" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 29,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: belong to specific player Purple; reward: spell Fly"
+		}
+	},
+	"sign_252" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 26,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: be specific hero Catherine the Knight ; reward: artifact Angelic Alliance"
+		}
+	},
+	"sign_253" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 32,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: return with 8 artifacts: angel wings - bird of perception; reward: 777 cyclops knight"
+		}
+	},
+	"sign_254" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 35,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: return with 7 creatures: pikeman - marksman ; reward: none"
+		}
+	},
+	"seerHut_255" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 22,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"creatures" : [
+					{
+						"amount" : 100,
+						"type" : "archer"
+					}
+				],
+				"missionType" : "Army"
+			},
+			"reward" : {
+				"primarySkill.knowledge" : 99
+			}
+		}
+	},
+	"seerHut_256" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 25,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"missionType" : "Resources",
+				"resources" : {
+					"crystal" : 50,
+					"gems" : 60,
+					"gold" : 70,
+					"mercury" : 20,
+					"ore" : 30,
+					"sulfur" : 40,
+					"wood" : 10
+				}
+			},
+			"reward" : {
+				"secondarySkill.necromancy" : 3
+			}
+		}
+	},
+	"seerHut_257" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 28,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"hero" : "catherine",
+				"missionType" : "Hero"
+			},
+			"reward" : {
+				"artifact.angelicAlliance" : 1
+			}
+		}
+	},
+	"seerHut_258" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 31,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"missionType" : "Player",
+				"player" : "purple"
+			},
+			"reward" : {
+				"spell.fly" : 1
+			}
+		}
+	},
+	"seerHut_259" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 34,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"artifacts" : [
+					"armorOfWonder",
+					"badgeOfCourage",
+					"birdOfPerception",
+					"angelWings",
+					"armsOfLegion",
+					"armageddonsBlade",
+					"angelicAlliance",
+					"armorOfTheDamned"
+				],
+				"missionType" : "Artifact"
+			},
+			"reward" : {
+				"creature.cyclopKing" : 777
+			}
+		}
+	},
+	"seerHut_260" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 37,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"creatures" : [
+					{
+						"amount" : 1,
+						"type" : "pikeman"
+					},
+					{
+						"amount" : 1,
+						"type" : "halberdier"
+					},
+					{
+						"amount" : 1,
+						"type" : "archer"
+					},
+					{
+						"amount" : 1,
+						"type" : "marksman"
+					},
+					{
+						"amount" : 1,
+						"type" : "griffin"
+					},
+					{
+						"amount" : 1,
+						"type" : "royalGriffin"
+					},
+					{
+						"amount" : 1,
+						"type" : "swordsman"
+					}
+				],
+				"missionType" : "Army"
+			},
+			"reward" : {}
+		}
+	},
+	"sign_261" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 105,
+		"options" : {
+			"text" : "monster peasant: 777 don't grow, friendly, never flee, msg \"peasantmsg\", treasure resource: 99999 each, torso of legion"
+		}
+	},
+	"monster_262" : {
+		"l" : 0,
+		"subtype" : "peasant",
+		"template" : {
+			"animation" : "AVWPEAS",
+			"editorAnimation" : "AVWPEAS",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "monster",
+		"x" : 3,
+		"y" : 105,
+		"options" : {
+			"amount" : 777,
+			"character" : "friendly",
+			"neverFlees" : true,
+			"noGrowing" : true,
+			"rewardArtifact" : "torsoOfLegion",
+			"rewardMessage" : "peasantmsg",
+			"rewardResources" : {
+				"crystal" : 99999,
+				"gems" : 99999,
+				"gold" : 99999,
+				"mercury" : 99999,
+				"ore" : 99999,
+				"sulfur" : 99999,
+				"wood" : 99999
+			}
+		}
+	},
+	"prison_263" : {
+		"l" : 0,
+		"subtype" : "prison",
+		"template" : {
+			"animation" : "AVXPRSN0",
+			"editorAnimation" : "AVXPRSN0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "prison",
+		"x" : 33,
+		"y" : 13,
+		"options" : {
+			"type" : "valeska"
+		}
+	},
+	"sign_264" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 31,
+		"y" : 13,
+		"options" : {
+			"text" : "default options"
+		}
+	},
+	"prison_265" : {
+		"l" : 0,
+		"subtype" : "prison",
+		"template" : {
+			"animation" : "AVXPRSN0",
+			"editorAnimation" : "AVXPRSN0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "prison",
+		"x" : 33,
+		"y" : 16,
+		"options" : {
+			"experience" : 99999999,
+			"name" : "Anul",
+			"patrolRadius" : 9,
+			"portrait" : "orrin",
+			"type" : "luna",
+			"female" : false
+		}
+	},
+	"prison_266" : {
+		"l" : 0,
+		"subtype" : "prison",
+		"template" : {
+			"animation" : "AVXPRSN0",
+			"editorAnimation" : "AVXPRSN0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "prison",
+		"x" : 33,
+		"y" : 19,
+		"options" : {
+			"secondarySkills" : {
+				"artillery" : "advanced",
+				"learning" : "expert",
+				"offence" : "basic",
+				"armorer" : "advanced",
+				"intelligence" : "expert",
+				"sorcery" : "basic",
+				"resistance" : "advanced",
+				"firstAid" : "expert"
+			},
+			"type" : "orrin"
+		}
+	},
+	"prison_267" : {
+		"l" : 0,
+		"subtype" : "prison",
+		"template" : {
+			"animation" : "AVXPRSN0",
+			"editorAnimation" : "AVXPRSN0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "prison",
+		"x" : 33,
+		"y" : 22,
+		"options" : {
+			"artifacts" : {
+				"head" : "admiralsHat",
+				"leftHand" : "shieldOfTheDamned",
+				"rightHand" : "armageddonsBlade",
+				"shoulders" : "angelWings",
+				"spellbook" : "spellBook",
+				"torso" : "armorOfWonder"
+			},
+			"type" : "edric"
+		}
+	},
+	"prison_268" : {
+		"l" : 0,
+		"subtype" : "prison",
+		"template" : {
+			"animation" : "AVXPRSN0",
+			"editorAnimation" : "AVXPRSN0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "prison",
+		"x" : 33,
+		"y" : 25,
+		"options" : {
+			"spellBook" : [
+				"summonBoat",
+				"scuttleBoat",
+				"visions",
+				"viewEarth",
+				"disguise",
+				"viewAir",
+				"fly",
+				"waterWalk",
+				"dimensionDoor",
+				"townPortal",
+				"quicksand",
+				"landMine",
+				"forceField",
+				"fireWall",
+				"earthquake",
+				"magicArrow",
+				"iceBolt",
+				"lightningBolt",
+				"implosion",
+				"chainLightning",
+				"frostRing",
+				"fireball",
+				"inferno",
+				"meteorShower",
+				"deathRipple",
+				"destroyUndead",
+				"armageddon",
+				"shield",
+				"airShield",
+				"fireShield",
+				"protectAir",
+				"protectFire",
+				"protectWater",
+				"protectEarth",
+				"antiMagic",
+				"dispel",
+				"magicMirror",
+				"cure",
+				"resurrection",
+				"animateDead",
+				"sacrifice",
+				"bless",
+				"curse",
+				"bloodlust",
+				"precision",
+				"weakness",
+				"stoneSkin",
+				"disruptingRay",
+				"prayer",
+				"mirth",
+				"sorrow",
+				"fortune",
+				"misfortune",
+				"haste",
+				"slow",
+				"slayer",
+				"frenzy",
+				"counterstrike",
+				"berserk",
+				"hypnotize",
+				"forgetfulness",
+				"blind",
+				"teleport",
+				"removeObstacle",
+				"clone",
+				"fireElemental",
+				"earthElemental",
+				"waterElemental",
+				"airElemental"
+			],
+			"type" : "sorsha"
+		}
+	},
+	"sign_269" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 31,
+		"y" : 16,
+		"options" : {
+			"text" : "Elementalist, Luna, Anul, 99999999 exp, Orrin avatar, male, patrol 9 squares"
+		}
+	},
+	"sign_270" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 31,
+		"y" : 19,
+		"options" : {
+			"text" : "secondary skills from end of list: Expert (first aid),  Advanced, Basic (Offence), Expert, Advanced, Basic, Expert, Advanced"
+		}
+	},
+	"sign_271" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 31,
+		"y" : 22,
+		"options" : {
+			"text" : "Arts: have spellbook, head: Admirals hat, shoulders: angel wings, right hand: armagedons blade; left hand: shield of damned; torso: armor of wonder"
+		}
+	},
+	"sign_272" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 31,
+		"y" : 25,
+		"options" : {
+			"text" : "have all spells"
+		}
+	}
+}

+ 7389 - 0
test/testdata/ObjectPropertyTest/objects.json

@@ -0,0 +1,7389 @@
+{
+	"mine_0" : {
+		"l" : 0,
+		"subtype" : "alchemistLab",
+		"template" : {
+			"animation" : "AVMALCH0",
+			"editorAnimation" : "AVMALCH0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"BAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 10,
+		"y" : 1,
+		"options" : {
+			"owner" : "red"
+		}
+	},
+	"mine_1" : {
+		"l" : 0,
+		"subtype" : "crystalCavern",
+		"template" : {
+			"animation" : "AVMCRDR0",
+			"editorAnimation" : "AVMCRDR0",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 14,
+		"y" : 1,
+		"options" : {
+			"owner" : "blue"
+		}
+	},
+	"mine_2" : {
+		"l" : 0,
+		"subtype" : "gemPond",
+		"template" : {
+			"animation" : "AVMGEDR0",
+			"editorAnimation" : "AVMGEDR0",
+			"mask" : [
+				"BBB",
+				"BAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			],
+			"zIndex" : 100
+		},
+		"type" : "mine",
+		"x" : 18,
+		"y" : 1,
+		"options" : {
+			"owner" : "tan"
+		}
+	},
+	"mine_3" : {
+		"l" : 0,
+		"subtype" : "goldMine",
+		"template" : {
+			"animation" : "AVMGODR0",
+			"editorAnimation" : "AVMGODR0",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 22,
+		"y" : 1,
+		"options" : {
+			"owner" : "green"
+		}
+	},
+	"mine_4" : {
+		"l" : 0,
+		"subtype" : "orePit",
+		"template" : {
+			"animation" : "AVMORDR0",
+			"editorAnimation" : "AVMORDR0",
+			"mask" : [
+				"BBB",
+				"BAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			],
+			"zIndex" : 100
+		},
+		"type" : "mine",
+		"x" : 26,
+		"y" : 1,
+		"options" : {
+			"owner" : "orange"
+		}
+	},
+	"mine_5" : {
+		"l" : 0,
+		"subtype" : "sawmill",
+		"template" : {
+			"animation" : "AVMSAWD0",
+			"editorAnimation" : "AVMSAWD0",
+			"mask" : [
+				"VVVVV",
+				"VVVBB",
+				"VBBAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 31,
+		"y" : 1,
+		"options" : {
+			"owner" : "purple"
+		}
+	},
+	"mine_6" : {
+		"l" : 0,
+		"subtype" : "sulfurDune",
+		"template" : {
+			"animation" : "AVMSULF0",
+			"editorAnimation" : "AVMSULF0",
+			"mask" : [
+				"VVV",
+				"BAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 35,
+		"y" : 1,
+		"options" : {
+			"owner" : "teal"
+		}
+	},
+	"mine_7" : {
+		"l" : 0,
+		"subtype" : "abandoned",
+		"template" : {
+			"animation" : "AVXABND0",
+			"editorAnimation" : "AVXABND0",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 39,
+		"y" : 1,
+		"options" : {
+			"possibleResources" : [
+				"mercury",
+				"ore",
+				"sulfur",
+				"crystal",
+				"gems",
+				"gold"
+			]
+		}
+	},
+	"mine_8" : {
+		"l" : 0,
+		"subtype" : "abandoned",
+		"template" : {
+			"animation" : "AVXABND0",
+			"editorAnimation" : "AVXABND0",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "mine",
+		"x" : 43,
+		"y" : 1,
+		"options" : {
+			"possibleResources" : [
+				"mercury"
+			]
+		}
+	},
+	"sign_9" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 4,
+		"y" : 1
+	},
+	"sign_10" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 6,
+		"y" : 1,
+		"options" : {
+			"text" : "Previus one have random sign"
+		}
+	},
+	"oceanBottle_11" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBTTL0",
+			"editorAnimation" : "AVXBTTL0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "oceanBottle",
+		"x" : 81,
+		"y" : 5
+	},
+	"oceanBottle_12" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBTTL0",
+			"editorAnimation" : "AVXBTTL0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "oceanBottle",
+		"x" : 83,
+		"y" : 5,
+		"options" : {
+			"text" : "Other one have random text"
+		}
+	},
+	"boat_13" : {
+		"l" : 0,
+		"subtype" : "evil",
+		"template" : {
+			"animation" : "AVXBOAT0",
+			"editorAnimation" : "AVXBOAT0",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "boat",
+		"x" : 80,
+		"y" : 5
+	},
+	"creatureGeneratorCommon_14" : {
+		"l" : 0,
+		"subtype" : "guardhouse",
+		"template" : {
+			"animation" : "AVGPIKE0",
+			"editorAnimation" : "AVGPIKE0",
+			"mask" : [
+				"VVV",
+				"VBV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "creatureGeneratorCommon",
+		"x" : 5,
+		"y" : 8
+	},
+	"creatureGeneratorCommon_15" : {
+		"l" : 0,
+		"subtype" : "archersTower",
+		"template" : {
+			"animation" : "AVGCROS0",
+			"editorAnimation" : "AVGCROS0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "creatureGeneratorCommon",
+		"x" : 9,
+		"y" : 8,
+		"options" : {
+			"owner" : "red"
+		}
+	},
+	"creatureGeneratorCommon_16" : {
+		"l" : 0,
+		"subtype" : "griffinTower",
+		"template" : {
+			"animation" : "AVGGRFF0",
+			"editorAnimation" : "AVGGRFF0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "creatureGeneratorCommon",
+		"x" : 13,
+		"y" : 8,
+		"options" : {
+			"owner" : "tan"
+		}
+	},
+	"witchHut_17" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVSWTCH0",
+			"editorAnimation" : "AVSWTCH0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "witchHut",
+		"x" : 17,
+		"y" : 8,
+		"options" : {
+			"allowedSkills" : {
+				"anyOf" : [
+					"airMagic"
+				]
+			}
+		}
+	},
+	"witchHut_18" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVSWTCH0",
+			"editorAnimation" : "AVSWTCH0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "witchHut",
+		"x" : 20,
+		"y" : 8,
+		"options" : {
+			"allowedSkills" : {
+				"anyOf" : [
+					"airMagic",
+					"archery",
+					"armorer",
+					"artillery"
+				]
+			}
+		}
+	},
+	"witchHut_19" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVSWTCH0",
+			"editorAnimation" : "AVSWTCH0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "witchHut",
+		"x" : 23,
+		"y" : 8,
+		"options" : {
+			"allowedSkills" : {
+				"anyOf" : [
+					"airMagic",
+					"archery",
+					"armorer",
+					"artillery",
+					"ballistics",
+					"diplomacy",
+					"eagleEye",
+					"earthMagic",
+					"estates",
+					"fireMagic",
+					"firstAid",
+					"intelligence",
+					"learning",
+					"logistics",
+					"luck",
+					"mysticism",
+					"navigation",
+					"offence",
+					"pathfinding",
+					"resistance",
+					"scholar",
+					"scouting",
+					"sorcery",
+					"tactics",
+					"waterMagic",
+					"wisdom"
+				]
+			}
+		}
+	},
+	"randomDwelling_20" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 5,
+		"y" : 12,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"conflux",
+					"dungeon",
+					"fortress",
+					"inferno",
+					"necropolis",
+					"rampart",
+					"stronghold",
+					"tower"
+				]
+			},
+			"maxLevel" : 6
+		}
+	},
+	"sign_21" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 15,
+		"y" : 8,
+		"options" : {
+			"text" : "Air Magic"
+		}
+	},
+	"sign_22" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 18,
+		"y" : 8,
+		"options" : {
+			"text" : "Air Magic, Archery, Armorer,Artillery"
+		}
+	},
+	"sign_23" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 8,
+		"options" : {
+			"text" : "Any random skill exclude necromancy (default)"
+		}
+	},
+	"sign_24" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 8,
+		"options" : {
+			"text" : "Not owned by anyone"
+		}
+	},
+	"sign_25" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 7,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by red player"
+		}
+	},
+	"sign_26" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 11,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by tan player"
+		}
+	},
+	"sign_27" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 12,
+		"options" : {
+			"text" : "Default: not owned by anyone, level 1-7, all alignments"
+		}
+	},
+	"sign_28" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 15,
+		"options" : {
+			"text" : "Owned by red, level 6-7, castle, dungeon or fortress"
+		}
+	},
+	"randomDwelling_29" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 5,
+		"y" : 15,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"dungeon",
+					"fortress"
+				]
+			},
+			"maxLevel" : 6,
+			"minLevel" : 5,
+			"owner" : "red"
+		}
+	},
+	"randomDwelling_30" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 7,
+		"y" : 12,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"conflux",
+					"dungeon",
+					"fortress",
+					"inferno",
+					"necropolis",
+					"rampart",
+					"stronghold",
+					"tower"
+				]
+			},
+			"maxLevel" : 6
+		}
+	},
+	"randomDwelling_31" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 9,
+		"y" : 12,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"conflux",
+					"dungeon",
+					"fortress",
+					"inferno",
+					"necropolis",
+					"rampart",
+					"stronghold",
+					"tower"
+				]
+			},
+			"maxLevel" : 6
+		}
+	},
+	"randomDwelling_32" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 11,
+		"y" : 12,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"conflux",
+					"dungeon",
+					"fortress",
+					"inferno",
+					"necropolis",
+					"rampart",
+					"stronghold",
+					"tower"
+				]
+			},
+			"maxLevel" : 6
+		}
+	},
+	"randomDwelling_33" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 13,
+		"y" : 12,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"conflux",
+					"dungeon",
+					"fortress",
+					"inferno",
+					"necropolis",
+					"rampart",
+					"stronghold",
+					"tower"
+				]
+			},
+			"maxLevel" : 6
+		}
+	},
+	"randomDwelling_34" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 7,
+		"y" : 15,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"dungeon",
+					"fortress"
+				]
+			},
+			"maxLevel" : 6,
+			"minLevel" : 5,
+			"owner" : "red"
+		}
+	},
+	"randomDwelling_35" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 9,
+		"y" : 15,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"dungeon",
+					"fortress"
+				]
+			},
+			"maxLevel" : 6,
+			"minLevel" : 5,
+			"owner" : "red"
+		}
+	},
+	"randomDwelling_36" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 11,
+		"y" : 15,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"dungeon",
+					"fortress"
+				]
+			},
+			"maxLevel" : 6,
+			"minLevel" : 5,
+			"owner" : "red"
+		}
+	},
+	"randomDwelling_37" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVRCGEN0",
+			"editorAnimation" : "AVRCGEN0",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwelling",
+		"x" : 13,
+		"y" : 15,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"castle",
+					"dungeon",
+					"fortress"
+				]
+			},
+			"maxLevel" : 6,
+			"minLevel" : 5,
+			"owner" : "red"
+		}
+	},
+	"sign_38" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 18,
+		"options" : {
+			"text" : "Level 1 template! Owned by tan, rampart of conflux"
+		}
+	},
+	"randomDwellingLvl_39" : {
+		"l" : 0,
+		"subtype" : "objectLvl1",
+		"template" : {
+			"animation" : "AVRCGEN1",
+			"editorAnimation" : "AVRCGEN1",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingLvl",
+		"x" : 5,
+		"y" : 18,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"conflux",
+					"rampart"
+				]
+			},
+			"owner" : "tan"
+		}
+	},
+	"randomDwellingLvl_40" : {
+		"l" : 0,
+		"subtype" : "objectLvl1",
+		"template" : {
+			"animation" : "AVRCGEN1",
+			"editorAnimation" : "AVRCGEN1",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingLvl",
+		"x" : 7,
+		"y" : 18,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"conflux",
+					"rampart"
+				]
+			},
+			"owner" : "tan"
+		}
+	},
+	"randomDwellingLvl_41" : {
+		"l" : 0,
+		"subtype" : "objectLvl1",
+		"template" : {
+			"animation" : "AVRCGEN1",
+			"editorAnimation" : "AVRCGEN1",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingLvl",
+		"x" : 9,
+		"y" : 18,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"conflux",
+					"rampart"
+				]
+			},
+			"owner" : "tan"
+		}
+	},
+	"randomDwellingLvl_42" : {
+		"l" : 0,
+		"subtype" : "objectLvl1",
+		"template" : {
+			"animation" : "AVRCGEN1",
+			"editorAnimation" : "AVRCGEN1",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingLvl",
+		"x" : 11,
+		"y" : 18,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"conflux",
+					"rampart"
+				]
+			},
+			"owner" : "tan"
+		}
+	},
+	"randomDwellingLvl_43" : {
+		"l" : 0,
+		"subtype" : "objectLvl1",
+		"template" : {
+			"animation" : "AVRCGEN1",
+			"editorAnimation" : "AVRCGEN1",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingLvl",
+		"x" : 13,
+		"y" : 18,
+		"options" : {
+			"allowedFactions" : {
+				"anyOf" : [
+					"conflux",
+					"rampart"
+				]
+			},
+			"owner" : "tan"
+		}
+	},
+	"randomDwellingFaction_44" : {
+		"l" : 0,
+		"subtype" : "objectConflux",
+		"template" : {
+			"animation" : "AVRCGN08",
+			"editorAnimation" : "AVRCGN08",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingFaction",
+		"x" : 5,
+		"y" : 22,
+		"options" : {
+			"maxLevel" : 5,
+			"minLevel" : 2,
+			"owner" : "teal"
+		}
+	},
+	"sign_45" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 22,
+		"options" : {
+			"text" : "Conflux template! Owned by teal, level 3-6"
+		}
+	},
+	"randomDwellingFaction_46" : {
+		"l" : 0,
+		"subtype" : "objectConflux",
+		"template" : {
+			"animation" : "AVRCGN08",
+			"editorAnimation" : "AVRCGN08",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingFaction",
+		"x" : 7,
+		"y" : 22,
+		"options" : {
+			"maxLevel" : 5,
+			"minLevel" : 2,
+			"owner" : "teal"
+		}
+	},
+	"randomDwellingFaction_47" : {
+		"l" : 0,
+		"subtype" : "objectConflux",
+		"template" : {
+			"animation" : "AVRCGN08",
+			"editorAnimation" : "AVRCGN08",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingFaction",
+		"x" : 9,
+		"y" : 22,
+		"options" : {
+			"maxLevel" : 5,
+			"minLevel" : 2,
+			"owner" : "teal"
+		}
+	},
+	"randomDwellingFaction_48" : {
+		"l" : 0,
+		"subtype" : "objectConflux",
+		"template" : {
+			"animation" : "AVRCGN08",
+			"editorAnimation" : "AVRCGN08",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingFaction",
+		"x" : 11,
+		"y" : 22,
+		"options" : {
+			"maxLevel" : 5,
+			"minLevel" : 2,
+			"owner" : "teal"
+		}
+	},
+	"randomDwellingFaction_49" : {
+		"l" : 0,
+		"subtype" : "objectConflux",
+		"template" : {
+			"animation" : "AVRCGN08",
+			"editorAnimation" : "AVRCGN08",
+			"mask" : [
+				"VVV",
+				"VBB",
+				"VAA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomDwellingFaction",
+		"x" : 13,
+		"y" : 22,
+		"options" : {
+			"maxLevel" : 5,
+			"minLevel" : 2,
+			"owner" : "teal"
+		}
+	},
+	"shrineOfMagicLevel1_50" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL1SH0",
+			"editorAnimation" : "AVXL1SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel1",
+		"x" : 25,
+		"y" : 8
+	},
+	"sign_51" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 24,
+		"y" : 8,
+		"options" : {
+			"text" : "Random level 1 spell"
+		}
+	},
+	"shrineOfMagicLevel1_52" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL1SH0",
+			"editorAnimation" : "AVXL1SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel1",
+		"x" : 28,
+		"y" : 8,
+		"options" : {
+			"spell" : "haste"
+		}
+	},
+	"sign_53" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 27,
+		"y" : 8,
+		"options" : {
+			"text" : "Level 1 spell: Haste "
+		}
+	},
+	"shrineOfMagicLevel2_54" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL2SH0",
+			"editorAnimation" : "AVXL2SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel2",
+		"x" : 31,
+		"y" : 8
+	},
+	"sign_55" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 30,
+		"y" : 8,
+		"options" : {
+			"text" : "Random level 2 spell"
+		}
+	},
+	"sign_56" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 33,
+		"y" : 8,
+		"options" : {
+			"text" : "Level 2 spell: Quicksand"
+		}
+	},
+	"shrineOfMagicLevel2_57" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL2SH0",
+			"editorAnimation" : "AVXL2SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel2",
+		"x" : 34,
+		"y" : 8,
+		"options" : {
+			"spell" : "quicksand"
+		}
+	},
+	"shrineOfMagicLevel3_58" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL3SH0",
+			"editorAnimation" : "AVXL3SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel3",
+		"x" : 37,
+		"y" : 8
+	},
+	"shrineOfMagicLevel3_59" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXL3SH0",
+			"editorAnimation" : "AVXL3SH0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shrineOfMagicLevel3",
+		"x" : 40,
+		"y" : 8,
+		"options" : {
+			"spell" : "teleport"
+		}
+	},
+	"sign_60" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 36,
+		"y" : 8,
+		"options" : {
+			"text" : "Random level 3 spell"
+		}
+	},
+	"sign_61" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 39,
+		"y" : 8,
+		"options" : {
+			"text" : "Level 3 spell: teleport"
+		}
+	},
+	"lighthouse_62" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXLTHS0",
+			"editorAnimation" : "AVXLTHS0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VVV",
+				"VVA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "lighthouse",
+		"x" : 43,
+		"y" : 8,
+		"options" : {
+			"owner" : "green"
+		}
+	},
+	"sign_63" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 42,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by green player"
+		}
+	},
+	"garrisonHorizontal_64" : {
+		"l" : 0,
+		"subtype" : "normal",
+		"template" : {
+			"animation" : "AVCGAR10",
+			"editorAnimation" : "AVCGAR10",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "garrisonHorizontal",
+		"x" : 48,
+		"y" : 8,
+		"options" : {
+			"owner" : "blue",
+			"removableUnits" : true
+		}
+	},
+	"sign_65" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 45,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by blue player and troops are removable (default)"
+		}
+	},
+	"garrisonHorizontal_66" : {
+		"l" : 0,
+		"subtype" : "normal",
+		"template" : {
+			"animation" : "AVCGAR10",
+			"editorAnimation" : "AVCGAR10",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "garrisonHorizontal",
+		"x" : 53,
+		"y" : 8,
+		"options" : {
+			"owner" : "blue"
+		}
+	},
+	"sign_67" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 50,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by blue player and troops are NOT removable"
+		}
+	},
+	"garrisonHorizontal_68" : {
+		"l" : 0,
+		"subtype" : "antiMagic",
+		"template" : {
+			"animation" : "AVCGAR20",
+			"editorAnimation" : "AVCGAR20",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "garrisonHorizontal",
+		"x" : 58,
+		"y" : 8,
+		"options" : {
+			"army" : [
+				{
+					"amount" : 100,
+					"type" : "enchanter"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 10,
+					"type" : "azureDragon"
+				},
+				{},
+				{}
+			],
+			"owner" : "red"
+		}
+	},
+	"sign_69" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 55,
+		"y" : 8,
+		"options" : {
+			"text" : "Owned by red player, troops are NOT removable and contain following troops: slot 1 - 100 enchanters, slot 5 - 10 azure dragons"
+		}
+	},
+	"garrisonHorizontal_70" : {
+		"l" : 0,
+		"subtype" : "antiMagic",
+		"template" : {
+			"animation" : "AVCGAR20",
+			"editorAnimation" : "AVCGAR20",
+			"mask" : [
+				"VVVV",
+				"VBAB"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "garrisonHorizontal",
+		"x" : 63,
+		"y" : 8,
+		"options" : {
+			"army" : [
+				{
+					"amount" : 11,
+					"type" : "gremlin"
+				},
+				{
+					"amount" : 12,
+					"type" : "masterGremlin"
+				},
+				{
+					"amount" : 13,
+					"type" : "stoneGargoyle"
+				},
+				{
+					"amount" : 14,
+					"type" : "obsidianGargoyle"
+				},
+				{
+					"amount" : 15,
+					"type" : "ironGolem"
+				},
+				{
+					"amount" : 16,
+					"type" : "stoneGolem"
+				},
+				{
+					"amount" : 17,
+					"type" : "mage"
+				}
+			]
+		}
+	},
+	"sign_71" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 60,
+		"y" : 8,
+		"options" : {
+			"text" : "NOT owned by anyone, troops are removable and contain following troops: slot 1 - 11 gremlins, slot 2 - 12 master gremlins, slot 3 - 13 stone garg, etc"
+		}
+	},
+	"scholar_72" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 66,
+		"y" : 8
+	},
+	"scholar_73" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 69,
+		"y" : 8,
+		"options" : {
+			"rewardPrimSkill" : "attack"
+		}
+	},
+	"scholar_74" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 72,
+		"y" : 8,
+		"options" : {
+			"rewardPrimSkill" : "defence"
+		}
+	},
+	"shipyard_75" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSHYD0",
+			"editorAnimation" : "AVXSHYD0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"BAB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "shipyard",
+		"x" : 81,
+		"y" : 12,
+		"options" : {
+			"owner" : "pink"
+		}
+	},
+	"sign_76" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 78,
+		"y" : 12,
+		"options" : {
+			"text" : "Owned by pink player"
+		}
+	},
+	"sign_77" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 65,
+		"y" : 8,
+		"options" : {
+			"text" : "Random reward"
+		}
+	},
+	"sign_78" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 68,
+		"y" : 8,
+		"options" : {
+			"text" : "Primary skill: attack"
+		}
+	},
+	"sign_79" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 71,
+		"y" : 8,
+		"options" : {
+			"text" : "Primary skill: defense"
+		}
+	},
+	"sign_80" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 74,
+		"y" : 8,
+		"options" : {
+			"text" : "Primary skill: spell power"
+		}
+	},
+	"sign_81" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 77,
+		"y" : 8,
+		"options" : {
+			"text" : "Primary skill: knowledge"
+		}
+	},
+	"scholar_82" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 75,
+		"y" : 8,
+		"options" : {
+			"rewardPrimSkill" : "spellpower"
+		}
+	},
+	"scholar_83" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 78,
+		"y" : 8,
+		"options" : {
+			"rewardPrimSkill" : "knowledge"
+		}
+	},
+	"scholar_84" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 66,
+		"y" : 10,
+		"options" : {
+			"rewardSkill" : "sorcery"
+		}
+	},
+	"sign_85" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 65,
+		"y" : 10,
+		"options" : {
+			"text" : "Secondary skill: sorcery"
+		}
+	},
+	"sign_86" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 68,
+		"y" : 10,
+		"options" : {
+			"text" : "Secondary skill: first aid"
+		}
+	},
+	"scholar_87" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 69,
+		"y" : 10,
+		"options" : {
+			"rewardSkill" : "firstAid"
+		}
+	},
+	"sign_88" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 71,
+		"y" : 10,
+		"options" : {
+			"text" : "Spell: stone skin"
+		}
+	},
+	"scholar_89" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 72,
+		"y" : 10,
+		"options" : {
+			"rewardSpell" : "stoneSkin"
+		}
+	},
+	"scholar_90" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSCHL0",
+			"editorAnimation" : "AVXSCHL0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "scholar",
+		"x" : 75,
+		"y" : 10,
+		"options" : {
+			"rewardSpell" : "fly"
+		}
+	},
+	"sign_91" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 74,
+		"y" : 10,
+		"options" : {
+			"text" : "Spell: fly"
+		}
+	},
+	"sign_92" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 59,
+		"y" : 20,
+		"options" : {
+			"text" : "EVENT TESTING ZONE"
+		}
+	},
+	"sign_93" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 61,
+		"y" : 18,
+		"options" : {
+			"text" : "Message: test. All players. Computer players can trigger"
+		}
+	},
+	"sign_94" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 65,
+		"y" : 18,
+		"options" : {
+			"text" : "Message: lol, computers CANT trigger, disappear after visit, players 1,3,5 creatures: archer, basilik, pegasus (1 of each)"
+		}
+	},
+	"sign_95" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 69,
+		"y" : 18,
+		"options" : {
+			"text" : "all non default: messagenondefault, players 1,8; allow comp trigger; don't cancel; guardians, pikeman, halberdman, etc; take -777 spell points"
+		}
+	},
+	"sign_96" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 73,
+		"y" : 18,
+		"options" : {
+			"text" : "All pos: 99 999 999 exp, 999 spell points, morale\/luck +3, res 9,8,7,6,5,4,3;pskills: 1,2,3,4; sskill: adv. offence; art: rib cage, sp: blind, 1 troll"
+		}
+	},
+	"event_97" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 62,
+		"y" : 18,
+		"options" : {
+			"aIActivable" : true,
+			"guardMessage" : "test",
+			"removeAfterVisit" : true
+		}
+	},
+	"event_98" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 66,
+		"y" : 18,
+		"options" : {
+			"availableFor" : [
+				"red",
+				"tan",
+				"orange"
+			],
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "archer"
+				},
+				{
+					"amount" : 1,
+					"type" : "basilisk"
+				},
+				{
+					"amount" : 1,
+					"type" : "pegasus"
+				},
+				{},
+				{},
+				{},
+				{}
+			],
+			"removeAfterVisit" : true
+		}
+	},
+	"event_99" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 74,
+		"y" : 18,
+		"options" : {
+			"artifacts" : [
+				"ribCage"
+			],
+			"creatures" : [
+				{
+					"amount" : 1,
+					"type" : "troll"
+				}
+			],
+			"experience" : 99999999,
+			"luck" : 3,
+			"mana" : 999,
+			"morale" : 3,
+			"primarySkills" : {
+				"attack" : 1,
+				"defence" : 2,
+				"knowledge" : 4,
+				"spellpower" : 3
+			},
+			"removeAfterVisit" : true,
+			"resources" : {
+				"crystal" : 5,
+				"gems" : 4,
+				"gold" : 3,
+				"mercury" : 8,
+				"ore" : 7,
+				"sulfur" : 6,
+				"wood" : 9
+			},
+			"secondarySkills" : {
+				"offence" : "advanced"
+			},
+			"spells" : [
+				"blind"
+			]
+		}
+	},
+	"event_100" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 70,
+		"y" : 18,
+		"options" : {
+			"aIActivable" : true,
+			"availableFor" : [
+				"red",
+				"pink"
+			],
+			"guardMessage" : "messagenondefault",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				}
+			],
+			"mana" : -777
+		}
+	},
+	"hero_101" : {
+		"l" : 0,
+		"subtype" : "cleric",
+		"template" : {
+			"animation" : "AH01_E",
+			"editorAnimation" : "AH01_E",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "hero",
+		"x" : 2,
+		"y" : 1,
+		"options" : {
+			"army" : [
+				{
+					"amount" : 1,
+					"type" : "crystalDragon"
+				},
+				{
+					"amount" : 1,
+					"type" : "fairieDragon"
+				},
+				{
+					"amount" : 1,
+					"type" : "rustDragon"
+				},
+				{
+					"amount" : 1,
+					"type" : "azureDragon"
+				},
+				{},
+				{},
+				{}
+			],
+			"artifacts" : {
+				"feet" : "bootsOfLevitation",
+				"spellbook" : "spellBook"
+			},
+			"biography" : "321",
+			"owner" : "red",
+			"primarySkills" : {
+				"attack" : 55,
+				"defence" : 44,
+				"knowledge" : 22,
+				"spellpower" : 33
+			},
+			"secondarySkills" : {
+				"wisdom" : "expert",
+				"sorcery" : "expert"
+			},
+			"spellBook" : [
+				"fly"
+			],
+			"tightFormation" : true,
+			"type" : "ingham"
+		}
+	},
+	"sign_102" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 0,
+		"y" : 1,
+		"options" : {
+			"text" : "Hero: Ingham, bio:321,prim skills:55,44,33,22,spells:fly,arts:spellbook,boots of levithation,creatures:4 dragons,grouped,s skills:wisdom,sorcery exper"
+		}
+	},
+	"randomHero_103" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 124,
+		"y" : 143,
+		"options" : {
+			"owner" : "tan"
+		}
+	},
+	"randomHero_104" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 119,
+		"y" : 143,
+		"options" : {
+			"owner" : "blue"
+		}
+	},
+	"randomHero_105" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 129,
+		"y" : 143,
+		"options" : {
+			"owner" : "green"
+		}
+	},
+	"randomHero_106" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 134,
+		"y" : 143,
+		"options" : {
+			"owner" : "orange"
+		}
+	},
+	"randomHero_107" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 139,
+		"y" : 143,
+		"options" : {
+			"owner" : "purple"
+		}
+	},
+	"randomHero_108" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 144,
+		"y" : 143,
+		"options" : {
+			"owner" : "teal"
+		}
+	},
+	"randomHero_109" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AHRANDOM",
+			"editorAnimation" : "AHRANDOM",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomHero",
+		"x" : 114,
+		"y" : 143,
+		"options" : {
+			"owner" : "pink"
+		}
+	},
+	"event_110" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 78,
+		"y" : 18,
+		"options" : {
+			"removeAfterVisit" : true
+		}
+	},
+	"event_111" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 82,
+		"y" : 18,
+		"options" : {
+			"artifacts" : [
+				"admiralsHat",
+				"ambassadorsSash",
+				"amuletOfTheUndertaker",
+				"angelFeatherArrows",
+				"angelWings",
+				"angelicAlliance",
+				"angelicAlliance",
+				"armageddonsBlade",
+				"armorOfTheDamned",
+				"armorOfWonder",
+				"badgeOfCourage",
+				"birdOfPerception",
+				"blackshardOfTheDeadKnight",
+				"bootsOfLevitation",
+				"bootsOfPolarity",
+				"bootsOfSpeed",
+				"bowOfElvenCherrywood",
+				"bowOfTheSharpshooter",
+				"bowstringOfTheUnicornsMane",
+				"breastplateOfBrimstone",
+				"breastplateOfPetrifiedWood",
+				"bucklerOfTheGnollKing",
+				"capeOfVelocity",
+				"cardsOfProphecy",
+				"celestialNecklaceOfBliss",
+				"centaurAxe",
+				"charmOfMana",
+				"cloakOfTheUndeadKing",
+				"cloverOfFortune",
+				"collarOfConjuring",
+				"cornucopia",
+				"crestOfValor",
+				"capeOfConjuring",
+				"crownOfDragontooth",
+				"crownOfTheSupremeMagi",
+				"deadMansBoots",
+				"diplomatsRing",
+				"dragonScaleArmor",
+				"dragonScaleShield",
+				"dragonWingTabard",
+				"dragonboneGreaves",
+				"elixirOfLife",
+				"emblemOfCognizance",
+				"endlessPurseOfGold",
+				"endlessSackOfGold",
+				"endlessBagOfGold",
+				"equestriansGloves",
+				"everflowingCrystalCloak",
+				"everpouringVialOfMercury",
+				"eversmokingRingOfSulfur",
+				"garnitureOfInterference",
+				"glyphOfGallantry",
+				"goldenBow",
+				"greaterGnollsFlail",
+				"headOfLegion",
+				"hellstormHelmet",
+				"hellstormHelmet",
+				"helmOfChaos",
+				"helmOfHeavenlyEnlightenment",
+				"helmOfTheAlabasterUnicorn",
+				"helmOfTheAlabasterUnicorn",
+				"hourglassOfTheEvilHour",
+				"inexhaustibleCartOfLumber",
+				"inexhaustibleCartOfOre"
+			],
+			"removeAfterVisit" : true
+		}
+	},
+	"event_112" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 86,
+		"y" : 18,
+		"options" : {
+			"removeAfterVisit" : true,
+			"spells" : [
+				"airElemental",
+				"airShield",
+				"animateDead",
+				"antiMagic",
+				"armageddon",
+				"berserk",
+				"bless",
+				"blind",
+				"bloodlust",
+				"chainLightning",
+				"clone",
+				"counterstrike",
+				"cure",
+				"curse",
+				"deathRipple",
+				"destroyUndead",
+				"dimensionDoor",
+				"disguise",
+				"dispel",
+				"disruptingRay",
+				"earthElemental",
+				"earthquake",
+				"fireElemental",
+				"fireShield",
+				"fireWall",
+				"fireball",
+				"fly",
+				"forceField",
+				"forgetfulness",
+				"fortune",
+				"frenzy",
+				"frostRing",
+				"haste",
+				"hypnotize",
+				"iceBolt",
+				"implosion",
+				"inferno",
+				"landMine",
+				"lightningBolt",
+				"magicArrow",
+				"magicMirror",
+				"meteorShower",
+				"mirth",
+				"misfortune",
+				"prayer",
+				"precision",
+				"protectEarth",
+				"protectWater",
+				"protectAir",
+				"protectFire",
+				"quicksand",
+				"removeObstacle",
+				"resurrection",
+				"sacrifice",
+				"scuttleBoat",
+				"shield",
+				"slayer",
+				"slow",
+				"sorrow",
+				"stoneSkin",
+				"summonBoat",
+				"teleport",
+				"townPortal",
+				"viewAir",
+				"viewEarth",
+				"visions",
+				"waterElemental",
+				"waterWalk",
+				"weakness"
+			]
+		}
+	},
+	"event_113" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 90,
+		"y" : 18,
+		"options" : {
+			"creatures" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				}
+			],
+			"removeAfterVisit" : true
+		}
+	},
+	"event_114" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVZEVNT0",
+			"editorAnimation" : "AVZEVNT0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "event",
+		"x" : 94,
+		"y" : 18,
+		"options" : {
+			"creatures" : [
+				{
+					"amount" : 9999,
+					"type" : "rustDragon"
+				},
+				{
+					"amount" : 9999,
+					"type" : "fairieDragon"
+				},
+				{
+					"amount" : 9999,
+					"type" : "crystalDragon"
+				},
+				{
+					"amount" : 9999,
+					"type" : "azureDragon"
+				},
+				{
+					"amount" : 9999,
+					"type" : "enchanter"
+				},
+				{
+					"amount" : 9999,
+					"type" : "diamondGolem"
+				},
+				{
+					"amount" : 9999,
+					"type" : "troll"
+				}
+			],
+			"removeAfterVisit" : true
+		}
+	},
+	"sign_115" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 77,
+		"y" : 18,
+		"options" : {
+			"text" : "give 30 wizard well's"
+		}
+	},
+	"sign_116" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 81,
+		"y" : 18,
+		"options" : {
+			"text" : "Give 64 first artifacts up to Inexhaustible card of Ore"
+		}
+	},
+	"sign_117" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 85,
+		"y" : 18,
+		"options" : {
+			"text" : "gives all possible spells"
+		}
+	},
+	"sign_118" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 89,
+		"y" : 18,
+		"options" : {
+			"text" : "Give 7 stacks of 1 pikeman"
+		}
+	},
+	"sign_119" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 93,
+		"y" : 18,
+		"options" : {
+			"text" : "Give 9999 of each last creature in list: Rust, Faerie, Azure, Crystal dragons, Enchanters, Diamond Golems, Trolls"
+		}
+	},
+	"sign_120" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 32,
+		"options" : {
+			"text" : "Resource template: default"
+		}
+	},
+	"randomResource_121" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 4,
+		"y" : 32
+	},
+	"randomResource_122" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 5,
+		"y" : 32
+	},
+	"randomResource_123" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 6,
+		"y" : 32
+	},
+	"randomResource_124" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 7,
+		"y" : 32
+	},
+	"randomResource_125" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 8,
+		"y" : 32
+	},
+	"sign_126" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 34,
+		"options" : {
+			"text" : "Resource template: amount 150"
+		}
+	},
+	"randomResource_127" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 4,
+		"y" : 34,
+		"options" : {
+			"amount" : 150
+		}
+	},
+	"randomResource_128" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 5,
+		"y" : 34,
+		"options" : {
+			"amount" : 150
+		}
+	},
+	"randomResource_129" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 6,
+		"y" : 34,
+		"options" : {
+			"amount" : 150
+		}
+	},
+	"randomResource_130" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 7,
+		"y" : 34,
+		"options" : {
+			"amount" : 150
+		}
+	},
+	"randomResource_131" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 8,
+		"y" : 34,
+		"options" : {
+			"amount" : 150
+		}
+	},
+	"sign_132" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 36,
+		"options" : {
+			"text" : "Resource template: amount 255, message:testresource, creatures: pikeman, halberdier, archer (slots and amount 1,2,3) and 15 fairie dragons (slot 7)"
+		}
+	},
+	"randomResource_133" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 4,
+		"y" : 36,
+		"options" : {
+			"amount" : 255,
+			"guardMessage" : "testresource",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 2,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 3,
+					"type" : "archer"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 15,
+					"type" : "fairieDragon"
+				}
+			]
+		}
+	},
+	"randomResource_134" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 5,
+		"y" : 36,
+		"options" : {
+			"amount" : 255,
+			"guardMessage" : "testresource",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 2,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 3,
+					"type" : "archer"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 15,
+					"type" : "fairieDragon"
+				}
+			]
+		}
+	},
+	"randomResource_135" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 6,
+		"y" : 36,
+		"options" : {
+			"amount" : 255,
+			"guardMessage" : "testresource",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 2,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 3,
+					"type" : "archer"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 15,
+					"type" : "fairieDragon"
+				}
+			]
+		}
+	},
+	"randomResource_136" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 7,
+		"y" : 36,
+		"options" : {
+			"amount" : 255,
+			"guardMessage" : "testresource",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 2,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 3,
+					"type" : "archer"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 15,
+					"type" : "fairieDragon"
+				}
+			]
+		}
+	},
+	"randomResource_137" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVTRNDM0",
+			"editorAnimation" : "AVTRNDM0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomResource",
+		"x" : 8,
+		"y" : 36,
+		"options" : {
+			"amount" : 255,
+			"guardMessage" : "testresource",
+			"guards" : [
+				{
+					"amount" : 1,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 2,
+					"type" : "halberdier"
+				},
+				{
+					"amount" : 3,
+					"type" : "archer"
+				},
+				{},
+				{},
+				{},
+				{
+					"amount" : 15,
+					"type" : "fairieDragon"
+				}
+			]
+		}
+	},
+	"resource_138" : {
+		"l" : 0,
+		"subtype" : "crystal",
+		"template" : {
+			"animation" : "AVTCRYS0",
+			"editorAnimation" : "AVTCRYS0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "resource",
+		"x" : 4,
+		"y" : 38
+	},
+	"sign_139" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 38,
+		"options" : {
+			"text" : "Resource crystal: default"
+		}
+	},
+	"sign_140" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 40,
+		"options" : {
+			"text" : "Resource crystal: default, amount 400"
+		}
+	},
+	"resource_141" : {
+		"l" : 0,
+		"subtype" : "crystal",
+		"template" : {
+			"animation" : "AVTCRYS0",
+			"editorAnimation" : "AVTCRYS0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "resource",
+		"x" : 4,
+		"y" : 40,
+		"options" : {
+			"amount" : 400
+		}
+	},
+	"sign_142" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 42,
+		"options" : {
+			"text" : "Resource crystal: default, amount 500, message: crystalalot"
+		}
+	},
+	"resource_143" : {
+		"l" : 0,
+		"subtype" : "crystal",
+		"template" : {
+			"animation" : "AVTCRYS0",
+			"editorAnimation" : "AVTCRYS0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "resource",
+		"x" : 4,
+		"y" : 42,
+		"options" : {
+			"amount" : 500,
+			"guardMessage" : "crystalalot"
+		}
+	},
+	"sign_144" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 44,
+		"options" : {
+			"text" : "Resource crystal: default, amount 600, message: crystalguard, creatures: 100 rust dragons (slot 1)"
+		}
+	},
+	"resource_145" : {
+		"l" : 0,
+		"subtype" : "crystal",
+		"template" : {
+			"animation" : "AVTCRYS0",
+			"editorAnimation" : "AVTCRYS0",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "resource",
+		"x" : 4,
+		"y" : 44,
+		"options" : {
+			"amount" : 600,
+			"guardMessage" : "crystalguard",
+			"guards" : [
+				{
+					"amount" : 100,
+					"type" : "rustDragon"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"sign_146" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 46,
+		"options" : {
+			"text" : "Spell scroll: default (always magic arrow?)"
+		}
+	},
+	"spellScroll_147" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0001",
+			"editorAnimation" : "AVA0001",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "spellScroll",
+		"x" : 4,
+		"y" : 46,
+		"options" : {
+			"spell" : "magicArrow"
+		}
+	},
+	"sign_148" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 48,
+		"options" : {
+			"text" : "Spell scroll: spell prayer, message \"prayerspell\""
+		}
+	},
+	"spellScroll_149" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0001",
+			"editorAnimation" : "AVA0001",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "spellScroll",
+		"x" : 4,
+		"y" : 48,
+		"options" : {
+			"guardMessage" : "prayerspell",
+			"spell" : "prayer"
+		}
+	},
+	"sign_150" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 50,
+		"options" : {
+			"text" : "Spell scroll: spell inferno, message \"infernospell\", creatures: slot 6 - 666 devils"
+		}
+	},
+	"spellScroll_151" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0001",
+			"editorAnimation" : "AVA0001",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "spellScroll",
+		"x" : 4,
+		"y" : 50,
+		"options" : {
+			"guardMessage" : "infernospell",
+			"guards" : [
+				{},
+				{},
+				{},
+				{},
+				{},
+				{
+					"amount" : 666,
+					"type" : "devil"
+				},
+				{}
+			],
+			"spell" : "inferno"
+		}
+	},
+	"artifact_152" : {
+		"l" : 0,
+		"subtype" : "centaurAxe",
+		"template" : {
+			"animation" : "AVA0007",
+			"editorAnimation" : "AVA0007",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "artifact",
+		"x" : 4,
+		"y" : 52
+	},
+	"sign_153" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 52,
+		"options" : {
+			"text" : "Artifact centaurs axe: default"
+		}
+	},
+	"sign_154" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 54,
+		"options" : {
+			"text" : "Artifact centaurs axe: message longtext"
+		}
+	},
+	"artifact_155" : {
+		"l" : 0,
+		"subtype" : "centaurAxe",
+		"template" : {
+			"animation" : "AVA0007",
+			"editorAnimation" : "AVA0007",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "artifact",
+		"x" : 4,
+		"y" : 54,
+		"options" : {
+			"guardMessage" : "longtext"
+		}
+	},
+	"sign_156" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 56,
+		"options" : {
+			"text" : "Artifact centaurs axe: message trolled, creatures: slot 3 - 44 trolls"
+		}
+	},
+	"artifact_157" : {
+		"l" : 0,
+		"subtype" : "centaurAxe",
+		"template" : {
+			"animation" : "AVA0007",
+			"editorAnimation" : "AVA0007",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "artifact",
+		"x" : 4,
+		"y" : 56,
+		"options" : {
+			"guardMessage" : "trolled",
+			"guards" : [
+				{},
+				{},
+				{
+					"amount" : 44,
+					"type" : "troll"
+				},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifact_158" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 4,
+		"y" : 58
+	},
+	"sign_159" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 58,
+		"options" : {
+			"text" : "Artifact template: default"
+		}
+	},
+	"randomArtifact_160" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 5,
+		"y" : 58
+	},
+	"randomArtifact_161" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 6,
+		"y" : 58
+	},
+	"randomArtifact_162" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 7,
+		"y" : 58
+	},
+	"randomArtifact_163" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 8,
+		"y" : 58
+	},
+	"sign_164" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 60,
+		"options" : {
+			"text" : "Artifact template: message \"artifactdefault\", creatures slot 1 -: 500 mages"
+		}
+	},
+	"randomArtifact_165" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 4,
+		"y" : 60,
+		"options" : {
+			"guardMessage" : "artifactdefault",
+			"guards" : [
+				{
+					"amount" : 500,
+					"type" : "mage"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifact_166" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 5,
+		"y" : 60,
+		"options" : {
+			"guardMessage" : "artifactdefault",
+			"guards" : [
+				{
+					"amount" : 500,
+					"type" : "mage"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifact_167" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 6,
+		"y" : 60,
+		"options" : {
+			"guardMessage" : "artifactdefault",
+			"guards" : [
+				{
+					"amount" : 500,
+					"type" : "mage"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifact_168" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 7,
+		"y" : 60,
+		"options" : {
+			"guardMessage" : "artifactdefault",
+			"guards" : [
+				{
+					"amount" : 500,
+					"type" : "mage"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifact_169" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARAND",
+			"editorAnimation" : "AVARAND",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifact",
+		"x" : 8,
+		"y" : 60,
+		"options" : {
+			"guardMessage" : "artifactdefault",
+			"guards" : [
+				{
+					"amount" : 500,
+					"type" : "mage"
+				},
+				{},
+				{},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"randomArtifactMajor_170" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 4,
+		"y" : 62
+	},
+	"sign_171" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 62,
+		"options" : {
+			"text" : "Artifact template 3: default"
+		}
+	},
+	"randomArtifactMajor_172" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 5,
+		"y" : 62
+	},
+	"randomArtifactMajor_173" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 6,
+		"y" : 62
+	},
+	"randomArtifactMajor_174" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 8,
+		"y" : 62
+	},
+	"randomArtifactMajor_175" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 7,
+		"y" : 62
+	},
+	"sign_176" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 64,
+		"options" : {
+			"text" : "Artifact template 3: message \"artifactthree\", creatures: slot 3 - 333 of royal griffins"
+		}
+	},
+	"randomArtifactMajor_177" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVARND3",
+			"editorAnimation" : "AVARND3",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomArtifactMajor",
+		"x" : 4,
+		"y" : 64,
+		"options" : {
+			"guardMessage" : "artifactthree",
+			"guards" : [
+				{},
+				{},
+				{
+					"amount" : 333,
+					"type" : "royalGriffin"
+				},
+				{},
+				{},
+				{},
+				{}
+			]
+		}
+	},
+	"pandoraBox_178" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0128",
+			"editorAnimation" : "AVA0128",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "pandoraBox",
+		"x" : 4,
+		"y" : 66
+	},
+	"sign_179" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 66,
+		"options" : {
+			"text" : "Pandora box: default"
+		}
+	},
+	"sign_180" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 68,
+		"options" : {
+			"text" : "Pandora box: message \"giveexp\", creatures: slot 5 - 5 pixies, take mana points -555"
+		}
+	},
+	"pandoraBox_181" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0128",
+			"editorAnimation" : "AVA0128",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "pandoraBox",
+		"x" : 4,
+		"y" : 68,
+		"options" : {
+			"guardMessage" : "giveexp",
+			"guards" : [
+				{},
+				{},
+				{},
+				{},
+				{
+					"amount" : 5,
+					"type" : "pixie"
+				},
+				{},
+				{}
+			],
+			"mana" : -555
+		}
+	},
+	"sign_182" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 70,
+		"options" : {
+			"text" : "Pandora box: 1000exp, give 100 mana points, +3 morale, +2 luck, resource + 9,8,7,6,5,4, primary skills +9,8,7,6"
+		}
+	},
+	"pandoraBox_183" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0128",
+			"editorAnimation" : "AVA0128",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "pandoraBox",
+		"x" : 4,
+		"y" : 70,
+		"options" : {
+			"experience" : 1000,
+			"luck" : 2,
+			"mana" : 100,
+			"morale" : 3,
+			"primarySkills" : {
+				"attack" : 9,
+				"defence" : 8,
+				"knowledge" : 6,
+				"spellpower" : 7
+			},
+			"resources" : {
+				"crystal" : 6,
+				"gems" : 5,
+				"gold" : 4,
+				"mercury" : 9,
+				"ore" : 8,
+				"sulfur" : 7,
+				"wood" : 10
+			}
+		}
+	},
+	"sign_184" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 72,
+		"options" : {
+			"text" : "Pandora box: secondar skills: expert pathfinding, advanced wisdom, basic necromancy, expert armorer"
+		}
+	},
+	"pandoraBox_185" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0128",
+			"editorAnimation" : "AVA0128",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "pandoraBox",
+		"x" : 4,
+		"y" : 72,
+		"options" : {
+			"secondarySkills" : {
+				"pathfinding" : "expert",
+				"wisdom" : "advanced",
+				"necromancy" : "basic",
+				"armorer" : "expert"
+			}
+		}
+	},
+	"sign_186" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 3,
+		"y" : 74,
+		"options" : {
+			"text" : "Pandora box: artifacts: angel winge, helm of chaos, wizards well, spells: armageddon, water elemental; creatures: 111 crusader, 100 rogues"
+		}
+	},
+	"pandoraBox_187" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVA0128",
+			"editorAnimation" : "AVA0128",
+			"mask" : [
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "pandoraBox",
+		"x" : 4,
+		"y" : 74,
+		"options" : {
+			"artifacts" : [
+				"angelWings",
+				"helmOfChaos",
+				"wizardsWell"
+			],
+			"creatures" : [
+				{
+					"amount" : 111,
+					"type" : "crusader"
+				},
+				{
+					"amount" : 100,
+					"type" : "rogue"
+				}
+			],
+			"spells" : [
+				"armageddon",
+				"waterElemental"
+			]
+		}
+	},
+	"town_188" : {
+		"l" : 0,
+		"subtype" : "castle",
+		"template" : {
+			"animation" : "AVCCASX0",
+			"editorAnimation" : "AVCCASX0",
+			"mask" : [
+				"VVVVVV",
+				"VVVVVV",
+				"VVVVVV",
+				"VVBBBV",
+				"VBBBBB",
+				"VBBABB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "town",
+		"x" : 26,
+		"y" : 14,
+		"options" : {
+			"army" : [
+				{
+					"amount" : 7,
+					"type" : "pikeman"
+				},
+				{
+					"amount" : 6,
+					"type" : "archer"
+				},
+				{
+					"amount" : 5,
+					"type" : "griffin"
+				},
+				{
+					"amount" : 4,
+					"type" : "swordsman"
+				},
+				{
+					"amount" : 3,
+					"type" : "monk"
+				},
+				{
+					"amount" : 2,
+					"type" : "cavalier"
+				},
+				{
+					"amount" : 1,
+					"type" : "angel"
+				}
+			],
+			"buildings" : {},
+			"hasFort" : false,
+			"spells" : {},
+			"tightFormation" : true
+		}
+	},
+	"sign_189" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 14,
+		"options" : {
+			"text" : "Don't owned by anyone, dont have fort, non-upgraded creatures: 7,6,5,4,3,2,1"
+		}
+	},
+	"randomTown_190" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVCRANX0",
+			"editorAnimation" : "AVCRANX0",
+			"mask" : [
+				"VVVVVV",
+				"VVVVVV",
+				"VVVVVV",
+				"VVBBBV",
+				"VBBBBB",
+				"VBBABB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomTown",
+		"x" : 26,
+		"y" : 21,
+		"options" : {
+			"buildings" : {
+				"allOf" : [
+					"blacksmith",
+					"capitol",
+					"castle",
+					"citadel",
+					"cityHall",
+					"dwellingLvl1",
+					"dwellingLvl2",
+					"dwellingLvl3",
+					"dwellingLvl4",
+					"dwellingLvl5",
+					"dwellingLvl6",
+					"dwellingLvl7",
+					"dwellingUpLvl1",
+					"dwellingUpLvl2",
+					"dwellingUpLvl3",
+					"dwellingUpLvl4",
+					"dwellingUpLvl5",
+					"dwellingUpLvl6",
+					"dwellingUpLvl7",
+					"fort",
+					"grail",
+					"horde1",
+					"horde2",
+					"horde3",
+					"horde4",
+					"horde5",
+					"mageGuild1",
+					"mageGuild2",
+					"mageGuild3",
+					"mageGuild4",
+					"mageGuild5",
+					"marketplace",
+					"resourceSilo",
+					"shipyard",
+					"tavern",
+					"townHall"
+				]
+			},
+			"name" : "TownAsRed",
+			"spells" : {}
+		}
+	},
+	"sign_191" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 21,
+		"options" : {
+			"text" : "Same as red player, name \"TownAsRed\". everything built"
+		}
+	},
+	"randomTown_192" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVCRANX0",
+			"editorAnimation" : "AVCRANX0",
+			"mask" : [
+				"VVVVVV",
+				"VVVVVV",
+				"VVVVVV",
+				"VVBBBV",
+				"VBBBBB",
+				"VBBABB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomTown",
+		"x" : 26,
+		"y" : 27,
+		"options" : {
+			"buildings" : {},
+			"hasFort" : false,
+			"spells" : {}
+		}
+	},
+	"sign_193" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 27,
+		"options" : {
+			"text" : "Don't have fort, one timed evernt on day 3, every 3 days"
+		}
+	},
+	"randomTown_194" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVCRANX0",
+			"editorAnimation" : "AVCRANX0",
+			"mask" : [
+				"VVVVVV",
+				"VVVVVV",
+				"VVVVVV",
+				"VVBBBV",
+				"VBBBBB",
+				"VBBABB"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomTown",
+		"x" : 26,
+		"y" : 32,
+		"options" : {
+			"buildings" : {
+				"allOf" : [
+					"grail"
+				],
+				"noneOf" : [
+					"blacksmith",
+					"dwellingLvl1",
+					"dwellingLvl2",
+					"dwellingLvl3",
+					"dwellingLvl4",
+					"dwellingLvl5",
+					"dwellingLvl6",
+					"dwellingLvl7",
+					"fort",
+					"mageGuild1",
+					"marketplace",
+					"shipyard",
+					"tavern",
+					"townHall"
+				]
+			},
+			"spells" : {}
+		}
+	},
+	"sign_195" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 32,
+		"options" : {
+			"text" : "Don't have fort, all buildings blocked, grail built"
+		}
+	},
+	"seerHut_196" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 4,
+		"y" : 83,
+		"options" : {
+			"quest" : {},
+			"reward" : {}
+		}
+	},
+	"sign_197" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 83,
+		"options" : {
+			"text" : "Default quest objects: empty"
+		}
+	},
+	"sign_198" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 86,
+		"options" : {
+			"text" : "Require red player, deadline 1 month, reward 999 diamond golems, messages: text1one, text2two, text3three"
+		}
+	},
+	"seerHut_199" : {
+		"l" : 0,
+		"subtype" : "0",
+		"template" : {
+			"animation" : "AVXSEER0",
+			"editorAnimation" : "AVXSEER0",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 6,
+		"y" : 83,
+		"options" : {
+			"quest" : {},
+			"reward" : {}
+		}
+	},
+	"seerHut_200" : {
+		"l" : 0,
+		"subtype" : "1",
+		"template" : {
+			"animation" : "AVXSEEY0",
+			"editorAnimation" : "AVXSEEY0",
+			"mask" : [
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 8,
+		"y" : 83,
+		"options" : {
+			"quest" : {},
+			"reward" : {}
+		}
+	},
+	"seerHut_201" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 4,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"completedText" : "text3three",
+				"firstVisitText" : "text1one",
+				"missionType" : "Player",
+				"nextVisitText" : "text2two",
+				"player" : "red",
+				"timeLimit" : 28
+			},
+			"reward" : {
+				"creature.diamondGolem" : 999
+			}
+		}
+	},
+	"questGuard_202" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 19,
+		"y" : 83,
+		"options" : {
+			"quest" : {}
+		}
+	},
+	"questGuard_203" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 22,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"missionType" : "Resources",
+				"resources" : {
+					"crystal" : 5,
+					"gems" : 6,
+					"gold" : 7,
+					"mercury" : 2,
+					"ore" : 3,
+					"sulfur" : 4,
+					"wood" : 1
+				},
+				"timeLimit" : 56
+			}
+		}
+	},
+	"questGuard_204" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 25,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"completedText" : "testextthree",
+				"firstVisitText" : "testextone",
+				"missionType" : "PrimaryStat",
+				"nextVisitText" : "testexttwo",
+				"primarySkills" : {
+					"attack" : 5,
+					"defence" : 6,
+					"knowledge" : 8,
+					"spellpower" : 7
+				}
+			}
+		}
+	},
+	"questGuard_205" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 28,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"heroLevel" : 4,
+				"missionType" : "Level",
+				"timeLimit" : 4
+			}
+		}
+	},
+	"sign_206" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 18,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: empty default"
+		}
+	},
+	"sign_207" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 21,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: require 1,2,3,4,5,6,7 resources, deadline 3 months, "
+		}
+	},
+	"sign_208" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 24,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: require skill 5,6,7,8; Texts: testextone, testexttwo, testextthree"
+		}
+	},
+	"sign_209" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 27,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: require level 4, deadline 5 days"
+		}
+	},
+	"sign_210" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 30,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: defeat specific hero: Orrin"
+		}
+	},
+	"questGuard_211" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 31,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"killTarget" : "prison_266",
+				"missionType" : "KillHero"
+			}
+		}
+	},
+	"sign_212" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 33,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: defeat specific monster: Pikeman above"
+		}
+	},
+	"questGuard_213" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 34,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"killTarget" : "monster_214",
+				"missionType" : "KillCreature"
+			}
+		}
+	},
+	"monster_214" : {
+		"l" : 0,
+		"subtype" : "pikeman",
+		"template" : {
+			"animation" : "AVWPIKE",
+			"editorAnimation" : "AVWPIKE",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "monster",
+		"x" : 34,
+		"y" : 81,
+		"options" : {
+			"character" : "aggressive"
+		}
+	},
+	"sign_215" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 36,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: return with specific artifact: diplomat's ring"
+		}
+	},
+	"questGuard_216" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 37,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"artifacts" : [
+					"diplomatsRing"
+				],
+				"missionType" : "Artifact"
+			}
+		}
+	},
+	"sign_217" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 39,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: return with specific creature: 1 azure dragon"
+		}
+	},
+	"questGuard_218" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 40,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"creatures" : [
+					{
+						"amount" : 1,
+						"type" : "azureDragon"
+					}
+				],
+				"missionType" : "Army"
+			}
+		}
+	},
+	"sign_219" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 42,
+		"y" : 83,
+		"options" : {
+			"text" : "Quest guard: be specific hero: Wizard, Solmyr"
+		}
+	},
+	"questGuard_220" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 43,
+		"y" : 83,
+		"options" : {
+			"quest" : {
+				"hero" : "solmyr",
+				"missionType" : "Hero"
+			}
+		}
+	},
+	"sign_221" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 42,
+		"y" : 85,
+		"options" : {
+			"text" : "Quest guard: belong to player: teal"
+		}
+	},
+	"questGuard_222" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXBOR80",
+			"editorAnimation" : "AVXBOR80",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "questGuard",
+		"x" : 43,
+		"y" : 85,
+		"options" : {
+			"quest" : {
+				"missionType" : "Player",
+				"player" : "teal"
+			}
+		}
+	},
+	"randomMonster_223" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 89,
+		"options" : {
+			"character" : "aggressive"
+		}
+	},
+	"sign_224" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 89,
+		"options" : {
+			"text" : "monster template: default"
+		}
+	},
+	"sign_225" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 91,
+		"options" : {
+			"text" : "monster template: custom amount 543"
+		}
+	},
+	"randomMonster_226" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 91,
+		"options" : {
+			"amount" : 543,
+			"character" : "aggressive"
+		}
+	},
+	"sign_227" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 93,
+		"options" : {
+			"text" : "monster template: custom amount 432, don't grow, savage, never flees, message: savagemonster"
+		}
+	},
+	"sign_228" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 95,
+		"options" : {
+			"text" : "monster template: treasure resources: 1,2,3,4,5,6,7 and artifact: diplomat's ring"
+		}
+	},
+	"sign_229" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 97,
+		"options" : {
+			"text" : "monster template: treasure artifact: angel wings"
+		}
+	},
+	"sign_230" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 99,
+		"options" : {
+			"text" : "monster template: message: treasureresources; treature resources: wood 10, gold 1000"
+		}
+	},
+	"sign_231" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 101,
+		"options" : {
+			"text" : "monster template all non-default options: quanlity don't grow 1, complaint, never flees, msg test123, resource treasure: 7,6,5,4,3,2,1, art: spyglass"
+		}
+	},
+	"randomMonster_232" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 95,
+		"options" : {
+			"character" : "aggressive",
+			"rewardArtifact" : "diplomatsRing",
+			"rewardResources" : {
+				"crystal" : 5,
+				"gems" : 6,
+				"gold" : 7,
+				"mercury" : 2,
+				"ore" : 3,
+				"sulfur" : 4,
+				"wood" : 1
+			}
+		}
+	},
+	"randomMonster_233" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 97,
+		"options" : {
+			"character" : "aggressive",
+			"rewardArtifact" : "angelWings"
+		}
+	},
+	"randomMonster_234" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 99,
+		"options" : {
+			"character" : "aggressive",
+			"neverFlees" : true,
+			"rewardMessage" : "treasureresources",
+			"rewardResources" : {
+				"gold" : 1000,
+				"wood" : 10
+			}
+		}
+	},
+	"randomMonster_235" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 101,
+		"options" : {
+			"amount" : 1,
+			"character" : "compliant",
+			"neverFlees" : true,
+			"noGrowing" : true,
+			"rewardArtifact" : "spyglass",
+			"rewardMessage" : "test123",
+			"rewardResources" : {
+				"crystal" : 3,
+				"gems" : 2,
+				"gold" : 1,
+				"mercury" : 6,
+				"ore" : 5,
+				"sulfur" : 4,
+				"wood" : 7
+			}
+		}
+	},
+	"randomMonster_236" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMRND0",
+			"editorAnimation" : "AVWMRND0",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonster",
+		"x" : 3,
+		"y" : 93,
+		"options" : {
+			"amount" : 432,
+			"character" : "savage",
+			"neverFlees" : true,
+			"noGrowing" : true,
+			"rewardMessage" : "savagemonster"
+		}
+	},
+	"sign_237" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 103,
+		"options" : {
+			"text" : "monster lvl 7 template: random quanlity don't grow, hostile, never flees"
+		}
+	},
+	"randomMonsterLevel7_238" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVWMON7",
+			"editorAnimation" : "AVWMON7",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "randomMonsterLevel7",
+		"x" : 3,
+		"y" : 103,
+		"options" : {
+			"character" : "hostile",
+			"neverFlees" : true,
+			"noGrowing" : true
+		}
+	},
+	"sign_239" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 5,
+		"y" : 86,
+		"options" : {
+			"text" : "Require achieve level 99; reward: 100 exp"
+		}
+	},
+	"seerHut_240" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 7,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"heroLevel" : 99,
+				"missionType" : "Level"
+			},
+			"reward" : {
+				"experience" : 100
+			}
+		}
+	},
+	"sign_241" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 8,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: achieve primary skills: 5,4,3,2; reward: 999 mana"
+		}
+	},
+	"seerHut_242" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 10,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"missionType" : "PrimaryStat",
+				"primarySkills" : {
+					"attack" : 5,
+					"defence" : 4,
+					"knowledge" : 2,
+					"spellpower" : 3
+				}
+			},
+			"reward" : {
+				"mana" : 999
+			}
+		}
+	},
+	"seerHut_243" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 13,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"killTarget" : "prison_263",
+				"missionType" : "KillHero"
+			},
+			"reward" : {
+				"morale" : 3
+			}
+		}
+	},
+	"sign_244" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 11,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: defeat specific hero: Valeska the Knight; reward: morale +3 "
+		}
+	},
+	"seerHut_245" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 16,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"killTarget" : "monster_214",
+				"missionType" : "KillCreature"
+			},
+			"reward" : {
+				"luck" : 2
+			}
+		}
+	},
+	"sign_246" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 14,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: defeat specific monster: Pikeman at quest guard; reward: luck +2"
+		}
+	},
+	"sign_247" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 17,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: return with artifacts: angel wings; reward: 99999 gold"
+		}
+	},
+	"seerHut_248" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 19,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"artifacts" : [
+					"angelWings"
+				],
+				"missionType" : "Artifact"
+			},
+			"reward" : {
+				"resource.gold" : 99999
+			}
+		}
+	},
+	"sign_249" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 20,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: creature 100 archers ; reward: 99 knowledge"
+		}
+	},
+	"sign_250" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 23,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: resources 10,20,30,40,50,60,70 ; reward: expert Necromancy"
+		}
+	},
+	"sign_251" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 29,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: belong to specific player Purple; reward: spell Fly"
+		}
+	},
+	"sign_252" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 26,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: be specific hero Catherine the Knight ; reward: artifact Angelic Alliance"
+		}
+	},
+	"sign_253" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 32,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: return with 8 artifacts: angel wings - bird of perception; reward: 777 cyclops knight"
+		}
+	},
+	"sign_254" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 35,
+		"y" : 86,
+		"options" : {
+			"text" : "Require: return with 7 creatures: pikeman - marksman ; reward: none"
+		}
+	},
+	"seerHut_255" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 22,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"creatures" : [
+					{
+						"amount" : 100,
+						"type" : "archer"
+					}
+				],
+				"missionType" : "Army"
+			},
+			"reward" : {
+				"primarySkill.knowledge" : 99
+			}
+		}
+	},
+	"seerHut_256" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 25,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"missionType" : "Resources",
+				"resources" : {
+					"crystal" : 50,
+					"gems" : 60,
+					"gold" : 70,
+					"mercury" : 20,
+					"ore" : 30,
+					"sulfur" : 40,
+					"wood" : 10
+				}
+			},
+			"reward" : {
+				"secondarySkill.necromancy" : 3
+			}
+		}
+	},
+	"seerHut_257" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 28,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"hero" : "catherine",
+				"missionType" : "Hero"
+			},
+			"reward" : {
+				"artifact.angelicAlliance" : 1
+			}
+		}
+	},
+	"seerHut_258" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 31,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"missionType" : "Player",
+				"player" : "purple"
+			},
+			"reward" : {
+				"spell.fly" : 1
+			}
+		}
+	},
+	"seerHut_259" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 34,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"artifacts" : [
+					"armorOfWonder",
+					"badgeOfCourage",
+					"birdOfPerception",
+					"angelWings",
+					"armsOfLegion",
+					"armageddonsBlade",
+					"angelicAlliance",
+					"armorOfTheDamned"
+				],
+				"missionType" : "Artifact"
+			},
+			"reward" : {
+				"creature.cyclopKing" : 777
+			}
+		}
+	},
+	"seerHut_260" : {
+		"l" : 0,
+		"subtype" : "2",
+		"template" : {
+			"animation" : "AVXSEEB0",
+			"editorAnimation" : "AVXSEEB0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VAV"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "seerHut",
+		"x" : 37,
+		"y" : 86,
+		"options" : {
+			"quest" : {
+				"creatures" : [
+					{
+						"amount" : 1,
+						"type" : "pikeman"
+					},
+					{
+						"amount" : 1,
+						"type" : "halberdier"
+					},
+					{
+						"amount" : 1,
+						"type" : "archer"
+					},
+					{
+						"amount" : 1,
+						"type" : "marksman"
+					},
+					{
+						"amount" : 1,
+						"type" : "griffin"
+					},
+					{
+						"amount" : 1,
+						"type" : "royalGriffin"
+					},
+					{
+						"amount" : 1,
+						"type" : "swordsman"
+					}
+				],
+				"missionType" : "Army"
+			},
+			"reward" : {}
+		}
+	},
+	"sign_261" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 2,
+		"y" : 105,
+		"options" : {
+			"text" : "monster peasant: 777 don't grow, friendly, never flee, msg \"peasantmsg\", treasure resource: 99999 each, torso of legion"
+		}
+	},
+	"monster_262" : {
+		"l" : 0,
+		"subtype" : "peasant",
+		"template" : {
+			"animation" : "AVWPEAS",
+			"editorAnimation" : "AVWPEAS",
+			"mask" : [
+				"VV",
+				"VA"
+			],
+			"visitableFrom" : [
+				"+++",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "monster",
+		"x" : 3,
+		"y" : 105,
+		"options" : {
+			"amount" : 777,
+			"character" : "friendly",
+			"neverFlees" : true,
+			"noGrowing" : true,
+			"rewardArtifact" : "torsoOfLegion",
+			"rewardMessage" : "peasantmsg",
+			"rewardResources" : {
+				"crystal" : 99999,
+				"gems" : 99999,
+				"gold" : 99999,
+				"mercury" : 99999,
+				"ore" : 99999,
+				"sulfur" : 99999,
+				"wood" : 99999
+			}
+		}
+	},
+	"prison_263" : {
+		"l" : 0,
+		"subtype" : "prison",
+		"template" : {
+			"animation" : "AVXPRSN0",
+			"editorAnimation" : "AVXPRSN0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "prison",
+		"x" : 33,
+		"y" : 13,
+		"options" : {
+			"type" : "valeska"
+		}
+	},
+	"sign_264" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 31,
+		"y" : 13,
+		"options" : {
+			"text" : "default options"
+		}
+	},
+	"prison_265" : {
+		"l" : 0,
+		"subtype" : "prison",
+		"template" : {
+			"animation" : "AVXPRSN0",
+			"editorAnimation" : "AVXPRSN0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "prison",
+		"x" : 33,
+		"y" : 16,
+		"options" : {
+			"experience" : 99999999,
+			"name" : "Anul",
+			"patrolRadius" : 9,
+			"portrait" : "orrin",
+			"type" : "luna",
+			"female" : false
+		}
+	},
+	"prison_266" : {
+		"l" : 0,
+		"subtype" : "prison",
+		"template" : {
+			"animation" : "AVXPRSN0",
+			"editorAnimation" : "AVXPRSN0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "prison",
+		"x" : 33,
+		"y" : 19,
+		"options" : {
+			"secondarySkills" : {
+				"artillery" : "advanced",
+				"learning" : "expert",
+				"offence" : "basic",
+				"armorer" : "advanced",
+				"intelligence" : "expert",
+				"sorcery" : "basic",
+				"resistance" : "advanced",
+				"firstAid" : "expert"
+			},
+			"type" : "orrin"
+		}
+	},
+	"prison_267" : {
+		"l" : 0,
+		"subtype" : "prison",
+		"template" : {
+			"animation" : "AVXPRSN0",
+			"editorAnimation" : "AVXPRSN0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "prison",
+		"x" : 33,
+		"y" : 22,
+		"options" : {
+			"artifacts" : {
+				"head" : "admiralsHat",
+				"leftHand" : "shieldOfTheDamned",
+				"rightHand" : "armageddonsBlade",
+				"shoulders" : "angelWings",
+				"spellbook" : "spellBook",
+				"torso" : "armorOfWonder"
+			},
+			"type" : "edric"
+		}
+	},
+	"prison_268" : {
+		"l" : 0,
+		"subtype" : "prison",
+		"template" : {
+			"animation" : "AVXPRSN0",
+			"editorAnimation" : "AVXPRSN0",
+			"mask" : [
+				"VVV",
+				"VVV",
+				"VBA"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "prison",
+		"x" : 33,
+		"y" : 25,
+		"options" : {
+			"spellBook" : [
+				"summonBoat",
+				"scuttleBoat",
+				"visions",
+				"viewEarth",
+				"disguise",
+				"viewAir",
+				"fly",
+				"waterWalk",
+				"dimensionDoor",
+				"townPortal",
+				"quicksand",
+				"landMine",
+				"forceField",
+				"fireWall",
+				"earthquake",
+				"magicArrow",
+				"iceBolt",
+				"lightningBolt",
+				"implosion",
+				"chainLightning",
+				"frostRing",
+				"fireball",
+				"inferno",
+				"meteorShower",
+				"deathRipple",
+				"destroyUndead",
+				"armageddon",
+				"shield",
+				"airShield",
+				"fireShield",
+				"protectAir",
+				"protectFire",
+				"protectWater",
+				"protectEarth",
+				"antiMagic",
+				"dispel",
+				"magicMirror",
+				"cure",
+				"resurrection",
+				"animateDead",
+				"sacrifice",
+				"bless",
+				"curse",
+				"bloodlust",
+				"precision",
+				"weakness",
+				"stoneSkin",
+				"disruptingRay",
+				"prayer",
+				"mirth",
+				"sorrow",
+				"fortune",
+				"misfortune",
+				"haste",
+				"slow",
+				"slayer",
+				"frenzy",
+				"counterstrike",
+				"berserk",
+				"hypnotize",
+				"forgetfulness",
+				"blind",
+				"teleport",
+				"removeObstacle",
+				"clone",
+				"fireElemental",
+				"earthElemental",
+				"waterElemental",
+				"airElemental"
+			],
+			"type" : "sorsha"
+		}
+	},
+	"sign_269" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 31,
+		"y" : 16,
+		"options" : {
+			"text" : "Elementalist, Luna, Anul, 99999999 exp, Orrin avatar, male, patrol 9 squares"
+		}
+	},
+	"sign_270" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 31,
+		"y" : 19,
+		"options" : {
+			"text" : "secondary skills from end of list: Expert (first aid),  Advanced, Basic (Offence), Expert, Advanced, Basic, Expert, Advanced"
+		}
+	},
+	"sign_271" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 31,
+		"y" : 22,
+		"options" : {
+			"text" : "Arts: have spellbook, head: Admirals hat, shoulders: angel wings, right hand: armagedons blade; left hand: shield of damned; torso: armor of wonder"
+		}
+	},
+	"sign_272" : {
+		"l" : 0,
+		"subtype" : "object",
+		"template" : {
+			"animation" : "AVXSNDG0",
+			"editorAnimation" : "AVXSNDG0",
+			"mask" : [
+				"A"
+			],
+			"visitableFrom" : [
+				"---",
+				"+-+",
+				"+++"
+			]
+		},
+		"type" : "sign",
+		"x" : 31,
+		"y" : 25,
+		"options" : {
+			"text" : "have all spells"
+		}
+	}
+}

+ 144 - 0
test/testdata/ObjectPropertyTest/surface_terrain.json

@@ -0,0 +1,144 @@
+[["gr55_","gr50_","gr50_","gr56_","gr56_","gr52_","gr60_","gr61_","gr69_","gr55_","gr53_","gr54_","gr65_","gr56_","gr50_","gr51_","gr51_","gr64_","gr51_","gr54_","gr53_","gr49_","gr63_","gr68_","gr49_","gr52_","gr54_","gr55_","gr55_","gr54_","gr54_","gr55_","gr56_","gr54_","gr55_","gr52_","gr55_","gr56_","gr71_","gr54_","gr50_","gr69_","gr55_","gr54_","gr53_","gr65_","gr51_","gr50_","gr63_","gr52_","gr54_","gr60_","gr52_","gr50_","gr59_","gr51_","gr49_","gr51_","gr62_","gr49_","gr51_","gr51_","gr49_","gr68_","gr56_","gr51_","gr55_","gr54_","gr52_","gr54_","gr69_","gr52_","gr54_","gr53_","gr51_","gr50_","gr49_","gr51_","gr56_","gr54_","gr51_","gr50_","gr51_","gr56_","gr65_","gr52_","gr51_","gr49_","gr65_","gr51_","gr56_","gr65_","gr54_","gr66_","gr55_","gr54_","gr64_","gr65_","gr50_","gr60_","gr49_","gr53_","gr70_","gr56_","gr50_","gr53_","gr51_","gr52_","gr60_","gr55_","gr56_","gr71_","gr55_","gr49_","gr52_","gr57_","gr54_","gr56_","gr54_","gr51_","gr64_","gr52_","gr54_","gr53_","gr49_","gr50_","gr49_","gr54_","gr55_","gr49_","gr49_","gr56_","gr54_","gr53_","gr58_","gr49_","gr68_","gr55_","gr63_","gr67_","gr54_","gr51_","gr51_","gr69_"],
+["gr49_","gr49_","gr56_","gr72_","gr49_","gr53_","gr52_","gr50_","gr54_","gr71_","gr54_","gr63_","gr50_","gr59_","gr54_","gr59_","gr53_","gr50_","gr50_","gr57_","gr49_","gr71_","gr50_","gr63_","gr54_","gr50_","gr69_","gr56_","gr55_","gr49_","gr57_","gr56_","gr51_","gr50_","gr55_","gr60_","gr53_","gr51_","gr53_","gr55_","gr52_","gr51_","gr58_","gr54_","gr67_","gr53_","gr70_","gr53_","gr50_","gr68_","gr71_","gr55_","gr52_","gr49_","gr53_","gr51_","gr55_","gr55_","gr55_","gr65_","gr55_","gr56_","gr51_","gr49_","gr52_","gr53_","gr50_","gr52_","gr55_","gr50_","gr49_","gr49_","gr49_","gr56_","gr50_","gr66_","gr51_","gr49_","gr49_","gr52_","gr55_","gr55_","gr55_","gr51_","gr54_","gr69_","gr51_","gr51_","gr56_","gr53_","gr68_","gr56_","gr63_","gr56_","gr56_","gr55_","gr52_","gr49_","gr56_","gr51_","gr57_","gr51_","gr49_","gr49_","gr53_","gr54_","gr68_","gr51_","gr51_","gr54_","gr55_","gr49_","gr51_","gr52_","gr51_","gr52_","gr71_","gr51_","gr52_","gr49_","gr55_","gr59_","gr52_","gr52_","gr54_","gr50_","gr56_","gr50_","gr51_","gr54_","gr49_","gr54_","gr65_","gr53_","gr52_","gr53_","gr56_","gr61_","gr50_","gr50_","gr50_","gr52_","gr49_","gr51_"],
+["gr54_","gr49_","gr50_","gr50_","gr56_","gr49_","gr65_","gr53_","gr54_","gr52_","gr55_","gr62_","gr61_","gr53_","gr51_","gr51_","gr50_","gr53_","gr53_","gr55_","gr58_","gr56_","gr50_","gr71_","gr50_","gr54_","gr51_","gr70_","gr56_","gr52_","gr54_","gr50_","gr56_","gr49_","gr51_","gr69_","gr55_","gr57_","gr56_","gr53_","gr60_","gr53_","gr54_","gr52_","gr50_","gr57_","gr50_","gr49_","gr56_","gr53_","gr53_","gr53_","gr49_","gr52_","gr52_","gr54_","gr68_","gr56_","gr64_","gr55_","gr69_","gr52_","gr54_","gr55_","gr50_","gr49_","gr65_","gr54_","gr62_","gr50_","gr52_","gr51_","gr50_","gr56_","gr72_","gr56_","gr55_","gr54_","gr52_","gr60_","gr53_","gr54_","gr63_","gr64_","gr56_","gr50_","gr72_","gr51_","gr53_","gr52_","gr55_","gr54_","gr49_","gr54_","gr50_","gr56_","gr59_","gr51_","gr49_","gr59_","gr53_","gr52_","gr50_","gr70_","gr54_","gr68_","gr53_","gr49_","gr67_","gr53_","gr49_","gr52_","gr50_","gr56_","gr53_","gr72_","gr53_","gr49_","gr56_","gr52_","gr61_","gr56_","gr58_","gr50_","gr61_","gr50_","gr49_","gr55_","gr51_","gr53_","gr53_","gr54_","gr50_","gr56_","gr51_","gr54_","gr50_","gr49_","gr54_","gr56_","gr54_","gr61_","gr49_","gr50_"],
+["gr53_","gr51_","gr71_","gr54_","gr51_","gr57_","gr51_","gr51_","gr69_","gr70_","gr56_","gr51_","gr56_","gr70_","gr51_","gr59_","gr50_","gr49_","gr68_","gr55_","gr55_","gr69_","gr56_","gr51_","gr61_","gr63_","gr58_","gr51_","gr49_","gr70_","gr53_","gr52_","gr56_","gr56_","gr51_","gr57_","gr55_","gr50_","gr50_","gr55_","gr52_","gr53_","gr50_","gr65_","gr50_","gr52_","gr56_","gr53_","gr49_","gr55_","gr54_","gr52_","gr51_","gr51_","gr56_","gr54_","gr56_","gr55_","gr49_","gr68_","gr51_","gr72_","gr52_","gr60_","gr51_","gr70_","gr51_","gr49_","gr59_","gr53_","gr52_","gr72_","gr50_","gr53_","gr54_","gr60_","gr51_","gr51_","gr35_","gr30|","gr31|","gr29|","gr31|","gr30|","gr28|","gr30|","gr29|","gr29|","gr29|","gr31|","gr31|","gr31|","gr33-","gr52_","gr54_","gr58_","gr52_","gr61_","gr54_","gr55_","gr53_","gr57_","gr49_","gr55_","gr55_","gr55_","gr70_","gr53_","gr52_","gr51_","gr68_","gr55_","gr52_","gr53_","gr52_","gr55_","gr57_","gr50_","gr50_","gr67_","gr58_","gr50_","gr64_","gr70_","gr52_","gr56_","gr51_","gr52_","gr69_","gr54_","gr52_","gr65_","gr56_","gr54_","gr57_","gr51_","gr52_","gr50_","gr49_","gr51_","gr68_","gr52_","gr67_","gr56_"],
+["gr56_","gr54_","gr56_","gr52_","gr50_","gr52_","gr52_","gr54_","gr67_","gr53_","gr49_","gr54_","gr52_","gr54_","gr60_","gr52_","gr53_","gr55_","gr62_","gr49_","gr49_","gr60_","gr52_","gr52_","gr55_","gr54_","gr56_","gr54_","gr51_","gr55_","gr54_","gr55_","gr68_","gr65_","gr63_","gr55_","gr51_","gr55_","gr49_","gr53_","gr66_","gr50_","gr53_","gr52_","gr51_","gr54_","gr56_","gr49_","gr52_","gr58_","gr51_","gr54_","gr50_","gr52_","gr51_","gr66_","gr50_","gr51_","gr49_","gr63_","gr50_","gr67_","gr51_","gr50_","gr54_","gr52_","gr57_","gr55_","gr60_","gr51_","gr49_","gr50_","gr57_","gr56_","gr60_","gr55_","gr49_","gr54_","gr24-","wt0_","wt8_","wt10_","wt11_","wt10_","wt8_","wt10_","wt11_","wt9_","wt11_","wt9_","wt11_","wt3-","gr26_","gr72_","gr52_","gr51_","gr56_","gr49_","gr55_","gr52_","gr51_","gr49_","gr69_","gr53_","gr71_","gr55_","gr55_","gr55_","gr54_","gr56_","gr49_","gr51_","gr56_","gr52_","gr70_","gr56_","gr49_","gr55_","gr58_","gr55_","gr70_","gr49_","gr70_","gr56_","gr60_","gr55_","gr64_","gr49_","gr50_","gr55_","gr64_","gr54_","gr50_","gr72_","gr52_","gr60_","gr52_","gr56_","gr53_","gr53_","gr50_","gr51_","gr55_","gr55_"],
+["gr61_","gr51_","gr53_","gr61_","gr55_","gr50_","gr51_","gr53_","gr55_","gr50_","gr50_","gr56_","gr56_","gr54_","gr63_","gr61_","gr50_","gr55_","gr52_","gr54_","gr56_","gr56_","gr70_","gr49_","gr56_","gr49_","gr62_","gr56_","gr54_","gr56_","gr56_","gr50_","gr49_","gr67_","gr55_","gr56_","gr53_","gr71_","gr54_","gr64_","gr55_","gr52_","gr56_","gr53_","gr52_","gr55_","gr50_","gr54_","gr58_","gr55_","gr52_","gr51_","gr53_","gr49_","gr51_","gr51_","gr52_","gr52_","gr50_","gr56_","gr49_","gr61_","gr52_","gr49_","gr53_","gr52_","gr52_","gr55_","gr49_","gr53_","gr53_","gr49_","gr54_","gr64_","gr50_","gr64_","gr55_","gr49_","gr24-","wt5_","wt21_","wt25_","wt32_","wt25_","wt30_","wt32_","wt28_","wt21_","wt24_","wt28_","wt30_","wt7-","gr24_","gr52_","gr52_","gr69_","gr56_","gr55_","gr52_","gr68_","gr54_","gr52_","gr55_","gr55_","gr53_","gr53_","gr55_","gr64_","gr49_","gr61_","gr56_","gr55_","gr64_","gr68_","gr52_","gr68_","gr61_","gr55_","gr56_","gr54_","gr49_","gr54_","gr52_","gr56_","gr53_","gr52_","gr54_","gr55_","gr50_","gr58_","gr55_","gr70_","gr49_","gr52_","gr61_","gr50_","gr59_","gr59_","gr64_","gr53_","gr66_","gr50_","gr61_","gr55_"],
+["gr53_","gr49_","gr53_","gr56_","gr56_","gr52_","gr63_","gr56_","gr50_","gr52_","gr50_","gr56_","gr54_","gr69_","gr52_","gr54_","gr59_","gr55_","gr70_","gr53_","gr52_","gr54_","gr54_","gr50_","gr56_","gr50_","gr51_","gr56_","gr50_","gr63_","gr52_","gr53_","gr66_","gr54_","gr50_","gr50_","gr67_","gr50_","gr49_","gr55_","gr51_","gr60_","gr51_","gr53_","gr62_","gr56_","gr53_","gr66_","gr51_","gr53_","gr72_","gr49_","gr69_","gr49_","gr49_","gr56_","gr60_","gr51_","gr50_","gr56_","gr50_","gr55_","gr55_","gr72_","gr54_","gr53_","gr49_","gr57_","gr52_","gr50_","gr55_","gr51_","gr59_","gr53_","gr56_","gr55_","gr61_","gr52_","gr27-","wt6_","wt24_","wt24_","wt29_","wt24_","wt22_","wt22_","wt26_","wt26_","wt22_","wt23_","wt23_","wt7-","gr27_","gr55_","gr53_","gr56_","gr50_","gr53_","gr52_","gr54_","gr53_","gr51_","gr56_","gr69_","gr50_","gr64_","gr63_","gr55_","gr52_","gr65_","gr49_","gr51_","gr50_","gr54_","gr54_","gr50_","gr55_","gr51_","gr51_","gr50_","gr58_","gr56_","gr65_","gr55_","gr63_","gr49_","gr62_","gr53_","gr52_","gr54_","gr51_","gr55_","gr53_","gr53_","gr52_","gr59_","gr56_","gr52_","gr50_","gr52_","gr50_","gr71_","gr52_","gr55_"],
+["gr56_","gr64_","gr50_","gr62_","gr55_","gr49_","gr49_","gr56_","gr52_","gr68_","gr50_","gr54_","gr52_","gr52_","gr51_","gr56_","gr54_","gr49_","gr52_","gr54_","gr52_","gr72_","gr59_","gr55_","gr54_","gr72_","gr49_","gr54_","gr55_","gr55_","gr50_","gr56_","gr54_","gr51_","gr49_","gr55_","gr54_","gr49_","gr50_","gr50_","gr54_","gr49_","gr54_","gr67_","gr49_","gr56_","gr59_","gr72_","gr63_","gr53_","gr49_","gr50_","gr51_","gr52_","gr54_","gr49_","gr51_","gr63_","gr50_","gr53_","gr51_","gr64_","gr52_","gr55_","gr50_","gr55_","gr51_","gr54_","gr52_","gr50_","gr54_","gr50_","gr54_","gr56_","gr53_","gr53_","gr53_","gr69_","gr25-","wt6_","wt22_","wt30_","wt30_","wt21_","wt25_","wt23_","wt25_","wt32_","wt29_","wt28_","wt27_","wt5-","gr24_","gr66_","gr56_","gr66_","gr54_","gr69_","gr49_","gr50_","gr49_","gr53_","gr53_","gr55_","gr54_","gr56_","gr55_","gr52_","gr56_","gr52_","gr52_","gr55_","gr55_","gr56_","gr60_","gr50_","gr53_","gr65_","gr52_","gr51_","gr51_","gr55_","gr55_","gr52_","gr50_","gr61_","gr56_","gr51_","gr58_","gr68_","gr50_","gr51_","gr54_","gr56_","gr72_","gr50_","gr53_","gr65_","gr53_","gr49_","gr51_","gr52_","gr53_","gr55_"],
+["gr54_","gr72_","gr50_","gr54_","gr58_","gr49_","gr49_","gr68_","gr53_","gr49_","gr50_","gr51_","gr52_","gr49_","gr51_","gr66_","gr52_","gr68_","gr54_","gr58_","gr58_","gr53_","gr54_","gr49_","gr51_","gr52_","gr54_","gr51_","gr68_","gr53_","gr50_","gr52_","gr52_","gr49_","gr52_","gr55_","gr53_","gr51_","gr56_","gr50_","gr55_","gr52_","gr49_","gr71_","gr53_","gr55_","gr50_","gr53_","gr54_","gr54_","gr53_","gr53_","gr53_","gr51_","gr71_","gr54_","gr49_","gr56_","gr50_","gr58_","gr69_","gr56_","gr58_","gr54_","gr49_","gr51_","gr49_","gr53_","gr56_","gr54_","gr51_","gr53_","gr56_","gr56_","gr50_","gr49_","gr69_","gr54_","gr27-","wt5_","wt30_","wt31_","wt31_","wt31_","wt30_","wt27_","wt31_","wt27_","wt24_","wt22_","wt32_","wt6-","gr26_","gr51_","gr53_","gr53_","gr54_","gr54_","gr49_","gr49_","gr50_","gr50_","gr65_","gr54_","gr57_","gr54_","gr55_","gr56_","gr53_","gr55_","gr56_","gr52_","gr55_","gr60_","gr53_","gr52_","gr49_","gr59_","gr51_","gr63_","gr50_","gr67_","gr52_","gr55_","gr53_","gr56_","gr52_","gr50_","gr50_","gr51_","gr52_","gr49_","gr51_","gr55_","gr51_","gr52_","gr56_","gr53_","gr56_","gr52_","gr52_","gr56_","gr56_","gr55_"],
+["gr54_","gr50_","gr54_","gr56_","gr50_","gr53_","gr54_","gr52_","gr53_","gr51_","gr50_","gr54_","gr68_","gr55_","gr62_","gr52_","gr53_","gr49_","gr51_","gr72_","gr68_","gr54_","gr55_","gr55_","gr55_","gr53_","gr51_","gr53_","gr51_","gr51_","gr68_","gr56_","gr53_","gr56_","gr51_","gr49_","gr50_","gr56_","gr61_","gr54_","gr55_","gr51_","gr51_","gr50_","gr50_","gr54_","gr51_","gr51_","gr63_","gr56_","gr53_","gr51_","gr51_","gr53_","gr55_","gr56_","gr53_","gr62_","gr58_","gr52_","gr56_","gr55_","gr50_","gr53_","gr51_","gr64_","gr50_","gr54_","gr49_","gr53_","gr54_","gr53_","gr49_","gr54_","gr55_","gr51_","gr55_","gr55_","gr27-","wt4_","wt21_","wt29_","wt26_","wt22_","wt30_","wt21_","wt27_","wt32_","wt26_","wt28_","wt29_","wt4-","gr27_","gr52_","gr52_","gr65_","gr56_","gr49_","gr53_","gr50_","gr56_","gr50_","gr67_","gr49_","gr50_","gr49_","gr71_","gr50_","gr51_","gr57_","gr54_","gr49_","gr50_","gr66_","gr51_","gr49_","gr65_","gr49_","gr64_","gr56_","gr55_","gr53_","gr49_","gr49_","gr49_","gr51_","gr49_","gr49_","gr53_","gr51_","gr67_","gr50_","gr54_","gr49_","gr51_","gr51_","gr51_","gr53_","gr58_","gr53_","gr55_","gr52_","gr53_","gr56_"],
+["gr50_","gr53_","gr54_","gr52_","gr54_","gr52_","gr50_","gr49_","gr51_","gr50_","gr65_","gr71_","gr60_","gr51_","gr50_","gr62_","gr56_","gr35_","gr31|","gr30|","gr33-","gr49_","gr54_","gr50_","gr50_","gr51_","gr72_","gr33_","gr31|","gr29|","gr34-","gr68_","gr49_","gr49_","gr53_","gr53_","gr59_","gr49_","gr55_","gr54_","gr55_","gr64_","gr53_","gr51_","gr55_","gr52_","gr53_","gr49_","gr51_","gr51_","gr65_","gr51_","gr71_","gr51_","gr68_","gr54_","gr49_","gr50_","gr65_","gr61_","gr52_","gr54_","gr53_","gr69_","gr56_","gr54_","gr55_","gr50_","gr55_","gr55_","gr55_","gr65_","gr49_","gr72_","gr52_","gr52_","gr49_","gr70_","gr27-","wt5_","wt31_","wt31_","wt28_","wt22_","wt21_","wt32_","wt32_","wt25_","wt28_","wt26_","wt31_","wt6-","gr27_","gr53_","gr53_","gr52_","gr69_","gr53_","gr69_","gr53_","gr66_","gr54_","gr50_","gr49_","gr51_","gr49_","gr62_","gr50_","gr50_","gr50_","gr55_","gr54_","gr55_","gr56_","gr60_","gr56_","gr54_","gr49_","gr51_","gr54_","gr52_","gr52_","gr54_","gr49_","gr54_","gr53_","gr49_","gr56_","gr51_","gr53_","gr53_","gr53_","gr53_","gr55_","gr49_","gr54_","gr51_","gr59_","gr52_","gr53_","gr50_","gr55_","gr68_","gr49_"],
+["gr56_","gr57_","gr50_","gr51_","gr72_","gr54_","gr51_","gr66_","gr49_","gr71_","gr49_","gr71_","gr54_","gr71_","gr56_","gr49_","gr71_","gr25-","rc9_","rc11_","gr24_","gr56_","gr51_","gr56_","gr52_","gr71_","gr53_","gr24-","rc8_","rc11_","gr24_","gr49_","gr72_","gr59_","gr52_","gr51_","gr49_","gr53_","gr55_","gr51_","gr52_","gr51_","gr71_","gr50_","gr53_","gr49_","gr50_","gr56_","gr51_","gr56_","gr49_","gr53_","gr55_","gr59_","gr56_","gr56_","gr51_","gr67_","gr49_","gr52_","gr49_","gr52_","gr56_","gr54_","gr71_","gr54_","gr56_","gr56_","gr50_","gr52_","gr53_","gr49_","gr63_","gr56_","gr49_","gr51_","gr52_","gr53_","gr24-","wt1|","wt8|","wt10|","wt10|","wt11|","wt10|","wt11|","wt8|","wt8|","wt10|","wt9|","wt8|","wt1+","gr27_","gr53_","gr56_","gr64_","gr54_","gr50_","gr72_","gr51_","gr50_","gr53_","gr63_","gr61_","gr50_","gr55_","gr54_","gr56_","gr49_","gr66_","gr56_","gr52_","gr71_","gr56_","gr49_","gr50_","gr55_","gr61_","gr52_","gr55_","gr56_","gr64_","gr50_","gr55_","gr52_","gr54_","gr50_","gr56_","gr51_","gr55_","gr52_","gr50_","gr57_","gr55_","gr69_","gr53_","gr59_","gr54_","gr54_","gr51_","gr54_","gr49_","gr68_","gr50_"],
+["gr65_","gr55_","gr50_","gr52_","gr54_","gr52_","gr50_","gr55_","gr69_","gr49_","gr56_","gr61_","gr49_","gr50_","gr72_","gr52_","gr56_","gr25-","rc16_","rc19_","gr26_","gr51_","gr53_","gr52_","gr52_","gr63_","gr49_","gr25-","rc16_","rc19_","gr25_","gr62_","gr49_","gr70_","gr54_","gr52_","gr52_","gr68_","gr52_","gr52_","gr57_","gr50_","gr49_","gr56_","gr68_","gr54_","gr49_","gr54_","gr52_","gr54_","gr52_","gr49_","gr53_","gr55_","gr49_","gr55_","gr68_","gr50_","gr64_","gr49_","gr54_","gr49_","gr54_","gr54_","gr49_","gr55_","gr69_","gr56_","gr65_","gr53_","gr58_","gr54_","gr53_","gr53_","gr69_","gr56_","gr55_","gr51_","gr33|","gr28_","gr31_","gr28_","gr30_","gr29_","gr29_","gr29_","gr29_","gr29_","gr28_","gr29_","gr29_","gr30_","gr33+","gr52_","gr52_","gr52_","gr56_","gr72_","gr56_","gr50_","gr54_","gr56_","gr50_","gr53_","gr56_","gr50_","gr53_","gr61_","gr50_","gr50_","gr52_","gr50_","gr51_","gr58_","gr49_","gr53_","gr54_","gr52_","gr50_","gr53_","gr58_","gr50_","gr63_","gr52_","gr59_","gr55_","gr69_","gr55_","gr55_","gr51_","gr54_","gr50_","gr49_","gr59_","gr54_","gr49_","gr50_","gr55_","gr56_","gr56_","gr51_","gr50_","gr55_","gr52_"],
+["gr53_","gr70_","gr53_","gr55_","gr65_","gr61_","gr63_","gr56_","gr56_","gr56_","gr55_","gr49_","gr52_","gr52_","gr49_","gr56_","gr60_","gr27-","rc16_","rc19_","gr25_","gr64_","gr69_","gr51_","gr51_","gr70_","gr53_","gr26-","rc17_","rc19_","gr24_","gr51_","gr54_","gr50_","gr52_","gr55_","gr52_","gr54_","gr72_","gr49_","gr53_","gr71_","gr51_","gr68_","gr52_","gr50_","gr49_","gr53_","gr65_","gr53_","gr51_","gr64_","gr55_","gr55_","gr56_","gr50_","gr52_","gr62_","gr71_","gr53_","gr68_","gr54_","gr54_","gr63_","gr70_","gr49_","gr54_","gr51_","gr54_","gr49_","gr52_","gr54_","gr49_","gr56_","gr50_","gr51_","gr52_","gr49_","gr52_","gr56_","gr53_","gr52_","gr51_","gr55_","gr56_","gr70_","gr53_","gr70_","gr52_","gr71_","gr51_","gr55_","gr51_","gr66_","gr50_","gr65_","gr54_","gr64_","gr51_","gr69_","gr51_","gr65_","gr56_","gr49_","gr53_","gr50_","gr68_","gr56_","gr51_","gr49_","gr58_","gr56_","gr65_","gr52_","gr54_","gr51_","gr65_","gr55_","gr54_","gr56_","gr67_","gr49_","gr59_","gr71_","gr50_","gr55_","gr50_","gr55_","gr61_","gr49_","gr52_","gr52_","gr55_","gr51_","gr54_","gr49_","gr55_","gr69_","gr49_","gr51_","gr49_","gr51_","gr51_","gr70_"],
+["gr51_","gr54_","gr52_","gr53_","gr49_","gr49_","gr66_","gr70_","gr49_","gr53_","gr54_","gr52_","gr72_","gr53_","gr69_","gr52_","gr51_","gr26-","rc16_","rc19_","gr27_","gr49_","gr51_","gr55_","gr49_","gr49_","gr50_","gr24-","rc16_","rc19_","gr27_","gr56_","gr53_","gr56_","gr54_","gr52_","gr56_","gr68_","gr49_","gr50_","gr55_","gr50_","gr60_","gr54_","gr61_","gr53_","gr51_","gr53_","gr49_","gr54_","gr54_","gr49_","gr70_","gr49_","gr52_","gr49_","gr67_","gr55_","gr33_","gr31|","gr30|","gr28|","gr28|","gr30|","gr31|","gr29|","gr28|","gr31|","gr31|","gr31|","gr28|","gr29|","gr29|","gr31|","gr28|","gr31|","gr28|","gr31|","gr28|","gr30|","gr29|","gr29|","gr31|","gr30|","gr30|","gr29|","gr31|","gr28|","gr28|","gr28|","gr31|","gr28|","gr30|","gr29|","gr30|","gr28|","gr29|","gr34-","gr50_","gr52_","gr58_","gr53_","gr50_","gr50_","gr56_","gr71_","gr50_","gr50_","gr53_","gr56_","gr49_","gr63_","gr49_","gr56_","gr54_","gr68_","gr49_","gr61_","gr56_","gr54_","gr51_","gr53_","gr55_","gr56_","gr50_","gr54_","gr56_","gr56_","gr62_","gr56_","gr69_","gr56_","gr49_","gr69_","gr51_","gr54_","gr68_","gr56_","gr50_","gr68_","gr56_","gr51_","gr49_","gr56_"],
+["gr53_","gr55_","gr63_","gr53_","gr62_","gr56_","gr51_","gr56_","gr50_","gr63_","gr61_","gr53_","gr53_","gr54_","gr50_","gr56_","gr53_","gr24-","rc17_","rc18_","gr25_","gr54_","gr55_","gr71_","gr54_","gr50_","gr54_","gr26-","rc17_","rc18_","gr26_","gr62_","gr55_","gr56_","gr51_","gr51_","gr58_","gr53_","gr57_","gr56_","gr56_","gr49_","gr53_","gr54_","gr54_","gr56_","gr55_","gr60_","gr51_","gr56_","gr53_","gr53_","gr49_","gr55_","gr55_","gr53_","gr56_","gr61_","gr26-","rc8_","rc20_","rc20_","rc20_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc20_","rc20_","rc21_","rc20_","rc21_","rc21_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc21_","rc20_","rc20_","rc21_","rc21_","rc21_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc21_","rc21_","rc10_","gr24_","gr51_","gr55_","gr55_","gr65_","gr54_","gr55_","gr51_","gr50_","gr49_","gr58_","gr56_","gr54_","gr58_","gr54_","gr69_","gr54_","gr51_","gr70_","gr70_","gr54_","gr72_","gr49_","gr50_","gr55_","gr51_","gr56_","gr51_","gr69_","gr49_","gr49_","gr50_","gr56_","gr51_","gr54_","gr49_","gr51_","gr54_","gr54_","gr55_","gr56_","gr52_","gr51_","gr71_","gr51_","gr56_","gr51_"],
+["gr49_","gr58_","gr54_","gr63_","gr55_","gr51_","gr49_","gr55_","gr49_","gr54_","gr51_","gr52_","gr50_","gr55_","gr49_","gr52_","gr49_","gr25-","rc16_","rc18_","gr26_","gr53_","gr49_","gr51_","gr50_","gr56_","gr65_","gr24-","rc17_","rc18_","gr25_","gr69_","gr52_","gr56_","gr53_","gr61_","gr56_","gr66_","gr54_","gr50_","gr56_","gr54_","gr55_","gr61_","gr49_","gr49_","gr52_","gr52_","gr56_","gr51_","gr64_","gr50_","gr50_","gr65_","gr55_","gr69_","gr52_","gr65_","gr24-","rc16_","rc24_","rc22_","rc23_","rc27_","rc24_","rc22_","rc23_","rc27_","rc25_","rc23_","rc22_","rc27_","rc25_","rc22_","rc23_","rc26_","rc25_","rc23_","rc22_","rc26_","rc24_","rc23_","rc23_","rc27_","rc24_","rc23_","rc22_","rc27_","rc25_","rc22_","rc23_","rc26_","rc25_","rc23_","rc23_","rc26_","rc19_","gr26_","gr52_","gr50_","gr49_","gr50_","gr49_","gr64_","gr68_","gr50_","gr55_","gr56_","gr51_","gr51_","gr53_","gr53_","gr51_","gr52_","gr51_","gr51_","gr56_","gr51_","gr53_","gr64_","gr55_","gr70_","gr54_","gr70_","gr61_","gr51_","gr51_","gr50_","gr49_","gr57_","gr52_","gr55_","gr53_","gr53_","gr63_","gr51_","gr56_","gr54_","gr68_","gr49_","gr55_","gr49_","gr58_","gr54_"],
+["gr56_","gr54_","gr57_","gr52_","gr62_","gr65_","gr53_","gr50_","gr56_","gr67_","gr49_","gr49_","gr49_","gr54_","gr50_","gr65_","gr49_","gr27-","rc17_","rc19_","gr27_","gr72_","gr56_","gr51_","gr52_","gr51_","gr53_","gr25-","rc16_","rc19_","gr27_","gr51_","gr52_","gr50_","gr50_","gr50_","gr67_","gr50_","gr64_","gr49_","gr55_","gr56_","gr55_","gr50_","gr52_","gr51_","gr52_","gr61_","gr56_","gr56_","gr55_","gr50_","gr55_","gr53_","gr53_","gr49_","gr56_","gr50_","gr27-","rc16_","rc19_","sn23_","sn20-","rc16_","rc19_","sn23_","sn21-","rc16_","rc18_","sn20_","sn20-","rc17_","rc19_","sn21_","sn20-","rc17_","rc19_","sn22_","sn23-","rc16_","rc18_","sn20_","sn22-","rc16_","rc18_","sn20_","sn23-","rc16_","rc19_","sn23_","sn20-","rc16_","rc19_","sn22_","sn23-","rc17_","rc18_","gr25_","gr54_","gr50_","gr54_","gr56_","gr49_","gr54_","gr68_","gr56_","gr61_","gr52_","gr71_","gr55_","gr50_","gr53_","gr53_","gr60_","gr54_","gr51_","gr54_","gr50_","gr49_","gr52_","gr60_","gr50_","gr58_","gr50_","gr56_","gr56_","gr63_","gr51_","gr66_","gr52_","gr49_","gr50_","gr62_","gr49_","gr62_","gr53_","gr49_","gr49_","gr53_","gr53_","gr56_","gr55_","gr53_","gr49_"],
+["gr50_","gr60_","gr55_","gr51_","gr49_","gr51_","gr71_","gr49_","gr61_","gr53_","gr55_","gr69_","gr56_","gr53_","gr68_","gr62_","gr51_","gr27-","rc16_","rc18_","gr24_","gr55_","gr54_","gr56_","gr54_","gr68_","gr56_","gr25-","rc17_","rc18_","gr24_","gr50_","gr54_","gr53_","gr51_","gr56_","gr50_","gr53_","gr49_","gr51_","gr53_","gr56_","gr64_","gr54_","gr72_","gr51_","gr61_","gr53_","gr59_","gr70_","gr49_","gr61_","gr49_","gr53_","gr49_","gr49_","gr49_","gr72_","gr26-","rc17_","rc18_","sn21|","sn21+","rc17_","rc19_","sn21|","sn22+","rc17_","rc19_","sn21|","sn22+","rc17_","rc19_","sn23|","sn20+","rc17_","rc18_","sn23|","sn20+","rc16_","rc18_","sn23|","sn21+","rc16_","rc18_","sn20|","sn20+","rc16_","rc18_","sn21|","sn22+","rc17_","rc18_","sn21|","sn21+","rc16_","rc18_","gr25_","gr67_","gr56_","gr50_","gr70_","gr71_","gr56_","gr51_","gr51_","gr51_","gr55_","gr69_","gr51_","gr72_","gr61_","gr49_","gr53_","gr54_","gr52_","gr50_","gr53_","gr66_","gr51_","gr55_","gr52_","gr53_","gr52_","gr51_","gr53_","gr53_","gr69_","gr55_","gr72_","gr50_","gr55_","gr51_","gr49_","gr50_","gr50_","gr49_","gr58_","gr54_","gr55_","gr58_","gr53_","gr51_","gr52_"],
+["gr54_","gr51_","gr49_","gr52_","gr65_","gr56_","gr55_","gr68_","gr64_","gr52_","gr53_","gr55_","gr56_","gr59_","gr49_","gr51_","gr56_","gr27-","rc16_","rc19_","gr25_","gr56_","gr65_","gr50_","gr62_","gr50_","gr52_","gr27-","rc17_","rc18_","gr26_","gr57_","gr51_","gr57_","gr56_","gr65_","gr55_","gr67_","gr56_","gr66_","gr57_","gr53_","gr49_","gr55_","gr53_","gr67_","gr56_","gr54_","gr56_","gr53_","gr55_","gr49_","gr64_","gr72_","gr51_","gr62_","gr50_","gr60_","gr26-","rc13_","rc15_","sa7_","sa17_","rc13_","rc15_","sa4_","sa6_","rc13_","rc15_","sa4_","sa10_","rc13_","rc14_","sa13_","sa0_","rc13_","rc14_","sa14_","sa2_","rc13_","rc15_","sa2_","sa12_","rc12_","rc15_","sa1_","sa2_","rc13_","rc15_","sa0_","sa3_","rc13_","rc14_","sa1_","sa5_","rc17_","rc19_","gr25_","gr53_","gr52_","gr50_","gr54_","gr50_","gr54_","gr64_","gr51_","gr57_","gr56_","gr51_","gr54_","gr56_","gr61_","gr55_","gr72_","gr49_","gr56_","gr50_","gr52_","gr49_","gr64_","gr49_","gr67_","gr56_","gr61_","gr56_","gr49_","gr69_","gr55_","gr54_","gr53_","gr55_","gr71_","gr54_","gr53_","gr52_","gr52_","gr63_","gr55_","gr70_","gr56_","gr53_","gr49_","gr57_","gr56_"],
+["gr62_","gr51_","gr55_","gr56_","gr69_","gr56_","gr53_","gr52_","gr51_","gr56_","gr51_","gr56_","gr49_","gr49_","gr55_","gr65_","gr56_","gr25-","rc16_","rc19_","gr24_","gr53_","gr50_","gr55_","gr53_","gr53_","gr55_","gr25-","rc17_","rc18_","gr24_","gr49_","gr51_","gr55_","gr64_","gr52_","gr56_","gr53_","gr52_","gr54_","gr52_","gr55_","gr49_","gr56_","gr50_","gr50_","gr53_","gr56_","gr49_","gr54_","gr49_","gr64_","gr60_","gr55_","gr67_","gr56_","gr50_","gr53_","gr27-","sa0_","sa1_","sa3_","sa4_","sa5_","sa4_","sa2_","sa17_","sa6_","sa8_","sa7_","sa4_","sa5_","sa10_","sa3_","sa4_","sa6_","sa10_","sa2_","sa19_","sa4_","sa2_","sa16_","sa6_","sa1_","sa7_","sa11_","sa16_","sa1_","sa5_","sa3_","sa3_","sa1_","sa15_","sa14_","sa3_","rc17_","rc18_","gr24_","gr56_","gr56_","gr54_","gr51_","gr52_","gr49_","gr53_","gr56_","gr55_","gr71_","gr49_","gr56_","gr51_","gr53_","gr49_","gr51_","gr49_","gr62_","gr55_","gr54_","gr54_","gr56_","gr50_","gr55_","gr51_","gr52_","gr53_","gr52_","gr62_","gr49_","gr64_","gr52_","gr55_","gr49_","gr61_","gr51_","gr53_","gr50_","gr52_","gr50_","gr54_","gr55_","gr56_","gr61_","gr50_","gr52_"],
+["gr56_","gr52_","gr57_","gr53_","gr55_","gr51_","gr56_","gr56_","gr52_","gr50_","gr49_","gr54_","gr51_","gr53_","gr55_","gr55_","gr50_","gr24-","rc16_","rc18_","gr24_","gr53_","gr49_","gr49_","gr66_","gr70_","gr49_","gr24-","rc17_","rc19_","gr27_","gr56_","gr62_","gr54_","gr53_","gr66_","gr55_","gr50_","gr54_","gr53_","gr54_","gr54_","gr65_","gr54_","gr72_","gr56_","gr68_","gr49_","gr52_","gr56_","gr71_","gr50_","gr52_","gr56_","gr56_","gr53_","gr56_","gr59_","gr25-","sa22_","sa4_","sa1_","sa10_","sa18_","sa3_","sa0_","sa5_","sa20_","sa4_","sa7_","sa9_","sa3_","sa13_","sa1_","sa14_","sa7_","sa2_","sa23_","sa7_","sa3_","sa21_","sa2_","sa3_","sa7_","sa6_","sa4_","sa7_","sa5_","sa7_","sa4_","sa19_","sa3_","sa12_","sa7_","sa1_","rc17_","rc19_","gr26_","gr50_","gr52_","gr49_","gr57_","gr49_","gr56_","gr56_","gr51_","gr52_","gr53_","gr49_","gr50_","gr55_","gr54_","gr53_","gr49_","gr52_","gr71_","gr56_","gr67_","gr56_","gr69_","gr49_","gr49_","gr54_","gr66_","gr51_","gr54_","gr49_","gr60_","gr68_","gr52_","gr60_","gr54_","gr49_","gr53_","gr51_","gr53_","gr72_","gr51_","gr55_","gr52_","gr52_","gr65_","gr53_","gr49_"],
+["gr53_","gr55_","gr63_","gr54_","gr53_","gr50_","gr49_","gr64_","gr53_","gr49_","gr54_","gr51_","gr54_","gr49_","gr65_","gr53_","gr56_","gr25-","rc17_","rc18_","gr27_","gr65_","gr53_","gr55_","gr55_","gr52_","gr52_","gr27-","rc16_","rc19_","gr26_","gr56_","gr52_","gr55_","gr53_","gr49_","gr66_","gr50_","gr54_","gr49_","gr55_","gr51_","gr49_","gr51_","gr56_","gr54_","gr52_","gr51_","gr66_","gr51_","gr57_","gr53_","gr50_","gr62_","gr51_","gr55_","gr53_","gr55_","gr24-","rc9_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc21_","rc20_","rc20_","rc20_","rc20_","rc21_","rc21_","rc21_","rc20_","rc21_","rc20_","rc21_","rc20_","rc21_","rc21_","rc20_","rc20_","rc21_","rc21_","rc20_","rc21_","rc21_","rc20_","rc21_","rc21_","rc20_","rc30_","rc18_","gr27_","gr53_","gr62_","gr53_","gr53_","gr54_","gr51_","gr50_","gr51_","gr49_","gr57_","gr50_","gr67_","gr52_","gr55_","gr53_","gr55_","gr51_","gr50_","gr55_","gr51_","gr49_","gr62_","gr56_","gr63_","gr56_","gr53_","gr50_","gr56_","gr54_","gr55_","gr60_","gr53_","gr52_","gr52_","gr50_","gr50_","gr62_","gr52_","gr51_","gr56_","gr62_","gr63_","gr49_","gr51_","gr49_","gr61_"],
+["gr53_","gr51_","gr56_","gr56_","gr49_","gr52_","gr49_","gr61_","gr52_","gr54_","gr51_","gr55_","gr49_","gr53_","gr53_","gr51_","gr56_","gr25-","rc17_","rc18_","gr24_","gr56_","gr56_","gr50_","gr50_","gr55_","gr55_","gr27-","rc17_","rc19_","gr24_","gr49_","gr52_","gr72_","gr49_","gr51_","gr50_","gr62_","gr52_","gr50_","gr55_","gr61_","gr49_","gr54_","gr56_","gr59_","gr55_","gr69_","gr51_","gr55_","gr54_","gr51_","gr52_","gr54_","gr52_","gr53_","gr49_","gr55_","gr25-","rc13_","rc22_","rc23_","rc22_","rc22_","rc22_","rc22_","rc22_","rc23_","rc22_","rc22_","rc23_","rc23_","rc22_","rc22_","rc22_","rc22_","rc23_","rc22_","rc23_","rc22_","rc23_","rc23_","rc23_","rc23_","rc23_","rc23_","rc22_","rc23_","rc23_","rc22_","rc22_","rc23_","rc23_","rc23_","rc22_","rc23_","rc14_","gr24_","gr50_","gr50_","gr49_","gr51_","gr49_","gr51_","gr51_","gr56_","gr54_","gr51_","gr51_","gr51_","gr68_","gr49_","gr55_","gr55_","gr53_","gr55_","gr50_","gr55_","gr55_","gr59_","gr53_","gr52_","gr67_","gr55_","gr49_","gr49_","gr53_","gr58_","gr54_","gr55_","gr56_","gr61_","gr56_","gr51_","gr56_","gr55_","gr60_","gr51_","gr54_","gr49_","gr63_","gr53_","gr72_","gr51_"],
+["gr56_","gr56_","gr54_","gr53_","gr49_","gr57_","gr53_","gr54_","gr50_","gr55_","gr64_","gr49_","gr53_","gr56_","gr67_","gr50_","gr59_","gr25-","rc16_","rc19_","gr24_","gr50_","gr64_","gr56_","gr53_","gr56_","gr57_","gr24-","rc17_","rc19_","gr27_","gr49_","gr64_","gr67_","gr49_","gr56_","gr54_","gr53_","gr71_","gr54_","gr53_","gr53_","gr49_","gr55_","gr56_","gr55_","gr51_","gr56_","gr55_","gr53_","gr55_","gr51_","gr59_","gr50_","gr51_","gr55_","gr52_","gr62_","gr32|","gr31_","gr28_","gr31_","gr29_","gr29_","gr31_","gr30_","gr31_","gr28_","gr29_","gr30_","gr29_","gr31_","gr30_","gr31_","gr29_","gr31_","gr29_","gr29_","gr30_","gr28_","gr29_","gr31_","gr31_","gr31_","gr28_","gr31_","gr30_","gr31_","gr29_","gr28_","gr30_","gr30_","gr31_","gr30_","gr31_","gr31_","gr28_","gr33+","gr54_","gr49_","gr66_","gr66_","gr56_","gr54_","gr67_","gr51_","gr51_","gr51_","gr53_","gr51_","gr53_","gr51_","gr52_","gr64_","gr52_","gr54_","gr67_","gr54_","gr51_","gr69_","gr49_","gr61_","gr53_","gr72_","gr49_","gr49_","gr54_","gr54_","gr52_","gr51_","gr56_","gr56_","gr58_","gr55_","gr55_","gr62_","gr53_","gr68_","gr53_","gr50_","gr54_","gr54_","gr56_","gr56_"],
+["gr53_","gr55_","gr71_","gr68_","gr62_","gr50_","gr64_","gr51_","gr54_","gr55_","gr53_","gr49_","gr66_","gr50_","gr50_","gr66_","gr49_","gr27-","rc16_","rc18_","gr26_","gr71_","gr54_","gr52_","gr54_","gr54_","gr51_","gr26-","rc16_","rc19_","gr27_","gr50_","gr54_","gr64_","gr53_","gr55_","gr56_","gr55_","gr56_","gr55_","gr51_","gr65_","gr56_","gr55_","gr50_","gr51_","gr49_","gr51_","gr69_","gr52_","gr52_","gr54_","gr62_","gr49_","gr56_","gr70_","gr54_","gr49_","gr60_","gr53_","gr62_","gr49_","gr70_","gr50_","gr54_","gr49_","gr55_","gr54_","gr65_","gr53_","gr52_","gr64_","gr55_","gr53_","gr54_","gr50_","gr65_","gr54_","gr59_","gr49_","gr49_","gr55_","gr52_","gr56_","gr55_","gr52_","gr69_","gr54_","gr53_","gr54_","gr56_","gr51_","gr61_","gr49_","gr50_","gr55_","gr53_","gr55_","gr54_","gr52_","gr50_","gr53_","gr50_","gr55_","gr50_","gr51_","gr56_","gr50_","gr56_","gr50_","gr49_","gr53_","gr51_","gr50_","gr54_","gr64_","gr56_","gr72_","gr53_","gr51_","gr52_","gr52_","gr55_","gr54_","gr51_","gr65_","gr65_","gr50_","gr52_","gr56_","gr51_","gr62_","gr50_","gr54_","gr68_","gr50_","gr52_","gr49_","gr53_","gr56_","gr61_","gr55_","gr49_","gr70_"],
+["gr54_","gr55_","gr52_","gr53_","gr55_","gr54_","gr49_","gr53_","gr58_","gr51_","gr65_","gr55_","gr56_","gr51_","gr51_","gr49_","gr49_","gr27-","rc16_","rc18_","gr24_","gr56_","gr58_","gr51_","gr69_","gr49_","gr53_","gr27-","rc16_","rc18_","gr27_","gr52_","gr55_","gr69_","gr69_","gr56_","gr62_","gr52_","gr55_","gr52_","gr55_","gr51_","gr55_","gr52_","gr53_","gr54_","gr49_","gr54_","gr54_","gr69_","gr53_","gr51_","gr63_","gr51_","gr50_","gr49_","gr54_","gr50_","gr56_","gr51_","gr71_","gr53_","gr53_","gr55_","gr63_","gr52_","gr57_","gr55_","gr52_","gr60_","gr50_","gr49_","gr51_","gr69_","gr56_","gr55_","gr56_","gr50_","gr50_","gr56_","gr50_","gr53_","gr71_","gr53_","gr53_","gr56_","gr54_","gr60_","gr62_","gr60_","gr55_","gr49_","gr50_","gr70_","gr55_","gr56_","gr55_","gr50_","gr65_","gr52_","gr57_","gr54_","gr71_","gr51_","gr55_","gr72_","gr52_","gr55_","gr51_","gr56_","gr54_","gr55_","gr70_","gr54_","gr52_","gr52_","gr50_","gr54_","gr53_","gr53_","gr53_","gr56_","gr49_","gr51_","gr53_","gr56_","gr61_","gr54_","gr54_","gr55_","gr67_","gr54_","gr62_","gr56_","gr71_","gr50_","gr58_","gr52_","gr60_","gr53_","gr70_","gr71_","gr53_","gr52_"],
+["gr49_","gr56_","gr52_","gr65_","gr54_","gr53_","gr55_","gr59_","gr52_","gr53_","gr54_","gr59_","gr55_","gr52_","gr54_","gr65_","gr53_","gr27-","rc17_","rc19_","gr24_","gr52_","gr59_","gr55_","gr52_","gr66_","gr71_","gr24-","rc16_","rc18_","gr27_","gr53_","gr51_","gr52_","gr56_","gr51_","gr49_","gr53_","gr52_","gr70_","gr50_","gr51_","gr54_","gr57_","gr56_","gr72_","gr50_","gr49_","gr58_","gr54_","gr50_","gr50_","gr52_","gr49_","gr50_","gr56_","gr53_","gr56_","gr53_","gr71_","gr56_","gr56_","gr54_","gr68_","gr52_","gr49_","gr55_","gr50_","gr52_","gr55_","gr53_","gr54_","gr55_","gr66_","gr50_","gr59_","gr56_","gr70_","gr50_","gr55_","gr55_","gr52_","gr70_","gr52_","gr55_","gr55_","gr53_","gr55_","gr54_","gr56_","gr62_","gr52_","gr56_","gr51_","gr55_","gr57_","gr52_","gr71_","gr49_","gr63_","gr54_","gr50_","gr49_","gr52_","gr51_","gr51_","gr49_","gr51_","gr64_","gr54_","gr69_","gr50_","gr51_","gr51_","gr54_","gr51_","gr56_","gr55_","gr50_","gr60_","gr54_","gr49_","gr58_","gr55_","gr56_","gr55_","gr51_","gr58_","gr68_","gr55_","gr54_","gr56_","gr55_","gr54_","gr56_","gr55_","gr55_","gr52_","gr51_","gr56_","gr55_","gr54_","gr51_","gr50_"],
+["gr55_","gr51_","gr65_","gr55_","gr49_","gr56_","gr59_","gr53_","gr53_","gr68_","gr50_","gr54_","gr54_","gr68_","gr51_","gr49_","gr51_","gr27-","rc17_","rc19_","gr27_","gr51_","gr59_","gr55_","gr49_","gr55_","gr56_","gr27-","rc16_","rc19_","gr27_","gr55_","gr49_","gr60_","gr63_","gr49_","gr49_","gr50_","gr55_","gr60_","gr52_","gr55_","gr53_","gr51_","gr52_","gr50_","gr54_","gr53_","gr49_","gr49_","gr58_","gr51_","gr55_","gr66_","gr56_","gr52_","gr67_","gr52_","gr49_","gr50_","gr59_","gr51_","gr56_","gr50_","gr51_","gr55_","gr57_","gr55_","gr72_","gr53_","gr55_","gr56_","gr49_","gr52_","gr51_","gr53_","gr57_","gr50_","gr52_","gr54_","gr55_","gr61_","gr50_","gr53_","gr54_","gr50_","gr49_","gr55_","gr61_","gr49_","gr53_","gr54_","gr71_","gr55_","gr56_","gr50_","gr52_","gr51_","gr53_","gr51_","gr55_","gr49_","gr49_","gr49_","gr70_","gr50_","gr61_","gr53_","gr53_","gr50_","gr53_","gr53_","gr51_","gr49_","gr68_","gr51_","gr68_","gr51_","gr54_","gr55_","gr61_","gr56_","gr52_","gr56_","gr67_","gr52_","gr51_","gr55_","gr53_","gr56_","gr53_","gr53_","gr53_","gr55_","gr63_","gr55_","gr50_","gr50_","gr49_","gr49_","gr49_","gr52_","gr58_","gr49_"],
+["gr55_","gr55_","gr49_","gr55_","gr49_","gr61_","gr53_","gr52_","gr53_","gr56_","gr54_","gr56_","gr62_","gr51_","gr49_","gr65_","gr52_","gr24-","rc17_","rc18_","gr25_","gr54_","gr56_","gr51_","gr54_","gr51_","gr49_","gr26-","rc17_","rc18_","gr26_","gr50_","gr51_","gr54_","gr50_","gr49_","gr54_","gr57_","gr56_","gr54_","gr52_","gr49_","gr60_","gr60_","gr49_","gr67_","gr51_","gr49_","gr51_","gr54_","gr55_","gr55_","gr62_","gr54_","gr68_","gr60_","gr56_","gr52_","gr53_","gr66_","gr54_","gr52_","gr53_","gr56_","gr53_","gr54_","gr62_","gr55_","gr50_","gr54_","gr54_","gr62_","gr50_","gr52_","gr53_","gr54_","gr50_","gr68_","gr56_","gr54_","gr65_","gr55_","gr56_","gr56_","gr49_","gr72_","gr52_","gr50_","gr66_","gr56_","gr51_","gr71_","gr55_","gr50_","gr51_","gr51_","gr55_","gr56_","gr54_","gr51_","gr53_","gr52_","gr55_","gr50_","gr56_","gr56_","gr57_","gr53_","gr51_","gr55_","gr72_","gr56_","gr62_","gr49_","gr53_","gr54_","gr52_","gr51_","gr55_","gr70_","gr51_","gr52_","gr53_","gr64_","gr56_","gr49_","gr53_","gr52_","gr56_","gr50_","gr56_","gr60_","gr63_","gr51_","gr67_","gr52_","gr53_","gr53_","gr56_","gr65_","gr68_","gr50_","gr51_","gr56_"],
+["gr51_","gr68_","gr54_","gr50_","gr54_","gr55_","gr53_","gr63_","gr52_","gr50_","gr50_","gr63_","gr55_","gr50_","gr50_","gr50_","gr56_","gr24-","rc17_","rc18_","gr25_","gr68_","gr51_","gr52_","gr49_","gr59_","gr51_","gr27-","rc16_","rc19_","gr27_","gr52_","gr55_","gr49_","gr49_","gr51_","gr55_","gr52_","gr54_","gr68_","gr51_","gr65_","gr50_","gr51_","gr54_","gr51_","gr58_","gr54_","gr55_","gr52_","gr63_","gr53_","gr50_","gr62_","gr54_","gr56_","gr52_","gr51_","gr56_","gr49_","gr50_","gr53_","gr51_","gr54_","gr50_","gr55_","gr56_","gr49_","gr56_","gr50_","gr51_","gr72_","gr50_","gr57_","gr54_","gr53_","gr53_","gr54_","gr53_","gr70_","gr54_","gr50_","gr59_","gr54_","gr50_","gr49_","gr52_","gr50_","gr55_","gr51_","gr50_","gr53_","gr56_","gr53_","gr56_","gr53_","gr52_","gr54_","gr50_","gr52_","gr72_","gr50_","gr67_","gr56_","gr56_","gr50_","gr52_","gr51_","gr66_","gr50_","gr52_","gr52_","gr52_","gr66_","gr51_","gr52_","gr65_","gr53_","gr70_","gr49_","gr72_","gr53_","gr54_","gr71_","gr53_","gr54_","gr49_","gr50_","gr54_","gr62_","gr55_","gr53_","gr55_","gr51_","gr54_","gr70_","gr54_","gr53_","gr54_","gr55_","gr55_","gr55_","gr54_","gr55_"],
+["gr57_","gr51_","gr54_","gr55_","gr56_","gr51_","gr50_","gr54_","gr49_","gr49_","gr54_","gr53_","gr65_","gr55_","gr60_","gr51_","gr55_","gr27-","rc16_","rc19_","gr26_","gr53_","gr52_","gr49_","gr51_","gr49_","gr52_","gr27-","rc16_","rc18_","gr24_","gr55_","gr54_","gr53_","gr52_","gr63_","gr54_","gr66_","gr50_","gr55_","gr50_","gr61_","gr56_","gr49_","gr69_","gr51_","gr51_","gr50_","gr55_","gr51_","gr51_","gr54_","gr50_","gr49_","gr54_","gr49_","gr54_","gr54_","gr52_","gr71_","gr55_","gr54_","gr67_","gr61_","gr50_","gr56_","gr53_","gr53_","gr51_","gr50_","gr54_","gr54_","gr57_","gr51_","gr62_","gr50_","gr56_","gr55_","gr53_","gr54_","gr54_","gr55_","gr58_","gr54_","gr55_","gr54_","gr50_","gr62_","gr66_","gr52_","gr56_","gr50_","gr49_","gr55_","gr63_","gr63_","gr53_","gr61_","gr49_","gr56_","gr55_","gr51_","gr52_","gr50_","gr56_","gr58_","gr56_","gr64_","gr50_","gr53_","gr66_","gr72_","gr53_","gr52_","gr52_","gr51_","gr51_","gr68_","gr50_","gr65_","gr52_","gr52_","gr55_","gr51_","gr59_","gr65_","gr54_","gr55_","gr55_","gr51_","gr49_","gr56_","gr51_","gr70_","gr54_","gr52_","gr54_","gr58_","gr52_","gr52_","gr52_","gr68_","gr51_","gr54_"],
+["gr51_","gr51_","gr49_","gr54_","gr54_","gr51_","gr70_","gr49_","gr54_","gr53_","gr49_","gr49_","gr52_","gr53_","gr56_","gr53_","gr72_","gr24-","rc17_","rc19_","gr26_","gr50_","gr51_","gr50_","gr51_","gr60_","gr52_","gr25-","rc13_","rc14_","gr24_","gr50_","gr56_","gr58_","gr50_","gr54_","gr49_","gr51_","gr52_","gr62_","gr55_","gr55_","gr54_","gr53_","gr52_","gr49_","gr70_","gr55_","gr65_","gr51_","gr51_","gr56_","gr56_","gr71_","gr51_","gr62_","gr56_","gr55_","gr55_","gr50_","gr52_","gr61_","gr53_","gr51_","gr52_","gr60_","gr54_","gr68_","gr51_","gr69_","gr54_","gr49_","gr71_","gr50_","gr71_","gr53_","gr68_","gr56_","gr54_","gr55_","gr65_","gr53_","gr52_","gr56_","gr49_","gr54_","gr54_","gr55_","gr52_","gr51_","gr54_","gr54_","gr51_","gr56_","gr56_","gr50_","gr56_","gr54_","gr69_","gr54_","gr60_","gr56_","gr59_","gr49_","gr70_","gr55_","gr51_","gr51_","gr51_","gr71_","gr50_","gr68_","gr56_","gr56_","gr49_","gr61_","gr50_","gr53_","gr53_","gr53_","gr55_","gr56_","gr55_","gr54_","gr58_","gr52_","gr53_","gr62_","gr66_","gr49_","gr56_","gr54_","gr60_","gr52_","gr52_","gr70_","gr53_","gr53_","gr50_","gr54_","gr49_","gr55_","gr49_","gr70_"],
+["gr55_","gr52_","gr49_","gr56_","gr50_","gr54_","gr55_","gr65_","gr49_","gr54_","gr52_","gr52_","gr71_","gr49_","gr54_","gr54_","gr53_","gr25-","rc17_","rc18_","gr26_","gr50_","gr55_","gr56_","gr51_","gr52_","gr69_","gr33|","gr29_","gr31_","gr35+","gr54_","gr52_","gr49_","gr52_","gr72_","gr65_","gr56_","gr52_","gr50_","gr50_","gr70_","gr68_","gr55_","gr68_","gr56_","gr50_","gr53_","gr54_","gr52_","gr54_","gr61_","gr50_","gr57_","gr54_","gr55_","gr56_","gr53_","gr51_","gr68_","gr51_","gr68_","gr65_","gr51_","gr57_","gr64_","gr51_","gr52_","gr55_","gr68_","gr53_","gr56_","gr51_","gr63_","gr56_","gr55_","gr49_","gr55_","gr65_","gr56_","gr55_","gr68_","gr50_","gr53_","gr56_","gr49_","gr56_","gr52_","gr60_","gr54_","gr52_","gr55_","gr62_","gr65_","gr50_","gr53_","gr62_","gr64_","gr53_","gr55_","gr53_","gr56_","gr56_","gr51_","gr51_","gr58_","gr54_","gr53_","gr52_","gr56_","gr68_","gr49_","gr54_","gr52_","gr50_","gr50_","gr53_","gr66_","gr53_","gr54_","gr56_","gr49_","gr72_","gr63_","gr49_","gr70_","gr54_","gr52_","gr49_","gr49_","gr50_","gr54_","gr50_","gr54_","gr55_","gr52_","gr50_","gr69_","gr56_","gr55_","gr55_","gr50_","gr50_","gr55_"],
+["gr53_","gr54_","gr52_","gr68_","gr50_","gr60_","gr54_","gr53_","gr59_","gr53_","gr55_","gr53_","gr68_","gr53_","gr70_","gr56_","gr52_","gr27-","rc17_","rc18_","gr27_","gr53_","gr58_","gr50_","gr49_","gr50_","gr53_","gr63_","gr49_","gr54_","gr67_","gr58_","gr52_","gr49_","gr50_","gr51_","gr54_","gr56_","gr50_","gr50_","gr53_","gr67_","gr66_","gr55_","gr69_","gr53_","gr56_","gr50_","gr54_","gr55_","gr70_","gr53_","gr65_","gr54_","gr55_","gr61_","gr55_","gr56_","gr54_","gr52_","gr50_","gr51_","gr55_","gr50_","gr49_","gr54_","gr52_","gr56_","gr49_","gr53_","gr49_","gr51_","gr54_","gr49_","gr64_","gr55_","gr54_","gr54_","gr54_","gr49_","gr55_","gr52_","gr60_","gr52_","gr52_","gr55_","gr56_","gr53_","gr52_","gr55_","gr49_","gr55_","gr50_","gr49_","gr54_","gr72_","gr54_","gr51_","gr56_","gr57_","gr51_","gr52_","gr51_","gr50_","gr71_","gr49_","gr49_","gr52_","gr54_","gr57_","gr55_","gr70_","gr55_","gr67_","gr54_","gr56_","gr54_","gr50_","gr52_","gr51_","gr56_","gr56_","gr56_","gr55_","gr50_","gr56_","gr49_","gr51_","gr50_","gr50_","gr56_","gr56_","gr52_","gr67_","gr49_","gr54_","gr55_","gr67_","gr54_","gr55_","gr70_","gr53_","gr52_","gr55_"],
+["gr55_","gr50_","gr52_","gr50_","gr55_","gr54_","gr51_","gr69_","gr52_","gr50_","gr50_","gr52_","gr49_","gr56_","gr55_","gr59_","gr54_","gr25-","rc16_","rc18_","gr27_","gr52_","gr50_","gr56_","gr62_","gr69_","gr54_","gr54_","gr52_","gr58_","gr51_","gr70_","gr54_","gr51_","gr52_","gr49_","gr71_","gr52_","gr53_","gr54_","gr54_","gr53_","gr56_","gr62_","gr55_","gr66_","gr56_","gr72_","gr56_","gr52_","gr49_","gr54_","gr53_","gr54_","gr54_","gr71_","gr53_","gr49_","gr49_","gr51_","gr66_","gr56_","gr54_","gr50_","gr68_","gr61_","gr56_","gr53_","gr55_","gr50_","gr59_","gr51_","gr56_","gr49_","gr56_","gr53_","gr53_","gr61_","gr61_","gr51_","gr50_","gr62_","gr50_","gr53_","gr68_","gr49_","gr53_","gr51_","gr50_","gr54_","gr55_","gr61_","gr55_","gr56_","gr60_","gr59_","gr50_","gr56_","gr71_","gr55_","gr70_","gr50_","gr52_","gr70_","gr50_","gr54_","gr52_","gr66_","gr65_","gr49_","gr53_","gr59_","gr51_","gr50_","gr71_","gr49_","gr59_","gr54_","gr56_","gr60_","gr55_","gr52_","gr64_","gr53_","gr59_","gr49_","gr54_","gr58_","gr54_","gr52_","gr49_","gr53_","gr52_","gr51_","gr56_","gr53_","gr50_","gr53_","gr51_","gr60_","gr69_","gr55_","gr56_","gr64_"],
+["gr52_","gr71_","gr63_","gr51_","gr49_","gr59_","gr53_","gr50_","gr51_","gr51_","gr53_","gr49_","gr71_","gr51_","gr50_","gr53_","gr50_","gr24-","rc17_","rc18_","gr26_","gr62_","gr72_","gr50_","gr50_","gr53_","gr54_","gr51_","gr56_","gr53_","gr54_","gr50_","gr51_","gr54_","gr66_","gr49_","gr54_","gr50_","gr55_","gr54_","gr71_","gr52_","gr53_","gr51_","gr50_","gr54_","gr50_","gr54_","gr70_","gr65_","gr56_","gr58_","gr54_","gr49_","gr50_","gr53_","gr49_","gr55_","gr51_","gr64_","gr51_","gr69_","gr55_","gr50_","gr50_","gr69_","gr56_","gr53_","gr58_","gr51_","gr51_","gr63_","gr49_","gr54_","gr56_","gr58_","gr52_","gr51_","gr53_","gr53_","gr56_","gr49_","gr52_","gr49_","gr50_","gr54_","gr56_","gr52_","gr55_","gr65_","gr52_","gr50_","gr60_","gr54_","gr52_","gr55_","gr56_","gr54_","gr50_","gr54_","gr53_","gr52_","gr50_","gr53_","gr51_","gr49_","gr71_","gr55_","gr53_","gr56_","gr52_","gr56_","gr50_","gr51_","gr51_","gr60_","gr53_","gr68_","gr65_","gr57_","gr53_","gr53_","gr56_","gr49_","gr53_","gr49_","gr60_","gr49_","gr53_","gr72_","gr55_","gr52_","gr64_","gr55_","gr69_","gr49_","gr52_","gr53_","gr56_","gr56_","gr54_","gr55_","gr53_","gr57_"],
+["gr51_","gr54_","gr54_","gr53_","gr63_","gr52_","gr54_","gr59_","gr50_","gr50_","gr56_","gr61_","gr54_","gr52_","gr56_","gr56_","gr50_","gr27-","rc17_","rc19_","gr27_","gr59_","gr51_","gr49_","gr53_","gr51_","gr53_","gr63_","gr53_","gr56_","gr66_","gr55_","gr59_","gr50_","gr51_","gr68_","gr49_","gr52_","gr54_","gr51_","gr54_","gr56_","gr58_","gr54_","gr53_","gr49_","gr54_","gr53_","gr54_","gr56_","gr51_","gr57_","gr51_","gr56_","gr53_","gr55_","gr68_","gr50_","gr70_","gr51_","gr52_","gr49_","gr51_","gr50_","gr51_","gr55_","gr52_","gr55_","gr50_","gr62_","gr49_","gr55_","gr49_","gr56_","gr64_","gr53_","gr52_","gr56_","gr64_","gr55_","gr49_","gr54_","gr49_","gr55_","gr68_","gr55_","gr49_","gr50_","gr67_","gr50_","gr65_","gr60_","gr51_","gr52_","gr54_","gr51_","gr49_","gr53_","gr49_","gr56_","gr50_","gr49_","gr55_","gr65_","gr52_","gr49_","gr49_","gr49_","gr50_","gr71_","gr53_","gr54_","gr51_","gr53_","gr51_","gr50_","gr52_","gr54_","gr65_","gr51_","gr58_","gr51_","gr72_","gr51_","gr56_","gr56_","gr53_","gr49_","gr63_","gr53_","gr56_","gr54_","gr49_","gr54_","gr56_","gr56_","gr53_","gr59_","gr61_","gr50_","gr55_","gr56_","gr53_","gr50_"],
+["gr53_","gr53_","gr64_","gr51_","gr51_","gr55_","gr68_","gr49_","gr55_","gr54_","gr58_","gr55_","gr53_","gr62_","gr54_","gr52_","gr52_","gr27-","rc16_","rc19_","gr26_","gr51_","gr53_","gr52_","gr54_","gr62_","gr53_","gr49_","gr51_","gr50_","gr49_","gr52_","gr54_","gr55_","gr49_","gr56_","gr49_","gr66_","gr50_","gr52_","gr52_","gr58_","gr55_","gr56_","gr49_","gr52_","gr52_","gr52_","gr49_","gr56_","gr49_","gr65_","gr54_","gr50_","gr53_","gr54_","gr55_","gr50_","gr56_","gr53_","gr55_","gr53_","gr55_","gr51_","gr54_","gr66_","gr52_","gr51_","gr62_","gr53_","gr52_","gr68_","gr71_","gr55_","gr56_","gr54_","gr69_","gr52_","gr52_","gr49_","gr53_","gr52_","gr50_","gr71_","gr51_","gr50_","gr56_","gr53_","gr54_","gr56_","gr54_","gr54_","gr50_","gr49_","gr65_","gr55_","gr53_","gr54_","gr51_","gr52_","gr51_","gr50_","gr49_","gr49_","gr51_","gr70_","gr51_","gr50_","gr55_","gr69_","gr56_","gr60_","gr56_","gr56_","gr55_","gr50_","gr55_","gr60_","gr55_","gr49_","gr53_","gr63_","gr55_","gr52_","gr52_","gr71_","gr55_","gr57_","gr52_","gr51_","gr69_","gr49_","gr55_","gr56_","gr49_","gr60_","gr53_","gr53_","gr50_","gr67_","gr49_","gr63_","gr63_","gr52_"],
+["gr50_","gr54_","gr55_","gr50_","gr51_","gr54_","gr56_","gr50_","gr67_","gr56_","gr52_","gr55_","gr54_","gr54_","gr55_","gr55_","gr50_","gr26-","rc16_","rc18_","gr24_","gr55_","gr68_","gr52_","gr55_","gr54_","gr53_","gr49_","gr50_","gr51_","gr57_","gr50_","gr51_","gr54_","gr66_","gr55_","gr54_","gr50_","gr53_","gr57_","gr56_","gr65_","gr52_","gr72_","gr54_","gr54_","gr51_","gr51_","gr71_","gr50_","gr52_","gr52_","gr61_","gr56_","gr51_","gr49_","gr64_","gr56_","gr50_","gr52_","gr50_","gr56_","gr54_","gr60_","gr52_","gr54_","gr56_","gr50_","gr72_","gr55_","gr53_","gr53_","gr53_","gr60_","gr55_","gr70_","gr54_","gr56_","gr58_","gr52_","gr51_","gr51_","gr56_","gr49_","gr55_","gr65_","gr53_","gr52_","gr56_","gr52_","gr51_","gr53_","gr58_","gr54_","gr55_","gr52_","gr52_","gr56_","gr58_","gr50_","gr49_","gr62_","gr49_","gr62_","gr49_","gr56_","gr53_","gr49_","gr69_","gr50_","gr52_","gr51_","gr55_","gr61_","gr55_","gr52_","gr56_","gr60_","gr50_","gr51_","gr71_","gr56_","gr55_","gr59_","gr49_","gr53_","gr51_","gr49_","gr51_","gr59_","gr54_","gr71_","gr50_","gr53_","gr56_","gr52_","gr68_","gr53_","gr71_","gr50_","gr60_","gr54_","gr50_","gr54_"],
+["gr66_","gr49_","gr49_","gr52_","gr72_","gr49_","gr50_","gr72_","gr54_","gr70_","gr54_","gr54_","gr55_","gr54_","gr50_","gr67_","gr50_","gr24-","rc17_","rc19_","gr24_","gr70_","gr50_","gr72_","gr54_","gr52_","gr52_","gr56_","gr50_","gr51_","gr51_","gr55_","gr52_","gr54_","gr63_","gr49_","gr55_","gr54_","gr54_","gr67_","gr52_","gr54_","gr56_","gr54_","gr52_","gr64_","gr52_","gr51_","gr55_","gr53_","gr50_","gr49_","gr49_","gr56_","gr63_","gr49_","gr55_","gr52_","gr52_","gr51_","gr54_","gr66_","gr55_","gr53_","gr53_","gr68_","gr56_","gr51_","gr54_","gr53_","gr61_","gr50_","gr49_","gr54_","gr54_","gr52_","gr49_","gr51_","gr50_","gr55_","gr60_","gr51_","gr56_","gr54_","gr63_","gr52_","gr71_","gr71_","gr64_","gr53_","gr55_","gr51_","gr51_","gr50_","gr62_","gr49_","gr54_","gr51_","gr52_","gr51_","gr52_","gr53_","gr55_","gr55_","gr53_","gr56_","gr55_","gr55_","gr52_","gr55_","gr51_","gr49_","gr49_","gr51_","gr66_","gr56_","gr53_","gr56_","gr51_","gr50_","gr56_","gr55_","gr54_","gr72_","gr54_","gr51_","gr56_","gr57_","gr53_","gr52_","gr59_","gr55_","gr49_","gr54_","gr52_","gr49_","gr49_","gr51_","gr51_","gr55_","gr56_","gr61_","gr55_","gr49_"],
+["gr52_","gr60_","gr55_","gr64_","gr50_","gr54_","gr50_","gr51_","gr56_","gr50_","gr56_","gr59_","gr49_","gr53_","gr70_","gr55_","gr68_","gr26-","rc17_","rc19_","gr24_","gr49_","gr53_","gr56_","gr60_","gr55_","gr67_","gr52_","gr50_","gr51_","gr54_","gr61_","gr55_","gr55_","gr72_","gr53_","gr54_","gr53_","gr52_","gr56_","gr54_","gr55_","gr61_","gr51_","gr51_","gr72_","gr55_","gr50_","gr51_","gr49_","gr52_","gr57_","gr58_","gr53_","gr56_","gr52_","gr54_","gr52_","gr54_","gr55_","gr51_","gr51_","gr49_","gr55_","gr49_","gr67_","gr51_","gr54_","gr49_","gr54_","gr49_","gr68_","gr60_","gr69_","gr53_","gr64_","gr52_","gr53_","gr51_","gr51_","gr56_","gr53_","gr53_","gr53_","gr53_","gr66_","gr55_","gr54_","gr55_","gr51_","gr52_","gr55_","gr52_","gr53_","gr55_","gr62_","gr50_","gr56_","gr58_","gr54_","gr68_","gr56_","gr50_","gr60_","gr49_","gr53_","gr49_","gr51_","gr52_","gr59_","gr51_","gr65_","gr53_","gr51_","gr49_","gr55_","gr55_","gr64_","gr50_","gr53_","gr56_","gr51_","gr53_","gr60_","gr60_","gr55_","gr64_","gr50_","gr50_","gr54_","gr52_","gr50_","gr54_","gr50_","gr54_","gr49_","gr53_","gr53_","gr56_","gr59_","gr52_","gr50_","gr62_","gr51_"],
+["gr57_","gr49_","gr49_","gr54_","gr64_","gr55_","gr55_","gr49_","gr56_","gr52_","gr49_","gr54_","gr68_","gr51_","gr52_","gr52_","gr50_","gr27-","rc17_","rc18_","gr27_","gr55_","gr53_","gr68_","gr49_","gr55_","gr50_","gr56_","gr51_","gr67_","gr52_","gr52_","gr53_","gr50_","gr52_","gr51_","gr49_","gr56_","gr56_","gr51_","gr71_","gr54_","gr49_","gr54_","gr58_","gr56_","gr52_","gr51_","gr49_","gr54_","gr50_","gr51_","gr55_","gr52_","gr56_","gr52_","gr51_","gr58_","gr55_","gr50_","gr49_","gr52_","gr53_","gr49_","gr55_","gr51_","gr50_","gr52_","gr49_","gr50_","gr52_","gr49_","gr54_","gr50_","gr52_","gr51_","gr64_","gr63_","gr55_","gr55_","gr55_","gr56_","gr54_","gr55_","gr55_","gr51_","gr54_","gr50_","gr53_","gr54_","gr56_","gr49_","gr55_","gr55_","gr49_","gr52_","gr49_","gr53_","gr52_","gr51_","gr56_","gr69_","gr52_","gr61_","gr51_","gr55_","gr58_","gr53_","gr53_","gr70_","gr69_","gr56_","gr61_","gr67_","gr53_","gr56_","gr54_","gr50_","gr54_","gr52_","gr55_","gr52_","gr52_","gr54_","gr51_","gr59_","gr49_","gr52_","gr66_","gr49_","gr56_","gr55_","gr55_","gr50_","gr54_","gr55_","gr72_","gr53_","gr52_","gr52_","gr49_","gr55_","gr54_","gr62_"],
+["gr49_","gr72_","gr55_","gr71_","gr52_","gr52_","gr51_","gr68_","gr55_","gr67_","gr51_","gr56_","gr55_","gr49_","gr52_","gr49_","gr51_","gr27-","rc17_","rc19_","gr25_","gr56_","gr52_","gr53_","gr52_","gr60_","gr49_","gr49_","gr53_","gr49_","gr59_","gr66_","gr53_","gr61_","gr60_","gr51_","gr49_","gr54_","gr58_","gr49_","gr63_","gr67_","gr53_","gr71_","gr50_","gr55_","gr50_","gr51_","gr50_","gr61_","gr51_","gr63_","gr50_","gr71_","gr53_","gr49_","gr56_","gr53_","gr56_","gr51_","gr64_","gr52_","gr67_","gr51_","gr65_","gr52_","gr53_","gr52_","gr54_","gr50_","gr53_","gr60_","gr54_","gr52_","gr59_","gr68_","gr53_","gr55_","gr52_","gr51_","gr49_","gr52_","gr50_","gr51_","gr54_","gr63_","gr49_","gr66_","gr58_","gr55_","gr52_","gr50_","gr50_","gr49_","gr54_","gr65_","gr51_","gr53_","gr49_","gr51_","gr50_","gr54_","gr51_","gr51_","gr52_","gr70_","gr52_","gr69_","gr55_","gr49_","gr49_","gr56_","gr55_","gr53_","gr68_","gr52_","gr49_","gr56_","gr49_","gr56_","gr52_","gr50_","gr50_","gr70_","gr51_","gr55_","gr52_","gr53_","gr53_","gr70_","gr57_","gr54_","gr69_","gr53_","gr52_","gr56_","gr50_","gr58_","gr56_","gr52_","gr63_","gr67_","gr49_","gr50_"],
+["gr60_","gr55_","gr56_","gr50_","gr52_","gr59_","gr52_","gr51_","gr69_","gr55_","gr60_","gr56_","gr52_","gr54_","gr54_","gr70_","gr54_","gr26-","rc16_","rc19_","gr26_","gr52_","gr72_","gr50_","gr55_","gr55_","gr55_","gr49_","gr56_","gr71_","gr52_","gr49_","gr49_","gr51_","gr49_","gr54_","gr70_","gr55_","gr66_","gr52_","gr54_","gr52_","gr49_","gr55_","gr51_","gr54_","gr51_","gr52_","gr54_","gr53_","gr49_","gr53_","gr57_","gr53_","gr56_","gr49_","gr51_","gr70_","gr50_","gr50_","gr55_","gr52_","gr51_","gr54_","gr53_","gr55_","gr60_","gr54_","gr55_","gr52_","gr67_","gr50_","gr53_","gr51_","gr49_","gr51_","gr51_","gr64_","gr51_","gr55_","gr54_","gr58_","gr50_","gr65_","gr50_","gr55_","gr59_","gr54_","gr54_","gr53_","gr56_","gr65_","gr54_","gr50_","gr52_","gr56_","gr56_","gr53_","gr51_","gr52_","gr56_","gr51_","gr56_","gr53_","gr52_","gr51_","gr53_","gr52_","gr49_","gr50_","gr54_","gr56_","gr52_","gr49_","gr54_","gr49_","gr50_","gr50_","gr65_","gr56_","gr49_","gr70_","gr57_","gr53_","gr52_","gr49_","gr65_","gr55_","gr50_","gr52_","gr53_","gr56_","gr56_","gr51_","gr56_","gr54_","gr51_","gr53_","gr51_","gr51_","gr54_","gr55_","gr53_","gr61_"],
+["gr50_","gr56_","gr54_","gr71_","gr49_","gr62_","gr51_","gr63_","gr50_","gr56_","gr53_","gr54_","gr49_","gr66_","gr50_","gr67_","gr52_","gr25-","rc17_","rc19_","gr26_","gr52_","gr59_","gr51_","gr56_","gr55_","gr53_","gr55_","gr51_","gr52_","gr71_","gr56_","gr55_","gr49_","gr49_","gr51_","gr56_","gr52_","gr55_","gr51_","gr51_","gr51_","gr53_","gr69_","gr53_","gr52_","gr53_","gr53_","gr53_","gr54_","gr50_","gr62_","gr53_","gr54_","gr57_","gr54_","gr53_","gr51_","gr51_","gr56_","gr71_","gr50_","gr60_","gr49_","gr52_","gr51_","gr55_","gr67_","gr54_","gr67_","gr55_","gr53_","gr52_","gr72_","gr55_","gr56_","gr49_","gr63_","gr52_","gr52_","gr53_","gr49_","gr54_","gr49_","gr50_","gr49_","gr51_","gr55_","gr57_","gr56_","gr51_","gr54_","gr51_","gr66_","gr53_","gr54_","gr56_","gr63_","gr56_","gr65_","gr67_","gr51_","gr51_","gr52_","gr51_","gr70_","gr54_","gr65_","gr52_","gr52_","gr54_","gr64_","gr52_","gr61_","gr53_","gr49_","gr55_","gr62_","gr55_","gr52_","gr52_","gr55_","gr55_","gr50_","gr53_","gr51_","gr56_","gr49_","gr51_","gr68_","gr61_","gr52_","gr55_","gr52_","gr65_","gr56_","gr50_","gr69_","gr55_","gr56_","gr54_","gr65_","gr51_","gr49_"],
+["gr59_","gr51_","gr63_","gr55_","gr59_","gr52_","gr56_","gr55_","gr54_","gr55_","gr70_","gr51_","gr71_","gr54_","gr63_","gr49_","gr53_","gr27-","rc17_","rc18_","gr24_","gr55_","gr51_","gr49_","gr56_","gr53_","gr52_","gr67_","gr64_","gr56_","gr52_","gr56_","gr49_","gr49_","gr52_","gr58_","gr62_","gr51_","gr51_","gr55_","gr64_","gr55_","gr56_","gr49_","gr56_","gr49_","gr49_","gr70_","gr54_","gr65_","gr55_","gr49_","gr54_","gr51_","gr56_","gr56_","gr53_","gr70_","gr51_","gr68_","gr56_","gr56_","gr55_","gr68_","gr54_","gr49_","gr53_","gr50_","gr65_","gr68_","gr49_","gr68_","gr49_","gr50_","gr54_","gr68_","gr56_","gr54_","gr55_","gr49_","gr55_","gr49_","gr54_","gr60_","gr64_","gr56_","gr72_","gr52_","gr50_","gr57_","gr54_","gr50_","gr56_","gr50_","gr54_","gr53_","gr50_","gr50_","gr49_","gr55_","gr51_","gr54_","gr51_","gr54_","gr49_","gr53_","gr62_","gr61_","gr56_","gr52_","gr55_","gr49_","gr55_","gr51_","gr55_","gr52_","gr49_","gr54_","gr59_","gr53_","gr54_","gr53_","gr53_","gr53_","gr55_","gr53_","gr65_","gr51_","gr54_","gr52_","gr56_","gr50_","gr52_","gr49_","gr56_","gr70_","gr56_","gr50_","gr50_","gr51_","gr55_","gr51_","gr51_","gr62_"],
+["gr54_","gr54_","gr52_","gr65_","gr50_","gr54_","gr50_","gr59_","gr49_","gr67_","gr54_","gr54_","gr54_","gr49_","gr54_","gr55_","gr65_","gr26-","rc16_","rc19_","gr24_","gr53_","gr49_","gr51_","gr63_","gr56_","gr49_","gr54_","gr53_","gr68_","gr50_","gr64_","gr53_","gr50_","gr52_","gr51_","gr66_","gr55_","gr52_","gr63_","gr51_","gr49_","gr51_","gr51_","gr52_","gr54_","gr55_","gr56_","gr51_","gr53_","gr56_","gr55_","gr51_","gr51_","gr52_","gr53_","gr61_","gr63_","gr52_","gr54_","gr50_","gr54_","gr53_","gr55_","gr66_","gr72_","gr55_","gr59_","gr49_","gr49_","gr49_","gr55_","gr52_","gr49_","gr51_","gr54_","gr72_","gr52_","gr51_","gr62_","gr52_","gr51_","gr49_","gr57_","gr50_","gr49_","gr51_","gr61_","gr50_","gr55_","gr50_","gr52_","gr71_","gr49_","gr50_","gr52_","gr55_","gr55_","gr54_","gr56_","gr55_","gr52_","gr50_","gr61_","gr53_","gr50_","gr55_","gr55_","gr53_","gr52_","gr50_","gr50_","gr53_","gr66_","gr53_","gr56_","gr56_","gr49_","gr53_","gr49_","gr62_","gr49_","gr51_","gr71_","gr50_","gr53_","gr51_","gr54_","gr68_","gr54_","gr64_","gr50_","gr53_","gr49_","gr53_","gr49_","gr53_","gr52_","gr69_","gr52_","gr56_","gr53_","gr53_","gr50_"],
+["gr52_","gr51_","gr53_","gr53_","gr61_","gr51_","gr50_","gr67_","gr66_","gr52_","gr55_","gr63_","gr54_","gr51_","gr55_","gr53_","gr55_","gr26-","rc16_","rc19_","gr27_","gr55_","gr68_","gr49_","gr53_","gr56_","gr55_","gr55_","gr51_","gr55_","gr51_","gr56_","gr60_","gr69_","gr55_","gr55_","gr50_","gr53_","gr51_","gr51_","gr53_","gr56_","gr54_","gr52_","gr56_","gr66_","gr71_","gr50_","gr50_","gr50_","gr53_","gr54_","gr70_","gr54_","gr63_","gr55_","gr51_","gr53_","gr52_","gr71_","gr69_","gr51_","gr52_","gr51_","gr58_","gr64_","gr53_","gr55_","gr54_","gr49_","gr55_","gr55_","gr55_","gr53_","gr49_","gr55_","gr49_","gr58_","gr57_","gr52_","gr52_","gr54_","gr49_","gr56_","gr65_","gr54_","gr52_","gr50_","gr49_","gr51_","gr53_","gr60_","gr54_","gr55_","gr72_","gr52_","gr55_","gr52_","gr71_","gr67_","gr49_","gr54_","gr54_","gr49_","gr72_","gr52_","gr55_","gr55_","gr50_","gr51_","gr55_","gr51_","gr53_","gr51_","gr55_","gr71_","gr52_","gr56_","gr53_","gr59_","gr54_","gr58_","gr56_","gr55_","gr54_","gr53_","gr71_","gr49_","gr52_","gr50_","gr51_","gr69_","gr51_","gr60_","gr56_","gr56_","gr49_","gr52_","gr56_","gr52_","gr50_","gr54_","gr56_","gr55_"],
+["gr53_","gr49_","gr49_","gr68_","gr54_","gr51_","gr49_","gr56_","gr50_","gr50_","gr63_","gr54_","gr54_","gr52_","gr58_","gr60_","gr56_","gr27-","rc16_","rc19_","gr26_","gr52_","gr54_","gr52_","gr49_","gr53_","gr53_","gr54_","gr50_","gr49_","gr53_","gr57_","gr53_","gr65_","gr55_","gr54_","gr63_","gr55_","gr56_","gr51_","gr54_","gr60_","gr49_","gr51_","gr53_","gr53_","gr64_","gr52_","gr60_","gr49_","gr70_","gr56_","gr53_","gr68_","gr71_","gr53_","gr56_","gr56_","gr53_","gr54_","gr56_","gr54_","gr68_","gr55_","gr52_","gr49_","gr55_","gr52_","gr55_","gr60_","gr50_","gr51_","gr56_","gr55_","gr55_","gr54_","gr59_","gr54_","gr49_","gr50_","gr54_","gr50_","gr52_","gr50_","gr53_","gr54_","gr51_","gr52_","gr55_","gr51_","gr56_","gr59_","gr54_","gr53_","gr55_","gr51_","gr50_","gr51_","gr51_","gr57_","gr55_","gr51_","gr56_","gr56_","gr51_","gr51_","gr55_","gr53_","gr49_","gr49_","gr70_","gr52_","gr56_","gr53_","gr61_","gr65_","gr60_","gr50_","gr50_","gr56_","gr52_","gr56_","gr54_","gr53_","gr51_","gr52_","gr53_","gr53_","gr56_","gr55_","gr50_","gr50_","gr54_","gr51_","gr49_","gr51_","gr52_","gr49_","gr59_","gr50_","gr53_","gr54_","gr54_","gr60_"],
+["gr49_","gr49_","gr50_","gr53_","gr67_","gr54_","gr69_","gr49_","gr49_","gr54_","gr55_","gr52_","gr71_","gr69_","gr55_","gr51_","gr53_","gr27-","rc17_","rc18_","gr26_","gr52_","gr53_","gr67_","gr52_","gr56_","gr66_","gr52_","gr49_","gr51_","gr49_","gr49_","gr50_","gr54_","gr50_","gr54_","gr49_","gr68_","gr51_","gr56_","gr69_","gr54_","gr68_","gr49_","gr67_","gr71_","gr51_","gr55_","gr56_","gr57_","gr50_","gr53_","gr49_","gr54_","gr53_","gr56_","gr52_","gr56_","gr53_","gr51_","gr52_","gr50_","gr55_","gr68_","gr49_","gr52_","gr53_","gr53_","gr54_","gr51_","gr52_","gr52_","gr49_","gr54_","gr52_","gr51_","gr54_","gr67_","gr51_","gr56_","gr52_","gr56_","gr51_","gr54_","gr54_","gr50_","gr71_","gr58_","gr51_","gr49_","gr50_","gr55_","gr55_","gr50_","gr49_","gr51_","gr72_","gr52_","gr51_","gr56_","gr50_","gr51_","gr56_","gr52_","gr67_","gr56_","gr55_","gr50_","gr56_","gr55_","gr71_","gr54_","gr54_","gr56_","gr55_","gr52_","gr50_","gr63_","gr53_","gr50_","gr49_","gr52_","gr51_","gr65_","gr49_","gr51_","gr53_","gr56_","gr54_","gr61_","gr53_","gr49_","gr53_","gr53_","gr56_","gr51_","gr69_","gr51_","gr54_","gr54_","gr49_","gr53_","gr61_","gr66_"],
+["gr56_","gr57_","gr54_","gr64_","gr53_","gr69_","gr55_","gr55_","gr55_","gr55_","gr55_","gr56_","gr49_","gr53_","gr69_","gr51_","gr51_","gr27-","rc17_","rc19_","gr26_","gr71_","gr50_","gr54_","gr54_","gr56_","gr55_","gr56_","gr58_","gr60_","gr71_","gr51_","gr49_","gr52_","gr49_","gr49_","gr55_","gr52_","gr59_","gr49_","gr52_","gr53_","gr55_","gr52_","gr50_","gr49_","gr49_","gr50_","gr56_","gr66_","gr50_","gr51_","gr58_","gr51_","gr72_","gr55_","gr55_","gr54_","gr52_","gr55_","gr49_","gr52_","gr51_","gr65_","gr49_","gr56_","gr54_","gr55_","gr49_","gr61_","gr51_","gr56_","gr56_","gr51_","gr49_","gr62_","gr49_","gr54_","gr55_","gr71_","gr52_","gr55_","gr62_","gr52_","gr51_","gr49_","gr50_","gr53_","gr55_","gr52_","gr53_","gr51_","gr57_","gr54_","gr52_","gr52_","gr49_","gr69_","gr56_","gr51_","gr50_","gr55_","gr54_","gr53_","gr51_","gr50_","gr55_","gr53_","gr64_","gr52_","gr49_","gr56_","gr71_","gr60_","gr52_","gr58_","gr52_","gr55_","gr54_","gr56_","gr53_","gr69_","gr56_","gr52_","gr55_","gr49_","gr55_","gr52_","gr55_","gr52_","gr52_","gr67_","gr50_","gr50_","gr60_","gr63_","gr70_","gr51_","gr64_","gr49_","gr62_","gr52_","gr54_","gr72_"],
+["gr49_","gr52_","gr54_","gr54_","gr52_","gr55_","gr54_","gr64_","gr52_","gr70_","gr55_","gr51_","gr52_","gr53_","gr54_","gr50_","gr53_","gr26-","rc16_","rc18_","gr26_","gr54_","gr53_","gr54_","gr55_","gr53_","gr53_","gr50_","gr59_","gr52_","gr54_","gr52_","gr51_","gr52_","gr67_","gr54_","gr51_","gr56_","gr49_","gr54_","gr49_","gr57_","gr49_","gr63_","gr49_","gr50_","gr56_","gr61_","gr50_","gr53_","gr54_","gr68_","gr64_","gr52_","gr50_","gr58_","gr56_","gr56_","gr52_","gr56_","gr55_","gr54_","gr50_","gr54_","gr52_","gr53_","gr52_","gr52_","gr49_","gr50_","gr56_","gr57_","gr54_","gr53_","gr54_","gr56_","gr61_","gr49_","gr53_","gr53_","gr55_","gr55_","gr52_","gr69_","gr54_","gr51_","gr50_","gr52_","gr49_","gr53_","gr55_","gr60_","gr51_","gr49_","gr56_","gr53_","gr60_","gr56_","gr55_","gr71_","gr54_","gr54_","gr49_","gr49_","gr50_","gr50_","gr71_","gr54_","gr49_","gr49_","gr53_","gr51_","gr51_","gr50_","gr54_","gr50_","gr59_","gr51_","gr53_","gr58_","gr56_","gr51_","gr53_","gr53_","gr54_","gr70_","gr50_","gr49_","gr59_","gr52_","gr54_","gr55_","gr51_","gr50_","gr54_","gr55_","gr53_","gr72_","gr50_","gr50_","gr51_","gr50_","gr49_","gr54_"],
+["gr70_","gr63_","gr50_","gr53_","gr55_","gr52_","gr68_","gr55_","gr55_","gr50_","gr54_","gr51_","gr56_","gr52_","gr56_","gr50_","gr50_","gr26-","rc17_","rc19_","gr26_","gr56_","gr54_","gr50_","gr55_","gr56_","gr49_","gr51_","gr69_","gr52_","gr56_","gr54_","gr56_","gr61_","gr50_","gr54_","gr51_","gr63_","gr53_","gr56_","gr53_","gr50_","gr67_","gr55_","gr50_","gr51_","gr72_","gr57_","gr56_","gr56_","gr62_","gr56_","gr50_","gr56_","gr49_","gr50_","gr57_","gr57_","gr52_","gr49_","gr54_","gr64_","gr50_","gr51_","gr49_","gr52_","gr53_","gr59_","gr54_","gr51_","gr50_","gr54_","gr50_","gr52_","gr51_","gr64_","gr50_","gr51_","gr52_","gr53_","gr53_","gr56_","gr55_","gr56_","gr53_","gr56_","gr56_","gr55_","gr66_","gr51_","gr49_","gr68_","gr54_","gr52_","gr71_","gr54_","gr50_","gr61_","gr51_","gr54_","gr56_","gr56_","gr66_","gr50_","gr55_","gr54_","gr54_","gr62_","gr50_","gr52_","gr51_","gr54_","gr49_","gr65_","gr51_","gr53_","gr55_","gr50_","gr50_","gr49_","gr50_","gr54_","gr58_","gr53_","gr54_","gr50_","gr56_","gr53_","gr50_","gr54_","gr53_","gr54_","gr65_","gr54_","gr62_","gr51_","gr51_","gr51_","gr52_","gr49_","gr49_","gr55_","gr61_","gr52_"],
+["gr53_","gr52_","gr50_","gr72_","gr72_","gr53_","gr55_","gr49_","gr57_","gr51_","gr54_","gr50_","gr53_","gr50_","gr60_","gr50_","gr49_","gr26-","rc16_","rc18_","gr26_","gr70_","gr53_","gr50_","gr54_","gr56_","gr54_","gr49_","gr56_","gr51_","gr51_","gr56_","gr64_","gr55_","gr52_","gr55_","gr64_","gr49_","gr55_","gr54_","gr56_","gr49_","gr53_","gr54_","gr51_","gr50_","gr51_","gr53_","gr64_","gr54_","gr50_","gr53_","gr66_","gr55_","gr55_","gr53_","gr64_","gr54_","gr51_","gr71_","gr54_","gr56_","gr60_","gr49_","gr50_","gr52_","gr50_","gr52_","gr71_","gr55_","gr51_","gr72_","gr54_","gr56_","gr56_","gr54_","gr56_","gr52_","gr61_","gr52_","gr53_","gr51_","gr53_","gr53_","gr49_","gr49_","gr52_","gr62_","gr49_","gr54_","gr51_","gr50_","gr51_","gr55_","gr56_","gr55_","gr51_","gr50_","gr51_","gr71_","gr54_","gr54_","gr50_","gr56_","gr51_","gr56_","gr61_","gr52_","gr61_","gr55_","gr51_","gr49_","gr66_","gr50_","gr51_","gr50_","gr55_","gr68_","gr60_","gr52_","gr50_","gr55_","gr54_","gr66_","gr63_","gr54_","gr55_","gr50_","gr60_","gr50_","gr63_","gr54_","gr52_","gr54_","gr52_","gr52_","gr55_","gr50_","gr70_","gr54_","gr57_","gr52_","gr60_","gr51_"],
+["gr55_","gr50_","gr53_","gr52_","gr53_","gr49_","gr56_","gr56_","gr50_","gr49_","gr53_","gr56_","gr66_","gr55_","gr49_","gr59_","gr51_","gr27-","rc16_","rc19_","gr24_","gr71_","gr49_","gr54_","gr51_","gr53_","gr50_","gr55_","gr52_","gr49_","gr64_","gr50_","gr66_","gr51_","gr50_","gr51_","gr50_","gr55_","gr55_","gr56_","gr50_","gr53_","gr71_","gr51_","gr69_","gr49_","gr55_","gr49_","gr67_","gr52_","gr57_","gr53_","gr54_","gr49_","gr50_","gr53_","gr54_","gr49_","gr58_","gr52_","gr54_","gr56_","gr55_","gr55_","gr53_","gr61_","gr51_","gr56_","gr54_","gr70_","gr57_","gr54_","gr56_","gr50_","gr60_","gr59_","gr55_","gr53_","gr56_","gr52_","gr49_","gr55_","gr55_","gr52_","gr50_","gr53_","gr53_","gr50_","gr72_","gr71_","gr53_","gr71_","gr55_","gr56_","gr50_","gr49_","gr55_","gr49_","gr70_","gr50_","gr49_","gr54_","gr55_","gr49_","gr70_","gr56_","gr52_","gr56_","gr56_","gr49_","gr68_","gr52_","gr54_","gr52_","gr56_","gr49_","gr53_","gr50_","gr52_","gr52_","gr50_","gr53_","gr51_","gr54_","gr56_","gr57_","gr56_","gr72_","gr56_","gr70_","gr69_","gr49_","gr68_","gr56_","gr71_","gr49_","gr51_","gr55_","gr72_","gr50_","gr56_","gr63_","gr52_","gr50_"],
+["gr51_","gr49_","gr53_","gr51_","gr55_","gr56_","gr55_","gr51_","gr50_","gr69_","gr52_","gr60_","gr56_","gr52_","gr49_","gr52_","gr72_","gr27-","rc17_","rc18_","gr26_","gr51_","gr51_","gr55_","gr55_","gr64_","gr55_","gr50_","gr56_","gr71_","gr55_","gr53_","gr55_","gr56_","gr52_","gr50_","gr56_","gr56_","gr52_","gr55_","gr50_","gr62_","gr56_","gr54_","gr56_","gr56_","gr69_","gr61_","gr56_","gr52_","gr52_","gr55_","gr55_","gr55_","gr50_","gr50_","gr59_","gr49_","gr49_","gr63_","gr55_","gr71_","gr69_","gr53_","gr51_","gr56_","gr71_","gr54_","gr49_","gr49_","gr53_","gr72_","gr49_","gr49_","gr56_","gr54_","gr54_","gr53_","gr53_","gr52_","gr55_","gr53_","gr53_","gr54_","gr55_","gr60_","gr53_","gr66_","gr54_","gr52_","gr54_","gr49_","gr53_","gr65_","gr54_","gr51_","gr53_","gr57_","gr53_","gr64_","gr49_","gr51_","gr57_","gr55_","gr72_","gr52_","gr51_","gr50_","gr60_","gr51_","gr56_","gr56_","gr69_","gr55_","gr49_","gr50_","gr55_","gr51_","gr59_","gr55_","gr56_","gr49_","gr55_","gr49_","gr67_","gr52_","gr51_","gr53_","gr55_","gr52_","gr55_","gr54_","gr56_","gr54_","gr49_","gr51_","gr61_","gr49_","gr49_","gr53_","gr49_","gr51_","gr54_","gr65_"],
+["gr51_","gr58_","gr56_","gr52_","gr54_","gr51_","gr52_","gr50_","gr49_","gr54_","gr51_","gr54_","gr55_","gr56_","gr66_","gr53_","gr56_","gr26-","rc16_","rc19_","gr26_","gr50_","gr51_","gr60_","gr50_","gr56_","gr51_","gr52_","gr53_","gr51_","gr71_","gr56_","gr56_","gr54_","gr58_","gr51_","gr52_","gr52_","gr64_","gr66_","gr49_","gr53_","gr50_","gr56_","gr51_","gr53_","gr53_","gr50_","gr65_","gr53_","gr67_","gr52_","gr53_","gr56_","gr49_","gr67_","gr54_","gr63_","gr64_","gr49_","gr49_","gr54_","gr52_","gr60_","gr68_","gr52_","gr56_","gr54_","gr49_","gr55_","gr55_","gr55_","gr57_","gr53_","gr52_","gr55_","gr54_","gr52_","gr52_","gr53_","gr56_","gr59_","gr55_","gr50_","gr50_","gr55_","gr50_","gr54_","gr50_","gr56_","gr56_","gr50_","gr52_","gr49_","gr68_","gr53_","gr55_","gr51_","gr56_","gr56_","gr62_","gr50_","gr50_","gr49_","gr56_","gr54_","gr50_","gr51_","gr49_","gr52_","gr53_","gr52_","gr55_","gr51_","gr53_","gr54_","gr62_","gr55_","gr62_","gr55_","gr52_","gr50_","gr59_","gr49_","gr54_","gr53_","gr63_","gr51_","gr65_","gr67_","gr52_","gr70_","gr50_","gr63_","gr56_","gr49_","gr62_","gr49_","gr59_","gr53_","gr51_","gr61_","gr50_","gr49_"],
+["gr53_","gr52_","gr55_","gr55_","gr49_","gr49_","gr54_","gr69_","gr54_","gr53_","gr49_","gr54_","gr55_","gr51_","gr53_","gr55_","gr51_","gr27-","rc17_","rc19_","gr24_","gr61_","gr49_","gr54_","gr60_","gr53_","gr71_","gr52_","gr52_","gr56_","gr50_","gr51_","gr51_","gr62_","gr52_","gr54_","gr52_","gr68_","gr49_","gr49_","gr55_","gr49_","gr67_","gr55_","gr56_","gr50_","gr55_","gr55_","gr52_","gr71_","gr54_","gr51_","gr55_","gr53_","gr54_","gr56_","gr49_","gr50_","gr54_","gr56_","gr52_","gr51_","gr53_","gr51_","gr55_","gr49_","gr52_","gr57_","gr54_","gr56_","gr55_","gr50_","gr56_","gr55_","gr56_","gr62_","gr64_","gr51_","gr68_","gr53_","gr52_","gr51_","gr68_","gr49_","gr49_","gr53_","gr61_","gr55_","gr53_","gr56_","gr49_","gr50_","gr51_","gr72_","gr52_","gr55_","gr59_","gr54_","gr55_","gr50_","gr71_","gr53_","gr64_","gr56_","gr56_","gr70_","gr56_","gr50_","gr63_","gr52_","gr52_","gr57_","gr52_","gr49_","gr53_","gr68_","gr50_","gr55_","gr56_","gr52_","gr56_","gr72_","gr55_","gr72_","gr50_","gr54_","gr53_","gr57_","gr54_","gr52_","gr54_","gr56_","gr64_","gr51_","gr53_","gr51_","gr54_","gr54_","gr52_","gr60_","gr53_","gr55_","gr56_","gr49_"],
+["gr50_","gr55_","gr49_","gr61_","gr58_","gr50_","gr54_","gr53_","gr51_","gr56_","gr56_","gr52_","gr56_","gr62_","gr50_","gr64_","gr56_","gr27-","rc16_","rc19_","gr27_","gr51_","gr53_","gr51_","gr53_","gr55_","gr50_","gr58_","gr58_","gr51_","gr54_","gr55_","gr56_","gr55_","gr49_","gr51_","gr49_","gr55_","gr56_","gr52_","gr52_","gr58_","gr52_","gr70_","gr53_","gr55_","gr51_","gr53_","gr50_","gr51_","gr61_","gr52_","gr63_","gr52_","gr56_","gr49_","gr50_","gr50_","gr52_","gr54_","gr71_","gr56_","gr72_","gr50_","gr70_","gr56_","gr60_","gr54_","gr56_","gr52_","gr53_","gr49_","gr53_","gr70_","gr52_","gr52_","gr49_","gr49_","gr54_","gr70_","gr67_","gr53_","gr53_","gr58_","gr53_","gr55_","gr54_","gr52_","gr71_","gr54_","gr50_","gr55_","gr51_","gr55_","gr61_","gr50_","gr50_","gr50_","gr50_","gr55_","gr54_","gr51_","gr52_","gr50_","gr54_","gr50_","gr55_","gr72_","gr53_","gr52_","gr53_","gr53_","gr51_","gr56_","gr49_","gr53_","gr50_","gr50_","gr56_","gr52_","gr59_","gr59_","gr58_","gr54_","gr55_","gr55_","gr54_","gr56_","gr54_","gr54_","gr51_","gr68_","gr51_","gr51_","gr56_","gr57_","gr53_","gr56_","gr53_","gr49_","gr64_","gr72_","gr55_","gr50_"],
+["gr58_","gr52_","gr56_","gr53_","gr55_","gr55_","gr52_","gr50_","gr54_","gr49_","gr54_","gr57_","gr49_","gr56_","gr49_","gr51_","gr49_","gr25-","rc17_","rc19_","gr26_","gr61_","gr54_","gr53_","gr52_","gr55_","gr54_","gr55_","gr50_","gr54_","gr52_","gr51_","gr49_","gr57_","gr50_","gr51_","gr67_","gr53_","gr69_","gr52_","gr72_","gr49_","gr53_","gr50_","gr51_","gr58_","gr56_","gr51_","gr51_","gr64_","gr55_","gr63_","gr51_","gr55_","gr56_","gr55_","gr50_","gr55_","gr59_","gr59_","gr52_","gr53_","gr53_","gr50_","gr55_","gr56_","gr56_","gr53_","gr54_","gr60_","gr56_","gr52_","gr50_","gr50_","gr55_","gr56_","gr52_","gr54_","gr50_","gr56_","gr52_","gr55_","gr50_","gr53_","gr54_","gr51_","gr53_","gr53_","gr55_","gr49_","gr50_","gr59_","gr68_","gr53_","gr49_","gr69_","gr52_","gr56_","gr56_","gr61_","gr49_","gr53_","gr54_","gr50_","gr51_","gr52_","gr61_","gr52_","gr52_","gr59_","gr56_","gr50_","gr61_","gr56_","gr49_","gr55_","gr64_","gr56_","gr53_","gr49_","gr68_","gr52_","gr54_","gr49_","gr52_","gr54_","gr56_","gr55_","gr56_","gr49_","gr52_","gr51_","gr59_","gr54_","gr64_","gr52_","gr51_","gr56_","gr69_","gr52_","gr52_","gr57_","gr56_","gr66_"],
+["gr53_","gr50_","gr50_","gr55_","gr49_","gr55_","gr64_","gr50_","gr56_","gr56_","gr68_","gr53_","gr51_","gr49_","gr50_","gr53_","gr60_","gr26-","rc17_","rc19_","gr24_","gr49_","gr53_","gr52_","gr50_","gr68_","gr49_","gr50_","gr51_","gr56_","gr60_","gr55_","gr52_","gr53_","gr55_","gr53_","gr50_","gr62_","gr71_","gr49_","gr51_","gr61_","gr54_","gr53_","gr50_","gr53_","gr55_","gr49_","gr63_","gr55_","gr54_","gr53_","gr52_","gr70_","gr54_","gr49_","gr65_","gr50_","gr49_","gr53_","gr49_","gr49_","gr51_","gr49_","gr67_","gr49_","gr63_","gr55_","gr50_","gr55_","gr65_","gr52_","gr61_","gr52_","gr50_","gr67_","gr56_","gr50_","gr72_","gr50_","gr49_","gr51_","gr51_","gr66_","gr51_","gr59_","gr49_","gr51_","gr55_","gr65_","gr51_","gr54_","gr54_","gr58_","gr54_","gr49_","gr56_","gr62_","gr50_","gr55_","gr65_","gr49_","gr54_","gr53_","gr55_","gr59_","gr67_","gr54_","gr61_","gr49_","gr68_","gr56_","gr58_","gr50_","gr52_","gr68_","gr50_","gr50_","gr56_","gr50_","gr68_","gr50_","gr49_","gr67_","gr51_","gr53_","gr51_","gr54_","gr53_","gr61_","gr65_","gr52_","gr55_","gr69_","gr55_","gr51_","gr55_","gr52_","gr54_","gr62_","gr49_","gr56_","gr67_","gr51_"],
+["gr51_","gr49_","gr56_","gr60_","gr56_","gr50_","gr50_","gr63_","gr56_","gr51_","gr50_","gr70_","gr55_","gr50_","gr52_","gr56_","gr50_","gr25-","rc17_","rc18_","gr25_","gr57_","gr50_","gr70_","gr55_","gr55_","gr68_","gr52_","gr52_","gr49_","gr54_","gr52_","gr50_","gr50_","gr56_","gr49_","gr53_","gr51_","gr56_","gr49_","gr52_","gr54_","gr54_","gr54_","gr50_","gr63_","gr56_","gr71_","gr53_","gr54_","gr56_","gr69_","gr50_","gr55_","gr49_","gr55_","gr55_","gr58_","gr54_","gr54_","gr55_","gr52_","gr52_","gr50_","gr50_","gr51_","gr51_","gr51_","gr50_","gr62_","gr56_","gr64_","gr55_","gr51_","gr53_","gr52_","gr60_","gr54_","gr56_","gr52_","gr56_","gr49_","gr56_","gr66_","gr54_","gr62_","gr52_","gr53_","gr53_","gr55_","gr67_","gr62_","gr49_","gr55_","gr69_","gr53_","gr72_","gr54_","gr56_","gr50_","gr54_","gr49_","gr52_","gr53_","gr49_","gr56_","gr56_","gr54_","gr61_","gr54_","gr50_","gr53_","gr50_","gr52_","gr60_","gr52_","gr65_","gr55_","gr49_","gr56_","gr51_","gr53_","gr52_","gr52_","gr50_","gr60_","gr49_","gr53_","gr54_","gr51_","gr50_","gr63_","gr49_","gr54_","gr51_","gr54_","gr51_","gr71_","gr54_","gr54_","gr62_","gr56_","gr64_","gr52_"],
+["gr67_","gr49_","gr66_","gr51_","gr52_","gr72_","gr50_","gr72_","gr64_","gr52_","gr55_","gr62_","gr50_","gr66_","gr56_","gr51_","gr58_","gr25-","rc16_","rc19_","gr24_","gr53_","gr53_","gr53_","gr51_","gr55_","gr55_","gr51_","gr54_","gr50_","gr49_","gr57_","gr51_","gr56_","gr53_","gr55_","gr54_","gr51_","gr54_","gr54_","gr52_","gr69_","gr54_","gr62_","gr50_","gr49_","gr51_","gr62_","gr62_","gr55_","gr54_","gr56_","gr52_","gr52_","gr51_","gr50_","gr67_","gr72_","gr52_","gr54_","gr62_","gr54_","gr70_","gr50_","gr51_","gr55_","gr50_","gr49_","gr63_","gr55_","gr53_","gr49_","gr56_","gr55_","gr56_","gr51_","gr49_","gr49_","gr49_","gr54_","gr50_","gr55_","gr49_","gr52_","gr53_","gr53_","gr52_","gr51_","gr50_","gr50_","gr52_","gr53_","gr52_","gr51_","gr53_","gr49_","gr50_","gr64_","gr50_","gr56_","gr55_","gr53_","gr55_","gr49_","gr67_","gr50_","gr54_","gr53_","gr55_","gr51_","gr67_","gr51_","gr52_","gr57_","gr55_","gr53_","gr53_","gr55_","gr56_","gr50_","gr49_","gr54_","gr55_","gr50_","gr50_","gr49_","gr56_","gr53_","gr64_","gr50_","gr54_","gr52_","gr55_","gr51_","gr69_","gr54_","gr53_","gr54_","gr54_","gr53_","gr53_","gr70_","gr55_","gr54_"],
+["gr54_","gr51_","gr56_","gr52_","gr68_","gr50_","gr55_","gr54_","gr54_","gr51_","gr53_","gr52_","gr55_","gr57_","gr63_","gr54_","gr54_","gr25-","rc16_","rc18_","gr25_","gr67_","gr54_","gr49_","gr54_","gr68_","gr50_","gr49_","gr49_","gr58_","gr63_","gr54_","gr55_","gr55_","gr53_","gr56_","gr51_","gr55_","gr50_","gr55_","gr51_","gr49_","gr54_","gr52_","gr51_","gr50_","gr56_","gr53_","gr51_","gr50_","gr71_","gr52_","gr60_","gr52_","gr50_","gr64_","gr54_","gr50_","gr49_","gr51_","gr53_","gr56_","gr66_","gr51_","gr56_","gr52_","gr69_","gr50_","gr65_","gr52_","gr56_","gr53_","gr55_","gr56_","gr51_","gr56_","gr63_","gr52_","gr53_","gr49_","gr55_","gr55_","gr53_","gr56_","gr49_","gr55_","gr50_","gr54_","gr54_","gr50_","gr52_","gr59_","gr56_","gr62_","gr56_","gr53_","gr63_","gr51_","gr56_","gr56_","gr54_","gr51_","gr65_","gr49_","gr59_","gr49_","gr51_","gr50_","gr50_","gr55_","gr52_","gr66_","gr50_","gr54_","gr62_","gr49_","gr54_","gr50_","gr52_","gr72_","gr53_","gr52_","gr49_","gr55_","gr51_","gr54_","gr50_","gr53_","gr54_","gr66_","gr54_","gr60_","gr50_","gr52_","gr53_","gr50_","gr53_","gr51_","gr54_","gr49_","gr68_","gr52_","gr56_","gr72_"],
+["gr68_","gr55_","gr50_","gr56_","gr50_","gr63_","gr50_","gr55_","gr52_","gr54_","gr50_","gr49_","gr53_","gr55_","gr54_","gr50_","gr52_","gr25-","rc17_","rc18_","gr24_","gr53_","gr61_","gr64_","gr55_","gr54_","gr53_","gr54_","gr53_","gr50_","gr62_","gr59_","gr62_","gr56_","gr49_","gr52_","gr53_","gr69_","gr52_","gr52_","gr49_","gr66_","gr54_","gr56_","gr70_","gr58_","gr54_","gr52_","gr50_","gr53_","gr53_","gr51_","gr56_","gr64_","gr63_","gr52_","gr65_","gr50_","gr55_","gr55_","gr54_","gr49_","gr56_","gr52_","gr55_","gr67_","gr52_","gr52_","gr55_","gr53_","gr64_","gr54_","gr54_","gr55_","gr62_","gr52_","gr54_","gr54_","gr50_","gr51_","gr54_","gr49_","gr69_","gr55_","gr50_","gr52_","gr69_","gr52_","gr65_","gr56_","gr52_","gr54_","gr54_","gr49_","gr69_","gr50_","gr55_","gr55_","gr66_","gr51_","gr49_","gr53_","gr72_","gr54_","gr66_","gr61_","gr56_","gr54_","gr53_","gr51_","gr56_","gr56_","gr50_","gr53_","gr49_","gr64_","gr51_","gr65_","gr55_","gr50_","gr49_","gr55_","gr52_","gr58_","gr53_","gr51_","gr69_","gr53_","gr55_","gr52_","gr51_","gr54_","gr50_","gr63_","gr51_","gr50_","gr53_","gr61_","gr54_","gr52_","gr52_","gr49_","gr50_","gr50_"],
+["gr53_","gr51_","gr55_","gr70_","gr52_","gr56_","gr51_","gr54_","gr55_","gr55_","gr55_","gr52_","gr59_","gr53_","gr72_","gr54_","gr53_","gr24-","rc16_","rc19_","gr27_","gr58_","gr65_","gr52_","gr64_","gr62_","gr55_","gr56_","gr50_","gr56_","gr55_","gr49_","gr55_","gr50_","gr49_","gr49_","gr52_","gr56_","gr51_","gr54_","gr54_","gr49_","gr54_","gr50_","gr56_","gr49_","gr55_","gr52_","gr59_","gr50_","gr54_","gr53_","gr65_","gr55_","gr50_","gr67_","gr49_","gr56_","gr52_","gr66_","gr55_","gr65_","gr55_","gr70_","gr49_","gr58_","gr54_","gr50_","gr51_","gr57_","gr54_","gr52_","gr51_","gr51_","gr56_","gr62_","gr53_","gr55_","gr49_","gr71_","gr49_","gr51_","gr49_","gr56_","gr56_","gr60_","gr55_","gr72_","gr50_","gr51_","gr51_","gr64_","gr51_","gr51_","gr51_","gr63_","gr50_","gr60_","gr55_","gr55_","gr49_","gr67_","gr53_","gr55_","gr56_","gr55_","gr69_","gr55_","gr49_","gr53_","gr54_","gr55_","gr61_","gr53_","gr55_","gr56_","gr62_","gr51_","gr55_","gr57_","gr51_","gr56_","gr70_","gr52_","gr55_","gr54_","gr50_","gr54_","gr50_","gr55_","gr51_","gr50_","gr54_","gr54_","gr62_","gr55_","gr52_","gr52_","gr62_","gr54_","gr53_","gr53_","gr54_","gr53_"],
+["gr49_","gr57_","gr49_","gr54_","gr51_","gr52_","gr50_","gr56_","gr50_","gr61_","gr52_","gr53_","gr50_","gr58_","gr52_","gr50_","gr49_","gr25-","rc17_","rc19_","gr27_","gr51_","gr51_","gr52_","gr55_","gr51_","gr49_","gr65_","gr55_","gr54_","gr50_","gr55_","gr52_","gr70_","gr53_","gr49_","gr55_","gr53_","gr49_","gr68_","gr49_","gr52_","gr54_","gr51_","gr52_","gr64_","gr49_","gr52_","gr56_","gr56_","gr52_","gr56_","gr71_","gr57_","gr51_","gr55_","gr49_","gr50_","gr56_","gr50_","gr49_","gr49_","gr49_","gr55_","gr54_","gr52_","gr53_","gr49_","gr51_","gr56_","gr50_","gr53_","gr55_","gr53_","gr50_","gr54_","gr54_","gr55_","gr49_","gr50_","gr62_","gr55_","gr49_","gr67_","gr50_","gr56_","gr54_","gr55_","gr51_","gr51_","gr59_","gr56_","gr50_","gr52_","gr51_","gr53_","gr71_","gr51_","gr72_","gr55_","gr62_","gr51_","gr63_","gr52_","gr52_","gr54_","gr50_","gr71_","gr54_","gr71_","gr53_","gr54_","gr51_","gr55_","gr50_","gr51_","gr53_","gr49_","gr53_","gr52_","gr52_","gr53_","gr56_","gr52_","gr50_","gr57_","gr56_","gr55_","gr72_","gr51_","gr54_","gr49_","gr56_","gr49_","gr56_","gr56_","gr49_","gr65_","gr53_","gr53_","gr54_","gr49_","gr52_","gr55_"],
+["gr55_","gr56_","gr62_","gr49_","gr55_","gr51_","gr63_","gr55_","gr52_","gr65_","gr49_","gr52_","gr66_","gr55_","gr57_","gr55_","gr56_","gr26-","rc17_","rc19_","gr26_","gr55_","gr51_","gr57_","gr53_","gr53_","gr67_","gr56_","gr53_","gr51_","gr54_","gr54_","gr51_","gr50_","gr69_","gr51_","gr56_","gr62_","gr52_","gr54_","gr51_","gr62_","gr53_","gr50_","gr49_","gr54_","gr53_","gr52_","gr55_","gr72_","gr53_","gr54_","gr50_","gr55_","gr66_","gr55_","gr56_","gr50_","gr53_","gr65_","gr52_","gr71_","gr52_","gr57_","gr54_","gr54_","gr55_","gr51_","gr72_","gr50_","gr52_","gr67_","gr50_","gr51_","gr52_","gr53_","gr63_","gr55_","gr52_","gr54_","gr54_","gr52_","gr53_","gr49_","gr66_","gr55_","gr52_","gr51_","gr50_","gr49_","gr50_","gr55_","gr50_","gr53_","gr69_","gr50_","gr64_","gr67_","gr69_","gr56_","gr55_","gr55_","gr56_","gr62_","gr56_","gr51_","gr71_","gr54_","gr52_","gr49_","gr54_","gr54_","gr51_","gr50_","gr56_","gr56_","gr49_","gr50_","gr49_","gr52_","gr52_","gr49_","gr58_","gr66_","gr55_","gr51_","gr49_","gr56_","gr49_","gr49_","gr54_","gr66_","gr54_","gr54_","gr71_","gr53_","gr53_","gr51_","gr52_","gr59_","gr49_","gr52_","gr60_","gr51_"],
+["gr72_","gr56_","gr55_","gr53_","gr63_","gr53_","gr49_","gr66_","gr52_","gr50_","gr53_","gr58_","gr51_","gr51_","gr56_","gr68_","gr50_","gr25-","rc16_","rc18_","gr27_","gr54_","gr65_","gr50_","gr49_","gr53_","gr53_","gr54_","gr53_","gr72_","gr53_","gr69_","gr53_","gr56_","gr56_","gr56_","gr69_","gr50_","gr61_","gr53_","gr52_","gr52_","gr60_","gr71_","gr54_","gr68_","gr50_","gr53_","gr50_","gr49_","gr49_","gr71_","gr49_","gr55_","gr54_","gr52_","gr53_","gr64_","gr50_","gr54_","gr64_","gr54_","gr49_","gr52_","gr56_","gr50_","gr53_","gr55_","gr58_","gr55_","gr52_","gr54_","gr52_","gr64_","gr54_","gr50_","gr49_","gr70_","gr72_","gr66_","gr49_","gr51_","gr60_","gr49_","gr54_","gr50_","gr55_","gr51_","gr56_","gr68_","gr49_","gr52_","gr50_","gr52_","gr72_","gr56_","gr51_","gr52_","gr54_","gr52_","gr54_","gr71_","gr54_","gr52_","gr50_","gr52_","gr51_","gr66_","gr59_","gr49_","gr49_","gr70_","gr55_","gr54_","gr50_","gr64_","gr58_","gr54_","gr50_","gr55_","gr50_","gr49_","gr52_","gr54_","gr52_","gr53_","gr51_","gr50_","gr53_","gr56_","gr49_","gr54_","gr49_","gr55_","gr68_","gr55_","gr56_","gr50_","gr51_","gr55_","gr60_","gr54_","gr53_","gr54_"],
+["gr53_","gr58_","gr51_","gr53_","gr53_","gr51_","gr58_","gr49_","gr52_","gr56_","gr50_","gr54_","gr60_","gr54_","gr49_","gr49_","gr54_","gr24-","rc17_","rc19_","gr27_","gr49_","gr60_","gr55_","gr53_","gr50_","gr55_","gr50_","gr52_","gr52_","gr69_","gr52_","gr49_","gr64_","gr56_","gr54_","gr55_","gr49_","gr52_","gr72_","gr52_","gr56_","gr67_","gr51_","gr68_","gr56_","gr50_","gr53_","gr55_","gr51_","gr50_","gr49_","gr70_","gr52_","gr56_","gr61_","gr49_","gr50_","gr54_","gr50_","gr52_","gr59_","gr56_","gr63_","gr53_","gr55_","gr55_","gr53_","gr56_","gr56_","gr65_","gr52_","gr52_","gr65_","gr55_","gr53_","gr52_","gr52_","gr54_","gr55_","gr54_","gr50_","gr55_","gr51_","gr55_","gr64_","gr55_","gr55_","gr53_","gr52_","gr56_","gr55_","gr51_","gr60_","gr54_","gr55_","gr49_","gr63_","gr50_","gr50_","gr49_","gr49_","gr50_","gr54_","gr59_","gr51_","gr55_","gr53_","gr50_","gr57_","gr54_","gr54_","gr69_","gr51_","gr64_","gr50_","gr55_","gr53_","gr50_","gr55_","gr64_","gr55_","gr53_","gr57_","gr49_","gr53_","gr63_","gr52_","gr67_","gr56_","gr56_","gr51_","gr49_","gr67_","gr54_","gr53_","gr50_","gr71_","gr50_","gr50_","gr56_","gr56_","gr57_","gr66_"],
+["gr51_","gr53_","gr52_","gr54_","gr55_","gr52_","gr56_","gr61_","gr50_","gr51_","gr54_","gr56_","gr55_","gr56_","gr52_","gr55_","gr53_","gr24-","rc17_","rc18_","gr26_","gr54_","gr62_","gr72_","gr55_","gr52_","gr56_","gr52_","gr53_","gr63_","gr55_","gr51_","gr49_","gr56_","gr51_","gr55_","gr54_","gr52_","gr49_","gr55_","gr59_","gr49_","gr50_","gr53_","gr51_","gr52_","gr51_","gr55_","gr54_","gr54_","gr54_","gr54_","gr55_","gr67_","gr56_","gr50_","gr52_","gr50_","gr50_","gr51_","gr65_","gr56_","gr56_","gr50_","gr62_","gr53_","gr53_","gr54_","gr68_","gr61_","gr53_","gr63_","gr51_","gr56_","gr57_","gr55_","gr55_","gr58_","gr54_","gr52_","gr55_","gr52_","gr54_","gr71_","gr53_","gr49_","gr54_","gr56_","gr56_","gr50_","gr71_","gr56_","gr53_","gr58_","gr53_","gr53_","gr50_","gr51_","gr51_","gr66_","gr49_","gr63_","gr52_","gr68_","gr51_","gr56_","gr51_","gr54_","gr51_","gr49_","gr53_","gr54_","gr54_","gr50_","gr50_","gr54_","gr50_","gr72_","gr55_","gr52_","gr52_","gr66_","gr55_","gr50_","gr56_","gr61_","gr53_","gr54_","gr53_","gr50_","gr51_","gr51_","gr54_","gr51_","gr55_","gr71_","gr50_","gr49_","gr57_","gr67_","gr53_","gr49_","gr54_","gr54_"],
+["gr53_","gr50_","gr72_","gr50_","gr54_","gr56_","gr52_","gr53_","gr54_","gr68_","gr50_","gr49_","gr50_","gr50_","gr56_","gr69_","gr71_","gr26-","rc17_","rc18_","gr25_","gr64_","gr53_","gr54_","gr49_","gr60_","gr58_","gr53_","gr55_","gr50_","gr51_","gr51_","gr51_","gr58_","gr58_","gr51_","gr49_","gr66_","gr51_","gr51_","gr72_","gr55_","gr72_","gr53_","gr51_","gr64_","gr55_","gr56_","gr57_","gr51_","gr63_","gr61_","gr53_","gr54_","gr54_","gr51_","gr54_","gr55_","gr70_","gr52_","gr56_","gr52_","gr67_","gr53_","gr49_","gr52_","gr55_","gr49_","gr52_","gr52_","gr54_","gr54_","gr50_","gr60_","gr50_","gr55_","gr52_","gr55_","gr56_","gr57_","gr50_","gr54_","gr49_","gr70_","gr55_","gr69_","gr51_","gr53_","gr59_","gr68_","gr53_","gr56_","gr64_","gr56_","gr54_","gr52_","gr53_","gr56_","gr55_","gr53_","gr54_","gr56_","gr52_","gr55_","gr50_","gr49_","gr55_","gr54_","gr52_","gr55_","gr53_","gr55_","gr50_","gr50_","gr55_","gr52_","gr57_","gr54_","gr50_","gr53_","gr71_","gr51_","gr56_","gr49_","gr55_","gr53_","gr53_","gr65_","gr57_","gr52_","gr50_","gr54_","gr55_","gr54_","gr53_","gr53_","gr50_","gr72_","gr55_","gr50_","gr51_","gr49_","gr53_","gr50_"],
+["gr50_","gr55_","gr56_","gr56_","gr50_","gr56_","gr69_","gr49_","gr50_","gr50_","gr54_","gr56_","gr54_","gr51_","gr54_","gr51_","gr52_","gr27-","rc16_","rc18_","gr27_","gr52_","gr66_","gr56_","gr49_","gr56_","gr51_","gr59_","gr49_","gr52_","gr49_","gr51_","gr56_","gr54_","gr52_","gr49_","gr50_","gr51_","gr51_","gr51_","gr53_","gr51_","gr71_","gr52_","gr52_","gr50_","gr51_","gr50_","gr54_","gr49_","gr51_","gr55_","gr64_","gr52_","gr50_","gr49_","gr55_","gr58_","gr50_","gr50_","gr55_","gr56_","gr55_","gr49_","gr54_","gr53_","gr52_","gr54_","gr49_","gr55_","gr53_","gr58_","gr54_","gr69_","gr51_","gr53_","gr49_","gr51_","gr52_","gr54_","gr56_","gr50_","gr56_","gr55_","gr55_","gr53_","gr53_","gr55_","gr52_","gr53_","gr60_","gr54_","gr51_","gr53_","gr57_","gr52_","gr52_","gr54_","gr55_","gr50_","gr56_","gr69_","gr50_","gr54_","gr64_","gr64_","gr51_","gr68_","gr53_","gr61_","gr55_","gr56_","gr49_","gr67_","gr56_","gr53_","gr53_","gr55_","gr67_","gr66_","gr49_","gr56_","gr65_","gr55_","gr63_","gr52_","gr54_","gr52_","gr64_","gr49_","gr53_","gr50_","gr62_","gr68_","gr66_","gr56_","gr56_","gr53_","gr54_","gr56_","gr65_","gr56_","gr54_","gr55_"],
+["gr49_","gr54_","gr52_","gr72_","gr50_","gr51_","gr53_","gr58_","gr53_","gr54_","gr65_","gr53_","gr51_","gr51_","gr55_","gr49_","gr52_","gr24-","rc16_","rc19_","gr25_","gr52_","gr53_","gr55_","gr55_","gr51_","gr52_","gr49_","gr68_","gr53_","gr56_","gr51_","gr56_","gr50_","gr51_","gr65_","gr55_","gr55_","gr50_","gr55_","gr56_","gr52_","gr53_","gr49_","gr53_","gr52_","gr50_","gr60_","gr55_","gr49_","gr67_","gr51_","gr55_","gr61_","gr51_","gr51_","gr54_","gr50_","gr53_","gr55_","gr70_","gr50_","gr53_","gr52_","gr55_","gr56_","gr53_","gr54_","gr51_","gr53_","gr50_","gr50_","gr50_","gr52_","gr52_","gr50_","gr63_","gr55_","gr49_","gr60_","gr49_","gr71_","gr50_","gr51_","gr51_","gr56_","gr53_","gr52_","gr52_","gr50_","gr50_","gr50_","gr56_","gr49_","gr70_","gr51_","gr53_","gr54_","gr51_","gr49_","gr62_","gr53_","gr53_","gr50_","gr52_","gr53_","gr70_","gr64_","gr56_","gr50_","gr51_","gr49_","gr50_","gr62_","gr53_","gr56_","gr54_","gr60_","gr50_","gr51_","gr49_","gr52_","gr66_","gr51_","gr56_","gr50_","gr50_","gr55_","gr58_","gr54_","gr51_","gr49_","gr49_","gr53_","gr52_","gr55_","gr53_","gr55_","gr52_","gr51_","gr56_","gr55_","gr57_","gr52_"],
+["gr51_","gr54_","gr52_","gr51_","gr64_","gr49_","gr66_","gr55_","gr54_","gr54_","gr53_","gr57_","gr56_","gr51_","gr49_","gr56_","gr62_","gr24-","rc16_","rc18_","gr26_","gr55_","gr53_","gr58_","gr53_","gr50_","gr52_","gr52_","gr56_","gr53_","gr65_","gr52_","gr51_","gr56_","gr69_","gr51_","gr49_","gr63_","gr54_","gr56_","gr50_","gr50_","gr51_","gr52_","gr56_","gr54_","gr51_","gr55_","gr50_","gr50_","gr54_","gr57_","gr68_","gr66_","gr50_","gr49_","gr60_","gr55_","gr56_","gr50_","gr55_","gr61_","gr53_","gr49_","gr50_","gr51_","gr66_","gr56_","gr50_","gr63_","gr60_","gr54_","gr53_","gr56_","gr53_","gr53_","gr54_","gr58_","gr56_","gr66_","gr53_","gr53_","gr49_","gr49_","gr68_","gr62_","gr51_","gr54_","gr51_","gr61_","gr56_","gr53_","gr53_","gr53_","gr52_","gr51_","gr49_","gr71_","gr50_","gr51_","gr50_","gr56_","gr70_","gr50_","gr55_","gr54_","gr49_","gr50_","gr52_","gr55_","gr49_","gr51_","gr55_","gr50_","gr54_","gr62_","gr51_","gr52_","gr54_","gr72_","gr49_","gr52_","gr50_","gr53_","gr50_","gr55_","gr55_","gr67_","gr55_","gr53_","gr53_","gr50_","gr49_","gr58_","gr51_","gr50_","gr49_","gr54_","gr50_","gr69_","gr49_","gr61_","gr53_","gr65_"],
+["gr56_","gr56_","gr55_","gr64_","gr50_","gr66_","gr53_","gr56_","gr54_","gr52_","gr56_","gr51_","gr55_","gr50_","gr52_","gr55_","gr51_","gr24-","rc16_","rc18_","gr27_","gr53_","gr52_","gr49_","gr49_","gr55_","gr53_","gr54_","gr53_","gr53_","gr52_","gr53_","gr49_","gr55_","gr52_","gr56_","gr64_","gr50_","gr55_","gr53_","gr50_","gr54_","gr49_","gr70_","gr67_","gr54_","gr53_","gr49_","gr56_","gr52_","gr70_","gr49_","gr53_","gr50_","gr72_","gr52_","gr49_","gr49_","gr52_","gr51_","gr56_","gr54_","gr55_","gr53_","gr49_","gr56_","gr67_","gr52_","gr53_","gr52_","gr53_","gr55_","gr70_","gr49_","gr53_","gr62_","gr54_","gr52_","gr57_","gr49_","gr59_","gr53_","gr51_","gr49_","gr50_","gr56_","gr54_","gr52_","gr57_","gr53_","gr69_","gr54_","gr51_","gr64_","gr53_","gr51_","gr56_","gr50_","gr54_","gr54_","gr58_","gr54_","gr53_","gr54_","gr49_","gr53_","gr53_","gr51_","gr56_","gr51_","gr49_","gr53_","gr54_","gr55_","gr51_","gr53_","gr54_","gr55_","gr57_","gr50_","gr55_","gr66_","gr51_","gr54_","gr53_","gr52_","gr54_","gr54_","gr70_","gr53_","gr52_","gr54_","gr54_","gr50_","gr49_","gr58_","gr51_","gr50_","gr71_","gr54_","gr50_","gr51_","gr59_","gr55_"],
+["gr72_","gr51_","gr55_","gr55_","gr49_","gr55_","gr54_","gr53_","gr53_","gr56_","gr51_","gr51_","gr54_","gr56_","gr50_","gr55_","gr52_","gr27-","rc16_","rc19_","gr27_","gr55_","gr64_","gr52_","gr61_","gr49_","gr53_","gr70_","gr50_","gr52_","gr49_","gr54_","gr49_","gr56_","gr54_","gr55_","gr52_","gr49_","gr55_","gr70_","gr50_","gr55_","gr54_","gr54_","gr54_","gr54_","gr58_","gr52_","gr56_","gr55_","gr49_","gr52_","gr51_","gr53_","gr50_","gr51_","gr53_","gr49_","gr55_","gr51_","gr58_","gr55_","gr51_","gr50_","gr50_","gr54_","gr56_","gr59_","gr54_","gr52_","gr51_","gr51_","gr54_","gr64_","gr53_","gr53_","gr70_","gr53_","gr52_","gr55_","gr53_","gr54_","gr49_","gr51_","gr52_","gr53_","gr56_","gr55_","gr53_","gr50_","gr51_","gr53_","gr58_","gr51_","gr55_","gr52_","gr49_","gr54_","gr53_","gr53_","gr55_","gr56_","gr50_","gr54_","gr58_","gr49_","gr55_","gr50_","gr53_","gr54_","gr66_","gr55_","gr56_","gr54_","gr52_","gr63_","gr53_","gr69_","gr49_","gr49_","gr52_","gr53_","gr51_","gr61_","gr56_","gr56_","gr71_","gr51_","gr56_","gr54_","gr53_","gr52_","gr55_","gr61_","gr52_","gr54_","gr53_","gr68_","gr53_","gr53_","gr51_","gr56_","gr52_","gr53_"],
+["gr50_","gr32_","gr28|","gr28|","gr28|","gr29|","gr28|","gr30|","gr31|","gr29|","gr31|","gr28|","gr31|","gr29|","gr30|","gr29|","gr30|","gr21+","rc16_","rc19_","gr21|","gr28|","gr31|","gr31|","gr31|","gr29|","gr28|","gr29|","gr29|","gr30|","gr30|","gr29|","gr31|","gr29|","gr30|","gr31|","gr29|","gr28|","gr28|","gr29|","gr28|","gr28|","gr30|","gr29|","gr30|","gr31|","gr31|","gr34-","gr52_","gr52_","gr72_","gr49_","gr54_","gr52_","gr51_","gr54_","gr56_","gr62_","gr57_","gr49_","gr53_","gr55_","gr56_","gr55_","gr53_","gr54_","gr56_","gr52_","gr67_","gr55_","gr55_","gr52_","gr61_","gr51_","gr69_","gr51_","gr55_","gr54_","gr49_","gr54_","gr57_","gr72_","gr51_","gr56_","gr52_","gr53_","gr63_","gr54_","gr56_","gr53_","gr56_","gr51_","gr49_","gr52_","gr51_","gr53_","gr62_","gr51_","gr56_","gr53_","gr49_","gr69_","gr53_","gr51_","gr49_","gr51_","gr50_","gr64_","gr51_","gr56_","gr54_","gr66_","gr53_","gr54_","gr72_","gr52_","gr65_","gr55_","gr55_","gr51_","gr56_","gr61_","gr67_","gr50_","gr53_","gr51_","gr49_","gr55_","gr53_","gr49_","gr51_","gr52_","gr62_","gr52_","gr54_","gr71_","gr61_","gr51_","gr50_","gr50_","gr54_","gr60_","gr54_","gr51_"],
+["gr72_","gr27-","rc9_","rc21_","rc21_","rc21_","rc20_","rc21_","rc20_","rc21_","rc20_","rc21_","rc21_","rc21_","rc21_","rc21_","rc21_","rc21_","rc31_","rc29_","rc21_","rc21_","rc20_","rc20_","rc21_","rc20_","rc21_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc21_","rc21_","rc20_","rc21_","rc20_","rc11_","gr24_","gr50_","gr50_","gr51_","gr57_","gr69_","gr54_","gr50_","gr54_","gr49_","gr49_","gr60_","gr53_","gr57_","gr54_","gr55_","gr69_","gr52_","gr55_","gr52_","gr55_","gr61_","gr54_","gr49_","gr50_","gr51_","gr61_","gr53_","gr55_","gr58_","gr54_","gr55_","gr62_","gr56_","gr68_","gr72_","gr55_","gr56_","gr49_","gr52_","gr49_","gr51_","gr53_","gr70_","gr55_","gr50_","gr53_","gr49_","gr54_","gr53_","gr49_","gr55_","gr72_","gr63_","gr69_","gr53_","gr52_","gr56_","gr58_","gr53_","gr52_","gr50_","gr58_","gr59_","gr53_","gr68_","gr63_","gr56_","gr50_","gr50_","gr53_","gr51_","gr58_","gr51_","gr51_","gr51_","gr54_","gr58_","gr54_","gr70_","gr68_","gr53_","gr53_","gr53_","gr54_","gr49_","gr62_","gr53_","gr51_","gr52_","gr56_","gr55_","gr61_","gr49_","gr55_","gr49_","gr50_"],
+["gr56_","gr24-","rc13_","rc23_","rc23_","rc22_","rc23_","rc23_","rc22_","rc23_","rc23_","rc23_","rc23_","rc22_","rc22_","rc23_","rc22_","rc23_","rc23_","rc23_","rc23_","rc23_","rc23_","rc23_","rc22_","rc23_","rc23_","rc22_","rc22_","rc23_","rc22_","rc23_","rc22_","rc23_","rc23_","rc22_","rc22_","rc22_","rc23_","rc22_","rc23_","rc22_","rc22_","rc23_","rc22_","rc23_","rc15_","gr26_","gr67_","gr49_","gr50_","gr50_","gr50_","gr51_","gr70_","gr50_","gr50_","gr56_","gr54_","gr56_","gr54_","gr69_","gr56_","gr51_","gr53_","gr49_","gr52_","gr53_","gr60_","gr56_","gr56_","gr52_","gr56_","gr51_","gr61_","gr50_","gr53_","gr54_","gr56_","gr53_","gr65_","gr49_","gr49_","gr56_","gr49_","gr55_","gr55_","gr49_","gr68_","gr50_","gr51_","gr49_","gr67_","gr53_","gr72_","gr55_","gr55_","gr49_","gr49_","gr53_","gr51_","gr65_","gr51_","gr65_","gr61_","gr54_","gr55_","gr54_","gr65_","gr51_","gr50_","gr64_","gr55_","gr50_","gr68_","gr51_","gr56_","gr53_","gr52_","gr53_","gr53_","gr54_","gr66_","gr56_","gr55_","gr55_","gr52_","gr49_","gr56_","gr51_","gr50_","gr51_","gr49_","gr51_","gr66_","gr52_","gr50_","gr50_","gr52_","gr55_","gr53_","gr50_","gr55_","gr49_"],
+["gr51_","gr32|","gr31_","gr30_","gr29_","gr30_","gr31_","gr29_","gr31_","gr29_","gr30_","gr28_","gr28_","gr31_","gr28_","gr29_","gr28_","gr29_","gr31_","gr29_","gr30_","gr28_","gr30_","gr29_","gr30_","gr29_","gr28_","gr30_","gr28_","gr29_","gr30_","gr28_","gr28_","gr31_","gr29_","gr31_","gr28_","gr31_","gr29_","gr28_","gr31_","gr31_","gr31_","gr30_","gr31_","gr29_","gr29_","gr32+","gr55_","gr50_","gr52_","gr54_","gr51_","gr60_","gr56_","gr50_","gr49_","gr53_","gr56_","gr49_","gr51_","gr51_","gr59_","gr49_","gr50_","gr52_","gr72_","gr52_","gr55_","gr53_","gr62_","gr66_","gr51_","gr55_","gr53_","gr67_","gr56_","gr53_","gr50_","gr61_","gr54_","gr55_","gr55_","gr52_","gr55_","gr50_","gr72_","gr53_","gr51_","gr53_","gr55_","gr50_","gr53_","gr53_","gr50_","gr49_","gr68_","gr50_","gr64_","gr53_","gr51_","gr56_","gr55_","gr51_","gr49_","gr55_","gr49_","gr70_","gr50_","gr68_","gr58_","gr52_","gr52_","gr62_","gr52_","gr55_","gr50_","gr49_","gr52_","gr69_","gr53_","gr54_","gr50_","gr56_","gr54_","gr49_","gr52_","gr54_","gr53_","gr49_","gr51_","gr50_","gr54_","gr52_","gr52_","gr50_","gr54_","gr65_","gr49_","gr55_","gr66_","gr60_","gr54_","gr72_"],
+["gr49_","gr53_","gr53_","gr55_","gr69_","gr49_","gr50_","gr50_","gr54_","gr56_","gr55_","gr51_","gr54_","gr53_","gr49_","gr57_","gr54_","gr50_","gr65_","gr53_","gr72_","gr49_","gr53_","gr53_","gr51_","gr52_","gr52_","gr53_","gr50_","gr53_","gr53_","gr49_","gr53_","gr54_","gr65_","gr52_","gr63_","gr59_","gr52_","gr52_","gr70_","gr51_","gr72_","gr52_","gr35_","gr28|","gr31|","gr32-","gr54_","gr52_","gr59_","gr53_","gr49_","gr63_","gr56_","gr55_","gr55_","gr56_","gr51_","gr56_","gr50_","gr56_","gr63_","gr55_","gr49_","gr49_","gr56_","gr63_","gr56_","gr70_","gr49_","gr52_","gr53_","gr56_","gr68_","gr50_","gr53_","gr51_","gr54_","gr54_","gr53_","gr54_","gr64_","gr50_","gr50_","gr55_","gr55_","gr53_","gr50_","gr53_","gr52_","gr49_","gr56_","gr52_","gr53_","gr51_","gr52_","gr68_","gr50_","gr62_","gr56_","gr50_","gr49_","gr49_","gr52_","gr62_","gr51_","gr53_","gr51_","gr51_","gr53_","gr56_","gr52_","gr51_","gr56_","gr60_","gr66_","gr56_","gr57_","gr56_","gr52_","gr51_","gr49_","gr54_","gr54_","gr57_","gr54_","gr52_","gr62_","gr49_","gr56_","gr52_","gr55_","gr72_","gr53_","gr51_","gr50_","gr53_","gr54_","gr53_","gr72_","gr53_","gr55_","gr55_"],
+["gr50_","gr72_","gr51_","gr60_","gr49_","gr50_","gr54_","gr49_","gr62_","gr51_","gr49_","gr57_","gr51_","gr56_","gr50_","gr50_","gr55_","gr55_","gr49_","gr54_","gr54_","gr63_","gr52_","gr51_","gr55_","gr54_","gr51_","gr51_","gr53_","gr56_","gr61_","gr52_","gr55_","gr55_","gr50_","gr49_","gr63_","gr54_","gr54_","gr55_","gr54_","gr68_","gr52_","gr65_","gr25-","rc8_","rc10_","gr27_","gr56_","gr55_","gr53_","gr53_","gr52_","gr55_","gr54_","gr63_","gr52_","gr55_","gr52_","gr54_","gr49_","gr53_","gr54_","gr54_","gr51_","gr55_","gr51_","gr59_","gr53_","gr50_","gr66_","gr51_","gr54_","gr55_","gr51_","gr63_","gr50_","gr56_","gr51_","gr54_","gr56_","gr55_","gr52_","gr50_","gr57_","gr56_","gr51_","gr49_","gr55_","gr50_","gr49_","gr54_","gr60_","gr50_","gr50_","gr53_","gr54_","gr56_","gr56_","gr51_","gr50_","gr56_","gr65_","gr51_","gr70_","gr50_","gr53_","gr50_","gr53_","gr50_","gr65_","gr52_","gr55_","gr49_","gr63_","gr52_","gr54_","gr58_","gr52_","gr49_","gr50_","gr70_","gr56_","gr51_","gr70_","gr49_","gr49_","gr58_","gr49_","gr59_","gr49_","gr55_","gr54_","gr55_","gr67_","gr49_","gr60_","gr55_","gr50_","gr50_","gr63_","gr54_","gr66_","gr55_"],
+["gr53_","gr52_","gr53_","gr52_","gr66_","gr54_","gr64_","gr61_","gr52_","gr60_","gr51_","gr54_","gr56_","gr57_","gr52_","gr52_","gr59_","gr54_","gr52_","gr49_","gr65_","gr56_","gr49_","gr52_","gr58_","gr53_","gr50_","gr71_","gr56_","gr51_","gr55_","gr72_","gr51_","gr57_","gr54_","gr56_","gr53_","gr51_","gr55_","gr55_","gr62_","gr50_","gr49_","gr54_","gr26-","rc16_","rc18_","gr26_","gr68_","gr51_","gr51_","gr72_","gr52_","gr65_","gr49_","gr53_","gr55_","gr52_","gr70_","gr49_","gr49_","gr49_","gr54_","gr53_","gr55_","gr62_","gr51_","gr50_","gr55_","gr57_","gr49_","gr54_","gr54_","gr50_","gr58_","gr51_","gr56_","gr53_","gr51_","gr55_","gr69_","gr50_","gr69_","gr53_","gr54_","gr52_","gr61_","gr58_","gr51_","gr53_","gr53_","gr49_","gr56_","gr56_","gr49_","gr56_","gr52_","gr53_","gr50_","gr57_","gr49_","gr49_","gr63_","gr66_","gr54_","gr68_","gr55_","gr53_","gr56_","gr49_","gr55_","gr49_","gr52_","gr49_","gr50_","gr70_","gr55_","gr56_","gr53_","gr61_","gr55_","gr55_","gr55_","gr62_","gr55_","gr56_","gr55_","gr56_","gr55_","gr53_","gr61_","gr53_","gr49_","gr50_","gr55_","gr51_","gr53_","gr54_","gr54_","gr69_","gr54_","gr70_","gr55_","gr55_"],
+["gr51_","gr66_","gr51_","gr53_","gr71_","gr54_","gr55_","gr53_","gr50_","gr58_","gr52_","gr64_","gr53_","gr50_","gr56_","gr54_","gr49_","gr55_","gr51_","gr71_","gr49_","gr52_","gr67_","gr50_","gr52_","gr50_","gr49_","gr50_","gr52_","gr52_","gr50_","gr51_","gr49_","gr52_","gr55_","gr58_","gr55_","gr52_","gr53_","gr50_","gr52_","gr54_","gr53_","gr56_","gr24-","rc17_","rc19_","gr27_","gr51_","gr49_","gr53_","gr54_","gr49_","gr55_","gr51_","gr62_","gr49_","gr55_","gr63_","gr52_","gr49_","gr60_","gr56_","gr53_","gr63_","gr55_","gr54_","gr51_","gr54_","gr52_","gr54_","gr69_","gr53_","gr67_","gr49_","gr53_","gr55_","gr49_","gr52_","gr64_","gr52_","gr53_","gr50_","gr58_","gr55_","gr60_","gr53_","gr55_","gr54_","gr53_","gr57_","gr51_","gr54_","gr61_","gr49_","gr59_","gr52_","gr59_","gr56_","gr50_","gr68_","gr53_","gr58_","gr53_","gr53_","gr50_","gr56_","gr55_","gr67_","gr54_","gr55_","gr53_","gr53_","gr50_","gr49_","gr51_","gr53_","gr49_","gr51_","gr54_","gr50_","gr68_","gr54_","gr56_","gr65_","gr55_","gr54_","gr63_","gr56_","gr49_","gr54_","gr70_","gr49_","gr64_","gr49_","gr50_","gr53_","gr50_","gr50_","gr54_","gr63_","gr53_","gr54_","gr56_"],
+["gr52_","gr56_","gr69_","gr50_","gr50_","gr56_","gr68_","gr49_","gr54_","gr69_","gr54_","gr49_","gr52_","gr58_","gr54_","gr56_","gr51_","gr56_","gr54_","gr55_","gr62_","gr51_","gr52_","gr52_","gr52_","gr68_","gr56_","gr50_","gr49_","gr69_","gr55_","gr55_","gr51_","gr56_","gr51_","gr53_","gr54_","gr49_","gr49_","gr50_","gr49_","gr55_","gr49_","gr49_","gr25-","rc17_","rc18_","gr24_","gr53_","gr56_","gr50_","gr61_","gr50_","gr56_","gr50_","gr52_","gr51_","gr54_","gr57_","gr52_","gr51_","gr54_","gr52_","gr52_","gr49_","gr49_","gr61_","gr62_","gr58_","gr50_","gr64_","gr49_","gr58_","gr50_","gr55_","gr53_","gr55_","gr52_","gr56_","gr50_","gr55_","gr50_","gr50_","gr49_","gr69_","gr54_","gr51_","gr65_","gr56_","gr50_","gr53_","gr51_","gr52_","gr49_","gr52_","gr54_","gr55_","gr51_","gr50_","gr61_","gr52_","gr53_","gr51_","gr52_","gr52_","gr54_","gr49_","gr55_","gr72_","gr59_","gr49_","gr50_","gr56_","gr69_","gr52_","gr58_","gr55_","gr54_","gr56_","gr59_","gr53_","gr63_","gr52_","gr55_","gr68_","gr52_","gr55_","gr54_","gr51_","gr54_","gr50_","gr56_","gr54_","gr49_","gr57_","gr53_","gr52_","gr52_","gr54_","gr61_","gr56_","gr52_","gr54_","gr49_"],
+["gr56_","gr49_","gr50_","gr72_","gr49_","gr70_","gr55_","gr50_","gr49_","gr53_","gr55_","gr49_","gr59_","gr49_","gr70_","gr50_","gr71_","gr51_","gr53_","gr57_","gr56_","gr54_","gr58_","gr51_","gr52_","gr59_","gr54_","gr66_","gr55_","gr69_","gr62_","gr52_","gr56_","gr62_","gr51_","gr59_","gr50_","gr56_","gr50_","gr71_","gr52_","gr53_","gr53_","gr56_","gr26-","rc17_","rc19_","gr27_","gr50_","gr49_","gr68_","gr55_","gr64_","gr53_","gr55_","gr62_","gr51_","gr67_","gr50_","gr51_","gr69_","gr56_","gr58_","gr52_","gr54_","gr60_","gr55_","gr68_","gr50_","gr67_","gr56_","gr49_","gr55_","gr54_","gr54_","gr52_","gr56_","gr55_","gr53_","gr68_","gr53_","gr56_","gr54_","gr50_","gr56_","gr52_","gr55_","gr54_","gr49_","gr60_","gr49_","gr50_","gr51_","gr68_","gr56_","gr58_","gr52_","gr52_","gr55_","gr50_","gr49_","gr56_","gr50_","gr72_","gr49_","gr64_","gr50_","gr69_","gr53_","gr56_","gr69_","gr56_","gr54_","gr56_","gr51_","gr51_","gr55_","gr53_","gr50_","gr52_","gr62_","gr55_","gr67_","gr53_","gr55_","gr50_","gr50_","gr53_","gr50_","gr53_","gr50_","gr69_","gr56_","gr53_","gr55_","gr52_","gr50_","gr59_","gr50_","gr51_","gr50_","gr66_","gr56_","gr58_"],
+["gr55_","gr66_","gr51_","gr49_","gr53_","gr56_","gr56_","gr71_","gr51_","gr51_","gr56_","gr55_","gr51_","gr56_","gr55_","gr61_","gr54_","gr55_","gr56_","gr54_","gr62_","gr52_","gr55_","gr62_","gr50_","gr71_","gr53_","gr55_","gr69_","gr53_","gr63_","gr56_","gr55_","gr53_","gr55_","gr52_","gr51_","gr67_","gr50_","gr55_","gr55_","gr64_","gr56_","gr53_","gr25-","rc17_","rc19_","gr25_","gr50_","gr51_","gr49_","gr51_","gr51_","gr52_","gr50_","gr52_","gr49_","gr53_","gr51_","gr56_","gr56_","gr49_","gr49_","gr69_","gr54_","gr49_","gr54_","gr52_","gr55_","gr56_","gr55_","gr53_","gr58_","gr55_","gr52_","gr49_","gr49_","gr49_","gr51_","gr54_","gr53_","gr71_","gr54_","gr62_","gr71_","gr54_","gr56_","gr56_","gr64_","gr52_","gr52_","gr54_","gr50_","gr55_","gr54_","gr54_","gr53_","gr54_","gr72_","gr50_","gr51_","gr54_","gr63_","gr55_","gr52_","gr54_","gr51_","gr49_","gr59_","gr51_","gr50_","gr54_","gr55_","gr53_","gr62_","gr54_","gr51_","gr72_","gr50_","gr50_","gr54_","gr53_","gr49_","gr50_","gr60_","gr54_","gr55_","gr53_","gr51_","gr69_","gr54_","gr53_","gr71_","gr53_","gr50_","gr55_","gr54_","gr55_","gr61_","gr56_","gr52_","gr55_","gr68_","gr51_"],
+["gr56_","gr53_","gr49_","gr52_","gr54_","gr52_","gr71_","gr56_","gr67_","gr54_","gr49_","gr51_","gr52_","gr54_","gr51_","gr57_","gr56_","gr53_","gr54_","gr69_","gr49_","gr54_","gr49_","gr53_","gr71_","gr49_","gr51_","gr51_","gr53_","gr68_","gr50_","gr54_","gr49_","gr61_","gr55_","gr55_","gr56_","gr49_","gr55_","gr68_","gr56_","gr49_","gr52_","gr49_","gr26-","rc17_","rc19_","gr25_","gr60_","gr54_","gr66_","gr50_","gr59_","gr55_","gr50_","gr63_","gr55_","gr69_","gr51_","gr52_","gr52_","gr50_","gr50_","gr53_","gr57_","gr55_","gr56_","gr54_","gr49_","gr56_","gr51_","gr61_","gr52_","gr53_","gr50_","gr52_","gr60_","gr50_","gr52_","gr72_","gr56_","gr56_","gr65_","gr52_","gr52_","gr50_","gr56_","gr71_","gr54_","gr57_","gr55_","gr49_","gr51_","gr49_","gr54_","gr50_","gr56_","gr66_","gr53_","gr60_","gr50_","gr63_","gr49_","gr52_","gr71_","gr66_","gr52_","gr52_","gr50_","gr54_","gr49_","gr68_","gr59_","gr52_","gr52_","gr60_","gr52_","gr55_","gr56_","gr52_","gr69_","gr55_","gr71_","gr53_","gr49_","gr58_","gr53_","gr53_","gr55_","gr62_","gr53_","gr62_","gr50_","gr56_","gr59_","gr55_","gr65_","gr49_","gr65_","gr50_","gr56_","gr51_","gr50_","gr53_"],
+["gr53_","gr49_","gr49_","gr57_","gr52_","gr52_","gr51_","gr54_","gr51_","gr70_","gr49_","gr53_","gr70_","gr52_","gr56_","gr52_","gr69_","gr59_","gr49_","gr54_","gr49_","gr50_","gr56_","gr56_","gr51_","gr49_","gr49_","gr53_","gr69_","gr50_","gr54_","gr51_","gr54_","gr55_","gr50_","gr52_","gr50_","gr51_","gr50_","gr53_","gr72_","gr55_","gr71_","gr50_","gr27-","rc17_","rc18_","gr25_","gr50_","gr50_","gr55_","gr51_","gr63_","gr54_","gr49_","gr54_","gr51_","gr50_","gr60_","gr53_","gr65_","gr50_","gr70_","gr54_","gr55_","gr54_","gr55_","gr51_","gr56_","gr51_","gr52_","gr58_","gr53_","gr49_","gr56_","gr69_","gr55_","gr67_","gr54_","gr67_","gr54_","gr50_","gr49_","gr53_","gr53_","gr50_","gr53_","gr49_","gr51_","gr52_","gr51_","gr51_","gr52_","gr59_","gr56_","gr55_","gr63_","gr55_","gr54_","gr56_","gr54_","gr52_","gr58_","gr52_","gr56_","gr51_","gr52_","gr61_","gr50_","gr72_","gr51_","gr50_","gr49_","gr51_","gr70_","gr52_","gr50_","gr56_","gr52_","gr50_","gr51_","gr55_","gr52_","gr54_","gr55_","gr53_","gr54_","gr53_","gr70_","gr56_","gr49_","gr50_","gr50_","gr55_","gr50_","gr51_","gr51_","gr56_","gr60_","gr51_","gr52_","gr71_","gr50_","gr55_"],
+["gr52_","gr62_","gr54_","gr49_","gr54_","gr55_","gr54_","gr56_","gr49_","gr52_","gr50_","gr61_","gr65_","gr56_","gr55_","gr56_","gr52_","gr52_","gr71_","gr49_","gr54_","gr51_","gr54_","gr64_","gr69_","gr53_","gr54_","gr53_","gr54_","gr55_","gr53_","gr56_","gr54_","gr50_","gr50_","gr51_","gr49_","gr56_","gr51_","gr51_","gr55_","gr50_","gr50_","gr51_","gr24-","rc17_","rc19_","gr24_","gr50_","gr72_","gr56_","gr54_","gr49_","gr56_","gr61_","gr49_","gr63_","gr60_","gr52_","gr53_","gr54_","gr49_","gr50_","gr63_","gr55_","gr55_","gr49_","gr50_","gr52_","gr57_","gr52_","gr51_","gr52_","gr50_","gr54_","gr53_","gr51_","gr59_","gr51_","gr54_","gr54_","gr54_","gr68_","gr56_","gr51_","gr54_","gr55_","gr56_","gr55_","gr52_","gr54_","gr50_","gr54_","gr51_","gr60_","gr52_","gr56_","gr53_","gr51_","gr55_","gr70_","gr52_","gr56_","gr49_","gr72_","gr50_","gr52_","gr53_","gr58_","gr50_","gr69_","gr49_","gr51_","gr68_","gr52_","gr55_","gr53_","gr53_","gr69_","gr53_","gr55_","gr53_","gr50_","gr53_","gr70_","gr63_","gr56_","gr69_","gr55_","gr52_","gr56_","gr56_","gr55_","gr49_","gr55_","gr52_","gr52_","gr52_","gr55_","gr50_","gr65_","gr50_","gr59_","gr49_"],
+["gr70_","gr52_","gr63_","gr51_","gr69_","gr54_","gr54_","gr54_","gr54_","gr55_","gr50_","gr52_","gr52_","gr52_","gr56_","gr52_","gr54_","gr61_","gr56_","gr55_","gr55_","gr62_","gr50_","gr52_","gr55_","gr55_","gr52_","gr52_","gr55_","gr52_","gr53_","gr54_","gr49_","gr54_","gr53_","gr53_","gr53_","gr64_","gr50_","gr53_","gr53_","gr51_","gr53_","gr49_","gr26-","rc16_","rc18_","gr24_","gr53_","gr55_","gr68_","gr51_","gr55_","gr61_","gr55_","gr57_","gr65_","gr51_","gr52_","gr52_","gr53_","gr55_","gr49_","gr49_","gr50_","gr72_","gr54_","gr67_","gr53_","gr51_","gr49_","gr49_","gr58_","gr56_","gr51_","gr51_","gr63_","gr50_","gr49_","gr49_","gr66_","gr50_","gr51_","gr53_","gr54_","gr68_","gr56_","gr52_","gr50_","gr49_","gr72_","gr56_","gr65_","gr51_","gr49_","gr65_","gr51_","gr52_","gr51_","gr55_","gr51_","gr56_","gr52_","gr50_","gr55_","gr54_","gr52_","gr67_","gr52_","gr51_","gr58_","gr64_","gr55_","gr55_","gr54_","gr51_","gr60_","gr54_","gr52_","gr52_","gr51_","gr64_","gr55_","gr50_","gr53_","gr65_","gr52_","gr54_","gr52_","gr49_","gr59_","gr49_","gr65_","gr62_","gr50_","gr56_","gr52_","gr69_","gr49_","gr63_","gr55_","gr53_","gr55_","gr52_"],
+["gr67_","gr52_","gr51_","gr55_","gr65_","gr56_","gr52_","gr49_","gr50_","gr56_","gr50_","gr50_","gr57_","gr55_","gr58_","gr49_","gr51_","gr72_","gr54_","gr71_","gr70_","gr53_","gr51_","gr52_","gr63_","gr54_","gr49_","gr65_","gr66_","gr56_","gr55_","gr53_","gr54_","gr51_","gr68_","gr49_","gr70_","gr68_","gr55_","gr51_","gr49_","gr49_","gr55_","gr54_","gr27-","rc16_","rc19_","gr26_","gr50_","gr63_","gr53_","gr51_","gr50_","gr53_","gr71_","gr53_","gr50_","gr56_","gr52_","gr56_","gr52_","gr53_","gr50_","gr59_","gr56_","gr52_","gr64_","gr55_","gr50_","gr56_","gr52_","gr51_","gr56_","gr51_","gr56_","gr56_","gr53_","gr49_","gr56_","gr53_","gr56_","gr56_","gr54_","gr52_","gr54_","gr54_","gr55_","gr51_","gr59_","gr51_","gr51_","gr53_","gr53_","gr51_","gr56_","gr54_","gr50_","gr53_","gr55_","gr51_","gr53_","gr71_","gr54_","gr63_","gr53_","gr55_","gr52_","gr55_","gr54_","gr51_","gr49_","gr55_","gr70_","gr50_","gr59_","gr50_","gr56_","gr65_","gr50_","gr55_","gr53_","gr56_","gr53_","gr54_","gr54_","gr50_","gr50_","gr63_","gr51_","gr64_","gr50_","gr52_","gr55_","gr54_","gr50_","gr50_","gr50_","gr52_","gr52_","gr51_","gr54_","gr55_","gr52_","gr55_"],
+["gr50_","gr62_","gr59_","gr54_","gr50_","gr53_","gr56_","gr56_","gr53_","gr53_","gr50_","gr53_","gr54_","gr50_","gr55_","gr53_","gr51_","gr52_","gr56_","gr50_","gr49_","gr63_","gr50_","gr65_","gr54_","gr51_","gr54_","gr53_","gr53_","gr68_","gr50_","gr51_","gr70_","gr50_","gr71_","gr55_","gr52_","gr50_","gr49_","gr62_","gr53_","gr52_","gr50_","gr49_","gr27-","rc16_","rc19_","gr24_","gr51_","gr57_","gr49_","gr53_","gr50_","gr56_","gr53_","gr53_","gr49_","gr50_","gr52_","gr51_","gr52_","gr50_","gr52_","gr53_","gr49_","gr56_","gr53_","gr61_","gr52_","gr49_","gr54_","gr49_","gr52_","gr52_","gr53_","gr51_","gr67_","gr54_","gr58_","gr65_","gr49_","gr56_","gr53_","gr54_","gr50_","gr52_","gr51_","gr55_","gr52_","gr51_","gr53_","gr55_","gr50_","gr49_","gr49_","gr60_","gr52_","gr55_","gr55_","gr56_","gr52_","gr49_","gr53_","gr49_","gr50_","gr54_","gr52_","gr49_","gr57_","gr51_","gr49_","gr55_","gr55_","gr55_","gr53_","gr52_","gr65_","gr56_","gr52_","gr54_","gr54_","gr53_","gr50_","gr49_","gr55_","gr50_","gr49_","gr49_","gr53_","gr56_","gr53_","gr49_","gr67_","gr58_","gr56_","gr55_","gr55_","gr56_","gr54_","gr53_","gr53_","gr56_","gr51_","gr50_"],
+["gr53_","gr56_","gr55_","gr63_","gr56_","gr54_","gr49_","gr51_","gr55_","gr56_","gr49_","gr55_","gr52_","gr68_","gr53_","gr50_","gr62_","gr57_","gr53_","gr55_","gr65_","gr52_","gr55_","gr50_","gr68_","gr52_","gr51_","gr54_","gr49_","gr54_","gr56_","gr50_","gr49_","gr50_","gr69_","gr55_","gr54_","gr53_","gr49_","gr52_","gr55_","gr53_","gr68_","gr51_","gr26-","rc16_","rc18_","gr26_","gr54_","gr52_","gr57_","gr50_","gr55_","gr55_","gr56_","gr50_","gr56_","gr49_","gr60_","gr53_","gr53_","gr70_","gr56_","gr56_","gr61_","gr54_","gr55_","gr53_","gr59_","gr53_","gr52_","gr67_","gr54_","gr50_","gr50_","gr60_","gr50_","gr52_","gr54_","gr53_","gr53_","gr56_","gr72_","gr50_","gr51_","gr52_","gr53_","gr56_","gr67_","gr56_","gr56_","gr64_","gr55_","gr55_","gr60_","gr50_","gr72_","gr51_","gr51_","gr64_","gr55_","gr54_","gr67_","gr55_","gr61_","gr58_","gr52_","gr50_","gr52_","gr57_","gr51_","gr63_","gr52_","gr69_","gr50_","gr55_","gr71_","gr50_","gr53_","gr50_","gr53_","gr56_","gr63_","gr49_","gr49_","gr50_","gr51_","gr50_","gr50_","gr65_","gr51_","gr64_","gr51_","gr49_","gr52_","gr57_","gr51_","gr66_","gr56_","gr54_","gr62_","gr56_","gr51_","gr61_"],
+["gr58_","gr52_","gr55_","gr50_","gr51_","gr49_","gr49_","gr50_","gr55_","gr64_","gr49_","gr55_","gr50_","gr53_","gr53_","gr56_","gr52_","gr56_","gr54_","gr70_","gr54_","gr53_","gr49_","gr55_","gr49_","gr51_","gr56_","gr54_","gr70_","gr56_","gr55_","gr57_","gr55_","gr52_","gr56_","gr50_","gr53_","gr50_","gr55_","gr55_","gr56_","gr51_","gr54_","gr51_","gr26-","rc16_","rc18_","gr24_","gr52_","gr56_","gr60_","gr64_","gr56_","gr66_","gr50_","gr51_","gr53_","gr54_","gr51_","gr52_","gr54_","gr50_","gr54_","gr51_","gr51_","gr61_","gr52_","gr56_","gr55_","gr68_","gr49_","gr50_","gr56_","gr54_","gr55_","gr51_","gr50_","gr56_","gr59_","gr50_","gr60_","gr50_","gr54_","gr64_","gr49_","gr64_","gr61_","gr52_","gr49_","gr50_","gr50_","gr56_","gr54_","gr53_","gr56_","gr49_","gr55_","gr55_","gr51_","gr50_","gr56_","gr55_","gr54_","gr50_","gr55_","gr51_","gr59_","gr49_","gr49_","gr55_","gr55_","gr55_","gr59_","gr53_","gr59_","gr53_","gr50_","gr72_","gr52_","gr50_","gr60_","gr55_","gr51_","gr56_","gr52_","gr49_","gr54_","gr53_","gr50_","gr51_","gr61_","gr50_","gr56_","gr67_","gr54_","gr55_","gr54_","gr49_","gr50_","gr52_","gr55_","gr56_","gr54_","gr49_"],
+["gr50_","gr49_","gr51_","gr64_","gr50_","gr49_","gr62_","gr54_","gr62_","gr54_","gr56_","gr54_","gr50_","gr62_","gr55_","gr53_","gr52_","gr64_","gr51_","gr55_","gr56_","gr56_","gr50_","gr57_","gr52_","gr64_","gr53_","gr53_","gr52_","gr66_","gr56_","gr49_","gr64_","gr55_","gr54_","gr56_","gr49_","gr51_","gr51_","gr55_","gr56_","gr54_","gr56_","gr49_","gr27-","rc16_","rc18_","gr27_","gr53_","gr62_","gr52_","gr49_","gr70_","gr55_","gr49_","gr56_","gr49_","gr56_","gr66_","gr50_","gr49_","gr53_","gr54_","gr54_","gr69_","gr53_","gr53_","gr52_","gr63_","gr54_","gr51_","gr53_","gr56_","gr63_","gr52_","gr49_","gr51_","gr52_","gr50_","gr71_","gr54_","gr53_","gr56_","gr49_","gr52_","gr55_","gr51_","gr53_","gr54_","gr50_","gr51_","gr53_","gr61_","gr49_","gr55_","gr56_","gr49_","gr53_","gr62_","gr55_","gr69_","gr51_","gr55_","gr64_","gr56_","gr49_","gr50_","gr55_","gr54_","gr53_","gr53_","gr56_","gr54_","gr54_","gr56_","gr54_","gr50_","gr49_","gr56_","gr71_","gr49_","gr53_","gr56_","gr53_","gr72_","gr55_","gr67_","gr71_","gr52_","gr71_","gr51_","gr54_","gr50_","gr49_","gr54_","gr49_","gr56_","gr53_","gr52_","gr57_","gr49_","gr55_","gr58_","gr54_"],
+["gr53_","gr56_","gr50_","gr56_","gr54_","gr51_","gr49_","gr54_","gr52_","gr49_","gr55_","gr51_","gr50_","gr70_","gr50_","gr51_","gr55_","gr49_","gr52_","gr51_","gr54_","gr56_","gr56_","gr55_","gr54_","gr49_","gr57_","gr49_","gr51_","gr50_","gr59_","gr49_","gr51_","gr51_","gr56_","gr71_","gr58_","gr55_","gr53_","gr51_","gr62_","gr54_","gr50_","gr69_","gr27-","rc16_","rc18_","gr26_","gr49_","gr53_","gr55_","gr53_","gr49_","gr64_","gr54_","gr50_","gr68_","gr56_","gr49_","gr63_","gr52_","gr55_","gr56_","gr49_","gr65_","gr71_","gr49_","gr60_","gr53_","gr68_","gr52_","gr60_","gr56_","gr53_","gr56_","gr53_","gr52_","gr55_","gr67_","gr52_","gr58_","gr50_","gr54_","gr60_","gr52_","gr50_","gr54_","gr50_","gr49_","gr55_","gr53_","gr49_","gr53_","gr53_","gr71_","gr55_","gr54_","gr61_","gr54_","gr53_","gr63_","gr50_","gr54_","gr51_","gr56_","gr53_","gr49_","gr50_","gr53_","gr50_","gr52_","gr49_","gr51_","gr56_","gr56_","gr64_","gr70_","gr53_","gr66_","gr56_","gr53_","gr55_","gr52_","gr49_","gr52_","gr52_","gr50_","gr50_","gr50_","gr52_","gr53_","gr53_","gr65_","gr50_","gr52_","gr55_","gr56_","gr54_","gr54_","gr53_","gr52_","gr61_","gr56_","gr50_"],
+["gr50_","gr56_","gr53_","gr58_","gr55_","gr65_","gr66_","gr51_","gr49_","gr49_","gr54_","gr70_","gr51_","gr53_","gr56_","gr50_","gr69_","gr52_","gr56_","gr49_","gr65_","gr50_","gr60_","gr49_","gr55_","gr49_","gr53_","gr52_","gr50_","gr50_","gr56_","gr49_","gr49_","gr56_","gr70_","gr49_","gr55_","gr54_","gr52_","gr51_","gr52_","gr52_","gr59_","gr56_","gr26-","rc16_","rc18_","gr27_","gr56_","gr53_","gr55_","gr66_","gr49_","gr52_","gr49_","gr56_","gr54_","gr52_","gr72_","gr49_","gr64_","gr49_","gr51_","gr53_","gr56_","gr50_","gr50_","gr53_","gr55_","gr53_","gr58_","gr56_","gr70_","gr56_","gr68_","gr55_","gr55_","gr49_","gr54_","gr50_","gr49_","gr56_","gr56_","gr49_","gr49_","gr56_","gr56_","gr52_","gr51_","gr49_","gr55_","gr67_","gr69_","gr56_","gr49_","gr62_","gr53_","gr54_","gr49_","gr71_","gr54_","gr69_","gr51_","gr51_","gr55_","gr54_","gr56_","gr52_","gr60_","gr54_","gr53_","gr50_","gr50_","gr60_","gr53_","gr53_","gr55_","gr52_","gr50_","gr61_","gr56_","gr71_","gr56_","gr51_","gr50_","gr57_","gr51_","gr53_","gr58_","gr50_","gr59_","gr53_","gr68_","gr54_","gr55_","gr58_","gr56_","gr53_","gr55_","gr54_","gr55_","gr51_","gr56_","gr63_"],
+["gr51_","gr57_","gr53_","gr63_","gr53_","gr50_","gr64_","gr51_","gr69_","gr71_","gr53_","gr55_","gr53_","gr51_","gr55_","gr56_","gr54_","gr72_","gr49_","gr49_","gr49_","gr56_","gr54_","gr63_","gr55_","gr53_","gr49_","gr69_","gr51_","gr50_","gr71_","gr49_","gr50_","gr55_","gr56_","gr53_","gr58_","gr49_","gr49_","gr55_","gr64_","gr55_","gr53_","gr49_","gr26-","rc17_","rc19_","gr26_","gr57_","gr55_","gr49_","gr50_","gr54_","gr52_","gr49_","gr50_","gr54_","gr54_","gr71_","gr50_","gr53_","gr50_","gr56_","gr49_","gr49_","gr55_","gr62_","gr49_","gr70_","gr49_","gr54_","gr56_","gr51_","gr49_","gr56_","gr64_","gr50_","gr51_","gr66_","gr56_","gr51_","gr55_","gr54_","gr65_","gr50_","gr65_","gr55_","gr49_","gr53_","gr65_","gr56_","gr68_","gr55_","gr51_","gr53_","gr70_","gr55_","gr55_","gr56_","gr50_","gr50_","gr51_","gr53_","gr70_","gr53_","gr52_","gr54_","gr69_","gr51_","gr49_","gr49_","gr67_","gr53_","gr56_","gr53_","gr52_","gr53_","gr55_","gr56_","gr54_","gr50_","gr52_","gr52_","gr51_","gr56_","gr53_","gr53_","gr56_","gr53_","gr58_","gr53_","gr56_","gr52_","gr53_","gr56_","gr50_","gr54_","gr65_","gr56_","gr62_","gr52_","gr72_","gr50_","gr52_"],
+["gr54_","gr51_","gr63_","gr53_","gr63_","gr54_","gr53_","gr56_","gr55_","gr49_","gr51_","gr55_","gr56_","gr49_","gr56_","gr71_","gr49_","gr53_","gr69_","gr52_","gr54_","gr49_","gr54_","gr50_","gr54_","gr54_","gr53_","gr53_","gr52_","gr56_","gr55_","gr50_","gr62_","gr55_","gr53_","gr52_","gr57_","gr55_","gr52_","gr56_","gr51_","gr56_","gr62_","gr56_","gr24-","rc16_","rc19_","gr25_","gr53_","gr50_","gr72_","gr53_","gr64_","gr55_","gr55_","gr56_","gr54_","gr53_","gr61_","gr49_","gr67_","gr50_","gr63_","gr69_","gr54_","gr52_","gr54_","gr55_","gr50_","gr65_","gr55_","gr68_","gr54_","gr55_","gr60_","gr55_","gr54_","gr52_","gr49_","gr54_","gr72_","gr55_","gr55_","gr51_","gr56_","gr69_","gr52_","gr51_","gr53_","gr54_","gr49_","gr51_","gr49_","gr61_","gr51_","gr70_","gr53_","gr67_","gr51_","gr56_","gr50_","gr52_","gr54_","gr54_","gr49_","gr56_","gr53_","gr51_","gr52_","gr52_","gr54_","gr53_","gr51_","gr55_","gr65_","gr54_","gr64_","gr53_","gr52_","gr52_","gr51_","gr55_","gr56_","gr57_","gr63_","gr49_","gr49_","gr52_","gr50_","gr51_","gr50_","gr54_","gr65_","gr56_","gr55_","gr69_","gr51_","gr50_","gr49_","gr52_","gr49_","gr52_","gr54_","gr49_"],
+["gr68_","gr55_","gr54_","gr55_","gr71_","gr54_","gr55_","gr50_","gr56_","gr58_","gr50_","gr53_","gr51_","gr54_","gr51_","gr55_","gr56_","gr52_","gr53_","gr49_","gr56_","gr54_","gr52_","gr49_","gr52_","gr53_","gr49_","gr51_","gr54_","gr54_","gr49_","gr59_","gr53_","gr56_","gr54_","gr60_","gr53_","gr56_","gr53_","gr53_","gr61_","gr54_","gr55_","gr70_","gr24-","rc16_","rc19_","gr25_","gr52_","gr70_","gr51_","gr49_","gr54_","gr53_","gr52_","gr51_","gr68_","gr50_","gr52_","gr63_","gr49_","gr65_","gr56_","gr50_","gr61_","gr59_","gr50_","gr55_","gr51_","gr52_","gr55_","gr53_","gr49_","gr51_","gr55_","gr52_","gr51_","gr53_","gr49_","gr52_","gr56_","gr49_","gr52_","gr63_","gr51_","gr53_","gr55_","gr50_","gr51_","gr56_","gr50_","gr56_","gr60_","gr54_","gr50_","gr54_","gr52_","gr55_","gr57_","gr72_","gr55_","gr56_","gr52_","gr50_","gr52_","gr49_","gr59_","gr56_","gr53_","gr54_","gr52_","gr55_","gr51_","gr54_","gr49_","gr50_","gr71_","gr54_","gr69_","gr54_","gr50_","gr55_","gr51_","gr54_","gr54_","gr52_","gr55_","gr64_","gr51_","gr53_","gr51_","gr53_","gr51_","gr54_","gr52_","gr53_","gr54_","gr49_","gr50_","gr49_","gr55_","gr56_","gr67_","gr63_"],
+["gr53_","gr52_","gr49_","gr58_","gr51_","gr49_","gr55_","gr55_","gr56_","gr55_","gr56_","gr49_","gr56_","gr51_","gr56_","gr70_","gr49_","gr51_","gr49_","gr56_","gr55_","gr54_","gr71_","gr53_","gr56_","gr50_","gr52_","gr55_","gr56_","gr51_","gr53_","gr53_","gr55_","gr51_","gr52_","gr55_","gr54_","gr53_","gr52_","gr54_","gr54_","gr49_","gr64_","gr50_","gr25-","rc17_","rc19_","gr24_","gr54_","gr51_","gr65_","gr56_","gr49_","gr54_","gr70_","gr50_","gr57_","gr68_","gr50_","gr50_","gr49_","gr64_","gr51_","gr55_","gr55_","gr52_","gr50_","gr58_","gr56_","gr58_","gr52_","gr50_","gr50_","gr51_","gr51_","gr56_","gr64_","gr52_","gr67_","gr51_","gr50_","gr68_","gr53_","gr53_","gr67_","gr56_","gr72_","gr53_","gr49_","gr55_","gr51_","gr51_","gr56_","gr54_","gr51_","gr55_","gr55_","gr53_","gr51_","gr50_","gr49_","gr56_","gr56_","gr51_","gr54_","gr55_","gr49_","gr51_","gr56_","gr55_","gr53_","gr50_","gr54_","gr71_","gr68_","gr56_","gr52_","gr51_","gr53_","gr52_","gr56_","gr52_","gr55_","gr49_","gr71_","gr54_","gr63_","gr52_","gr54_","gr56_","gr56_","gr63_","gr50_","gr56_","gr70_","gr65_","gr49_","gr53_","gr51_","gr52_","gr62_","gr51_","gr51_","gr53_"],
+["gr57_","gr50_","gr55_","gr56_","gr52_","gr55_","gr69_","gr49_","gr71_","gr50_","gr54_","gr60_","gr53_","gr70_","gr63_","gr54_","gr53_","gr69_","gr56_","gr50_","gr50_","gr49_","gr56_","gr69_","gr51_","gr51_","gr64_","gr50_","gr60_","gr56_","gr51_","gr62_","gr51_","gr55_","gr53_","gr53_","gr68_","gr53_","gr56_","gr68_","gr53_","gr49_","gr56_","gr68_","gr24-","rc16_","rc19_","gr27_","gr51_","gr50_","gr52_","gr57_","gr49_","gr51_","gr53_","gr70_","gr53_","gr59_","gr56_","gr53_","gr49_","gr54_","gr55_","gr52_","gr52_","gr53_","gr53_","gr55_","gr66_","gr52_","gr55_","gr51_","gr58_","gr49_","gr54_","gr50_","gr55_","gr67_","gr71_","gr50_","gr56_","gr49_","gr50_","gr54_","gr55_","gr70_","gr54_","gr52_","gr69_","gr52_","gr51_","gr53_","gr53_","gr54_","gr55_","gr72_","gr61_","gr53_","gr50_","gr55_","gr64_","gr60_","gr49_","gr64_","gr55_","gr51_","gr55_","gr53_","gr51_","gr55_","gr63_","gr52_","gr52_","gr49_","gr52_","gr72_","gr53_","gr59_","gr50_","gr55_","gr54_","gr54_","gr50_","gr50_","gr56_","gr55_","gr49_","gr56_","gr61_","gr53_","gr49_","gr52_","gr54_","gr53_","gr55_","gr50_","gr50_","gr70_","gr51_","gr53_","gr54_","gr53_","gr60_","gr52_"],
+["gr55_","gr50_","gr49_","gr56_","gr50_","gr57_","gr49_","gr56_","gr53_","gr50_","gr52_","gr53_","gr51_","gr49_","gr55_","gr54_","gr68_","gr55_","gr52_","gr54_","gr50_","gr55_","gr63_","gr49_","gr53_","gr50_","gr51_","gr50_","gr56_","gr52_","gr59_","gr56_","gr50_","gr52_","gr65_","gr53_","gr54_","gr64_","gr51_","gr53_","gr51_","gr55_","gr49_","gr53_","gr25-","rc16_","rc18_","gr25_","gr66_","gr50_","gr58_","gr69_","gr70_","gr51_","gr51_","gr53_","gr55_","gr64_","gr53_","gr53_","gr50_","gr52_","gr54_","gr58_","gr52_","gr56_","gr53_","gr55_","gr49_","gr56_","gr56_","gr49_","gr49_","gr53_","gr49_","gr50_","gr54_","gr49_","gr52_","gr50_","gr72_","gr55_","gr51_","gr49_","gr49_","gr56_","gr58_","gr55_","gr49_","gr62_","gr51_","gr53_","gr50_","gr53_","gr51_","gr49_","gr69_","gr53_","gr68_","gr70_","gr52_","gr50_","gr49_","gr49_","gr54_","gr68_","gr53_","gr53_","gr55_","gr63_","gr52_","gr64_","gr53_","gr52_","gr71_","gr51_","gr51_","gr54_","gr53_","gr54_","gr49_","gr62_","gr53_","gr66_","gr51_","gr56_","gr53_","gr53_","gr54_","gr51_","gr54_","gr50_","gr54_","gr53_","gr53_","gr54_","gr50_","gr53_","gr51_","gr69_","gr62_","gr55_","gr54_","gr50_"],
+["gr57_","gr51_","gr55_","gr58_","gr53_","gr54_","gr50_","gr50_","gr57_","gr55_","gr49_","gr52_","gr50_","gr52_","gr49_","gr55_","gr53_","gr51_","gr51_","gr52_","gr63_","gr49_","gr52_","gr57_","gr62_","gr70_","gr54_","gr50_","gr53_","gr55_","gr52_","gr51_","gr52_","gr67_","gr50_","gr55_","gr53_","gr55_","gr51_","gr52_","gr56_","gr50_","gr49_","gr52_","gr26-","rc16_","rc18_","gr25_","gr52_","gr68_","gr52_","gr51_","gr55_","gr54_","gr55_","gr65_","gr49_","gr49_","gr51_","gr68_","gr51_","gr49_","gr54_","gr56_","gr55_","gr68_","gr56_","gr56_","gr69_","gr57_","gr55_","gr50_","gr63_","gr53_","gr60_","gr49_","gr62_","gr55_","gr52_","gr50_","gr51_","gr62_","gr55_","gr71_","gr55_","gr53_","gr52_","gr55_","gr51_","gr54_","gr52_","gr51_","gr65_","gr52_","gr50_","gr59_","gr56_","gr55_","gr49_","gr55_","gr53_","gr52_","gr54_","gr54_","gr53_","gr50_","gr50_","gr51_","gr51_","gr55_","gr50_","gr51_","gr56_","gr49_","gr54_","gr56_","gr54_","gr69_","gr53_","gr49_","gr52_","gr51_","gr55_","gr56_","gr54_","gr56_","gr50_","gr51_","gr50_","gr51_","gr70_","gr51_","gr51_","gr72_","gr49_","gr72_","gr49_","gr65_","gr52_","gr50_","gr56_","gr55_","gr59_","gr49_"],
+["gr53_","gr53_","gr49_","gr55_","gr60_","gr54_","gr49_","gr49_","gr69_","gr50_","gr55_","gr66_","gr49_","gr53_","gr53_","gr56_","gr50_","gr56_","gr54_","gr52_","gr49_","gr70_","gr55_","gr54_","gr62_","gr56_","gr56_","gr55_","gr51_","gr50_","gr56_","gr53_","gr57_","gr51_","gr54_","gr59_","gr65_","gr64_","gr49_","gr54_","gr52_","gr66_","gr49_","gr49_","gr24-","rc17_","rc19_","gr25_","gr49_","gr70_","gr49_","gr51_","gr54_","gr61_","gr56_","gr50_","gr49_","gr65_","gr56_","gr65_","gr54_","gr69_","gr56_","gr54_","gr52_","gr50_","gr55_","gr52_","gr54_","gr52_","gr52_","gr49_","gr51_","gr51_","gr54_","gr54_","gr55_","gr52_","gr53_","gr50_","gr56_","gr62_","gr56_","gr55_","gr50_","gr53_","gr68_","gr51_","gr52_","gr59_","gr52_","gr56_","gr56_","gr49_","gr59_","gr53_","gr54_","gr50_","gr51_","gr67_","gr50_","gr49_","gr50_","gr56_","gr50_","gr70_","gr55_","gr55_","gr49_","gr69_","gr50_","gr55_","gr54_","gr55_","gr49_","gr56_","gr70_","gr55_","gr68_","gr49_","gr54_","gr70_","gr50_","gr52_","gr65_","gr55_","gr49_","gr72_","gr56_","gr68_","gr50_","gr54_","gr53_","gr55_","gr59_","gr53_","gr55_","gr66_","gr51_","gr54_","gr50_","gr56_","gr50_","gr49_"],
+["gr68_","gr49_","gr54_","gr70_","gr56_","gr50_","gr55_","gr52_","gr55_","gr50_","gr52_","gr54_","gr58_","gr54_","gr51_","gr49_","gr49_","gr54_","gr53_","gr55_","gr55_","gr55_","gr55_","gr55_","gr52_","gr55_","gr51_","gr51_","gr66_","gr51_","gr53_","gr56_","gr56_","gr60_","gr54_","gr50_","gr58_","gr54_","gr53_","gr53_","gr55_","gr56_","gr57_","gr53_","gr27-","rc16_","rc18_","gr24_","gr49_","gr50_","gr51_","gr69_","gr49_","gr55_","gr55_","gr54_","gr64_","gr53_","gr53_","gr52_","gr49_","gr56_","gr67_","gr61_","gr52_","gr49_","gr50_","gr50_","gr52_","gr51_","gr54_","gr51_","gr55_","gr55_","gr57_","gr49_","gr57_","gr56_","gr72_","gr50_","gr57_","gr56_","gr60_","gr49_","gr66_","gr49_","gr50_","gr51_","gr51_","gr53_","gr51_","gr59_","gr56_","gr54_","gr53_","gr55_","gr55_","gr55_","gr49_","gr72_","gr52_","gr49_","gr67_","gr54_","gr54_","gr55_","gr68_","gr50_","gr55_","gr51_","gr51_","gr51_","gr56_","gr54_","gr64_","gr49_","gr66_","gr52_","gr56_","gr53_","gr54_","gr53_","gr52_","gr63_","gr54_","gr54_","gr50_","gr54_","gr50_","gr54_","gr50_","gr68_","gr52_","gr49_","gr50_","gr71_","gr52_","gr64_","gr51_","gr49_","gr53_","gr71_","gr50_","gr56_"],
+["gr54_","gr54_","gr56_","gr55_","gr49_","gr49_","gr50_","gr52_","gr56_","gr55_","gr49_","gr56_","gr51_","gr55_","gr50_","gr50_","gr51_","gr54_","gr56_","gr52_","gr51_","gr50_","gr53_","gr52_","gr49_","gr67_","gr53_","gr53_","gr49_","gr52_","gr60_","gr51_","gr51_","gr55_","gr50_","gr51_","gr56_","gr54_","gr70_","gr56_","gr49_","gr67_","gr56_","gr71_","gr26-","rc17_","rc19_","gr25_","gr52_","gr56_","gr56_","gr50_","gr49_","gr60_","gr52_","gr63_","gr54_","gr55_","gr50_","gr54_","gr54_","gr59_","gr49_","gr68_","gr55_","gr49_","gr56_","gr51_","gr62_","gr53_","gr62_","gr50_","gr49_","gr71_","gr51_","gr50_","gr51_","gr60_","gr53_","gr51_","gr52_","gr51_","gr52_","gr69_","gr55_","gr56_","gr53_","gr56_","gr66_","gr52_","gr67_","gr52_","gr49_","gr51_","gr49_","gr49_","gr51_","gr52_","gr50_","gr49_","gr59_","gr53_","gr49_","gr49_","gr56_","gr53_","gr49_","gr51_","gr54_","gr56_","gr55_","gr55_","gr51_","gr63_","gr59_","gr69_","gr51_","gr53_","gr50_","gr61_","gr53_","gr66_","gr71_","gr56_","gr51_","gr52_","gr61_","gr60_","gr54_","gr49_","gr62_","gr52_","gr55_","gr55_","gr56_","gr53_","gr55_","gr52_","gr51_","gr50_","gr72_","gr54_","gr60_","gr56_"],
+["gr50_","gr52_","gr69_","gr51_","gr63_","gr51_","gr50_","gr56_","gr55_","gr50_","gr54_","gr65_","gr53_","gr62_","gr52_","gr52_","gr56_","gr55_","gr54_","gr68_","gr51_","gr49_","gr50_","gr54_","gr53_","gr52_","gr55_","gr53_","gr66_","gr53_","gr52_","gr63_","gr56_","gr59_","gr50_","gr70_","gr51_","gr50_","gr54_","gr56_","gr49_","gr51_","gr56_","gr71_","gr27-","rc17_","rc18_","gr24_","gr50_","gr54_","gr57_","gr49_","gr54_","gr53_","gr63_","gr53_","gr51_","gr70_","gr55_","gr54_","gr51_","gr53_","gr56_","gr51_","gr53_","gr51_","gr59_","gr54_","gr53_","gr59_","gr52_","gr53_","gr50_","gr53_","gr53_","gr50_","gr71_","gr55_","gr51_","gr60_","gr50_","gr55_","gr71_","gr52_","gr56_","gr50_","gr71_","gr65_","gr55_","gr49_","gr50_","gr52_","gr66_","gr70_","gr55_","gr52_","gr57_","gr60_","gr55_","gr59_","gr55_","gr60_","gr54_","gr55_","gr50_","gr49_","gr54_","gr51_","gr70_","gr53_","gr52_","gr52_","gr50_","gr49_","gr49_","gr52_","gr49_","gr49_","gr66_","gr50_","gr51_","gr53_","gr49_","gr55_","gr50_","gr49_","gr50_","gr50_","gr53_","gr54_","gr54_","gr54_","gr56_","gr55_","gr51_","gr71_","gr50_","gr53_","gr66_","gr49_","gr53_","gr68_","gr56_","gr49_"],
+["gr49_","gr52_","gr54_","gr49_","gr50_","gr72_","gr65_","gr56_","gr54_","gr50_","gr50_","gr72_","gr56_","gr53_","gr55_","gr54_","gr56_","gr50_","gr56_","gr54_","gr56_","gr52_","gr67_","gr52_","gr56_","gr51_","gr57_","gr52_","gr51_","gr53_","gr55_","gr51_","gr56_","gr56_","gr54_","gr51_","gr50_","gr57_","gr51_","gr52_","gr56_","gr49_","gr55_","gr53_","gr24-","rc17_","rc18_","gr24_","gr50_","gr54_","gr54_","gr51_","gr72_","gr57_","gr55_","gr54_","gr54_","gr50_","gr52_","gr52_","gr56_","gr54_","gr65_","gr50_","gr54_","gr53_","gr49_","gr67_","gr49_","gr51_","gr72_","gr52_","gr50_","gr56_","gr55_","gr56_","gr51_","gr49_","gr52_","gr53_","gr51_","gr53_","gr55_","gr53_","gr54_","gr56_","gr54_","gr54_","gr67_","gr67_","gr49_","gr58_","gr53_","gr49_","gr55_","gr55_","gr51_","gr52_","gr56_","gr56_","gr55_","gr71_","gr56_","gr58_","gr51_","gr49_","gr59_","gr65_","gr55_","gr56_","gr51_","gr49_","gr52_","gr52_","gr59_","gr52_","gr52_","gr56_","gr56_","gr50_","gr56_","gr52_","gr66_","gr53_","gr49_","gr54_","gr64_","gr49_","gr55_","gr52_","gr49_","gr50_","gr69_","gr51_","gr52_","gr62_","gr51_","gr52_","gr57_","gr54_","gr50_","gr49_","gr70_","gr49_"],
+["gr52_","gr60_","gr59_","gr49_","gr58_","gr49_","gr69_","gr52_","gr51_","gr55_","gr71_","gr53_","gr68_","gr51_","gr52_","gr49_","gr58_","gr53_","gr55_","gr50_","gr50_","gr57_","gr51_","gr62_","gr58_","gr55_","gr51_","gr65_","gr53_","gr52_","gr51_","gr71_","gr51_","gr54_","gr53_","gr51_","gr54_","gr52_","gr54_","gr52_","gr54_","gr51_","gr54_","gr50_","gr26-","rc16_","rc19_","gr25_","gr53_","gr56_","gr55_","gr70_","gr54_","gr56_","gr53_","gr52_","gr56_","gr52_","gr56_","gr49_","gr71_","gr55_","gr52_","gr50_","gr49_","gr49_","gr51_","gr51_","gr50_","gr55_","gr50_","gr56_","gr56_","gr65_","gr49_","gr53_","gr56_","gr50_","gr54_","gr71_","gr55_","gr51_","gr50_","gr56_","gr49_","gr49_","gr51_","gr71_","gr54_","gr50_","gr49_","gr54_","gr56_","gr52_","gr49_","gr51_","gr55_","gr54_","gr60_","gr55_","gr53_","gr52_","gr49_","gr50_","gr66_","gr56_","gr55_","gr53_","gr65_","gr60_","gr52_","gr54_","gr64_","gr56_","gr49_","gr63_","gr52_","gr66_","gr60_","gr56_","gr51_","gr49_","gr52_","gr49_","gr49_","gr50_","gr56_","gr56_","gr52_","gr51_","gr49_","gr49_","gr55_","gr51_","gr51_","gr49_","gr50_","gr55_","gr72_","gr50_","gr49_","gr62_","gr69_","gr66_"],
+["gr49_","gr55_","gr59_","gr52_","gr70_","gr53_","gr55_","gr53_","gr55_","gr50_","gr51_","gr56_","gr56_","gr57_","gr51_","gr67_","gr64_","gr50_","gr64_","gr56_","gr49_","gr50_","gr49_","gr53_","gr50_","gr49_","gr53_","gr68_","gr56_","gr50_","gr50_","gr52_","gr56_","gr62_","gr49_","gr62_","gr55_","gr49_","gr71_","gr56_","gr51_","gr52_","gr53_","gr53_","gr24-","rc16_","rc19_","gr24_","gr51_","gr50_","gr51_","gr52_","gr49_","gr67_","gr57_","gr54_","gr65_","gr51_","gr52_","gr52_","gr54_","gr63_","gr49_","gr50_","gr55_","gr63_","gr49_","gr53_","gr55_","gr63_","gr57_","gr56_","gr62_","gr55_","gr50_","gr64_","gr53_","gr51_","gr58_","gr49_","gr54_","gr52_","gr50_","gr62_","gr49_","gr53_","gr54_","gr53_","gr56_","gr63_","gr55_","gr49_","gr52_","gr53_","gr52_","gr54_","gr62_","gr49_","gr53_","gr49_","gr71_","gr53_","gr55_","gr54_","gr56_","gr59_","gr51_","gr71_","gr51_","gr54_","gr55_","gr67_","gr55_","gr54_","gr51_","gr53_","gr49_","gr56_","gr69_","gr49_","gr54_","gr60_","gr54_","gr51_","gr49_","gr53_","gr58_","gr56_","gr59_","gr52_","gr68_","gr50_","gr70_","gr53_","gr56_","gr56_","gr57_","gr57_","gr55_","gr52_","gr56_","gr50_","gr55_","gr51_"],
+["gr49_","gr58_","gr56_","gr49_","gr55_","gr53_","gr55_","gr50_","gr50_","gr58_","gr55_","gr50_","gr54_","gr54_","gr52_","gr54_","gr64_","gr49_","gr54_","gr49_","gr52_","gr54_","gr52_","gr56_","gr50_","gr55_","gr70_","gr54_","gr52_","gr56_","gr50_","gr56_","gr49_","gr55_","gr56_","gr50_","gr53_","gr66_","gr53_","gr49_","gr55_","gr49_","gr52_","gr55_","gr27-","rc16_","rc18_","gr25_","gr52_","gr54_","gr68_","gr53_","gr49_","gr49_","gr67_","gr53_","gr49_","gr55_","gr56_","gr53_","gr55_","gr54_","gr56_","gr51_","gr56_","gr54_","gr59_","gr49_","gr50_","gr49_","gr54_","gr61_","gr50_","gr50_","gr60_","gr49_","gr52_","gr51_","gr56_","gr51_","gr55_","gr53_","gr61_","gr54_","gr54_","gr60_","gr54_","gr55_","gr56_","gr57_","gr54_","gr58_","gr49_","gr62_","gr49_","gr51_","gr55_","gr53_","gr49_","gr52_","gr54_","gr50_","gr67_","gr53_","gr53_","gr52_","gr55_","gr64_","gr54_","gr56_","gr51_","gr65_","gr49_","gr61_","gr49_","gr68_","gr50_","gr49_","gr52_","gr55_","gr71_","gr51_","gr71_","gr51_","gr59_","gr63_","gr54_","gr55_","gr53_","gr54_","gr51_","gr54_","gr50_","gr59_","gr50_","gr52_","gr55_","gr55_","gr62_","gr52_","gr55_","gr54_","gr50_","gr53_"],
+["gr51_","gr55_","gr56_","gr56_","gr53_","gr55_","gr53_","gr52_","gr52_","gr55_","gr51_","gr50_","gr52_","gr58_","gr54_","gr58_","gr51_","gr56_","gr64_","gr52_","gr52_","gr54_","gr53_","gr71_","gr56_","gr51_","gr55_","gr54_","gr56_","gr69_","gr51_","gr54_","gr52_","gr50_","gr58_","gr65_","gr55_","gr55_","gr50_","gr54_","gr49_","gr52_","gr58_","gr55_","gr25-","rc16_","rc19_","gr25_","gr55_","gr52_","gr56_","gr55_","gr54_","gr50_","gr51_","gr64_","gr56_","gr49_","gr52_","gr61_","gr56_","gr53_","gr72_","gr52_","gr52_","gr54_","gr56_","gr55_","gr49_","gr55_","gr49_","gr53_","gr53_","gr58_","gr53_","gr64_","gr51_","gr51_","gr72_","gr54_","gr51_","gr56_","gr51_","gr64_","gr56_","gr55_","gr53_","gr54_","gr56_","gr56_","gr52_","gr65_","gr55_","gr54_","gr56_","gr55_","gr60_","gr51_","gr65_","gr51_","gr50_","gr49_","gr52_","gr50_","gr56_","gr50_","gr51_","gr55_","gr50_","gr49_","gr50_","gr56_","gr54_","gr54_","gr50_","gr62_","gr56_","gr54_","gr57_","gr49_","gr55_","gr56_","gr56_","gr50_","gr53_","gr49_","gr52_","gr63_","gr51_","gr49_","gr54_","gr51_","gr50_","gr68_","gr51_","gr52_","gr51_","gr59_","gr52_","gr51_","gr56_","gr56_","gr55_","gr55_"],
+["gr49_","gr53_","gr52_","gr66_","gr56_","gr53_","gr49_","gr50_","gr61_","gr50_","gr55_","gr49_","gr59_","gr53_","gr58_","gr53_","gr49_","gr57_","gr53_","gr57_","gr49_","gr49_","gr68_","gr51_","gr53_","gr53_","gr56_","gr52_","gr53_","gr49_","gr55_","gr51_","gr50_","gr53_","gr49_","gr50_","gr55_","gr54_","gr52_","gr55_","gr50_","gr60_","gr49_","gr53_","gr24-","rc17_","rc19_","gr25_","gr62_","gr50_","gr56_","gr52_","gr56_","gr54_","gr49_","gr55_","gr62_","gr56_","gr56_","gr58_","gr50_","gr51_","gr50_","gr53_","gr59_","gr63_","gr50_","gr72_","gr53_","gr49_","gr58_","gr50_","gr63_","gr56_","gr54_","gr54_","gr52_","gr49_","gr49_","gr49_","gr50_","gr60_","gr54_","gr53_","gr54_","gr69_","gr49_","gr49_","gr62_","gr53_","gr51_","gr54_","gr53_","gr70_","gr49_","gr52_","gr51_","gr50_","gr53_","gr51_","gr59_","gr52_","gr52_","gr50_","gr67_","gr69_","gr54_","gr52_","gr55_","gr65_","gr50_","gr70_","gr54_","gr64_","gr63_","gr66_","gr51_","gr61_","gr52_","gr63_","gr54_","gr50_","gr57_","gr55_","gr56_","gr50_","gr51_","gr56_","gr51_","gr70_","gr52_","gr51_","gr55_","gr49_","gr49_","gr56_","gr54_","gr52_","gr50_","gr72_","gr49_","gr50_","gr53_","gr49_"],
+["gr49_","gr69_","gr52_","gr53_","gr55_","gr55_","gr50_","gr68_","gr52_","gr49_","gr50_","gr53_","gr50_","gr56_","gr49_","gr49_","gr49_","gr51_","gr54_","gr49_","gr51_","gr55_","gr49_","gr51_","gr56_","gr51_","gr49_","gr49_","gr51_","gr52_","gr52_","gr57_","gr51_","gr50_","gr52_","gr54_","gr51_","gr50_","gr52_","gr53_","gr58_","gr50_","gr55_","gr57_","gr25-","rc16_","rc18_","gr25_","gr55_","gr50_","gr60_","gr52_","gr55_","gr54_","gr68_","gr51_","gr50_","gr68_","gr51_","gr55_","gr52_","gr72_","gr54_","gr70_","gr53_","gr50_","gr55_","gr51_","gr54_","gr53_","gr49_","gr51_","gr56_","gr51_","gr63_","gr50_","gr53_","gr55_","gr53_","gr60_","gr52_","gr50_","gr68_","gr60_","gr49_","gr55_","gr67_","gr64_","gr51_","gr54_","gr57_","gr50_","gr69_","gr53_","gr52_","gr49_","gr53_","gr50_","gr53_","gr54_","gr56_","gr59_","gr65_","gr55_","gr52_","gr62_","gr50_","gr56_","gr53_","gr49_","gr52_","gr53_","gr72_","gr51_","gr56_","gr57_","gr51_","gr49_","gr53_","gr58_","gr51_","gr50_","gr50_","gr51_","gr52_","gr51_","gr53_","gr56_","gr53_","gr52_","gr55_","gr54_","gr65_","gr49_","gr53_","gr56_","gr56_","gr50_","gr56_","gr51_","gr52_","gr51_","gr62_","gr51_"],
+["gr52_","gr53_","gr56_","gr52_","gr52_","gr52_","gr50_","gr66_","gr51_","gr63_","gr54_","gr49_","gr67_","gr50_","gr56_","gr61_","gr53_","gr55_","gr51_","gr51_","gr66_","gr49_","gr51_","gr63_","gr51_","gr71_","gr50_","gr51_","gr66_","gr55_","gr52_","gr55_","gr71_","gr49_","gr66_","gr51_","gr52_","gr72_","gr50_","gr55_","gr49_","gr52_","gr53_","gr52_","gr24-","rc16_","rc19_","gr24_","gr51_","gr51_","gr51_","gr69_","gr50_","gr49_","gr53_","gr50_","gr53_","gr54_","gr55_","gr49_","gr56_","gr53_","gr52_","gr56_","gr49_","gr54_","gr56_","gr56_","gr52_","gr53_","gr54_","gr49_","gr55_","gr52_","gr55_","gr52_","gr54_","gr53_","gr50_","gr55_","gr65_","gr49_","gr55_","gr61_","gr49_","gr52_","gr51_","gr51_","gr55_","gr54_","gr55_","gr60_","gr53_","gr51_","gr72_","gr54_","gr50_","gr68_","gr49_","gr67_","gr58_","gr52_","gr52_","gr57_","gr60_","gr52_","gr53_","gr50_","gr67_","gr56_","gr72_","gr52_","gr54_","gr55_","gr61_","gr58_","gr63_","gr55_","gr51_","gr49_","gr56_","gr55_","gr50_","gr52_","gr49_","gr67_","gr72_","gr49_","gr51_","gr59_","gr53_","gr58_","gr56_","gr52_","gr54_","gr53_","gr49_","gr54_","gr54_","gr52_","gr55_","gr60_","gr56_","gr54_"],
+["gr66_","gr55_","gr55_","gr60_","gr53_","gr52_","gr71_","gr53_","gr56_","gr49_","gr65_","gr50_","gr52_","gr52_","gr50_","gr50_","gr51_","gr52_","gr52_","gr55_","gr54_","gr53_","gr68_","gr55_","gr52_","gr49_","gr50_","gr61_","gr50_","gr50_","gr53_","gr53_","gr53_","gr49_","gr52_","gr51_","gr50_","gr49_","gr54_","gr69_","gr55_","gr53_","gr51_","gr61_","gr26-","rc16_","rc18_","gr27_","gr50_","gr54_","gr55_","gr49_","gr50_","gr56_","gr60_","gr54_","gr55_","gr53_","gr58_","gr50_","gr52_","gr56_","gr52_","gr50_","gr64_","gr51_","gr52_","gr64_","gr54_","gr49_","gr56_","gr51_","gr53_","gr49_","gr56_","gr61_","gr49_","gr65_","gr49_","gr51_","gr56_","gr57_","gr53_","gr56_","gr54_","gr52_","gr56_","gr59_","gr49_","gr50_","gr52_","gr61_","gr54_","gr49_","gr63_","gr52_","gr50_","gr55_","gr56_","gr50_","gr49_","gr49_","gr69_","gr54_","gr51_","gr55_","gr56_","gr50_","gr50_","gr54_","gr53_","gr51_","gr54_","gr53_","gr54_","gr53_","gr49_","gr49_","gr71_","gr61_","gr51_","gr65_","gr50_","gr68_","gr55_","gr50_","gr53_","gr51_","gr59_","gr52_","gr63_","gr49_","gr60_","gr51_","gr70_","gr54_","gr56_","gr55_","gr52_","gr60_","gr51_","gr52_","gr53_","gr49_"],
+["gr51_","gr51_","gr50_","gr55_","gr67_","gr55_","gr50_","gr60_","gr51_","gr49_","gr68_","gr50_","gr55_","gr52_","gr54_","gr55_","gr52_","gr50_","gr49_","gr70_","gr54_","gr53_","gr50_","gr60_","gr52_","gr55_","gr51_","gr52_","gr66_","gr51_","gr55_","gr52_","gr55_","gr50_","gr50_","gr54_","gr61_","gr54_","gr63_","gr72_","gr51_","gr50_","gr72_","gr52_","gr24-","rc16_","rc18_","gr27_","gr51_","gr49_","gr54_","gr55_","gr63_","gr50_","gr49_","gr55_","gr72_","gr49_","gr53_","gr49_","gr49_","gr52_","gr54_","gr68_","gr50_","gr50_","gr53_","gr50_","gr69_","gr55_","gr56_","gr49_","gr59_","gr52_","gr72_","gr52_","gr60_","gr53_","gr50_","gr55_","gr50_","gr50_","gr55_","gr54_","gr72_","gr55_","gr52_","gr55_","gr59_","gr52_","gr50_","gr59_","gr55_","gr53_","gr55_","gr50_","gr69_","gr67_","gr51_","gr68_","gr53_","gr65_","gr52_","gr56_","gr49_","gr56_","gr51_","gr56_","gr58_","gr52_","gr53_","gr51_","gr49_","gr52_","gr58_","gr50_","gr55_","gr54_","gr49_","gr52_","gr53_","gr56_","gr51_","gr51_","gr53_","gr56_","gr51_","gr52_","gr54_","gr54_","gr53_","gr59_","gr53_","gr52_","gr67_","gr52_","gr55_","gr53_","gr49_","gr51_","gr71_","gr51_","gr51_","gr52_"],
+["gr62_","gr55_","gr57_","gr60_","gr54_","gr70_","gr50_","gr71_","gr54_","gr54_","gr54_","gr56_","gr50_","gr52_","gr51_","gr68_","gr56_","gr57_","gr49_","gr55_","gr51_","gr49_","gr54_","gr53_","gr67_","gr51_","gr59_","gr50_","gr68_","gr52_","gr60_","gr51_","gr51_","gr52_","gr52_","gr51_","gr52_","gr55_","gr55_","gr55_","gr63_","gr53_","gr54_","gr50_","gr25-","rc16_","rc19_","gr24_","gr56_","gr55_","gr65_","gr56_","gr49_","gr55_","gr60_","gr52_","gr56_","gr51_","gr55_","gr55_","gr55_","gr70_","gr49_","gr55_","gr55_","gr50_","gr49_","gr55_","gr50_","gr49_","gr70_","gr68_","gr54_","gr61_","gr56_","gr49_","gr49_","gr65_","gr52_","gr52_","gr56_","gr69_","gr52_","gr54_","gr54_","gr70_","gr53_","gr55_","gr51_","gr51_","gr63_","gr56_","gr50_","gr49_","gr49_","gr72_","gr50_","gr49_","gr50_","gr56_","gr54_","gr53_","gr65_","gr54_","gr53_","gr54_","gr54_","gr53_","gr51_","gr65_","gr54_","gr51_","gr62_","gr60_","gr51_","gr50_","gr50_","gr54_","gr49_","gr56_","gr62_","gr53_","gr51_","gr56_","gr52_","gr70_","gr52_","gr62_","gr53_","gr49_","gr54_","gr54_","gr50_","gr50_","gr55_","gr54_","gr52_","gr65_","gr54_","gr55_","gr53_","gr50_","gr51_","gr56_"],
+["gr60_","gr53_","gr52_","gr51_","gr54_","gr55_","gr49_","gr54_","gr64_","gr56_","gr49_","gr68_","gr53_","gr52_","gr50_","gr50_","gr54_","gr50_","gr53_","gr50_","gr53_","gr72_","gr56_","gr51_","gr49_","gr52_","gr51_","gr54_","gr54_","gr60_","gr51_","gr66_","gr50_","gr55_","gr49_","gr66_","gr64_","gr50_","gr52_","gr50_","gr49_","gr53_","gr51_","gr54_","gr27-","rc16_","rc18_","gr24_","gr55_","gr61_","gr56_","gr51_","gr56_","gr55_","gr52_","gr61_","gr54_","gr49_","gr50_","gr58_","gr54_","gr56_","gr54_","gr50_","gr54_","gr51_","gr49_","gr53_","gr66_","gr54_","gr50_","gr59_","gr49_","gr50_","gr64_","gr52_","gr54_","gr51_","gr49_","gr56_","gr55_","gr49_","gr54_","gr49_","gr65_","gr56_","gr52_","gr52_","gr50_","gr56_","gr52_","gr68_","gr53_","gr53_","gr52_","gr54_","gr50_","gr71_","gr53_","gr54_","gr52_","gr52_","gr51_","gr57_","gr49_","gr49_","gr56_","gr72_","gr53_","gr53_","gr49_","gr52_","gr55_","gr54_","gr55_","gr68_","gr50_","gr50_","gr55_","gr49_","gr53_","gr55_","gr50_","gr51_","gr68_","gr51_","gr54_","gr56_","gr53_","gr69_","gr68_","gr52_","gr52_","gr50_","gr56_","gr52_","gr56_","gr65_","gr51_","gr58_","gr59_","gr56_","gr52_","gr68_"],
+["gr54_","gr61_","gr51_","gr53_","gr50_","gr53_","gr53_","gr50_","gr56_","gr56_","gr59_","gr55_","gr66_","gr50_","gr51_","gr55_","gr64_","gr52_","gr53_","gr55_","gr52_","gr50_","gr55_","gr52_","gr54_","gr51_","gr50_","gr56_","gr49_","gr52_","gr67_","gr50_","gr52_","gr52_","gr59_","gr51_","gr50_","gr65_","gr55_","gr50_","gr50_","gr50_","gr56_","gr64_","gr26-","rc16_","rc18_","gr24_","gr49_","gr53_","gr67_","gr56_","gr51_","gr51_","gr67_","gr50_","gr67_","gr53_","gr52_","gr52_","gr54_","gr49_","gr61_","gr53_","gr49_","gr53_","gr53_","gr54_","gr56_","gr55_","gr51_","gr54_","gr67_","gr53_","gr63_","gr54_","gr52_","gr53_","gr71_","gr53_","gr50_","gr70_","gr51_","gr54_","gr49_","gr53_","gr49_","gr53_","gr56_","gr57_","gr49_","gr53_","gr50_","gr56_","gr50_","gr53_","gr53_","gr56_","gr60_","gr55_","gr54_","gr54_","gr67_","gr55_","gr59_","gr50_","gr66_","gr50_","gr55_","gr64_","gr54_","gr52_","gr50_","gr49_","gr55_","gr49_","gr55_","gr57_","gr50_","gr69_","gr52_","gr63_","gr50_","gr68_","gr61_","gr55_","gr50_","gr59_","gr49_","gr51_","gr53_","gr52_","gr51_","gr54_","gr54_","gr54_","gr51_","gr56_","gr56_","gr51_","gr50_","gr53_","gr72_","gr49_"],
+["gr66_","gr53_","gr54_","gr65_","gr51_","gr53_","gr55_","gr51_","gr71_","gr53_","gr54_","gr63_","gr55_","gr64_","gr54_","gr54_","gr52_","gr56_","gr57_","gr55_","gr56_","gr55_","gr53_","gr50_","gr49_","gr63_","gr50_","gr49_","gr60_","gr50_","gr53_","gr50_","gr56_","gr51_","gr56_","gr55_","gr71_","gr51_","gr55_","gr61_","gr49_","gr53_","gr61_","gr56_","gr25-","rc17_","rc18_","gr25_","gr54_","gr54_","gr49_","gr71_","gr51_","gr50_","gr55_","gr52_","gr55_","gr55_","gr54_","gr53_","gr54_","gr49_","gr70_","gr49_","gr70_","gr49_","gr53_","gr49_","gr67_","gr51_","gr51_","gr53_","gr51_","gr70_","gr55_","gr54_","gr50_","gr54_","gr55_","gr51_","gr64_","gr53_","gr52_","gr53_","gr62_","gr54_","gr52_","gr50_","gr53_","gr56_","gr54_","gr69_","gr55_","gr50_","gr49_","gr52_","gr59_","gr49_","gr54_","gr49_","gr53_","gr51_","gr49_","gr51_","gr52_","gr56_","gr52_","gr66_","gr51_","gr59_","gr52_","gr53_","gr56_","gr53_","gr51_","gr55_","gr56_","gr51_","gr52_","gr62_","gr49_","gr51_","gr49_","gr51_","gr55_","gr59_","gr56_","gr54_","gr55_","gr58_","gr50_","gr55_","gr55_","gr53_","gr51_","gr61_","gr52_","gr59_","gr53_","gr50_","gr50_","gr49_","gr53_","gr53_"],
+["gr56_","gr63_","gr52_","gr55_","gr50_","gr65_","gr55_","gr55_","gr53_","gr55_","gr56_","gr71_","gr54_","gr54_","gr51_","gr52_","gr51_","gr53_","gr49_","gr49_","gr56_","gr56_","gr56_","gr53_","gr52_","gr56_","gr57_","gr56_","gr65_","gr49_","gr49_","gr66_","gr56_","gr50_","gr49_","gr53_","gr50_","gr49_","gr54_","gr54_","gr56_","gr69_","gr49_","gr55_","gr25-","rc16_","rc19_","gr26_","gr54_","gr56_","gr51_","gr49_","gr56_","gr52_","gr65_","gr50_","gr50_","gr54_","gr64_","gr51_","gr63_","gr49_","gr56_","gr52_","gr54_","gr54_","gr49_","gr55_","gr50_","gr50_","gr56_","gr49_","gr66_","gr51_","gr54_","gr53_","gr58_","gr55_","gr49_","gr49_","gr56_","gr53_","gr65_","gr54_","gr56_","gr50_","gr52_","gr52_","gr72_","gr53_","gr51_","gr52_","gr52_","gr51_","gr50_","gr52_","gr52_","gr52_","gr52_","gr55_","gr57_","gr52_","gr53_","gr50_","gr52_","gr51_","gr54_","gr56_","gr55_","gr53_","gr53_","gr55_","gr49_","gr51_","gr58_","gr56_","gr70_","gr56_","gr51_","gr51_","gr53_","gr53_","gr49_","gr49_","gr49_","gr54_","gr56_","gr49_","gr65_","gr51_","gr51_","gr52_","gr64_","gr55_","gr54_","gr56_","gr53_","gr52_","gr58_","gr72_","gr51_","gr53_","gr52_","gr50_"],
+["gr50_","gr50_","gr54_","gr56_","gr52_","gr56_","gr53_","gr56_","gr50_","gr55_","gr50_","gr52_","gr53_","gr50_","gr49_","gr59_","gr61_","gr51_","gr53_","gr54_","gr53_","gr68_","gr49_","gr51_","gr69_","gr54_","gr56_","gr54_","gr70_","gr70_","gr63_","gr51_","gr58_","gr51_","gr54_","gr69_","gr50_","gr66_","gr50_","gr50_","gr69_","gr50_","gr54_","gr68_","gr24-","rc17_","rc19_","gr26_","gr56_","gr52_","gr50_","gr53_","gr50_","gr50_","gr64_","gr52_","gr52_","gr50_","gr50_","gr72_","gr49_","gr56_","gr52_","gr49_","gr49_","gr53_","gr72_","gr55_","gr54_","gr68_","gr51_","gr65_","gr56_","gr54_","gr61_","gr50_","gr50_","gr55_","gr53_","gr71_","gr51_","gr54_","gr50_","gr58_","gr54_","gr49_","gr50_","gr50_","gr50_","gr55_","gr55_","gr56_","gr51_","gr52_","gr61_","gr52_","gr55_","gr56_","gr62_","gr54_","gr50_","gr56_","gr55_","gr54_","gr50_","gr51_","gr56_","gr68_","gr68_","gr55_","gr55_","gr56_","gr61_","gr50_","gr53_","gr52_","gr50_","gr49_","gr72_","gr53_","gr56_","gr53_","gr56_","gr54_","gr52_","gr56_","gr50_","gr52_","gr53_","gr52_","gr55_","gr51_","gr53_","gr53_","gr62_","gr71_","gr52_","gr50_","gr54_","gr52_","gr53_","gr72_","gr53_","gr55_"],
+["gr54_","gr55_","gr52_","gr51_","gr52_","gr51_","gr49_","gr53_","gr53_","gr52_","gr51_","gr64_","gr53_","gr54_","gr57_","gr50_","gr50_","gr50_","gr52_","gr53_","gr55_","gr67_","gr56_","gr62_","gr52_","gr50_","gr55_","gr57_","gr53_","gr51_","gr54_","gr52_","gr55_","gr53_","gr70_","gr55_","gr70_","gr54_","gr61_","gr67_","gr50_","gr52_","gr50_","gr72_","gr27-","rc17_","rc19_","gr24_","gr54_","gr49_","gr52_","gr52_","gr49_","gr59_","gr54_","gr51_","gr60_","gr51_","gr52_","gr52_","gr60_","gr55_","gr51_","gr53_","gr54_","gr53_","gr52_","gr49_","gr55_","gr50_","gr52_","gr54_","gr61_","gr54_","gr52_","gr53_","gr51_","gr54_","gr50_","gr53_","gr65_","gr49_","gr54_","gr56_","gr49_","gr59_","gr71_","gr68_","gr52_","gr54_","gr67_","gr51_","gr67_","gr52_","gr50_","gr52_","gr53_","gr53_","gr52_","gr56_","gr56_","gr55_","gr62_","gr70_","gr56_","gr49_","gr50_","gr55_","gr50_","gr56_","gr51_","gr50_","gr52_","gr50_","gr69_","gr50_","gr49_","gr69_","gr51_","gr51_","gr50_","gr49_","gr54_","gr56_","gr56_","gr58_","gr61_","gr56_","gr52_","gr55_","gr56_","gr52_","gr71_","gr54_","gr52_","gr51_","gr50_","gr54_","gr66_","gr63_","gr55_","gr51_","gr56_","gr53_"],
+["gr54_","gr53_","gr54_","gr72_","gr49_","gr49_","gr50_","gr63_","gr56_","gr62_","gr53_","gr50_","gr61_","gr49_","gr59_","gr49_","gr65_","gr51_","gr55_","gr54_","gr54_","gr54_","gr53_","gr54_","gr51_","gr51_","gr54_","gr51_","gr52_","gr55_","gr56_","gr53_","gr55_","gr57_","gr51_","gr60_","gr55_","gr53_","gr53_","gr72_","gr53_","gr52_","gr54_","gr50_","gr26-","rc17_","rc18_","gr25_","gr54_","gr63_","gr49_","gr60_","gr52_","gr55_","gr49_","gr70_","gr52_","gr50_","gr53_","gr53_","gr56_","gr52_","gr59_","gr50_","gr55_","gr70_","gr51_","gr54_","gr61_","gr51_","gr50_","gr54_","gr49_","gr52_","gr51_","gr54_","gr53_","gr52_","gr65_","gr52_","gr50_","gr53_","gr55_","gr56_","gr66_","gr49_","gr56_","gr59_","gr51_","gr66_","gr55_","gr53_","gr51_","gr51_","gr49_","gr60_","gr55_","gr52_","gr62_","gr52_","gr50_","gr58_","gr51_","gr50_","gr52_","gr52_","gr51_","gr56_","gr72_","gr64_","gr49_","gr53_","gr69_","gr52_","gr56_","gr49_","gr54_","gr61_","gr51_","gr53_","gr51_","gr67_","gr53_","gr49_","gr53_","gr67_","gr50_","gr52_","gr61_","gr52_","gr52_","gr72_","gr54_","gr66_","gr56_","gr51_","gr71_","gr62_","gr54_","gr55_","gr58_","gr52_","gr68_","gr51_"],
+["gr64_","gr52_","gr52_","gr56_","gr58_","gr50_","gr49_","gr53_","gr49_","gr70_","gr54_","gr67_","gr55_","gr52_","gr55_","gr57_","gr51_","gr53_","gr54_","gr49_","gr50_","gr52_","gr55_","gr49_","gr49_","gr66_","gr53_","gr68_","gr51_","gr50_","gr51_","gr54_","gr65_","gr54_","gr51_","gr52_","gr53_","gr56_","gr50_","gr49_","gr54_","gr50_","gr50_","gr50_","gr27-","rc17_","rc19_","gr24_","gr49_","gr55_","gr51_","gr55_","gr52_","gr55_","gr66_","gr53_","gr50_","gr70_","gr54_","gr53_","gr52_","gr49_","gr52_","gr55_","gr50_","gr56_","gr54_","gr69_","gr56_","gr55_","gr55_","gr51_","gr51_","gr55_","gr49_","gr54_","gr56_","gr50_","gr50_","gr51_","gr53_","gr58_","gr51_","gr67_","gr54_","gr51_","gr56_","gr69_","gr50_","gr52_","gr51_","gr60_","gr52_","gr49_","gr57_","gr53_","gr50_","gr52_","gr59_","gr51_","gr57_","gr56_","gr55_","gr59_","gr55_","gr53_","gr52_","gr56_","gr55_","gr55_","gr49_","gr55_","gr49_","gr55_","gr54_","gr60_","gr56_","gr56_","gr50_","gr59_","gr50_","gr51_","gr52_","gr56_","gr51_","gr51_","gr65_","gr56_","gr50_","gr65_","gr52_","gr54_","gr50_","gr50_","gr49_","gr55_","gr50_","gr60_","gr50_","gr54_","gr54_","gr53_","gr51_","gr49_"],
+["gr52_","gr53_","gr53_","gr50_","gr56_","gr54_","gr54_","gr55_","gr49_","gr51_","gr55_","gr50_","gr49_","gr70_","gr53_","gr49_","gr49_","gr56_","gr49_","gr55_","gr50_","gr69_","gr56_","gr49_","gr53_","gr53_","gr67_","gr50_","gr68_","gr53_","gr56_","gr56_","gr55_","gr52_","gr55_","gr53_","gr56_","gr54_","gr54_","gr55_","gr55_","gr52_","gr62_","gr56_","gr25-","rc17_","rc18_","gr27_","gr71_","gr56_","gr56_","gr53_","gr50_","gr49_","gr49_","gr64_","gr55_","gr55_","gr55_","gr52_","gr57_","gr53_","gr56_","gr53_","gr56_","gr52_","gr52_","gr54_","gr55_","gr55_","gr49_","gr61_","gr52_","gr63_","gr56_","gr52_","gr52_","gr55_","gr53_","gr50_","gr52_","gr49_","gr51_","gr56_","gr72_","gr55_","gr54_","gr53_","gr56_","gr51_","gr71_","gr50_","gr54_","gr55_","gr52_","gr62_","gr49_","gr54_","gr53_","gr51_","gr53_","gr49_","gr71_","gr56_","gr65_","gr51_","gr61_","gr69_","gr56_","gr62_","gr50_","gr50_","gr72_","gr51_","gr49_","gr56_","gr62_","gr54_","gr54_","gr54_","gr56_","gr71_","gr50_","gr62_","gr65_","gr51_","gr50_","gr61_","gr49_","gr56_","gr72_","gr55_","gr51_","gr53_","gr57_","gr56_","gr69_","gr56_","gr53_","gr52_","gr51_","gr62_","gr51_","gr56_"],
+["gr52_","gr70_","gr50_","gr54_","gr51_","gr54_","gr49_","gr61_","gr56_","gr69_","gr56_","gr63_","gr52_","gr63_","gr52_","gr49_","gr49_","gr53_","gr63_","gr63_","gr55_","gr50_","gr54_","gr69_","gr56_","gr70_","gr57_","gr55_","gr54_","gr55_","gr55_","gr50_","gr55_","gr51_","gr55_","gr49_","gr56_","gr55_","gr63_","gr49_","gr54_","gr52_","gr57_","gr53_","gr25-","rc17_","rc18_","gr26_","gr55_","gr50_","gr49_","gr52_","gr59_","gr56_","gr54_","gr72_","gr50_","gr70_","gr56_","gr56_","gr55_","gr57_","gr53_","gr50_","gr49_","gr49_","gr55_","gr49_","gr51_","gr50_","gr49_","gr50_","gr52_","gr52_","gr70_","gr49_","gr56_","gr52_","gr50_","gr49_","gr69_","gr49_","gr55_","gr55_","gr55_","gr55_","gr65_","gr56_","gr52_","gr55_","gr50_","gr54_","gr56_","gr53_","gr72_","gr56_","gr67_","gr56_","gr50_","gr63_","gr54_","gr62_","gr54_","gr49_","gr50_","gr54_","gr62_","gr49_","gr49_","gr52_","gr70_","gr53_","gr50_","gr64_","gr55_","gr55_","gr49_","gr71_","gr56_","gr53_","gr53_","gr49_","gr56_","gr50_","gr49_","gr49_","gr61_","gr50_","gr51_","gr49_","gr56_","gr49_","gr56_","gr51_","gr54_","gr53_","gr54_","gr49_","gr65_","gr55_","gr49_","gr53_","gr53_","gr62_"],
+["gr54_","gr49_","gr51_","gr53_","gr67_","gr49_","gr50_","gr56_","gr53_","gr52_","gr49_","gr50_","gr56_","gr72_","gr54_","gr50_","gr51_","gr50_","gr50_","gr49_","gr66_","gr49_","gr50_","gr54_","gr66_","gr53_","gr55_","gr50_","gr72_","gr64_","gr55_","gr53_","gr50_","gr52_","gr51_","gr55_","gr52_","gr52_","gr55_","gr55_","gr69_","gr49_","gr53_","gr72_","gr27-","rc17_","rc18_","gr26_","gr51_","gr53_","gr54_","gr70_","gr50_","gr65_","gr56_","gr60_","gr53_","gr50_","gr49_","gr51_","gr54_","gr52_","gr53_","gr56_","gr53_","gr55_","gr69_","gr55_","gr68_","gr56_","gr55_","gr52_","gr51_","gr55_","gr60_","gr51_","gr53_","gr63_","gr49_","gr57_","gr49_","gr50_","gr70_","gr49_","gr50_","gr50_","gr50_","gr56_","gr63_","gr56_","gr54_","gr49_","gr52_","gr65_","gr53_","gr49_","gr55_","gr52_","gr51_","gr52_","gr52_","gr54_","gr51_","gr55_","gr49_","gr54_","gr54_","gr68_","gr50_","gr49_","gr51_","gr49_","gr71_","gr55_","gr50_","gr56_","gr49_","gr52_","gr72_","gr49_","gr49_","gr56_","gr54_","gr68_","gr49_","gr64_","gr49_","gr56_","gr56_","gr50_","gr60_","gr54_","gr50_","gr53_","gr49_","gr54_","gr54_","gr71_","gr52_","gr65_","gr55_","gr60_","gr49_","gr54_"],
+["gr52_","gr54_","gr72_","gr53_","gr56_","gr72_","gr56_","gr63_","gr50_","gr57_","gr49_","gr52_","gr61_","gr55_","gr49_","gr51_","gr57_","gr50_","gr56_","gr54_","gr56_","gr53_","gr52_","gr51_","gr51_","gr56_","gr53_","gr68_","gr51_","gr49_","gr66_","gr56_","gr56_","gr62_","gr50_","gr56_","gr53_","gr60_","gr52_","gr50_","gr50_","gr52_","gr56_","gr49_","gr27-","rc17_","rc18_","gr24_","gr49_","gr50_","gr63_","gr51_","gr54_","gr54_","gr49_","gr53_","gr54_","gr51_","gr57_","gr52_","gr54_","gr54_","gr54_","gr55_","gr51_","gr55_","gr55_","gr55_","gr50_","gr50_","gr51_","gr51_","gr65_","gr55_","gr50_","gr68_","gr67_","gr50_","gr49_","gr49_","gr56_","gr52_","gr50_","gr53_","gr50_","gr72_","gr49_","gr52_","gr49_","gr71_","gr49_","gr50_","gr56_","gr53_","gr53_","gr51_","gr54_","gr66_","gr55_","gr52_","gr54_","gr65_","gr53_","gr49_","gr55_","gr52_","gr63_","gr52_","gr61_","gr54_","gr50_","gr69_","gr54_","gr55_","gr56_","gr52_","gr54_","gr52_","gr53_","gr56_","gr51_","gr53_","gr52_","gr52_","gr50_","gr53_","gr64_","gr53_","gr64_","gr53_","gr51_","gr70_","gr50_","gr66_","gr50_","gr52_","gr53_","gr50_","gr55_","gr49_","gr54_","gr51_","gr54_","gr61_"],
+["gr52_","gr52_","gr49_","gr49_","gr49_","gr49_","gr52_","gr66_","gr53_","gr51_","gr50_","gr52_","gr51_","gr54_","gr54_","gr52_","gr49_","gr58_","gr50_","gr61_","gr52_","gr51_","gr59_","gr52_","gr50_","gr49_","gr51_","gr52_","gr55_","gr57_","gr54_","gr67_","gr49_","gr49_","gr53_","gr58_","gr51_","gr55_","gr71_","gr49_","gr54_","gr67_","gr51_","gr65_","gr26-","rc16_","rc18_","gr25_","gr50_","gr49_","gr52_","gr49_","gr70_","gr54_","gr55_","gr50_","gr55_","gr58_","gr58_","gr52_","gr54_","gr56_","gr49_","gr70_","gr53_","gr56_","gr61_","gr49_","gr69_","gr55_","gr60_","gr53_","gr53_","gr52_","gr63_","gr52_","gr50_","gr53_","gr51_","gr50_","gr58_","gr56_","gr49_","gr59_","gr55_","gr50_","gr70_","gr52_","gr50_","gr52_","gr52_","gr49_","gr53_","gr56_","gr55_","gr54_","gr56_","gr56_","gr72_","gr54_","gr53_","gr72_","gr53_","gr55_","gr53_","gr55_","gr55_","gr59_","gr49_","gr50_","gr51_","gr49_","gr56_","gr49_","gr50_","gr50_","gr56_","gr56_","gr49_","gr53_","gr53_","gr55_","gr49_","gr51_","gr68_","gr50_","gr56_","gr51_","gr67_","gr50_","gr54_","gr55_","gr53_","gr50_","gr49_","gr54_","gr51_","gr59_","gr58_","gr56_","gr54_","gr56_","gr54_","gr61_"],
+["gr55_","gr51_","gr53_","gr54_","gr55_","gr54_","gr62_","gr50_","gr55_","gr51_","gr50_","gr50_","gr49_","gr53_","gr60_","gr62_","gr53_","gr52_","gr56_","gr54_","gr53_","gr53_","gr56_","gr49_","gr49_","gr55_","gr56_","gr58_","gr51_","gr56_","gr52_","gr54_","gr52_","gr70_","gr53_","gr63_","gr54_","gr54_","gr55_","gr68_","gr56_","gr56_","gr70_","gr55_","gr27-","rc17_","rc19_","gr24_","gr54_","gr56_","gr52_","gr50_","gr51_","gr50_","gr51_","gr51_","gr70_","gr54_","gr50_","gr65_","gr56_","gr65_","gr53_","gr53_","gr49_","gr50_","gr55_","gr54_","gr52_","gr55_","gr52_","gr52_","gr57_","gr55_","gr53_","gr49_","gr50_","gr54_","gr63_","gr51_","gr54_","gr53_","gr52_","gr67_","gr49_","gr55_","gr49_","gr49_","gr50_","gr61_","gr54_","gr62_","gr51_","gr51_","gr50_","gr72_","gr53_","gr56_","gr52_","gr50_","gr66_","gr50_","gr59_","gr49_","gr72_","gr55_","gr55_","gr56_","gr53_","gr53_","gr69_","gr53_","gr54_","gr51_","gr55_","gr50_","gr54_","gr54_","gr66_","gr53_","gr69_","gr54_","gr70_","gr56_","gr54_","gr54_","gr58_","gr49_","gr56_","gr55_","gr53_","gr51_","gr54_","gr69_","gr54_","gr52_","gr56_","gr65_","gr53_","gr53_","gr71_","gr53_","gr55_","gr53_"],
+["gr60_","gr51_","gr54_","gr70_","gr50_","gr55_","gr54_","gr54_","gr56_","gr64_","gr50_","gr55_","gr56_","gr51_","gr53_","gr56_","gr51_","gr55_","gr65_","gr58_","gr50_","gr50_","gr52_","gr51_","gr62_","gr59_","gr69_","gr55_","gr49_","gr54_","gr60_","gr50_","gr51_","gr52_","gr55_","gr71_","gr54_","gr56_","gr62_","gr52_","gr66_","gr51_","gr72_","gr51_","gr25-","rc17_","rc18_","gr26_","gr52_","gr49_","gr56_","gr69_","gr53_","gr56_","gr53_","gr72_","gr51_","gr55_","gr50_","gr54_","gr58_","gr49_","gr52_","gr68_","gr64_","gr54_","gr52_","gr53_","gr56_","gr51_","gr49_","gr56_","gr51_","gr71_","gr50_","gr69_","gr50_","gr55_","gr53_","gr52_","gr53_","gr68_","gr51_","gr54_","gr64_","gr56_","gr49_","gr50_","gr56_","gr68_","gr49_","gr66_","gr58_","gr52_","gr55_","gr51_","gr52_","gr49_","gr69_","gr49_","gr50_","gr55_","gr55_","gr56_","gr51_","gr69_","gr55_","gr52_","gr51_","gr50_","gr54_","gr51_","gr55_","gr51_","gr57_","gr49_","gr52_","gr49_","gr50_","gr51_","gr55_","gr51_","gr50_","gr60_","gr71_","gr51_","gr52_","gr64_","gr51_","gr49_","gr56_","gr55_","gr51_","gr52_","gr56_","gr53_","gr53_","gr53_","gr51_","gr51_","gr49_","gr61_","gr53_","gr60_"],
+["gr53_","gr53_","gr50_","gr56_","gr50_","gr50_","gr52_","gr54_","gr55_","gr66_","gr57_","gr50_","gr56_","gr56_","gr55_","gr50_","gr51_","gr52_","gr55_","gr56_","gr52_","gr59_","gr53_","gr49_","gr50_","gr52_","gr51_","gr49_","gr55_","gr68_","gr53_","gr54_","gr60_","gr51_","gr54_","gr49_","gr66_","gr53_","gr50_","gr56_","gr50_","gr67_","gr51_","gr54_","gr27-","rc17_","rc19_","gr25_","gr54_","gr51_","gr49_","gr51_","gr60_","gr50_","gr53_","gr50_","gr56_","gr69_","gr49_","gr56_","gr53_","gr56_","gr52_","gr68_","gr50_","gr59_","gr70_","gr55_","gr66_","gr50_","gr60_","gr55_","gr52_","gr53_","gr55_","gr55_","gr51_","gr56_","gr53_","gr53_","gr71_","gr51_","gr70_","gr51_","gr51_","gr51_","gr64_","gr56_","gr53_","gr56_","gr51_","gr52_","gr50_","gr54_","gr62_","gr55_","gr55_","gr52_","gr49_","gr50_","gr56_","gr63_","gr56_","gr51_","gr53_","gr56_","gr54_","gr70_","gr51_","gr55_","gr54_","gr60_","gr53_","gr50_","gr54_","gr50_","gr52_","gr53_","gr51_","gr50_","gr53_","gr60_","gr65_","gr69_","gr54_","gr55_","gr57_","gr52_","gr69_","gr54_","gr51_","gr49_","gr51_","gr56_","gr50_","gr61_","gr68_","gr53_","gr51_","gr51_","gr56_","gr52_","gr58_","gr51_"],
+["gr56_","gr56_","gr66_","gr52_","gr71_","gr49_","gr64_","gr51_","gr54_","gr65_","gr49_","gr51_","gr49_","gr52_","gr59_","gr52_","gr55_","gr58_","gr56_","gr56_","gr59_","gr54_","gr52_","gr52_","gr53_","gr50_","gr55_","gr51_","gr54_","gr49_","gr65_","gr50_","gr64_","gr52_","gr65_","gr53_","gr51_","gr62_","gr52_","gr56_","gr49_","gr56_","gr53_","gr55_","gr25-","rc17_","rc19_","gr24_","gr50_","gr70_","gr52_","gr59_","gr56_","gr56_","gr50_","gr56_","gr51_","gr49_","gr49_","gr49_","gr49_","gr71_","gr54_","gr52_","gr54_","gr49_","gr51_","gr50_","gr55_","gr52_","gr52_","gr67_","gr51_","gr63_","gr52_","gr64_","gr53_","gr55_","gr70_","gr55_","gr60_","gr52_","gr52_","gr51_","gr51_","gr50_","gr68_","gr65_","gr49_","gr50_","gr53_","gr52_","gr50_","gr70_","gr55_","gr66_","gr52_","gr56_","gr64_","gr61_","gr51_","gr67_","gr56_","gr51_","gr53_","gr72_","gr54_","gr55_","gr64_","gr49_","gr59_","gr56_","gr49_","gr49_","gr54_","gr51_","gr65_","gr63_","gr51_","gr54_","gr54_","gr54_","gr55_","gr56_","gr52_","gr53_","gr50_","gr53_","gr50_","gr51_","gr50_","gr53_","gr49_","gr50_","gr53_","gr53_","gr64_","gr49_","gr71_","gr53_","gr69_","gr51_","gr56_","gr60_"],
+["gr54_","gr52_","gr62_","gr51_","gr56_","gr51_","gr49_","gr52_","gr59_","gr54_","gr72_","gr59_","gr51_","gr56_","gr49_","gr55_","gr53_","gr49_","gr53_","gr50_","gr55_","gr53_","gr56_","gr51_","gr54_","gr54_","gr52_","gr50_","gr54_","gr54_","gr54_","gr55_","gr62_","gr54_","gr71_","gr51_","gr50_","gr50_","gr52_","gr53_","gr55_","gr50_","gr63_","gr54_","gr24-","rc17_","rc18_","gr26_","gr49_","gr51_","gr52_","gr53_","gr56_","gr72_","gr61_","gr50_","gr70_","gr50_","gr56_","gr56_","gr53_","gr53_","gr50_","gr60_","gr54_","gr57_","gr52_","gr56_","gr58_","gr49_","gr59_","gr51_","gr50_","gr55_","gr56_","gr71_","gr56_","gr54_","gr49_","gr49_","gr52_","gr55_","gr55_","gr53_","gr64_","gr53_","gr54_","gr63_","gr52_","gr56_","gr55_","gr51_","gr51_","gr54_","gr49_","gr54_","gr68_","gr53_","gr52_","gr59_","gr50_","gr50_","gr53_","gr71_","gr52_","gr54_","gr53_","gr49_","gr54_","gr54_","gr53_","gr56_","gr55_","gr56_","gr51_","gr62_","gr52_","gr49_","gr54_","gr49_","gr61_","gr53_","gr72_","gr49_","gr59_","gr53_","gr66_","gr63_","gr53_","gr55_","gr52_","gr50_","gr53_","gr49_","gr52_","gr50_","gr58_","gr55_","gr49_","gr54_","gr54_","gr50_","gr56_","gr55_"],
+["gr55_","gr50_","gr53_","gr52_","gr54_","gr49_","gr56_","gr49_","gr55_","gr56_","gr56_","gr49_","gr53_","gr67_","gr49_","gr66_","gr55_","gr49_","gr54_","gr55_","gr56_","gr56_","gr51_","gr54_","gr71_","gr63_","gr49_","gr64_","gr55_","gr50_","gr53_","gr52_","gr56_","gr49_","gr49_","gr52_","gr52_","gr65_","gr66_","gr54_","gr52_","gr50_","gr49_","gr52_","gr25-","rc17_","rc19_","gr26_","gr51_","gr49_","gr56_","gr49_","gr53_","gr68_","gr54_","gr49_","gr55_","gr49_","gr71_","gr53_","gr51_","gr59_","gr56_","gr52_","gr56_","gr50_","gr49_","gr56_","gr50_","gr50_","gr55_","gr72_","gr55_","gr60_","gr53_","gr52_","gr52_","gr68_","gr54_","gr68_","gr54_","gr50_","gr61_","gr49_","gr50_","gr50_","gr69_","gr50_","gr54_","gr52_","gr49_","gr56_","gr53_","gr61_","gr54_","gr50_","gr55_","gr51_","gr51_","gr50_","gr54_","gr53_","gr56_","gr55_","gr50_","gr65_","gr52_","gr56_","gr35_","gr29|","gr28|","gr29|","gr28|","gr28|","gr30|","gr28|","gr28|","gr28|","gr29|","gr28|","gr31|","gr30|","gr30|","gr30|","gr28|","gr29|","gr31|","gr29|","gr31|","gr28|","gr28|","gr30|","gr29|","gr29|","gr28|","gr29|","gr31|","gr30|","gr29|","gr29|","gr29|","gr31|","gr30|","gr30|"],
+["gr51_","gr49_","gr49_","gr55_","gr50_","gr66_","gr53_","gr50_","gr66_","gr55_","gr55_","gr53_","gr56_","gr53_","gr51_","gr54_","gr59_","gr51_","gr50_","gr62_","gr53_","gr53_","gr51_","gr61_","gr54_","gr53_","gr69_","gr52_","gr49_","gr69_","gr54_","gr49_","gr52_","gr54_","gr71_","gr55_","gr68_","gr67_","gr54_","gr59_","gr55_","gr70_","gr50_","gr72_","gr26-","rc16_","rc19_","gr26_","gr56_","gr57_","gr55_","gr72_","gr55_","gr52_","gr53_","gr68_","gr55_","gr53_","gr70_","gr49_","gr49_","gr55_","gr71_","gr53_","gr53_","gr60_","gr49_","gr51_","gr54_","gr54_","gr66_","gr56_","gr52_","gr55_","gr57_","gr55_","gr56_","gr50_","gr53_","gr54_","gr52_","gr63_","gr55_","gr55_","gr49_","gr67_","gr51_","gr56_","gr54_","gr62_","gr51_","gr51_","gr72_","gr51_","gr52_","gr55_","gr53_","gr51_","gr55_","gr53_","gr55_","gr66_","gr49_","gr51_","gr55_","gr49_","gr51_","gr52_","gr24-","rc9_","rc21_","rc21_","rc20_","rc21_","rc20_","rc20_","rc21_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc21_","rc20_","rc20_","rc21_","rc21_","rc20_","rc20_","rc21_","rc21_","rc20_","rc21_","rc21_","rc20_","rc20_","rc21_","rc21_","rc21_","rc21_","rc21_","rc20_"],
+["gr50_","gr49_","gr56_","gr53_","gr58_","gr54_","gr56_","gr56_","gr52_","gr52_","gr61_","gr56_","gr52_","gr70_","gr54_","gr66_","gr50_","gr62_","gr51_","gr56_","gr55_","gr54_","gr49_","gr49_","gr68_","gr56_","gr49_","gr54_","gr51_","gr55_","gr65_","gr55_","gr60_","gr51_","gr49_","gr52_","gr49_","gr65_","gr55_","gr52_","gr50_","gr49_","gr52_","gr50_","gr26-","rc17_","rc18_","gr26_","gr55_","gr49_","gr50_","gr49_","gr70_","gr54_","gr50_","gr51_","gr53_","gr54_","gr53_","gr51_","gr72_","gr51_","gr49_","gr54_","gr53_","gr55_","gr54_","gr56_","gr55_","gr54_","gr50_","gr61_","gr55_","gr55_","gr69_","gr49_","gr54_","gr55_","gr54_","gr49_","gr52_","gr54_","gr52_","gr56_","gr68_","gr56_","gr54_","gr51_","gr54_","gr52_","gr52_","gr69_","gr52_","gr49_","gr52_","gr68_","gr53_","gr52_","gr54_","gr49_","gr69_","gr52_","gr55_","gr68_","gr51_","gr54_","gr50_","gr54_","gr27-","rc16_","rc3_","rc24_","rc22_","rc23_","rc27_","rc0_","rc25_","rc23_","rc22_","rc27_","rc5_","rc24_","rc23_","rc22_","rc27_","rc6_","rc25_","rc23_","rc22_","rc27_","rc5_","rc24_","rc23_","rc23_","rc27_","rc4_","rc24_","rc22_","rc22_","rc27_","rc2_","rc24_","rc22_","rc23_"],
+["gr59_","gr50_","gr51_","gr53_","gr54_","gr62_","gr56_","gr58_","gr69_","gr54_","gr52_","gr49_","gr49_","gr55_","gr51_","gr70_","gr51_","gr50_","gr71_","gr52_","gr54_","gr51_","gr53_","gr49_","gr49_","gr49_","gr53_","gr55_","gr54_","gr57_","gr53_","gr52_","gr54_","gr51_","gr55_","gr51_","gr50_","gr50_","gr54_","gr50_","gr59_","gr56_","gr53_","gr58_","gr27-","rc16_","rc19_","gr26_","gr50_","gr51_","gr49_","gr53_","gr58_","gr52_","gr68_","gr55_","gr51_","gr52_","gr60_","gr51_","gr56_","gr55_","gr68_","gr64_","gr55_","gr52_","gr70_","gr55_","gr53_","gr65_","gr63_","gr55_","gr72_","gr52_","gr49_","gr65_","gr52_","gr67_","gr56_","gr53_","gr55_","gr53_","gr54_","gr51_","gr69_","gr71_","gr55_","gr50_","gr52_","gr57_","gr53_","gr61_","gr56_","gr62_","gr53_","gr49_","gr64_","gr55_","gr65_","gr56_","gr56_","gr56_","gr52_","gr49_","gr53_","gr49_","gr56_","gr54_","gr25-","rc17_","rc1_","rc18_","dt3_","dt3-","rc17_","rc5_","rc18_","dt1_","dt2-","rc17_","rc4_","rc19_","sa3_","sa12_","rc17_","rc3_","rc18_","sa4_","sa4_","rc17_","rc5_","rc19_","sa4_","sa0_","rc16_","rc1_","rc18_","sa7_","sa7_","rc17_","rc0_","rc18_","dt0_","dt10_"]]

+ 144 - 0
test/testdata/ObjectPropertyTest/underground_terrain.json

@@ -0,0 +1,144 @@
+[["rc1_","rc7_","rc2_","rc7_","rc0_","rc7_","rc2_","rc5_","rc0_","rc7_","rc0_","rc4_","rc7_","rc1_","rc1_","rc2_","rc0_","rc6_","rc3_","rc7_","rc7_","rc2_","rc4_","rc7_","rc4_","rc5_","rc3_","rc2_","rc7_","rc1_","rc5_","rc0_","rc3_","rc0_","rc2_","rc0_","rc6_","rc6_","rc1_","rc2_","rc7_","rc0_","rc1_","rc4_","rc1_","rc3_","rc2_","rc2_","rc7_","rc7_","rc3_","rc2_","rc0_","rc5_","rc5_","rc7_","rc6_","rc7_","rc0_","rc4_","rc1_","rc0_","rc5_","rc3_","rc1_","rc4_","rc3_","rc6_","rc4_","rc1_","rc6_","rc6_","rc5_","rc5_","rc5_","rc2_","rc6_","rc1_","rc3_","rc3_","rc7_","rc7_","rc0_","rc5_","rc7_","rc1_","rc0_","rc0_","rc2_","rc2_","rc5_","rc0_","rc3_","rc0_","rc1_","rc2_","rc4_","rc2_","rc6_","rc1_","rc4_","rc6_","rc1_","rc7_","rc1_","rc7_","rc4_","rc7_","rc7_","rc5_","rc4_","rc3_","rc7_","rc5_","rc2_","rc1_","rc3_","rc3_","rc5_","rc4_","rc0_","rc5_","rc0_","rc0_","rc5_","rc2_","rc0_","rc5_","rc4_","rc2_","rc2_","rc0_","rc6_","rc7_","rc2_","rc7_","rc4_","rc5_","rc6_","rc3_","rc3_","rc6_","rc4_","rc3_"],
+["rc7_","rc2_","rc1_","rc6_","rc4_","rc5_","rc5_","rc1_","rc1_","rc0_","rc3_","rc2_","rc6_","rc5_","rc4_","rc4_","rc7_","rc5_","rc6_","rc5_","rc2_","rc4_","rc1_","rc4_","rc5_","rc0_","rc3_","rc6_","rc3_","rc5_","rc5_","rc3_","rc1_","rc5_","rc6_","rc4_","rc3_","rc6_","rc6_","rc0_","rc5_","rc4_","rc5_","rc0_","rc7_","rc1_","rc4_","rc7_","rc0_","rc2_","rc4_","rc6_","rc6_","rc4_","rc7_","rc7_","rc5_","rc6_","rc4_","rc0_","rc7_","rc1_","rc6_","rc2_","rc3_","rc6_","rc7_","rc3_","rc0_","rc6_","rc1_","rc1_","rc3_","rc0_","rc6_","rc0_","rc7_","rc6_","rc0_","rc5_","rc5_","rc1_","rc3_","rc4_","rc5_","rc7_","rc2_","rc7_","rc4_","rc1_","rc7_","rc0_","rc6_","rc2_","rc7_","rc1_","rc5_","rc5_","rc5_","rc2_","rc2_","rc6_","rc6_","rc3_","rc4_","rc4_","rc5_","rc3_","rc7_","rc5_","rc0_","rc0_","rc7_","rc3_","rc3_","rc7_","rc5_","rc5_","rc3_","rc6_","rc1_","rc1_","rc5_","rc0_","rc0_","rc0_","rc0_","rc1_","rc0_","rc3_","rc1_","rc2_","rc2_","rc5_","rc6_","rc0_","rc7_","rc1_","rc4_","rc0_","rc7_","rc5_","rc4_","rc6_"],
+["rc5_","rc6_","rc4_","rc6_","rc7_","rc7_","rc3_","rc2_","rc4_","rc4_","rc7_","rc6_","rc7_","rc4_","rc2_","rc0_","rc3_","rc7_","rc1_","rc3_","rc7_","rc3_","rc7_","rc6_","rc5_","rc5_","rc2_","rc1_","rc6_","rc7_","rc5_","rc0_","rc0_","rc5_","rc6_","rc3_","rc2_","rc4_","rc0_","rc4_","rc6_","rc4_","rc3_","rc3_","rc0_","rc5_","rc3_","rc6_","rc7_","rc1_","rc7_","rc5_","rc2_","rc1_","rc3_","rc6_","rc5_","rc3_","rc7_","rc4_","rc4_","rc1_","rc1_","rc5_","rc7_","rc5_","rc1_","rc4_","rc6_","rc4_","rc4_","rc4_","rc7_","rc1_","rc3_","rc6_","rc6_","rc4_","rc4_","rc5_","rc4_","rc2_","rc1_","rc0_","rc3_","rc6_","rc0_","rc0_","rc0_","rc0_","rc4_","rc2_","rc2_","rc5_","rc1_","rc7_","rc3_","rc0_","rc5_","rc2_","rc5_","rc0_","rc5_","rc2_","rc6_","rc1_","rc6_","rc1_","rc7_","rc7_","rc5_","rc4_","rc1_","rc1_","rc1_","rc3_","rc1_","rc2_","rc0_","rc3_","rc6_","rc6_","rc7_","rc3_","rc0_","rc3_","rc6_","rc4_","rc3_","rc5_","rc2_","rc5_","rc5_","rc7_","rc5_","rc5_","rc4_","rc6_","rc3_","rc2_","rc3_","rc0_","rc7_","rc2_"],
+["rc7_","rc6_","rc6_","rc0_","rc5_","rc6_","rc1_","rc1_","rc6_","rc4_","rc1_","rc7_","rc5_","rc1_","rc6_","rc5_","rc1_","rc4_","rc1_","rc5_","rc6_","rc1_","rc3_","rc7_","rc1_","rc7_","rc4_","rc2_","rc3_","rc7_","rc0_","rc0_","rc5_","rc1_","rc0_","rc5_","rc6_","rc1_","rc5_","rc0_","rc1_","rc2_","rc2_","rc5_","rc2_","rc1_","rc3_","rc2_","rc2_","rc6_","rc0_","rc1_","rc1_","rc7_","rc6_","rc6_","rc4_","rc5_","rc0_","rc1_","rc7_","rc2_","rc2_","rc6_","rc4_","rc3_","rc6_","rc3_","rc5_","rc3_","rc3_","rc1_","rc6_","rc1_","rc3_","rc7_","rc7_","rc3_","rc3_","rc3_","rc0_","rc2_","rc0_","rc2_","rc6_","rc0_","rc0_","rc3_","rc5_","rc7_","rc7_","rc7_","rc6_","rc3_","rc3_","rc3_","rc4_","rc3_","rc2_","rc1_","rc1_","rc5_","rc3_","rc4_","rc6_","rc0_","rc2_","rc3_","rc3_","rc5_","rc0_","rc0_","rc3_","rc0_","rc2_","rc1_","rc4_","rc4_","rc0_","rc6_","rc5_","rc5_","rc1_","rc4_","rc1_","rc2_","rc5_","rc1_","rc4_","rc2_","rc3_","rc1_","rc3_","rc6_","rc5_","rc1_","rc0_","rc7_","rc1_","rc2_","rc6_","rc1_","rc1_","rc0_"],
+["rc2_","rc1_","rc4_","rc4_","rc3_","rc3_","rc6_","rc6_","rc4_","rc0_","rc6_","rc7_","rc7_","rc5_","rc7_","rc6_","rc4_","rc7_","rc1_","rc1_","rc2_","rc6_","rc1_","rc7_","rc5_","rc7_","rc6_","rc4_","rc1_","rc7_","rc5_","rc4_","rc6_","rc4_","rc0_","rc3_","rc5_","rc6_","rc2_","rc5_","rc1_","rc6_","rc6_","rc1_","rc1_","rc6_","rc1_","rc3_","rc5_","rc2_","rc5_","rc3_","rc7_","rc5_","rc7_","rc0_","rc5_","rc7_","rc3_","rc0_","rc4_","rc5_","rc6_","rc4_","rc7_","rc1_","rc5_","rc0_","rc7_","rc4_","rc4_","rc1_","rc5_","rc1_","rc1_","rc2_","rc6_","rc4_","rc3_","rc0_","rc7_","rc3_","rc5_","rc4_","rc2_","rc4_","rc7_","rc2_","rc7_","rc7_","rc6_","rc0_","rc6_","rc5_","rc3_","rc0_","rc3_","rc1_","rc2_","rc1_","rc4_","rc6_","rc4_","rc3_","rc7_","rc1_","rc7_","rc2_","rc7_","rc0_","rc4_","rc5_","rc1_","rc3_","rc2_","rc7_","rc2_","rc2_","rc1_","rc6_","rc4_","rc0_","rc1_","rc2_","rc0_","rc6_","rc4_","rc0_","rc5_","rc3_","rc1_","rc7_","rc2_","rc2_","rc2_","rc3_","rc0_","rc5_","rc1_","rc1_","rc4_","rc1_","rc6_","rc2_"],
+["rc4_","rc1_","rc4_","rc3_","rc0_","rc0_","rc5_","rc3_","rc3_","rc1_","rc3_","rc7_","rc1_","rc1_","rc1_","rc3_","rc3_","rc7_","rc1_","rc2_","rc1_","rc2_","rc7_","rc0_","rc0_","rc5_","rc5_","rc6_","rc4_","rc7_","rc0_","rc6_","rc7_","rc6_","rc4_","rc7_","rc3_","rc4_","rc4_","rc3_","rc4_","rc2_","rc4_","rc7_","rc2_","rc5_","rc2_","rc3_","rc6_","rc6_","rc2_","rc2_","rc2_","rc6_","rc1_","rc4_","rc6_","rc1_","rc5_","rc2_","rc0_","rc2_","rc3_","rc2_","rc3_","rc0_","rc0_","rc5_","rc4_","rc0_","rc4_","rc4_","rc1_","rc3_","rc4_","rc2_","rc2_","rc2_","rc7_","rc6_","rc5_","rc6_","rc4_","rc7_","rc5_","rc5_","rc2_","rc5_","rc2_","rc2_","rc7_","rc6_","rc7_","rc3_","rc5_","rc6_","rc0_","rc1_","rc2_","rc3_","rc2_","rc4_","rc6_","rc0_","rc0_","rc5_","rc3_","rc7_","rc3_","rc0_","rc0_","rc5_","rc1_","rc2_","rc7_","rc0_","rc1_","rc7_","rc0_","rc4_","rc6_","rc7_","rc5_","rc7_","rc2_","rc1_","rc7_","rc2_","rc5_","rc1_","rc0_","rc1_","rc6_","rc6_","rc3_","rc5_","rc1_","rc7_","rc1_","rc7_","rc2_","rc0_","rc6_","rc7_"],
+["rc1_","rc7_","rc3_","rc7_","rc7_","rc4_","rc4_","rc1_","rc7_","rc0_","rc5_","rc0_","rc0_","rc5_","rc1_","rc6_","rc2_","rc6_","rc4_","rc1_","rc0_","rc0_","rc2_","rc3_","rc5_","rc2_","rc6_","rc3_","rc1_","rc1_","rc7_","rc6_","rc6_","rc7_","rc0_","rc2_","rc6_","rc5_","rc7_","rc4_","rc0_","rc6_","rc1_","rc0_","rc2_","rc5_","rc4_","rc1_","rc1_","rc2_","rc4_","rc2_","rc7_","rc2_","rc2_","rc4_","rc4_","rc5_","rc2_","rc0_","rc0_","rc3_","rc4_","rc0_","rc7_","rc1_","rc6_","rc2_","rc7_","rc0_","rc0_","rc5_","rc6_","rc0_","rc0_","rc6_","rc0_","rc3_","rc6_","rc4_","rc7_","rc4_","rc2_","rc3_","rc3_","rc2_","rc5_","rc6_","rc5_","rc0_","rc6_","rc1_","rc6_","rc7_","rc6_","rc6_","rc5_","rc5_","rc5_","rc6_","rc1_","rc0_","rc6_","rc3_","rc4_","rc6_","rc1_","rc3_","rc1_","rc7_","rc1_","rc7_","rc7_","rc5_","rc5_","rc5_","rc5_","rc2_","rc2_","rc3_","rc1_","rc3_","rc0_","rc5_","rc4_","rc4_","rc3_","rc0_","rc0_","rc4_","rc6_","rc0_","rc5_","rc2_","rc3_","rc7_","rc0_","rc0_","rc6_","rc7_","rc5_","rc7_","rc3_","rc2_"],
+["rc7_","rc4_","rc5_","rc0_","rc5_","rc1_","rc0_","rc1_","rc7_","rc7_","rc1_","rc3_","rc1_","rc2_","rc5_","rc6_","rc7_","rc5_","rc7_","rc6_","rc3_","rc0_","rc6_","rc1_","rc2_","rc7_","rc6_","rc2_","rc5_","rc5_","rc6_","rc5_","rc7_","rc1_","rc2_","rc4_","rc3_","rc0_","rc1_","rc1_","rc0_","rc3_","rc2_","rc4_","rc6_","rc2_","rc2_","rc0_","rc3_","rc1_","rc2_","rc1_","rc2_","rc1_","rc7_","rc1_","rc4_","rc2_","rc1_","rc3_","rc1_","rc1_","rc0_","rc7_","rc0_","rc5_","rc4_","rc0_","rc5_","rc6_","rc4_","rc2_","rc3_","rc7_","rc1_","rc0_","rc3_","rc3_","rc4_","rc5_","rc3_","rc6_","rc5_","rc1_","rc2_","rc6_","rc6_","rc6_","rc3_","rc2_","rc7_","rc4_","rc1_","rc1_","rc3_","rc2_","rc2_","rc6_","rc3_","rc5_","rc6_","rc3_","rc1_","rc6_","rc1_","rc4_","rc0_","rc7_","rc7_","rc5_","rc2_","rc6_","rc0_","rc6_","rc2_","rc6_","rc5_","rc6_","rc3_","rc2_","rc1_","rc6_","rc0_","rc3_","rc3_","rc7_","rc6_","rc4_","rc4_","rc7_","rc7_","rc4_","rc4_","rc7_","rc0_","rc3_","rc2_","rc1_","rc5_","rc1_","rc3_","rc1_","rc4_","rc3_"],
+["rc1_","rc0_","rc7_","rc0_","rc0_","rc1_","rc6_","rc3_","rc6_","rc6_","rc4_","rc1_","rc2_","rc2_","rc1_","rc6_","rc6_","rc5_","rc0_","rc3_","rc7_","rc3_","rc1_","rc2_","rc5_","rc6_","rc2_","rc5_","rc6_","rc5_","rc2_","rc4_","rc7_","rc5_","rc6_","rc6_","rc6_","rc7_","rc7_","rc2_","rc2_","rc2_","rc4_","rc6_","rc4_","rc3_","rc4_","rc0_","rc2_","rc2_","rc6_","rc2_","rc1_","rc6_","rc5_","rc3_","rc2_","rc4_","rc6_","rc4_","rc1_","rc4_","rc4_","rc1_","rc2_","rc4_","rc6_","rc1_","rc5_","rc1_","rc6_","rc7_","rc4_","rc3_","rc6_","rc2_","rc1_","rc1_","rc7_","rc1_","rc5_","rc5_","rc2_","rc3_","rc7_","rc1_","rc2_","rc6_","rc2_","rc1_","rc1_","rc6_","rc3_","rc3_","rc2_","rc1_","rc1_","rc5_","rc7_","rc1_","rc5_","rc6_","rc4_","rc2_","rc4_","rc0_","rc3_","rc4_","rc2_","rc4_","rc2_","rc2_","rc2_","rc6_","rc2_","rc4_","rc4_","rc2_","rc1_","rc3_","rc5_","rc0_","rc2_","rc3_","rc5_","rc4_","rc4_","rc6_","rc5_","rc1_","rc0_","rc6_","rc7_","rc7_","rc7_","rc2_","rc3_","rc1_","rc4_","rc5_","rc7_","rc4_","rc5_","rc4_"],
+["rc7_","rc6_","rc7_","rc7_","rc5_","rc3_","rc2_","rc1_","rc3_","rc6_","rc3_","rc3_","rc6_","rc6_","rc2_","rc6_","rc5_","rc7_","rc3_","rc0_","rc3_","rc2_","rc0_","rc0_","rc1_","rc7_","rc7_","rc5_","rc7_","rc2_","rc0_","rc5_","rc4_","rc4_","rc2_","rc2_","rc5_","rc4_","rc6_","rc1_","rc2_","rc5_","rc3_","rc6_","rc7_","rc2_","rc4_","rc2_","rc2_","rc7_","rc7_","rc6_","rc0_","rc1_","rc0_","rc5_","rc5_","rc1_","rc6_","rc4_","rc3_","rc5_","rc3_","rc5_","rc2_","rc0_","rc1_","rc6_","rc2_","rc4_","rc3_","rc3_","rc5_","rc4_","rc2_","rc3_","rc0_","rc6_","rc2_","rc1_","rc3_","rc1_","rc5_","rc1_","rc7_","rc4_","rc5_","rc7_","rc0_","rc7_","rc7_","rc2_","rc3_","rc6_","rc6_","rc6_","rc1_","rc3_","rc6_","rc2_","rc4_","rc2_","rc3_","rc7_","rc2_","rc4_","rc1_","rc3_","rc0_","rc4_","rc5_","rc5_","rc1_","rc6_","rc3_","rc1_","rc7_","rc1_","rc1_","rc6_","rc1_","rc2_","rc4_","rc7_","rc5_","rc3_","rc2_","rc7_","rc0_","rc4_","rc0_","rc0_","rc4_","rc1_","rc5_","rc5_","rc1_","rc3_","rc6_","rc6_","rc0_","rc4_","rc3_","rc4_"],
+["rc3_","rc5_","rc2_","rc6_","rc1_","rc2_","rc3_","rc4_","rc1_","rc1_","rc4_","rc2_","rc4_","rc6_","rc5_","rc7_","rc0_","rc3_","rc6_","rc6_","rc2_","rc6_","rc0_","rc4_","rc4_","rc3_","rc2_","rc4_","rc7_","rc4_","rc5_","rc7_","rc2_","rc6_","rc2_","rc0_","rc4_","rc6_","rc2_","rc7_","rc7_","rc4_","rc6_","rc4_","rc6_","rc7_","rc1_","rc7_","rc0_","rc1_","rc2_","rc5_","rc5_","rc3_","rc6_","rc6_","rc0_","rc4_","rc5_","rc4_","rc6_","rc6_","rc4_","rc6_","rc6_","rc2_","rc3_","rc6_","rc1_","rc6_","rc0_","rc0_","rc4_","rc4_","rc4_","rc5_","rc4_","rc4_","rc4_","rc7_","rc1_","rc4_","rc3_","rc5_","rc6_","rc0_","rc6_","rc1_","rc0_","rc5_","rc0_","rc0_","rc4_","rc2_","rc7_","rc1_","rc6_","rc0_","rc6_","rc2_","rc0_","rc1_","rc4_","rc7_","rc0_","rc0_","rc5_","rc5_","rc5_","rc7_","rc0_","rc6_","rc3_","rc7_","rc1_","rc6_","rc4_","rc3_","rc0_","rc5_","rc1_","rc6_","rc1_","rc6_","rc2_","rc6_","rc5_","rc0_","rc3_","rc1_","rc1_","rc2_","rc0_","rc7_","rc6_","rc4_","rc2_","rc0_","rc1_","rc3_","rc2_","rc0_","rc3_","rc6_"],
+["rc5_","rc7_","rc4_","rc7_","rc0_","rc6_","rc4_","rc4_","rc6_","rc7_","rc2_","rc7_","rc0_","rc4_","rc0_","rc2_","rc4_","rc3_","rc6_","rc7_","rc2_","rc1_","rc6_","rc7_","rc2_","rc4_","rc0_","rc1_","rc2_","rc5_","rc7_","rc5_","rc7_","rc6_","rc4_","rc2_","rc1_","rc0_","rc2_","rc5_","rc5_","rc1_","rc1_","rc3_","rc5_","rc3_","rc7_","rc0_","rc2_","rc0_","rc3_","rc1_","rc5_","rc5_","rc4_","rc7_","rc2_","rc5_","rc2_","rc5_","rc6_","rc0_","rc3_","rc4_","rc2_","rc3_","rc1_","rc5_","rc0_","rc2_","rc2_","rc7_","rc6_","rc3_","rc0_","rc1_","rc2_","rc4_","rc1_","rc2_","rc4_","rc0_","rc2_","rc7_","rc2_","rc6_","rc0_","rc5_","rc7_","rc2_","rc7_","rc0_","rc5_","rc0_","rc7_","rc3_","rc6_","rc7_","rc3_","rc1_","rc5_","rc2_","rc4_","rc3_","rc2_","rc5_","rc6_","rc3_","rc6_","rc6_","rc0_","rc0_","rc3_","rc1_","rc2_","rc3_","rc0_","rc1_","rc2_","rc1_","rc4_","rc4_","rc0_","rc2_","rc0_","rc6_","rc3_","rc2_","rc2_","rc0_","rc3_","rc6_","rc7_","rc2_","rc0_","rc1_","rc1_","rc7_","rc2_","rc7_","rc1_","rc1_","rc3_","rc2_"],
+["rc7_","rc5_","rc3_","rc3_","rc0_","rc0_","rc2_","rc3_","rc7_","rc1_","rc3_","rc2_","rc7_","rc1_","rc7_","rc1_","rc7_","rc0_","rc7_","rc3_","rc7_","rc2_","rc6_","rc1_","rc2_","rc2_","rc6_","rc6_","rc5_","rc6_","rc2_","rc7_","rc7_","rc3_","rc4_","rc0_","rc1_","rc2_","rc1_","rc3_","rc0_","rc3_","rc1_","rc2_","rc1_","rc1_","rc3_","rc7_","rc4_","rc7_","rc0_","rc2_","rc4_","rc1_","rc7_","rc2_","rc6_","rc5_","rc1_","rc0_","rc0_","rc3_","rc5_","rc1_","rc4_","rc4_","rc7_","rc2_","rc4_","rc7_","rc5_","rc0_","rc0_","rc2_","rc3_","rc0_","rc7_","rc6_","rc7_","rc5_","rc2_","rc3_","rc7_","rc1_","rc7_","rc7_","rc1_","rc6_","rc4_","rc1_","rc3_","rc4_","rc2_","rc3_","rc4_","rc6_","rc5_","rc7_","rc3_","rc0_","rc1_","rc0_","rc7_","rc4_","rc7_","rc4_","rc7_","rc5_","rc0_","rc1_","rc3_","rc3_","rc1_","rc6_","rc2_","rc1_","rc7_","rc4_","rc5_","rc3_","rc5_","rc5_","rc4_","rc4_","rc4_","rc3_","rc0_","rc7_","rc3_","rc4_","rc0_","rc4_","rc7_","rc4_","rc0_","rc5_","rc4_","rc3_","rc7_","rc1_","rc5_","rc1_","rc7_","rc1_"],
+["rc0_","rc0_","rc3_","rc2_","rc5_","rc1_","rc4_","rc2_","rc1_","rc1_","rc4_","rc6_","rc6_","rc5_","rc7_","rc3_","rc5_","rc3_","rc6_","rc4_","rc7_","rc3_","rc6_","rc4_","rc0_","rc7_","rc1_","rc4_","rc5_","rc7_","rc4_","rc7_","rc7_","rc7_","rc0_","rc3_","rc1_","rc5_","rc4_","rc3_","rc7_","rc5_","rc3_","rc3_","rc7_","rc0_","rc2_","rc4_","rc4_","rc5_","rc5_","rc1_","rc0_","rc6_","rc3_","rc1_","rc2_","rc6_","rc7_","rc5_","rc1_","rc1_","rc0_","rc4_","rc0_","rc5_","rc3_","rc6_","rc2_","rc0_","rc7_","rc6_","rc7_","rc2_","rc1_","rc3_","rc0_","rc4_","rc2_","rc0_","rc7_","rc1_","rc6_","rc3_","rc3_","rc4_","rc6_","rc3_","rc3_","rc2_","rc0_","rc6_","rc0_","rc1_","rc4_","rc1_","rc0_","rc2_","rc3_","rc1_","rc0_","rc3_","rc4_","rc2_","rc2_","rc7_","rc7_","rc6_","rc0_","rc2_","rc5_","rc0_","rc7_","rc0_","rc7_","rc2_","rc7_","rc5_","rc6_","rc3_","rc2_","rc2_","rc3_","rc5_","rc3_","rc7_","rc1_","rc6_","rc2_","rc4_","rc7_","rc5_","rc5_","rc5_","rc2_","rc0_","rc0_","rc5_","rc3_","rc4_","rc0_","rc1_","rc5_","rc4_"],
+["rc4_","rc0_","rc1_","rc5_","rc5_","rc2_","rc5_","rc2_","rc0_","rc7_","rc2_","rc3_","rc2_","rc1_","rc5_","rc3_","rc4_","rc5_","rc1_","rc2_","rc6_","rc6_","rc3_","rc0_","rc0_","rc2_","rc6_","rc4_","rc7_","rc1_","rc0_","rc4_","rc5_","rc3_","rc5_","rc5_","rc5_","rc2_","rc2_","rc6_","rc5_","rc0_","rc4_","rc0_","rc4_","rc1_","rc2_","rc0_","rc6_","rc4_","rc0_","rc0_","rc6_","rc6_","rc6_","rc2_","rc3_","rc0_","rc1_","rc7_","rc6_","rc3_","rc0_","rc0_","rc3_","rc1_","rc1_","rc3_","rc6_","rc5_","rc5_","rc7_","rc0_","rc5_","rc1_","rc3_","rc2_","rc7_","rc7_","rc4_","rc1_","rc2_","rc4_","rc6_","rc3_","rc6_","rc3_","rc6_","rc1_","rc7_","rc2_","rc5_","rc5_","rc6_","rc4_","rc7_","rc5_","rc0_","rc7_","rc4_","rc1_","rc3_","rc6_","rc7_","rc2_","rc7_","rc1_","rc6_","rc3_","rc1_","rc3_","rc1_","rc5_","rc6_","rc5_","rc6_","rc5_","rc5_","rc2_","rc3_","rc0_","rc5_","rc3_","rc6_","rc3_","rc2_","rc3_","rc2_","rc4_","rc2_","rc5_","rc3_","rc5_","rc5_","rc5_","rc4_","rc2_","rc4_","rc4_","rc7_","rc0_","rc1_","rc0_","rc5_"],
+["rc1_","rc0_","rc3_","rc6_","rc5_","rc4_","rc3_","rc3_","rc3_","rc4_","rc2_","rc2_","rc0_","rc7_","rc7_","rc1_","rc7_","rc7_","rc5_","rc7_","rc3_","rc2_","rc2_","rc0_","rc1_","rc6_","rc2_","rc7_","rc1_","rc6_","rc5_","rc1_","rc5_","rc0_","rc7_","rc7_","rc3_","rc2_","rc6_","rc4_","rc0_","rc4_","rc1_","rc0_","rc6_","rc6_","rc7_","rc4_","rc7_","rc5_","rc6_","rc7_","rc2_","rc3_","rc5_","rc1_","rc6_","rc5_","rc4_","rc6_","rc5_","rc1_","rc2_","rc5_","rc3_","rc7_","rc7_","rc1_","rc6_","rc7_","rc3_","rc7_","rc0_","rc3_","rc7_","rc1_","rc2_","rc7_","rc3_","rc3_","rc4_","rc6_","rc7_","rc4_","rc3_","rc6_","rc6_","rc0_","rc2_","rc0_","rc0_","rc3_","rc4_","rc1_","rc7_","rc0_","rc0_","rc4_","rc4_","rc3_","rc6_","rc3_","rc3_","rc4_","rc2_","rc3_","rc4_","rc5_","rc7_","rc0_","rc3_","rc5_","rc5_","rc1_","rc2_","rc6_","rc5_","rc6_","rc6_","rc4_","rc4_","rc7_","rc7_","rc0_","rc7_","rc6_","rc4_","rc3_","rc7_","rc7_","rc6_","rc7_","rc5_","rc7_","rc4_","rc2_","rc7_","rc3_","rc0_","rc4_","rc3_","rc3_","rc7_","rc4_"],
+["rc3_","rc7_","rc6_","rc5_","rc1_","rc0_","rc3_","rc7_","rc5_","rc2_","rc2_","rc3_","rc6_","rc0_","rc1_","rc7_","rc6_","rc1_","rc6_","rc3_","rc1_","rc2_","rc7_","rc3_","rc6_","rc4_","rc3_","rc6_","rc6_","rc7_","rc7_","rc6_","rc5_","rc7_","rc3_","rc1_","rc7_","rc6_","rc6_","rc7_","rc5_","rc2_","rc7_","rc5_","rc0_","rc0_","rc6_","rc2_","rc5_","rc1_","rc2_","rc0_","rc2_","rc4_","rc5_","rc5_","rc0_","rc5_","rc5_","rc2_","rc1_","rc4_","rc3_","rc4_","rc4_","rc1_","rc1_","rc1_","rc6_","rc7_","rc0_","rc5_","rc3_","rc6_","rc0_","rc6_","rc6_","rc5_","rc3_","rc4_","rc5_","rc7_","rc4_","rc6_","rc1_","rc6_","rc4_","rc1_","rc4_","rc6_","rc6_","rc2_","rc4_","rc3_","rc4_","rc5_","rc7_","rc5_","rc0_","rc7_","rc7_","rc3_","rc7_","rc1_","rc0_","rc6_","rc3_","rc6_","rc7_","rc0_","rc1_","rc7_","rc6_","rc4_","rc3_","rc4_","rc5_","rc7_","rc6_","rc7_","rc3_","rc7_","rc6_","rc4_","rc6_","rc3_","rc0_","rc3_","rc7_","rc4_","rc0_","rc1_","rc1_","rc3_","rc5_","rc3_","rc3_","rc3_","rc2_","rc4_","rc4_","rc7_","rc6_","rc2_"],
+["rc7_","rc7_","rc6_","rc4_","rc7_","rc7_","rc1_","rc6_","rc5_","rc1_","rc5_","rc1_","rc7_","rc5_","rc0_","rc4_","rc3_","rc5_","rc1_","rc7_","rc5_","rc6_","rc0_","rc2_","rc5_","rc4_","rc4_","rc2_","rc5_","rc4_","rc4_","rc4_","rc1_","rc0_","rc7_","rc4_","rc7_","rc7_","rc7_","rc0_","rc1_","rc3_","rc3_","rc0_","rc1_","rc7_","rc5_","rc1_","rc4_","rc1_","rc4_","rc3_","rc2_","rc4_","rc2_","rc0_","rc6_","rc1_","rc0_","rc6_","rc1_","rc7_","rc1_","rc6_","rc3_","rc0_","rc5_","rc5_","rc4_","rc6_","rc7_","rc3_","rc0_","rc6_","rc0_","rc3_","rc2_","rc3_","rc5_","rc2_","rc2_","rc6_","rc7_","rc4_","rc1_","rc5_","rc2_","rc3_","rc5_","rc2_","rc0_","rc1_","rc0_","rc6_","rc7_","rc0_","rc6_","rc6_","rc0_","rc7_","rc7_","rc4_","rc1_","rc0_","rc1_","rc0_","rc5_","rc0_","rc2_","rc1_","rc2_","rc7_","rc4_","rc6_","rc3_","rc1_","rc2_","rc2_","rc0_","rc4_","rc2_","rc0_","rc3_","rc3_","rc4_","rc3_","rc4_","rc1_","rc1_","rc2_","rc0_","rc2_","rc7_","rc1_","rc4_","rc7_","rc5_","rc3_","rc0_","rc0_","rc2_","rc7_","rc2_","rc0_"],
+["rc3_","rc1_","rc1_","rc3_","rc4_","rc2_","rc4_","rc3_","rc6_","rc2_","rc1_","rc3_","rc2_","rc5_","rc2_","rc3_","rc5_","rc4_","rc5_","rc6_","rc5_","rc6_","rc2_","rc0_","rc3_","rc7_","rc3_","rc3_","rc1_","rc7_","rc7_","rc4_","rc6_","rc5_","rc7_","rc2_","rc0_","rc6_","rc6_","rc7_","rc1_","rc1_","rc2_","rc3_","rc5_","rc5_","rc0_","rc4_","rc2_","rc5_","rc7_","rc2_","rc1_","rc3_","rc2_","rc2_","rc4_","rc2_","rc4_","rc1_","rc1_","rc0_","rc0_","rc4_","rc6_","rc4_","rc7_","rc6_","rc5_","rc5_","rc6_","rc2_","rc2_","rc4_","rc6_","rc1_","rc2_","rc2_","rc5_","rc5_","rc7_","rc4_","rc6_","rc7_","rc2_","rc6_","rc4_","rc7_","rc0_","rc6_","rc5_","rc2_","rc7_","rc3_","rc5_","rc0_","rc2_","rc6_","rc0_","rc6_","rc4_","rc7_","rc4_","rc2_","rc2_","rc3_","rc5_","rc6_","rc4_","rc4_","rc3_","rc6_","rc5_","rc2_","rc2_","rc5_","rc0_","rc1_","rc1_","rc5_","rc6_","rc2_","rc5_","rc5_","rc5_","rc7_","rc6_","rc0_","rc3_","rc1_","rc1_","rc4_","rc4_","rc4_","rc0_","rc0_","rc0_","rc6_","rc0_","rc2_","rc1_","rc4_","rc1_","rc7_"],
+["rc3_","rc5_","rc3_","rc4_","rc4_","rc3_","rc7_","rc5_","rc6_","rc7_","rc3_","rc4_","rc3_","rc4_","rc3_","rc4_","rc1_","rc7_","rc4_","rc6_","rc6_","rc5_","rc2_","rc4_","rc5_","rc6_","rc5_","rc4_","rc1_","rc1_","rc7_","rc0_","rc2_","rc7_","rc1_","rc3_","rc6_","rc4_","rc7_","rc6_","rc2_","rc4_","rc1_","rc5_","rc1_","rc2_","rc4_","rc3_","rc3_","rc7_","rc0_","rc5_","rc1_","rc1_","rc2_","rc5_","rc1_","rc2_","rc5_","rc6_","rc6_","rc3_","rc5_","rc0_","rc1_","rc0_","rc5_","rc4_","rc5_","rc5_","rc1_","rc2_","rc7_","rc1_","rc6_","rc0_","rc5_","rc2_","rc1_","rc7_","rc2_","rc2_","rc5_","rc1_","rc7_","rc1_","rc1_","rc5_","rc3_","rc2_","rc1_","rc6_","rc5_","rc2_","rc3_","rc0_","rc1_","rc7_","rc5_","rc5_","rc2_","rc5_","rc6_","rc7_","rc0_","rc7_","rc2_","rc7_","rc2_","rc3_","rc2_","rc6_","rc5_","rc7_","rc3_","rc1_","rc5_","rc3_","rc5_","rc2_","rc3_","rc7_","rc7_","rc5_","rc0_","rc7_","rc1_","rc0_","rc2_","rc4_","rc3_","rc7_","rc5_","rc4_","rc4_","rc7_","rc3_","rc4_","rc5_","rc1_","rc6_","rc6_","rc7_","rc1_"],
+["rc5_","rc6_","rc2_","rc7_","rc5_","rc1_","rc0_","rc5_","rc2_","rc0_","rc1_","rc3_","rc7_","rc1_","rc0_","rc0_","rc3_","rc7_","rc5_","rc2_","rc4_","rc3_","rc5_","rc0_","rc0_","rc3_","rc7_","rc5_","rc1_","rc2_","rc0_","rc7_","rc1_","rc7_","rc2_","rc1_","rc7_","rc3_","rc0_","rc6_","rc0_","rc5_","rc5_","rc0_","rc2_","rc0_","rc6_","rc0_","rc4_","rc1_","rc5_","rc6_","rc2_","rc1_","rc7_","rc2_","rc0_","rc1_","rc0_","rc4_","rc5_","rc7_","rc6_","rc2_","rc2_","rc3_","rc3_","rc0_","rc2_","rc7_","rc7_","rc5_","rc5_","rc7_","rc5_","rc3_","rc0_","rc5_","rc4_","rc7_","rc7_","rc0_","rc2_","rc2_","rc5_","rc6_","rc4_","rc7_","rc3_","rc0_","rc0_","rc6_","rc7_","rc5_","rc7_","rc0_","rc7_","rc1_","rc5_","rc4_","rc7_","rc7_","rc3_","rc2_","rc7_","rc5_","rc0_","rc6_","rc1_","rc7_","rc3_","rc6_","rc1_","rc7_","rc3_","rc7_","rc6_","rc3_","rc2_","rc6_","rc0_","rc7_","rc0_","rc3_","rc2_","rc5_","rc4_","rc2_","rc1_","rc2_","rc1_","rc5_","rc6_","rc3_","rc6_","rc4_","rc1_","rc7_","rc5_","rc7_","rc6_","rc7_","rc1_","rc5_"],
+["rc5_","rc3_","rc2_","rc5_","rc4_","rc7_","rc3_","rc6_","rc7_","rc6_","rc6_","rc2_","rc3_","rc6_","rc6_","rc0_","rc0_","rc4_","rc5_","rc2_","rc6_","rc1_","rc7_","rc4_","rc1_","rc6_","rc6_","rc7_","rc7_","rc3_","rc0_","rc4_","rc0_","rc6_","rc6_","rc4_","rc0_","rc2_","rc6_","rc0_","rc2_","rc6_","rc3_","rc5_","rc5_","rc0_","rc3_","rc2_","rc3_","rc1_","rc2_","rc5_","rc7_","rc3_","rc6_","rc2_","rc7_","rc1_","rc2_","rc5_","rc3_","rc5_","rc6_","rc3_","rc5_","rc7_","rc7_","rc4_","rc1_","rc5_","rc3_","rc4_","rc7_","rc6_","rc0_","rc2_","rc6_","rc4_","rc5_","rc0_","rc3_","rc1_","rc1_","rc4_","rc2_","rc0_","rc3_","rc6_","rc4_","rc0_","rc1_","rc3_","rc3_","rc4_","rc5_","rc1_","rc2_","rc7_","rc5_","rc5_","rc0_","rc7_","rc2_","rc1_","rc6_","rc6_","rc3_","rc2_","rc6_","rc1_","rc3_","rc1_","rc7_","rc2_","rc0_","rc0_","rc7_","rc1_","rc6_","rc7_","rc0_","rc3_","rc3_","rc7_","rc6_","rc1_","rc4_","rc0_","rc7_","rc5_","rc0_","rc6_","rc4_","rc0_","rc3_","rc1_","rc0_","rc7_","rc6_","rc5_","rc6_","rc7_","rc5_","rc6_"],
+["rc0_","rc6_","rc1_","rc0_","rc5_","rc5_","rc7_","rc7_","rc2_","rc3_","rc0_","rc3_","rc5_","rc3_","rc2_","rc6_","rc6_","rc1_","rc0_","rc0_","rc6_","rc0_","rc6_","rc2_","rc4_","rc0_","rc0_","rc2_","rc6_","rc6_","rc2_","rc7_","rc5_","rc5_","rc2_","rc6_","rc5_","rc4_","rc6_","rc4_","rc3_","rc7_","rc0_","rc5_","rc7_","rc2_","rc1_","rc4_","rc4_","rc3_","rc5_","rc3_","rc6_","rc0_","rc3_","rc5_","rc3_","rc1_","rc0_","rc3_","rc5_","rc7_","rc4_","rc4_","rc7_","rc5_","rc5_","rc0_","rc6_","rc6_","rc3_","rc7_","rc2_","rc0_","rc4_","rc5_","rc5_","rc7_","rc0_","rc2_","rc4_","rc4_","rc7_","rc7_","rc3_","rc7_","rc2_","rc2_","rc5_","rc3_","rc0_","rc6_","rc4_","rc1_","rc2_","rc5_","rc6_","rc0_","rc1_","rc0_","rc1_","rc4_","rc6_","rc0_","rc0_","rc4_","rc2_","rc5_","rc7_","rc1_","rc7_","rc7_","rc3_","rc3_","rc7_","rc4_","rc6_","rc5_","rc3_","rc1_","rc1_","rc5_","rc7_","rc4_","rc2_","rc5_","rc4_","rc1_","rc1_","rc5_","rc6_","rc4_","rc6_","rc5_","rc7_","rc7_","rc5_","rc5_","rc3_","rc4_","rc4_","rc0_","rc6_","rc4_"],
+["rc4_","rc0_","rc3_","rc1_","rc6_","rc3_","rc7_","rc2_","rc0_","rc7_","rc5_","rc5_","rc0_","rc2_","rc2_","rc2_","rc1_","rc5_","rc4_","rc4_","rc4_","rc1_","rc7_","rc3_","rc0_","rc3_","rc0_","rc1_","rc5_","rc4_","rc5_","rc2_","rc5_","rc4_","rc4_","rc7_","rc4_","rc0_","rc4_","rc4_","rc1_","rc1_","rc2_","rc1_","rc6_","rc0_","rc4_","rc6_","rc5_","rc7_","rc3_","rc2_","rc3_","rc1_","rc4_","rc6_","rc2_","rc4_","rc7_","rc5_","rc1_","rc6_","rc5_","rc7_","rc6_","rc6_","rc3_","rc6_","rc7_","rc5_","rc4_","rc0_","rc5_","rc4_","rc6_","rc7_","rc3_","rc7_","rc3_","rc6_","rc6_","rc3_","rc3_","rc5_","rc4_","rc4_","rc0_","rc6_","rc2_","rc2_","rc2_","rc0_","rc1_","rc5_","rc4_","rc3_","rc0_","rc6_","rc7_","rc6_","rc0_","rc0_","rc5_","rc6_","rc4_","rc7_","rc1_","rc0_","rc7_","rc0_","rc5_","rc1_","rc3_","rc1_","rc4_","rc4_","rc7_","rc2_","rc1_","rc4_","rc0_","rc5_","rc7_","rc2_","rc4_","rc1_","rc3_","rc0_","rc3_","rc5_","rc7_","rc7_","rc7_","rc3_","rc1_","rc6_","rc5_","rc3_","rc3_","rc4_","rc3_","rc2_","rc3_","rc1_"],
+["rc5_","rc2_","rc6_","rc0_","rc3_","rc4_","rc1_","rc7_","rc6_","rc3_","rc0_","rc2_","rc3_","rc3_","rc2_","rc5_","rc6_","rc2_","rc5_","rc0_","rc3_","rc6_","rc6_","rc0_","rc0_","rc7_","rc4_","rc3_","rc7_","rc5_","rc6_","rc4_","rc3_","rc5_","rc1_","rc1_","rc1_","rc1_","rc6_","rc1_","rc2_","rc6_","rc4_","rc1_","rc5_","rc2_","rc2_","rc1_","rc2_","rc5_","rc0_","rc3_","rc4_","rc7_","rc6_","rc3_","rc7_","rc3_","rc4_","rc5_","rc2_","rc2_","rc4_","rc3_","rc6_","rc3_","rc5_","rc6_","rc1_","rc1_","rc2_","rc0_","rc4_","rc5_","rc2_","rc0_","rc3_","rc6_","rc1_","rc5_","rc6_","rc7_","rc7_","rc6_","rc3_","rc0_","rc0_","rc1_","rc7_","rc7_","rc4_","rc2_","rc5_","rc0_","rc7_","rc6_","rc6_","rc2_","rc3_","rc1_","rc2_","rc5_","rc4_","rc5_","rc5_","rc1_","rc4_","rc5_","rc5_","rc0_","rc1_","rc1_","rc3_","rc7_","rc4_","rc2_","rc0_","rc0_","rc3_","rc0_","rc2_","rc4_","rc2_","rc1_","rc0_","rc7_","rc5_","rc5_","rc2_","rc5_","rc1_","rc0_","rc4_","rc4_","rc4_","rc0_","rc5_","rc1_","rc1_","rc0_","rc2_","rc7_","rc0_","rc4_"],
+["rc0_","rc5_","rc6_","rc6_","rc3_","rc0_","rc1_","rc1_","rc0_","rc1_","rc7_","rc3_","rc2_","rc0_","rc0_","rc0_","rc3_","rc1_","rc0_","rc4_","rc0_","rc6_","rc2_","rc1_","rc3_","rc5_","rc1_","rc3_","rc3_","rc3_","rc0_","rc0_","rc6_","rc1_","rc5_","rc4_","rc2_","rc7_","rc1_","rc3_","rc1_","rc6_","rc4_","rc0_","rc3_","rc2_","rc6_","rc6_","rc0_","rc0_","rc1_","rc5_","rc6_","rc3_","rc5_","rc0_","rc7_","rc5_","rc4_","rc4_","rc7_","rc5_","rc0_","rc3_","rc5_","rc4_","rc1_","rc2_","rc0_","rc5_","rc3_","rc0_","rc4_","rc4_","rc7_","rc0_","rc4_","rc5_","rc1_","rc0_","rc2_","rc1_","rc3_","rc3_","rc5_","rc4_","rc0_","rc4_","rc3_","rc2_","rc2_","rc5_","rc7_","rc4_","rc0_","rc6_","rc4_","rc5_","rc2_","rc1_","rc3_","rc2_","rc7_","rc6_","rc1_","rc2_","rc2_","rc3_","rc5_","rc2_","rc0_","rc6_","rc0_","rc4_","rc5_","rc6_","rc6_","rc0_","rc0_","rc6_","rc4_","rc3_","rc4_","rc4_","rc3_","rc0_","rc0_","rc1_","rc4_","rc5_","rc0_","rc1_","rc3_","rc7_","rc5_","rc6_","rc1_","rc0_","rc4_","rc0_","rc5_","rc0_","rc3_","rc0_"],
+["rc3_","rc1_","rc1_","rc5_","rc0_","rc0_","rc6_","rc6_","rc5_","rc1_","rc0_","rc1_","rc2_","rc2_","rc7_","rc4_","rc4_","rc3_","rc4_","rc2_","rc2_","rc3_","rc6_","rc0_","rc4_","rc7_","rc4_","rc0_","rc5_","rc7_","rc2_","rc6_","rc3_","rc1_","rc6_","rc1_","rc4_","rc3_","rc2_","rc4_","rc4_","rc3_","rc7_","rc6_","rc4_","rc0_","rc7_","rc7_","rc5_","rc7_","rc4_","rc4_","rc5_","rc7_","rc0_","rc4_","rc1_","rc6_","rc4_","rc3_","rc4_","rc7_","rc5_","rc7_","rc7_","rc4_","rc4_","rc2_","rc2_","rc1_","rc4_","rc0_","rc1_","rc1_","rc1_","rc1_","rc2_","rc5_","rc7_","rc1_","rc6_","rc1_","rc1_","rc6_","rc7_","rc1_","rc4_","rc2_","rc1_","rc5_","rc3_","rc1_","rc3_","rc1_","rc4_","rc5_","rc0_","rc0_","rc2_","rc0_","rc1_","rc2_","rc5_","rc1_","rc5_","rc3_","rc7_","rc4_","rc4_","rc6_","rc0_","rc3_","rc0_","rc2_","rc4_","rc1_","rc5_","rc3_","rc3_","rc1_","rc3_","rc4_","rc1_","rc2_","rc2_","rc4_","rc7_","rc6_","rc5_","rc7_","rc2_","rc3_","rc1_","rc7_","rc3_","rc1_","rc0_","rc2_","rc7_","rc5_","rc1_","rc5_","rc0_","rc5_"],
+["rc3_","rc1_","rc3_","rc5_","rc2_","rc5_","rc3_","rc2_","rc0_","rc4_","rc6_","rc5_","rc0_","rc1_","rc6_","rc3_","rc7_","rc0_","rc3_","rc2_","rc3_","rc7_","rc7_","rc6_","rc1_","rc5_","rc3_","rc5_","rc2_","rc1_","rc0_","rc7_","rc6_","rc6_","rc0_","rc2_","rc4_","rc5_","rc5_","rc5_","rc7_","rc4_","rc2_","rc4_","rc5_","rc6_","rc2_","rc3_","rc5_","rc4_","rc5_","rc6_","rc7_","rc2_","rc2_","rc1_","rc1_","rc4_","rc1_","rc3_","rc6_","rc2_","rc0_","rc1_","rc1_","rc2_","rc1_","rc0_","rc3_","rc5_","rc2_","rc2_","rc2_","rc5_","rc5_","rc5_","rc2_","rc6_","rc1_","rc0_","rc0_","rc1_","rc1_","rc0_","rc4_","rc1_","rc3_","rc2_","rc7_","rc0_","rc3_","rc1_","rc6_","rc1_","rc1_","rc2_","rc6_","rc4_","rc0_","rc6_","rc0_","rc5_","rc1_","rc1_","rc6_","rc5_","rc0_","rc1_","rc7_","rc6_","rc4_","rc0_","rc7_","rc1_","rc5_","rc5_","rc3_","rc3_","rc1_","rc0_","rc4_","rc7_","rc0_","rc5_","rc2_","rc5_","rc1_","rc3_","rc2_","rc4_","rc4_","rc6_","rc3_","rc3_","rc1_","rc1_","rc5_","rc7_","rc1_","rc0_","rc3_","rc0_","rc4_","rc4_"],
+["rc3_","rc4_","rc2_","rc0_","rc4_","rc0_","rc6_","rc4_","rc7_","rc4_","rc0_","rc0_","rc1_","rc6_","rc1_","rc4_","rc0_","rc2_","rc5_","rc6_","rc3_","rc1_","rc4_","rc3_","rc7_","rc0_","rc1_","rc1_","rc7_","rc3_","rc7_","rc4_","rc4_","rc1_","rc0_","rc0_","rc6_","rc0_","rc1_","rc7_","rc1_","rc4_","rc2_","rc2_","rc3_","rc5_","rc2_","rc5_","rc5_","rc7_","rc3_","rc7_","rc1_","rc7_","rc1_","rc7_","rc3_","rc2_","rc0_","rc5_","rc3_","rc7_","rc7_","rc0_","rc1_","rc0_","rc0_","rc4_","rc1_","rc4_","rc2_","rc7_","rc2_","rc1_","rc0_","rc3_","rc2_","rc1_","rc3_","rc6_","rc4_","rc2_","rc5_","rc0_","rc4_","rc3_","rc0_","rc5_","rc2_","rc4_","rc7_","rc5_","rc6_","rc5_","rc2_","rc0_","rc3_","rc1_","rc0_","rc5_","rc6_","rc4_","rc0_","rc4_","rc1_","rc2_","rc1_","rc3_","rc3_","rc2_","rc3_","rc6_","rc3_","rc4_","rc5_","rc3_","rc5_","rc7_","rc1_","rc5_","rc3_","rc6_","rc4_","rc7_","rc0_","rc3_","rc2_","rc3_","rc1_","rc5_","rc2_","rc3_","rc5_","rc6_","rc5_","rc0_","rc7_","rc0_","rc5_","rc1_","rc1_","rc1_","rc4_","rc7_"],
+["rc2_","rc4_","rc2_","rc6_","rc3_","rc2_","rc4_","rc6_","rc7_","rc1_","rc1_","rc3_","rc2_","rc4_","rc6_","rc2_","rc4_","rc3_","rc4_","rc6_","rc5_","rc4_","rc0_","rc1_","rc3_","rc2_","rc4_","rc6_","rc1_","rc5_","rc5_","rc7_","rc3_","rc2_","rc5_","rc2_","rc7_","rc5_","rc1_","rc2_","rc6_","rc4_","rc5_","rc3_","rc4_","rc5_","rc6_","rc5_","rc3_","rc3_","rc0_","rc5_","rc7_","rc5_","rc2_","rc1_","rc6_","rc0_","rc7_","rc2_","rc6_","rc6_","rc6_","rc7_","rc3_","rc6_","rc4_","rc7_","rc1_","rc6_","rc0_","rc7_","rc7_","rc7_","rc7_","rc5_","rc5_","rc0_","rc2_","rc4_","rc7_","rc5_","rc5_","rc2_","rc2_","rc2_","rc1_","rc6_","rc7_","rc2_","rc4_","rc5_","rc6_","rc5_","rc7_","rc7_","rc5_","rc1_","rc0_","rc5_","rc0_","rc7_","rc1_","rc6_","rc3_","rc2_","rc1_","rc3_","rc6_","rc4_","rc2_","rc7_","rc0_","rc2_","rc3_","rc3_","rc7_","rc1_","rc6_","rc1_","rc7_","rc1_","rc4_","rc7_","rc1_","rc0_","rc0_","rc6_","rc6_","rc2_","rc1_","rc4_","rc5_","rc0_","rc4_","rc7_","rc1_","rc6_","rc2_","rc3_","rc6_","rc2_","rc6_","rc5_"],
+["rc5_","rc2_","rc1_","rc1_","rc6_","rc4_","rc1_","rc1_","rc5_","rc4_","rc7_","rc7_","rc1_","rc2_","rc1_","rc6_","rc1_","rc2_","rc0_","rc3_","rc7_","rc0_","rc2_","rc1_","rc2_","rc3_","rc2_","rc6_","rc6_","rc1_","rc6_","rc0_","rc7_","rc3_","rc1_","rc4_","rc6_","rc3_","rc2_","rc0_","rc2_","rc3_","rc6_","rc7_","rc3_","rc0_","rc2_","rc5_","rc4_","rc7_","rc3_","rc3_","rc7_","rc7_","rc1_","rc6_","rc5_","rc7_","rc1_","rc3_","rc5_","rc1_","rc2_","rc6_","rc5_","rc7_","rc2_","rc3_","rc7_","rc4_","rc2_","rc4_","rc6_","rc7_","rc7_","rc5_","rc2_","rc4_","rc3_","rc4_","rc7_","rc3_","rc4_","rc4_","rc4_","rc5_","rc2_","rc4_","rc3_","rc4_","rc7_","rc4_","rc4_","rc2_","rc2_","rc0_","rc0_","rc5_","rc4_","rc0_","rc3_","rc1_","rc7_","rc6_","rc0_","rc7_","rc4_","rc2_","rc3_","rc5_","rc4_","rc3_","rc3_","rc6_","rc1_","rc6_","rc7_","rc3_","rc6_","rc4_","rc3_","rc1_","rc4_","rc7_","rc3_","rc5_","rc6_","rc5_","rc7_","rc6_","rc7_","rc1_","rc7_","rc2_","rc3_","rc6_","rc1_","rc3_","rc3_","rc5_","rc1_","rc3_","rc5_","rc1_"],
+["rc0_","rc6_","rc4_","rc1_","rc0_","rc0_","rc3_","rc6_","rc6_","rc7_","rc0_","rc5_","rc1_","rc1_","rc7_","rc7_","rc3_","rc0_","rc3_","rc7_","rc6_","rc5_","rc4_","rc4_","rc0_","rc4_","rc6_","rc0_","rc2_","rc7_","rc7_","rc0_","rc5_","rc5_","rc3_","rc4_","rc6_","rc4_","rc3_","rc1_","rc4_","rc4_","rc3_","rc6_","rc7_","rc6_","rc3_","rc4_","rc3_","rc5_","rc1_","rc2_","rc5_","rc4_","rc4_","rc7_","rc6_","rc1_","rc4_","rc1_","rc6_","rc0_","rc0_","rc6_","rc3_","rc2_","rc0_","rc1_","rc1_","rc0_","rc5_","rc7_","rc4_","rc2_","rc5_","rc2_","rc4_","rc5_","rc3_","rc5_","rc0_","rc5_","rc7_","rc2_","rc7_","rc7_","rc2_","rc1_","rc2_","rc2_","rc5_","rc1_","rc6_","rc6_","rc2_","rc4_","rc1_","rc6_","rc2_","rc6_","rc3_","rc2_","rc0_","rc6_","rc7_","rc1_","rc7_","rc0_","rc1_","rc5_","rc0_","rc2_","rc2_","rc7_","rc6_","rc6_","rc2_","rc4_","rc6_","rc0_","rc5_","rc0_","rc0_","rc0_","rc2_","rc2_","rc3_","rc2_","rc0_","rc0_","rc1_","rc4_","rc1_","rc5_","rc6_","rc7_","rc4_","rc0_","rc7_","rc2_","rc5_","rc6_","rc0_","rc3_"],
+["rc0_","rc3_","rc7_","rc0_","rc6_","rc5_","rc7_","rc5_","rc7_","rc1_","rc7_","rc6_","rc1_","rc3_","rc5_","rc7_","rc7_","rc0_","rc5_","rc3_","rc6_","rc6_","rc6_","rc2_","rc4_","rc7_","rc6_","rc6_","rc1_","rc1_","rc5_","rc0_","rc3_","rc1_","rc0_","rc6_","rc4_","rc1_","rc7_","rc0_","rc7_","rc0_","rc1_","rc3_","rc4_","rc1_","rc6_","rc5_","rc7_","rc7_","rc6_","rc2_","rc0_","rc7_","rc0_","rc7_","rc6_","rc6_","rc5_","rc5_","rc5_","rc5_","rc6_","rc0_","rc2_","rc2_","rc3_","rc1_","rc4_","rc1_","rc5_","rc0_","rc6_","rc2_","rc6_","rc6_","rc2_","rc5_","rc0_","rc2_","rc0_","rc3_","rc4_","rc2_","rc7_","rc7_","rc4_","rc5_","rc3_","rc6_","rc2_","rc7_","rc0_","rc2_","rc3_","rc4_","rc6_","rc5_","rc6_","rc0_","rc5_","rc4_","rc1_","rc7_","rc3_","rc1_","rc6_","rc0_","rc4_","rc6_","rc2_","rc7_","rc1_","rc7_","rc7_","rc4_","rc4_","rc7_","rc2_","rc6_","rc3_","rc5_","rc7_","rc3_","rc3_","rc1_","rc3_","rc4_","rc6_","rc2_","rc3_","rc5_","rc0_","rc2_","rc3_","rc3_","rc7_","rc4_","rc2_","rc1_","rc1_","rc4_","rc4_","rc4_"],
+["rc3_","rc0_","rc7_","rc6_","rc7_","rc6_","rc2_","rc0_","rc5_","rc6_","rc3_","rc3_","rc5_","rc1_","rc0_","rc0_","rc3_","rc2_","rc1_","rc6_","rc4_","rc3_","rc4_","rc5_","rc1_","rc3_","rc0_","rc1_","rc2_","rc0_","rc6_","rc1_","rc5_","rc0_","rc4_","rc0_","rc7_","rc4_","rc4_","rc4_","rc1_","rc6_","rc6_","rc5_","rc7_","rc2_","rc1_","rc0_","rc5_","rc3_","rc7_","rc5_","rc2_","rc0_","rc2_","rc5_","rc2_","rc7_","rc1_","rc0_","rc7_","rc0_","rc0_","rc6_","rc0_","rc6_","rc7_","rc4_","rc4_","rc1_","rc1_","rc1_","rc1_","rc7_","rc7_","rc2_","rc0_","rc4_","rc6_","rc3_","rc3_","rc0_","rc7_","rc0_","rc2_","rc0_","rc6_","rc3_","rc2_","rc7_","rc5_","rc5_","rc7_","rc7_","rc2_","rc2_","rc3_","rc2_","rc6_","rc0_","rc0_","rc6_","rc7_","rc1_","rc2_","rc0_","rc0_","rc2_","rc1_","rc0_","rc7_","rc3_","rc6_","rc6_","rc0_","rc7_","rc3_","rc3_","rc0_","rc6_","rc0_","rc4_","rc5_","rc2_","rc3_","rc2_","rc4_","rc6_","rc7_","rc5_","rc2_","rc6_","rc1_","rc2_","rc7_","rc2_","rc7_","rc2_","rc0_","rc5_","rc1_","rc5_","rc4_","rc6_"],
+["rc5_","rc7_","rc2_","rc4_","rc6_","rc2_","rc1_","rc7_","rc4_","rc4_","rc7_","rc5_","rc2_","rc3_","rc6_","rc2_","rc4_","rc6_","rc4_","rc4_","rc7_","rc5_","rc2_","rc6_","rc5_","rc4_","rc7_","rc2_","rc1_","rc4_","rc6_","rc5_","rc1_","rc2_","rc5_","rc5_","rc2_","rc4_","rc7_","rc6_","rc7_","rc1_","rc5_","rc6_","rc5_","rc1_","rc0_","rc6_","rc1_","rc5_","rc2_","rc2_","rc3_","rc0_","rc6_","rc3_","rc7_","rc6_","rc5_","rc3_","rc1_","rc3_","rc3_","rc7_","rc1_","rc0_","rc1_","rc4_","rc7_","rc1_","rc4_","rc3_","rc1_","rc3_","rc5_","rc7_","rc3_","rc4_","rc3_","rc2_","rc6_","rc3_","rc6_","rc2_","rc4_","rc2_","rc5_","rc1_","rc3_","rc0_","rc2_","rc6_","rc0_","rc4_","rc4_","rc6_","rc6_","rc7_","rc6_","rc7_","rc7_","rc2_","rc6_","rc6_","rc1_","rc0_","rc1_","rc7_","rc5_","rc5_","rc5_","rc5_","rc4_","rc7_","rc7_","rc3_","rc3_","rc3_","rc5_","rc2_","rc2_","rc3_","rc7_","rc4_","rc7_","rc7_","rc2_","rc0_","rc7_","rc2_","rc4_","rc7_","rc0_","rc6_","rc7_","rc7_","rc0_","rc2_","rc0_","rc5_","rc2_","rc3_","rc7_","rc0_"],
+["rc3_","rc1_","rc4_","rc4_","rc0_","rc4_","rc0_","rc5_","rc3_","rc6_","rc2_","rc4_","rc5_","rc2_","rc3_","rc6_","rc5_","rc6_","rc4_","rc3_","rc2_","rc5_","rc6_","rc5_","rc6_","rc0_","rc2_","rc2_","rc3_","rc6_","rc2_","rc3_","rc3_","rc2_","rc7_","rc6_","rc2_","rc4_","rc5_","rc1_","rc6_","rc2_","rc4_","rc0_","rc3_","rc7_","rc1_","rc0_","rc0_","rc5_","rc4_","rc5_","rc6_","rc0_","rc3_","rc1_","rc2_","rc3_","rc6_","rc6_","rc0_","rc7_","rc4_","rc6_","rc2_","rc0_","rc7_","rc1_","rc2_","rc3_","rc4_","rc7_","rc5_","rc5_","rc6_","rc6_","rc0_","rc6_","rc2_","rc6_","rc7_","rc6_","rc5_","rc3_","rc3_","rc6_","rc5_","rc3_","rc4_","rc2_","rc6_","rc1_","rc0_","rc5_","rc7_","rc1_","rc3_","rc6_","rc4_","rc5_","rc7_","rc1_","rc5_","rc7_","rc5_","rc1_","rc6_","rc7_","rc5_","rc5_","rc0_","rc0_","rc3_","rc1_","rc0_","rc6_","rc3_","rc7_","rc6_","rc3_","rc5_","rc5_","rc1_","rc3_","rc4_","rc0_","rc2_","rc3_","rc4_","rc1_","rc6_","rc1_","rc2_","rc7_","rc7_","rc0_","rc1_","rc6_","rc5_","rc3_","rc2_","rc6_","rc1_","rc5_"],
+["rc3_","rc7_","rc3_","rc6_","rc3_","rc3_","rc5_","rc1_","rc5_","rc4_","rc7_","rc3_","rc3_","rc1_","rc4_","rc6_","rc5_","rc3_","rc5_","rc7_","rc3_","rc4_","rc4_","rc4_","rc7_","rc2_","rc4_","rc2_","rc6_","rc1_","rc7_","rc6_","rc0_","rc7_","rc0_","rc3_","rc5_","rc3_","rc2_","rc4_","rc3_","rc0_","rc0_","rc2_","rc6_","rc7_","rc7_","rc0_","rc0_","rc3_","rc1_","rc5_","rc1_","rc1_","rc4_","rc1_","rc7_","rc7_","rc2_","rc4_","rc1_","rc4_","rc1_","rc3_","rc1_","rc1_","rc6_","rc5_","rc1_","rc6_","rc5_","rc5_","rc0_","rc0_","rc5_","rc0_","rc5_","rc2_","rc2_","rc2_","rc2_","rc2_","rc2_","rc4_","rc4_","rc5_","rc5_","rc0_","rc2_","rc5_","rc6_","rc0_","rc5_","rc1_","rc7_","rc4_","rc7_","rc6_","rc4_","rc3_","rc7_","rc5_","rc7_","rc4_","rc3_","rc5_","rc4_","rc5_","rc7_","rc2_","rc5_","rc4_","rc5_","rc6_","rc1_","rc3_","rc5_","rc0_","rc0_","rc1_","rc0_","rc2_","rc2_","rc7_","rc7_","rc7_","rc1_","rc1_","rc2_","rc5_","rc4_","rc6_","rc6_","rc7_","rc6_","rc1_","rc5_","rc6_","rc6_","rc1_","rc4_","rc0_","rc0_","rc5_"],
+["rc1_","rc1_","rc4_","rc4_","rc4_","rc2_","rc5_","rc4_","rc0_","rc0_","rc5_","rc2_","rc2_","rc7_","rc7_","rc1_","rc1_","rc6_","rc5_","rc6_","rc6_","rc4_","rc3_","rc4_","rc6_","rc3_","rc3_","rc3_","rc5_","rc3_","rc3_","rc7_","rc6_","rc3_","rc4_","rc5_","rc0_","rc4_","rc4_","rc1_","rc3_","rc6_","rc7_","rc6_","rc4_","rc0_","rc1_","rc6_","rc5_","rc1_","rc7_","rc3_","rc0_","rc4_","rc6_","rc4_","rc5_","rc4_","rc4_","rc4_","rc2_","rc4_","rc6_","rc0_","rc3_","rc2_","rc2_","rc0_","rc2_","rc5_","rc6_","rc7_","rc0_","rc5_","rc0_","rc6_","rc5_","rc2_","rc7_","rc6_","rc5_","rc7_","rc2_","rc5_","rc4_","rc0_","rc0_","rc3_","rc2_","rc2_","rc7_","rc4_","rc2_","rc2_","rc1_","rc1_","rc0_","rc0_","rc4_","rc3_","rc2_","rc5_","rc1_","rc7_","rc0_","rc4_","rc0_","rc1_","rc6_","rc5_","rc1_","rc2_","rc2_","rc7_","rc6_","rc3_","rc1_","rc7_","rc7_","rc7_","rc7_","rc4_","rc6_","rc3_","rc6_","rc5_","rc4_","rc2_","rc6_","rc5_","rc4_","rc7_","rc6_","rc5_","rc7_","rc1_","rc3_","rc3_","rc7_","rc6_","rc7_","rc2_","rc0_","rc1_"],
+["rc3_","rc2_","rc3_","rc6_","rc0_","rc1_","rc5_","rc1_","rc1_","rc2_","rc7_","rc1_","rc5_","rc5_","rc0_","rc2_","rc5_","rc7_","rc0_","rc3_","rc1_","rc4_","rc6_","rc5_","rc0_","rc2_","rc5_","rc6_","rc7_","rc0_","rc2_","rc5_","rc1_","rc7_","rc1_","rc6_","rc0_","rc7_","rc0_","rc0_","rc3_","rc5_","rc4_","rc6_","rc0_","rc3_","rc3_","rc3_","rc4_","rc0_","rc2_","rc1_","rc1_","rc2_","rc0_","rc3_","rc7_","rc2_","rc2_","rc1_","rc7_","rc7_","rc0_","rc4_","rc3_","rc6_","rc0_","rc3_","rc2_","rc0_","rc2_","rc6_","rc3_","rc3_","rc4_","rc1_","rc7_","rc6_","rc7_","rc3_","rc4_","rc0_","rc1_","rc7_","rc7_","rc0_","rc4_","rc2_","rc1_","rc2_","rc6_","rc7_","rc6_","rc0_","rc3_","rc7_","rc2_","rc7_","rc0_","rc5_","rc5_","rc4_","rc2_","rc1_","rc1_","rc7_","rc7_","rc3_","rc1_","rc6_","rc2_","rc3_","rc4_","rc5_","rc5_","rc6_","rc2_","rc5_","rc1_","rc4_","rc6_","rc2_","rc2_","rc7_","rc5_","rc2_","rc1_","rc6_","rc6_","rc3_","rc2_","rc3_","rc2_","rc4_","rc7_","rc2_","rc6_","rc6_","rc4_","rc4_","rc6_","rc4_","rc6_","rc3_"],
+["rc5_","rc1_","rc5_","rc6_","rc3_","rc1_","rc1_","rc7_","rc5_","rc3_","rc4_","rc3_","rc3_","rc5_","rc4_","rc1_","rc6_","rc1_","rc4_","rc7_","rc1_","rc6_","rc3_","rc1_","rc1_","rc2_","rc5_","rc4_","rc0_","rc7_","rc1_","rc2_","rc6_","rc3_","rc3_","rc7_","rc1_","rc5_","rc3_","rc4_","rc7_","rc4_","rc6_","rc1_","rc1_","rc2_","rc2_","rc0_","rc3_","rc1_","rc0_","rc7_","rc1_","rc5_","rc5_","rc6_","rc4_","rc2_","rc1_","rc2_","rc4_","rc7_","rc5_","rc2_","rc0_","rc4_","rc6_","rc0_","rc5_","rc0_","rc7_","rc2_","rc4_","rc5_","rc6_","rc2_","rc7_","rc0_","rc5_","rc2_","rc4_","rc4_","rc4_","rc4_","rc2_","rc6_","rc5_","rc1_","rc4_","rc7_","rc0_","rc0_","rc5_","rc5_","rc1_","rc1_","rc3_","rc3_","rc6_","rc3_","rc6_","rc2_","rc5_","rc3_","rc3_","rc7_","rc6_","rc6_","rc4_","rc7_","rc4_","rc0_","rc2_","rc1_","rc2_","rc6_","rc6_","rc3_","rc3_","rc1_","rc3_","rc0_","rc3_","rc4_","rc1_","rc0_","rc4_","rc0_","rc6_","rc0_","rc3_","rc6_","rc5_","rc3_","rc5_","rc5_","rc4_","rc1_","rc4_","rc4_","rc0_","rc0_","rc7_","rc2_"],
+["rc4_","rc0_","rc0_","rc4_","rc2_","rc3_","rc7_","rc7_","rc1_","rc5_","rc0_","rc7_","rc0_","rc0_","rc0_","rc7_","rc2_","rc3_","rc6_","rc2_","rc2_","rc4_","rc7_","rc1_","rc0_","rc3_","rc2_","rc6_","rc5_","rc1_","rc6_","rc0_","rc3_","rc2_","rc0_","rc0_","rc1_","rc7_","rc1_","rc3_","rc6_","rc6_","rc0_","rc1_","rc3_","rc5_","rc4_","rc6_","rc6_","rc5_","rc5_","rc7_","rc4_","rc4_","rc3_","rc7_","rc7_","rc6_","rc7_","rc2_","rc0_","rc5_","rc1_","rc2_","rc7_","rc6_","rc1_","rc0_","rc1_","rc5_","rc2_","rc5_","rc1_","rc4_","rc3_","rc2_","rc2_","rc0_","rc0_","rc5_","rc3_","rc5_","rc1_","rc4_","rc4_","rc3_","rc2_","rc7_","rc0_","rc1_","rc2_","rc1_","rc4_","rc1_","rc0_","rc7_","rc7_","rc4_","rc3_","rc5_","rc2_","rc7_","rc0_","rc5_","rc2_","rc6_","rc2_","rc1_","rc4_","rc0_","rc4_","rc3_","rc0_","rc3_","rc3_","rc3_","rc1_","rc2_","rc2_","rc1_","rc4_","rc4_","rc5_","rc3_","rc7_","rc7_","rc3_","rc1_","rc4_","rc4_","rc6_","rc7_","rc5_","rc5_","rc4_","rc3_","rc2_","rc4_","rc3_","rc7_","rc1_","rc6_","rc0_","rc1_"],
+["rc6_","rc0_","rc1_","rc2_","rc4_","rc0_","rc4_","rc4_","rc2_","rc0_","rc7_","rc7_","rc1_","rc6_","rc2_","rc6_","rc5_","rc7_","rc2_","rc5_","rc2_","rc6_","rc7_","rc6_","rc1_","rc7_","rc7_","rc4_","rc3_","rc1_","rc4_","rc7_","rc5_","rc3_","rc4_","rc2_","rc4_","rc6_","rc1_","rc1_","rc3_","rc3_","rc0_","rc7_","rc3_","rc7_","rc5_","rc7_","rc3_","rc4_","rc7_","rc1_","rc0_","rc2_","rc7_","rc7_","rc6_","rc6_","rc7_","rc0_","rc7_","rc1_","rc1_","rc5_","rc4_","rc4_","rc5_","rc3_","rc2_","rc2_","rc7_","rc0_","rc6_","rc0_","rc0_","rc1_","rc5_","rc0_","rc4_","rc3_","rc5_","rc4_","rc5_","rc1_","rc0_","rc1_","rc6_","rc6_","rc2_","rc1_","rc2_","rc3_","rc0_","rc6_","rc5_","rc3_","rc3_","rc4_","rc3_","rc4_","rc6_","rc6_","rc0_","rc1_","rc4_","rc4_","rc7_","rc6_","rc6_","rc3_","rc0_","rc4_","rc4_","rc6_","rc4_","rc6_","rc1_","rc3_","rc2_","rc3_","rc4_","rc1_","rc7_","rc4_","rc4_","rc1_","rc1_","rc0_","rc3_","rc2_","rc5_","rc7_","rc7_","rc2_","rc2_","rc4_","rc5_","rc1_","rc6_","rc6_","rc6_","rc0_","rc7_","rc0_"],
+["rc7_","rc2_","rc4_","rc0_","rc4_","rc1_","rc5_","rc5_","rc5_","rc5_","rc0_","rc5_","rc3_","rc1_","rc6_","rc5_","rc4_","rc6_","rc5_","rc2_","rc5_","rc4_","rc7_","rc0_","rc0_","rc6_","rc3_","rc1_","rc7_","rc5_","rc2_","rc0_","rc7_","rc0_","rc5_","rc7_","rc0_","rc3_","rc6_","rc5_","rc4_","rc5_","rc4_","rc4_","rc6_","rc6_","rc2_","rc2_","rc5_","rc1_","rc2_","rc6_","rc1_","rc6_","rc6_","rc6_","rc6_","rc3_","rc7_","rc7_","rc7_","rc4_","rc2_","rc4_","rc4_","rc1_","rc0_","rc2_","rc6_","rc7_","rc4_","rc4_","rc2_","rc2_","rc3_","rc2_","rc5_","rc1_","rc7_","rc7_","rc7_","rc2_","rc4_","rc3_","rc3_","rc7_","rc7_","rc6_","rc6_","rc1_","rc3_","rc7_","rc6_","rc5_","rc5_","rc4_","rc5_","rc4_","rc3_","rc2_","rc6_","rc7_","rc1_","rc0_","rc7_","rc2_","rc4_","rc7_","rc7_","rc1_","rc3_","rc4_","rc2_","rc1_","rc3_","rc1_","rc3_","rc0_","rc1_","rc0_","rc1_","rc7_","rc5_","rc2_","rc5_","rc6_","rc5_","rc0_","rc3_","rc1_","rc7_","rc0_","rc7_","rc2_","rc4_","rc1_","rc2_","rc0_","rc1_","rc2_","rc5_","rc6_","rc0_","rc0_"],
+["rc5_","rc6_","rc7_","rc7_","rc7_","rc0_","rc6_","rc4_","rc6_","rc5_","rc7_","rc0_","rc3_","rc1_","rc1_","rc7_","rc5_","rc1_","rc5_","rc2_","rc1_","rc1_","rc5_","rc1_","rc3_","rc1_","rc1_","rc5_","rc6_","rc1_","rc5_","rc5_","rc0_","rc2_","rc0_","rc7_","rc2_","rc7_","rc5_","rc2_","rc6_","rc4_","rc7_","rc1_","rc2_","rc5_","rc1_","rc2_","rc4_","rc3_","rc4_","rc0_","rc6_","rc3_","rc4_","rc6_","rc4_","rc7_","rc5_","rc6_","rc3_","rc1_","rc1_","rc1_","rc4_","rc4_","rc6_","rc7_","rc2_","rc5_","rc6_","rc1_","rc1_","rc3_","rc7_","rc5_","rc7_","rc3_","rc4_","rc1_","rc7_","rc7_","rc3_","rc4_","rc3_","rc0_","rc1_","rc2_","rc2_","rc1_","rc3_","rc6_","rc3_","rc6_","rc6_","rc5_","rc1_","rc5_","rc1_","rc0_","rc7_","rc3_","rc1_","rc2_","rc6_","rc2_","rc5_","rc3_","rc4_","rc2_","rc4_","rc4_","rc7_","rc6_","rc4_","rc4_","rc3_","rc0_","rc4_","rc3_","rc0_","rc7_","rc4_","rc5_","rc7_","rc0_","rc3_","rc1_","rc6_","rc3_","rc1_","rc2_","rc3_","rc0_","rc7_","rc5_","rc5_","rc2_","rc3_","rc4_","rc1_","rc2_","rc0_","rc3_"],
+["rc4_","rc7_","rc6_","rc1_","rc4_","rc4_","rc6_","rc2_","rc4_","rc2_","rc0_","rc2_","rc7_","rc0_","rc0_","rc4_","rc4_","rc0_","rc6_","rc4_","rc3_","rc5_","rc6_","rc2_","rc0_","rc2_","rc0_","rc0_","rc5_","rc4_","rc0_","rc5_","rc5_","rc2_","rc0_","rc3_","rc6_","rc3_","rc5_","rc6_","rc6_","rc1_","rc0_","rc7_","rc2_","rc5_","rc5_","rc0_","rc3_","rc4_","rc1_","rc0_","rc2_","rc0_","rc7_","rc0_","rc4_","rc2_","rc4_","rc7_","rc1_","rc6_","rc4_","rc4_","rc2_","rc7_","rc4_","rc2_","rc2_","rc6_","rc2_","rc1_","rc7_","rc5_","rc2_","rc2_","rc1_","rc0_","rc2_","rc3_","rc2_","rc6_","rc0_","rc4_","rc5_","rc3_","rc3_","rc1_","rc4_","rc2_","rc7_","rc1_","rc5_","rc3_","rc4_","rc6_","rc5_","rc7_","rc1_","rc6_","rc0_","rc3_","rc6_","rc1_","rc7_","rc4_","rc7_","rc4_","rc3_","rc0_","rc0_","rc6_","rc1_","rc6_","rc5_","rc1_","rc7_","rc6_","rc0_","rc3_","rc6_","rc3_","rc1_","rc5_","rc0_","rc0_","rc1_","rc4_","rc3_","rc1_","rc7_","rc6_","rc7_","rc4_","rc7_","rc7_","rc5_","rc0_","rc0_","rc5_","rc1_","rc5_","rc5_","rc1_"],
+["rc1_","rc4_","rc6_","rc7_","rc6_","rc7_","rc0_","rc7_","rc2_","rc4_","rc2_","rc5_","rc2_","rc7_","rc1_","rc5_","rc7_","rc6_","rc6_","rc4_","rc0_","rc1_","rc7_","rc3_","rc2_","rc1_","rc4_","rc5_","rc2_","rc7_","rc2_","rc3_","rc2_","rc0_","rc5_","rc6_","rc2_","rc0_","rc1_","rc5_","rc1_","rc6_","rc2_","rc7_","rc5_","rc7_","rc5_","rc3_","rc7_","rc5_","rc7_","rc6_","rc2_","rc0_","rc4_","rc5_","rc5_","rc5_","rc2_","rc3_","rc7_","rc7_","rc7_","rc6_","rc3_","rc3_","rc1_","rc5_","rc4_","rc1_","rc5_","rc4_","rc3_","rc0_","rc1_","rc4_","rc6_","rc0_","rc6_","rc4_","rc3_","rc6_","rc0_","rc5_","rc6_","rc3_","rc0_","rc4_","rc7_","rc6_","rc4_","rc1_","rc7_","rc4_","rc5_","rc0_","rc5_","rc5_","rc1_","rc5_","rc4_","rc0_","rc2_","rc6_","rc7_","rc2_","rc7_","rc3_","rc0_","rc3_","rc2_","rc1_","rc4_","rc1_","rc2_","rc0_","rc3_","rc1_","rc1_","rc2_","rc7_","rc3_","rc1_","rc5_","rc4_","rc6_","rc2_","rc2_","rc7_","rc4_","rc7_","rc6_","rc1_","rc7_","rc2_","rc1_","rc6_","rc4_","rc5_","rc6_","rc0_","rc7_","rc3_","rc2_"],
+["rc2_","rc7_","rc5_","rc1_","rc2_","rc3_","rc1_","rc5_","rc6_","rc5_","rc1_","rc0_","rc3_","rc6_","rc0_","rc4_","rc2_","rc2_","rc2_","rc0_","rc4_","rc5_","rc4_","rc6_","rc7_","rc7_","rc1_","rc3_","rc1_","rc4_","rc7_","rc7_","rc4_","rc7_","rc2_","rc6_","rc3_","rc0_","rc7_","rc6_","rc4_","rc3_","rc3_","rc2_","rc6_","rc3_","rc5_","rc5_","rc5_","rc6_","rc2_","rc3_","rc4_","rc3_","rc0_","rc5_","rc3_","rc2_","rc5_","rc4_","rc1_","rc3_","rc0_","rc0_","rc3_","rc1_","rc7_","rc0_","rc5_","rc0_","rc3_","rc5_","rc0_","rc5_","rc1_","rc2_","rc5_","rc5_","rc3_","rc7_","rc1_","rc1_","rc7_","rc7_","rc2_","rc0_","rc6_","rc6_","rc1_","rc5_","rc7_","rc7_","rc0_","rc3_","rc4_","rc4_","rc6_","rc6_","rc6_","rc7_","rc1_","rc4_","rc5_","rc1_","rc3_","rc3_","rc2_","rc2_","rc7_","rc5_","rc1_","rc0_","rc6_","rc2_","rc1_","rc3_","rc5_","rc4_","rc6_","rc0_","rc2_","rc1_","rc1_","rc4_","rc7_","rc4_","rc5_","rc4_","rc6_","rc5_","rc5_","rc3_","rc6_","rc2_","rc5_","rc4_","rc4_","rc6_","rc7_","rc0_","rc5_","rc2_","rc7_","rc1_"],
+["rc3_","rc1_","rc0_","rc0_","rc6_","rc0_","rc0_","rc5_","rc6_","rc5_","rc1_","rc5_","rc6_","rc6_","rc2_","rc0_","rc2_","rc6_","rc6_","rc3_","rc5_","rc5_","rc3_","rc4_","rc4_","rc5_","rc6_","rc5_","rc7_","rc4_","rc4_","rc2_","rc1_","rc6_","rc4_","rc6_","rc5_","rc2_","rc4_","rc3_","rc4_","rc1_","rc1_","rc0_","rc4_","rc2_","rc3_","rc0_","rc3_","rc2_","rc0_","rc1_","rc5_","rc2_","rc7_","rc2_","rc2_","rc1_","rc0_","rc1_","rc4_","rc3_","rc2_","rc3_","rc7_","rc2_","rc5_","rc5_","rc1_","rc4_","rc2_","rc3_","rc4_","rc6_","rc0_","rc7_","rc2_","rc0_","rc0_","rc4_","rc1_","rc0_","rc2_","rc3_","rc7_","rc3_","rc1_","rc6_","rc7_","rc1_","rc5_","rc3_","rc4_","rc0_","rc0_","rc4_","rc6_","rc4_","rc4_","rc4_","rc3_","rc6_","rc2_","rc4_","rc7_","rc2_","rc6_","rc0_","rc7_","rc6_","rc1_","rc3_","rc3_","rc0_","rc6_","rc2_","rc2_","rc7_","rc2_","rc0_","rc2_","rc5_","rc6_","rc5_","rc0_","rc2_","rc6_","rc4_","rc5_","rc4_","rc7_","rc5_","rc2_","rc7_","rc5_","rc0_","rc5_","rc0_","rc2_","rc4_","rc4_","rc6_","rc6_","rc7_"],
+["rc1_","rc2_","rc3_","rc6_","rc7_","rc6_","rc0_","rc7_","rc5_","rc5_","rc1_","rc5_","rc0_","rc2_","rc5_","rc4_","rc5_","rc3_","rc0_","rc6_","rc7_","rc7_","rc1_","rc5_","rc6_","rc5_","rc6_","rc2_","rc1_","rc7_","rc7_","rc6_","rc5_","rc7_","rc1_","rc7_","rc6_","rc1_","rc4_","rc4_","rc5_","rc2_","rc7_","rc4_","rc3_","rc7_","rc3_","rc4_","rc6_","rc0_","rc5_","rc0_","rc1_","rc6_","rc7_","rc5_","rc0_","rc3_","rc1_","rc4_","rc5_","rc1_","rc4_","rc1_","rc4_","rc6_","rc0_","rc4_","rc6_","rc7_","rc7_","rc7_","rc4_","rc3_","rc1_","rc2_","rc2_","rc1_","rc1_","rc4_","rc7_","rc3_","rc0_","rc3_","rc1_","rc5_","rc0_","rc6_","rc6_","rc1_","rc3_","rc0_","rc0_","rc5_","rc6_","rc7_","rc1_","rc0_","rc0_","rc6_","rc0_","rc0_","rc7_","rc0_","rc2_","rc0_","rc6_","rc7_","rc4_","rc0_","rc7_","rc4_","rc0_","rc5_","rc7_","rc7_","rc7_","rc3_","rc2_","rc0_","rc6_","rc0_","rc5_","rc7_","rc3_","rc2_","rc3_","rc2_","rc2_","rc4_","rc1_","rc5_","rc3_","rc5_","rc6_","rc7_","rc6_","rc1_","rc5_","rc2_","rc2_","rc5_","rc6_","rc3_"],
+["rc2_","rc5_","rc4_","rc3_","rc2_","rc0_","rc7_","rc5_","rc0_","rc6_","rc5_","rc1_","rc6_","rc1_","rc4_","rc0_","rc7_","rc2_","rc4_","rc1_","rc0_","rc5_","rc3_","rc4_","rc1_","rc7_","rc0_","rc5_","rc4_","rc7_","rc4_","rc2_","rc5_","rc3_","rc6_","rc0_","rc2_","rc5_","rc6_","rc4_","rc6_","rc6_","rc4_","rc6_","rc0_","rc0_","rc2_","rc2_","rc1_","rc2_","rc7_","rc2_","rc6_","rc0_","rc5_","rc6_","rc3_","rc2_","rc6_","rc6_","rc1_","rc6_","rc2_","rc1_","rc0_","rc0_","rc4_","rc7_","rc1_","rc0_","rc7_","rc4_","rc5_","rc5_","rc2_","rc5_","rc2_","rc1_","rc3_","rc0_","rc0_","rc5_","rc3_","rc7_","rc6_","rc7_","rc6_","rc6_","rc3_","rc0_","rc7_","rc6_","rc2_","rc3_","rc1_","rc0_","rc4_","rc3_","rc0_","rc5_","rc4_","rc4_","rc1_","rc6_","rc0_","rc5_","rc0_","rc0_","rc4_","rc4_","rc1_","rc2_","rc3_","rc2_","rc1_","rc2_","rc0_","rc1_","rc5_","rc4_","rc1_","rc3_","rc3_","rc4_","rc6_","rc5_","rc0_","rc7_","rc1_","rc4_","rc1_","rc5_","rc6_","rc6_","rc6_","rc2_","rc4_","rc5_","rc4_","rc5_","rc5_","rc7_","rc2_","rc0_"],
+["rc3_","rc1_","rc7_","rc1_","rc3_","rc6_","rc2_","rc0_","rc6_","rc2_","rc1_","rc2_","rc5_","rc4_","rc6_","rc5_","rc6_","rc3_","rc7_","rc6_","rc5_","rc0_","rc5_","rc0_","rc4_","rc5_","rc0_","rc5_","rc5_","rc4_","rc0_","rc1_","rc7_","rc3_","rc7_","rc5_","rc0_","rc6_","rc5_","rc2_","rc2_","rc6_","rc4_","rc6_","rc1_","rc1_","rc5_","rc4_","rc3_","rc1_","rc2_","rc7_","rc1_","rc1_","rc6_","rc7_","rc6_","rc6_","rc2_","rc0_","rc5_","rc2_","rc2_","rc6_","rc0_","rc7_","rc7_","rc6_","rc6_","rc2_","rc6_","rc1_","rc4_","rc6_","rc1_","rc2_","rc0_","rc2_","rc4_","rc2_","rc1_","rc5_","rc2_","rc1_","rc3_","rc2_","rc1_","rc0_","rc2_","rc7_","rc4_","rc5_","rc5_","rc2_","rc0_","rc7_","rc5_","rc5_","rc1_","rc3_","rc6_","rc1_","rc5_","rc6_","rc5_","rc2_","rc1_","rc4_","rc2_","rc2_","rc3_","rc0_","rc0_","rc0_","rc7_","rc4_","rc3_","rc2_","rc6_","rc4_","rc1_","rc0_","rc5_","rc6_","rc4_","rc3_","rc2_","rc4_","rc7_","rc6_","rc3_","rc6_","rc7_","rc4_","rc2_","rc1_","rc4_","rc2_","rc4_","rc5_","rc0_","rc6_","rc2_","rc6_"],
+["rc7_","rc1_","rc2_","rc0_","rc0_","rc1_","rc6_","rc0_","rc3_","rc1_","rc4_","rc1_","rc3_","rc5_","rc0_","rc5_","rc6_","rc1_","rc7_","rc5_","rc2_","rc1_","rc5_","rc2_","rc2_","rc7_","rc2_","rc4_","rc2_","rc0_","rc1_","rc3_","rc7_","rc0_","rc1_","rc5_","rc2_","rc7_","rc7_","rc7_","rc7_","rc3_","rc3_","rc7_","rc1_","rc0_","rc2_","rc1_","rc1_","rc6_","rc4_","rc1_","rc6_","rc3_","rc7_","rc1_","rc7_","rc0_","rc4_","rc3_","rc7_","rc7_","rc0_","rc1_","rc0_","rc5_","rc5_","rc2_","rc3_","rc5_","rc2_","rc0_","rc6_","rc6_","rc1_","rc0_","rc7_","rc5_","rc0_","rc2_","rc0_","rc6_","rc2_","rc2_","rc4_","rc7_","rc6_","rc5_","rc2_","rc5_","rc0_","rc0_","rc7_","rc4_","rc7_","rc6_","rc0_","rc1_","rc7_","rc0_","rc1_","rc2_","rc7_","rc2_","rc7_","rc0_","rc6_","rc4_","rc5_","rc3_","rc2_","rc6_","rc5_","rc7_","rc1_","rc7_","rc4_","rc7_","rc3_","rc0_","rc3_","rc7_","rc0_","rc4_","rc4_","rc5_","rc6_","rc3_","rc2_","rc3_","rc5_","rc7_","rc4_","rc6_","rc7_","rc6_","rc3_","rc3_","rc2_","rc2_","rc2_","rc3_","rc0_","rc6_"],
+["rc5_","rc4_","rc1_","rc2_","rc5_","rc2_","rc7_","rc0_","rc4_","rc5_","rc2_","rc7_","rc3_","rc5_","rc5_","rc0_","rc4_","rc3_","rc1_","rc7_","rc5_","rc2_","rc0_","rc4_","rc2_","rc6_","rc5_","rc3_","rc6_","rc4_","rc2_","rc1_","rc3_","rc2_","rc2_","rc1_","rc0_","rc0_","rc0_","rc6_","rc2_","rc7_","rc0_","rc1_","rc7_","rc1_","rc4_","rc4_","rc7_","rc2_","rc1_","rc0_","rc3_","rc5_","rc4_","rc4_","rc3_","rc1_","rc7_","rc0_","rc2_","rc6_","rc1_","rc1_","rc5_","rc3_","rc4_","rc5_","rc4_","rc2_","rc0_","rc1_","rc0_","rc6_","rc0_","rc1_","rc6_","rc3_","rc4_","rc1_","rc2_","rc7_","rc7_","rc1_","rc7_","rc7_","rc2_","rc6_","rc6_","rc5_","rc0_","rc6_","rc6_","rc1_","rc3_","rc4_","rc3_","rc6_","rc7_","rc6_","rc2_","rc7_","rc6_","rc3_","rc3_","rc1_","rc4_","rc0_","rc0_","rc2_","rc3_","rc5_","rc6_","rc2_","rc2_","rc4_","rc1_","rc1_","rc1_","rc1_","rc4_","rc1_","rc1_","rc0_","rc1_","rc6_","rc1_","rc3_","rc6_","rc3_","rc4_","rc4_","rc1_","rc7_","rc1_","rc2_","rc6_","rc0_","rc3_","rc7_","rc6_","rc6_","rc3_","rc1_"],
+["rc2_","rc3_","rc2_","rc7_","rc0_","rc2_","rc3_","rc7_","rc5_","rc6_","rc0_","rc5_","rc4_","rc4_","rc4_","rc6_","rc6_","rc3_","rc1_","rc6_","rc2_","rc2_","rc3_","rc7_","rc7_","rc4_","rc5_","rc4_","rc0_","rc0_","rc2_","rc5_","rc7_","rc3_","rc7_","rc3_","rc5_","rc2_","rc7_","rc6_","rc0_","rc2_","rc6_","rc4_","rc7_","rc3_","rc2_","rc5_","rc2_","rc5_","rc7_","rc5_","rc5_","rc1_","rc3_","rc2_","rc6_","rc3_","rc2_","rc7_","rc5_","rc7_","rc2_","rc0_","rc4_","rc1_","rc0_","rc7_","rc7_","rc1_","rc5_","rc7_","rc6_","rc7_","rc4_","rc6_","rc0_","rc4_","rc5_","rc0_","rc3_","rc1_","rc7_","rc1_","rc1_","rc3_","rc1_","rc3_","rc4_","rc0_","rc2_","rc2_","rc6_","rc3_","rc1_","rc4_","rc2_","rc6_","rc7_","rc5_","rc7_","rc0_","rc5_","rc1_","rc6_","rc5_","rc0_","rc3_","rc2_","rc6_","rc4_","rc6_","rc0_","rc0_","rc7_","rc2_","rc7_","rc1_","rc5_","rc2_","rc1_","rc0_","rc5_","rc3_","rc2_","rc5_","rc1_","rc7_","rc1_","rc1_","rc3_","rc3_","rc5_","rc6_","rc7_","rc6_","rc1_","rc2_","rc4_","rc3_","rc3_","rc1_","rc7_","rc0_"],
+["rc2_","rc1_","rc1_","rc0_","rc6_","rc2_","rc7_","rc6_","rc4_","rc5_","rc3_","rc4_","rc2_","rc3_","rc1_","rc2_","rc0_","rc2_","rc5_","rc2_","rc0_","rc4_","rc3_","rc4_","rc7_","rc0_","rc6_","rc6_","rc4_","rc5_","rc5_","rc6_","rc0_","rc4_","rc4_","rc3_","rc7_","rc6_","rc7_","rc0_","rc6_","rc6_","rc4_","rc3_","rc5_","rc0_","rc1_","rc5_","rc0_","rc1_","rc3_","rc2_","rc0_","rc1_","rc1_","rc4_","rc7_","rc7_","rc0_","rc3_","rc4_","rc3_","rc0_","rc0_","rc3_","rc2_","rc7_","rc2_","rc1_","rc5_","rc5_","rc1_","rc7_","rc3_","rc0_","rc0_","rc4_","rc1_","rc1_","rc0_","rc0_","rc7_","rc6_","rc3_","rc6_","rc5_","rc1_","rc6_","rc2_","rc5_","rc1_","rc3_","rc4_","rc2_","rc7_","rc6_","rc3_","rc2_","rc4_","rc6_","rc5_","rc0_","rc1_","rc6_","rc5_","rc5_","rc7_","rc5_","rc7_","rc0_","rc1_","rc3_","rc1_","rc3_","rc6_","rc5_","rc2_","rc0_","rc3_","rc2_","rc7_","rc4_","rc1_","rc6_","rc3_","rc3_","rc2_","rc7_","rc7_","rc4_","rc2_","rc7_","rc2_","rc6_","rc4_","rc2_","rc3_","rc3_","rc2_","rc1_","rc5_","rc4_","rc1_","rc5_"],
+["rc2_","rc6_","rc4_","rc7_","rc3_","rc3_","rc7_","rc0_","rc7_","rc3_","rc7_","rc4_","rc2_","rc5_","rc1_","rc5_","rc7_","rc1_","rc1_","rc5_","rc2_","rc0_","rc4_","rc4_","rc7_","rc6_","rc7_","rc3_","rc7_","rc6_","rc1_","rc7_","rc4_","rc6_","rc6_","rc2_","rc2_","rc5_","rc6_","rc7_","rc1_","rc3_","rc5_","rc5_","rc0_","rc0_","rc4_","rc6_","rc5_","rc7_","rc1_","rc0_","rc2_","rc4_","rc2_","rc3_","rc2_","rc4_","rc0_","rc4_","rc4_","rc4_","rc1_","rc1_","rc6_","rc5_","rc6_","rc6_","rc7_","rc6_","rc6_","rc0_","rc6_","rc3_","rc2_","rc0_","rc6_","rc4_","rc4_","rc3_","rc6_","rc1_","rc2_","rc7_","rc4_","rc4_","rc7_","rc0_","rc3_","rc7_","rc3_","rc4_","rc5_","rc1_","rc1_","rc3_","rc2_","rc3_","rc2_","rc3_","rc0_","rc7_","rc1_","rc3_","rc5_","rc3_","rc6_","rc7_","rc4_","rc2_","rc7_","rc3_","rc5_","rc4_","rc4_","rc4_","rc0_","rc0_","rc1_","rc3_","rc2_","rc7_","rc2_","rc3_","rc1_","rc2_","rc2_","rc5_","rc5_","rc6_","rc4_","rc1_","rc0_","rc7_","rc5_","rc0_","rc7_","rc3_","rc2_","rc0_","rc1_","rc1_","rc6_","rc0_"],
+["rc0_","rc2_","rc7_","rc5_","rc5_","rc6_","rc2_","rc4_","rc1_","rc2_","rc3_","rc0_","rc1_","rc1_","rc2_","rc6_","rc1_","rc0_","rc2_","rc7_","rc5_","rc6_","rc4_","rc7_","rc4_","rc4_","rc4_","rc4_","rc6_","rc1_","rc2_","rc0_","rc7_","rc2_","rc3_","rc2_","rc4_","rc0_","rc1_","rc2_","rc6_","rc2_","rc0_","rc4_","rc5_","rc5_","rc2_","rc7_","rc6_","rc0_","rc6_","rc7_","rc0_","rc5_","rc5_","rc7_","rc3_","rc5_","rc5_","rc3_","rc2_","rc3_","rc1_","rc4_","rc3_","rc4_","rc0_","rc5_","rc5_","rc5_","rc5_","rc7_","rc1_","rc6_","rc0_","rc0_","rc4_","rc6_","rc3_","rc0_","rc3_","rc7_","rc7_","rc7_","rc0_","rc3_","rc7_","rc1_","rc5_","rc7_","rc5_","rc4_","rc6_","rc6_","rc5_","rc4_","rc4_","rc1_","rc7_","rc5_","rc7_","rc6_","rc0_","rc1_","rc3_","rc7_","rc3_","rc1_","rc6_","rc5_","rc3_","rc1_","rc1_","rc4_","rc5_","rc0_","rc6_","rc0_","rc4_","rc5_","rc1_","rc0_","rc5_","rc1_","rc1_","rc2_","rc4_","rc0_","rc1_","rc0_","rc6_","rc1_","rc2_","rc2_","rc1_","rc1_","rc4_","rc4_","rc1_","rc2_","rc4_","rc1_","rc4_","rc2_"],
+["rc0_","rc7_","rc0_","rc1_","rc1_","rc5_","rc3_","rc3_","rc0_","rc2_","rc3_","rc0_","rc4_","rc0_","rc0_","rc0_","rc3_","rc2_","rc7_","rc2_","rc7_","rc1_","rc0_","rc6_","rc3_","rc5_","rc2_","rc2_","rc6_","rc2_","rc5_","rc3_","rc7_","rc1_","rc0_","rc4_","rc2_","rc0_","rc4_","rc3_","rc1_","rc5_","rc1_","rc2_","rc7_","rc7_","rc7_","rc3_","rc1_","rc5_","rc0_","rc0_","rc6_","rc4_","rc5_","rc2_","rc0_","rc2_","rc6_","rc0_","rc3_","rc0_","rc5_","rc3_","rc6_","rc0_","rc5_","rc7_","rc0_","rc4_","rc7_","rc5_","rc5_","rc7_","rc5_","rc6_","rc1_","rc7_","rc3_","rc2_","rc4_","rc3_","rc3_","rc3_","rc6_","rc1_","rc0_","rc3_","rc5_","rc4_","rc5_","rc5_","rc4_","rc4_","rc6_","rc3_","rc6_","rc6_","rc7_","rc4_","rc4_","rc6_","rc4_","rc0_","rc4_","rc2_","rc1_","rc6_","rc3_","rc1_","rc3_","rc5_","rc3_","rc3_","rc6_","rc2_","rc0_","rc3_","rc1_","rc3_","rc7_","rc2_","rc7_","rc1_","rc1_","rc6_","rc7_","rc3_","rc7_","rc3_","rc6_","rc0_","rc6_","rc0_","rc3_","rc5_","rc5_","rc5_","rc4_","rc1_","rc4_","rc4_","rc7_","rc4_"],
+["rc7_","rc6_","rc3_","rc7_","rc3_","rc7_","rc0_","rc0_","rc1_","rc5_","rc4_","rc4_","rc1_","rc4_","rc0_","rc3_","rc0_","rc6_","rc2_","rc6_","rc5_","rc1_","rc4_","rc4_","rc0_","rc1_","rc5_","rc6_","rc5_","rc0_","rc7_","rc7_","rc0_","rc3_","rc1_","rc0_","rc0_","rc7_","rc5_","rc3_","rc1_","rc3_","rc4_","rc6_","rc4_","rc0_","rc1_","rc2_","rc2_","rc7_","rc4_","rc5_","rc2_","rc1_","rc0_","rc5_","rc7_","rc5_","rc6_","rc6_","rc5_","rc5_","rc3_","rc5_","rc5_","rc2_","rc0_","rc6_","rc7_","rc2_","rc0_","rc3_","rc7_","rc7_","rc0_","rc6_","rc3_","rc1_","rc2_","rc2_","rc4_","rc6_","rc2_","rc4_","rc4_","rc1_","rc5_","rc7_","rc7_","rc1_","rc6_","rc1_","rc5_","rc4_","rc3_","rc0_","rc6_","rc4_","rc0_","rc1_","rc7_","rc0_","rc2_","rc2_","rc4_","rc6_","rc6_","rc6_","rc6_","rc0_","rc3_","rc1_","rc7_","rc4_","rc5_","rc5_","rc4_","rc0_","rc4_","rc4_","rc3_","rc6_","rc5_","rc6_","rc4_","rc4_","rc7_","rc6_","rc5_","rc0_","rc0_","rc0_","rc0_","rc2_","rc1_","rc6_","rc0_","rc2_","rc0_","rc4_","rc4_","rc3_","rc4_","rc0_"],
+["rc3_","rc0_","rc6_","rc6_","rc1_","rc7_","rc6_","rc2_","rc1_","rc3_","rc3_","rc7_","rc3_","rc6_","rc7_","rc0_","rc7_","rc6_","rc3_","rc5_","rc3_","rc7_","rc7_","rc0_","rc2_","rc2_","rc4_","rc1_","rc6_","rc4_","rc5_","rc7_","rc7_","rc2_","rc3_","rc7_","rc4_","rc4_","rc1_","rc2_","rc1_","rc0_","rc0_","rc2_","rc2_","rc0_","rc4_","rc5_","rc7_","rc6_","rc6_","rc6_","rc0_","rc7_","rc2_","rc0_","rc3_","rc6_","rc4_","rc4_","rc3_","rc3_","rc7_","rc5_","rc4_","rc3_","rc6_","rc2_","rc5_","rc1_","rc7_","rc4_","rc4_","rc5_","rc4_","rc0_","rc0_","rc5_","rc4_","rc7_","rc3_","rc1_","rc2_","rc4_","rc6_","rc3_","rc4_","rc6_","rc2_","rc6_","rc6_","rc7_","rc4_","rc7_","rc0_","rc4_","rc1_","rc2_","rc6_","rc6_","rc3_","rc6_","rc6_","rc7_","rc2_","rc3_","rc7_","rc1_","rc6_","rc2_","rc0_","rc4_","rc3_","rc6_","rc7_","rc7_","rc6_","rc2_","rc3_","rc1_","rc0_","rc3_","rc4_","rc0_","rc1_","rc0_","rc1_","rc2_","rc7_","rc7_","rc2_","rc2_","rc6_","rc1_","rc0_","rc5_","rc2_","rc1_","rc2_","rc5_","rc3_","rc1_","rc1_","rc5_"],
+["rc0_","rc5_","rc5_","rc7_","rc0_","rc4_","rc1_","rc3_","rc4_","rc5_","rc5_","rc0_","rc1_","rc6_","rc3_","rc0_","rc5_","rc3_","rc4_","rc7_","rc7_","rc4_","rc4_","rc4_","rc4_","rc7_","rc3_","rc4_","rc0_","rc1_","rc5_","rc2_","rc2_","rc7_","rc5_","rc3_","rc3_","rc2_","rc5_","rc2_","rc7_","rc2_","rc1_","rc7_","rc5_","rc2_","rc5_","rc6_","rc4_","rc4_","rc3_","rc5_","rc6_","rc6_","rc2_","rc5_","rc2_","rc6_","rc3_","rc5_","rc4_","rc2_","rc6_","rc3_","rc0_","rc3_","rc5_","rc5_","rc7_","rc3_","rc7_","rc7_","rc1_","rc4_","rc0_","rc5_","rc4_","rc3_","rc6_","rc4_","rc3_","rc5_","rc7_","rc4_","rc3_","rc0_","rc1_","rc0_","rc2_","rc5_","rc3_","rc1_","rc0_","rc5_","rc2_","rc0_","rc3_","rc2_","rc6_","rc3_","rc5_","rc7_","rc7_","rc2_","rc1_","rc2_","rc2_","rc2_","rc6_","rc1_","rc0_","rc1_","rc3_","rc3_","rc0_","rc3_","rc4_","rc1_","rc3_","rc5_","rc4_","rc4_","rc1_","rc0_","rc4_","rc0_","rc3_","rc0_","rc2_","rc2_","rc1_","rc6_","rc5_","rc6_","rc5_","rc2_","rc0_","rc5_","rc7_","rc5_","rc5_","rc4_","rc2_","rc6_"],
+["rc4_","rc0_","rc6_","rc3_","rc4_","rc1_","rc7_","rc3_","rc1_","rc4_","rc7_","rc2_","rc7_","rc6_","rc0_","rc4_","rc6_","rc5_","rc4_","rc5_","rc6_","rc1_","rc1_","rc1_","rc5_","rc4_","rc7_","rc7_","rc7_","rc5_","rc3_","rc3_","rc5_","rc3_","rc1_","rc5_","rc1_","rc0_","rc5_","rc4_","rc0_","rc4_","rc3_","rc6_","rc1_","rc4_","rc1_","rc4_","rc6_","rc2_","rc1_","rc2_","rc1_","rc7_","rc3_","rc5_","rc1_","rc7_","rc2_","rc0_","rc4_","rc4_","rc5_","rc0_","rc7_","rc5_","rc1_","rc7_","rc3_","rc7_","rc6_","rc6_","rc2_","rc4_","rc7_","rc6_","rc4_","rc4_","rc6_","rc0_","rc3_","rc2_","rc7_","rc3_","rc5_","rc1_","rc3_","rc7_","rc3_","rc6_","rc0_","rc0_","rc5_","rc7_","rc7_","rc5_","rc1_","rc4_","rc7_","rc1_","rc4_","rc5_","rc0_","rc2_","rc7_","rc5_","rc2_","rc0_","rc5_","rc5_","rc7_","rc0_","rc5_","rc4_","rc6_","rc2_","rc3_","rc6_","rc1_","rc7_","rc4_","rc2_","rc1_","rc7_","rc2_","rc0_","rc1_","rc2_","rc4_","rc2_","rc1_","rc5_","rc1_","rc3_","rc4_","rc0_","rc6_","rc6_","rc4_","rc5_","rc7_","rc0_","rc4_","rc3_"],
+["rc3_","rc0_","rc5_","rc5_","rc3_","rc6_","rc5_","rc5_","rc3_","rc2_","rc6_","rc4_","rc2_","rc6_","rc3_","rc6_","rc7_","rc7_","rc0_","rc1_","rc5_","rc7_","rc2_","rc7_","rc0_","rc7_","rc5_","rc5_","rc0_","rc4_","rc5_","rc3_","rc5_","rc7_","rc6_","rc4_","rc4_","rc1_","rc0_","rc0_","rc1_","rc6_","rc5_","rc1_","rc5_","rc2_","rc5_","rc2_","rc3_","rc1_","rc5_","rc7_","rc5_","rc3_","rc3_","rc0_","rc4_","rc0_","rc5_","rc0_","rc0_","rc1_","rc2_","rc6_","rc5_","rc0_","rc0_","rc1_","rc6_","rc0_","rc0_","rc1_","rc6_","rc7_","rc0_","rc4_","rc5_","rc2_","rc7_","rc6_","rc7_","rc2_","rc6_","rc5_","rc4_","rc7_","rc5_","rc4_","rc3_","rc2_","rc4_","rc5_","rc0_","rc7_","rc3_","rc5_","rc0_","rc3_","rc3_","rc3_","rc3_","rc2_","rc7_","rc0_","rc1_","rc4_","rc5_","rc6_","rc7_","rc0_","rc2_","rc2_","rc4_","rc2_","rc5_","rc4_","rc0_","rc1_","rc2_","rc1_","rc5_","rc4_","rc2_","rc6_","rc0_","rc7_","rc0_","rc7_","rc1_","rc0_","rc7_","rc1_","rc0_","rc7_","rc3_","rc5_","rc3_","rc5_","rc6_","rc6_","rc6_","rc4_","rc4_","rc6_"],
+["rc2_","rc7_","rc0_","rc3_","rc1_","rc3_","rc0_","rc0_","rc1_","rc7_","rc7_","rc1_","rc7_","rc0_","rc2_","rc6_","rc6_","rc0_","rc5_","rc4_","rc0_","rc0_","rc6_","rc0_","rc3_","rc3_","rc1_","rc6_","rc0_","rc5_","rc6_","rc1_","rc0_","rc3_","rc1_","rc4_","rc0_","rc5_","rc1_","rc0_","rc7_","rc2_","rc3_","rc7_","rc6_","rc2_","rc7_","rc0_","rc7_","rc2_","rc3_","rc4_","rc0_","rc4_","rc6_","rc1_","rc2_","rc5_","rc0_","rc4_","rc5_","rc3_","rc1_","rc4_","rc7_","rc6_","rc7_","rc5_","rc5_","rc5_","rc3_","rc3_","rc0_","rc5_","rc6_","rc7_","rc4_","rc6_","rc0_","rc6_","rc5_","rc7_","rc2_","rc0_","rc3_","rc3_","rc5_","rc7_","rc0_","rc3_","rc2_","rc1_","rc6_","rc6_","rc3_","rc7_","rc6_","rc6_","rc2_","rc7_","rc7_","rc5_","rc0_","rc7_","rc4_","rc0_","rc0_","rc3_","rc2_","rc3_","rc6_","rc0_","rc0_","rc5_","rc2_","rc2_","rc7_","rc5_","rc2_","rc3_","rc4_","rc5_","rc7_","rc5_","rc3_","rc7_","rc6_","rc2_","rc6_","rc5_","rc1_","rc2_","rc7_","rc4_","rc7_","rc5_","rc2_","rc4_","rc2_","rc1_","rc7_","rc1_","rc7_","rc6_"],
+["rc7_","rc6_","rc4_","rc0_","rc4_","rc3_","rc5_","rc5_","rc6_","rc4_","rc7_","rc0_","rc3_","rc5_","rc0_","rc5_","rc7_","rc2_","rc6_","rc6_","rc4_","rc3_","rc0_","rc5_","rc3_","rc0_","rc2_","rc2_","rc4_","rc1_","rc5_","rc0_","rc3_","rc2_","rc6_","rc3_","rc3_","rc5_","rc6_","rc5_","rc7_","rc0_","rc2_","rc2_","rc7_","rc0_","rc3_","rc0_","rc0_","rc6_","rc0_","rc2_","rc7_","rc1_","rc3_","rc7_","rc7_","rc4_","rc2_","rc6_","rc1_","rc2_","rc7_","rc5_","rc3_","rc7_","rc2_","rc3_","rc4_","rc1_","rc5_","rc3_","rc7_","rc7_","rc0_","rc2_","rc6_","rc0_","rc6_","rc2_","rc1_","rc0_","rc7_","rc0_","rc7_","rc6_","rc0_","rc2_","rc5_","rc1_","rc0_","rc5_","rc5_","rc4_","rc5_","rc6_","rc0_","rc7_","rc6_","rc0_","rc6_","rc1_","rc2_","rc6_","rc5_","rc3_","rc1_","rc1_","rc1_","rc6_","rc0_","rc4_","rc3_","rc0_","rc3_","rc6_","rc5_","rc3_","rc7_","rc7_","rc5_","rc6_","rc6_","rc7_","rc0_","rc0_","rc6_","rc3_","rc1_","rc2_","rc4_","rc2_","rc2_","rc4_","rc5_","rc7_","rc2_","rc3_","rc5_","rc7_","rc7_","rc1_","rc3_","rc6_"],
+["rc6_","rc6_","rc5_","rc5_","rc1_","rc6_","rc0_","rc7_","rc0_","rc3_","rc3_","rc3_","rc3_","rc5_","rc4_","rc4_","rc7_","rc6_","rc3_","rc0_","rc7_","rc2_","rc6_","rc6_","rc5_","rc7_","rc4_","rc4_","rc1_","rc2_","rc6_","rc0_","rc1_","rc3_","rc3_","rc5_","rc2_","rc1_","rc3_","rc7_","rc6_","rc1_","rc6_","rc3_","rc6_","rc3_","rc6_","rc1_","rc2_","rc5_","rc2_","rc3_","rc6_","rc4_","rc5_","rc3_","rc7_","rc0_","rc6_","rc0_","rc7_","rc0_","rc1_","rc1_","rc5_","rc6_","rc6_","rc5_","rc1_","rc4_","rc0_","rc2_","rc6_","rc7_","rc1_","rc5_","rc1_","rc2_","rc4_","rc1_","rc1_","rc6_","rc3_","rc3_","rc7_","rc1_","rc2_","rc6_","rc0_","rc5_","rc4_","rc2_","rc0_","rc3_","rc4_","rc3_","rc1_","rc7_","rc7_","rc7_","rc5_","rc6_","rc0_","rc7_","rc1_","rc5_","rc3_","rc1_","rc2_","rc3_","rc6_","rc6_","rc4_","rc2_","rc5_","rc0_","rc1_","rc2_","rc6_","rc6_","rc7_","rc7_","rc4_","rc3_","rc5_","rc3_","rc7_","rc4_","rc6_","rc7_","rc4_","rc1_","rc7_","rc7_","rc1_","rc5_","rc6_","rc3_","rc4_","rc1_","rc4_","rc5_","rc4_","rc6_"],
+["rc5_","rc0_","rc0_","rc2_","rc4_","rc5_","rc7_","rc5_","rc4_","rc4_","rc0_","rc4_","rc5_","rc1_","rc3_","rc5_","rc4_","rc5_","rc6_","rc4_","rc6_","rc7_","rc5_","rc5_","rc6_","rc2_","rc4_","rc4_","rc5_","rc1_","rc7_","rc2_","rc1_","rc0_","rc4_","rc0_","rc2_","rc4_","rc7_","rc1_","rc0_","rc6_","rc6_","rc2_","rc1_","rc4_","rc6_","rc6_","rc2_","rc1_","rc6_","rc0_","rc3_","rc7_","rc2_","rc7_","rc0_","rc1_","rc3_","rc1_","rc6_","rc5_","rc5_","rc1_","rc3_","rc2_","rc1_","rc3_","rc0_","rc7_","rc4_","rc3_","rc3_","rc4_","rc0_","rc0_","rc0_","rc5_","rc1_","rc6_","rc1_","rc4_","rc3_","rc4_","rc6_","rc6_","rc2_","rc3_","rc6_","rc1_","rc1_","rc1_","rc6_","rc3_","rc7_","rc5_","rc1_","rc7_","rc7_","rc3_","rc1_","rc4_","rc0_","rc2_","rc4_","rc7_","rc4_","rc5_","rc3_","rc2_","rc4_","rc7_","rc0_","rc5_","rc4_","rc2_","rc6_","rc4_","rc3_","rc1_","rc5_","rc1_","rc6_","rc4_","rc5_","rc3_","rc6_","rc4_","rc3_","rc6_","rc7_","rc0_","rc2_","rc5_","rc1_","rc0_","rc4_","rc6_","rc4_","rc0_","rc2_","rc5_","rc0_","rc7_"],
+["rc0_","rc4_","rc3_","rc0_","rc3_","rc2_","rc7_","rc0_","rc7_","rc1_","rc3_","rc2_","rc5_","rc4_","rc0_","rc7_","rc2_","rc0_","rc7_","rc2_","rc6_","rc2_","rc1_","rc3_","rc3_","rc1_","rc7_","rc2_","rc4_","rc6_","rc3_","rc7_","rc0_","rc2_","rc7_","rc7_","rc7_","rc6_","rc5_","rc2_","rc4_","rc1_","rc6_","rc2_","rc4_","rc5_","rc7_","rc6_","rc6_","rc3_","rc0_","rc1_","rc3_","rc1_","rc7_","rc4_","rc0_","rc1_","rc5_","rc3_","rc1_","rc3_","rc7_","rc7_","rc1_","rc6_","rc0_","rc7_","rc7_","rc3_","rc4_","rc5_","rc3_","rc2_","rc0_","rc6_","rc2_","rc1_","rc1_","rc1_","rc6_","rc1_","rc3_","rc4_","rc1_","rc4_","rc3_","rc3_","rc3_","rc5_","rc6_","rc3_","rc2_","rc6_","rc2_","rc7_","rc2_","rc0_","rc6_","rc0_","rc6_","rc6_","rc6_","rc2_","rc5_","rc3_","rc2_","rc4_","rc0_","rc5_","rc0_","rc0_","rc3_","rc2_","rc6_","rc4_","rc1_","rc2_","rc4_","rc0_","rc5_","rc5_","rc2_","rc1_","rc7_","rc7_","rc6_","rc6_","rc4_","rc0_","rc1_","rc1_","rc2_","rc1_","rc2_","rc0_","rc1_","rc4_","rc2_","rc5_","rc5_","rc3_","rc2_","rc2_"],
+["rc4_","rc4_","rc2_","rc1_","rc3_","rc4_","rc4_","rc3_","rc6_","rc1_","rc1_","rc7_","rc7_","rc4_","rc2_","rc5_","rc7_","rc7_","rc1_","rc4_","rc3_","rc3_","rc0_","rc1_","rc0_","rc6_","rc2_","rc1_","rc2_","rc3_","rc1_","rc0_","rc2_","rc1_","rc0_","rc3_","rc6_","rc1_","rc2_","rc3_","rc5_","rc2_","rc3_","rc3_","rc3_","rc7_","rc6_","rc4_","rc2_","rc4_","rc6_","rc7_","rc2_","rc5_","rc0_","rc3_","rc2_","rc0_","rc1_","rc7_","rc7_","rc3_","rc4_","rc2_","rc4_","rc1_","rc7_","rc1_","rc3_","rc1_","rc7_","rc2_","rc3_","rc7_","rc0_","rc6_","rc3_","rc7_","rc1_","rc3_","rc5_","rc0_","rc0_","rc3_","rc7_","rc6_","rc2_","rc7_","rc6_","rc2_","rc6_","rc1_","rc3_","rc5_","rc3_","rc0_","rc3_","rc2_","rc6_","rc5_","rc2_","rc4_","rc1_","rc6_","rc7_","rc1_","rc0_","rc0_","rc6_","rc5_","rc5_","rc2_","rc2_","rc1_","rc7_","rc0_","rc1_","rc6_","rc7_","rc5_","rc5_","rc5_","rc3_","rc5_","rc7_","rc0_","rc6_","rc2_","rc7_","rc6_","rc7_","rc5_","rc1_","rc3_","rc1_","rc7_","rc2_","rc6_","rc3_","rc1_","rc4_","rc0_","rc1_","rc1_"],
+["rc7_","rc1_","rc3_","rc5_","rc0_","rc5_","rc5_","rc5_","rc6_","rc7_","rc7_","rc4_","rc2_","rc5_","rc5_","rc7_","rc7_","rc4_","rc1_","rc2_","rc3_","rc5_","rc7_","rc7_","rc4_","rc0_","rc2_","rc0_","rc6_","rc0_","rc5_","rc7_","rc4_","rc0_","rc5_","rc4_","rc6_","rc4_","rc5_","rc7_","rc2_","rc3_","rc2_","rc6_","rc5_","rc3_","rc0_","rc1_","rc3_","rc5_","rc4_","rc4_","rc6_","rc2_","rc4_","rc5_","rc4_","rc7_","rc3_","rc6_","rc4_","rc5_","rc2_","rc5_","rc2_","rc5_","rc3_","rc3_","rc1_","rc2_","rc7_","rc2_","rc0_","rc6_","rc4_","rc3_","rc0_","rc2_","rc7_","rc6_","rc5_","rc0_","rc0_","rc2_","rc3_","rc3_","rc6_","rc0_","rc2_","rc2_","rc0_","rc3_","rc5_","rc0_","rc6_","rc3_","rc0_","rc0_","rc7_","rc3_","rc1_","rc7_","rc4_","rc7_","rc1_","rc2_","rc5_","rc2_","rc2_","rc2_","rc2_","rc7_","rc2_","rc5_","rc5_","rc6_","rc1_","rc7_","rc6_","rc1_","rc0_","rc1_","rc7_","rc7_","rc2_","rc0_","rc2_","rc1_","rc7_","rc1_","rc7_","rc4_","rc7_","rc4_","rc2_","rc6_","rc4_","rc6_","rc5_","rc4_","rc3_","rc4_","rc2_","rc3_"],
+["rc5_","rc4_","rc3_","rc6_","rc0_","rc6_","rc5_","rc0_","rc3_","rc4_","rc2_","rc2_","rc3_","rc6_","rc6_","rc7_","rc7_","rc0_","rc5_","rc5_","rc2_","rc0_","rc3_","rc7_","rc2_","rc3_","rc4_","rc1_","rc5_","rc7_","rc5_","rc4_","rc4_","rc6_","rc2_","rc3_","rc2_","rc1_","rc2_","rc5_","rc6_","rc3_","rc7_","rc4_","rc6_","rc0_","rc3_","rc4_","rc7_","rc6_","rc0_","rc0_","rc3_","rc3_","rc6_","rc2_","rc3_","rc7_","rc2_","rc1_","rc5_","rc3_","rc4_","rc0_","rc7_","rc2_","rc2_","rc5_","rc5_","rc7_","rc4_","rc7_","rc7_","rc7_","rc0_","rc4_","rc6_","rc0_","rc7_","rc1_","rc0_","rc3_","rc7_","rc3_","rc2_","rc6_","rc2_","rc6_","rc6_","rc4_","rc7_","rc4_","rc6_","rc1_","rc0_","rc0_","rc7_","rc1_","rc4_","rc4_","rc1_","rc0_","rc5_","rc0_","rc6_","rc0_","rc4_","rc3_","rc1_","rc6_","rc3_","rc6_","rc1_","rc5_","rc4_","rc7_","rc6_","rc0_","rc1_","rc4_","rc4_","rc2_","rc4_","rc2_","rc5_","rc0_","rc7_","rc4_","rc4_","rc1_","rc6_","rc7_","rc7_","rc5_","rc4_","rc6_","rc4_","rc4_","rc3_","rc1_","rc0_","rc0_","rc0_","rc3_"],
+["rc3_","rc6_","rc6_","rc4_","rc0_","rc1_","rc2_","rc4_","rc4_","rc0_","rc7_","rc2_","rc5_","rc0_","rc3_","rc4_","rc5_","rc4_","rc1_","rc0_","rc6_","rc5_","rc1_","rc2_","rc1_","rc5_","rc5_","rc6_","rc2_","rc0_","rc5_","rc0_","rc6_","rc5_","rc5_","rc2_","rc7_","rc1_","rc5_","rc6_","rc7_","rc6_","rc1_","rc5_","rc4_","rc2_","rc2_","rc0_","rc3_","rc2_","rc6_","rc5_","rc0_","rc0_","rc3_","rc3_","rc4_","rc2_","rc2_","rc1_","rc0_","rc6_","rc1_","rc5_","rc1_","rc3_","rc1_","rc1_","rc4_","rc1_","rc2_","rc2_","rc4_","rc4_","rc3_","rc3_","rc2_","rc5_","rc6_","rc7_","rc5_","rc1_","rc3_","rc7_","rc2_","rc6_","rc4_","rc3_","rc5_","rc4_","rc2_","rc4_","rc1_","rc0_","rc6_","rc1_","rc4_","rc7_","rc2_","rc0_","rc7_","rc0_","rc1_","rc0_","rc4_","rc3_","rc3_","rc4_","rc0_","rc1_","rc6_","rc2_","rc4_","rc3_","rc2_","rc5_","rc6_","rc0_","rc3_","rc1_","rc6_","rc1_","rc5_","rc5_","rc6_","rc0_","rc3_","rc5_","rc0_","rc1_","rc0_","rc0_","rc7_","rc7_","rc2_","rc7_","rc7_","rc1_","rc3_","rc0_","rc6_","rc7_","rc2_","rc1_"],
+["rc7_","rc0_","rc1_","rc1_","rc4_","rc5_","rc0_","rc4_","rc4_","rc4_","rc3_","rc5_","rc6_","rc5_","rc0_","rc1_","rc5_","rc1_","rc3_","rc1_","rc4_","rc5_","rc5_","rc0_","rc4_","rc1_","rc2_","rc6_","rc3_","rc5_","rc2_","rc4_","rc7_","rc6_","rc2_","rc1_","rc4_","rc6_","rc4_","rc5_","rc2_","rc2_","rc4_","rc4_","rc2_","rc0_","rc5_","rc5_","rc2_","rc0_","rc3_","rc3_","rc7_","rc2_","rc2_","rc3_","rc3_","rc0_","rc7_","rc7_","rc0_","rc6_","rc6_","rc3_","rc4_","rc7_","rc4_","rc6_","rc5_","rc2_","rc5_","rc4_","rc6_","rc5_","rc1_","rc1_","rc2_","rc0_","rc2_","rc0_","rc0_","rc5_","rc1_","rc5_","rc0_","rc6_","rc1_","rc0_","rc6_","rc0_","rc4_","rc3_","rc4_","rc7_","rc6_","rc5_","rc5_","rc2_","rc7_","rc1_","rc7_","rc1_","rc4_","rc0_","rc0_","rc4_","rc0_","rc6_","rc5_","rc5_","rc7_","rc4_","rc6_","rc0_","rc3_","rc1_","rc6_","rc2_","rc3_","rc6_","rc2_","rc0_","rc0_","rc2_","rc0_","rc2_","rc2_","rc4_","rc2_","rc0_","rc3_","rc7_","rc3_","rc3_","rc1_","rc3_","rc1_","rc7_","rc2_","rc1_","rc3_","rc7_","rc4_","rc7_"],
+["rc5_","rc2_","rc3_","rc5_","rc2_","rc5_","rc6_","rc7_","rc2_","rc1_","rc3_","rc4_","rc4_","rc6_","rc2_","rc6_","rc5_","rc0_","rc0_","rc3_","rc1_","rc1_","rc5_","rc3_","rc1_","rc7_","rc0_","rc3_","rc6_","rc7_","rc1_","rc2_","rc5_","rc2_","rc7_","rc2_","rc4_","rc7_","rc3_","rc1_","rc3_","rc2_","rc5_","rc0_","rc7_","rc4_","rc6_","rc4_","rc3_","rc2_","rc6_","rc3_","rc0_","rc2_","rc6_","rc1_","rc7_","rc3_","rc0_","rc4_","rc4_","rc4_","rc6_","rc5_","rc5_","rc0_","rc1_","rc0_","rc2_","rc1_","rc3_","rc5_","rc0_","rc3_","rc6_","rc0_","rc1_","rc2_","rc6_","rc5_","rc7_","rc6_","rc5_","rc1_","rc1_","rc6_","rc6_","rc5_","rc4_","rc3_","rc4_","rc4_","rc5_","rc7_","rc3_","rc7_","rc6_","rc5_","rc7_","rc7_","rc7_","rc2_","rc4_","rc3_","rc7_","rc4_","rc6_","rc2_","rc3_","rc2_","rc3_","rc3_","rc7_","rc5_","rc5_","rc3_","rc3_","rc6_","rc3_","rc7_","rc7_","rc0_","rc3_","rc2_","rc2_","rc6_","rc1_","rc2_","rc7_","rc0_","rc3_","rc6_","rc1_","rc2_","rc0_","rc2_","rc1_","rc6_","rc6_","rc7_","rc5_","rc4_","rc3_","rc4_"],
+["rc3_","rc6_","rc6_","rc2_","rc7_","rc1_","rc7_","rc6_","rc1_","rc1_","rc4_","rc0_","rc2_","rc3_","rc6_","rc4_","rc0_","rc1_","rc4_","rc6_","rc1_","rc2_","rc6_","rc4_","rc5_","rc0_","rc4_","rc7_","rc6_","rc6_","rc7_","rc1_","rc4_","rc2_","rc0_","rc5_","rc4_","rc7_","rc1_","rc4_","rc1_","rc6_","rc1_","rc4_","rc6_","rc6_","rc4_","rc6_","rc3_","rc1_","rc1_","rc7_","rc6_","rc1_","rc5_","rc7_","rc3_","rc3_","rc1_","rc1_","rc7_","rc2_","rc0_","rc2_","rc2_","rc7_","rc4_","rc6_","rc3_","rc1_","rc1_","rc7_","rc0_","rc7_","rc1_","rc7_","rc6_","rc5_","rc1_","rc0_","rc6_","rc7_","rc4_","rc1_","rc1_","rc7_","rc7_","rc4_","rc5_","rc5_","rc5_","rc6_","rc0_","rc0_","rc4_","rc7_","rc4_","rc0_","rc0_","rc3_","rc4_","rc5_","rc6_","rc0_","rc6_","rc5_","rc4_","rc1_","rc1_","rc2_","rc7_","rc2_","rc1_","rc3_","rc4_","rc4_","rc1_","rc5_","rc3_","rc3_","rc0_","rc0_","rc1_","rc7_","rc0_","rc6_","rc5_","rc0_","rc3_","rc2_","rc6_","rc5_","rc6_","rc6_","rc2_","rc7_","rc2_","rc7_","rc2_","rc1_","rc0_","rc5_","rc4_","rc3_"],
+["rc5_","rc5_","rc1_","rc0_","rc7_","rc1_","rc1_","rc4_","rc7_","rc4_","rc3_","rc2_","rc7_","rc6_","rc2_","rc4_","rc6_","rc7_","rc4_","rc4_","rc1_","rc1_","rc4_","rc3_","rc5_","rc6_","rc3_","rc1_","rc2_","rc4_","rc2_","rc4_","rc2_","rc6_","rc3_","rc4_","rc2_","rc6_","rc1_","rc6_","rc0_","rc7_","rc5_","rc7_","rc6_","rc0_","rc3_","rc4_","rc6_","rc5_","rc4_","rc0_","rc7_","rc0_","rc4_","rc6_","rc6_","rc1_","rc7_","rc7_","rc0_","rc1_","rc0_","rc5_","rc7_","rc5_","rc2_","rc1_","rc3_","rc1_","rc3_","rc3_","rc3_","rc3_","rc6_","rc0_","rc5_","rc2_","rc7_","rc0_","rc2_","rc7_","rc4_","rc1_","rc5_","rc2_","rc2_","rc6_","rc6_","rc0_","rc6_","rc4_","rc1_","rc3_","rc6_","rc6_","rc4_","rc3_","rc7_","rc7_","rc2_","rc4_","rc7_","rc1_","rc1_","rc0_","rc5_","rc3_","rc3_","rc6_","rc0_","rc0_","rc3_","rc2_","rc6_","rc6_","rc6_","rc0_","rc7_","rc4_","rc4_","rc3_","rc0_","rc0_","rc6_","rc3_","rc4_","rc7_","rc3_","rc7_","rc0_","rc6_","rc6_","rc6_","rc5_","rc1_","rc2_","rc4_","rc4_","rc2_","rc1_","rc3_","rc5_","rc4_"],
+["rc1_","rc0_","rc1_","rc0_","rc0_","rc0_","rc1_","rc0_","rc1_","rc3_","rc6_","rc2_","rc7_","rc0_","rc2_","rc0_","rc2_","rc1_","rc6_","rc6_","rc0_","rc7_","rc6_","rc3_","rc5_","rc1_","rc2_","rc3_","rc6_","rc2_","rc6_","rc3_","rc3_","rc1_","rc5_","rc7_","rc3_","rc4_","rc1_","rc2_","rc4_","rc7_","rc6_","rc4_","rc3_","rc2_","rc0_","rc0_","rc1_","rc1_","rc1_","rc6_","rc7_","rc0_","rc0_","rc6_","rc3_","rc6_","rc7_","rc7_","rc3_","rc1_","rc3_","rc7_","rc1_","rc3_","rc1_","rc3_","rc0_","rc4_","rc7_","rc1_","rc6_","rc7_","rc1_","rc4_","rc3_","rc1_","rc6_","rc0_","rc1_","rc0_","rc2_","rc7_","rc4_","rc0_","rc4_","rc4_","rc3_","rc4_","rc3_","rc5_","rc0_","rc3_","rc4_","rc6_","rc4_","rc0_","rc7_","rc4_","rc7_","rc6_","rc4_","rc6_","rc7_","rc4_","rc0_","rc3_","rc6_","rc6_","rc4_","rc0_","rc1_","rc5_","rc7_","rc1_","rc6_","rc0_","rc3_","rc3_","rc6_","rc2_","rc6_","rc7_","rc4_","rc5_","rc2_","rc1_","rc4_","rc7_","rc6_","rc1_","rc7_","rc4_","rc6_","rc1_","rc6_","rc5_","rc1_","rc1_","rc5_","rc0_","rc2_","rc0_"],
+["rc2_","rc0_","rc2_","rc4_","rc6_","rc6_","rc3_","rc4_","rc4_","rc0_","rc0_","rc3_","rc7_","rc1_","rc3_","rc7_","rc1_","rc1_","rc7_","rc3_","rc1_","rc6_","rc7_","rc2_","rc4_","rc2_","rc6_","rc6_","rc7_","rc0_","rc1_","rc0_","rc4_","rc2_","rc1_","rc0_","rc4_","rc4_","rc6_","rc7_","rc4_","rc6_","rc1_","rc2_","rc2_","rc6_","rc0_","rc2_","rc2_","rc4_","rc0_","rc2_","rc4_","rc2_","rc5_","rc1_","rc0_","rc4_","rc6_","rc1_","rc5_","rc4_","rc7_","rc7_","rc6_","rc2_","rc6_","rc4_","rc7_","rc2_","rc2_","rc3_","rc6_","rc5_","rc1_","rc4_","rc5_","rc4_","rc2_","rc0_","rc7_","rc2_","rc2_","rc6_","rc1_","rc2_","rc2_","rc6_","rc3_","rc2_","rc0_","rc4_","rc7_","rc6_","rc5_","rc6_","rc1_","rc0_","rc0_","rc1_","rc7_","rc6_","rc1_","rc2_","rc3_","rc4_","rc0_","rc1_","rc7_","rc4_","rc7_","rc2_","rc1_","rc3_","rc5_","rc7_","rc7_","rc6_","rc5_","rc0_","rc4_","rc4_","rc6_","rc5_","rc4_","rc6_","rc4_","rc5_","rc4_","rc4_","rc7_","rc0_","rc5_","rc2_","rc2_","rc2_","rc3_","rc3_","rc7_","rc0_","rc1_","rc5_","rc1_","rc0_"],
+["rc0_","rc6_","rc1_","rc4_","rc7_","rc4_","rc6_","rc0_","rc4_","rc3_","rc7_","rc5_","rc4_","rc2_","rc2_","rc4_","rc0_","rc7_","rc3_","rc7_","rc1_","rc5_","rc5_","rc4_","rc5_","rc3_","rc4_","rc3_","rc2_","rc7_","rc6_","rc2_","rc3_","rc3_","rc7_","rc7_","rc1_","rc6_","rc4_","rc6_","rc3_","rc6_","rc3_","rc4_","rc1_","rc4_","rc1_","rc3_","rc5_","rc0_","rc3_","rc6_","rc3_","rc0_","rc2_","rc0_","rc2_","rc3_","rc0_","rc0_","rc3_","rc3_","rc0_","rc0_","rc2_","rc2_","rc5_","rc6_","rc4_","rc3_","rc1_","rc2_","rc0_","rc5_","rc2_","rc1_","rc0_","rc4_","rc0_","rc2_","rc2_","rc0_","rc1_","rc7_","rc1_","rc2_","rc0_","rc6_","rc2_","rc4_","rc4_","rc0_","rc4_","rc0_","rc5_","rc1_","rc7_","rc4_","rc5_","rc2_","rc0_","rc4_","rc4_","rc4_","rc4_","rc0_","rc4_","rc6_","rc4_","rc0_","rc6_","rc0_","rc7_","rc6_","rc5_","rc0_","rc6_","rc3_","rc1_","rc5_","rc4_","rc4_","rc7_","rc3_","rc4_","rc6_","rc7_","rc6_","rc0_","rc0_","rc5_","rc3_","rc7_","rc0_","rc5_","rc3_","rc6_","rc0_","rc1_","rc1_","rc2_","rc2_","rc5_","rc6_"],
+["rc5_","rc2_","rc5_","rc2_","rc0_","rc3_","rc5_","rc6_","rc0_","rc5_","rc0_","rc0_","rc4_","rc6_","rc5_","rc7_","rc5_","rc6_","rc7_","rc0_","rc6_","rc7_","rc4_","rc0_","rc7_","rc4_","rc1_","rc3_","rc5_","rc1_","rc4_","rc4_","rc4_","rc4_","rc2_","rc5_","rc7_","rc3_","rc2_","rc2_","rc7_","rc6_","rc1_","rc1_","rc3_","rc6_","rc7_","rc4_","rc7_","rc6_","rc2_","rc3_","rc0_","rc1_","rc1_","rc3_","rc6_","rc5_","rc4_","rc4_","rc3_","rc6_","rc3_","rc2_","rc3_","rc5_","rc4_","rc1_","rc5_","rc2_","rc1_","rc7_","rc1_","rc0_","rc1_","rc4_","rc2_","rc1_","rc5_","rc5_","rc6_","rc1_","rc6_","rc2_","rc3_","rc7_","rc5_","rc4_","rc4_","rc1_","rc3_","rc3_","rc4_","rc0_","rc2_","rc7_","rc3_","rc4_","rc3_","rc6_","rc7_","rc1_","rc2_","rc5_","rc5_","rc2_","rc7_","rc2_","rc0_","rc4_","rc7_","rc1_","rc1_","rc7_","rc2_","rc6_","rc7_","rc0_","rc6_","rc3_","rc1_","rc2_","rc4_","rc2_","rc2_","rc7_","rc1_","rc5_","rc3_","rc2_","rc0_","rc3_","rc0_","rc6_","rc5_","rc6_","rc4_","rc4_","rc5_","rc3_","rc6_","rc1_","rc5_","rc2_"],
+["rc0_","rc6_","rc0_","rc7_","rc5_","rc4_","rc5_","rc7_","rc4_","rc0_","rc0_","rc7_","rc2_","rc3_","rc0_","rc2_","rc4_","rc5_","rc1_","rc1_","rc5_","rc3_","rc3_","rc0_","rc5_","rc7_","rc2_","rc7_","rc3_","rc7_","rc7_","rc6_","rc4_","rc0_","rc7_","rc4_","rc5_","rc4_","rc3_","rc2_","rc5_","rc1_","rc0_","rc3_","rc6_","rc5_","rc7_","rc7_","rc6_","rc7_","rc0_","rc0_","rc1_","rc0_","rc2_","rc4_","rc1_","rc1_","rc6_","rc5_","rc0_","rc6_","rc5_","rc6_","rc5_","rc4_","rc7_","rc7_","rc6_","rc7_","rc6_","rc2_","rc5_","rc7_","rc2_","rc6_","rc6_","rc4_","rc6_","rc4_","rc0_","rc0_","rc3_","rc0_","rc2_","rc3_","rc4_","rc2_","rc7_","rc5_","rc1_","rc6_","rc5_","rc7_","rc0_","rc1_","rc3_","rc3_","rc0_","rc6_","rc1_","rc5_","rc0_","rc0_","rc4_","rc2_","rc0_","rc0_","rc2_","rc1_","rc6_","rc0_","rc2_","rc6_","rc4_","rc1_","rc0_","rc6_","rc7_","rc2_","rc0_","rc0_","rc3_","rc3_","rc1_","rc1_","rc6_","rc1_","rc5_","rc3_","rc2_","rc2_","rc5_","rc7_","rc7_","rc3_","rc1_","rc0_","rc1_","rc0_","rc1_","rc2_","rc5_","rc5_"],
+["rc6_","rc3_","rc1_","rc2_","rc4_","rc1_","rc5_","rc4_","rc4_","rc4_","rc5_","rc2_","rc5_","rc5_","rc0_","rc4_","rc3_","rc6_","rc6_","rc3_","rc3_","rc4_","rc5_","rc5_","rc5_","rc3_","rc4_","rc0_","rc3_","rc1_","rc4_","rc1_","rc1_","rc6_","rc4_","rc5_","rc6_","rc2_","rc5_","rc7_","rc2_","rc0_","rc5_","rc3_","rc0_","rc1_","rc7_","rc3_","rc6_","rc4_","rc2_","rc1_","rc2_","rc4_","rc1_","rc4_","rc0_","rc3_","rc3_","rc6_","rc1_","rc6_","rc4_","rc5_","rc6_","rc0_","rc4_","rc0_","rc5_","rc3_","rc6_","rc5_","rc3_","rc4_","rc4_","rc0_","rc3_","rc7_","rc1_","rc6_","rc6_","rc4_","rc7_","rc3_","rc3_","rc0_","rc2_","rc1_","rc1_","rc6_","rc5_","rc3_","rc3_","rc7_","rc3_","rc1_","rc3_","rc0_","rc1_","rc4_","rc2_","rc3_","rc2_","rc4_","rc6_","rc1_","rc3_","rc7_","rc5_","rc7_","rc0_","rc5_","rc2_","rc6_","rc6_","rc2_","rc6_","rc7_","rc2_","rc4_","rc0_","rc6_","rc2_","rc6_","rc0_","rc6_","rc3_","rc5_","rc0_","rc6_","rc3_","rc0_","rc4_","rc3_","rc0_","rc5_","rc4_","rc6_","rc0_","rc1_","rc7_","rc7_","rc2_","rc0_"],
+["rc2_","rc2_","rc5_","rc7_","rc2_","rc1_","rc0_","rc5_","rc6_","rc2_","rc2_","rc1_","rc1_","rc3_","rc3_","rc0_","rc6_","rc3_","rc2_","rc6_","rc4_","rc2_","rc0_","rc7_","rc4_","rc3_","rc4_","rc6_","rc1_","rc1_","rc1_","rc6_","rc0_","rc1_","rc6_","rc7_","rc0_","rc7_","rc4_","rc4_","rc3_","rc3_","rc5_","rc2_","rc5_","rc4_","rc2_","rc3_","rc5_","rc5_","rc6_","rc4_","rc1_","rc0_","rc2_","rc4_","rc7_","rc1_","rc0_","rc6_","rc2_","rc4_","rc4_","rc0_","rc2_","rc2_","rc7_","rc5_","rc7_","rc7_","rc6_","rc0_","rc6_","rc7_","rc3_","rc3_","rc5_","rc3_","rc2_","rc6_","rc4_","rc6_","rc7_","rc3_","rc4_","rc6_","rc6_","rc2_","rc5_","rc7_","rc3_","rc1_","rc3_","rc1_","rc3_","rc6_","rc0_","rc5_","rc2_","rc0_","rc0_","rc3_","rc6_","rc3_","rc0_","rc1_","rc4_","rc2_","rc0_","rc7_","rc2_","rc1_","rc3_","rc6_","rc5_","rc3_","rc5_","rc2_","rc4_","rc2_","rc5_","rc5_","rc4_","rc6_","rc3_","rc7_","rc6_","rc0_","rc3_","rc3_","rc6_","rc7_","rc2_","rc3_","rc4_","rc3_","rc0_","rc6_","rc0_","rc7_","rc7_","rc1_","rc2_","rc4_"],
+["rc4_","rc4_","rc0_","rc4_","rc3_","rc6_","rc4_","rc4_","rc7_","rc4_","rc5_","rc6_","rc3_","rc6_","rc5_","rc6_","rc2_","rc2_","rc2_","rc3_","rc6_","rc6_","rc1_","rc0_","rc7_","rc0_","rc0_","rc4_","rc2_","rc0_","rc2_","rc7_","rc4_","rc0_","rc1_","rc6_","rc7_","rc2_","rc6_","rc0_","rc5_","rc3_","rc5_","rc2_","rc2_","rc7_","rc0_","rc7_","rc7_","rc5_","rc0_","rc4_","rc3_","rc4_","rc3_","rc4_","rc5_","rc6_","rc2_","rc0_","rc0_","rc4_","rc2_","rc1_","rc6_","rc2_","rc6_","rc0_","rc0_","rc5_","rc3_","rc6_","rc4_","rc2_","rc4_","rc7_","rc1_","rc0_","rc7_","rc5_","rc7_","rc1_","rc7_","rc2_","rc2_","rc5_","rc3_","rc6_","rc1_","rc0_","rc7_","rc2_","rc2_","rc5_","rc2_","rc3_","rc0_","rc3_","rc0_","rc3_","rc7_","rc7_","rc1_","rc5_","rc7_","rc1_","rc2_","rc0_","rc7_","rc3_","rc2_","rc6_","rc4_","rc0_","rc7_","rc5_","rc3_","rc2_","rc2_","rc5_","rc3_","rc7_","rc0_","rc3_","rc7_","rc4_","rc2_","rc5_","rc2_","rc2_","rc0_","rc7_","rc3_","rc0_","rc2_","rc6_","rc4_","rc1_","rc7_","rc4_","rc5_","rc0_","rc1_","rc3_"],
+["rc6_","rc1_","rc0_","rc4_","rc5_","rc2_","rc6_","rc2_","rc5_","rc2_","rc3_","rc3_","rc0_","rc0_","rc3_","rc7_","rc5_","rc7_","rc4_","rc4_","rc5_","rc1_","rc4_","rc1_","rc3_","rc1_","rc3_","rc2_","rc3_","rc6_","rc4_","rc3_","rc5_","rc5_","rc2_","rc1_","rc1_","rc5_","rc1_","rc5_","rc4_","rc1_","rc2_","rc2_","rc4_","rc1_","rc3_","rc1_","rc1_","rc3_","rc6_","rc2_","rc5_","rc1_","rc1_","rc6_","rc5_","rc2_","rc6_","rc3_","rc0_","rc5_","rc4_","rc0_","rc7_","rc2_","rc5_","rc2_","rc6_","rc4_","rc1_","rc6_","rc3_","rc5_","rc4_","rc7_","rc4_","rc0_","rc3_","rc2_","rc5_","rc5_","rc5_","rc0_","rc2_","rc0_","rc7_","rc5_","rc2_","rc3_","rc0_","rc7_","rc5_","rc5_","rc7_","rc0_","rc7_","rc3_","rc1_","rc0_","rc5_","rc6_","rc0_","rc4_","rc7_","rc5_","rc0_","rc3_","rc7_","rc4_","rc4_","rc3_","rc2_","rc5_","rc0_","rc0_","rc4_","rc6_","rc0_","rc5_","rc1_","rc4_","rc1_","rc6_","rc1_","rc7_","rc6_","rc4_","rc3_","rc5_","rc7_","rc2_","rc5_","rc3_","rc5_","rc1_","rc3_","rc1_","rc0_","rc7_","rc6_","rc6_","rc4_","rc5_"],
+["rc7_","rc4_","rc1_","rc0_","rc5_","rc4_","rc3_","rc7_","rc3_","rc5_","rc2_","rc7_","rc5_","rc2_","rc2_","rc4_","rc4_","rc2_","rc5_","rc2_","rc7_","rc4_","rc7_","rc3_","rc5_","rc1_","rc3_","rc1_","rc1_","rc4_","rc5_","rc5_","rc5_","rc0_","rc7_","rc1_","rc2_","rc2_","rc7_","rc4_","rc7_","rc7_","rc1_","rc4_","rc0_","rc6_","rc1_","rc0_","rc1_","rc1_","rc4_","rc6_","rc3_","rc0_","rc0_","rc3_","rc5_","rc6_","rc1_","rc1_","rc7_","rc0_","rc5_","rc6_","rc4_","rc4_","rc2_","rc3_","rc6_","rc6_","rc6_","rc1_","rc6_","rc1_","rc0_","rc3_","rc3_","rc4_","rc5_","rc0_","rc2_","rc2_","rc5_","rc7_","rc0_","rc7_","rc7_","rc1_","rc5_","rc7_","rc2_","rc1_","rc1_","rc1_","rc6_","rc7_","rc3_","rc5_","rc2_","rc5_","rc7_","rc2_","rc7_","rc1_","rc7_","rc3_","rc5_","rc5_","rc6_","rc3_","rc5_","rc3_","rc1_","rc6_","rc6_","rc5_","rc7_","rc1_","rc4_","rc4_","rc2_","rc5_","rc6_","rc7_","rc6_","rc0_","rc7_","rc7_","rc2_","rc5_","rc7_","rc0_","rc5_","rc5_","rc2_","rc3_","rc3_","rc6_","rc2_","rc2_","rc0_","rc3_","rc1_","rc2_"],
+["rc4_","rc4_","rc1_","rc0_","rc7_","rc7_","rc7_","rc6_","rc6_","rc7_","rc5_","rc5_","rc7_","rc4_","rc7_","rc7_","rc2_","rc3_","rc1_","rc5_","rc1_","rc0_","rc7_","rc6_","rc1_","rc1_","rc5_","rc1_","rc1_","rc4_","rc0_","rc5_","rc3_","rc4_","rc5_","rc7_","rc1_","rc0_","rc0_","rc5_","rc1_","rc5_","rc7_","rc1_","rc4_","rc5_","rc0_","rc7_","rc3_","rc7_","rc0_","rc2_","rc3_","rc1_","rc6_","rc3_","rc3_","rc4_","rc0_","rc4_","rc3_","rc7_","rc4_","rc4_","rc7_","rc7_","rc1_","rc4_","rc4_","rc5_","rc7_","rc2_","rc3_","rc7_","rc4_","rc3_","rc4_","rc4_","rc1_","rc7_","rc4_","rc2_","rc5_","rc7_","rc2_","rc3_","rc0_","rc2_","rc6_","rc0_","rc2_","rc1_","rc3_","rc3_","rc4_","rc7_","rc7_","rc3_","rc7_","rc5_","rc1_","rc4_","rc5_","rc5_","rc2_","rc6_","rc5_","rc5_","rc7_","rc0_","rc2_","rc6_","rc6_","rc3_","rc6_","rc6_","rc6_","rc3_","rc3_","rc3_","rc4_","rc4_","rc2_","rc1_","rc4_","rc1_","rc0_","rc5_","rc5_","rc3_","rc6_","rc3_","rc7_","rc7_","rc0_","rc5_","rc1_","rc1_","rc0_","rc5_","rc6_","rc1_","rc3_","rc6_"],
+["rc0_","rc3_","rc4_","rc5_","rc1_","rc3_","rc0_","rc5_","rc5_","rc0_","rc2_","rc4_","rc4_","rc0_","rc0_","rc0_","rc6_","rc4_","rc6_","rc6_","rc7_","rc6_","rc1_","rc4_","rc6_","rc0_","rc6_","rc5_","rc1_","rc7_","rc4_","rc5_","rc3_","rc0_","rc0_","rc6_","rc1_","rc2_","rc0_","rc2_","rc1_","rc4_","rc1_","rc1_","rc3_","rc0_","rc4_","rc6_","rc4_","rc0_","rc7_","rc5_","rc1_","rc0_","rc1_","rc0_","rc2_","rc4_","rc0_","rc3_","rc7_","rc3_","rc6_","rc4_","rc7_","rc4_","rc0_","rc7_","rc6_","rc0_","rc1_","rc0_","rc6_","rc1_","rc7_","rc2_","rc2_","rc1_","rc5_","rc0_","rc7_","rc6_","rc1_","rc2_","rc4_","rc5_","rc6_","rc2_","rc4_","rc4_","rc4_","rc0_","rc1_","rc4_","rc7_","rc3_","rc3_","rc7_","rc6_","rc0_","rc1_","rc6_","rc4_","rc0_","rc7_","rc6_","rc4_","rc5_","rc1_","rc4_","rc1_","rc5_","rc7_","rc7_","rc4_","rc3_","rc1_","rc5_","rc2_","rc2_","rc5_","rc0_","rc4_","rc3_","rc6_","rc2_","rc0_","rc1_","rc7_","rc7_","rc0_","rc3_","rc1_","rc3_","rc2_","rc2_","rc2_","rc4_","rc0_","rc3_","rc7_","rc0_","rc1_","rc7_"],
+["rc2_","rc2_","rc0_","rc1_","rc7_","rc1_","rc3_","rc0_","rc4_","rc1_","rc7_","rc6_","rc7_","rc6_","rc1_","rc0_","rc5_","rc6_","rc0_","rc7_","rc7_","rc7_","rc2_","rc5_","rc7_","rc1_","rc4_","rc4_","rc5_","rc5_","rc6_","rc4_","rc3_","rc7_","rc5_","rc4_","rc7_","rc7_","rc3_","rc3_","rc2_","rc6_","rc4_","rc7_","rc4_","rc7_","rc3_","rc6_","rc2_","rc4_","rc5_","rc3_","rc3_","rc3_","rc3_","rc3_","rc0_","rc0_","rc6_","rc0_","rc2_","rc4_","rc6_","rc6_","rc0_","rc6_","rc4_","rc4_","rc0_","rc2_","rc0_","rc5_","rc6_","rc7_","rc5_","rc7_","rc4_","rc6_","rc4_","rc4_","rc1_","rc7_","rc7_","rc0_","rc4_","rc6_","rc7_","rc2_","rc2_","rc6_","rc7_","rc7_","rc7_","rc4_","rc3_","rc2_","rc2_","rc0_","rc3_","rc0_","rc3_","rc7_","rc4_","rc4_","rc1_","rc5_","rc1_","rc6_","rc7_","rc1_","rc6_","rc2_","rc0_","rc1_","rc5_","rc6_","rc3_","rc0_","rc5_","rc3_","rc0_","rc5_","rc0_","rc0_","rc3_","rc5_","rc3_","rc3_","rc0_","rc4_","rc3_","rc2_","rc0_","rc0_","rc6_","rc1_","rc3_","rc7_","rc0_","rc4_","rc7_","rc2_","rc7_","rc0_"],
+["rc7_","rc1_","rc1_","rc5_","rc7_","rc1_","rc5_","rc6_","rc7_","rc4_","rc7_","rc4_","rc7_","rc0_","rc0_","rc0_","rc2_","rc2_","rc5_","rc0_","rc6_","rc4_","rc6_","rc4_","rc3_","rc5_","rc2_","rc1_","rc1_","rc0_","rc1_","rc5_","rc7_","rc0_","rc2_","rc4_","rc1_","rc2_","rc7_","rc3_","rc2_","rc3_","rc6_","rc3_","rc3_","rc4_","rc0_","rc0_","rc2_","rc3_","rc7_","rc3_","rc6_","rc4_","rc4_","rc4_","rc1_","rc7_","rc7_","rc4_","rc0_","rc4_","rc3_","rc2_","rc0_","rc4_","rc0_","rc5_","rc1_","rc2_","rc3_","rc1_","rc7_","rc3_","rc3_","rc5_","rc6_","rc1_","rc5_","rc4_","rc6_","rc6_","rc3_","rc3_","rc7_","rc7_","rc0_","rc3_","rc7_","rc6_","rc7_","rc6_","rc1_","rc5_","rc5_","rc0_","rc1_","rc0_","rc3_","rc6_","rc6_","rc2_","rc1_","rc2_","rc6_","rc3_","rc0_","rc2_","rc0_","rc0_","rc6_","rc5_","rc6_","rc3_","rc7_","rc7_","rc2_","rc5_","rc2_","rc7_","rc2_","rc1_","rc2_","rc7_","rc7_","rc3_","rc6_","rc4_","rc2_","rc1_","rc4_","rc0_","rc0_","rc1_","rc1_","rc4_","rc0_","rc3_","rc3_","rc1_","rc2_","rc0_","rc3_","rc0_"],
+["rc3_","rc3_","rc5_","rc0_","rc6_","rc6_","rc2_","rc1_","rc5_","rc1_","rc0_","rc7_","rc0_","rc7_","rc0_","rc1_","rc5_","rc1_","rc1_","rc2_","rc0_","rc7_","rc3_","rc0_","rc5_","rc3_","rc6_","rc3_","rc4_","rc1_","rc4_","rc0_","rc4_","rc5_","rc4_","rc7_","rc4_","rc3_","rc0_","rc1_","rc6_","rc4_","rc2_","rc6_","rc4_","rc7_","rc2_","rc6_","rc7_","rc7_","rc3_","rc6_","rc6_","rc4_","rc7_","rc6_","rc4_","rc4_","rc0_","rc0_","rc6_","rc3_","rc1_","rc3_","rc3_","rc1_","rc4_","rc2_","rc4_","rc3_","rc5_","rc7_","rc5_","rc4_","rc6_","rc3_","rc5_","rc6_","rc4_","rc2_","rc3_","rc3_","rc3_","rc2_","rc1_","rc1_","rc6_","rc5_","rc6_","rc6_","rc1_","rc0_","rc6_","rc7_","rc2_","rc3_","rc5_","rc7_","rc5_","rc1_","rc5_","rc7_","rc7_","rc2_","rc3_","rc1_","rc5_","rc0_","rc0_","rc1_","rc7_","rc6_","rc7_","rc6_","rc7_","rc0_","rc2_","rc5_","rc6_","rc7_","rc2_","rc7_","rc1_","rc3_","rc7_","rc4_","rc7_","rc6_","rc4_","rc0_","rc7_","rc6_","rc7_","rc5_","rc7_","rc3_","rc0_","rc1_","rc0_","rc3_","rc7_","rc2_","rc1_","rc2_"],
+["rc3_","rc7_","rc0_","rc6_","rc1_","rc0_","rc0_","rc2_","rc1_","rc1_","rc0_","rc0_","rc7_","rc3_","rc0_","rc5_","rc0_","rc3_","rc2_","rc0_","rc3_","rc7_","rc6_","rc3_","rc3_","rc6_","rc5_","rc5_","rc2_","rc0_","rc3_","rc6_","rc0_","rc6_","rc7_","rc5_","rc4_","rc3_","rc5_","rc7_","rc3_","rc3_","rc6_","rc1_","rc7_","rc3_","rc6_","rc7_","rc1_","rc1_","rc6_","rc6_","rc1_","rc5_","rc2_","rc7_","rc5_","rc0_","rc6_","rc5_","rc1_","rc3_","rc5_","rc2_","rc6_","rc4_","rc3_","rc4_","rc6_","rc5_","rc3_","rc6_","rc7_","rc5_","rc3_","rc4_","rc6_","rc4_","rc7_","rc6_","rc5_","rc1_","rc3_","rc1_","rc0_","rc5_","rc5_","rc2_","rc5_","rc5_","rc2_","rc5_","rc3_","rc4_","rc0_","rc5_","rc4_","rc0_","rc3_","rc5_","rc5_","rc6_","rc4_","rc6_","rc5_","rc0_","rc7_","rc2_","rc4_","rc6_","rc4_","rc0_","rc7_","rc3_","rc1_","rc1_","rc1_","rc1_","rc6_","rc3_","rc4_","rc7_","rc0_","rc3_","rc0_","rc2_","rc2_","rc0_","rc3_","rc2_","rc1_","rc6_","rc2_","rc7_","rc7_","rc1_","rc6_","rc3_","rc2_","rc2_","rc3_","rc2_","rc6_","rc7_"],
+["rc5_","rc7_","rc0_","rc5_","rc4_","rc0_","rc4_","rc1_","rc1_","rc6_","rc2_","rc0_","rc1_","rc5_","rc4_","rc4_","rc2_","rc3_","rc4_","rc0_","rc4_","rc7_","rc4_","rc5_","rc2_","rc7_","rc5_","rc6_","rc0_","rc7_","rc3_","rc0_","rc0_","rc6_","rc1_","rc7_","rc0_","rc3_","rc1_","rc5_","rc5_","rc0_","rc7_","rc4_","rc6_","rc6_","rc7_","rc6_","rc2_","rc2_","rc4_","rc3_","rc4_","rc6_","rc2_","rc3_","rc0_","rc2_","rc6_","rc4_","rc6_","rc5_","rc5_","rc6_","rc7_","rc7_","rc2_","rc5_","rc5_","rc1_","rc4_","rc7_","rc0_","rc7_","rc7_","rc7_","rc6_","rc4_","rc2_","rc1_","rc2_","rc7_","rc1_","rc7_","rc1_","rc5_","rc3_","rc3_","rc1_","rc6_","rc7_","rc6_","rc3_","rc5_","rc2_","rc0_","rc2_","rc2_","rc4_","rc0_","rc4_","rc2_","rc5_","rc7_","rc1_","rc2_","rc2_","rc1_","rc2_","rc7_","rc4_","rc4_","rc3_","rc2_","rc3_","rc3_","rc4_","rc2_","rc6_","rc5_","rc4_","rc3_","rc6_","rc2_","rc7_","rc5_","rc4_","rc5_","rc3_","rc0_","rc0_","rc0_","rc5_","rc7_","rc4_","rc5_","rc1_","rc2_","rc0_","rc1_","rc1_","rc0_","rc7_","rc6_"],
+["rc5_","rc4_","rc2_","rc1_","rc4_","rc0_","rc3_","rc0_","rc2_","rc7_","rc5_","rc0_","rc3_","rc0_","rc2_","rc6_","rc0_","rc0_","rc5_","rc5_","rc7_","rc6_","rc1_","rc0_","rc7_","rc5_","rc1_","rc0_","rc4_","rc6_","rc2_","rc0_","rc7_","rc4_","rc6_","rc7_","rc2_","rc4_","rc2_","rc5_","rc3_","rc4_","rc2_","rc2_","rc7_","rc3_","rc4_","rc4_","rc1_","rc2_","rc2_","rc7_","rc3_","rc2_","rc4_","rc1_","rc4_","rc5_","rc5_","rc6_","rc2_","rc1_","rc5_","rc2_","rc2_","rc3_","rc7_","rc6_","rc6_","rc0_","rc3_","rc5_","rc6_","rc2_","rc7_","rc6_","rc2_","rc0_","rc2_","rc4_","rc7_","rc7_","rc1_","rc5_","rc0_","rc0_","rc5_","rc0_","rc7_","rc2_","rc4_","rc3_","rc4_","rc2_","rc0_","rc4_","rc5_","rc7_","rc5_","rc6_","rc7_","rc3_","rc6_","rc6_","rc4_","rc7_","rc3_","rc6_","rc5_","rc6_","rc4_","rc1_","rc1_","rc6_","rc1_","rc0_","rc7_","rc2_","rc4_","rc5_","rc1_","rc3_","rc7_","rc7_","rc2_","rc7_","rc3_","rc5_","rc1_","rc2_","rc0_","rc6_","rc6_","rc5_","rc4_","rc0_","rc4_","rc5_","rc6_","rc0_","rc7_","rc6_","rc2_","rc1_"],
+["rc1_","rc7_","rc2_","rc0_","rc0_","rc7_","rc2_","rc0_","rc1_","rc0_","rc4_","rc1_","rc3_","rc3_","rc6_","rc7_","rc5_","rc4_","rc1_","rc0_","rc2_","rc7_","rc3_","rc5_","rc7_","rc3_","rc7_","rc5_","rc1_","rc7_","rc4_","rc6_","rc4_","rc2_","rc3_","rc5_","rc2_","rc7_","rc5_","rc0_","rc0_","rc1_","rc5_","rc3_","rc0_","rc3_","rc1_","rc0_","rc2_","rc4_","rc6_","rc2_","rc4_","rc0_","rc4_","rc3_","rc4_","rc2_","rc0_","rc4_","rc3_","rc1_","rc2_","rc6_","rc4_","rc0_","rc6_","rc7_","rc5_","rc3_","rc6_","rc7_","rc6_","rc7_","rc0_","rc3_","rc0_","rc1_","rc4_","rc1_","rc0_","rc2_","rc1_","rc5_","rc3_","rc1_","rc0_","rc3_","rc4_","rc1_","rc0_","rc7_","rc4_","rc4_","rc4_","rc2_","rc1_","rc0_","rc2_","rc5_","rc2_","rc2_","rc6_","rc3_","rc2_","rc1_","rc7_","rc2_","rc4_","rc4_","rc7_","rc2_","rc6_","rc6_","rc0_","rc1_","rc0_","rc0_","rc5_","rc6_","rc6_","rc0_","rc7_","rc4_","rc4_","rc1_","rc2_","rc1_","rc3_","rc3_","rc7_","rc0_","rc1_","rc4_","rc3_","rc5_","rc5_","rc7_","rc0_","rc7_","rc3_","rc4_","rc2_","rc2_"],
+["rc4_","rc0_","rc5_","rc5_","rc3_","rc7_","rc5_","rc1_","rc3_","rc7_","rc6_","rc4_","rc5_","rc7_","rc5_","rc5_","rc0_","rc0_","rc6_","rc1_","rc1_","rc2_","rc7_","rc4_","rc6_","rc2_","rc5_","rc4_","rc6_","rc2_","rc6_","rc3_","rc4_","rc1_","rc7_","rc3_","rc3_","rc5_","rc6_","rc7_","rc3_","rc7_","rc3_","rc7_","rc4_","rc6_","rc3_","rc4_","rc3_","rc7_","rc5_","rc5_","rc3_","rc3_","rc1_","rc2_","rc6_","rc1_","rc4_","rc7_","rc4_","rc5_","rc1_","rc3_","rc3_","rc1_","rc5_","rc1_","rc0_","rc3_","rc2_","rc6_","rc5_","rc7_","rc7_","rc5_","rc4_","rc7_","rc5_","rc0_","rc2_","rc0_","rc5_","rc7_","rc7_","rc7_","rc0_","rc5_","rc5_","rc4_","rc7_","rc1_","rc6_","rc5_","rc5_","rc3_","rc4_","rc6_","rc1_","rc0_","rc3_","rc0_","rc0_","rc0_","rc2_","rc0_","rc2_","rc5_","rc2_","rc1_","rc4_","rc6_","rc5_","rc4_","rc6_","rc6_","rc4_","rc7_","rc6_","rc7_","rc2_","rc3_","rc5_","rc2_","rc4_","rc3_","rc0_","rc3_","rc5_","rc2_","rc2_","rc0_","rc4_","rc4_","rc0_","rc3_","rc1_","rc0_","rc5_","rc1_","rc1_","rc4_","rc6_","rc1_"],
+["rc6_","rc2_","rc1_","rc1_","rc2_","rc2_","rc2_","rc5_","rc5_","rc7_","rc6_","rc2_","rc5_","rc6_","rc4_","rc3_","rc6_","rc4_","rc0_","rc1_","rc3_","rc0_","rc2_","rc0_","rc3_","rc1_","rc6_","rc7_","rc7_","rc1_","rc5_","rc0_","rc2_","rc2_","rc4_","rc1_","rc2_","rc0_","rc4_","rc2_","rc7_","rc7_","rc2_","rc1_","rc2_","rc6_","rc7_","rc2_","rc0_","rc5_","rc3_","rc2_","rc6_","rc3_","rc6_","rc6_","rc7_","rc3_","rc7_","rc0_","rc4_","rc7_","rc0_","rc2_","rc4_","rc5_","rc1_","rc6_","rc4_","rc1_","rc4_","rc5_","rc0_","rc4_","rc1_","rc6_","rc2_","rc4_","rc3_","rc1_","rc2_","rc4_","rc3_","rc5_","rc0_","rc5_","rc4_","rc7_","rc6_","rc4_","rc6_","rc4_","rc1_","rc6_","rc7_","rc0_","rc1_","rc2_","rc6_","rc0_","rc7_","rc6_","rc2_","rc5_","rc7_","rc5_","rc3_","rc2_","rc6_","rc7_","rc7_","rc1_","rc6_","rc1_","rc0_","rc0_","rc7_","rc6_","rc4_","rc1_","rc0_","rc6_","rc5_","rc2_","rc6_","rc7_","rc1_","rc3_","rc4_","rc1_","rc5_","rc6_","rc4_","rc6_","rc6_","rc4_","rc5_","rc2_","rc0_","rc5_","rc6_","rc7_","rc3_","rc7_"],
+["rc1_","rc4_","rc2_","rc4_","rc3_","rc7_","rc6_","rc5_","rc4_","rc0_","rc3_","rc4_","rc2_","rc1_","rc0_","rc0_","rc3_","rc3_","rc5_","rc2_","rc2_","rc2_","rc0_","rc0_","rc1_","rc3_","rc1_","rc7_","rc1_","rc5_","rc7_","rc6_","rc6_","rc6_","rc1_","rc1_","rc6_","rc7_","rc2_","rc3_","rc2_","rc3_","rc7_","rc0_","rc6_","rc4_","rc3_","rc2_","rc6_","rc7_","rc5_","rc2_","rc2_","rc0_","rc0_","rc1_","rc4_","rc1_","rc4_","rc0_","rc7_","rc7_","rc3_","rc5_","rc2_","rc6_","rc6_","rc6_","rc5_","rc7_","rc0_","rc3_","rc4_","rc6_","rc3_","rc7_","rc1_","rc0_","rc2_","rc7_","rc6_","rc5_","rc7_","rc7_","rc4_","rc3_","rc7_","rc1_","rc6_","rc3_","rc2_","rc7_","rc1_","rc0_","rc7_","rc3_","rc0_","rc4_","rc7_","rc5_","rc3_","rc5_","rc0_","rc5_","rc7_","rc1_","rc6_","rc1_","rc4_","rc6_","rc5_","rc1_","rc3_","rc5_","rc2_","rc1_","rc7_","rc0_","rc3_","rc7_","rc6_","rc1_","rc4_","rc5_","rc7_","rc5_","rc3_","rc1_","rc6_","rc1_","rc6_","rc4_","rc5_","rc3_","rc3_","rc0_","rc6_","rc5_","rc0_","rc6_","rc7_","rc5_","rc4_","rc6_"],
+["rc4_","rc0_","rc6_","rc7_","rc3_","rc1_","rc5_","rc2_","rc4_","rc4_","rc0_","rc2_","rc0_","rc0_","rc7_","rc7_","rc4_","rc4_","rc1_","rc4_","rc6_","rc1_","rc7_","rc5_","rc7_","rc1_","rc1_","rc5_","rc1_","rc6_","rc0_","rc7_","rc2_","rc5_","rc3_","rc3_","rc2_","rc5_","rc6_","rc3_","rc1_","rc3_","rc0_","rc6_","rc5_","rc0_","rc3_","rc5_","rc3_","rc5_","rc2_","rc5_","rc4_","rc5_","rc6_","rc4_","rc2_","rc5_","rc1_","rc7_","rc2_","rc7_","rc7_","rc3_","rc4_","rc5_","rc1_","rc3_","rc1_","rc4_","rc4_","rc2_","rc5_","rc6_","rc2_","rc1_","rc5_","rc5_","rc0_","rc3_","rc3_","rc5_","rc7_","rc7_","rc7_","rc1_","rc6_","rc5_","rc0_","rc1_","rc0_","rc5_","rc3_","rc2_","rc2_","rc4_","rc3_","rc7_","rc0_","rc0_","rc3_","rc7_","rc1_","rc7_","rc0_","rc6_","rc0_","rc3_","rc1_","rc0_","rc4_","rc0_","rc3_","rc3_","rc2_","rc1_","rc0_","rc5_","rc1_","rc0_","rc1_","rc6_","rc6_","rc4_","rc4_","rc7_","rc2_","rc0_","rc7_","rc3_","rc1_","rc2_","rc5_","rc5_","rc3_","rc1_","rc0_","rc2_","rc1_","rc3_","rc1_","rc0_","rc0_","rc5_"],
+["rc4_","rc7_","rc2_","rc4_","rc7_","rc7_","rc6_","rc4_","rc4_","rc3_","rc4_","rc7_","rc4_","rc5_","rc5_","rc1_","rc7_","rc1_","rc2_","rc1_","rc2_","rc6_","rc4_","rc2_","rc0_","rc2_","rc4_","rc2_","rc4_","rc5_","rc5_","rc3_","rc5_","rc2_","rc6_","rc0_","rc3_","rc1_","rc4_","rc2_","rc1_","rc0_","rc0_","rc5_","rc4_","rc4_","rc5_","rc4_","rc3_","rc2_","rc4_","rc4_","rc0_","rc2_","rc3_","rc0_","rc6_","rc7_","rc3_","rc0_","rc2_","rc0_","rc1_","rc7_","rc7_","rc3_","rc0_","rc5_","rc5_","rc2_","rc5_","rc3_","rc2_","rc6_","rc3_","rc5_","rc4_","rc4_","rc0_","rc4_","rc5_","rc5_","rc0_","rc5_","rc7_","rc2_","rc0_","rc4_","rc2_","rc0_","rc5_","rc5_","rc5_","rc0_","rc6_","rc4_","rc1_","rc2_","rc7_","rc3_","rc4_","rc3_","rc0_","rc4_","rc5_","rc4_","rc6_","rc0_","rc3_","rc5_","rc0_","rc0_","rc2_","rc2_","rc4_","rc2_","rc0_","rc5_","rc3_","rc6_","rc5_","rc5_","rc2_","rc0_","rc2_","rc5_","rc3_","rc1_","rc4_","rc7_","rc3_","rc2_","rc1_","rc3_","rc5_","rc0_","rc2_","rc2_","rc7_","rc6_","rc1_","rc0_","rc3_","rc7_"],
+["rc5_","rc2_","rc2_","rc4_","rc3_","rc4_","rc4_","rc5_","rc7_","rc6_","rc2_","rc3_","rc4_","rc0_","rc7_","rc5_","rc0_","rc3_","rc4_","rc1_","rc3_","rc2_","rc4_","rc6_","rc2_","rc1_","rc0_","rc7_","rc7_","rc5_","rc3_","rc2_","rc3_","rc4_","rc0_","rc2_","rc7_","rc6_","rc3_","rc3_","rc7_","rc4_","rc5_","rc4_","rc1_","rc0_","rc4_","rc1_","rc4_","rc5_","rc2_","rc1_","rc3_","rc0_","rc5_","rc5_","rc4_","rc0_","rc7_","rc3_","rc5_","rc2_","rc7_","rc2_","rc7_","rc0_","rc0_","rc6_","rc5_","rc3_","rc0_","rc6_","rc6_","rc6_","rc3_","rc4_","rc1_","rc5_","rc1_","rc5_","rc1_","rc6_","rc6_","rc2_","rc1_","rc6_","rc0_","rc6_","rc1_","rc7_","rc6_","rc1_","rc2_","rc1_","rc7_","rc4_","rc7_","rc7_","rc1_","rc6_","rc4_","rc3_","rc3_","rc7_","rc3_","rc5_","rc5_","rc3_","rc5_","rc7_","rc6_","rc1_","rc6_","rc5_","rc6_","rc4_","rc4_","rc3_","rc5_","rc1_","rc1_","rc7_","rc4_","rc2_","rc7_","rc1_","rc3_","rc3_","rc3_","rc0_","rc2_","rc4_","rc5_","rc7_","rc4_","rc6_","rc7_","rc7_","rc1_","rc1_","rc5_","rc7_","rc3_","rc4_"],
+["rc4_","rc2_","rc3_","rc6_","rc5_","rc0_","rc5_","rc6_","rc3_","rc7_","rc1_","rc6_","rc3_","rc3_","rc3_","rc6_","rc4_","rc3_","rc5_","rc6_","rc0_","rc6_","rc3_","rc2_","rc2_","rc6_","rc0_","rc5_","rc0_","rc4_","rc0_","rc0_","rc2_","rc5_","rc5_","rc2_","rc3_","rc4_","rc6_","rc4_","rc0_","rc7_","rc4_","rc5_","rc7_","rc6_","rc7_","rc4_","rc2_","rc1_","rc1_","rc4_","rc4_","rc1_","rc1_","rc5_","rc3_","rc2_","rc3_","rc0_","rc6_","rc7_","rc5_","rc3_","rc1_","rc7_","rc5_","rc6_","rc7_","rc7_","rc1_","rc5_","rc7_","rc0_","rc7_","rc7_","rc2_","rc2_","rc7_","rc6_","rc4_","rc0_","rc6_","rc0_","rc1_","rc6_","rc4_","rc5_","rc3_","rc1_","rc0_","rc2_","rc1_","rc7_","rc2_","rc6_","rc1_","rc7_","rc1_","rc3_","rc0_","rc1_","rc7_","rc7_","rc1_","rc0_","rc1_","rc3_","rc5_","rc7_","rc3_","rc4_","rc3_","rc3_","rc4_","rc0_","rc1_","rc7_","rc6_","rc3_","rc1_","rc5_","rc1_","rc3_","rc6_","rc4_","rc7_","rc1_","rc1_","rc5_","rc3_","rc1_","rc7_","rc3_","rc6_","rc3_","rc6_","rc1_","rc3_","rc3_","rc0_","rc6_","rc4_","rc6_"],
+["rc6_","rc7_","rc3_","rc6_","rc1_","rc4_","rc5_","rc7_","rc5_","rc6_","rc4_","rc3_","rc0_","rc6_","rc5_","rc3_","rc1_","rc2_","rc2_","rc0_","rc4_","rc4_","rc0_","rc1_","rc5_","rc3_","rc3_","rc5_","rc2_","rc6_","rc0_","rc3_","rc6_","rc6_","rc3_","rc0_","rc4_","rc3_","rc3_","rc1_","rc1_","rc2_","rc3_","rc2_","rc5_","rc6_","rc2_","rc6_","rc3_","rc5_","rc5_","rc7_","rc6_","rc4_","rc3_","rc0_","rc6_","rc5_","rc2_","rc2_","rc4_","rc7_","rc0_","rc4_","rc3_","rc7_","rc4_","rc7_","rc7_","rc6_","rc6_","rc0_","rc3_","rc3_","rc5_","rc7_","rc5_","rc3_","rc7_","rc0_","rc4_","rc6_","rc6_","rc7_","rc5_","rc3_","rc1_","rc2_","rc2_","rc7_","rc0_","rc2_","rc5_","rc2_","rc5_","rc2_","rc4_","rc2_","rc7_","rc2_","rc5_","rc5_","rc0_","rc6_","rc3_","rc0_","rc1_","rc3_","rc1_","rc5_","rc5_","rc2_","rc7_","rc5_","rc4_","rc1_","rc3_","rc2_","rc1_","rc5_","rc1_","rc1_","rc5_","rc4_","rc6_","rc6_","rc5_","rc3_","rc1_","rc0_","rc2_","rc3_","rc4_","rc6_","rc0_","rc1_","rc2_","rc2_","rc1_","rc6_","rc1_","rc5_","rc2_","rc4_"],
+["rc1_","rc3_","rc7_","rc2_","rc5_","rc1_","rc3_","rc2_","rc2_","rc4_","rc2_","rc1_","rc6_","rc3_","rc2_","rc7_","rc4_","rc0_","rc6_","rc0_","rc4_","rc3_","rc6_","rc2_","rc0_","rc0_","rc4_","rc0_","rc4_","rc2_","rc0_","rc6_","rc5_","rc7_","rc6_","rc5_","rc6_","rc6_","rc6_","rc1_","rc6_","rc7_","rc5_","rc2_","rc6_","rc2_","rc2_","rc0_","rc2_","rc2_","rc4_","rc2_","rc7_","rc3_","rc2_","rc1_","rc4_","rc2_","rc2_","rc0_","rc3_","rc4_","rc6_","rc7_","rc1_","rc2_","rc3_","rc1_","rc4_","rc3_","rc4_","rc2_","rc5_","rc2_","rc0_","rc5_","rc6_","rc2_","rc7_","rc4_","rc6_","rc7_","rc2_","rc1_","rc2_","rc7_","rc4_","rc5_","rc6_","rc1_","rc3_","rc0_","rc5_","rc4_","rc3_","rc0_","rc5_","rc3_","rc6_","rc5_","rc7_","rc7_","rc4_","rc4_","rc6_","rc6_","rc1_","rc2_","rc5_","rc3_","rc0_","rc5_","rc5_","rc6_","rc2_","rc5_","rc7_","rc6_","rc4_","rc0_","rc0_","rc3_","rc7_","rc6_","rc3_","rc1_","rc1_","rc2_","rc3_","rc2_","rc5_","rc2_","rc0_","rc3_","rc6_","rc1_","rc1_","rc2_","rc2_","rc3_","rc4_","rc6_","rc5_","rc1_"],
+["rc2_","rc7_","rc3_","rc6_","rc6_","rc0_","rc2_","rc0_","rc7_","rc2_","rc6_","rc3_","rc4_","rc3_","rc7_","rc2_","rc0_","rc7_","rc1_","rc0_","rc7_","rc5_","rc3_","rc7_","rc7_","rc6_","rc2_","rc7_","rc2_","rc1_","rc6_","rc0_","rc3_","rc3_","rc4_","rc3_","rc7_","rc5_","rc6_","rc6_","rc6_","rc6_","rc1_","rc7_","rc1_","rc2_","rc5_","rc3_","rc7_","rc3_","rc2_","rc7_","rc3_","rc0_","rc1_","rc7_","rc0_","rc3_","rc0_","rc5_","rc0_","rc7_","rc3_","rc4_","rc0_","rc1_","rc7_","rc5_","rc0_","rc6_","rc0_","rc2_","rc3_","rc6_","rc6_","rc1_","rc2_","rc7_","rc3_","rc4_","rc5_","rc5_","rc0_","rc7_","rc4_","rc1_","rc1_","rc1_","rc3_","rc0_","rc6_","rc6_","rc5_","rc5_","rc4_","rc4_","rc2_","rc1_","rc3_","rc4_","rc4_","rc2_","rc0_","rc4_","rc6_","rc2_","rc6_","rc3_","rc6_","rc1_","rc1_","rc4_","rc5_","rc6_","rc4_","rc7_","rc4_","rc2_","rc3_","rc4_","rc1_","rc5_","rc3_","rc2_","rc2_","rc5_","rc1_","rc7_","rc1_","rc4_","rc0_","rc0_","rc1_","rc1_","rc7_","rc3_","rc0_","rc2_","rc2_","rc3_","rc6_","rc1_","rc7_","rc4_"],
+["rc5_","rc4_","rc4_","rc0_","rc1_","rc2_","rc0_","rc2_","rc1_","rc2_","rc7_","rc0_","rc6_","rc6_","rc2_","rc6_","rc4_","rc0_","rc6_","rc1_","rc0_","rc4_","rc3_","rc0_","rc1_","rc7_","rc0_","rc2_","rc1_","rc6_","rc5_","rc4_","rc5_","rc1_","rc2_","rc2_","rc3_","rc1_","rc6_","rc1_","rc4_","rc0_","rc2_","rc2_","rc2_","rc1_","rc7_","rc1_","rc4_","rc0_","rc5_","rc6_","rc0_","rc2_","rc6_","rc4_","rc0_","rc0_","rc2_","rc0_","rc0_","rc0_","rc4_","rc4_","rc6_","rc5_","rc4_","rc5_","rc3_","rc0_","rc7_","rc2_","rc1_","rc6_","rc4_","rc6_","rc6_","rc4_","rc0_","rc0_","rc0_","rc1_","rc5_","rc0_","rc1_","rc3_","rc6_","rc4_","rc6_","rc5_","rc6_","rc5_","rc2_","rc7_","rc2_","rc4_","rc0_","rc6_","rc4_","rc1_","rc0_","rc6_","rc1_","rc5_","rc1_","rc5_","rc5_","rc5_","rc1_","rc1_","rc6_","rc2_","rc1_","rc5_","rc6_","rc7_","rc5_","rc0_","rc5_","rc3_","rc2_","rc7_","rc6_","rc0_","rc0_","rc4_","rc0_","rc3_","rc2_","rc6_","rc0_","rc5_","rc3_","rc3_","rc6_","rc1_","rc4_","rc4_","rc5_","rc7_","rc4_","rc0_","rc7_","rc0_"],
+["rc7_","rc3_","rc0_","rc3_","rc2_","rc0_","rc1_","rc0_","rc5_","rc5_","rc1_","rc3_","rc1_","rc6_","rc7_","rc2_","rc5_","rc4_","rc2_","rc3_","rc4_","rc0_","rc4_","rc0_","rc1_","rc3_","rc5_","rc4_","rc6_","rc7_","rc4_","rc3_","rc1_","rc3_","rc3_","rc4_","rc0_","rc3_","rc4_","rc2_","rc6_","rc7_","rc6_","rc4_","rc7_","rc5_","rc5_","rc2_","rc0_","rc1_","rc1_","rc1_","rc2_","rc4_","rc5_","rc0_","rc1_","rc2_","rc3_","rc4_","rc0_","rc0_","rc6_","rc1_","rc7_","rc6_","rc0_","rc2_","rc0_","rc2_","rc5_","rc2_","rc6_","rc5_","rc7_","rc4_","rc7_","rc2_","rc4_","rc0_","rc4_","rc4_","rc5_","rc0_","rc6_","rc7_","rc0_","rc2_","rc3_","rc2_","rc0_","rc6_","rc1_","rc3_","rc3_","rc2_","rc3_","rc3_","rc5_","rc4_","rc2_","rc4_","rc4_","rc0_","rc5_","rc0_","rc3_","rc3_","rc3_","rc4_","rc2_","rc7_","rc0_","rc5_","rc6_","rc7_","rc7_","rc1_","rc5_","rc6_","rc0_","rc2_","rc5_","rc3_","rc2_","rc6_","rc5_","rc0_","rc2_","rc2_","rc4_","rc3_","rc5_","rc1_","rc1_","rc4_","rc2_","rc7_","rc2_","rc0_","rc3_","rc3_","rc1_","rc6_"],
+["rc5_","rc5_","rc4_","rc0_","rc6_","rc3_","rc4_","rc4_","rc7_","rc2_","rc0_","rc3_","rc3_","rc3_","rc3_","rc1_","rc7_","rc4_","rc3_","rc7_","rc1_","rc1_","rc4_","rc6_","rc6_","rc3_","rc4_","rc5_","rc6_","rc0_","rc0_","rc4_","rc3_","rc2_","rc7_","rc1_","rc3_","rc4_","rc5_","rc3_","rc1_","rc3_","rc3_","rc6_","rc3_","rc2_","rc5_","rc7_","rc7_","rc0_","rc4_","rc0_","rc7_","rc5_","rc5_","rc5_","rc0_","rc3_","rc1_","rc0_","rc5_","rc2_","rc6_","rc2_","rc1_","rc6_","rc7_","rc3_","rc5_","rc5_","rc0_","rc4_","rc6_","rc4_","rc4_","rc3_","rc3_","rc1_","rc2_","rc0_","rc5_","rc6_","rc5_","rc5_","rc7_","rc4_","rc4_","rc2_","rc1_","rc7_","rc1_","rc2_","rc0_","rc1_","rc5_","rc0_","rc0_","rc1_","rc4_","rc6_","rc4_","rc5_","rc5_","rc0_","rc5_","rc5_","rc5_","rc4_","rc2_","rc2_","rc4_","rc4_","rc7_","rc7_","rc0_","rc0_","rc1_","rc7_","rc1_","rc5_","rc0_","rc7_","rc5_","rc3_","rc6_","rc5_","rc4_","rc6_","rc7_","rc2_","rc6_","rc2_","rc1_","rc4_","rc4_","rc5_","rc7_","rc7_","rc5_","rc7_","rc0_","rc4_","rc2_","rc5_"],
+["rc5_","rc2_","rc4_","rc7_","rc4_","rc5_","rc4_","rc6_","rc6_","rc4_","rc3_","rc2_","rc7_","rc7_","rc3_","rc3_","rc7_","rc1_","rc6_","rc7_","rc4_","rc2_","rc5_","rc3_","rc3_","rc0_","rc4_","rc5_","rc7_","rc0_","rc4_","rc2_","rc0_","rc7_","rc1_","rc3_","rc0_","rc6_","rc5_","rc5_","rc2_","rc5_","rc4_","rc1_","rc4_","rc6_","rc2_","rc1_","rc7_","rc6_","rc2_","rc4_","rc4_","rc0_","rc1_","rc4_","rc2_","rc3_","rc2_","rc6_","rc5_","rc4_","rc2_","rc2_","rc0_","rc7_","rc7_","rc4_","rc6_","rc2_","rc5_","rc1_","rc5_","rc2_","rc1_","rc6_","rc5_","rc3_","rc1_","rc6_","rc0_","rc2_","rc3_","rc2_","rc2_","rc5_","rc6_","rc6_","rc3_","rc5_","rc7_","rc2_","rc2_","rc3_","rc4_","rc6_","rc4_","rc1_","rc6_","rc1_","rc6_","rc2_","rc2_","rc4_","rc7_","rc4_","rc0_","rc2_","rc1_","rc5_","rc0_","rc3_","rc2_","rc4_","rc2_","rc1_","rc6_","rc1_","rc5_","rc3_","rc7_","rc0_","rc3_","rc0_","rc7_","rc2_","rc3_","rc6_","rc5_","rc5_","rc6_","rc4_","rc7_","rc5_","rc5_","rc4_","rc7_","rc2_","rc3_","rc5_","rc1_","rc4_","rc0_","rc0_"],
+["rc4_","rc4_","rc5_","rc1_","rc6_","rc5_","rc7_","rc1_","rc5_","rc3_","rc6_","rc2_","rc4_","rc3_","rc5_","rc2_","rc2_","rc3_","rc7_","rc3_","rc2_","rc3_","rc7_","rc2_","rc6_","rc4_","rc0_","rc7_","rc4_","rc0_","rc7_","rc4_","rc6_","rc3_","rc6_","rc2_","rc5_","rc0_","rc3_","rc0_","rc6_","rc7_","rc0_","rc6_","rc0_","rc5_","rc3_","rc1_","rc4_","rc4_","rc1_","rc7_","rc6_","rc5_","rc7_","rc5_","rc3_","rc3_","rc1_","rc7_","rc3_","rc2_","rc6_","rc1_","rc1_","rc0_","rc4_","rc3_","rc1_","rc2_","rc0_","rc2_","rc2_","rc2_","rc1_","rc5_","rc4_","rc0_","rc6_","rc4_","rc3_","rc7_","rc4_","rc0_","rc4_","rc2_","rc4_","rc7_","rc7_","rc6_","rc5_","rc7_","rc6_","rc1_","rc6_","rc5_","rc5_","rc3_","rc6_","rc6_","rc3_","rc4_","rc0_","rc5_","rc0_","rc6_","rc1_","rc6_","rc7_","rc5_","rc4_","rc4_","rc6_","rc4_","rc0_","rc6_","rc3_","rc2_","rc0_","rc6_","rc1_","rc5_","rc3_","rc5_","rc4_","rc5_","rc5_","rc1_","rc2_","rc5_","rc6_","rc1_","rc2_","rc5_","rc2_","rc3_","rc1_","rc3_","rc0_","rc3_","rc2_","rc3_","rc7_","rc7_"],
+["rc5_","rc4_","rc6_","rc0_","rc4_","rc5_","rc2_","rc4_","rc2_","rc1_","rc5_","rc2_","rc5_","rc7_","rc5_","rc5_","rc6_","rc4_","rc3_","rc5_","rc7_","rc5_","rc5_","rc2_","rc4_","rc0_","rc7_","rc2_","rc4_","rc2_","rc5_","rc5_","rc2_","rc6_","rc4_","rc7_","rc7_","rc4_","rc2_","rc7_","rc2_","rc1_","rc2_","rc5_","rc3_","rc6_","rc4_","rc1_","rc4_","rc3_","rc5_","rc1_","rc1_","rc5_","rc3_","rc3_","rc2_","rc5_","rc4_","rc4_","rc6_","rc3_","rc0_","rc0_","rc2_","rc3_","rc3_","rc4_","rc3_","rc7_","rc7_","rc7_","rc0_","rc5_","rc2_","rc0_","rc3_","rc2_","rc4_","rc4_","rc2_","rc7_","rc4_","rc7_","rc1_","rc3_","rc3_","rc5_","rc2_","rc2_","rc1_","rc1_","rc0_","rc5_","rc6_","rc6_","rc0_","rc1_","rc4_","rc5_","rc0_","rc4_","rc3_","rc6_","rc5_","rc5_","rc5_","rc1_","rc0_","rc4_","rc4_","rc7_","rc0_","rc2_","rc0_","rc5_","rc6_","rc2_","rc5_","rc2_","rc5_","rc0_","rc4_","rc1_","rc1_","rc0_","rc1_","rc1_","rc1_","rc2_","rc6_","rc2_","rc0_","rc5_","rc5_","rc2_","rc0_","rc2_","rc3_","rc2_","rc0_","rc3_","rc4_","rc3_"],
+["rc0_","rc3_","rc1_","rc4_","rc1_","rc7_","rc1_","rc0_","rc3_","rc6_","rc7_","rc4_","rc1_","rc5_","rc0_","rc7_","rc0_","rc5_","rc0_","rc5_","rc0_","rc1_","rc6_","rc5_","rc2_","rc3_","rc4_","rc1_","rc3_","rc7_","rc3_","rc5_","rc7_","rc2_","rc7_","rc4_","rc2_","rc4_","rc7_","rc0_","rc3_","rc4_","rc1_","rc1_","rc2_","rc2_","rc3_","rc0_","rc3_","rc3_","rc4_","rc4_","rc3_","rc0_","rc4_","rc5_","rc2_","rc1_","rc1_","rc7_","rc2_","rc0_","rc3_","rc0_","rc7_","rc0_","rc3_","rc5_","rc0_","rc0_","rc0_","rc2_","rc5_","rc2_","rc1_","rc2_","rc1_","rc2_","rc2_","rc6_","rc2_","rc3_","rc1_","rc0_","rc7_","rc3_","rc0_","rc3_","rc1_","rc2_","rc0_","rc3_","rc5_","rc7_","rc3_","rc3_","rc0_","rc4_","rc3_","rc7_","rc4_","rc3_","rc2_","rc6_","rc3_","rc1_","rc1_","rc5_","rc1_","rc2_","rc5_","rc0_","rc6_","rc5_","rc6_","rc1_","rc4_","rc1_","rc2_","rc6_","rc7_","rc0_","rc2_","rc7_","rc3_","rc3_","rc3_","rc5_","rc2_","rc7_","rc0_","rc1_","rc5_","rc6_","rc6_","rc4_","rc2_","rc0_","rc0_","rc2_","rc0_","rc4_","rc4_","rc5_"],
+["rc7_","rc2_","rc5_","rc7_","rc3_","rc3_","rc3_","rc0_","rc3_","rc3_","rc0_","rc1_","rc4_","rc5_","rc3_","rc7_","rc4_","rc7_","rc3_","rc5_","rc4_","rc0_","rc4_","rc3_","rc5_","rc0_","rc6_","rc3_","rc6_","rc7_","rc7_","rc6_","rc4_","rc1_","rc5_","rc2_","rc4_","rc7_","rc1_","rc7_","rc5_","rc1_","rc0_","rc2_","rc2_","rc4_","rc4_","rc1_","rc6_","rc6_","rc2_","rc1_","rc0_","rc2_","rc5_","rc4_","rc1_","rc0_","rc3_","rc7_","rc4_","rc3_","rc6_","rc3_","rc6_","rc2_","rc6_","rc1_","rc6_","rc7_","rc5_","rc4_","rc6_","rc4_","rc4_","rc2_","rc2_","rc0_","rc4_","rc3_","rc1_","rc4_","rc7_","rc5_","rc2_","rc2_","rc7_","rc7_","rc1_","rc0_","rc7_","rc5_","rc2_","rc1_","rc2_","rc4_","rc4_","rc5_","rc0_","rc6_","rc2_","rc3_","rc0_","rc7_","rc6_","rc4_","rc2_","rc1_","rc7_","rc1_","rc4_","rc5_","rc5_","rc7_","rc0_","rc3_","rc2_","rc2_","rc4_","rc4_","rc3_","rc0_","rc2_","rc6_","rc7_","rc0_","rc1_","rc0_","rc7_","rc3_","rc4_","rc7_","rc7_","rc1_","rc1_","rc0_","rc4_","rc7_","rc4_","rc6_","rc7_","rc0_","rc5_","rc6_"],
+["rc1_","rc1_","rc7_","rc2_","rc7_","rc1_","rc3_","rc3_","rc0_","rc1_","rc4_","rc2_","rc3_","rc1_","rc4_","rc0_","rc7_","rc3_","rc0_","rc5_","rc6_","rc3_","rc7_","rc6_","rc1_","rc7_","rc1_","rc2_","rc2_","rc4_","rc5_","rc0_","rc6_","rc2_","rc3_","rc1_","rc1_","rc0_","rc3_","rc3_","rc7_","rc2_","rc6_","rc1_","rc0_","rc2_","rc4_","rc5_","rc3_","rc6_","rc5_","rc7_","rc6_","rc1_","rc4_","rc3_","rc5_","rc3_","rc0_","rc6_","rc1_","rc5_","rc5_","rc1_","rc3_","rc0_","rc4_","rc1_","rc1_","rc6_","rc6_","rc5_","rc0_","rc4_","rc6_","rc2_","rc4_","rc5_","rc7_","rc5_","rc3_","rc2_","rc3_","rc7_","rc0_","rc1_","rc7_","rc5_","rc7_","rc4_","rc3_","rc0_","rc4_","rc4_","rc6_","rc1_","rc1_","rc5_","rc1_","rc2_","rc7_","rc3_","rc3_","rc2_","rc5_","rc5_","rc5_","rc7_","rc7_","rc2_","rc7_","rc0_","rc1_","rc1_","rc3_","rc3_","rc4_","rc5_","rc7_","rc5_","rc7_","rc1_","rc1_","rc0_","rc2_","rc0_","rc7_","rc2_","rc7_","rc0_","rc4_","rc4_","rc3_","rc0_","rc2_","rc7_","rc3_","rc7_","rc4_","rc6_","rc2_","rc7_","rc2_","rc0_"],
+["rc2_","rc3_","rc3_","rc4_","rc1_","rc4_","rc6_","rc3_","rc6_","rc2_","rc2_","rc0_","rc4_","rc1_","rc7_","rc3_","rc6_","rc2_","rc4_","rc6_","rc3_","rc4_","rc3_","rc7_","rc5_","rc2_","rc1_","rc0_","rc4_","rc6_","rc2_","rc3_","rc1_","rc6_","rc5_","rc2_","rc7_","rc7_","rc3_","rc6_","rc4_","rc0_","rc6_","rc6_","rc1_","rc0_","rc0_","rc3_","rc6_","rc1_","rc1_","rc1_","rc2_","rc7_","rc6_","rc1_","rc1_","rc4_","rc6_","rc5_","rc7_","rc6_","rc6_","rc3_","rc3_","rc4_","rc7_","rc5_","rc0_","rc5_","rc6_","rc0_","rc0_","rc1_","rc5_","rc4_","rc2_","rc4_","rc1_","rc3_","rc6_","rc0_","rc4_","rc6_","rc6_","rc1_","rc3_","rc4_","rc7_","rc7_","rc2_","rc4_","rc0_","rc0_","rc6_","rc6_","rc3_","rc5_","rc3_","rc5_","rc1_","rc6_","rc7_","rc7_","rc3_","rc7_","rc7_","rc0_","rc6_","rc5_","rc2_","rc3_","rc7_","rc4_","rc3_","rc3_","rc7_","rc3_","rc2_","rc1_","rc0_","rc3_","rc4_","rc7_","rc1_","rc3_","rc2_","rc4_","rc7_","rc7_","rc0_","rc1_","rc5_","rc2_","rc7_","rc4_","rc4_","rc2_","rc5_","rc2_","rc6_","rc3_","rc3_","rc3_"],
+["rc0_","rc7_","rc7_","rc0_","rc7_","rc4_","rc3_","rc0_","rc4_","rc6_","rc6_","rc4_","rc2_","rc7_","rc2_","rc7_","rc7_","rc4_","rc5_","rc2_","rc2_","rc2_","rc4_","rc7_","rc4_","rc1_","rc5_","rc4_","rc2_","rc7_","rc4_","rc2_","rc2_","rc0_","rc0_","rc7_","rc3_","rc5_","rc6_","rc1_","rc2_","rc2_","rc7_","rc4_","rc3_","rc5_","rc6_","rc6_","rc4_","rc3_","rc4_","rc0_","rc0_","rc5_","rc7_","rc7_","rc3_","rc4_","rc0_","rc5_","rc1_","rc0_","rc5_","rc2_","rc4_","rc7_","rc7_","rc6_","rc6_","rc4_","rc4_","rc3_","rc3_","rc6_","rc7_","rc7_","rc2_","rc3_","rc6_","rc0_","rc6_","rc5_","rc4_","rc3_","rc0_","rc3_","rc0_","rc6_","rc0_","rc3_","rc7_","rc4_","rc4_","rc7_","rc6_","rc1_","rc7_","rc5_","rc2_","rc7_","rc5_","rc3_","rc3_","rc0_","rc6_","rc3_","rc6_","rc5_","rc2_","rc3_","rc2_","rc6_","rc4_","rc1_","rc5_","rc3_","rc2_","rc5_","rc0_","rc2_","rc3_","rc7_","rc0_","rc2_","rc2_","rc2_","rc7_","rc0_","rc3_","rc1_","rc2_","rc0_","rc3_","rc2_","rc4_","rc6_","rc4_","rc0_","rc4_","rc5_","rc1_","rc5_","rc2_","rc0_"],
+["rc7_","rc7_","rc7_","rc7_","rc5_","rc2_","rc5_","rc4_","rc6_","rc7_","rc5_","rc7_","rc4_","rc4_","rc0_","rc7_","rc7_","rc3_","rc0_","rc2_","rc6_","rc7_","rc0_","rc6_","rc5_","rc5_","rc1_","rc0_","rc7_","rc0_","rc6_","rc6_","rc6_","rc7_","rc2_","rc0_","rc2_","rc2_","rc1_","rc4_","rc6_","rc3_","rc4_","rc3_","rc1_","rc2_","rc1_","rc5_","rc3_","rc4_","rc3_","rc4_","rc6_","rc4_","rc5_","rc0_","rc0_","rc2_","rc5_","rc6_","rc6_","rc4_","rc7_","rc7_","rc2_","rc2_","rc6_","rc6_","rc0_","rc6_","rc2_","rc2_","rc6_","rc4_","rc7_","rc5_","rc2_","rc6_","rc3_","rc4_","rc0_","rc3_","rc2_","rc0_","rc4_","rc1_","rc5_","rc4_","rc5_","rc0_","rc0_","rc7_","rc3_","rc1_","rc3_","rc4_","rc3_","rc7_","rc4_","rc1_","rc0_","rc5_","rc2_","rc6_","rc4_","rc1_","rc5_","rc6_","rc7_","rc7_","rc4_","rc2_","rc6_","rc0_","rc7_","rc4_","rc0_","rc4_","rc7_","rc1_","rc5_","rc6_","rc2_","rc3_","rc1_","rc0_","rc3_","rc6_","rc0_","rc7_","rc2_","rc1_","rc1_","rc7_","rc0_","rc7_","rc0_","rc2_","rc6_","rc7_","rc7_","rc5_","rc6_","rc0_"],
+["rc4_","rc4_","rc1_","rc1_","rc1_","rc7_","rc2_","rc0_","rc0_","rc4_","rc4_","rc2_","rc5_","rc0_","rc0_","rc3_","rc1_","rc0_","rc1_","rc5_","rc4_","rc5_","rc4_","rc6_","rc3_","rc7_","rc1_","rc5_","rc2_","rc1_","rc7_","rc6_","rc3_","rc6_","rc0_","rc7_","rc0_","rc1_","rc0_","rc1_","rc5_","rc3_","rc4_","rc3_","rc2_","rc1_","rc0_","rc3_","rc0_","rc4_","rc2_","rc7_","rc1_","rc6_","rc5_","rc3_","rc4_","rc1_","rc0_","rc3_","rc1_","rc2_","rc1_","rc4_","rc3_","rc6_","rc4_","rc6_","rc4_","rc3_","rc0_","rc4_","rc5_","rc2_","rc3_","rc7_","rc6_","rc4_","rc5_","rc0_","rc2_","rc3_","rc3_","rc5_","rc7_","rc2_","rc5_","rc6_","rc5_","rc7_","rc2_","rc0_","rc4_","rc0_","rc2_","rc1_","rc3_","rc4_","rc5_","rc5_","rc6_","rc4_","rc2_","rc1_","rc0_","rc2_","rc2_","rc6_","rc1_","rc0_","rc6_","rc0_","rc2_","rc3_","rc6_","rc0_","rc7_","rc1_","rc3_","rc6_","rc3_","rc2_","rc7_","rc3_","rc2_","rc4_","rc4_","rc6_","rc3_","rc1_","rc3_","rc6_","rc5_","rc4_","rc6_","rc7_","rc5_","rc1_","rc7_","rc0_","rc4_","rc5_","rc3_","rc5_"],
+["rc5_","rc6_","rc1_","rc0_","rc0_","rc4_","rc7_","rc5_","rc0_","rc1_","rc7_","rc5_","rc4_","rc4_","rc6_","rc4_","rc4_","rc4_","rc6_","rc7_","rc2_","rc3_","rc4_","rc0_","rc4_","rc1_","rc4_","rc5_","rc7_","rc3_","rc3_","rc5_","rc6_","rc4_","rc6_","rc4_","rc3_","rc2_","rc1_","rc1_","rc4_","rc4_","rc3_","rc6_","rc2_","rc3_","rc0_","rc1_","rc6_","rc6_","rc6_","rc1_","rc5_","rc2_","rc4_","rc2_","rc6_","rc1_","rc0_","rc4_","rc1_","rc3_","rc0_","rc0_","rc3_","rc3_","rc3_","rc6_","rc7_","rc4_","rc2_","rc3_","rc7_","rc3_","rc1_","rc6_","rc3_","rc6_","rc2_","rc5_","rc0_","rc5_","rc3_","rc4_","rc5_","rc0_","rc6_","rc6_","rc3_","rc2_","rc3_","rc6_","rc3_","rc4_","rc1_","rc0_","rc4_","rc5_","rc2_","rc4_","rc5_","rc1_","rc0_","rc3_","rc0_","rc7_","rc2_","rc5_","rc7_","rc7_","rc4_","rc2_","rc3_","rc3_","rc6_","rc7_","rc3_","rc6_","rc3_","rc4_","rc2_","rc3_","rc4_","rc3_","rc4_","rc7_","rc6_","rc4_","rc2_","rc1_","rc2_","rc7_","rc4_","rc1_","rc4_","rc1_","rc7_","rc7_","rc6_","rc2_","rc7_","rc5_","rc6_","rc6_"],
+["rc7_","rc0_","rc5_","rc4_","rc6_","rc3_","rc1_","rc3_","rc4_","rc4_","rc5_","rc3_","rc5_","rc3_","rc7_","rc3_","rc5_","rc0_","rc3_","rc7_","rc5_","rc4_","rc6_","rc4_","rc5_","rc3_","rc6_","rc7_","rc3_","rc1_","rc0_","rc2_","rc3_","rc3_","rc1_","rc1_","rc7_","rc7_","rc1_","rc5_","rc0_","rc6_","rc5_","rc6_","rc6_","rc0_","rc4_","rc6_","rc4_","rc1_","rc5_","rc3_","rc0_","rc3_","rc7_","rc5_","rc2_","rc4_","rc0_","rc2_","rc2_","rc1_","rc2_","rc6_","rc7_","rc4_","rc3_","rc7_","rc5_","rc2_","rc4_","rc0_","rc7_","rc7_","rc4_","rc3_","rc6_","rc6_","rc6_","rc5_","rc0_","rc4_","rc0_","rc5_","rc4_","rc5_","rc5_","rc5_","rc5_","rc1_","rc6_","rc4_","rc5_","rc0_","rc4_","rc2_","rc4_","rc3_","rc1_","rc6_","rc1_","rc5_","rc0_","rc5_","rc0_","rc2_","rc2_","rc4_","rc5_","rc6_","rc3_","rc0_","rc0_","rc1_","rc4_","rc3_","rc2_","rc2_","rc2_","rc2_","rc7_","rc2_","rc6_","rc4_","rc3_","rc3_","rc7_","rc6_","rc2_","rc0_","rc5_","rc5_","rc3_","rc7_","rc7_","rc4_","rc4_","rc4_","rc7_","rc7_","rc4_","rc7_","rc4_","rc6_"],
+["rc5_","rc1_","rc1_","rc6_","rc1_","rc3_","rc4_","rc4_","rc7_","rc0_","rc2_","rc4_","rc5_","rc4_","rc1_","rc1_","rc0_","rc4_","rc6_","rc6_","rc2_","rc0_","rc7_","rc4_","rc3_","rc7_","rc4_","rc5_","rc3_","rc1_","rc2_","rc0_","rc7_","rc3_","rc7_","rc6_","rc2_","rc7_","rc5_","rc5_","rc6_","rc2_","rc1_","rc2_","rc3_","rc2_","rc3_","rc5_","rc7_","rc7_","rc3_","rc7_","rc6_","rc0_","rc2_","rc7_","rc4_","rc2_","rc7_","rc5_","rc1_","rc5_","rc3_","rc7_","rc5_","rc0_","rc7_","rc3_","rc4_","rc6_","rc4_","rc3_","rc3_","rc0_","rc3_","rc7_","rc4_","rc5_","rc6_","rc0_","rc6_","rc7_","rc6_","rc1_","rc1_","rc0_","rc7_","rc3_","rc0_","rc5_","rc1_","rc1_","rc7_","rc2_","rc1_","rc1_","rc7_","rc6_","rc7_","rc4_","rc0_","rc1_","rc0_","rc7_","rc7_","rc3_","rc7_","rc3_","rc1_","rc6_","rc0_","rc2_","rc6_","rc6_","rc6_","rc4_","rc0_","rc0_","rc6_","rc1_","rc6_","rc1_","rc2_","rc7_","rc5_","rc0_","rc2_","rc6_","rc6_","rc7_","rc0_","rc2_","rc6_","rc6_","rc3_","rc1_","rc2_","rc1_","rc7_","rc6_","rc1_","rc4_","rc3_","rc5_"],
+["rc6_","rc3_","rc3_","rc0_","rc6_","rc6_","rc7_","rc1_","rc7_","rc5_","rc3_","rc1_","rc2_","rc0_","rc0_","rc0_","rc2_","rc3_","rc3_","rc6_","rc5_","rc0_","rc4_","rc1_","rc3_","rc5_","rc2_","rc0_","rc4_","rc7_","rc6_","rc0_","rc7_","rc7_","rc5_","rc4_","rc1_","rc4_","rc1_","rc3_","rc2_","rc1_","rc2_","rc5_","rc6_","rc1_","rc1_","rc5_","rc2_","rc0_","rc6_","rc5_","rc6_","rc4_","rc3_","rc7_","rc2_","rc4_","rc0_","rc0_","rc4_","rc0_","rc0_","rc2_","rc1_","rc1_","rc4_","rc2_","rc1_","rc1_","rc6_","rc6_","rc0_","rc6_","rc1_","rc3_","rc2_","rc3_","rc7_","rc7_","rc7_","rc0_","rc3_","rc2_","rc0_","rc4_","rc0_","rc2_","rc1_","rc0_","rc1_","rc7_","rc7_","rc5_","rc3_","rc4_","rc3_","rc1_","rc0_","rc0_","rc7_","rc6_","rc5_","rc4_","rc1_","rc3_","rc7_","rc5_","rc6_","rc7_","rc1_","rc4_","rc1_","rc3_","rc1_","rc4_","rc4_","rc7_","rc3_","rc3_","rc5_","rc0_","rc6_","rc5_","rc5_","rc1_","rc6_","rc6_","rc6_","rc7_","rc1_","rc7_","rc3_","rc1_","rc7_","rc3_","rc4_","rc0_","rc3_","rc1_","rc1_","rc4_","rc7_","rc4_"],
+["rc7_","rc7_","rc7_","rc2_","rc1_","rc6_","rc4_","rc2_","rc1_","rc4_","rc5_","rc2_","rc7_","rc1_","rc1_","rc0_","rc1_","rc4_","rc0_","rc7_","rc4_","rc5_","rc2_","rc4_","rc1_","rc6_","rc7_","rc1_","rc4_","rc2_","rc1_","rc1_","rc1_","rc6_","rc7_","rc5_","rc0_","rc7_","rc4_","rc7_","rc3_","rc5_","rc7_","rc6_","rc5_","rc7_","rc4_","rc1_","rc5_","rc7_","rc3_","rc7_","rc2_","rc7_","rc7_","rc6_","rc2_","rc4_","rc2_","rc3_","rc6_","rc1_","rc7_","rc2_","rc0_","rc7_","rc0_","rc5_","rc0_","rc4_","rc1_","rc2_","rc3_","rc2_","rc4_","rc0_","rc6_","rc2_","rc7_","rc3_","rc1_","rc0_","rc3_","rc1_","rc7_","rc1_","rc6_","rc3_","rc4_","rc2_","rc4_","rc0_","rc0_","rc2_","rc1_","rc6_","rc4_","rc3_","rc2_","rc2_","rc2_","rc5_","rc4_","rc2_","rc2_","rc4_","rc5_","rc2_","rc2_","rc3_","rc2_","rc4_","rc6_","rc0_","rc1_","rc3_","rc1_","rc2_","rc0_","rc1_","rc2_","rc0_","rc5_","rc7_","rc2_","rc4_","rc7_","rc6_","rc4_","rc1_","rc5_","rc4_","rc6_","rc1_","rc6_","rc1_","rc0_","rc1_","rc0_","rc2_","rc3_","rc0_","rc5_","rc5_"],
+["rc4_","rc6_","rc3_","rc6_","rc0_","rc2_","rc3_","rc2_","rc2_","rc7_","rc5_","rc2_","rc3_","rc0_","rc1_","rc2_","rc1_","rc1_","rc1_","rc2_","rc3_","rc0_","rc5_","rc5_","rc4_","rc3_","rc7_","rc1_","rc6_","rc3_","rc0_","rc6_","rc2_","rc2_","rc3_","rc2_","rc5_","rc2_","rc1_","rc4_","rc4_","rc6_","rc4_","rc7_","rc3_","rc5_","rc0_","rc2_","rc2_","rc3_","rc6_","rc6_","rc2_","rc2_","rc3_","rc7_","rc7_","rc2_","rc0_","rc6_","rc6_","rc4_","rc4_","rc6_","rc0_","rc5_","rc7_","rc6_","rc7_","rc1_","rc0_","rc7_","rc1_","rc6_","rc2_","rc7_","rc3_","rc3_","rc2_","rc5_","rc0_","rc0_","rc4_","rc6_","rc2_","rc7_","rc6_","rc6_","rc0_","rc4_","rc5_","rc3_","rc1_","rc2_","rc7_","rc7_","rc7_","rc6_","rc1_","rc4_","rc7_","rc7_","rc2_","rc5_","rc1_","rc6_","rc7_","rc2_","rc3_","rc2_","rc0_","rc4_","rc3_","rc7_","rc3_","rc2_","rc4_","rc0_","rc0_","rc4_","rc0_","rc3_","rc5_","rc6_","rc7_","rc5_","rc2_","rc7_","rc7_","rc5_","rc0_","rc2_","rc5_","rc5_","rc5_","rc4_","rc3_","rc6_","rc3_","rc0_","rc2_","rc3_","rc3_","rc0_"],
+["rc2_","rc1_","rc3_","rc4_","rc0_","rc5_","rc0_","rc7_","rc6_","rc6_","rc0_","rc0_","rc1_","rc5_","rc6_","rc7_","rc7_","rc3_","rc3_","rc1_","rc0_","rc2_","rc3_","rc6_","rc0_","rc6_","rc7_","rc0_","rc1_","rc5_","rc1_","rc7_","rc5_","rc4_","rc5_","rc3_","rc4_","rc4_","rc5_","rc1_","rc3_","rc6_","rc5_","rc1_","rc7_","rc3_","rc1_","rc7_","rc0_","rc7_","rc4_","rc1_","rc1_","rc6_","rc3_","rc1_","rc7_","rc7_","rc1_","rc4_","rc0_","rc0_","rc4_","rc1_","rc5_","rc2_","rc7_","rc6_","rc3_","rc7_","rc1_","rc0_","rc7_","rc2_","rc6_","rc1_","rc0_","rc6_","rc5_","rc7_","rc2_","rc1_","rc2_","rc2_","rc7_","rc1_","rc5_","rc6_","rc1_","rc0_","rc2_","rc2_","rc6_","rc5_","rc2_","rc0_","rc2_","rc3_","rc3_","rc6_","rc3_","rc5_","rc3_","rc4_","rc1_","rc2_","rc2_","rc0_","rc5_","rc6_","rc1_","rc6_","rc4_","rc1_","rc5_","rc4_","rc3_","rc4_","rc1_","rc4_","rc5_","rc1_","rc3_","rc3_","rc3_","rc2_","rc5_","rc2_","rc3_","rc6_","rc7_","rc3_","rc5_","rc7_","rc3_","rc7_","rc2_","rc6_","rc1_","rc5_","rc5_","rc3_","rc4_","rc5_"],
+["rc6_","rc0_","rc5_","rc6_","rc5_","rc6_","rc7_","rc5_","rc4_","rc3_","rc3_","rc7_","rc0_","rc2_","rc4_","rc1_","rc1_","rc2_","rc5_","rc5_","rc0_","rc4_","rc1_","rc7_","rc1_","rc7_","rc3_","rc1_","rc1_","rc6_","rc0_","rc5_","rc1_","rc5_","rc2_","rc1_","rc4_","rc0_","rc7_","rc7_","rc5_","rc5_","rc1_","rc5_","rc5_","rc2_","rc7_","rc3_","rc4_","rc2_","rc3_","rc3_","rc5_","rc4_","rc5_","rc6_","rc7_","rc4_","rc1_","rc4_","rc0_","rc7_","rc4_","rc4_","rc5_","rc1_","rc5_","rc5_","rc0_","rc1_","rc1_","rc3_","rc2_","rc7_","rc7_","rc7_","rc1_","rc4_","rc6_","rc0_","rc3_","rc3_","rc3_","rc7_","rc3_","rc7_","rc7_","rc2_","rc3_","rc6_","rc1_","rc6_","rc3_","rc4_","rc0_","rc2_","rc1_","rc3_","rc4_","rc2_","rc2_","rc1_","rc5_","rc1_","rc0_","rc2_","rc4_","rc3_","rc5_","rc7_","rc1_","rc2_","rc6_","rc7_","rc4_","rc7_","rc3_","rc6_","rc0_","rc4_","rc6_","rc4_","rc4_","rc7_","rc2_","rc7_","rc4_","rc1_","rc6_","rc3_","rc0_","rc7_","rc2_","rc0_","rc3_","rc1_","rc1_","rc5_","rc7_","rc2_","rc0_","rc4_","rc0_","rc0_"],
+["rc6_","rc5_","rc6_","rc4_","rc5_","rc0_","rc6_","rc3_","rc7_","rc6_","rc2_","rc6_","rc4_","rc7_","rc0_","rc7_","rc4_","rc1_","rc1_","rc6_","rc7_","rc7_","rc4_","rc3_","rc5_","rc0_","rc2_","rc4_","rc3_","rc2_","rc3_","rc1_","rc3_","rc6_","rc1_","rc6_","rc0_","rc6_","rc2_","rc1_","rc0_","rc4_","rc4_","rc4_","rc2_","rc5_","rc4_","rc5_","rc1_","rc6_","rc0_","rc5_","rc2_","rc5_","rc6_","rc6_","rc3_","rc3_","rc4_","rc1_","rc5_","rc1_","rc2_","rc6_","rc4_","rc1_","rc4_","rc4_","rc4_","rc6_","rc5_","rc4_","rc6_","rc7_","rc0_","rc2_","rc3_","rc7_","rc0_","rc3_","rc0_","rc1_","rc3_","rc5_","rc3_","rc2_","rc3_","rc3_","rc4_","rc7_","rc5_","rc0_","rc7_","rc1_","rc5_","rc7_","rc2_","rc6_","rc2_","rc0_","rc2_","rc2_","rc5_","rc5_","rc3_","rc6_","rc0_","rc5_","rc0_","rc7_","rc5_","rc1_","rc7_","rc2_","rc4_","rc6_","rc0_","rc7_","rc1_","rc2_","rc0_","rc3_","rc5_","rc2_","rc1_","rc3_","rc4_","rc4_","rc4_","rc6_","rc0_","rc0_","rc2_","rc2_","rc4_","rc4_","rc7_","rc1_","rc2_","rc0_","rc0_","rc5_","rc1_","rc7_"],
+["rc7_","rc2_","rc2_","rc0_","rc4_","rc3_","rc2_","rc3_","rc6_","rc0_","rc4_","rc0_","rc2_","rc6_","rc0_","rc4_","rc3_","rc7_","rc7_","rc5_","rc3_","rc4_","rc0_","rc1_","rc1_","rc1_","rc0_","rc2_","rc4_","rc0_","rc5_","rc4_","rc7_","rc0_","rc4_","rc2_","rc5_","rc6_","rc4_","rc6_","rc6_","rc4_","rc3_","rc0_","rc3_","rc2_","rc7_","rc0_","rc7_","rc3_","rc7_","rc7_","rc6_","rc2_","rc3_","rc3_","rc2_","rc4_","rc1_","rc2_","rc4_","rc0_","rc2_","rc2_","rc0_","rc4_","rc4_","rc5_","rc4_","rc1_","rc1_","rc2_","rc2_","rc2_","rc0_","rc2_","rc3_","rc0_","rc2_","rc1_","rc7_","rc2_","rc0_","rc6_","rc3_","rc3_","rc4_","rc4_","rc2_","rc5_","rc5_","rc1_","rc7_","rc5_","rc6_","rc7_","rc1_","rc6_","rc1_","rc1_","rc0_","rc3_","rc0_","rc1_","rc7_","rc7_","rc4_","rc0_","rc3_","rc7_","rc2_","rc5_","rc3_","rc3_","rc3_","rc1_","rc1_","rc0_","rc2_","rc2_","rc0_","rc1_","rc3_","rc7_","rc5_","rc0_","rc3_","rc3_","rc3_","rc7_","rc3_","rc6_","rc2_","rc4_","rc0_","rc1_","rc0_","rc5_","rc0_","rc0_","rc2_","rc7_","rc5_","rc4_"],
+["rc4_","rc6_","rc6_","rc2_","rc0_","rc0_","rc7_","rc6_","rc4_","rc2_","rc5_","rc4_","rc7_","rc0_","rc7_","rc0_","rc5_","rc6_","rc2_","rc4_","rc1_","rc5_","rc3_","rc2_","rc2_","rc3_","rc2_","rc3_","rc1_","rc1_","rc5_","rc0_","rc2_","rc3_","rc2_","rc7_","rc1_","rc3_","rc2_","rc0_","rc7_","rc7_","rc2_","rc7_","rc5_","rc5_","rc4_","rc5_","rc0_","rc4_","rc6_","rc3_","rc6_","rc4_","rc0_","rc6_","rc0_","rc1_","rc3_","rc1_","rc0_","rc4_","rc1_","rc7_","rc4_","rc3_","rc0_","rc1_","rc4_","rc2_","rc3_","rc7_","rc1_","rc1_","rc2_","rc2_","rc6_","rc7_","rc1_","rc1_","rc4_","rc0_","rc7_","rc2_","rc0_","rc4_","rc7_","rc4_","rc0_","rc0_","rc4_","rc2_","rc6_","rc0_","rc1_","rc3_","rc3_","rc5_","rc6_","rc7_","rc0_","rc3_","rc2_","rc5_","rc1_","rc7_","rc5_","rc3_","rc3_","rc7_","rc5_","rc5_","rc0_","rc2_","rc5_","rc2_","rc0_","rc2_","rc0_","rc3_","rc2_","rc7_","rc4_","rc6_","rc4_","rc6_","rc4_","rc2_","rc7_","rc1_","rc6_","rc3_","rc6_","rc1_","rc7_","rc0_","rc0_","rc1_","rc4_","rc3_","rc4_","rc5_","rc2_","rc1_"],
+["rc5_","rc2_","rc0_","rc3_","rc6_","rc0_","rc3_","rc4_","rc7_","rc6_","rc2_","rc4_","rc1_","rc5_","rc4_","rc4_","rc7_","rc7_","rc7_","rc3_","rc5_","rc1_","rc2_","rc1_","rc5_","rc7_","rc5_","rc2_","rc0_","rc7_","rc7_","rc5_","rc2_","rc1_","rc0_","rc5_","rc1_","rc5_","rc1_","rc7_","rc7_","rc5_","rc0_","rc5_","rc6_","rc5_","rc0_","rc3_","rc3_","rc0_","rc1_","rc1_","rc6_","rc5_","rc3_","rc0_","rc1_","rc2_","rc1_","rc0_","rc7_","rc7_","rc4_","rc0_","rc0_","rc6_","rc5_","rc0_","rc2_","rc1_","rc0_","rc4_","rc1_","rc5_","rc5_","rc1_","rc2_","rc6_","rc0_","rc6_","rc4_","rc4_","rc3_","rc3_","rc1_","rc4_","rc3_","rc4_","rc4_","rc1_","rc0_","rc4_","rc2_","rc4_","rc1_","rc4_","rc6_","rc2_","rc0_","rc3_","rc0_","rc5_","rc1_","rc2_","rc6_","rc6_","rc1_","rc0_","rc6_","rc1_","rc4_","rc4_","rc2_","rc1_","rc7_","rc1_","rc5_","rc6_","rc0_","rc7_","rc5_","rc4_","rc3_","rc7_","rc1_","rc6_","rc6_","rc7_","rc5_","rc3_","rc7_","rc7_","rc4_","rc0_","rc5_","rc3_","rc5_","rc6_","rc4_","rc2_","rc1_","rc5_","rc4_","rc6_"],
+["rc4_","rc1_","rc4_","rc5_","rc2_","rc4_","rc3_","rc7_","rc4_","rc4_","rc0_","rc1_","rc3_","rc6_","rc3_","rc2_","rc4_","rc3_","rc4_","rc4_","rc5_","rc2_","rc2_","rc5_","rc7_","rc7_","rc6_","rc7_","rc4_","rc3_","rc1_","rc4_","rc3_","rc3_","rc2_","rc6_","rc1_","rc5_","rc5_","rc5_","rc3_","rc0_","rc1_","rc2_","rc1_","rc3_","rc1_","rc5_","rc5_","rc2_","rc5_","rc2_","rc4_","rc4_","rc1_","rc1_","rc4_","rc0_","rc7_","rc6_","rc7_","rc1_","rc1_","rc6_","rc6_","rc0_","rc1_","rc3_","rc2_","rc1_","rc4_","rc1_","rc7_","rc0_","rc4_","rc2_","rc3_","rc6_","rc6_","rc7_","rc5_","rc6_","rc4_","rc1_","rc1_","rc5_","rc3_","rc7_","rc3_","rc2_","rc7_","rc0_","rc1_","rc1_","rc5_","rc3_","rc6_","rc6_","rc2_","rc5_","rc4_","rc1_","rc2_","rc3_","rc3_","rc5_","rc3_","rc1_","rc7_","rc5_","rc3_","rc2_","rc6_","rc1_","rc7_","rc0_","rc3_","rc5_","rc7_","rc7_","rc4_","rc3_","rc6_","rc5_","rc3_","rc3_","rc6_","rc4_","rc3_","rc7_","rc3_","rc4_","rc0_","rc4_","rc6_","rc3_","rc4_","rc6_","rc5_","rc6_","rc0_","rc3_","rc1_","rc4_"],
+["rc0_","rc2_","rc0_","rc0_","rc2_","rc5_","rc4_","rc0_","rc0_","rc5_","rc4_","rc5_","rc4_","rc6_","rc2_","rc2_","rc4_","rc3_","rc5_","rc7_","rc6_","rc2_","rc7_","rc0_","rc5_","rc3_","rc2_","rc2_","rc4_","rc5_","rc6_","rc6_","rc2_","rc2_","rc6_","rc2_","rc7_","rc4_","rc4_","rc3_","rc7_","rc0_","rc2_","rc7_","rc5_","rc2_","rc3_","rc3_","rc1_","rc1_","rc0_","rc0_","rc5_","rc4_","rc7_","rc3_","rc4_","rc5_","rc2_","rc5_","rc4_","rc5_","rc4_","rc0_","rc5_","rc0_","rc1_","rc4_","rc2_","rc2_","rc6_","rc0_","rc0_","rc2_","rc6_","rc5_","rc5_","rc7_","rc7_","rc7_","rc3_","rc1_","rc5_","rc5_","rc5_","rc1_","rc5_","rc4_","rc1_","rc2_","rc4_","rc7_","rc7_","rc1_","rc1_","rc2_","rc1_","rc4_","rc1_","rc6_","rc3_","rc0_","rc2_","rc7_","rc4_","rc5_","rc2_","rc5_","rc5_","rc5_","rc0_","rc0_","rc2_","rc3_","rc2_","rc7_","rc7_","rc1_","rc1_","rc3_","rc5_","rc5_","rc2_","rc7_","rc6_","rc4_","rc7_","rc3_","rc5_","rc7_","rc6_","rc2_","rc0_","rc5_","rc0_","rc0_","rc2_","rc1_","rc4_","rc0_","rc5_","rc5_","rc4_","rc4_"],
+["rc5_","rc0_","rc1_","rc6_","rc3_","rc4_","rc3_","rc7_","rc0_","rc3_","rc3_","rc7_","rc0_","rc3_","rc5_","rc4_","rc1_","rc7_","rc0_","rc6_","rc4_","rc1_","rc0_","rc2_","rc3_","rc4_","rc6_","rc6_","rc4_","rc7_","rc5_","rc5_","rc5_","rc7_","rc0_","rc2_","rc0_","rc3_","rc3_","rc2_","rc1_","rc6_","rc0_","rc5_","rc6_","rc0_","rc3_","rc6_","rc6_","rc6_","rc7_","rc3_","rc5_","rc4_","rc2_","rc7_","rc7_","rc0_","rc6_","rc6_","rc2_","rc1_","rc2_","rc1_","rc2_","rc0_","rc1_","rc3_","rc7_","rc5_","rc1_","rc2_","rc1_","rc5_","rc7_","rc2_","rc7_","rc2_","rc0_","rc7_","rc4_","rc4_","rc3_","rc1_","rc3_","rc7_","rc6_","rc5_","rc5_","rc5_","rc6_","rc2_","rc1_","rc5_","rc3_","rc0_","rc3_","rc4_","rc3_","rc0_","rc7_","rc3_","rc5_","rc0_","rc0_","rc0_","rc1_","rc6_","rc4_","rc2_","rc6_","rc7_","rc2_","rc0_","rc4_","rc0_","rc0_","rc1_","rc4_","rc5_","rc6_","rc1_","rc5_","rc0_","rc6_","rc2_","rc0_","rc4_","rc0_","rc1_","rc5_","rc2_","rc1_","rc3_","rc7_","rc4_","rc4_","rc0_","rc6_","rc0_","rc5_","rc7_","rc4_","rc0_"],
+["rc1_","rc2_","rc3_","rc0_","rc1_","rc3_","rc4_","rc7_","rc1_","rc6_","rc2_","rc1_","rc4_","rc1_","rc1_","rc4_","rc2_","rc2_","rc1_","rc1_","rc5_","rc0_","rc0_","rc6_","rc0_","rc4_","rc7_","rc2_","rc1_","rc1_","rc2_","rc0_","rc1_","rc2_","rc6_","rc0_","rc1_","rc3_","rc7_","rc2_","rc7_","rc3_","rc7_","rc5_","rc1_","rc1_","rc6_","rc7_","rc1_","rc4_","rc6_","rc5_","rc2_","rc7_","rc6_","rc5_","rc2_","rc5_","rc2_","rc2_","rc0_","rc0_","rc0_","rc0_","rc0_","rc1_","rc6_","rc1_","rc5_","rc3_","rc3_","rc0_","rc7_","rc1_","rc3_","rc3_","rc5_","rc2_","rc7_","rc6_","rc4_","rc1_","rc4_","rc6_","rc0_","rc2_","rc2_","rc3_","rc3_","rc1_","rc0_","rc1_","rc4_","rc5_","rc7_","rc0_","rc1_","rc6_","rc4_","rc3_","rc0_","rc3_","rc1_","rc7_","rc2_","rc7_","rc6_","rc5_","rc1_","rc4_","rc4_","rc1_","rc4_","rc0_","rc3_","rc3_","rc1_","rc0_","rc5_","rc6_","rc2_","rc2_","rc2_","rc7_","rc3_","rc7_","rc5_","rc0_","rc2_","rc1_","rc6_","rc6_","rc0_","rc1_","rc2_","rc0_","rc7_","rc5_","rc0_","rc1_","rc5_","rc0_","rc6_","rc0_"],
+["rc0_","rc2_","rc3_","rc5_","rc2_","rc1_","rc5_","rc7_","rc7_","rc0_","rc7_","rc4_","rc5_","rc7_","rc3_","rc0_","rc4_","rc3_","rc6_","rc2_","rc5_","rc7_","rc4_","rc3_","rc7_","rc3_","rc1_","rc0_","rc0_","rc5_","rc3_","rc2_","rc1_","rc5_","rc4_","rc4_","rc6_","rc6_","rc4_","rc5_","rc4_","rc1_","rc6_","rc7_","rc3_","rc3_","rc2_","rc7_","rc6_","rc3_","rc3_","rc6_","rc0_","rc5_","rc1_","rc7_","rc2_","rc2_","rc2_","rc2_","rc3_","rc3_","rc4_","rc0_","rc7_","rc4_","rc7_","rc0_","rc2_","rc6_","rc1_","rc2_","rc7_","rc7_","rc1_","rc2_","rc4_","rc5_","rc0_","rc7_","rc1_","rc1_","rc5_","rc4_","rc1_","rc1_","rc0_","rc6_","rc7_","rc1_","rc1_","rc7_","rc5_","rc3_","rc2_","rc3_","rc1_","rc4_","rc2_","rc1_","rc1_","rc1_","rc3_","rc4_","rc0_","rc1_","rc7_","rc3_","rc1_","rc5_","rc6_","rc6_","rc4_","rc6_","rc3_","rc2_","rc7_","rc5_","rc0_","rc6_","rc7_","rc1_","rc7_","rc7_","rc7_","rc4_","rc3_","rc1_","rc7_","rc7_","rc6_","rc7_","rc1_","rc7_","rc4_","rc4_","rc0_","rc0_","rc0_","rc3_","rc2_","rc1_","rc5_","rc4_"],
+["rc0_","rc0_","rc7_","rc1_","rc3_","rc0_","rc3_","rc0_","rc1_","rc0_","rc5_","rc1_","rc0_","rc6_","rc1_","rc2_","rc2_","rc4_","rc4_","rc1_","rc2_","rc1_","rc3_","rc2_","rc7_","rc3_","rc3_","rc2_","rc6_","rc3_","rc4_","rc3_","rc4_","rc2_","rc0_","rc0_","rc4_","rc3_","rc0_","rc4_","rc6_","rc0_","rc1_","rc6_","rc1_","rc2_","rc2_","rc0_","rc2_","rc3_","rc2_","rc0_","rc5_","rc6_","rc0_","rc6_","rc4_","rc2_","rc2_","rc7_","rc6_","rc3_","rc2_","rc2_","rc1_","rc1_","rc6_","rc1_","rc3_","rc5_","rc7_","rc2_","rc5_","rc1_","rc5_","rc6_","rc2_","rc7_","rc0_","rc1_","rc6_","rc5_","rc1_","rc4_","rc2_","rc7_","rc3_","rc0_","rc7_","rc5_","rc4_","rc4_","rc1_","rc7_","rc1_","rc0_","rc7_","rc7_","rc1_","rc2_","rc7_","rc6_","rc0_","rc1_","rc7_","rc1_","rc7_","rc1_","rc2_","rc5_","rc2_","rc7_","rc7_","rc1_","rc2_","rc5_","rc0_","rc3_","rc4_","rc7_","rc2_","rc5_","rc2_","rc7_","rc0_","rc1_","rc0_","rc6_","rc5_","rc3_","rc1_","rc4_","rc2_","rc6_","rc3_","rc3_","rc4_","rc2_","rc1_","rc7_","rc1_","rc5_","rc0_","rc0_"],
+["rc5_","rc7_","rc4_","rc2_","rc0_","rc2_","rc3_","rc4_","rc2_","rc1_","rc2_","rc1_","rc2_","rc0_","rc7_","rc4_","rc4_","rc5_","rc6_","rc7_","rc1_","rc6_","rc0_","rc6_","rc3_","rc4_","rc1_","rc7_","rc1_","rc6_","rc2_","rc4_","rc7_","rc0_","rc6_","rc5_","rc1_","rc4_","rc0_","rc7_","rc2_","rc2_","rc5_","rc2_","rc0_","rc5_","rc6_","rc2_","rc3_","rc6_","rc1_","rc3_","rc6_","rc5_","rc7_","rc3_","rc4_","rc5_","rc1_","rc2_","rc7_","rc0_","rc7_","rc5_","rc5_","rc2_","rc2_","rc4_","rc4_","rc2_","rc3_","rc0_","rc0_","rc7_","rc3_","rc1_","rc2_","rc7_","rc4_","rc7_","rc3_","rc5_","rc0_","rc0_","rc1_","rc4_","rc1_","rc1_","rc1_","rc7_","rc0_","rc0_","rc6_","rc3_","rc2_","rc2_","rc0_","rc0_","rc7_","rc0_","rc1_","rc3_","rc5_","rc7_","rc4_","rc0_","rc5_","rc0_","rc7_","rc6_","rc4_","rc5_","rc3_","rc3_","rc4_","rc5_","rc1_","rc1_","rc4_","rc2_","rc7_","rc1_","rc6_","rc1_","rc4_","rc0_","rc0_","rc2_","rc0_","rc7_","rc5_","rc1_","rc7_","rc0_","rc4_","rc3_","rc7_","rc5_","rc1_","rc5_","rc0_","rc2_","rc3_","rc2_"],
+["rc4_","rc6_","rc6_","rc3_","rc7_","rc7_","rc1_","rc4_","rc1_","rc4_","rc3_","rc5_","rc1_","rc6_","rc2_","rc6_","rc4_","rc1_","rc4_","rc6_","rc6_","rc7_","rc1_","rc6_","rc1_","rc7_","rc0_","rc1_","rc4_","rc4_","rc2_","rc7_","rc5_","rc0_","rc4_","rc2_","rc2_","rc3_","rc1_","rc1_","rc5_","rc7_","rc7_","rc3_","rc6_","rc6_","rc0_","rc6_","rc5_","rc5_","rc4_","rc1_","rc0_","rc2_","rc5_","rc6_","rc1_","rc5_","rc3_","rc4_","rc4_","rc3_","rc1_","rc4_","rc7_","rc1_","rc0_","rc2_","rc3_","rc7_","rc2_","rc7_","rc3_","rc2_","rc2_","rc5_","rc3_","rc6_","rc2_","rc2_","rc2_","rc4_","rc5_","rc0_","rc2_","rc1_","rc6_","rc4_","rc0_","rc7_","rc1_","rc6_","rc7_","rc0_","rc0_","rc0_","rc2_","rc7_","rc0_","rc3_","rc2_","rc2_","rc6_","rc6_","rc4_","rc5_","rc4_","rc1_","rc7_","rc0_","rc0_","rc1_","rc4_","rc5_","rc7_","rc4_","rc7_","rc2_","rc6_","rc0_","rc5_","rc6_","rc1_","rc6_","rc6_","rc1_","rc0_","rc5_","rc5_","rc4_","rc6_","rc4_","rc6_","rc4_","rc3_","rc0_","rc0_","rc1_","rc5_","rc0_","rc2_","rc4_","rc3_","rc4_"],
+["rc3_","rc0_","rc2_","rc5_","rc4_","rc7_","rc4_","rc1_","rc1_","rc0_","rc5_","rc6_","rc1_","rc0_","rc7_","rc1_","rc1_","rc0_","rc1_","rc7_","rc0_","rc5_","rc3_","rc4_","rc6_","rc5_","rc5_","rc1_","rc6_","rc0_","rc1_","rc4_","rc6_","rc5_","rc7_","rc3_","rc4_","rc7_","rc7_","rc0_","rc3_","rc0_","rc4_","rc4_","rc7_","rc5_","rc7_","rc5_","rc5_","rc1_","rc1_","rc2_","rc7_","rc6_","rc5_","rc1_","rc6_","rc1_","rc5_","rc6_","rc1_","rc6_","rc4_","rc7_","rc5_","rc5_","rc4_","rc5_","rc5_","rc3_","rc1_","rc6_","rc4_","rc3_","rc6_","rc1_","rc0_","rc6_","rc6_","rc1_","rc2_","rc1_","rc5_","rc6_","rc3_","rc7_","rc1_","rc0_","rc2_","rc6_","rc3_","rc5_","rc3_","rc6_","rc2_","rc5_","rc1_","rc7_","rc2_","rc5_","rc7_","rc2_","rc1_","rc1_","rc4_","rc3_","rc2_","rc5_","rc5_","rc5_","rc6_","rc5_","rc0_","rc7_","rc7_","rc3_","rc6_","rc6_","rc7_","rc1_","rc0_","rc3_","rc1_","rc7_","rc5_","rc6_","rc5_","rc0_","rc2_","rc3_","rc2_","rc1_","rc4_","rc4_","rc7_","rc1_","rc2_","rc7_","rc2_","rc7_","rc6_","rc2_","rc5_","rc0_"],
+["rc6_","rc4_","rc6_","rc0_","rc6_","rc5_","rc7_","rc3_","rc0_","rc0_","rc5_","rc4_","rc6_","rc0_","rc4_","rc6_","rc7_","rc2_","rc2_","rc2_","rc1_","rc2_","rc3_","rc0_","rc7_","rc0_","rc6_","rc1_","rc3_","rc3_","rc5_","rc3_","rc4_","rc6_","rc2_","rc6_","rc3_","rc3_","rc0_","rc0_","rc3_","rc6_","rc1_","rc4_","rc0_","rc4_","rc7_","rc1_","rc1_","rc3_","rc4_","rc7_","rc0_","rc2_","rc5_","rc4_","rc2_","rc5_","rc4_","rc1_","rc2_","rc2_","rc5_","rc7_","rc3_","rc0_","rc4_","rc6_","rc6_","rc1_","rc5_","rc6_","rc0_","rc4_","rc3_","rc7_","rc0_","rc0_","rc5_","rc7_","rc0_","rc6_","rc6_","rc2_","rc1_","rc7_","rc5_","rc7_","rc4_","rc6_","rc5_","rc0_","rc6_","rc6_","rc5_","rc2_","rc3_","rc7_","rc2_","rc6_","rc7_","rc5_","rc3_","rc6_","rc0_","rc2_","rc5_","rc4_","rc0_","rc6_","rc0_","rc0_","rc3_","rc4_","rc2_","rc1_","rc4_","rc6_","rc3_","rc7_","rc4_","rc3_","rc1_","rc6_","rc5_","rc0_","rc5_","rc4_","rc3_","rc5_","rc5_","rc6_","rc5_","rc2_","rc3_","rc0_","rc3_","rc1_","rc6_","rc5_","rc0_","rc5_","rc7_","rc6_"],
+["rc2_","rc4_","rc7_","rc6_","rc7_","rc1_","rc7_","rc5_","rc3_","rc5_","rc0_","rc2_","rc7_","rc7_","rc5_","rc7_","rc4_","rc1_","rc5_","rc0_","rc1_","rc5_","rc5_","rc4_","rc0_","rc0_","rc6_","rc0_","rc7_","rc6_","rc2_","rc0_","rc6_","rc6_","rc5_","rc7_","rc5_","rc7_","rc1_","rc0_","rc0_","rc3_","rc3_","rc6_","rc5_","rc3_","rc5_","rc1_","rc5_","rc3_","rc3_","rc2_","rc2_","rc0_","rc1_","rc2_","rc0_","rc7_","rc4_","rc6_","rc6_","rc7_","rc1_","rc5_","rc7_","rc2_","rc4_","rc4_","rc4_","rc0_","rc2_","rc2_","rc4_","rc5_","rc0_","rc0_","rc7_","rc4_","rc5_","rc3_","rc7_","rc4_","rc5_","rc6_","rc1_","rc2_","rc0_","rc1_","rc2_","rc7_","rc2_","rc6_","rc5_","rc3_","rc4_","rc6_","rc4_","rc1_","rc4_","rc7_","rc5_","rc5_","rc0_","rc1_","rc7_","rc4_","rc0_","rc1_","rc4_","rc3_","rc5_","rc5_","rc2_","rc3_","rc5_","rc2_","rc5_","rc3_","rc0_","rc2_","rc7_","rc6_","rc7_","rc2_","rc3_","rc7_","rc4_","rc3_","rc6_","rc2_","rc5_","rc6_","rc7_","rc5_","rc5_","rc6_","rc0_","rc7_","rc4_","rc1_","rc5_","rc7_","rc5_","rc7_"],
+["rc5_","rc0_","rc1_","rc6_","rc7_","rc4_","rc3_","rc5_","rc7_","rc7_","rc3_","rc0_","rc0_","rc5_","rc7_","rc4_","rc4_","rc6_","rc7_","rc3_","rc2_","rc0_","rc7_","rc1_","rc0_","rc6_","rc3_","rc0_","rc2_","rc1_","rc5_","rc1_","rc1_","rc4_","rc3_","rc4_","rc6_","rc4_","rc7_","rc2_","rc1_","rc7_","rc7_","rc1_","rc6_","rc4_","rc6_","rc0_","rc7_","rc4_","rc2_","rc4_","rc0_","rc7_","rc0_","rc2_","rc6_","rc2_","rc4_","rc5_","rc2_","rc7_","rc6_","rc2_","rc5_","rc6_","rc1_","rc3_","rc3_","rc3_","rc6_","rc1_","rc5_","rc0_","rc1_","rc5_","rc2_","rc4_","rc2_","rc0_","rc7_","rc4_","rc6_","rc2_","rc7_","rc1_","rc6_","rc0_","rc3_","rc2_","rc1_","rc2_","rc5_","rc3_","rc6_","rc4_","rc2_","rc6_","rc5_","rc2_","rc6_","rc2_","rc7_","rc1_","rc4_","rc1_","rc2_","rc4_","rc7_","rc6_","rc1_","rc5_","rc3_","rc6_","rc3_","rc4_","rc7_","rc6_","rc3_","rc5_","rc7_","rc6_","rc1_","rc5_","rc4_","rc5_","rc7_","rc5_","rc7_","rc5_","rc6_","rc2_","rc6_","rc0_","rc1_","rc4_","rc6_","rc2_","rc2_","rc5_","rc2_","rc1_","rc5_","rc5_"],
+["rc3_","rc3_","rc2_","rc4_","rc1_","rc7_","rc6_","rc7_","rc0_","rc7_","rc4_","rc7_","rc7_","rc3_","rc7_","rc6_","rc5_","rc2_","rc4_","rc3_","rc4_","rc5_","rc6_","rc0_","rc2_","rc4_","rc2_","rc2_","rc6_","rc5_","rc4_","rc0_","rc0_","rc2_","rc1_","rc0_","rc5_","rc3_","rc7_","rc7_","rc1_","rc3_","rc2_","rc7_","rc5_","rc7_","rc0_","rc6_","rc3_","rc5_","rc7_","rc5_","rc7_","rc1_","rc5_","rc6_","rc1_","rc6_","rc0_","rc1_","rc1_","rc3_","rc0_","rc0_","rc2_","rc3_","rc2_","rc1_","rc2_","rc2_","rc6_","rc5_","rc0_","rc5_","rc3_","rc7_","rc7_","rc1_","rc1_","rc7_","rc2_","rc6_","rc7_","rc7_","rc0_","rc5_","rc6_","rc5_","rc3_","rc0_","rc6_","rc3_","rc3_","rc2_","rc7_","rc3_","rc0_","rc7_","rc3_","rc7_","rc0_","rc4_","rc3_","rc0_","rc6_","rc2_","rc7_","rc5_","rc4_","rc7_","rc1_","rc7_","rc2_","rc6_","rc4_","rc3_","rc7_","rc0_","rc1_","rc7_","rc7_","rc3_","rc2_","rc0_","rc5_","rc2_","rc3_","rc3_","rc3_","rc5_","rc6_","rc2_","rc1_","rc2_","rc6_","rc2_","rc2_","rc4_","rc6_","rc3_","rc5_","rc3_","rc2_","rc7_"],
+["rc2_","rc4_","rc6_","rc7_","rc3_","rc3_","rc6_","rc2_","rc5_","rc6_","rc6_","rc7_","rc7_","rc4_","rc3_","rc6_","rc3_","rc5_","rc1_","rc2_","rc2_","rc3_","rc7_","rc1_","rc5_","rc2_","rc0_","rc7_","rc1_","rc4_","rc3_","rc7_","rc3_","rc1_","rc5_","rc4_","rc4_","rc5_","rc5_","rc7_","rc6_","rc1_","rc1_","rc2_","rc0_","rc6_","rc7_","rc4_","rc7_","rc0_","rc6_","rc6_","rc6_","rc0_","rc6_","rc6_","rc6_","rc4_","rc5_","rc1_","rc1_","rc3_","rc4_","rc7_","rc4_","rc3_","rc1_","rc1_","rc3_","rc6_","rc6_","rc6_","rc2_","rc5_","rc2_","rc7_","rc1_","rc3_","rc7_","rc7_","rc7_","rc5_","rc4_","rc7_","rc3_","rc0_","rc3_","rc1_","rc6_","rc3_","rc5_","rc3_","rc5_","rc7_","rc5_","rc6_","rc6_","rc4_","rc3_","rc0_","rc0_","rc6_","rc2_","rc7_","rc0_","rc1_","rc3_","rc7_","rc1_","rc0_","rc3_","rc6_","rc4_","rc4_","rc3_","rc5_","rc1_","rc3_","rc6_","rc1_","rc5_","rc6_","rc1_","rc4_","rc4_","rc0_","rc6_","rc6_","rc0_","rc4_","rc1_","rc7_","rc2_","rc6_","rc7_","rc2_","rc1_","rc5_","rc3_","rc2_","rc1_","rc7_","rc3_","rc0_"]]

+ 0 - 0
test/TerrainViewTest.h3m → test/testdata/TerrainViewTest.h3m


+ 0 - 0
test/terrainViewMappings.json → test/testdata/terrainViewMappings.json