diff --git a/changelog.txt b/changelog.txt index 6c42a23ca..f5d1803d0 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,46 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50) ------------------------------------------------------- +== 07/06/2015 == +mackal: Implement Triple Attack Skill + Parses showed about rand(1000) for the chance, may need more investigating + Corrected Double Attack chances as well + Running optional 2015_07_06_TripleAttack.sql will set current toons to their max skill + This is optional because the admins might want to go a different route. + +== 07/05/2015 == +mackal: Rewrite NPC combat attack round logic + An NPC "quading" is really just an NPC with innate dual wield that doubles on both hands + The old rules allowed NPCs to hit 6 times in one round + NPCs also seem to have their own skill progression for DW/DA + See: http://www.eqemulator.org/forums/showthread.php?t=38708 + You can set Combat:UseLiveCombatRounds to false to use the old rules + PC Double Attack rates kind of follow the same thing but still needs to be implemented +Kinglykrab: WARNING: summonburriedplayercorpse is now summonburiedplayercorpse, getplayerburriedcorpsecount is now getplayerburiedcorpsecount, summon_burried_player_corpse is now summon_buried_player_corpse, and get_player_burried_corpse_count is now get_player_buried_corpse_count FIX THESE IN YOUR SCRIPTS OR THEY WILL NOT WORK!!!! + Added bot saylinks (thanks Uleat!) + Command aliases for #augmentitem (#aug), #findnpctype (#fn), #findspell (#fs) + Bot command changes: #bot sow -> #bot speed, #bot magepet -> #bot setpet, #bot resurrectme -> #bot resurrect + Changed all occurrences of burried to buried in the code. + client_packet.cpp was referencing old columns in character_corpses, not sure how we didn't already see this before. + +== 7/4/2015 == +mackal: Reworked the activated avoidace skills (riposte, dodge, etc) based on dev quotes + This also fixes the order things are checked (avoidance skills, THEN hit/miss) + Also riposte immunity from the increase riposte chance spell effect. + +== 7/2/2015 == +KLS/Demonstar55: AA system has been rewritten fixing a ton of bugs and extending functionality while making it easier to create new AA points. +KLS/Demonstar55: New tables are needed and so older data will need to be migrated to the new system. +KLS/Demonstar55: The SQL saves the old aa points spent/avail/character_alt_abilities data if any server ops want to do something different than PEQ did with it. +KLS/Demonstar55: Will try to get a wiki entry written up next week some time explaining the system but it's really not hard to follow the db tables in the meantime. + +== 7/1/2015 == +Akkadius: Fix an issue where emote messages would overflow the buffer of 256 by increasing the size and changing some of the initialization +Akkadius: Added a custom Health Update message that will display in the middle of the players screen, to enable this server wide you must enable rule 'Character:MarqueeHPUpdates' + Example: https://www.youtube.com/watch?v=KUVdbPxLIn0 +Akkadius: (Haynar) Fixed some runspeed issues with Perl and LUA scripts +Akkadius: (Haynar) Updated #showstats and #npcstats for new speed calcs to display speeds again in familiar float format. +Akkadius: (Haynar) Improved client movement while AI Controlled, such as feared and charmed. Movement will be much smoother from clients perspective. + == 06/12/2015 == Uleat: Adjusted SessionStats to better reflect a sister implementation diff --git a/common/clientversions.h b/common/clientversions.h index 675429eab..4e575f8f4 100644 --- a/common/clientversions.h +++ b/common/clientversions.h @@ -150,4 +150,26 @@ static ClientVersion ClientVersionFromBit(uint32 clientVersionBit) } } +static uint32 ExpansionFromClientVersion(ClientVersion clientVersion) +{ + switch(clientVersion) + { + case ClientVersion::Unknown: + case ClientVersion::Client62: + case ClientVersion::Titanium: + return 0x000007FFU; + case ClientVersion::SoF: + return 0x00007FFFU; + case ClientVersion::SoD: + return 0x0000FFFFU; + case ClientVersion::UF: + return 0x0001FFFFU; + case ClientVersion::RoF: + case ClientVersion::RoF2: + return 0x000FFFFFU; + default: + return 0; + } +} + #endif /* CLIENTVERSIONS_H */ diff --git a/common/database.cpp b/common/database.cpp index 31566d82f..b27722fe9 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -1384,7 +1384,7 @@ bool Database::MoveCharacterToZone(const char* charname, const char* zonename) { } bool Database::MoveCharacterToZone(uint32 iCharID, const char* iZonename) { - std::string query = StringFormat("UPDATE `character_data` SET `zone_id` = %i, `x` = -1, `y` = -1, `z` = -1 WHERE `id` = %i", iZonename, GetZoneID(iZonename), iCharID); + std::string query = StringFormat("UPDATE `character_data` SET `zone_id` = %i, `x` = -1, `y` = -1, `z` = -1 WHERE `id` = %i", GetZoneID(iZonename), iCharID); auto results = QueryDatabase(query); if (!results.Success()) { diff --git a/common/emu_oplist.h b/common/emu_oplist.h index e4793826e..4ef1761bd 100644 --- a/common/emu_oplist.h +++ b/common/emu_oplist.h @@ -548,4 +548,5 @@ N(OP_ZoneServerInfo), N(OP_ZoneServerReady), N(OP_ZoneSpawns), N(OP_ZoneUnavail), +N(OP_ResetAA), // mail and chat opcodes located in ../mail_oplist.h diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index f9f75838f..8c9dc0a4e 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -4219,6 +4219,52 @@ struct UseAA_Struct { uint32 end; }; +//new AA stuff +//reference only +struct AARankInfo_Struct +{ + uint32 id; + int32 upper_hotkey_sid; + int32 lower_hotkey_sid; + int32 title_sid; + int32 desc_sid; + int32 level_req; + int32 cost; + uint32 seq; + uint32 current_level; + uint32 type; + int32 spell; + int32 spell_type; + int32 spell_refresh; + int32 classes; + int32 max_level; + int32 prev_id; + int32 next_id; + int32 total_cost; + int32 expansion; + int32 category; + uint32 charges; + uint8 grant_only; + uint32 total_effects; + uint32 total_prereqs; +}; + +struct AARankPrereq_Struct +{ + int32 aa_id; + int32 points; +}; + +struct AARankEffect_Struct +{ + int32 effect_id; + int32 base1; + int32 base2; + int32 slot; +}; + +//old AA stuff + struct AA_Ability { /*00*/ uint32 skill_id; /*04*/ uint32 base1; @@ -4273,7 +4319,7 @@ struct SendAA_Struct { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; }; diff --git a/common/guild_base.cpp b/common/guild_base.cpp index 1416dedf1..bfd9f4126 100644 --- a/common/guild_base.cpp +++ b/common/guild_base.cpp @@ -867,7 +867,7 @@ bool BaseGuildManager::QueryWithLogging(std::string query, const char *errmsg) { //factored out so I dont have to copy this crap. #ifdef BOTS #define GuildMemberBaseQuery \ -"SELECT c.id,c.name,c.class,c.level,c.timelaston,c.zoneid," \ +"SELECT c.id,c.name,c.class,c.level,c.last_login,c.zone_id," \ " g.guild_id,g.rank,g.tribute_enable,g.total_tribute,g.last_tribute," \ " g.banker,g.public_note,g.alt" \ " FROM vwBotCharacterMobs AS c LEFT JOIN vwGuildMembers AS g ON c.id=g.char_id AND c.mobtype = g.mobtype " diff --git a/common/opcode_dispatch.h b/common/opcode_dispatch.h index 657d9a525..a88391bce 100644 --- a/common/opcode_dispatch.h +++ b/common/opcode_dispatch.h @@ -146,6 +146,7 @@ INr(OP_GuildDelete); //? IN(OP_GuildPublicNote, GuildUpdate_PublicNote); INz(OP_GetGuildsList); //? IN(OP_SetGuildMOTD, GuildMOTD_Struct); +IN(OP_SetRunMode, SetRunMode_Struct); INz(OP_GuildPeace); //? INz(OP_GuildWar); //? IN(OP_GuildLeader, GuildMakeLeader); diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index 8080bfce1..783156a48 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -2810,7 +2810,7 @@ namespace RoF eq->aa_spent = emu->aa_spent; // These fields may need to be correctly populated at some point - eq->aapoints_assigned = emu->aa_spent + 1; + eq->aapoints_assigned = emu->aa_spent; eq->aa_spent_general = 0; eq->aa_spent_archetype = 0; eq->aa_spent_class = 0; @@ -2846,58 +2846,81 @@ namespace RoF ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 5 is for Live - if (emu->clientver <= 7) - { - OUT(id); - eq->unknown004 = 1; - //eq->hotkey_sid = (emu->hotkey_sid==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->hotkey_sid2 = (emu->hotkey_sid2==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->title_sid = emu->id - emu->current_level + 1; - //eq->desc_sid = emu->id - emu->current_level + 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? -1 : (emu->sof_next_skill); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? -1 : (emu->sof_next_skill); - eq->title_sid = emu->sof_next_skill; - eq->desc_sid = emu->sof_next_skill; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - eq->prereq_skill_count = 1; // min 1 - OUT(prereq_skill); - eq->prereq_minpoints_count = 1; // min 1 - OUT(prereq_minpoints); - eq->type = emu->sof_type; - OUT(spellid); - eq->unknown057 = 1; // Introduced during HoT - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - //eq->max_level = emu->sof_max_level; - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - eq->aa_expansion = emu->aa_expansion; - eq->special_category = emu->special_category; - eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number - OUT(total_abilities); - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + // the structs::SendAA_Struct includes enough space for 1 prereq which is the min even if it has no prereqs + auto prereq_size = emu->total_prereqs > 1 ? (emu->total_prereqs - 1) * 8 : 0; + auto outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability) + prereq_size); + inapp->SetReadPosition(sizeof(AARankInfo_Struct)+emu->total_effects * sizeof(AARankEffect_Struct)); + + + std::vector skill; + std::vector points; + for(auto i = 0; i < emu->total_prereqs; ++i) { + skill.push_back(inapp->ReadUInt32()); + points.push_back(inapp->ReadUInt32()); } - FINISH_ENCODE(); + outapp->WriteUInt32(emu->id); + outapp->WriteUInt8(1); + outapp->WriteSInt32(emu->upper_hotkey_sid); + outapp->WriteSInt32(emu->lower_hotkey_sid); + outapp->WriteSInt32(emu->title_sid); + outapp->WriteSInt32(emu->desc_sid); + outapp->WriteSInt32(emu->level_req); + outapp->WriteSInt32(emu->cost); + outapp->WriteUInt32(emu->seq); + outapp->WriteUInt32(emu->current_level); + + if(emu->total_prereqs) { + outapp->WriteUInt32(emu->total_prereqs); + for(auto &e : skill) + outapp->WriteSInt32(e); + outapp->WriteUInt32(emu->total_prereqs); + for(auto &e : points) + outapp->WriteSInt32(e); + } + else { + outapp->WriteUInt32(1); + outapp->WriteUInt32(0); + outapp->WriteUInt32(1); + outapp->WriteUInt32(0); + } + + outapp->WriteSInt32(emu->type); + outapp->WriteSInt32(emu->spell); + outapp->WriteSInt32(1); + outapp->WriteSInt32(emu->spell_type); + outapp->WriteSInt32(emu->spell_refresh); + outapp->WriteSInt32(emu->classes); + outapp->WriteSInt32(emu->max_level); + outapp->WriteSInt32(emu->prev_id); + outapp->WriteSInt32(emu->next_id); + outapp->WriteSInt32(emu->total_cost); + outapp->WriteUInt8(0); + outapp->WriteUInt8(emu->grant_only); + outapp->WriteUInt8(0); + outapp->WriteUInt32(emu->charges); + outapp->WriteSInt32(emu->expansion); + outapp->WriteSInt32(emu->category); + outapp->WriteUInt8(0); // shroud + outapp->WriteUInt8(0); // unknown109 + outapp->WriteUInt8(0); // loh + outapp->WriteUInt8(0); // unknown111 + outapp->WriteUInt32(emu->total_effects); + + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + for(auto i = 0; i < emu->total_effects; ++i) { + outapp->WriteUInt32(inapp->ReadUInt32()); // skill_id + outapp->WriteUInt32(inapp->ReadUInt32()); // base1 + outapp->WriteUInt32(inapp->ReadUInt32()); // base2 + outapp->WriteUInt32(inapp->ReadUInt32()); // slot + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index 68ff8bf44..dbf233f44 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -2466,7 +2466,8 @@ namespace RoF2 outapp->WriteUInt32(emu->lastlogin); outapp->WriteUInt32(emu->timePlayedMin); outapp->WriteUInt32(emu->timeentitledonaccount); - outapp->WriteUInt32(0x0007ffff); // Expansion bitmask + outapp->WriteUInt32(emu->expansions); + //outapp->WriteUInt32(0x0007ffff); // Expansion bitmask outapp->WriteUInt32(structs::MAX_PP_LANGUAGE); @@ -2899,7 +2900,7 @@ namespace RoF2 eq->aa_spent = emu->aa_spent; // These fields may need to be correctly populated at some point - eq->aapoints_assigned = emu->aa_spent + 1; + eq->aapoints_assigned = emu->aa_spent; eq->aa_spent_general = 0; eq->aa_spent_archetype = 0; eq->aa_spent_class = 0; @@ -2935,58 +2936,80 @@ namespace RoF2 ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; + + // the structs::SendAA_Struct includes enough space for 1 prereq which is the min even if it has no prereqs + auto prereq_size = emu->total_prereqs > 1 ? (emu->total_prereqs - 1) * 8 : 0; + auto outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability) + prereq_size); + inapp->SetReadPosition(sizeof(AARankInfo_Struct)+emu->total_effects * sizeof(AARankEffect_Struct)); + - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 5 is for Live - if (emu->clientver <= 8) - { - OUT(id); - eq->unknown004 = 1; - //eq->hotkey_sid = (emu->hotkey_sid==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->hotkey_sid2 = (emu->hotkey_sid2==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->title_sid = emu->id - emu->current_level + 1; - //eq->desc_sid = emu->id - emu->current_level + 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? -1 : (emu->sof_next_skill); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? -1 : (emu->sof_next_skill); - eq->title_sid = emu->sof_next_skill; - eq->desc_sid = emu->sof_next_skill; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - eq->prereq_skill_count = 1; // min 1 - OUT(prereq_skill); - eq->prereq_minpoints_count = 1; // min 1 - OUT(prereq_minpoints); - eq->type = emu->sof_type; - OUT(spellid); - eq->unknown057 = 1; // Introduced during HoT - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - //eq->max_level = emu->sof_max_level; - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - eq->aa_expansion = emu->aa_expansion; - eq->special_category = emu->special_category; - OUT(total_abilities); - eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + std::vector skill; + std::vector points; + for(auto i = 0; i < emu->total_prereqs; ++i) { + skill.push_back(inapp->ReadUInt32()); + points.push_back(inapp->ReadUInt32()); } - FINISH_ENCODE(); + outapp->WriteUInt32(emu->id); + outapp->WriteUInt8(1); + outapp->WriteSInt32(emu->upper_hotkey_sid); + outapp->WriteSInt32(emu->lower_hotkey_sid); + outapp->WriteSInt32(emu->title_sid); + outapp->WriteSInt32(emu->desc_sid); + outapp->WriteSInt32(emu->level_req); + outapp->WriteSInt32(emu->cost); + outapp->WriteUInt32(emu->seq); + outapp->WriteUInt32(emu->current_level); + + if (emu->total_prereqs) { + outapp->WriteUInt32(emu->total_prereqs); + for (auto &e : skill) + outapp->WriteSInt32(e); + outapp->WriteUInt32(emu->total_prereqs); + for (auto &e : points) + outapp->WriteSInt32(e); + } else { + outapp->WriteUInt32(1); + outapp->WriteUInt32(0); + outapp->WriteUInt32(1); + outapp->WriteUInt32(0); + } + + outapp->WriteSInt32(emu->type); + outapp->WriteSInt32(emu->spell); + outapp->WriteSInt32(1); + outapp->WriteSInt32(emu->spell_type); + outapp->WriteSInt32(emu->spell_refresh); + outapp->WriteSInt32(emu->classes); + outapp->WriteSInt32(emu->max_level); + outapp->WriteSInt32(emu->prev_id); + outapp->WriteSInt32(emu->next_id); + outapp->WriteSInt32(emu->total_cost); + outapp->WriteUInt8(0); + outapp->WriteUInt8(emu->grant_only); + outapp->WriteUInt8(0); + outapp->WriteUInt32(emu->charges); + outapp->WriteSInt32(emu->expansion); + outapp->WriteSInt32(emu->category); + outapp->WriteUInt8(0); // shroud + outapp->WriteUInt8(0); // unknown109 + outapp->WriteUInt8(0); // loh + outapp->WriteUInt8(0); // unknown111 + outapp->WriteUInt32(emu->total_effects); + + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + for(auto i = 0; i < emu->total_effects; ++i) { + outapp->WriteUInt32(inapp->ReadUInt32()); // skill_id + outapp->WriteUInt32(inapp->ReadUInt32()); // base1 + outapp->WriteUInt32(inapp->ReadUInt32()); // base2 + outapp->WriteUInt32(inapp->ReadUInt32()); // slot + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) diff --git a/common/patches/rof2_structs.h b/common/patches/rof2_structs.h index 812e9c464..bc49fe88f 100644 --- a/common/patches/rof2_structs.h +++ b/common/patches/rof2_structs.h @@ -4289,7 +4289,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; /*16*/ }; diff --git a/common/patches/rof_structs.h b/common/patches/rof_structs.h index a87b530c4..eb7c6edfb 100644 --- a/common/patches/rof_structs.h +++ b/common/patches/rof_structs.h @@ -4288,7 +4288,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; /*16*/ }; diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index 80201da1e..1910a96e4 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -1677,8 +1677,8 @@ namespace SoD OUT(copper_bank); OUT(platinum_shared); // OUT(unknown13156[84]); - //OUT(expansions); - eq->expansions = 16383; + OUT(expansions); + //eq->expansions = 16383; // OUT(unknown13244[12]); OUT(autosplit); // OUT(unknown13260[16]); @@ -1862,55 +1862,56 @@ namespace SoD ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 5 is for SoD - if (emu->clientver <= 5) - { - OUT(id); - eq->unknown004 = 1; - //eq->hotkey_sid = (emu->hotkey_sid==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->hotkey_sid2 = (emu->hotkey_sid2==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->title_sid = emu->id - emu->current_level + 1; - //eq->desc_sid = emu->id - emu->current_level + 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->title_sid = emu->sof_next_skill; - eq->desc_sid = emu->sof_next_skill; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - OUT(prereq_skill); - OUT(prereq_minpoints); - eq->type = emu->sof_type; - OUT(spellid); - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - //eq->max_level = emu->sof_max_level; - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - eq->aa_expansion = emu->aa_expansion; - eq->special_category = emu->special_category; - eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number - OUT(total_abilities); - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability)); + structs::SendAA_Struct *eq = (structs::SendAA_Struct*)outapp->pBuffer; + + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + outapp->SetWritePosition(sizeof(structs::SendAA_Struct)); + + eq->id = emu->id; + eq->unknown004 = 1; + eq->id = emu->id; + eq->hotkey_sid = emu->upper_hotkey_sid; + eq->hotkey_sid2 = emu->lower_hotkey_sid; + eq->desc_sid = emu->desc_sid; + eq->title_sid = emu->title_sid; + eq->class_type = emu->level_req; + eq->cost = emu->cost; + eq->seq = emu->seq; + eq->current_level = emu->current_level; + eq->type = emu->type; + eq->spellid = emu->spell; + eq->spell_type = emu->spell_type; + eq->spell_refresh = emu->spell_refresh; + eq->classes = emu->classes; + eq->max_level = emu->max_level; + eq->last_id = emu->prev_id; + eq->next_id = emu->next_id; + eq->cost2 = emu->total_cost; + eq->grant_only = emu->grant_only; + eq->expendable_charges = emu->charges; + eq->aa_expansion = emu->expansion; + eq->special_category = emu->category; + eq->total_abilities = emu->total_effects; + + for(auto i = 0; i < eq->total_abilities; ++i) { + eq->abilities[i].skill_id = inapp->ReadUInt32(); + eq->abilities[i].base1 = inapp->ReadUInt32(); + eq->abilities[i].base2 = inapp->ReadUInt32(); + eq->abilities[i].slot = inapp->ReadUInt32(); } - FINISH_ENCODE(); + if(emu->total_prereqs > 0) { + eq->prereq_skill = inapp->ReadUInt32(); + eq->prereq_minpoints = inapp->ReadUInt32(); + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) diff --git a/common/patches/sod_structs.h b/common/patches/sod_structs.h index 2f5d2c2db..816bff323 100644 --- a/common/patches/sod_structs.h +++ b/common/patches/sod_structs.h @@ -3813,8 +3813,7 @@ struct SendAA_Struct { /*0049*/ uint32 spellid; /*0053*/ uint32 spell_type; /*0057*/ uint32 spell_refresh; -/*0061*/ uint16 classes; -/*0063*/ uint16 berserker; //seems to be 1 if its a berserker ability +/*0061*/ uint32 classes; /*0065*/ uint32 max_level; /*0069*/ uint32 last_id; /*0073*/ uint32 next_id; @@ -3840,7 +3839,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; }; diff --git a/common/patches/sof.cpp b/common/patches/sof.cpp index 7b0e14c1c..421903970 100644 --- a/common/patches/sof.cpp +++ b/common/patches/sof.cpp @@ -1335,8 +1335,8 @@ namespace SoF OUT(copper_bank); OUT(platinum_shared); // OUT(unknown13156[84]); - //OUT(expansions); - eq->expansions = 16383; + OUT(expansions); + //eq->expansions = 16383; // OUT(unknown13244[12]); OUT(autosplit); // OUT(unknown13260[16]); @@ -1520,56 +1520,56 @@ namespace SoF ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability)); + structs::SendAA_Struct *eq = (structs::SendAA_Struct*)outapp->pBuffer; - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 4 is for SoF - if (emu->clientver <= 4) - { - OUT(id); - eq->unknown004 = 1; - //eq->hotkey_sid = (emu->hotkey_sid==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->hotkey_sid2 = (emu->hotkey_sid2==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->title_sid = emu->id - emu->current_level + 1; - //eq->desc_sid = emu->id - emu->current_level + 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->title_sid = emu->sof_next_skill; - eq->desc_sid = emu->sof_next_skill; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - OUT(prereq_skill); - OUT(prereq_minpoints); - eq->type = emu->sof_type; - OUT(spellid); - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - //eq->max_level = emu->sof_max_level; - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - eq->aa_expansion = emu->aa_expansion; - eq->special_category = emu->special_category; - eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number - OUT(total_abilities); - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + outapp->SetWritePosition(sizeof(structs::SendAA_Struct)); + + eq->id = emu->id; + eq->unknown004 = 1; + eq->id = emu->id; + eq->hotkey_sid = emu->upper_hotkey_sid; + eq->hotkey_sid2 = emu->lower_hotkey_sid; + eq->desc_sid = emu->desc_sid; + eq->title_sid = emu->title_sid; + eq->class_type = emu->level_req; + eq->cost = emu->cost; + eq->seq = emu->seq; + eq->current_level = emu->current_level; + eq->type = emu->type; + eq->spellid = emu->spell; + eq->spell_type = emu->spell_type; + eq->spell_refresh = emu->spell_refresh; + eq->classes = emu->classes; + eq->max_level = emu->max_level; + eq->last_id = emu->prev_id; + eq->next_id = emu->next_id; + eq->cost2 = emu->total_cost; + eq->grant_only = emu->grant_only; + eq->expendable_charges = emu->charges; + eq->aa_expansion = emu->expansion; + eq->special_category = emu->category; + eq->total_abilities = emu->total_effects; + + for(auto i = 0; i < eq->total_abilities; ++i) { + eq->abilities[i].skill_id = inapp->ReadUInt32(); + eq->abilities[i].base1 = inapp->ReadUInt32(); + eq->abilities[i].base2 = inapp->ReadUInt32(); + eq->abilities[i].slot = inapp->ReadUInt32(); } - FINISH_ENCODE(); + if(emu->total_prereqs > 0) { + eq->prereq_skill = inapp->ReadUInt32(); + eq->prereq_minpoints = inapp->ReadUInt32(); + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) @@ -1665,8 +1665,6 @@ namespace SoF emu_ptr += sizeof(CharacterSelectEntry_Struct); eq_ptr += sizeof(structs::CharacterSelectEntry_Struct); } - - FINISH_ENCODE(); } //hack hack hack diff --git a/common/patches/sof_structs.h b/common/patches/sof_structs.h index afd34ba68..49ad7ba3e 100644 --- a/common/patches/sof_structs.h +++ b/common/patches/sof_structs.h @@ -3677,8 +3677,7 @@ struct SendAA_Struct { /*0049*/ uint32 spellid; /*0053*/ uint32 spell_type; /*0057*/ uint32 spell_refresh; -/*0061*/ uint16 classes; -/*0063*/ uint16 berserker; //seems to be 1 if its a berserker ability +/*0061*/ uint32 classes; /*0065*/ uint32 max_level; /*0069*/ uint32 last_id; /*0073*/ uint32 next_id; @@ -3702,7 +3701,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; }; diff --git a/common/patches/titanium.cpp b/common/patches/titanium.cpp index 2fda4038a..ec25aba61 100644 --- a/common/patches/titanium.cpp +++ b/common/patches/titanium.cpp @@ -1107,50 +1107,52 @@ namespace Titanium ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability)); + structs::SendAA_Struct *eq = (structs::SendAA_Struct*)outapp->pBuffer; - // Check clientver field to verify this AA should be sent for Titanium - // clientver 1 is for all clients and 3 is for Titanium - if (emu->clientver <= 3) - { - OUT(id); - eq->unknown004 = 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? 0 : (emu->id - emu->current_level + 1); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? 0 : (emu->id - emu->current_level + 1); - eq->title_sid = emu->id - emu->current_level + 1; - eq->desc_sid = emu->id - emu->current_level + 1; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - OUT(prereq_skill); - OUT(prereq_minpoints); - OUT(type); - OUT(spellid); - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - OUT(unknown80[0]); - OUT(unknown80[1]); - OUT(total_abilities); - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + outapp->SetWritePosition(sizeof(structs::SendAA_Struct)); + + eq->id = emu->id; + eq->unknown004 = 1; + eq->id = emu->id; + eq->hotkey_sid = emu->upper_hotkey_sid; + eq->hotkey_sid2 = emu->lower_hotkey_sid; + eq->desc_sid = emu->desc_sid; + eq->title_sid = emu->title_sid; + eq->class_type = emu->level_req; + eq->cost = emu->cost; + eq->seq = emu->seq; + eq->current_level = emu->current_level; + eq->type = emu->type; + eq->spellid = emu->spell; + eq->spell_type = emu->spell_type; + eq->spell_refresh = emu->spell_refresh; + eq->classes = emu->classes; + eq->max_level = emu->max_level; + eq->last_id = emu->prev_id; + eq->next_id = emu->next_id; + eq->cost2 = emu->total_cost; + eq->total_abilities = emu->total_effects; + + for(auto i = 0; i < eq->total_abilities; ++i) { + eq->abilities[i].skill_id = inapp->ReadUInt32(); + eq->abilities[i].base1 = inapp->ReadUInt32(); + eq->abilities[i].base2 = inapp->ReadUInt32(); + eq->abilities[i].slot = inapp->ReadUInt32(); } - FINISH_ENCODE(); + if(emu->total_prereqs > 0) { + eq->prereq_skill = inapp->ReadUInt32(); + eq->prereq_minpoints = inapp->ReadUInt32(); + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) diff --git a/common/patches/titanium_structs.h b/common/patches/titanium_structs.h index f836395c9..36cf2df3d 100644 --- a/common/patches/titanium_structs.h +++ b/common/patches/titanium_structs.h @@ -3157,8 +3157,7 @@ struct SendAA_Struct { /*0052*/ uint32 spellid; /*0056*/ uint32 spell_type; /*0060*/ uint32 spell_refresh; -/*0064*/ uint16 classes; -/*0066*/ uint16 berserker; //seems to be 1 if its a berserker ability +/*0064*/ uint32 classes; /*0068*/ uint32 max_level; /*0072*/ uint32 last_id; /*0076*/ uint32 next_id; @@ -3175,7 +3174,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; }; diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index d63a1bc04..1a786d94a 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -1805,11 +1805,13 @@ namespace UF //NOTE: new client supports 300 AAs, our internal rep/PP //only supports 240.. for (r = 0; r < MAX_PP_AA_ARRAY; r++) { - OUT(aa_array[r].AA); - OUT(aa_array[r].value); - OUT(aa_array[r].charges); + eq->aa_array[r].AA = emu->aa_array[r].AA; + eq->aa_array[r].value = emu->aa_array[r].value; + eq->aa_array[r].charges = emu->aa_array[r].charges; } + // OUT(unknown02220[4]); + OUT(mana); OUT(cur_hp); OUT(STR); @@ -1939,8 +1941,8 @@ namespace UF OUT(copper_bank); OUT(platinum_shared); // OUT(unknown13156[84]); - //OUT(expansions); - eq->expansions = 0xffff; + OUT(expansions); + //eq->expansions = 0x1ffff; // OUT(unknown13244[12]); OUT(autosplit); // OUT(unknown13260[16]); @@ -2128,7 +2130,7 @@ namespace UF eq->aa_spent = emu->aa_spent; eq->aa_assigned = emu->aa_spent; - eq->aa_spent3 = emu->aa_spent; + eq->aa_spent3 = 0; eq->unknown012 = 0; eq->unknown016 = 0; eq->unknown020 = 0; @@ -2145,55 +2147,56 @@ namespace UF ENCODE(OP_SendAATable) { - ENCODE_LENGTH_ATLEAST(SendAA_Struct); - SETUP_VAR_ENCODE(SendAA_Struct); - ALLOC_VAR_ENCODE(structs::SendAA_Struct, sizeof(structs::SendAA_Struct) + emu->total_abilities*sizeof(structs::AA_Ability)); + EQApplicationPacket *inapp = *p; + *p = nullptr; + AARankInfo_Struct *emu = (AARankInfo_Struct*)inapp->pBuffer; - // Check clientver field to verify this AA should be sent for SoF - // clientver 1 is for all clients and 6 is for Underfoot - if (emu->clientver <= 6) - { - OUT(id); - eq->unknown004 = 1; - //eq->hotkey_sid = (emu->hotkey_sid==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->hotkey_sid2 = (emu->hotkey_sid2==4294967295UL)?0:(emu->id - emu->current_level + 1); - //eq->title_sid = emu->id - emu->current_level + 1; - //eq->desc_sid = emu->id - emu->current_level + 1; - eq->hotkey_sid = (emu->hotkey_sid == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->hotkey_sid2 = (emu->hotkey_sid2 == 4294967295UL) ? 0 : (emu->sof_next_skill); - eq->title_sid = emu->sof_next_skill; - eq->desc_sid = emu->sof_next_skill; - OUT(class_type); - OUT(cost); - OUT(seq); - OUT(current_level); - OUT(prereq_skill); - OUT(prereq_minpoints); - eq->type = emu->sof_type; - OUT(spellid); - OUT(spell_type); - OUT(spell_refresh); - OUT(classes); - OUT(berserker); - //eq->max_level = emu->sof_max_level; - OUT(max_level); - OUT(last_id); - OUT(next_id); - OUT(cost2); - eq->aa_expansion = emu->aa_expansion; - eq->special_category = emu->special_category; - eq->expendable_charges = emu->special_category == 7 ? 1 : 0; // temp hack, this can actually be any number - OUT(total_abilities); - unsigned int r; - for (r = 0; r < emu->total_abilities; r++) { - OUT(abilities[r].skill_id); - OUT(abilities[r].base1); - OUT(abilities[r].base2); - OUT(abilities[r].slot); - } + EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, sizeof(structs::SendAA_Struct) + emu->total_effects * sizeof(structs::AA_Ability)); + structs::SendAA_Struct *eq = (structs::SendAA_Struct*)outapp->pBuffer; + + inapp->SetReadPosition(sizeof(AARankInfo_Struct)); + outapp->SetWritePosition(sizeof(structs::SendAA_Struct)); + + eq->id = emu->id; + eq->unknown004 = 1; + eq->id = emu->id; + eq->hotkey_sid = emu->upper_hotkey_sid; + eq->hotkey_sid2 = emu->lower_hotkey_sid; + eq->desc_sid = emu->desc_sid; + eq->title_sid = emu->title_sid; + eq->class_type = emu->level_req; + eq->cost = emu->cost; + eq->seq = emu->seq; + eq->current_level = emu->current_level; + eq->type = emu->type; + eq->spellid = emu->spell; + eq->spell_type = emu->spell_type; + eq->spell_refresh = emu->spell_refresh; + eq->classes = emu->classes; + eq->max_level = emu->max_level; + eq->last_id = emu->prev_id; + eq->next_id = emu->next_id; + eq->cost2 = emu->total_cost; + eq->grant_only = emu->grant_only; + eq->expendable_charges = emu->charges; + eq->aa_expansion = emu->expansion; + eq->special_category = emu->category; + eq->total_abilities = emu->total_effects; + + for(auto i = 0; i < eq->total_abilities; ++i) { + eq->abilities[i].skill_id = inapp->ReadUInt32(); + eq->abilities[i].base1 = inapp->ReadUInt32(); + eq->abilities[i].base2 = inapp->ReadUInt32(); + eq->abilities[i].slot = inapp->ReadUInt32(); } - FINISH_ENCODE(); + if(emu->total_prereqs > 0) { + eq->prereq_skill = inapp->ReadUInt32(); + eq->prereq_minpoints = inapp->ReadUInt32(); + } + + dest->FastQueuePacket(&outapp); + delete inapp; } ENCODE(OP_SendCharInfo) diff --git a/common/patches/uf_structs.h b/common/patches/uf_structs.h index c943c6ea5..882158492 100644 --- a/common/patches/uf_structs.h +++ b/common/patches/uf_structs.h @@ -3886,8 +3886,7 @@ struct SendAA_Struct { /*0049*/ uint32 spellid; /*0053*/ uint32 spell_type; /*0057*/ uint32 spell_refresh; -/*0061*/ uint16 classes; -/*0063*/ uint16 berserker; //seems to be 1 if its a berserker ability +/*0061*/ uint32 classes; /*0065*/ uint32 max_level; /*0069*/ uint32 last_id; /*0073*/ uint32 next_id; @@ -3913,7 +3912,7 @@ struct AA_List { struct AA_Action { /*00*/ uint32 action; /*04*/ uint32 ability; -/*08*/ uint32 unknown08; +/*08*/ uint32 target_id; /*12*/ uint32 exp_value; }; diff --git a/common/ptimer.h b/common/ptimer.h index 8a559a148..7194ab49b 100644 --- a/common/ptimer.h +++ b/common/ptimer.h @@ -139,8 +139,4 @@ protected: std::map _list; }; -//code prettying macros -#define AA_Choose3(val, v1, v2, v3) (val==1?v1:(val==2?v2:v3)) -#define AA_Choose5(val, v1, v2, v3, v4, v5) (val==1?v1:(val==2?v2:(val==3?v3:(val==4?v4:v5)))) - #endif diff --git a/common/ruletypes.h b/common/ruletypes.h index 1919c7168..e1a095724 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -99,6 +99,7 @@ RULE_BOOL(Character, EnableXTargetting, true) // Enable Extended Targetting Wind RULE_BOOL(Character, KeepLevelOverMax, false) // Don't delevel a character that has somehow gone over the level cap RULE_INT(Character, FoodLossPerUpdate, 35) // How much food/water you lose per stamina update RULE_INT(Character, BaseInstrumentSoftCap, 36) // Softcap for instrument mods, 36 commonly referred to as "3.6" as well. +RULE_BOOL(Character, UseSpellFileSongCap, true) // When they removed the AA that increased the cap they removed the above and just use the spell field RULE_INT(Character, BaseRunSpeedCap, 158) // Base Run Speed Cap, on live it's 158% which will give you a runspeed of 1.580 hard capped to 225. RULE_INT(Character, OrnamentationAugmentType, 20) //Ornamentation Augment Type RULE_REAL(Character, EnvironmentDamageMulipliter, 1) @@ -113,6 +114,8 @@ RULE_INT(Character, TradeskillUpMakePoison, 2) // Make Poison skillup rate adjus RULE_INT(Character, TradeskillUpPottery, 4) // Pottery skillup rate adjust. Lower is faster. RULE_INT(Character, TradeskillUpResearch, 1) // Research skillup rate adjust. Lower is faster. RULE_INT(Character, TradeskillUpTinkering, 2) // Tinkering skillup rate adjust. Lower is faster. +RULE_BOOL(Character, SpamHPUpdates, false) // if your server has stupid amounts of HP that causes client display issues, turn this on! +RULE_BOOL(Character, MarqueeHPUpdates, false) // Will show Health % in center of screen < 100% RULE_CATEGORY_END() RULE_CATEGORY(Mercs) @@ -183,6 +186,7 @@ RULE_INT(World, MinGMAntiHackStatus, 1) //Minimum GM status to check against Ant RULE_INT(World, SoFStartZoneID, -1) //Sets the Starting Zone for SoF Clients separate from Titanium Clients (-1 is disabled) RULE_INT(World, TitaniumStartZoneID, -1) //Sets the Starting Zone for Titanium Clients (-1 is disabled). Replaces the old method. RULE_INT(World, ExpansionSettings, 16383) // Sets the expansion settings for the server, This is sent on login to world and affects client expansion settings. Defaults to all expansions enabled up to TSS. +RULE_BOOL(World, UseClientBasedExpansionSettings, true) // if true it will overrule World, ExpansionSettings and set someone's expansion based on the client they're using RULE_INT(World, PVPSettings, 0) // Sets the PVP settings for the server, 1 = Rallos Zek RuleSet, 2 = Tallon/Vallon Zek Ruleset, 4 = Sullon Zek Ruleset, 6 = Discord Ruleset, anything above 6 is the Discord Ruleset without the no-drop restrictions removed. TODO: Edit IsAttackAllowed in Zone to accomodate for these rules. RULE_BOOL (World, IsGMPetitionWindowEnabled, false) RULE_INT (World, FVNoDropFlag, 0) // Sets the Firiona Vie settings on the client. If set to 2, the flag will be set for GMs only, allowing trading of no-drop items. @@ -444,6 +448,7 @@ RULE_BOOL(Combat, OneProcPerWeapon, true) //If enabled, One proc per weapon per RULE_BOOL(Combat, ProjectileDmgOnImpact, true) //If enabled, projectiles (ie arrows) will hit on impact, instead of instantly. RULE_BOOL(Combat, MeleePush, true) // enable melee push RULE_INT(Combat, MeleePushChance, 50) // (NPCs) chance the target will be pushed. Made up, 100 actually isn't that bad +RULE_BOOL(Combat, UseLiveCombatRounds, true) // turn this false if you don't want to worry about fixing up combat rounds for NPCs RULE_CATEGORY_END() RULE_CATEGORY(NPC) @@ -501,6 +506,8 @@ RULE_INT(Bots, BotAAExpansion, 8) // Bots get AAs through this expansion RULE_BOOL(Bots, BotGroupXP, false) // Determines whether client gets xp for bots outside their group. RULE_BOOL(Bots, BotBardUseOutOfCombatSongs, true) // Determines whether bard bots use additional out of combat songs. RULE_BOOL(Bots, BotLevelsWithOwner, false) // Auto-updates spawned bots as owner levels/de-levels (false is original behavior) +RULE_BOOL(Bots, BotCharacterLevelEnabled, false) // Enables required level to spawn bots +RULE_INT(Bots, BotCharacterLevel, 0) // 0 as default (if level > this value you can spawn bots if BotCharacterLevelEnabled is true) RULE_CATEGORY_END() #endif diff --git a/common/servertalk.h b/common/servertalk.h index 586712110..562e542ac 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -761,6 +761,7 @@ typedef enum { struct LauncherZoneRequest { uint8 command; char short_name[33]; + uint16 port; }; struct LauncherZoneStatus { diff --git a/common/shareddb.cpp b/common/shareddb.cpp index 40bb471d4..7301346c9 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -1662,6 +1662,7 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) { sp[tempid].not_extendable = atoi(row[197]) != 0; sp[tempid].suspendable = atoi(row[200]) != 0; sp[tempid].viral_range = atoi(row[201]); + sp[tempid].songcap = atoi(row[202]); sp[tempid].no_block = atoi(row[205]); sp[tempid].spellgroup=atoi(row[207]); sp[tempid].rank = atoi(row[208]); @@ -1992,7 +1993,7 @@ const LootDrop_Struct* SharedDatabase::GetLootDrop(uint32 lootdrop_id) { void SharedDatabase::LoadCharacterInspectMessage(uint32 character_id, InspectMessage_Struct* message) { std::string query = StringFormat("SELECT `inspect_message` FROM `character_inspect_messages` WHERE `id` = %u LIMIT 1", character_id); - auto results = QueryDatabase(query); + auto results = QueryDatabase(query); auto row = results.begin(); memset(message, '\0', sizeof(InspectMessage_Struct)); for (auto row = results.begin(); row != results.end(); ++row) { @@ -2002,7 +2003,7 @@ void SharedDatabase::LoadCharacterInspectMessage(uint32 character_id, InspectMes void SharedDatabase::SaveCharacterInspectMessage(uint32 character_id, const InspectMessage_Struct* message) { std::string query = StringFormat("REPLACE INTO `character_inspect_messages` (id, inspect_message) VALUES (%u, '%s')", character_id, EscapeString(message->text).c_str()); - auto results = QueryDatabase(query); + auto results = QueryDatabase(query); } void SharedDatabase::GetBotInspectMessage(uint32 botid, InspectMessage_Struct* message) { diff --git a/common/skills.h b/common/skills.h index 1fad4de3e..c79a522ee 100644 --- a/common/skills.h +++ b/common/skills.h @@ -108,16 +108,17 @@ enum SkillUseTypes /*13869*/ SkillBerserking, /*13902*/ SkillTaunt, /*05837*/ SkillFrenzy, // This appears to be the only listed one not grouped with the others -/*00000*/ _EmuSkillCount // move to last position of active enumeration labels // SoF+ specific skills -// /*03670*/ SkillRemoveTraps, -// /*13049*/ SkillTripleAttack, +/*03670*/ SkillRemoveTraps, +/*13049*/ SkillTripleAttack, // RoF2+ specific skills // /*00789*/ Skill2HPiercing, // /*01216*/ SkillNone, // This needs to move down as new skills are added +/*00000*/ _EmuSkillCount // move to last position of active enumeration labels + // Skill Counts // /*-----*/ _SkillCount_62 = 75, // use for Ti and earlier max skill checks // /*-----*/ _SkillCount_SoF = 77, // use for SoF thru RoF1 max skill checks @@ -170,7 +171,7 @@ enum SkillUseTypes }; // temporary until it can be sorted out... -#define HIGHEST_SKILL SkillFrenzy +#define HIGHEST_SKILL SkillTripleAttack // Spell Effects use this value to determine if an effect applies to all skills. #define ALL_SKILLS -1 diff --git a/common/spdat.cpp b/common/spdat.cpp index 7dd21479c..bb6097566 100644 --- a/common/spdat.cpp +++ b/common/spdat.cpp @@ -447,7 +447,7 @@ bool IsTGBCompatibleSpell(uint16 spell_id) bool IsBardSong(uint16 spell_id) { - if (IsValidSpell(spell_id) && spells[spell_id].classes[BARD - 1] < 127 && !spells[spell_id].IsDisciplineBuff) + if (IsValidSpell(spell_id) && spells[spell_id].classes[BARD - 1] < 255 && !spells[spell_id].IsDisciplineBuff) return true; return false; diff --git a/common/spdat.h b/common/spdat.h index bf2d23f30..938b659e1 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -381,47 +381,47 @@ typedef enum { #define SE_GiveDoubleAttack 225 // implemented[AA] - Allow any class to double attack with set chance. #define SE_TwoHandBash 226 // *not implemented as bonus #define SE_ReduceSkillTimer 227 // implemented -//#define SE_ReduceFallDamage 228 // not implented as bonus - reduce the damage that you take from falling +#define SE_ReduceFallDamage 228 // not implented as bonus - reduce the damage that you take from falling #define SE_PersistantCasting 229 // implemented -//#define SE_ExtendedShielding 230 // not used as bonus - increase range of /shield ability +#define SE_ExtendedShielding 230 // not used as bonus - increase range of /shield ability #define SE_StunBashChance 231 // implemented - increase chance to stun from bash. #define SE_DivineSave 232 // implemented (base1 == % chance on death to insta-res) (base2 == spell cast on save) #define SE_Metabolism 233 // implemented - Modifies food/drink consumption rates. -//#define SE_ReduceApplyPoisonTime 234 // not implemented as bonus - reduces the time to apply poison +#define SE_ReduceApplyPoisonTime 234 // not implemented as bonus - reduces the time to apply poison #define SE_ChannelChanceSpells 235 // implemented[AA] - chance to channel from SPELLS *No longer used on live. //#define SE_FreePet 236 // not used #define SE_GivePetGroupTarget 237 // implemented[AA] - (Pet Affinity) #define SE_IllusionPersistence 238 // implemented - lends persistence to your illusionary disguises, causing them to last until you die or the illusion is forcibly removed. -//#define SE_FeignedCastOnChance 239 // *not implemented as bonus - ability gives you an increasing chance for your feigned deaths to not be revealed by spells cast upon you. +#define SE_FeignedCastOnChance 239 // *not implemented as bonus - ability gives you an increasing chance for your feigned deaths to not be revealed by spells cast upon you. //#define SE_StringUnbreakable 240 // not used [Likely related to above - you become immune to feign breaking on a resisted spell and have a good chance of feigning through a spell that successfully lands upon you.] #define SE_ImprovedReclaimEnergy 241 // implemented - increase the amount of mana returned to you when reclaiming your pet. #define SE_IncreaseChanceMemwipe 242 // implemented - increases the chance to wipe hate with memory blurr #define SE_CharmBreakChance 243 // implemented - Total Domination #define SE_RootBreakChance 244 // implemented[AA] reduce the chance that your root will break. -//#define SE_TrapCircumvention 245 // *not implemented[AA] - decreases the chance that you will set off a trap when opening a chest +#define SE_TrapCircumvention 245 // *not implemented[AA] - decreases the chance that you will set off a trap when opening a chest #define SE_SetBreathLevel 246 // *not implemented as bonus #define SE_RaiseSkillCap 247 // *not implemented[AA] - adds skill over the skill cap. -//#define SE_SecondaryForte 248 // not implemented as bonus(gives you a 2nd specialize skill that can go past 50 to 100) +#define SE_SecondaryForte 248 // not implemented as bonus(gives you a 2nd specialize skill that can go past 50 to 100) #define SE_SecondaryDmgInc 249 // implemented[AA] Allows off hand weapon to recieve a damage bonus (Sinister Strikes) #define SE_SpellProcChance 250 // implemented - Increase chance to proc from melee proc spells (ie Spirit of Panther) #define SE_ConsumeProjectile 251 // implemented[AA] - chance to not consume an arrow (ConsumeProjectile = 100) #define SE_FrontalBackstabChance 252 // implemented[AA] - chance to perform a full damage backstab from front. #define SE_FrontalBackstabMinDmg 253 // implemented[AA] - allow a frontal backstab for mininum damage. #define SE_Blank 254 // implemented -//#define SE_ShieldDuration 255 // not implemented as bonus - increases duration of /shield -//#define SE_ShroudofStealth 256 // not implemented as bonus - rogue improved invs -//#define SE_PetDiscipline 257 // not implemented as bonus - /pet hold +#define SE_ShieldDuration 255 // not implemented as bonus - increases duration of /shield +#define SE_ShroudofStealth 256 // not implemented as bonus - rogue improved invs +#define SE_PetDiscipline 257 // not implemented as bonus - /pet hold #define SE_TripleBackstab 258 // implemented[AA] - chance to perform a triple backstab #define SE_CombatStability 259 // implemented[AA] - damage mitigation #define SE_AddSingingMod 260 // implemented[AA] - Instrument/Singing Mastery, base1 is the mod, base2 is the ItemType #define SE_SongModCap 261 // implemented[AA] - Song Mod cap increase (no longer used on live) #define SE_RaiseStatCap 262 // implemented -//#define SE_TradeSkillMastery 263 // not implemented - lets you raise more than one tradeskill above master. -//#define SE_HastenedAASkill 264 // not implemented as bonus - Use redux field in aa_actions table for this effect +#define SE_TradeSkillMastery 263 // not implemented - lets you raise more than one tradeskill above master. +#define SE_HastenedAASkill 264 // implemented #define SE_MasteryofPast 265 // implemented[AA] - Spells less than effect values level can not be fizzled #define SE_ExtraAttackChance 266 // implemented - increase chance to score an extra attack with a 2-Handed Weapon. #define SE_PetDiscipline2 267 // *not implemented - /pet focus, /pet no cast -//#define SE_ReduceTradeskillFail 268 // *not implemented? - reduces chance to fail with given tradeskill by a percent chance +#define SE_ReduceTradeskillFail 268 // *not implemented? - reduces chance to fail with given tradeskill by a percent chance #define SE_MaxBindWound 269 // implemented[AA] - Increase max HP you can bind wound. #define SE_BardSongRange 270 // implemented[AA] - increase range of beneficial bard songs (Sionachie's Crescendo) #define SE_BaseMovementSpeed 271 // implemented[AA] - mods basemove speed, doesn't stack with other move mods @@ -434,14 +434,14 @@ typedef enum { #define SE_FinishingBlow 278 // implemented[AA] - chance to do massive damage under 10% HP (base1 = chance, base2 = damage) #define SE_Flurry 279 // implemented #define SE_PetFlurry 280 // implemented[AA] -//#define SE_FeignedMinion 281 // *not implemented[AA] ability allows you to instruct your pet to feign death via the '/pet feign' command. value = succeed chance +#define SE_FeignedMinion 281 // *not implemented[AA] ability allows you to instruct your pet to feign death via the '/pet feign' command. value = succeed chance #define SE_ImprovedBindWound 282 // implemented[AA] - increase bind wound amount by percent. #define SE_DoubleSpecialAttack 283 // implemented[AA] - Chance to perform second special attack as monk //#define SE_LoHSetHeal 284 // not used -//#define SE_NimbleEvasion 285 // *not implemented - base1 = 100 for max +#define SE_NimbleEvasion 285 // *not implemented - base1 = 100 for max #define SE_FcDamageAmt 286 // implemented - adds direct spell damage #define SE_SpellDurationIncByTic 287 // implemented -#define SE_SpecialAttackKBProc 288 // implemented[AA] - Chance to to do a knockback from special attacks [AA Dragon Punch]. +#define SE_SkillAttackProc 288 // implemented[AA] - Chance to proc spell on skill attack usage (ex. Dragon Punch) #define SE_CastOnFadeEffect 289 // implemented - Triggers only if fades after natural duration. #define SE_IncreaseRunSpeedCap 290 // implemented[AA] - increases run speed over the hard cap #define SE_Purify 291 // implemented - Removes determental effects @@ -515,8 +515,8 @@ typedef enum { //#define SE_PassiveSenseTrap 359 // *not implemented - Invulnerability (Brell's Blessing) #define SE_ProcOnKillShot 360 // implemented - a buff that has a base1 % to cast spell base2 when you kill a "challenging foe" base3 min level #define SE_SpellOnDeath 361 // implemented - casts spell on death of buffed -//#define SE_PotionBeltSlots 362 // *not implemented[AA] 'Quick Draw' expands the potion belt by one additional available item slot per rank. -//#define SE_BandolierSlots 363 // *not implemented[AA] 'Battle Ready' expands the bandolier by one additional save slot per rank. +#define SE_PotionBeltSlots 362 // *not implemented[AA] 'Quick Draw' expands the potion belt by one additional available item slot per rank. +#define SE_BandolierSlots 363 // *not implemented[AA] 'Battle Ready' expands the bandolier by one additional save slot per rank. #define SE_TripleAttackChance 364 // implemented #define SE_ProcOnSpellKillShot 365 // implemented - chance to trigger a spell on kill when the kill is caused by a specific spell with this effect in it (10470 Venin) #define SE_ShieldEquipDmgMod 366 // implemented[AA] Damage modifier to melee if shield equiped. (base1 = dmg mod , base2 = ?) ie Shield Specialist AA @@ -525,7 +525,7 @@ typedef enum { #define SE_CorruptionCounter 369 // implemented #define SE_ResistCorruption 370 // implemented #define SE_AttackSpeed4 371 // implemented - stackable slow effect 'Inhibit Melee' -//#define SE_ForageSkill 372 // *not implemented[AA] Will increase the skill cap for those that have the Forage skill and grant the skill and raise the cap to those that do not. +#define SE_ForageSkill 372 // *not implemented[AA] Will increase the skill cap for those that have the Forage skill and grant the skill and raise the cap to those that do not. #define SE_CastOnFadeEffectAlways 373 // implemented - Triggers if fades after natural duration OR from rune/numhits fades. #define SE_ApplyEffect 374 // implemented #define SE_DotCritDmgIncrease 375 // implemented - Increase damage of DoT critical amount @@ -544,7 +544,7 @@ typedef enum { //#define SE_SummonCorpseZone 388 // *not implemented - summons a corpse from any zone(nec AA) #define SE_FcTimerRefresh 389 // implemented - Refresh spell icons //#define SE_FcTimerLockout 390 // *not implemented - Sets recast timers to specific value, focus limited. -#define SE_MeleeVulnerability 391 // implemented [Live SPA has this as LimitManaMax however that is clearly not the effect used] +#define SE_LimitManaMax 391 // implemented #define SE_FcHealAmt 392 // implemented - Adds or removes healing from spells #define SE_FcHealPctIncoming 393 // implemented - HealRate with focus restrictions. #define SE_FcHealAmtIncoming 394 // implemented - Adds/Removes amount of healing on target by X value with foucs restrictions. @@ -579,7 +579,7 @@ typedef enum { #define SE_LimitUseType 423 // implemented - limit a focus to require a certain numhits type #define SE_GravityEffect 424 // implemented - Pulls/pushes you toward/away the mob at a set pace //#define SE_Display 425 // *not implemented - Illusion: Flying Dragon(21626) -//#define SE_IncreaseExtTargetWindow 426 // *not implmented[AA] - increases the capacity of your extended target window +#define SE_IncreaseExtTargetWindow 426 // *not implmented[AA] - increases the capacity of your extended target window #define SE_SkillProc 427 // implemented - chance to proc when using a skill(ie taunt) #define SE_LimitToSkill 428 // implemented - limits what skills will effect a skill proc #define SE_SkillProcSuccess 429 // implemented - chance to proc when tje skill in use successfully fires. @@ -735,8 +735,8 @@ struct SPDat_Spell_Struct /* 198- 199 */ /* 200 */ bool suspendable; // buff is suspended in suspended buff zones /* 201 */ int viral_range; -/* 202 */ -/* 203 */ //int songcap; // individual song cap (how live currently does it, not implemented) +/* 202 */ int songcap; // individual song cap +/* 203 */ /* 204 */ /* 205 */ bool no_block; /* 206 */ diff --git a/common/version.h b/common/version.h index 1813f77c3..11a18cd0d 100644 --- a/common/version.h +++ b/common/version.h @@ -30,7 +30,7 @@ Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt */ -#define CURRENT_BINARY_DATABASE_VERSION 9083 +#define CURRENT_BINARY_DATABASE_VERSION 9086 #define COMPILE_DATE __DATE__ #define COMPILE_TIME __TIME__ #ifndef WIN32 diff --git a/eqlaunch/eqlaunch.cpp b/eqlaunch/eqlaunch.cpp index 76c9b48d1..952b6198b 100644 --- a/eqlaunch/eqlaunch.cpp +++ b/eqlaunch/eqlaunch.cpp @@ -102,8 +102,6 @@ int main(int argc, char *argv[]) { Log.Out(Logs::Detail, Logs::Launcher, "Starting main loop..."); -// zones["test"] = new ZoneLaunch(&world, "./zone", "dynamic_1"); - ProcLauncher *launch = ProcLauncher::get(); RunLoops = true; while(RunLoops) { diff --git a/eqlaunch/worldserver.cpp b/eqlaunch/worldserver.cpp index a4b27a983..c1bc0fc42 100644 --- a/eqlaunch/worldserver.cpp +++ b/eqlaunch/worldserver.cpp @@ -86,14 +86,13 @@ void WorldServer::Process() { } const LauncherZoneRequest *lzr = (const LauncherZoneRequest *) pack->pBuffer; - switch(ZoneRequestCommands(lzr->command)) { case ZR_Start: { if(m_zones.find(lzr->short_name) != m_zones.end()) { Log.Out(Logs::Detail, Logs::Launcher, "World told us to start zone %s, but it is already running.", lzr->short_name); } else { Log.Out(Logs::Detail, Logs::Launcher, "World told us to start zone %s.", lzr->short_name); - ZoneLaunch *l = new ZoneLaunch(this, m_name, lzr->short_name, m_config); + ZoneLaunch *l = new ZoneLaunch(this, m_name, lzr->short_name, lzr->port, m_config); m_zones[lzr->short_name] = l; } break; diff --git a/eqlaunch/zone_launch.cpp b/eqlaunch/zone_launch.cpp index 8c1e62223..974cf5b3d 100644 --- a/eqlaunch/zone_launch.cpp +++ b/eqlaunch/zone_launch.cpp @@ -34,10 +34,11 @@ void ZoneLaunch::InitStartTimer() { } ZoneLaunch::ZoneLaunch(WorldServer *world, const char *launcher_name, -const char *zone_name, const EQEmuConfig *config) +const char *zone_name, uint16 port, const EQEmuConfig *config) : m_state(StateStartPending), m_world(world), m_zone(zone_name), + m_port(port), m_launcherName(launcher_name), m_config(config), m_timer(config->RestartWait), @@ -61,10 +62,14 @@ void ZoneLaunch::SendStatus() const { void ZoneLaunch::Start() { ProcLauncher::Spec *spec = new ProcLauncher::Spec(); spec->program = m_config->ZoneExe; -// if(m_zone.substr(0,7) == "dynamic") -// spec->args.push_back("."); -// else - spec->args.push_back(m_zone); + + if(m_port) { + std::string arg = m_zone + std::string(":") + std::to_string(m_port); + spec->args.push_back(arg); + } else { + spec->args.push_back(m_zone); + } + spec->args.push_back(m_launcherName); spec->handler = this; spec->logFile = m_config->LogPrefix + m_zone + m_config->LogSuffix; diff --git a/eqlaunch/zone_launch.h b/eqlaunch/zone_launch.h index 3dc0fd697..ac48be92c 100644 --- a/eqlaunch/zone_launch.h +++ b/eqlaunch/zone_launch.h @@ -28,7 +28,7 @@ class EQEmuConfig; class ZoneLaunch : protected ProcLauncher::EventHandler { public: ZoneLaunch(WorldServer *world, const char *launcher_name, - const char *zone_name, const EQEmuConfig *config); + const char *zone_name, uint16 port, const EQEmuConfig *config); virtual ~ZoneLaunch(); void Stop(bool graceful = true); @@ -63,6 +63,7 @@ protected: const std::string m_zone; const char *const m_launcherName; const EQEmuConfig *const m_config; + const uint16 m_port; Timer m_timer; ProcLauncher::ProcRef m_ref; diff --git a/utils/patches/patch_RoF2.conf b/utils/patches/patch_RoF2.conf index 49f5f28b3..5e67f4c11 100644 --- a/utils/patches/patch_RoF2.conf +++ b/utils/patches/patch_RoF2.conf @@ -353,6 +353,7 @@ OP_OpenContainer=0x0000 OP_Marquee=0x502e OP_ItemRecastDelay=0x15a9 #OP_OpenInventory=0x0000 # Likely does not exist in RoF -U +OP_ResetAA=0x1669 # Expeditions OP_DzAddPlayer=0x4701 diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt index e7aa46221..7394c7863 100644 --- a/utils/sql/db_update_manifest.txt +++ b/utils/sql/db_update_manifest.txt @@ -337,6 +337,9 @@ 9081|2015_05_23_dbstr_us.sql|SHOW TABLES LIKE 'db_str'|empty| 9082|2015_05_25_npc_types_texture_fields.sql|SHOW COLUMNS FROM `npc_types` LIKE 'armtexture'|empty| 9083|2015_06_07_aa_update.sql|SHOW COLUMNS FROM `character_alternate_abilities` LIKE 'charges'|empty| +9084|2015_06_30_runspeed_adjustments.sql|SELECT `runspeed` FROM `npc_types` WHERE `runspeed` > 3|not_empty| +9085|2015_07_01_Marquee_Rule.sql|SELECT * FROM `rule_values` WHERE `rule_name` LIKE '%Character:MarqueeHPUpdates%'|empty| +9086|2015_07_02_aa_rework.sql|SHOW TABLES LIKE 'aa_ranks'|empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not diff --git a/utils/sql/git/optional/2015_06_28_RescaleRunspeeds_RunOnceOnly.sql b/utils/sql/git/optional/2015_06_28_RescaleRunspeeds_RunOnceOnly.sql new file mode 100644 index 000000000..2810d3291 --- /dev/null +++ b/utils/sql/git/optional/2015_06_28_RescaleRunspeeds_RunOnceOnly.sql @@ -0,0 +1,7 @@ +/* This rescales the old peq runspeeds which were about 80 percent too high to new values */ +/* This section should only ever be run once */ +UPDATE npc_types SET npc_types.runspeed = 1.050 WHERE (npc_types.runspeed > 0 and npc_types.runspeed < 1.2); +UPDATE npc_types SET npc_types.runspeed = 1.325 WHERE (npc_types.runspeed > 1.19 and npc_types.runspeed < 1.75 and race != 73 and race != 72); +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE (npc_types.runspeed > 1.69 and npc_types.runspeed < 2.2); +UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE (npc_types.runspeed > 2.19 and npc_types.runspeed < 3); +UPDATE npc_types SET npc_types.runspeed = (npc_types.runspeed * 0.8) WHERE (npc_types.runspeed > 2.99 and npc_types.runspeed < 20); \ No newline at end of file diff --git a/utils/sql/git/optional/2015_06_28_SetMobSpecificRunSpeeds_AfterAnyRescaling.sql b/utils/sql/git/optional/2015_06_28_SetMobSpecificRunSpeeds_AfterAnyRescaling.sql new file mode 100644 index 000000000..064c39ce4 --- /dev/null +++ b/utils/sql/git/optional/2015_06_28_SetMobSpecificRunSpeeds_AfterAnyRescaling.sql @@ -0,0 +1,61 @@ +/* some specific by name */ +UPDATE npc_types SET npc_types.runspeed = 3.175 WHERE npc_types.name = 'a_shadowed_man'; +UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE npc_types.name = 'aviak_egret'; +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE npc_types.name = 'froglok_hunter'; +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE npc_types.name = 'froglok_forager'; +/* rhinos */ +UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE npc_types.race = 135; +/* centaurs */ +UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE npc_types.race = 16; +/* griffins */ +UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE npc_types.race = 47; +/* wolves - use size, to not change cubs*/ +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE (npc_types.race = 42 and npc_types.size > 5); +/* sarnaks */ +UPDATE npc_types SET npc_types.runspeed = 1.325 WHERE npc_types.race = 131; +/* sabertooth tigers - use size, to not change cubs*/ +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE (npc_types.race = 119 and npc_types.size > 6); +/* lions */ +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE (npc_types.race = 50 and npc_types.size > 7); +/* panthers/pumas */ +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE npc_types.race = 76; +/* beetles */ +UPDATE npc_types SET npc_types.runspeed = 1.05 WHERE npc_types.race = 22; +/*leeches*/ +UPDATE npc_types SET npc_types.runspeed = 1.05 WHERE npc_types.race = 104; +/*a_brontotherium*/ +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE npc_types.race = 169; +/* raptors */ +UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE npc_types.race = 163; +/* vicious plants */ +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE npc_types.race = 162; +/* western wastes, drakes, cragwyrms and wyvern */ +UPDATE npc_types +JOIN spawnentry ON npc_types.id = spawnentry.npcID +JOIN spawn2 ON spawn2.spawngroupID = spawnentry.spawngroupID +SET npc_types.runspeed = 1.575 +WHERE ((npc_types.race = 89 OR npc_types.race = 157 OR npc_types.race = 158) AND spawn2.zone = 'westwastes'); +/* velium hounds/wolves */ +UPDATE npc_types +JOIN spawnentry ON npc_types.id = spawnentry.npcID +JOIN spawn2 ON spawn2.spawngroupID = spawnentry.spawngroupID +SET npc_types.runspeed = 1.850 +WHERE (npc_types.race = 42 AND spawn2.zone = 'westwastes'); +/* Overthere Specials, goons, etc. */ +UPDATE npc_types +JOIN spawnentry ON npc_types.id = spawnentry.npcID +JOIN spawn2 ON spawn2.spawngroupID = spawnentry.spawngroupID +SET npc_types.runspeed = 1.850 +WHERE ((npc_types.race = 77 or npc_types.race = 147) AND spawn2.zone = 'overthere'); +UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE npc_types.name = 'Captain_Rottgrime'; +UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE npc_types.name = 'an_undead_marine'; +/* Pet Speeds. */ +UPDATE npc_types +JOIN pets ON npc_types.id = pets.npcID +SET npc_types.runspeed = 1.575; +/* raptors in tim are slower than other raptors in kunark */ +UPDATE npc_types +JOIN spawnentry ON npc_types.id = spawnentry.npcID +JOIN spawn2 ON spawn2.spawngroupID = spawnentry.spawngroupID +SET npc_types.runspeed = 1.325 +WHERE ( npc_types.race = 163 AND spawn2.zone = 'timorous' ); diff --git a/utils/sql/git/optional/2015_07_05_LiveCombatRounds.sql b/utils/sql/git/optional/2015_07_05_LiveCombatRounds.sql new file mode 100644 index 000000000..2a5377656 --- /dev/null +++ b/utils/sql/git/optional/2015_07_05_LiveCombatRounds.sql @@ -0,0 +1 @@ +INSERT INTO `rule_values` (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES (1, 'Combat:UseLiveCombatRounds', 'true', 'If true use live NPC combat rules, false will use old rules.'); diff --git a/utils/sql/git/optional/2015_07_06_TripleAttack.sql b/utils/sql/git/optional/2015_07_06_TripleAttack.sql new file mode 100644 index 000000000..e5061e108 --- /dev/null +++ b/utils/sql/git/optional/2015_07_06_TripleAttack.sql @@ -0,0 +1,27 @@ +DELIMITER $$ +DROP PROCEDURE IF EXISTS GrantTripleAttack$$ +CREATE PROCEDURE GrantTripleAttack() + BEGIN + DECLARE finished INT; + DECLARE char_id INT; + DECLARE skill_max INT; + DECLARE cur CURSOR FOR SELECT character_data.id, skill_caps.cap FROM `character_data` LEFT JOIN `skill_caps` ON character_data.`level` = skill_caps.`level` AND character_data.class = skill_caps.class AND skill_caps.skillID = 76; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; + + OPEN cur; + + SET finished = 0; + REPEAT + FETCH cur INTO char_id, skill_max; + + IF skill_max IS NOT NULL AND skill_max > 0 THEN + REPLACE INTO `character_skills` (`id`, `skill_id`, `value`) VALUES(char_id, 76, skill_max); + END IF; + UNTIL finished END REPEAT; + + CLOSE cur; + END$$ +DELIMITER ; + +CALL GrantTripleAttack(); +DROP PROCEDURE GrantTripleAttack; diff --git a/utils/sql/git/required/2015_06_30_runspeed_adjustments.sql b/utils/sql/git/required/2015_06_30_runspeed_adjustments.sql new file mode 100644 index 000000000..f3feaec1a --- /dev/null +++ b/utils/sql/git/required/2015_06_30_runspeed_adjustments.sql @@ -0,0 +1,7 @@ +/* This rescales the old peq runspeeds which were about 80 percent too high to new values */ +/* This section should only ever be run once */ +UPDATE npc_types SET npc_types.runspeed = 1.050 WHERE (npc_types.runspeed > 0 and npc_types.runspeed < 1.2); +UPDATE npc_types SET npc_types.runspeed = 1.325 WHERE (npc_types.runspeed > 1.19 and npc_types.runspeed < 1.75 and race != 73 and race != 72); +UPDATE npc_types SET npc_types.runspeed = 1.575 WHERE (npc_types.runspeed > 1.69 and npc_types.runspeed < 2.2); +UPDATE npc_types SET npc_types.runspeed = 1.850 WHERE (npc_types.runspeed > 2.19 and npc_types.runspeed < 3); +UPDATE npc_types SET npc_types.runspeed = 3 WHERE npc_types.runspeed > 3; \ No newline at end of file diff --git a/utils/sql/git/required/2015_07_01_Marquee_Rule.sql b/utils/sql/git/required/2015_07_01_Marquee_Rule.sql new file mode 100644 index 000000000..039a34412 --- /dev/null +++ b/utils/sql/git/required/2015_07_01_Marquee_Rule.sql @@ -0,0 +1 @@ +INSERT INTO `rule_values` (`rule_name`, `rule_value`, `notes`) VALUES ('Character:MarqueeHPUpdates', 'false', 'Will show Health % in center of screen < 100%'); \ No newline at end of file diff --git a/utils/sql/git/required/2015_07_02_aa_rework.sql b/utils/sql/git/required/2015_07_02_aa_rework.sql new file mode 100644 index 000000000..77dde6b86 --- /dev/null +++ b/utils/sql/git/required/2015_07_02_aa_rework.sql @@ -0,0 +1,20679 @@ +DROP TABLE IF EXISTS `aa_ability`; +CREATE TABLE IF NOT EXISTS `aa_ability` ( + `id` int(10) unsigned NOT NULL, + `name` text NOT NULL, + `category` int(10) NOT NULL DEFAULT '-1', + `classes` int(10) NOT NULL DEFAULT '65535', + `races` int(10) NOT NULL DEFAULT '65535', + `drakkin_heritage` int(10) NOT NULL DEFAULT '127', + `deities` int(10) NOT NULL DEFAULT '131071', + `status` int(10) NOT NULL DEFAULT '0', + `type` int(10) NOT NULL DEFAULT '0', + `charges` int(11) NOT NULL DEFAULT '0', + `grant_only` tinyint(4) NOT NULL DEFAULT '0', + `first_rank_id` int(10) NOT NULL DEFAULT '-1', + `enabled` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO `aa_ability` (`id`, `name`, `category`, `classes`, `races`, `drakkin_heritage`, `deities`, `status`, `type`, `charges`, `grant_only`, `first_rank_id`, `enabled`) VALUES + (0, 'Unknown AA -1', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 49999, 1), + (1, 'Innate Strength', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 2, 1), + (2, 'Innate Stamina', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 7, 1), + (3, 'Innate Agility', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 12, 1), + (4, 'Innate Dexterity', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 17, 1), + (5, 'Innate Intelligence', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 22, 1), + (6, 'Innate Wisdom', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 27, 1), + (7, 'Innate Charisma', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 32, 1), + (8, 'Innate Fire Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 37, 1), + (9, 'Innate Cold Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 42, 1), + (10, 'Innate Magic Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 47, 1), + (11, 'Innate Poison Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 52, 1), + (12, 'Innate Disease Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 57, 1), + (13, 'Innate Run Speed', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 62, 1), + (15, 'Innate Metabolism', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 68, 1), + (16, 'Innate Lung Capacity', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 71, 1), + (17, 'First Aid', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 74, 1), + (18, 'Healing Adept', -1, 16942, 65535, 127, 131071, 0, 2, 0, 0, 77, 1), + (19, 'Healing Gift', -1, 16942, 65535, 127, 131071, 0, 2, 0, 0, 80, 1), + (20, 'Spell Casting Mastery', -1, 15906, 65535, 127, 131071, 0, 2, 0, 0, 83, 1), + (21, 'Spell Casting Reinforcement', -1, 25150, 65535, 127, 131071, 0, 2, 0, 0, 86, 1), + (23, 'Spell Casting Fury', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 92, 1), + (25, 'Spell Casting Subtlety', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 98, 1), + (26, 'Spell Casting Expertise', -1, 15504, 65535, 127, 131071, 0, 2, 0, 0, 101, 1), + (27, 'Spell Casting Deftness', -1, 7184, 65535, 127, 131071, 0, 2, 0, 0, 104, 1), + (28, 'Natural Durability', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 107, 1), + (29, 'Natural Healing', -1, 49629, 65535, 127, 131071, 0, 2, 0, 0, 110, 1), + (30, 'Combat Fury', -1, 16596, 65535, 127, 131071, 0, 2, 0, 0, 113, 1), + (31, 'Fear Resistance', -1, 49629, 65535, 127, 131071, 0, 2, 0, 0, 116, 1), + (32, 'Finishing Blow', -1, 49629, 65535, 127, 131071, 0, 2, 0, 0, 119, 1), + (33, 'Combat Stability', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 122, 1), + (34, 'Combat Agility', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 125, 1), + (35, 'Mass Group Buff', -1, 30254, 65535, 127, 131071, 0, 3, 0, 0, 128, 1), + (36, 'Divine Resurrection', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 129, 1), + (37, 'Innate Invis to Undead', -1, 1026, 65535, 127, 131071, 0, 3, 0, 0, 130, 1), + (38, 'Celestial Regeneration', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 131, 1), + (39, 'Bestow Divine Aura', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 132, 1), + (41, 'Purify Soul', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 136, 1), + (42, 'Quick Evacuation', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 137, 1), + (43, 'Exodus', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 140, 1), + (44, 'Quick Damage', -1, 6176, 65535, 127, 131071, 0, 3, 0, 0, 141, 1), + (45, 'Enhanced Root', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 144, 1), + (46, 'Dire Charm', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 145, 1), + (47, 'Cannibalization', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 146, 1), + (48, 'Quick Buff', -1, 25134, 65535, 127, 131071, 0, 2, 0, 0, 147, 1), + (49, 'Alchemy Mastery', 6, 512, 65535, 127, 131071, 0, 1, 0, 0, 150, 1), + (50, 'Rabid Bear', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 153, 1), + (52, 'Improved Familiar', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 155, 1), + (53, 'Nexus Gate', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 156, 1), + (55, 'Permanent Illusion', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 158, 1), + (56, 'Jewel Craft Mastery', 6, 8192, 65535, 127, 131071, 0, 1, 0, 0, 159, 1), + (57, 'Gather Mana', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 162, 1), + (58, 'Mend Companion', -1, 21504, 65535, 127, 131071, 0, 3, 0, 0, 163, 1), + (60, 'Frenzied Burnout', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 167, 1), + (61, 'Elemental Form: Fire', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 168, 1), + (62, 'Elemental Form: Water', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 171, 1), + (63, 'Elemental Form: Earth', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 174, 1), + (64, 'Elemental Form: Air', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 177, 1), + (67, 'Elemental Pact', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 182, 1), + (68, 'Life Burn', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 183, 1), + (69, 'Dead Mesmerization', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 184, 1), + (70, 'Fear Storm', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 185, 1), + (71, 'Flesh to Bone', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 186, 1), + (72, 'Call to Corpse', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 187, 1), + (73, 'Divine Stun', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 188, 1), + (75, 'Slay Undead', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 190, 1), + (76, 'Act of Valor', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 193, 1), + (77, 'Holy Steed', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 194, 1), + (78, 'Fearless', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 195, 1), + (79, '2 Hand Bash', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 196, 1), + (80, 'Innate Camouflage', -1, 40, 65535, 127, 131071, 0, 3, 0, 0, 197, 1), + (81, 'Ambidexterity', -1, 16841, 65535, 127, 131071, 0, 3, 0, 0, 198, 1), + (82, 'Archery Mastery', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 199, 1), + (84, 'Endless Quiver', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 205, 1), + (85, 'Unholy Steed', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 206, 1), + (87, 'Leech Touch', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 208, 1), + (89, 'Soul Abrasion', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 210, 1), + (90, 'Instrument Mastery', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 213, 1), + (94, 'Jam Fest', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 225, 1), + (97, 'Critical Mend', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 230, 1), + (98, 'Purify Body', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 233, 1), + (100, 'Rapid Feign', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 237, 1), + (101, 'Return Kick', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 240, 1), + (102, 'Escape', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 243, 1), + (103, 'Poison Mastery', 6, 256, 65535, 127, 131071, 0, 1, 0, 0, 244, 1), + (104, 'Double Riposte', -1, 49501, 65535, 127, 131071, 0, 2, 0, 0, 247, 1), + (107, 'Purge Poison', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 254, 1), + (108, 'Flurry', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 255, 1), + (109, 'Rampage', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 258, 1), + (110, 'Area Taunt', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 259, 1), + (111, 'War Cry', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 260, 1), + (112, 'Bandage Wound', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 263, 1), + (114, 'Spell Casting Fury Mastery', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 267, 1), + (116, 'Dragon Punch', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 273, 1), + (117, 'Strong Root', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 274, 1), + (118, 'Singing Mastery', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 275, 1), + (119, 'Body and Mind Rejuvenation', -1, 16540, 65535, 127, 131071, 0, 3, 0, 0, 278, 1), + (120, 'Physical Enhancement', -1, 49629, 65535, 127, 131071, 0, 3, 0, 0, 279, 1), + (121, 'Adv. Trap Negotiation', -1, 384, 65535, 127, 131071, 0, 3, 0, 0, 280, 1), + (122, 'Acrobatics', -1, 448, 65535, 127, 131071, 0, 3, 0, 0, 283, 1), + (123, 'Scribble Notes', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 286, 1), + (124, 'Chaotic Stab', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 287, 1), + (125, 'Pet Discipline', -1, 22032, 65535, 127, 131071, 0, 3, 0, 0, 288, 1), + (126, 'Hobble of Spirits', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 289, 1), + (127, 'Frenzy of Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 290, 1), + (128, 'Paragon of Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 291, 1), + (129, 'Chains of Purity', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10348, 1), + (130, 'Resplendent Glory', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 8300, 1), + (131, 'Rage of Rallos Zek', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 8303, 1), + (132, 'Enhanced Area Taunt', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 8312, 1), + (133, 'Decapitation', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 14200, 1), + (134, 'Hastened Berserking Disciplines', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 14203, 1), + (135, 'Quiet Miracle', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14206, 1), + (136, 'Repel the Wicked', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14207, 1), + (137, 'Beacon of Life', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14208, 1), + (138, 'Blessed Chains', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14209, 1), + (139, 'Hastened Focused Celestial Regeneration', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14213, 1), + (140, 'Quickened Spirit Calling', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14225, 1), + (141, 'New Tanaan Crafting Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 412, 1), + (142, 'Planar Power', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 418, 1), + (143, 'Planar Durability', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 423, 1), + (144, 'Innate Enlightenment', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 426, 1), + (146, 'Unknown AA 8001', 9, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8000, 0), + (147, 'Spiritual Rebuke', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14231, 1), + (148, 'Pathosis', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14232, 1), + (149, 'Preincarnation', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 14233, 1), + (150, 'Mastery of the Past', -1, 15504, 65535, 127, 131071, 0, 2, 0, 0, 446, 1), + (151, 'Spiritual Blessing', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14234, 1), + (152, 'Communion of the Cheetah', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14237, 1), + (153, 'Radiant Cure', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 459, 1), + (154, 'Hastened Divinity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 462, 1), + (156, 'Hastened Purification of the Soul', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 468, 1), + (157, 'Hastened Gathering', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 471, 1), + (158, 'Hastened Rabidity', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 474, 1), + (159, 'Hastened Exodus', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 477, 1), + (160, 'Hastened Root', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 480, 1), + (161, 'Hastened Mending', -1, 21504, 65535, 127, 131071, 0, 3, 0, 0, 483, 1), + (163, 'Hastened Instigation', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 489, 1), + (164, 'Hastened Rampage', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 492, 1), + (165, 'Hastened Purification of the Body', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 495, 1), + (166, 'Hasty Exit', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 498, 1), + (167, 'Hastened Purification', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 501, 1), + (168, 'Hastened Nature\'s Fury', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14241, 1), + (169, 'Divine Arbitration', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 507, 1), + (170, 'Wrath of the Wild', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 510, 1), + (171, 'Virulent Paralysis', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 513, 1), + (172, 'Harvest of Druzzil', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 516, 1), + (173, 'Eldritch Rune', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 517, 1), + (174, 'Servant of Ro', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 520, 1), + (175, 'Wake the Dead', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 523, 1), + (176, 'Suspended Minion', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 526, 1), + (177, 'Spirit Call', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 528, 1), + (178, 'Wrath of the Forest Walker', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14244, 1), + (179, 'Gift of Sylvan Spirits', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14249, 1), + (180, 'Hand of Piety', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 534, 1), + (181, 'Mithaniel\'s Binding', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 537, 1), + (182, 'Summon Personal Tribute Master', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5006, 1), + (183, 'Extended Vinelash Cascade', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14254, 1), + (184, 'Guardian of the Forest', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 545, 1), + (185, 'Spirit of the Wood', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 548, 1), + (186, 'Bestial Frenzy', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 551, 1), + (187, 'Harmonious Attack', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 556, 1), + (188, 'Knight\'s Advantage', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 561, 1), + (189, 'Ferocity', -1, 33097, 65535, 127, 131071, 0, 2, 0, 0, 564, 1), + (190, 'Viscid Roots', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 567, 1), + (193, 'Feigned Minion', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 574, 1), + (194, 'Unfailing Divinity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 577, 1), + (195, 'Animation Empathy', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 580, 1), + (196, 'Rush to Judgment', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 583, 1), + (197, 'Living Shield', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 586, 1), + (198, 'Consumption of the Soul', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 589, 1), + (199, 'Boastful Bellow', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 592, 1), + (200, 'Fervent Blessing', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 593, 1), + (201, 'Touch of the Wicked', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 596, 1), + (202, 'Punishing Blade', -1, 32841, 65535, 127, 131071, 0, 2, 0, 0, 599, 1), + (203, 'Speed of the Knight', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 602, 1), + (204, 'Shroud of Stealth', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 605, 1), + (205, 'Nimble Evasion', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 606, 1), + (206, 'Technique of Master Wu', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 611, 1), + (207, 'Host of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 616, 1), + (208, 'Call of Xuzl', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 619, 1), + (209, 'Hastened Stealth', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 622, 1), + (210, 'Ingenuity', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 625, 1), + (211, 'Fleet of Foot', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 628, 1), + (212, 'Fading Memories', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 630, 1), + (213, 'Tactical Mastery', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 631, 1), + (214, 'Theft of Life', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 634, 1), + (215, 'Fury of Magic', -1, 13858, 65535, 127, 131071, 0, 2, 0, 0, 637, 1), + (216, 'Extended Spirit of the Bear', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14259, 1), + (217, 'Project Illusion', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 643, 1), + (218, 'Headshot', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 644, 1), + (219, 'Entrap', -1, 40, 65535, 127, 131071, 0, 3, 0, 0, 645, 1), + (220, 'Sonic Displacement', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 13528, 1), + (221, 'Total Domination', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 649, 1), + (222, 'Stalwart Endurance', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 652, 1), + (223, 'Quick Summoning', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 655, 1), + (224, 'Mental Clarity', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 658, 1), + (225, 'Innate Regeneration', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 661, 1), + (227, 'Extended Notes', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 665, 1), + (228, 'Hastened Warder\'s Gift', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13463, 1), + (229, 'Improved Reclaim Energy', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 671, 1), + (230, 'Hastened Possum', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13449, 1), + (231, 'Shauri\'s Sonorious Clouding', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 13527, 1), + (232, 'Veil of the Underbrush', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14262, 1), + (233, 'Packrat', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 678, 1), + (234, 'Heightened Endurance ', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 683, 1), + (235, 'Weapon Affinity', -1, 49629, 65535, 127, 131071, 0, 2, 0, 0, 686, 1), + (236, 'Secondary Forte', -1, 15906, 65535, 127, 131071, 0, 2, 0, 0, 691, 1), + (237, 'Persistent Casting', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 692, 1), + (238, 'Tune of Pursuance', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 695, 1), + (239, 'Hastened Companion\'s Sacrifice', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13474, 1), + (240, 'Cheetah\'s Pounce', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13483, 1), + (241, 'Bloodlust', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13484, 1), + (242, 'Primal Fury', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 13485, 1), + (244, 'Lure of the Siren\'s Song', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 13529, 1), + (245, 'Bestial Alignment', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 718, 1), + (246, 'Hidden Communion of the Cheetah', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 14265, 1), + (247, 'Feral Swipe', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 723, 1), + (248, 'Warder\'s Fury', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 724, 1), + (249, 'Warder\'s Alacrity', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 729, 1), + (250, 'Pet Affinity', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 734, 1), + (251, 'Mastery of the Past', -1, 16942, 65535, 127, 131071, 0, 2, 0, 0, 735, 1), + (252, 'Spell Casting Subtlety', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 738, 1), + (254, 'Divine Avatar', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 746, 1), + (255, 'Exquisite Benediction', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 749, 1), + (256, 'Hastened Curing', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 754, 1), + (257, 'Nature\'s Boon', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 757, 1), + (258, 'Advanced Tracking', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 762, 1), + (259, 'Critical Affliction', -1, 18104, 65535, 127, 131071, 0, 2, 0, 0, 767, 1), + (260, 'Glacial Arrow', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 13549, 1), + (261, 'Doppelganger', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 773, 1), + (262, 'Enhanced Forgetfulness', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 776, 1), + (263, 'Mesmerization Mastery', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 781, 1), + (264, 'Quick Mass Group Buff', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 782, 1), + (265, 'Shared Health', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 785, 1), + (266, 'Elemental Fury', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 790, 1), + (267, 'Elemental Alacrity ', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 795, 1), + (268, 'Elemental Agility', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 800, 1), + (269, 'Elemental Durability', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 803, 1), + (270, 'Sinister Strikes', -1, 16841, 65535, 127, 131071, 0, 3, 0, 0, 806, 1), + (271, 'Strikethrough', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 807, 1), + (272, 'Stonewall', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 810, 1), + (273, 'Rapid Strikes ', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 815, 1), + (274, 'Kick Mastery', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 820, 1), + (275, 'Heightened Awareness', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 823, 1), + (276, 'Destructive Force ', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 828, 1), + (278, 'Death\'s Fury ', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 834, 1), + (279, 'Quickening of Death ', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 839, 1), + (280, 'Group Perfected Invisibility to Undead', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 14281, 1), + (281, 'Triple Backstab', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 846, 1), + (282, 'Hastened Piety', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 849, 1), + (283, 'Immobilizing Bash', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 852, 1), + (284, 'Vicious Smash', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 855, 1), + (285, 'Radiant Cure', -1, 4, 65535, 127, 131071, 0, 2, 0, 0, 860, 1), + (286, 'Purification ', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 863, 1), + (287, 'Precision of the Pathfinder', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 864, 1), + (288, 'Coat of Thistles', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 867, 1), + (289, 'Flaming Arrows', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 872, 1), + (290, 'Frost Arrows', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 875, 1), + (291, 'Perfected Invisibility to Undead', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 14282, 1), + (292, 'Trap Circumvention ', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 881, 1), + (293, 'Quickened Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 14283, 1), + (294, 'Virulent Venom ', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 888, 1), + (295, 'Extended Dreary Deeds', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 14286, 1), + (296, 'Intense Hatred', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 895, 1), + (297, 'Quickened Frenzied Burnout', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 14289, 1), + (299, 'Sturdiness', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 907, 1), + (300, 'Warlord\'s Tenacity ', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 912, 1), + (301, 'Strengthened Strike', -1, 9, 65535, 127, 131071, 0, 3, 0, 0, 915, 1), + (302, 'Extended Shielding', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 918, 1), + (303, 'Ro\'s Flaming Familiar ', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 921, 1), + (304, 'E\'ci\'s Icy Familiar ', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 922, 1), + (305, 'Druzzil\'s Mystical Familiar ', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 923, 1), + (306, 'Unknown AA 15819', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15819, 1), + (307, 'Ward of Destruction ', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 926, 1), + (308, 'Frenzied Devastation', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 931, 1), + (309, 'Combat Fury', -1, 32769, 65535, 127, 131071, 0, 2, 0, 0, 934, 1), + (310, 'Combat Fury', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 937, 1), + (311, 'Combat Fury', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 940, 1), + (312, 'Quickened Host of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 14292, 1), + (313, 'Hastened Companion\'s Relocation', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 14295, 1), + (314, 'Veteran\'s Wrath', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1047, 1), + (315, 'Planar Durability', -1, 32788, 65535, 127, 131071, 0, 3, 0, 0, 952, 1), + (316, 'Innate Enlightenment', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 955, 1), + (317, 'Dire Charm', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 960, 1), + (318, 'Dire Charm', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 961, 1), + (319, 'Touch of the Divine', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 962, 1), + (320, 'Swarm of Decay', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 967, 1), + (321, 'Call of the Ancients', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 970, 1), + (322, 'Innate See Invis', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1388, 1), + (323, 'Virulent Talon', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 14307, 1), + (324, 'Blacksmithing Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 979, 1), + (325, 'Baking Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 982, 1), + (326, 'Brewing Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 985, 1), + (327, 'Fletching Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 988, 1), + (328, 'Pottery Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 991, 1), + (329, 'Tailoring Mastery', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 994, 1), + (330, 'Salvage', 6, 65535, 65535, 127, 131071, 0, 1, 0, 0, 997, 1), + (331, 'Origin', 9, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1000, 1), + (333, 'Discordant Defiance', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1006, 1), + (334, 'Mystical Attuning', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1021, 1), + (335, 'Delay Death', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1026, 1), + (336, 'Earthen Brawn', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8263, 1), + (337, 'Unknown AA 15798', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15798, 1), + (338, 'Veteran\'s Wrath', -1, 16596, 65535, 127, 131071, 0, 2, 0, 0, 1041, 1), + (339, 'Veteran\'s Wrath', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1044, 1), + (340, 'Unknown AA 15833', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 15833, 1), + (341, 'Veteran\'s Wrath', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 1050, 1), + (342, 'Staff Block', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 14301, 1), + (343, 'Hastened Pestilent Paralysis', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14308, 1), + (344, 'Hastened Mercurial Torment', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14311, 1), + (345, 'Unknown AA 15768', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15768, 1), + (346, 'Unknown AA 15771', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 15771, 1), + (347, 'Mnemonic Retention', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 1071, 1), + (348, 'Expansive Mind', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 1072, 1), + (350, 'Death\'s Malaise', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14321, 1), + (351, 'Dying Grasp', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14322, 1), + (352, 'Arcane Tongues', 6, 15360, 65535, 127, 131071, 0, 2, 0, 0, 1089, 1), + (353, 'Master of Disguise', -1, 384, 65535, 127, 131071, 0, 3, 0, 0, 1092, 1), + (354, 'Slippery Attacks', -1, 16841, 65535, 127, 131071, 0, 2, 0, 0, 1093, 1), + (355, 'Unknown AA 15836', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 15836, 1), + (357, 'Unknown AA 16176', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16176, 1), + (358, 'Fury of Magic', -1, 16540, 65535, 127, 131071, 0, 2, 0, 0, 1107, 1), + (359, 'Dance of Blades', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1110, 1), + (360, 'Bloodthirsty Blade', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 13616, 1), + (361, 'Shield of Notes', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1116, 1), + (362, 'Roar of Thunder', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 1119, 1), + (363, 'Unknown AA 16179', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16179, 1), + (364, 'Persistent Minion', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 1122, 1), + (365, 'A Hole In Space', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 14323, 1), + (366, 'Advanced Pet Discipline', -1, 22032, 65535, 127, 131071, 0, 3, 0, 0, 1129, 1), + (367, 'Throwing Mastery', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1131, 1), + (368, 'Blur of Axes', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1134, 1), + (369, 'Hastened War Cry', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1137, 1), + (370, 'Dead Aim', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1140, 1), + (371, 'Frenzied Defense', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1166, 1), + (372, 'Tireless Sprint', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1146, 1), + (373, 'Desperation', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1149, 1), + (374, 'Untamed Rage', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1150, 1), + (375, 'Echoing Cries', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1155, 1), + (376, 'Distant Strike', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14372, 1), + (377, 'Earthen Stability', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8268, 1), + (378, 'Earthen Alacrity', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8273, 1), + (379, 'Earthen Artistry', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8278, 1), + (380, 'Earthen Sagacity', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8283, 1), + (381, 'Earthen Brilliance', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8288, 1), + (382, 'Earthen Allure', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8293, 1), + (383, 'Extended Spirit of the Wood', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12646, 1), + (384, 'Spirit of the Bear', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12651, 1), + (385, 'Twinheal', -1, 16942, 65535, 127, 131071, 0, 2, 0, 0, 12652, 1), + (386, 'Nature\'s Fury', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12661, 1), + (387, 'Blood Pact', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1178, 1), + (388, 'Shielding Resistance', -1, 16841, 65535, 127, 131071, 0, 2, 0, 0, 1181, 1), + (389, 'Healing Boon', -1, 518, 65535, 127, 131071, 0, 2, 0, 0, 1186, 1), + (390, 'Elemental Union', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 13695, 1), + (391, 'Celestial Hammer', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 1192, 1), + (392, 'Divine Retribution', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 1195, 1), + (393, 'Nature\'s Blessing', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12655, 1), + (394, 'Extended Convergence of Spirit', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12645, 1), + (395, 'Hastened Storm Strike', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12664, 1), + (396, 'Sanctuary', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 1209, 1), + (397, 'Destructive Fury', -1, 2048, 65535, 127, 131071, 0, 2, 0, 0, 1210, 1), + (398, 'Destructive Fury', -1, 13858, 65535, 127, 131071, 0, 2, 0, 0, 1213, 1), + (399, 'Unknown AA 16180', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16180, 1), + (400, 'Hastened Improved Twincast', -1, 14370, 65535, 127, 131071, 0, 3, 0, 0, 14331, 1), + (401, 'Extended Heel of Kanji', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 12688, 1), + (402, 'Extended Scaledfist', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 12691, 1), + (403, 'Paralytic Spores', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 14264, 1), + (404, 'Call of the Wild', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 1228, 1), + (405, 'Secondary Recall', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 1229, 1), + (406, 'Nature\'s Bounty', -1, 40, 65535, 127, 131071, 0, 3, 0, 0, 1230, 1), + (407, 'Extended Speed Focus', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 7884, 1), + (408, 'Extended Crystalpalm', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 7885, 1), + (409, 'Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1233, 1), + (410, 'Fists of Steel', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 12706, 1), + (411, 'Extended Deftdance', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12709, 1), + (412, 'Color Shock', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1239, 1), + (413, 'Mind Over Matter', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1242, 1), + (414, 'Soothing Words', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1245, 1), + (415, 'Hastened Deftdance', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12710, 1), + (416, 'Hastened Lyre Leap', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12713, 1), + (417, 'Hastened Quick Time', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12716, 1), + (418, 'Replenish Companion', -1, 21504, 65535, 127, 131071, 0, 3, 0, 0, 1126, 1), + (419, 'Extended Quick Time', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12719, 1), + (420, 'Imitate Death', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1255, 1), + (424, 'Extended Fierce Eye', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12720, 1), + (425, 'Hastened Fierce Eye', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12721, 1), + (426, 'Unknown AA 15904', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 15904, 1), + (427, 'Resounding Dirge', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 12737, 1), + (428, 'Death Peace', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 1272, 1), + (429, 'Unknown AA 15908', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15908, 1), + (430, 'Mercurial Torment', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 12766, 1), + (431, 'Pestilent Paralysis', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 12770, 1), + (432, 'Hastened Divine Companion Aura', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 12773, 1), + (433, 'Embalmer\'s Carapace', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 12778, 1), + (434, 'Steadfast Will', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 1284, 1), + (435, 'Shield Block', -1, 21, 65535, 127, 131071, 0, 2, 0, 0, 1287, 1), + (436, 'Hastened Encroaching Darkness', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 12779, 1), + (437, 'Tracking Mastery', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1296, 1), + (438, 'Expanding Darkness', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 12782, 1), + (439, 'Precision', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1304, 1), + (440, 'Nerves of Steel', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1307, 1), + (441, 'Aegis of Kildrukaun', -1, 5120, 65535, 127, 131071, 0, 3, 0, 0, 12785, 1), + (442, 'Touch of the Cursed', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 1313, 1), + (443, 'Bestial Bloodrage', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12804, 1), + (444, 'Companion\'s Sacrifice', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12807, 1), + (445, 'Shield Block', -1, 16384, 65535, 127, 131071, 0, 2, 0, 0, 12813, 1), + (446, 'Spiritual Channeling', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 1323, 1), + (447, 'Ancestral Aid', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 1327, 1), + (448, 'Extended Feralgia', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12816, 1), + (450, 'Hastened Protective Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12819, 1), + (451, 'Mind Crash', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1334, 1), + (452, 'Prolonged Destruction', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1337, 1), + (453, 'Summon Permutation Peddler', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 9032, 1), + (454, 'Hastened Empathic Fury', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12822, 1), + (455, 'Convergence of Spirits', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 13556, 1), + (456, 'Teleport Bind', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1343, 1), + (457, 'Quickened Paragon of Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12831, 1), + (458, 'Warder\'s Gift', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12837, 1), + (459, 'Gelid Rending', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12846, 1), + (460, 'Quickened Nature\'s Salve', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 12849, 1), + (462, 'Auspice of the Hunter', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1345, 1), + (463, 'Divine Guardian', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 13385, 1), + (464, 'Divine Peace', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 13388, 1), + (465, 'Savage Spirit', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1348, 1), + (466, 'Trials of Mata Muram', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1011, 1), + (467, 'Press the Attack', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 1351, 1), + (468, 'Crippling Strike', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1352, 1), + (469, 'Stunning Kick', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1355, 1), + (470, 'Eye Gouge', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1358, 1), + (471, 'Gift of the Dark Reign', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1361, 1), + (472, 'Tenacity of the Dark Reign', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1362, 1), + (473, 'Embrace of the Dark Reign', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1363, 1), + (474, 'Power of the Dark Reign', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1364, 1), + (475, 'Fervor of the Dark Reign', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1365, 1), + (476, 'Gift of the Keepers', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1366, 1), + (477, 'Valor of the Keepers', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1367, 1), + (478, 'Embrace of the Keepers', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1368, 1), + (479, 'Power of the Keepers', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1369, 1), + (480, 'Sanctity of the Keepers', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1370, 1), + (481, 'Lesson of the Devoted', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1371, 1), + (482, 'Infusion of the Faithful', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1372, 1), + (483, 'Chaotic Jester', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1373, 1), + (484, 'Expedient Recovery', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1374, 1), + (485, 'Steadfast Servant', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1375, 1), + (486, 'Staunch Recovery', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1376, 1), + (487, 'Intensity of the Resolute', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1377, 1), + (488, 'Curse of Blood', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1378, 1), + (489, 'Yaulp', -1, 6, 65535, 127, 131071, 0, 3, 0, 0, 13389, 1), + (490, 'Abscond', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12864, 1), + (491, 'Atol\'s Unresistable Shackles', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12865, 1), + (492, 'Dimensional Shield', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 12866, 1), + (493, 'Improved Sustained Destruction', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12867, 1), + (494, 'Silent Casting', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 1409, 1), + (495, 'Gift of Mana', -1, 15906, 65535, 127, 131071, 0, 2, 0, 0, 1435, 1), + (496, 'Field Dressing', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 1611, 1), + (497, 'Bandage Wounds', -1, 32766, 65535, 127, 131071, 0, 1, 0, 0, 1420, 1), + (498, 'Enhanced Aggression', -1, 49629, 65535, 127, 131071, 0, 2, 0, 0, 1592, 1), + (499, 'Cascading Rage', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1425, 1), + (500, 'Silent Casting', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 1404, 1), + (501, 'E\'ci\'s Icy Blessing', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12886, 1), + (503, 'Hastened Thunder', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 1471, 1), + (504, 'Conservation', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1453, 1), + (505, 'Cry of Battle', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 1458, 1), + (506, 'Ward of Purity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 1459, 1), + (507, 'Ro\'s Fiery Blessing', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12887, 1), + (508, 'Druzzil\'s Mystical Blessing', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12888, 1), + (509, 'Kerafyrm\'s Favor', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12889, 1), + (510, 'Kerafyrm\'s Prismatic Familiar', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12892, 1), + (511, 'Throne of Heroes', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 4665, 1), + (512, 'Translocational Anchor', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1630, 1), + (513, 'Hastened Phantasmal Opponent', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12894, 1), + (514, 'Pyromancy', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1478, 1), + (515, 'Improved Twincast', -1, 14370, 65535, 127, 131071, 0, 3, 0, 0, 12893, 1), + (516, 'Abundant Healing', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 1486, 1), + (517, 'Hastened First Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12902, 1), + (518, 'Shared Camouflage', -1, 40, 65535, 127, 131071, 0, 3, 0, 0, 1494, 1), + (519, 'Convergence of Spirits', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 1495, 1), + (520, 'Nature\'s Guardian', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 1498, 1), + (521, 'Edict of Command', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1501, 1), + (522, 'Extended Burnout', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1504, 1), + (523, 'Hastened Second Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12907, 1), + (524, 'Blood Magic', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 1510, 1), + (525, 'Graverobbing', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 1511, 1), + (526, 'Affliction Mastery', -1, 1568, 65535, 127, 131071, 0, 3, 0, 0, 1514, 1), + (527, 'Hastened Third Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12912, 1), + (528, 'Ancestral Guard', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 1520, 1), + (529, 'Cloak of Light', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 1523, 1), + (530, 'Profound Visage', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12920, 1), + (531, 'Cloak of Shadows', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 1527, 1), + (532, 'Willful Death', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 1528, 1), + (533, 'Unknown AA 16016', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 16016, 1), + (534, 'Calculated Insanity', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12931, 1), + (535, 'Crippling Aurora', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12937, 1), + (536, 'Appraisal', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1542, 1), + (537, 'Precise Strikes', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1543, 1), + (538, 'Hastened Death', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1546, 1), + (539, 'Unflinching Resolve', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1549, 1), + (540, 'Weightless Steps', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 1552, 1), + (541, 'Hastened Blades', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1555, 1), + (542, 'Unknown AA 16071', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 16071, 1), + (543, 'Diminutive Companion', -1, 20480, 65535, 127, 131071, 0, 3, 0, 0, 12941, 1), + (544, 'Song of Stone', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1569, 1), + (545, 'Deep Sleep', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 1572, 1), + (546, 'Companion\'s Gift', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1577, 1), + (547, 'Unknown AA 16081', -1, 15360, 65535, 127, 131071, 0, 3, 0, 0, 16081, 1), + (548, 'Hastened Defiance', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 1583, 1), + (549, 'Dauntless Perseverance', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 1591, 1), + (550, 'Steadfast Resolve', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 14275, 1), + (551, 'Hastened Mind Crash', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1414, 1), + (552, 'Call of Challenge', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 1597, 1), + (553, 'Cacophony', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1598, 1), + (554, 'Hastened Nightmare Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 14341, 1), + (555, 'Anatomy', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1604, 1), + (556, 'Scintillating Beam', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 14346, 1), + (557, 'Trick Shot', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1608, 1), + (558, 'Turn Undead', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 1383, 1), + (559, 'Turn Summoned', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1462, 1), + (560, 'Selo\'s Enduring Cadence', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1627, 1), + (561, 'Hastened Harvest of Druzzil', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12881, 1), + (562, 'Lightning Strikes', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1616, 1), + (563, 'Concentration', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 1588, 1), + (565, 'Mana Burn', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1638, 1), + (567, 'Unknown AA 16146', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16146, 1), + (568, 'Thief\'s Intuition', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1641, 1), + (569, 'Thief\'s Intuition', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1642, 1), + (570, 'Valiant Steed', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 1645, 1), + (571, 'Abyssal Steed', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 1646, 1), + (572, 'Holy Warhorse', -1, 4, 65535, 127, 131071, 0, 3, 0, 1, 1643, 1), + (573, 'Unholy Warhorse', -1, 16, 65535, 127, 131071, 0, 3, 0, 1, 1644, 1), + (574, 'Harmonic Dissonance', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 1647, 1), + (575, 'Tinkering Mastery', 6, 15639, 65535, 127, 131071, 0, 1, 0, 1, 4672, 1), + (576, 'Jewel Craft Mastery ', 6, 57343, 65535, 127, 131071, 0, 1, 0, 0, 4675, 1), + (577, 'Concussive Intuition', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 12885, 1), + (578, 'Glyph Spray', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12939, 1), + (579, 'Combat Medic ', -1, 32766, 65535, 127, 131071, 0, 1, 0, 0, 4688, 1), + (580, 'Hastened Outrider\'s Accuracy', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 13565, 1), + (581, 'Quick Draw', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 4698, 1), + (582, 'Battle Ready', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 4699, 1), + (583, 'Hastened Outrider\'s Evasion', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 13568, 1), + (584, 'Grasp of Sylvan Spirits', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 13571, 1), + (585, 'Glyph of Dragon Scales', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 4702, 1), + (586, 'Glyph of Indeterminable Reward', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 13788, 1), + (587, 'Glyph of Arcane Secrets', 7, 32318, 65535, 127, 131071, 0, 4, 1, 0, 4704, 1), + (588, 'Glyph of Draconic Potential', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 4705, 1), + (589, 'Glyph of Destruction', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 4706, 1), + (590, 'Breath of Atathus', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5150, 1), + (591, 'Breath of Draton\'ra', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5165, 1), + (592, 'Breath of Osh\'vir', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5180, 1), + (593, 'Breath of Venesh', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5195, 1), + (594, 'Breath of Mysaphar', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5210, 1), + (595, 'Breath of Keikolin', 8, 65535, 65535, 127, 131071, 0, 4, 0, 1, 5225, 1), + (596, 'Small Modulation Shard', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 12963, 1), + (597, 'Medium Modulation Shard', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 12964, 1), + (598, 'Large Modulation Shard', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 12965, 1), + (599, 'Hastened Malosinete', -1, 4608, 65535, 127, 131071, 0, 3, 0, 0, 12968, 1), + (600, 'Blessing of the Devoted', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 9033, 1), + (601, 'Grappling Strike', -1, 65, 65535, 127, 131071, 0, 3, 0, 0, 4836, 1), + (602, 'Mental Contortion', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 12938, 1), + (603, 'Shield of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 12971, 1), + (604, 'Extended Malosinete', -1, 4608, 65535, 127, 131071, 0, 3, 0, 0, 12977, 1), + (605, 'Shield Specialist', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 4844, 1), + (606, 'Mark of the Mage Hunter', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 4849, 1), + (609, 'Uncanny Resilience', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 4854, 1), + (610, 'Blinding Fury', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 4857, 1), + (611, 'Battle Leap', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 4860, 1), + (612, 'Soul Seeker', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 4861, 1), + (613, 'Lingering Death', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13096, 1), + (614, 'Spirit Guardian', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 5369, 1), + (615, 'Surreality', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4887, 1), + (616, 'Mana Draw', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4890, 1), + (617, 'Doppelganger\'s Beckon', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 5127, 1), + (618, 'Armor of Ancestral Spirits', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 12989, 1), + (619, 'Group Pact of the Wolf', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 12992, 1), + (620, 'Hastened Inconspicuous Totem', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13001, 1), + (621, 'Fire Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 4903, 1), + (622, 'Vapor Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 4906, 1), + (623, 'Ice Core ', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 4909, 1), + (624, 'Stone Core ', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 4912, 1), + (625, 'Volatile Mana Blaze', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 4915, 1), + (626, 'Purified Spirits', -1, 546, 65535, 127, 131071, 0, 3, 0, 0, 13004, 1), + (627, 'Group Spirit Walk', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13008, 1), + (628, 'Greater Blood Tithe', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 4924, 1), + (629, 'Gathering Dusk', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 4927, 1), + (630, 'Group Silent Presence', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13009, 1), + (631, 'Double Attack', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 5366, 1), + (632, 'Sanguine Mind Crystal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4934, 1), + (633, 'Azure Mind Crystal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4935, 1), + (634, 'Hastened Cannibalization', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13010, 1), + (635, 'Hastened Spirit Channeling', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13013, 1), + (636, 'Arcane Whisper', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 4938, 1), + (637, 'Vengeful Spirits', -1, 9776, 65535, 127, 131071, 0, 3, 0, 0, 13017, 1), + (638, 'Crippling Apparition', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 13020, 1), + (639, 'Dimensional Instability', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 4943, 1), + (640, 'Cryomancy', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 4944, 1), + (641, 'Hastened Self Preservation', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13055, 1), + (642, 'Binding Axe', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13065, 1), + (643, 'Agony of Absolution', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13066, 1), + (644, 'Hastened Absolution', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13067, 1), + (645, 'Hastened Calculated Insanity', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 13753, 1), + (646, 'Hastened Mental Contortion', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 13758, 1), + (647, 'Hastened Crippling Aurora', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 13764, 1), + (649, 'Hastened Leech Touch', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14046, 1), + (650, 'Bony Grasp of Death', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14051, 1), + (651, 'Thought Leech', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14052, 1), + (652, 'Hastened Leechcurse Discipline', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14056, 1), + (653, 'Hastened Unholy Aura Discipline', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14059, 1), + (654, 'Hastened Harmshield', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 14062, 1), + (655, 'Hastened Projection of Doom', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 14065, 1), + (656, 'Hastened Projection of Piety', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14068, 1), + (657, 'Shield of Brilliance', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14071, 1), + (658, 'Hastened Sanctification Discipline', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14076, 1), + (659, 'Speed of the Savior', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14080, 1), + (660, 'Divine Call', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14081, 1), + (661, 'Hunter\'s Fury', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 5248, 1), + (662, 'Union of Spirits', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 5251, 1), + (663, 'Quickened Stuns', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14100, 1), + (664, 'Extended Outrider\'s Attack', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 14115, 1), + (665, 'Death\'s Wrath', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 5264, 1), + (666, 'Taste of Blood', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 5015, 1), + (667, 'Summoner\'s Beckon', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 5269, 1), + (668, 'Hymn of the Last Stand', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 5017, 1), + (669, 'Bladed Song', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 5020, 1), + (670, 'Twisted Shank', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 5021, 1), + (671, 'Dirty Fighting', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 5022, 1), + (672, 'Ligament Slice', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 5025, 1), + (673, 'Tumble', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 5028, 1), + (674, 'Unknown AA 16149', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16149, 1), + (675, 'Shrink', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 14224, 1), + (676, 'Convergence', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14358, 1), + (677, 'Gift of Deathly Resolve', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14359, 1), + (678, 'Unknown AA 16082', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 16082, 1), + (679, 'Unknown AA 16083', -1, 15906, 65535, 127, 131071, 0, 2, 0, 0, 16083, 1), + (680, 'Unknown AA 16084', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 16084, 1), + (681, 'Unknown AA 16087', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 16087, 1), + (682, 'Unknown AA 16096', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16096, 1), + (683, 'Unknown AA 16097', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16097, 1), + (684, 'Unknown AA 16104', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16104, 1), + (685, 'Unknown AA 16105', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16105, 1), + (686, 'Unknown AA 16106', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16106, 1), + (687, 'Unknown AA 16107', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16107, 1), + (688, 'Unknown AA 16108', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16108, 1), + (689, 'Combat Medic ', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 5136, 1), + (690, 'Unknown AA 16109', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16109, 1), + (691, 'Unknown AA 16113', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16113, 1), + (692, 'Unknown AA 16114', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16114, 1), + (693, 'Unknown AA 16117', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16117, 1), + (694, 'Unknown AA 16120', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 16120, 1), + (695, 'Unknown AA 16152', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16152, 1), + (696, 'Unknown AA 16156', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16156, 1), + (697, 'Mortal Coil', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 5085, 1), + (698, 'Hastened Purified Spirits', -1, 546, 65535, 127, 131071, 0, 3, 0, 0, 13416, 1), + (699, 'Swarm of Fireflies', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 13419, 1), + (700, 'Unknown AA 16159', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16159, 1), + (701, 'Armor of the Inquisitor', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 5095, 1), + (702, 'Hand of Disruption', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 5098, 1), + (703, 'Quickened Death Bloom', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14318, 1), + (704, 'Hero\'s Barracks', 9, 65535, 65535, 127, 131071, 0, 4, 0, 1, 14367, 1), + (705, 'Spirit of the White Wolf', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 5105, 1), + (706, 'Unknown AA 16160', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16160, 1), + (707, 'Pact of the Wolf', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 5109, 1), + (708, 'Enchant Alaran Metal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 13271, 1), + (709, 'Mass Enchant Alaran Metal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 13272, 1), + (710, 'Funeral Pyre', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 14360, 1), + (711, 'Unknown AA 16162', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16162, 1), + (712, 'Hastened Sanctuary', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 5118, 1), + (713, 'Etherium Blades', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 14129, 1), + (714, 'Hastened Assassination Disciplines', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 14135, 1), + (715, 'Cunning Disguise: Shissar', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 14139, 1), + (716, 'Scout\'s Mastery of Piercing', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 14141, 1), + (717, 'Extended Envenomed Blades', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 14144, 1), + (718, 'Heel of Brithrax', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14151, 1), + (719, 'Extended Zan Fi\'s Whistle', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14163, 1), + (720, 'Hastened Marr\'s Salvation', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14088, 1), + (721, 'Hastened Armor of the Inquisitor', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14091, 1), + (722, 'Hastened Drape of Shadows', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 14304, 1), + (723, 'Unknown AA 16185', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16185, 1), + (724, 'Hastened Eldritch Rune', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 14364, 1), + (725, 'Unknown AA 16124', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 16124, 1), + (726, 'Unknown AA 16128', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 16128, 1), + (727, 'Unknown AA 16131', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 16131, 1), + (728, 'Unknown AA 16137', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 16137, 1), + (729, 'Unknown AA 16140', -1, 6, 65535, 127, 131071, 0, 3, 0, 0, 16140, 1), + (730, 'Unknown AA 16186', -1, 9, 65535, 127, 131071, 0, 3, 0, 0, 16186, 1), + (731, 'Unknown AA 16188', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16188, 1), + (732, 'Unknown AA 16195', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16195, 1), + (733, 'Killing Spree', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 4739, 1), + (734, 'Hold the Line', -1, 32833, 65535, 127, 131071, 0, 3, 0, 0, 4742, 1), + (735, 'Battle Frenzy', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 13134, 1), + (737, 'Quickened Silent Casting', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 13143, 1), + (738, 'Quickened Silent Casting', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 13146, 1), + (739, 'Balefire Burst', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 13164, 1), + (740, 'Blood Tithe', -1, 1568, 65535, 127, 131071, 0, 3, 0, 0, 4761, 1), + (741, 'Leap of Faith', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 13202, 1), + (742, 'Unknown AA 16196', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16196, 1), + (743, 'Hastened Explosion of Hatred', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 13166, 1), + (744, 'Howl of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13169, 1), + (745, 'Hastened Tune In Your Head', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 13204, 1), + (746, 'Unknown AA 16197', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16197, 1), + (747, 'Unknown AA 16200', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16200, 1), + (748, 'Nightmare Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4894, 1), + (749, 'Explosion of Spite', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 13165, 1), + (751, 'Scent of Terris', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13225, 1), + (752, 'Bloodfury', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13224, 1), + (753, 'Dreary Deeds', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 13252, 1), + (754, 'Enchant Feymetal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 13260, 1), + (755, 'Mass Enchant Feymetal', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 13261, 1), + (756, 'Enlightened Focus of Arcanum', -1, 15904, 65535, 127, 131071, 0, 3, 0, 0, 13646, 1), + (757, 'Shifting Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 5276, 1), + (758, 'Extended Silent Casting', -1, 15360, 65535, 127, 131071, 0, 3, 0, 0, 13667, 1), + (759, 'Fury of Kerafyrm', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 13670, 1), + (760, 'Unknown AA 16203', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 16203, 1), + (761, 'Unknown AA 16208', -1, 552, 65535, 127, 131071, 0, 3, 0, 0, 16208, 1), + (762, 'Shield Block', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 5283, 1), + (763, 'Mirrored Pestilence', -1, 1552, 65535, 127, 131071, 0, 3, 0, 0, 13684, 1), + (764, 'Embrace The Decay', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13687, 1), + (765, 'Quickened Scent of Terris', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13689, 1), + (766, 'Frenzy of the Dead', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13693, 1), + (767, 'Unknown AA 16211', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 16211, 1), + (768, 'Unknown AA 16215', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 16215, 1), + (769, 'Marr\'s Salvation', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 13100, 1), + (770, 'Blessing of the Faithful', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 13101, 1), + (771, 'Unbridled Strike of Fear', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 13108, 1), + (772, 'Noteworthy Disguise: Drake', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14192, 1), + (773, 'Death\'s Effigy', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13133, 1), + (774, 'Empowered Focus of Arcanum', -1, 15904, 65535, 127, 131071, 0, 3, 0, 0, 14690, 1), + (775, 'Unknown AA 16342', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 16342, 1), + (776, 'Arcane Overkill', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 5295, 1), + (777, 'Funeral Dirge', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 5298, 1), + (778, 'Protection of the Spirit Wolf', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 5007, 1), + (779, 'Hastened Juggernaut Surge', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13873, 1), + (780, 'Hastened Resilience', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13878, 1), + (781, 'Hastened Blood Pact', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13881, 1), + (782, 'Unknown AA 16317', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 16317, 1), + (783, 'Energetic Attunement', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1056, 1), + (784, 'Heart of Flames', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1251, 1), + (785, 'Heart of Vapor', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1252, 1), + (786, 'Heart of Ice', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1253, 1), + (787, 'Heart of Stone', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1254, 1), + (789, 'Stealthy Getaway', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 1477, 1), + (790, 'Seized Opportunity', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 878, 1), + (791, 'Veil of Mindshadow', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 4931, 1), + (792, 'Army of the Dead', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 1274, 1), + (793, 'Mana Blast', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1639, 1), + (794, 'Mana Blaze', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 1640, 1), + (795, 'Innate Corruption Protection', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 1662, 1), + (796, 'Hastened Five Point Palm', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 13889, 1), + (797, 'Moving Mountains', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 13130, 1), + (798, 'Veturika\'s Perseverance', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 14229, 1), + (799, 'Unknown AA 16644', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16644, 1), + (800, 'Vehement Rage', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 6607, 1), + (801, 'Knee Strike', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6610, 1), + (802, 'Hastened Fortitude Discipline', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6611, 1), + (803, 'Hastened Furious Discipline', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6614, 1), + (804, 'Warlord\'s Bravery', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6617, 1), + (805, 'Hastened Speed Focus', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14148, 1), + (806, 'Hastened Zan Fi\'s Whistle', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14160, 1), + (807, 'Pressure Points', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14157, 1), + (808, 'Hastened Thunder', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 14166, 1), + (809, 'Allegretto of Battle', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14181, 1), + (810, 'Vivace of Conflict', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14186, 1), + (811, 'Unknown AA 16218', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 16218, 1), + (812, 'Unknown AA 16221', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 16221, 1), + (813, 'Unknown AA 16222', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 16222, 1), + (814, 'Unknown AA 16225', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 16225, 1), + (815, 'Unknown AA 16230', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 16230, 1), + (816, 'Unknown AA 16235', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 16235, 1), + (817, 'Unknown AA 16238', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 16238, 1), + (818, 'Unknown AA 16257', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 16257, 1), + (819, 'Unknown AA 16666', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 16666, 1), + (820, 'Death\'s Revenge', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6630, 1), + (821, 'Harmshield', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 6635, 1), + (822, 'Explosion of Hatred', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6640, 1), + (823, 'Cascading Theft of Defense', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6641, 1), + (824, 'Hate Step', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6644, 1), + (825, 'Vicious Bite of Chaos', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6645, 1), + (826, 'Encroaching Darkness', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 6646, 1), + (827, 'Unknown AA 16745', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 16745, 1), + (828, 'Unknown AA 16260', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 16260, 1), + (829, 'Unknown AA 16263', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 16263, 1), + (830, 'Unknown AA 16272', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 16272, 1), + (831, 'Unknown AA 16276', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 16276, 1), + (832, 'Unknown AA 16287', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 16287, 1), + (833, 'Unknown AA 17252', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17252, 1), + (834, 'Unknown AA 16296', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 16296, 1), + (835, 'Unknown AA 16300', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 16300, 1), + (836, 'Unknown AA 16310', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 16310, 1), + (837, 'Unknown AA 16330', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 16330, 1), + (838, 'Unknown AA 16163', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 16163, 1), + (839, 'Unknown AA 16360', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 16360, 1), + (840, 'Unknown AA 16363', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 16363, 1), + (841, 'Sleight of Hand', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6663, 1), + (842, 'Enduring Vision', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6666, 1), + (843, 'Expertise of Blades', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6668, 1), + (844, 'Cunning Disguise: Human', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6671, 1), + (845, 'Cunning Disguise: Half-Elf', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6672, 1), + (846, 'Cunning Disguise: Barbarian', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6673, 1), + (847, 'Cunning Disguise: Erudite', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6674, 1), + (848, 'Cunning Disguise: Troll', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6675, 1), + (849, 'Cunning Disguise: Goblin', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6676, 1), + (850, 'Unknown AA 16366', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 16366, 1), + (851, 'Unknown AA 16369', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 16369, 1), + (852, 'Unknown AA 16370', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 16370, 1), + (853, 'Unknown AA 16371', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 16371, 1), + (854, 'Unknown AA 17256', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17256, 1), + (856, 'Tigir\'s Insect Swarm', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6691, 1), + (857, 'Dampen Resistance', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6692, 1), + (858, 'Hastened Dampen Resistance', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6697, 1), + (859, 'Spirit Walk', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6702, 1), + (860, 'Hastened Virulent Paralysis', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6703, 1), + (861, 'Languid Bite', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6706, 1), + (862, 'Quickened Blood of Nadox', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6709, 1), + (863, 'Hastened Spirit Call', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6712, 1), + (864, 'Hastened Thousand Blades', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14169, 1), + (865, 'Unknown AA 17257', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17257, 1), + (866, 'Extended Dance of Blades', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14179, 1), + (867, 'Extended Thousand Blades', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 14180, 1), + (868, 'Unknown AA 16380', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 16380, 1), + (869, 'Unknown AA 16386', -1, 4608, 65535, 127, 131071, 0, 3, 0, 0, 16386, 1), + (870, 'Harmonious Arrow', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6750, 1), + (871, 'Hastened Weapon Shield', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6751, 1), + (872, 'Outrider\'s Attack', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6754, 1), + (873, 'Group Guardian of the Forest', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6755, 1), + (874, 'Pack Hunt', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6758, 1), + (875, 'Keen Blade', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6761, 1), + (876, 'Outrider\'s Evasion', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6764, 1), + (877, 'Ranged Finesse', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6765, 1), + (878, 'Bow Mastery', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 1196, 1), + (879, 'Unknown AA 17258', -1, 1040, 65535, 127, 131071, 0, 2, 0, 0, 17258, 1), + (880, 'Unknown AA 16392', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 16392, 1), + (881, 'Unknown AA 16395', -1, 10248, 65535, 127, 131071, 0, 3, 0, 0, 16395, 1), + (882, 'Unknown AA 16396', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 16396, 1), + (883, 'Unknown AA 16536', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 16536, 1), + (884, 'Unknown AA 17209', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 17209, 1), + (885, 'Unknown AA 17212', -1, 1, 65535, 127, 131071, 0, 2, 0, 0, 17212, 1), + (886, 'Unknown AA 17218', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 17218, 1), + (888, 'Unknown AA 17555', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17555, 1), + (889, 'Unknown AA 17229', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 17229, 1), + (890, 'Unknown AA 17235', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 17235, 1), + (891, 'Healing Light', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6791, 1), + (892, 'Halt the Dead', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6794, 1), + (894, 'Unknown AA 17242', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 17242, 1), + (895, 'Unknown AA 17245', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17245, 1), + (896, 'Unknown AA 17249', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17249, 1), + (897, 'Unknown AA 17199', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 17199, 1), + (898, 'Unknown AA 17267', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 17267, 1), + (899, 'Unknown AA 17273', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 17273, 1), + (900, 'Rise of Bones', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6815, 1), + (901, 'Whisperwind', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6818, 1), + (902, 'Hastened Blood Magic', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6819, 1), + (903, 'Overpower Undead', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6822, 1), + (904, 'Hastened Swarm of Decay', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6823, 1), + (905, 'Gift of the Grave', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 6828, 1), + (906, 'Hastened Gut Punch', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10522, 1), + (907, 'Hastened First Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10527, 1), + (908, 'Hastened Second Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10532, 1), + (909, 'Hastened Third Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10537, 1), + (910, 'Unknown AA 17280', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 17280, 1), + (911, 'Warlord\'s Resurgence', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10545, 1), + (912, 'Warlord\'s Fury', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10546, 1), + (914, 'Improved Shield Specialist', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10548, 1), + (915, 'Unknown AA 17281', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 17281, 1), + (917, 'Hastened Grappling Strike', -1, 65, 65535, 127, 131071, 0, 3, 0, 0, 10588, 1), + (918, 'Furious Refrain', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10627, 1), + (919, 'Unknown AA 17554', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17554, 1), + (920, 'Valorous Rage', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10711, 1), + (921, 'Hastened Group Guardian of the Forest', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10714, 1), + (922, 'Hastened Outrider\'s Attack', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10719, 1), + (923, 'Hastened Protection of the Spirit Wolf', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10722, 1), + (924, 'Hastened Imbued Ferocity', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10727, 1), + (925, 'Hastened Harmonious Arrow', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10730, 1), + (926, 'Hastened Entrap', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10733, 1), + (927, 'Poison Arrows', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10736, 1), + (928, 'Merciless Blade', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14026, 1), + (929, 'Combatant\'s Pact', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14029, 1), + (930, 'Warlord\'s Resolve', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14032, 1), + (931, 'Hastened Hate\'s Attraction', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 12582, 1), + (932, 'Unknown AA 17289', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 17289, 1), + (933, 'Improved Death Peace', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 12635, 1), + (934, 'Unknown AA 17307', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 17307, 1), + (935, 'Blessing of Ro', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10789, 1), + (936, 'Extended Wild Growth', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 10792, 1), + (937, 'Unknown AA 17317', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 17317, 1), + (938, 'Eyes Wide Open', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 12636, 1), + (939, 'Communion of the Cheetah', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 12638, 1), + (940, 'Hastened Song of Stone', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6870, 1), + (941, 'Flurry', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6873, 1), + (942, 'Destructive Cascade', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6876, 1), + (943, 'Total Domination', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6879, 1), + (944, 'Enhanced Forgetfulness', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6882, 1), + (945, 'Infusion of Thunder', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10346, 1), + (946, 'Hastened Warlord\'s Bravery', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14037, 1), + (947, 'Hastened Warlord\'s Tenacity', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14040, 1), + (948, 'Unknown AA 17328', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 17328, 1), + (949, 'Unknown AA 17329', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 17329, 1), + (950, 'Unknown AA 17336', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 17336, 1), + (951, 'Unknown AA 17339', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 17339, 1), + (952, 'Unknown AA 17342', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 17342, 1), + (953, 'Unknown AA 17344', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 17344, 1), + (954, 'Unknown AA 17347', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 17347, 1), + (955, 'Unknown AA 17357', -1, 514, 65535, 127, 131071, 0, 2, 0, 0, 17357, 1), + (956, 'Unknown AA 17361', -1, 2080, 65535, 127, 131071, 0, 3, 0, 0, 17361, 1), + (957, 'Unknown AA 17364', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 17364, 1), + (958, 'Unknown AA 17370', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 17370, 1), + (959, 'Unknown AA 17372', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 17372, 1), + (960, 'Stomping Leap', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 6930, 1), + (961, 'Juggernaut Surge', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6931, 1), + (962, 'Distraction Attack', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6932, 1), + (963, 'Hastened Savage Spirit', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6935, 1), + (964, 'Dying Blow', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6938, 1), + (965, 'Hastened Projection of Fury', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10519, 1), + (966, 'Unknown AA 17373', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 17373, 1), + (967, 'Blade Guardian', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13444, 1), + (968, 'Unknown AA 17375', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 17375, 1), + (969, 'Unknown AA 17378', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 17378, 1), + (970, 'Unknown AA 17378', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 17379, 1), + (971, 'Unknown AA 17378', -1, 16384, 65535, 127, 131071, 0, 2, 0, 0, 17380, 1), + (972, 'Unknown AA 17384', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 17384, 1), + (974, 'Unknown AA 17409', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 17409, 1), + (975, 'Unknown AA 17414', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 17414, 1), + (976, 'Unknown AA 17418', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17418, 1), + (977, 'Unknown AA 17558', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17558, 1), + (978, 'Unknown AA 17428', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17428, 1), + (979, 'Unknown AA 17436', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17436, 1), + (980, 'Natural Invisibility', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6970, 1), + (981, 'Attack of the Warders', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6971, 1), + (982, 'Hastened Feral Attacks', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6974, 1), + (983, 'Hastened Focused Paragon', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6977, 1), + (984, 'Hastened Paragon', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6980, 1), + (985, 'Group Bestial Alignment', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6983, 1), + (986, 'Bite of the Asp', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6984, 1), + (987, 'Raven\'s Claw', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6985, 1), + (988, 'Gorilla Smash', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6986, 1), + (989, 'Stonefoot', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10340, 1), + (990, 'Hastened Stunning Kick', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10343, 1), + (991, 'Quickened Turn Undead', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10470, 1), + (992, 'Tranquil Blessings', -1, 30254, 65535, 127, 131071, 0, 3, 0, 0, 3676, 1), + (993, 'Righteous Zeal', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6082, 1), + (994, 'Hastened Divine Retribution', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6088, 1), + (995, 'Intrinsic Efficiency', -1, 15386, 65535, 127, 131071, 0, 2, 0, 0, 6112, 1), + (996, 'Powerful Elixirs', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6113, 1), + (997, 'Celestial Rapidity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6534, 1), + (998, 'Hastened Celestial Regeneration', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 2400, 1), + (999, 'Improved Burst of Life', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7765, 1), + (1000, 'Unknown AA 17439', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17439, 1), + (1001, 'Unknown AA 17445', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17445, 1), + (1002, 'Unknown AA 17448', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 17448, 1), + (1003, 'Unknown AA 10478', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10478, 1), + (1004, 'Unknown AA 17492', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 17492, 1), + (1005, 'Unknown AA 17495', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 17495, 1), + (1006, 'Unknown AA 17515', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 17515, 1), + (1007, 'Unknown AA 17517', -1, 5120, 65535, 127, 131071, 0, 3, 0, 0, 17517, 1), + (1008, 'Unknown AA 17522', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 17522, 1), + (1009, 'Unknown AA 17533', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 17533, 1), + (1011, 'Neshika\'s Blink', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 7869, 1), + (1012, 'Five Point Palm', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 7875, 1), + (1013, 'War Cry of the Braxi', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 13872, 1), + (1014, 'Unknown AA 17538', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 17538, 1), + (1015, 'Unknown AA 17547', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 17547, 1), + (1016, 'Unknown AA 17549', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 17549, 1), + (1017, 'Unknown AA 17238', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 17238, 1), + (1018, 'Unknown AA 17553', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 17553, 1), + (1019, 'Unknown AA 17248', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 17248, 1), + (1020, 'Hastened Companion\'s Blessing', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 12478, 1), + (1021, 'Unknown AA 17215', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 17215, 1), + (1022, 'Destructive Fury', -1, 16540, 65535, 127, 131071, 0, 2, 0, 0, 6636, 1), + (1023, 'Restoration of Life', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14010, 1), + (1024, 'Hastened Leap of Faith', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14085, 1), + (1025, 'Hastened Beacon of the Righteous', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 14011, 1), + (1026, 'Unknown AA 17561', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17561, 1), + (1027, 'Unknown AA 17564', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17564, 1), + (1028, 'Unknown AA 17567', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17567, 1), + (1029, 'Unknown AA 17570', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17570, 1), + (1030, 'Unknown AA 17573', -1, 1024, 65535, 127, 131071, 0, 5, 0, 0, 17573, 1), + (1031, 'Unknown AA 17576', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17576, 1), + (1032, 'Unknown AA 17579', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17579, 1), + (1033, 'Unknown AA 17582', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17582, 1), + (1034, 'Unknown AA 17585', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17585, 1), + (1035, 'Unknown AA 17588', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17588, 1), + (1036, 'Unknown AA 17591', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17591, 1), + (1037, 'Unknown AA 17594', -1, 2048, 65535, 127, 131071, 0, 5, 0, 0, 17594, 1), + (1038, 'Unknown AA 17597', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17597, 1), + (1039, 'Unknown AA 17600', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17600, 1), + (1040, 'Theft of Essence', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 7900, 1), + (1041, 'Malosinete', -1, 4608, 65535, 127, 131071, 0, 3, 0, 0, 7903, 1), + (1042, 'Unknown AA 17603', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17603, 1), + (1043, 'Unknown AA 17606', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17606, 1), + (1044, 'Unknown AA 17609', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17609, 1), + (1045, 'Unknown AA 17612', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17612, 1), + (1046, 'Unknown AA 17615', -1, 4096, 65535, 127, 131071, 0, 5, 0, 0, 17615, 1), + (1047, 'Unknown AA 17618', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17618, 1), + (1048, 'Unknown AA 17621', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17621, 1), + (1049, 'Unknown AA 17624', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17624, 1), + (1050, 'Unknown AA 17627', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17627, 1), + (1051, 'Unknown AA 17630', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17630, 1), + (1052, 'Unknown AA 17633', -1, 8192, 65535, 127, 131071, 0, 5, 0, 0, 17633, 1), + (1053, 'Unknown AA 10481', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 10481, 1), + (1054, 'Unknown AA 17639', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 17639, 1), + (1060, 'Hastened Turn Undead', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7940, 1), + (1061, 'Cascading Divine Aura', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7943, 1), + (1062, 'Group Purify Soul', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7944, 1), + (1063, 'Hastened Renewal', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7945, 1), + (1064, 'Sanctified Blessing', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7948, 1), + (1065, 'Focused Celestial Regeneration', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7951, 1), + (1090, 'Mastery of Nature', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 7980, 1), + (1091, 'Hastened Nature\'s Guardian', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 7983, 1), + (1092, 'Spirit of the Black Wolf', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 7986, 1), + (1093, 'Hastened Lycan Soul', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 7989, 1), + (1113, 'Hastened Mass Group Buff', -1, 30254, 65535, 127, 131071, 0, 3, 0, 0, 5010, 1), + (1115, 'Mystical Shield', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 5045, 1), + (1120, 'Self Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8030, 1), + (1121, 'Hastened Veil of Mindshadow', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8031, 1), + (1122, 'Phantasmal Opponent', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8034, 1), + (1123, 'Hastened Edict of Command', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8035, 1), + (1124, 'Fog of Memories', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8038, 1), + (1125, 'Bite of Tashani', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8039, 1), + (1150, 'Fury of Druzzil', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8060, 1), + (1151, 'Fury of Eci', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8063, 1), + (1152, 'Fury of Ro', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8066, 1), + (1153, 'Fortified Entanglement', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8069, 1), + (1154, 'Force of Will', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8072, 1), + (1155, 'Atol\'s Shackles', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8075, 1), + (1156, 'Hastened Manaburn', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8076, 1), + (1157, 'Hastened Call of Xuzl', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 8082, 1), + (1158, 'Divine Steed', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 1667, 1), + (1159, 'Hastened Leap', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 11014, 1), + (1169, 'Unknown AA 16336', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 16336, 1), + (1170, 'Unknown AA 16339', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 16339, 1), + (1171, 'Hastened Counterattack Discipline', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15502, 1), + (1173, 'Hastened Onslaught', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15509, 1), + (1174, 'Mrylokar\'s Rigor', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15512, 1), + (1175, 'Absorbing Agent', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15515, 1), + (1176, 'Improved Requiem of Time', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15516, 1), + (1177, 'Quickened Requiem of Time', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15517, 1), + (1178, 'Silent Displacement', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15521, 1), + (1200, 'Companion\'s Alacrity', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 8190, 1), + (1201, 'Improved Intimidation', -1, 41408, 65535, 127, 131071, 0, 2, 0, 1, 8193, 1), + (1202, 'Perfected Levitation', -1, 31272, 65535, 127, 131071, 0, 2, 0, 0, 8194, 1), + (1203, 'Hastened Fortify Companion', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 8195, 1), + (1204, 'Empowered Ingenuity', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 8198, 1), + (1205, 'Companion\'s Fury', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 8201, 1), + (1206, 'Quickened Radiant Cure', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 8204, 1), + (1207, 'Quickened Radiant Cure', -1, 4, 65535, 127, 131071, 0, 2, 0, 0, 8207, 1), + (1208, 'Mental Stamina', -1, 32446, 65535, 127, 131071, 0, 2, 0, 0, 8210, 1), + (1209, 'Hardy Endurance', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 8215, 1), + (1210, 'Group Perfected Invisibility', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 8220, 1), + (1211, 'Focus of Arcanum', -1, 15904, 65535, 127, 131071, 0, 3, 0, 0, 8221, 1), + (1212, 'Group Perfected Invisibility to Undead', -1, 1046, 65535, 127, 131071, 0, 2, 0, 0, 8222, 1), + (1214, 'Cascade of Life', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 8224, 1), + (1215, 'Summon Companion', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 8227, 1), + (1216, 'Mental Fortitude', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 8228, 1), + (1217, 'Gate', -1, 15906, 65535, 127, 131071, 0, 2, 0, 0, 8231, 1), + (1218, 'Extended Ingenuity', -1, 128, 65535, 127, 131071, 0, 2, 0, 0, 8040, 1), + (1219, 'Armor of Wisdom', -1, 1, 65535, 127, 131071, 0, 2, 0, 0, 8235, 1), + (1220, 'Armor of Wisdom', -1, 20, 65535, 127, 131071, 0, 2, 0, 0, 8240, 1), + (1221, 'Armor of Wisdom', -1, 202, 65535, 127, 131071, 0, 2, 0, 0, 8245, 1), + (1222, 'Armor of Wisdom', -1, 49920, 65535, 127, 131071, 0, 2, 0, 0, 8250, 1), + (1223, 'Armor of Wisdom', -1, 15392, 65535, 127, 131071, 0, 2, 0, 0, 8255, 1), + (1232, 'Way of the Katori', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15429, 1), + (1233, 'Harmony of Battle', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15432, 1), + (1234, 'Hastened Ironfist', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15438, 1), + (1235, 'Two-Finger Wasp Touch', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15447, 1), + (1236, 'Thunderfoot', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15444, 1), + (1237, 'Extended Bloodlust', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 15414, 1), + (1239, 'Consumption of Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 15423, 1), + (1240, 'Frenzied Swipes', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 15424, 1), + (1242, 'Hastened Synergy', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15450, 1), + (1243, 'Hastened Crane Stance', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15453, 1), + (1244, 'Hastened Eye Gouge', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 15456, 1), + (1245, 'Troubadour\'s Slashing Mastery', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15540, 1), + (1246, 'Troubadour\'s Blunt Mastery', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15543, 1), + (1247, 'Troubadour\'s Piercing Mastery', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15546, 1), + (1248, 'Hastened Lure of the Siren\'s Song', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 15549, 1), + (1249, 'Frenzied Axe of Rallos', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15555, 1), + (1250, 'Juggernaut\'s Mastery of Throwing', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15564, 1), + (1251, 'Furious Rampage', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15567, 1), + (1252, 'Battle Stomp', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15569, 1), + (1253, 'Communion of Blood', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15570, 1), + (1254, 'Hastened Dying Grasp', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 15571, 1), + (1255, 'Rest the Dead', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 15574, 1), + (1256, 'Extended Encroaching Darkness', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 15579, 1), + (1257, 'Hand of Death', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 15582, 1), + (1258, 'Quickened Levant', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 15591, 1), + (1259, 'Cascade of Decay', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 15594, 1), + (1261, 'Hastened Fury of the Gods', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15598, 1), + (1262, 'Lower Element', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15601, 1), + (1263, 'Destructive Adept', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15602, 1), + (1264, 'Arcane Fusion', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15609, 1), + (1265, 'Arcane Destruction', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15611, 1), + (1266, 'Force of Flame', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15612, 1), + (1267, 'Force of Ice', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 15615, 1), + (1269, 'Sha\'s Reprisal', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 15425, 1), + (1270, 'Crippling Spirit', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 15377, 1), + (1271, 'Quick Damage', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 15622, 1), + (1272, 'Assassin\'s Wrath', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15625, 1), + (1273, 'Hastened Swiftblade', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 15634, 1), + (1274, 'Improved Explosion of Spite', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15639, 1), + (1275, 'Improved Explosion of Hatred', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15640, 1), + (1277, 'Soul Touch', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15642, 1), + (1278, 'Soul Flay', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15643, 1), + (1279, 'Ragged Bite of Agony', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15646, 1), + (1281, 'Everburn', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 15648, 1), + (1282, 'Marr\'s Gift', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15619, 1), + (1300, 'Fundament of Intellect', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 9100, 1), + (1301, 'Fundament of Intellect', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 9109, 1), + (1302, 'Fundament of Intellect', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 9118, 1), + (1303, 'Fundament of Intellect', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 9127, 1), + (1304, 'Fundament of Wisdom', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 9136, 1), + (1305, 'Fundament of Wisdom', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 9145, 1), + (1306, 'Fundament of Wisdom', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 9154, 1), + (1307, 'Fundament of Power', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 9163, 1), + (1308, 'Fundament of Power', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 9172, 1), + (1309, 'Fundament of Power', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 9181, 1), + (1310, 'Fundament of Power', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 9190, 1), + (1311, 'Fundament of Power', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 9199, 1), + (1312, 'Fundament of Combat', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 9208, 1), + (1313, 'Fundament of Combat', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 9217, 1), + (1314, 'Fundament of Combat', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 9226, 1), + (1315, 'Fundament of Combat', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 9235, 1), + (1350, 'Fundament: First Spire of Arcanum', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 9300, 1), + (1351, 'Fundament: Second Spire of Arcanum', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 9303, 1), + (1352, 'Fundament: Third Spire of Arcanum', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 9306, 1), + (1360, 'Fundament: First Spire of the Sensei', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 9309, 1), + (1361, 'Fundament: Second Spire of the Sensei', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 9312, 1), + (1362, 'Fundament: Third Spire of the Sensei', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 9315, 1), + (1370, 'Fundament: First Spire of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 9318, 1), + (1371, 'Fundament: Second Spire of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 9321, 1), + (1372, 'Fundament: Third Spire of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 9324, 1), + (1380, 'Fundament: First Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 9327, 1), + (1381, 'Fundament: Second Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 9330, 1), + (1382, 'Fundament: Third Spire of Enchantment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 9333, 1), + (1390, 'Fundament: First Spire of Necromancy', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 9336, 1), + (1391, 'Fundament: Second Spire of Necromancy', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 9339, 1), + (1392, 'Fundament: Third Spire of Necromancy', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 9342, 1), + (1400, 'Fundament: First Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 9345, 1), + (1401, 'Fundament: Second Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 9348, 1), + (1402, 'Fundament: Third Spire of the Warlord', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 9351, 1), + (1403, 'Sturdy Companion', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 9503, 1), + (1404, 'Extended Swarm', -1, 32306, 65535, 127, 131071, 0, 3, 0, 0, 9506, 1), + (1405, 'Twincast', -1, 15906, 65535, 127, 131071, 0, 3, 0, 0, 9509, 1), + (1406, 'Staff Block', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 9512, 1), + (1410, 'Fundament: First Spire of the Rake', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 9354, 1), + (1411, 'Fundament: Second Spire of the Rake', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 9357, 1), + (1412, 'Fundament: Third Spire of the Rake', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 9360, 1), + (1420, 'Fundament: First Spire of the Minstrels', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 9363, 1), + (1421, 'Fundament: Second Spire of the Minstrels', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 9366, 1), + (1422, 'Fundament: Third Spire of the Minstrels', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 9369, 1), + (1430, 'Fundament: First Spire of the Savage Lord', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 9372, 1), + (1431, 'Fundament: Second Spire of the Savage Lord', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 9375, 1), + (1432, 'Fundament: Third Spire of the Savage Lord', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 9378, 1), + (1433, 'Extended Ingenuity', -1, 33089, 65535, 127, 131071, 0, 2, 0, 0, 8232, 1), + (1440, 'Fundament: First Spire of Holiness', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 9381, 1), + (1441, 'Fundament: Second Spire of Holiness', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 9384, 1), + (1442, 'Fundament: Third Spire of Holiness', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 9387, 1), + (1450, 'Fundament: First Spire of the Reavers', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 9390, 1), + (1451, 'Fundament: Second Spire of the Reavers', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 9393, 1), + (1452, 'Fundament: Third Spire of the Reavers', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 9396, 1), + (1460, 'Fundament: First Spire of the Pathfinders', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 9399, 1), + (1461, 'Fundament: Second Spire of the Pathfinders', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 9402, 1), + (1462, 'Fundament: Third Spire of the Pathfinders', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 9405, 1), + (1470, 'Fundament: First Spire of Divinity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 9408, 1), + (1471, 'Fundament: Second Spire of Divinity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 9411, 1), + (1472, 'Fundament: Third Spire of Divinity', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 9414, 1), + (1480, 'Fundament: First Spire of Nature', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 9417, 1), + (1481, 'Fundament: Second Spire of Nature', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 9420, 1), + (1482, 'Fundament: Third Spire of Nature', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 9423, 1), + (1490, 'Fundament: First Spire of Ancestors', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 9426, 1), + (1491, 'Fundament: Second Spire of Ancestors', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 9429, 1), + (1492, 'Fundament: Third Spire of Ancestors', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 9432, 1), + (1500, 'Fundament: First Spire of Savagery', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 9435, 1), + (1501, 'Fundament: Second Spire of Savagery', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 9438, 1), + (1502, 'Fundament: Third Spire of Savagery', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 9441, 1), + (1503, 'Hallowed Steed', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 13673, 1), + (1504, 'Wicked Steed', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 13674, 1), + (1505, 'Unknown AA 16103', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 16103, 1), + (1580, 'Divine Companion Aura', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 5809, 1), + (1662, 'Spell Casting Mastery', -1, 16412, 65535, 127, 131071, 0, 2, 0, 0, 1216, 1), + (1663, 'Gift of Mana', -1, 16412, 65535, 127, 131071, 0, 2, 0, 0, 1219, 1), + (1664, 'Twinproc', -1, 50175, 65535, 127, 131071, 0, 3, 0, 0, 12416, 1), + (1665, 'Tactical Mastery', -1, 16596, 65535, 127, 131071, 0, 3, 0, 0, 12419, 1), + (1666, 'Group Perfected Levitation', -1, 31272, 65535, 127, 131071, 0, 2, 0, 0, 12422, 1), + (1667, 'Quickened Encroaching Darkness', -1, 1040, 65535, 127, 131071, 0, 2, 0, 0, 6026, 1), + (1668, 'Acute Focus of Arcanum', -1, 15904, 65535, 127, 131071, 0, 3, 0, 0, 8260, 1), + (1669, 'Flurry', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 5806, 1), + (1680, 'Hastened Flash of Anger', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13905, 1), + (1681, 'Hastened Bazu Roar', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13908, 1), + (1682, 'Hastened Scowl', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13911, 1), + (1683, 'Hastened Mark of the Mage Hunter', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 13917, 1), + (1684, 'Knowledge of Alaran Culture', 2, 65535, 65535, 127, 131071, 0, 4, 0, 0, 14017, 1), + (1685, 'Knowledge of Alaran Culture - Advanced', 2, 65535, 65535, 127, 131071, 0, 4, 0, 0, 14018, 1), + (1686, 'Brace For Impact', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 14019, 1), + (1687, 'Summon Tome of the Hero\'s Journey', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 14371, 1), + (1800, 'Enchant Planar Alloy', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 14373, 1), + (1801, 'Mass Enchant Planar Alloy', -1, 8192, 65535, 127, 131071, 0, 3, 0, 1, 14374, 1), + (2000, 'Armor of Experience', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 4700, 1), + (2001, 'Sneering Grin', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15096, 1), + (2002, 'Warlord\'s Grasp', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15099, 1), + (2003, 'Hastened Press the Attack', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15100, 1), + (2004, 'Hastened Rage of Rallos Zek', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15105, 1), + (2005, 'Hastened Unbroken Attention', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15108, 1), + (2006, 'Extended Resplendant Glory', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15113, 1), + (2007, 'Wars Sheol\'s Heroic Blade', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15119, 1), + (2008, 'Hastened Vehement Rage', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15120, 1), + (2009, 'Hastened Barbed Tongue', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15123, 1), + (2010, 'Hastened Shield Topple', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15126, 1), + (2011, 'Imperator\'s Command', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15129, 1), + (2012, 'Imperator\'s Charge', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15130, 1), + (2013, 'Imperator\'s Precision', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 15131, 1), + (2014, 'Hastened Divine Call', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15132, 1), + (2015, 'Extended Divine Call', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15135, 1), + (2016, 'Heroic Leap', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15136, 1), + (2018, 'Helix of the Undying', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 15146, 1), + (2019, 'Group Armor of the Inquisitor', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15147, 1), + (2020, 'Quickened Demand For Honor', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15150, 1), + (2021, 'Extended Sanctification', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15153, 1), + (2022, 'Extended Speed of the Savior', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15154, 1), + (2023, 'Extended Preservation of Marr', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15155, 1), + (2024, 'Extended Shield of Brilliance', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15158, 1), + (2025, 'Extended Blessing of the Faithful', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15159, 1), + (2026, 'Hastened Speed of the Savior', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15162, 1), + (2028, 'Hastened Shield of Brilliance', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 15168, 1), + (2031, 'Purity of Death', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15177, 1), + (2032, 'Quickened Scourge Skin', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15179, 1), + (2034, 'Gift of the Quick Spear', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15193, 1), + (2035, 'Extended Provocation for Power', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 15194, 1), + (2036, 'Quickened Auspice of the Hunter', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15253, 1), + (2037, 'Chameleon\'s Gift', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15304, 1), + (2040, 'Hastened Enraging Kicks', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15283, 1), + (2041, 'Close Combat Mastery', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15288, 1), + (2042, 'Quickened Cover Tracks', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 15295, 1), + (2045, 'Shield of Reverence', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 15338, 1), + (2046, 'Extended Healing Frenzy', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 15342, 1), + (2047, 'Call of the Herald', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 15343, 1), + (2048, 'Covenant of Spirit', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 15356, 1), + (2049, 'Talisman of Celerity', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 15357, 1), + (2050, 'Extended Spiritual Blessing', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 15358, 1), + (2051, 'Rejuvenation of Spirit', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 15362, 1), + (2053, 'Hastened Turgur\'s Swarm', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 15371, 1), + (2054, 'Shielding of Spirits', -1, 16930, 65535, 127, 131071, 0, 2, 0, 0, 15374, 1), + (2055, 'Hastened Lunar Healing', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 15383, 1), + (2056, 'Quickened Blessing of Ro', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 15389, 1), + (2057, 'Hastened Wall of Wind', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 15403, 1), + (2059, 'Quickened Focused Paragon of Spirit', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 15406, 1), + (2060, 'Elemental Ward', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15200, 1), + (2061, 'Cloak of Shadows', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15203, 1), + (2062, 'Hastened Elemental Union', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15204, 1), + (2063, 'Hastened Virulent Talon', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15207, 1), + (2064, 'Wind of Malosinete', -1, 4608, 65535, 127, 131071, 0, 3, 0, 0, 15210, 1), + (2065, 'Mana Reserve', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15213, 1), + (2066, 'Second Wind Ward', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15214, 1), + (2076, 'Steel Vengeance', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15217, 1), + (2077, 'Extended Vapor Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15220, 1), + (2078, 'Extended Stone Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15223, 1), + (2079, 'Extended Fire Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15226, 1), + (2080, 'Extended Ice Core', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15229, 1), + (2081, 'Flames of Power', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 15232, 1), + (2200, 'Rune of Banishment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15475, 1), + (2201, 'Hastened Glyph Spray', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15478, 1), + (2202, 'Illusions of Grandeur', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15481, 1), + (2203, 'Illusory Ally', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15482, 1), + (2204, 'Gracious Gift of Mana', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15485, 1), + (2205, 'Chromatic Haze', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15486, 1), + (2206, 'Blanket of Forgetfulness', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15489, 1), + (2207, 'Ethereal Manipulation', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15490, 1), + (2208, 'Quick Mezz', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15493, 1), + (2209, 'Reactive Rune', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 15496, 1), + (2234, 'Cover Tracks', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10368, 1), + (2235, 'Imbued Ferocity', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10387, 1), + (2709, 'Perfected Dead Man Floating', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 13692, 1), + (2899, 'Levant', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 10700, 1), + (3000, 'Auroria Mastery', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 6987, 1), + (3202, 'Pet Discipline', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 7733, 1), + (3203, 'Enchant Palladium Trio', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7736, 1), + (3204, 'Mass Enchant Palladium', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7737, 1), + (3205, 'Greater Mass Enchant Palladium', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7738, 1), + (3206, 'Enchant Dwerium', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7732, 1), + (3207, 'Mass Enchant Dwerium', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7734, 1), + (3208, 'Enchant Palladium', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7735, 1), + (3209, 'Enchant Temporite', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7739, 1), + (3210, 'Mass Enchant Temporite', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7740, 1), + (3211, 'Nature\'s Reprieve', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10388, 1), + (3212, 'Hastened Divine Intervention', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10358, 1), + (3213, 'Projection of Fury', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 10351, 1), + (3214, 'Improved Atone', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10364, 1), + (3215, 'Projection of Doom', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10352, 1), + (3216, 'Projection of Piety', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10353, 1), + (3217, 'Hastened Jolting Kicks', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 12500, 1), + (3218, 'Enchant Cosgrite', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7741, 1), + (3219, 'Mass Enchant Cosgrite', 6, 8192, 65535, 127, 131071, 0, 3, 0, 1, 7742, 1), + (3500, 'Blessing of Light', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10355, 1), + (3506, 'Fierce Eye', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 5717, 1), + (3511, 'Punch Mastery', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 6020, 1), + (3512, 'Companion\'s Durability', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 6051, 1), + (3513, 'Rake\'s Deadly Aim', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6322, 1), + (3514, 'Rogue\'s Fury', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6325, 1), + (3515, 'Envenomed Blades', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6328, 1), + (3516, 'Companion of Necessity', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 6333, 1), + (3517, 'Rake\'s Powerful Aim', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6334, 1), + (3518, 'Hastened Cacophony', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6337, 1), + (3519, 'Hastened Funeral Dirge', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6340, 1), + (3520, 'Master\'s Hastened Combination', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 6343, 1), + (3521, 'Hastened Silent Casting', -1, 546, 65535, 127, 131071, 0, 2, 0, 0, 6346, 1), + (3522, 'Hastened Silent Casting', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 6349, 1), + (3525, 'Precise Blow', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 5776, 1), + (3550, 'Beguiler\'s Banishment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 5849, 1), + (3551, 'Beguiler\'s Directed Banishment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 5870, 1), + (3600, 'Rapid Defiance', 1, 1, 65535, 127, 131071, 0, 3, 0, 1, 6136, 1), + (3646, 'Blast of Anger', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6135, 1), + (3676, 'Gift of Life', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10354, 1), + (3701, 'Dirge of the Sleepwalker', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6200, 1), + (3702, 'Quick Time', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6201, 1), + (3703, 'Steady Hands ', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6202, 1), + (3704, 'Selo\'s Sonata', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6205, 1), + (3705, 'Companion\'s Blessing ', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 6206, 1), + (3706, 'Hastened Bestial Alignment ', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6209, 1), + (3707, 'Fortify Companion ', -1, 30224, 65535, 127, 131071, 0, 2, 0, 0, 6212, 1), + (3708, 'Burst of Power ', -1, 20, 65535, 127, 131071, 0, 2, 0, 0, 6215, 1), + (3709, 'Pact of the Wurine', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6218, 1), + (3710, 'Reckless Abandon ', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6219, 1), + (3711, 'Gift of Resurrection', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6222, 1), + (3713, 'Hastened Call of the Wild ', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 6228, 1), + (3714, 'Protection of Direwood', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 6232, 1), + (3716, 'Clinging Root ', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 6236, 1), + (3718, 'Critical Affliction', -1, 8194, 65535, 127, 131071, 0, 2, 0, 0, 6240, 1), + (3720, 'Mana Overburn ', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 6249, 1), + (3724, 'Knight\'s Return Strike ', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 6266, 1), + (3725, 'Hunter\'s Return Kick ', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6269, 1), + (3726, 'Hastened Ligament Slice ', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6272, 1), + (3727, 'Knave\'s Return Strike', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 6275, 1), + (3728, 'Storm Strike', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 6278, 1), + (3729, 'Turgur\'s Swarm', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6281, 1), + (3730, 'Silent Presence', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6282, 1), + (3731, 'Infused by Rage ', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6283, 1), + (3732, 'Gut Punch', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6286, 1), + (3733, 'Warlord\'s Return Kick', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6287, 1), + (3734, 'Arcomancy ', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 6290, 1), + (3800, 'Blessing of Resurrection', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6299, 1), + (3801, 'General Sturdiness', -1, 65535, 65535, 127, 131071, 0, 1, 0, 0, 6119, 1), + (3802, 'Shield Block', -1, 392, 65535, 127, 131071, 0, 2, 0, 0, 6124, 1), + (3803, 'Hastened Trueshot', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6355, 1), + (3804, 'Outrider\'s Accuracy', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6370, 1), + (3805, 'Hastened Mend', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 4801, 1), + (3812, 'Perfected Invisibility', -1, 14336, 65535, 127, 131071, 0, 3, 0, 0, 7069, 1), + (3813, 'Spell Casting Reinforcement', -1, 7168, 65535, 127, 131071, 0, 2, 0, 0, 6257, 1), + (3815, 'Destructive Cascade', -1, 9776, 65535, 127, 131071, 0, 3, 0, 0, 6375, 1), + (3816, 'Companion\'s Relocation', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 6379, 1), + (3817, 'Focused Paragon of Spirits', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6380, 1), + (3818, 'Companion\'s Agility', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 6383, 1), + (3819, 'Maestro\'s Concentration', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 6386, 1), + (3820, 'Blessing of Life', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6395, 1), + (3821, 'Quickened Harvest of Druzzil', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 6503, 1), + (3822, 'Chattering Bones', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6508, 1), + (3823, 'Warlord\'s Deadly Aim', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 6511, 1), + (3824, 'Quickened Call of the Wild', -1, 544, 65535, 127, 131071, 0, 3, 0, 0, 6514, 1), + (3826, 'Force of Disruption', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 5984, 1), + (3830, 'Hastened Divine Avatar', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7100, 1), + (3831, 'Hastened Purification', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 7103, 1), + (3832, 'Beastlords Feral Kick', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 7106, 1), + (3833, 'Burst of Power ', -1, 32841, 65535, 127, 131071, 0, 2, 0, 0, 6409, 1), + (3834, 'Burst of Power ', -1, 256, 65535, 127, 131071, 0, 2, 0, 0, 6419, 1), + (3835, 'Shield Block', -1, 15360, 65535, 127, 131071, 0, 2, 0, 0, 6428, 1), + (3836, 'Holy Root', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6436, 1), + (3837, 'Burst of Power ', -1, 16512, 65535, 127, 131071, 0, 2, 0, 0, 6060, 1), + (3838, 'Quickened Suspend Minion', -1, 30224, 65535, 127, 131071, 0, 3, 0, 0, 6445, 1), + (3839, 'Quickened Summon Axes', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6452, 1), + (3840, 'Recourse of Life', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6601, 1), + (3841, 'Call Hither', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 6455, 1), + (3842, 'Fortified Survival', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 6458, 1), + (3843, 'Fortified Intervention', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 6461, 1), + (3865, 'Planar Durability', -1, 72, 65535, 127, 131071, 0, 3, 0, 0, 6422, 1), + (3890, 'Hastened Force of Will', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 7822, 1), + (3891, 'Hastened Burnout', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 7832, 1), + (3892, 'Hastened Rumbling Servant', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 7828, 1), + (3893, 'Extended Rumbling Servant', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 7827, 1), + (3899, 'Furious Leap', -1, 32769, 65535, 127, 131071, 0, 3, 0, 0, 6499, 1), + (4001, 'Undaunted Fury', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 7407, 1), + (4002, 'Frenzied Volley', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 7818, 1), + (4200, 'Hastened Forceful Rejuvenation', -1, 32318, 65535, 127, 131071, 0, 2, 0, 0, 12475, 1), + (4666, 'Shield Specialist', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 4666, 1), + (5000, 'Glyph of Courage', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7000, 1), + (5002, 'Glyph of Stored Life', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7002, 1), + (5003, 'Glyph of Frantic Infusion', 7, 30224, 65535, 127, 131071, 0, 4, 1, 0, 7003, 1), + (5004, 'Glyph of Angry Thoughts', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7004, 1), + (5005, 'Foraging', 8, 65535, 65535, 127, 131071, 0, 1, 0, 0, 7062, 1), + (6000, 'Harm Touch', 9, 16, 65535, 127, 131071, 0, 3, 0, 0, 7800, 1), + (6001, 'Lay on Hands', 9, 4, 65535, 127, 131071, 0, 3, 0, 0, 7850, 1), + (6002, 'Hunter\'s Attack Power', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 6546, 1), + (6106, 'Sustained Destruction', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 6106, 1), + (6302, 'Hastened Reckless Abandon', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6302, 1), + (6362, 'Hastened Recklessness', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6362, 1), + (6478, 'Hastened Blessing of Resurrection', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6478, 1), + (6481, 'Hastened Divine Resurrection', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6481, 1), + (6488, 'Flurry of Life', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 6488, 1), + (6489, 'Hastened Holyforge', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6489, 1), + (6492, 'Inquisitor\'s Judgement', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 6492, 1), + (6988, 'Extended Group Bestial Alignment', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 6988, 1), + (7000, 'Voice of Thule', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 6639, 1), + (7001, 'Zan Fi\'s Whistle', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 7872, 1), + (7002, 'Summon Remains', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 9500, 1), + (7003, 'Forceful Rejuvenation', -1, 32318, 65535, 127, 131071, 0, 2, 0, 0, 9502, 1), + (7007, 'Summon Remains', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 9501, 1), + (7009, 'Teleport Bind', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 1419, 1), + (7016, 'Glyph of the Master', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7016, 1), + (7017, 'Glyph of Lost Secrets', 7, 32318, 65535, 127, 131071, 0, 4, 1, 0, 7017, 1), + (7018, 'Glyph of Genari Might', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7018, 1), + (7019, 'Glyph of the Cataclysm', 7, 65535, 65535, 127, 131071, 0, 4, 1, 0, 7019, 1), + (7025, 'Group Shrink', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 7669, 1), + (7033, 'Lasting Bravery', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 7033, 1), + (7036, 'Hastened Blast of Anger', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 7036, 1), + (7050, 'Call of the Hero', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 1017, 1), + (7060, 'Precision of Axes', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 4809, 1), + (7070, 'Hastened Distraction Attack', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6941, 1), + (7105, 'Deathly Pact', -1, 1040, 65535, 127, 131071, 0, 3, 0, 0, 976, 1), + (7106, 'Planar Durability', -1, 16768, 65535, 127, 131071, 0, 3, 0, 0, 6467, 1), + (7107, 'Hastened Getaway', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 7005, 1), + (7108, 'Divine Aura', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 977, 1), + (7109, 'Hastened Wrath of the Wild', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 7664, 1), + (7689, 'Burst of Life', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7689, 1), + (7690, 'Spirit Mastery', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 7690, 1), + (7695, 'Quickened Blood of Avoling', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 7695, 1), + (7698, 'Dead Man Floating', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 7698, 1), + (7699, 'Dread Incarnate', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 7699, 1), + (7700, 'Flurry', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 7700, 1), + (7703, 'Death Bloom', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 7703, 1), + (7712, 'Disruptive Persecution', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 7712, 1), + (7715, 'Hastened Whisperwind', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 7715, 1), + (7743, 'Hastened Guardian of the Forest', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 7743, 1), + (7746, 'Hastened Flusterbolt', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 7746, 1), + (7747, 'Volatile Arrow', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 7747, 1), + (7748, 'Pathfinder\'s Grace', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 7748, 1), + (7751, 'Hastened Cover Tracks', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 7751, 1), + (7754, 'Steed of Souls', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 7754, 1), + (7755, 'Scourge Skin', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 7755, 1), + (7756, 'Death\'s Effigy', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 7756, 1), + (7757, 'Hastened Visage of Death', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 7757, 1), + (7760, 'Hastened Hate Step', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 7760, 1), + (7801, 'Songwriting', 6, 128, 65535, 127, 131071, 0, 3, 0, 0, 9001, 1), + (7809, 'Hybrid Research', 6, 16412, 65535, 127, 131071, 0, 2, 0, 0, 9011, 1), + (7819, 'Written Prayer', 6, 546, 65535, 127, 131071, 0, 2, 0, 0, 9021, 1), + (7925, 'Sionachie\'s Crescendo', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 1018, 1), + (8081, 'Summon Resupply Agent', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 9000, 1), + (8130, 'Summon Clockwork Banker', 5, 65535, 65535, 127, 131071, 0, 4, 0, 1, 9031, 1), + (8200, 'Hastened Dirge of the Sleepwalker', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10329, 1), + (8201, 'Vainglorious Shout ', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10330, 1), + (8202, 'Lyre Leap ', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10331, 1), + (8203, 'Domination Mastery ', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10332, 1), + (8204, 'Lyrical Prankster', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10333, 1), + (8205, 'Selo\'s Kick ', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10336, 1), + (8261, 'A Tune Stuck In Your Head', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 10339, 1), + (8262, 'The Show Must Go On', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 7010, 1), + (8300, 'Spell Casting Subtlety', -1, 16384, 65535, 127, 131071, 0, 2, 0, 0, 10370, 1), + (8301, 'Improved Natural Invisibility', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 10373, 1), + (8302, 'Protection of the Warder', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 10374, 1), + (8303, 'Nature\'s Salve', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 10377, 1), + (8304, 'Focus of Animus', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 10380, 1), + (8314, 'Fluid March', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 8314, 1), + (8317, 'Hastened Selo\'s Kick', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 8317, 1), + (8319, 'Hastened Bellow', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 8319, 1), + (8322, 'Belltone Mind', -1, 128, 65535, 127, 131071, 0, 3, 0, 0, 8322, 1), + (8325, 'Subtle Blows', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 8325, 1), + (8331, 'Enhanced Thief\'s Eyes', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 8331, 1), + (8332, 'Extended Languid Bite', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 8332, 1), + (8335, 'Quickened Malosinete', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 8335, 1), + (8341, 'Drape of Shadows', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 8341, 1), + (8342, 'Host in the Shell', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 8342, 1), + (8347, 'Hastened Mana Draw', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8347, 1), + (8350, 'Hastened Mezmerization', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 8350, 1), + (8400, 'Self Preservation', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 10400, 1), + (8401, 'Hastened Frenzy', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 10401, 1), + (8402, 'Extended Havoc', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 10404, 1), + (8500, 'Healing Frenzy', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10450, 1), + (8501, 'Overpowering Strikes', -1, 6, 65535, 127, 131071, 0, 3, 0, 0, 10453, 1), + (8502, 'Quickened Blessing of Ressurection', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10456, 1), + (8503, 'Hastened Atonement', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10459, 1), + (8504, 'Improved Sanctuary', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10462, 1), + (8505, 'Blessing of Sanctuary', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10463, 1), + (8506, 'Hastened Celestial Hammer', -1, 2, 65535, 127, 131071, 0, 3, 0, 0, 10464, 1), + (8600, 'Spirit of Eagle', -1, 40, 65535, 127, 131071, 0, 3, 0, 0, 10500, 1), + (8601, 'Flight of Eagles', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10501, 1), + (8602, 'Egress', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10502, 1), + (8603, 'Spirits of Nature', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10503, 1), + (8604, 'Wall of Wind', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10506, 1), + (8605, 'Hastened Spirit of the Wood', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10511, 1), + (8606, 'Hastened Convergence of Spirits', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10514, 1), + (8700, 'Beam of Slumber', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 10550, 1), + (8701, 'Phantasmic Reflex', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 10551, 1), + (8702, 'Friendly Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 10557, 1), + (8703, 'Hastened Self Stasis', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 10558, 1), + (8704, 'Forceful Banishment', -1, 8192, 65535, 127, 131071, 0, 3, 0, 0, 10561, 1), + (8708, 'Hastened Cascading Rage', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 6908, 1), + (8800, 'Force of Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 10600, 1), + (8801, 'Aspect of Zomm', -1, 6144, 65535, 127, 131071, 0, 3, 0, 0, 10603, 1), + (8802, 'Extended Shared Health', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 10610, 1), + (8900, 'Agile Feet', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10650, 1), + (8901, 'Hastened Defensive Poses', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10653, 1), + (8902, 'Extended Impenetrable Discipline', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10656, 1), + (8903, 'Hastened Destructive Force', -1, 64, 65535, 127, 131071, 0, 3, 0, 0, 10657, 1), + (9001, 'Reluctant Benevolence', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 10701, 1), + (9100, 'Bestow Divine Aura', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10752, 1), + (9101, 'Blessing of Purification', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10753, 1), + (9102, 'Sense the Dead', -1, 1030, 65535, 127, 131071, 0, 3, 0, 0, 10754, 1), + (9200, 'Hastened Auspice of the Hunter', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10800, 1), + (9201, 'Clenched Jaw', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10803, 1), + (9202, 'Scout\'s Mastery of Fire', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10806, 1), + (9203, 'Scout\'s Mastery of Ice', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10809, 1), + (9205, 'Scout\'s Mastery of Slashing', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10815, 1), + (9206, 'Scout\'s Mastery of Piercing', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10818, 1), + (9207, 'Scout\'s Mastery of Blunt Weapons', -1, 8, 65535, 127, 131071, 0, 3, 0, 0, 10821, 1), + (9300, 'Massive Strike', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 10850, 1), + (9301, 'Strikethrough', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 10853, 1), + (9400, 'Hate\'s Attraction', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10900, 1), + (9401, 'Feigned Minion', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10903, 1), + (9402, 'Hastened Summon Remains', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10909, 1), + (9403, 'Visage of Death', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10912, 1), + (9404, 'Cascading Theft of Life', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10915, 1), + (9500, 'Extended Sloth', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10950, 1), + (9501, 'Hastened Ancestral Aid', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10951, 1), + (9502, 'Hastened Union of Spirits', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10954, 1), + (9503, 'Group Shrink', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10957, 1), + (9504, 'Inconspicuous Totem', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10958, 1), + (9505, 'Extended Pestilence', -1, 512, 65535, 127, 131071, 0, 3, 0, 0, 10959, 1), + (9600, 'Hastened Taunt', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 11000, 1), + (9601, 'Extended Shield Reflect', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 11003, 1), + (9602, 'Extended Commanding Voice', -1, 1, 65535, 127, 131071, 0, 3, 0, 0, 11004, 1), + (9700, 'Hastened Destruction', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 11050, 1), + (9701, 'Netherstep', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 11055, 1), + (9702, 'Beam of Displacement', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 11056, 1), + (9703, 'Translocate', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 11057, 1), + (9704, 'Teleport', -1, 2048, 65535, 127, 131071, 0, 3, 0, 0, 11058, 1), + (10367, 'Ageless Enmity', -1, 1, 65535, 127, 131071, 0, 2, 0, 0, 10367, 1), + (10389, 'Extended Trickery', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 10389, 1), + (10392, 'Ageless Enmity', -1, 20, 65535, 127, 131071, 0, 2, 0, 0, 10392, 1), + (10393, 'Shackles of Tunare', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10393, 1), + (10394, 'Beacon of the Righteous', -1, 4, 65535, 127, 131071, 0, 3, 0, 0, 10394, 1), + (10395, 'Bobbing Corpse', -1, 16, 65535, 127, 131071, 0, 3, 0, 0, 10395, 1), + (10396, 'Group Spirit of the White Wolf', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10396, 1), + (10397, 'Group Spirit of the Black Wolf', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10397, 1), + (10405, 'Hastened Deflection Discipline', -1, 20, 65535, 127, 131071, 0, 3, 0, 0, 10405, 1), + (10410, 'Rogue Triple Attack Skillup Test', -1, 256, 65535, 127, 131071, 0, 3, 0, 1, 10410, 1), + (10413, 'Hastened Host of the Elements', -1, 4096, 65535, 127, 131071, 0, 3, 0, 0, 10413, 1), + (10424, 'Hand of Ro', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10424, 1), + (10425, 'Fixation of Ro', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10425, 1), + (10426, 'Peaceful Spirit of the Wood', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10426, 1), + (10427, 'Peaceful Convergence of Spirits', -1, 32, 65535, 127, 131071, 0, 3, 0, 0, 10427, 1), + (10434, 'Quickened Army of the Dead', -1, 1024, 65535, 127, 131071, 0, 3, 0, 0, 10434, 1), + (11073, 'Playing Possum', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11073, 1), + (11074, 'Cat-like Reflexes', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11074, 1), + (11077, 'Hastened Bite of the Asp', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11077, 1), + (11078, 'Hastened Gorilla Smash', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11078, 1), + (11079, 'Hastened Raven\'s Claw', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11079, 1), + (11080, 'Chameleon Strike', -1, 16384, 65535, 127, 131071, 0, 3, 0, 0, 11080, 1), + (11085, 'Two Hands, No Mercy!', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 11085, 1), + (11088, 'Hastened Cry of Battle', -1, 32768, 65535, 127, 131071, 0, 3, 0, 0, 11088, 1), + (12600, 'Hastened Frenzied Stabbing', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 12600, 1), + (12603, 'Extended Frenzied Stabbing Discipline', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 12603, 1), + (12606, 'Speed of the Scoundrel', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 12606, 1), + (12607, 'Hastened Pinpoint', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 12607, 1), + (12615, 'Hastened Twisted Chance Discipline', -1, 256, 65535, 127, 131071, 0, 3, 0, 0, 12615, 1), + (15073, 'Banestrike', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 15073, 1), + (15074, 'Hastened Banestrike', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 15074, 1), + (30050, 'Unknown AA 30050', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 30050, 1), + (30100, 'Unknown AA 30100', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 30100, 1), + (30150, 'Unknown AA 30150', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 30150, 1), + (30175, 'Unknown AA 30175', 2, 65335, 65535, 127, 131071, 0, 4, 0, 1, 30175, 1), + (30180, 'Unknown AA 30180', 2, 128, 65535, 127, 131071, 0, 4, 0, 1, 30180, 1), + (30185, 'Unknown AA 30185', 2, 64, 65535, 127, 131071, 0, 4, 0, 1, 30185, 1), + (30190, 'Unknown AA 30190', 2, 8, 65535, 127, 131071, 0, 4, 0, 1, 30190, 1), + (30195, 'Unknown AA 30195', 2, 65535, 65535, 127, 131071, 0, 4, 0, 1, 30195, 1); + +DROP TABLE IF EXISTS `aa_ranks`; +CREATE TABLE IF NOT EXISTS `aa_ranks` ( + `id` int(10) unsigned NOT NULL, + `upper_hotkey_sid` int(10) NOT NULL DEFAULT '-1', + `lower_hotkey_sid` int(10) NOT NULL DEFAULT '-1', + `title_sid` int(10) NOT NULL DEFAULT '-1', + `desc_sid` int(10) NOT NULL DEFAULT '-1', + `cost` int(10) NOT NULL DEFAULT '1', + `level_req` int(10) NOT NULL DEFAULT '51', + `spell` int(10) NOT NULL DEFAULT '-1', + `spell_type` int(10) NOT NULL DEFAULT '0', + `recast_time` int(10) NOT NULL DEFAULT '0', + `expansion` int(10) NOT NULL DEFAULT '0', + `prev_id` int(10) NOT NULL DEFAULT '-1', + `next_id` int(10) NOT NULL DEFAULT '-1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO `aa_ranks` (`id`, `upper_hotkey_sid`, `lower_hotkey_sid`, `title_sid`, `desc_sid`, `cost`, `level_req`, `spell`, `spell_type`, `recast_time`, `expansion`, `prev_id`, `next_id`) VALUES + (2, -1, -1, 2, 2, 1, 51, -1, 0, 0, 3, -1, 3), + (3, -1, -1, 2, 2, 1, 51, -1, 0, 0, 3, 2, 4), + (4, -1, -1, 2, 2, 1, 51, -1, 0, 0, 3, 3, 5), + (5, -1, -1, 2, 2, 1, 51, -1, 0, 0, 3, 4, 6), + (6, -1, -1, 2, 2, 1, 51, -1, 0, 0, 3, 5, 292), + (7, -1, -1, 7, 7, 1, 51, -1, 0, 0, 3, -1, 8), + (8, -1, -1, 7, 7, 1, 51, -1, 0, 0, 3, 7, 9), + (9, -1, -1, 7, 7, 1, 51, -1, 0, 0, 3, 8, 10), + (10, -1, -1, 7, 7, 1, 51, -1, 0, 0, 3, 9, 11), + (11, -1, -1, 7, 7, 1, 51, -1, 0, 0, 3, 10, 302), + (12, -1, -1, 12, 12, 1, 51, -1, 0, 0, 3, -1, 13), + (13, -1, -1, 12, 12, 1, 51, -1, 0, 0, 3, 12, 14), + (14, -1, -1, 12, 12, 1, 51, -1, 0, 0, 3, 13, 15), + (15, -1, -1, 12, 12, 1, 51, -1, 0, 0, 3, 14, 16), + (16, -1, -1, 12, 12, 1, 51, -1, 0, 0, 3, 15, 312), + (17, -1, -1, 17, 17, 1, 51, -1, 0, 0, 3, -1, 18), + (18, -1, -1, 17, 17, 1, 51, -1, 0, 0, 3, 17, 19), + (19, -1, -1, 17, 17, 1, 51, -1, 0, 0, 3, 18, 20), + (20, -1, -1, 17, 17, 1, 51, -1, 0, 0, 3, 19, 21), + (21, -1, -1, 17, 17, 1, 51, -1, 0, 0, 3, 20, 322), + (22, -1, -1, 22, 22, 1, 51, -1, 0, 0, 3, -1, 23), + (23, -1, -1, 22, 22, 1, 51, -1, 0, 0, 3, 22, 24), + (24, -1, -1, 22, 22, 1, 51, -1, 0, 0, 3, 23, 25), + (25, -1, -1, 22, 22, 1, 51, -1, 0, 0, 3, 24, 26), + (26, -1, -1, 22, 22, 1, 51, -1, 0, 0, 3, 25, 332), + (27, -1, -1, 27, 27, 1, 51, -1, 0, 0, 3, -1, 28), + (28, -1, -1, 27, 27, 1, 51, -1, 0, 0, 3, 27, 29), + (29, -1, -1, 27, 27, 1, 51, -1, 0, 0, 3, 28, 30), + (30, -1, -1, 27, 27, 1, 51, -1, 0, 0, 3, 29, 31), + (31, -1, -1, 27, 27, 1, 51, -1, 0, 0, 3, 30, 342), + (32, -1, -1, 32, 32, 1, 51, -1, 0, 0, 3, -1, 33), + (33, -1, -1, 32, 32, 1, 51, -1, 0, 0, 3, 32, 34), + (34, -1, -1, 32, 32, 1, 51, -1, 0, 0, 3, 33, 35), + (35, -1, -1, 32, 32, 1, 51, -1, 0, 0, 3, 34, 36), + (36, -1, -1, 32, 32, 1, 51, -1, 0, 0, 3, 35, 352), + (37, -1, -1, 37, 37, 1, 51, -1, 0, 0, 3, -1, 38), + (38, -1, -1, 37, 37, 1, 51, -1, 0, 0, 3, 37, 39), + (39, -1, -1, 37, 37, 1, 51, -1, 0, 0, 3, 38, 40), + (40, -1, -1, 37, 37, 1, 51, -1, 0, 0, 3, 39, 41), + (41, -1, -1, 37, 37, 1, 51, -1, 0, 0, 3, 40, 362), + (42, -1, -1, 42, 42, 1, 51, -1, 0, 0, 3, -1, 43), + (43, -1, -1, 42, 42, 1, 51, -1, 0, 0, 3, 42, 44), + (44, -1, -1, 42, 42, 1, 51, -1, 0, 0, 3, 43, 45), + (45, -1, -1, 42, 42, 1, 51, -1, 0, 0, 3, 44, 46), + (46, -1, -1, 42, 42, 1, 51, -1, 0, 0, 3, 45, 372), + (47, -1, -1, 47, 47, 1, 51, -1, 0, 0, 3, -1, 48), + (48, -1, -1, 47, 47, 1, 51, -1, 0, 0, 3, 47, 49), + (49, -1, -1, 47, 47, 1, 51, -1, 0, 0, 3, 48, 50), + (50, -1, -1, 47, 47, 1, 51, -1, 0, 0, 3, 49, 51), + (51, -1, -1, 47, 47, 1, 51, -1, 0, 0, 3, 50, 382), + (52, -1, -1, 52, 52, 1, 51, -1, 0, 0, 3, -1, 53), + (53, -1, -1, 52, 52, 1, 51, -1, 0, 0, 3, 52, 54), + (54, -1, -1, 52, 52, 1, 51, -1, 0, 0, 3, 53, 55), + (55, -1, -1, 52, 52, 1, 51, -1, 0, 0, 3, 54, 56), + (56, -1, -1, 52, 52, 1, 51, -1, 0, 0, 3, 55, 392), + (57, -1, -1, 57, 57, 1, 51, -1, 0, 0, 3, -1, 58), + (58, -1, -1, 57, 57, 1, 51, -1, 0, 0, 3, 57, 59), + (59, -1, -1, 57, 57, 1, 51, -1, 0, 0, 3, 58, 60), + (60, -1, -1, 57, 57, 1, 51, -1, 0, 0, 3, 59, 61), + (61, -1, -1, 57, 57, 1, 51, -1, 0, 0, 3, 60, 402), + (62, -1, -1, 62, 62, 1, 51, -1, 0, 0, 3, -1, 63), + (63, -1, -1, 62, 62, 1, 51, -1, 0, 0, 3, 62, 64), + (64, -1, -1, 62, 62, 1, 51, -1, 0, 0, 3, 63, 672), + (68, -1, -1, 68, 68, 1, 51, -1, 0, 0, 3, -1, 69), + (69, -1, -1, 68, 68, 1, 51, -1, 0, 0, 3, 68, 70), + (70, -1, -1, 68, 68, 1, 51, -1, 0, 0, 3, 69, -1), + (71, -1, -1, 71, 71, 1, 51, -1, 0, 0, 3, -1, 72), + (72, -1, -1, 71, 71, 1, 51, -1, 0, 0, 3, 71, 73), + (73, -1, -1, 71, 71, 1, 51, -1, 0, 0, 3, 72, 676), + (74, -1, -1, 74, 74, 1, 51, -1, 0, 0, 3, -1, 75), + (75, -1, -1, 74, 74, 1, 51, -1, 0, 0, 3, 74, 76), + (76, -1, -1, 74, 74, 1, 51, -1, 0, 0, 3, 75, -1), + (77, -1, -1, 77, 77, 2, 55, -1, 0, 0, 3, -1, 78), + (78, -1, -1, 77, 77, 4, 55, -1, 0, 0, 3, 77, 79), + (79, -1, -1, 77, 77, 6, 55, -1, 0, 0, 3, 78, 434), + (80, -1, -1, 80, 80, 2, 55, -1, 0, 0, 3, -1, 81), + (81, -1, -1, 80, 80, 4, 55, -1, 0, 0, 3, 80, 82), + (82, -1, -1, 80, 80, 6, 55, -1, 0, 0, 3, 81, 437), + (83, -1, -1, 83, 83, 2, 55, -1, 0, 0, 3, -1, 84), + (84, -1, -1, 83, 83, 4, 55, -1, 0, 0, 3, 83, 85), + (85, -1, -1, 83, 83, 6, 55, -1, 0, 0, 3, 84, 13099), + (86, -1, -1, 86, 86, 2, 55, -1, 0, 0, 3, -1, 87), + (87, -1, -1, 86, 86, 4, 55, -1, 0, 0, 3, 86, 88), + (88, -1, -1, 86, 86, 6, 55, -1, 0, 0, 3, 87, 266), + (92, -1, -1, 92, 92, 2, 55, -1, 0, 0, 3, -1, 93), + (93, -1, -1, 92, 92, 4, 55, -1, 0, 0, 3, 92, 94), + (94, -1, -1, 92, 92, 6, 55, -1, 0, 0, 3, 93, -1), + (98, -1, -1, 98, 98, 2, 55, -1, 0, 0, 3, -1, 99), + (99, -1, -1, 98, 98, 4, 55, -1, 0, 0, 3, 98, 100), + (100, -1, -1, 98, 98, 6, 55, -1, 0, 0, 3, 99, 4767), + (101, -1, -1, 101, 101, 2, 55, -1, 0, 0, 3, -1, 102), + (102, -1, -1, 101, 101, 4, 55, -1, 0, 0, 3, 101, 103), + (103, -1, -1, 101, 101, 6, 55, -1, 0, 0, 3, 102, -1), + (104, -1, -1, 104, 104, 2, 55, -1, 0, 0, 3, -1, 105), + (105, -1, -1, 104, 104, 4, 55, -1, 0, 0, 3, 104, 106), + (106, -1, -1, 104, 104, 6, 55, -1, 0, 0, 3, 105, -1), + (107, -1, -1, 107, 107, 2, 55, -1, 0, 0, 3, -1, 108), + (108, -1, -1, 107, 107, 4, 55, -1, 0, 0, 3, 107, 109), + (109, -1, -1, 107, 107, 6, 55, -1, 0, 0, 3, 108, 7541), + (110, -1, -1, 110, 110, 2, 55, -1, 0, 0, 3, -1, 111), + (111, -1, -1, 110, 110, 4, 55, -1, 0, 0, 3, 110, 112), + (112, -1, -1, 110, 110, 6, 55, -1, 0, 0, 3, 111, -1), + (113, -1, -1, 113, 113, 2, 55, -1, 0, 0, 3, -1, 114), + (114, -1, -1, 113, 113, 4, 55, -1, 0, 0, 3, 113, 115), + (115, -1, -1, 113, 113, 6, 55, -1, 0, 0, 3, 114, 443), + (116, -1, -1, 116, 116, 2, 55, -1, 0, 0, 3, -1, 117), + (117, -1, -1, 116, 116, 4, 55, -1, 0, 0, 3, 116, 118), + (118, -1, -1, 116, 116, 6, 55, -1, 0, 0, 3, 117, -1), + (119, -1, -1, 119, 119, 2, 55, -1, 0, 0, 3, -1, 120), + (120, -1, -1, 119, 119, 4, 55, -1, 0, 0, 3, 119, 121), + (121, -1, -1, 119, 119, 6, 55, -1, 0, 0, 3, 120, 440), + (122, -1, -1, 122, 122, 2, 55, -1, 0, 0, 3, -1, 123), + (123, -1, -1, 122, 122, 4, 55, -1, 0, 0, 3, 122, 124), + (124, -1, -1, 122, 122, 6, 55, -1, 0, 0, 3, 123, 454), + (125, -1, -1, 125, 125, 2, 55, -1, 0, 0, 3, -1, 126), + (126, -1, -1, 125, 125, 4, 55, -1, 0, 0, 3, 125, 127), + (127, -1, -1, 125, 125, 6, 55, -1, 0, 0, 3, 126, 449), + (128, 128, 128, 128, 128, 9, 59, 5228, 1, 4320, 3, -1, -1), + (129, 129, 129, 129, 129, 5, 59, 2738, 2, 64800, 3, -1, -1), + (130, 130, 130, 130, 130, 3, 59, 2739, 3, 7, 3, -1, -1), + (131, 131, 131, 131, 131, 5, 59, 2740, 4, 900, 3, -1, 531), + (132, 132, 132, 132, 132, 6, 59, 2741, 5, 600, 3, -1, -1), + (136, 136, -1, 136, 136, 5, 59, 2742, 7, 1800, 3, -1, 15341), + (137, -1, -1, 137, 137, 3, 59, -1, 0, 0, 3, -1, 138), + (138, -1, -1, 137, 137, 6, 59, -1, 0, 0, 3, 137, 139), + (139, -1, -1, 137, 137, 9, 59, -1, 0, 0, 3, 138, -1), + (140, 140, -1, 140, 140, 6, 59, 2771, 3, 4320, 3, -1, -1), + (141, -1, -1, 141, 12863, 3, 59, -1, 0, 0, 3, -1, 142), + (142, -1, -1, 141, 12863, 6, 59, -1, 0, 0, 3, 141, 143), + (143, -1, -1, 141, 12863, 9, 59, -1, 0, 0, 3, 142, 12863), + (144, -1, -1, 144, 144, 5, 59, -1, 0, 0, 3, -1, -1), + (145, 145, 145, 145, 145, 9, 59, 2761, 2, 4320, 3, -1, -1), + (146, 146, 146, 146, 146, 5, 59, 2749, 2, 180, 3, -1, 5069), + (147, -1, -1, 147, 147, 3, 59, -1, 0, 0, 3, -1, 148), + (148, -1, -1, 147, 147, 6, 59, -1, 0, 0, 3, 147, 149), + (149, -1, -1, 147, 147, 9, 59, -1, 0, 0, 3, 148, -1), + (150, -1, -1, 150, 150, 3, 59, -1, 0, 0, 3, -1, 151), + (151, -1, -1, 150, 150, 6, 59, -1, 0, 0, 3, 150, 152), + (152, -1, -1, 150, 150, 9, 59, -1, 0, 0, 3, 151, -1), + (153, 153, 153, 153, 153, 5, 59, 2750, 3, 2160, 3, -1, 1519), + (155, 155, 155, 155, 155, 9, 59, 2758, 8, 60, 3, -1, 533), + (156, 156, 156, 156, 156, 6, 59, 2734, 2, 4320, 3, -1, -1), + (158, -1, -1, 158, 158, 3, 59, -1, 0, 0, 3, -1, -1), + (159, -1, -1, 159, 159, 2, 59, -1, 0, 0, 3, -1, 160), + (160, -1, -1, 159, 159, 4, 59, -1, 0, 0, 3, 159, 161), + (161, -1, -1, 159, 159, 6, 59, -1, 0, 0, 3, 160, -1), + (162, 162, 162, 162, 162, 5, 59, 2753, 3, 8640, 3, -1, -1), + (163, 163, 163, 163, 163, 5, 59, 2752, 2, 2160, 3, -1, -1), + (167, 167, 167, 167, 167, 6, 59, 2754, 14, 900, 3, -1, 5879), + (168, 168, 168, 168, 168, 3, 59, 2795, 4, 10, 3, -1, 169), + (169, 168, 168, 168, 168, 6, 59, 2796, 4, 10, 3, 168, 170), + (170, 168, 168, 168, 168, 9, 59, 2797, 4, 10, 3, 169, 15241), + (171, 171, 171, 171, 171, 3, 59, 2798, 4, 10, 3, -1, 172), + (172, 171, 171, 171, 171, 6, 59, 2799, 4, 10, 3, 171, 173), + (173, 171, 171, 171, 171, 9, 59, 2800, 4, 10, 3, 172, 15244), + (174, 174, 174, 174, 174, 3, 59, 2792, 4, 10, 3, -1, 175), + (175, 174, 174, 174, 174, 6, 59, 2793, 4, 10, 3, 174, 176), + (176, 174, 174, 174, 174, 9, 59, 2794, 4, 10, 3, 175, 15247), + (177, 177, 177, 177, 177, 3, 59, 2789, 4, 10, 3, -1, 178), + (178, 177, 177, 177, 177, 6, 59, 2790, 4, 10, 3, 177, 179), + (179, 177, 177, 177, 177, 9, 59, 2791, 4, 10, 3, 178, 15250), + (182, -1, -1, 182, 182, 5, 59, -1, 0, 0, 3, -1, -1), + (183, 183, 183, 183, 183, 9, 59, 2755, 4, 8640, 3, -1, -1), + (184, 184, 184, 184, 184, 3, 59, 2756, 5, 4320, 3, -1, 5953), + (185, 185, 185, 185, 185, 5, 59, 2757, 6, 4320, 3, -1, -1), + (186, 186, 186, 186, 186, 3, 59, 2772, 7, 7, 3, -1, -1), + (187, 187, 187, 187, 187, 6, 59, 2764, 8, 4320, 3, -1, -1), + (188, 188, 188, 188, 188, 9, 59, 2190, 2, 30, 3, -1, 1277), + (190, -1, -1, 190, 190, 3, 59, -1, 0, 0, 3, -1, 191), + (191, -1, -1, 190, 190, 6, 59, -1, 0, 0, 3, 190, 192), + (192, -1, -1, 190, 190, 9, 59, -1, 0, 0, 3, 191, 1524), + (193, 193, 193, 193, 193, 3, 59, 2775, 3, 4320, 3, -1, -1), + (194, 194, 194, 194, 194, 5, 59, 2874, 0, 1, 3, -1, -1), + (195, -1, -1, 195, 195, 6, 59, -1, 0, 0, 3, -1, -1), + (196, -1, -1, 196, 196, 6, 59, -1, 0, 0, 3, -1, -1), + (197, 197, 197, 197, 197, 5, 59, 2765, 2, 7, 3, -1, -1), + (198, -1, -1, 198, 198, 9, 59, -1, 0, 0, 3, -1, -1), + (199, -1, -1, 199, 199, 3, 59, -1, 0, 0, 3, -1, 200), + (200, -1, -1, 199, 199, 6, 59, -1, 0, 0, 3, 199, 201), + (201, -1, -1, 199, 199, 9, 59, -1, 0, 0, 3, 200, 12507), + (205, -1, -1, 205, 205, 9, 59, -1, 0, 0, 3, -1, -1), + (206, 206, 206, 206, 206, 5, 59, 2875, 0, 1, 3, -1, -1), + (208, 208, 208, 208, 208, 6, 59, 2766, 2, 4320, 3, -1, -1), + (210, -1, -1, 210, 210, 3, 59, -1, 0, 0, 3, -1, 211), + (211, -1, -1, 210, 210, 6, 59, -1, 0, 0, 3, 210, 212), + (212, -1, -1, 210, 210, 9, 59, -1, 0, 0, 3, 211, 1316), + (213, -1, -1, 213, 213, 3, 59, -1, 0, 0, 3, -1, 214), + (214, -1, -1, 213, 213, 6, 59, -1, 0, 0, 3, 213, 215), + (215, -1, -1, 213, 213, 9, 59, -1, 0, 0, 3, 214, 700), + (225, -1, -1, 225, 225, 3, 59, -1, 0, 0, 3, -1, 226), + (226, -1, -1, 225, 225, 6, 59, -1, 0, 0, 3, 225, 227), + (227, -1, -1, 225, 225, 9, 59, -1, 0, 0, 3, 226, -1), + (230, -1, -1, 230, 230, 3, 59, -1, 0, 0, 3, -1, 231), + (231, -1, -1, 230, 230, 6, 59, -1, 0, 0, 3, 230, 232), + (232, -1, -1, 230, 230, 9, 59, -1, 0, 0, 3, 231, 539), + (233, 233, 233, 233, 233, 9, 59, 5248, 1, 1800, 3, -1, -1), + (237, -1, -1, 237, 237, 3, 59, -1, 0, 0, 3, -1, 238), + (238, -1, -1, 237, 237, 6, 59, -1, 0, 0, 3, 237, 239), + (239, -1, -1, 237, 237, 9, 59, -1, 0, 0, 3, 238, -1), + (240, -1, -1, 240, 240, 3, 59, -1, 0, 0, 3, -1, 241), + (241, -1, -1, 240, 240, 6, 59, -1, 0, 0, 3, 240, 242), + (242, -1, -1, 240, 240, 9, 59, -1, 0, 0, 3, 241, -1), + (243, 243, -1, 243, 243, 9, 59, 5244, 1, 1440, 3, -1, -1), + (244, -1, -1, 244, 244, 3, 59, -1, 0, 0, 3, -1, 245), + (245, -1, -1, 244, 244, 6, 59, -1, 0, 0, 3, 244, 246), + (246, -1, -1, 244, 244, 9, 59, -1, 0, 0, 3, 245, 8328), + (247, -1, -1, 247, 247, 3, 59, -1, 0, 0, 3, -1, 248), + (248, -1, -1, 247, 247, 6, 59, -1, 0, 0, 3, 247, 249), + (249, -1, -1, 247, 247, 9, 59, -1, 0, 0, 3, 248, 504), + (254, 254, 254, 254, 254, 5, 59, 5232, 12, 4320, 3, -1, -1), + (255, -1, -1, 255, 255, 3, 59, -1, 0, 0, 3, -1, 256), + (256, -1, -1, 255, 255, 6, 59, -1, 0, 0, 3, 255, 257), + (257, -1, -1, 255, 255, 9, 59, -1, 0, 0, 3, 256, 542), + (258, 258, -1, 258, 258, 5, 59, 5233, 1, 600, 3, -1, 10578), + (259, 259, 259, 259, 259, 5, 59, 5234, 2, 900, 3, -1, -1), + (260, 260, -1, 260, 260, 3, 59, 5229, 3, 2160, 3, -1, 261), + (261, 260, -1, 260, 260, 6, 59, 5230, 3, 2160, 3, 260, 262), + (262, 260, -1, 260, 260, 9, 59, 5231, 3, 2160, 3, 261, 8309), + (263, -1, -1, 263, 263, 3, 59, -1, 0, 0, 3, -1, 264), + (264, -1, -1, 263, 263, 6, 59, -1, 0, 0, 3, 263, 265), + (265, -1, -1, 263, 263, 9, 59, -1, 0, 0, 3, 264, -1), + (266, -1, -1, 86, 86, 8, 59, -1, 0, 0, 3, 88, 10467), + (267, -1, -1, 267, 267, 3, 59, -1, 0, 0, 3, -1, 268), + (268, -1, -1, 267, 267, 6, 59, -1, 0, 0, 3, 267, 269), + (269, -1, -1, 267, 267, 9, 59, -1, 0, 0, 3, 268, 640), + (273, -1, -1, 273, 273, 5, 59, 2767, 0, 0, 3, -1, -1), + (274, 274, 274, 274, 274, 5, 59, 2748, 4, 4320, 3, -1, -1), + (275, -1, -1, 275, 275, 3, 59, -1, 0, 0, 3, -1, 276), + (276, -1, -1, 275, 275, 6, 59, -1, 0, 0, 3, 275, 277), + (277, -1, -1, 275, 275, 9, 59, -1, 0, 0, 3, 276, 701), + (278, -1, -1, 278, 278, 5, 59, -1, 0, 0, 3, -1, -1), + (279, -1, -1, 279, 279, 5, 59, -1, 0, 0, 3, -1, 18972), + (280, -1, -1, 280, 280, 3, 59, -1, 0, 0, 3, -1, 281), + (281, -1, -1, 280, 280, 6, 59, -1, 0, 0, 3, 280, 282), + (282, -1, -1, 280, 280, 9, 59, -1, 0, 0, 3, 281, -1), + (283, -1, -1, 283, 283, 3, 59, -1, 0, 0, 3, -1, 284), + (284, -1, -1, 283, 283, 6, 59, -1, 0, 0, 3, 283, 285), + (285, -1, -1, 283, 283, 9, 59, -1, 0, 0, 3, 284, -1), + (286, -1, -1, 286, 286, 3, 59, -1, 0, 0, 3, -1, -1), + (287, -1, -1, 287, 287, 6, 59, -1, 0, 0, 3, -1, -1), + (288, -1, -1, 288, 288, 6, 59, -1, 0, 0, 3, -1, -1), + (289, 289, 289, 289, 289, 5, 59, 3290, 3, 300, 3, -1, 1607), + (290, 290, 290, 290, 290, 4, 59, 3289, 4, 720, 3, -1, 13173), + (291, 291, 291, 291, 291, 6, 59, 3291, 5, 900, 3, -1, 1123), + (292, -1, -1, 2, 2, 1, 61, -1, 0, 0, 4, 6, 293), + (293, -1, -1, 2, 2, 1, 61, -1, 0, 0, 4, 292, 294), + (294, -1, -1, 2, 2, 1, 62, -1, 0, 0, 4, 293, 295), + (295, -1, -1, 2, 2, 1, 62, -1, 0, 0, 4, 294, 296), + (296, -1, -1, 2, 2, 1, 63, -1, 0, 0, 4, 295, 297), + (297, -1, -1, 2, 2, 1, 63, -1, 0, 0, 4, 296, 298), + (298, -1, -1, 2, 2, 1, 64, -1, 0, 0, 4, 297, 299), + (299, -1, -1, 2, 2, 1, 64, -1, 0, 0, 4, 298, 300), + (300, -1, -1, 2, 2, 1, 65, -1, 0, 0, 4, 299, 301), + (301, -1, -1, 2, 2, 1, 65, -1, 0, 0, 4, 300, -1), + (302, -1, -1, 7, 7, 1, 61, -1, 0, 0, 4, 11, 303), + (303, -1, -1, 7, 7, 1, 61, -1, 0, 0, 4, 302, 304), + (304, -1, -1, 7, 7, 1, 62, -1, 0, 0, 4, 303, 305), + (305, -1, -1, 7, 7, 1, 62, -1, 0, 0, 4, 304, 306), + (306, -1, -1, 7, 7, 1, 63, -1, 0, 0, 4, 305, 307), + (307, -1, -1, 7, 7, 1, 63, -1, 0, 0, 4, 306, 308), + (308, -1, -1, 7, 7, 1, 64, -1, 0, 0, 4, 307, 309), + (309, -1, -1, 7, 7, 1, 64, -1, 0, 0, 4, 308, 310), + (310, -1, -1, 7, 7, 1, 65, -1, 0, 0, 4, 309, 311), + (311, -1, -1, 7, 7, 1, 65, -1, 0, 0, 4, 310, -1), + (312, -1, -1, 12, 12, 1, 61, -1, 0, 0, 4, 16, 313), + (313, -1, -1, 12, 12, 1, 61, -1, 0, 0, 4, 312, 314), + (314, -1, -1, 12, 12, 1, 62, -1, 0, 0, 4, 313, 315), + (315, -1, -1, 12, 12, 1, 62, -1, 0, 0, 4, 314, 316), + (316, -1, -1, 12, 12, 1, 63, -1, 0, 0, 4, 315, 317), + (317, -1, -1, 12, 12, 1, 63, -1, 0, 0, 4, 316, 318), + (318, -1, -1, 12, 12, 1, 64, -1, 0, 0, 4, 317, 319), + (319, -1, -1, 12, 12, 1, 64, -1, 0, 0, 4, 318, 320), + (320, -1, -1, 12, 12, 1, 65, -1, 0, 0, 4, 319, 321), + (321, -1, -1, 12, 12, 1, 65, -1, 0, 0, 4, 320, -1), + (322, -1, -1, 17, 17, 1, 61, -1, 0, 0, 4, 21, 323), + (323, -1, -1, 17, 17, 1, 61, -1, 0, 0, 4, 322, 324), + (324, -1, -1, 17, 17, 1, 62, -1, 0, 0, 4, 323, 325), + (325, -1, -1, 17, 17, 1, 62, -1, 0, 0, 4, 324, 326), + (326, -1, -1, 17, 17, 1, 63, -1, 0, 0, 4, 325, 327), + (327, -1, -1, 17, 17, 1, 63, -1, 0, 0, 4, 326, 328), + (328, -1, -1, 17, 17, 1, 64, -1, 0, 0, 4, 327, 329), + (329, -1, -1, 17, 17, 1, 64, -1, 0, 0, 4, 328, 330), + (330, -1, -1, 17, 17, 1, 65, -1, 0, 0, 4, 329, 331), + (331, -1, -1, 17, 17, 1, 65, -1, 0, 0, 4, 330, -1), + (332, -1, -1, 22, 22, 1, 61, -1, 0, 0, 4, 26, 333), + (333, -1, -1, 22, 22, 1, 61, -1, 0, 0, 4, 332, 334), + (334, -1, -1, 22, 22, 1, 62, -1, 0, 0, 4, 333, 335), + (335, -1, -1, 22, 22, 1, 62, -1, 0, 0, 4, 334, 336), + (336, -1, -1, 22, 22, 1, 63, -1, 0, 0, 4, 335, 337), + (337, -1, -1, 22, 22, 1, 63, -1, 0, 0, 4, 336, 338), + (338, -1, -1, 22, 22, 1, 64, -1, 0, 0, 4, 337, 339), + (339, -1, -1, 22, 22, 1, 64, -1, 0, 0, 4, 338, 340), + (340, -1, -1, 22, 22, 1, 65, -1, 0, 0, 4, 339, 341), + (341, -1, -1, 22, 22, 1, 65, -1, 0, 0, 4, 340, -1), + (342, -1, -1, 27, 27, 1, 61, -1, 0, 0, 4, 31, 343), + (343, -1, -1, 27, 27, 1, 61, -1, 0, 0, 4, 342, 344), + (344, -1, -1, 27, 27, 1, 62, -1, 0, 0, 4, 343, 345), + (345, -1, -1, 27, 27, 1, 62, -1, 0, 0, 4, 344, 346), + (346, -1, -1, 27, 27, 1, 63, -1, 0, 0, 4, 345, 347), + (347, -1, -1, 27, 27, 1, 63, -1, 0, 0, 4, 346, 348), + (348, -1, -1, 27, 27, 1, 64, -1, 0, 0, 4, 347, 349), + (349, -1, -1, 27, 27, 1, 64, -1, 0, 0, 4, 348, 350), + (350, -1, -1, 27, 27, 1, 65, -1, 0, 0, 4, 349, 351), + (351, -1, -1, 27, 27, 1, 65, -1, 0, 0, 4, 350, -1), + (352, -1, -1, 32, 32, 1, 61, -1, 0, 0, 4, 36, 353), + (353, -1, -1, 32, 32, 1, 61, -1, 0, 0, 4, 352, 354), + (354, -1, -1, 32, 32, 1, 62, -1, 0, 0, 4, 353, 355), + (355, -1, -1, 32, 32, 1, 62, -1, 0, 0, 4, 354, 356), + (356, -1, -1, 32, 32, 1, 63, -1, 0, 0, 4, 355, 357), + (357, -1, -1, 32, 32, 1, 63, -1, 0, 0, 4, 356, 358), + (358, -1, -1, 32, 32, 1, 64, -1, 0, 0, 4, 357, 359), + (359, -1, -1, 32, 32, 1, 64, -1, 0, 0, 4, 358, 360), + (360, -1, -1, 32, 32, 1, 65, -1, 0, 0, 4, 359, 361), + (361, -1, -1, 32, 32, 1, 65, -1, 0, 0, 4, 360, -1), + (362, -1, -1, 37, 37, 1, 61, -1, 0, 0, 4, 41, 363), + (363, -1, -1, 37, 37, 1, 61, -1, 0, 0, 4, 362, 364), + (364, -1, -1, 37, 37, 1, 62, -1, 0, 0, 4, 363, 365), + (365, -1, -1, 37, 37, 1, 62, -1, 0, 0, 4, 364, 366), + (366, -1, -1, 37, 37, 1, 63, -1, 0, 0, 4, 365, 367), + (367, -1, -1, 37, 37, 1, 63, -1, 0, 0, 4, 366, 368), + (368, -1, -1, 37, 37, 1, 64, -1, 0, 0, 4, 367, 369), + (369, -1, -1, 37, 37, 1, 64, -1, 0, 0, 4, 368, 370), + (370, -1, -1, 37, 37, 1, 65, -1, 0, 0, 4, 369, 371), + (371, -1, -1, 37, 37, 1, 65, -1, 0, 0, 4, 370, -1), + (372, -1, -1, 42, 42, 1, 61, -1, 0, 0, 4, 46, 373), + (373, -1, -1, 42, 42, 1, 61, -1, 0, 0, 4, 372, 374), + (374, -1, -1, 42, 42, 1, 62, -1, 0, 0, 4, 373, 375), + (375, -1, -1, 42, 42, 1, 62, -1, 0, 0, 4, 374, 376), + (376, -1, -1, 42, 42, 1, 63, -1, 0, 0, 4, 375, 377), + (377, -1, -1, 42, 42, 1, 63, -1, 0, 0, 4, 376, 378), + (378, -1, -1, 42, 42, 1, 64, -1, 0, 0, 4, 377, 379), + (379, -1, -1, 42, 42, 1, 64, -1, 0, 0, 4, 378, 380), + (380, -1, -1, 42, 42, 1, 65, -1, 0, 0, 4, 379, 381), + (381, -1, -1, 42, 42, 1, 65, -1, 0, 0, 4, 380, -1), + (382, -1, -1, 47, 47, 1, 61, -1, 0, 0, 4, 51, 383), + (383, -1, -1, 47, 47, 1, 61, -1, 0, 0, 4, 382, 384), + (384, -1, -1, 47, 47, 1, 62, -1, 0, 0, 4, 383, 385), + (385, -1, -1, 47, 47, 1, 62, -1, 0, 0, 4, 384, 386), + (386, -1, -1, 47, 47, 1, 63, -1, 0, 0, 4, 385, 387), + (387, -1, -1, 47, 47, 1, 63, -1, 0, 0, 4, 386, 388), + (388, -1, -1, 47, 47, 1, 64, -1, 0, 0, 4, 387, 389), + (389, -1, -1, 47, 47, 1, 64, -1, 0, 0, 4, 388, 390), + (390, -1, -1, 47, 47, 1, 65, -1, 0, 0, 4, 389, 391), + (391, -1, -1, 47, 47, 1, 65, -1, 0, 0, 4, 390, -1), + (392, -1, -1, 52, 52, 1, 61, -1, 0, 0, 4, 56, 393), + (393, -1, -1, 52, 52, 1, 61, -1, 0, 0, 4, 392, 394), + (394, -1, -1, 52, 52, 1, 62, -1, 0, 0, 4, 393, 395), + (395, -1, -1, 52, 52, 1, 62, -1, 0, 0, 4, 394, 396), + (396, -1, -1, 52, 52, 1, 63, -1, 0, 0, 4, 395, 397), + (397, -1, -1, 52, 52, 1, 63, -1, 0, 0, 4, 396, 398), + (398, -1, -1, 52, 52, 1, 64, -1, 0, 0, 4, 397, 399), + (399, -1, -1, 52, 52, 1, 64, -1, 0, 0, 4, 398, 400), + (400, -1, -1, 52, 52, 1, 65, -1, 0, 0, 4, 399, 401), + (401, -1, -1, 52, 52, 1, 65, -1, 0, 0, 4, 400, -1), + (402, -1, -1, 57, 57, 1, 61, -1, 0, 0, 4, 61, 403), + (403, -1, -1, 57, 57, 1, 61, -1, 0, 0, 4, 402, 404), + (404, -1, -1, 57, 57, 1, 62, -1, 0, 0, 4, 403, 405), + (405, -1, -1, 57, 57, 1, 62, -1, 0, 0, 4, 404, 406), + (406, -1, -1, 57, 57, 1, 63, -1, 0, 0, 4, 405, 407), + (407, -1, -1, 57, 57, 1, 63, -1, 0, 0, 4, 406, 408), + (408, -1, -1, 57, 57, 1, 64, -1, 0, 0, 4, 407, 409), + (409, -1, -1, 57, 57, 1, 64, -1, 0, 0, 4, 408, 410), + (410, -1, -1, 57, 57, 1, 65, -1, 0, 0, 4, 409, 411), + (411, -1, -1, 57, 57, 1, 65, -1, 0, 0, 4, 410, -1), + (412, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, -1, 413), + (413, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, 412, 414), + (414, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, 413, 415), + (415, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, 414, 416), + (416, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, 415, 417), + (417, -1, -1, 412, 412, 3, 51, -1, 0, 0, 3, 416, -1), + (418, -1, -1, 418, 418, 2, 61, -1, 0, 0, 4, -1, 419), + (419, -1, -1, 418, 418, 2, 62, -1, 0, 0, 4, 418, 420), + (420, -1, -1, 418, 418, 2, 63, -1, 0, 0, 4, 419, 421), + (421, -1, -1, 418, 418, 2, 64, -1, 0, 0, 4, 420, 422), + (422, -1, -1, 418, 418, 2, 65, -1, 0, 0, 4, 421, 1001), + (423, -1, -1, 423, 423, 3, 61, -1, 0, 0, 4, -1, 424), + (424, -1, -1, 423, 423, 3, 63, -1, 0, 0, 4, 423, 425), + (425, -1, -1, 423, 423, 3, 65, -1, 0, 0, 4, 424, -1), + (426, -1, -1, 426, 426, 3, 61, -1, 0, 0, 4, -1, 427), + (427, -1, -1, 426, 426, 3, 62, -1, 0, 0, 4, 426, 428), + (428, -1, -1, 426, 426, 3, 63, -1, 0, 0, 4, 427, 429), + (429, -1, -1, 426, 426, 3, 64, -1, 0, 0, 4, 428, 430), + (430, -1, -1, 426, 426, 3, 65, -1, 0, 0, 4, 429, -1), + (434, -1, -1, 77, 77, 2, 62, -1, 0, 0, 4, 79, 435), + (435, -1, -1, 77, 77, 4, 63, -1, 0, 0, 4, 434, 436), + (436, -1, -1, 77, 77, 6, 64, -1, 0, 0, 4, 435, 1083), + (437, -1, -1, 80, 80, 2, 62, -1, 0, 0, 4, 82, 438), + (438, -1, -1, 80, 80, 3, 63, -1, 0, 0, 4, 437, 439), + (439, -1, -1, 80, 80, 4, 64, -1, 0, 0, 4, 438, 1086), + (440, -1, -1, 119, 119, 2, 62, -1, 0, 0, 4, 121, 441), + (441, -1, -1, 119, 119, 2, 63, -1, 0, 0, 4, 440, 442), + (442, -1, -1, 119, 119, 2, 64, -1, 0, 0, 4, 441, 1053), + (443, -1, -1, 113, 113, 3, 62, -1, 0, 0, 4, 115, 444), + (444, -1, -1, 113, 113, 3, 63, -1, 0, 0, 4, 443, 445), + (445, -1, -1, 113, 113, 3, 64, -1, 0, 0, 4, 444, -1), + (446, -1, -1, 446, 735, 3, 62, -1, 0, 0, 4, -1, 447), + (447, -1, -1, 446, 735, 3, 63, -1, 0, 0, 4, 446, 448), + (448, -1, -1, 446, 735, 3, 64, -1, 0, 0, 4, 447, 7050), + (449, -1, -1, 125, 125, 3, 61, -1, 0, 0, 4, 127, 450), + (450, -1, -1, 125, 125, 3, 62, -1, 0, 0, 4, 449, 451), + (451, -1, -1, 125, 125, 3, 63, -1, 0, 0, 4, 450, 452), + (452, -1, -1, 125, 125, 3, 64, -1, 0, 0, 4, 451, 453), + (453, -1, -1, 125, 125, 3, 65, -1, 0, 0, 4, 452, 1061), + (454, -1, -1, 122, 122, 3, 61, -1, 0, 0, 4, 124, 455), + (455, -1, -1, 122, 122, 3, 62, -1, 0, 0, 4, 454, 456), + (456, -1, -1, 122, 122, 3, 63, -1, 0, 0, 4, 455, 457), + (457, -1, -1, 122, 122, 3, 64, -1, 0, 0, 4, 456, 458), + (458, -1, -1, 122, 122, 3, 65, -1, 0, 0, 4, 457, 1066), + (459, 459, 459, 459, 459, 2, 61, 3297, 8, 180, 4, -1, 460), + (460, 459, 459, 459, 459, 4, 63, 3298, 8, 180, 4, 459, 461), + (461, 459, 459, 459, 459, 6, 65, 3299, 8, 180, 4, 460, 1189), + (462, -1, -1, 462, 462, 2, 63, -1, 0, 0, 4, -1, 463), + (463, -1, -1, 462, 462, 2, 64, -1, 0, 0, 4, 462, 464), + (464, -1, -1, 462, 462, 2, 65, -1, 0, 0, 4, 463, 7994), + (468, -1, -1, 468, 468, 2, 63, -1, 0, 0, 4, -1, 469), + (469, -1, -1, 468, 468, 2, 64, -1, 0, 0, 4, 468, 470), + (470, -1, -1, 468, 468, 2, 65, -1, 0, 0, 4, 469, 6439), + (471, -1, -1, 471, 471, 2, 63, -1, 0, 0, 4, -1, 472), + (472, -1, -1, 471, 471, 2, 64, -1, 0, 0, 4, 471, 473), + (473, -1, -1, 471, 471, 2, 65, -1, 0, 0, 4, 472, 12899), + (474, -1, -1, 474, 474, 2, 63, -1, 0, 0, 4, -1, 475), + (475, -1, -1, 474, 474, 2, 64, -1, 0, 0, 4, 474, 476), + (476, -1, -1, 474, 474, 2, 65, -1, 0, 0, 4, 475, 15359), + (477, -1, -1, 477, 477, 2, 63, -1, 0, 0, 4, -1, 478), + (478, -1, -1, 477, 477, 2, 64, -1, 0, 0, 4, 477, 479), + (479, -1, -1, 477, 477, 2, 65, -1, 0, 0, 4, 478, 6233), + (480, -1, -1, 480, 480, 2, 63, -1, 0, 0, 4, -1, 481), + (481, -1, -1, 480, 480, 2, 64, -1, 0, 0, 4, 480, 482), + (482, -1, -1, 480, 480, 2, 65, -1, 0, 0, 4, 481, 4921), + (483, -1, -1, 483, 483, 2, 63, -1, 0, 0, 4, -1, 484), + (484, -1, -1, 483, 483, 2, 64, -1, 0, 0, 4, 483, 485), + (485, -1, -1, 483, 483, 2, 65, -1, 0, 0, 4, 484, -1), + (489, -1, -1, 489, 489, 3, 63, -1, 0, 0, 4, -1, 490), + (490, -1, -1, 489, 489, 3, 64, -1, 0, 0, 4, 489, 491), + (491, -1, -1, 489, 489, 3, 65, -1, 0, 0, 4, 490, 7116), + (492, -1, -1, 492, 492, 2, 63, -1, 0, 0, 4, -1, 493), + (493, -1, -1, 492, 492, 2, 64, -1, 0, 0, 4, 492, 494), + (494, -1, -1, 492, 492, 2, 65, -1, 0, 0, 4, 493, 7128), + (495, -1, -1, 495, 495, 2, 63, -1, 0, 0, 4, -1, 496), + (496, -1, -1, 495, 495, 2, 64, -1, 0, 0, 4, 495, 497), + (497, -1, -1, 495, 495, 2, 65, -1, 0, 0, 4, 496, 6260), + (498, -1, -1, 498, 498, 2, 63, -1, 0, 0, 4, -1, 499), + (499, -1, -1, 498, 498, 2, 64, -1, 0, 0, 4, 498, 500), + (500, -1, -1, 498, 498, 2, 65, -1, 0, 0, 4, 499, 886), + (501, -1, -1, 501, 501, 2, 63, -1, 0, 0, 4, -1, 502), + (502, -1, -1, 501, 501, 2, 64, -1, 0, 0, 4, 501, 503), + (503, -1, -1, 501, 501, 2, 65, -1, 0, 0, 4, 502, 6319), + (504, -1, -1, 247, 247, 3, 62, -1, 0, 0, 4, 249, 505), + (505, -1, -1, 247, 247, 3, 63, -1, 0, 0, 4, 504, 506), + (506, -1, -1, 247, 247, 3, 64, -1, 0, 0, 4, 505, -1), + (507, 507, 507, 507, 507, 3, 61, 3252, 9, 180, 4, -1, 508), + (508, 507, 507, 507, 507, 3, 63, 3253, 9, 180, 4, 507, 509), + (509, 507, 507, 507, 507, 3, 65, 3254, 9, 180, 4, 508, -1), + (510, 510, 510, 510, 510, 3, 61, 3255, 37, 240, 4, -1, 511), + (511, 510, 510, 510, 510, 3, 63, 3256, 37, 240, 4, 510, 512), + (512, 510, 510, 510, 510, 3, 65, 3257, 37, 240, 4, 511, 7425), + (513, 513, 513, 513, 513, 3, 61, 3274, 4, 120, 4, -1, 514), + (514, 513, 513, 513, 513, 3, 63, 3275, 4, 120, 4, 513, 515), + (515, 513, 513, 513, 513, 3, 65, 3276, 4, 120, 4, 514, 6095), + (516, 516, 516, 516, 516, 2, 62, 3338, 5, 480, 4, -1, 6398), + (517, 517, 517, 517, 517, 3, 61, 3258, 12, 600, 4, -1, 518), + (518, 517, 517, 517, 517, 3, 63, 3259, 12, 600, 4, 517, 519), + (519, 517, 517, 517, 517, 3, 65, 3260, 12, 600, 4, 518, 1440), + (520, 520, 520, 520, 520, 3, 61, 3265, 6, 540, 4, -1, 521), + (521, 520, 520, 520, 520, 3, 63, 3266, 6, 540, 4, 520, 522), + (522, 520, 520, 520, 520, 3, 65, 3267, 6, 540, 4, 521, 1507), + (523, 523, 523, 523, 523, 5, 61, 3268, 9, 540, 4, -1, 524), + (524, 523, 523, 523, 523, 4, 63, 3269, 9, 540, 4, 523, 525), + (525, 523, 523, 523, 523, 3, 65, 3270, 9, 540, 4, 524, -1), + (526, 526, 526, 526, 526, 5, 62, 3248, 0, 1, 4, -1, 527), + (527, 526, 526, 526, 526, 3, 64, 3249, 0, 1, 4, 526, -1), + (528, 528, 528, 528, 528, 4, 61, 3283, 5, 720, 4, -1, 529), + (529, 528, 528, 528, 528, 3, 63, 3284, 5, 720, 4, 528, 530), + (530, 528, 528, 528, 528, 2, 65, 3285, 5, 720, 4, 529, 900), + (531, 131, 131, 131, 131, 3, 63, 3250, 4, 900, 4, 131, 532), + (532, 131, 131, 131, 131, 6, 64, 3251, 4, 900, 4, 531, 1203), + (533, 155, 155, 155, 155, 6, 64, 3264, 8, 60, 4, 155, 1344), + (534, 534, 534, 534, 534, 3, 61, 3261, 4, 2160, 4, -1, 535), + (535, 534, 534, 534, 534, 3, 63, 3262, 4, 2160, 4, 534, 536), + (536, 534, 534, 534, 534, 3, 65, 3263, 4, 2160, 4, 535, 715), + (537, -1, -1, 537, 537, 3, 63, -1, 0, 0, 4, -1, 538), + (538, -1, -1, 537, 537, 3, 64, -1, 0, 0, 4, 537, -1), + (539, -1, -1, 230, 230, 2, 63, -1, 0, 0, 4, 232, 540), + (540, -1, -1, 230, 230, 4, 64, -1, 0, 0, 4, 539, 541), + (541, -1, -1, 230, 230, 6, 65, -1, 0, 0, 4, 540, 12677), + (542, -1, -1, 255, 255, 2, 63, -1, 0, 0, 4, 257, 543), + (543, -1, -1, 255, 255, 4, 64, -1, 0, 0, 4, 542, 544), + (544, -1, -1, 255, 255, 6, 65, -1, 0, 0, 4, 543, 1163), + (545, 545, 545, 545, 545, 3, 61, 3271, 3, 900, 4, -1, 546), + (546, 545, 545, 545, 545, 3, 63, 3272, 3, 900, 4, 545, 547), + (547, 545, 545, 545, 545, 3, 65, 3273, 3, 900, 4, 546, 1293), + (548, 548, 548, 548, 548, 4, 61, 3277, 5, 900, 4, -1, 549), + (549, 548, 548, 548, 548, 3, 63, 3278, 5, 900, 4, 548, 550), + (550, 548, 548, 548, 548, 2, 65, 3279, 5, 900, 4, 549, 1225), + (551, -1, -1, 551, 551, 2, 61, -1, 0, 0, 4, -1, 552), + (552, -1, -1, 551, 551, 2, 62, -1, 0, 0, 4, 551, 553), + (553, -1, -1, 551, 551, 2, 63, -1, 0, 0, 4, 552, 554), + (554, -1, -1, 551, 551, 2, 64, -1, 0, 0, 4, 553, 555), + (555, -1, -1, 551, 551, 2, 65, -1, 0, 0, 4, 554, 1633), + (556, -1, -1, 556, 556, 2, 61, -1, 0, 0, 4, -1, 557), + (557, -1, -1, 556, 556, 2, 62, -1, 0, 0, 4, 556, 558), + (558, -1, -1, 556, 556, 2, 63, -1, 0, 0, 4, 557, 559), + (559, -1, -1, 556, 556, 2, 64, -1, 0, 0, 4, 558, 560), + (560, -1, -1, 556, 556, 2, 65, -1, 0, 0, 4, 559, 1563), + (561, -1, -1, 561, 561, 2, 61, -1, 0, 0, 4, -1, 562), + (562, -1, -1, 561, 561, 4, 63, -1, 0, 0, 4, 561, 563), + (563, -1, -1, 561, 561, 6, 65, -1, 0, 0, 4, 562, 1624), + (564, -1, -1, 564, 564, 3, 61, -1, 0, 0, 4, -1, 565), + (565, -1, -1, 564, 564, 3, 63, -1, 0, 0, 4, 564, 566), + (566, -1, -1, 564, 564, 3, 65, -1, 0, 0, 4, 565, 1621), + (567, -1, -1, 567, 567, 5, 63, -1, 0, 0, 4, -1, 5061), + (574, -1, -1, 574, 574, 3, 61, -1, 0, 0, 4, -1, 575), + (575, -1, -1, 574, 574, 3, 63, -1, 0, 0, 4, 574, 576), + (576, -1, -1, 574, 574, 3, 65, -1, 0, 0, 4, 575, 7718), + (577, -1, -1, 577, 577, 2, 61, -1, 0, 0, 4, -1, 578), + (578, -1, -1, 577, 577, 4, 63, -1, 0, 0, 4, 577, 579), + (579, -1, -1, 577, 577, 6, 65, -1, 0, 0, 4, 578, -1), + (580, -1, -1, 580, 580, 4, 61, -1, 0, 0, 4, -1, 581), + (581, -1, -1, 580, 580, 3, 63, -1, 0, 0, 4, 580, 582), + (582, -1, -1, 580, 580, 2, 65, -1, 0, 0, 4, 581, -1), + (583, -1, -1, 583, 583, 2, 63, -1, 0, 0, 4, -1, 584), + (584, -1, -1, 583, 583, 2, 64, -1, 0, 0, 4, 583, 585), + (585, -1, -1, 583, 583, 2, 65, -1, 0, 0, 4, 584, -1), + (586, -1, -1, 586, 586, 2, 61, -1, 0, 0, 4, -1, 587), + (587, -1, -1, 586, 586, 4, 63, -1, 0, 0, 4, 586, 588), + (588, -1, -1, 586, 586, 6, 65, -1, 0, 0, 4, 587, 6130), + (589, -1, -1, 589, 589, 3, 61, -1, 0, 0, 4, -1, 590), + (590, -1, -1, 589, 589, 3, 63, -1, 0, 0, 4, 589, 591), + (591, -1, -1, 589, 589, 3, 65, -1, 0, 0, 4, 590, 893), + (592, 592, 592, 592, 592, 6, 63, 3282, 2, 18, 4, -1, 702), + (593, -1, -1, 593, 593, 3, 61, -1, 0, 0, 4, -1, 594), + (594, -1, -1, 593, 593, 3, 63, -1, 0, 0, 4, 593, 595), + (595, -1, -1, 593, 593, 3, 65, -1, 0, 0, 4, 594, 5972), + (596, -1, -1, 596, 596, 2, 61, -1, 0, 0, 4, -1, 597), + (597, -1, -1, 596, 596, 4, 63, -1, 0, 0, 4, 596, 598), + (598, -1, -1, 596, 596, 6, 65, -1, 0, 0, 4, 597, 5973), + (599, -1, -1, 599, 599, 2, 61, -1, 0, 0, 4, -1, 600), + (600, -1, -1, 599, 599, 4, 63, -1, 0, 0, 4, 599, 601), + (601, -1, -1, 599, 599, 6, 65, -1, 0, 0, 4, 600, 1536), + (602, -1, -1, 602, 602, 3, 61, -1, 0, 0, 4, -1, 603), + (603, -1, -1, 602, 602, 3, 63, -1, 0, 0, 4, 602, 604), + (604, -1, -1, 602, 602, 3, 65, -1, 0, 0, 4, 603, 1533), + (605, -1, -1, 605, 605, 6, 63, -1, 0, 0, 4, -1, -1), + (606, -1, -1, 606, 606, 1, 61, -1, 0, 0, 4, -1, 607), + (607, -1, -1, 606, 606, 1, 62, -1, 0, 0, 4, 606, 608), + (608, -1, -1, 606, 606, 1, 63, -1, 0, 0, 4, 607, 609), + (609, -1, -1, 606, 606, 1, 64, -1, 0, 0, 4, 608, 610), + (610, -1, -1, 606, 606, 1, 65, -1, 0, 0, 4, 609, -1), + (611, -1, -1, 611, 611, 2, 61, -1, 0, 0, 4, -1, 612), + (612, -1, -1, 611, 611, 2, 62, -1, 0, 0, 4, 611, 613), + (613, -1, -1, 611, 611, 2, 63, -1, 0, 0, 4, 612, 614), + (614, -1, -1, 611, 611, 2, 64, -1, 0, 0, 4, 613, 615), + (615, -1, -1, 611, 611, 2, 65, -1, 0, 0, 4, 614, 7175), + (616, 616, 616, 616, 616, 5, 63, 3286, 7, 900, 4, -1, 617), + (617, 616, 616, 616, 616, 4, 64, 3287, 7, 900, 4, 616, 618), + (618, 616, 616, 616, 616, 3, 65, 3288, 7, 900, 4, 617, 1248), + (619, 619, 619, 619, 619, 3, 61, 3292, 6, 900, 4, -1, 620), + (620, 619, 619, 619, 619, 2, 63, 3293, 6, 900, 4, 619, 621), + (621, 619, 619, 619, 619, 1, 65, 3294, 6, 900, 4, 620, 721), + (622, -1, -1, 622, 622, 3, 61, -1, 0, 0, 4, -1, 623), + (623, -1, -1, 622, 622, 3, 62, -1, 0, 0, 4, 622, 624), + (624, -1, -1, 622, 622, 3, 63, -1, 0, 0, 4, 623, 8329), + (625, -1, -1, 625, 625, 1, 61, -1, 0, 0, 4, -1, 626), + (626, -1, -1, 625, 625, 2, 63, -1, 0, 0, 4, 625, 627), + (627, -1, -1, 625, 625, 3, 65, -1, 0, 0, 4, 626, 4733), + (628, -1, -1, 628, 628, 2, 62, -1, 0, 0, 4, -1, 629), + (629, -1, -1, 628, 628, 4, 64, -1, 0, 0, 4, 628, -1), + (630, 630, 630, 630, 630, 6, 63, 5243, 7, 1, 4, -1, -1), + (631, -1, -1, 631, 631, 2, 61, -1, 0, 0, 4, -1, 632), + (632, -1, -1, 631, 631, 3, 63, -1, 0, 0, 4, 631, 633), + (633, -1, -1, 631, 631, 4, 65, -1, 0, 0, 4, 632, 1172), + (634, -1, -1, 634, 634, 1, 61, -1, 0, 0, 4, -1, 635), + (635, -1, -1, 634, 634, 2, 63, -1, 0, 0, 4, 634, 636), + (636, -1, -1, 634, 634, 3, 65, -1, 0, 0, 4, 635, 844), + (637, -1, -1, 637, 637, 3, 61, -1, 0, 0, 4, -1, 638), + (638, -1, -1, 637, 637, 6, 63, -1, 0, 0, 4, 637, 639), + (639, -1, -1, 637, 637, 9, 65, -1, 0, 0, 4, 638, 770), + (640, -1, -1, 267, 267, 2, 61, -1, 0, 0, 4, 269, 641), + (641, -1, -1, 267, 267, 4, 63, -1, 0, 0, 4, 640, 642), + (642, -1, -1, 267, 267, 6, 65, -1, 0, 0, 4, 641, 924), + (643, 643, 643, 643, 643, 4, 62, 5227, 0, 1, 4, -1, -1), + (644, -1, -1, 644, 644, 4, 60, -1, 0, 0, 4, -1, 1601), + (645, 645, -1, 645, 645, 4, 64, 3614, 4, 5, 4, -1, 5999), + (649, -1, -1, 649, 649, 2, 61, -1, 0, 0, 4, -1, 650), + (650, -1, -1, 649, 649, 4, 63, -1, 0, 0, 4, 649, 651), + (651, -1, -1, 649, 649, 6, 65, -1, 0, 0, 4, 650, 5860), + (652, -1, -1, 652, 652, 2, 61, -1, 0, 0, 4, -1, 653), + (653, -1, -1, 652, 652, 4, 63, -1, 0, 0, 4, 652, 654), + (654, -1, -1, 652, 652, 6, 65, -1, 0, 0, 4, 653, -1), + (655, -1, -1, 655, 655, 3, 59, -1, 0, 0, 3, -1, 656), + (656, -1, -1, 655, 655, 6, 59, -1, 0, 0, 3, 655, 657), + (657, -1, -1, 655, 655, 9, 59, -1, 0, 0, 3, 656, -1), + (658, -1, -1, 658, 658, 2, 55, -1, 0, 0, 3, -1, 659), + (659, -1, -1, 658, 658, 4, 55, -1, 0, 0, 3, 658, 660), + (660, -1, -1, 658, 658, 6, 55, -1, 0, 0, 3, 659, 5306), + (661, -1, -1, 65, 661, 1, 51, -1, 0, 0, 3, -1, 662), + (662, -1, -1, 65, 661, 1, 51, -1, 0, 0, 3, 661, 663), + (663, -1, -1, 65, 661, 1, 51, -1, 0, 0, 3, 662, 674), + (665, -1, -1, 270, 665, 3, 59, -1, 0, 0, 3, -1, 666), + (666, -1, -1, 270, 665, 6, 59, -1, 0, 0, 3, 665, 667), + (667, -1, -1, 270, 665, 9, 59, -1, 0, 0, 3, 666, 668), + (668, -1, -1, 270, 665, 2, 63, -1, 0, 0, 4, 667, 669), + (669, -1, -1, 270, 665, 2, 64, -1, 0, 0, 4, 668, 670), + (670, -1, -1, 270, 665, 2, 65, -1, 0, 0, 4, 669, 7612), + (671, -1, -1, 671, 671, 3, 59, -1, 0, 0, 3, -1, -1), + (672, -1, -1, 62, 62, 5, 61, -1, 0, 0, 7, 64, 673), + (673, -1, -1, 62, 62, 5, 61, -1, 0, 0, 7, 672, -1), + (674, -1, -1, 65, 661, 3, 61, -1, 0, 0, 7, 663, 675), + (675, -1, -1, 65, 661, 3, 61, -1, 0, 0, 7, 674, 1031), + (676, -1, -1, 71, 71, 2, 61, -1, 0, 0, 7, 73, 677), + (677, -1, -1, 71, 71, 3, 61, -1, 0, 0, 7, 676, 978), + (678, -1, -1, 678, 678, 3, 61, -1, 0, 0, 7, -1, 679), + (679, -1, -1, 678, 678, 3, 61, -1, 0, 0, 7, 678, 680), + (680, -1, -1, 678, 678, 3, 61, -1, 0, 0, 7, 679, 681), + (681, -1, -1, 678, 678, 3, 61, -1, 0, 0, 7, 680, 682), + (682, -1, -1, 678, 678, 3, 61, -1, 0, 0, 7, 681, 6518), + (683, -1, -1, 683, 683, 3, 61, -1, 0, 0, 7, -1, 684), + (684, -1, -1, 683, 683, 6, 61, -1, 0, 0, 7, 683, 685), + (685, -1, -1, 683, 683, 9, 61, -1, 0, 0, 7, 684, 1036), + (686, -1, -1, 686, 686, 5, 55, -1, 0, 0, 7, -1, 687), + (687, -1, -1, 686, 686, 5, 55, -1, 0, 0, 7, 686, 688), + (688, -1, -1, 686, 686, 5, 55, -1, 0, 0, 7, 687, 689), + (689, -1, -1, 686, 686, 5, 55, -1, 0, 0, 7, 688, 690), + (690, -1, -1, 686, 686, 5, 55, -1, 0, 0, 7, 689, 7640), + (691, -1, -1, 691, 691, 9, 55, -1, 0, 0, 7, -1, -1), + (692, -1, -1, 692, 692, 3, 55, -1, 0, 0, 7, -1, 693), + (693, -1, -1, 692, 692, 6, 55, -1, 0, 0, 7, 692, 694), + (694, -1, -1, 692, 692, 9, 55, -1, 0, 0, 7, 693, 7647), + (695, -1, -1, 695, 695, 4, 65, -1, 0, 0, 7, -1, 696), + (696, -1, -1, 695, 695, 4, 65, -1, 0, 0, 7, 695, 697), + (697, -1, -1, 695, 695, 4, 65, -1, 0, 0, 7, 696, 698), + (698, -1, -1, 695, 695, 4, 65, -1, 0, 0, 7, 697, 699), + (699, -1, -1, 695, 695, 4, 65, -1, 0, 0, 7, 698, 15529), + (700, -1, -1, 213, 213, 9, 61, -1, 0, 0, 7, 215, -1), + (701, -1, -1, 275, 275, 9, 61, -1, 0, 0, 7, 277, -1), + (702, 592, 592, 592, 592, 3, 65, 4842, 2, 18, 7, 592, 703), + (703, 592, 592, 592, 592, 3, 65, 4843, 2, 18, 7, 702, 704), + (704, 592, 592, 592, 592, 3, 65, 4844, 2, 18, 7, 703, 705), + (705, 592, 592, 592, 592, 3, 65, 4845, 2, 18, 7, 704, 706), + (706, 592, 592, 592, 592, 3, 65, 4846, 2, 18, 7, 705, 1102), + (715, 534, 534, 534, 534, 3, 65, 5112, 4, 2160, 7, 536, 716), + (716, 534, 534, 534, 534, 6, 65, 5113, 4, 2160, 7, 715, 717), + (717, 534, 534, 534, 534, 9, 65, 5114, 4, 2160, 7, 716, 1278), + (718, 718, 718, 718, 718, 3, 65, 4521, 7, 4320, 7, -1, 719), + (719, 718, 718, 718, 718, 6, 65, 4522, 7, 4320, 7, 718, 720), + (720, 718, 718, 718, 718, 9, 65, 4523, 7, 4320, 7, 719, 1019), + (721, 619, 619, 619, 619, 5, 65, 5110, 6, 900, 7, 621, 722), + (722, 619, 619, 619, 619, 5, 65, 5111, 6, 900, 7, 721, 6296), + (723, 723, 723, 723, 723, 9, 65, 4788, 6, 30, 7, -1, 4963), + (724, -1, -1, 724, 724, 3, 65, -1, 0, 0, 7, -1, 725), + (725, -1, -1, 724, 724, 3, 65, -1, 0, 0, 7, 724, 726), + (726, -1, -1, 724, 724, 3, 65, -1, 0, 0, 7, 725, 727), + (727, -1, -1, 724, 724, 3, 65, -1, 0, 0, 7, 726, 728), + (728, -1, -1, 724, 724, 3, 65, -1, 0, 0, 7, 727, 5254), + (729, -1, -1, 729, 729, 5, 65, -1, 0, 0, 7, -1, 730), + (730, -1, -1, 729, 729, 5, 65, -1, 0, 0, 7, 729, 731), + (731, -1, -1, 729, 729, 5, 65, -1, 0, 0, 7, 730, 732), + (732, -1, -1, 729, 729, 5, 65, -1, 0, 0, 7, 731, 733), + (733, -1, -1, 729, 729, 5, 65, -1, 0, 0, 7, 732, 1467), + (734, -1, -1, 734, 734, 12, 65, -1, 0, 0, 7, -1, -1), + (735, -1, -1, 735, 735, 3, 62, -1, 0, 0, 7, -1, 736), + (736, -1, -1, 735, 735, 3, 62, -1, 0, 0, 7, 735, 737), + (737, -1, -1, 735, 735, 3, 62, -1, 0, 0, 7, 736, 7056), + (738, -1, -1, 98, 738, 3, 55, -1, 0, 0, 7, -1, 739), + (739, -1, -1, 98, 738, 6, 55, -1, 0, 0, 7, 738, 740), + (740, -1, -1, 98, 738, 9, 55, -1, 0, 0, 7, 739, 5317), + (746, 746, 746, 746, 746, 3, 65, 4549, 10, 2160, 7, -1, 747), + (747, 746, 746, 746, 746, 6, 65, 4550, 10, 2160, 7, 746, 748), + (748, 746, 746, 746, 746, 9, 65, 4551, 10, 2160, 7, 747, 1491), + (749, 749, 749, 749, 749, 5, 65, 4790, 11, 1800, 7, -1, 750), + (750, 749, 749, 749, 749, 5, 65, 4791, 11, 1800, 7, 749, 751), + (751, 749, 749, 749, 749, 5, 65, 4792, 11, 1800, 7, 750, 752), + (752, 749, 749, 749, 749, 5, 65, 4793, 11, 1800, 7, 751, 753), + (753, 749, 749, 749, 749, 5, 65, 4794, 11, 1800, 7, 752, 1206), + (754, -1, -1, 754, 754, 3, 65, -1, 0, 0, 7, -1, 755), + (755, -1, -1, 754, 754, 6, 65, -1, 0, 0, 7, 754, 756), + (756, -1, -1, 754, 754, 9, 65, -1, 0, 0, 7, 755, 7659), + (757, 757, -1, 757, 757, 5, 65, 4796, 6, 1800, 7, -1, 758), + (758, 757, -1, 757, 757, 5, 65, 4797, 6, 1800, 7, 757, 759), + (759, 757, -1, 757, 757, 5, 65, 4798, 6, 1800, 7, 758, 760), + (760, 757, -1, 757, 757, 5, 65, 4799, 6, 1800, 7, 759, 761), + (761, 757, -1, 757, 757, 5, 65, 4800, 6, 1800, 7, 760, 1222), + (762, -1, -1, 762, 762, 4, 65, -1, 0, 0, 7, -1, 763), + (763, -1, -1, 762, 762, 4, 65, -1, 0, 0, 7, 762, 764), + (764, -1, -1, 762, 762, 4, 65, -1, 0, 0, 7, 763, 765), + (765, -1, -1, 762, 762, 4, 65, -1, 0, 0, 7, 764, 766), + (766, -1, -1, 762, 762, 4, 65, -1, 0, 0, 7, 765, -1), + (767, -1, -1, 767, 767, 3, 65, -1, 0, 0, 7, -1, 768), + (768, -1, -1, 767, 767, 6, 65, -1, 0, 0, 7, 767, 769), + (769, -1, -1, 767, 767, 9, 65, -1, 0, 0, 7, 768, 1099), + (770, -1, -1, 637, 637, 3, 65, -1, 0, 0, 7, 639, 771), + (771, -1, -1, 637, 637, 6, 65, -1, 0, 0, 7, 770, 772), + (772, -1, -1, 637, 637, 9, 65, -1, 0, 0, 7, 771, 4749), + (773, 773, -1, 773, 773, 3, 65, 4552, 5, 1800, 7, -1, 774), + (774, 773, -1, 773, 773, 6, 65, 4553, 5, 1800, 7, 773, 775), + (775, 773, -1, 773, 773, 9, 65, 4554, 5, 1800, 7, 774, 5854), + (776, -1, -1, 776, 776, 3, 65, -1, 0, 0, 7, -1, 777), + (777, -1, -1, 776, 776, 3, 65, -1, 0, 0, 7, 776, 778), + (778, -1, -1, 776, 776, 3, 65, -1, 0, 0, 7, 777, 779), + (779, -1, -1, 776, 776, 3, 65, -1, 0, 0, 7, 778, 780), + (780, -1, -1, 776, 776, 3, 65, -1, 0, 0, 7, 779, -1), + (781, -1, -1, 781, 781, 12, 65, -1, 0, 0, 7, -1, 5850), + (782, -1, -1, 782, 782, 3, 65, -1, 0, 0, 7, -1, 783), + (783, -1, -1, 782, 782, 6, 65, -1, 0, 0, 7, 782, 784), + (784, -1, -1, 782, 782, 9, 65, -1, 0, 0, 7, 783, -1), + (785, 785, 785, 785, 785, 5, 65, 5235, 8, 900, 7, -1, 786), + (786, 785, 785, 785, 785, 5, 65, 5236, 8, 900, 7, 785, 787), + (787, 785, 785, 785, 785, 5, 65, 5237, 8, 900, 7, 786, 788), + (788, 785, 785, 785, 785, 5, 65, 5238, 8, 900, 7, 787, 789), + (789, 785, 785, 785, 785, 5, 65, 5239, 8, 900, 7, 788, 15235), + (790, -1, -1, 790, 790, 3, 65, -1, 0, 0, 7, -1, 791), + (791, -1, -1, 790, 790, 3, 65, -1, 0, 0, 7, 790, 792), + (792, -1, -1, 790, 790, 3, 65, -1, 0, 0, 7, 791, 793), + (793, -1, -1, 790, 790, 3, 65, -1, 0, 0, 7, 792, 794), + (794, -1, -1, 790, 790, 3, 65, -1, 0, 0, 7, 793, 5259), + (795, -1, -1, 795, 795, 5, 65, -1, 0, 0, 7, -1, 796), + (796, -1, -1, 795, 795, 5, 65, -1, 0, 0, 7, 795, 797), + (797, -1, -1, 795, 795, 5, 65, -1, 0, 0, 7, 796, 798), + (798, -1, -1, 795, 795, 5, 65, -1, 0, 0, 7, 797, 799), + (799, -1, -1, 795, 795, 5, 65, -1, 0, 0, 7, 798, 1430), + (800, -1, -1, 800, 800, 3, 65, -1, 0, 0, 7, -1, 801), + (801, -1, -1, 800, 800, 6, 65, -1, 0, 0, 7, 800, 802), + (802, -1, -1, 800, 800, 9, 65, -1, 0, 0, 7, 801, -1), + (803, -1, -1, 803, 803, 3, 65, -1, 0, 0, 7, -1, 804), + (804, -1, -1, 803, 803, 6, 65, -1, 0, 0, 7, 803, 805), + (805, -1, -1, 803, 803, 9, 65, -1, 0, 0, 7, 804, -1), + (806, -1, -1, 806, 806, 12, 65, -1, 0, 0, 7, -1, -1), + (807, -1, -1, 807, 807, 3, 65, -1, 0, 0, 7, -1, 808), + (808, -1, -1, 807, 807, 6, 65, -1, 0, 0, 7, 807, 809), + (809, -1, -1, 807, 807, 9, 65, -1, 0, 0, 7, 808, 1268), + (810, -1, -1, 810, 810, 5, 65, -1, 0, 0, 7, -1, 811), + (811, -1, -1, 810, 810, 5, 65, -1, 0, 0, 7, 810, 812), + (812, -1, -1, 810, 810, 5, 65, -1, 0, 0, 7, 811, 813), + (813, -1, -1, 810, 810, 5, 65, -1, 0, 0, 7, 812, 814), + (814, -1, -1, 810, 810, 5, 65, -1, 0, 0, 7, 813, 4824), + (815, -1, -1, 815, 815, 4, 65, -1, 0, 0, 7, -1, 816), + (816, -1, -1, 815, 815, 4, 65, -1, 0, 0, 7, 815, 817), + (817, -1, -1, 815, 815, 4, 65, -1, 0, 0, 7, 816, 818), + (818, -1, -1, 815, 815, 4, 65, -1, 0, 0, 7, 817, 819), + (819, -1, -1, 815, 815, 4, 65, -1, 0, 0, 7, 818, 5141), + (820, -1, -1, 820, 820, 3, 65, -1, 0, 0, 7, -1, 821), + (821, -1, -1, 820, 820, 6, 65, -1, 0, 0, 7, 820, 822), + (822, -1, -1, 820, 820, 9, 65, -1, 0, 0, 7, 821, 1265), + (823, -1, -1, 823, 823, 5, 65, -1, 0, 0, 7, -1, 824), + (824, -1, -1, 823, 823, 5, 65, -1, 0, 0, 7, 823, 825), + (825, -1, -1, 823, 823, 5, 65, -1, 0, 0, 7, 824, 826), + (826, -1, -1, 823, 823, 5, 65, -1, 0, 0, 7, 825, 827), + (827, -1, -1, 823, 823, 5, 65, -1, 0, 0, 7, 826, -1), + (828, 828, 828, 828, 828, 3, 65, 5240, 2, 3600, 7, -1, 829), + (829, 828, 828, 828, 828, 6, 65, 5241, 2, 3600, 7, 828, 830), + (830, 828, 828, 828, 828, 9, 65, 5242, 2, 3600, 7, 829, 16250), + (834, -1, -1, 834, 834, 3, 65, -1, 0, 0, 7, -1, 835), + (835, -1, -1, 834, 834, 3, 65, -1, 0, 0, 7, 834, 836), + (836, -1, -1, 834, 834, 3, 65, -1, 0, 0, 7, 835, 837), + (837, -1, -1, 834, 834, 3, 65, -1, 0, 0, 7, 836, 838), + (838, -1, -1, 834, 834, 3, 65, -1, 0, 0, 7, 837, -1), + (839, -1, -1, 839, 839, 5, 65, -1, 0, 0, 7, -1, 840), + (840, -1, -1, 839, 839, 5, 65, -1, 0, 0, 7, 839, 841), + (841, -1, -1, 839, 839, 5, 65, -1, 0, 0, 7, 840, 842), + (842, -1, -1, 839, 839, 5, 65, -1, 0, 0, 7, 841, 843), + (843, -1, -1, 839, 839, 5, 65, -1, 0, 0, 7, 842, 5325), + (844, -1, -1, 634, 634, 5, 65, -1, 0, 0, 7, 636, 845), + (845, -1, -1, 634, 634, 5, 65, -1, 0, 0, 7, 844, 1319), + (846, -1, -1, 846, 846, 3, 65, -1, 0, 0, 7, -1, 847), + (847, -1, -1, 846, 846, 6, 65, -1, 0, 0, 7, 846, 848), + (848, -1, -1, 846, 846, 9, 65, -1, 0, 0, 7, 847, 1301), + (849, -1, -1, 849, 849, 3, 65, -1, 0, 0, 7, -1, 850), + (850, -1, -1, 849, 849, 6, 65, -1, 0, 0, 7, 849, 851), + (851, -1, -1, 849, 849, 9, 65, -1, 0, 0, 7, 850, 10621), + (852, -1, -1, 852, 852, 5, 65, -1, 0, 0, 7, -1, 853), + (853, -1, -1, 852, 852, 5, 65, -1, 0, 0, 7, 852, 854), + (854, -1, -1, 852, 852, 5, 65, -1, 0, 0, 7, 853, 5500), + (855, -1, -1, 855, 855, 5, 65, -1, 0, 0, 7, -1, 856), + (856, -1, -1, 855, 855, 5, 65, -1, 0, 0, 7, 855, 857), + (857, -1, -1, 855, 855, 5, 65, -1, 0, 0, 7, 856, 858), + (858, -1, -1, 855, 855, 5, 65, -1, 0, 0, 7, 857, 859), + (859, -1, -1, 855, 855, 5, 65, -1, 0, 0, 7, 858, 7673), + (860, 860, 860, 860, 860, 3, 65, 3297, 5, 180, 7, -1, 861), + (861, 860, 860, 860, 860, 6, 65, 3298, 5, 180, 7, 860, 862), + (862, 860, 860, 860, 860, 9, 65, 3299, 5, 180, 7, 861, 5130), + (863, 863, -1, 863, 863, 12, 65, 5248, 6, 4320, 7, -1, -1), + (864, -1, -1, 864, 864, 3, 65, -1, 0, 0, 7, -1, 865), + (865, -1, -1, 864, 864, 6, 65, -1, 0, 0, 7, 864, 866), + (866, -1, -1, 864, 864, 9, 65, -1, 0, 0, 7, 865, 1290), + (867, -1, -1, 867, 867, 5, 65, -1, 0, 0, 7, -1, 868), + (868, -1, -1, 867, 867, 5, 65, -1, 0, 0, 7, 867, 869), + (869, -1, -1, 867, 867, 5, 65, -1, 0, 0, 7, 868, 870), + (870, -1, -1, 867, 867, 5, 65, -1, 0, 0, 7, 869, 871), + (871, -1, -1, 867, 867, 5, 65, -1, 0, 0, 7, 870, 7362), + (872, 872, 872, 872, 872, 3, 65, 4802, 5, 180, 7, -1, 873), + (873, 872, 872, 872, 872, 6, 65, 4803, 5, 180, 7, 872, 874), + (874, 872, 872, 872, 872, 9, 65, 4804, 5, 180, 7, 873, 7367), + (875, 875, 875, 875, 875, 3, 65, 4805, 5, 180, 7, -1, 876), + (876, 875, 875, 875, 875, 6, 65, 4806, 5, 180, 7, 875, 877), + (877, 875, 875, 875, 875, 9, 65, 4807, 5, 180, 7, 876, 7370), + (878, -1, -1, 878, 878, 3, 65, -1, 0, 0, 7, -1, 879), + (879, -1, -1, 878, 878, 6, 65, -1, 0, 0, 7, 878, 880), + (880, -1, -1, 878, 878, 9, 65, -1, 0, 0, 7, 879, 1539), + (881, -1, -1, 881, 881, 3, 65, -1, 0, 0, 7, -1, 882), + (882, -1, -1, 881, 881, 3, 65, -1, 0, 0, 7, 881, 883), + (883, -1, -1, 881, 881, 3, 65, -1, 0, 0, 7, 882, 884), + (884, -1, -1, 881, 881, 3, 65, -1, 0, 0, 7, 883, 885), + (885, -1, -1, 881, 881, 3, 65, -1, 0, 0, 7, 884, -1), + (886, -1, -1, 498, 498, 5, 65, -1, 0, 0, 7, 500, 887), + (887, -1, -1, 498, 498, 5, 65, -1, 0, 0, 7, 886, 975), + (888, -1, -1, 888, 888, 3, 65, -1, 0, 0, 7, -1, 889), + (889, -1, -1, 888, 888, 3, 65, -1, 0, 0, 7, 888, 890), + (890, -1, -1, 888, 888, 3, 65, -1, 0, 0, 7, 889, 891), + (891, -1, -1, 888, 888, 3, 65, -1, 0, 0, 7, 890, 892), + (892, -1, -1, 888, 888, 3, 65, -1, 0, 0, 7, 891, 16267), + (893, -1, -1, 589, 589, 5, 65, -1, 0, 0, 7, 591, 894), + (894, -1, -1, 589, 589, 5, 65, -1, 0, 0, 7, 893, 5270), + (895, -1, -1, 895, 895, 5, 65, -1, 0, 0, 7, -1, 896), + (896, -1, -1, 895, 895, 5, 65, -1, 0, 0, 7, 895, 897), + (897, -1, -1, 895, 895, 5, 65, -1, 0, 0, 7, 896, 898), + (898, -1, -1, 895, 895, 5, 65, -1, 0, 0, 7, 897, 899), + (899, -1, -1, 895, 895, 5, 65, -1, 0, 0, 7, 898, 6075), + (900, 528, 528, 528, 528, 5, 65, 4826, 5, 720, 7, 530, 901), + (901, 528, 528, 528, 528, 5, 65, 4827, 5, 720, 7, 900, 6103), + (907, -1, -1, 907, 907, 5, 65, -1, 0, 0, 7, -1, 908), + (908, -1, -1, 907, 907, 5, 65, -1, 0, 0, 7, 907, 909), + (909, -1, -1, 907, 907, 5, 65, -1, 0, 0, 7, 908, 910), + (910, -1, -1, 907, 907, 5, 65, -1, 0, 0, 7, 909, 911), + (911, -1, -1, 907, 907, 5, 65, -1, 0, 0, 7, 910, 5243), + (912, 912, 912, 912, 912, 3, 65, 4925, 4, 3600, 7, -1, 913), + (913, 912, 912, 912, 912, 6, 65, 4926, 4, 3600, 7, 912, 914), + (914, 912, 912, 912, 912, 9, 65, 4927, 4, 3600, 7, 913, 1330), + (915, -1, -1, 915, 915, 3, 65, -1, 0, 0, 7, -1, 916), + (916, -1, -1, 915, 915, 6, 65, -1, 0, 0, 7, 915, 917), + (917, -1, -1, 915, 915, 9, 65, -1, 0, 0, 7, 916, -1), + (918, -1, -1, 918, 918, 3, 65, -1, 0, 0, 7, -1, 919), + (919, -1, -1, 918, 918, 6, 65, -1, 0, 0, 7, 918, 920), + (920, -1, -1, 918, 918, 9, 65, -1, 0, 0, 7, 919, -1), + (921, 921, 921, 921, 921, 12, 65, 4833, 8, 60, 7, -1, 1340), + (922, 922, 922, 922, 922, 12, 65, 4834, 8, 60, 7, -1, 1341), + (923, 923, 923, 923, 923, 12, 65, 4835, 8, 60, 7, -1, 1342), + (924, -1, -1, 267, 267, 5, 65, -1, 0, 0, 7, 642, 925), + (925, -1, -1, 267, 267, 5, 65, -1, 0, 0, 7, 924, 5133), + (926, 926, 926, 926, 926, 3, 65, 4836, 12, 1800, 7, -1, 927), + (927, 926, 926, 926, 926, 3, 65, 4837, 12, 1800, 7, 926, 928), + (928, 926, 926, 926, 926, 3, 65, 4838, 12, 1800, 7, 927, 929), + (929, 926, 926, 926, 926, 3, 65, 4839, 12, 1800, 7, 928, 930), + (930, 926, 926, 926, 926, 3, 65, 4840, 12, 1800, 7, 929, 14991), + (931, 931, 931, 931, 931, 3, 65, 5245, 13, 4320, 7, -1, 932), + (932, 931, 931, 931, 931, 6, 65, 5246, 13, 4320, 7, 931, 933), + (933, 931, 931, 931, 931, 9, 65, 5247, 13, 4320, 7, 932, -1), + (934, -1, -1, 113, 934, 2, 55, -1, 0, 0, 3, -1, 935), + (935, -1, -1, 113, 934, 4, 55, -1, 0, 0, 3, 934, 936), + (936, -1, -1, 113, 934, 6, 55, -1, 0, 0, 3, 935, 943), + (937, -1, -1, 113, 937, 2, 55, -1, 0, 0, 3, -1, 938), + (938, -1, -1, 113, 937, 4, 55, -1, 0, 0, 3, 937, 939), + (939, -1, -1, 113, 937, 6, 55, -1, 0, 0, 3, 938, 946), + (940, -1, -1, 113, 940, 2, 55, -1, 0, 0, 3, -1, 941), + (941, -1, -1, 113, 940, 4, 55, -1, 0, 0, 3, 940, 942), + (942, -1, -1, 113, 940, 6, 55, -1, 0, 0, 3, 941, 949), + (943, -1, -1, 113, 934, 3, 62, -1, 0, 0, 4, 936, 944), + (944, -1, -1, 113, 934, 3, 63, -1, 0, 0, 4, 943, 945), + (945, -1, -1, 113, 934, 3, 64, -1, 0, 0, 4, 944, -1), + (946, -1, -1, 113, 937, 3, 62, -1, 0, 0, 4, 939, 947), + (947, -1, -1, 113, 937, 3, 63, -1, 0, 0, 4, 946, 948), + (948, -1, -1, 113, 937, 3, 64, -1, 0, 0, 4, 947, -1), + (949, -1, -1, 113, 940, 3, 62, -1, 0, 0, 4, 942, 950), + (950, -1, -1, 113, 940, 3, 63, -1, 0, 0, 4, 949, 951), + (951, -1, -1, 113, 940, 3, 64, -1, 0, 0, 4, 950, -1), + (952, -1, -1, 952, 952, 3, 61, -1, 0, 0, 4, -1, 953), + (953, -1, -1, 952, 952, 3, 63, -1, 0, 0, 4, 952, 954), + (954, -1, -1, 952, 952, 3, 65, -1, 0, 0, 4, 953, -1), + (955, -1, -1, 955, 955, 3, 61, -1, 0, 0, 4, -1, 956), + (956, -1, -1, 955, 955, 3, 62, -1, 0, 0, 4, 955, 957), + (957, -1, -1, 955, 955, 3, 63, -1, 0, 0, 4, 956, 958), + (958, -1, -1, 955, 955, 3, 64, -1, 0, 0, 4, 957, 959), + (959, -1, -1, 955, 955, 3, 65, -1, 0, 0, 4, 958, -1), + (960, 960, 960, 960, 960, 9, 59, 2760, 7, 4320, 3, -1, -1), + (961, 961, 961, 961, 961, 9, 59, 2759, 11, 4320, 3, -1, -1), + (962, -1, -1, 962, 962, 5, 65, -1, 0, 0, 7, -1, 963), + (963, -1, -1, 962, 962, 5, 65, -1, 0, 0, 7, 962, 964), + (964, -1, -1, 962, 962, 5, 65, -1, 0, 0, 7, 963, 965), + (965, -1, -1, 962, 962, 5, 65, -1, 0, 0, 7, 964, 966), + (966, -1, -1, 962, 962, 5, 65, -1, 0, 0, 7, 965, 6223), + (967, 967, 967, 967, 967, 3, 65, 4564, 10, 1800, 7, -1, 968), + (968, 967, 967, 967, 967, 6, 65, 4565, 10, 1800, 7, 967, 969), + (969, 967, 967, 967, 967, 9, 65, 4566, 10, 1800, 7, 968, 6464), + (970, 970, 970, 970, 970, 5, 65, 4828, 6, 1800, 7, -1, 971), + (971, 970, 970, 970, 970, 5, 65, 4829, 6, 1800, 7, 970, 972), + (972, 970, 970, 970, 970, 5, 65, 4830, 6, 1800, 7, 971, 973), + (973, 970, 970, 970, 970, 5, 65, 4831, 6, 1800, 7, 972, 974), + (974, 970, 970, 970, 970, 5, 65, 4832, 6, 1800, 7, 973, 1324), + (975, -1, -1, 498, 498, 5, 65, -1, 0, 0, 15, 887, 13262), + (976, -1, -1, 976, 976, 5, 59, -1, 0, 0, 15, -1, -1), + (977, 977, 977, 977, 977, 6, 64, 13835, 72, 600, 15, -1, -1), + (978, -1, -1, 71, 71, 5, 68, -1, 0, 0, 8, 677, -1), + (979, -1, -1, 979, 979, 3, 59, -1, 0, 0, 8, -1, 980), + (980, -1, -1, 979, 979, 6, 59, -1, 0, 0, 8, 979, 981), + (981, -1, -1, 979, 979, 9, 59, -1, 0, 0, 8, 980, -1), + (982, -1, -1, 982, 982, 3, 59, -1, 0, 0, 8, -1, 983), + (983, -1, -1, 982, 982, 6, 59, -1, 0, 0, 8, 982, 984), + (984, -1, -1, 982, 982, 9, 59, -1, 0, 0, 8, 983, -1), + (985, -1, -1, 985, 985, 3, 59, -1, 0, 0, 8, -1, 986), + (986, -1, -1, 985, 985, 6, 59, -1, 0, 0, 8, 985, 987), + (987, -1, -1, 985, 985, 9, 59, -1, 0, 0, 8, 986, -1), + (988, -1, -1, 988, 988, 3, 59, -1, 0, 0, 8, -1, 989), + (989, -1, -1, 988, 988, 6, 59, -1, 0, 0, 8, 988, 990), + (990, -1, -1, 988, 988, 9, 59, -1, 0, 0, 8, 989, -1), + (991, -1, -1, 991, 991, 3, 59, -1, 0, 0, 8, -1, 992), + (992, -1, -1, 991, 991, 6, 59, -1, 0, 0, 8, 991, 993), + (993, -1, -1, 991, 991, 9, 59, -1, 0, 0, 8, 992, -1), + (994, -1, -1, 994, 994, 3, 59, -1, 0, 0, 8, -1, 995), + (995, -1, -1, 994, 994, 6, 59, -1, 0, 0, 8, 994, 996), + (996, -1, -1, 994, 994, 9, 59, -1, 0, 0, 8, 995, -1), + (997, -1, -1, 997, 997, 5, 60, -1, 0, 0, 8, -1, 998), + (998, -1, -1, 997, 997, 5, 65, -1, 0, 0, 8, 997, 999), + (999, -1, -1, 997, 997, 5, 70, -1, 0, 0, 8, 998, 1113), + (1000, 1000, -1, 1000, 1000, 0, 5, 5824, 20, 1080, 0, -1, -1), + (1001, -1, -1, 418, 418, 5, 66, -1, 0, 0, 8, 422, 1002), + (1002, -1, -1, 418, 418, 5, 67, -1, 0, 0, 8, 1001, 1003), + (1003, -1, -1, 418, 418, 5, 68, -1, 0, 0, 8, 1002, 1004), + (1004, -1, -1, 418, 418, 5, 69, -1, 0, 0, 8, 1003, 1005), + (1005, -1, -1, 418, 418, 5, 70, -1, 0, 0, 8, 1004, 4678), + (1006, -1, -1, 1006, 1006, 5, 66, -1, 0, 0, 8, -1, 1007), + (1007, -1, -1, 1006, 1006, 5, 67, -1, 0, 0, 8, 1006, 1008), + (1008, -1, -1, 1006, 1006, 5, 68, -1, 0, 0, 8, 1007, 1009), + (1009, -1, -1, 1006, 1006, 5, 69, -1, 0, 0, 8, 1008, 1010), + (1010, -1, -1, 1006, 1006, 5, 70, -1, 0, 0, 8, 1009, 7516), + (1011, -1, -1, 1011, 1011, 0, 51, -1, 0, 0, 8, -1, 1012), + (1012, -1, -1, 1011, 1011, 0, 51, -1, 0, 0, 8, 1011, 1013), + (1013, -1, -1, 1011, 1011, 0, 51, -1, 0, 0, 8, 1012, 1014), + (1014, -1, -1, 1011, 1011, 0, 51, -1, 0, 0, 8, 1013, 1015), + (1016, -1, -1, 1011, 1011, 0, 51, -1, 0, 0, 8, 1015, -1), + (1017, 1017, 1017, 1017, 1017, 6, 59, 16531, 75, 15, 15, -1, 13726), + (1018, 1018, 1018, 1018, 1018, 2, 63, 16455, 69, 1, 15, -1, -1), + (1019, 718, 718, 718, 718, 12, 65, 21746, 7, 4320, 16, 720, 13454), + (1021, -1, -1, 1021, 1021, 5, 51, -1, 0, 0, 8, -1, 1022), + (1022, -1, -1, 1021, 1021, 5, 55, -1, 0, 0, 8, 1021, 1023), + (1023, -1, -1, 1021, 1021, 5, 60, -1, 0, 0, 8, 1022, 1024), + (1024, -1, -1, 1021, 1021, 5, 65, -1, 0, 0, 8, 1023, 1025), + (1025, -1, -1, 1021, 1021, 5, 70, -1, 0, 0, 8, 1024, 6521), + (1026, -1, -1, 1026, 1026, 3, 66, -1, 0, 0, 8, -1, 1027), + (1027, -1, -1, 1026, 1026, 3, 67, -1, 0, 0, 8, 1026, 1028), + (1028, -1, -1, 1026, 1026, 3, 68, -1, 0, 0, 8, 1027, 1029), + (1029, -1, -1, 1026, 1026, 3, 69, -1, 0, 0, 8, 1028, 1030), + (1030, -1, -1, 1026, 1026, 3, 70, -1, 0, 0, 8, 1029, 1389), + (1031, -1, -1, 65, 661, 3, 66, -1, 0, 0, 8, 675, 1032), + (1032, -1, -1, 65, 661, 3, 67, -1, 0, 0, 8, 1031, 1033), + (1033, -1, -1, 65, 661, 3, 68, -1, 0, 0, 8, 1032, 1034), + (1034, -1, -1, 65, 661, 3, 69, -1, 0, 0, 8, 1033, 1035), + (1035, -1, -1, 65, 661, 3, 70, -1, 0, 0, 8, 1034, 4693), + (1036, -1, -1, 683, 683, 5, 66, -1, 0, 0, 8, 685, 1037), + (1037, -1, -1, 683, 683, 5, 68, -1, 0, 0, 8, 1036, 1038), + (1038, -1, -1, 683, 683, 5, 70, -1, 0, 0, 8, 1037, 5301), + (1041, -1, -1, 1041, 1041, 3, 67, -1, 0, 0, 8, -1, 1042), + (1042, -1, -1, 1041, 1041, 6, 68, -1, 0, 0, 8, 1041, 1043), + (1043, -1, -1, 1041, 1041, 9, 69, -1, 0, 0, 8, 1042, 4707), + (1044, -1, -1, 1044, 1044, 3, 67, -1, 0, 0, 8, -1, 1045), + (1045, -1, -1, 1044, 1044, 6, 68, -1, 0, 0, 8, 1044, 1046), + (1046, -1, -1, 1044, 1044, 9, 69, -1, 0, 0, 8, 1045, 4710), + (1047, -1, -1, 1047, 1047, 3, 67, -1, 0, 0, 8, -1, 1048), + (1048, -1, -1, 1047, 1047, 6, 68, -1, 0, 0, 8, 1047, 1049), + (1049, -1, -1, 1047, 1047, 9, 69, -1, 0, 0, 8, 1048, 4713), + (1050, -1, -1, 1050, 1050, 3, 67, -1, 0, 0, 8, -1, 1051), + (1051, -1, -1, 1050, 1050, 6, 68, -1, 0, 0, 8, 1050, 1052), + (1052, -1, -1, 1050, 1050, 9, 69, -1, 0, 0, 8, 1051, 4716), + (1053, -1, -1, 119, 119, 3, 66, -1, 0, 0, 8, 442, 1054), + (1054, -1, -1, 119, 119, 3, 68, -1, 0, 0, 8, 1053, 1055), + (1055, -1, -1, 119, 119, 3, 70, -1, 0, 0, 8, 1054, 4722), + (1056, -1, -1, 1056, 1056, 5, 71, -1, 0, 0, 12, -1, 1057), + (1057, -1, -1, 1056, 1056, 5, 72, -1, 0, 0, 12, 1056, 1058), + (1058, -1, -1, 1056, 1056, 5, 73, -1, 0, 0, 12, 1057, 1059), + (1059, -1, -1, 1056, 1056, 5, 74, -1, 0, 0, 12, 1058, 1060), + (1060, -1, -1, 1056, 1056, 5, 75, -1, 0, 0, 12, 1059, 6431), + (1061, -1, -1, 125, 125, 5, 66, -1, 0, 0, 8, 453, 1062), + (1062, -1, -1, 125, 125, 5, 67, -1, 0, 0, 8, 1061, 1063), + (1063, -1, -1, 125, 125, 5, 68, -1, 0, 0, 8, 1062, 1064), + (1064, -1, -1, 125, 125, 5, 69, -1, 0, 0, 8, 1063, 1065), + (1065, -1, -1, 125, 125, 5, 70, -1, 0, 0, 8, 1064, 1394), + (1066, -1, -1, 122, 122, 5, 66, -1, 0, 0, 8, 458, 1067), + (1067, -1, -1, 122, 122, 5, 67, -1, 0, 0, 8, 1066, 1068), + (1068, -1, -1, 122, 122, 5, 68, -1, 0, 0, 8, 1067, 1069), + (1069, -1, -1, 122, 122, 5, 69, -1, 0, 0, 8, 1068, 1070), + (1070, -1, -1, 122, 122, 5, 70, -1, 0, 0, 8, 1069, 1399), + (1071, -1, -1, 1071, 1071, 3, 55, -1, 0, 0, 8, -1, 4764), + (1072, -1, -1, 1072, 1072, 5, 66, -1, 0, 0, 8, -1, 1073), + (1073, -1, -1, 1072, 1072, 5, 67, -1, 0, 0, 8, 1072, 1074), + (1074, -1, -1, 1072, 1072, 5, 68, -1, 0, 0, 8, 1073, 1075), + (1075, -1, -1, 1072, 1072, 5, 69, -1, 0, 0, 8, 1074, 1076), + (1076, -1, -1, 1072, 1072, 5, 70, -1, 0, 0, 8, 1075, 4744), + (1083, -1, -1, 77, 77, 3, 66, -1, 0, 0, 8, 436, 1084), + (1084, -1, -1, 77, 77, 6, 68, -1, 0, 0, 8, 1083, 1085), + (1085, -1, -1, 77, 77, 9, 70, -1, 0, 0, 8, 1084, 12449), + (1086, -1, -1, 80, 80, 3, 66, -1, 0, 0, 8, 439, 1087), + (1087, -1, -1, 80, 80, 6, 68, -1, 0, 0, 8, 1086, 1088), + (1088, -1, -1, 80, 80, 9, 70, -1, 0, 0, 8, 1087, 4779), + (1089, -1, -1, 1089, 1089, 3, 59, -1, 0, 0, 8, -1, 1090), + (1090, -1, -1, 1089, 1089, 6, 59, -1, 0, 0, 8, 1089, 1091), + (1091, -1, -1, 1089, 1089, 9, 59, -1, 0, 0, 8, 1090, -1), + (1092, -1, -1, 1092, 1092, 7, 67, -1, 0, 0, 8, -1, -1), + (1093, -1, -1, 1093, 1093, 3, 66, -1, 0, 0, 8, -1, 1094), + (1094, -1, -1, 1093, 1093, 3, 67, -1, 0, 0, 8, 1093, 1095), + (1095, -1, -1, 1093, 1093, 3, 68, -1, 0, 0, 8, 1094, 1096), + (1096, -1, -1, 1093, 1093, 3, 69, -1, 0, 0, 8, 1095, 1097), + (1097, -1, -1, 1093, 1093, 3, 70, -1, 0, 0, 8, 1096, -1), + (1099, -1, -1, 767, 767, 3, 67, -1, 0, 0, 8, 769, 1100), + (1100, -1, -1, 767, 767, 6, 68, -1, 0, 0, 8, 1099, 1101), + (1101, -1, -1, 767, 767, 9, 69, -1, 0, 0, 8, 1100, 12423), + (1102, 592, 592, 592, 592, 3, 66, 5825, 2, 18, 8, 706, 1103), + (1103, 592, 592, 592, 592, 3, 67, 5826, 2, 18, 8, 1102, 1104), + (1104, 592, 592, 592, 592, 3, 68, 5827, 2, 18, 8, 1103, 1105), + (1105, 592, 592, 592, 592, 3, 69, 5828, 2, 18, 8, 1104, 1106), + (1106, 592, 592, 592, 592, 3, 70, 5829, 2, 18, 8, 1105, 4975), + (1107, -1, -1, 1107, 1107, 3, 66, -1, 0, 0, 8, -1, 1108), + (1108, -1, -1, 1107, 1107, 6, 68, -1, 0, 0, 8, 1107, 1109), + (1109, -1, -1, 1107, 1107, 9, 70, -1, 0, 0, 8, 1108, 5286), + (1110, 1110, 1110, 1110, 1110, 3, 68, 5830, 3, 2160, 8, -1, 1111), + (1111, 1110, 1110, 1110, 1110, 6, 69, 5831, 3, 2160, 8, 1110, 1112), + (1112, 1110, 1110, 1110, 1110, 9, 70, 5832, 3, 2160, 8, 1111, 6400), + (1113, -1, -1, 997, 997, 5, 75, -1, 0, 0, 16, 999, 1114), + (1114, -1, -1, 997, 997, 5, 80, -1, 0, 0, 16, 1113, 1115), + (1115, -1, -1, 997, 997, 5, 85, -1, 0, 0, 16, 1114, -1), + (1116, 1116, 1116, 1116, 1116, 3, 68, 5837, 4, 2160, 8, -1, 1117), + (1117, 1116, 1116, 1116, 1116, 6, 69, 5838, 4, 2160, 8, 1116, 1118), + (1118, 1116, 1116, 1116, 1116, 9, 70, 5839, 4, 2160, 8, 1117, 4980), + (1119, 1119, 1119, 1119, 1119, 3, 68, 5841, 8, 900, 8, -1, 1120), + (1120, 1119, 1119, 1119, 1119, 6, 69, 5842, 8, 900, 8, 1119, 1121), + (1121, 1119, 1119, 1119, 1119, 9, 70, 5843, 8, 900, 8, 1120, 4964), + (1122, -1, -1, 1122, 1122, 7, 67, -1, 0, 0, 8, -1, -1), + (1123, 291, 291, 291, 291, 5, 66, 5854, 5, 900, 8, 291, 1124), + (1124, 291, 291, 291, 291, 5, 68, 5855, 5, 900, 8, 1123, 1125), + (1125, 291, 291, 291, 291, 5, 70, 5856, 5, 900, 8, 1124, 4969), + (1126, 1126, 1126, 1126, 1126, 3, 67, 5845, 2, 2160, 8, -1, 1127), + (1127, 1126, 1126, 1126, 1126, 6, 68, 5846, 2, 2160, 8, 1126, 1128), + (1128, 1126, 1126, 1126, 1126, 9, 69, 5847, 2, 2160, 8, 1127, 5513), + (1129, -1, -1, 1129, 1129, 5, 67, -1, 0, 0, 8, -1, 1130), + (1130, -1, -1, 1129, 1129, 3, 69, -1, 0, 0, 8, 1129, -1), + (1131, -1, -1, 1131, 1131, 3, 59, -1, 0, 0, 3, -1, 1132), + (1132, -1, -1, 1131, 1131, 6, 59, -1, 0, 0, 3, 1131, 1133), + (1133, -1, -1, 1131, 1131, 9, 59, -1, 0, 0, 3, 1132, 11082), + (1134, -1, -1, 1134, 1134, 3, 61, -1, 0, 0, 4, -1, 1135), + (1135, -1, -1, 1134, 1134, 4, 63, -1, 0, 0, 4, 1134, 1136), + (1136, -1, -1, 1134, 1134, 5, 65, -1, 0, 0, 4, 1135, 1158), + (1137, -1, -1, 1137, 1137, 3, 59, -1, 0, 0, 3, -1, 1138), + (1138, -1, -1, 1137, 1137, 6, 59, -1, 0, 0, 3, 1137, 1139), + (1139, -1, -1, 1137, 1137, 9, 59, -1, 0, 0, 3, 1138, -1), + (1140, -1, -1, 1140, 1140, 3, 61, -1, 0, 0, 4, -1, 1141), + (1141, -1, -1, 1140, 1140, 3, 63, -1, 0, 0, 4, 1140, 1142), + (1142, -1, -1, 1140, 1140, 3, 65, -1, 0, 0, 4, 1141, -1), + (1146, 1146, 1146, 1146, 1146, 3, 59, 6040, 3, 1500, 3, -1, 1147), + (1147, 1146, 1146, 1146, 1146, 6, 59, 6041, 3, 1200, 3, 1146, 1148), + (1148, 1146, 1146, 1146, 1146, 9, 59, 6042, 3, 900, 3, 1147, -1), + (1149, 1149, -1, 1149, 1149, 12, 65, 5853, 5, 1320, 7, -1, -1), + (1150, 1150, 1150, 1150, 1150, 3, 65, 5848, 2, 2160, 7, -1, 1151), + (1151, 1150, 1150, 1150, 1150, 6, 65, 5849, 2, 2160, 7, 1150, 1152), + (1152, 1150, 1150, 1150, 1150, 9, 65, 5850, 2, 2160, 7, 1151, -1), + (1155, -1, -1, 1155, 1155, 3, 65, -1, 0, 0, 7, -1, 1156), + (1156, -1, -1, 1155, 1155, 6, 65, -1, 0, 0, 7, 1155, 1157), + (1157, -1, -1, 1155, 1155, 9, 65, -1, 0, 0, 7, 1156, -1), + (1158, -1, -1, 1134, 1134, 4, 66, -1, 0, 0, 8, 1136, 1159), + (1159, -1, -1, 1134, 1134, 4, 67, -1, 0, 0, 8, 1158, 1160), + (1160, -1, -1, 1134, 1134, 4, 68, -1, 0, 0, 8, 1159, 1161), + (1161, -1, -1, 1134, 1134, 4, 69, -1, 0, 0, 8, 1160, 1162), + (1162, -1, -1, 1134, 1134, 4, 70, -1, 0, 0, 8, 1161, 4790), + (1163, -1, -1, 255, 255, 5, 67, -1, 0, 0, 8, 544, 1164), + (1164, -1, -1, 255, 255, 5, 68, -1, 0, 0, 8, 1163, 1165), + (1165, -1, -1, 255, 255, 5, 69, -1, 0, 0, 8, 1164, 4795), + (1166, -1, -1, 1143, 1143, 3, 65, -1, 0, 0, 15, -1, 1167), + (1167, -1, -1, 1143, 1143, 6, 65, -1, 0, 0, 15, 1166, 1168), + (1168, -1, -1, 1143, 1143, 9, 65, -1, 0, 0, 15, 1167, 6911), + (1172, -1, -1, 631, 631, 5, 67, -1, 0, 0, 8, 633, 1173), + (1173, -1, -1, 631, 631, 5, 68, -1, 0, 0, 8, 1172, 1174), + (1174, -1, -1, 631, 631, 5, 69, -1, 0, 0, 8, 1173, 4798), + (1178, 1178, 1178, 1178, 1178, 3, 68, 5857, 4, 900, 8, -1, 1179), + (1179, 1178, 1178, 1178, 1178, 6, 69, 5858, 4, 900, 8, 1178, 1180), + (1180, 1178, 1178, 1178, 1178, 9, 70, 5859, 4, 900, 8, 1179, 5779), + (1181, -1, -1, 1181, 1181, 3, 66, -1, 0, 0, 8, -1, 1182), + (1182, -1, -1, 1181, 1181, 3, 67, -1, 0, 0, 8, 1181, 1183), + (1183, -1, -1, 1181, 1181, 3, 68, -1, 0, 0, 8, 1182, 1184), + (1184, -1, -1, 1181, 1181, 3, 69, -1, 0, 0, 8, 1183, 1185), + (1185, -1, -1, 1181, 1181, 3, 70, -1, 0, 0, 8, 1184, -1), + (1186, -1, -1, 1186, 1186, 3, 66, -1, 0, 0, 8, -1, 1187), + (1187, -1, -1, 1186, 1186, 6, 68, -1, 0, 0, 8, 1186, 1188), + (1188, -1, -1, 1186, 1186, 9, 70, -1, 0, 0, 8, 1187, 4776), + (1189, 459, 459, 459, 459, 3, 66, 5860, 8, 180, 8, 461, 1190), + (1190, 459, 459, 459, 459, 6, 68, 5861, 8, 180, 8, 1189, 1191), + (1191, 459, 459, 459, 459, 9, 70, 5862, 8, 180, 8, 1190, 5062), + (1192, 1192, 1192, 1192, 1192, 5, 67, 5863, 12, 1320, 8, -1, 1193), + (1193, 1192, 1192, 1192, 1192, 5, 68, 5864, 12, 1320, 8, 1192, 1194), + (1194, 1192, 1192, 1192, 1192, 5, 69, 5865, 12, 1320, 8, 1193, 5076), + (1195, 1195, 1195, 1195, 1195, 12, 70, 5866, 13, 2160, 8, -1, 5079), + (1196, -1, -1, 1196, 1196, 2, 81, -1, 0, 0, 15, -1, 1197), + (1197, -1, -1, 1196, 1196, 2, 81, -1, 0, 0, 15, 1196, 1198), + (1198, -1, -1, 1196, 1196, 2, 81, -1, 0, 0, 15, 1197, 1199), + (1199, -1, -1, 1196, 1196, 2, 81, -1, 0, 0, 15, 1198, 1200), + (1200, -1, -1, 1196, 1196, 2, 81, -1, 0, 0, 15, 1199, 10743), + (1203, 131, 131, 131, 131, 5, 67, 5869, 4, 900, 8, 532, 1204), + (1204, 131, 131, 131, 131, 5, 68, 5870, 4, 900, 8, 1203, 1205), + (1205, 131, 131, 131, 131, 5, 69, 5988, 4, 900, 8, 1204, 5070), + (1206, 749, 749, 749, 749, 5, 66, 5871, 11, 1800, 8, 753, 1207), + (1207, 749, 749, 749, 749, 5, 68, 5872, 11, 1800, 8, 1206, 1208), + (1208, 749, 749, 749, 749, 5, 70, 5873, 11, 1800, 8, 1207, 17298), + (1209, 1209, -1, 1209, 1209, 12, 70, 5912, 14, 4320, 8, -1, -1), + (1210, -1, -1, 1210, 1210, 3, 66, -1, 0, 0, 8, -1, 1211), + (1211, -1, -1, 1210, 1210, 6, 68, -1, 0, 0, 8, 1210, 1212), + (1212, -1, -1, 1210, 1210, 9, 70, -1, 0, 0, 8, 1211, 1483), + (1213, -1, -1, 1210, 1213, 3, 66, -1, 0, 0, 8, -1, 1214), + (1214, -1, -1, 1210, 1213, 6, 68, -1, 0, 0, 8, 1213, 1215), + (1215, -1, -1, 1210, 1213, 9, 70, -1, 0, 0, 8, 1214, 4755), + (1216, -1, -1, 83, 83, 3, 81, -1, 0, 0, 16, -1, 1217), + (1217, -1, -1, 83, 83, 6, 81, -1, 0, 0, 16, 1216, 1218), + (1218, -1, -1, 83, 83, 9, 81, -1, 0, 0, 16, 1217, 15422), + (1219, -1, -1, 1435, 1435, 10, 71, -1, 0, 0, 16, -1, 1220), + (1220, -1, -1, 1435, 1435, 11, 71, -1, 0, 0, 16, 1219, 1221), + (1221, -1, -1, 1435, 1435, 12, 71, -1, 0, 0, 16, 1220, 1648), + (1222, 757, -1, 757, 1222, 5, 66, 5877, 6, 1800, 8, 761, 1223), + (1223, 757, -1, 757, 1222, 5, 68, 5878, 6, 1800, 8, 1222, 1224), + (1224, 757, -1, 757, 1222, 5, 70, 5879, 6, 1800, 8, 1223, 5051), + (1225, 548, 548, 548, 548, 5, 67, 5881, 5, 900, 8, 550, 1226), + (1226, 548, 548, 548, 548, 5, 68, 5882, 5, 900, 8, 1225, 1227), + (1227, 548, 548, 548, 548, 5, 69, 5883, 5, 900, 8, 1226, 5054), + (1228, 1228, 1228, 1228, 1228, 9, 70, 5880, 9, 600, 8, -1, -1), + (1229, 1229, 1229, 1229, 1229, 7, 66, 6094, 10, 600, 8, -1, -1), + (1230, -1, -1, 1230, 1230, 1, 51, -1, 0, 0, 8, -1, 1231), + (1231, -1, -1, 1230, 1230, 2, 53, -1, 0, 0, 8, 1230, 1232), + (1232, -1, -1, 1230, 1230, 3, 55, -1, 0, 0, 8, 1231, 5000), + (1233, 1233, -1, 1233, 1233, 3, 68, 5887, 7, 2160, 8, -1, 1234), + (1234, 1233, -1, 1233, 1233, 6, 69, 5888, 7, 2160, 8, 1233, 1235), + (1235, 1233, -1, 1233, 1233, 9, 70, 5889, 7, 2160, 8, 1234, -1), + (1239, 1239, 1239, 1239, 1239, 12, 70, 5903, 6, 600, 8, -1, 5868), + (1242, 1242, 1242, 1242, 1242, 3, 67, 5906, 9, 1320, 8, -1, 1243), + (1243, 1242, 1242, 1242, 1242, 6, 68, 5907, 9, 1320, 8, 1242, 1244), + (1244, 1242, 1242, 1242, 1242, 9, 69, 5908, 9, 1320, 8, 1243, 5857), + (1245, 1245, 1245, 1245, 1245, 3, 66, 5909, 8, 2160, 8, -1, 1246), + (1246, 1245, 1245, 1245, 1245, 6, 68, 5910, 8, 2160, 8, 1245, 1247), + (1247, 1245, 1245, 1245, 1245, 9, 70, 5911, 8, 2160, 8, 1246, 15459), + (1248, 616, 616, 616, 616, 3, 68, 6226, 7, 900, 8, 618, 1249), + (1249, 616, 616, 616, 616, 6, 69, 6227, 7, 900, 8, 1248, 1250), + (1250, 616, 616, 616, 616, 9, 70, 6228, 7, 900, 8, 1249, 6254), + (1251, 1251, 1251, 1251, 1251, 9, 70, 5915, 9, 1320, 8, -1, -1), + (1252, 1252, 1252, 1252, 1252, 9, 68, 5913, 9, 1320, 8, -1, -1), + (1253, 1253, 1253, 1253, 1253, 9, 67, 5916, 16, 1320, 8, -1, -1), + (1254, 1254, 1254, 1254, 1254, 9, 69, 5914, 16, 1320, 8, -1, -1), + (1255, 1255, 1255, 1255, 1255, 9, 70, 5918, 4, 1080, 8, -1, -1), + (1265, -1, -1, 820, 820, 5, 66, -1, 0, 0, 8, 822, 1266), + (1266, -1, -1, 820, 820, 5, 68, -1, 0, 0, 8, 1265, 1267), + (1267, -1, -1, 820, 820, 5, 70, -1, 0, 0, 8, 1266, 4813), + (1268, -1, -1, 807, 807, 5, 66, -1, 0, 0, 8, 809, 1269), + (1269, -1, -1, 807, 807, 5, 68, -1, 0, 0, 8, 1268, 1270), + (1270, -1, -1, 807, 807, 5, 70, -1, 0, 0, 8, 1269, 5922), + (1272, 209, 209, 209, 1272, 5, 66, 5919, 12, 5, 8, -1, 6378), + (1274, 1274, 1274, 1274, 1274, 3, 68, 5921, 9, 540, 8, -1, 1275), + (1275, 1274, 1274, 1274, 1274, 6, 69, 5922, 9, 540, 8, 1274, 1276), + (1276, 1274, 1274, 1274, 1274, 9, 70, 5923, 9, 540, 8, 1275, 4864), + (1277, 188, 188, 188, 188, 9, 68, 5924, 2, 30, 8, 188, 5044), + (1278, 534, 534, 534, 534, 5, 67, 5927, 4, 2160, 8, 717, 1279), + (1279, 534, 534, 534, 534, 5, 68, 5928, 4, 2160, 8, 1278, 1280), + (1280, 534, 534, 534, 534, 5, 69, 5929, 4, 2160, 8, 1279, 5041), + (1284, -1, -1, 1284, 1284, 3, 66, -1, 0, 0, 8, -1, 1285), + (1285, -1, -1, 1284, 1284, 6, 68, -1, 0, 0, 8, 1284, 1286), + (1286, -1, -1, 1284, 1284, 9, 70, -1, 0, 0, 8, 1285, 5035), + (1287, -1, -1, 1287, 1287, 3, 67, -1, 0, 0, 8, -1, 1288), + (1288, -1, -1, 1287, 1287, 6, 68, -1, 0, 0, 8, 1287, 1289), + (1289, -1, -1, 1287, 1287, 9, 69, -1, 0, 0, 8, 1288, 5516), + (1290, -1, -1, 864, 864, 3, 66, -1, 0, 0, 8, 866, 1291), + (1291, -1, -1, 864, 864, 6, 68, -1, 0, 0, 8, 1290, 1292), + (1292, -1, -1, 864, 864, 9, 70, -1, 0, 0, 8, 1291, 4983), + (1293, 545, 545, 545, 545, 3, 68, 6079, 3, 900, 8, 547, 1294), + (1294, 545, 545, 545, 545, 6, 69, 6080, 3, 900, 8, 1293, 1295), + (1295, 545, 545, 545, 545, 9, 70, 6081, 3, 900, 8, 1294, 4997), + (1296, -1, -1, 1296, 1296, 3, 66, -1, 0, 0, 8, -1, 1297), + (1297, -1, -1, 1296, 1296, 3, 67, -1, 0, 0, 8, 1296, 1298), + (1298, -1, -1, 1296, 1296, 3, 68, -1, 0, 0, 8, 1297, 1299), + (1299, -1, -1, 1296, 1296, 3, 69, -1, 0, 0, 8, 1298, 1300), + (1300, -1, -1, 1296, 1296, 3, 70, -1, 0, 0, 8, 1299, -1), + (1301, -1, -1, 846, 846, 3, 66, -1, 0, 0, 8, 848, 1302), + (1302, -1, -1, 846, 846, 6, 68, -1, 0, 0, 8, 1301, 1303), + (1303, -1, -1, 846, 846, 9, 70, -1, 0, 0, 8, 1302, 4948), + (1304, -1, -1, 1304, 1304, 3, 66, -1, 0, 0, 8, -1, 1305), + (1305, -1, -1, 1304, 1304, 6, 68, -1, 0, 0, 8, 1304, 1306), + (1306, -1, -1, 1304, 1304, 9, 70, -1, 0, 0, 8, 1305, 6029), + (1307, -1, -1, 1307, 1307, 5, 66, -1, 0, 0, 8, -1, 1308), + (1308, -1, -1, 1307, 1307, 5, 67, -1, 0, 0, 8, 1307, 1309), + (1309, -1, -1, 1307, 1307, 5, 68, -1, 0, 0, 8, 1308, 1310), + (1310, -1, -1, 1307, 1307, 5, 69, -1, 0, 0, 8, 1309, 1311), + (1311, -1, -1, 1307, 1307, 5, 70, -1, 0, 0, 8, 1310, 6660), + (1313, -1, -1, 1313, 1313, 3, 68, -1, 0, 0, 8, -1, 1314), + (1314, -1, -1, 1313, 1313, 6, 69, -1, 0, 0, 8, 1313, 1315), + (1315, -1, -1, 1313, 1313, 9, 70, -1, 0, 0, 8, 1314, 5029), + (1316, -1, -1, 210, 210, 5, 67, -1, 0, 0, 8, 212, 1317), + (1317, -1, -1, 210, 210, 5, 68, -1, 0, 0, 8, 1316, 1318), + (1318, -1, -1, 210, 210, 5, 69, -1, 0, 0, 8, 1317, 6072), + (1319, -1, -1, 634, 634, 5, 67, -1, 0, 0, 8, 845, 1320), + (1320, -1, -1, 634, 634, 5, 68, -1, 0, 0, 8, 1319, 1321), + (1321, -1, -1, 634, 634, 5, 69, -1, 0, 0, 8, 1320, 5032), + (1323, 1323, 1323, 1323, 1323, 12, 70, 5932, 7, 2160, 8, -1, -1), + (1324, 970, 970, 970, 970, 5, 66, 6030, 6, 1800, 8, 974, 1325), + (1325, 970, 970, 970, 970, 5, 68, 6031, 6, 1800, 8, 1324, 1326), + (1326, 970, 970, 970, 970, 5, 70, 6032, 6, 1800, 8, 1325, 17311), + (1327, 1327, 1327, 1327, 1327, 5, 67, 5933, 10, 900, 8, -1, 1328), + (1328, 1327, 1327, 1327, 1327, 5, 68, 5934, 10, 900, 8, 1327, 1329), + (1329, 1327, 1327, 1327, 1327, 5, 69, 5935, 10, 900, 8, 1328, 5314), + (1330, 912, 912, 912, 912, 3, 66, 5936, 4, 3600, 8, 914, 1331), + (1331, 912, 912, 912, 912, 6, 68, 5937, 4, 3600, 8, 1330, 1332), + (1332, 912, 912, 912, 912, 9, 70, 5938, 4, 3600, 8, 1331, 7119), + (1334, 1334, 1334, 1334, 1334, 3, 66, 5943, 11, 4320, 8, -1, 1335), + (1335, 1334, 1334, 1334, 1334, 6, 68, 5944, 11, 4320, 8, 1334, 1336), + (1336, 1334, 1334, 1334, 1334, 9, 70, 5945, 11, 4320, 8, 1335, 6152), + (1337, 1337, 1337, 1337, 1337, 5, 67, 5946, 13, 4320, 8, -1, 1338), + (1338, 1337, 1337, 1337, 1337, 5, 68, 5947, 13, 4320, 8, 1337, 1339), + (1339, 1337, 1337, 1337, 1337, 5, 69, 5948, 13, 4320, 8, 1338, 6158), + (1340, 921, 921, 921, 921, 12, 69, 5950, 8, 60, 8, 921, 5280), + (1341, 922, 922, 922, 922, 12, 68, 5951, 8, 60, 8, 922, 5281), + (1342, 923, 923, 923, 923, 12, 67, 5952, 8, 60, 8, 923, 5282), + (1343, 1343, 1343, 1343, 1343, 9, 69, 5953, 9, 300, 8, -1, -1), + (1344, 155, 155, 155, 155, 12, 70, 5949, 8, 60, 8, 533, 5279), + (1345, 1345, 1345, 1345, 1345, 5, 67, 6132, 6, 900, 8, -1, 1346), + (1346, 1345, 1345, 1345, 1345, 5, 68, 6133, 6, 900, 8, 1345, 1347), + (1347, 1345, 1345, 1345, 1345, 5, 69, 6134, 6, 900, 8, 1346, 5003), + (1348, 1348, 1348, 1348, 1348, 3, 68, 6090, 0, 3600, 8, -1, 1349), + (1349, 1348, 1348, 1348, 1348, 6, 69, 6091, 0, 3600, 8, 1348, 1350), + (1350, 1348, 1348, 1348, 1348, 9, 70, 6092, 0, 3600, 8, 1349, 5770), + (1351, 1351, 1351, 1351, 1351, 5, 67, 5939, 5, 30, 8, -1, 6133), + (1352, 1352, 1352, 1352, 1352, 3, 67, 6067, 3, 60, 8, -1, 1353), + (1353, 1352, 1352, 1352, 1352, 6, 68, 6068, 3, 60, 8, 1352, 1354), + (1354, 1352, 1352, 1352, 1352, 9, 69, 6069, 3, 60, 8, 1353, 6313), + (1355, 1355, 1355, 1355, 1355, 3, 68, 6070, 3, 60, 8, -1, 1356), + (1356, 1355, 1355, 1355, 1355, 6, 69, 6071, 3, 60, 8, 1355, 1357), + (1357, 1355, 1355, 1355, 1355, 9, 70, 6072, 3, 60, 8, 1356, 5240), + (1358, 1358, 1358, 1358, 1358, 3, 66, 6073, 3, 60, 8, -1, 1359), + (1359, 1358, 1358, 1358, 1358, 6, 67, 6074, 3, 60, 8, 1358, 1360), + (1360, 1358, 1358, 1358, 1358, 9, 68, 6075, 3, 60, 8, 1359, 6307), + (1361, -1, -1, 1361, 1361, 0, 65, -1, 0, 0, 3, -1, -1), + (1362, -1, -1, 1362, 1362, 0, 65, -1, 0, 0, 3, -1, -1), + (1363, -1, -1, 1363, 1363, 0, 68, -1, 0, 0, 3, -1, -1), + (1364, -1, -1, 1364, 1364, 0, 68, -1, 0, 0, 3, -1, -1), + (1365, -1, -1, 1365, 1365, 0, 68, -1, 0, 0, 3, -1, -1), + (1366, -1, -1, 1366, 1366, 0, 65, -1, 0, 0, 3, -1, -1), + (1367, -1, -1, 1367, 1367, 0, 65, -1, 0, 0, 3, -1, -1), + (1368, -1, -1, 1368, 1368, 0, 68, -1, 0, 0, 3, -1, -1), + (1369, -1, -1, 1369, 1369, 0, 68, -1, 0, 0, 3, -1, -1), + (1370, -1, -1, 1370, 1370, 0, 68, -1, 0, 0, 3, -1, -1), + (1371, 1371, 1371, 1371, 1371, 0, 1, 6880, 23, 72000, 0, -1, -1), + (1372, 1372, 1372, 1372, 1372, 0, 1, 6881, 24, 72000, 0, -1, -1), + (1373, 1373, 1373, 1373, 1373, 0, 1, 6882, 25, 72000, 0, -1, -1), + (1374, 1374, 1374, 1374, 1374, 0, 1, 6883, 26, 590400, 0, -1, -1), + (1375, 1375, 1375, 1375, 1375, 0, 1, 6884, 27, 72000, 0, -1, -1), + (1376, 1376, 1376, 1376, 1376, 0, 1, 6885, 28, 244800, 0, -1, -1), + (1377, 1377, 1377, 1377, 1377, 0, 1, 6886, 29, 14400, 0, -1, -1), + (1378, -1, -1, 1378, 1378, 0, 1, -1, 0, 0, 10, -1, 1379), + (1379, -1, -1, 1379, 1379, 0, 1, -1, 0, 0, 10, 1378, 1380), + (1380, -1, -1, 1380, 1380, 0, 1, -1, 0, 0, 10, 1379, 1381), + (1382, -1, -1, 1382, 1382, 0, 1, -1, 0, 0, 10, 1381, -1), + (1383, 1383, 1383, 1383, 1383, 3, 59, 8048, 6, 300, 3, -1, 1384), + (1384, 1383, 1383, 1383, 1383, 6, 59, 8049, 6, 300, 3, 1383, 1385), + (1385, 1383, 1383, 1383, 1383, 9, 59, 8050, 6, 300, 3, 1384, 1386), + (1386, 1383, 1383, 1383, 1383, 9, 65, 8052, 6, 300, 4, 1385, 1387), + (1387, 1383, 1383, 1383, 1383, 9, 70, 8053, 6, 300, 10, 1386, 5084), + (1388, -1, -1, 1388, 1388, 9, 70, -1, 0, 0, 10, -1, -1), + (1389, -1, -1, 1026, 1026, 5, 70, -1, 0, 0, 10, 1030, 1390), + (1390, -1, -1, 1026, 1026, 5, 70, -1, 0, 0, 10, 1389, 1391), + (1391, -1, -1, 1026, 1026, 5, 70, -1, 0, 0, 10, 1390, 1392), + (1392, -1, -1, 1026, 1026, 5, 70, -1, 0, 0, 10, 1391, 1393), + (1393, -1, -1, 1026, 1026, 5, 70, -1, 0, 0, 10, 1392, 4683), + (1394, -1, -1, 125, 125, 5, 70, -1, 0, 0, 10, 1065, 1395), + (1395, -1, -1, 125, 125, 5, 70, -1, 0, 0, 10, 1394, 1396), + (1396, -1, -1, 125, 125, 5, 70, -1, 0, 0, 10, 1395, 1397), + (1397, -1, -1, 125, 125, 5, 70, -1, 0, 0, 10, 1396, 1398), + (1398, -1, -1, 125, 125, 5, 70, -1, 0, 0, 10, 1397, 5519), + (1399, -1, -1, 122, 122, 5, 70, -1, 0, 0, 10, 1070, 1400), + (1400, -1, -1, 122, 122, 5, 70, -1, 0, 0, 10, 1399, 1401), + (1401, -1, -1, 122, 122, 5, 70, -1, 0, 0, 10, 1400, 1402), + (1402, -1, -1, 122, 122, 5, 70, -1, 0, 0, 10, 1401, 1403), + (1403, -1, -1, 122, 122, 5, 70, -1, 0, 0, 10, 1402, 5524), + (1404, 1404, 1404, 1404, 1404, 5, 66, 8054, 15, 2160, 10, -1, 1405), + (1405, 1404, 1404, 1404, 1404, 5, 67, 8055, 15, 2160, 10, 1404, 1406), + (1406, 1404, 1404, 1404, 1404, 5, 68, 8056, 15, 2160, 10, 1405, 1407), + (1407, 1404, 1404, 1404, 1404, 5, 69, 8057, 15, 2160, 10, 1406, 1408), + (1408, 1404, 1404, 1404, 1404, 5, 70, 8058, 15, 2160, 10, 1407, 12880), + (1409, 1409, 1409, 1409, 1409, 5, 66, 8054, 15, 2160, 10, -1, 1410), + (1410, 1409, 1409, 1409, 1409, 5, 67, 8055, 15, 2160, 10, 1409, 1411), + (1411, 1409, 1409, 1409, 1409, 5, 68, 8056, 15, 2160, 10, 1410, 1412), + (1412, 1409, 1409, 1409, 1409, 5, 69, 8057, 15, 2160, 10, 1411, 1413), + (1413, 1409, 1409, 1409, 1409, 5, 70, 8058, 15, 2160, 10, 1412, -1), + (1414, -1, -1, 1414, 1414, 5, 66, -1, 0, 0, 10, -1, 1415), + (1415, -1, -1, 1414, 1414, 5, 67, -1, 0, 0, 10, 1414, 1416), + (1416, -1, -1, 1414, 1414, 5, 68, -1, 0, 0, 10, 1415, 1417), + (1417, -1, -1, 1414, 1414, 5, 69, -1, 0, 0, 10, 1416, 1418), + (1418, -1, -1, 1414, 1414, 5, 70, -1, 0, 0, 10, 1417, 12874), + (1419, 1419, 1419, 1419, 1419, 9, 74, 16441, 52, 300, 15, -1, -1), + (1420, -1, -1, 1420, 1420, 3, 66, -1, 0, 0, 10, -1, 1421), + (1421, -1, -1, 1420, 1420, 3, 67, -1, 0, 0, 10, 1420, 1422), + (1422, -1, -1, 1420, 1420, 3, 68, -1, 0, 0, 10, 1421, 1423), + (1423, -1, -1, 1420, 1420, 3, 69, -1, 0, 0, 10, 1422, 1424), + (1424, -1, -1, 1420, 1420, 3, 70, -1, 0, 0, 10, 1423, -1), + (1425, 1425, 1425, 1425, 1425, 5, 70, 8060, 2, 2160, 10, -1, 1426), + (1426, 1425, 1425, 1425, 1425, 5, 70, 8061, 2, 2160, 10, 1425, 1427), + (1427, 1425, 1425, 1425, 1425, 5, 70, 8063, 2, 2160, 10, 1426, 1428), + (1428, 1425, 1425, 1425, 1425, 5, 70, 8066, 2, 2160, 10, 1427, 1429), + (1429, 1425, 1425, 1425, 1425, 5, 70, 8070, 2, 2160, 10, 1428, 5759), + (1430, -1, -1, 795, 795, 3, 70, -1, 0, 0, 10, 799, 1431), + (1431, -1, -1, 795, 795, 6, 70, -1, 0, 0, 10, 1430, 1432), + (1432, -1, -1, 795, 795, 9, 70, -1, 0, 0, 10, 1431, 4897), + (1435, -1, -1, 1435, 1435, 3, 66, -1, 0, 0, 10, -1, 1436), + (1436, -1, -1, 1435, 1435, 6, 68, -1, 0, 0, 10, 1435, 1437), + (1437, -1, -1, 1435, 1435, 9, 70, -1, 0, 0, 10, 1436, 4773), + (1440, 517, 517, 517, 517, 5, 66, 8109, 12, 600, 10, 519, 1441), + (1441, 517, 517, 517, 517, 5, 67, 8110, 12, 600, 10, 1440, 1442), + (1442, 517, 517, 517, 517, 5, 68, 8111, 12, 600, 10, 1441, 1443), + (1443, 517, 517, 517, 517, 5, 69, 8112, 12, 600, 10, 1442, 1444), + (1444, 517, 517, 517, 517, 5, 70, 8113, 12, 600, 10, 1443, 7296), + (1453, -1, -1, 1453, 1453, 5, 66, -1, 0, 0, 10, -1, 1454), + (1454, -1, -1, 1453, 1453, 5, 67, -1, 0, 0, 10, 1453, 1455), + (1455, -1, -1, 1453, 1453, 5, 68, -1, 0, 0, 10, 1454, 1456), + (1456, -1, -1, 1453, 1453, 5, 69, -1, 0, 0, 10, 1455, 1457), + (1457, -1, -1, 1453, 1453, 5, 70, -1, 0, 0, 10, 1456, -1), + (1458, 1458, 1458, 1458, 1458, 12, 70, 8124, 6, 4320, 10, -1, -1), + (1459, 1459, 1459, 1459, 1459, 7, 70, 8125, 11, 1800, 10, -1, 1460), + (1460, 1459, 1459, 1459, 1459, 7, 70, 8126, 11, 1800, 10, 1459, 1461), + (1461, 1459, 1459, 1459, 1459, 7, 70, 8127, 11, 1800, 10, 1460, 5080), + (1462, 1462, 1462, 1462, 1462, 3, 59, 8133, 5, 300, 3, -1, 1463), + (1463, 1462, 1462, 1462, 1462, 6, 59, 8134, 5, 300, 3, 1462, 1464), + (1464, 1462, 1462, 1462, 1462, 9, 59, 8135, 5, 300, 3, 1463, 1465), + (1465, 1462, 1462, 1462, 1462, 9, 65, 8137, 5, 300, 4, 1464, 1466), + (1466, 1462, 1462, 1462, 1462, 9, 70, 8138, 5, 300, 10, 1465, 4900), + (1467, -1, -1, 729, 729, 3, 70, -1, 0, 0, 10, 733, 1468), + (1468, -1, -1, 729, 729, 6, 70, -1, 0, 0, 10, 1467, 1469), + (1469, -1, -1, 729, 729, 9, 70, -1, 0, 0, 10, 1468, 4960), + (1471, -1, -1, 1471, 1471, 5, 70, -1, 0, 0, 10, -1, 1472), + (1472, -1, -1, 1471, 1471, 5, 70, -1, 0, 0, 10, 1471, 1473), + (1473, -1, -1, 1471, 1471, 5, 70, -1, 0, 0, 10, 1472, 1474), + (1474, -1, -1, 1471, 1471, 5, 70, -1, 0, 0, 10, 1473, 1475), + (1475, -1, -1, 1471, 1471, 5, 70, -1, 0, 0, 10, 1474, 6442), + (1477, 1477, 1477, 1477, 1477, 9, 70, 8149, 3, 4320, 10, -1, -1), + (1478, 1478, -1, 1478, 1478, 3, 66, 8406, 0, 1, 10, -1, 1479), + (1479, 1478, -1, 1478, 1478, 6, 68, 8407, 0, 1, 10, 1478, 1480), + (1480, 1478, -1, 1478, 1478, 9, 70, 8408, 0, 1, 10, 1479, 6161), + (1483, -1, -1, 1210, 1210, 7, 70, -1, 0, 0, 10, 1212, 1484), + (1484, -1, -1, 1210, 1210, 7, 70, -1, 0, 0, 10, 1483, 1485), + (1485, -1, -1, 1210, 1210, 7, 70, -1, 0, 0, 10, 1484, 4752), + (1486, -1, -1, 1486, 1486, 5, 66, -1, 0, 0, 10, -1, 1487), + (1487, -1, -1, 1486, 1486, 5, 67, -1, 0, 0, 10, 1486, 1488), + (1488, -1, -1, 1486, 1486, 5, 68, -1, 0, 0, 10, 1487, 1489), + (1489, -1, -1, 1486, 1486, 5, 69, -1, 0, 0, 10, 1488, 1490), + (1490, -1, -1, 1486, 1486, 5, 70, -1, 0, 0, 10, 1489, 5529), + (1491, 746, 746, 746, 746, 3, 70, 8156, 10, 2160, 10, 748, 1492), + (1492, 746, 746, 746, 746, 6, 70, 8157, 10, 2160, 10, 1491, 1493), + (1493, 746, 746, 746, 746, 9, 70, 8158, 10, 2160, 10, 1492, 5800), + (1494, 1494, 1494, 1494, 1494, 12, 70, 8170, 2, 7, 10, -1, -1), + (1495, 1495, 1495, 1495, 1495, 3, 70, 8190, 30, 900, 10, -1, 1496), + (1496, 1495, 1495, 1495, 1495, 6, 70, 8191, 30, 900, 10, 1495, 1497), + (1497, 1495, 1495, 1495, 1495, 9, 70, 8192, 30, 900, 10, 1496, 5311), + (1498, 1498, 1498, 1498, 1498, 3, 70, 8193, 12, 1320, 10, -1, 1499), + (1499, 1498, 1498, 1498, 1498, 6, 70, 8194, 12, 1320, 10, 1498, 1500), + (1500, 1498, 1498, 1498, 1498, 9, 70, 8195, 12, 1320, 10, 1499, 5058), + (1501, 1501, 1501, 1501, 1501, 3, 70, 8196, 10, 4320, 10, -1, 1502), + (1502, 1501, 1501, 1501, 1501, 6, 70, 8197, 10, 4320, 10, 1501, 1503), + (1503, 1501, 1501, 1501, 1501, 9, 70, 8198, 10, 4320, 10, 1502, 1558), + (1504, -1, -1, 1504, 1504, 5, 70, -1, 0, 0, 10, -1, 1505), + (1505, -1, -1, 1504, 1504, 5, 70, -1, 0, 0, 10, 1504, 1506), + (1506, -1, -1, 1504, 1504, 5, 70, -1, 0, 0, 10, 1505, 5880), + (1507, 520, 520, 520, 520, 3, 70, 8201, 6, 540, 10, 522, 1508), + (1508, 520, 520, 520, 520, 6, 70, 8202, 6, 540, 10, 1507, 1509), + (1509, 520, 520, 520, 520, 9, 70, 8203, 6, 540, 10, 1508, 5883), + (1510, 1510, -1, 1510, 1510, 12, 70, 8205, 13, 2160, 10, -1, 7202), + (1511, -1, -1, 1511, 1511, 5, 70, -1, 0, 0, 10, -1, 1512), + (1512, -1, -1, 1511, 1511, 5, 70, -1, 0, 0, 10, 1511, 1513), + (1513, -1, -1, 1511, 1511, 5, 70, -1, 0, 0, 10, 1512, 5950), + (1514, -1, -1, 1514, 1514, 7, 70, -1, 0, 0, 10, -1, 1515), + (1515, -1, -1, 1514, 1514, 7, 70, -1, 0, 0, 10, 1514, 1516), + (1516, -1, -1, 1514, 1514, 7, 70, -1, 0, 0, 10, 1515, 13404), + (1519, 153, 153, 153, 153, 9, 70, 8216, 3, 2160, 10, 153, 5068), + (1520, 1520, 1520, 1520, 1520, 3, 70, 8218, 11, 900, 10, -1, 1521), + (1521, 1520, 1520, 1520, 1520, 6, 70, 8219, 11, 900, 10, 1520, 1522), + (1522, 1520, 1520, 1520, 1520, 9, 70, 8220, 11, 900, 10, 1521, 6449), + (1523, 1523, 1523, 1523, 1523, 12, 70, 8221, 7, 7, 10, -1, -1), + (1524, -1, -1, 190, 190, 7, 70, -1, 0, 0, 10, 192, 1526), + (1525, -1, -1, 190, 190, 7, 70, -1, 0, 0, 10, 1526, 5038), + (1526, -1, -1, 190, 190, 7, 70, -1, 0, 0, 10, 1524, 1525), + (1527, 1527, 1527, 1527, 1527, 12, 70, 8223, 3, 7, 10, -1, -1), + (1528, -1, -1, 1528, 4819, 5, 66, -1, 0, 0, 10, -1, 1529), + (1529, -1, -1, 1528, 4819, 5, 67, -1, 0, 0, 10, 1528, 1530), + (1530, -1, -1, 1528, 4819, 5, 68, -1, 0, 0, 10, 1529, 1531), + (1531, -1, -1, 1528, 4819, 5, 69, -1, 0, 0, 10, 1530, 1532), + (1532, -1, -1, 1528, 4819, 5, 70, -1, 0, 0, 10, 1531, 4819), + (1533, -1, -1, 602, 602, 3, 70, -1, 0, 0, 10, 604, 1534), + (1534, -1, -1, 602, 602, 6, 70, -1, 0, 0, 10, 1533, 1535), + (1535, -1, -1, 602, 602, 9, 70, -1, 0, 0, 10, 1534, 4758), + (1536, -1, -1, 599, 599, 3, 70, -1, 0, 0, 10, 601, 1537), + (1537, -1, -1, 599, 599, 6, 70, -1, 0, 0, 10, 1536, 1538), + (1538, -1, -1, 599, 599, 9, 70, -1, 0, 0, 10, 1537, 5534), + (1539, -1, -1, 878, 878, 7, 70, -1, 0, 0, 10, 880, 1540), + (1540, -1, -1, 878, 878, 7, 70, -1, 0, 0, 10, 1539, 1541), + (1541, -1, -1, 878, 878, 7, 70, -1, 0, 0, 10, 1540, 4957), + (1542, 1542, -1, 1542, 1542, 3, 60, 8240, 0, 1, 10, -1, -1), + (1543, -1, -1, 1543, 1543, 5, 70, -1, 0, 0, 10, -1, 1544), + (1544, -1, -1, 1543, 1543, 5, 70, -1, 0, 0, 10, 1543, 1545), + (1545, -1, -1, 1543, 1543, 5, 70, -1, 0, 0, 10, 1544, 4951), + (1546, -1, -1, 1546, 1546, 5, 70, -1, 0, 0, 10, -1, 1547), + (1547, -1, -1, 1546, 1546, 5, 70, -1, 0, 0, 10, 1546, 1548), + (1548, -1, -1, 1546, 1546, 5, 70, -1, 0, 0, 10, 1547, 4829), + (1549, -1, -1, 1549, 1549, 3, 66, -1, 0, 0, 10, -1, 1550), + (1550, -1, -1, 1549, 1549, 6, 68, -1, 0, 0, 10, 1549, 1551), + (1551, -1, -1, 1549, 1549, 9, 70, -1, 0, 0, 10, 1550, -1), + (1552, -1, -1, 1552, 1552, 3, 66, -1, 0, 0, 10, -1, 1553), + (1553, -1, -1, 1552, 1552, 6, 68, -1, 0, 0, 10, 1552, 1554), + (1554, -1, -1, 1552, 1552, 9, 70, -1, 0, 0, 10, 1553, -1), + (1555, -1, -1, 1555, 1555, 5, 70, -1, 0, 0, 10, -1, 1556), + (1556, -1, -1, 1555, 1555, 5, 70, -1, 0, 0, 10, 1555, 1557), + (1557, -1, -1, 1555, 1555, 5, 70, -1, 0, 0, 10, 1556, 12727), + (1558, 1501, 1501, 1501, 1501, 6, 75, 16444, 10, 4320, 15, 1503, 1559), + (1559, 1501, 1501, 1501, 1501, 6, 80, 16445, 10, 4320, 15, 1558, 1560), + (1560, 1501, 1501, 1501, 1501, 6, 85, 16446, 10, 4320, 15, 1559, 13244), + (1563, -1, -1, 556, 556, 5, 66, -1, 0, 0, 10, 560, 1564), + (1564, -1, -1, 556, 556, 5, 67, -1, 0, 0, 10, 1563, 1565), + (1565, -1, -1, 556, 556, 5, 68, -1, 0, 0, 10, 1564, 1566), + (1566, -1, -1, 556, 556, 5, 69, -1, 0, 0, 10, 1565, 1567), + (1567, -1, -1, 556, 556, 5, 70, -1, 0, 0, 10, 1566, 17004), + (1569, 1569, 1569, 1569, 1569, 3, 70, 8256, 5, 1800, 10, -1, 1570), + (1570, 1569, 1569, 1569, 1569, 6, 70, 8257, 5, 1800, 10, 1569, 1571), + (1571, 1569, 1569, 1569, 1569, 9, 70, 8258, 5, 1800, 10, 1570, 5713), + (1572, -1, -1, 1572, 1572, 5, 66, -1, 0, 0, 10, -1, 1573), + (1573, -1, -1, 1572, 1572, 5, 67, -1, 0, 0, 10, 1572, 1574), + (1574, -1, -1, 1572, 1572, 5, 68, -1, 0, 0, 10, 1573, 1575), + (1575, -1, -1, 1572, 1572, 5, 69, -1, 0, 0, 10, 1574, 1576), + (1576, -1, -1, 1572, 1572, 5, 70, -1, 0, 0, 10, 1575, 10554), + (1577, -1, -1, 1577, 1577, 3, 66, -1, 0, 0, 10, -1, 1578), + (1578, -1, -1, 1577, 1577, 6, 68, -1, 0, 0, 10, 1577, 1579), + (1579, -1, -1, 1577, 1577, 9, 70, -1, 0, 0, 10, 1578, 5886), + (1583, -1, -1, 1583, 1583, 5, 70, -1, 0, 0, 10, -1, 1584), + (1584, -1, -1, 1583, 1583, 5, 70, -1, 0, 0, 10, 1583, 1585), + (1585, -1, -1, 1583, 1583, 5, 70, -1, 0, 0, 10, 1584, 1586), + (1586, -1, -1, 1583, 1583, 5, 70, -1, 0, 0, 10, 1585, 1587), + (1587, -1, -1, 1583, 1583, 5, 70, -1, 0, 0, 10, 1586, -1), + (1588, -1, -1, 1587, 1587, 3, 66, -1, 0, 0, 10, -1, 1589), + (1589, -1, -1, 1587, 1587, 6, 68, -1, 0, 0, 10, 1588, 1590), + (1590, -1, -1, 1587, 1587, 9, 70, -1, 0, 0, 10, 1589, -1), + (1591, -1, -1, 1586, 1586, 12, 70, -1, 0, 0, 10, -1, -1), + (1592, -1, -1, 1592, 1592, 5, 66, -1, 0, 0, 10, -1, 1593), + (1593, -1, -1, 1592, 1592, 5, 67, -1, 0, 0, 10, 1592, 1594), + (1594, -1, -1, 1592, 1592, 5, 68, -1, 0, 0, 10, 1593, 1595), + (1595, -1, -1, 1592, 1592, 5, 69, -1, 0, 0, 10, 1594, 1596), + (1596, -1, -1, 1592, 1592, 5, 70, -1, 0, 0, 10, 1595, 4725), + (1597, 1597, 1597, 1597, 1597, 9, 70, 8271, 6, 10, 10, -1, 6606), + (1598, 1598, -1, 1598, 1598, 3, 70, 8272, 6, 900, 10, -1, 1599), + (1599, 1598, -1, 1598, 1598, 6, 70, 8273, 6, 900, 10, 1598, 1600), + (1600, 1598, -1, 1598, 1598, 9, 70, 8274, 6, 900, 10, 1599, 4972), + (1601, -1, -1, 644, 644, 5, 61, -1, 0, 0, 10, 644, 1602), + (1602, -1, -1, 644, 644, 5, 63, -1, 0, 0, 10, 1601, 1603), + (1603, -1, -1, 644, 644, 5, 65, -1, 0, 0, 10, 1602, 4986), + (1604, -1, -1, 1604, 1604, 5, 60, -1, 0, 0, 10, -1, 1605), + (1605, -1, -1, 1604, 1604, 5, 61, -1, 0, 0, 10, 1604, 1606), + (1606, -1, -1, 1604, 1604, 5, 62, -1, 0, 0, 10, 1605, 5290), + (1607, 289, 289, 289, 289, 9, 70, 8278, 3, 300, 10, 289, 5742), + (1608, -1, -1, 1608, 1608, 3, 66, -1, 0, 0, 10, -1, 1609), + (1609, -1, -1, 1608, 1608, 6, 68, -1, 0, 0, 10, 1608, 1610), + (1610, -1, -1, 1608, 1608, 9, 70, -1, 0, 0, 10, 1609, 4989), + (1611, -1, -1, 1417, 1417, 3, 66, -1, 0, 0, 10, -1, 1612), + (1612, -1, -1, 1417, 1417, 3, 67, -1, 0, 0, 10, 1611, 1613), + (1613, -1, -1, 1417, 1417, 3, 68, -1, 0, 0, 10, 1612, 1614), + (1614, -1, -1, 1417, 1417, 3, 69, -1, 0, 0, 10, 1613, 1615), + (1615, -1, -1, 1417, 1417, 3, 70, -1, 0, 0, 10, 1614, -1), + (1616, -1, -1, 1616, 1616, 5, 66, -1, 0, 0, 10, -1, 1617), + (1617, -1, -1, 1616, 1616, 5, 67, -1, 0, 0, 10, 1616, 1618), + (1618, -1, -1, 1616, 1616, 5, 68, -1, 0, 0, 10, 1617, 1619), + (1619, -1, -1, 1616, 1616, 5, 69, -1, 0, 0, 10, 1618, 1620), + (1620, -1, -1, 1616, 1616, 5, 70, -1, 0, 0, 10, 1619, 4992), + (1621, -1, -1, 564, 564, 7, 70, -1, 0, 0, 10, 566, 1622), + (1622, -1, -1, 564, 564, 7, 70, -1, 0, 0, 10, 1621, 1623), + (1623, -1, -1, 564, 564, 7, 70, -1, 0, 0, 10, 1622, -1), + (1624, -1, -1, 561, 561, 7, 70, -1, 0, 0, 10, 563, 1625), + (1625, -1, -1, 561, 561, 7, 70, -1, 0, 0, 10, 1624, 1626), + (1626, -1, -1, 561, 561, 7, 70, -1, 0, 0, 10, 1625, -1), + (1627, -1, -1, 1627, 1627, 3, 66, -1, 0, 0, 10, -1, 1628), + (1628, -1, -1, 1627, 1627, 6, 68, -1, 0, 0, 10, 1627, 1629), + (1629, -1, -1, 1627, 1627, 9, 70, -1, 0, 0, 10, 1628, -1), + (1630, 1474, 1474, 1474, 1474, 3, 70, 8146, 14, 300, 10, -1, 1631), + (1631, 1474, 1474, 1474, 1474, 6, 70, 8147, 14, 300, 10, 1630, 1632), + (1632, 1474, 1474, 1474, 1474, 9, 70, 8148, 14, 300, 10, 1631, -1), + (1633, -1, -1, 551, 551, 5, 66, -1, 0, 0, 10, 555, 1634), + (1634, -1, -1, 551, 551, 5, 67, -1, 0, 0, 10, 1633, 1635), + (1635, -1, -1, 551, 551, 5, 68, -1, 0, 0, 10, 1634, 1636), + (1636, -1, -1, 551, 551, 5, 69, -1, 0, 0, 10, 1635, 1637), + (1637, -1, -1, 551, 551, 5, 70, -1, 0, 0, 10, 1636, 6905), + (1638, 1638, 1638, 1638, 1638, 5, 59, 8450, 7, 4320, 3, -1, -1), + (1639, 1639, 1639, 1639, 1639, 9, 65, 8451, 7, 4320, 4, -1, -1), + (1640, 1640, 1640, 1640, 1640, 12, 70, 8452, 7, 4320, 10, -1, -1), + (1641, -1, -1, 1641, 1641, 15, 70, -1, 0, 0, 3, -1, -1), + (1642, -1, -1, 1642, 1642, 15, 70, -1, 0, 0, 3, -1, -1), + (1643, 1643, 1643, 1643, 1643, 0, 59, 8975, 0, 1, 11, -1, -1), + (1644, 1644, 1644, 1644, 1644, 0, 59, 8900, 0, 1, 11, -1, -1), + (1645, 1645, 1645, 1645, 1645, 9, 70, 8977, 0, 1, 3, -1, -1), + (1646, 1646, 1646, 1646, 1646, 9, 70, 8978, 0, 1, 3, -1, -1), + (1647, 1647, 1647, 1647, 1647, 0, 68, 8771, 21, 900, 3, -1, -1), + (1648, -1, -1, 1435, 4773, 9, 71, -1, 0, 0, 16, 1221, 1649), + (1649, -1, -1, 1435, 4773, 9, 76, -1, 0, 0, 16, 1648, 1650), + (1650, -1, -1, 1435, 4773, 9, 81, -1, 0, 0, 16, 1649, 13091), + (1651, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 16, 8214, 1652), + (1652, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 16, 1651, 1653), + (1653, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 16, 1652, 1654), + (1654, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 16, 1653, 1655), + (1655, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 16, 1654, 13149), + (1656, -1, -1, 8204, 8204, 4, 85, -1, 0, 0, 16, 8206, 1657), + (1657, -1, -1, 8204, 8204, 4, 85, -1, 0, 0, 16, 1656, -1), + (1659, -1, -1, 8207, 8207, 4, 85, -1, 0, 0, 16, 8209, 1660), + (1660, -1, -1, 8207, 8207, 4, 85, -1, 0, 0, 16, 1659, -1), + (1662, -1, -1, 1662, 1662, 3, 65, -1, 0, 0, 17, -1, 1663), + (1663, -1, -1, 1662, 1662, 3, 66, -1, 0, 0, 17, 1662, 1664), + (1664, -1, -1, 1662, 1662, 3, 67, -1, 0, 0, 17, 1663, 1665), + (1665, -1, -1, 1662, 1662, 3, 68, -1, 0, 0, 17, 1664, 1666), + (1666, -1, -1, 1662, 1662, 3, 69, -1, 0, 0, 17, 1665, -1), + (1667, 1667, 1667, 1667, 1667, 9, 85, 23602, 0, 1, 16, -1, -1), + (2400, -1, -1, 2400, 2400, 9, 81, 0, 0, 0, 17, -1, 2401), + (2401, -1, -1, 2400, 2400, 12, 83, 0, 0, 0, 17, 2400, 2402), + (2402, -1, -1, 2400, 2400, 15, 85, 0, 0, 0, 17, 2401, 15344), + (3676, 3676, 3676, 3676, 3676, 9, 85, 23606, 67, 30, 16, -1, -1), + (4665, 4665, 4665, 4665, 4665, 0, 1, 9177, 19, 4320, 0, -1, -1), + (4666, -1, -1, 4844, 4844, 5, 81, -1, 0, 0, 16, -1, 4667), + (4667, -1, -1, 4844, 4844, 5, 82, -1, 0, 0, 16, 4666, 4668), + (4668, -1, -1, 4844, 4844, 5, 83, -1, 0, 0, 16, 4667, 4669), + (4669, -1, -1, 4844, 4844, 5, 84, -1, 0, 0, 16, 4668, 4670), + (4670, -1, -1, 4844, 4844, 5, 85, -1, 0, 0, 16, 4669, -1), + (4672, -1, -1, 4672, 4672, 3, 59, -1, 0, 0, 8, -1, 4673), + (4673, -1, -1, 4672, 4672, 6, 59, -1, 0, 0, 8, 4672, 4674), + (4674, -1, -1, 4672, 4672, 9, 59, -1, 0, 0, 8, 4673, -1), + (4675, -1, -1, 4675, 4675, 3, 59, -1, 0, 0, 3, -1, 4676), + (4676, -1, -1, 4675, 4675, 6, 59, -1, 0, 0, 3, 4675, 4677), + (4677, -1, -1, 4675, 4675, 9, 59, -1, 0, 0, 3, 4676, -1), + (4678, -1, -1, 418, 418, 5, 71, -1, 0, 0, 12, 1005, 4679), + (4679, -1, -1, 418, 418, 5, 72, -1, 0, 0, 12, 4678, 4680), + (4680, -1, -1, 418, 418, 5, 73, -1, 0, 0, 12, 4679, 4681), + (4681, -1, -1, 418, 418, 5, 74, -1, 0, 0, 12, 4680, 4682), + (4682, -1, -1, 418, 418, 5, 75, -1, 0, 0, 12, 4681, 7547), + (4683, -1, -1, 1026, 1026, 5, 71, -1, 0, 0, 12, 1393, 4684), + (4684, -1, -1, 1026, 1026, 5, 72, -1, 0, 0, 12, 4683, 4685), + (4685, -1, -1, 1026, 1026, 5, 73, -1, 0, 0, 12, 4684, 4686), + (4686, -1, -1, 1026, 1026, 5, 74, -1, 0, 0, 12, 4685, 4687), + (4687, -1, -1, 1026, 1026, 5, 75, -1, 0, 0, 12, 4686, 6523), + (4688, -1, -1, 4688, 4688, 3, 71, -1, 0, 0, 12, -1, 4689), + (4689, -1, -1, 4688, 4688, 3, 72, -1, 0, 0, 12, 4688, 4690), + (4690, -1, -1, 4688, 4688, 3, 73, -1, 0, 0, 12, 4689, 4691), + (4691, -1, -1, 4688, 4688, 3, 74, -1, 0, 0, 12, 4690, 4692), + (4692, -1, -1, 4688, 4688, 3, 75, -1, 0, 0, 12, 4691, -1), + (4693, -1, -1, 65, 661, 3, 71, -1, 0, 0, 12, 1035, 4694), + (4694, -1, -1, 65, 661, 3, 72, -1, 0, 0, 12, 4693, 4695), + (4695, -1, -1, 65, 661, 3, 73, -1, 0, 0, 12, 4694, 4696), + (4696, -1, -1, 65, 661, 3, 74, -1, 0, 0, 12, 4695, 4697), + (4697, -1, -1, 65, 661, 3, 75, -1, 0, 0, 12, 4696, 6390), + (4698, -1, -1, 4698, 4698, 5, 51, -1, 0, 0, 12, -1, 6545), + (4699, -1, -1, 4699, 4699, 5, 51, -1, 0, 0, 12, -1, 6540), + (4700, 1037, 1037, 1037, 1037, 0, 1, 7619, 33, 72000, 0, -1, -1), + (4702, 4702, 4702, 4702, 4702, 3, 71, 9475, 31, 600, 12, -1, -1), + (4704, 4704, 4704, 4704, 4704, 4, 71, 9477, 31, 600, 12, -1, -1), + (4705, 4705, 4705, 4705, 4705, 3, 71, 9478, 31, 600, 12, -1, -1), + (4706, 4706, 4706, 4706, 4706, 3, 71, 9479, 31, 600, 12, -1, -1), + (4707, -1, -1, 1041, 1041, 6, 71, -1, 0, 0, 12, 1043, 4708), + (4708, -1, -1, 1041, 1041, 6, 73, -1, 0, 0, 12, 4707, 4709), + (4709, -1, -1, 1041, 1041, 6, 75, -1, 0, 0, 12, 4708, 5542), + (4710, -1, -1, 1044, 1044, 6, 71, -1, 0, 0, 12, 1046, 4711), + (4711, -1, -1, 1044, 1044, 6, 73, -1, 0, 0, 12, 4710, 4712), + (4712, -1, -1, 1044, 1044, 6, 75, -1, 0, 0, 12, 4711, 5545), + (4713, -1, -1, 1047, 1047, 6, 71, -1, 0, 0, 12, 1049, 4714), + (4714, -1, -1, 1047, 1047, 6, 73, -1, 0, 0, 12, 4713, 4715), + (4715, -1, -1, 1047, 1047, 6, 75, -1, 0, 0, 12, 4714, 5548), + (4716, -1, -1, 1050, 1050, 6, 71, -1, 0, 0, 12, 1052, 4717), + (4717, -1, -1, 1050, 1050, 6, 73, -1, 0, 0, 12, 4716, 4718), + (4718, -1, -1, 1050, 1050, 6, 75, -1, 0, 0, 12, 4717, 5551), + (4722, -1, -1, 119, 119, 3, 71, -1, 0, 0, 12, 1055, 4723), + (4723, -1, -1, 119, 119, 3, 73, -1, 0, 0, 12, 4722, 4724), + (4724, -1, -1, 119, 119, 3, 75, -1, 0, 0, 12, 4723, 5554), + (4725, -1, -1, 1592, 1592, 5, 71, -1, 0, 0, 12, 1596, 4726), + (4726, -1, -1, 1592, 1592, 5, 72, -1, 0, 0, 12, 4725, 4727), + (4727, -1, -1, 1592, 1592, 5, 73, -1, 0, 0, 12, 4726, 4728), + (4728, -1, -1, 1592, 1592, 5, 74, -1, 0, 0, 12, 4727, 4729), + (4729, -1, -1, 1592, 1592, 5, 75, -1, 0, 0, 12, 4728, 5557), + (4733, -1, -1, 625, 625, 3, 71, -1, 0, 0, 12, 627, 4734), + (4734, -1, -1, 625, 625, 3, 73, -1, 0, 0, 12, 4733, 4735), + (4735, -1, -1, 625, 625, 3, 75, -1, 0, 0, 12, 4734, 7641), + (4739, -1, -1, 4739, 4739, 3, 71, -1, 0, 0, 12, -1, 4740), + (4740, -1, -1, 4739, 4739, 6, 73, -1, 0, 0, 12, 4739, 4741), + (4741, -1, -1, 4739, 4739, 9, 75, -1, 0, 0, 12, 4740, 5562), + (4742, 4742, 4742, 4742, 4742, 9, 71, 11024, 12, 600, 12, -1, 5565), + (4744, -1, -1, 1072, 1072, 5, 71, -1, 0, 0, 12, 1076, 4745), + (4745, -1, -1, 1072, 1072, 5, 72, -1, 0, 0, 12, 4744, 4746), + (4746, -1, -1, 1072, 1072, 5, 73, -1, 0, 0, 12, 4745, 4747), + (4747, -1, -1, 1072, 1072, 5, 74, -1, 0, 0, 12, 4746, 4748), + (4748, -1, -1, 1072, 1072, 5, 75, -1, 0, 0, 12, 4747, 5566), + (4749, -1, -1, 637, 637, 6, 71, -1, 0, 0, 12, 772, 4750), + (4750, -1, -1, 637, 637, 6, 73, -1, 0, 0, 12, 4749, 4751), + (4751, -1, -1, 637, 637, 6, 75, -1, 0, 0, 12, 4750, 5571), + (4752, -1, -1, 1210, 1210, 7, 71, -1, 0, 0, 12, 1485, 4753), + (4753, -1, -1, 1210, 1210, 7, 73, -1, 0, 0, 12, 4752, 4754), + (4754, -1, -1, 1210, 1210, 7, 75, -1, 0, 0, 12, 4753, 5574), + (4755, -1, -1, 1210, 1213, 6, 71, -1, 0, 0, 12, 1215, 4756), + (4756, -1, -1, 1210, 1213, 6, 73, -1, 0, 0, 12, 4755, 4757), + (4757, -1, -1, 1210, 1213, 6, 75, -1, 0, 0, 12, 4756, 5577), + (4758, -1, -1, 602, 602, 6, 71, -1, 0, 0, 12, 1535, 4759), + (4759, -1, -1, 602, 602, 6, 73, -1, 0, 0, 12, 4758, 4760), + (4760, -1, -1, 602, 602, 6, 75, -1, 0, 0, 12, 4759, 5580), + (4761, -1, -1, 4761, 4761, 7, 71, -1, 0, 0, 12, -1, 4762), + (4762, -1, -1, 4761, 4761, 7, 73, -1, 0, 0, 12, 4761, 4763), + (4763, -1, -1, 4761, 4761, 7, 75, -1, 0, 0, 12, 4762, 6500), + (4764, -1, -1, 1071, 1071, 6, 75, -1, 0, 0, 14, 1071, 7553), + (4767, -1, -1, 98, 98, 4, 71, -1, 0, 0, 12, 100, 4768), + (4768, -1, -1, 98, 98, 4, 73, -1, 0, 0, 12, 4767, 4769), + (4769, -1, -1, 98, 98, 4, 75, -1, 0, 0, 12, 4768, 5586), + (4773, -1, -1, 1435, 4773, 9, 71, -1, 0, 0, 12, 1437, 6517), + (4776, -1, -1, 1186, 1186, 6, 71, -1, 0, 0, 12, 1188, 4777), + (4777, -1, -1, 1186, 1186, 6, 73, -1, 0, 0, 12, 4776, 4778), + (4778, -1, -1, 1186, 1186, 6, 75, -1, 0, 0, 12, 4777, 5589), + (4779, -1, -1, 80, 80, 6, 71, -1, 0, 0, 12, 1088, 4780), + (4780, -1, -1, 80, 80, 6, 73, -1, 0, 0, 12, 4779, 4781), + (4781, -1, -1, 80, 80, 6, 75, -1, 0, 0, 12, 4780, 5592), + (4790, -1, -1, 1134, 1134, 5, 71, -1, 0, 0, 12, 1162, 4791), + (4791, -1, -1, 1134, 1134, 5, 72, -1, 0, 0, 12, 4790, 4792), + (4792, -1, -1, 1134, 1134, 5, 73, -1, 0, 0, 12, 4791, 4793), + (4793, -1, -1, 1134, 1134, 5, 74, -1, 0, 0, 12, 4792, 4794), + (4794, -1, -1, 1134, 1134, 5, 75, -1, 0, 0, 12, 4793, 4804), + (4795, -1, -1, 255, 255, 5, 71, -1, 0, 0, 12, 1165, 4796), + (4796, -1, -1, 255, 255, 5, 73, -1, 0, 0, 12, 4795, 4797), + (4797, -1, -1, 255, 255, 5, 75, -1, 0, 0, 12, 4796, 5595), + (4798, -1, -1, 631, 631, 5, 71, -1, 0, 0, 12, 1174, 4799), + (4799, -1, -1, 631, 631, 5, 73, -1, 0, 0, 12, 4798, 4800), + (4800, -1, -1, 631, 631, 5, 75, -1, 0, 0, 12, 4799, -1), + (4801, -1, -1, 4801, 4801, 6, 74, -1, 0, 0, 14, -1, 4802), + (4802, -1, -1, 4801, 4801, 6, 76, -1, 0, 0, 14, 4801, 4803), + (4803, -1, -1, 4801, 4801, 6, 78, -1, 0, 0, 14, 4802, 7160), + (4804, -1, -1, 1134, 1134, 5, 76, -1, 0, 0, 15, 4794, 4805), + (4805, -1, -1, 1134, 1134, 5, 77, -1, 0, 0, 15, 4804, 4806), + (4806, -1, -1, 1134, 1134, 5, 78, -1, 0, 0, 15, 4805, 4807), + (4807, -1, -1, 1134, 1134, 5, 79, -1, 0, 0, 15, 4806, 4808), + (4808, -1, -1, 1134, 1134, 5, 80, -1, 0, 0, 15, 4807, 10311), + (4809, -1, -1, 4809, 4809, 5, 81, -1, 0, 0, 15, -1, 4810), + (4810, -1, -1, 4809, 4809, 5, 83, -1, 0, 0, 15, 4809, 4811), + (4811, -1, -1, 4809, 4809, 5, 85, -1, 0, 0, 15, 4810, 10316), + (4813, -1, -1, 820, 820, 5, 71, -1, 0, 0, 12, 1267, 4814), + (4814, -1, -1, 820, 820, 5, 73, -1, 0, 0, 12, 4813, 4815), + (4815, -1, -1, 820, 820, 5, 75, -1, 0, 0, 12, 4814, 5917), + (4819, -1, -1, 1528, 4819, 5, 71, -1, 0, 0, 12, 1532, 4820), + (4820, -1, -1, 1528, 4819, 5, 72, -1, 0, 0, 12, 4819, 4821), + (4821, -1, -1, 1528, 4819, 5, 73, -1, 0, 0, 12, 4820, 4822), + (4822, -1, -1, 1528, 4819, 5, 74, -1, 0, 0, 12, 4821, 4823), + (4823, -1, -1, 1528, 4819, 5, 75, -1, 0, 0, 12, 4822, 15188), + (4824, -1, -1, 810, 810, 5, 71, -1, 0, 0, 12, 814, 4825), + (4825, -1, -1, 810, 810, 5, 72, -1, 0, 0, 12, 4824, 4826), + (4826, -1, -1, 810, 810, 5, 73, -1, 0, 0, 12, 4825, 4827), + (4827, -1, -1, 810, 810, 5, 74, -1, 0, 0, 12, 4826, 4828), + (4828, -1, -1, 810, 810, 5, 75, -1, 0, 0, 12, 4827, 15426), + (4829, -1, -1, 1546, 1546, 5, 71, -1, 0, 0, 12, 1548, 4830), + (4830, -1, -1, 1546, 1546, 5, 72, -1, 0, 0, 12, 4829, 4831), + (4831, -1, -1, 1546, 1546, 5, 73, -1, 0, 0, 12, 4830, 6441), + (4836, 4836, 4836, 4836, 4836, 5, 71, 11033, 5, 30, 12, -1, -1), + (4844, -1, -1, 4844, 4844, 5, 71, -1, 0, 0, 12, -1, 4845), + (4845, -1, -1, 4844, 4844, 5, 72, -1, 0, 0, 12, 4844, 4846), + (4846, -1, -1, 4844, 4844, 5, 73, -1, 0, 0, 12, 4845, 4847), + (4847, -1, -1, 4844, 4844, 5, 74, -1, 0, 0, 12, 4846, 4848), + (4848, -1, -1, 4844, 4844, 5, 75, -1, 0, 0, 12, 4847, 7122), + (4849, 4849, 4849, 4849, 4849, 9, 71, 11041, 7, 1800, 12, -1, 6134), + (4854, 4854, 4854, 4854, 4854, 3, 71, 11046, 8, 600, 12, -1, 4855), + (4855, 4854, 4854, 4854, 4854, 6, 73, 11047, 8, 600, 12, 4854, 4856), + (4856, 4854, 4854, 4854, 4854, 9, 75, 11048, 8, 600, 12, 4855, 5764), + (4857, 4857, 4857, 4857, 4857, 3, 71, 11049, 7, 600, 12, -1, 4858), + (4858, 4857, 4857, 4857, 4857, 6, 73, 11050, 7, 600, 12, 4857, 4859), + (4859, 4857, 4857, 4857, 4857, 9, 75, 11051, 7, 600, 12, 4858, 5767), + (4860, 4860, 4860, 4860, 4860, 9, 75, 11052, 13, 60, 12, -1, 5606), + (4861, -1, -1, 4861, 4861, 6, 71, -1, 0, 0, 12, -1, 4862), + (4862, -1, -1, 4861, 4861, 6, 73, -1, 0, 0, 12, 4861, 4863), + (4863, -1, -1, 4861, 4861, 6, 75, -1, 0, 0, 12, 4862, 5954), + (4864, 1274, 1274, 1274, 1274, 6, 73, 11053, 9, 540, 12, 1276, 4865), + (4865, 1274, 1274, 1274, 1274, 6, 74, 11054, 9, 540, 12, 4864, 4866), + (4866, 1274, 1274, 1274, 1274, 6, 75, 11055, 9, 540, 12, 4865, 5947), + (4887, -1, -1, 4887, 4887, 6, 71, -1, 0, 0, 12, -1, 4888), + (4888, -1, -1, 4887, 4887, 6, 73, -1, 0, 0, 12, 4887, 4889), + (4889, -1, -1, 4887, 4887, 6, 75, -1, 0, 0, 12, 4888, -1), + (4890, 4890, -1, 4890, 4890, 9, 75, 11056, 3, 8640, 12, -1, 5869), + (4894, 4894, 4894, 4894, 4894, 6, 73, 11057, 7, 2160, 12, -1, 4895), + (4895, 4894, 4894, 4894, 4894, 6, 74, 11058, 7, 2160, 12, 4894, 4896), + (4896, 4894, 4894, 4894, 4894, 6, 75, 11059, 7, 2160, 12, 4895, 6352), + (4897, -1, -1, 795, 795, 6, 71, -1, 0, 0, 12, 1432, 4898), + (4898, -1, -1, 795, 795, 6, 73, -1, 0, 0, 12, 4897, 4899), + (4899, -1, -1, 795, 795, 6, 75, -1, 0, 0, 12, 4898, 5889), + (4900, 1462, 1462, 1462, 1462, 6, 71, 11061, 5, 300, 12, 1466, 4901), + (4901, 1462, 1462, 1462, 1462, 6, 73, 11062, 5, 300, 12, 4900, 4902), + (4902, 1462, 1462, 1462, 1462, 6, 75, 11063, 5, 300, 12, 4901, 14739), + (4903, 4903, 4903, 4903, 4903, 9, 71, 11064, 9, 1320, 12, -1, 5892), + (4906, 4906, 4906, 4906, 4906, 9, 71, 11065, 9, 1320, 12, -1, 5893), + (4909, 4909, 4909, 4909, 4909, 9, 71, 11066, 16, 1320, 12, -1, 5894), + (4912, 4912, 4912, 4912, 4912, 9, 71, 11067, 16, 1320, 12, -1, 5895), + (4915, 4915, 4915, 4915, 4915, 9, 71, 11068, 7, 4320, 12, -1, 4916), + (4916, 4915, 4915, 4915, 4915, 9, 73, 11069, 7, 4320, 12, 4915, 4917), + (4917, 4915, 4915, 4915, 4915, 9, 75, 11070, 7, 4320, 12, 4916, 5607), + (4921, -1, -1, 480, 480, 2, 71, -1, 0, 0, 12, 482, 4922), + (4922, -1, -1, 480, 480, 2, 73, -1, 0, 0, 12, 4921, 4923), + (4923, -1, -1, 480, 480, 2, 75, -1, 0, 0, 12, 4922, -1), + (4924, -1, -1, 4924, 4924, 5, 75, -1, 0, 0, 12, -1, 4925), + (4925, -1, -1, 4924, 4924, 5, 75, -1, 0, 0, 12, 4924, 4926), + (4926, -1, -1, 4924, 4924, 5, 75, -1, 0, 0, 12, 4925, 5944), + (4927, 4927, 4927, 4927, 4927, 9, 71, 11076, 14, 600, 12, -1, 7209), + (4931, 4931, 4931, 4931, 4931, 6, 71, 11083, 4, 600, 12, -1, 4932), + (4932, 4931, 4931, 4931, 4931, 6, 73, 11084, 4, 600, 12, 4931, 4933), + (4933, 4931, 4931, 4931, 4931, 6, 75, 11085, 4, 600, 12, 4932, 6054), + (4934, 4934, 4934, 4934, 4934, 7, 71, 11086, 13, 300, 12, -1, 7295), + (4935, 4935, 4935, 4935, 4935, 7, 71, 11087, 14, 300, 12, -1, 7294), + (4938, 4938, 4938, 4938, 4938, 9, 75, 11092, 35, 1800, 12, -1, 5610), + (4943, 4943, 4943, 4943, 4943, 7, 75, 11098, 17, 1800, 12, -1, -1), + (4944, 4944, -1, 4944, 4944, 3, 71, 11103, 0, 1, 12, -1, 4945), + (4945, 4944, -1, 4944, 4944, 6, 73, 11104, 0, 1, 12, 4944, 4946), + (4946, 4944, -1, 4944, 4944, 9, 75, 11105, 0, 1, 12, 4945, 6155), + (4948, -1, -1, 846, 846, 3, 71, -1, 0, 0, 12, 1303, 4949), + (4949, -1, -1, 846, 846, 6, 73, -1, 0, 0, 12, 4948, 4950), + (4950, -1, -1, 846, 846, 9, 75, -1, 0, 0, 12, 4949, 6035), + (4951, -1, -1, 1543, 1543, 5, 71, -1, 0, 0, 12, 1545, 4952), + (4952, -1, -1, 1543, 1543, 5, 73, -1, 0, 0, 12, 4951, 4953), + (4953, -1, -1, 1543, 1543, 5, 75, -1, 0, 0, 12, 4952, 6042), + (4957, -1, -1, 878, 878, 7, 71, -1, 0, 0, 12, 1541, 4958), + (4958, -1, -1, 878, 878, 7, 73, -1, 0, 0, 12, 4957, 4959), + (4959, -1, -1, 878, 878, 7, 75, -1, 0, 0, 12, 4958, 6331), + (4960, -1, -1, 729, 729, 6, 71, -1, 0, 0, 12, 1469, 4961), + (4961, -1, -1, 729, 729, 6, 73, -1, 0, 0, 12, 4960, 4962), + (4962, -1, -1, 729, 729, 6, 75, -1, 0, 0, 12, 4961, 5738), + (4963, 723, 723, 723, 723, 9, 71, 11205, 6, 30, 12, 723, 5737), + (4964, 1119, 1119, 1119, 1119, 6, 73, 11206, 8, 900, 12, 1121, 4965), + (4965, 1119, 1119, 1119, 1119, 6, 74, 11207, 8, 900, 12, 4964, 4966), + (4966, 1119, 1119, 1119, 1119, 6, 75, 11208, 8, 900, 12, 4965, 5734), + (4969, 291, 291, 291, 291, 5, 71, 11212, 5, 900, 12, 1125, 4970), + (4970, 291, 291, 291, 291, 5, 73, 11213, 5, 900, 12, 4969, 4971), + (4971, 291, 291, 291, 291, 5, 75, 11214, 5, 900, 12, 4970, 5743), + (4972, 1598, -1, 1598, 1598, 6, 71, 11215, 6, 900, 12, 1600, 4973), + (4973, 1598, -1, 1598, 1598, 6, 73, 11216, 6, 900, 12, 4972, 4974), + (4974, 1598, -1, 1598, 1598, 6, 75, 11217, 6, 900, 12, 4973, 5710), + (4975, 592, 592, 592, 592, 3, 71, 11218, 2, 18, 12, 1106, 4976), + (4976, 592, 592, 592, 592, 3, 72, 11219, 2, 18, 12, 4975, 4977), + (4977, 592, 592, 592, 592, 3, 73, 11220, 2, 18, 12, 4976, 4978), + (4978, 592, 592, 592, 592, 3, 74, 11221, 2, 18, 12, 4977, 4979), + (4979, 592, 592, 592, 592, 3, 75, 11222, 2, 18, 12, 4978, 5702), + (4980, 1116, 1116, 1116, 1116, 6, 73, 11223, 4, 2160, 12, 1118, 4981), + (4981, 1116, 1116, 1116, 1116, 6, 74, 11224, 4, 2160, 12, 4980, 4982), + (4982, 1116, 1116, 1116, 1116, 6, 75, 11225, 4, 2160, 12, 4981, 5699), + (4983, -1, -1, 864, 864, 6, 71, -1, 0, 0, 12, 1292, 4984), + (4984, -1, -1, 864, 864, 6, 73, -1, 0, 0, 12, 4983, 4985), + (4985, -1, -1, 864, 864, 6, 75, -1, 0, 0, 12, 4984, 6011), + (4986, -1, -1, 644, 644, 5, 67, -1, 0, 0, 12, 1603, 4987), + (4987, -1, -1, 644, 644, 5, 69, -1, 0, 0, 12, 4986, 4988), + (4988, -1, -1, 644, 644, 5, 71, -1, 0, 0, 12, 4987, 6017), + (4989, -1, -1, 1608, 1608, 6, 71, -1, 0, 0, 12, 1610, 4990), + (4990, -1, -1, 1608, 1608, 6, 73, -1, 0, 0, 12, 4989, 4991), + (4991, -1, -1, 1608, 1608, 6, 75, -1, 0, 0, 12, 4990, 7378), + (4992, -1, -1, 1616, 1616, 5, 71, -1, 0, 0, 12, 1620, 4993), + (4993, -1, -1, 1616, 1616, 5, 72, -1, 0, 0, 12, 4992, 4994), + (4994, -1, -1, 1616, 1616, 5, 73, -1, 0, 0, 12, 4993, 4995), + (4995, -1, -1, 1616, 1616, 5, 74, -1, 0, 0, 12, 4994, 4996), + (4996, -1, -1, 1616, 1616, 5, 75, -1, 0, 0, 12, 4995, 6003), + (4997, 545, 545, 545, 545, 6, 73, 11226, 3, 900, 12, 1295, 4998), + (4998, 545, 545, 545, 545, 6, 74, 11227, 3, 900, 12, 4997, 4999), + (4999, 545, 545, 545, 545, 6, 75, 11228, 3, 900, 12, 4998, 6000), + (5000, -1, -1, 1230, 1230, 2, 71, -1, 0, 0, 12, 1232, 5001), + (5001, -1, -1, 1230, 1230, 2, 73, -1, 0, 0, 12, 5000, 5002), + (5002, -1, -1, 1230, 1230, 2, 75, -1, 0, 0, 12, 5001, -1), + (5003, 1345, 1345, 1345, 1345, 5, 73, 11229, 6, 900, 12, 1347, 5004), + (5004, 1345, 1345, 1345, 1345, 5, 74, 11230, 6, 900, 12, 5003, 5005), + (5005, 1345, 1345, 1345, 1345, 5, 75, 11231, 6, 900, 12, 5004, 6008), + (5006, 5006, 5006, 5006, 5006, 0, 0, 27673, 96, 72000, 0, -1, -1), + (5007, 5007, 5007, 5007, 5007, 3, 71, 11233, 8, 2160, 12, -1, 5008), + (5008, 5007, 5007, 5007, 5007, 6, 73, 11234, 8, 2160, 12, 5007, 5009), + (5009, 5007, 5007, 5007, 5007, 9, 75, 11235, 8, 2160, 12, 5008, 6425), + (5010, -1, -1, 1007, 1007, 8, 81, -1, 0, 0, 16, -1, 5011), + (5011, -1, -1, 1007, 1007, 10, 83, -1, 0, 0, 16, 5010, 5012), + (5012, -1, -1, 1007, 1007, 12, 85, -1, 0, 0, 16, 5011, 15317), + (5013, -1, -1, 1284, 1284, 6, 83, -1, 0, 0, 16, 5037, 5014), + (5014, -1, -1, 1284, 1284, 6, 85, -1, 0, 0, 16, 5013, -1), + (5015, 5015, 5015, 5015, 5015, 5, 75, 11241, 9, 900, 12, -1, 5741), + (5017, 5017, 5017, 5017, 5017, 3, 71, 11243, 8, 600, 12, -1, 5018), + (5018, 5017, 5017, 5017, 5017, 6, 73, 11244, 8, 600, 12, 5017, 5019), + (5019, 5017, 5017, 5017, 5017, 9, 75, 11245, 8, 600, 12, 5018, 7454), + (5020, 5020, 5020, 5020, 5020, 9, 75, 11246, 9, 300, 12, -1, 5716), + (5021, 5021, 5021, 5021, 5021, 9, 71, 11341, 7, 60, 12, -1, 10868), + (5022, 5022, 5022, 5022, 5022, 3, 71, 11247, 5, 600, 12, -1, 5023), + (5023, 5022, 5022, 5022, 5022, 6, 73, 23986, 5, 600, 12, 5022, 5024), + (5024, 5022, 5022, 5022, 5022, 9, 75, 23987, 5, 600, 12, 5023, 6038), + (5025, 5025, 5025, 5025, 5025, 3, 71, 11251, 6, 180, 12, -1, 5026), + (5026, 5025, 5025, 5025, 5025, 6, 73, 11252, 6, 180, 12, 5025, 5027), + (5027, 5025, 5025, 5025, 5025, 9, 75, 11253, 6, 180, 12, 5026, -1), + (5028, 5028, -1, 5028, 5028, 9, 75, 11254, 4, 900, 12, -1, 6041), + (5029, -1, -1, 1313, 1313, 6, 71, -1, 0, 0, 8, 1315, 5030), + (5030, -1, -1, 1313, 1313, 6, 73, -1, 0, 0, 8, 5029, 5031), + (5031, -1, -1, 1313, 1313, 6, 75, -1, 0, 0, 8, 5030, 6066), + (5032, -1, -1, 634, 634, 5, 72, -1, 0, 0, 12, 1321, 5033), + (5033, -1, -1, 634, 634, 5, 73, -1, 0, 0, 12, 5032, 5034), + (5034, -1, -1, 634, 634, 5, 74, -1, 0, 0, 12, 5033, 5611), + (5035, -1, -1, 1284, 1284, 6, 71, -1, 0, 0, 12, 1286, 5036), + (5036, -1, -1, 1284, 1284, 6, 73, -1, 0, 0, 12, 5035, 5037), + (5037, -1, -1, 1284, 1284, 6, 75, -1, 0, 0, 12, 5036, 5013), + (5038, -1, -1, 190, 190, 7, 71, -1, 0, 0, 12, 1525, 5039), + (5039, -1, -1, 190, 190, 7, 73, -1, 0, 0, 12, 5038, 5040), + (5040, -1, -1, 190, 190, 7, 75, -1, 0, 0, 12, 5039, 15141), + (5041, 534, 534, 534, 534, 5, 72, 11255, 4, 2160, 12, 1280, 5042), + (5042, 534, 534, 534, 534, 5, 73, 11256, 4, 2160, 12, 5041, 5043), + (5043, 534, 534, 534, 534, 5, 74, 11257, 4, 2160, 12, 5042, 5969), + (5044, 188, 188, 188, 188, 9, 73, 11258, 2, 30, 12, 1277, 7339), + (5045, -1, -1, 1057, 1057, 9, 85, -1, 0, 0, 16, -1, -1), + (5051, 757, -1, 757, 757, 5, 71, 11262, 6, 1800, 12, 1224, 5052), + (5052, 757, -1, 757, 757, 5, 73, 11263, 6, 1800, 12, 5051, 5053), + (5053, 757, -1, 757, 757, 5, 75, 11264, 6, 1800, 12, 5052, 5822), + (5054, 548, 548, 548, 548, 5, 72, 11265, 5, 900, 12, 1227, 5055), + (5055, 548, 548, 548, 548, 5, 73, 11266, 5, 900, 12, 5054, 5056), + (5056, 548, 548, 548, 548, 5, 74, 11267, 5, 900, 12, 5055, 5829), + (5058, 1498, 1498, 1498, 1498, 6, 71, 11269, 12, 1320, 12, 1500, 5059), + (5059, 1498, 1498, 1498, 1498, 6, 73, 11270, 12, 1320, 12, 5058, 5060), + (5060, 1498, 1498, 1498, 1498, 6, 75, 11271, 12, 1320, 12, 5059, 5819), + (5061, -1, -1, 567, 567, 5, 72, -1, 0, 0, 12, 567, 5825), + (5062, 459, 459, 459, 459, 6, 71, 11272, 8, 180, 12, 1191, 5063), + (5063, 459, 459, 459, 459, 6, 73, 11273, 8, 180, 12, 5062, 5064), + (5064, 459, 459, 459, 459, 6, 75, 11274, 8, 180, 12, 5063, -1), + (5068, 153, 153, 153, 153, 9, 75, 11279, 3, 2160, 12, 1519, 6101), + (5069, 146, 146, 146, 146, 5, 72, 11281, 2, 180, 12, 146, 6102), + (5070, 131, 131, 131, 131, 5, 72, 11282, 4, 900, 12, 1205, 5071), + (5071, 131, 131, 131, 131, 5, 73, 11283, 4, 900, 12, 5070, 5072), + (5072, 131, 131, 131, 131, 5, 74, 11284, 4, 900, 12, 5071, 5791), + (5076, 1192, 1192, 1192, 1192, 5, 72, 11288, 12, 1320, 12, 1194, 5077), + (5077, 1192, 1192, 1192, 1192, 5, 73, 11289, 12, 1320, 12, 5076, 5078), + (5078, 1192, 1192, 1192, 1192, 5, 74, 11290, 12, 1320, 12, 5077, 5794), + (5079, 1195, 1195, 1195, 1195, 9, 75, 11291, 13, 2160, 12, 1195, 5790), + (5080, 1459, 1459, 1459, 1459, 5, 71, 11293, 11, 1800, 12, 1461, 5081), + (5081, 1459, 1459, 1459, 1459, 5, 73, 11294, 11, 1800, 12, 5080, 5082), + (5082, 1459, 1459, 1459, 1459, 5, 75, 11295, 11, 1800, 12, 5081, 5803), + (5084, 1383, 1383, 1383, 1383, 12, 75, 11296, 6, 300, 12, 1387, 5789), + (5085, -1, -1, 5085, 5085, 3, 71, -1, 0, 0, 12, -1, 5086), + (5086, -1, -1, 5085, 5085, 6, 73, -1, 0, 0, 12, 5085, 5087), + (5087, -1, -1, 5085, 5085, 9, 75, -1, 0, 0, 12, 5086, 6406), + (5095, 5095, 5095, 5095, 5095, 3, 71, 11307, 10, 900, 12, -1, 5096), + (5096, 5095, 5095, 5095, 5095, 6, 73, 11308, 10, 900, 12, 5095, 5097), + (5097, 5095, 5095, 5095, 5095, 9, 75, 11309, 10, 900, 12, 5096, 5975), + (5098, 5098, 5098, 5098, 5098, 9, 75, 11310, 2, 30, 12, -1, -1), + (5105, 5105, 5105, 5105, 5105, 9, 75, 11317, 11, 600, 12, -1, 5832), + (5109, 5109, 5109, 5109, 5109, 9, 75, 11321, 0, 1, 12, -1, 6448), + (5118, -1, -1, 5083, 5083, 3, 71, -1, 0, 0, 12, -1, 5119), + (5119, -1, -1, 5083, 5083, 3, 73, -1, 0, 0, 12, 5118, 5120), + (5120, -1, -1, 5083, 5083, 3, 75, -1, 0, 0, 12, 5119, 5797), + (5127, -1, -1, 5127, 5127, 3, 71, -1, 0, 0, 12, -1, 5128), + (5128, -1, -1, 5127, 5127, 3, 73, -1, 0, 0, 12, 5127, 5129), + (5129, -1, -1, 5127, 5127, 3, 75, -1, 0, 0, 12, 5128, -1), + (5130, 860, 860, 860, 860, 6, 71, 5860, 5, 180, 12, 862, 5131), + (5131, 860, 860, 860, 860, 6, 73, 5861, 5, 180, 12, 5130, 5132), + (5132, 860, 860, 860, 860, 6, 75, 5862, 5, 180, 12, 5131, -1), + (5133, -1, -1, 267, 267, 6, 71, -1, 0, 0, 12, 925, 5134), + (5134, -1, -1, 267, 267, 6, 73, -1, 0, 0, 12, 5133, 5135), + (5135, -1, -1, 267, 267, 6, 75, -1, 0, 0, 12, 5134, 5617), + (5136, -1, -1, 4688, 4688, 3, 71, -1, 0, 0, 12, -1, 5137), + (5137, -1, -1, 4688, 4688, 3, 72, -1, 0, 0, 12, 5136, 5138), + (5138, -1, -1, 4688, 4688, 3, 73, -1, 0, 0, 12, 5137, 5139), + (5139, -1, -1, 4688, 4688, 3, 74, -1, 0, 0, 12, 5138, 5140), + (5140, -1, -1, 4688, 4688, 3, 75, -1, 0, 0, 12, 5139, -1), + (5141, -1, -1, 815, 815, 5, 71, -1, 0, 0, 12, 819, 5142), + (5142, -1, -1, 815, 815, 5, 72, -1, 0, 0, 12, 5141, 5143), + (5143, -1, -1, 815, 815, 5, 73, -1, 0, 0, 12, 5142, 5144), + (5144, -1, -1, 815, 815, 5, 74, -1, 0, 0, 12, 5143, 5145), + (5145, -1, -1, 815, 815, 5, 75, -1, 0, 0, 12, 5144, 5909), + (5150, 5150, 5150, 5150, 5150, 0, 1, 11112, 22, 300, 3, -1, 5151), + (5165, 5165, 5165, 5165, 5165, 0, 1, 11127, 22, 300, 3, -1, 5166), + (5180, 5180, 5180, 5180, 5180, 0, 1, 11142, 22, 300, 3, -1, 5181), + (5195, 5195, 5195, 5195, 5195, 0, 1, 11157, 22, 300, 3, -1, 5196), + (5210, 5210, 5210, 5210, 5210, 0, 1, 11172, 22, 300, 3, -1, 5211), + (5225, 5225, 5225, 5225, 5225, 0, 1, 11187, 22, 300, 3, -1, 5226), + (5240, 1355, 1355, 1355, 1355, 6, 71, 11611, 3, 60, 12, 1357, 5241), + (5241, 1355, 1355, 1355, 1355, 6, 73, 11612, 3, 60, 12, 5240, 5242), + (5242, 1355, 1355, 1355, 1355, 6, 75, 11613, 3, 60, 12, 5241, 5914), + (5243, -1, -1, 907, 907, 7, 71, -1, 0, 0, 12, 911, 5244), + (5244, -1, -1, 907, 907, 7, 72, -1, 0, 0, 12, 5243, 5245), + (5245, -1, -1, 907, 907, 7, 73, -1, 0, 0, 12, 5244, 5246), + (5246, -1, -1, 907, 907, 7, 74, -1, 0, 0, 12, 5245, 5247), + (5247, -1, -1, 907, 907, 7, 75, -1, 0, 0, 12, 5246, -1), + (5248, -1, -1, 5248, 5248, 3, 71, -1, 0, 0, 12, -1, 5249), + (5249, -1, -1, 5248, 5248, 6, 73, -1, 0, 0, 12, 5248, 5250), + (5250, -1, -1, 5248, 5248, 9, 75, -1, 0, 0, 12, 5249, 6014), + (5251, 5251, 5251, 5251, 5251, 5, 71, 11615, 13, 900, 12, -1, 5252), + (5252, 5251, 5251, 5251, 5251, 5, 73, 11616, 13, 900, 12, 5251, 5253), + (5253, 5251, 5251, 5251, 5251, 5, 75, 11617, 13, 900, 12, 5252, 6092), + (5254, -1, -1, 724, 724, 3, 71, -1, 0, 0, 12, 728, 5255), + (5255, -1, -1, 724, 724, 3, 72, -1, 0, 0, 12, 5254, 5256), + (5256, -1, -1, 724, 724, 3, 73, -1, 0, 0, 12, 5255, 5257), + (5257, -1, -1, 724, 724, 3, 74, -1, 0, 0, 12, 5256, 5258), + (5258, -1, -1, 724, 724, 3, 75, -1, 0, 0, 12, 5257, 5729), + (5259, -1, -1, 790, 790, 3, 71, -1, 0, 0, 12, 794, 5260), + (5260, -1, -1, 790, 790, 3, 72, -1, 0, 0, 12, 5259, 5261), + (5261, -1, -1, 790, 790, 3, 73, -1, 0, 0, 12, 5260, 5262), + (5262, -1, -1, 790, 790, 3, 74, -1, 0, 0, 12, 5261, 5263), + (5263, -1, -1, 790, 790, 3, 75, -1, 0, 0, 12, 5262, 5320), + (5264, -1, -1, 5264, 5264, 3, 71, -1, 0, 0, 12, -1, 5265), + (5265, -1, -1, 5264, 5264, 3, 72, -1, 0, 0, 12, 5264, 5266), + (5266, -1, -1, 5264, 5264, 3, 73, -1, 0, 0, 12, 5265, 5267), + (5267, -1, -1, 5264, 5264, 3, 74, -1, 0, 0, 12, 5266, 5268), + (5268, -1, -1, 5264, 5264, 3, 75, -1, 0, 0, 12, 5267, 5939), + (5269, -1, -1, 5269, 5269, 3, 71, -1, 0, 0, 12, -1, -1), + (5270, -1, -1, 589, 589, 7, 71, -1, 0, 0, 12, 894, 5271), + (5271, -1, -1, 589, 589, 7, 73, -1, 0, 0, 12, 5270, 5272), + (5272, -1, -1, 589, 589, 7, 75, -1, 0, 0, 12, 5271, 6063), + (5276, -1, -1, 5276, 5276, 3, 71, -1, 0, 0, 12, -1, 5277), + (5277, -1, -1, 5276, 5276, 6, 73, -1, 0, 0, 12, 5276, 5278), + (5278, -1, -1, 5276, 5276, 9, 75, -1, 0, 0, 12, 5277, 15238), + (5279, 155, 155, 155, 155, 12, 75, 11624, 8, 60, 12, 1344, 5289), + (5280, 921, 921, 921, 921, 9, 74, 11625, 8, 60, 12, 1340, 6149), + (5281, 922, 922, 922, 922, 9, 73, 11626, 8, 60, 12, 1341, 6150), + (5282, 923, 923, 923, 923, 9, 72, 11627, 8, 60, 12, 1342, 6151), + (5283, -1, -1, 5263, 5263, 3, 71, -1, 0, 0, 12, -1, 5284), + (5284, -1, -1, 5263, 5263, 6, 73, -1, 0, 0, 12, 5283, 5285), + (5285, -1, -1, 5263, 5263, 9, 75, -1, 0, 0, 12, 5284, 5620), + (5286, -1, -1, 1107, 1107, 6, 71, -1, 0, 0, 12, 1109, 5287), + (5287, -1, -1, 1107, 1107, 6, 73, -1, 0, 0, 12, 5286, 5288), + (5288, -1, -1, 1107, 1107, 6, 75, -1, 0, 0, 12, 5287, 6403), + (5289, 155, 155, 155, 155, 12, 77, 13227, 8, 60, 14, 5279, 7238), + (5290, -1, -1, 1604, 1604, 5, 63, -1, 0, 0, 12, 1606, 5291), + (5291, -1, -1, 1604, 1604, 5, 64, -1, 0, 0, 12, 5290, 5292), + (5292, -1, -1, 1604, 1604, 5, 65, -1, 0, 0, 12, 5291, 5293), + (5293, -1, -1, 1604, 1604, 5, 66, -1, 0, 0, 12, 5292, 5294), + (5294, -1, -1, 1604, 1604, 5, 67, -1, 0, 0, 12, 5293, 6032), + (5295, -1, -1, 5295, 5295, 3, 71, -1, 0, 0, 12, -1, 5296), + (5296, -1, -1, 5295, 5295, 6, 73, -1, 0, 0, 12, 5295, 5297), + (5297, -1, -1, 5295, 5295, 9, 75, -1, 0, 0, 12, 5296, 6531), + (5298, 5298, 5298, 5298, 5298, 3, 71, 11630, 32, 1800, 12, -1, 5299), + (5299, 5298, 5298, 5298, 5298, 6, 73, 11631, 32, 1800, 12, 5298, 5300), + (5300, 5298, 5298, 5298, 5298, 9, 75, 11632, 32, 1800, 12, 5299, 5707), + (5301, -1, -1, 683, 683, 5, 71, -1, 0, 0, 12, 1038, 5302), + (5302, -1, -1, 683, 683, 5, 72, -1, 0, 0, 12, 5301, 5303), + (5303, -1, -1, 683, 683, 5, 73, -1, 0, 0, 12, 5302, 5304), + (5304, -1, -1, 683, 683, 5, 74, -1, 0, 0, 12, 5303, 5305), + (5305, -1, -1, 683, 683, 5, 75, -1, 0, 0, 12, 5304, 6080), + (5306, -1, -1, 658, 658, 5, 71, -1, 0, 0, 12, 660, 5307), + (5307, -1, -1, 658, 658, 5, 72, -1, 0, 0, 12, 5306, 5308), + (5308, -1, -1, 658, 658, 5, 73, -1, 0, 0, 12, 5307, 5309), + (5309, -1, -1, 658, 658, 5, 74, -1, 0, 0, 12, 5308, 5310), + (5310, -1, -1, 658, 658, 5, 75, -1, 0, 0, 12, 5309, 5623), + (5311, 1495, 1495, 1495, 1495, 5, 71, 11639, 30, 900, 12, 1497, 5312), + (5312, 1495, 1495, 1495, 1495, 5, 73, 11640, 30, 900, 12, 5311, 5313), + (5313, 1495, 1495, 1495, 1495, 5, 75, 11641, 30, 900, 12, 5312, 5826), + (5314, 1327, 1327, 1327, 1327, 5, 71, 11642, 10, 900, 12, 1329, 5315), + (5315, 1327, 1327, 1327, 1327, 5, 73, 11643, 10, 900, 12, 5314, 5316), + (5316, 1327, 1327, 1327, 1327, 5, 75, 11644, 10, 900, 12, 5315, 6098), + (5317, -1, -1, 98, 738, 4, 71, -1, 0, 0, 12, 740, 5318), + (5318, -1, -1, 98, 738, 4, 73, -1, 0, 0, 12, 5317, 5319), + (5319, -1, -1, 98, 738, 4, 75, -1, 0, 0, 12, 5318, 5628), + (5320, -1, -1, 790, 790, 6, 76, -1, 0, 0, 14, 5263, 5321), + (5321, -1, -1, 790, 790, 6, 77, -1, 0, 0, 14, 5320, 5322), + (5322, -1, -1, 790, 790, 6, 78, -1, 0, 0, 14, 5321, 5323), + (5323, -1, -1, 790, 790, 6, 79, -1, 0, 0, 14, 5322, 5324), + (5324, -1, -1, 790, 790, 6, 80, -1, 0, 0, 14, 5323, 7270), + (5325, -1, -1, 839, 839, 6, 70, -1, 0, 0, 14, 843, 5326), + (5326, -1, -1, 839, 839, 6, 70, -1, 0, 0, 14, 5325, 5327), + (5327, -1, -1, 839, 839, 6, 70, -1, 0, 0, 14, 5326, 5328), + (5328, -1, -1, 839, 839, 6, 70, -1, 0, 0, 14, 5327, 5329), + (5329, -1, -1, 839, 839, 6, 70, -1, 0, 0, 14, 5328, 7210), + (5330, 1327, 1327, 1327, 1327, 12, 91, 30870, 10, 900, 18, 10189, 5331), + (5333, 1520, 1520, 1520, 1520, 9, 91, 30873, 11, 900, 18, 12999, 5334), + (5336, 12989, 12989, 12989, 12989, 11, 91, 30876, 73, 1800, 18, 12991, 5337), + (5339, -1, -1, 6383, 6383, 11, 91, -1, 0, 0, 18, 12803, 5340), + (5342, 6692, 6692, 6692, 6692, 9, 91, 30879, 42, 600, 18, 6696, 5343), + (5347, -1, -1, 6375, 6375, 12, 91, -1, 0, 0, 18, 10086, 5348), + (5348, -1, -1, 6375, 6375, 15, 93, -1, 0, 0, 18, 5347, 5349), + (5350, 12992, 12992, 12992, 12992, 12, 91, 30884, 0, 1, 18, 12994, 5351), + (5353, 6706, 6706, 6706, 6706, 9, 91, 30887, 44, 600, 18, 10181, 5354), + (5356, 5109, 5109, 5109, 5109, 12, 92, 30890, 0, 1, 18, 13016, 17323), + (5357, 528, 528, 528, 528, 12, 91, 30891, 5, 720, 18, 13163, 5358), + (5360, -1, -1, 9503, 9503, 11, 91, -1, 0, 0, 18, 12794, 5361), + (5363, 5251, 5251, 5251, 5251, 15, 91, 30894, 13, 900, 18, 10199, 5364), + (5366, -1, -1, 5002, 5002, 12, 91, -1, 34, 0, 18, -1, 5367), + (5369, 5001, 5001, 5001, 5001, 12, 91, 30900, 32, 600, 18, -1, 5370), + (5500, -1, -1, 852, 852, 9, 78, -1, 0, 0, 14, 854, 5501), + (5501, -1, -1, 852, 852, 10, 79, -1, 0, 0, 14, 5500, 5502), + (5502, -1, -1, 852, 852, 12, 80, -1, 0, 0, 14, 5501, 7678), + (5513, 1126, 1126, 1126, 1126, 8, 77, 12668, 2, 2160, 14, 1128, 5514), + (5514, 1126, 1126, 1126, 1126, 9, 78, 12669, 2, 2160, 14, 5513, 5515), + (5515, 1126, 1126, 1126, 1126, 10, 79, 12670, 2, 2160, 14, 5514, 13253), + (5516, -1, -1, 1287, 1287, 8, 77, -1, 0, 0, 14, 1289, 5517), + (5517, -1, -1, 1287, 1287, 9, 78, -1, 0, 0, 14, 5516, 5518), + (5518, -1, -1, 1287, 1287, 10, 79, -1, 0, 0, 14, 5517, 12469), + (5519, -1, -1, 125, 125, 6, 76, -1, 0, 0, 14, 1398, 5520), + (5520, -1, -1, 125, 125, 7, 77, -1, 0, 0, 14, 5519, 5521), + (5521, -1, -1, 125, 125, 8, 78, -1, 0, 0, 14, 5520, 5522), + (5522, -1, -1, 125, 125, 9, 79, -1, 0, 0, 14, 5521, 5523), + (5523, -1, -1, 125, 125, 10, 80, -1, 0, 0, 14, 5522, 7501), + (5524, -1, -1, 122, 122, 6, 76, -1, 0, 0, 14, 1403, 5525), + (5525, -1, -1, 122, 122, 7, 77, -1, 0, 0, 14, 5524, 5526), + (5526, -1, -1, 122, 122, 8, 78, -1, 0, 0, 14, 5525, 5527), + (5527, -1, -1, 122, 122, 9, 79, -1, 0, 0, 14, 5526, 5528), + (5528, -1, -1, 122, 122, 10, 80, -1, 0, 0, 14, 5527, 7506), + (5529, -1, -1, 1486, 1486, 7, 76, -1, 0, 0, 14, 1490, 5530), + (5530, -1, -1, 1486, 1486, 8, 77, -1, 0, 0, 14, 5529, 5531), + (5531, -1, -1, 1486, 1486, 9, 78, -1, 0, 0, 14, 5530, 5532), + (5532, -1, -1, 1486, 1486, 10, 79, -1, 0, 0, 14, 5531, 5533), + (5533, -1, -1, 1486, 1486, 12, 80, -1, 0, 0, 14, 5532, 7554), + (5534, -1, -1, 599, 599, 9, 78, -1, 0, 0, 14, 1538, 5535), + (5535, -1, -1, 599, 599, 10, 79, -1, 0, 0, 14, 5534, 5536), + (5536, -1, -1, 599, 599, 12, 80, -1, 0, 0, 14, 5535, 7559), + (5542, -1, -1, 1041, 1041, 7, 76, -1, 0, 0, 14, 4709, 5543), + (5543, -1, -1, 1041, 1041, 9, 78, -1, 0, 0, 14, 5542, 5544), + (5544, -1, -1, 1041, 1041, 12, 80, -1, 0, 0, 14, 5543, 7562), + (5545, -1, -1, 1044, 1044, 7, 76, -1, 0, 0, 14, 4712, 5546), + (5546, -1, -1, 1044, 1044, 9, 78, -1, 0, 0, 14, 5545, 5547), + (5547, -1, -1, 1044, 1044, 12, 80, -1, 0, 0, 14, 5546, 7650), + (5548, -1, -1, 1047, 1047, 7, 76, -1, 0, 0, 14, 4715, 5549), + (5549, -1, -1, 1047, 1047, 9, 78, -1, 0, 0, 14, 5548, 5550), + (5550, -1, -1, 1047, 1047, 12, 80, -1, 0, 0, 14, 5549, 7653), + (5551, -1, -1, 1050, 1050, 7, 76, -1, 0, 0, 14, 4718, 5552), + (5552, -1, -1, 1050, 1050, 9, 78, -1, 0, 0, 14, 5551, 5553), + (5553, -1, -1, 1050, 1050, 12, 80, -1, 0, 0, 14, 5552, 7656), + (5554, -1, -1, 119, 119, 7, 76, -1, 0, 0, 14, 4724, 5555), + (5555, -1, -1, 119, 119, 9, 78, -1, 0, 0, 14, 5554, 5556), + (5556, -1, -1, 119, 119, 12, 80, -1, 0, 0, 14, 5555, 7565), + (5557, -1, -1, 1592, 1592, 7, 76, -1, 0, 0, 14, 4729, 5558), + (5558, -1, -1, 1592, 1592, 8, 77, -1, 0, 0, 14, 5557, 5559), + (5559, -1, -1, 1592, 1592, 9, 78, -1, 0, 0, 14, 5558, 5560), + (5560, -1, -1, 1592, 1592, 10, 79, -1, 0, 0, 14, 5559, 5561), + (5561, -1, -1, 1592, 1592, 12, 80, -1, 0, 0, 14, 5560, 7568), + (5562, -1, -1, 4739, 4739, 7, 76, -1, 0, 0, 14, 4741, 5563), + (5563, -1, -1, 4739, 4739, 9, 78, -1, 0, 0, 14, 5562, 5564), + (5564, -1, -1, 4739, 4739, 12, 80, -1, 0, 0, 14, 5563, 7573), + (5565, 4742, 4742, 4742, 4742, 7, 76, 12671, 12, 600, 14, 4742, -1), + (5566, -1, -1, 1072, 1072, 7, 76, -1, 0, 0, 14, 4748, 5567), + (5567, -1, -1, 1072, 1072, 8, 77, -1, 0, 0, 14, 5566, 5568), + (5568, -1, -1, 1072, 1072, 9, 78, -1, 0, 0, 14, 5567, 5569), + (5569, -1, -1, 1072, 1072, 10, 79, -1, 0, 0, 14, 5568, 5570), + (5570, -1, -1, 1072, 1072, 12, 80, -1, 0, 0, 14, 5569, 7576), + (5571, -1, -1, 637, 637, 7, 76, -1, 0, 0, 14, 4751, 5572), + (5572, -1, -1, 637, 637, 9, 78, -1, 0, 0, 14, 5571, 5573), + (5573, -1, -1, 637, 637, 12, 80, -1, 0, 0, 14, 5572, 12435), + (5574, -1, -1, 1210, 1210, 7, 76, -1, 0, 0, 14, 4754, 5575), + (5575, -1, -1, 1210, 1210, 9, 78, -1, 0, 0, 14, 5574, 5576), + (5576, -1, -1, 1210, 1210, 12, 80, -1, 0, 0, 14, 5575, 7232), + (5577, -1, -1, 1210, 1213, 7, 76, -1, 0, 0, 14, 4757, 5578), + (5578, -1, -1, 1210, 1213, 9, 78, -1, 0, 0, 14, 5577, 5579), + (5579, -1, -1, 1210, 1213, 12, 80, -1, 0, 0, 14, 5578, 7581), + (5580, -1, -1, 602, 602, 7, 76, -1, 0, 0, 14, 4760, 5581), + (5581, -1, -1, 602, 602, 9, 78, -1, 0, 0, 14, 5580, 5582), + (5582, -1, -1, 602, 602, 12, 80, -1, 0, 0, 14, 5581, 10685), + (5586, -1, -1, 98, 98, 7, 76, -1, 0, 0, 14, 4769, 5587), + (5587, -1, -1, 98, 98, 9, 78, -1, 0, 0, 14, 5586, 5588), + (5588, -1, -1, 98, 98, 12, 80, -1, 0, 0, 14, 5587, 7584), + (5589, -1, -1, 1186, 1186, 7, 76, -1, 0, 0, 14, 4778, 5590), + (5590, -1, -1, 1186, 1186, 9, 78, -1, 0, 0, 14, 5589, 5591), + (5591, -1, -1, 1186, 1186, 12, 80, -1, 0, 0, 14, 5590, 7587), + (5592, -1, -1, 80, 80, 7, 76, -1, 0, 0, 14, 4781, 5593), + (5593, -1, -1, 80, 80, 9, 78, -1, 0, 0, 14, 5592, 5594), + (5594, -1, -1, 80, 80, 12, 80, -1, 0, 0, 14, 5593, 7590), + (5595, -1, -1, 255, 255, 7, 76, -1, 0, 0, 14, 4797, 5596), + (5596, -1, -1, 255, 255, 9, 78, -1, 0, 0, 14, 5595, 5597), + (5597, -1, -1, 255, 255, 12, 80, -1, 0, 0, 14, 5596, 7631), + (5606, 4860, 4860, 4860, 4860, 12, 80, 11688, 13, 60, 14, 4860, 7127), + (5607, 4915, 4915, 4915, 4915, 7, 76, 12673, 7, 4320, 14, 4917, 5608), + (5608, 4915, 4915, 4915, 4915, 9, 78, 12674, 7, 4320, 14, 5607, 5609), + (5609, 4915, 4915, 4915, 4915, 12, 80, 12675, 7, 4320, 14, 5608, 7246), + (5610, 4938, 4938, 4938, 4938, 12, 80, 12676, 35, 1800, 14, 4938, 5614), + (5611, -1, -1, 634, 634, 7, 76, -1, 0, 0, 14, 5034, 5612), + (5612, -1, -1, 634, 634, 9, 78, -1, 0, 0, 14, 5611, 5613), + (5613, -1, -1, 634, 634, 12, 80, -1, 0, 0, 14, 5612, 7713), + (5614, 4938, 4938, 4938, 4938, 9, 85, 16852, 35, 1800, 16, 5610, 12875), + (5617, -1, -1, 267, 267, 7, 76, -1, 0, 0, 14, 5135, 5618), + (5618, -1, -1, 267, 267, 9, 78, -1, 0, 0, 14, 5617, 5619), + (5619, -1, -1, 267, 267, 12, 80, -1, 0, 0, 14, 5618, 12860), + (5620, -1, -1, 5263, 5263, 7, 76, -1, 0, 0, 14, 5285, 5621), + (5621, -1, -1, 5263, 5263, 9, 78, -1, 0, 0, 14, 5620, 5622), + (5622, -1, -1, 5263, 5263, 12, 80, -1, 0, 0, 14, 5621, 12466), + (5623, -1, -1, 658, 658, 5, 76, -1, 0, 0, 14, 5310, 5624), + (5624, -1, -1, 658, 658, 5, 77, -1, 0, 0, 14, 5623, 5625), + (5625, -1, -1, 658, 658, 5, 78, -1, 0, 0, 14, 5624, 5626), + (5626, -1, -1, 658, 658, 5, 79, -1, 0, 0, 14, 5625, 5627), + (5627, -1, -1, 658, 658, 5, 80, -1, 0, 0, 14, 5626, 7593), + (5628, -1, -1, 98, 738, 7, 76, -1, 0, 0, 14, 5319, 5629), + (5629, -1, -1, 98, 738, 9, 78, -1, 0, 0, 14, 5628, 5630), + (5630, -1, -1, 98, 738, 12, 80, -1, 0, 0, 14, 5629, 7598), + (5699, 1116, 1116, 1116, 1116, 7, 76, 12500, 4, 2160, 14, 4982, 5700), + (5700, 1116, 1116, 1116, 1116, 9, 78, 12501, 4, 2160, 14, 5699, 5701), + (5701, 1116, 1116, 1116, 1116, 12, 80, 12502, 4, 2160, 14, 5700, 7430), + (5702, 592, 592, 592, 592, 4, 76, 12503, 2, 18, 14, 4979, 5703), + (5703, 592, 592, 592, 592, 4, 77, 12504, 2, 18, 14, 5702, 5704), + (5704, 592, 592, 592, 592, 4, 78, 12505, 2, 18, 14, 5703, 5705), + (5705, 592, 592, 592, 592, 4, 79, 12506, 2, 18, 14, 5704, 5706), + (5706, 592, 592, 592, 592, 4, 80, 12507, 2, 18, 14, 5705, 7433), + (5707, 5298, 5298, 5298, 5298, 9, 78, 12508, 32, 1800, 14, 5300, 5708), + (5708, 5298, 5298, 5298, 5298, 10, 79, 12509, 32, 1800, 14, 5707, 5709), + (5709, 5298, 5298, 5298, 5298, 12, 80, 12510, 32, 1800, 14, 5708, 7438), + (5710, 1598, -1, 1598, 1598, 7, 76, 12511, 6, 900, 14, 4974, 5711), + (5711, 1598, -1, 1598, 1598, 9, 78, 12512, 6, 900, 14, 5710, 5712), + (5712, 1598, -1, 1598, 1598, 12, 80, 12513, 6, 900, 14, 5711, 7441), + (5713, 1569, 1569, 1569, 1569, 7, 76, 12514, 5, 1800, 14, 1571, 5714), + (5714, 1569, 1569, 1569, 1569, 9, 78, 12515, 5, 1800, 14, 5713, 5715), + (5715, 1569, 1569, 1569, 1569, 12, 80, 12516, 5, 1800, 14, 5714, 7457), + (5716, 5020, 5020, 5020, 5020, 9, 77, 12517, 9, 300, 14, 5020, 7444), + (5717, 5717, 5717, 5717, 5717, 10, 76, 12519, 17, 600, 14, -1, -1), + (5729, -1, -1, 724, 724, 7, 76, -1, 0, 0, 14, 5258, 5730), + (5730, -1, -1, 724, 724, 8, 77, -1, 0, 0, 14, 5729, 5731), + (5731, -1, -1, 724, 724, 9, 78, -1, 0, 0, 14, 5730, 5732), + (5732, -1, -1, 724, 724, 10, 79, -1, 0, 0, 14, 5731, 5733), + (5733, -1, -1, 724, 724, 12, 80, -1, 0, 0, 14, 5732, 7489), + (5734, 1119, 1119, 1119, 1119, 7, 78, 12520, 8, 900, 14, 4966, 5735), + (5735, 1119, 1119, 1119, 1119, 8, 79, 12521, 8, 900, 14, 5734, 5736), + (5736, 1119, 1119, 1119, 1119, 9, 80, 12522, 8, 900, 14, 5735, 7479), + (5737, 723, 723, 723, 723, 7, 76, 12523, 6, 30, 14, 4963, 7482), + (5738, -1, -1, 729, 729, 7, 76, -1, 0, 0, 14, 4962, 5739), + (5739, -1, -1, 729, 729, 8, 77, -1, 0, 0, 14, 5738, 5740), + (5740, -1, -1, 729, 729, 9, 78, -1, 0, 0, 14, 5739, 7494), + (5741, 5015, 5015, 5015, 5015, 12, 80, 12524, 9, 900, 14, 5015, 7483), + (5742, 289, 289, 289, 289, 12, 80, 12525, 3, 300, 14, 1607, 7484), + (5743, 291, 291, 291, 291, 9, 78, 12526, 5, 900, 14, 4971, 5744), + (5744, 291, 291, 291, 291, 10, 79, 12527, 5, 900, 14, 5743, 5745), + (5745, 291, 291, 291, 291, 12, 80, 12528, 5, 900, 14, 5744, 7485), + (5759, 1425, 1425, 1425, 1425, 7, 78, 13565, 2, 2160, 14, 1429, 5760), + (5760, 1425, 1425, 1425, 1425, 8, 78, 13570, 2, 2160, 14, 5759, 5761), + (5761, 1425, 1425, 1425, 1425, 9, 79, 13575, 2, 2160, 14, 5760, 5762), + (5762, 1425, 1425, 1425, 1425, 10, 79, 13580, 2, 2160, 14, 5761, 5763), + (5763, 1425, 1425, 1425, 1425, 11, 80, 13585, 2, 2160, 14, 5762, -1), + (5764, 4854, 4854, 4854, 4854, 7, 76, 12534, 8, 600, 14, 4856, 5765), + (5765, 4854, 4854, 4854, 4854, 9, 78, 12535, 8, 600, 14, 5764, 5766), + (5766, 4854, 4854, 4854, 4854, 12, 80, 12536, 8, 600, 14, 5765, 7178), + (5767, 4857, 4857, 4857, 4857, 7, 76, 12537, 7, 600, 14, 4859, 5768), + (5768, 4857, 4857, 4857, 4857, 9, 78, 12538, 7, 600, 14, 5767, 5769), + (5769, 4857, 4857, 4857, 4857, 12, 80, 12539, 7, 600, 14, 5768, 17030), + (5770, 1348, 1348, 1348, 1348, 9, 78, 12540, 0, 3600, 14, 1350, 5771), + (5771, 1348, 1348, 1348, 1348, 10, 79, 12541, 0, 3600, 14, 5770, 5772), + (5772, 1348, 1348, 1348, 1348, 12, 80, 12542, 0, 3600, 14, 5771, 7184), + (5776, -1, -1, 5776, 5776, 7, 76, -1, 0, 0, 14, -1, 5777), + (5777, -1, -1, 5776, 5776, 9, 78, -1, 0, 0, 14, 5776, 5778), + (5778, -1, -1, 5776, 5776, 12, 80, -1, 0, 0, 14, 5777, 7196), + (5779, 1178, 1178, 1178, 1178, 7, 76, 12546, 4, 900, 14, 1180, 5780), + (5780, 1178, 1178, 1178, 1178, 8, 77, 12547, 4, 900, 14, 5779, 5781), + (5781, 1178, 1178, 1178, 1178, 9, 78, 12548, 4, 900, 14, 5780, 7187), + (5789, 1383, 1383, 1383, 1383, 12, 80, 12549, 6, 300, 14, 5084, 7299), + (5790, 1195, 1195, 1195, 1195, 9, 80, 12550, 13, 2160, 14, 5079, 7300), + (5791, 131, 131, 131, 131, 8, 77, 12551, 4, 900, 14, 5072, 5792), + (5792, 131, 131, 131, 131, 9, 78, 12552, 4, 900, 14, 5791, 5793), + (5793, 131, 131, 131, 131, 10, 79, 12553, 4, 900, 14, 5792, 7301), + (5794, 1192, 1192, 1192, 1192, 8, 77, 12554, 12, 1320, 14, 5078, 5795), + (5795, 1192, 1192, 1192, 1192, 9, 78, 12555, 12, 1320, 14, 5794, 5796), + (5796, 1192, 1192, 1192, 1192, 10, 79, 12556, 12, 1320, 14, 5795, 7304), + (5797, -1, -1, 5083, 5083, 7, 76, -1, 0, 0, 14, 5120, 5798), + (5798, -1, -1, 5083, 5083, 9, 78, -1, 0, 0, 14, 5797, 5799), + (5799, -1, -1, 5083, 5083, 12, 80, -1, 0, 0, 14, 5798, -1), + (5800, 746, 746, 746, 746, 9, 78, 12557, 10, 2160, 14, 1493, 5801), + (5801, 746, 746, 746, 746, 10, 79, 12558, 10, 2160, 14, 5800, 5802), + (5802, 746, 746, 746, 746, 12, 80, 12559, 10, 2160, 14, 5801, 7307), + (5803, 1459, 1459, 1459, 1459, 7, 76, 12560, 11, 1800, 14, 5082, 5804), + (5804, 1459, 1459, 1459, 1459, 9, 78, 12561, 11, 1800, 14, 5803, 5805), + (5805, 1459, 1459, 1459, 1459, 12, 80, 12562, 11, 1800, 14, 5804, 7310), + (5806, -1, -1, 255, 255, 7, 59, -1, 0, 0, 16, -1, 5807), + (5807, -1, -1, 255, 255, 9, 59, -1, 0, 0, 16, 5806, 5808), + (5808, -1, -1, 255, 255, 12, 59, -1, 0, 0, 16, 5807, 10623), + (5809, 5833, 5833, 5833, 5833, 9, 85, 20184, 72, 900, 16, -1, -1), + (5819, 1498, 1498, 1498, 1498, 7, 76, 12563, 12, 1320, 14, 5060, 5820), + (5820, 1498, 1498, 1498, 1498, 9, 78, 12564, 12, 1320, 14, 5819, 5821), + (5821, 1498, 1498, 1498, 1498, 12, 80, 12565, 12, 1320, 14, 5820, 7408), + (5822, 757, -1, 757, 757, 7, 76, 12566, 6, 1800, 14, 5053, 5823), + (5823, 757, -1, 757, 757, 9, 78, 12567, 6, 1800, 14, 5822, 5824), + (5824, 757, -1, 757, 757, 12, 80, 12568, 6, 1800, 14, 5823, 7411), + (5825, -1, -1, 567, 567, 7, 76, -1, 0, 0, 14, 5061, -1), + (5826, 1495, 1495, 1495, 1495, 7, 76, 12569, 30, 900, 14, 5313, 5827), + (5827, 1495, 1495, 1495, 1495, 9, 78, 12570, 30, 900, 14, 5826, 5828), + (5828, 1495, 1495, 1495, 1495, 12, 80, 12571, 30, 900, 14, 5827, 7414), + (5829, 548, 548, 548, 548, 8, 77, 12572, 5, 900, 14, 5056, 5830), + (5830, 548, 548, 548, 548, 9, 78, 12573, 5, 900, 14, 5829, 5831), + (5831, 548, 548, 548, 548, 10, 79, 12574, 5, 900, 14, 5830, 7417), + (5832, 5105, 5105, 5105, 5105, 12, 80, 12575, 11, 600, 14, 5105, 7420), + (5849, 54009, 54009, 54009, 54009, 7, 73, 12576, 22, 12, 14, -1, 12923), + (5850, -1, -1, 781, 781, 8, 77, -1, 0, 0, 14, 781, 7284), + (5854, 773, -1, 773, 773, 7, 76, 12580, 5, 1800, 14, 775, 5855), + (5855, 773, -1, 773, 773, 9, 78, 12581, 5, 1800, 14, 5854, 5856), + (5856, 773, -1, 773, 773, 12, 80, 12582, 5, 1800, 14, 5855, 7276), + (5857, 1242, 1242, 1242, 1242, 7, 76, 12577, 9, 1320, 14, 1244, 5858), + (5858, 1242, 1242, 1242, 1242, 9, 78, 12578, 9, 1320, 14, 5857, 5859), + (5859, 1242, 1242, 1242, 1242, 12, 80, 12579, 9, 1320, 14, 5858, 7285), + (5860, -1, -1, 649, 649, 7, 76, -1, 0, 0, 14, 651, 5861), + (5861, -1, -1, 649, 649, 9, 78, -1, 0, 0, 14, 5860, 5862), + (5862, -1, -1, 649, 649, 12, 80, -1, 0, 0, 14, 5861, -1), + (5868, 1239, 1239, 1239, 1239, 12, 80, 13224, 6, 600, 14, 1239, 7275), + (5869, 4890, -1, 4890, 4890, 9, 77, 12587, 3, 8640, 14, 4890, 5871), + (5870, 54010, 54010, 54010, 54010, 7, 73, 12828, 22, 6, 14, -1, -1), + (5871, 4890, -1, 4890, 4890, 9, 79, 16440, 3, 8640, 15, 5869, 5872), + (5872, 4890, -1, 4890, 4890, 9, 81, 21745, 3, 8640, 16, 5871, 14280), + (5879, 167, 167, 167, 167, 10, 79, 12588, 14, 900, 14, 167, 7249), + (5880, -1, -1, 1504, 1504, 5, 76, -1, 0, 0, 14, 1506, 5881), + (5881, -1, -1, 1504, 1504, 5, 78, -1, 0, 0, 14, 5880, 5882), + (5882, -1, -1, 1504, 1504, 5, 80, -1, 0, 0, 14, 5881, 7260), + (5883, 520, 520, 520, 520, 12, 76, 12589, 6, 540, 14, 1509, 5884), + (5884, 520, 520, 520, 520, 12, 78, 12590, 6, 540, 14, 5883, 5885), + (5885, 520, 520, 520, 520, 12, 80, 12591, 6, 540, 14, 5884, 7250), + (5886, -1, -1, 1577, 1577, 7, 76, -1, 0, 0, 14, 1579, 5887), + (5887, -1, -1, 1577, 1577, 9, 78, -1, 0, 0, 14, 5886, 5888), + (5888, -1, -1, 1577, 1577, 12, 80, -1, 0, 0, 14, 5887, 7263), + (5889, -1, -1, 795, 795, 7, 76, -1, 0, 0, 14, 4899, 5890), + (5890, -1, -1, 795, 795, 9, 78, -1, 0, 0, 14, 5889, 5891), + (5891, -1, -1, 795, 795, 12, 80, -1, 0, 0, 14, 5890, 7267), + (5892, 4903, 4903, 4903, 4903, 9, 76, 12592, 9, 1320, 14, 4903, 7253), + (5893, 4906, 4906, 4906, 4906, 9, 76, 12593, 9, 1320, 14, 4906, 7254), + (5894, 4909, 4909, 4909, 4909, 9, 76, 12594, 16, 1320, 14, 4909, 7255), + (5895, 4912, 4912, 4912, 4912, 9, 76, 12595, 16, 1320, 14, 4912, 7256), + (5909, -1, -1, 815, 815, 7, 76, -1, 0, 0, 14, 5145, 5910), + (5910, -1, -1, 815, 815, 8, 77, -1, 0, 0, 14, 5909, 5911), + (5911, -1, -1, 815, 815, 9, 78, -1, 0, 0, 14, 5910, 5912), + (5912, -1, -1, 815, 815, 10, 79, -1, 0, 0, 14, 5911, 5913), + (5913, -1, -1, 815, 815, 12, 80, -1, 0, 0, 14, 5912, 7634), + (5914, 1355, 1355, 1355, 1355, 6, 76, 12596, 3, 60, 14, 5242, 5915), + (5915, 1355, 1355, 1355, 1355, 6, 78, 12597, 3, 60, 14, 5914, 5916), + (5916, 1355, 1355, 1355, 1355, 6, 80, 12598, 3, 60, 14, 5915, 7172), + (5917, -1, -1, 820, 820, 5, 76, -1, 0, 0, 14, 4815, 5918), + (5918, -1, -1, 820, 820, 5, 78, -1, 0, 0, 14, 5917, 5919), + (5919, -1, -1, 820, 820, 5, 80, -1, 0, 0, 14, 5918, 7163), + (5922, -1, -1, 807, 807, 5, 76, -1, 0, 0, 14, 1270, 5923), + (5923, -1, -1, 807, 807, 5, 78, -1, 0, 0, 14, 5922, 5924), + (5924, -1, -1, 807, 807, 5, 80, -1, 0, 0, 14, 5923, 7628), + (5939, -1, -1, 5264, 5264, 7, 76, -1, 0, 0, 14, 5268, 5940), + (5940, -1, -1, 5264, 5264, 8, 77, -1, 0, 0, 14, 5939, 5941), + (5941, -1, -1, 5264, 5264, 9, 78, -1, 0, 0, 14, 5940, 5942), + (5942, -1, -1, 5264, 5264, 10, 79, -1, 0, 0, 14, 5941, 5943), + (5943, -1, -1, 5264, 5264, 12, 80, -1, 0, 0, 14, 5942, 7204), + (5944, -1, -1, 4924, 4924, 9, 78, -1, 0, 0, 14, 4926, 5945), + (5945, -1, -1, 4924, 4924, 10, 79, -1, 0, 0, 14, 5944, 5946), + (5946, -1, -1, 4924, 4924, 12, 80, -1, 0, 0, 14, 5945, -1), + (5947, 1274, 1274, 1274, 1274, 9, 78, 12599, 9, 540, 14, 4866, 5948), + (5948, 1274, 1274, 1274, 1274, 10, 79, 12600, 9, 540, 14, 5947, 5949), + (5949, 1274, 1274, 1274, 1274, 12, 80, 12601, 9, 540, 14, 5948, 7199), + (5950, -1, -1, 1511, 1511, 12, 80, -1, 0, 0, 14, 1513, 5951), + (5951, -1, -1, 1511, 1511, 12, 80, -1, 0, 0, 14, 5950, 5952), + (5952, -1, -1, 1511, 1511, 12, 80, -1, 0, 0, 14, 5951, -1), + (5953, 184, 184, 184, 184, 10, 79, 12602, 5, 4320, 14, 184, 7203), + (5954, -1, -1, 4861, 4861, 7, 76, -1, 0, 0, 14, 4863, 5955), + (5955, -1, -1, 4861, 4861, 9, 78, -1, 0, 0, 14, 5954, 5956), + (5956, -1, -1, 4861, 4861, 12, 80, -1, 0, 0, 14, 5955, 7215), + (5969, 534, 534, 534, 534, 7, 76, 12603, 4, 2160, 14, 5043, 5970), + (5970, 534, 534, 534, 534, 9, 78, 12604, 4, 2160, 14, 5969, 5971), + (5971, 534, 534, 534, 534, 12, 80, 12605, 4, 2160, 14, 5970, 7329), + (5972, -1, -1, 593, 593, 7, 76, -1, 0, 0, 14, 595, -1), + (5973, -1, -1, 596, 596, 7, 76, -1, 0, 0, 14, 598, -1), + (5975, 5095, 5095, 5095, 5095, 7, 76, 12606, 10, 900, 14, 5097, 5976), + (5976, 5095, 5095, 5095, 5095, 9, 78, 12607, 10, 900, 14, 5975, 5977), + (5977, 5095, 5095, 5095, 5095, 12, 80, 12608, 10, 900, 14, 5976, 7332), + (5984, 5984, 5984, 5984, 5984, 12, 80, 12609, 2, 30, 14, -1, 7335), + (5999, 645, -1, 645, 645, 10, 79, 12610, 4, 5, 14, 645, 10739), + (6000, 545, 545, 545, 545, 7, 76, 12611, 3, 900, 14, 4999, 6001), + (6001, 545, 545, 545, 545, 9, 78, 12612, 3, 900, 14, 6000, 6002), + (6002, 545, 545, 545, 545, 12, 80, 12613, 3, 900, 14, 6001, 7344), + (6003, -1, -1, 1616, 1616, 7, 76, -1, 0, 0, 14, 4996, 6004), + (6004, -1, -1, 1616, 1616, 8, 77, -1, 0, 0, 14, 6003, 6005), + (6005, -1, -1, 1616, 1616, 9, 78, -1, 0, 0, 14, 6004, 6006), + (6006, -1, -1, 1616, 1616, 10, 79, -1, 0, 0, 14, 6005, 6007), + (6007, -1, -1, 1616, 1616, 12, 80, -1, 0, 0, 14, 6006, 7637), + (6008, 1345, 1345, 1345, 1345, 8, 77, 12614, 6, 900, 14, 5005, 6009), + (6009, 1345, 1345, 1345, 1345, 9, 78, 12615, 6, 900, 14, 6008, 6010), + (6010, 1345, 1345, 1345, 1345, 10, 79, 12616, 6, 900, 14, 6009, 7347), + (6011, -1, -1, 864, 864, 12, 80, -1, 0, 0, 14, 4985, 6012), + (6012, -1, -1, 864, 864, 12, 80, -1, 0, 0, 14, 6011, 6013), + (6013, -1, -1, 864, 864, 12, 80, -1, 0, 0, 14, 6012, 7353), + (6014, -1, -1, 5248, 5248, 7, 76, -1, 0, 0, 14, 5250, 6015), + (6015, -1, -1, 5248, 5248, 9, 78, -1, 0, 0, 14, 6014, 6016), + (6016, -1, -1, 5248, 5248, 12, 80, -1, 0, 0, 14, 6015, 7356), + (6017, -1, -1, 644, 644, 7, 73, -1, 0, 0, 14, 4988, 6018), + (6018, -1, -1, 644, 644, 9, 75, -1, 0, 0, 14, 6017, 6019), + (6019, -1, -1, 644, 644, 12, 77, -1, 0, 0, 14, 6018, 7359), + (6020, -1, -1, 6020, 6020, 2, 65, -1, 0, 0, 14, -1, 6021), + (6021, -1, -1, 6020, 6020, 2, 65, -1, 0, 0, 14, 6020, 6022), + (6022, -1, -1, 6020, 6020, 2, 65, -1, 0, 0, 14, 6021, 6045), + (6023, -1, -1, 119, 119, 12, 85, -1, 0, 0, 16, 7567, 6024), + (6024, -1, -1, 119, 119, 12, 85, -1, 0, 0, 16, 6023, 6025), + (6025, -1, -1, 119, 119, 12, 85, -1, 0, 0, 16, 6024, 12548), + (6026, -1, -1, 1004, 1004, 7, 81, -1, 0, 0, 16, -1, 6027), + (6027, -1, -1, 1004, 1004, 9, 81, -1, 0, 0, 16, 6026, 6028), + (6028, -1, -1, 1004, 1004, 12, 81, -1, 0, 0, 16, 6027, -1), + (6029, -1, -1, 1304, 1304, 7, 76, -1, 0, 0, 14, 1306, 6030), + (6030, -1, -1, 1304, 1304, 9, 78, -1, 0, 0, 14, 6029, 6031), + (6031, -1, -1, 1304, 1304, 12, 80, -1, 0, 0, 14, 6030, 7148), + (6032, -1, -1, 1604, 1604, 7, 69, -1, 0, 0, 14, 5294, 6033), + (6033, -1, -1, 1604, 1604, 9, 71, -1, 0, 0, 14, 6032, 6034), + (6034, -1, -1, 1604, 1604, 12, 73, -1, 0, 0, 14, 6033, 7131), + (6035, -1, -1, 846, 846, 7, 76, -1, 0, 0, 14, 4950, 6036), + (6036, -1, -1, 846, 846, 9, 78, -1, 0, 0, 14, 6035, 6037), + (6037, -1, -1, 846, 846, 12, 80, -1, 0, 0, 14, 6036, 7151), + (6038, 5022, 5022, 5022, 5022, 7, 76, 23988, 5, 600, 14, 5024, 6039), + (6039, 5022, 5022, 5022, 5022, 9, 78, 23989, 5, 600, 14, 6038, 6040), + (6040, 5022, 5022, 5022, 5022, 12, 80, 23990, 5, 600, 14, 6039, 15628), + (6041, 5028, -1, 5028, 5028, 9, 78, 12621, 4, 900, 14, 5028, -1), + (6042, -1, -1, 1543, 1543, 7, 76, -1, 0, 0, 14, 4953, 6043), + (6043, -1, -1, 1543, 1543, 9, 78, -1, 0, 0, 14, 6042, 6044), + (6044, -1, -1, 1543, 1543, 12, 80, -1, 0, 0, 14, 6043, 7134), + (6045, -1, -1, 6020, 6020, 2, 66, -1, 0, 0, 14, 6022, 6046), + (6046, -1, -1, 6020, 6020, 2, 68, -1, 0, 0, 14, 6045, 6047), + (6047, -1, -1, 6020, 6020, 2, 70, -1, 0, 0, 14, 6046, 6048), + (6048, -1, -1, 6020, 6020, 2, 71, -1, 0, 0, 14, 6047, 6049), + (6049, -1, -1, 6020, 6020, 2, 73, -1, 0, 0, 14, 6048, 6050), + (6050, -1, -1, 6020, 6020, 2, 75, -1, 0, 0, 14, 6049, 6057), + (6051, -1, -1, 6051, 6051, 3, 76, -1, 0, 0, 14, -1, 6052), + (6052, -1, -1, 6051, 6051, 3, 78, -1, 0, 0, 14, 6051, 6053), + (6053, -1, -1, 6051, 6051, 3, 80, -1, 0, 0, 14, 6052, 7601), + (6054, 4931, 4931, 4931, 4931, 7, 76, 12756, 4, 600, 14, 4933, 6055), + (6055, 4931, 4931, 4931, 4931, 7, 78, 12757, 4, 600, 14, 6054, 6056), + (6056, 4931, 4931, 4931, 4931, 7, 80, 12758, 4, 600, 14, 6055, 7291), + (6057, -1, -1, 6020, 6020, 2, 76, -1, 0, 0, 14, 6050, 6058), + (6058, -1, -1, 6020, 6020, 2, 78, -1, 0, 0, 14, 6057, 6059), + (6059, -1, -1, 6020, 6020, 2, 80, -1, 0, 0, 14, 6058, 7169), + (6060, -1, -1, 6540, 6540, 8, 76, -1, 0, 0, 14, -1, 6061), + (6061, -1, -1, 6540, 6540, 8, 76, -1, 0, 0, 14, 6060, 6470), + (6063, -1, -1, 589, 589, 7, 76, -1, 0, 0, 14, 5272, 6064), + (6064, -1, -1, 589, 589, 9, 78, -1, 0, 0, 14, 6063, 6065), + (6065, -1, -1, 589, 589, 12, 80, -1, 0, 0, 14, 6064, 7390), + (6066, -1, -1, 1313, 1313, 7, 76, -1, 0, 0, 14, 5031, 6067), + (6067, -1, -1, 1313, 1313, 7, 76, -1, 0, 0, 14, 6066, 6068), + (6068, -1, -1, 1313, 1313, 8, 77, -1, 0, 0, 14, 6067, 6069), + (6069, -1, -1, 1313, 1313, 9, 78, -1, 0, 0, 14, 6068, 6070), + (6070, -1, -1, 1313, 1313, 10, 79, -1, 0, 0, 14, 6069, 6071), + (6071, -1, -1, 1313, 1313, 12, 80, -1, 0, 0, 14, 6070, 7393), + (6072, -1, -1, 210, 210, 8, 77, -1, 0, 0, 14, 1318, 6073), + (6073, -1, -1, 210, 210, 9, 78, -1, 0, 0, 14, 6072, 6074), + (6074, -1, -1, 210, 210, 10, 79, -1, 0, 0, 14, 6073, 7399), + (6075, -1, -1, 895, 895, 7, 76, -1, 0, 0, 14, 899, 6076), + (6076, -1, -1, 895, 895, 8, 77, -1, 0, 0, 14, 6075, 6077), + (6077, -1, -1, 895, 895, 9, 78, -1, 0, 0, 14, 6076, 6078), + (6078, -1, -1, 895, 895, 10, 79, -1, 0, 0, 14, 6077, 6079), + (6079, -1, -1, 895, 895, 12, 80, -1, 0, 0, 14, 6078, 7402), + (6080, -1, -1, 683, 683, 5, 75, -1, 0, 0, 14, 5305, 6081), + (6081, -1, -1, 683, 683, 5, 75, -1, 0, 0, 14, 6080, 7604), + (6082, -1, -1, 6084, 6084, 5, 85, 0, 0, 0, 17, -1, 6083), + (6083, -1, -1, 6084, 6084, 5, 87, 0, 0, 0, 17, 6082, 6084), + (6084, -1, -1, 6084, 6084, 5, 89, 0, 0, 0, 17, 6083, 13366), + (6085, -1, -1, 6761, 6761, 10, 81, -1, 0, 0, 16, 6763, 6086), + (6086, -1, -1, 6761, 6761, 11, 83, -1, 0, 0, 16, 6085, 6087), + (6087, -1, -1, 6761, 6761, 12, 85, -1, 0, 0, 16, 6086, 10763), + (6088, -1, -1, 6088, 6088, 9, 85, 0, 0, 0, 17, -1, 6089), + (6089, -1, -1, 6088, 6088, 12, 87, 0, 0, 0, 17, 6088, 6090), + (6090, -1, -1, 6088, 6088, 15, 89, 0, 0, 0, 17, 6089, -1), + (6092, 5251, 5251, 5251, 5251, 7, 76, 12635, 13, 900, 14, 5253, 6093), + (6093, 5251, 5251, 5251, 5251, 9, 78, 12636, 13, 900, 14, 6092, 6094), + (6094, 5251, 5251, 5251, 5251, 12, 80, 12637, 13, 900, 14, 6093, 7472), + (6095, 513, 513, 513, 513, 7, 76, 12638, 4, 120, 14, 515, 6096), + (6096, 513, 513, 513, 513, 9, 78, 12639, 4, 120, 14, 6095, 6097), + (6097, 513, 513, 513, 513, 12, 80, 12640, 4, 120, 14, 6096, 7475), + (6098, 1327, 1327, 1327, 1327, 7, 76, 12641, 10, 900, 14, 5316, 6099), + (6099, 1327, 1327, 1327, 1327, 9, 78, 12642, 10, 900, 14, 6098, 6100), + (6100, 1327, 1327, 1327, 1327, 12, 80, 12643, 10, 900, 14, 6099, 7460), + (6101, 153, 153, 153, 153, 12, 80, 12644, 3, 2160, 14, 5068, 7468), + (6102, 146, 146, 146, 146, 8, 77, 12645, 2, 180, 14, 5069, 7466), + (6103, 528, 528, 528, 528, 7, 76, 12646, 5, 720, 14, 901, 6104), + (6104, 528, 528, 528, 528, 9, 78, 12647, 5, 720, 14, 6103, 6105), + (6105, 528, 528, 528, 528, 12, 80, 12648, 5, 720, 14, 6104, 7469), + (6106, 6106, 6106, 6106, 6106, 4, 67, 21965, 13, 4320, 16, -1, 6107), + (6107, 6106, 6106, 6106, 6106, 5, 68, 21966, 13, 4320, 16, 6106, 6108), + (6108, 6106, 6106, 6106, 6106, 6, 69, 21967, 13, 4320, 16, 6107, 6109), + (6109, 6106, 6106, 6106, 6106, 7, 77, 21968, 13, 4320, 16, 6108, 6110), + (6110, 6106, 6106, 6106, 6106, 8, 78, 21969, 13, 4320, 16, 6109, 6111), + (6111, 6106, 6106, 6106, 6106, 9, 79, 21970, 13, 4320, 16, 6110, -1), + (6112, -1, -1, 6112, 6112, 5, 85, -1, 0, 0, 17, -1, 12966), + (6113, -1, -1, 6113, 6113, 9, 85, 0, 0, 0, 17, -1, 6114), + (6114, -1, -1, 6113, 6113, 12, 87, 0, 0, 0, 17, 6113, 6115), + (6115, -1, -1, 6113, 6113, 15, 89, 0, 0, 0, 17, 6114, -1), + (6119, -1, -1, 6119, 6119, 6, 76, -1, 0, 0, 14, -1, 6120), + (6120, -1, -1, 6119, 6119, 6, 77, -1, 0, 0, 14, 6119, 6121), + (6121, -1, -1, 6119, 6119, 6, 78, -1, 0, 0, 14, 6120, 6122), + (6122, -1, -1, 6119, 6119, 6, 79, -1, 0, 0, 14, 6121, 6123), + (6123, -1, -1, 6119, 6119, 6, 80, -1, 0, 0, 14, 6122, 7526), + (6124, -1, -1, 5263, 5263, 3, 71, -1, 0, 0, 12, -1, 6125), + (6125, -1, -1, 5263, 5263, 6, 73, -1, 0, 0, 12, 6124, 6126), + (6126, -1, -1, 5263, 5263, 9, 75, -1, 0, 0, 12, 6125, 6127), + (6127, -1, -1, 5263, 5263, 10, 76, -1, 0, 0, 14, 6126, 6128), + (6128, -1, -1, 5263, 5263, 11, 78, -1, 0, 0, 14, 6127, 6129), + (6129, -1, -1, 5263, 5263, 12, 80, -1, 0, 0, 14, 6128, 12463), + (6130, -1, -1, 586, 586, 7, 76, -1, 0, 0, 14, 588, 6131), + (6131, -1, -1, 586, 586, 7, 76, -1, 0, 0, 14, 6130, 6132), + (6132, -1, -1, 586, 586, 7, 76, -1, 0, 0, 14, 6131, -1), + (6133, 1351, 1351, 1351, 1351, 8, 77, 12649, 5, 30, 14, 1351, 7109), + (6134, 4849, 4849, 4849, 4849, 7, 76, 12650, 7, 1800, 14, 4849, 7110), + (6135, 54006, 54006, 54006, 54006, 7, 76, 12651, 18, 180, 14, -1, 7111), + (6136, -1, -1, 6136, 6136, 7, 76, -1, 0, 0, 10, -1, 6137), + (6149, 921, 921, 921, 921, 9, 79, 12652, 8, 60, 14, 5280, 7245), + (6150, 922, 922, 922, 922, 9, 78, 12653, 8, 60, 14, 5281, 7236), + (6151, 923, 923, 923, 923, 9, 77, 12654, 8, 60, 14, 5282, 7235), + (6152, 1334, 1334, 1334, 1334, 9, 78, 12655, 11, 4320, 14, 1336, 6153), + (6153, 1334, 1334, 1334, 1334, 10, 79, 12656, 11, 4320, 14, 6152, 6154), + (6154, 1334, 1334, 1334, 1334, 12, 80, 12657, 11, 4320, 14, 6153, 7239), + (6155, 4944, -1, 4944, 4944, 7, 76, 12658, 0, 1, 14, 4946, 6156), + (6156, 4944, -1, 4944, 4944, 9, 78, 12659, 0, 1, 14, 6155, 6157), + (6157, 4944, -1, 4944, 4944, 12, 80, 12660, 0, 1, 14, 6156, 7229), + (6158, 1337, 1337, 1337, 1337, 8, 77, 12661, 13, 4320, 14, 1339, 6159), + (6159, 1337, 1337, 1337, 1337, 9, 78, 12662, 13, 4320, 14, 6158, 6160), + (6160, 1337, 1337, 1337, 1337, 10, 79, 12663, 13, 4320, 14, 6159, 14338), + (6161, 1478, -1, 1478, 1478, 9, 78, 12664, 0, 1, 14, 1480, 6162), + (6162, 1478, -1, 1478, 1478, 10, 79, 12665, 0, 1, 14, 6161, 6163), + (6163, 1478, -1, 1478, 1478, 12, 80, 12666, 0, 1, 14, 6162, 7242), + (6200, 6533, 6533, 6533, 6533, 10, 79, 12768, 15, 600, 14, -1, 7428), + (6201, 6534, 6534, 6534, 6534, 9, 78, 12769, 16, 900, 14, -1, 7429), + (6202, -1, -1, 6535, 6535, 5, 70, -1, 0, 0, 14, -1, 6203), + (6203, -1, -1, 6535, 6535, 5, 70, -1, 0, 0, 14, 6202, 6204), + (6204, -1, -1, 6535, 6535, 5, 70, -1, 0, 0, 14, 6203, -1), + (6205, 6536, 6536, 6536, 6536, 7, 76, 12712, 39, 5, 14, -1, -1), + (6206, 6537, 6537, 6537, 6537, 7, 76, 12770, 30, 900, 14, -1, 6207), + (6207, 6537, 6537, 6537, 6537, 8, 77, 12771, 30, 900, 14, 6206, 6208), + (6208, 6537, 6537, 6537, 6537, 9, 78, 12772, 30, 900, 14, 6207, 7606), + (6209, -1, -1, 6538, 6538, 7, 76, -1, 0, 0, 14, -1, 6210), + (6210, -1, -1, 6538, 6538, 9, 78, -1, 0, 0, 14, 6209, 6211), + (6211, -1, -1, 6538, 6538, 12, 80, -1, 0, 0, 14, 6210, 7478), + (6212, 6539, 6539, 6539, 6539, 6, 71, 12776, 18, 1800, 14, -1, 6213), + (6213, 6539, 6539, 6539, 6539, 6, 74, 12777, 18, 1800, 14, 6212, 6214), + (6214, 6539, 6539, 6539, 6539, 6, 77, 12778, 18, 1800, 14, 6213, 7609), + (6215, -1, -1, 6540, 6540, 8, 71, -1, 0, 0, 14, -1, 6216), + (6216, -1, -1, 6540, 6540, 8, 72, -1, 0, 0, 14, 6215, 6217), + (6217, -1, -1, 6540, 6540, 8, 73, -1, 0, 0, 14, 6216, 6300), + (6218, 6218, 6218, 6218, 6218, 7, 76, 12782, 0, 1, 14, -1, 7488), + (6219, 6542, 6542, 6542, 6542, 7, 76, 12783, 18, 1800, 14, -1, 6220), + (6220, 6542, 6542, 6542, 6542, 9, 78, 12784, 18, 1800, 14, 6219, 6221), + (6221, 6542, 6542, 6542, 6542, 12, 80, 12785, 18, 1800, 14, 6220, -1), + (6222, 6543, 6543, 6543, 6543, 9, 72, 13143, 18, 25, 14, -1, -1), + (6223, -1, -1, 962, 962, 5, 76, -1, 0, 0, 14, 966, 6224), + (6224, -1, -1, 962, 962, 5, 77, -1, 0, 0, 14, 6223, 6225), + (6225, -1, -1, 962, 962, 5, 78, -1, 0, 0, 14, 6224, 6226), + (6226, -1, -1, 962, 962, 5, 79, -1, 0, 0, 14, 6225, 6227), + (6227, -1, -1, 962, 962, 5, 80, -1, 0, 0, 14, 6226, 10361), + (6228, -1, -1, 6545, 6545, 2, 70, -1, 0, 0, 14, -1, 6229), + (6229, -1, -1, 6545, 6545, 2, 70, -1, 0, 0, 14, 6228, 6230), + (6230, -1, -1, 6545, 6545, 2, 70, -1, 0, 0, 14, 6229, 6231), + (6231, -1, -1, 6545, 6545, 2, 70, -1, 0, 0, 14, 6230, -1), + (6232, 6232, 6232, 6232, 6232, 12, 80, 14413, 18, 900, 14, -1, 7421), + (6233, -1, -1, 477, 477, 2, 70, -1, 0, 0, 14, 479, 6234), + (6234, -1, -1, 477, 477, 2, 71, -1, 0, 0, 14, 6233, 6235), + (6235, -1, -1, 477, 477, 2, 72, -1, 0, 0, 14, 6234, 16094), + (6236, -1, -1, 6548, 6548, 6, 73, -1, 0, 0, 14, -1, 6237), + (6237, -1, -1, 6548, 6548, 6, 75, -1, 0, 0, 14, 6236, 6238), + (6238, -1, -1, 6548, 6548, 8, 77, -1, 0, 0, 14, 6237, 12929), + (6240, -1, -1, 767, 767, 3, 65, -1, 0, 0, 14, -1, 6241), + (6241, -1, -1, 767, 767, 6, 65, -1, 0, 0, 14, 6240, 6242), + (6242, -1, -1, 767, 767, 9, 65, -1, 0, 0, 14, 6241, 6243), + (6243, -1, -1, 767, 767, 3, 67, -1, 0, 0, 14, 6242, 6244), + (6244, -1, -1, 767, 767, 6, 68, -1, 0, 0, 14, 6243, 6245), + (6245, -1, -1, 767, 767, 9, 69, -1, 0, 0, 14, 6244, 12426), + (6249, 6552, 6552, 6552, 6552, 5, 70, -1, 0, 0, 14, -1, 6250), + (6250, 6552, 6552, 6552, 6552, 6, 72, -1, 0, 0, 14, 6249, 6251), + (6251, 6552, 6552, 6552, 6552, 6, 74, -1, 0, 0, 14, 6250, 6252), + (6252, 6552, 6552, 6552, 6552, 7, 76, -1, 0, 0, 14, 6251, 6253), + (6253, 6552, 6552, 6552, 6552, 9, 78, -1, 0, 0, 14, 6252, 7279), + (6254, 616, 616, 616, 616, 6, 73, 12765, 7, 900, 14, 1250, 6255), + (6255, 616, 616, 616, 616, 7, 76, 12766, 7, 900, 14, 6254, 6256), + (6256, 616, 616, 616, 616, 10, 79, 12767, 7, 900, 14, 6255, 7257), + (6257, -1, -1, 86, 86, 2, 55, -1, 0, 0, 14, -1, 6258), + (6258, -1, -1, 86, 86, 4, 55, -1, 0, 0, 14, 6257, 6259), + (6259, -1, -1, 86, 86, 6, 55, -1, 0, 0, 14, 6258, 8223), + (6260, -1, -1, 495, 495, 6, 73, -1, 0, 0, 14, 497, 6261), + (6261, -1, -1, 495, 495, 7, 76, -1, 0, 0, 14, 6260, 6262), + (6262, -1, -1, 495, 495, 10, 79, -1, 0, 0, 14, 6261, 10666), + (6266, -1, -1, 6557, 6557, 6, 73, -1, 0, 0, 14, -1, 6267), + (6267, -1, -1, 6557, 6557, 7, 76, -1, 0, 0, 14, 6266, 6268), + (6268, -1, -1, 6557, 6557, 10, 79, -1, 0, 0, 14, 6267, -1), + (6269, -1, -1, 6558, 6558, 6, 73, -1, 0, 0, 14, -1, 6270), + (6270, -1, -1, 6558, 6558, 7, 76, -1, 0, 0, 14, 6269, 6271), + (6271, -1, -1, 6558, 6558, 10, 79, -1, 0, 0, 14, 6270, -1), + (6272, -1, -1, 6559, 6559, 6, 73, -1, 0, 0, 14, -1, 6273), + (6273, -1, -1, 6559, 6559, 7, 75, -1, 0, 0, 14, 6272, 6274), + (6274, -1, -1, 6559, 6559, 10, 77, -1, 0, 0, 14, 6273, 7137), + (6275, -1, -1, 6560, 6560, 6, 73, -1, 0, 0, 14, -1, 6276), + (6276, -1, -1, 6560, 6560, 7, 76, -1, 0, 0, 14, 6275, 6277), + (6277, -1, -1, 6560, 6560, 10, 79, -1, 0, 0, 14, 6276, 16266), + (6278, 6561, 6561, 6561, 6561, 7, 76, 12795, 32, 30, 14, -1, 6279), + (6279, 6561, 6561, 6561, 6561, 7, 76, 12796, 32, 30, 14, 6278, 6280), + (6280, 6561, 6561, 6561, 6561, 7, 76, 12797, 32, 30, 14, 6279, 7422), + (6281, 6563, 6563, 6563, 6563, 9, 78, 13144, 36, 8, 14, -1, 12995), + (6282, 6562, 6562, 6562, 6562, 6, 72, 12798, 39, 1, 14, -1, -1), + (6283, -1, -1, 6564, 6564, 6, 73, -1, 0, 0, 14, -1, 6284), + (6284, -1, -1, 6564, 6564, 7, 76, -1, 0, 0, 14, 6283, 6285), + (6285, -1, -1, 6564, 6564, 10, 79, -1, 0, 0, 14, 6284, 7112), + (6286, 6565, 6565, 6565, 6565, 7, 76, 12802, 17, 45, 14, -1, 7115), + (6287, -1, -1, 6566, 6566, 6, 73, -1, 0, 0, 14, -1, 6288), + (6288, -1, -1, 6566, 6566, 7, 76, -1, 0, 0, 14, 6287, 6289), + (6289, -1, -1, 6566, 6566, 10, 79, -1, 0, 0, 14, 6288, -1), + (6290, 6290, 6290, 6290, 6290, 6, 71, 12803, 0, 1, 14, -1, 6291), + (6291, 6290, 6290, 6290, 6290, 6, 73, 12804, 0, 1, 14, 6290, 6292), + (6292, 6290, 6290, 6290, 6290, 6, 75, 12805, 0, 1, 14, 6291, 6293), + (6293, 6290, 6290, 6290, 6290, 7, 76, 12806, 0, 1, 14, 6292, 6294), + (6294, 6290, 6290, 6290, 6290, 9, 78, 12807, 0, 1, 14, 6293, 6295), + (6295, 6290, 6290, 6290, 6290, 12, 80, 12808, 0, 1, 14, 6294, 7223), + (6296, 619, 619, 619, 619, 6, 73, 12759, 6, 900, 14, 722, 6297), + (6297, 619, 619, 619, 619, 6, 73, 12760, 6, 900, 14, 6296, 6298), + (6298, 619, 619, 619, 619, 6, 73, 12761, 6, 900, 14, 6297, 7226), + (6299, 6299, 6299, 6299, 6299, 9, 65, 12786, 18, 12, 14, -1, -1), + (6300, -1, -1, 6540, 6540, 8, 74, -1, 0, 0, 14, 6217, 6301), + (6301, -1, -1, 6540, 6540, 8, 75, -1, 0, 0, 14, 6300, 6472), + (6302, -1, -1, 6302, 6302, 5, 81, 0, 0, 0, 16, -1, 6303), + (6303, -1, -1, 6302, 6302, 5, 83, 0, 0, 0, 16, 6302, 6304), + (6304, -1, -1, 6302, 6302, 5, 85, 0, 0, 0, 16, 6303, 11011), + (6307, 1358, 1358, 1358, 1358, 6, 71, 13168, 3, 60, 14, 1360, 6308), + (6308, 1358, 1358, 1358, 1358, 6, 73, 13169, 3, 60, 14, 6307, 6309), + (6309, 1358, 1358, 1358, 1358, 6, 75, 13170, 3, 60, 14, 6308, 6310), + (6310, 1358, 1358, 1358, 1358, 6, 76, 13171, 3, 60, 14, 6309, 6311), + (6311, 1358, 1358, 1358, 1358, 6, 78, 13172, 3, 60, 14, 6310, 6312), + (6312, 1358, 1358, 1358, 1358, 6, 80, 13173, 3, 60, 14, 6311, 7157), + (6313, 1352, 1352, 1352, 1352, 6, 71, 13174, 3, 60, 14, 1354, 6314), + (6314, 1352, 1352, 1352, 1352, 6, 73, 13175, 3, 60, 14, 6313, 6315), + (6315, 1352, 1352, 1352, 1352, 6, 75, 13177, 3, 60, 14, 6314, 6316), + (6316, 1352, 1352, 1352, 1352, 6, 76, 13178, 3, 60, 14, 6315, 6317), + (6317, 1352, 1352, 1352, 1352, 6, 78, 13179, 3, 60, 14, 6316, 6318), + (6318, 1352, 1352, 1352, 1352, 6, 80, 13180, 3, 60, 14, 6317, 7154), + (6319, -1, -1, 501, 501, 6, 73, -1, 0, 0, 14, 503, 6320), + (6320, -1, -1, 501, 501, 6, 75, -1, 0, 0, 14, 6319, 6321), + (6321, -1, -1, 501, 501, 6, 77, -1, 0, 0, 14, 6320, 6528), + (6322, -1, -1, 6322, 6322, 6, 73, -1, 0, 0, 14, -1, 6323), + (6323, -1, -1, 6322, 6322, 6, 75, -1, 0, 0, 14, 6322, 6324), + (6324, -1, -1, 6322, 6322, 6, 77, -1, 0, 0, 14, 6323, -1), + (6325, 6325, 6325, 6325, 6325, 7, 73, 13213, 18, 600, 14, -1, 6326), + (6326, 6325, 6325, 6325, 6325, 7, 75, 13214, 18, 600, 14, 6325, 6327), + (6327, 6325, 6325, 6325, 6325, 7, 77, 13215, 18, 600, 14, 6326, 6361), + (6328, 6328, 6328, 6328, 6328, 7, 74, 13204, 10, 600, 14, -1, 6329), + (6329, 6328, 6328, 6328, 6328, 7, 76, 13205, 10, 600, 14, 6328, 6330), + (6330, 6328, 6328, 6328, 6328, 7, 78, 13212, 10, 600, 14, 6329, 7143), + (6331, -1, -1, 878, 878, 7, 76, -1, 0, 0, 14, 4959, 6332), + (6332, -1, -1, 878, 878, 7, 78, -1, 0, 0, 14, 6331, 7146), + (6333, 6333, 6333, 6333, 6333, 9, 59, 13167, 3, 600, 14, -1, 7266), + (6334, -1, -1, 6334, 6334, 6, 73, -1, 0, 0, 14, -1, 6335), + (6335, -1, -1, 6334, 6334, 6, 75, -1, 0, 0, 14, 6334, 6336), + (6336, -1, -1, 6334, 6334, 6, 77, -1, 0, 0, 14, 6335, -1), + (6337, -1, -1, 6337, 6337, 6, 74, -1, 0, 0, 14, -1, 6338), + (6338, -1, -1, 6337, 6337, 6, 76, -1, 0, 0, 14, 6337, 6339), + (6339, -1, -1, 6337, 6337, 6, 78, -1, 0, 0, 14, 6338, 7448), + (6340, -1, -1, 6340, 6340, 6, 74, -1, 0, 0, 14, -1, 6341), + (6341, -1, -1, 6340, 6340, 6, 76, -1, 0, 0, 14, 6340, 6342), + (6342, -1, -1, 6340, 6340, 6, 78, -1, 0, 0, 14, 6341, 7451), + (6343, -1, -1, 6343, 6343, 6, 74, -1, 0, 0, 14, -1, 6344), + (6344, -1, -1, 6343, 6343, 6, 76, -1, 0, 0, 14, 6343, 6345), + (6345, -1, -1, 6343, 6343, 6, 78, -1, 0, 0, 14, 6344, 7166), + (6346, -1, -1, 6346, 6346, 6, 74, -1, 0, 0, 14, -1, 6347), + (6347, -1, -1, 6346, 6346, 6, 76, -1, 0, 0, 14, 6346, 6348), + (6348, -1, -1, 6346, 6346, 6, 78, -1, 0, 0, 14, 6347, 7615), + (6349, -1, -1, 6349, 6349, 6, 74, -1, 0, 0, 14, -1, 6350), + (6350, -1, -1, 6349, 6349, 6, 76, -1, 0, 0, 14, 6349, 6351), + (6351, -1, -1, 6349, 6349, 6, 78, -1, 0, 0, 14, 6350, 7618), + (6352, 4894, 4894, 4894, 4894, 6, 76, 13181, 7, 2160, 14, 4896, 6353), + (6353, 4894, 4894, 4894, 4894, 6, 77, 13182, 7, 2160, 14, 6352, 6354), + (6354, 4894, 4894, 4894, 4894, 6, 78, 13183, 7, 2160, 14, 6353, 7288), + (6355, -1, -1, 6355, 6355, 6, 73, -1, 0, 0, 14, -1, 6356), + (6356, -1, -1, 6355, 6355, 6, 74, -1, 0, 0, 14, 6355, 6357), + (6357, -1, -1, 6355, 6355, 6, 75, -1, 0, 0, 14, 6356, 6358), + (6358, -1, -1, 6355, 6355, 6, 76, -1, 0, 0, 14, 6357, 6359), + (6359, -1, -1, 6355, 6355, 6, 77, -1, 0, 0, 14, 6358, 6360), + (6360, -1, -1, 6355, 6355, 6, 80, -1, 0, 0, 16, 6359, 14101), + (6361, 6325, 6325, 6325, 6325, 7, 81, 16861, 18, 600, 16, 6327, 12633), + (6362, -1, -1, 6362, 6362, 5, 77, 0, 0, 0, 16, -1, 6363), + (6363, -1, -1, 6362, 6362, 5, 79, 0, 0, 0, 16, 6362, 6364), + (6364, -1, -1, 6362, 6362, 5, 81, 0, 0, 0, 16, 6363, 6365), + (6365, -1, -1, 6362, 6362, 5, 83, 0, 0, 0, 16, 6364, 6366), + (6366, -1, -1, 6362, 6362, 5, 85, 0, 0, 0, 16, 6365, 16327), + (6370, 6370, 6370, 6370, 6370, 6, 76, 13188, 7, 600, 14, -1, 6371), + (6371, 6370, 6370, 6370, 6370, 6, 77, 13189, 7, 600, 14, 6370, 6372), + (6372, 6370, 6370, 6370, 6370, 6, 78, 13190, 7, 600, 14, 6371, 7350), + (6375, -1, -1, 6375, 6375, 6, 76, -1, 0, 0, 14, -1, 6376), + (6376, -1, -1, 6375, 6375, 6, 77, -1, 0, 0, 14, 6375, 6377), + (6377, -1, -1, 6375, 6375, 6, 78, -1, 0, 0, 14, 6376, 7644), + (6378, 209, 209, 209, 1272, 6, 76, 13501, 12, 5, 14, 1272, -1), + (6379, 6379, 6379, 6379, 6379, 6, 60, 13500, 37, 5, 14, -1, -1), + (6380, 6380, 6380, 6380, 6380, 6, 78, 13209, 39, 120, 14, -1, 6381), + (6381, 6380, 6380, 6380, 6380, 6, 79, 13210, 39, 120, 14, 6380, 6382), + (6382, 6380, 6380, 6380, 6380, 6, 80, 13211, 39, 120, 14, 6381, 7497), + (6383, -1, -1, 6383, 6383, 3, 70, -1, 0, 0, 14, -1, 6384), + (6384, -1, -1, 6383, 6383, 6, 70, -1, 0, 0, 14, 6383, 6385), + (6385, -1, -1, 6383, 6383, 9, 70, -1, 0, 0, 14, 6384, 10607), + (6386, -1, -1, 6386, 6386, 7, 72, -1, 0, 0, 14, -1, 6387), + (6387, -1, -1, 6386, 6386, 7, 74, -1, 0, 0, 14, 6386, 6388), + (6388, -1, -1, 6386, 6386, 7, 76, -1, 0, 0, 14, 6387, 6389), + (6389, -1, -1, 6386, 6386, 7, 78, -1, 0, 0, 14, 6388, 13521), + (6390, -1, -1, 65, 661, 3, 76, -1, 0, 0, 14, 4697, 6391), + (6391, -1, -1, 65, 661, 3, 77, -1, 0, 0, 14, 6390, 6392), + (6392, -1, -1, 65, 661, 3, 78, -1, 0, 0, 14, 6391, 6393), + (6393, -1, -1, 65, 661, 3, 79, -1, 0, 0, 14, 6392, 6394), + (6394, -1, -1, 65, 661, 3, 80, -1, 0, 0, 14, 6393, 7534), + (6395, -1, -1, 6395, 6395, 7, 76, -1, 0, 0, 14, -1, 6396), + (6396, -1, -1, 6395, 6395, 7, 77, -1, 0, 0, 14, 6395, 6397), + (6397, -1, -1, 6395, 6395, 7, 78, -1, 0, 0, 14, 6396, 7336), + (6398, 516, 516, 516, 516, 6, 72, 13198, 5, 480, 14, 516, 7237), + (6400, 1110, 1110, 1110, 1110, 6, 73, 13192, 3, 2160, 14, 1112, 6401), + (6401, 1110, 1110, 1110, 1110, 6, 75, 13193, 3, 2160, 14, 6400, 6402), + (6402, 1110, 1110, 1110, 1110, 6, 76, 13194, 3, 2160, 14, 6401, 7445), + (6403, -1, -1, 1107, 1107, 7, 76, -1, 0, 0, 14, 5288, 6404), + (6404, -1, -1, 1107, 1107, 9, 78, -1, 0, 0, 14, 6403, 6405), + (6405, -1, -1, 1107, 1107, 12, 80, -1, 0, 0, 14, 6404, 12432), + (6406, -1, -1, 5085, 5085, 6, 76, -1, 0, 0, 14, 5087, 6407), + (6407, -1, -1, 5085, 5085, 6, 78, -1, 0, 0, 14, 6406, 6408), + (6408, -1, -1, 5085, 5085, 6, 80, -1, 0, 0, 14, 6407, 7384), + (6409, -1, -1, 6540, 6540, 8, 71, -1, 0, 0, 14, -1, 6410), + (6410, -1, -1, 6540, 6540, 8, 72, -1, 0, 0, 14, 6409, 6411), + (6411, -1, -1, 6540, 6540, 8, 73, -1, 0, 0, 14, 6410, 6412), + (6412, -1, -1, 6540, 6540, 8, 74, -1, 0, 0, 14, 6411, 6413), + (6413, -1, -1, 6540, 6540, 8, 75, -1, 0, 0, 14, 6412, 6414), + (6414, -1, -1, 6540, 6540, 8, 76, -1, 0, 0, 14, 6413, 6415), + (6415, -1, -1, 6540, 6540, 8, 77, -1, 0, 0, 14, 6414, 6416), + (6416, -1, -1, 6540, 6540, 8, 78, -1, 0, 0, 14, 6415, 6417), + (6417, -1, -1, 6540, 6540, 8, 79, -1, 0, 0, 14, 6416, 6418), + (6418, -1, -1, 6540, 6540, 8, 80, -1, 0, 0, 14, 6417, 6474), + (6419, -1, -1, 6540, 6540, 8, 71, -1, 0, 0, 14, -1, 6420), + (6420, -1, -1, 6540, 6540, 8, 72, -1, 0, 0, 14, 6419, 6421), + (6421, -1, -1, 6540, 6540, 8, 73, -1, 0, 0, 14, 6420, 6476), + (6422, -1, -1, 6422, 6422, 3, 61, -1, 0, 0, 14, -1, 6423), + (6423, -1, -1, 6422, 6422, 3, 63, -1, 0, 0, 14, 6422, 6424), + (6424, -1, -1, 6422, 6422, 3, 65, -1, 0, 0, 14, 6423, -1), + (6425, 5007, 5007, 5007, 5007, 9, 76, 13509, 8, 2160, 14, 5009, 6426), + (6426, 5007, 5007, 5007, 5007, 9, 78, 13510, 8, 2160, 14, 6425, 6427), + (6427, 5007, 5007, 5007, 5007, 9, 80, 13511, 8, 2160, 14, 6426, 7341), + (6428, -1, -1, 1287, 1287, 3, 67, -1, 0, 0, 14, -1, 6429), + (6429, -1, -1, 1287, 1287, 6, 68, -1, 0, 0, 14, 6428, 6430), + (6430, -1, -1, 1287, 1287, 9, 69, -1, 0, 0, 14, 6429, 12472), + (6431, -1, -1, 1056, 1056, 5, 76, -1, 0, 0, 14, 1060, 6432), + (6432, -1, -1, 1056, 1056, 5, 77, -1, 0, 0, 14, 6431, 6433), + (6433, -1, -1, 1056, 1056, 5, 78, -1, 0, 0, 14, 6432, 6434), + (6434, -1, -1, 1056, 1056, 5, 79, -1, 0, 0, 14, 6433, 6435), + (6435, -1, -1, 1056, 1056, 5, 80, -1, 0, 0, 14, 6434, 7521), + (6436, -1, -1, 6436, 6436, 6, 73, -1, 0, 0, 14, -1, 6437), + (6437, -1, -1, 6436, 6436, 6, 75, -1, 0, 0, 14, 6436, 6438), + (6438, -1, -1, 6436, 6436, 8, 77, -1, 0, 0, 14, 6437, 7313), + (6439, -1, -1, 468, 468, 2, 67, -1, 0, 0, 14, 470, 6440), + (6440, -1, -1, 468, 468, 2, 69, -1, 0, 0, 14, 6439, 7316), + (6441, -1, -1, 1546, 1546, 5, 76, -1, 0, 0, 14, 4831, 12673), + (6442, -1, -1, 1471, 1471, 6, 76, -1, 0, 0, 14, 1475, 6443), + (6443, -1, -1, 1471, 1471, 6, 77, -1, 0, 0, 14, 6442, -1), + (6445, -1, -1, 6445, 6445, 2, 62, -1, 0, 0, 14, -1, 6446), + (6446, -1, -1, 6445, 6445, 2, 64, -1, 0, 0, 14, 6445, 6447), + (6447, -1, -1, 6445, 6445, 2, 66, -1, 0, 0, 14, 6446, -1), + (6448, 5109, 5109, 5109, 5109, 9, 77, 13515, 0, 1, 14, 5109, 7467), + (6449, 1520, 1520, 1520, 1520, 9, 70, 13516, 11, 900, 14, 1522, 6450), + (6450, 1520, 1520, 1520, 1520, 9, 70, 13517, 11, 900, 14, 6449, 6451), + (6451, 1520, 1520, 1520, 1520, 9, 70, 13518, 11, 900, 14, 6450, 7463), + (6452, -1, -1, 6452, 6452, 2, 71, -1, 0, 0, 14, -1, 6453), + (6453, -1, -1, 6452, 6452, 2, 72, -1, 0, 0, 14, 6452, 6454), + (6454, -1, -1, 6452, 6452, 2, 73, -1, 0, 0, 14, 6453, -1), + (6455, 6455, 6455, 6455, 6455, 2, 72, 14750, 36, 30, 14, -1, 6456), + (6456, 6455, 6455, 6455, 6455, 2, 74, 14751, 36, 30, 14, 6455, 6457), + (6457, 6455, 6455, 6455, 6455, 2, 76, 14752, 36, 30, 14, 6456, -1), + (6458, -1, -1, 6458, 6458, 3, 78, -1, 0, 0, 14, -1, 6459), + (6459, -1, -1, 6458, 6458, 3, 78, -1, 0, 0, 14, 6458, 6460), + (6460, -1, -1, 6458, 6458, 3, 78, -1, 0, 0, 14, 6459, -1), + (6461, -1, -1, 6461, 6461, 3, 78, -1, 0, 0, 14, -1, 6462), + (6462, -1, -1, 6461, 6461, 3, 78, -1, 0, 0, 14, 6461, 6463), + (6463, -1, -1, 6461, 6461, 3, 78, -1, 0, 0, 14, 6462, -1), + (6464, 967, 967, 967, 967, 6, 76, 13897, 10, 1800, 14, 969, 6465), + (6465, 967, 967, 967, 967, 6, 77, 13898, 10, 1800, 14, 6464, 6466), + (6466, 967, 967, 967, 967, 6, 78, 13899, 10, 1800, 14, 6465, 7217), + (6467, -1, -1, 6467, 6467, 3, 61, -1, 0, 0, 15, -1, 6468), + (6468, -1, -1, 6467, 6467, 3, 63, -1, 0, 0, 15, 6467, 6469), + (6469, -1, -1, 6467, 6467, 3, 65, -1, 0, 0, 15, 6468, -1), + (6470, -1, -1, 6540, 6540, 8, 76, -1, 0, 0, 15, 6061, 6471), + (6471, -1, -1, 6540, 6540, 8, 81, -1, 0, 0, 15, 6470, 12487), + (6472, -1, -1, 6540, 6540, 8, 81, -1, 0, 0, 15, 6301, 6473), + (6473, -1, -1, 6540, 6540, 8, 83, -1, 0, 0, 15, 6472, 12481), + (6474, -1, -1, 6540, 6540, 8, 81, -1, 0, 0, 15, 6418, 6475), + (6475, -1, -1, 6540, 6540, 8, 83, -1, 0, 0, 15, 6474, 12483), + (6476, -1, -1, 6540, 6540, 8, 81, -1, 0, 0, 15, 6421, 6477), + (6477, -1, -1, 6540, 6540, 8, 83, -1, 0, 0, 15, 6476, 12485), + (6478, 0, 0, 6478, 6478, 3, 81, -1, 0, 0, 16, -1, 6479), + (6479, 0, 0, 6478, 6478, 5, 83, -1, 0, 0, 16, 6478, 6480), + (6480, 0, 0, 6478, 6478, 7, 85, -1, 0, 0, 16, 6479, -1), + (6481, 0, 0, 6481, 6481, 5, 85, -1, 0, 0, 16, -1, 6482), + (6482, 0, 0, 6481, 6481, 7, 85, -1, 0, 0, 16, 6481, 6483), + (6483, 0, 0, 6481, 6481, 9, 85, -1, 0, 0, 16, 6482, 15314), + (6484, -1, -1, 7940, 7940, 5, 85, -1, 0, 0, 16, 10032, 6485), + (6485, -1, -1, 7940, 7940, 7, 85, -1, 0, 0, 16, 6484, 6486), + (6486, -1, -1, 7940, 7940, 9, 85, -1, 0, 0, 16, 6485, 15320), + (6487, 1383, 1383, 1383, 1383, 12, 85, 21812, 6, 300, 16, 10014, 14221), + (6488, 6488, 6488, 6488, 6488, 12, 85, 21806, 32, 900, 16, -1, 13383), + (6489, -1, -1, 6489, 6489, 5, 81, -1, 0, 0, 16, -1, 6490), + (6490, -1, -1, 6489, 6489, 7, 83, -1, 0, 0, 16, 6489, 6491), + (6491, -1, -1, 6489, 6489, 9, 85, -1, 0, 0, 16, 6490, 17239), + (6492, 6492, 6492, 6492, 6492, 7, 75, 21692, 52, 720, 16, -1, 6493), + (6493, 6492, 6492, 6492, 6492, 7, 77, 21693, 52, 720, 16, 6492, 6494), + (6494, 6492, 6492, 6492, 6492, 7, 79, 21694, 52, 720, 16, 6493, 6495), + (6495, 6492, 6492, 6492, 6492, 7, 81, 21695, 52, 720, 16, 6494, 6496), + (6496, 6492, 6492, 6492, 6492, 7, 83, 21696, 52, 720, 16, 6495, 6497), + (6497, 6492, 6492, 6492, 6492, 7, 85, 21697, 52, 720, 16, 6496, 10679), + (6499, 6499, 6499, 6499, 6499, 3, 75, 13512, 13, 60, 14, -1, -1), + (6500, -1, -1, 4761, 4761, 7, 76, -1, 0, 0, 14, 4763, 6501), + (6501, -1, -1, 4761, 4761, 7, 78, -1, 0, 0, 14, 6500, 6502), + (6502, -1, -1, 4761, 4761, 7, 80, -1, 0, 0, 14, 6501, -1), + (6503, -1, -1, 6503, 6503, 6, 72, -1, 0, 0, 14, -1, 6504), + (6504, -1, -1, 6503, 6503, 6, 72, -1, 0, 0, 14, 6503, 6505), + (6505, -1, -1, 6503, 6503, 6, 72, -1, 0, 0, 14, 6504, 6506), + (6506, -1, -1, 6503, 6503, 6, 72, -1, 0, 0, 14, 6505, -1), + (6508, 6508, 6508, 6508, 6508, 7, 74, 13195, 38, 600, 14, -1, 6509), + (6509, 6508, 6508, 6508, 6508, 7, 76, 13196, 38, 600, 14, 6508, 6510), + (6510, 6508, 6508, 6508, 6508, 7, 78, 13197, 38, 600, 14, 6509, 7387), + (6511, -1, -1, 6511, 6511, 6, 73, -1, 0, 0, 14, -1, 6512), + (6512, -1, -1, 6511, 6511, 6, 75, -1, 0, 0, 14, 6511, 6513), + (6513, -1, -1, 6511, 6511, 6, 77, -1, 0, 0, 14, 6512, -1), + (6514, -1, -1, 6514, 6514, 2, 72, -1, 0, 0, 14, -1, 6515), + (6515, -1, -1, 6514, 6514, 2, 72, -1, 0, 0, 14, 6514, 6516), + (6516, -1, -1, 6514, 6514, 2, 72, -1, 0, 0, 14, 6515, -1), + (6517, -1, -1, 1435, 4773, 9, 76, -1, 0, 0, 14, 4773, 7621), + (6518, -1, -1, 678, 678, 3, 65, -1, 0, 0, 14, 682, 6519), + (6519, -1, -1, 678, 678, 3, 65, -1, 0, 0, 14, 6518, 6520), + (6520, -1, -1, 678, 678, 3, 65, -1, 0, 0, 14, 6519, 7544), + (6521, -1, -1, 1021, 1021, 5, 75, -1, 0, 0, 14, 1025, 6522), + (6522, -1, -1, 1021, 1021, 5, 80, -1, 0, 0, 14, 6521, 7539), + (6523, -1, -1, 1026, 1026, 5, 76, -1, 0, 0, 14, 4687, 6524), + (6524, -1, -1, 1026, 1026, 5, 77, -1, 0, 0, 14, 6523, 6525), + (6525, -1, -1, 1026, 1026, 5, 78, -1, 0, 0, 14, 6524, 6526), + (6526, -1, -1, 1026, 1026, 5, 79, -1, 0, 0, 14, 6525, 6527), + (6527, -1, -1, 1026, 1026, 5, 80, -1, 0, 0, 14, 6526, 7511), + (6528, -1, -1, 501, 501, 5, 96, -1, 0, 0, 19, 6321, 6529), + (6531, -1, -1, 5295, 5295, 6, 76, -1, 0, 0, 14, 5297, 6532), + (6532, -1, -1, 5295, 5295, 6, 78, -1, 0, 0, 14, 6531, 6533), + (6533, -1, -1, 5295, 5295, 6, 80, -1, 0, 0, 14, 6532, 7220), + (6534, 8000, 8000, 8000, 8000, 12, 90, 23607, 73, 600, 17, -1, 14216), + (6540, -1, -1, 4699, 4699, 5, 56, -1, 0, 0, 14, 4699, 7500), + (6545, -1, -1, 4698, 4698, 5, 56, -1, 0, 0, 14, 4698, -1), + (6546, -1, -1, 6546, 6546, 0, 55, -1, 0, 0, 3, -1, 6547), + (6547, -1, -1, 6546, 6546, 0, 56, -1, 0, 0, 3, 6546, 6548), + (6548, -1, -1, 6546, 6546, 0, 57, -1, 0, 0, 3, 6547, 6549), + (6549, -1, -1, 6546, 6546, 0, 58, -1, 0, 0, 3, 6548, 6550), + (6550, -1, -1, 6546, 6546, 0, 59, -1, 0, 0, 3, 6549, 6551), + (6551, -1, -1, 6546, 6546, 0, 60, -1, 0, 0, 3, 6550, 6552), + (6552, -1, -1, 6546, 6546, 0, 61, -1, 0, 0, 3, 6551, 6553), + (6553, -1, -1, 6546, 6546, 0, 62, -1, 0, 0, 3, 6552, 6554), + (6554, -1, -1, 6546, 6546, 0, 63, -1, 0, 0, 3, 6553, 6555), + (6555, -1, -1, 6546, 6546, 0, 64, -1, 0, 0, 3, 6554, 6556), + (6556, -1, -1, 6546, 6546, 0, 65, -1, 0, 0, 3, 6555, 6557), + (6557, -1, -1, 6546, 6546, 0, 66, -1, 0, 0, 3, 6556, 6558), + (6558, -1, -1, 6546, 6546, 0, 67, -1, 0, 0, 3, 6557, 6559), + (6559, -1, -1, 6546, 6546, 0, 68, -1, 0, 0, 3, 6558, 6560), + (6560, -1, -1, 6546, 6546, 0, 69, -1, 0, 0, 3, 6559, 6561), + (6561, -1, -1, 6546, 6546, 0, 70, -1, 0, 0, 3, 6560, 6562), + (6562, -1, -1, 6546, 6546, 0, 71, -1, 0, 0, 3, 6561, 6563), + (6563, -1, -1, 6546, 6546, 0, 72, -1, 0, 0, 3, 6562, 6564), + (6564, -1, -1, 6546, 6546, 0, 73, -1, 0, 0, 3, 6563, 6565), + (6565, -1, -1, 6546, 6546, 0, 74, -1, 0, 0, 3, 6564, 6566), + (6566, -1, -1, 6546, 6546, 0, 75, -1, 0, 0, 3, 6565, 6567), + (6567, -1, -1, 6546, 6546, 0, 76, -1, 0, 0, 3, 6566, 6568), + (6568, -1, -1, 6546, 6546, 0, 77, -1, 0, 0, 3, 6567, 6569), + (6569, -1, -1, 6546, 6546, 0, 78, -1, 0, 0, 3, 6568, 6570), + (6570, -1, -1, 6546, 6546, 0, 79, -1, 0, 0, 3, 6569, 6571), + (6571, -1, -1, 6546, 6546, 0, 80, -1, 0, 0, 3, 6570, 7373), + (6601, -1, -1, 6601, 6601, 6, 72, -1, 0, 0, 14, -1, 6602), + (6602, -1, -1, 6601, 6601, 6, 73, -1, 0, 0, 14, 6601, 6603), + (6603, -1, -1, 6601, 6601, 6, 74, -1, 0, 0, 14, 6602, 6604), + (6604, -1, -1, 6601, 6601, 6, 75, -1, 0, 0, 14, 6603, 6605), + (6605, -1, -1, 6601, 6601, 6, 76, -1, 0, 0, 14, 6604, 7318), + (6606, 1597, 1597, 1597, 1597, 9, 75, 16095, 6, 10, 15, 1597, 10571), + (6607, 6607, 6607, 6607, 6607, 9, 75, 16092, 61, 600, 15, -1, 6608), + (6608, 6607, 6607, 6607, 6607, 9, 80, 16093, 61, 600, 15, 6607, 6609), + (6609, 6607, 6607, 6607, 6607, 9, 85, 16094, 61, 600, 15, 6608, 16324), + (6610, 6610, 6610, 6610, 6610, 2, 55, 16096, 41, 30, 15, -1, 10003), + (6611, -1, -1, 6611, 6611, 2, 60, -1, 0, 0, 15, -1, 6612), + (6612, -1, -1, 6611, 6611, 4, 63, -1, 0, 0, 15, 6611, 6613), + (6613, -1, -1, 6611, 6611, 6, 66, -1, 0, 0, 15, 6612, 6618), + (6614, -1, -1, 6614, 6614, 2, 60, -1, 0, 0, 15, -1, 6615), + (6615, -1, -1, 6614, 6614, 4, 63, -1, 0, 0, 15, 6614, 6616), + (6616, -1, -1, 6614, 6614, 6, 66, -1, 0, 0, 15, 6615, 10004), + (6617, 6617, 6617, 6617, 6617, 6, 83, 16097, 42, 3600, 15, -1, 10572), + (6618, -1, -1, 6611, 6611, 6, 69, -1, 0, 0, 15, 6613, 6619), + (6619, -1, -1, 6611, 6611, 6, 72, -1, 0, 0, 15, 6618, 10574), + (6630, -1, -1, 6630, 6630, 6, 70, -1, 0, 0, 15, -1, 6631), + (6631, -1, -1, 6630, 6630, 6, 70, -1, 0, 0, 15, 6630, 6632), + (6632, -1, -1, 6630, 6630, 6, 70, -1, 0, 0, 15, 6631, 6633), + (6633, -1, -1, 6630, 6630, 6, 70, -1, 0, 0, 15, 6632, 6634), + (6634, -1, -1, 6630, 6630, 6, 70, -1, 0, 0, 15, 6633, 10070), + (6635, 6635, 6635, 6635, 6635, 7, 70, 16098, 41, 600, 15, -1, -1), + (6636, -1, -1, 6636, 6636, 3, 70, -1, 0, 0, 15, -1, 6637), + (6637, -1, -1, 6636, 6636, 6, 70, -1, 0, 0, 15, 6636, 6638), + (6638, -1, -1, 6636, 6636, 9, 70, -1, 0, 0, 15, 6637, 10041), + (6639, 6639, 6639, 6639, 6639, 7, 70, 16099, 42, 300, 15, -1, 15173), + (6640, 6640, 6640, 6640, 6640, 7, 81, 16100, 43, 60, 15, -1, 12585), + (6641, -1, -1, 6641, 6641, 7, 81, -1, 0, 0, 15, -1, 6642), + (6642, -1, -1, 6641, 6641, 8, 83, -1, 0, 0, 15, 6641, 6643), + (6643, -1, -1, 6641, 6641, 9, 85, -1, 0, 0, 15, 6642, 10075), + (6644, 6644, 6644, 6644, 6644, 2, 70, 16104, 44, 20, 15, -1, 12586), + (6645, 6645, 6645, 6645, 6645, 6, 80, 16105, 45, 60, 15, -1, 13107), + (6646, 6646, 6646, 6646, 6646, 6, 70, 16106, 46, 6, 15, -1, -1), + (6660, -1, -1, 1307, 1307, 5, 73, -1, 0, 0, 15, 1311, 6661), + (6661, -1, -1, 1307, 1307, 5, 74, -1, 0, 0, 15, 6660, 6662), + (6662, -1, -1, 1307, 1307, 5, 75, -1, 0, 0, 15, 6661, 13210), + (6663, 6663, 6663, 6663, 6663, 7, 73, 16107, 59, 600, 15, -1, 6664), + (6664, 6663, 6663, 6663, 6663, 7, 75, 16108, 59, 600, 15, 6663, 6665), + (6665, 6663, 6663, 6663, 6663, 7, 77, 16109, 59, 600, 15, 6664, 10162), + (6666, -1, -1, 6666, 6666, 8, 81, -1, 0, 0, 15, -1, 6667), + (6667, -1, -1, 6666, 6666, 8, 83, -1, 0, 0, 15, 6666, -1), + (6668, -1, -1, 6668, 6668, 3, 76, -1, 0, 0, 15, -1, 6669), + (6669, -1, -1, 6668, 6668, 3, 77, -1, 0, 0, 15, 6668, 6670), + (6670, -1, -1, 6668, 6668, 3, 78, -1, 0, 0, 15, 6669, -1), + (6671, 6671, 6671, 6671, 6671, 4, 65, 16148, 60, 60, 15, -1, -1), + (6672, 6672, 6672, 6672, 6672, 4, 67, 16149, 60, 60, 15, -1, -1), + (6673, 6673, 6673, 6673, 6673, 4, 69, 16150, 60, 60, 15, -1, -1), + (6674, 6674, 6674, 6674, 6674, 4, 71, 16151, 60, 60, 15, -1, -1), + (6675, 6675, 6675, 6675, 6675, 4, 73, 16152, 60, 60, 15, -1, -1), + (6676, 6676, 6676, 6676, 6676, 4, 75, 16153, 60, 60, 15, -1, -1), + (6691, 6691, 6691, 6691, 6691, 9, 81, 16114, 41, 30, 15, -1, -1), + (6692, 6692, 6692, 6692, 6692, 7, 65, 16115, 42, 600, 15, -1, 6693), + (6693, 6692, 6692, 6692, 6692, 7, 70, 16116, 42, 600, 15, 6692, 6694), + (6694, 6692, 6692, 6692, 6692, 7, 75, 16117, 42, 600, 15, 6693, 6695), + (6695, 6692, 6692, 6692, 6692, 7, 80, 16118, 42, 600, 15, 6694, 6696), + (6696, 6692, 6692, 6692, 6692, 7, 85, 16119, 42, 600, 15, 6695, 5342), + (6697, -1, -1, 6697, 6697, 7, 65, -1, 0, 0, 15, -1, 6698), + (6698, -1, -1, 6697, 6697, 7, 70, -1, 0, 0, 15, 6697, 6699), + (6699, -1, -1, 6697, 6697, 7, 75, -1, 0, 0, 15, 6698, 6700), + (6700, -1, -1, 6697, 6697, 7, 80, -1, 0, 0, 15, 6699, 6701), + (6701, -1, -1, 6697, 6697, 7, 85, -1, 0, 0, 15, 6700, -1), + (6702, 6702, 6702, 6702, 6702, 9, 75, 16120, 43, 120, 15, -1, -1), + (6703, -1, -1, 6703, 6703, 3, 65, -1, 0, 0, 15, -1, 6704), + (6704, -1, -1, 6703, 6703, 3, 65, -1, 0, 0, 15, 6703, 6705), + (6705, -1, -1, 6703, 6703, 3, 65, -1, 0, 0, 15, 6704, 10176), + (6706, 6706, 6706, 6706, 6706, 7, 75, 16121, 44, 600, 15, -1, 6707), + (6707, 6706, 6706, 6706, 6706, 7, 80, 16122, 44, 600, 15, 6706, 6708), + (6708, 6706, 6706, 6706, 6706, 7, 85, 16123, 44, 600, 15, 6707, 10179), + (6709, -1, -1, 6709, 6709, 3, 60, -1, 0, 0, 15, -1, 6710), + (6710, -1, -1, 6709, 6709, 3, 61, -1, 0, 0, 15, 6709, 6711), + (6711, -1, -1, 6709, 6709, 3, 62, -1, 0, 0, 15, 6710, -1), + (6712, -1, -1, 6712, 6712, 7, 65, -1, 0, 0, 15, -1, 6713), + (6713, -1, -1, 6712, 6712, 7, 70, -1, 0, 0, 15, 6712, 6714), + (6714, -1, -1, 6712, 6712, 7, 75, -1, 0, 0, 15, 6713, 6715), + (6715, -1, -1, 6712, 6712, 7, 80, -1, 0, 0, 15, 6714, 6716), + (6716, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 15, 6715, 10182), + (6750, 6750, 6750, 6750, 6750, 9, 85, 16127, 60, 120, 15, -1, 13899), + (6751, -1, -1, 6751, 6751, 6, 75, -1, 0, 0, 15, -1, 6752), + (6752, -1, -1, 6751, 6751, 6, 75, -1, 0, 0, 15, 6751, 6753), + (6753, -1, -1, 6751, 6751, 6, 75, -1, 0, 0, 15, 6752, 6768), + (6754, 6754, 6754, 6754, 6754, 7, 70, 16130, 41, 1200, 15, -1, 10053), + (6755, 6755, 6755, 6755, 6755, 7, 81, 16131, 42, 900, 15, -1, 6756), + (6756, 6755, 6755, 6755, 6755, 9, 83, 16132, 42, 900, 15, 6755, 6757), + (6757, 6755, 6755, 6755, 6755, 12, 85, 16133, 42, 900, 15, 6756, 13542), + (6758, 6758, 6758, 6758, 6758, 3, 81, 16134, 43, 900, 15, -1, 6759), + (6759, 6758, 6758, 6758, 6758, 6, 83, 16135, 43, 900, 15, 6758, 6760), + (6760, 6758, 6758, 6758, 6758, 9, 85, 16136, 43, 900, 15, 6759, 10054), + (6761, -1, -1, 6761, 6761, 3, 65, -1, 0, 0, 15, -1, 6762), + (6762, -1, -1, 6761, 6761, 6, 65, -1, 0, 0, 15, 6761, 6763), + (6763, -1, -1, 6761, 6761, 9, 65, -1, 0, 0, 15, 6762, 6085), + (6764, 6764, 6764, 6764, 6764, 7, 75, 16137, 52, 600, 15, -1, 10057), + (6765, -1, -1, 6765, 6765, 3, 70, -1, 0, 0, 15, -1, 6766), + (6766, -1, -1, 6765, 6765, 6, 75, -1, 0, 0, 15, 6765, 6767), + (6767, -1, -1, 6765, 6765, 9, 80, -1, 0, 0, 15, 6766, 10058), + (6768, -1, -1, 6751, 6751, 6, 75, -1, 0, 0, 15, 6753, 6769), + (6769, -1, -1, 6751, 6751, 6, 75, -1, 0, 0, 15, 6768, 10769), + (6791, -1, -1, 6791, 6791, 6, 75, -1, 0, 0, 15, -1, 6792), + (6792, -1, -1, 6791, 6791, 6, 80, -1, 0, 0, 15, 6791, 6793), + (6793, -1, -1, 6791, 6791, 6, 85, -1, 0, 0, 15, 6792, 10044), + (6794, 6794, 6794, 6794, 6794, 6, 75, 16142, 41, 60, 15, -1, -1), + (6815, 6815, 6815, 6815, 6815, 8, 75, 16144, 60, 600, 15, -1, 6816), + (6816, 6815, 6815, 6815, 6815, 8, 80, 16145, 60, 600, 15, 6815, 6817), + (6817, 6815, 6815, 6815, 6815, 8, 85, 16146, 60, 600, 15, 6816, 10200), + (6818, 6818, 6818, 6818, 6818, 6, 70, 16147, 44, 20, 15, -1, -1), + (6819, -1, -1, 6819, 6819, 6, 72, -1, 0, 0, 15, -1, 6820), + (6820, -1, -1, 6819, 6819, 6, 74, -1, 0, 0, 15, 6819, 6821), + (6821, -1, -1, 6819, 6819, 6, 76, -1, 0, 0, 15, 6820, 10203), + (6822, 6822, 6822, 6822, 6822, 12, 80, 16154, 42, 120, 15, -1, 13683), + (6823, -1, -1, 6823, 6823, 4, 65, -1, 0, 0, 15, -1, 6824), + (6824, -1, -1, 6823, 6823, 4, 67, -1, 0, 0, 15, 6823, 6825), + (6825, -1, -1, 6823, 6823, 4, 69, -1, 0, 0, 15, 6824, 6826), + (6826, -1, -1, 6823, 6823, 4, 71, -1, 0, 0, 15, 6825, 6827), + (6827, -1, -1, 6823, 6823, 4, 73, -1, 0, 0, 15, 6826, 10206), + (6828, 6828, 6828, 6828, 6828, 12, 80, 16155, 43, 60, 15, -1, 10208), + (6870, -1, -1, 6870, 6870, 6, 75, -1, 0, 0, 15, -1, 6871), + (6871, -1, -1, 6870, 6870, 6, 75, -1, 0, 0, 15, 6870, 6872), + (6872, -1, -1, 6870, 6870, 6, 75, -1, 0, 0, 15, 6871, 10130), + (6873, -1, -1, 255, 255, 3, 76, -1, 0, 0, 15, -1, 6874), + (6874, -1, -1, 255, 255, 6, 76, -1, 0, 0, 15, 6873, 6875), + (6875, -1, -1, 255, 255, 9, 76, -1, 0, 0, 15, 6874, 10133), + (6876, -1, -1, 6375, 6375, 6, 76, -1, 0, 0, 15, -1, 6877), + (6877, -1, -1, 6375, 6375, 6, 77, -1, 0, 0, 15, 6876, 6878), + (6878, -1, -1, 6375, 6375, 6, 78, -1, 0, 0, 15, 6877, 10136), + (6879, -1, -1, 649, 649, 2, 66, -1, 0, 0, 15, -1, 6880), + (6880, -1, -1, 649, 649, 4, 68, -1, 0, 0, 15, 6879, 6881), + (6881, -1, -1, 649, 649, 6, 70, -1, 0, 0, 15, 6880, -1), + (6882, -1, -1, 776, 776, 3, 70, -1, 0, 0, 15, -1, 6883), + (6883, -1, -1, 776, 776, 3, 70, -1, 0, 0, 15, 6882, 6884), + (6884, -1, -1, 776, 776, 3, 70, -1, 0, 0, 15, 6883, -1), + (6900, -1, -1, 6935, 6935, 6, 81, -1, 0, 0, 16, 6937, 6901), + (6901, -1, -1, 6935, 6935, 6, 82, -1, 0, 0, 16, 6900, 6902), + (6902, -1, -1, 6935, 6935, 6, 83, -1, 0, 0, 16, 6901, 6903), + (6903, -1, -1, 6935, 6935, 6, 84, -1, 0, 0, 16, 6902, 6904), + (6904, -1, -1, 6935, 6935, 6, 85, -1, 0, 0, 16, 6903, 14196), + (6905, -1, -1, 551, 551, 5, 81, -1, 0, 0, 16, 1637, 6906), + (6906, -1, -1, 551, 551, 5, 83, -1, 0, 0, 16, 6905, 6907), + (6907, -1, -1, 551, 551, 5, 85, -1, 0, 0, 16, 6906, 12843), + (6908, -1, -1, 6908, 6908, 6, 81, -1, 0, 0, 16, -1, 6909), + (6909, -1, -1, 6908, 6908, 6, 83, -1, 0, 0, 16, 6908, 6910), + (6910, -1, -1, 6908, 6908, 6, 85, -1, 0, 0, 16, 6909, 14199), + (6911, -1, -1, 1143, 1143, 5, 65, -1, 0, 0, 16, 1168, 6912), + (6912, -1, -1, 1143, 1143, 7, 65, -1, 0, 0, 16, 6911, 6913), + (6913, -1, -1, 1143, 1143, 9, 65, -1, 0, 0, 16, 6912, -1), + (6930, 6930, 6930, 6930, 6930, 12, 80, 16156, 13, 60, 15, -1, -1), + (6931, 6931, 6931, 6931, 6931, 12, 85, 16157, 41, 600, 15, -1, 10319), + (6932, 6932, 6932, 6932, 6932, 7, 81, 16158, 42, 1200, 15, -1, 6933), + (6933, 6932, 6932, 6932, 6932, 7, 83, 16159, 42, 1200, 15, 6932, 6934), + (6934, 6932, 6932, 6932, 6932, 7, 85, 16160, 42, 1200, 15, 6933, 10320), + (6935, -1, -1, 6935, 6935, 6, 75, -1, 0, 0, 15, -1, 6936), + (6936, -1, -1, 6935, 6935, 6, 77, -1, 0, 0, 15, 6935, 6937), + (6937, -1, -1, 6935, 6935, 6, 79, -1, 0, 0, 15, 6936, 6900), + (6938, -1, -1, 6938, 6938, 7, 81, -1, 0, 0, 15, -1, 6939), + (6939, -1, -1, 6938, 6938, 7, 83, -1, 0, 0, 15, 6938, 6940), + (6940, -1, -1, 6938, 6938, 7, 85, -1, 0, 0, 15, 6939, -1), + (6941, -1, -1, 6941, 6941, 6, 81, -1, 0, 0, 15, -1, 6942), + (6942, -1, -1, 6941, 6941, 6, 81, -1, 0, 0, 15, 6941, 6943), + (6943, -1, -1, 6941, 6941, 6, 81, -1, 0, 0, 15, 6942, 6944), + (6944, -1, -1, 6941, 6941, 6, 81, -1, 0, 0, 15, 6943, 6945), + (6945, -1, -1, 6941, 6941, 6, 81, -1, 0, 0, 15, 6944, -1), + (6970, 6970, 6970, 6970, 6970, 6, 70, 16167, 61, 6, 15, -1, -1), + (6971, 6971, 6971, 6971, 6971, 7, 78, 16168, 41, 600, 15, -1, 6972), + (6972, 6971, 6971, 6971, 6971, 7, 80, 16169, 41, 600, 15, 6971, 6973), + (6973, 6971, 6971, 6971, 6971, 7, 82, 16170, 41, 600, 15, 6972, 10288), + (6974, -1, -1, 6974, 6974, 5, 81, -1, 0, 0, 15, -1, 6975), + (6975, -1, -1, 6974, 6974, 5, 83, -1, 0, 0, 15, 6974, 6976), + (6976, -1, -1, 6974, 6974, 5, 85, -1, 0, 0, 15, 6975, 10291), + (6977, -1, -1, 6977, 6977, 5, 81, -1, 0, 0, 15, -1, 6978), + (6978, -1, -1, 6977, 6977, 5, 83, -1, 0, 0, 15, 6977, 6979), + (6979, -1, -1, 6977, 6977, 5, 85, -1, 0, 0, 15, 6978, 12840), + (6980, -1, -1, 6980, 6980, 5, 81, -1, 0, 0, 15, -1, 6981), + (6981, -1, -1, 6980, 6980, 5, 83, -1, 0, 0, 15, 6980, 6982), + (6982, -1, -1, 6980, 6980, 5, 85, -1, 0, 0, 15, 6981, 12834), + (6983, 6983, 6983, 6983, 6983, 7, 83, 16439, 66, 720, 15, -1, 16246), + (6984, 6984, 6984, 6984, 6984, 6, 73, 16172, 60, 60, 15, -1, 10294), + (6985, 6985, 6985, 6985, 6985, 6, 73, 16173, 60, 60, 15, -1, 10295), + (6986, 6986, 6986, 6986, 6986, 6, 73, 16174, 60, 60, 15, -1, 10296), + (6987, -1, -1, 6987, 6987, 12, 81, -1, 0, 0, 15, -1, -1), + (6988, -1, -1, 6988, 6988, 5, 83, 0, 0, 0, 16, -1, 6989), + (6989, -1, -1, 6988, 6988, 5, 84, 0, 0, 0, 16, 6988, 6990), + (6990, -1, -1, 6988, 6988, 5, 83, 0, 0, 0, 16, 6989, 14278), + (7000, 7000, 7000, 7000, 7000, 4, 65, 12748, 31, 600, 3, -1, -1), + (7002, 7002, 7002, 7002, 7002, 4, 65, 12750, 31, 600, 3, -1, -1), + (7003, 7003, 7003, 7003, 7003, 4, 65, 12751, 31, 600, 3, -1, -1), + (7004, 7004, 7004, 7004, 7004, 4, 65, 12752, 31, 300, 3, -1, -1), + (7005, -1, -1, 7005, 7005, 2, 73, -1, 0, 0, 15, -1, 7006), + (7006, -1, -1, 7005, 7005, 2, 74, -1, 0, 0, 15, 7005, 7007), + (7007, -1, -1, 7005, 7005, 2, 75, -1, 0, 0, 15, 7006, 15632), + (7008, -1, -1, 1604, 1604, 9, 81, -1, 0, 0, 16, 7133, 7009), + (7009, -1, -1, 1604, 1604, 12, 83, -1, 0, 0, 16, 7008, 12612), + (7010, -1, -1, 7010, 7010, 6, 81, -1, 0, 0, 16, -1, 7011), + (7011, -1, -1, 7010, 7010, 6, 83, -1, 0, 0, 16, 7010, 7012), + (7012, -1, -1, 7010, 7010, 6, 85, -1, 0, 0, 16, 7011, 7013), + (7013, -1, -1, 7010, 7010, 6, 85, -1, 0, 0, 16, 7012, 7014), + (7014, -1, -1, 7010, 7010, 6, 85, -1, 0, 0, 16, 7013, 7015), + (7015, -1, -1, 7010, 7010, 6, 85, -1, 0, 0, 16, 7014, 13533), + (7016, 7016, 7016, 7016, 7016, 5, 85, 21658, 31, 600, 3, -1, -1), + (7017, 7017, 7017, 7017, 7017, 5, 85, 21659, 31, 600, 3, -1, -1), + (7018, 7018, 7018, 7018, 7018, 5, 85, 21660, 31, 600, 3, -1, -1), + (7019, 7019, 7019, 7019, 7019, 5, 85, 21661, 31, 600, 3, -1, -1), + (7020, 7020, 7020, 7020, 7020, 0, 85, 21658, 31, 600, 3, -1, -1), + (7021, 7021, 7021, 7021, 7021, 0, 85, 21659, 31, 600, 3, -1, -1), + (7022, 7022, 7022, 7022, 7022, 0, 85, 21660, 31, 600, 3, -1, -1), + (7023, 7023, 7023, 7023, 7023, 0, 85, 21661, 31, 600, 3, -1, -1), + (7024, 7024, 7024, 7024, 7024, 0, 0, 9475, 31, 600, 12, -1, -1), + (7025, 7025, 7025, 7025, 7025, 0, 0, 9477, 31, 600, 12, -1, -1), + (7026, 7026, 7026, 7026, 7026, 0, 0, 9478, 31, 600, 12, -1, -1), + (7027, 7027, 7027, 7027, 7027, 0, 0, 9479, 31, 600, 12, -1, -1), + (7028, 7028, 7028, 7028, 7028, 0, 0, 12748, 31, 600, 3, -1, -1), + (7030, 7030, 7030, 7030, 7030, 0, 0, 12750, 31, 600, 3, -1, -1), + (7031, 7031, 7031, 7031, 7031, 0, 0, 12751, 31, 600, 3, -1, -1), + (7032, 7032, 7032, 7032, 7032, 0, 0, 12752, 31, 300, 3, -1, -1), + (7033, -1, -1, 7033, 7033, 6, 85, 0, 0, 0, 16, -1, 7034), + (7034, -1, -1, 7033, 7033, 9, 85, 0, 0, 0, 16, 7033, 7035), + (7035, -1, -1, 7033, 7033, 12, 85, 0, 0, 0, 16, 7034, 15746), + (7036, -1, -1, 7036, 7036, 7, 81, -1, 0, 0, 16, -1, 7037), + (7037, -1, -1, 7036, 7036, 9, 81, -1, 0, 0, 16, 7036, 7038), + (7038, -1, -1, 7036, 7036, 12, 81, -1, 0, 0, 16, 7037, 10579), + (7050, -1, -1, 446, 735, 5, 67, -1, 0, 0, 8, 448, 7051), + (7051, -1, -1, 446, 735, 5, 68, -1, 0, 0, 8, 7050, 7052), + (7052, -1, -1, 446, 735, 5, 69, -1, 0, 0, 8, 7051, 7053), + (7053, -1, -1, 446, 735, 7, 72, -1, 0, 0, 12, 7052, 7054), + (7054, -1, -1, 446, 735, 7, 73, -1, 0, 0, 12, 7053, 7055), + (7055, -1, -1, 446, 735, 7, 74, -1, 0, 0, 12, 7054, 7063), + (7056, -1, -1, 735, 735, 5, 67, -1, 0, 0, 8, 737, 7057), + (7057, -1, -1, 735, 735, 5, 68, -1, 0, 0, 8, 7056, 7058), + (7058, -1, -1, 735, 735, 5, 69, -1, 0, 0, 8, 7057, 7059), + (7059, -1, -1, 735, 735, 7, 72, -1, 0, 0, 12, 7058, 7060), + (7060, -1, -1, 735, 735, 7, 73, -1, 0, 0, 12, 7059, 7061), + (7061, -1, -1, 735, 735, 7, 74, -1, 0, 0, 12, 7060, 7066), + (7062, -1, -1, 7062, 7062, 3, 51, -1, 0, 0, 0, -1, -1), + (7063, -1, -1, 446, 735, 8, 76, -1, 0, 0, 14, 7055, 7064), + (7064, -1, -1, 446, 735, 8, 77, -1, 0, 0, 14, 7063, 7065), + (7065, -1, -1, 446, 735, 8, 78, -1, 0, 0, 14, 7064, 7622), + (7066, -1, -1, 735, 735, 8, 76, -1, 0, 0, 14, 7061, 7067), + (7067, -1, -1, 735, 735, 8, 77, -1, 0, 0, 14, 7066, 7068), + (7068, -1, -1, 735, 735, 8, 78, -1, 0, 0, 14, 7067, 7625), + (7069, 7069, 7069, 7069, 7069, 3, 71, 13219, 39, 7, 14, -1, -1), + (7100, -1, -1, 7100, 7100, 6, 76, -1, 0, 0, 14, -1, 7101), + (7101, -1, -1, 7100, 7100, 6, 77, -1, 0, 0, 14, 7100, 7102), + (7102, -1, -1, 7100, 7100, 6, 78, -1, 0, 0, 14, 7101, 7323), + (7103, -1, -1, 7103, 7103, 2, 65, -1, 0, 0, 14, -1, 7104), + (7104, -1, -1, 7103, 7103, 2, 65, -1, 0, 0, 14, 7103, 7105), + (7105, -1, -1, 7103, 7103, 2, 65, -1, 0, 0, 14, 7104, 7326), + (7106, -1, -1, 7106, 7106, 6, 73, -1, 0, 0, 14, -1, 7107), + (7107, -1, -1, 7106, 7106, 7, 76, -1, 0, 0, 14, 7106, 7108), + (7108, -1, -1, 7106, 7106, 10, 79, -1, 0, 0, 14, 7107, -1), + (7109, 1351, 1351, 1351, 1351, 8, 82, 13499, 5, 30, 15, 6133, 13109), + (7110, 4849, 4849, 4849, 4849, 7, 81, 13593, 7, 1800, 15, 6134, 13914), + (7111, 54006, 54006, 54006, 54006, 7, 81, 13594, 18, 180, 15, 6135, 10006), + (7112, -1, -1, 6564, 6564, 6, 78, -1, 0, 0, 15, 6285, 7113), + (7113, -1, -1, 6564, 6564, 7, 81, -1, 0, 0, 15, 7112, 7114), + (7114, -1, -1, 6564, 6564, 10, 84, -1, 0, 0, 15, 7113, 10007), + (7115, 6565, 6565, 6565, 6565, 7, 81, 13595, 17, 45, 15, 6286, 10010), + (7116, -1, -1, 489, 489, 3, 68, -1, 0, 0, 15, 491, 7117), + (7117, -1, -1, 489, 489, 3, 69, -1, 0, 0, 15, 7116, 7118), + (7118, -1, -1, 489, 489, 3, 70, -1, 0, 0, 15, 7117, -1), + (7119, 912, 912, 912, 912, 3, 71, 13496, 4, 3600, 15, 1332, 7120), + (7120, 912, 912, 912, 912, 6, 73, 13497, 4, 3600, 15, 7119, 7121), + (7121, 912, 912, 912, 912, 9, 75, 13498, 4, 3600, 15, 7120, 10011), + (7122, -1, -1, 4844, 4844, 5, 76, -1, 0, 0, 15, 4848, 7123), + (7123, -1, -1, 4844, 4844, 5, 77, -1, 0, 0, 15, 7122, 7124), + (7124, -1, -1, 4844, 4844, 5, 78, -1, 0, 0, 15, 7123, 7125), + (7125, -1, -1, 4844, 4844, 5, 79, -1, 0, 0, 15, 7124, 7126), + (7126, -1, -1, 4844, 4844, 5, 80, -1, 0, 0, 15, 7125, 7686), + (7127, 4860, 4860, 4860, 4860, 12, 85, 13599, 13, 60, 15, 5606, -1), + (7128, -1, -1, 492, 492, 2, 68, -1, 0, 0, 15, 494, 7129), + (7129, -1, -1, 492, 492, 2, 69, -1, 0, 0, 15, 7128, 7130), + (7130, -1, -1, 492, 492, 2, 70, -1, 0, 0, 15, 7129, 10576), + (7131, -1, -1, 1604, 1604, 7, 75, -1, 0, 0, 15, 6034, 7132), + (7132, -1, -1, 1604, 1604, 9, 77, -1, 0, 0, 15, 7131, 7133), + (7133, -1, -1, 1604, 1604, 12, 79, -1, 0, 0, 15, 7132, 7008), + (7134, -1, -1, 1543, 1543, 7, 81, -1, 0, 0, 15, 6044, 7135), + (7135, -1, -1, 1543, 1543, 9, 83, -1, 0, 0, 15, 7134, 7136), + (7136, -1, -1, 1543, 1543, 12, 85, -1, 0, 0, 15, 7135, 10165), + (7137, -1, -1, 6559, 6559, 6, 79, -1, 0, 0, 15, 6274, 7138), + (7138, -1, -1, 6559, 6559, 7, 81, -1, 0, 0, 15, 7137, 7139), + (7139, -1, -1, 6559, 6559, 10, 83, -1, 0, 0, 15, 7138, -1), + (7143, 6328, 6328, 6328, 6328, 7, 79, 13601, 10, 600, 15, 6330, 7144), + (7144, 6328, 6328, 6328, 6328, 7, 81, 13602, 10, 600, 15, 7143, 7145), + (7145, 6328, 6328, 6328, 6328, 7, 83, 13603, 10, 600, 15, 7144, 10168), + (7146, -1, -1, 878, 878, 7, 81, -1, 0, 0, 15, 6332, 7147), + (7147, -1, -1, 878, 878, 7, 83, -1, 0, 0, 15, 7146, 10171), + (7148, -1, -1, 1304, 1304, 7, 81, -1, 0, 0, 15, 6031, 7149), + (7149, -1, -1, 1304, 1304, 9, 83, -1, 0, 0, 15, 7148, 7150), + (7150, -1, -1, 1304, 1304, 12, 85, -1, 0, 0, 15, 7149, 10865), + (7151, -1, -1, 846, 846, 7, 81, -1, 0, 0, 15, 6037, 7152), + (7152, -1, -1, 846, 846, 9, 83, -1, 0, 0, 15, 7151, 7153), + (7153, -1, -1, 846, 846, 12, 85, -1, 0, 0, 15, 7152, 10173), + (7154, 1352, 1352, 1352, 1352, 6, 81, 13613, 3, 60, 15, 6318, 7155), + (7155, 1352, 1352, 1352, 1352, 6, 83, 13614, 3, 60, 15, 7154, 7156), + (7156, 1352, 1352, 1352, 1352, 6, 85, 13615, 3, 60, 15, 7155, 10113), + (7157, 1358, 1358, 1358, 1358, 6, 81, 13610, 3, 60, 15, 6312, 7158), + (7158, 1358, 1358, 1358, 1358, 6, 83, 13611, 3, 60, 15, 7157, 7159), + (7159, 1358, 1358, 1358, 1358, 6, 85, 13612, 3, 60, 15, 7158, 10116), + (7160, -1, -1, 4801, 4801, 6, 79, -1, 0, 0, 15, 4803, 7161), + (7161, -1, -1, 4801, 4801, 6, 81, -1, 0, 0, 15, 7160, 7162), + (7162, -1, -1, 4801, 4801, 6, 83, -1, 0, 0, 15, 7161, 10122), + (7163, -1, -1, 820, 820, 5, 81, -1, 0, 0, 15, 5919, 7164), + (7164, -1, -1, 820, 820, 5, 83, -1, 0, 0, 15, 7163, 7165), + (7165, -1, -1, 820, 820, 5, 85, -1, 0, 0, 15, 7164, 10660), + (7166, -1, -1, 6343, 6343, 6, 79, -1, 0, 0, 15, 6345, 7167), + (7167, -1, -1, 6343, 6343, 6, 81, -1, 0, 0, 15, 7166, 7168), + (7168, -1, -1, 6343, 6343, 6, 83, -1, 0, 0, 15, 7167, -1), + (7169, -1, -1, 6020, 6020, 2, 81, -1, 0, 0, 15, 6059, 7170), + (7170, -1, -1, 6020, 6020, 2, 83, -1, 0, 0, 15, 7169, 7171), + (7171, -1, -1, 6020, 6020, 2, 85, -1, 0, 0, 15, 7170, 10663), + (7172, 1355, 1355, 1355, 1355, 6, 81, 13607, 3, 60, 15, 5916, 7173), + (7173, 1355, 1355, 1355, 1355, 6, 83, 13608, 3, 60, 15, 7172, 7174), + (7174, 1355, 1355, 1355, 1355, 6, 85, 13609, 3, 60, 15, 7173, 10119), + (7175, -1, -1, 611, 611, 2, 68, -1, 0, 0, 15, 615, 7176), + (7176, -1, -1, 611, 611, 2, 69, -1, 0, 0, 15, 7175, 7177), + (7177, -1, -1, 611, 611, 2, 70, -1, 0, 0, 15, 7176, 10124), + (7178, 4854, 4854, 4854, 4854, 7, 81, 13616, 8, 600, 15, 5766, 7179), + (7179, 4854, 4854, 4854, 4854, 9, 83, 13617, 8, 600, 15, 7178, 7180), + (7180, 4854, 4854, 4854, 4854, 12, 85, 13618, 8, 600, 15, 7179, 10323), + (7184, 1348, 1348, 1348, 1348, 12, 91, 13622, 0, 3600, 18, 5772, 7185), + (7187, 1178, 1178, 1178, 1178, 7, 81, 13625, 4, 900, 15, 5781, 7188), + (7188, 1178, 1178, 1178, 1178, 8, 82, 13626, 4, 900, 15, 7187, 7189), + (7189, 1178, 1178, 1178, 1178, 9, 83, 13627, 4, 900, 15, 7188, 10326), + (7196, -1, -1, 5776, 5776, 7, 81, -1, 0, 0, 16, 5778, 7197), + (7197, -1, -1, 5776, 5776, 9, 83, -1, 0, 0, 16, 7196, 7198), + (7198, -1, -1, 5776, 5776, 12, 85, -1, 0, 0, 16, 7197, 13043), + (7199, 1274, 1274, 1274, 1274, 9, 83, 13657, 9, 540, 15, 5949, 7200), + (7200, 1274, 1274, 1274, 1274, 10, 84, 13658, 9, 540, 15, 7199, 7201), + (7201, 1274, 1274, 1274, 1274, 12, 85, 13659, 9, 540, 15, 7200, 10209), + (7202, 1510, -1, 1510, 1510, 12, 75, 13664, 13, 2160, 15, 1510, 10212), + (7203, 184, 184, 184, 184, 10, 84, 13660, 5, 4320, 15, 5953, -1), + (7204, -1, -1, 5264, 5264, 7, 81, -1, 0, 0, 15, 5943, 7205), + (7205, -1, -1, 5264, 5264, 8, 82, -1, 0, 0, 15, 7204, 7206), + (7206, -1, -1, 5264, 5264, 9, 83, -1, 0, 0, 15, 7205, 7207), + (7207, -1, -1, 5264, 5264, 10, 84, -1, 0, 0, 15, 7206, 7208), + (7208, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 15, 7207, 10213), + (7209, 4927, 4927, 4927, 4927, 9, 76, 13656, 14, 600, 15, 4927, 10218), + (7210, -1, -1, 839, 839, 6, 75, -1, 0, 0, 15, 5329, 7211), + (7211, -1, -1, 839, 839, 6, 75, -1, 0, 0, 15, 7210, 7212), + (7212, -1, -1, 839, 839, 6, 75, -1, 0, 0, 15, 7211, 7213), + (7213, -1, -1, 839, 839, 6, 75, -1, 0, 0, 15, 7212, 7214), + (7214, -1, -1, 839, 839, 6, 75, -1, 0, 0, 15, 7213, 10219), + (7215, -1, -1, 4861, 4861, 9, 83, -1, 0, 0, 15, 5956, 7216), + (7216, -1, -1, 4861, 4861, 12, 85, -1, 0, 0, 15, 7215, 7682), + (7217, 967, 967, 967, 967, 6, 81, 13661, 10, 1800, 15, 6466, 7218), + (7218, 967, 967, 967, 967, 6, 82, 13662, 10, 1800, 15, 7217, 7219), + (7219, 967, 967, 967, 967, 6, 83, 13663, 10, 1800, 15, 7218, 10224), + (7220, -1, -1, 5295, 5295, 6, 81, -1, 0, 0, 15, 6533, 7221), + (7221, -1, -1, 5295, 5295, 6, 83, -1, 0, 0, 15, 7220, 7222), + (7222, -1, -1, 5295, 5295, 6, 85, -1, 0, 0, 15, 7221, 10227), + (7223, 6290, 6290, 6290, 6290, 7, 81, 13689, 0, 1, 15, 6295, 7224), + (7224, 6290, 6290, 6290, 6290, 9, 83, 13690, 0, 1, 15, 7223, 7225), + (7225, 6290, 6290, 6290, 6290, 12, 85, 13691, 0, 1, 15, 7224, 11064), + (7226, 619, 619, 619, 619, 6, 78, 13686, 6, 900, 15, 6298, 7227), + (7227, 619, 619, 619, 619, 6, 78, 13687, 6, 900, 15, 7226, 7228), + (7228, 619, 619, 619, 619, 6, 78, 13688, 6, 900, 15, 7227, 10230), + (7229, 4944, -1, 4944, 4944, 7, 81, 13677, 0, 1, 15, 6157, 7230), + (7230, 4944, -1, 4944, 4944, 9, 83, 13678, 0, 1, 15, 7229, 7231), + (7231, 4944, -1, 4944, 4944, 12, 85, 13679, 0, 1, 15, 7230, 11067), + (7232, -1, -1, 1210, 1210, 7, 81, -1, 0, 0, 15, 5576, 7233), + (7233, -1, -1, 1210, 1210, 9, 83, -1, 0, 0, 15, 7232, 7234), + (7234, -1, -1, 1210, 1210, 12, 85, -1, 0, 0, 15, 7233, 12523), + (7235, 923, 923, 923, 923, 9, 82, 13673, 8, 60, 15, 6151, -1), + (7236, 922, 922, 922, 922, 9, 83, 13672, 8, 60, 15, 6150, -1), + (7237, 516, 516, 516, 516, 6, 77, 13692, 5, 480, 15, 6398, 10233), + (7238, 155, 155, 155, 155, 12, 82, 13693, 8, 60, 15, 5289, 14324), + (7239, 1334, 1334, 1334, 1334, 9, 83, 13674, 11, 4320, 15, 6154, 7240), + (7240, 1334, 1334, 1334, 1334, 10, 84, 13675, 11, 4320, 15, 7239, 7241), + (7241, 1334, 1334, 1334, 1334, 12, 85, 13676, 11, 4320, 15, 7240, 10234), + (7242, 1478, -1, 1478, 1478, 9, 83, 13680, 0, 1, 15, 6163, 7243), + (7243, 1478, -1, 1478, 1478, 10, 84, 13681, 0, 1, 15, 7242, 7244), + (7244, 1478, -1, 1478, 1478, 12, 85, 13682, 0, 1, 15, 7243, 11070), + (7245, 921, 921, 921, 921, 9, 84, 13671, 8, 60, 15, 6149, -1), + (7246, 4915, 4915, 4915, 4915, 7, 81, 13683, 7, 4320, 15, 5609, 7247), + (7247, 4915, 4915, 4915, 4915, 9, 83, 13684, 7, 4320, 15, 7246, 7248), + (7248, 4915, 4915, 4915, 4915, 12, 85, 13685, 7, 4320, 15, 7247, -1), + (7249, 167, 167, 167, 167, 10, 84, 13703, 14, 900, 15, 5879, 8343), + (7250, 520, 520, 520, 520, 12, 81, 13704, 6, 540, 15, 5885, 7251), + (7251, 520, 520, 520, 520, 12, 83, 13705, 6, 540, 15, 7250, 7252), + (7252, 520, 520, 520, 520, 12, 85, 13706, 6, 540, 15, 7251, 10252), + (7253, 4903, 4903, 4903, 4903, 9, 81, 13707, 9, 1320, 15, 5892, 10255), + (7254, 4906, 4906, 4906, 4906, 9, 81, 13708, 9, 1320, 15, 5893, 10256), + (7255, 4909, 4909, 4909, 4909, 9, 81, 13709, 16, 1320, 15, 5894, 10257), + (7256, 4912, 4912, 4912, 4912, 9, 81, 13710, 16, 1320, 15, 5895, 10258), + (7257, 616, 616, 616, 616, 6, 78, 13711, 7, 900, 15, 6256, 7258), + (7258, 616, 616, 616, 616, 7, 81, 13712, 7, 900, 15, 7257, 7259), + (7259, 616, 616, 616, 616, 10, 84, 13713, 7, 900, 15, 7258, 10259), + (7260, -1, -1, 1504, 1504, 5, 81, -1, 0, 0, 15, 5882, 7261), + (7261, -1, -1, 1504, 1504, 5, 83, -1, 0, 0, 15, 7260, 7262), + (7262, -1, -1, 1504, 1504, 5, 85, -1, 0, 0, 15, 7261, -1), + (7263, -1, -1, 1577, 1577, 7, 81, -1, 0, 0, 15, 5888, 7264), + (7264, -1, -1, 1577, 1577, 9, 83, -1, 0, 0, 15, 7263, 7265), + (7265, -1, -1, 1577, 1577, 12, 85, -1, 0, 0, 15, 7264, 10262), + (7266, 6333, 6333, 6333, 6333, 6, 64, 13714, 3, 600, 15, 6333, 13920), + (7267, -1, -1, 795, 795, 7, 81, -1, 0, 0, 15, 5891, 7268), + (7268, -1, -1, 795, 795, 9, 83, -1, 0, 0, 15, 7267, 7269), + (7269, -1, -1, 795, 795, 12, 85, -1, 0, 0, 15, 7268, 10265), + (7270, -1, -1, 790, 790, 6, 81, -1, 0, 0, 15, 5324, 7271), + (7271, -1, -1, 790, 790, 6, 82, -1, 0, 0, 15, 7270, 7272), + (7272, -1, -1, 790, 790, 6, 83, -1, 0, 0, 15, 7271, 7273), + (7273, -1, -1, 790, 790, 6, 84, -1, 0, 0, 15, 7272, 7274), + (7274, -1, -1, 790, 790, 6, 85, -1, 0, 0, 15, 7273, 12950), + (7275, 1239, 1239, 1239, 1239, 12, 85, 13735, 6, 600, 15, 5868, 13251), + (7276, 773, -1, 773, 773, 7, 81, 13726, 5, 1800, 15, 5856, 7277), + (7277, 773, -1, 773, 773, 9, 83, 13727, 5, 1800, 15, 7276, 7278), + (7278, 773, -1, 773, 773, 12, 85, 13728, 5, 1800, 15, 7277, 10564), + (7279, 6552, 6552, 6552, 6552, 5, 75, -1, 0, 0, 15, 6253, 7280), + (7280, 6552, 6552, 6552, 6552, 6, 77, -1, 0, 0, 15, 7279, 7281), + (7281, 6552, 6552, 6552, 6552, 6, 79, -1, 0, 0, 15, 7280, 7282), + (7282, 6552, 6552, 6552, 6552, 7, 81, -1, 0, 0, 15, 7281, 7283), + (7283, 6552, 6552, 6552, 6552, 9, 83, -1, 0, 0, 15, 7282, -1), + (7284, -1, -1, 781, 781, 8, 82, -1, 0, 0, 15, 5850, 13763), + (7285, 1242, 1242, 1242, 1242, 7, 81, 13723, 9, 1320, 15, 5859, 7286), + (7286, 1242, 1242, 1242, 1242, 9, 83, 13724, 9, 1320, 15, 7285, 7287), + (7287, 1242, 1242, 1242, 1242, 12, 85, 13725, 9, 1320, 15, 7286, 10271), + (7288, 4894, 4894, 4894, 4894, 6, 81, 13732, 7, 2160, 15, 6354, 7289), + (7289, 4894, 4894, 4894, 4894, 6, 82, 13733, 7, 2160, 15, 7288, 7290), + (7290, 4894, 4894, 4894, 4894, 6, 83, 13734, 7, 2160, 15, 7289, 13247), + (7291, 4931, 4931, 4931, 4931, 7, 81, 13729, 4, 600, 15, 6056, 7292), + (7292, 4931, 4931, 4931, 4931, 7, 83, 13730, 4, 600, 15, 7291, 7293), + (7293, 4931, 4931, 4931, 4931, 7, 85, 13731, 4, 600, 15, 7292, 10274), + (7294, 4935, 4935, 4935, 4935, 7, 76, 13722, 14, 300, 15, 4935, 10277), + (7295, 4934, 4934, 4934, 4934, 7, 76, 13721, 13, 300, 15, 4934, 10278), + (7296, 517, 517, 517, 517, 5, 73, 13718, 12, 600, 15, 1444, 7297), + (7297, 517, 517, 517, 517, 5, 74, 13719, 12, 600, 15, 7296, 7298), + (7298, 517, 517, 517, 517, 5, 75, 13720, 12, 600, 15, 7297, 10279), + (7299, 1383, 1383, 1383, 1383, 12, 85, 16000, 6, 300, 15, 5789, 10014), + (7300, 1195, 1195, 1195, 1195, 9, 85, 16001, 13, 2160, 15, 5790, 10015), + (7301, 131, 131, 131, 131, 8, 82, 16002, 4, 900, 15, 5793, 7302), + (7302, 131, 131, 131, 131, 9, 83, 16003, 4, 900, 15, 7301, 7303), + (7303, 131, 131, 131, 131, 10, 84, 16004, 4, 900, 15, 7302, 10016), + (7304, 1192, 1192, 1192, 1192, 8, 82, 16005, 12, 1320, 15, 5796, 7305), + (7305, 1192, 1192, 1192, 1192, 9, 83, 16006, 12, 1320, 15, 7304, 7306), + (7306, 1192, 1192, 1192, 1192, 10, 84, 16007, 12, 1320, 15, 7305, 10019), + (7307, 746, 746, 746, 746, 9, 83, 16008, 10, 2160, 15, 5802, 7308), + (7308, 746, 746, 746, 746, 10, 84, 16009, 10, 2160, 15, 7307, 7309), + (7309, 746, 746, 746, 746, 12, 85, 16010, 10, 2160, 15, 7308, 10022), + (7310, 1459, 1459, 1459, 1459, 7, 81, 16011, 11, 1800, 15, 5805, 7311), + (7311, 1459, 1459, 1459, 1459, 9, 83, 16012, 11, 1800, 15, 7310, 7312), + (7312, 1459, 1459, 1459, 1459, 12, 85, 16013, 11, 1800, 15, 7311, -1), + (7313, -1, -1, 6436, 6436, 6, 78, -1, 0, 0, 15, 6438, 7314), + (7314, -1, -1, 6436, 6436, 6, 80, -1, 0, 0, 15, 7313, 7315), + (7315, -1, -1, 6436, 6436, 8, 82, -1, 0, 0, 15, 7314, -1), + (7316, -1, -1, 468, 468, 2, 72, -1, 0, 0, 15, 6440, 7317), + (7317, -1, -1, 468, 468, 2, 74, -1, 0, 0, 15, 7316, 17288), + (7318, -1, -1, 6601, 6601, 6, 77, -1, 0, 0, 15, 6605, 7319), + (7319, -1, -1, 6601, 6601, 6, 78, -1, 0, 0, 15, 7318, 7320), + (7320, -1, -1, 6601, 6601, 6, 79, -1, 0, 0, 15, 7319, 7321), + (7321, -1, -1, 6601, 6601, 6, 80, -1, 0, 0, 15, 7320, 7322), + (7322, -1, -1, 6601, 6601, 6, 81, -1, 0, 0, 15, 7321, 10025), + (7323, -1, -1, 7100, 7100, 6, 81, -1, 0, 0, 15, 7102, 7324), + (7324, -1, -1, 7100, 7100, 6, 82, -1, 0, 0, 15, 7323, 7325), + (7325, -1, -1, 7100, 7100, 6, 83, -1, 0, 0, 15, 7324, 8427), + (7326, -1, -1, 7103, 7103, 2, 70, -1, 0, 0, 15, 7105, 7327), + (7327, -1, -1, 7103, 7103, 2, 70, -1, 0, 0, 15, 7326, 7328), + (7328, -1, -1, 7103, 7103, 2, 70, -1, 0, 0, 15, 7327, 10750), + (7329, 534, 534, 534, 534, 7, 81, 16021, 4, 2160, 15, 5971, 7330), + (7330, 534, 534, 534, 534, 9, 83, 16022, 4, 2160, 15, 7329, 7331), + (7331, 534, 534, 534, 534, 12, 85, 16023, 4, 2160, 15, 7330, 10047), + (7332, 5095, 5095, 5095, 5095, 7, 81, 16024, 10, 900, 15, 5977, 7333), + (7333, 5095, 5095, 5095, 5095, 9, 83, 16025, 10, 900, 15, 7332, 7334), + (7334, 5095, 5095, 5095, 5095, 12, 85, 16026, 10, 900, 15, 7333, 10640), + (7335, 5984, 5984, 5984, 5984, 12, 85, 16027, 2, 30, 15, 5984, 7710), + (7336, -1, -1, 6395, 6395, 7, 81, -1, 0, 0, 15, 6397, 7337), + (7337, -1, -1, 6395, 6395, 7, 82, -1, 0, 0, 15, 7336, 7338), + (7338, -1, -1, 6395, 6395, 7, 83, -1, 0, 0, 15, 7337, 10050), + (7339, 188, 188, 188, 188, 9, 78, 16020, 2, 30, 14, 5044, 7662), + (7340, 7850, 7850, 7850, 7850, 8, 81, 16028, 39, 4320, 0, 7865, 10618), + (7341, 5007, 5007, 5007, 5007, 9, 81, 16047, 8, 2160, 15, 6427, 7342), + (7342, 5007, 5007, 5007, 5007, 9, 83, 16048, 8, 2160, 15, 7341, 7343), + (7343, 5007, 5007, 5007, 5007, 9, 85, 16049, 8, 2160, 15, 7342, 10061), + (7344, 545, 545, 545, 545, 7, 81, 16038, 3, 900, 15, 6002, 7345), + (7345, 545, 545, 545, 545, 9, 83, 16039, 3, 900, 15, 7344, 7346), + (7346, 545, 545, 545, 545, 12, 85, 16040, 3, 900, 15, 7345, 10758), + (7347, 1345, 1345, 1345, 1345, 8, 82, 16041, 6, 900, 15, 6010, 7348), + (7348, 1345, 1345, 1345, 1345, 9, 83, 16042, 6, 900, 15, 7347, 7349), + (7349, 1345, 1345, 1345, 1345, 10, 84, 16043, 6, 900, 15, 7348, 10740), + (7350, 6370, 6370, 6370, 6370, 6, 81, 16044, 7, 600, 15, 6372, 7351), + (7351, 6370, 6370, 6370, 6370, 6, 82, 16045, 7, 600, 15, 7350, 7352), + (7352, 6370, 6370, 6370, 6370, 6, 83, 16046, 7, 600, 15, 7351, 14112), + (7353, -1, -1, 864, 864, 6, 85, -1, 0, 0, 15, 6013, 7354), + (7354, -1, -1, 864, 864, 6, 85, -1, 0, 0, 15, 7353, 7355), + (7355, -1, -1, 864, 864, 6, 85, -1, 0, 0, 15, 7354, -1), + (7356, -1, -1, 5248, 5248, 7, 81, -1, 0, 0, 15, 6016, 7357), + (7357, -1, -1, 5248, 5248, 9, 83, -1, 0, 0, 15, 7356, 7358), + (7358, -1, -1, 5248, 5248, 12, 85, -1, 0, 0, 15, 7357, 16170), + (7359, -1, -1, 644, 644, 7, 79, -1, 0, 0, 15, 6019, 7360), + (7360, -1, -1, 644, 644, 9, 81, -1, 0, 0, 15, 7359, 7361), + (7361, -1, -1, 644, 644, 12, 83, -1, 0, 0, 15, 7360, 13092), + (7362, -1, -1, 867, 867, 5, 70, -1, 0, 0, 15, 871, 7363), + (7363, -1, -1, 867, 867, 5, 70, -1, 0, 0, 15, 7362, 7364), + (7364, -1, -1, 867, 867, 5, 70, -1, 0, 0, 15, 7363, 7365), + (7365, -1, -1, 867, 867, 5, 70, -1, 0, 0, 15, 7364, 7366), + (7366, -1, -1, 867, 867, 5, 70, -1, 0, 0, 15, 7365, 10748), + (7367, 872, 872, 872, 872, 3, 70, 16032, 5, 180, 15, 874, 7368), + (7368, 872, 872, 872, 872, 6, 70, 16033, 5, 180, 15, 7367, 7369), + (7369, 872, 872, 872, 872, 9, 70, 16034, 5, 180, 15, 7368, 10772), + (7370, 875, 875, 875, 875, 3, 70, 16035, 5, 180, 15, 877, 7371), + (7371, 875, 875, 875, 875, 6, 73, 16036, 5, 180, 15, 7370, 7372), + (7372, 875, 875, 875, 875, 9, 75, 16037, 5, 180, 15, 7371, 10775), + (7373, -1, -1, 6546, 6546, 0, 81, -1, 0, 0, 15, 6571, 7374), + (7374, -1, -1, 6546, 6546, 0, 82, -1, 0, 0, 15, 7373, 7375), + (7375, -1, -1, 6546, 6546, 0, 83, -1, 0, 0, 15, 7374, 7376), + (7376, -1, -1, 6546, 6546, 0, 84, -1, 0, 0, 15, 7375, 7377), + (7377, -1, -1, 6546, 6546, 0, 85, -1, 0, 0, 15, 7376, 13122), + (7378, -1, -1, 1608, 1608, 3, 71, -1, 0, 0, 15, 4991, 7379), + (7379, -1, -1, 1608, 1608, 6, 73, -1, 0, 0, 15, 7378, 7380), + (7380, -1, -1, 1608, 1608, 9, 75, -1, 0, 0, 15, 7379, 7381), + (7381, -1, -1, 1608, 1608, 6, 76, -1, 0, 0, 15, 7380, 7382), + (7382, -1, -1, 1608, 1608, 6, 78, -1, 0, 0, 15, 7381, 7383), + (7383, -1, -1, 1608, 1608, 6, 80, -1, 0, 0, 15, 7382, 10064), + (7384, -1, -1, 5085, 5085, 6, 81, -1, 0, 0, 15, 6408, 7385), + (7385, -1, -1, 5085, 5085, 6, 83, -1, 0, 0, 15, 7384, 7386), + (7386, -1, -1, 5085, 5085, 6, 85, -1, 0, 0, 15, 7385, 10383), + (7387, 6508, 6508, 6508, 6508, 7, 79, 16059, 38, 600, 15, 6510, 7388), + (7388, 6508, 6508, 6508, 6508, 7, 81, 16060, 38, 600, 15, 7387, 7389), + (7389, 6508, 6508, 6508, 6508, 7, 83, 16061, 38, 600, 15, 7388, 10078), + (7390, -1, -1, 589, 589, 7, 81, -1, 0, 0, 15, 6065, 7391), + (7391, -1, -1, 589, 589, 7, 83, -1, 0, 0, 15, 7390, 7392), + (7392, -1, -1, 589, 589, 7, 85, -1, 0, 0, 15, 7391, 7707), + (7393, -1, -1, 1313, 1313, 7, 81, -1, 0, 0, 15, 6071, 7394), + (7394, -1, -1, 1313, 1313, 7, 81, -1, 0, 0, 15, 7393, 7395), + (7395, -1, -1, 1313, 1313, 8, 82, -1, 0, 0, 15, 7394, 7396), + (7396, -1, -1, 1313, 1313, 9, 83, -1, 0, 0, 15, 7395, 7397), + (7397, -1, -1, 1313, 1313, 10, 84, -1, 0, 0, 15, 7396, 7398), + (7398, -1, -1, 1313, 1313, 12, 85, -1, 0, 0, 15, 7397, 10081), + (7399, -1, -1, 210, 210, 8, 82, -1, 0, 0, 15, 6074, 7400), + (7400, -1, -1, 210, 210, 9, 83, -1, 0, 0, 15, 7399, 7401), + (7401, -1, -1, 210, 210, 10, 84, -1, 0, 0, 15, 7400, 15172), + (7402, -1, -1, 895, 895, 7, 81, -1, 0, 0, 15, 6079, 7403), + (7403, -1, -1, 895, 895, 8, 82, -1, 0, 0, 15, 7402, 7404), + (7404, -1, -1, 895, 895, 9, 83, -1, 0, 0, 15, 7403, 7405), + (7405, -1, -1, 895, 895, 10, 84, -1, 0, 0, 15, 7404, 7406), + (7406, -1, -1, 895, 895, 12, 85, -1, 0, 0, 15, 7405, 10906), + (7407, -1, -1, 7407, 7407, 12, 85, 0, 0, 0, 16, -1, -1), + (7408, 1498, 1498, 1498, 1498, 7, 81, 16075, 12, 1320, 15, 5821, 7409), + (7409, 1498, 1498, 1498, 1498, 9, 83, 16076, 12, 1320, 15, 7408, 7410), + (7410, 1498, 1498, 1498, 1498, 12, 85, 16077, 12, 1320, 15, 7409, 10090), + (7411, 757, -1, 757, 757, 7, 81, 16078, 6, 1800, 15, 5824, 7412), + (7412, 757, -1, 757, 757, 9, 83, 16079, 6, 1800, 15, 7411, 7413), + (7413, 757, -1, 757, 757, 12, 85, 16080, 6, 1800, 15, 7412, 12658), + (7414, 1495, 1495, 1495, 1495, 7, 81, 16081, 30, 900, 15, 5828, 7415), + (7415, 1495, 1495, 1495, 1495, 9, 83, 16082, 30, 900, 15, 7414, 7416), + (7416, 1495, 1495, 1495, 1495, 12, 85, 16083, 30, 900, 15, 7415, 10093), + (7417, 548, 548, 548, 548, 8, 82, 16084, 5, 900, 15, 5831, 7418), + (7418, 548, 548, 548, 548, 9, 83, 16085, 5, 900, 15, 7417, 7419), + (7419, 548, 548, 548, 548, 10, 84, 16086, 5, 900, 15, 7418, 10096), + (7420, 5105, 5105, 5105, 5105, 12, 85, 16087, 11, 600, 15, 5832, 10509), + (7421, 6232, 6232, 6232, 6232, 12, 85, 16091, 18, 900, 15, 6232, -1), + (7422, 6561, 6561, 6561, 6561, 7, 81, 16088, 32, 30, 15, 6280, 7423), + (7423, 6561, 6561, 6561, 6561, 7, 81, 16089, 32, 30, 15, 7422, 7424), + (7424, 6561, 6561, 6561, 6561, 7, 81, 16090, 32, 30, 15, 7423, 10099), + (7425, 510, 510, 510, 510, 3, 66, 16072, 37, 240, 15, 512, 7426), + (7426, 510, 510, 510, 510, 3, 68, 16073, 37, 240, 15, 7425, 7427), + (7427, 510, 510, 510, 510, 3, 70, 16074, 37, 240, 15, 7426, 10102), + (7428, 6533, 6533, 6533, 6533, 10, 84, 13785, 15, 600, 15, 6200, 10139), + (7429, 6534, 6534, 6534, 6534, 9, 83, 13777, 16, 900, 15, 6201, 13524), + (7430, 1116, 1116, 1116, 1116, 7, 81, 13762, 4, 2160, 15, 5701, 7431), + (7431, 1116, 1116, 1116, 1116, 9, 83, 13763, 4, 2160, 15, 7430, 7432), + (7432, 1116, 1116, 1116, 1116, 12, 85, 13764, 4, 2160, 15, 7431, 10140), + (7433, 592, 592, 592, 592, 5, 81, 13765, 2, 18, 15, 5706, 7434), + (7434, 592, 592, 592, 592, 5, 82, 13766, 2, 18, 15, 7433, 7435), + (7435, 592, 592, 592, 592, 5, 83, 13767, 2, 18, 15, 7434, 7436), + (7436, 592, 592, 592, 592, 5, 84, 13768, 2, 18, 15, 7435, 7437), + (7437, 592, 592, 592, 592, 5, 85, 13769, 2, 18, 15, 7436, 12749), + (7438, 5298, 5298, 5298, 5298, 9, 83, 13770, 32, 1800, 15, 5709, 7439), + (7439, 5298, 5298, 5298, 5298, 10, 84, 13771, 32, 1800, 15, 7438, 7440), + (7440, 5298, 5298, 5298, 5298, 12, 85, 13772, 32, 1800, 15, 7439, 10143), + (7441, 1598, -1, 1598, 1598, 7, 81, 13773, 6, 900, 15, 5712, 7442), + (7442, 1598, -1, 1598, 1598, 9, 83, 13774, 6, 900, 15, 7441, 7443), + (7443, 1598, -1, 1598, 1598, 12, 85, 13775, 6, 900, 15, 7442, 10146), + (7444, 5020, 5020, 5020, 5020, 9, 82, 13776, 9, 300, 15, 5716, 10149), + (7445, 1110, 1110, 1110, 1110, 6, 78, 13778, 3, 2160, 15, 6402, 7446), + (7446, 1110, 1110, 1110, 1110, 6, 80, 13779, 3, 2160, 15, 7445, 7447), + (7447, 1110, 1110, 1110, 1110, 6, 81, 13780, 3, 2160, 15, 7446, 10150), + (7448, -1, -1, 6337, 6337, 6, 79, -1, 0, 0, 15, 6339, 7449), + (7449, -1, -1, 6337, 6337, 6, 81, -1, 0, 0, 15, 7448, 7450), + (7450, -1, -1, 6337, 6337, 6, 83, -1, 0, 0, 15, 7449, 10153), + (7451, -1, -1, 6340, 6340, 6, 79, -1, 0, 0, 15, 6342, 7452), + (7452, -1, -1, 6340, 6340, 6, 81, -1, 0, 0, 15, 7451, 7453), + (7453, -1, -1, 6340, 6340, 6, 83, -1, 0, 0, 15, 7452, 16306), + (7454, 5017, 5017, 5017, 5017, 3, 76, 13759, 8, 600, 15, 5019, 7455), + (7455, 5017, 5017, 5017, 5017, 6, 78, 13760, 8, 600, 15, 7454, 7456), + (7456, 5017, 5017, 5017, 5017, 9, 80, 13761, 8, 600, 15, 7455, 10156), + (7457, 1569, 1569, 1569, 1569, 7, 82, 13756, 5, 1800, 15, 5715, 7458), + (7458, 1569, 1569, 1569, 1569, 7, 83, 13757, 5, 1800, 15, 7457, 7459), + (7459, 1569, 1569, 1569, 1569, 7, 85, 13758, 5, 1800, 15, 7458, 10159), + (7460, 1327, 1327, 1327, 1327, 7, 81, 13792, 10, 900, 15, 6100, 7461), + (7461, 1327, 1327, 1327, 1327, 9, 83, 13793, 10, 900, 15, 7460, 7462), + (7462, 1327, 1327, 1327, 1327, 12, 85, 13794, 10, 900, 15, 7461, 10187), + (7463, 1520, 1520, 1520, 1520, 9, 75, 13801, 11, 900, 15, 6451, 7464), + (7464, 1520, 1520, 1520, 1520, 9, 75, 13802, 11, 900, 15, 7463, 7465), + (7465, 1520, 1520, 1520, 1520, 9, 75, 13803, 11, 900, 15, 7464, 10190), + (7466, 146, 146, 146, 146, 8, 82, 13796, 2, 180, 15, 6102, 7691), + (7467, 5109, 5109, 5109, 5109, 9, 82, 13800, 0, 1, 15, 6448, 13016), + (7468, 153, 153, 153, 153, 12, 85, 13795, 3, 2160, 15, 6101, 10193), + (7469, 528, 528, 528, 528, 7, 81, 13797, 5, 720, 15, 6105, 7470), + (7470, 528, 528, 528, 528, 9, 83, 13798, 5, 720, 15, 7469, 7471), + (7471, 528, 528, 528, 528, 12, 85, 13799, 5, 720, 15, 7470, 10194), + (7472, 5251, 5251, 5251, 5251, 7, 81, 13786, 13, 900, 15, 6094, 7473), + (7473, 5251, 5251, 5251, 5251, 9, 83, 13787, 13, 900, 15, 7472, 7474), + (7474, 5251, 5251, 5251, 5251, 12, 85, 13788, 13, 900, 15, 7473, 10197), + (7475, 513, 513, 513, 513, 7, 81, 13789, 4, 120, 15, 6097, 7476), + (7476, 513, 513, 513, 513, 9, 83, 13790, 4, 120, 15, 7475, 7477), + (7477, 513, 513, 513, 513, 12, 85, 13791, 4, 120, 15, 7476, -1), + (7478, -1, -1, 6538, 6538, 12, 85, -1, 0, 0, 15, 6211, 15421), + (7479, 1119, 1119, 1119, 1119, 7, 83, 13805, 8, 900, 15, 5736, 7480), + (7480, 1119, 1119, 1119, 1119, 8, 84, 13806, 8, 900, 15, 7479, 7481), + (7481, 1119, 1119, 1119, 1119, 9, 85, 13807, 8, 900, 15, 7480, 10297), + (7482, 723, 723, 723, 723, 7, 81, 13808, 6, 30, 15, 5737, 10300), + (7483, 5015, 5015, 5015, 5015, 12, 85, 13809, 9, 900, 15, 5741, 10301), + (7484, 289, 289, 289, 289, 12, 85, 13810, 3, 300, 15, 5742, -1), + (7485, 291, 291, 291, 291, 9, 83, 13811, 5, 900, 15, 5745, 7486), + (7486, 291, 291, 291, 291, 10, 84, 13812, 5, 900, 15, 7485, 7487), + (7487, 291, 291, 291, 291, 12, 85, 13813, 5, 900, 15, 7486, 10302), + (7488, 6218, 6218, 6218, 6218, 7, 81, 13814, 0, 1, 15, 6218, 14272), + (7489, -1, -1, 724, 724, 7, 81, -1, 0, 0, 15, 5733, 7490), + (7490, -1, -1, 724, 724, 8, 82, -1, 0, 0, 15, 7489, 7491), + (7491, -1, -1, 724, 724, 9, 83, -1, 0, 0, 15, 7490, 7492), + (7492, -1, -1, 724, 724, 10, 84, -1, 0, 0, 15, 7491, 7493), + (7493, -1, -1, 724, 724, 12, 85, -1, 0, 0, 15, 7492, 16890), + (7494, -1, -1, 729, 729, 7, 81, -1, 0, 0, 15, 5740, 7495), + (7495, -1, -1, 729, 729, 8, 82, -1, 0, 0, 15, 7494, 7496), + (7496, -1, -1, 729, 729, 9, 83, -1, 0, 0, 15, 7495, 10305), + (7497, 6380, 6380, 6380, 6380, 6, 83, 13815, 39, 120, 15, 6382, 7498), + (7498, 6380, 6380, 6380, 6380, 6, 84, 13816, 39, 120, 15, 7497, 7499), + (7499, 6380, 6380, 6380, 6380, 6, 85, 13817, 39, 120, 15, 7498, 10308), + (7500, -1, -1, 4699, 4699, 5, 61, -1, 0, 0, 15, 6540, 10788), + (7501, -1, -1, 125, 125, 6, 81, -1, 0, 0, 15, 5523, 7502), + (7502, -1, -1, 125, 125, 7, 82, -1, 0, 0, 15, 7501, 7503), + (7503, -1, -1, 125, 125, 8, 83, -1, 0, 0, 15, 7502, 7504), + (7504, -1, -1, 125, 125, 9, 84, -1, 0, 0, 15, 7503, 7505), + (7505, -1, -1, 125, 125, 10, 85, -1, 0, 0, 15, 7504, 12396), + (7506, -1, -1, 122, 122, 6, 81, -1, 0, 0, 15, 5528, 7507), + (7507, -1, -1, 122, 122, 7, 82, -1, 0, 0, 15, 7506, 7508), + (7508, -1, -1, 122, 122, 8, 83, -1, 0, 0, 15, 7507, 7509), + (7509, -1, -1, 122, 122, 9, 84, -1, 0, 0, 15, 7508, 7510), + (7510, -1, -1, 122, 122, 10, 85, -1, 0, 0, 15, 7509, 12401), + (7511, -1, -1, 1026, 1026, 5, 81, -1, 0, 0, 15, 6527, 7512), + (7512, -1, -1, 1026, 1026, 5, 82, -1, 0, 0, 15, 7511, 7513), + (7513, -1, -1, 1026, 1026, 5, 83, -1, 0, 0, 15, 7512, 7514), + (7514, -1, -1, 1026, 1026, 5, 84, -1, 0, 0, 15, 7513, 7515), + (7515, -1, -1, 1026, 1026, 5, 85, -1, 0, 0, 15, 7514, 7886), + (7516, -1, -1, 1006, 1006, 5, 71, -1, 0, 0, 15, 1010, 7517), + (7517, -1, -1, 1006, 1006, 5, 72, -1, 0, 0, 15, 7516, 7518), + (7518, -1, -1, 1006, 1006, 5, 73, -1, 0, 0, 15, 7517, 7519), + (7519, -1, -1, 1006, 1006, 5, 74, -1, 0, 0, 15, 7518, 7520), + (7520, -1, -1, 1006, 1006, 5, 75, -1, 0, 0, 15, 7519, 7837), + (7521, -1, -1, 1056, 1056, 5, 81, -1, 0, 0, 15, 6435, 7522), + (7522, -1, -1, 1056, 1056, 5, 82, -1, 0, 0, 15, 7521, 7523), + (7523, -1, -1, 1056, 1056, 5, 83, -1, 0, 0, 15, 7522, 7524), + (7524, -1, -1, 1056, 1056, 5, 84, -1, 0, 0, 15, 7523, 7525), + (7525, -1, -1, 1056, 1056, 5, 85, -1, 0, 0, 15, 7524, 16414), + (7526, -1, -1, 6119, 6119, 6, 81, -1, 0, 0, 15, 6123, 7527), + (7527, -1, -1, 6119, 6119, 6, 82, -1, 0, 0, 15, 7526, 7528), + (7528, -1, -1, 6119, 6119, 6, 83, -1, 0, 0, 15, 7527, 7529), + (7529, -1, -1, 6119, 6119, 6, 84, -1, 0, 0, 15, 7528, 7530), + (7530, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 15, 7529, 12406), + (7534, -1, -1, 65, 661, 3, 81, -1, 0, 0, 15, 6394, 7535), + (7535, -1, -1, 65, 661, 3, 82, -1, 0, 0, 15, 7534, 7536), + (7536, -1, -1, 65, 661, 3, 83, -1, 0, 0, 15, 7535, 7537), + (7537, -1, -1, 65, 661, 3, 84, -1, 0, 0, 15, 7536, 7538), + (7538, -1, -1, 65, 661, 3, 85, -1, 0, 0, 15, 7537, 7904), + (7539, -1, -1, 1021, 1021, 5, 80, -1, 0, 0, 16, 6522, 7540), + (7540, -1, -1, 1021, 1021, 5, 85, -1, 0, 0, 16, 7539, 7683), + (7541, -1, -1, 107, 107, 2, 60, -1, 0, 0, 15, 109, 7542), + (7542, -1, -1, 107, 107, 4, 60, -1, 0, 0, 15, 7541, 7543), + (7543, -1, -1, 107, 107, 6, 60, -1, 0, 0, 15, 7542, -1), + (7544, -1, -1, 678, 678, 3, 70, -1, 0, 0, 15, 6520, 7545), + (7545, -1, -1, 678, 678, 3, 70, -1, 0, 0, 15, 7544, 7546), + (7546, -1, -1, 678, 678, 3, 70, -1, 0, 0, 15, 7545, -1), + (7547, -1, -1, 418, 418, 5, 76, -1, 0, 0, 15, 4682, 7548), + (7548, -1, -1, 418, 418, 5, 77, -1, 0, 0, 15, 7547, 7549), + (7549, -1, -1, 418, 418, 5, 78, -1, 0, 0, 15, 7548, 7550), + (7550, -1, -1, 418, 418, 5, 79, -1, 0, 0, 15, 7549, 7551), + (7551, -1, -1, 418, 418, 5, 80, -1, 0, 0, 15, 7550, -1), + (7553, -1, -1, 1071, 1071, 6, 80, -1, 0, 0, 16, 4764, 7681), + (7554, -1, -1, 1486, 1486, 7, 81, -1, 0, 0, 15, 5533, 7555), + (7555, -1, -1, 1486, 1486, 8, 82, -1, 0, 0, 15, 7554, 7556), + (7556, -1, -1, 1486, 1486, 9, 83, -1, 0, 0, 15, 7555, 7557), + (7557, -1, -1, 1486, 1486, 10, 84, -1, 0, 0, 15, 7556, 7558), + (7558, -1, -1, 1486, 1486, 12, 85, -1, 0, 0, 15, 7557, 7722), + (7559, -1, -1, 599, 599, 9, 83, -1, 0, 0, 15, 5536, 7560), + (7560, -1, -1, 599, 599, 10, 84, -1, 0, 0, 15, 7559, 7561), + (7561, -1, -1, 599, 599, 12, 85, -1, 0, 0, 15, 7560, 13026), + (7562, -1, -1, 1041, 1041, 7, 81, -1, 0, 0, 15, 5544, 7563), + (7563, -1, -1, 1041, 1041, 9, 83, -1, 0, 0, 15, 7562, 7564), + (7564, -1, -1, 1041, 1041, 12, 85, -1, 0, 0, 15, 7563, 12697), + (7565, -1, -1, 119, 119, 7, 81, -1, 0, 0, 15, 5556, 7566), + (7566, -1, -1, 119, 119, 9, 83, -1, 0, 0, 15, 7565, 7567), + (7567, -1, -1, 119, 119, 12, 85, -1, 0, 0, 15, 7566, 6023), + (7568, -1, -1, 1592, 1592, 7, 81, -1, 0, 0, 15, 5561, 7569), + (7569, -1, -1, 1592, 1592, 8, 82, -1, 0, 0, 15, 7568, 7570), + (7570, -1, -1, 1592, 1592, 9, 83, -1, 0, 0, 15, 7569, 7571), + (7571, -1, -1, 1592, 1592, 10, 84, -1, 0, 0, 15, 7570, 7572), + (7572, -1, -1, 1592, 1592, 12, 85, -1, 0, 0, 15, 7571, 12439), + (7573, -1, -1, 4739, 4739, 7, 81, -1, 0, 0, 15, 5564, 7574), + (7574, -1, -1, 4739, 4739, 9, 83, -1, 0, 0, 15, 7573, 7575), + (7575, -1, -1, 4739, 4739, 12, 85, -1, 0, 0, 15, 7574, -1), + (7576, -1, -1, 1072, 1072, 7, 81, -1, 0, 0, 15, 5570, 7577), + (7577, -1, -1, 1072, 1072, 8, 82, -1, 0, 0, 15, 7576, 7578), + (7578, -1, -1, 1072, 1072, 9, 83, -1, 0, 0, 15, 7577, 7579), + (7579, -1, -1, 1072, 1072, 10, 84, -1, 0, 0, 15, 7578, 7580), + (7580, -1, -1, 1072, 1072, 12, 85, -1, 0, 0, 15, 7579, 12444), + (7581, -1, -1, 1210, 1213, 7, 81, -1, 0, 0, 15, 5579, 7582), + (7582, -1, -1, 1210, 1213, 9, 83, -1, 0, 0, 15, 7581, 7583), + (7583, -1, -1, 1210, 1213, 12, 85, -1, 0, 0, 15, 7582, 8344), + (7584, -1, -1, 98, 98, 7, 81, -1, 0, 0, 15, 5588, 7585), + (7585, -1, -1, 98, 98, 9, 83, -1, 0, 0, 15, 7584, 7586), + (7586, -1, -1, 98, 98, 12, 85, -1, 0, 0, 15, 7585, 11061), + (7587, -1, -1, 1186, 1186, 7, 81, -1, 0, 0, 15, 5591, 7588), + (7588, -1, -1, 1186, 1186, 9, 83, -1, 0, 0, 15, 7587, 7589), + (7589, -1, -1, 1186, 1186, 12, 85, -1, 0, 0, 15, 7588, 7692), + (7590, -1, -1, 80, 80, 7, 81, -1, 0, 0, 15, 5594, 7591), + (7591, -1, -1, 80, 80, 9, 83, -1, 0, 0, 15, 7590, 7592), + (7592, -1, -1, 80, 80, 12, 85, -1, 0, 0, 15, 7591, 12452), + (7593, -1, -1, 658, 658, 5, 81, -1, 0, 0, 15, 5627, 7594), + (7594, -1, -1, 658, 658, 5, 82, -1, 0, 0, 15, 7593, 7595), + (7595, -1, -1, 658, 658, 5, 83, -1, 0, 0, 15, 7594, 7596), + (7596, -1, -1, 658, 658, 5, 84, -1, 0, 0, 15, 7595, 7597), + (7597, -1, -1, 658, 658, 5, 85, -1, 0, 0, 15, 7596, 12455), + (7598, -1, -1, 98, 738, 7, 81, -1, 0, 0, 15, 5630, 7599), + (7599, -1, -1, 98, 738, 9, 83, -1, 0, 0, 15, 7598, 7600), + (7600, -1, -1, 98, 738, 12, 85, -1, 0, 0, 15, 7599, 13924), + (7601, -1, -1, 6051, 6051, 3, 81, -1, 0, 0, 15, 6053, 7602), + (7602, -1, -1, 6051, 6051, 3, 83, -1, 0, 0, 15, 7601, 7603), + (7603, -1, -1, 6051, 6051, 3, 85, -1, 0, 0, 15, 7602, 10604), + (7604, -1, -1, 683, 683, 5, 80, -1, 0, 0, 15, 6081, 7605), + (7605, -1, -1, 683, 683, 5, 80, -1, 0, 0, 15, 7604, 12694), + (7606, 6537, 6537, 6537, 6537, 7, 81, 13821, 30, 900, 15, 6208, 7607), + (7607, 6537, 6537, 6537, 6537, 8, 82, 13822, 30, 900, 15, 7606, 7608), + (7608, 6537, 6537, 6537, 6537, 9, 83, 13823, 30, 900, 15, 7607, 12460), + (7609, 6539, 6539, 6539, 6539, 6, 76, 13824, 18, 1800, 15, 6214, 7610), + (7610, 6539, 6539, 6539, 6539, 6, 79, 13825, 18, 1800, 15, 7609, 7611), + (7611, 6539, 6539, 6539, 6539, 6, 82, 13826, 18, 1800, 15, 7610, 12942), + (7612, -1, -1, 270, 665, 2, 66, -1, 0, 0, 15, 670, 7613), + (7613, -1, -1, 270, 665, 2, 67, -1, 0, 0, 15, 7612, 7614), + (7614, -1, -1, 270, 665, 2, 68, -1, 0, 0, 15, 7613, -1), + (7615, -1, -1, 6346, 6346, 6, 79, -1, 0, 0, 15, 6348, 7616), + (7616, -1, -1, 6346, 6346, 6, 81, -1, 0, 0, 15, 7615, 7617), + (7617, -1, -1, 6346, 6346, 6, 83, -1, 0, 0, 15, 7616, 15397), + (7618, -1, -1, 6349, 6349, 6, 79, -1, 0, 0, 15, 6351, 7619), + (7619, -1, -1, 6349, 6349, 6, 81, -1, 0, 0, 15, 7618, 7620), + (7620, -1, -1, 6349, 6349, 6, 83, -1, 0, 0, 15, 7619, 11053), + (7621, -1, -1, 1435, 4773, 9, 81, -1, 0, 0, 15, 6517, 13090), + (7622, -1, -1, 446, 735, 8, 81, -1, 0, 0, 15, 7065, 7623), + (7623, -1, -1, 446, 735, 8, 82, -1, 0, 0, 15, 7622, 7624), + (7624, -1, -1, 446, 735, 8, 83, -1, 0, 0, 15, 7623, 10473), + (7625, -1, -1, 735, 735, 8, 81, -1, 0, 0, 15, 7068, 7626), + (7626, -1, -1, 735, 735, 8, 82, -1, 0, 0, 15, 7625, 7627), + (7627, -1, -1, 735, 735, 8, 83, -1, 0, 0, 15, 7626, 10632), + (7628, -1, -1, 807, 807, 5, 81, -1, 0, 0, 15, 5924, 7629), + (7629, -1, -1, 807, 807, 5, 83, -1, 0, 0, 15, 7628, 7630), + (7630, -1, -1, 807, 807, 5, 85, -1, 0, 0, 15, 7629, 12685), + (7631, -1, -1, 255, 255, 7, 81, -1, 0, 0, 15, 5597, 7632), + (7632, -1, -1, 255, 255, 9, 83, -1, 0, 0, 15, 7631, 7633), + (7633, -1, -1, 255, 255, 12, 85, -1, 0, 0, 15, 7632, 17441), + (7634, -1, -1, 815, 815, 9, 83, -1, 0, 0, 15, 5913, 7635), + (7635, -1, -1, 815, 815, 10, 84, -1, 0, 0, 15, 7634, 7636), + (7636, -1, -1, 815, 815, 12, 85, -1, 0, 0, 15, 7635, 15441), + (7637, -1, -1, 1616, 1616, 5, 83, -1, 0, 0, 15, 6007, 7638), + (7638, -1, -1, 1616, 1616, 5, 84, -1, 0, 0, 15, 7637, 7639), + (7639, -1, -1, 1616, 1616, 5, 85, -1, 0, 0, 15, 7638, -1), + (7640, -1, -1, 686, 686, 5, 60, -1, 0, 0, 15, 690, 12438), + (7641, -1, -1, 625, 625, 3, 76, -1, 0, 0, 15, 4735, 7642), + (7642, -1, -1, 625, 625, 3, 78, -1, 0, 0, 15, 7641, 7643), + (7643, -1, -1, 625, 625, 3, 80, -1, 0, 0, 15, 7642, -1), + (7644, -1, -1, 6375, 6375, 6, 81, -1, 0, 0, 15, 6377, 7645), + (7645, -1, -1, 6375, 6375, 6, 82, -1, 0, 0, 15, 7644, 7646), + (7646, -1, -1, 6375, 6375, 6, 83, -1, 0, 0, 15, 7645, 7663), + (7647, -1, -1, 692, 692, 6, 60, -1, 0, 0, 15, 694, 7648), + (7648, -1, -1, 692, 692, 6, 60, -1, 0, 0, 15, 7647, 7649), + (7649, -1, -1, 692, 692, 6, 60, -1, 0, 0, 15, 7648, 7670), + (7650, -1, -1, 1044, 1044, 7, 81, -1, 0, 0, 15, 5547, 7651), + (7651, -1, -1, 1044, 1044, 9, 83, -1, 0, 0, 15, 7650, 7652), + (7652, -1, -1, 1044, 1044, 12, 85, -1, 0, 0, 15, 7651, 13074), + (7653, -1, -1, 1047, 1047, 7, 81, -1, 0, 0, 15, 5550, 7654), + (7654, -1, -1, 1047, 1047, 9, 83, -1, 0, 0, 15, 7653, 7655), + (7655, -1, -1, 1047, 1047, 12, 85, -1, 0, 0, 15, 7654, 13077), + (7656, -1, -1, 1050, 1050, 7, 81, -1, 0, 0, 15, 5553, 7657), + (7657, -1, -1, 1050, 1050, 9, 83, -1, 0, 0, 15, 7656, 7658), + (7658, -1, -1, 1050, 1050, 12, 85, -1, 0, 0, 15, 7657, 13023), + (7659, -1, -1, 754, 754, 3, 70, -1, 0, 0, 15, 756, 7660), + (7660, -1, -1, 754, 754, 6, 70, -1, 0, 0, 15, 7659, 7661), + (7661, -1, -1, 754, 754, 9, 70, -1, 0, 0, 15, 7660, -1), + (7662, 188, 188, 188, 188, 9, 83, 16431, 2, 30, 15, 7339, 10647), + (7663, -1, -1, 6375, 6375, 6, 83, -1, 0, 0, 15, 7646, 10084), + (7664, -1, -1, 7664, 7664, 2, 73, -1, 0, 0, 15, -1, 7665), + (7665, -1, -1, 7664, 7664, 2, 74, -1, 0, 0, 15, 7664, 7666), + (7666, -1, -1, 7664, 7664, 2, 75, -1, 0, 0, 15, 7665, 7667), + (7667, -1, -1, 7664, 7664, 2, 76, -1, 0, 0, 15, 7666, 7668), + (7668, -1, -1, 7664, 7664, 2, 77, -1, 0, 0, 15, 7667, 10105), + (7669, 7669, 7669, 7669, 7669, 3, 81, 13838, 35, 5, 15, -1, -1), + (7670, -1, -1, 692, 692, 7, 75, -1, 0, 0, 16, 7649, 7671), + (7671, -1, -1, 692, 692, 9, 80, -1, 0, 0, 16, 7670, 7672), + (7672, -1, -1, 692, 692, 12, 85, -1, 0, 0, 16, 7671, 12767), + (7673, -1, -1, 855, 855, 5, 75, -1, 0, 0, 16, 859, 7674), + (7674, -1, -1, 855, 855, 5, 75, -1, 0, 0, 16, 7673, 7675), + (7675, -1, -1, 855, 855, 5, 75, -1, 0, 0, 16, 7674, 7676), + (7676, -1, -1, 855, 855, 5, 75, -1, 0, 0, 16, 7675, 7677), + (7677, -1, -1, 855, 855, 5, 75, -1, 0, 0, 16, 7676, 10688), + (7678, -1, -1, 852, 852, 9, 81, -1, 0, 0, 16, 5502, 7679), + (7679, -1, -1, 852, 852, 10, 83, -1, 0, 0, 16, 7678, 7680), + (7680, -1, -1, 852, 852, 12, 85, -1, 0, 0, 16, 7679, 12576), + (7681, -1, -1, 1071, 1071, 6, 80, -1, 0, 0, 16, 7553, -1), + (7682, -1, -1, 4861, 4861, 12, 85, -1, 0, 0, 16, 7216, 12757), + (7683, -1, -1, 1021, 1021, 5, 85, -1, 0, 0, 16, 7540, 7684), + (7684, -1, -1, 1021, 1021, 5, 85, -1, 0, 0, 16, 7683, 7685), + (7685, -1, -1, 1021, 1021, 5, 85, -1, 0, 0, 16, 7684, 13894), + (7686, -1, -1, 4844, 4844, 5, 81, -1, 0, 0, 16, 7126, 7687), + (7687, -1, -1, 4844, 4844, 5, 83, -1, 0, 0, 16, 7686, 7688), + (7688, -1, -1, 4844, 4844, 5, 85, -1, 0, 0, 16, 7687, -1), + (7689, 7689, 7689, 7689, 7689, 12, 85, 21820, 94, 180, 16, -1, -1), + (7690, -1, -1, 7690, 7690, 12, 85, -1, 0, 0, 16, -1, -1), + (7691, 146, 146, 146, 146, 8, 85, 16862, 2, 180, 16, 7466, 13256), + (7692, -1, -1, 1186, 1186, 12, 85, -1, 0, 0, 16, 7589, 7693), + (7693, -1, -1, 1186, 1186, 12, 85, -1, 0, 0, 16, 7692, 7694), + (7694, -1, -1, 1186, 1186, 12, 85, -1, 0, 0, 16, 7693, 12564), + (7695, -1, -1, 7695, 7695, 6, 85, -1, 0, 0, 16, -1, 7696), + (7696, -1, -1, 7695, 7695, 6, 85, -1, 0, 0, 16, 7695, 7697), + (7697, -1, -1, 7695, 7695, 6, 85, -1, 0, 0, 16, 7696, -1), + (7698, 7698, 7698, 7698, 7698, 6, 85, 21763, 17, 6, 16, -1, -1), + (7699, -1, -1, 7699, 7699, 12, 85, 0, 0, 0, 16, -1, -1), + (7700, -1, -1, 255, 255, 7, 81, -1, 0, 0, 16, -1, 7701), + (7701, -1, -1, 255, 255, 9, 83, -1, 0, 0, 16, 7700, 7702), + (7702, -1, -1, 255, 255, 12, 85, -1, 0, 0, 16, 7701, 12610), + (7703, 7703, 7703, 7703, 7703, 12, 85, 21754, 16, 600, 16, -1, -1), + (7704, -1, -1, 8195, 8195, 5, 81, -1, 0, 0, 16, 8197, 7705), + (7705, -1, -1, 8195, 8195, 5, 83, -1, 0, 0, 16, 7704, 7706), + (7706, -1, -1, 8195, 8195, 5, 85, -1, 0, 0, 16, 7705, -1), + (7707, -1, -1, 589, 589, 7, 85, -1, 0, 0, 16, 7392, 7708), + (7708, -1, -1, 589, 589, 7, 85, -1, 0, 0, 16, 7707, 7709), + (7709, -1, -1, 589, 589, 7, 85, -1, 0, 0, 16, 7708, 13104), + (7710, 5984, 5984, 5984, 5984, 12, 85, 21679, 2, 30, 16, 7335, 7711), + (7711, 5984, 5984, 5984, 5984, 12, 85, 21680, 2, 30, 16, 7710, 10626), + (7712, 7712, 7712, 7712, 7712, 12, 85, 21682, 2, 30, 16, -1, 10646), + (7713, -1, -1, 634, 634, 12, 81, -1, 0, 0, 16, 5613, 7714), + (7714, -1, -1, 634, 634, 12, 83, -1, 0, 0, 16, 7713, 10778), + (7715, -1, -1, 7715, 7715, 5, 77, 0, 0, 0, 16, -1, 7716), + (7716, -1, -1, 7715, 7715, 5, 79, 0, 0, 0, 16, 7715, 7717), + (7717, -1, -1, 7715, 7715, 5, 81, 0, 0, 0, 16, 7716, 14314), + (7718, -1, -1, 574, 574, 3, 81, -1, 0, 0, 16, 576, -1), + (7722, -1, -1, 1486, 1486, 7, 86, -1, 0, 0, 17, 7558, 7723), + (7723, -1, -1, 1486, 1486, 8, 87, -1, 0, 0, 17, 7722, 7724), + (7724, -1, -1, 1486, 1486, 9, 88, -1, 0, 0, 17, 7723, 7725), + (7725, -1, -1, 1486, 1486, 10, 89, -1, 0, 0, 17, 7724, 7726), + (7726, -1, -1, 1486, 1486, 12, 90, -1, 0, 0, 17, 7725, 7842), + (7732, 7732, 7732, 7732, 7732, 0, 60, 7732, 34, 3600, 14, -1, -1), + (7733, -1, -1, 288, 288, 6, 65, -1, 0, 0, 14, -1, -1), + (7734, 7734, 7734, 7734, 7734, 0, 61, 7734, 34, 28800, 14, -1, -1), + (7735, 7735, 7735, 7735, 7735, 0, 51, 7731, 32, 3600, 9, -1, -1), + (7736, 7736, 7736, 7736, 7736, 0, 52, 7865, 32, 10800, 9, -1, -1), + (7737, 7737, 7737, 7737, 7737, 0, 53, 7733, 32, 10800, 9, -1, -1), + (7738, 7738, 7738, 7738, 7738, 0, 54, 7990, 32, 21600, 9, -1, -1), + (7739, 7739, 7739, 7739, 7739, 0, 65, 13064, 36, 3600, 0, -1, -1), + (7740, 7740, 7740, 7740, 7740, 0, 66, 13065, 36, 28800, 0, -1, -1), + (7741, 7741, 7741, 7741, 7741, 0, 70, 21854, 50, 3600, 0, -1, -1), + (7742, 7742, 7742, 7742, 7742, 0, 71, 21855, 50, 28800, 0, -1, -1), + (7743, -1, -1, 7743, 7743, 5, 61, -1, 0, 0, 16, -1, 7744), + (7744, -1, -1, 7743, 7743, 7, 61, -1, 0, 0, 16, 7743, 7745), + (7745, -1, -1, 7743, 7743, 9, 61, -1, 0, 0, 16, 7744, 10717), + (7746, -1, -1, 7746, 7746, 5, 85, -1, 0, 0, 16, -1, 7763), + (7747, 7747, 7747, 7747, 7747, 9, 85, 21790, 32, 180, 16, -1, -1), + (7748, -1, -1, 7748, 7748, 3, 81, -1, 0, 0, 16, -1, 7749), + (7749, -1, -1, 7748, 7748, 6, 83, -1, 0, 0, 16, 7748, 7750), + (7750, -1, -1, 7748, 7748, 9, 85, -1, 0, 0, 16, 7749, -1), + (7751, -1, -1, 7751, 7751, 5, 85, -1, 0, 0, 16, -1, 7752), + (7752, -1, -1, 7751, 7751, 5, 85, -1, 0, 0, 16, 7751, 7753), + (7753, -1, -1, 7751, 7751, 5, 85, -1, 0, 0, 16, 7752, 14132), + (7754, 7754, 7754, 7754, 7754, 9, 85, 21803, 0, 1, 16, -1, -1), + (7755, 7755, 7755, 7755, 7755, 9, 81, 21804, 53, 900, 16, -1, 15782), + (7756, 7756, 7756, 7756, 7756, 12, 85, 21805, 54, 120, 16, -1, -1), + (7757, -1, -1, 7757, 7757, 5, 85, -1, 0, 0, 16, -1, 7758), + (7758, -1, -1, 7757, 7757, 7, 85, -1, 0, 0, 16, 7757, 7759), + (7759, -1, -1, 7757, 7757, 9, 85, -1, 0, 0, 16, 7758, 12587), + (7760, -1, -1, 7760, 7760, 5, 85, -1, 0, 0, 16, -1, 7761), + (7761, -1, -1, 7760, 7760, 7, 85, -1, 0, 0, 16, 7760, 7762), + (7762, -1, -1, 7760, 7760, 9, 85, -1, 0, 0, 16, 7761, -1), + (7763, -1, -1, 7746, 7746, 5, 85, -1, 0, 0, 16, 7746, 7764), + (7764, -1, -1, 7746, 7746, 5, 85, -1, 0, 0, 16, 7763, -1), + (7765, -1, -1, 7765, 7765, 5, 86, 0, 0, 0, 17, -1, 7766), + (7766, -1, -1, 7765, 7765, 7, 87, 0, 0, 0, 17, 7765, 7767), + (7767, -1, -1, 7765, 7765, 9, 88, 0, 0, 0, 17, 7766, 7768), + (7768, -1, -1, 7765, 7765, 12, 89, 0, 0, 0, 17, 7767, 7769), + (7770, 131, 131, 131, 131, 9, 86, 27655, 4, 900, 17, 10018, 7771), + (7771, 131, 131, 131, 131, 12, 88, 27656, 4, 900, 17, 7770, 7772), + (7772, 131, 131, 131, 131, 15, 90, 27657, 4, 900, 17, 7771, 13374), + (7773, 7951, 7951, 7951, 7951, 9, 86, 27658, 61, 900, 17, 10040, 7774), + (7774, 7951, 7951, 7951, 7951, 9, 88, 27659, 61, 900, 17, 7773, 7775), + (7775, 7951, 7951, 7951, 7951, 9, 90, 27660, 61, 900, 17, 7774, 13377), + (7800, 7800, 7800, 7800, 7800, 0, 1, 13531, 39, 4320, 0, -1, 7801), + (7801, 7800, 7800, 7800, 7800, 0, 6, 13532, 39, 4320, 0, 7800, 7802), + (7802, 7800, 7800, 7800, 7800, 0, 11, 13533, 39, 4320, 0, 7801, 7803), + (7803, 7800, 7800, 7800, 7800, 0, 16, 13534, 39, 4320, 0, 7802, 7804), + (7804, 7800, 7800, 7800, 7800, 0, 21, 13535, 39, 4320, 0, 7803, 7805), + (7805, 7800, 7800, 7800, 7800, 0, 26, 13536, 39, 4320, 0, 7804, 7806), + (7806, 7800, 7800, 7800, 7800, 0, 31, 13537, 39, 4320, 0, 7805, 7807), + (7807, 7800, 7800, 7800, 7800, 0, 36, 13538, 39, 4320, 0, 7806, 7808), + (7808, 7800, 7800, 7800, 7800, 0, 41, 13539, 39, 4320, 0, 7807, 7809), + (7809, 7800, 7800, 7800, 7800, 0, 46, 13540, 39, 4320, 0, 7808, 7810), + (7810, 7800, 7800, 7800, 7800, 3, 51, 13541, 39, 4320, 0, 7809, 7811), + (7811, 7800, 7800, 7800, 7800, 4, 56, 13542, 39, 4320, 0, 7810, 7812), + (7812, 7800, 7800, 7800, 7800, 5, 61, 13543, 39, 4320, 0, 7811, 7813), + (7813, 7800, 7800, 7800, 7800, 6, 66, 13544, 39, 4320, 0, 7812, 7814), + (7814, 7800, 7800, 7800, 7800, 7, 71, 13545, 39, 4320, 0, 7813, 7815), + (7815, 7800, 7800, 7800, 7800, 8, 76, 13562, 39, 4320, 0, 7814, 7816), + (7816, 7800, 7800, 7800, 7800, 8, 81, 16062, 39, 4320, 0, 7815, 7817), + (7817, 7800, 7800, 7800, 7800, 9, 83, 16855, 39, 4320, 0, 7816, 10786), + (7818, -1, -1, 7818, 7818, 12, 85, 21750, 0, 0, 16, -1, 13029), + (7819, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 9514, 7820), + (7820, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 7819, 7821), + (7821, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 7820, 7881), + (7822, -1, -1, 7822, 7822, 5, 77, 0, 0, 0, 16, -1, 7823), + (7823, -1, -1, 7822, 7822, 5, 79, 0, 0, 0, 16, 7822, 7824), + (7824, -1, -1, 7822, 7822, 5, 81, 0, 0, 0, 16, 7823, 7825), + (7825, -1, -1, 7822, 7822, 5, 83, 0, 0, 0, 16, 7824, 7826), + (7826, -1, -1, 7822, 7822, 5, 85, 0, 0, 0, 16, 7825, 14328), + (7827, -1, -1, 7827, 7827, 5, 81, 0, 0, 0, 16, -1, -1), + (7828, -1, -1, 7828, 7828, 5, 79, 0, 0, 0, 16, -1, 7829), + (7829, -1, -1, 7828, 7828, 5, 81, 0, 0, 0, 16, 7828, 7830), + (7830, -1, -1, 7828, 7828, 5, 83, 0, 0, 0, 16, 7829, -1), + (7832, -1, -1, 7832, 7832, 5, 85, 0, 0, 0, 16, -1, 7833), + (7833, -1, -1, 7832, 7832, 5, 85, 0, 0, 0, 16, 7832, 7834), + (7834, -1, -1, 7832, 7832, 5, 85, 0, 0, 0, 16, 7833, 7835), + (7835, -1, -1, 7832, 7832, 5, 85, 0, 0, 0, 16, 7834, 7836), + (7836, -1, -1, 7832, 7832, 5, 85, 0, 0, 0, 16, 7835, -1), + (7837, -1, -1, 1006, 1006, 5, 76, -1, 0, 0, 17, 7520, 7838), + (7838, -1, -1, 1006, 1006, 5, 77, -1, 0, 0, 17, 7837, 7839), + (7839, -1, -1, 1006, 1006, 5, 78, -1, 0, 0, 17, 7838, 7840), + (7840, -1, -1, 1006, 1006, 5, 79, -1, 0, 0, 17, 7839, 7841), + (7841, -1, -1, 1006, 1006, 5, 80, -1, 0, 0, 17, 7840, 8470), + (7842, -1, -1, 1486, 1486, 12, 91, -1, 0, 0, 18, 7726, 7843), + (7843, -1, -1, 1486, 1486, 12, 92, -1, 0, 0, 18, 7842, 7844), + (7844, -1, -1, 1486, 1486, 12, 93, -1, 0, 0, 18, 7843, 7845), + (7850, 7850, 7850, 7850, 7850, 0, 1, 13546, 39, 4320, 0, -1, 7851), + (7851, 7850, 7850, 7850, 7850, 0, 6, 13547, 39, 4320, 0, 7850, 7852), + (7852, 7850, 7850, 7850, 7850, 0, 11, 13548, 39, 4320, 0, 7851, 7853), + (7853, 7850, 7850, 7850, 7850, 0, 16, 13549, 39, 4320, 0, 7852, 7854), + (7854, 7850, 7850, 7850, 7850, 0, 21, 13550, 39, 4320, 0, 7853, 7855), + (7855, 7850, 7850, 7850, 7850, 0, 26, 13551, 39, 4320, 0, 7854, 7856), + (7856, 7850, 7850, 7850, 7850, 0, 31, 13552, 39, 4320, 0, 7855, 7857), + (7857, 7850, 7850, 7850, 7850, 0, 36, 13553, 39, 4320, 0, 7856, 7858), + (7858, 7850, 7850, 7850, 7850, 0, 41, 13554, 39, 4320, 0, 7857, 7859), + (7859, 7850, 7850, 7850, 7850, 0, 46, 13555, 39, 4320, 0, 7858, 7860), + (7860, 7850, 7850, 7850, 7850, 3, 51, 13556, 39, 4320, 0, 7859, 7861), + (7861, 7850, 7850, 7850, 7850, 4, 56, 13557, 39, 4320, 0, 7860, 7862), + (7862, 7850, 7850, 7850, 7850, 5, 61, 13558, 39, 4320, 0, 7861, 7863), + (7863, 7850, 7850, 7850, 7850, 6, 66, 13559, 39, 4320, 0, 7862, 7864), + (7864, 7850, 7850, 7850, 7850, 7, 71, 13560, 39, 4320, 0, 7863, 7865), + (7865, 7850, 7850, 7850, 7850, 8, 76, 13561, 39, 4320, 0, 7864, 7340), + (7869, 7869, 7869, 7869, 7869, 6, 73, 16175, 60, 30, 15, -1, 7870), + (7870, 7869, 7869, 7869, 7869, 6, 77, 16176, 60, 30, 15, 7869, 7871), + (7871, 7869, 7869, 7869, 7869, 6, 81, 16177, 60, 30, 15, 7870, -1), + (7872, 7872, 7872, 7872, 7872, 6, 76, 16178, 41, 600, 15, -1, 7873), + (7873, 7872, 7872, 7872, 7872, 6, 81, 16179, 41, 600, 15, 7872, 7874), + (7874, 7872, 7872, 7872, 7872, 6, 85, 16180, 41, 600, 15, 7873, 10127), + (7875, 7875, 7875, 7875, 7875, 6, 76, 16181, 42, 600, 15, -1, 7876), + (7876, 7875, 7875, 7875, 7875, 6, 81, 16182, 42, 600, 15, 7875, 7877), + (7877, 7875, 7875, 7875, 7875, 6, 85, 16183, 42, 600, 15, 7876, 7878), + (7878, 7875, 7875, 7875, 7875, 6, 85, 16859, 42, 600, 16, 7877, 7879), + (7879, 7875, 7875, 7875, 7875, 6, 85, 21823, 42, 600, 16, 7878, 7880), + (7880, 7875, 7875, 7875, 7875, 6, 85, 21824, 42, 600, 16, 7879, 13816), + (7881, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 7821, 7882), + (7882, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 7881, 7883), + (7883, -1, -1, 9512, 9512, 7, 85, -1, 0, 0, 16, 7882, 13187), + (7884, -1, -1, 7884, 7884, 9, 85, -1, 0, 0, 16, -1, 12689), + (7885, -1, -1, 7885, 7885, 9, 85, -1, 0, 0, 16, -1, 12690), + (7886, -1, -1, 1026, 1026, 5, 85, -1, 0, 0, 17, 7515, 7887), + (7887, -1, -1, 1026, 1026, 5, 86, -1, 0, 0, 17, 7886, 7888), + (7888, -1, -1, 1026, 1026, 5, 87, -1, 0, 0, 17, 7887, 7889), + (7889, -1, -1, 1026, 1026, 5, 88, -1, 0, 0, 17, 7888, 7890), + (7890, -1, -1, 1026, 1026, 5, 89, -1, 0, 0, 17, 7889, 8430), + (7900, -1, -1, 7900, 7900, 4, 60, -1, 0, 0, 15, -1, 7901), + (7901, -1, -1, 7900, 7900, 4, 65, -1, 0, 0, 15, 7900, 7902), + (7902, -1, -1, 7900, 7900, 4, 70, -1, 0, 0, 15, 7901, 10268), + (7903, 7903, 7903, 7903, 7903, 6, 75, 16188, 60, 30, 15, -1, 12976), + (7904, -1, -1, 65, 661, 3, 85, -1, 0, 0, 17, 7538, 7905), + (7905, -1, -1, 65, 661, 3, 86, -1, 0, 0, 17, 7904, 7906), + (7906, -1, -1, 65, 661, 3, 87, -1, 0, 0, 17, 7905, 7907), + (7907, -1, -1, 65, 661, 3, 88, -1, 0, 0, 17, 7906, 7908), + (7908, -1, -1, 65, 661, 3, 89, -1, 0, 0, 17, 7907, 8435), + (7940, -1, -1, 7940, 7940, 6, 60, -1, 0, 0, 15, -1, 7941), + (7941, -1, -1, 7940, 7940, 6, 65, -1, 0, 0, 15, 7940, 7942), + (7942, -1, -1, 7940, 7940, 6, 70, -1, 0, 0, 15, 7941, 10030), + (7943, 7943, 7943, 7943, 7943, 6, 79, 16192, 60, 8640, 15, -1, 7993), + (7944, 7944, 7944, 7944, 7944, 7, 79, 16193, 34, 1800, 15, -1, -1), + (7945, -1, -1, 7945, 7945, 6, 81, -1, 0, 0, 15, -1, 7946), + (7946, -1, -1, 7945, 7945, 6, 82, -1, 0, 0, 15, 7945, 7947), + (7947, -1, -1, 7945, 7945, 6, 83, -1, 0, 0, 15, 7946, 10033), + (7948, -1, -1, 7948, 7948, 6, 75, -1, 0, 0, 15, -1, 7949), + (7949, -1, -1, 7948, 7948, 6, 80, -1, 0, 0, 15, 7948, 7950), + (7950, -1, -1, 7948, 7948, 6, 85, -1, 0, 0, 15, 7949, 10035), + (7951, 7951, 7951, 7951, 7951, 6, 82, 16200, 61, 900, 15, -1, 7952), + (7952, 7951, 7951, 7951, 7951, 6, 83, 16201, 61, 900, 15, 7951, 7953), + (7953, 7951, 7951, 7951, 7951, 6, 84, 16202, 61, 900, 15, 7952, 10038), + (7980, -1, -1, 7980, 7980, 6, 70, -1, 0, 0, 15, -1, 7981), + (7981, -1, -1, 7980, 7980, 6, 73, -1, 0, 0, 15, 7980, 7982), + (7982, -1, -1, 7980, 7980, 6, 76, -1, 0, 0, 15, 7981, -1), + (7983, -1, -1, 7983, 7983, 6, 70, -1, 0, 0, 15, -1, 7984), + (7984, -1, -1, 7983, 7983, 6, 73, -1, 0, 0, 15, 7983, 7985), + (7985, -1, -1, 7983, 7983, 6, 76, -1, 0, 0, 15, 7984, 10110), + (7986, 7986, 7986, 7986, 7986, 9, 75, 16203, 11, 600, 15, -1, 7987), + (7987, 7986, 7986, 7986, 7986, 12, 80, 16204, 11, 600, 15, 7986, 7988), + (7988, 7986, 7986, 7986, 7986, 12, 85, 16205, 11, 600, 15, 7987, 10510), + (7989, -1, -1, 7989, 7989, 6, 75, -1, 0, 0, 15, -1, 7990), + (7990, -1, -1, 7989, 7989, 6, 80, -1, 0, 0, 15, 7989, 7991), + (7991, -1, -1, 7989, 7989, 6, 85, -1, 0, 0, 15, 7990, 7992), + (7992, -1, -1, 7989, 7989, 6, 85, -1, 0, 0, 15, 7991, 13415), + (7993, 7943, 7943, 7943, 7943, 6, 85, 23601, 60, 8640, 17, 7943, -1), + (7994, -1, -1, 462, 462, 2, 81, -1, 0, 0, 17, 464, 7995), + (7995, -1, -1, 462, 462, 2, 85, -1, 0, 0, 17, 7994, -1), + (8000, -1, -1, 8001, 8001, 0, 50, -1, 0, 0, 8, -1, -1), + (8030, 8030, 8030, 8030, 8030, 6, 70, 16206, 60, 900, 15, -1, -1), + (8031, -1, -1, 8031, 8031, 6, 75, -1, 0, 0, 15, -1, 8032), + (8032, -1, -1, 8031, 8031, 6, 77, -1, 0, 0, 15, 8031, 8033), + (8033, -1, -1, 8031, 8031, 6, 79, -1, 0, 0, 15, 8032, 10282), + (8034, 8034, 8034, 8034, 8034, 6, 81, 16207, 59, 600, 15, -1, -1), + (8035, -1, -1, 8035, 8035, 6, 73, -1, 0, 0, 15, -1, 8036), + (8036, -1, -1, 8035, 8035, 6, 75, -1, 0, 0, 15, 8035, 8037), + (8037, -1, -1, 8035, 8035, 6, 77, -1, 0, 0, 15, 8036, 10285), + (8038, 8038, 8038, 8038, 8038, 6, 81, 16210, 56, 12, 15, -1, 17541), + (8039, 8039, 8039, 8039, 8039, 6, 83, 16211, 58, 7, 15, -1, 15462), + (8040, -1, -1, 8040, 8040, 4, 65, -1, 0, 0, 15, -1, 8041), + (8041, -1, -1, 8040, 8040, 4, 70, -1, 0, 0, 15, 8040, 8042), + (8042, -1, -1, 8040, 8040, 4, 75, -1, 0, 0, 15, 8041, 8043), + (8043, -1, -1, 8040, 8040, 4, 78, -1, 0, 0, 15, 8042, 8313), + (8059, -1, -1, 8232, 8232, 4, 78, -1, 0, 0, 15, 8234, 8261), + (8060, 8060, 8060, 8060, 8060, 7, 75, 16238, 41, 1800, 15, -1, 8061), + (8061, 8060, 8060, 8060, 8060, 7, 78, 16239, 41, 1800, 15, 8060, 8062), + (8062, 8060, 8060, 8060, 8060, 7, 81, 16240, 41, 1800, 15, 8061, 10237), + (8063, 8063, 8063, 8063, 8063, 7, 75, 16241, 41, 1800, 15, -1, 8064), + (8064, 8063, 8063, 8063, 8063, 7, 78, 16242, 41, 1800, 15, 8063, 8065), + (8065, 8063, 8063, 8063, 8063, 7, 81, 16243, 41, 1800, 15, 8064, 10240), + (8066, 8066, 8066, 8066, 8066, 7, 75, 16244, 41, 1800, 15, -1, 8067), + (8067, 8066, 8066, 8066, 8066, 7, 78, 16245, 41, 1800, 15, 8066, 8068), + (8068, 8066, 8066, 8066, 8066, 7, 81, 16246, 41, 1800, 15, 8067, 10243), + (8069, -1, -1, 8069, 8069, 5, 71, -1, 0, 0, 15, -1, 8070), + (8070, -1, -1, 8069, 8069, 5, 72, -1, 0, 0, 15, 8069, 8071), + (8071, -1, -1, 8069, 8069, 5, 73, -1, 0, 0, 15, 8070, 15606), + (8072, 8072, 8072, 8072, 8072, 7, 75, 16221, 37, 20, 15, -1, 8073), + (8073, 8072, 8072, 8072, 8072, 7, 75, 16222, 37, 20, 15, 8072, 8074), + (8074, 8072, 8072, 8072, 8072, 7, 75, 16223, 37, 20, 15, 8073, 10246), + (8075, 8075, 8075, 8075, 8075, 7, 81, 16224, 42, 6, 15, -1, -1), + (8076, -1, -1, 8076, 8076, 5, 77, -1, 0, 0, 15, -1, 8077), + (8077, -1, -1, 8076, 8076, 5, 78, -1, 0, 0, 15, 8076, 8078), + (8078, -1, -1, 8076, 8076, 5, 79, -1, 0, 0, 15, 8077, 8079), + (8079, -1, -1, 8076, 8076, 5, 80, -1, 0, 0, 15, 8078, 8080), + (8080, -1, -1, 8076, 8076, 5, 81, -1, 0, 0, 15, 8079, 8081), + (8081, -1, -1, 8076, 8076, 5, 82, -1, 0, 0, 15, 8080, -1), + (8082, -1, -1, 8082, 8082, 3, 65, -1, 0, 0, 15, -1, 8083), + (8083, -1, -1, 8082, 8082, 3, 67, -1, 0, 0, 15, 8082, 8084), + (8084, -1, -1, 8082, 8082, 3, 69, -1, 0, 0, 15, 8083, 10249), + (8190, -1, -1, 8190, 8190, 7, 75, -1, 0, 0, 15, -1, 8191), + (8191, -1, -1, 8190, 8190, 7, 75, -1, 0, 0, 15, 8190, 8192), + (8192, -1, -1, 8190, 8190, 7, 75, -1, 0, 0, 15, 8191, -1), + (8193, -1, -1, 8193, 8193, 7, 75, -1, 0, 0, 15, -1, -1), + (8194, 8194, 8194, 8194, 8194, 7, 75, 16226, 47, 12, 15, -1, -1), + (8195, -1, -1, 8195, 8195, 4, 75, -1, 0, 0, 15, -1, 8196), + (8196, -1, -1, 8195, 8195, 4, 75, -1, 0, 0, 15, 8195, 8197), + (8197, -1, -1, 8195, 8195, 4, 75, -1, 0, 0, 15, 8196, 7704), + (8198, -1, -1, 8198, 8198, 4, 65, -1, 0, 0, 15, -1, 8199), + (8199, -1, -1, 8198, 8198, 4, 65, -1, 0, 0, 15, 8198, 8200), + (8200, -1, -1, 8198, 8198, 4, 65, -1, 0, 0, 15, 8199, -1), + (8201, -1, -1, 8201, 8201, 7, 81, -1, 0, 0, 15, -1, 8202), + (8202, -1, -1, 8201, 8201, 7, 81, -1, 0, 0, 15, 8201, 8203), + (8203, -1, -1, 8201, 8201, 7, 81, -1, 0, 0, 15, 8202, 16475), + (8204, -1, -1, 8204, 8204, 4, 75, -1, 0, 0, 15, -1, 8205), + (8205, -1, -1, 8204, 8204, 4, 75, -1, 0, 0, 15, 8204, 8206), + (8206, -1, -1, 8204, 8204, 4, 75, -1, 0, 0, 15, 8205, 1656), + (8207, -1, -1, 8207, 8207, 4, 75, -1, 0, 0, 15, -1, 8208), + (8208, -1, -1, 8207, 8207, 4, 75, -1, 0, 0, 15, 8207, 8209), + (8209, -1, -1, 8207, 8207, 4, 75, -1, 0, 0, 15, 8208, 1659), + (8210, -1, -1, 8210, 8210, 5, 65, -1, 0, 0, 15, -1, 8211), + (8211, -1, -1, 8210, 8210, 5, 70, -1, 0, 0, 15, 8210, 8212), + (8212, -1, -1, 8210, 8210, 5, 75, -1, 0, 0, 15, 8211, 8213), + (8213, -1, -1, 8210, 8210, 5, 80, -1, 0, 0, 15, 8212, 8214), + (8214, -1, -1, 8210, 8210, 5, 85, -1, 0, 0, 15, 8213, 1651), + (8215, -1, -1, 8215, 8215, 5, 65, -1, 0, 0, 15, -1, 8216), + (8216, -1, -1, 8215, 8215, 5, 70, -1, 0, 0, 15, 8215, 8217), + (8217, -1, -1, 8215, 8215, 5, 75, -1, 0, 0, 15, 8216, 8218), + (8218, -1, -1, 8215, 8215, 5, 80, -1, 0, 0, 15, 8217, 8219), + (8219, -1, -1, 8215, 8215, 5, 85, -1, 0, 0, 15, 8218, 12559), + (8220, 8220, 8220, 8220, 8220, 5, 76, 16227, 39, 15, 15, -1, -1), + (8221, 8221, 8221, 8221, 8221, 9, 81, 16228, 45, 600, 15, -1, -1), + (8222, 8222, 8222, 8222, 8222, 7, 75, 16229, 70, 10, 15, -1, -1), + (8223, -1, -1, 86, 86, 8, 59, -1, 0, 0, 15, 6259, 8262), + (8224, -1, -1, 8224, 8224, 5, 75, -1, 0, 0, 15, -1, 8225), + (8225, -1, -1, 8224, 8224, 5, 80, -1, 0, 0, 15, 8224, 8226), + (8226, -1, -1, 8224, 8224, 5, 85, -1, 0, 0, 15, 8225, 8421), + (8227, 8227, 8227, 8227, 8227, 3, 55, 16233, 71, 10, 15, -1, 12810), + (8228, -1, -1, 8228, 8228, 5, 75, -1, 0, 0, 15, -1, 8229), + (8229, -1, -1, 8228, 8228, 5, 80, -1, 0, 0, 15, 8228, 8230), + (8230, -1, -1, 8228, 8228, 5, 85, -1, 0, 0, 15, 8229, -1), + (8231, 8231, -1, 8231, 8231, 3, 55, 16234, 38, 60, 15, -1, -1), + (8232, -1, -1, 8232, 8232, 4, 65, -1, 0, 0, 15, -1, 8233), + (8233, -1, -1, 8232, 8232, 4, 70, -1, 0, 0, 15, 8232, 8234), + (8234, -1, -1, 8232, 8232, 4, 75, -1, 0, 0, 15, 8233, 8059), + (8235, -1, -1, 8235, 8235, 6, 81, -1, 0, 0, 15, -1, 8236), + (8236, -1, -1, 8235, 8235, 6, 81, -1, 0, 0, 15, 8235, 8237), + (8237, -1, -1, 8235, 8235, 6, 81, -1, 0, 0, 15, 8236, 8238), + (8238, -1, -1, 8235, 8235, 6, 81, -1, 0, 0, 15, 8237, 8239), + (8239, -1, -1, 8235, 8235, 6, 81, -1, 0, 0, 15, 8238, 8304), + (8240, -1, -1, 8240, 8240, 6, 81, -1, 0, 0, 15, -1, 8241), + (8241, -1, -1, 8240, 8240, 6, 81, -1, 0, 0, 15, 8240, 8242), + (8242, -1, -1, 8240, 8240, 6, 81, -1, 0, 0, 15, 8241, 8243), + (8243, -1, -1, 8240, 8240, 6, 81, -1, 0, 0, 15, 8242, 8244), + (8244, -1, -1, 8240, 8240, 6, 81, -1, 0, 0, 15, 8243, 10781), + (8245, -1, -1, 8245, 8245, 6, 81, -1, 0, 0, 15, -1, 8246), + (8246, -1, -1, 8245, 8245, 6, 81, -1, 0, 0, 15, 8245, 8247), + (8247, -1, -1, 8245, 8245, 6, 81, -1, 0, 0, 15, 8246, 8248), + (8248, -1, -1, 8245, 8245, 6, 81, -1, 0, 0, 15, 8247, 8249), + (8249, -1, -1, 8245, 8245, 6, 81, -1, 0, 0, 15, 8248, 8422), + (8250, -1, -1, 8250, 8250, 6, 81, -1, 0, 0, 15, -1, 8251), + (8251, -1, -1, 8250, 8250, 6, 81, -1, 0, 0, 15, 8250, 8252), + (8252, -1, -1, 8250, 8250, 6, 81, -1, 0, 0, 15, 8251, 8253), + (8253, -1, -1, 8250, 8250, 6, 81, -1, 0, 0, 15, 8252, 8254), + (8254, -1, -1, 8250, 8250, 6, 81, -1, 0, 0, 15, 8253, 13046), + (8255, -1, -1, 8255, 8255, 6, 81, -1, 0, 0, 15, -1, 8256), + (8256, -1, -1, 8255, 8255, 6, 81, -1, 0, 0, 15, 8255, 8257), + (8257, -1, -1, 8255, 8255, 6, 81, -1, 0, 0, 15, 8256, 8258), + (8258, -1, -1, 8255, 8255, 6, 81, -1, 0, 0, 15, 8257, 8259), + (8259, -1, -1, 8255, 8255, 6, 81, -1, 0, 0, 15, 8258, 12411), + (8260, 8005, 8005, 8005, 8005, 9, 85, 20185, 45, 600, 16, -1, -1), + (8261, -1, -1, 8232, 8232, 4, 80, -1, 0, 0, 16, 8059, 15772), + (8262, -1, -1, 86, 86, 8, 65, -1, 0, 0, 16, 8223, -1), + (8263, -1, -1, 8263, 8263, 5, 81, -1, 0, 0, 16, -1, 8264), + (8264, -1, -1, 8263, 8263, 5, 82, -1, 0, 0, 16, 8263, 8265), + (8265, -1, -1, 8263, 8263, 5, 83, -1, 0, 0, 16, 8264, 8266), + (8266, -1, -1, 8263, 8263, 5, 84, -1, 0, 0, 16, 8265, 8267), + (8267, -1, -1, 8263, 8263, 5, 85, -1, 0, 0, 16, 8266, 8351), + (8268, -1, -1, 8268, 8268, 5, 81, -1, 0, 0, 16, -1, 8269), + (8269, -1, -1, 8268, 8268, 5, 82, -1, 0, 0, 16, 8268, 8270), + (8270, -1, -1, 8268, 8268, 5, 83, -1, 0, 0, 16, 8269, 8271), + (8271, -1, -1, 8268, 8268, 5, 84, -1, 0, 0, 16, 8270, 8272), + (8272, -1, -1, 8268, 8268, 5, 85, -1, 0, 0, 16, 8271, 8361), + (8273, -1, -1, 8273, 8273, 5, 81, -1, 0, 0, 16, -1, 8274), + (8274, -1, -1, 8273, 8273, 5, 82, -1, 0, 0, 16, 8273, 8275), + (8275, -1, -1, 8273, 8273, 5, 83, -1, 0, 0, 16, 8274, 8276), + (8276, -1, -1, 8273, 8273, 5, 84, -1, 0, 0, 16, 8275, 8277), + (8277, -1, -1, 8273, 8273, 5, 85, -1, 0, 0, 16, 8276, 8371), + (8278, -1, -1, 8278, 8278, 5, 81, -1, 0, 0, 16, -1, 8279), + (8279, -1, -1, 8278, 8278, 5, 82, -1, 0, 0, 16, 8278, 8280), + (8280, -1, -1, 8278, 8278, 5, 83, -1, 0, 0, 16, 8279, 8281), + (8281, -1, -1, 8278, 8278, 5, 84, -1, 0, 0, 16, 8280, 8282), + (8282, -1, -1, 8278, 8278, 5, 85, -1, 0, 0, 16, 8281, 8381), + (8283, -1, -1, 8283, 8283, 5, 81, -1, 0, 0, 16, -1, 8284), + (8284, -1, -1, 8283, 8283, 5, 82, -1, 0, 0, 16, 8283, 8285), + (8285, -1, -1, 8283, 8283, 5, 83, -1, 0, 0, 16, 8284, 8286), + (8286, -1, -1, 8283, 8283, 5, 84, -1, 0, 0, 16, 8285, 8287), + (8287, -1, -1, 8283, 8283, 5, 85, -1, 0, 0, 16, 8286, 8391), + (8288, -1, -1, 8288, 8288, 5, 81, -1, 0, 0, 16, -1, 8289), + (8289, -1, -1, 8288, 8288, 5, 82, -1, 0, 0, 16, 8288, 8290), + (8290, -1, -1, 8288, 8288, 5, 83, -1, 0, 0, 16, 8289, 8291), + (8291, -1, -1, 8288, 8288, 5, 84, -1, 0, 0, 16, 8290, 8292), + (8292, -1, -1, 8288, 8288, 5, 85, -1, 0, 0, 16, 8291, 8401), + (8293, -1, -1, 8293, 8293, 5, 81, -1, 0, 0, 16, -1, 8294), + (8294, -1, -1, 8293, 8293, 5, 82, -1, 0, 0, 16, 8293, 8295), + (8295, -1, -1, 8293, 8293, 5, 83, -1, 0, 0, 16, 8294, 8296), + (8296, -1, -1, 8293, 8293, 5, 84, -1, 0, 0, 16, 8295, 8297), + (8297, -1, -1, 8293, 8293, 5, 85, -1, 0, 0, 16, 8296, 8411), + (8300, 8300, 8300, 8300, 8300, 5, 81, 21778, 8, 900, 16, -1, 8301), + (8301, 8300, 8300, 8300, 8300, 7, 83, 21779, 8, 900, 16, 8300, 8302), + (8302, 8300, 8300, 8300, 8300, 9, 85, 21780, 8, 900, 16, 8301, 15111), + (8303, 8303, 8303, 8303, 8303, 12, 85, 21773, 9, 1800, 16, -1, -1), + (8304, -1, -1, 8235, 8235, 6, 85, -1, 0, 0, 16, 8239, 8305), + (8305, -1, -1, 8235, 8235, 6, 85, -1, 0, 0, 16, 8304, 8306), + (8306, -1, -1, 8235, 8235, 6, 85, -1, 0, 0, 16, 8305, 8307), + (8307, -1, -1, 8235, 8235, 6, 85, -1, 0, 0, 16, 8306, 8308), + (8308, -1, -1, 8235, 8235, 6, 85, -1, 0, 0, 16, 8307, 13353), + (8309, 260, -1, 260, 260, 5, 81, 21687, 3, 2160, 16, 262, 8310), + (8310, 260, -1, 260, 260, 7, 83, 21688, 3, 2160, 16, 8309, 8311), + (8311, 260, -1, 260, 260, 9, 85, 21689, 3, 2160, 16, 8310, -1), + (8312, 8312, 8312, 8312, 8312, 12, 85, 21690, 2, 900, 16, -1, -1), + (8313, -1, -1, 8040, 8040, 4, 80, -1, 0, 0, 16, 8043, 15773), + (8314, -1, -1, 8314, 8314, 7, 85, -1, 0, 0, 16, -1, 8315), + (8315, -1, -1, 8314, 8314, 9, 85, -1, 0, 0, 16, 8314, 8316), + (8316, -1, -1, 8314, 8314, 12, 85, -1, 0, 0, 16, 8315, 13508), + (8317, -1, -1, 8317, 8317, 5, 85, -1, 0, 0, 16, -1, 8318), + (8318, -1, -1, 8317, 8317, 5, 85, -1, 0, 0, 16, 8317, -1), + (8319, -1, -1, 8319, 8319, 5, 85, -1, 0, 0, 16, -1, 8320), + (8320, -1, -1, 8319, 8319, 5, 85, -1, 0, 0, 16, 8319, 8321), + (8321, -1, -1, 8319, 8319, 5, 85, -1, 0, 0, 16, 8320, -1), + (8322, -1, -1, 8322, 8322, 5, 81, 0, 0, 0, 16, -1, 8323), + (8323, -1, -1, 8322, 8322, 7, 83, 0, 0, 0, 16, 8322, 8324), + (8324, -1, -1, 8322, 8322, 9, 85, 0, 0, 0, 16, 8323, 13199), + (8325, -1, -1, 8325, 8325, 7, 81, 0, 0, 0, 16, -1, 8326), + (8326, -1, -1, 8325, 8325, 9, 81, 0, 0, 0, 16, 8325, 8327), + (8327, -1, -1, 8325, 8325, 11, 81, 0, 0, 0, 16, 8326, 13219), + (8328, -1, -1, 244, 244, 12, 59, -1, 0, 0, 3, 246, -1), + (8329, -1, -1, 622, 622, 3, 71, -1, 0, 0, 16, 624, -1), + (8331, -1, -1, 8331, 8331, 9, 85, 0, 0, 0, 16, -1, -1), + (8332, -1, -1, 8332, 8332, 7, 85, 0, 0, 0, 16, -1, 8333), + (8333, -1, -1, 8332, 8332, 7, 85, 0, 0, 0, 16, 8332, 8334), + (8334, -1, -1, 8332, 8332, 7, 85, 0, 0, 0, 16, 8333, -1), + (8335, -1, -1, 8335, 8335, 5, 81, 0, 0, 0, 16, -1, 8336), + (8336, -1, -1, 8335, 8335, 5, 82, 0, 0, 0, 16, 8335, 8337), + (8337, -1, -1, 8335, 8335, 5, 83, 0, 0, 0, 16, 8336, 8338), + (8338, -1, -1, 8335, 8335, 5, 84, 0, 0, 0, 16, 8337, 8339), + (8339, -1, -1, 8335, 8335, 5, 85, 0, 0, 0, 16, 8338, -1), + (8341, 8341, 8341, 8341, 8341, 12, 85, 21829, 53, 450, 16, -1, -1), + (8342, 8342, 8342, 8342, 8342, 12, 85, 21843, 54, 240, 16, -1, 14729), + (8343, 167, 167, 167, 167, 10, 85, 21837, 14, 900, 16, 7249, 12955), + (8344, -1, -1, 1210, 1213, 12, 85, -1, 0, 0, 16, 7583, 8345), + (8345, -1, -1, 1210, 1213, 12, 85, -1, 0, 0, 16, 8344, 8346), + (8346, -1, -1, 1210, 1213, 12, 85, -1, 0, 0, 16, 8345, 12526), + (8347, -1, -1, 8347, 8347, 7, 81, 0, 0, 0, 16, -1, 8348), + (8348, -1, -1, 8347, 8347, 9, 83, 0, 0, 0, 16, 8347, 8349), + (8349, -1, -1, 8347, 8347, 11, 85, 0, 0, 0, 16, 8348, -1), + (8350, -1, -1, 8350, 8350, 12, 85, 0, 0, 0, 16, -1, -1), + (8351, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8267, 8352), + (8352, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8351, 8353), + (8353, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8352, 8354), + (8354, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8353, 8355), + (8355, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8354, 8356), + (8356, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8355, 8357), + (8357, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8356, 8358), + (8358, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8357, 8359), + (8359, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8358, 8360), + (8360, -1, -1, 8263, 8263, 3, 85, -1, 0, 0, 17, 8359, 13933), + (8361, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8272, 8362), + (8362, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8361, 8363), + (8363, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8362, 8364), + (8364, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8363, 8365), + (8365, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8364, 8366), + (8366, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8365, 8367), + (8367, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8366, 8368), + (8368, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8367, 8369), + (8369, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8368, 8370), + (8370, -1, -1, 8268, 8268, 3, 85, -1, 0, 0, 17, 8369, 13943), + (8371, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8277, 8372), + (8372, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8371, 8373), + (8373, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8372, 8374), + (8374, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8373, 8375), + (8375, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8374, 8376), + (8376, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8375, 8377), + (8377, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8376, 8378), + (8378, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8377, 8379), + (8379, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8378, 8380), + (8380, -1, -1, 8273, 8273, 3, 85, -1, 0, 0, 17, 8379, 13953), + (8381, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8282, 8382), + (8382, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8381, 8383), + (8383, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8382, 8384), + (8384, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8383, 8385), + (8385, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8384, 8386), + (8386, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8385, 8387), + (8387, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8386, 8388), + (8388, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8387, 8389), + (8389, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8388, 8390), + (8390, -1, -1, 8278, 8278, 3, 85, -1, 0, 0, 17, 8389, 13963), + (8391, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8287, 8392), + (8392, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8391, 8393), + (8393, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8392, 8394), + (8394, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8393, 8395), + (8395, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8394, 8396), + (8396, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8395, 8397), + (8397, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8396, 8398), + (8398, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8397, 8399), + (8399, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8398, 8400), + (8400, -1, -1, 8283, 8283, 3, 85, -1, 0, 0, 17, 8399, 13973), + (8401, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8292, 8402), + (8402, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8401, 8403), + (8403, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8402, 8404), + (8404, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8403, 8405), + (8405, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8404, 8406), + (8406, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8405, 8407), + (8407, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8406, 8408), + (8408, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8407, 8409), + (8409, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8408, 8410), + (8410, -1, -1, 8288, 8288, 3, 85, -1, 0, 0, 17, 8409, 13983), + (8411, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8297, 8412), + (8412, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8411, 8413), + (8413, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8412, 8414), + (8414, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8413, 8415), + (8415, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8414, 8416), + (8416, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8415, 8417), + (8417, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8416, 8418), + (8418, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8417, 8419), + (8419, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8418, 8420), + (8420, -1, -1, 8293, 8293, 3, 85, -1, 0, 0, 17, 8419, 13993), + (8421, -1, -1, 8224, 8224, 5, 90, -1, 0, 0, 17, 8226, -1), + (8422, -1, -1, 8245, 8245, 6, 86, -1, 0, 0, 17, 8249, 8423), + (8423, -1, -1, 8245, 8245, 6, 87, -1, 0, 0, 17, 8422, 8424), + (8424, -1, -1, 8245, 8245, 6, 88, -1, 0, 0, 17, 8423, 8425), + (8425, -1, -1, 8245, 8245, 6, 89, -1, 0, 0, 17, 8424, 8426), + (8426, -1, -1, 8245, 8245, 6, 90, -1, 0, 0, 17, 8425, 13338), + (8427, -1, -1, 7100, 7100, 6, 85, -1, 0, 0, 17, 7325, 8428), + (8428, -1, -1, 7100, 7100, 6, 87, -1, 0, 0, 17, 8427, 8429), + (8429, -1, -1, 7100, 7100, 6, 89, -1, 0, 0, 17, 8428, -1), + (8430, -1, -1, 1026, 1026, 10, 91, -1, 0, 0, 18, 7890, 8431), + (8435, -1, -1, 65, 661, 8, 91, -1, 0, 0, 18, 7908, 8436), + (8440, -1, -1, 122, 122, 13, 91, -1, 0, 0, 18, 13089, 8441), + (8445, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 12637, 8446), + (8446, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 8445, 8447), + (8447, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 8446, 16419), + (8448, -1, -1, 6119, 6119, 8, 91, -1, 0, 0, 18, 12496, 8449), + (8463, -1, -1, 125, 125, 10, 91, -1, 0, 0, 18, 13084, 8464), + (8464, -1, -1, 125, 125, 11, 91, -1, 0, 0, 18, 8463, 8465), + (8470, -1, -1, 1006, 1006, 10, 91, -1, 0, 0, 18, 7841, 8471), + (9000, 9000, 9000, 9000, 9000, 0, 1, 16995, 49, 72000, 0, -1, -1), + (9001, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, -1, 9002), + (9002, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9001, 9003), + (9003, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9002, 9004), + (9004, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9003, 9005), + (9005, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9004, 9006), + (9006, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9005, 9007), + (9007, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9006, 9008), + (9008, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9007, 9009), + (9009, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9008, 9010), + (9010, -1, -1, 9101, 9101, 2, 51, -1, 0, 0, 15, 9009, -1), + (9011, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, -1, 9012), + (9012, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9011, 9013), + (9013, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9012, 9014), + (9014, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9013, 9015), + (9015, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9014, 9016), + (9016, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9015, 9017), + (9017, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9016, 9018), + (9018, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9017, 9019), + (9019, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9018, 9020), + (9020, -1, -1, 9111, 9111, 4, 51, -1, 0, 0, 15, 9019, -1), + (9021, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, -1, 9022), + (9022, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9021, 9023), + (9023, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9022, 9024), + (9024, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9023, 9025), + (9025, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9024, 9026), + (9026, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9025, 9027), + (9027, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9026, 9028), + (9028, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9027, 9029), + (9029, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9028, 9030), + (9030, -1, -1, 9121, 9121, 3, 51, -1, 0, 0, 15, 9029, -1), + (9031, 9031, 9031, 9031, 9031, 0, 1, 16601, 65, 72000, 0, -1, -1), + (9032, 9032, 9032, 9032, 9032, 0, 0, 21815, 51, 72000, 0, -1, -1), + (9033, -1, -1, 9033, 9033, 0, 1, -1, 0, 0, 0, -1, -1), + (9100, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, -1, 9101), + (9101, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9100, 9102), + (9102, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9101, 9103), + (9103, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9102, 9104), + (9104, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9103, 9105), + (9105, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9104, 9106), + (9106, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9105, 9107), + (9107, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9106, 9108), + (9108, -1, -1, 9100, 9100, 1, 85, -1, 0, 0, 15, 9107, -1), + (9109, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, -1, 9110), + (9110, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9109, 9111), + (9111, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9110, 9112), + (9112, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9111, 9113), + (9113, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9112, 9114), + (9114, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9113, 9115), + (9115, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9114, 9116), + (9116, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9115, 9117), + (9117, -1, -1, 9109, 9109, 1, 85, -1, 0, 0, 15, 9116, -1), + (9118, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, -1, 9119), + (9119, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9118, 9120), + (9120, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9119, 9121), + (9121, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9120, 9122), + (9122, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9121, 9123), + (9123, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9122, 9124), + (9124, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9123, 9125), + (9125, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9124, 9126), + (9126, -1, -1, 9118, 9118, 1, 85, -1, 0, 0, 15, 9125, -1), + (9127, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, -1, 9128), + (9128, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9127, 9129), + (9129, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9128, 9130), + (9130, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9129, 9131), + (9131, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9130, 9132), + (9132, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9131, 9133), + (9133, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9132, 9134), + (9134, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9133, 9135), + (9135, -1, -1, 9127, 9127, 1, 85, -1, 0, 0, 15, 9134, -1), + (9136, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, -1, 9137), + (9137, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9136, 9138), + (9138, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9137, 9139), + (9139, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9138, 9140), + (9140, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9139, 9141), + (9141, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9140, 9142), + (9142, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9141, 9143), + (9143, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9142, 9144), + (9144, -1, -1, 9136, 9136, 1, 85, -1, 0, 0, 15, 9143, -1), + (9145, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, -1, 9146), + (9146, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9145, 9147), + (9147, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9146, 9148), + (9148, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9147, 9149), + (9149, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9148, 9150), + (9150, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9149, 9151), + (9151, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9150, 9152), + (9152, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9151, 9153), + (9153, -1, -1, 9145, 9145, 1, 85, -1, 0, 0, 15, 9152, -1), + (9154, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, -1, 9155), + (9155, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9154, 9156), + (9156, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9155, 9157), + (9157, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9156, 9158), + (9158, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9157, 9159), + (9159, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9158, 9160), + (9160, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9159, 9161), + (9161, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9160, 9162), + (9162, -1, -1, 9154, 9154, 1, 85, -1, 0, 0, 15, 9161, -1), + (9163, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, -1, 9164), + (9164, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9163, 9165), + (9165, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9164, 9166), + (9166, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9165, 9167), + (9167, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9166, 9168), + (9168, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9167, 9169), + (9169, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9168, 9170), + (9170, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9169, 9171), + (9171, -1, -1, 9163, 9163, 1, 85, -1, 0, 0, 15, 9170, -1), + (9172, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, -1, 9173), + (9173, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9172, 9174), + (9174, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9173, 9175), + (9175, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9174, 9176), + (9176, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9175, 9177), + (9177, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9176, 9178), + (9178, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9177, 9179), + (9179, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9178, 9180), + (9180, -1, -1, 9172, 9172, 1, 85, -1, 0, 0, 15, 9179, -1), + (9181, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, -1, 9182), + (9182, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9181, 9183), + (9183, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9182, 9184), + (9184, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9183, 9185), + (9185, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9184, 9186), + (9186, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9185, 9187), + (9187, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9186, 9188), + (9188, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9187, 9189), + (9189, -1, -1, 9181, 9181, 1, 85, -1, 0, 0, 15, 9188, -1), + (9190, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, -1, 9191), + (9191, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9190, 9192), + (9192, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9191, 9193), + (9193, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9192, 9194), + (9194, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9193, 9195), + (9195, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9194, 9196), + (9196, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9195, 9197), + (9197, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9196, 9198), + (9198, -1, -1, 9190, 9190, 1, 85, -1, 0, 0, 15, 9197, -1), + (9199, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, -1, 9200), + (9200, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9199, 9201), + (9201, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9200, 9202), + (9202, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9201, 9203), + (9203, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9202, 9204), + (9204, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9203, 9205), + (9205, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9204, 9206), + (9206, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9205, 9207), + (9207, -1, -1, 9199, 9199, 1, 85, -1, 0, 0, 15, 9206, -1), + (9208, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, -1, 9209), + (9209, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9208, 9210), + (9210, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9209, 9211), + (9211, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9210, 9212), + (9212, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9211, 9213), + (9213, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9212, 9214), + (9214, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9213, 9215), + (9215, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9214, 9216), + (9216, -1, -1, 9208, 9208, 1, 85, -1, 0, 0, 15, 9215, -1), + (9217, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, -1, 9218), + (9218, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9217, 9219), + (9219, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9218, 9220), + (9220, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9219, 9221), + (9221, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9220, 9222), + (9222, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9221, 9223), + (9223, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9222, 9224), + (9224, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9223, 9225), + (9225, -1, -1, 9217, 9217, 1, 85, -1, 0, 0, 15, 9224, -1), + (9226, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, -1, 9227), + (9227, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9226, 9228), + (9228, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9227, 9229), + (9229, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9228, 9230), + (9230, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9229, 9231), + (9231, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9230, 9232), + (9232, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9231, 9233), + (9233, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9232, 9234), + (9234, -1, -1, 9226, 9226, 1, 85, -1, 0, 0, 15, 9233, -1), + (9235, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, -1, 9236), + (9236, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9235, 9237), + (9237, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9236, 9238), + (9238, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9237, 9239), + (9239, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9238, 9240), + (9240, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9239, 9241), + (9241, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9240, 9242), + (9242, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9241, 9243), + (9243, -1, -1, 9235, 9235, 1, 85, -1, 0, 0, 15, 9242, -1), + (9300, 9300, 9300, 9300, 9300, 5, 85, 16212, 40, 600, 15, -1, 9301), + (9301, 9300, 9300, 9300, 9300, 5, 85, 16213, 40, 600, 15, 9300, 9302), + (9302, 9300, 9300, 9300, 9300, 5, 85, 16214, 40, 600, 15, 9301, -1), + (9303, 9303, 9303, 9303, 9303, 5, 85, 16215, 40, 600, 15, -1, 9304), + (9304, 9303, 9303, 9303, 9303, 5, 85, 16216, 40, 600, 15, 9303, 9305), + (9305, 9303, 9303, 9303, 9303, 5, 85, 16217, 40, 600, 15, 9304, -1), + (9306, 9306, 9306, 9306, 9306, 5, 85, 16218, 40, 600, 15, -1, 9307), + (9307, 9306, 9306, 9306, 9306, 5, 85, 16219, 40, 600, 15, 9306, 9308), + (9308, 9306, 9306, 9306, 9306, 5, 85, 16220, 40, 600, 15, 9307, -1), + (9309, 9309, 9309, 9309, 9309, 5, 85, 16249, 40, 600, 15, -1, 9310), + (9310, 9309, 9309, 9309, 9309, 5, 85, 16250, 40, 600, 15, 9309, 9311), + (9311, 9309, 9309, 9309, 9309, 5, 85, 16251, 40, 600, 15, 9310, -1), + (9312, 9312, 9312, 9312, 9312, 5, 85, 16252, 40, 600, 15, -1, 9313), + (9313, 9312, 9312, 9312, 9312, 5, 85, 16253, 40, 600, 15, 9312, 9314), + (9314, 9312, 9312, 9312, 9312, 5, 85, 16254, 40, 600, 15, 9313, -1), + (9315, 9315, 9315, 9315, 9315, 5, 85, 16255, 40, 600, 15, -1, 9316), + (9316, 9315, 9315, 9315, 9315, 5, 85, 16256, 40, 600, 15, 9315, 9317), + (9317, 9315, 9315, 9315, 9315, 5, 85, 16257, 40, 600, 15, 9316, -1), + (9318, 9318, 9318, 9318, 9318, 5, 85, 16261, 40, 600, 15, -1, 9319), + (9319, 9318, 9318, 9318, 9318, 5, 85, 16262, 40, 600, 15, 9318, 9320), + (9320, 9318, 9318, 9318, 9318, 5, 85, 16263, 40, 600, 15, 9319, -1), + (9321, 9321, 9321, 9321, 9321, 5, 85, 16264, 40, 600, 15, -1, 9322), + (9322, 9321, 9321, 9321, 9321, 5, 85, 16265, 40, 600, 15, 9321, 9323), + (9323, 9321, 9321, 9321, 9321, 5, 85, 16266, 40, 600, 15, 9322, -1), + (9324, 9324, 9324, 9324, 9324, 5, 85, 16267, 40, 600, 15, -1, 9325), + (9325, 9324, 9324, 9324, 9324, 5, 85, 16268, 40, 600, 15, 9324, 9326), + (9326, 9324, 9324, 9324, 9324, 5, 85, 16269, 40, 600, 15, 9325, -1), + (9327, 9327, 9327, 9327, 9327, 5, 85, 16270, 40, 600, 15, -1, 9328), + (9328, 9327, 9327, 9327, 9327, 5, 85, 16271, 40, 600, 15, 9327, 9329), + (9329, 9327, 9327, 9327, 9327, 5, 85, 16272, 40, 600, 15, 9328, -1), + (9330, 9330, 9330, 9330, 9330, 5, 85, 16273, 40, 600, 15, -1, 9331), + (9331, 9330, 9330, 9330, 9330, 5, 85, 16274, 40, 600, 15, 9330, 9332), + (9332, 9330, 9330, 9330, 9330, 5, 85, 16275, 40, 600, 15, 9331, -1), + (9333, 9333, 9333, 9333, 9333, 5, 85, 16276, 40, 600, 15, -1, 9334), + (9334, 9333, 9333, 9333, 9333, 5, 85, 16277, 40, 600, 15, 9333, 9335), + (9335, 9333, 9333, 9333, 9333, 5, 85, 16278, 40, 600, 15, 9334, -1), + (9336, 9336, 9336, 9336, 9336, 5, 85, 16284, 40, 600, 15, -1, 9337), + (9337, 9336, 9336, 9336, 9336, 5, 85, 16285, 40, 600, 15, 9336, 9338), + (9338, 9336, 9336, 9336, 9336, 5, 85, 16286, 40, 600, 15, 9337, -1), + (9339, 9339, 9339, 9339, 9339, 5, 85, 16287, 40, 600, 15, -1, 9340), + (9340, 9339, 9339, 9339, 9339, 5, 85, 16288, 40, 600, 15, 9339, 9341), + (9341, 9339, 9339, 9339, 9339, 5, 85, 16289, 40, 600, 15, 9340, -1), + (9342, 9342, 9342, 9342, 9342, 5, 85, 16290, 40, 600, 15, -1, 9343), + (9343, 9342, 9342, 9342, 9342, 5, 85, 16291, 40, 600, 15, 9342, 9344), + (9344, 9342, 9342, 9342, 9342, 5, 85, 16292, 40, 600, 15, 9343, -1), + (9345, 9345, 9345, 9345, 9345, 5, 85, 16293, 40, 600, 15, -1, 9346), + (9346, 9345, 9345, 9345, 9345, 5, 85, 16294, 40, 600, 15, 9345, 9347), + (9347, 9345, 9345, 9345, 9345, 5, 85, 16295, 40, 600, 15, 9346, -1), + (9348, 9348, 9348, 9348, 9348, 5, 85, 16296, 40, 600, 15, -1, 9349), + (9349, 9348, 9348, 9348, 9348, 5, 85, 16297, 40, 600, 15, 9348, 9350), + (9350, 9348, 9348, 9348, 9348, 5, 85, 16298, 40, 600, 15, 9349, -1), + (9351, 9351, 9351, 9351, 9351, 5, 85, 16299, 40, 600, 15, -1, 9352), + (9352, 9351, 9351, 9351, 9351, 5, 85, 16300, 40, 600, 15, 9351, 9353), + (9353, 9351, 9351, 9351, 9351, 5, 85, 16301, 40, 600, 15, 9352, -1), + (9354, 9354, 9354, 9354, 9354, 5, 85, 16305, 40, 600, 15, -1, 9355), + (9355, 9354, 9354, 9354, 9354, 5, 85, 16306, 40, 600, 15, 9354, 9356), + (9356, 9354, 9354, 9354, 9354, 5, 85, 16307, 40, 600, 15, 9355, 12626), + (9357, 9357, 9357, 9357, 9357, 5, 85, 16308, 40, 600, 15, -1, 9358), + (9358, 9357, 9357, 9357, 9357, 5, 85, 16309, 40, 600, 15, 9357, 9359), + (9359, 9357, 9357, 9357, 9357, 5, 85, 16310, 40, 600, 15, 9358, 12629), + (9360, 9360, 9360, 9360, 9360, 5, 85, 16311, 40, 600, 15, -1, 9361), + (9361, 9360, 9360, 9360, 9360, 5, 85, 16312, 40, 600, 15, 9360, 9362), + (9362, 9360, 9360, 9360, 9360, 5, 85, 16313, 40, 600, 15, 9361, 12632), + (9363, 9363, 9363, 9363, 9363, 5, 85, 16317, 40, 600, 15, -1, 9364), + (9364, 9363, 9363, 9363, 9363, 5, 85, 16318, 40, 600, 15, 9363, 9365), + (9365, 9363, 9363, 9363, 9363, 5, 85, 16319, 40, 600, 15, 9364, -1), + (9366, 9366, 9366, 9366, 9366, 5, 85, 16320, 40, 600, 15, -1, 9367), + (9367, 9366, 9366, 9366, 9366, 5, 85, 16321, 40, 600, 15, 9366, 9368), + (9368, 9366, 9366, 9366, 9366, 5, 85, 16322, 40, 600, 15, 9367, -1), + (9369, 9369, 9369, 9369, 9369, 5, 85, 16323, 40, 600, 15, -1, 9370), + (9370, 9369, 9369, 9369, 9369, 5, 85, 16324, 40, 600, 15, 9369, 9371), + (9371, 9369, 9369, 9369, 9369, 5, 85, 16325, 40, 600, 15, 9370, -1), + (9372, 9372, 9372, 9372, 9372, 5, 85, 16326, 40, 600, 15, -1, 9373), + (9373, 9372, 9372, 9372, 9372, 5, 85, 16327, 40, 600, 15, 9372, 9374), + (9374, 9372, 9372, 9372, 9372, 5, 85, 16328, 40, 600, 15, 9373, -1), + (9375, 9375, 9375, 9375, 9375, 5, 85, 16329, 40, 600, 15, -1, 9376), + (9376, 9375, 9375, 9375, 9375, 5, 85, 16330, 40, 600, 15, 9375, 9377), + (9377, 9375, 9375, 9375, 9375, 5, 85, 16331, 40, 600, 15, 9376, -1), + (9378, 9378, 9378, 9378, 9378, 5, 85, 16332, 40, 600, 15, -1, 9379), + (9379, 9378, 9378, 9378, 9378, 5, 85, 16333, 40, 600, 15, 9378, 9380), + (9380, 9378, 9378, 9378, 9378, 5, 85, 16334, 40, 600, 15, 9379, -1), + (9381, 9381, 9381, 9381, 9381, 5, 85, 16335, 40, 600, 15, -1, 9382), + (9382, 9381, 9381, 9381, 9381, 5, 85, 16336, 40, 600, 15, 9381, 9383), + (9383, 9381, 9381, 9381, 9381, 5, 85, 16337, 40, 600, 15, 9382, -1), + (9384, 9384, 9384, 9384, 9384, 5, 85, 16338, 40, 600, 15, -1, 9385), + (9385, 9384, 9384, 9384, 9384, 5, 85, 16339, 40, 600, 15, 9384, 9386), + (9386, 9384, 9384, 9384, 9384, 5, 85, 16340, 40, 600, 15, 9385, -1), + (9387, 9387, 9387, 9387, 9387, 5, 85, 16341, 40, 600, 15, -1, 9388), + (9388, 9387, 9387, 9387, 9387, 5, 85, 16342, 40, 600, 15, 9387, 9389), + (9389, 9387, 9387, 9387, 9387, 5, 85, 16343, 40, 600, 15, 9388, -1), + (9390, 9390, 9390, 9390, 9390, 5, 85, 16344, 40, 600, 15, -1, 9391), + (9391, 9390, 9390, 9390, 9390, 5, 85, 16345, 40, 600, 15, 9390, 9392), + (9392, 9390, 9390, 9390, 9390, 5, 85, 16346, 40, 600, 15, 9391, -1), + (9393, 9393, 9393, 9393, 9393, 5, 85, 16347, 40, 600, 15, -1, 9394), + (9394, 9393, 9393, 9393, 9393, 5, 85, 16348, 40, 600, 15, 9393, 9395), + (9395, 9393, 9393, 9393, 9393, 5, 85, 16349, 40, 600, 15, 9394, -1), + (9396, 9396, 9396, 9396, 9396, 5, 85, 16350, 40, 600, 15, -1, 9397), + (9397, 9396, 9396, 9396, 9396, 5, 85, 16351, 40, 600, 15, 9396, 9398), + (9398, 9396, 9396, 9396, 9396, 5, 85, 16352, 40, 600, 15, 9397, -1), + (9399, 9399, 9399, 9399, 9399, 5, 85, 16359, 40, 600, 15, -1, 9400), + (9400, 9399, 9399, 9399, 9399, 5, 85, 16360, 40, 600, 15, 9399, 9401), + (9401, 9399, 9399, 9399, 9399, 5, 85, 16361, 40, 600, 15, 9400, -1), + (9402, 9402, 9402, 9402, 9402, 5, 85, 16362, 40, 600, 15, -1, 9403), + (9403, 9402, 9402, 9402, 9402, 5, 85, 16363, 40, 600, 15, 9402, 9404), + (9404, 9402, 9402, 9402, 9402, 5, 85, 16364, 40, 600, 15, 9403, -1), + (9405, 9405, 9405, 9405, 9405, 5, 85, 16365, 40, 600, 15, -1, 9406), + (9406, 9405, 9405, 9405, 9405, 5, 85, 16366, 40, 600, 15, 9405, 9407), + (9407, 9405, 9405, 9405, 9405, 5, 85, 16367, 40, 600, 15, 9406, -1), + (9408, 9408, 9408, 9408, 9408, 5, 85, 16368, 40, 600, 15, -1, 9409), + (9409, 9408, 9408, 9408, 9408, 5, 85, 16369, 40, 600, 15, 9408, 9410), + (9410, 9408, 9408, 9408, 9408, 5, 85, 16370, 40, 600, 15, 9409, -1), + (9411, 9411, 9411, 9411, 9411, 5, 85, 16371, 40, 600, 15, -1, 9412), + (9412, 9411, 9411, 9411, 9411, 5, 85, 16372, 40, 600, 15, 9411, 9413), + (9413, 9411, 9411, 9411, 9411, 5, 85, 16373, 40, 600, 15, 9412, -1), + (9414, 9414, 9414, 9414, 9414, 5, 85, 16374, 40, 600, 15, -1, 9415), + (9415, 9414, 9414, 9414, 9414, 5, 85, 16375, 40, 600, 15, 9414, 9416), + (9416, 9414, 9414, 9414, 9414, 5, 85, 16376, 40, 600, 15, 9415, -1), + (9417, 9417, 9417, 9417, 9417, 5, 85, 16377, 40, 600, 15, -1, 9418), + (9418, 9417, 9417, 9417, 9417, 5, 85, 16378, 40, 600, 15, 9417, 9419), + (9419, 9417, 9417, 9417, 9417, 5, 85, 16379, 40, 600, 15, 9418, -1), + (9420, 9420, 9420, 9420, 9420, 5, 85, 16380, 40, 600, 15, -1, 9421), + (9421, 9420, 9420, 9420, 9420, 5, 85, 16381, 40, 600, 15, 9420, 9422), + (9422, 9420, 9420, 9420, 9420, 5, 85, 16382, 40, 600, 15, 9421, -1), + (9423, 9423, 9423, 9423, 9423, 5, 85, 16386, 40, 600, 15, -1, 9424), + (9424, 9423, 9423, 9423, 9423, 5, 85, 16387, 40, 600, 15, 9423, 9425), + (9425, 9423, 9423, 9423, 9423, 5, 85, 16388, 40, 600, 15, 9424, -1), + (9426, 9426, 9426, 9426, 9426, 5, 85, 16389, 40, 600, 15, -1, 9427), + (9427, 9426, 9426, 9426, 9426, 5, 85, 16390, 40, 600, 15, 9426, 9428), + (9428, 9426, 9426, 9426, 9426, 5, 85, 16391, 40, 600, 15, 9427, -1), + (9429, 9429, 9429, 9429, 9429, 5, 85, 16392, 40, 600, 15, -1, 9430), + (9430, 9429, 9429, 9429, 9429, 5, 85, 16393, 40, 600, 15, 9429, 9431), + (9431, 9429, 9429, 9429, 9429, 5, 85, 16394, 40, 600, 15, 9430, -1), + (9432, 9432, 9432, 9432, 9432, 5, 85, 16395, 40, 600, 15, -1, 9433), + (9433, 9432, 9432, 9432, 9432, 5, 85, 16396, 40, 600, 15, 9432, 9434), + (9434, 9432, 9432, 9432, 9432, 5, 85, 16397, 40, 600, 15, 9433, -1), + (9435, 9435, 9435, 9435, 9435, 5, 85, 16398, 40, 600, 15, -1, 9436), + (9436, 9435, 9435, 9435, 9435, 5, 85, 16399, 40, 600, 15, 9435, 9437), + (9437, 9435, 9435, 9435, 9435, 5, 85, 16400, 40, 600, 15, 9436, -1), + (9438, 9438, 9438, 9438, 9438, 5, 85, 16401, 40, 600, 15, -1, 9439), + (9439, 9438, 9438, 9438, 9438, 5, 85, 16402, 40, 600, 15, 9438, 9440), + (9440, 9438, 9438, 9438, 9438, 5, 85, 16403, 40, 600, 15, 9439, -1), + (9441, 9441, 9441, 9441, 9441, 5, 85, 16404, 40, 600, 15, -1, 9442), + (9442, 9441, 9441, 9441, 9441, 5, 85, 16405, 40, 600, 15, 9441, 9443), + (9443, 9441, 9441, 9441, 9441, 5, 85, 16406, 40, 600, 15, 9442, -1), + (9500, 9500, 9500, 9500, 9500, 3, 76, 16247, 47, 60, 15, -1, -1), + (9501, 9501, 9501, 9501, 9501, 9, 85, 16247, 47, 600, 15, -1, -1), + (9502, 9502, 9502, 9502, 9502, 7, 81, 16248, 48, 3600, 15, -1, -1), + (9503, -1, -1, 9503, 9503, 7, 83, -1, 0, 0, 15, -1, 9504), + (9504, -1, -1, 9503, 9503, 7, 84, -1, 0, 0, 15, 9503, 9505), + (9505, -1, -1, 9503, 9503, 7, 85, -1, 0, 0, 15, 9504, 10087), + (9506, -1, -1, 9506, 9506, 7, 81, -1, 0, 0, 15, -1, 9507), + (9507, -1, -1, 9506, 9506, 7, 83, -1, 0, 0, 15, 9506, 9508), + (9508, -1, -1, 9506, 9506, 7, 85, -1, 0, 0, 15, 9507, 13630), + (9509, -1, -1, 9509, 9509, 7, 81, -1, 0, 0, 15, -1, 9510), + (9510, -1, -1, 9509, 9509, 7, 82, -1, 0, 0, 15, 9509, 9511), + (9511, -1, -1, 9509, 9509, 7, 83, -1, 0, 0, 15, 9510, 9515), + (9512, -1, -1, 9512, 9512, 7, 81, -1, 0, 0, 15, -1, 9513), + (9513, -1, -1, 9512, 9512, 7, 82, -1, 0, 0, 15, 9512, 9514), + (9514, -1, -1, 9512, 9512, 7, 83, -1, 0, 0, 15, 9513, 7819), + (9515, -1, -1, 9509, 9509, 7, 86, -1, 0, 0, 17, 9511, 16361), + (10003, 6610, 6610, 6610, 6610, 5, 60, 16494, 41, 30, 16, 6610, 10573), + (10004, -1, -1, 6614, 6614, 6, 70, -1, 0, 0, 16, 6616, 10005), + (10005, -1, -1, 6614, 6614, 9, 70, -1, 0, 0, 16, 10004, 10575), + (10006, 54006, 54006, 54006, 54006, 7, 85, 16495, 18, 180, 16, 7111, 13425), + (10007, -1, -1, 6564, 6564, 10, 85, -1, 0, 0, 16, 7114, 10008), + (10008, -1, -1, 6564, 6564, 10, 85, -1, 0, 0, 16, 10007, 10009), + (10009, -1, -1, 6564, 6564, 10, 85, -1, 0, 0, 16, 10008, 10568), + (10010, 6565, 6565, 6565, 6565, 7, 85, 16496, 17, 45, 16, 7115, 10517), + (10011, 912, 912, 912, 912, 9, 80, 16497, 4, 3600, 16, 7121, 10012), + (10012, 912, 912, 912, 912, 9, 80, 16498, 4, 3600, 16, 10011, 10013), + (10013, 912, 912, 912, 912, 9, 80, 16499, 4, 3600, 16, 10012, 10585), + (10014, 1383, 1383, 1383, 1383, 12, 85, 21766, 6, 300, 16, 7299, 6487), + (10015, 1195, 1195, 1195, 1195, 9, 85, 16504, 13, 2160, 16, 7300, 13259), + (10016, 131, 131, 131, 131, 10, 85, 16505, 4, 900, 16, 7303, 10017), + (10017, 131, 131, 131, 131, 10, 85, 16506, 4, 900, 16, 10016, 10018), + (10018, 131, 131, 131, 131, 10, 85, 16507, 4, 900, 16, 10017, 7770), + (10019, 1192, 1192, 1192, 1192, 10, 85, 20177, 12, 1320, 16, 7306, 10020), + (10020, 1192, 1192, 1192, 1192, 10, 85, 21652, 12, 1320, 16, 10019, 10021), + (10021, 1192, 1192, 1192, 1192, 10, 85, 21704, 12, 1320, 16, 10020, 13363), + (10022, 746, 746, 746, 746, 12, 85, 16511, 10, 2160, 16, 7309, 10023), + (10023, 746, 746, 746, 746, 12, 85, 16512, 10, 2160, 16, 10022, 10024), + (10024, 746, 746, 746, 746, 12, 85, 16513, 10, 2160, 16, 10023, 15321), + (10025, -1, -1, 6601, 6601, 6, 85, -1, 0, 0, 16, 7322, 10026), + (10026, -1, -1, 6601, 6601, 6, 85, -1, 0, 0, 16, 10025, 10027), + (10027, -1, -1, 6601, 6601, 6, 85, -1, 0, 0, 16, 10026, 10028), + (10028, -1, -1, 6601, 6601, 6, 85, -1, 0, 0, 16, 10027, 10029), + (10029, -1, -1, 6601, 6601, 6, 85, -1, 0, 0, 16, 10028, 10437), + (10030, -1, -1, 7940, 7940, 5, 75, -1, 0, 0, 16, 7942, 10031), + (10031, -1, -1, 7940, 7940, 7, 75, -1, 0, 0, 16, 10030, 10032), + (10032, -1, -1, 7940, 7940, 9, 75, -1, 0, 0, 16, 10031, 6484), + (10033, -1, -1, 7945, 7945, 6, 85, -1, 0, 0, 16, 7947, 10034), + (10034, -1, -1, 7945, 7945, 6, 85, -1, 0, 0, 16, 10033, 10347), + (10035, -1, -1, 7948, 7948, 6, 85, -1, 0, 0, 16, 7950, 10036), + (10036, -1, -1, 7948, 7948, 6, 85, -1, 0, 0, 16, 10035, 10037), + (10037, -1, -1, 7948, 7948, 6, 85, -1, 0, 0, 16, 10036, 15328), + (10038, 7951, 7951, 7951, 7951, 6, 85, 16514, 61, 900, 16, 7953, 10039), + (10039, 7951, 7951, 7951, 7951, 6, 85, 16515, 61, 900, 16, 10038, 10040), + (10040, 7951, 7951, 7951, 7951, 6, 85, 16516, 61, 900, 16, 10039, 7773), + (10041, -1, -1, 6636, 6636, 9, 75, -1, 0, 0, 16, 6638, 10042), + (10042, -1, -1, 6636, 6636, 10, 75, -1, 0, 0, 16, 10041, 10043), + (10043, -1, -1, 6636, 6636, 11, 75, -1, 0, 0, 16, 10042, 12529), + (10044, -1, -1, 6791, 6791, 6, 85, -1, 0, 0, 16, 6793, 10045), + (10045, -1, -1, 6791, 6791, 6, 85, -1, 0, 0, 16, 10044, 10046), + (10046, -1, -1, 6791, 6791, 6, 85, -1, 0, 0, 16, 10045, 10676), + (10047, 534, 534, 534, 534, 12, 85, 16561, 4, 2160, 16, 7331, 10048), + (10048, 534, 534, 534, 534, 12, 85, 16562, 4, 2160, 16, 10047, 10049), + (10049, 534, 534, 534, 534, 12, 85, 16563, 4, 2160, 16, 10048, 10708), + (10050, -1, -1, 6395, 6395, 7, 85, -1, 0, 0, 16, 7338, 10051), + (10051, -1, -1, 6395, 6395, 7, 85, -1, 0, 0, 16, 10050, 10052), + (10052, -1, -1, 6395, 6395, 7, 85, -1, 0, 0, 16, 10051, 10705), + (10053, 6754, 6754, 6754, 6754, 9, 75, 16570, 41, 1200, 16, 6754, 14111), + (10054, 6758, 6758, 6758, 6758, 10, 85, 16571, 43, 900, 16, 6760, 10055), + (10055, 6758, 6758, 6758, 6758, 11, 85, 16572, 43, 900, 16, 10054, 10056), + (10056, 6758, 6758, 6758, 6758, 12, 85, 16573, 43, 900, 16, 10055, 13546), + (10057, 6764, 6764, 6764, 6764, 9, 80, 16574, 52, 600, 16, 6764, 16716), + (10058, -1, -1, 6765, 6765, 9, 85, -1, 0, 0, 16, 6767, 10059), + (10059, -1, -1, 6765, 6765, 9, 85, -1, 0, 0, 16, 10058, 10060), + (10060, -1, -1, 6765, 6765, 9, 85, -1, 0, 0, 16, 10059, 10766), + (10061, 5007, 5007, 5007, 5007, 9, 85, 16575, 8, 2160, 16, 7343, 10062), + (10062, 5007, 5007, 5007, 5007, 9, 85, 16576, 8, 2160, 16, 10061, 10063), + (10063, 5007, 5007, 5007, 5007, 9, 85, 16577, 8, 2160, 16, 10062, 13119), + (10064, -1, -1, 1608, 1608, 6, 85, -1, 0, 0, 16, 7383, 10065), + (10065, -1, -1, 1608, 1608, 7, 85, -1, 0, 0, 16, 10064, 10066), + (10066, -1, -1, 1608, 1608, 8, 85, -1, 0, 0, 16, 10065, 10067), + (10067, -1, -1, 1608, 1608, 9, 85, -1, 0, 0, 16, 10066, 10068), + (10068, -1, -1, 1608, 1608, 10, 85, -1, 0, 0, 16, 10067, 10069), + (10069, -1, -1, 1608, 1608, 11, 85, -1, 0, 0, 16, 10068, 16730), + (10070, -1, -1, 6630, 6630, 6, 75, -1, 0, 0, 16, 6634, 10071), + (10071, -1, -1, 6630, 6630, 6, 75, -1, 0, 0, 16, 10070, 10072), + (10072, -1, -1, 6630, 6630, 6, 75, -1, 0, 0, 16, 10071, 10073), + (10073, -1, -1, 6630, 6630, 6, 75, -1, 0, 0, 16, 10072, 10074), + (10074, -1, -1, 6630, 6630, 6, 75, -1, 0, 0, 16, 10073, 13621), + (10075, -1, -1, 6641, 6641, 9, 85, -1, 0, 0, 16, 6643, 10076), + (10076, -1, -1, 6641, 6641, 9, 85, -1, 0, 0, 16, 10075, 10077), + (10077, -1, -1, 6641, 6641, 9, 85, -1, 0, 0, 16, 10076, 16192), + (10078, 6508, 6508, 6508, 6508, 7, 85, 16578, 38, 600, 16, 7389, 10079), + (10079, 6508, 6508, 6508, 6508, 7, 85, 16579, 38, 600, 16, 10078, 10080), + (10080, 6508, 6508, 6508, 6508, 7, 85, 16580, 38, 600, 16, 10079, 15775), + (10081, -1, -1, 1313, 1313, 12, 85, -1, 0, 0, 16, 7398, 10082), + (10082, -1, -1, 1313, 1313, 12, 85, -1, 0, 0, 16, 10081, 10083), + (10083, -1, -1, 1313, 1313, 12, 85, -1, 0, 0, 16, 10082, 12579), + (10084, -1, -1, 6375, 6375, 6, 85, -1, 0, 0, 16, 7663, 10085), + (10085, -1, -1, 6375, 6375, 6, 85, -1, 0, 0, 16, 10084, 10086), + (10086, -1, -1, 6375, 6375, 6, 85, -1, 0, 0, 16, 10085, 5347), + (10087, -1, -1, 9503, 9503, 7, 85, -1, 0, 0, 16, 9505, 10088), + (10088, -1, -1, 9503, 9503, 7, 85, -1, 0, 0, 16, 10087, 10089), + (10089, -1, -1, 9503, 9503, 7, 85, -1, 0, 0, 16, 10088, 12792), + (10090, 1498, 1498, 1498, 1498, 12, 85, 16590, 12, 1320, 16, 7410, 10091), + (10091, 1498, 1498, 1498, 1498, 12, 85, 16591, 12, 1320, 16, 10090, 10092), + (10092, 1498, 1498, 1498, 1498, 12, 85, 16602, 12, 1320, 16, 10091, 13401), + (10093, 1495, 1495, 1495, 1495, 9, 86, 16603, 30, 900, 17, 7416, 10094), + (10096, 548, 548, 548, 548, 10, 85, 16606, 5, 900, 16, 7419, 10097), + (10097, 548, 548, 548, 548, 10, 85, 16607, 5, 900, 16, 10096, 10098), + (10098, 548, 548, 548, 548, 10, 85, 16608, 5, 900, 16, 10097, 13158), + (10099, 6561, 6561, 6561, 6561, 7, 85, 16609, 32, 30, 16, 7424, 10100), + (10100, 6561, 6561, 6561, 6561, 7, 85, 16610, 32, 30, 16, 10099, 10101), + (10101, 6561, 6561, 6561, 6561, 7, 85, 16611, 32, 30, 16, 10100, 10418), + (10102, 510, 510, 510, 510, 3, 75, 16587, 37, 240, 16, 7427, 10103), + (10103, 510, 510, 510, 510, 3, 75, 16588, 37, 240, 16, 10102, 10104), + (10104, 510, 510, 510, 510, 3, 75, 16589, 37, 240, 16, 10103, 10824), + (10105, -1, -1, 7664, 7664, 2, 82, -1, 0, 0, 16, 7668, 10106), + (10106, -1, -1, 7664, 7664, 2, 82, -1, 0, 0, 16, 10105, 10107), + (10107, -1, -1, 7664, 7664, 2, 82, -1, 0, 0, 16, 10106, 10108), + (10108, -1, -1, 7664, 7664, 2, 82, -1, 0, 0, 16, 10107, 10109), + (10109, -1, -1, 7664, 7664, 2, 82, -1, 0, 0, 16, 10108, 17350), + (10110, -1, -1, 7983, 7983, 6, 81, -1, 0, 0, 16, 7985, 10111), + (10111, -1, -1, 7983, 7983, 6, 81, -1, 0, 0, 16, 10110, 10112), + (10112, -1, -1, 7983, 7983, 6, 81, -1, 0, 0, 16, 10111, -1), + (10113, 1352, 1352, 1352, 1352, 6, 85, 16618, 3, 60, 16, 7156, 10114), + (10114, 1352, 1352, 1352, 1352, 6, 85, 16619, 3, 60, 16, 10113, 10115), + (10115, 1352, 1352, 1352, 1352, 6, 85, 16620, 3, 60, 16, 10114, 13807), + (10116, 1358, 1358, 1358, 1358, 6, 85, 16615, 3, 60, 16, 7159, 10117), + (10117, 1358, 1358, 1358, 1358, 6, 85, 16616, 3, 60, 16, 10116, 10118), + (10118, 1358, 1358, 1358, 1358, 6, 85, 16617, 3, 60, 16, 10117, 13810), + (10119, 1355, 1355, 1355, 1355, 6, 85, 16612, 3, 60, 16, 7174, 10120), + (10120, 1355, 1355, 1355, 1355, 6, 85, 16613, 3, 60, 16, 10119, 10121), + (10121, 1355, 1355, 1355, 1355, 6, 85, 16614, 3, 60, 16, 10120, 12700), + (10122, -1, -1, 4801, 4801, 6, 85, -1, 0, 0, 16, 7162, 10123), + (10123, -1, -1, 4801, 4801, 6, 85, -1, 0, 0, 16, 10122, 12674), + (10124, -1, -1, 611, 611, 2, 75, -1, 0, 0, 16, 7177, 10125), + (10125, -1, -1, 611, 611, 2, 75, -1, 0, 0, 16, 10124, 10126), + (10126, -1, -1, 611, 611, 2, 75, -1, 0, 0, 16, 10125, 12703), + (10127, 7872, 7872, 7872, 7872, 6, 85, 16621, 41, 600, 16, 7874, 10128), + (10128, 7872, 7872, 7872, 7872, 6, 85, 16622, 41, 600, 16, 10127, 10129), + (10129, 7872, 7872, 7872, 7872, 6, 85, 16623, 41, 600, 16, 10128, 12682), + (10130, -1, -1, 6870, 6870, 6, 80, -1, 0, 0, 16, 6872, 10131), + (10131, -1, -1, 6870, 6870, 6, 80, -1, 0, 0, 16, 10130, 10132), + (10132, -1, -1, 6870, 6870, 6, 80, -1, 0, 0, 16, 10131, -1), + (10133, -1, -1, 255, 255, 9, 80, -1, 0, 0, 16, 6875, 10134), + (10134, -1, -1, 255, 255, 9, 80, -1, 0, 0, 16, 10133, 10135), + (10135, -1, -1, 255, 255, 9, 80, -1, 0, 0, 16, 10134, 13196), + (10136, -1, -1, 6375, 6375, 6, 83, -1, 0, 0, 16, 6878, 10137), + (10137, -1, -1, 6375, 6375, 6, 83, -1, 0, 0, 16, 10136, 10138), + (10138, -1, -1, 6375, 6375, 6, 83, -1, 0, 0, 16, 10137, 12734), + (10139, 6533, 6533, 6533, 6533, 10, 85, 16631, 15, 600, 16, 7428, 12740), + (10140, 1116, 1116, 1116, 1116, 12, 85, 16647, 4, 2160, 16, 7432, 10141), + (10141, 1116, 1116, 1116, 1116, 12, 85, 16648, 4, 2160, 16, 10140, 10142), + (10142, 1116, 1116, 1116, 1116, 12, 85, 16649, 4, 2160, 16, 10141, 12743), + (10143, 5298, 5298, 5298, 5298, 12, 85, 16632, 32, 1800, 16, 7440, 10144), + (10144, 5298, 5298, 5298, 5298, 12, 85, 16633, 32, 1800, 16, 10143, 10145), + (10145, 5298, 5298, 5298, 5298, 12, 85, 16634, 32, 1800, 16, 10144, 12746), + (10146, 1598, -1, 1598, 1598, 12, 85, 16638, 6, 900, 16, 7443, 10147), + (10147, 1598, -1, 1598, 1598, 12, 85, 16639, 6, 900, 16, 10146, 10148), + (10148, 1598, -1, 1598, 1598, 12, 85, 16640, 6, 900, 16, 10147, 13193), + (10149, 5020, 5020, 5020, 5020, 9, 85, 16630, 9, 300, 16, 7444, 13490), + (10150, 1110, 1110, 1110, 1110, 6, 85, 16641, 3, 2160, 16, 7447, 10151), + (10151, 1110, 1110, 1110, 1110, 6, 85, 16642, 3, 2160, 16, 10150, 10152), + (10152, 1110, 1110, 1110, 1110, 6, 85, 16643, 3, 2160, 16, 10151, 13190), + (10153, -1, -1, 6337, 6337, 6, 85, -1, 0, 0, 16, 7450, 10154), + (10154, -1, -1, 6337, 6337, 6, 85, -1, 0, 0, 16, 10153, 10155), + (10155, -1, -1, 6337, 6337, 6, 85, -1, 0, 0, 16, 10154, 16297), + (10156, 5017, 5017, 5017, 5017, 9, 85, 16627, 8, 600, 16, 7456, 10157), + (10157, 5017, 5017, 5017, 5017, 9, 85, 16628, 8, 600, 16, 10156, 10158), + (10158, 5017, 5017, 5017, 5017, 9, 85, 16629, 8, 600, 16, 10157, 14189), + (10159, 1569, 1569, 1569, 1569, 7, 85, 16624, 5, 1800, 16, 7459, 10160), + (10160, 1569, 1569, 1569, 1569, 7, 85, 16625, 5, 1800, 16, 10159, 10161), + (10161, 1569, 1569, 1569, 1569, 7, 85, 16626, 5, 1800, 16, 10160, 17276), + (10162, 6663, 6663, 6663, 6663, 7, 82, 16653, 59, 600, 16, 6665, 10163), + (10163, 6663, 6663, 6663, 6663, 7, 82, 16654, 59, 600, 16, 10162, 10164), + (10164, 6663, 6663, 6663, 6663, 7, 82, 16655, 59, 600, 16, 10163, -1), + (10165, -1, -1, 1543, 1543, 12, 85, -1, 0, 0, 16, 7136, 10166), + (10166, -1, -1, 1543, 1543, 12, 85, -1, 0, 0, 16, 10165, 10167), + (10167, -1, -1, 1543, 1543, 12, 85, -1, 0, 0, 16, 10166, 13213), + (10168, 6328, 6328, 6328, 6328, 7, 85, 16650, 10, 600, 16, 7145, 10169), + (10169, 6328, 6328, 6328, 6328, 7, 85, 16651, 10, 600, 16, 10168, 10170), + (10170, 6328, 6328, 6328, 6328, 7, 85, 16652, 10, 600, 16, 10169, 13770), + (10171, -1, -1, 878, 878, 7, 85, -1, 0, 0, 16, 7147, 10172), + (10172, -1, -1, 878, 878, 7, 85, -1, 0, 0, 16, 10171, -1), + (10173, -1, -1, 846, 846, 12, 85, -1, 0, 0, 16, 7153, 10174), + (10174, -1, -1, 846, 846, 12, 85, -1, 0, 0, 16, 10173, 10175), + (10175, -1, -1, 846, 846, 12, 85, -1, 0, 0, 16, 10174, 13795), + (10176, -1, -1, 6703, 6703, 3, 70, -1, 0, 0, 16, 6705, 10177), + (10177, -1, -1, 6703, 6703, 3, 70, -1, 0, 0, 16, 10176, 10178), + (10178, -1, -1, 6703, 6703, 3, 70, -1, 0, 0, 16, 10177, 13005), + (10179, 6706, 6706, 6706, 6706, 7, 85, 16675, 44, 600, 16, 6708, 10180), + (10180, 6706, 6706, 6706, 6706, 7, 85, 16676, 44, 600, 16, 10179, 10181), + (10181, 6706, 6706, 6706, 6706, 7, 85, 16677, 44, 600, 16, 10180, 5353), + (10182, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 16, 6716, 10183), + (10183, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 16, 10182, 10184), + (10184, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 16, 10183, 10185), + (10185, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 16, 10184, 10186), + (10186, -1, -1, 6712, 6712, 7, 85, -1, 0, 0, 16, 10185, -1), + (10187, 1327, 1327, 1327, 1327, 12, 85, 16665, 10, 900, 16, 7462, 10188), + (10188, 1327, 1327, 1327, 1327, 12, 85, 16666, 10, 900, 16, 10187, 10189), + (10189, 1327, 1327, 1327, 1327, 12, 85, 16667, 10, 900, 16, 10188, 5330), + (10190, 1520, 1520, 1520, 1520, 9, 80, 16672, 11, 900, 16, 7465, 10191), + (10191, 1520, 1520, 1520, 1520, 9, 80, 16673, 11, 900, 16, 10190, 10192), + (10192, 1520, 1520, 1520, 1520, 9, 80, 16674, 11, 900, 16, 10191, 12997), + (10193, 153, 153, 153, 153, 12, 85, 16668, 3, 2160, 16, 7468, 11081), + (10194, 528, 528, 528, 528, 12, 85, 16669, 5, 720, 16, 7471, 10195), + (10195, 528, 528, 528, 528, 12, 85, 16670, 5, 720, 16, 10194, 10196), + (10196, 528, 528, 528, 528, 12, 85, 16671, 5, 720, 16, 10195, 13161), + (10197, 5251, 5251, 5251, 5251, 12, 85, 16662, 13, 900, 16, 7474, 10198), + (10198, 5251, 5251, 5251, 5251, 12, 85, 16663, 13, 900, 16, 10197, 10199), + (10199, 5251, 5251, 5251, 5251, 12, 85, 16664, 13, 900, 16, 10198, 5363), + (10200, 6815, 6815, 6815, 6815, 8, 85, 16691, 60, 600, 16, 6817, 10201), + (10201, 6815, 6815, 6815, 6815, 8, 85, 16692, 60, 600, 16, 10200, 10202), + (10202, 6815, 6815, 6815, 6815, 8, 85, 16693, 60, 600, 16, 10201, 12786), + (10203, -1, -1, 6819, 6819, 6, 77, -1, 0, 0, 16, 6821, 10204), + (10204, -1, -1, 6819, 6819, 6, 77, -1, 0, 0, 16, 10203, 10205), + (10205, -1, -1, 6819, 6819, 6, 77, -1, 0, 0, 16, 10204, -1), + (10206, -1, -1, 6823, 6823, 4, 75, -1, 0, 0, 16, 6827, 10207), + (10207, -1, -1, 6823, 6823, 4, 77, -1, 0, 0, 16, 10206, -1), + (10208, 6828, 6828, 6828, 6828, 12, 85, 16686, 43, 60, 16, 6828, 17534), + (10209, 1274, 1274, 1274, 1274, 12, 85, 16683, 9, 540, 16, 7201, 10210), + (10210, 1274, 1274, 1274, 1274, 12, 85, 16684, 9, 540, 16, 10209, 10211), + (10211, 1274, 1274, 1274, 1274, 12, 85, 16685, 9, 540, 16, 10210, 12760), + (10212, 1510, -1, 1510, 1510, 12, 80, 16690, 13, 2160, 16, 7202, -1), + (10213, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 16, 7208, 10214), + (10214, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 16, 10213, 10215), + (10215, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 16, 10214, 10216), + (10216, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 16, 10215, 10217), + (10217, -1, -1, 5264, 5264, 12, 85, -1, 0, 0, 16, 10216, 12798), + (10218, 4927, 4927, 4927, 4927, 9, 85, 16682, 14, 600, 16, 7209, -1), + (10219, -1, -1, 839, 839, 6, 80, -1, 0, 0, 16, 7214, 10220), + (10220, -1, -1, 839, 839, 6, 80, -1, 0, 0, 16, 10219, 10221), + (10221, -1, -1, 839, 839, 6, 80, -1, 0, 0, 16, 10220, 10222), + (10222, -1, -1, 839, 839, 6, 80, -1, 0, 0, 16, 10221, 10223), + (10223, -1, -1, 839, 839, 6, 80, -1, 0, 0, 16, 10222, -1), + (10224, 967, 967, 967, 967, 6, 85, 16687, 10, 1800, 16, 7219, 10225), + (10225, 967, 967, 967, 967, 6, 85, 16688, 10, 1800, 16, 10224, 10226), + (10226, 967, 967, 967, 967, 6, 85, 16689, 10, 1800, 16, 10225, 12789), + (10227, -1, -1, 5295, 5295, 6, 85, -1, 0, 0, 16, 7222, 10228), + (10228, -1, -1, 5295, 5295, 6, 85, -1, 0, 0, 16, 10227, 10229), + (10229, -1, -1, 5295, 5295, 6, 85, -1, 0, 0, 16, 10228, 13226), + (10230, 619, 619, 619, 619, 6, 83, 16704, 6, 900, 16, 7228, 10231), + (10231, 619, 619, 619, 619, 6, 83, 16705, 6, 900, 16, 10230, 10232), + (10232, 619, 619, 619, 619, 6, 83, 16706, 6, 900, 16, 10231, -1), + (10233, 516, 516, 516, 516, 6, 82, 16707, 5, 480, 16, 7237, 12879), + (10234, 1334, 1334, 1334, 1334, 12, 85, 16701, 11, 4320, 16, 7241, 10235), + (10235, 1334, 1334, 1334, 1334, 12, 85, 16702, 11, 4320, 16, 10234, 10236), + (10236, 1334, 1334, 1334, 1334, 12, 85, 16703, 11, 4320, 16, 10235, 12868), + (10237, 8060, 8060, 8060, 8060, 7, 85, 16711, 41, 1800, 16, 8062, 10238), + (10238, 8060, 8060, 8060, 8060, 7, 85, 16712, 41, 1800, 16, 10237, 10239), + (10239, 8060, 8060, 8060, 8060, 7, 85, 16713, 41, 1800, 16, 10238, 13650), + (10240, 8063, 8063, 8063, 8063, 7, 85, 16714, 41, 1800, 16, 8065, 10241), + (10241, 8063, 8063, 8063, 8063, 7, 85, 16715, 41, 1800, 16, 10240, 10242), + (10242, 8063, 8063, 8063, 8063, 7, 85, 16716, 41, 1800, 16, 10241, 13653), + (10243, 8066, 8066, 8066, 8066, 7, 85, 16717, 41, 1800, 16, 8068, 10244), + (10244, 8066, 8066, 8066, 8066, 7, 85, 16718, 41, 1800, 16, 10243, 10245), + (10245, 8066, 8066, 8066, 8066, 7, 85, 16719, 41, 1800, 16, 10244, 13656), + (10246, 8072, 8072, 8072, 8072, 7, 80, 16708, 37, 20, 16, 8074, 10247), + (10247, 8072, 8072, 8072, 8072, 7, 80, 16709, 37, 20, 16, 10246, 10248), + (10248, 8072, 8072, 8072, 8072, 7, 80, 16710, 37, 20, 16, 10247, 12857), + (10249, -1, -1, 8082, 8082, 3, 74, -1, 0, 0, 16, 8084, 10250), + (10250, -1, -1, 8082, 8082, 3, 74, -1, 0, 0, 16, 10249, 10251), + (10251, -1, -1, 8082, 8082, 3, 74, -1, 0, 0, 16, 10250, -1), + (10252, 520, 520, 520, 520, 12, 85, 16723, 6, 540, 16, 7252, 10253), + (10253, 520, 520, 520, 520, 12, 85, 16724, 6, 540, 16, 10252, 10254), + (10254, 520, 520, 520, 520, 12, 85, 16725, 6, 540, 16, 10253, 12985), + (10255, 4903, 4903, 4903, 4903, 9, 81, 16726, 9, 1320, 16, 7253, 12956), + (10256, 4906, 4906, 4906, 4906, 9, 81, 16727, 9, 1320, 16, 7254, 12959), + (10257, 4909, 4909, 4909, 4909, 9, 81, 16728, 16, 1320, 16, 7255, 12957), + (10258, 4912, 4912, 4912, 4912, 9, 81, 16729, 16, 1320, 16, 7256, 12958), + (10259, 616, 616, 616, 616, 10, 85, 16733, 7, 900, 16, 7259, 10260), + (10260, 616, 616, 616, 616, 10, 85, 16734, 7, 900, 16, 10259, 10261), + (10261, 616, 616, 616, 616, 10, 85, 16735, 7, 900, 16, 10260, 14730), + (10262, -1, -1, 1577, 1577, 12, 85, -1, 0, 0, 16, 7265, 10263), + (10263, -1, -1, 1577, 1577, 12, 85, -1, 0, 0, 16, 10262, 10264), + (10264, -1, -1, 1577, 1577, 12, 85, -1, 0, 0, 16, 10263, 13707), + (10265, -1, -1, 795, 795, 12, 85, -1, 0, 0, 16, 7269, 10266), + (10266, -1, -1, 795, 795, 12, 85, -1, 0, 0, 16, 10265, 10267), + (10267, -1, -1, 795, 795, 12, 85, -1, 0, 0, 16, 10266, 12945), + (10268, -1, -1, 7900, 7900, 4, 70, -1, 0, 0, 16, 7902, 10269), + (10269, -1, -1, 7900, 7900, 4, 70, -1, 0, 0, 16, 10268, 10270), + (10270, -1, -1, 7900, 7900, 4, 70, -1, 0, 0, 16, 10269, -1), + (10271, 1242, 1242, 1242, 1242, 12, 85, 16744, 9, 1320, 16, 7287, 10272), + (10272, 1242, 1242, 1242, 1242, 12, 85, 16745, 9, 1320, 16, 10271, 10273), + (10273, 1242, 1242, 1242, 1242, 12, 85, 16746, 9, 1320, 16, 10272, 12934), + (10274, 4931, 4931, 4931, 4931, 7, 85, 16747, 4, 600, 16, 7293, 10275), + (10275, 4931, 4931, 4931, 4931, 7, 85, 16748, 4, 600, 16, 10274, 10276), + (10276, 4931, 4931, 4931, 4931, 7, 85, 16749, 4, 600, 16, 10275, 10428), + (10277, 4935, 4935, 4935, 4935, 7, 81, 16743, 14, 300, 16, 7294, 17540), + (10278, 4934, 4934, 4934, 4934, 7, 81, 16742, 13, 300, 16, 7295, 17539), + (10279, 517, 517, 517, 517, 5, 80, 16739, 12, 600, 16, 7298, 10280), + (10280, 517, 517, 517, 517, 5, 80, 16740, 12, 600, 16, 10279, 10281), + (10281, 517, 517, 517, 517, 5, 80, 16741, 12, 600, 16, 10280, 12917), + (10282, -1, -1, 8031, 8031, 6, 84, -1, 0, 0, 16, 8033, 10283), + (10283, -1, -1, 8031, 8031, 6, 84, -1, 0, 0, 16, 10282, 10284), + (10284, -1, -1, 8031, 8031, 6, 84, -1, 0, 0, 16, 10283, 10431), + (10285, -1, -1, 8035, 8035, 6, 82, -1, 0, 0, 16, 8037, 10286), + (10286, -1, -1, 8035, 8035, 6, 82, -1, 0, 0, 16, 10285, 10287), + (10287, -1, -1, 8035, 8035, 6, 82, -1, 0, 0, 16, 10286, 15472), + (10288, 6971, 6971, 6971, 6971, 7, 85, 16761, 41, 600, 16, 6973, 10289), + (10289, 6971, 6971, 6971, 6971, 7, 85, 16762, 41, 600, 16, 10288, 10290), + (10290, 6971, 6971, 6971, 6971, 7, 85, 16763, 41, 600, 16, 10289, 14274), + (10291, -1, -1, 6974, 6974, 5, 85, -1, 0, 0, 16, 6976, 10292), + (10292, -1, -1, 6974, 6974, 5, 85, -1, 0, 0, 16, 10291, 10293), + (10293, -1, -1, 6974, 6974, 5, 85, -1, 0, 0, 16, 10292, -1), + (10294, 6984, 6984, 6984, 6984, 6, 78, 16765, 60, 60, 16, 6984, 13177), + (10295, 6985, 6985, 6985, 6985, 6, 78, 16766, 60, 60, 16, 6985, 13179), + (10296, 6986, 6986, 6986, 6986, 6, 78, 16767, 60, 60, 16, 6986, 13178), + (10297, 1119, 1119, 1119, 1119, 9, 85, 16750, 8, 900, 16, 7481, 10298), + (10298, 1119, 1119, 1119, 1119, 9, 85, 16751, 8, 900, 16, 10297, 10299), + (10299, 1119, 1119, 1119, 1119, 9, 85, 16752, 8, 900, 16, 10298, 16883), + (10300, 723, 723, 723, 723, 7, 85, 16753, 6, 30, 16, 7482, 14273), + (10301, 5015, 5015, 5015, 5015, 12, 85, 16754, 9, 900, 16, 7483, 17382), + (10302, 291, 291, 291, 291, 12, 85, 16755, 5, 900, 16, 7487, 10303), + (10303, 291, 291, 291, 291, 12, 85, 16756, 5, 900, 16, 10302, 10304), + (10304, 291, 291, 291, 291, 12, 85, 16757, 5, 900, 16, 10303, 12828), + (10305, -1, -1, 729, 729, 9, 85, -1, 0, 0, 16, 7496, 10306), + (10306, -1, -1, 729, 729, 9, 85, -1, 0, 0, 16, 10305, 10307), + (10307, -1, -1, 729, 729, 9, 85, -1, 0, 0, 16, 10306, 16887), + (10308, 6380, 6380, 6380, 6380, 6, 85, 16758, 39, 120, 16, 7499, 10309), + (10309, 6380, 6380, 6380, 6380, 6, 85, 16759, 39, 120, 16, 10308, 10310), + (10310, 6380, 6380, 6380, 6380, 6, 85, 16760, 39, 120, 16, 10309, 13170), + (10311, -1, -1, 1134, 1134, 3, 85, -1, 0, 0, 16, 4808, 10312), + (10312, -1, -1, 1134, 1134, 3, 85, -1, 0, 0, 16, 10311, 10313), + (10313, -1, -1, 1134, 1134, 3, 85, -1, 0, 0, 16, 10312, 10314), + (10314, -1, -1, 1134, 1134, 3, 85, -1, 0, 0, 16, 10313, 10315), + (10315, -1, -1, 1134, 1134, 3, 85, -1, 0, 0, 16, 10314, 13035), + (10316, -1, -1, 4809, 4809, 5, 85, -1, 0, 0, 16, 4811, 10317), + (10317, -1, -1, 4809, 4809, 5, 85, -1, 0, 0, 16, 10316, 10318), + (10318, -1, -1, 4809, 4809, 5, 85, -1, 0, 0, 16, 10317, 13040), + (10319, 6931, 6931, 6931, 6931, 12, 85, 16774, 41, 600, 16, 6931, 13058), + (10320, 6932, 6932, 6932, 6932, 7, 85, 16775, 42, 1200, 16, 6934, 10321), + (10321, 6932, 6932, 6932, 6932, 7, 85, 16776, 42, 1200, 16, 10320, 10322), + (10322, 6932, 6932, 6932, 6932, 7, 85, 16777, 42, 1200, 16, 10321, 13062), + (10323, 4854, 4854, 4854, 4854, 12, 85, 16768, 8, 600, 16, 7180, 10324), + (10324, 4854, 4854, 4854, 4854, 12, 85, 16769, 8, 600, 16, 10323, 10325), + (10325, 4854, 4854, 4854, 4854, 12, 85, 16770, 8, 600, 16, 10324, 13059), + (10326, 1178, 1178, 1178, 1178, 9, 85, 16771, 4, 900, 16, 7189, 10327), + (10327, 1178, 1178, 1178, 1178, 9, 85, 16772, 4, 900, 16, 10326, 10328), + (10328, 1178, 1178, 1178, 1178, 9, 85, 16773, 4, 900, 16, 10327, 13845), + (10329, -1, -1, 10329, 10329, 5, 85, 0, 0, 0, 16, -1, 10398), + (10330, 10330, 10330, 10330, 10330, 7, 85, 16785, 35, 30, 16, -1, 13203), + (10331, 10331, 10331, 10331, 10331, 6, 85, 16787, 44, 20, 16, -1, -1), + (10332, -1, -1, 10332, 10332, 3, 85, -1, 0, 0, 16, -1, 12733), + (10333, 10333, 10333, 10333, 10333, 5, 85, 16788, 55, 120, 16, -1, 10334), + (10334, 10333, 10333, 10333, 10333, 7, 85, 16789, 55, 120, 16, 10333, 10335), + (10335, 10333, 10333, 10333, 10333, 9, 85, 16790, 55, 120, 16, 10334, 12724), + (10336, 10336, 10336, 10336, 10336, 5, 85, 16791, 58, 8, 16, -1, 10337), + (10337, 10336, 10336, 10336, 10336, 7, 85, 16792, 58, 8, 16, 10336, 10338), + (10338, 10336, 10336, 10336, 10336, 9, 85, 16793, 58, 8, 16, 10337, 12730), + (10339, 10339, 10339, 10339, 10339, 12, 85, 16786, 48, 1800, 16, -1, -1), + (10340, -1, -1, 10340, 10340, 3, 80, -1, 0, 0, 16, -1, 10341), + (10341, -1, -1, 10340, 10340, 6, 83, -1, 0, 0, 16, 10340, 10342), + (10342, -1, -1, 10340, 10340, 9, 85, -1, 0, 0, 16, 10341, 13184), + (10343, -1, -1, 10343, 10343, 5, 85, 0, 0, 0, 16, -1, 10344), + (10344, -1, -1, 10343, 10343, 7, 85, 0, 0, 0, 16, 10343, 10345), + (10345, -1, -1, 10343, 10343, 9, 85, 0, 0, 0, 16, 10344, 13841), + (10346, 10346, 10346, 10346, 10346, 9, 85, 21783, 46, 600, 16, -1, 13183), + (10347, -1, -1, 7945, 7945, 6, 85, -1, 0, 0, 16, 10034, 17310), + (10348, 0, 0, 10348, 10348, 5, 80, -1, 0, 0, 16, -1, 10349), + (10349, 0, 0, 10348, 10348, 7, 83, -1, 0, 0, 16, 10348, 10350), + (10350, 0, 0, 10348, 10348, 9, 85, -1, 0, 0, 16, 10349, 13578), + (10351, 10351, 10351, 10351, 10351, 12, 85, 21785, 34, 600, 16, -1, 10682), + (10352, 10352, 10352, 10352, 10352, 12, 85, 21786, 34, 600, 16, -1, 10683), + (10353, 10353, 10353, 10353, 10353, 12, 85, 21787, 34, 600, 16, -1, 10684), + (10354, 10354, 10354, 10354, 10354, 8, 85, 21653, 39, 4320, 16, -1, 14016), + (10355, -1, -1, 10355, 10355, 6, 83, -1, 0, 0, 16, -1, 10356), + (10356, -1, -1, 10355, 10355, 8, 84, -1, 0, 0, 16, 10355, 10357), + (10357, -1, -1, 10355, 10355, 10, 85, -1, 0, 0, 16, 10356, 10643), + (10358, -1, -1, 10358, 10358, 7, 80, -1, 0, 0, 16, -1, 10359), + (10359, -1, -1, 10358, 10358, 9, 83, -1, 0, 0, 16, 10358, 10360), + (10360, -1, -1, 10358, 10358, 12, 85, -1, 0, 0, 16, 10359, 14210), + (10361, -1, -1, 962, 962, 5, 83, -1, 0, 0, 16, 6227, 10362), + (10362, -1, -1, 962, 962, 5, 84, -1, 0, 0, 16, 10361, 10363), + (10363, -1, -1, 962, 962, 5, 85, -1, 0, 0, 16, 10362, 14218), + (10364, -1, -1, 10364, 10364, 5, 85, -1, 0, 0, 16, -1, 10365), + (10365, -1, -1, 10364, 10364, 7, 85, -1, 0, 0, 16, 10364, 10366), + (10366, -1, -1, 10364, 10364, 9, 85, -1, 0, 0, 16, 10365, 10442), + (10367, 10367, 10367, 10367, 10367, 12, 85, 21751, 30, 360, 16, -1, 10630), + (10368, 10368, 10368, 10368, 10368, 6, 85, 21654, 46, 900, 16, -1, 10369), + (10369, 10368, 10368, 10368, 10368, 9, 85, 21655, 46, 900, 16, 10368, 10386), + (10370, -1, -1, 10370, 10370, 3, 60, -1, 0, 0, 16, -1, 10371), + (10371, -1, -1, 10370, 10370, 3, 60, -1, 0, 0, 16, 10370, 10372), + (10372, -1, -1, 10370, 10370, 3, 60, -1, 0, 0, 16, 10371, 13927), + (10373, 10373, 10373, 10373, 10373, 6, 75, 16806, 62, 6, 16, -1, -1), + (10374, 10374, 10374, 10374, 10374, 6, 85, 16800, 63, 900, 16, -1, 10375), + (10375, 10374, 10374, 10374, 10374, 6, 85, 16801, 63, 900, 16, 10374, 10376), + (10376, 10374, 10374, 10374, 10374, 6, 85, 16802, 63, 900, 16, 10375, 13174), + (10377, 10377, 10377, 10377, 10377, 6, 85, 16794, 64, 60, 16, -1, 10378), + (10378, 10377, 10377, 10377, 10377, 6, 85, 16795, 64, 60, 16, 10377, 10379), + (10379, 10377, 10377, 10377, 10377, 6, 85, 16796, 64, 60, 16, 10378, 13180), + (10380, -1, -1, 10380, 10380, 6, 85, -1, 0, 0, 16, -1, 10381), + (10381, -1, -1, 10380, 10380, 6, 85, -1, 0, 0, 16, 10380, 10382), + (10382, -1, -1, 10380, 10380, 6, 85, -1, 0, 0, 16, 10381, 13477), + (10383, -1, -1, 5085, 5085, 6, 85, -1, 0, 0, 16, 7386, 10384), + (10384, -1, -1, 5085, 5085, 6, 85, -1, 0, 0, 16, 10383, 10385), + (10385, -1, -1, 5085, 5085, 6, 85, -1, 0, 0, 16, 10384, -1), + (10386, 10368, 10368, 10368, 10368, 12, 85, 21656, 46, 900, 16, 10369, -1), + (10387, 10387, 10387, 10387, 10387, 9, 85, 21835, 45, 1200, 16, -1, -1), + (10388, -1, -1, 10388, 10388, 12, 85, -1, 0, 0, 16, -1, 13545), + (10389, -1, -1, 10389, 10389, 9, 83, 0, 0, 0, 16, -1, 10390), + (10390, -1, -1, 10389, 10389, 11, 84, 0, 0, 0, 16, 10389, 10391), + (10391, -1, -1, 10389, 10389, 12, 85, 0, 0, 0, 16, 10390, -1), + (10392, 10392, 10392, 10392, 10392, 12, 85, 21751, 11, 480, 16, -1, 10631), + (10393, 10393, 10393, 10393, 10393, 9, 81, 3246, 42, 2, 16, -1, -1), + (10394, 10394, 10394, 10394, 10394, 12, 85, 21821, 30, 600, 16, -1, 10704), + (10395, 10395, 10395, 10395, 10395, 3, 80, 21748, 62, 5, 16, -1, 12590), + (10396, 10396, 10396, 10396, 10396, 12, 85, 16857, 14, 600, 16, -1, 10790), + (10397, 10397, 10397, 10397, 10397, 12, 85, 16858, 14, 600, 16, -1, 10791), + (10398, -1, -1, 10329, 10329, 7, 85, 0, 0, 0, 16, 10329, 10399), + (10399, -1, -1, 10329, 10329, 9, 85, 0, 0, 0, 16, 10398, -1), + (10400, 10400, 10400, 10400, 10400, 6, 85, 16807, 62, 900, 16, -1, 15558), + (10401, -1, -1, 10401, 10401, 6, 85, -1, 0, 0, 16, -1, 10402), + (10402, -1, -1, 10401, 10401, 6, 85, -1, 0, 0, 16, 10401, 10403), + (10403, -1, -1, 10401, 10401, 6, 85, -1, 0, 0, 16, 10402, 13052), + (10404, -1, -1, 10404, 10404, 6, 85, -1, 0, 0, 16, -1, 13051), + (10405, -1, -1, 10405, 10405, 7, 81, 0, 0, 0, 16, -1, 10406), + (10406, -1, -1, 10405, 10405, 7, 82, 0, 0, 0, 16, 10405, 10407), + (10407, -1, -1, 10405, 10405, 7, 83, 0, 0, 0, 16, 10406, 10408), + (10408, -1, -1, 10405, 10405, 7, 84, 0, 0, 0, 16, 10407, 10409), + (10409, -1, -1, 10405, 10405, 7, 85, 0, 0, 0, 16, 10408, 10671), + (10410, -1, -1, 10410, 10410, 8, 85, -1, 0, 0, 16, -1, 10411), + (10413, -1, -1, 10413, 10413, 5, 81, 0, 0, 0, 16, -1, 10414), + (10414, -1, -1, 10413, 10413, 5, 81, 0, 0, 0, 16, 10413, 10415), + (10415, -1, -1, 10413, 10413, 5, 81, 0, 0, 0, 16, 10414, 10416), + (10416, -1, -1, 10413, 10413, 5, 81, 0, 0, 0, 16, 10415, 10417), + (10417, -1, -1, 10413, 10413, 5, 81, 0, 0, 0, 16, 10416, -1), + (10418, 6561, 6561, 6561, 6561, 7, 85, 21808, 32, 30, 16, 10101, 10419), + (10419, 6561, 6561, 6561, 6561, 7, 85, 21810, 32, 30, 16, 10418, 10420), + (10420, 6561, 6561, 6561, 6561, 7, 85, 21811, 32, 30, 16, 10419, 14256), + (10421, 10506, 10506, 10506, 10506, 9, 85, 23521, 66, 120, 16, 10508, -1), + (10424, 10424, 10424, 10424, 10424, 7, 81, 21813, 41, 6, 16, -1, -1), + (10425, 10425, 10425, 10425, 10425, 7, 81, 21814, 39, 6, 16, -1, -1), + (10426, 10426, 10426, 10426, 10426, 10, 85, 21816, 5, 900, 16, -1, -1), + (10427, 10427, 10427, 10427, 10427, 12, 85, 21818, 30, 900, 16, -1, -1), + (10428, 4931, 4931, 4931, 4931, 7, 85, 21838, 4, 600, 16, 10276, 10429), + (10429, 4931, 4931, 4931, 4931, 7, 85, 21839, 4, 600, 16, 10428, 10430), + (10430, 4931, 4931, 4931, 4931, 7, 85, 21844, 4, 600, 16, 10429, 13241), + (10431, -1, -1, 8031, 8031, 6, 85, -1, 0, 0, 16, 10284, 10432), + (10432, -1, -1, 8031, 8031, 6, 85, -1, 0, 0, 16, 10431, 10433), + (10433, -1, -1, 8031, 8031, 6, 85, -1, 0, 0, 16, 10432, -1), + (10434, -1, -1, 10434, 10434, 7, 85, 0, 0, 0, 16, -1, 10435), + (10435, -1, -1, 10434, 10434, 9, 85, 0, 0, 0, 16, 10434, 10436), + (10436, -1, -1, 10434, 10434, 12, 85, 0, 0, 0, 16, 10435, -1), + (10437, -1, -1, 6601, 6601, 6, 86, -1, 0, 0, 17, 10029, 10438), + (10438, -1, -1, 6601, 6601, 6, 87, -1, 0, 0, 17, 10437, 10439), + (10439, -1, -1, 6601, 6601, 6, 88, -1, 0, 0, 17, 10438, 10440), + (10440, -1, -1, 6601, 6601, 6, 89, -1, 0, 0, 17, 10439, 10441), + (10442, -1, -1, 10364, 10364, 9, 86, -1, 0, 0, 17, 10366, 10443), + (10443, -1, -1, 10364, 10364, 9, 88, -1, 0, 0, 17, 10442, -1), + (10450, 10450, 10450, 10450, 10450, 7, 85, 16808, 63, 900, 16, -1, 10451), + (10451, 10450, 10450, 10450, 10450, 7, 85, 16809, 63, 900, 16, 10450, 10452), + (10452, 10450, 10450, 10450, 10450, 7, 85, 16810, 63, 900, 16, 10451, 10468), + (10453, -1, -1, 10453, 10453, 5, 85, -1, 0, 0, 16, -1, 10454), + (10454, -1, -1, 10453, 10453, 7, 85, -1, 0, 0, 16, 10453, 10455), + (10455, -1, -1, 10453, 10453, 9, 85, -1, 0, 0, 16, 10454, 13607), + (10456, -1, -1, 10456, 10456, 5, 85, -1, 0, 0, 16, -1, 10457), + (10457, -1, -1, 10456, 10456, 7, 85, -1, 0, 0, 16, 10456, 10458), + (10458, -1, -1, 10456, 10456, 9, 85, -1, 0, 0, 16, 10457, -1), + (10459, -1, -1, 10459, 10459, 5, 65, -1, 0, 0, 16, -1, 10460), + (10460, -1, -1, 10459, 10459, 7, 65, -1, 0, 0, 16, 10459, 10461), + (10461, -1, -1, 10459, 10459, 9, 65, -1, 0, 0, 16, 10460, -1), + (10462, 10462, 10462, 10462, 10462, 12, 85, 16811, 14, 4320, 16, -1, -1), + (10463, 10463, 10463, 10463, 10463, 12, 85, 16812, 16, 4320, 16, -1, -1), + (10464, -1, -1, 10464, 10464, 5, 80, -1, 0, 0, 16, -1, 10465), + (10465, -1, -1, 10464, 10464, 7, 80, -1, 0, 0, 16, 10464, 10466), + (10466, -1, -1, 10464, 10464, 9, 80, -1, 0, 0, 16, 10465, 13140), + (10467, -1, -1, 86, 86, 8, 85, -1, 0, 0, 17, 266, -1), + (10468, 10450, 10450, 10450, 10450, 7, 85, 23603, 63, 900, 17, 10452, 10469), + (10469, 10450, 10450, 10450, 10450, 7, 85, 23604, 63, 900, 17, 10468, 10670), + (10470, -1, -1, 10470, 10470, 9, 86, -1, 0, 0, 17, -1, 10471), + (10471, -1, -1, 10470, 10470, 12, 88, -1, 0, 0, 17, 10470, 10472), + (10472, -1, -1, 10470, 10470, 15, 90, -1, 0, 0, 17, 10471, 15828), + (10473, -1, -1, 446, 735, 10, 86, -1, 0, 0, 17, 7624, 10474), + (10474, -1, -1, 446, 735, 10, 87, -1, 0, 0, 17, 10473, 10475), + (10475, -1, -1, 446, 735, 10, 88, -1, 0, 0, 17, 10474, 10476), + (10476, -1, -1, 446, 735, 10, 89, -1, 0, 0, 17, 10475, 10477), + (10477, -1, -1, 446, 735, 10, 90, -1, 0, 0, 17, 10476, 13308), + (10478, -1, -1, 10478, 10478, 15, 101, -1, 0, 0, 21, -1, 10479), + (10481, 10481, 10481, 10481, 10481, 21, 105, 46249, 90, 600, 21, -1, -1), + (10500, 10500, 10500, 10500, 10500, 7, 85, 16813, 62, 12, 16, -1, -1), + (10501, 10501, 10501, 10501, 10501, 7, 85, 16814, 63, 1, 16, -1, -1), + (10502, 10502, -1, 10502, 10502, 7, 85, 1566, 64, 120, 16, -1, 12647), + (10503, 10503, 10503, 10503, 10503, 9, 85, 16816, 13, 600, 16, -1, 10504), + (10504, 10503, 10503, 10503, 10503, 9, 85, 16817, 13, 600, 16, 10503, 10505), + (10505, 10503, 10503, 10503, 10503, 9, 85, 16818, 13, 600, 16, 10504, 12648), + (10506, 10506, 10506, 10506, 10506, 9, 85, 16819, 66, 120, 16, -1, 10507), + (10507, 10506, 10506, 10506, 10506, 9, 85, 16820, 66, 120, 16, 10506, 10508), + (10508, 10506, 10506, 10506, 10506, 9, 85, 16821, 66, 120, 16, 10507, 10421), + (10509, 5105, 5105, 5105, 5105, 12, 85, 16822, 11, 600, 16, 7420, 13154), + (10510, 7986, 7986, 7986, 7986, 12, 85, 16823, 11, 600, 16, 7988, 13155), + (10511, -1, -1, 10511, 10511, 6, 85, -1, 0, 0, 16, -1, 10512), + (10512, -1, -1, 10511, 10511, 6, 85, -1, 0, 0, 16, 10511, 10513), + (10513, -1, -1, 10511, 10511, 6, 85, -1, 0, 0, 16, 10512, 12642), + (10514, -1, -1, 10514, 10514, 6, 85, -1, 0, 0, 16, -1, 10516), + (10515, -1, -1, 10514, 10514, 6, 85, -1, 0, 0, 16, 10516, 12639), + (10516, -1, -1, 10514, 10514, 6, 85, -1, 0, 0, 16, 10514, 10515), + (10517, 6565, 6565, 6565, 6565, 9, 88, 23608, 17, 45, 17, 10010, 10518), + (10519, -1, -1, 10519, 10519, 9, 86, 0, 0, 0, 17, -1, 10520), + (10522, -1, -1, 10522, 10522, 7, 86, 0, 0, 0, 17, -1, 10523), + (10527, -1, -1, 10527, 10527, 5, 86, 0, 0, 0, 17, -1, 10528), + (10532, -1, -1, 10532, 10532, 5, 86, 0, 0, 0, 17, -1, 10533), + (10537, -1, -1, 10537, 10537, 5, 86, 0, 0, 0, 17, -1, 10538), + (10545, 10545, 10545, 10545, 10545, 12, 85, 23531, 73, 600, 17, -1, -1), + (10546, 10546, 10546, 10546, 10546, 12, 85, 23528, 74, 600, 17, -1, -1), + (10548, -1, -1, 10548, 10548, 9, 86, -1, 0, 0, 17, -1, 10549), + (10550, 10550, 10550, 10550, 10550, 7, 85, 16824, 61, 120, 16, -1, 13250), + (10551, -1, -1, 10551, 10551, 6, 85, -1, 0, 0, 16, -1, 10552), + (10552, -1, -1, 10551, 10551, 6, 85, -1, 0, 0, 16, 10551, 10553), + (10553, -1, -1, 10551, 10551, 6, 85, -1, 0, 0, 16, 10552, 14764), + (10554, -1, -1, 1572, 1572, 5, 80, -1, 0, 0, 16, 1576, 10555), + (10555, -1, -1, 1572, 1572, 5, 80, -1, 0, 0, 16, 10554, 10556), + (10556, -1, -1, 1572, 1572, 5, 80, -1, 0, 0, 16, 10555, 16062), + (10557, 12395, 12395, 12395, 12395, 9, 75, 16828, 11, 900, 16, -1, -1), + (10558, -1, -1, 10558, 10558, 6, 80, -1, 0, 0, 16, -1, 10559), + (10559, -1, -1, 10558, 10558, 6, 83, -1, 0, 0, 16, 10558, 10560), + (10560, -1, -1, 10558, 10558, 6, 85, -1, 0, 0, 16, 10559, 15469), + (10561, -1, -1, 10561, 10561, 6, 85, -1, 0, 0, 16, -1, 10562), + (10562, -1, -1, 10561, 10561, 6, 85, -1, 0, 0, 16, 10561, 10563), + (10563, -1, -1, 10561, 10561, 6, 85, -1, 0, 0, 16, 10562, 15466), + (10564, 773, -1, 773, 773, 12, 85, 16829, 5, 1800, 16, 7278, 10565), + (10565, 773, -1, 773, 773, 12, 85, 16830, 5, 1800, 16, 10564, 10566), + (10566, 773, -1, 773, 773, 12, 85, 16831, 5, 1800, 16, 10565, 13734), + (10568, -1, -1, 6564, 6564, 10, 86, -1, 0, 0, 17, 10009, 10569), + (10571, 1597, 1597, 1597, 1597, 9, 85, 23611, 6, 10, 17, 6606, -1), + (10572, 6617, 6617, 6617, 6617, 12, 86, 23612, 42, 3600, 17, 6617, 14036), + (10573, 6610, 6610, 6610, 6610, 9, 86, 23613, 41, 30, 17, 10003, 13422), + (10574, -1, -1, 6611, 6611, 6, 85, -1, 0, 0, 17, 6619, 16121), + (10575, -1, -1, 6614, 6614, 9, 85, -1, 0, 0, 17, 10005, -1), + (10576, -1, -1, 492, 492, 2, 87, -1, 0, 0, 17, 7130, -1), + (10578, 258, -1, 258, 258, 9, 86, 27520, 1, 600, 17, 258, 16003), + (10579, -1, -1, 7036, 10579, 9, 85, 0, 0, 0, 17, 7038, 10580), + (10580, -1, -1, 7036, 10579, 12, 87, 0, 0, 0, 17, 10579, 10581), + (10585, 912, 912, 912, 912, 9, 86, 23617, 4, 3600, 17, 10013, 10586), + (10588, -1, -1, 10588, 10588, 5, 86, 0, 0, 0, 17, -1, 10589), + (10589, -1, -1, 10588, 10588, 5, 87, 0, 0, 0, 17, 10588, 10590), + (10590, -1, -1, 10588, 10588, 5, 88, 0, 0, 0, 17, 10589, 10591), + (10591, -1, -1, 10588, 10588, 5, 89, 0, 0, 0, 17, 10590, 10592), + (10592, -1, -1, 10588, 10588, 5, 90, 0, 0, 0, 17, 10591, 17206), + (10600, 10600, 10600, 10600, 10600, 7, 85, 16832, 73, 20, 16, -1, 10601), + (10601, 10600, 10600, 10600, 10600, 7, 85, 16833, 73, 20, 16, 10600, 10602), + (10602, 10600, 10600, 10600, 10600, 7, 85, 16834, 73, 20, 16, 10601, 12982), + (10603, 10601, 10601, 10601, 10601, 3, 85, 16835, 62, 6, 16, -1, -1), + (10604, -1, -1, 6051, 6051, 3, 85, -1, 0, 0, 16, 7603, 10605), + (10605, -1, -1, 6051, 6051, 3, 85, -1, 0, 0, 16, 10604, 10606), + (10606, -1, -1, 6051, 6051, 3, 85, -1, 0, 0, 16, 10605, 12795), + (10607, -1, -1, 6383, 6383, 9, 80, -1, 0, 0, 16, 6385, 10608), + (10608, -1, -1, 6383, 6383, 9, 80, -1, 0, 0, 16, 10607, 10609), + (10609, -1, -1, 6383, 6383, 9, 80, -1, 0, 0, 16, 10608, 12801), + (10610, -1, -1, 10610, 10610, 3, 70, -1, 0, 0, 16, -1, 10611), + (10611, -1, -1, 10610, 10610, 3, 70, -1, 0, 0, 16, 10610, 10612), + (10612, -1, -1, 10610, 10610, 3, 70, -1, 0, 0, 16, 10611, -1), + (10618, 7850, 7850, 7850, 7850, 9, 86, 23532, 39, 4320, 17, 7340, 10619), + (10619, 7850, 7850, 7850, 7850, 12, 88, 23533, 39, 4320, 17, 10618, 10620), + (10620, 7850, 7850, 7850, 7850, 15, 90, 23534, 39, 4320, 17, 10619, 13604), + (10621, -1, -1, 849, 849, 9, 85, -1, 0, 0, 17, 851, 10622), + (10622, -1, -1, 849, 849, 9, 87, -1, 0, 0, 17, 10621, 16604), + (10623, -1, -1, 255, 255, 9, 85, -1, 0, 0, 17, 5808, 10624), + (10624, -1, -1, 255, 255, 12, 87, -1, 0, 0, 17, 10623, 10625), + (10625, -1, -1, 255, 255, 15, 89, -1, 0, 0, 17, 10624, 13589), + (10626, 5984, 5984, 5984, 5984, 12, 90, 23535, 2, 30, 17, 7711, 13592), + (10627, -1, -1, 10627, 10627, 3, 59, 0, 0, 0, 3, -1, 10628), + (10628, -1, -1, 10627, 10627, 3, 59, 0, 0, 0, 3, 10627, 10629), + (10629, -1, -1, 10627, 10627, 3, 59, 0, 0, 0, 3, 10628, -1), + (10630, 10367, 10367, 10367, 10367, 12, 90, 27642, 30, 360, 17, 10367, 13434), + (10631, 10392, 10392, 10392, 10392, 12, 90, 27642, 11, 480, 17, 10392, -1), + (10632, -1, -1, 735, 735, 10, 86, -1, 0, 0, 17, 7627, 10633), + (10633, -1, -1, 735, 735, 10, 87, -1, 0, 0, 17, 10632, 10634), + (10634, -1, -1, 735, 735, 10, 88, -1, 0, 0, 17, 10633, 10635), + (10635, -1, -1, 735, 735, 10, 89, -1, 0, 0, 17, 10634, 10636), + (10636, -1, -1, 735, 735, 10, 90, -1, 0, 0, 17, 10635, 13884), + (10637, -1, -1, 1287, 1287, 9, 86, -1, 0, 0, 17, 12471, 10638), + (10638, -1, -1, 1287, 1287, 12, 88, -1, 0, 0, 17, 10637, 10639), + (10639, -1, -1, 1287, 1287, 15, 90, -1, 0, 0, 17, 10638, 13323), + (10640, 5095, 5095, 5095, 5095, 9, 85, 23620, 10, 900, 17, 7334, 10641), + (10641, 5095, 5095, 5095, 5095, 12, 87, 23621, 10, 900, 17, 10640, 10642), + (10642, 5095, 5095, 5095, 5095, 15, 89, 23622, 10, 900, 17, 10641, 13575), + (10643, -1, -1, 10355, 10355, 10, 86, -1, 0, 0, 17, 10357, 10644), + (10644, -1, -1, 10355, 10355, 10, 88, -1, 0, 0, 17, 10643, 10645), + (10645, -1, -1, 10355, 10355, 10, 90, -1, 0, 0, 17, 10644, 14094), + (10646, 7712, 7712, 7712, 7712, 15, 90, 23536, 2, 30, 17, 7712, 13585), + (10647, 188, 188, 188, 188, 9, 88, 23537, 2, 30, 17, 7662, 13586), + (10650, -1, -1, 10650, 10650, 7, 85, -1, 0, 0, 16, -1, 10651), + (10651, -1, -1, 10650, 10650, 9, 85, -1, 0, 0, 16, 10650, 10652), + (10652, -1, -1, 10650, 10650, 12, 85, -1, 0, 0, 16, 10651, 13804), + (10653, -1, -1, 10653, 10653, 7, 85, -1, 0, 0, 16, -1, 10654), + (10654, -1, -1, 10653, 10653, 7, 85, -1, 0, 0, 16, 10653, 10655), + (10655, -1, -1, 10653, 10653, 7, 85, -1, 0, 0, 16, 10654, 17406), + (10656, -1, -1, 10656, 10656, 7, 85, -1, 0, 0, 16, -1, 12678), + (10657, -1, -1, 10657, 10657, 7, 85, -1, 0, 0, 16, -1, 10658), + (10658, -1, -1, 10657, 10657, 7, 85, -1, 0, 0, 16, 10657, 10659), + (10659, -1, -1, 10657, 10657, 7, 85, -1, 0, 0, 16, 10658, 12679), + (10660, -1, -1, 820, 820, 5, 85, -1, 0, 0, 16, 7165, 10661), + (10661, -1, -1, 820, 820, 5, 85, -1, 0, 0, 16, 10660, 10662), + (10662, -1, -1, 820, 820, 5, 85, -1, 0, 0, 16, 10661, 12667), + (10663, -1, -1, 6020, 6020, 2, 85, -1, 0, 0, 16, 7171, 10664), + (10664, -1, -1, 6020, 6020, 2, 85, -1, 0, 0, 16, 10663, 10665), + (10665, -1, -1, 6020, 6020, 2, 85, -1, 0, 0, 16, 10664, 12670), + (10666, -1, -1, 495, 495, 6, 85, -1, 0, 0, 16, 6262, 10667), + (10667, -1, -1, 495, 495, 5, 85, -1, 0, 0, 16, 10666, 10668), + (10668, -1, -1, 495, 495, 7, 85, -1, 0, 0, 16, 10667, 17391), + (10670, 10450, 10450, 10450, 10450, 7, 85, 23605, 63, 900, 17, 10469, 15839), + (10671, -1, -1, 10405, 10405, 9, 86, 0, 0, 0, 17, 10409, 10672), + (10672, -1, -1, 10405, 10405, 9, 87, 0, 0, 0, 17, 10671, 10673), + (10673, -1, -1, 10405, 10405, 9, 88, 0, 0, 0, 17, 10672, 10674), + (10674, -1, -1, 10405, 10405, 9, 89, 0, 0, 0, 17, 10673, 10675), + (10675, -1, -1, 10405, 10405, 9, 90, 0, 0, 0, 17, 10674, -1), + (10676, -1, -1, 6791, 6791, 6, 86, -1, 0, 0, 17, 10046, 10677), + (10677, -1, -1, 6791, 6791, 6, 88, -1, 0, 0, 17, 10676, 10678), + (10678, -1, -1, 6791, 6791, 6, 90, -1, 0, 0, 17, 10677, 13598), + (10679, 6492, 6492, 6492, 6492, 9, 85, 23626, 52, 720, 17, 6497, 10680), + (10680, 6492, 6492, 6492, 6492, 9, 87, 23627, 52, 720, 17, 10679, 10681), + (10681, 6492, 6492, 6492, 6492, 9, 89, 23628, 52, 720, 17, 10680, 14003), + (10682, 10351, 10351, 10351, 10351, 15, 90, 23538, 34, 600, 17, 10351, -1), + (10683, 10352, 10352, 10352, 10352, 15, 90, 23539, 34, 600, 17, 10352, -1), + (10684, 10353, 10353, 10353, 10353, 15, 90, 23540, 34, 600, 17, 10353, -1), + (10685, -1, -1, 602, 602, 9, 86, -1, 0, 0, 17, 5582, 10686), + (10686, -1, -1, 602, 602, 12, 88, -1, 0, 0, 17, 10685, 10687), + (10687, -1, -1, 602, 602, 15, 90, -1, 0, 0, 17, 10686, 13610), + (10688, -1, -1, 855, 855, 7, 86, -1, 0, 0, 17, 7677, 10689), + (10689, -1, -1, 855, 855, 7, 87, -1, 0, 0, 17, 10688, 10690), + (10690, -1, -1, 855, 855, 7, 88, -1, 0, 0, 17, 10689, 10691), + (10691, -1, -1, 855, 855, 7, 89, -1, 0, 0, 17, 10690, 10692), + (10692, -1, -1, 855, 855, 7, 90, -1, 0, 0, 17, 10691, 13613), + (10700, 10700, 10700, 10700, 10700, 7, 85, 16839, 61, 10, 16, -1, -1), + (10701, 10701, 10701, 10701, 10701, 7, 85, 21662, 32, 360, 16, -1, 10702), + (10702, 10701, 10701, 10701, 10701, 9, 85, 21663, 32, 360, 16, 10701, 10703), + (10703, 10701, 10701, 10701, 10701, 12, 85, 21664, 32, 360, 16, 10702, 12754), + (10704, 10394, 10394, 10394, 10394, 12, 85, 23541, 30, 300, 17, 10394, 13584), + (10705, -1, -1, 6395, 6395, 9, 86, -1, 0, 0, 17, 10052, 10706), + (10706, -1, -1, 6395, 6395, 9, 88, -1, 0, 0, 17, 10705, 10707), + (10707, -1, -1, 6395, 6395, 9, 90, -1, 0, 0, 17, 10706, 14097), + (10708, 534, 534, 534, 534, 12, 86, 23545, 4, 2160, 17, 10049, 10709), + (10709, 534, 534, 534, 534, 12, 88, 23546, 4, 2160, 17, 10708, 10710), + (10710, 534, 534, 534, 534, 12, 90, 23547, 4, 2160, 17, 10709, 13595), + (10711, 10711, 10711, 10711, 10711, 9, 86, 23548, 75, 1200, 17, -1, 10712), + (10712, 10711, 10711, 10711, 10711, 12, 88, 23549, 75, 1200, 17, 10711, 10713), + (10713, 10711, 10711, 10711, 10711, 15, 90, 23550, 75, 1200, 17, 10712, 14006), + (10714, -1, -1, 10714, 10714, 9, 86, 0, 0, 0, 17, -1, 10715), + (10715, -1, -1, 10714, 10714, 12, 88, 0, 0, 0, 17, 10714, 10716), + (10717, -1, -1, 7743, 7743, 9, 61, -1, 0, 0, 17, 7745, 10718), + (10718, -1, -1, 7743, 7743, 9, 61, -1, 0, 0, 17, 10717, 15258), + (10719, -1, -1, 10719, 10719, 9, 75, 0, 0, 0, 17, -1, 10720), + (10720, -1, -1, 10719, 10719, 12, 75, 0, 0, 0, 17, 10719, 10721), + (10721, -1, -1, 10719, 10719, 15, 75, 0, 0, 0, 17, 10720, 13562), + (10722, -1, -1, 10722, 10722, 5, 81, 0, 0, 0, 17, -1, 10723), + (10723, -1, -1, 10722, 10722, 5, 82, 0, 0, 0, 17, 10722, 10724), + (10724, -1, -1, 10722, 10722, 7, 83, 0, 0, 0, 17, 10723, 10725), + (10725, -1, -1, 10722, 10722, 9, 84, 0, 0, 0, 17, 10724, 10726), + (10726, -1, -1, 10722, 10722, 12, 85, 0, 0, 0, 17, 10725, 15280), + (10727, -1, -1, 10727, 10727, 7, 86, 0, 0, 0, 17, -1, 10728), + (10728, -1, -1, 10727, 10727, 9, 88, 0, 0, 0, 17, 10727, 10729), + (10730, -1, -1, 10730, 10730, 7, 86, 0, 0, 0, 17, -1, 10731), + (10731, -1, -1, 10730, 10730, 9, 88, 0, 0, 0, 17, 10730, 10732), + (10733, -1, -1, 10733, 10733, 7, 81, 0, 0, 0, 17, -1, 10734), + (10734, -1, -1, 10733, 10733, 9, 83, 0, 0, 0, 17, 10733, 10735), + (10735, -1, -1, 10733, 10733, 12, 85, 0, 0, 0, 17, 10734, -1), + (10736, 10736, 10736, 10736, 10736, 7, 86, 23632, 5, 180, 17, -1, 10737), + (10737, 10736, 10736, 10736, 10736, 9, 88, 23633, 5, 180, 17, 10736, 10738), + (10739, 645, -1, 645, 645, 12, 86, 23551, 4, 5, 17, 5999, 13410), + (10740, 1345, 1345, 1345, 1345, 9, 86, 23552, 6, 900, 17, 7349, 10741), + (10741, 1345, 1345, 1345, 1345, 12, 88, 23553, 6, 900, 17, 10740, 10742), + (10743, -1, -1, 1196, 1196, 5, 86, -1, 0, 0, 17, 1200, 10744), + (10744, -1, -1, 1196, 1196, 5, 87, -1, 0, 0, 17, 10743, 10745), + (10745, -1, -1, 1196, 1196, 5, 88, -1, 0, 0, 17, 10744, 10746), + (10748, -1, -1, 867, 867, 7, 86, -1, 0, 0, 17, 7366, 10749), + (10749, -1, -1, 867, 867, 7, 87, -1, 0, 0, 17, 10748, 10755), + (10750, -1, -1, 7103, 7103, 2, 70, -1, 0, 0, 16, 7328, 10751), + (10751, -1, -1, 7103, 7103, 2, 70, -1, 0, 0, 16, 10750, -1), + (10752, 10752, 10752, 10752, 10752, 6, 85, 16843, 72, 600, 16, -1, -1), + (10753, 10753, 10753, 10753, 10753, 12, 80, 16844, 6, 4320, 16, -1, -1), + (10754, 10754, 10754, 10754, 10754, 2, 70, 16845, 62, 5, 16, -1, -1), + (10755, -1, -1, 867, 867, 7, 88, -1, 0, 0, 17, 10749, 10756), + (10758, 545, 545, 545, 545, 12, 86, 23638, 3, 900, 17, 7346, 10759), + (10759, 545, 545, 545, 545, 12, 87, 23639, 3, 900, 17, 10758, 10760), + (10760, 545, 545, 545, 545, 12, 88, 23640, 3, 900, 17, 10759, 10761), + (10763, -1, -1, 6761, 6761, 12, 86, -1, 0, 0, 17, 6087, 10764), + (10764, -1, -1, 6761, 6761, 12, 88, -1, 0, 0, 17, 10763, 10765), + (10766, -1, -1, 6765, 6765, 9, 85, -1, 0, 0, 17, 10060, 10767), + (10767, -1, -1, 6765, 6765, 9, 87, -1, 0, 0, 17, 10766, 10768), + (10768, -1, -1, 6765, 6765, 9, 89, -1, 0, 0, 17, 10767, 13553), + (10769, -1, -1, 6751, 6751, 9, 86, -1, 0, 0, 17, 6769, 10770), + (10770, -1, -1, 6751, 6751, 9, 88, -1, 0, 0, 17, 10769, 10771), + (10772, 872, 872, 872, 872, 9, 85, 23555, 5, 180, 17, 7369, 10773), + (10773, 872, 872, 872, 872, 9, 87, 23556, 5, 180, 17, 10772, 10774), + (10774, 872, 872, 872, 872, 9, 89, 23557, 5, 180, 17, 10773, -1), + (10775, 875, 875, 875, 875, 9, 85, 23561, 5, 180, 17, 7372, 10776), + (10776, 875, 875, 875, 875, 9, 87, 23562, 5, 180, 17, 10775, 10777), + (10777, 875, 875, 875, 875, 9, 89, 23563, 5, 180, 17, 10776, 13536), + (10778, -1, -1, 634, 634, 12, 85, -1, 0, 0, 17, 7714, 10779), + (10779, -1, -1, 634, 634, 12, 87, -1, 0, 0, 17, 10778, 10780), + (10780, -1, -1, 634, 634, 12, 89, -1, 0, 0, 17, 10779, 15585), + (10781, -1, -1, 8240, 8240, 9, 85, -1, 0, 0, 17, 8244, 10782), + (10782, -1, -1, 8240, 8240, 9, 86, -1, 0, 0, 17, 10781, 10783), + (10783, -1, -1, 8240, 8240, 9, 87, -1, 0, 0, 17, 10782, 10784), + (10784, -1, -1, 8240, 8240, 9, 88, -1, 0, 0, 17, 10783, 10785), + (10785, -1, -1, 8240, 8240, 9, 89, -1, 0, 0, 17, 10784, 13343), + (10786, 7800, 7800, 7800, 7800, 12, 85, 23567, 39, 4320, 17, 7817, 10787), + (10787, 7800, 7800, 7800, 7800, 12, 87, 23568, 39, 4320, 17, 10786, 13619), + (10788, -1, -1, 4699, 4699, 7, 65, -1, 0, 0, 17, 7500, -1), + (10789, 10789, 10789, 10789, 10789, 15, 90, 23575, 41, 6, 17, -1, 14261), + (10790, 10396, 10396, 10396, 10396, 15, 90, 23576, 14, 600, 17, 10396, 14024), + (10791, 10397, 10397, 10397, 10397, 15, 90, 23577, 14, 600, 17, 10397, 14025), + (10792, -1, -1, 10792, 10792, 5, 86, 0, 0, 0, 17, -1, 10793), + (10793, -1, -1, 10792, 10792, 7, 87, 0, 0, 0, 17, 10792, 10794), + (10794, -1, -1, 10792, 10792, 9, 88, 0, 0, 0, 17, 10793, 10795), + (10795, -1, -1, 10792, 10792, 11, 89, 0, 0, 0, 17, 10794, 10796), + (10796, -1, -1, 10792, 10792, 13, 90, 0, 0, 0, 17, 10795, 17365), + (10800, -1, -1, 10800, 10800, 6, 70, -1, 0, 0, 16, -1, 10801), + (10801, -1, -1, 10800, 10800, 9, 70, -1, 0, 0, 16, 10800, 10802), + (10802, -1, -1, 10800, 10800, 12, 70, -1, 0, 0, 16, 10801, 17476), + (10803, -1, -1, 10803, 10803, 6, 76, -1, 0, 0, 16, -1, 10804), + (10804, -1, -1, 10803, 10803, 6, 78, -1, 0, 0, 16, 10803, 10805), + (10805, -1, -1, 10803, 10803, 6, 80, -1, 0, 0, 16, 10804, -1), + (10806, 10806, 10806, 10806, 10806, 10, 80, 16846, 71, 540, 16, -1, 10807), + (10807, 10806, 10806, 10806, 10806, 11, 80, 16847, 71, 540, 16, 10806, 10808), + (10808, 10806, 10806, 10806, 10806, 12, 80, 16848, 71, 540, 16, 10807, 15298), + (10809, 10809, 10809, 10809, 10809, 10, 80, 16849, 71, 540, 16, -1, 10810), + (10810, 10809, 10809, 10809, 10809, 11, 80, 16850, 71, 540, 16, 10809, 10811), + (10811, 10809, 10809, 10809, 10809, 12, 80, 16851, 71, 540, 16, 10810, 15301), + (10815, 10815, 10815, 10815, 10815, 6, 80, -1, 0, 0, 16, -1, 10816), + (10816, 10815, 10815, 10815, 10815, 9, 80, -1, 0, 0, 16, 10815, 10817), + (10817, 10815, 10815, 10815, 10815, 12, 80, -1, 0, 0, 16, 10816, 13110), + (10818, 10818, 10818, 10818, 10818, 6, 80, -1, 0, 0, 16, -1, 10819), + (10819, 10818, 10818, 10818, 10818, 9, 80, -1, 0, 0, 16, 10818, 10820), + (10820, 10818, 10818, 10818, 10818, 12, 80, -1, 0, 0, 16, 10819, 13113), + (10821, 10821, 10821, 10821, 10821, 6, 80, -1, 0, 0, 16, -1, 10822), + (10822, 10821, 10821, 10821, 10821, 9, 80, -1, 0, 0, 16, 10821, 10823), + (10823, 10821, 10821, 10821, 10821, 12, 80, -1, 0, 0, 16, 10822, 13116), + (10824, 510, 510, 510, 510, 6, 86, 23578, 37, 240, 17, 10104, 10825), + (10850, -1, -1, 10850, 10850, 6, 85, 16864, 0, 0, 16, -1, 10851), + (10851, -1, -1, 10850, 10850, 6, 85, 16865, 0, 0, 16, 10850, 10852), + (10852, -1, -1, 10850, 10850, 6, 85, 16866, 0, 0, 16, 10851, 13207), + (10853, -1, -1, 10853, 10853, 3, 65, -1, 0, 0, 16, -1, 10854), + (10854, -1, -1, 10853, 10853, 6, 65, -1, 0, 0, 16, 10853, 10855), + (10855, -1, -1, 10853, 10853, 9, 65, -1, 0, 0, 16, 10854, 10856), + (10856, -1, -1, 10853, 10853, 5, 66, -1, 0, 0, 16, 10855, 10857), + (10857, -1, -1, 10853, 10853, 5, 68, -1, 0, 0, 16, 10856, 10858), + (10858, -1, -1, 10853, 10853, 5, 70, -1, 0, 0, 16, 10857, 10859), + (10859, -1, -1, 10853, 10853, 5, 76, -1, 0, 0, 16, 10858, 10860), + (10860, -1, -1, 10853, 10853, 5, 78, -1, 0, 0, 16, 10859, 10861), + (10861, -1, -1, 10853, 10853, 5, 80, -1, 0, 0, 16, 10860, 10862), + (10862, -1, -1, 10853, 10853, 5, 81, -1, 0, 0, 16, 10861, 10863), + (10863, -1, -1, 10853, 10853, 5, 83, -1, 0, 0, 16, 10862, 10864), + (10864, -1, -1, 10853, 10853, 5, 85, -1, 0, 0, 16, 10863, 15954), + (10865, -1, -1, 1304, 1304, 12, 85, -1, 0, 0, 16, 7150, 10866), + (10866, -1, -1, 1304, 1304, 12, 85, -1, 0, 0, 16, 10865, 10867), + (10867, -1, -1, 1304, 1304, 12, 85, -1, 0, 0, 16, 10866, 13218), + (10868, 5021, 5021, 5021, 5021, 9, 76, 16867, 7, 60, 16, 5021, 10869), + (10869, 5021, 5021, 5021, 5021, 9, 81, 16868, 7, 60, 16, 10868, 10870), + (10870, 5021, 5021, 5021, 5021, 9, 85, 16869, 7, 60, 16, 10869, 12618), + (10900, 10900, 10900, 10900, 10900, 9, 85, 16870, 55, 120, 16, -1, 10901), + (10901, 10900, 10900, 10900, 10900, 9, 85, 16871, 55, 120, 16, 10900, 10902), + (10902, 10900, 10900, 10900, 10900, 9, 85, 16872, 55, 120, 16, 10901, 13624), + (10903, -1, -1, 10903, 10903, 6, 81, -1, 0, 0, 16, -1, 10904), + (10904, -1, -1, 10903, 10903, 6, 83, -1, 0, 0, 16, 10903, 10905), + (10905, -1, -1, 10903, 10903, 6, 85, -1, 0, 0, 16, 10904, -1), + (10906, -1, -1, 895, 895, 12, 85, -1, 0, 0, 16, 7406, 10907), + (10907, -1, -1, 895, 895, 12, 85, -1, 0, 0, 16, 10906, 10908), + (10908, -1, -1, 895, 895, 12, 85, -1, 0, 0, 16, 10907, 13627), + (10909, -1, -1, 10909, 10909, 6, 85, -1, 0, 0, 16, -1, 10910), + (10910, -1, -1, 10909, 10909, 6, 85, -1, 0, 0, 16, 10909, 10911), + (10911, -1, -1, 10909, 10909, 6, 85, -1, 0, 0, 16, 10910, -1), + (10912, 10912, 10912, 10912, 10912, 6, 85, 16873, 69, 1800, 16, -1, 10913), + (10913, 10912, 10912, 10912, 10912, 6, 85, 16874, 69, 1800, 16, 10912, 10914), + (10914, 10912, 10912, 10912, 10912, 6, 85, 16875, 69, 1800, 16, 10913, 14053), + (10915, -1, -1, 10915, 10915, 9, 85, -1, 0, 0, 16, -1, 10916), + (10916, -1, -1, 10915, 10915, 9, 85, -1, 0, 0, 16, 10915, 10917), + (10917, -1, -1, 10915, 10915, 9, 85, -1, 0, 0, 16, 10916, 16189), + (10950, -1, -1, 10950, 10950, 6, 85, -1, 0, 0, 16, -1, -1), + (10951, -1, -1, 10951, 10951, 12, 85, -1, 0, 0, 16, -1, 10952), + (10952, -1, -1, 10951, 10951, 12, 85, -1, 0, 0, 16, 10951, 10953), + (10953, -1, -1, 10951, 10951, 12, 85, -1, 0, 0, 16, 10952, 15363), + (10954, -1, -1, 10954, 10954, 12, 85, -1, 0, 0, 16, -1, 10955), + (10955, -1, -1, 10954, 10954, 12, 85, -1, 0, 0, 16, 10954, 10956), + (10956, -1, -1, 10954, 10954, 12, 85, -1, 0, 0, 16, 10955, -1), + (10957, 10957, 10957, 10957, 10957, 6, 85, 16879, 61, 5, 16, -1, -1), + (10958, 10958, 10958, 10958, 10958, 12, 85, 16880, 62, 900, 16, -1, 13000), + (10959, 10959, 10959, 10959, 10959, 12, 85, 16881, 63, 600, 16, -1, 10961), + (10961, 10959, 10959, 10959, 10959, 12, 85, 21717, 63, 600, 16, 10959, 10962), + (10962, 10959, 10959, 10959, 10959, 12, 85, 21718, 63, 600, 16, 10961, 12988), + (11000, -1, -1, 11000, 11000, 6, 85, -1, 0, 0, 16, -1, 11001), + (11001, -1, -1, 11000, 11000, 9, 85, -1, 0, 0, 16, 11000, 11002), + (11002, -1, -1, 11000, 11000, 12, 85, -1, 0, 0, 16, 11001, -1), + (11003, -1, -1, 11003, 11003, 6, 85, -1, 0, 0, 16, -1, -1), + (11004, -1, -1, 11004, 11004, 6, 85, -1, 0, 0, 16, -1, 11005), + (11005, -1, -1, 11004, 11004, 6, 85, -1, 0, 0, 16, 11004, 11006), + (11006, -1, -1, 11004, 11004, 6, 85, -1, 0, 0, 16, 11005, -1), + (11011, -1, -1, 6302, 6302, 5, 85, 0, 0, 0, 16, 6304, 11012), + (11012, -1, -1, 6302, 6302, 5, 85, 0, 0, 0, 16, 11011, 11013), + (11013, -1, -1, 6302, 6302, 5, 85, 0, 0, 0, 16, 11012, 15552), + (11014, -1, -1, 11007, 11007, 5, 80, -1, 0, 0, 16, -1, 11015), + (11015, -1, -1, 11007, 11007, 7, 82, -1, 0, 0, 16, 11014, 11016), + (11016, -1, -1, 11007, 11007, 9, 85, -1, 0, 0, 16, 11015, 11020), + (11020, -1, -1, 11007, 11007, 12, 86, -1, 0, 0, 17, 11016, -1), + (11050, -1, -1, 11050, 11050, 6, 85, -1, 0, 0, 16, -1, 11051), + (11051, -1, -1, 11050, 11050, 6, 85, -1, 0, 0, 16, 11050, 11052), + (11052, -1, -1, 11050, 11050, 6, 85, -1, 0, 0, 16, 11051, 11059), + (11053, -1, -1, 6349, 6349, 6, 83, -1, 0, 0, 16, 7620, 11054), + (11054, -1, -1, 6349, 6349, 6, 83, -1, 0, 0, 16, 11053, -1), + (11055, 11055, 11055, 11055, 11055, 3, 85, 16884, 63, 20, 16, -1, -1), + (11056, 11056, 11056, 11056, 11056, 6, 85, 16885, 64, 180, 16, -1, -1), + (11057, 11057, 11057, 11057, 11057, 2, 85, 1422, 65, 10, 16, -1, -1), + (11058, 11058, 11058, 11058, 11058, 2, 85, 3243, 66, 10, 16, -1, -1), + (11059, -1, -1, 11050, 11050, 6, 85, -1, 0, 0, 16, 11052, 11060), + (11060, -1, -1, 11050, 11050, 6, 85, -1, 0, 0, 16, 11059, 12871), + (11061, -1, -1, 98, 98, 12, 85, -1, 0, 0, 16, 7586, 11062), + (11062, -1, -1, 98, 98, 12, 85, -1, 0, 0, 16, 11061, 11063), + (11063, -1, -1, 98, 98, 12, 85, -1, 0, 0, 16, 11062, 13921), + (11064, 6290, 6290, 6290, 6290, 7, 85, 23500, 0, 1, 16, 7225, 11065), + (11065, 6290, 6290, 6290, 6290, 9, 85, 23501, 0, 1, 16, 11064, 11066), + (11066, 6290, 6290, 6290, 6290, 12, 85, 23502, 0, 1, 16, 11065, 13229), + (11067, 4944, -1, 4944, 4944, 7, 85, 23506, 0, 1, 16, 7231, 11068), + (11068, 4944, -1, 4944, 4944, 9, 85, 23507, 0, 1, 16, 11067, 11069), + (11069, 4944, -1, 4944, 4944, 12, 85, 23508, 0, 1, 16, 11068, 13232), + (11070, 1478, -1, 1478, 1478, 9, 85, 23512, 0, 1, 16, 7244, 11071), + (11071, 1478, -1, 1478, 1478, 10, 85, 23513, 0, 1, 16, 11070, 11072), + (11072, 1478, -1, 1478, 1478, 12, 85, 23514, 0, 1, 16, 11071, 13235), + (11073, 11073, 11073, 11073, 11073, 12, 85, 23518, 53, 30, 16, -1, 13447), + (11074, -1, -1, 11074, 11074, 5, 81, 0, 0, 0, 16, -1, 11075), + (11075, -1, -1, 11074, 11074, 7, 83, 0, 0, 0, 16, 11074, 11076), + (11076, -1, -1, 11074, 11074, 9, 85, 0, 0, 0, 16, 11075, -1), + (11077, -1, -1, 11077, 11077, 5, 81, 0, 0, 0, 16, -1, 15895), + (11078, -1, -1, 11078, 11078, 5, 81, 0, 0, 0, 16, -1, 15891), + (11079, -1, -1, 11079, 11079, 5, 81, 0, 0, 0, 16, -1, 15893), + (11080, 11080, 11080, 11080, 11080, 7, 85, 23519, 10, 20, 16, -1, 13472), + (11081, 153, 153, 153, 153, 12, 85, 23599, 3, 2160, 16, 10193, 12996), + (11082, -1, -1, 1131, 1131, 6, 81, -1, 0, 0, 16, 1133, 11083), + (11083, -1, -1, 1131, 1131, 9, 83, -1, 0, 0, 16, 11082, 11084), + (11084, -1, -1, 1131, 1131, 12, 85, -1, 0, 0, 16, 11083, 13032), + (11085, -1, -1, 11085, 11085, 7, 85, 0, 0, 0, 16, -1, 11086), + (11086, -1, -1, 11085, 11085, 9, 85, 0, 0, 0, 16, 11085, 11087), + (11087, -1, -1, 11085, 11085, 12, 85, 0, 0, 0, 16, 11086, 13021), + (11088, -1, -1, 11088, 11088, 6, 75, 0, 0, 0, 16, -1, 11089), + (11089, -1, -1, 11088, 11088, 6, 75, 0, 0, 0, 16, 11088, 11090), + (11090, -1, -1, 11088, 11088, 6, 75, 0, 0, 0, 16, 11089, 11091), + (11091, -1, -1, 11088, 11088, 6, 75, 0, 0, 0, 16, 11090, -1), + (12396, -1, -1, 125, 125, 8, 85, -1, 0, 0, 16, 7505, 12397), + (12397, -1, -1, 125, 125, 9, 85, -1, 0, 0, 16, 12396, 12398), + (12398, -1, -1, 125, 125, 10, 85, -1, 0, 0, 16, 12397, 12399), + (12399, -1, -1, 125, 125, 11, 85, -1, 0, 0, 16, 12398, 12400), + (12400, -1, -1, 125, 125, 12, 85, -1, 0, 0, 16, 12399, 13080), + (12401, -1, -1, 122, 122, 8, 85, -1, 0, 0, 16, 7510, 12402), + (12402, -1, -1, 122, 122, 9, 85, -1, 0, 0, 16, 12401, 12403), + (12403, -1, -1, 122, 122, 10, 85, -1, 0, 0, 16, 12402, 12404), + (12404, -1, -1, 122, 122, 11, 85, -1, 0, 0, 16, 12403, 12405), + (12405, -1, -1, 122, 122, 12, 85, -1, 0, 0, 16, 12404, 13085), + (12406, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 16, 7530, 12407), + (12407, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 16, 12406, 12408), + (12408, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 16, 12407, 12409), + (12409, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 16, 12408, 12410), + (12410, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 16, 12409, 12492), + (12411, -1, -1, 8255, 8255, 6, 85, -1, 0, 0, 16, 8259, 12412), + (12412, -1, -1, 8255, 8255, 6, 85, -1, 0, 0, 16, 12411, 12413), + (12413, -1, -1, 8255, 8255, 6, 85, -1, 0, 0, 16, 12412, 12414), + (12414, -1, -1, 8255, 8255, 6, 85, -1, 0, 0, 16, 12413, 12415), + (12415, -1, -1, 8255, 8255, 6, 85, -1, 0, 0, 16, 12414, 13358), + (12416, -1, -1, 12416, 12416, 7, 83, -1, 0, 0, 16, -1, 12417), + (12417, -1, -1, 12416, 12416, 9, 84, -1, 0, 0, 16, 12416, 12418), + (12418, -1, -1, 12416, 12416, 12, 85, -1, 0, 0, 16, 12417, 13413), + (12419, -1, -1, 12419, 12419, 5, 83, -1, 0, 0, 16, -1, 12420), + (12420, -1, -1, 12419, 12419, 5, 84, -1, 0, 0, 16, 12419, 12421), + (12421, -1, -1, 12419, 12419, 5, 85, -1, 0, 0, 16, 12420, 12575), + (12422, 12422, 12422, 12422, 12422, 12, 85, 13994, 47, 12, 16, -1, -1), + (12423, -1, -1, 767, 767, 9, 81, -1, 0, 0, 16, 1101, 12424), + (12424, -1, -1, 767, 767, 10, 83, -1, 0, 0, 16, 12423, 12425), + (12425, -1, -1, 767, 767, 12, 85, -1, 0, 0, 16, 12424, -1), + (12426, -1, -1, 767, 767, 3, 81, -1, 0, 0, 16, 6245, 12427), + (12427, -1, -1, 767, 767, 6, 83, -1, 0, 0, 16, 12426, 12428), + (12428, -1, -1, 767, 767, 9, 85, -1, 0, 0, 16, 12427, -1), + (12432, -1, -1, 1107, 1107, 10, 81, -1, 0, 0, 16, 6405, 12433), + (12433, -1, -1, 1107, 1107, 11, 83, -1, 0, 0, 16, 12432, 12434), + (12434, -1, -1, 1107, 1107, 12, 85, -1, 0, 0, 16, 12433, 12556), + (12435, -1, -1, 637, 637, 8, 81, -1, 0, 0, 16, 5573, 12436), + (12436, -1, -1, 637, 637, 10, 83, -1, 0, 0, 16, 12435, 12437), + (12437, -1, -1, 637, 637, 12, 85, -1, 0, 0, 16, 12436, 12553), + (12438, -1, -1, 686, 686, 5, 85, -1, 0, 0, 16, 7640, -1), + (12439, -1, -1, 1592, 1592, 9, 85, -1, 0, 0, 16, 7572, 12440), + (12440, -1, -1, 1592, 1592, 10, 85, -1, 0, 0, 16, 12439, 12441), + (12441, -1, -1, 1592, 1592, 11, 85, -1, 0, 0, 16, 12440, 12442), + (12442, -1, -1, 1592, 1592, 12, 85, -1, 0, 0, 16, 12441, 12443), + (12443, -1, -1, 1592, 1592, 12, 85, -1, 0, 0, 16, 12442, 12532), + (12444, -1, -1, 1072, 1072, 8, 85, -1, 0, 0, 16, 7580, 12445), + (12445, -1, -1, 1072, 1072, 9, 85, -1, 0, 0, 16, 12444, 12446), + (12446, -1, -1, 1072, 1072, 10, 85, -1, 0, 0, 16, 12445, 12447), + (12447, -1, -1, 1072, 1072, 11, 85, -1, 0, 0, 16, 12446, 12448), + (12448, -1, -1, 1072, 1072, 12, 85, -1, 0, 0, 16, 12447, 12537), + (12449, -1, -1, 77, 77, 10, 81, -1, 0, 0, 16, 1085, 12450), + (12450, -1, -1, 77, 77, 11, 83, -1, 0, 0, 16, 12449, 12451), + (12451, -1, -1, 77, 77, 12, 85, -1, 0, 0, 16, 12450, 12497), + (12452, -1, -1, 80, 80, 12, 85, -1, 0, 0, 16, 7592, 12453), + (12453, -1, -1, 80, 80, 12, 85, -1, 0, 0, 16, 12452, 12454), + (12454, -1, -1, 80, 80, 12, 85, -1, 0, 0, 16, 12453, 12567), + (12455, -1, -1, 658, 658, 5, 85, -1, 0, 0, 16, 7597, 12456), + (12456, -1, -1, 658, 658, 5, 85, -1, 0, 0, 16, 12455, 12457), + (12457, -1, -1, 658, 658, 5, 85, -1, 0, 0, 16, 12456, 12458), + (12458, -1, -1, 658, 658, 5, 85, -1, 0, 0, 16, 12457, 12459), + (12459, -1, -1, 658, 658, 5, 85, -1, 0, 0, 16, 12458, 12570), + (12460, 6537, 6537, 6537, 6537, 7, 83, 20172, 30, 900, 16, 7608, 12461), + (12461, 6537, 6537, 6537, 6537, 8, 83, 20173, 30, 900, 16, 12460, 12462), + (12462, 6537, 6537, 6537, 6537, 9, 83, 20174, 30, 900, 16, 12461, 12520), + (12463, -1, -1, 5263, 5263, 7, 81, -1, 0, 0, 16, 6129, 12464), + (12464, -1, -1, 5263, 5263, 8, 81, -1, 0, 0, 16, 12463, 12465), + (12465, -1, -1, 5263, 5263, 9, 81, -1, 0, 0, 16, 12464, 16173), + (12466, -1, -1, 5263, 5263, 7, 81, -1, 0, 0, 16, 5622, 12467), + (12467, -1, -1, 5263, 5263, 9, 81, -1, 0, 0, 16, 12466, 12468), + (12468, -1, -1, 5263, 5263, 12, 81, -1, 0, 0, 16, 12467, 15714), + (12469, -1, -1, 1287, 1287, 7, 81, -1, 0, 0, 16, 5518, 12470), + (12470, -1, -1, 1287, 1287, 9, 81, -1, 0, 0, 16, 12469, 12471), + (12471, -1, -1, 1287, 1287, 12, 81, -1, 0, 0, 16, 12470, 10637), + (12472, -1, -1, 1287, 1287, 8, 81, -1, 0, 0, 16, 6430, 12473), + (12473, -1, -1, 1287, 1287, 9, 81, -1, 0, 0, 16, 12472, 12474), + (12474, -1, -1, 1287, 1287, 10, 81, -1, 0, 0, 16, 12473, 13238), + (12475, -1, -1, 12430, 12430, 5, 85, 0, 0, 0, 16, -1, 12476), + (12476, -1, -1, 12430, 12430, 7, 85, 0, 0, 0, 16, 12475, 12477), + (12477, -1, -1, 12430, 12430, 9, 85, 0, 0, 0, 16, 12476, 12876), + (12478, -1, -1, 12478, 12478, 5, 85, 0, 0, 0, 16, -1, 12479), + (12479, -1, -1, 12478, 12478, 7, 85, 0, 0, 0, 16, 12478, 12480), + (12480, -1, -1, 12478, 12478, 9, 85, 0, 0, 0, 16, 12479, -1), + (12481, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 6473, 12482), + (12482, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 12481, 12508), + (12483, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 6475, 12484), + (12484, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 12483, 12511), + (12485, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 6477, 12486), + (12486, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 12485, 12514), + (12487, -1, -1, 6540, 6540, 8, 83, -1, 0, 0, 16, 6471, 12488), + (12488, -1, -1, 6540, 6540, 8, 85, -1, 0, 0, 16, 12487, 12517), + (12492, -1, -1, 6119, 6119, 6, 85, -1, 0, 0, 17, 12410, 12493), + (12493, -1, -1, 6119, 6119, 6, 86, -1, 0, 0, 17, 12492, 12494), + (12494, -1, -1, 6119, 6119, 6, 87, -1, 0, 0, 17, 12493, 12495), + (12495, -1, -1, 6119, 6119, 6, 88, -1, 0, 0, 17, 12494, 12496), + (12496, -1, -1, 6119, 6119, 6, 89, -1, 0, 0, 17, 12495, 8448), + (12497, -1, -1, 77, 77, 12, 86, -1, 0, 0, 17, 12451, 12498), + (12498, -1, -1, 77, 77, 12, 88, -1, 0, 0, 17, 12497, 12499), + (12499, -1, -1, 77, 77, 12, 90, -1, 0, 0, 17, 12498, 13296), + (12500, -1, -1, 12500, 12500, 5, 81, -1, 0, 0, 16, -1, 12501), + (12501, -1, -1, 12500, 12500, 7, 81, -1, 0, 0, 16, 12500, 12502), + (12502, -1, -1, 12500, 12500, 9, 81, -1, 0, 0, 16, 12501, 12505), + (12505, -1, -1, 12500, 12500, 11, 83, -1, 0, 0, 16, 12502, 12506), + (12506, -1, -1, 12500, 12500, 12, 85, -1, 0, 0, 16, 12505, -1), + (12507, -1, -1, 199, 199, 12, 81, -1, 0, 0, 16, 201, -1), + (12508, -1, -1, 6540, 6540, 8, 86, -1, 0, 0, 17, 12482, 12509), + (12509, -1, -1, 6540, 6540, 8, 88, -1, 0, 0, 17, 12508, 12510), + (12510, -1, -1, 6540, 6540, 8, 90, -1, 0, 0, 17, 12509, 16440), + (12511, -1, -1, 6540, 6540, 8, 86, -1, 0, 0, 17, 12484, 12512), + (12512, -1, -1, 6540, 6540, 8, 88, -1, 0, 0, 17, 12511, 12513), + (12513, -1, -1, 6540, 6540, 8, 90, -1, 0, 0, 17, 12512, 12591), + (12514, -1, -1, 6540, 6540, 8, 86, -1, 0, 0, 17, 12486, 12515), + (12515, -1, -1, 6540, 6540, 8, 88, -1, 0, 0, 17, 12514, 12516), + (12516, -1, -1, 6540, 6540, 8, 90, -1, 0, 0, 17, 12515, 12594), + (12517, -1, -1, 6540, 6540, 8, 86, -1, 0, 0, 17, 12488, 12518), + (12518, -1, -1, 6540, 6540, 8, 88, -1, 0, 0, 17, 12517, 12519), + (12519, -1, -1, 6540, 6540, 8, 90, -1, 0, 0, 17, 12518, 12597), + (12520, 6537, 6537, 6537, 6537, 7, 86, 23974, 30, 900, 17, 12462, 12521), + (12521, 6537, 6537, 6537, 6537, 8, 88, 23975, 30, 900, 17, 12520, 12522), + (12522, 6537, 6537, 6537, 6537, 9, 90, 23976, 30, 900, 17, 12521, 13275), + (12523, -1, -1, 1210, 1210, 7, 86, -1, 0, 0, 17, 7234, 12524), + (12526, -1, -1, 1210, 1213, 12, 86, -1, 0, 0, 17, 8346, 12527), + (12527, -1, -1, 1210, 1213, 12, 88, -1, 0, 0, 17, 12526, 12528), + (12528, -1, -1, 1210, 1213, 12, 90, -1, 0, 0, 17, 12527, 14349), + (12529, -1, -1, 6636, 6636, 9, 86, -1, 0, 0, 17, 10043, 12530), + (12530, -1, -1, 6636, 6636, 10, 88, -1, 0, 0, 17, 12529, 12531), + (12531, -1, -1, 6636, 6636, 11, 90, -1, 0, 0, 17, 12530, 16164), + (12532, -1, -1, 1592, 1592, 9, 86, -1, 0, 0, 17, 12443, 12533), + (12533, -1, -1, 1592, 1592, 10, 87, -1, 0, 0, 17, 12532, 12534), + (12534, -1, -1, 1592, 1592, 11, 88, -1, 0, 0, 17, 12533, 12535), + (12535, -1, -1, 1592, 1592, 12, 89, -1, 0, 0, 17, 12534, 12536), + (12536, -1, -1, 1592, 1592, 12, 90, -1, 0, 0, 17, 12535, 13930), + (12537, -1, -1, 1072, 1072, 8, 86, -1, 0, 0, 17, 12448, 12538), + (12538, -1, -1, 1072, 1072, 9, 87, -1, 0, 0, 17, 12537, 12539), + (12539, -1, -1, 1072, 1072, 10, 88, -1, 0, 0, 17, 12538, 12540), + (12540, -1, -1, 1072, 1072, 11, 89, -1, 0, 0, 17, 12539, 12541), + (12541, -1, -1, 1072, 1072, 12, 90, -1, 0, 0, 17, 12540, 13281), + (12548, -1, -1, 119, 119, 12, 86, -1, 0, 0, 17, 6025, 12549), + (12549, -1, -1, 119, 119, 12, 87, -1, 0, 0, 17, 12548, 12550), + (12550, -1, -1, 119, 119, 12, 88, -1, 0, 0, 17, 12549, 12551), + (12551, -1, -1, 119, 119, 12, 89, -1, 0, 0, 17, 12550, 12552), + (12552, -1, -1, 119, 119, 12, 90, -1, 0, 0, 17, 12551, 13286), + (12553, -1, -1, 637, 637, 8, 86, -1, 0, 0, 17, 12437, 12554), + (12554, -1, -1, 637, 637, 10, 88, -1, 0, 0, 17, 12553, 12555), + (12555, -1, -1, 637, 637, 12, 90, -1, 0, 0, 17, 12554, 14361), + (12556, -1, -1, 1107, 1107, 10, 86, -1, 0, 0, 17, 12434, 12557), + (12557, -1, -1, 1107, 1107, 11, 88, -1, 0, 0, 17, 12556, 12558), + (12558, -1, -1, 1107, 1107, 12, 90, -1, 0, 0, 17, 12557, 16489), + (12559, -1, -1, 8215, 8215, 5, 86, -1, 0, 0, 17, 8219, 12560), + (12560, -1, -1, 8215, 8215, 5, 87, -1, 0, 0, 17, 12559, 12561), + (12561, -1, -1, 8215, 8215, 5, 88, -1, 0, 0, 17, 12560, 12562), + (12562, -1, -1, 8215, 8215, 5, 89, -1, 0, 0, 17, 12561, 12563), + (12563, -1, -1, 8215, 8215, 5, 90, -1, 0, 0, 17, 12562, 15694), + (12564, -1, -1, 1186, 1186, 12, 86, -1, 0, 0, 17, 7694, 12565), + (12565, -1, -1, 1186, 1186, 12, 88, -1, 0, 0, 17, 12564, 12566), + (12566, -1, -1, 1186, 1186, 12, 90, -1, 0, 0, 17, 12565, 13299), + (12567, -1, -1, 80, 80, 12, 86, -1, 0, 0, 17, 12454, 12568), + (12568, -1, -1, 80, 80, 12, 88, -1, 0, 0, 17, 12567, 12569), + (12569, -1, -1, 80, 80, 12, 90, -1, 0, 0, 17, 12568, 13302), + (12570, -1, -1, 658, 658, 5, 86, -1, 0, 0, 17, 12459, 12571), + (12571, -1, -1, 658, 658, 5, 87, -1, 0, 0, 17, 12570, 12572), + (12572, -1, -1, 658, 658, 5, 88, -1, 0, 0, 17, 12571, 12573), + (12573, -1, -1, 658, 658, 5, 89, -1, 0, 0, 17, 12572, 12574), + (12574, -1, -1, 658, 658, 5, 90, -1, 0, 0, 17, 12573, 13313), + (12575, -1, -1, 12419, 12419, 9, 90, -1, 0, 0, 17, 12421, 13520), + (12576, -1, -1, 852, 852, 12, 86, -1, 0, 0, 17, 7680, 12577), + (12577, -1, -1, 852, 852, 12, 88, -1, 0, 0, 17, 12576, 12578), + (12578, -1, -1, 852, 852, 12, 90, -1, 0, 0, 17, 12577, 13601), + (12579, -1, -1, 1313, 1313, 12, 86, -1, 0, 0, 17, 10083, 12580), + (12580, -1, -1, 1313, 1313, 12, 88, -1, 0, 0, 17, 12579, 12581), + (12581, -1, -1, 1313, 1313, 12, 90, -1, 0, 0, 17, 12580, 14043), + (12582, -1, -1, 12582, 12582, 7, 85, 0, 0, 0, 17, -1, 12583), + (12583, -1, -1, 12582, 12582, 9, 87, 0, 0, 0, 17, 12582, 12584), + (12584, -1, -1, 12582, 12582, 12, 89, 0, 0, 0, 17, 12583, 15174), + (12585, 6640, 6640, 6640, 6640, 9, 86, 23572, 43, 60, 17, 6640, -1), + (12586, 6644, 6644, 6644, 6644, 2, 86, 23573, 44, 20, 17, 6644, -1), + (12587, -1, -1, 7757, 7757, 9, 86, -1, 0, 0, 17, 7759, 12588), + (12588, -1, -1, 7757, 7757, 9, 88, -1, 0, 0, 17, 12587, 12589), + (12589, -1, -1, 7757, 7757, 9, 90, -1, 0, 0, 17, 12588, 15182), + (12590, 10395, 10395, 10395, 10395, 5, 85, 23574, 62, 5, 17, 10395, -1), + (12591, -1, -1, 6540, 6540, 15, 91, -1, 0, 0, 18, 12513, 12592), + (12594, -1, -1, 6540, 6540, 11, 91, -1, 0, 0, 18, 12516, 12595), + (12597, -1, -1, 6540, 6540, 9, 91, -1, 0, 0, 18, 12519, 12598), + (12598, -1, -1, 6540, 6540, 11, 93, -1, 0, 0, 18, 12597, 12599), + (12600, -1, -1, 12600, 12600, 7, 85, 0, 0, 0, 17, -1, 13072), + (12603, -1, -1, 12603, 12603, 10, 70, 0, 0, 0, 17, -1, -1), + (12606, -1, -1, 12606, 12606, 6, 85, 0, 0, 0, 17, -1, -1), + (12607, -1, -1, 12607, 12607, 6, 74, 0, 0, 0, 17, -1, 14140), + (12610, -1, -1, 255, 255, 9, 87, -1, 0, 0, 17, 7702, 13773), + (12612, -1, -1, 1604, 1604, 10, 85, -1, 0, 0, 17, 7009, 12613), + (12613, -1, -1, 1604, 1604, 12, 87, -1, 0, 0, 17, 12612, 13095), + (12615, -1, -1, 12615, 12615, 10, 85, 0, 0, 0, 17, -1, 12616), + (12616, -1, -1, 12615, 12615, 12, 87, 0, 0, 0, 17, 12615, 12617), + (12617, -1, -1, 12615, 12615, 14, 89, 0, 0, 0, 17, 12616, 14138), + (12618, 5021, 5021, 5021, 5021, 9, 86, 24009, 7, 60, 17, 10870, 12619), + (12619, 5021, 5021, 5021, 5021, 9, 87, 24010, 7, 60, 17, 12618, 12620), + (12620, 5021, 5021, 5021, 5021, 9, 88, 24011, 7, 60, 17, 12619, 12621), + (12621, 5021, 5021, 5021, 5021, 9, 89, 24012, 7, 60, 17, 12620, 13785), + (12626, 9354, 9354, 9354, 9354, 5, 86, 23996, 40, 600, 17, 9356, -1), + (12629, 9357, 9357, 9357, 9357, 5, 86, 24002, 40, 600, 17, 9359, -1), + (12632, 9360, 9360, 9360, 9360, 5, 86, 24005, 40, 600, 17, 9362, -1), + (12633, 6325, 6325, 6325, 6325, 7, 85, 24008, 18, 600, 17, 6361, 13792), + (12635, 12635, 12635, 12635, 12635, 12, 90, 23643, 12, 5, 17, -1, -1), + (12636, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, -1, 12637), + (12637, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 12636, 8445), + (12638, 12638, 12638, 12638, 12638, 9, 85, 23581, 68, 10, 17, -1, -1), + (12639, -1, -1, 10514, 10514, 6, 86, -1, 0, 0, 17, 10515, 12640), + (12642, -1, -1, 10511, 10511, 6, 86, -1, 0, 0, 17, 10513, 12643), + (12645, -1, -1, 12645, 12645, 9, 90, 0, 0, 0, 17, -1, 15386), + (12646, -1, -1, 12646, 12646, 9, 90, 0, 0, 0, 17, -1, 15388), + (12647, 10502, -1, 10502, 10502, 7, 90, 16815, 64, 120, 17, 10502, -1), + (12648, 10503, 10503, 10503, 10503, 9, 86, 23582, 13, 600, 17, 10505, 12649), + (12651, 12651, 12651, 12651, 12651, 15, 90, 23585, 69, 600, 17, -1, 17352), + (12652, -1, -1, 12652, 12652, 9, 86, 0, 0, 0, 17, -1, 12653), + (12653, -1, -1, 12652, 12652, 12, 88, 0, 0, 0, 17, 12652, 12654), + (12654, -1, -1, 12652, 12652, 15, 90, 0, 0, 0, 17, 12653, 13411), + (12655, 12655, 12655, 12655, 12655, 9, 86, 23586, 70, 1800, 17, -1, 12656), + (12658, 757, -1, 757, 757, 12, 86, 23589, 6, 1800, 17, 7413, 12659), + (12661, 12661, 12661, 12661, 12661, 9, 86, 23592, 73, 2700, 17, -1, 12662), + (12664, -1, -1, 12664, 12664, 7, 86, 0, 0, 0, 17, -1, 12665), + (12667, -1, -1, 820, 820, 5, 86, -1, 0, 0, 17, 10662, 12668), + (12668, -1, -1, 820, 820, 5, 88, -1, 0, 0, 17, 12667, 12669), + (12669, -1, -1, 820, 820, 5, 90, -1, 0, 0, 17, 12668, 13820), + (12670, -1, -1, 6020, 6020, 2, 86, -1, 0, 0, 17, 10665, 12671), + (12671, -1, -1, 6020, 6020, 2, 87, -1, 0, 0, 17, 12670, 12672), + (12672, -1, -1, 6020, 6020, 2, 88, -1, 0, 0, 17, 12671, 12692), + (12673, -1, -1, 1546, 1546, 5, 80, -1, 0, 0, 17, 6441, -1), + (12674, -1, -1, 4801, 4801, 6, 86, -1, 0, 0, 17, 10123, 12675), + (12675, -1, -1, 4801, 4801, 6, 88, -1, 0, 0, 17, 12674, 12676), + (12676, -1, -1, 4801, 4801, 6, 90, -1, 0, 0, 17, 12675, -1), + (12677, -1, -1, 230, 230, 6, 90, -1, 0, 0, 17, 541, 16249), + (12678, -1, -1, 10656, 10656, 12, 90, 0, 0, 0, 17, 10656, -1), + (12679, -1, -1, 10657, 10657, 7, 86, 0, 0, 0, 17, 10659, 12680), + (12680, -1, -1, 10657, 10657, 9, 88, 0, 0, 0, 17, 12679, 12681), + (12681, -1, -1, 10657, 10657, 12, 90, 0, 0, 0, 17, 12680, 14154), + (12682, 7872, 7872, 7872, 7872, 6, 86, 23595, 41, 600, 17, 10129, 12683), + (12683, 7872, 7872, 7872, 7872, 6, 88, 23596, 41, 600, 17, 12682, 12684), + (12684, 7872, 7872, 7872, 7872, 6, 90, 23597, 41, 600, 17, 12683, 13838), + (12685, -1, -1, 807, 807, 5, 86, -1, 0, 0, 17, 7630, 12686), + (12686, -1, -1, 807, 807, 5, 88, -1, 0, 0, 17, 12685, 12687), + (12687, -1, -1, 807, 807, 5, 90, -1, 0, 0, 17, 12686, -1), + (12688, -1, -1, 12688, 12688, 12, 90, 0, 0, 0, 17, -1, -1), + (12689, -1, -1, 7884, 7884, 12, 87, -1, 0, 0, 17, 7884, -1), + (12690, -1, -1, 7885, 7885, 12, 86, -1, 0, 0, 17, 7885, -1), + (12691, -1, -1, 12691, 12691, 12, 88, 0, 0, 0, 17, -1, -1), + (12692, -1, -1, 6020, 6020, 2, 89, -1, 0, 0, 17, 12672, 12693), + (12693, -1, -1, 6020, 6020, 2, 90, -1, 0, 0, 17, 12692, 13823), + (12694, -1, -1, 683, 683, 5, 86, -1, 0, 0, 17, 7605, 12695), + (12695, -1, -1, 683, 683, 5, 88, -1, 0, 0, 17, 12694, 12696), + (12696, -1, -1, 683, 683, 5, 90, -1, 0, 0, 17, 12695, 13305), + (12697, -1, -1, 1041, 1041, 12, 86, -1, 0, 0, 17, 7564, 12698), + (12698, -1, -1, 1041, 1041, 12, 88, -1, 0, 0, 17, 12697, 12699), + (12699, -1, -1, 1041, 1041, 12, 90, -1, 0, 0, 17, 12698, 13332), + (12700, 1355, 1355, 1355, 1355, 9, 86, 23644, 3, 60, 17, 10121, 12701), + (12701, 1355, 1355, 1355, 1355, 9, 88, 23645, 3, 60, 17, 12700, 12702), + (12702, 1355, 1355, 1355, 1355, 9, 90, 23646, 3, 60, 17, 12701, 13832), + (12703, -1, -1, 611, 611, 4, 86, -1, 0, 0, 17, 10126, 12704), + (12704, -1, -1, 611, 611, 4, 88, -1, 0, 0, 17, 12703, 12705), + (12705, -1, -1, 611, 611, 4, 90, -1, 0, 0, 17, 12704, 13835), + (12706, -1, -1, 12706, 12706, 7, 86, 0, 0, 0, 17, -1, 12707), + (12707, -1, -1, 12706, 12706, 9, 88, 0, 0, 0, 17, 12706, 12708), + (12708, -1, -1, 12706, 12706, 12, 90, 0, 0, 0, 17, 12707, 13813), + (12709, -1, -1, 12709, 12709, 9, 86, -1, 0, 0, 17, -1, -1), + (12710, -1, -1, 12710, 12710, 9, 86, 0, 0, 0, 17, -1, 12711), + (12711, -1, -1, 12710, 12710, 12, 88, 0, 0, 0, 17, 12710, 12712), + (12712, -1, -1, 12710, 12710, 15, 90, 0, 0, 0, 17, 12711, 14173), + (12713, -1, -1, 12713, 12713, 7, 86, 0, 0, 0, 17, -1, 12714), + (12714, -1, -1, 12713, 12713, 7, 88, 0, 0, 0, 17, 12713, 12715), + (12715, -1, -1, 12713, 12713, 7, 90, 0, 0, 0, 17, 12714, -1), + (12716, -1, -1, 12716, 12716, 7, 86, 0, 0, 0, 17, -1, 12717), + (12717, -1, -1, 12716, 12716, 7, 88, 0, 0, 0, 17, 12716, 12718), + (12718, -1, -1, 12716, 12716, 7, 90, 0, 0, 0, 17, 12717, 15526), + (12719, -1, -1, 12719, 12719, 9, 90, 0, 0, 0, 17, -1, -1), + (12720, -1, -1, 12720, 12720, 9, 86, 0, 0, 0, 17, -1, -1), + (12721, -1, -1, 12721, 12721, 7, 86, 0, 0, 0, 17, -1, 12722), + (12722, -1, -1, 12721, 12721, 9, 88, 0, 0, 0, 17, 12721, 12723), + (12723, -1, -1, 12721, 12721, 12, 90, 0, 0, 0, 17, 12722, 16303), + (12724, 10333, 10333, 10333, 10333, 9, 86, 23647, 55, 120, 17, 10335, 12725), + (12725, 10333, 10333, 10333, 10333, 9, 86, 23648, 55, 120, 17, 12724, 12726), + (12726, 10333, 10333, 10333, 10333, 9, 86, 23649, 55, 120, 17, 12725, 15988), + (12727, -1, -1, 1555, 1555, 7, 86, 0, 0, 0, 17, 1557, 12728), + (12728, -1, -1, 1555, 1555, 7, 88, 0, 0, 0, 17, 12727, 12729), + (12729, -1, -1, 1555, 1555, 7, 90, 0, 0, 0, 17, 12728, -1), + (12730, 10336, 10336, 10336, 10336, 9, 86, 23650, 58, 8, 17, 10338, 12731), + (12731, 10336, 10336, 10336, 10336, 12, 88, 23651, 58, 8, 17, 12730, 12732), + (12732, 10336, 10336, 10336, 10336, 15, 90, 23652, 58, 8, 17, 12731, 13517), + (12733, -1, -1, 10332, 10332, 7, 90, -1, 0, 0, 17, 10332, -1), + (12734, -1, -1, 6375, 6375, 9, 86, -1, 0, 0, 17, 10138, 12735), + (12735, -1, -1, 6375, 6375, 9, 88, -1, 0, 0, 17, 12734, 12736), + (12736, -1, -1, 6375, 6375, 9, 90, -1, 0, 0, 17, 12735, 13502), + (12737, -1, -1, 12737, 12737, 9, 86, 0, 0, 0, 17, -1, 12738), + (12738, -1, -1, 12737, 12737, 9, 88, 0, 0, 0, 17, 12737, 12739), + (12739, -1, -1, 12737, 12737, 9, 90, 0, 0, 0, 17, 12738, 15961), + (12740, 6533, 6533, 6533, 6533, 10, 86, 23653, 15, 600, 17, 10139, 12741), + (12741, 6533, 6533, 6533, 6533, 10, 88, 23654, 15, 600, 17, 12740, 12742), + (12742, 6533, 6533, 6533, 6533, 10, 90, 23655, 15, 600, 17, 12741, 13505), + (12743, 1116, 1116, 1116, 1116, 12, 86, 23656, 4, 2160, 17, 10142, 12744), + (12744, 1116, 1116, 1116, 1116, 12, 88, 23657, 4, 2160, 17, 12743, 12745), + (12745, 1116, 1116, 1116, 1116, 12, 90, 23658, 4, 2160, 17, 12744, 13530), + (12746, 5298, 5298, 5298, 5298, 12, 86, 23659, 32, 1800, 17, 10145, 12747), + (12747, 5298, 5298, 5298, 5298, 12, 88, 23660, 32, 1800, 17, 12746, 12748), + (12748, 5298, 5298, 5298, 5298, 12, 90, 23661, 32, 1800, 17, 12747, 13514), + (12749, 592, 592, 592, 592, 5, 86, 23665, 2, 18, 17, 7437, 12750), + (12750, 592, 592, 592, 592, 5, 88, 23666, 2, 18, 17, 12749, 12751), + (12751, 592, 592, 592, 592, 5, 90, 23667, 2, 18, 17, 12750, 13499), + (12754, 10701, 10701, 10701, 10701, 12, 86, 23668, 32, 360, 17, 10703, 12755), + (12755, 10701, 10701, 10701, 10701, 12, 88, 23669, 32, 360, 17, 12754, 12756), + (12756, 10701, 10701, 10701, 10701, 12, 90, 23670, 32, 360, 17, 12755, 15588), + (12757, -1, -1, 4861, 4861, 12, 86, -1, 0, 0, 17, 7682, 12758), + (12758, -1, -1, 4861, 4861, 12, 88, -1, 0, 0, 17, 12757, 12759), + (12759, -1, -1, 4861, 4861, 12, 90, -1, 0, 0, 17, 12758, -1), + (12760, 1274, 1274, 1274, 1274, 12, 86, 23674, 9, 540, 17, 10211, 12761), + (12761, 1274, 1274, 1274, 1274, 12, 88, 23675, 9, 540, 17, 12760, 12762), + (12762, 1274, 1274, 1274, 1274, 12, 90, 23676, 9, 540, 17, 12761, 14352), + (12766, 12766, 12766, 12766, 12766, 15, 90, 23677, 69, 3600, 17, -1, 13682), + (12767, -1, -1, 692, 692, 12, 86, -1, 0, 0, 17, 7672, 12768), + (12768, -1, -1, 692, 692, 12, 88, -1, 0, 0, 17, 12767, 12769), + (12769, -1, -1, 692, 692, 12, 90, -1, 0, 0, 17, 12768, 17295), + (12770, 12770, 12770, 12770, 12770, 9, 85, 23678, 52, 120, 17, -1, 12771), + (12771, 12770, 12770, 12770, 12770, 12, 87, 23679, 52, 120, 17, 12770, 12772), + (12772, 12770, 12770, 12770, 12770, 15, 89, 23680, 52, 120, 17, 12771, -1), + (12773, -1, -1, 12773, 12773, 7, 86, 0, 0, 0, 17, -1, 12774), + (12774, -1, -1, 12773, 12773, 7, 87, 0, 0, 0, 17, 12773, 12775), + (12775, -1, -1, 12773, 12773, 7, 88, 0, 0, 0, 17, 12774, 12776), + (12776, -1, -1, 12773, 12773, 7, 89, 0, 0, 0, 17, 12775, 12777), + (12777, -1, -1, 12773, 12773, 7, 90, 0, 0, 0, 17, 12776, -1), + (12778, 12778, 12778, 12778, 12778, 12, 90, 23681, 74, 1200, 17, -1, 13678), + (12779, -1, -1, 12779, 12779, 7, 85, 0, 0, 0, 17, -1, 12780), + (12780, -1, -1, 12779, 12779, 9, 87, 0, 0, 0, 17, 12779, 12781), + (12781, -1, -1, 12779, 12779, 12, 89, 0, 0, 0, 17, 12780, -1), + (12782, -1, -1, 12782, 12782, 7, 86, 0, 0, 0, 17, -1, 12783), + (12783, -1, -1, 12782, 12782, 9, 88, 0, 0, 0, 17, 12782, 12784), + (12784, -1, -1, 12782, 12782, 12, 90, 0, 0, 0, 17, 12783, -1), + (12785, 12785, 12785, 12785, 12785, 12, 90, 23683, 80, 30, 17, -1, 17131), + (12786, 6815, 6815, 6815, 6815, 8, 86, 23684, 60, 600, 17, 10202, 12787), + (12787, 6815, 6815, 6815, 6815, 8, 88, 23685, 60, 600, 17, 12786, 12788), + (12788, 6815, 6815, 6815, 6815, 8, 90, 23686, 60, 600, 17, 12787, 14355), + (12789, 967, 967, 967, 967, 7, 85, 23687, 10, 1800, 17, 10226, 12790), + (12790, 967, 967, 967, 967, 7, 87, 23688, 10, 1800, 17, 12789, 12791), + (12791, 967, 967, 967, 967, 7, 89, 23689, 10, 1800, 17, 12790, 17535), + (12792, -1, -1, 9503, 9503, 7, 86, -1, 0, 0, 17, 10089, 12793), + (12793, -1, -1, 9503, 9503, 7, 88, -1, 0, 0, 17, 12792, 12794), + (12794, -1, -1, 9503, 9503, 7, 90, -1, 0, 0, 17, 12793, 5360), + (12795, -1, -1, 6051, 6051, 5, 85, -1, 0, 0, 17, 10606, 12796), + (12796, -1, -1, 6051, 6051, 5, 87, -1, 0, 0, 17, 12795, 12797), + (12797, -1, -1, 6051, 6051, 5, 89, -1, 0, 0, 17, 12796, 13278), + (12798, -1, -1, 5264, 5264, 12, 86, -1, 0, 0, 17, 10217, 12799), + (12799, -1, -1, 5264, 5264, 12, 88, -1, 0, 0, 17, 12798, 12800), + (12800, -1, -1, 5264, 5264, 12, 90, -1, 0, 0, 17, 12799, 13675), + (12801, -1, -1, 6383, 6383, 9, 85, -1, 0, 0, 17, 10609, 12802), + (12802, -1, -1, 6383, 6383, 9, 87, -1, 0, 0, 17, 12801, 12803), + (12803, -1, -1, 6383, 6383, 9, 89, -1, 0, 0, 17, 12802, 5339), + (12804, 12804, 12804, 12804, 12804, 7, 86, 23693, 75, 900, 17, -1, 12805), + (12807, 12807, 12807, 12807, 12807, 7, 86, 23699, 73, 1200, 17, -1, 12808), + (12810, 8227, 8227, 8227, 12810, 5, 85, 27402, 71, 10, 17, 8227, 12811), + (12811, 8227, 8227, 8227, 12810, 7, 87, 27403, 71, 10, 17, 12810, 12812), + (12812, 8227, 8227, 8227, 12810, 9, 89, 27404, 71, 10, 17, 12811, -1), + (12813, -1, -1, 1287, 1287, 5, 75, -1, 0, 0, 17, -1, 12814), + (12814, -1, -1, 1287, 1287, 5, 77, -1, 0, 0, 17, 12813, 12815), + (12815, -1, -1, 1287, 1287, 5, 79, -1, 0, 0, 17, 12814, 14279), + (12816, -1, -1, 12816, 12816, 7, 86, 0, 0, 0, 17, -1, 12817), + (12819, -1, -1, 12819, 12819, 9, 85, 0, 0, 0, 17, -1, 12820), + (12820, -1, -1, 12819, 12819, 12, 87, 0, 0, 0, 17, 12819, 12821), + (12822, -1, -1, 12822, 12822, 9, 86, 0, 0, 0, 17, -1, 12823), + (12828, 291, 291, 291, 12828, 12, 86, 27409, 5, 900, 17, 10304, 12829), + (12831, -1, -1, 12831, 12831, 7, 86, 0, 0, 0, 17, -1, 12832), + (12834, -1, -1, 6980, 6980, 5, 85, -1, 0, 0, 17, 6982, 12835), + (12835, -1, -1, 6980, 6980, 5, 87, -1, 0, 0, 17, 12834, 12836), + (12837, 12837, 12837, 12837, 12837, 7, 86, 27412, 74, 420, 17, -1, 12838), + (12840, -1, -1, 6977, 6977, 5, 85, -1, 0, 0, 17, 6979, 12841), + (12841, -1, -1, 6977, 6977, 5, 87, -1, 0, 0, 17, 12840, 12842), + (12843, -1, -1, 551, 551, 5, 86, -1, 0, 0, 17, 6907, 12844), + (12846, -1, -1, 12846, 12846, 7, 86, 6499, 0, 0, 17, -1, 12847), + (12849, -1, -1, 12849, 12849, 7, 86, 0, 0, 0, 17, -1, 12850), + (12857, 8072, 8072, 8072, 8072, 7, 86, 27419, 37, 20, 17, 10248, 12858), + (12860, -1, -1, 267, 267, 12, 86, -1, 0, 0, 17, 5619, 12861), + (12863, -1, -1, 141, 12863, 12, 59, -1, 0, 0, 17, 143, 15396), + (12864, 12864, -1, 12864, 12864, 5, 59, 27422, 73, 10, 17, -1, 17486), + (12865, 12865, 12865, 12865, 12865, 12, 90, 27423, 42, 6, 17, -1, -1), + (12866, 12866, 12866, 12866, 12866, 12, 86, 27424, 74, 1800, 17, -1, 15605), + (12867, 12867, 12867, 12867, 12867, 12, 86, 27426, 13, 4320, 17, -1, -1), + (12868, 1334, 1334, 1334, 1334, 12, 86, 27427, 11, 4320, 17, 10236, 12869), + (12871, -1, -1, 11050, 11050, 9, 85, -1, 0, 0, 17, 11060, 12872), + (12872, -1, -1, 11050, 11050, 12, 87, -1, 0, 0, 17, 12871, 12873), + (12874, -1, -1, 1414, 1414, 5, 86, -1, 0, 0, 17, 1418, 17490), + (12875, 4938, 4938, 4938, 4938, 12, 90, 27430, 35, 1800, 17, 5614, 13727), + (12876, -1, -1, 12430, 12430, 7, 86, 0, 0, 0, 17, 12477, 12877), + (12877, -1, -1, 12430, 12430, 9, 88, 0, 0, 0, 17, 12876, 12878), + (12878, -1, -1, 12430, 12430, 12, 90, 0, 0, 0, 17, 12877, 15270), + (12879, 516, 516, 516, 516, 6, 86, 27431, 5, 480, 17, 10233, 13659), + (12880, 1404, 1404, 1404, 1404, 7, 85, 27432, 15, 2160, 17, 1408, -1), + (12881, -1, -1, 12881, 12881, 9, 86, 0, 0, 0, 17, -1, 12882), + (12885, 12885, 12885, 12885, 12885, 12, 86, 27435, 75, 90, 17, -1, 17491), + (12886, -1, -1, 12886, 12886, 2, 85, -1, 0, 0, 17, -1, -1), + (12887, -1, -1, 12887, 12887, 2, 87, -1, 0, 0, 17, -1, -1), + (12888, -1, -1, 12888, 12888, 2, 89, -1, 0, 0, 17, -1, -1), + (12889, -1, -1, 12889, 12889, 2, 85, -1, 0, 0, 17, -1, 12890), + (12890, -1, -1, 12889, 12889, 2, 87, -1, 0, 0, 17, 12889, 12891), + (12892, 12892, 12892, 12892, 12892, 3, 90, 27434, 8, 60, 17, -1, 13666), + (12893, 12893, 12893, 12893, 12893, 12, 90, 27436, 76, 1800, 17, -1, 13663), + (12894, -1, -1, 12894, 12894, 5, 86, 0, 0, 0, 17, -1, 12895), + (12899, -1, -1, 471, 471, 2, 85, -1, 0, 0, 17, 473, 12900), + (12900, -1, -1, 471, 471, 2, 87, -1, 0, 0, 17, 12899, 12901), + (12902, -1, -1, 12902, 12902, 5, 85, 0, 0, 0, 17, -1, 12903), + (12903, -1, -1, 12902, 12902, 5, 86, 0, 0, 0, 17, 12902, 12904), + (12907, -1, -1, 12907, 12907, 5, 85, 0, 0, 0, 17, -1, 12908), + (12908, -1, -1, 12907, 12907, 5, 86, 0, 0, 0, 17, 12907, 12909), + (12912, -1, -1, 12912, 12912, 5, 85, 0, 0, 0, 17, -1, 12913), + (12913, -1, -1, 12912, 12912, 5, 86, 0, 0, 0, 17, 12912, 12914), + (12917, 517, 517, 517, 517, 5, 85, 27437, 12, 600, 17, 10281, 12918), + (12918, 517, 517, 517, 517, 5, 87, 27438, 12, 600, 17, 12917, 12919), + (12920, -1, -1, 12920, 12920, 5, 86, 0, 0, 0, 17, -1, 12921), + (12923, 54009, 54009, 54009, 12923, 3, 85, 27440, 22, 12, 17, 5849, 12924), + (12924, 54009, 54009, 54009, 12923, 3, 87, 27441, 22, 12, 17, 12923, 12925), + (12929, -1, -1, 6548, 6548, 8, 85, -1, 0, 0, 17, 6238, 12930), + (12930, -1, -1, 6548, 6548, 8, 90, -1, 0, 0, 17, 12929, 15463), + (12931, 12931, 12931, 12931, 12931, 7, 86, 27443, 73, 3600, 17, -1, 12932), + (12934, 1242, 1242, 1242, 1242, 12, 86, 27446, 9, 1320, 17, 10273, 12935), + (12937, 12937, 12937, 12937, 12937, 12, 86, 27449, 16, 420, 17, -1, 13733), + (12938, 12938, 12938, 12938, 12938, 15, 88, 27450, 75, 2700, 17, -1, 13743), + (12939, 12939, 12939, 12939, 12939, 12, 90, 27451, 77, 1800, 17, -1, 14756), + (12941, 12941, 12941, 12941, 12941, 5, 85, 27453, 77, 1, 17, -1, -1), + (12942, 6539, 6539, 6539, 6539, 6, 86, 27454, 18, 1800, 17, 7611, 12943), + (12943, 6539, 6539, 6539, 6539, 6, 88, 27455, 18, 1800, 17, 12942, 12944), + (12944, 6539, 6539, 6539, 6539, 6, 90, 27456, 18, 1800, 17, 12943, 13291), + (12945, -1, -1, 795, 795, 12, 85, -1, 0, 0, 17, 10267, 12946), + (12946, -1, -1, 795, 795, 12, 86, -1, 0, 0, 17, 12945, 12947), + (12947, -1, -1, 795, 795, 12, 87, -1, 0, 0, 17, 12946, 12948), + (12948, -1, -1, 795, 795, 12, 88, -1, 0, 0, 17, 12947, 12949), + (12949, -1, -1, 795, 795, 12, 89, -1, 0, 0, 17, 12948, 13710), + (12950, -1, -1, 790, 790, 6, 86, -1, 0, 0, 17, 7274, 12951), + (12951, -1, -1, 790, 790, 6, 87, -1, 0, 0, 17, 12950, 12952), + (12952, -1, -1, 790, 790, 6, 88, -1, 0, 0, 17, 12951, 12953), + (12953, -1, -1, 790, 790, 6, 89, -1, 0, 0, 17, 12952, 12954), + (12954, -1, -1, 790, 790, 6, 90, -1, 0, 0, 17, 12953, 13713), + (12955, 167, 167, 167, 167, 10, 86, 27457, 14, 900, 17, 8343, 13718), + (12956, 4903, 4903, 4903, 4903, 9, 85, 27460, 9, 1320, 17, 10255, 13698), + (12957, 4909, 4909, 4909, 4909, 9, 85, 27461, 16, 1320, 17, 10257, 14733), + (12958, 4912, 4912, 4912, 4912, 9, 85, 27459, 16, 1320, 17, 10258, 13704), + (12959, 4906, 4906, 4906, 4906, 9, 85, 27458, 9, 1320, 17, 10256, 13701), + (12963, 12963, 12963, 12963, 12963, 7, 86, 27465, 81, 5, 17, -1, -1), + (12964, 12964, 12964, 12964, 12964, 7, 88, 27466, 81, 5, 17, -1, -1), + (12965, 12965, 12965, 12965, 12965, 7, 90, 27467, 81, 5, 17, -1, -1), + (12966, -1, -1, 6112, 6112, 5, 87, -1, 0, 0, 17, 6112, 12967), + (12967, -1, -1, 6112, 6112, 5, 89, -1, 0, 0, 17, 12966, 16402), + (12968, -1, -1, 12968, 12968, 7, 85, 0, 0, 0, 17, -1, 12969), + (12969, -1, -1, 12968, 12968, 7, 87, 0, 0, 0, 17, 12968, 12970), + (12970, -1, -1, 12968, 12968, 7, 89, 0, 0, 0, 17, 12969, 14238), + (12971, 12971, 12971, 12971, 12971, 5, 86, 27471, 79, 2160, 17, -1, 12972), + (12972, 12971, 12971, 12971, 12971, 7, 87, 27472, 79, 2160, 17, 12971, 12973), + (12973, 12971, 12971, 12971, 12971, 9, 88, 27473, 79, 2160, 17, 12972, 12974), + (12974, 12971, 12971, 12971, 12971, 12, 89, 27474, 79, 2160, 17, 12973, 12975), + (12975, 12971, 12971, 12971, 12971, 15, 90, 27475, 79, 2160, 17, 12974, -1), + (12976, 7903, 7903, 7903, 7903, 6, 85, 27476, 60, 30, 17, 7903, 14734), + (12977, -1, -1, 12977, 12977, 5, 85, 0, 0, 0, 17, -1, 12978), + (12978, -1, -1, 12977, 12977, 5, 86, 0, 0, 0, 17, 12977, 12979), + (12979, -1, -1, 12977, 12977, 5, 87, 0, 0, 0, 17, 12978, 12980), + (12980, -1, -1, 12977, 12977, 5, 88, 0, 0, 0, 17, 12979, 12981), + (12981, -1, -1, 12977, 12977, 5, 89, 0, 0, 0, 17, 12980, 17334), + (12982, 10600, 10600, 10600, 10600, 7, 86, 27477, 73, 20, 17, 10602, 12983), + (12983, 10600, 10600, 10600, 10600, 7, 88, 27478, 73, 20, 17, 12982, 12984), + (12984, 10600, 10600, 10600, 10600, 7, 90, 27479, 73, 20, 17, 12983, 13720), + (12985, 520, 520, 520, 520, 12, 86, 27480, 6, 540, 17, 10254, 12986), + (12986, 520, 520, 520, 520, 12, 88, 27481, 6, 540, 17, 12985, 12987), + (12987, 520, 520, 520, 520, 12, 90, 27482, 6, 540, 17, 12986, -1), + (12988, -1, -1, 10959, 12988, 12, 90, -1, 0, 0, 17, 10962, -1), + (12989, 12989, 12989, 12989, 12989, 7, 86, 27486, 73, 1800, 17, -1, 12990), + (12990, 12989, 12989, 12989, 12989, 9, 88, 27487, 73, 1800, 17, 12989, 12991), + (12991, 12989, 12989, 12989, 12989, 12, 90, 27488, 73, 1800, 17, 12990, 5336), + (12992, 12992, 12992, 12992, 12992, 9, 86, 27489, 0, 1, 17, -1, 12993), + (12993, 12992, 12992, 12992, 12992, 12, 88, 27490, 0, 1, 17, 12992, 12994), + (12994, 12992, 12992, 12992, 12992, 15, 90, 27491, 0, 1, 17, 12993, 5350), + (12995, 6563, 6563, 6563, 6563, 12, 86, 27492, 36, 8, 17, 6281, -1), + (12996, 153, 153, 153, 153, 12, 90, 27493, 3, 2160, 17, 11081, 17333), + (12997, 1520, 1520, 1520, 1520, 9, 85, 27494, 11, 900, 17, 10192, 12998), + (12998, 1520, 1520, 1520, 1520, 9, 87, 27495, 11, 900, 17, 12997, 12999), + (12999, 1520, 1520, 1520, 1520, 9, 89, 27496, 11, 900, 17, 12998, 5333), + (13000, 10958, 10958, 10958, 10958, 15, 90, 27497, 62, 900, 17, 10958, 16214), + (13001, -1, -1, 13001, 13001, 7, 86, -1, 0, 0, 17, -1, 13002), + (13002, -1, -1, 13001, 13001, 7, 88, -1, 0, 0, 17, 13001, 13003), + (13003, -1, -1, 13001, 13001, 7, 90, -1, 0, 0, 17, 13002, 15348), + (13004, 13004, 13004, 13004, 13004, 9, 86, 27499, 78, 300, 17, -1, 15855), + (13005, -1, -1, 6703, 6703, 3, 86, -1, 0, 0, 17, 10178, 13006), + (13006, -1, -1, 6703, 6703, 3, 88, -1, 0, 0, 17, 13005, 13007), + (13007, -1, -1, 6703, 6703, 3, 90, -1, 0, 0, 17, 13006, -1), + (13008, 13008, 13008, 13008, 13008, 9, 90, 27500, 86, 300, 17, -1, -1), + (13009, 13009, 13009, 13009, 13009, 6, 86, 27501, 39, 1, 17, -1, -1), + (13010, -1, -1, 13010, 13010, 6, 85, 0, 0, 0, 17, -1, 13011), + (13011, -1, -1, 13010, 13010, 6, 87, 0, 0, 0, 17, 13010, 13012), + (13012, -1, -1, 13010, 13010, 6, 89, 0, 0, 0, 17, 13011, 14223), + (13013, -1, -1, 13013, 13013, 6, 86, 0, 0, 0, 17, -1, 13014), + (13014, -1, -1, 13013, 13013, 6, 88, 0, 0, 0, 17, 13013, 13015), + (13015, -1, -1, 13013, 13013, 6, 90, 0, 0, 0, 17, 13014, -1), + (13016, 5109, 5109, 5109, 5109, 9, 86, 27502, 0, 1, 17, 7467, 5356), + (13017, -1, -1, 13017, 13017, 9, 86, -1, 0, 0, 17, -1, 13018), + (13018, -1, -1, 13017, 13017, 12, 88, -1, 0, 0, 17, 13017, 13019), + (13019, -1, -1, 13017, 13017, 15, 90, -1, 0, 0, 17, 13018, 13396), + (13020, 13020, 13020, 13020, 13020, 12, 86, 27503, 76, 420, 17, -1, -1), + (13021, -1, -1, 11085, 11085, 12, 86, 0, 0, 0, 17, 11087, 13022), + (13023, -1, -1, 1050, 1050, 12, 86, -1, 0, 0, 17, 7658, 13024), + (13026, -1, -1, 599, 599, 12, 86, -1, 0, 0, 17, 7561, 13027), + (13027, -1, -1, 599, 599, 12, 88, -1, 0, 0, 17, 13026, 13028), + (13028, -1, -1, 599, 599, 12, 90, -1, 0, 0, 17, 13027, 13438), + (13029, -1, -1, 7818, 7818, 9, 86, 31681, 0, 0, 17, 7818, 13030), + (13032, -1, -1, 1131, 1131, 9, 85, -1, 0, 0, 17, 11084, 13033), + (13033, -1, -1, 1131, 1131, 12, 87, -1, 0, 0, 17, 13032, 13034), + (13035, -1, -1, 1134, 1134, 3, 86, -1, 0, 0, 17, 10315, 13036), + (13040, -1, -1, 4809, 4809, 5, 86, -1, 0, 0, 17, 10318, 13041), + (13043, -1, -1, 5776, 5776, 9, 86, -1, 0, 0, 17, 7198, 13044), + (13046, -1, -1, 8250, 8250, 6, 85, -1, 0, 0, 17, 8254, 13047), + (13047, -1, -1, 8250, 8250, 6, 86, -1, 0, 0, 17, 13046, 13048), + (13048, -1, -1, 8250, 8250, 6, 87, -1, 0, 0, 17, 13047, 13049), + (13049, -1, -1, 8250, 8250, 6, 88, -1, 0, 0, 17, 13048, 13050), + (13050, -1, -1, 8250, 8250, 6, 89, -1, 0, 0, 17, 13049, 13348), + (13051, -1, -1, 10404, 10404, 6, 90, -1, 0, 0, 17, 10404, -1), + (13052, -1, -1, 10401, 10401, 6, 86, -1, 0, 0, 17, 10403, 13053), + (13055, -1, -1, 13055, 13055, 6, 86, 0, 0, 0, 17, -1, 13056), + (13058, 6931, 6931, 6931, 6931, 12, 90, 27504, 41, 600, 17, 10319, 13857), + (13059, 4854, 4854, 4854, 4854, 9, 86, 27505, 8, 600, 17, 10325, 13060), + (13062, 6932, 6932, 6932, 6932, 7, 86, 27508, 42, 1200, 17, 10322, 13063), + (13065, 13065, 13065, 13065, 13065, 12, 86, 27514, 70, 90, 17, -1, -1), + (13066, 13066, 13066, 13066, 13066, 9, 85, 27516, 71, 1800, 17, -1, -1), + (13067, -1, -1, 13067, 13067, 6, 86, 0, 0, 0, 17, -1, 13068), + (13072, -1, -1, 12600, 12600, 7, 87, 0, 0, 0, 17, 12600, 13073), + (13073, -1, -1, 12600, 12600, 7, 89, 0, 0, 0, 17, 13072, 13222), + (13074, -1, -1, 1044, 1044, 9, 86, -1, 0, 0, 17, 7652, 13075), + (13075, -1, -1, 1044, 1044, 12, 88, -1, 0, 0, 17, 13074, 13076), + (13076, -1, -1, 1044, 1044, 15, 90, -1, 0, 0, 17, 13075, 13326), + (13077, -1, -1, 1047, 1047, 9, 86, -1, 0, 0, 17, 7655, 13078), + (13078, -1, -1, 1047, 1047, 12, 88, -1, 0, 0, 17, 13077, 13079), + (13080, -1, -1, 125, 125, 9, 86, -1, 0, 0, 17, 12400, 13081), + (13081, -1, -1, 125, 125, 10, 87, -1, 0, 0, 17, 13080, 13082), + (13082, -1, -1, 125, 125, 11, 88, -1, 0, 0, 17, 13081, 13083), + (13083, -1, -1, 125, 125, 12, 89, -1, 0, 0, 17, 13082, 13084), + (13084, -1, -1, 125, 125, 13, 90, -1, 0, 0, 17, 13083, 8463), + (13085, -1, -1, 122, 122, 9, 86, -1, 0, 0, 17, 12405, 13086), + (13086, -1, -1, 122, 122, 10, 87, -1, 0, 0, 17, 13085, 13087), + (13087, -1, -1, 122, 122, 11, 88, -1, 0, 0, 17, 13086, 13088), + (13088, -1, -1, 122, 122, 12, 89, -1, 0, 0, 17, 13087, 13089), + (13089, -1, -1, 122, 122, 13, 90, -1, 0, 0, 17, 13088, 8440), + (13090, -1, -1, 1435, 4773, 9, 86, -1, 0, 0, 17, 7621, 13295), + (13091, -1, -1, 1435, 4773, 9, 86, -1, 0, 0, 17, 1650, 13294), + (13092, -1, -1, 644, 644, 9, 85, -1, 0, 0, 17, 7361, 13093), + (13093, -1, -1, 644, 644, 12, 87, -1, 0, 0, 17, 13092, 13094), + (13094, -1, -1, 644, 644, 15, 89, -1, 0, 0, 17, 13093, 13265), + (13095, -1, -1, 1604, 1604, 15, 89, -1, 0, 0, 17, 12613, 13767), + (13096, -1, -1, 13096, 13096, 12, 86, -1, 0, 0, 17, -1, 13097), + (13097, -1, -1, 13096, 13096, 12, 88, -1, 0, 0, 17, 13096, 13098), + (13098, -1, -1, 13096, 13096, 12, 90, -1, 0, 0, 17, 13097, 13127), + (13099, -1, -1, 83, 83, 9, 55, -1, 0, 0, 17, 85, -1), + (13100, 13100, 13100, 13100, 13100, 9, 86, 27534, 86, 300, 17, -1, 15140), + (13101, -1, -1, 13101, 13101, 7, 86, 0, 0, 0, 17, -1, 13102), + (13102, -1, -1, 13101, 13101, 9, 88, 0, 0, 0, 17, 13101, 13103), + (13103, -1, -1, 13101, 13101, 12, 90, 0, 0, 0, 17, 13102, 14082), + (13104, -1, -1, 589, 589, 9, 86, -1, 0, 0, 17, 7709, 13105), + (13105, -1, -1, 589, 589, 9, 88, -1, 0, 0, 17, 13104, 13106), + (13106, -1, -1, 589, 589, 9, 90, -1, 0, 0, 17, 13105, 15778), + (13107, 6645, 6645, 6645, 6645, 9, 90, 27541, 45, 60, 17, 6645, 13633), + (13108, 13108, 13108, 13108, 13108, 5, 90, 27542, 89, 30, 17, -1, -1), + (13109, 1351, 1351, 1351, 1351, 8, 90, 27543, 5, 30, 17, 7109, -1), + (13110, 10815, 10815, 10815, 10815, 9, 86, -1, 0, 0, 17, 10817, 13111), + (13111, 10815, 10815, 10815, 10815, 11, 88, -1, 0, 0, 17, 13110, 13112), + (13113, 10818, 10818, 10818, 10818, 9, 86, -1, 0, 0, 17, 10820, 13114), + (13114, 10818, 10818, 10818, 10818, 11, 88, -1, 0, 0, 17, 13113, 13115), + (13116, 10821, 10821, 10821, 10821, 9, 86, -1, 0, 0, 17, 10823, 13117), + (13117, 10821, 10821, 10821, 10821, 11, 88, -1, 0, 0, 17, 13116, 13118), + (13119, 5007, 5007, 5007, 5007, 9, 86, 27544, 8, 2160, 17, 10063, 13120), + (13120, 5007, 5007, 5007, 5007, 9, 88, 27545, 8, 2160, 17, 13119, 13121), + (13122, -1, -1, 6546, 6546, 0, 86, -1, 0, 0, 17, 7377, 13123), + (13123, -1, -1, 6546, 6546, 0, 87, -1, 0, 0, 17, 13122, 13124), + (13124, -1, -1, 6546, 6546, 0, 88, -1, 0, 0, 17, 13123, 13125), + (13127, -1, -1, 13096, 13096, 12, 91, -1, 0, 0, 18, 13098, 13128), + (13130, 13130, 13130, 13130, 13130, 15, 95, 32440, 48, 30, 18, -1, -1), + (13133, 7756, 7756, 7756, 7756, 12, 85, 21805, 85, 120, 17, -1, -1), + (13134, 13134, 13134, 13134, 13134, 7, 86, 27547, 74, 900, 17, -1, 13135), + (13135, 13134, 13134, 13134, 13134, 7, 88, 27548, 74, 900, 17, 13134, 13136), + (13136, 13134, 13134, 13134, 13134, 7, 90, 27549, 74, 900, 17, 13135, 13380), + (13140, -1, -1, 10464, 10464, 7, 86, -1, 0, 0, 17, 10466, 13141), + (13141, -1, -1, 10464, 10464, 9, 88, -1, 0, 0, 17, 13140, 13142), + (13142, -1, -1, 10464, 10464, 11, 90, -1, 0, 0, 17, 13141, -1), + (13143, -1, -1, 13143, 13143, 5, 86, 0, 0, 0, 17, -1, 13144), + (13144, -1, -1, 13143, 13143, 5, 88, 0, 0, 0, 17, 13143, 13145), + (13145, -1, -1, 13143, 13143, 5, 90, 0, 0, 0, 17, 13144, -1), + (13146, -1, -1, 13146, 13146, 5, 86, 0, 0, 0, 17, -1, 13147), + (13147, -1, -1, 13146, 13146, 5, 88, 0, 0, 0, 17, 13146, 13148), + (13148, -1, -1, 13146, 13146, 5, 90, 0, 0, 0, 17, 13147, -1), + (13149, -1, -1, 8210, 8210, 5, 86, -1, 0, 0, 17, 1655, 13150), + (13150, -1, -1, 8210, 8210, 5, 87, -1, 0, 0, 17, 13149, 13151), + (13151, -1, -1, 8210, 8210, 5, 88, -1, 0, 0, 17, 13150, 13152), + (13152, -1, -1, 8210, 8210, 5, 89, -1, 0, 0, 17, 13151, 13153), + (13153, -1, -1, 8210, 8210, 5, 90, -1, 0, 0, 17, 13152, 13318), + (13154, 5105, 5105, 5105, 5105, 12, 90, 27550, 11, 600, 17, 10509, 14023), + (13155, 7986, 7986, 7986, 7986, 12, 90, 27551, 11, 600, 17, 10510, 14022), + (13158, 548, 548, 548, 548, 10, 86, 27552, 5, 900, 17, 10098, 13159), + (13161, 528, 528, 528, 528, 12, 86, 27555, 5, 720, 17, 10196, 13162), + (13162, 528, 528, 528, 528, 12, 88, 27556, 5, 720, 17, 13161, 13163), + (13163, 528, 528, 528, 528, 12, 90, 27557, 5, 720, 17, 13162, 5357), + (13164, 13164, 13164, 13164, 13164, 9, 86, 27540, 99, 180, 17, -1, -1), + (13165, 13165, 13165, 13165, 13165, 9, 86, 27559, 56, 60, 17, -1, -1), + (13166, -1, -1, 13166, 13166, 7, 86, 0, 0, 0, 17, -1, 13167), + (13167, -1, -1, 13166, 13166, 7, 88, 0, 0, 0, 17, 13166, 13168), + (13168, -1, -1, 13166, 13166, 7, 90, 0, 0, 0, 17, 13167, -1), + (13169, 13169, 13169, 13169, 13169, 9, 90, 27560, 99, 180, 17, -1, 17221), + (13170, 6380, 6380, 6380, 6380, 6, 86, 27561, 39, 120, 17, 10310, 13171), + (13173, 290, 290, 290, 290, 8, 86, 27564, 4, 720, 17, 290, 13448), + (13174, 10374, 10374, 10374, 10374, 6, 85, 27565, 63, 900, 17, 10376, 13175), + (13175, 10374, 10374, 10374, 10374, 8, 87, 27566, 63, 900, 17, 13174, 13176), + (13177, 6984, 6984, 6984, 6984, 6, 83, 27568, 60, 60, 17, 10294, 13466), + (13178, 6986, 6986, 6986, 6986, 6, 83, 27570, 60, 60, 17, 10296, 13468), + (13179, 6985, 6985, 6985, 6985, 6, 83, 27569, 60, 60, 17, 10295, 13467), + (13180, 10377, 10377, 10377, 10377, 6, 86, 16796, 64, 60, 17, 10379, 13181), + (13183, 10346, 10346, 10346, 10346, 9, 90, 27574, 46, 600, 17, 10346, 13819), + (13184, -1, -1, 10340, 10340, 9, 86, -1, 0, 0, 17, 10342, 13185), + (13185, -1, -1, 10340, 10340, 9, 88, -1, 0, 0, 17, 13184, 13186), + (13186, -1, -1, 10340, 10340, 9, 90, -1, 0, 0, 17, 13185, 13829), + (13187, -1, -1, 9512, 9512, 7, 86, -1, 0, 0, 17, 7883, 13188), + (13188, -1, -1, 9512, 9512, 7, 88, -1, 0, 0, 17, 13187, 13189), + (13189, -1, -1, 9512, 9512, 7, 90, -1, 0, 0, 17, 13188, 13826), + (13190, 1110, 1110, 1110, 1110, 6, 86, 27576, 3, 2160, 17, 10152, 13191), + (13191, 1110, 1110, 1110, 1110, 6, 88, 27577, 3, 2160, 17, 13190, 13192), + (13192, 1110, 1110, 1110, 1110, 6, 90, 27578, 3, 2160, 17, 13191, 13496), + (13193, 1598, -1, 1598, 1598, 9, 86, 27582, 6, 900, 17, 10148, 13194), + (13194, 1598, -1, 1598, 1598, 11, 88, 27583, 6, 900, 17, 13193, 13195), + (13195, 1598, -1, 1598, 1598, 13, 90, 27584, 6, 900, 17, 13194, 13493), + (13196, -1, -1, 255, 255, 9, 86, -1, 0, 0, 17, 10135, 13197), + (13197, -1, -1, 255, 255, 9, 88, -1, 0, 0, 17, 13196, 13198), + (13198, -1, -1, 255, 255, 9, 90, -1, 0, 0, 17, 13197, 13511), + (13199, -1, -1, 8322, 8322, 9, 86, 0, 0, 0, 17, 8324, 13200), + (13200, -1, -1, 8322, 8322, 9, 88, 0, 0, 0, 17, 13199, 13201), + (13201, -1, -1, 8322, 8322, 9, 90, 0, 0, 0, 17, 13200, -1), + (13202, 13202, 13202, 13202, 13202, 2, 81, 27585, 98, 20, 17, -1, 14009), + (13203, 10330, 10330, 10330, 10330, 7, 90, 27586, 35, 30, 17, 10330, 13492), + (13204, -1, -1, 13204, 13204, 7, 86, -1, 0, 0, 17, -1, 13205), + (13205, -1, -1, 13204, 13204, 7, 88, -1, 0, 0, 17, 13204, 13206), + (13206, -1, -1, 13204, 13204, 7, 90, -1, 0, 0, 17, 13205, 14176), + (13207, -1, -1, 10850, 10850, 9, 86, 27587, 0, 0, 17, 10852, 13208), + (13208, -1, -1, 10850, 10850, 9, 88, 27588, 0, 0, 17, 13207, 13209), + (13209, -1, -1, 10850, 10850, 9, 90, 27589, 0, 0, 17, 13208, 13779), + (13210, -1, -1, 1307, 1307, 5, 81, -1, 0, 0, 17, 6662, 13211), + (13211, -1, -1, 1307, 1307, 5, 83, -1, 0, 0, 17, 13210, 13212), + (13212, -1, -1, 1307, 1307, 5, 85, -1, 0, 0, 17, 13211, -1), + (13213, -1, -1, 1543, 1543, 7, 86, -1, 0, 0, 17, 10167, 13214), + (13214, -1, -1, 1543, 1543, 7, 87, -1, 0, 0, 17, 13213, 13215), + (13215, -1, -1, 1543, 1543, 7, 88, -1, 0, 0, 17, 13214, 13216), + (13216, -1, -1, 1543, 1543, 7, 89, -1, 0, 0, 17, 13215, 13217), + (13217, -1, -1, 1543, 1543, 7, 90, -1, 0, 0, 17, 13216, 13782), + (13218, -1, -1, 1304, 1304, 12, 90, -1, 0, 0, 17, 10867, 13789), + (13219, -1, -1, 8325, 8325, 7, 85, 0, 0, 0, 17, 8327, 13220), + (13220, -1, -1, 8325, 8325, 9, 87, 0, 0, 0, 17, 13219, 13221), + (13221, -1, -1, 8325, 8325, 11, 89, 0, 0, 0, 17, 13220, 13798), + (13222, -1, -1, 12600, 12600, 7, 89, 0, 0, 0, 17, 13073, 13223), + (13223, -1, -1, 12600, 12600, 7, 89, 0, 0, 0, 17, 13222, -1), + (13224, 13224, -1, 13224, 13224, 3, 86, 27590, 98, 1, 17, -1, 15559), + (13225, 13225, 13225, 13225, 13225, 6, 86, 27592, 0, 4, 17, -1, 13688), + (13226, -1, -1, 5295, 5295, 6, 86, -1, 0, 0, 17, 10229, 13227), + (13229, 6290, 6290, 6290, 6290, 9, 86, 27596, 0, 1, 17, 11066, 13230), + (13232, 4944, -1, 4944, 4944, 9, 86, 27602, 0, 1, 17, 11069, 13233), + (13235, 1478, -1, 1478, 1478, 9, 86, 27608, 0, 1, 17, 11072, 13236), + (13238, -1, -1, 1287, 1287, 9, 86, -1, 0, 0, 17, 12474, 13239), + (13239, -1, -1, 1287, 1287, 10, 88, -1, 0, 0, 17, 13238, 13240), + (13240, -1, -1, 1287, 1287, 11, 90, -1, 0, 0, 17, 13239, 15719), + (13241, 4931, 4931, 4931, 4931, 7, 86, 27614, 4, 600, 17, 10430, 13242), + (13244, 1501, 1501, 1501, 1501, 6, 86, 27617, 10, 4320, 17, 1560, 13245), + (13247, 4894, 4894, 4894, 4894, 6, 86, 27620, 7, 2160, 17, 7290, 13248), + (13250, 10550, 10550, 10550, 10550, 7, 90, 27626, 61, 120, 17, 10550, 13728), + (13251, 1239, 1239, 1239, 1239, 9, 90, 27627, 6, 600, 17, 7275, 13732), + (13252, 13252, 13252, 13252, 13252, 9, 86, 27629, 95, 4, 17, -1, 16065), + (13253, 1126, 1126, 1126, 1126, 7, 85, 27630, 2, 2160, 17, 5515, 13254), + (13254, 1126, 1126, 1126, 1126, 7, 87, 27631, 2, 2160, 17, 13253, 13255), + (13255, 1126, 1126, 1126, 1126, 7, 89, 27632, 2, 2160, 17, 13254, 13723), + (13256, 146, 146, 146, 146, 8, 86, 27633, 2, 180, 17, 7691, 13257), + (13257, 146, 146, 146, 146, 8, 88, 27634, 2, 180, 17, 13256, 13258), + (13258, 146, 146, 146, 146, 8, 90, 27635, 2, 180, 17, 13257, 14222), + (13259, 1195, 1195, 1195, 1195, 9, 90, 27661, 13, 2160, 17, 10015, 15334), + (13260, 13260, 13260, 13260, 13260, 0, 80, 27664, 98, 3600, 17, -1, -1), + (13261, 13261, 13261, 13261, 13261, 0, 81, 27665, 98, 28800, 17, -1, -1), + (13262, -1, -1, 498, 498, 5, 70, -1, 0, 0, 16, 975, 13263), + (13263, -1, -1, 498, 498, 5, 75, -1, 0, 0, 16, 13262, 13264), + (13264, -1, -1, 498, 498, 5, 80, -1, 0, 0, 16, 13263, -1), + (13271, 13271, 13271, 13271, 13271, 0, 80, 27691, 97, 3600, 18, -1, -1), + (13272, 13272, 13272, 13272, 13272, 0, 81, 27692, 97, 28800, 18, -1, -1), + (13275, 6537, 6537, 6537, 6537, 10, 91, 30638, 30, 900, 18, 12522, 13276), + (13278, -1, -1, 6051, 6051, 10, 91, -1, 0, 0, 18, 12797, 13279), + (13281, -1, -1, 1072, 1072, 12, 91, -1, 0, 0, 18, 12541, 13282), + (13286, -1, -1, 119, 119, 12, 91, -1, 0, 0, 18, 12552, 13287), + (13291, 6539, 6539, 6539, 6539, 9, 91, 30641, 18, 1800, 18, 12944, 13292), + (13294, -1, -1, 1435, 4773, 12, 91, -1, 0, 0, 18, 13091, 14490), + (13295, -1, -1, 1435, 4773, 12, 91, -1, 0, 0, 18, 13090, 14491), + (13296, -1, -1, 77, 77, 12, 91, -1, 0, 0, 18, 12499, 13297), + (13297, -1, -1, 77, 77, 12, 93, -1, 0, 0, 18, 13296, 13298), + (13299, -1, -1, 1186, 1186, 12, 91, -1, 0, 0, 18, 12566, 13300), + (13302, -1, -1, 80, 80, 12, 91, -1, 0, 0, 18, 12569, 13303), + (13305, -1, -1, 683, 683, 10, 91, -1, 0, 0, 18, 12696, 13306), + (13308, -1, -1, 446, 735, 10, 91, -1, 0, 0, 18, 10477, 13309), + (13313, -1, -1, 658, 658, 8, 91, -1, 0, 0, 18, 12574, 13314), + (13318, -1, -1, 8210, 8210, 10, 91, -1, 0, 0, 18, 13153, 13319), + (13323, -1, -1, 1287, 1287, 12, 91, -1, 0, 0, 18, 10639, 13324), + (13326, -1, -1, 1044, 1044, 10, 91, -1, 0, 0, 18, 13076, 13327), + (13332, -1, -1, 1041, 1041, 11, 91, -1, 0, 0, 18, 12699, 13333), + (13338, -1, -1, 8245, 8245, 11, 91, -1, 0, 0, 18, 8426, 13339), + (13343, -1, -1, 8240, 8240, 11, 91, -1, 0, 0, 18, 10785, 13344), + (13348, -1, -1, 8250, 8250, 11, 91, -1, 0, 0, 18, 13050, 13349), + (13353, -1, -1, 8235, 8235, 11, 91, -1, 0, 0, 18, 8308, 13354), + (13358, -1, -1, 8255, 8255, 11, 91, -1, 0, 0, 18, 12415, 13359), + (13363, 1192, 1192, 1192, 1192, 9, 91, 30645, 12, 1320, 18, 10021, 13364), + (13383, 6488, 6488, 6488, 6488, 15, 91, 30657, 32, 900, 18, 6488, 13384), + (13385, 13385, 13385, 13385, 13385, 12, 91, 30659, 75, 600, 18, -1, 13386), + (13388, 13388, 13388, 13388, 13388, 12, 91, 30665, 79, 180, 18, -1, -1), + (13389, 13389, -1, 13389, 13389, 5, 91, 30666, 77, 12, 18, -1, 15832), + (13396, -1, -1, 13017, 13017, 15, 91, -1, 0, 0, 18, 13019, 13397), + (13401, 1498, 1498, 1498, 1498, 15, 91, 30679, 12, 1320, 18, 10092, 13402), + (13404, -1, -1, 1514, 1514, 11, 91, -1, 0, 0, 18, 1516, 13405), + (13410, 645, -1, 645, 645, 15, 95, 30682, 4, 5, 18, 10739, -1), + (13411, -1, -1, 12652, 12652, 15, 92, 0, 0, 0, 18, 12654, 13412), + (13413, -1, -1, 12416, 12416, 15, 91, -1, 0, 0, 18, 12418, 13414), + (13415, -1, -1, 7989, 7989, 9, 95, -1, 0, 0, 18, 7992, -1), + (13416, -1, -1, 13416, 13416, 9, 91, 0, 0, 0, 18, -1, 13417), + (13419, 13419, 13419, 13419, 13419, 12, 91, 30683, 99, 600, 18, -1, 13420), + (13425, 54006, 54006, 54006, 54006, 9, 91, 30692, 18, 180, 18, 10006, 13426), + (13438, -1, -1, 599, 599, 13, 91, -1, 0, 0, 18, 13028, 13439), + (13444, 13444, 13444, 13444, 13444, 9, 91, 30699, 75, 600, 18, -1, 13445), + (13447, 11073, 11073, 11073, 11073, 12, 95, 30705, 53, 30, 18, 11073, 15412), + (13449, -1, -1, 13449, 13449, 5, 91, -1, 0, 0, 18, -1, 13450), + (13454, 718, 718, 718, 718, 12, 91, 30711, 7, 4320, 18, 1019, 14855), + (13463, -1, -1, 13463, 13463, 7, 91, -1, 0, 0, 18, -1, 13464), + (13466, 6984, 6984, 6984, 6984, 9, 91, 30721, 60, 60, 18, 13177, 13469), + (13467, 6985, 6985, 6985, 6985, 9, 91, 30723, 60, 60, 18, 13179, 13470), + (13468, 6986, 6986, 6986, 6986, 12, 92, 30725, 60, 60, 18, 13178, 13471), + (13472, 11080, 11080, 11080, 11080, 11, 91, 30727, 10, 20, 18, 11080, 13473), + (13474, -1, -1, 13474, 13474, 9, 91, -1, 0, 0, 18, -1, 13475), + (13477, -1, -1, 10380, 10380, 11, 91, -1, 0, 0, 18, 10382, 13478), + (13483, 13483, 13483, 13483, 13483, 5, 91, 30735, 68, 20, 18, -1, -1), + (13484, 13484, -1, 13484, 13484, 12, 95, 30736, 76, 720, 18, -1, 15879), + (13485, -1, -1, 13485, 13485, 7, 91, -1, 0, 0, 18, -1, 13486), + (13490, 5020, 5020, 5020, 5020, 9, 91, 30742, 9, 300, 18, 10149, 13491), + (13492, 10330, 10330, 10330, 10330, 12, 95, 30744, 35, 30, 18, 13203, 14797), + (13493, 1598, -1, 1598, 1598, 11, 91, 30745, 6, 900, 18, 13195, 13494), + (13496, 1110, 1110, 1110, 1110, 9, 91, 30748, 3, 2160, 18, 13192, 13497), + (13499, 592, 592, 592, 592, 9, 91, 30754, 2, 18, 18, 12751, 13500), + (13502, -1, -1, 6375, 6375, 9, 91, -1, 0, 0, 18, 12736, 13503), + (13505, 6533, 6533, 6533, 6533, 11, 91, 30757, 15, 600, 18, 12742, 13506), + (13508, -1, -1, 8314, 8314, 9, 91, -1, 0, 0, 18, 8316, 13509), + (13511, -1, -1, 255, 255, 9, 91, -1, 0, 0, 18, 13198, 13512), + (13514, 5298, 5298, 5298, 5298, 12, 91, 30760, 32, 1800, 18, 12748, 13515), + (13517, 10336, 10336, 10336, 10336, 11, 91, 30766, 58, 8, 18, 12732, 13518), + (13520, -1, -1, 12419, 12419, 15, 95, -1, 0, 0, 18, 12575, 16886), + (13521, -1, -1, 6386, 6386, 9, 91, -1, 0, 0, 18, 6389, 13522), + (13524, 6534, 6534, 6534, 6534, 11, 91, 30769, 16, 900, 18, 7429, 13525), + (13527, 13527, 13527, 13527, 13527, 9, 91, 30772, 18, 9, 18, -1, 15964), + (13528, 13528, 13528, 13528, 13528, 10, 91, 30773, 42, 60, 18, -1, -1), + (13529, 13529, 13529, 13529, 13529, 15, 95, 30774, 41, 120, 18, -1, -1), + (13530, 1116, 1116, 1116, 1116, 12, 91, 30775, 4, 2160, 18, 12745, 13531), + (13533, -1, -1, 7010, 7010, 9, 91, -1, 0, 0, 18, 7015, 13534), + (13542, 6755, 6755, 6755, 6755, 12, 91, 30784, 42, 900, 18, 6757, 13543), + (13545, -1, -1, 10388, 10388, 12, 95, -1, 0, 0, 18, 10388, 15293), + (13546, 6758, 6758, 6758, 6758, 11, 91, 32360, 43, 900, 18, 10056, 13547), + (13549, 13549, 13549, 13549, 13549, 15, 95, 30788, 64, 180, 18, -1, -1), + (13556, 13556, 13556, 13556, 13556, 9, 91, 30792, 44, 600, 18, -1, 13557), + (13562, -1, -1, 10719, 10719, 15, 91, 0, 0, 0, 18, 10721, 13563), + (13565, -1, -1, 13565, 13565, 11, 91, 0, 0, 0, 18, -1, 13566), + (13568, -1, -1, 13568, 13568, 11, 91, 0, 0, 0, 18, -1, 13569), + (13571, 13571, 13571, 13571, 13571, 12, 91, 30795, 50, 60, 18, -1, -1), + (13575, 5095, 5095, 5095, 5095, 11, 91, 30796, 10, 900, 18, 10642, 13576), + (13578, 0, 0, 10348, 10348, 9, 91, -1, 0, 0, 18, 10350, 13579), + (13584, 10394, 10394, 10394, 10394, 15, 91, 30799, 30, 300, 18, 10704, 14981), + (13585, 7712, 7712, 7712, 7712, 15, 95, 30800, 2, 30, 18, 10646, 15095), + (13586, 188, 188, 188, 188, 12, 91, 30801, 2, 30, 18, 10647, 13587), + (13589, -1, -1, 255, 255, 13, 91, -1, 0, 0, 18, 10625, 13590), + (13590, -1, -1, 255, 255, 15, 93, -1, 0, 0, 18, 13589, 13591), + (13592, 5984, 5984, 5984, 5984, 12, 91, 30803, 2, 30, 18, 10626, 13593), + (13595, 534, 534, 534, 534, 12, 91, 30806, 4, 2160, 18, 10710, 13596), + (13598, -1, -1, 6791, 6791, 11, 91, -1, 0, 0, 18, 10678, 13599), + (13601, -1, -1, 852, 852, 11, 91, -1, 0, 0, 18, 12578, 13602), + (13604, 7850, 7850, 7850, 7850, 15, 91, 30812, 39, 4320, 18, 10620, 13605), + (13607, -1, -1, 10453, 10453, 11, 91, -1, 0, 0, 18, 10455, 13608), + (13610, -1, -1, 602, 602, 12, 91, -1, 0, 0, 18, 10687, 13611), + (13613, -1, -1, 855, 855, 11, 91, -1, 0, 0, 18, 10692, 13614), + (13616, -1, -1, 13616, 13616, 7, 91, -1, 0, 0, 18, -1, 13617), + (13617, -1, -1, 13616, 13616, 9, 93, -1, 0, 0, 18, 13616, 13618), + (13618, -1, -1, 13616, 13616, 12, 95, -1, 0, 0, 18, 13617, 14786), + (13619, 7800, 7800, 7800, 7800, 15, 91, 30815, 39, 4320, 18, 10787, 13620), + (13621, -1, -1, 6630, 6630, 9, 91, -1, 0, 0, 18, 10074, 13622), + (13624, 10900, 10900, 10900, 10900, 9, 91, 30817, 55, 120, 18, 10902, 13625), + (13627, -1, -1, 895, 895, 9, 91, -1, 0, 0, 18, 10908, 13628), + (13628, -1, -1, 895, 895, 12, 93, -1, 0, 0, 18, 13627, 13629), + (13630, -1, -1, 9506, 9506, 11, 91, -1, 0, 0, 18, 9508, 13631), + (13633, 6645, 6645, 6645, 6645, 15, 95, 30820, 45, 60, 18, 13107, 15178), + (13646, 13646, 13646, 13646, 13646, 15, 91, 30837, 45, 600, 18, -1, -1), + (13650, 8060, 8060, 8060, 8060, 9, 91, 31524, 41, 1800, 18, 10239, 13651), + (13653, 8063, 8063, 8063, 8063, 9, 91, 31527, 41, 1800, 18, 10242, 13654), + (13656, 8066, 8066, 8066, 8066, 11, 91, 31530, 41, 1800, 18, 10245, 13657), + (13663, 12893, 12893, 12893, 12893, 15, 91, 31534, 76, 1800, 18, 12893, 13664), + (13667, -1, -1, 13667, 13667, 11, 91, -1, 0, 0, 18, -1, 13668), + (13670, 13670, 13670, 13670, 13670, 12, 91, 31538, 43, 1800, 18, -1, 13671), + (13673, 13673, 13673, 13673, 13673, 18, 95, 32050, 0, 1, 18, -1, -1), + (13674, 13674, 13674, 13674, 13674, 18, 95, 32058, 0, 1, 18, -1, -1), + (13675, -1, -1, 5264, 5264, 12, 91, -1, 0, 0, 18, 12800, 13676), + (13678, 13678, 13678, 13678, 13678, 15, 95, 31543, 74, 1200, 18, 12778, -1), + (13682, 12766, 12766, 12766, 12766, 18, 95, 31545, 69, 3600, 18, 12766, -1), + (13683, 6822, 6822, 6822, 6822, 15, 91, 31546, 42, 120, 18, 6822, 14780), + (13684, -1, -1, 13684, 13684, 9, 91, -1, 0, 0, 18, -1, 13685), + (13685, -1, -1, 13684, 13684, 12, 93, -1, 0, 0, 18, 13684, 13686), + (13686, -1, -1, 13684, 13684, 15, 95, -1, 0, 0, 18, 13685, 16653), + (13687, 13687, 13687, 13687, 13687, 15, 91, 31547, 75, 300, 18, -1, 17521), + (13688, 13225, 13225, 13225, 13225, 12, 91, 31548, 0, 4, 18, 13225, 15620), + (13689, -1, -1, 13689, 13689, 9, 91, -1, 0, 0, 18, -1, 13690), + (13692, 12208, 12208, 12208, 12208, 6, 91, 31549, 17, 12, 18, -1, -1), + (13693, 13693, 13693, 13693, 13693, 18, 95, 31550, 76, 500, 18, -1, 17531), + (13695, 13695, 13695, 13695, 13695, 12, 91, 31577, 91, 1320, 18, -1, 13696), + (13698, 4903, 4903, 4903, 4903, 12, 91, 31580, 9, 1320, 18, 12956, 13699), + (13701, 4906, 4906, 4906, 4906, 12, 91, 31583, 9, 1320, 18, 12959, 13702), + (13704, 4912, 4912, 4912, 4912, 12, 91, 31586, 16, 1320, 18, 12958, 13705), + (13707, -1, -1, 1577, 1577, 12, 91, -1, 0, 0, 18, 10264, 13708), + (13710, -1, -1, 795, 795, 9, 91, -1, 0, 0, 18, 12949, 13711), + (13713, -1, -1, 790, 790, 6, 91, -1, 0, 0, 18, 12954, 13714), + (13718, 167, 167, 167, 167, 12, 91, 31589, 14, 900, 18, 12955, 13719), + (13720, 10600, 10600, 10600, 10600, 11, 91, 31591, 73, 20, 18, 12984, 13721), + (13723, 1126, 1126, 1126, 1126, 11, 91, 31594, 2, 2160, 18, 13255, 13724), + (13726, 1017, 1017, 1017, 1017, 12, 91, 31597, 75, 15, 18, 1017, -1), + (13727, 4938, 4938, 4938, 4938, 12, 95, 31598, 35, 1800, 18, 12875, 16031), + (13734, 773, -1, 773, 773, 9, 91, 31606, 5, 1800, 18, 10566, 13735), + (13753, -1, -1, 13753, 13753, 5, 91, -1, 0, 0, 18, -1, 13754), + (13758, -1, -1, 13758, 13758, 5, 91, -1, 0, 0, 18, -1, 13759), + (13763, -1, -1, 781, 781, 12, 95, -1, 0, 0, 18, 7284, -1), + (13764, -1, -1, 13764, 13764, 9, 91, -1, 0, 0, 18, -1, 13765), + (13767, -1, -1, 1604, 1604, 12, 91, -1, 0, 0, 18, 13095, 13768), + (13770, 6328, 6328, 6328, 6328, 9, 91, 31628, 10, 600, 18, 10170, 13771), + (13771, 6328, 6328, 6328, 6328, 12, 93, 31629, 10, 600, 18, 13770, 13772), + (13773, -1, -1, 255, 255, 11, 91, -1, 0, 0, 18, 12610, 13774), + (13774, -1, -1, 255, 255, 13, 92, -1, 0, 0, 18, 13773, 13775), + (13775, -1, -1, 255, 255, 15, 93, -1, 0, 0, 18, 13774, 14126), + (13779, -1, -1, 10850, 10850, 12, 91, 31637, 0, 0, 18, 13209, 13780), + (13782, -1, -1, 1543, 1543, 9, 91, -1, 0, 0, 18, 13217, 13783), + (13785, 5021, 5021, 5021, 5021, 11, 91, 31640, 7, 60, 18, 12621, 13786), + (13788, 13788, 13788, 13788, 13788, 25, 51, 31643, 31, 2, 3, -1, -1), + (13789, -1, -1, 1304, 1304, 11, 91, -1, 0, 0, 18, 13218, 13790), + (13790, -1, -1, 1304, 1304, 13, 93, -1, 0, 0, 18, 13789, 13791), + (13792, 13792, 13792, 13792, 13792, 9, 91, 31644, 18, 600, 18, 12633, 13793), + (13795, -1, -1, 846, 846, 12, 91, -1, 0, 0, 18, 10175, 13796), + (13798, -1, -1, 8325, 8325, 9, 91, -1, 0, 0, 18, 13221, 13799), + (13804, -1, -1, 10650, 10650, 9, 91, -1, 0, 0, 18, 10652, 13805), + (13807, 1352, 1352, 1352, 1352, 9, 91, 31647, 3, 60, 18, 10115, 13808), + (13810, 1358, 1358, 1358, 1358, 9, 91, 31650, 3, 60, 18, 10118, 13811), + (13813, -1, -1, 12706, 12706, 12, 91, 0, 0, 0, 18, 12708, 13814), + (13816, 7875, 7875, 7875, 7875, 9, 91, 31653, 42, 600, 18, 7880, 13817), + (13819, 10346, 10346, 10346, 10346, 12, 95, 31659, 46, 600, 18, 13183, 16924), + (13820, -1, -1, 820, 820, 9, 91, -1, 0, 0, 18, 12669, 13821), + (13823, -1, -1, 6020, 6020, 9, 91, -1, 0, 0, 18, 12693, 13824), + (13826, -1, -1, 9512, 9512, 9, 91, -1, 0, 0, 18, 13189, 13827), + (13829, -1, -1, 10340, 10340, 12, 91, -1, 0, 0, 18, 13186, 13830), + (13832, 1355, 1355, 1355, 1355, 11, 91, 31661, 3, 60, 18, 12702, 13833), + (13835, -1, -1, 611, 611, 9, 91, -1, 0, 0, 18, 12705, 13836), + (13838, 7872, 7872, 7872, 7872, 9, 91, 31664, 41, 600, 18, 12684, 13839), + (13841, -1, -1, 10343, 10343, 9, 91, 0, 0, 0, 18, 10345, 13842), + (13845, 1178, 1178, 1178, 1178, 9, 91, 31669, 4, 900, 18, 10328, 13846), + (13872, 13872, 13872, 13872, 13872, 15, 95, 31694, 63, 60, 18, -1, 16002), + (13873, -1, -1, 13873, 13873, 7, 91, 0, 0, 0, 18, -1, 13874), + (13878, -1, -1, 13878, 13878, 9, 91, 0, 0, 0, 18, -1, 13879), + (13881, -1, -1, 13881, 13881, 9, 91, 0, 0, 0, 18, -1, 13882), + (13884, -1, -1, 735, 735, 10, 91, -1, 0, 0, 18, 10636, 13885), + (13889, -1, -1, 13889, 13889, 5, 91, 0, 0, 0, 18, -1, 13890), + (13894, -1, -1, 1021, 1021, 6, 91, -1, 0, 0, 18, 7685, 13895), + (13899, 6750, 6750, 6750, 6750, 15, 95, 32100, 60, 120, 18, 6750, 15294), + (13905, -1, -1, 13905, 13905, 10, 91, -1, 0, 0, 18, -1, 13906), + (13908, -1, -1, 13908, 13908, 10, 91, -1, 0, 0, 18, -1, 13909), + (13911, -1, -1, 13911, 13911, 12, 91, -1, 0, 0, 18, -1, 13912), + (13914, 4849, 4849, 4849, 4849, 12, 91, 32103, 7, 1800, 18, 7110, 13915), + (13917, -1, -1, 13917, 13917, 9, 91, -1, 0, 0, 18, -1, 13918), + (13920, 6333, 6333, 6333, 6333, 15, 91, 32140, 3, 600, 18, 7266, 16032), + (13921, -1, -1, 98, 98, 12, 91, -1, 0, 0, 18, 11063, 13922), + (13924, -1, -1, 98, 738, 12, 91, -1, 0, 0, 18, 7600, 13925), + (13927, -1, -1, 10370, 10370, 10, 91, -1, 0, 0, 18, 10372, 13928), + (13930, -1, -1, 1592, 1592, 12, 91, -1, 0, 0, 18, 12536, 13931), + (13933, -1, -1, 8263, 8263, 5, 91, -1, 0, 0, 18, 8360, 13934), + (13943, -1, -1, 8268, 8268, 5, 91, -1, 0, 0, 18, 8370, 13944), + (13953, -1, -1, 8273, 8273, 5, 91, -1, 0, 0, 18, 8380, 13954), + (13963, -1, -1, 8278, 8278, 5, 91, -1, 0, 0, 18, 8390, 13964), + (13973, -1, -1, 8283, 8283, 5, 91, -1, 0, 0, 18, 8400, 13974), + (13983, -1, -1, 8288, 8288, 5, 91, -1, 0, 0, 18, 8410, 13984), + (13993, -1, -1, 8293, 8293, 5, 91, -1, 0, 0, 18, 8420, 13994), + (14003, 6492, 6492, 6492, 6492, 12, 91, 32151, 52, 720, 18, 10681, 14004), + (14006, 10711, 10711, 10711, 10711, 15, 91, 32157, 75, 1200, 18, 10713, 14007), + (14009, 13202, 13202, 13202, 13202, 6, 91, 32160, 98, 20, 18, 13202, -1), + (14010, 14010, 14010, 14010, 14010, 15, 95, 32161, 97, 20, 18, -1, -1), + (14011, -1, -1, 14011, 14011, 5, 91, -1, 0, 0, 18, -1, 14012), + (14016, 10354, 10354, 10354, 10354, 15, 95, 32162, 39, 4320, 18, 10354, 14647), + (14017, -1, -1, 14017, 14017, 0, 90, -1, 0, 0, 18, -1, -1), + (14018, -1, -1, 14018, 14018, 0, 91, -1, 0, 0, 18, -1, -1), + (14019, 14019, 14019, 14019, 14019, 12, 91, 32177, 14, 900, 18, -1, 14020), + (14026, -1, -1, 14026, 14026, 12, 91, -1, 0, 0, 18, -1, 14027), + (14029, -1, -1, 14029, 14029, 12, 91, -1, 0, 0, 18, -1, 14030), + (14032, -1, -1, 14032, 14032, 15, 95, -1, 0, 0, 18, -1, -1), + (14037, -1, -1, 14037, 14037, 9, 91, 0, 0, 0, 18, -1, 14038), + (14040, -1, -1, 14040, 14040, 9, 91, 0, 0, 0, 18, -1, 14041), + (14043, -1, -1, 1313, 1313, 12, 91, -1, 0, 0, 18, 12581, 14044), + (14046, -1, -1, 14046, 14046, 5, 91, -1, 0, 0, 18, -1, 14047), + (14051, 14051, 14051, 14051, 14051, 12, 95, 32300, 62, 8, 18, -1, 15774), + (14052, 14052, 14052, 14052, 14052, 21, 95, 32301, 13, 1440, 18, -1, 14793), + (14053, 10912, 10912, 10912, 10912, 9, 91, 32303, 69, 1800, 18, 10914, 14054), + (14054, 10912, 10912, 10912, 10912, 12, 93, 32304, 69, 1800, 18, 14053, 14055), + (14055, 10912, 10912, 10912, 10912, 15, 95, 32305, 69, 1800, 18, 14054, -1), + (14056, -1, -1, 14056, 14056, 9, 91, -1, 0, 0, 18, -1, 14057), + (14059, -1, -1, 14059, 14059, 9, 91, -1, 0, 0, 18, -1, 14060), + (14062, -1, -1, 14062, 14062, 9, 91, -1, 0, 0, 18, -1, 14063), + (14065, -1, -1, 14065, 14065, 9, 91, 0, 0, 0, 18, -1, 14066), + (14068, -1, -1, 14068, 14068, 9, 91, 0, 0, 0, 18, -1, 14069), + (14071, 14071, 14071, 14071, 14071, 9, 91, 32307, 12, 600, 18, -1, 14072), + (14076, -1, -1, 14076, 14076, 9, 91, -1, 0, 0, 18, -1, 14077), + (14080, 14080, 14080, 14080, 14080, 9, 95, 32312, 13, 900, 18, -1, -1), + (14081, 14081, 14081, 14081, 14081, 9, 95, 32313, 14, 120, 18, -1, 17240), + (14082, -1, -1, 13101, 13101, 9, 91, 0, 0, 0, 18, 13103, 14083), + (14085, -1, -1, 14085, 14085, 9, 91, -1, 0, 0, 18, -1, 14086), + (14088, -1, -1, 14088, 14088, 9, 91, -1, 0, 0, 18, -1, 14089), + (14091, -1, -1, 14091, 14091, 9, 91, -1, 0, 0, 18, -1, 14092), + (14094, -1, -1, 10355, 10355, 9, 91, -1, 0, 0, 18, 10645, 14095), + (14097, -1, -1, 6395, 6395, 12, 91, -1, 0, 0, 18, 10707, 14098), + (14100, -1, -1, 14100, 14100, 15, 95, -1, 0, 0, 18, -1, -1), + (14101, -1, -1, 6355, 6355, 9, 91, -1, 0, 0, 18, 6360, 14263), + (14111, 6754, 6754, 6754, 6754, 12, 95, 32326, 41, 1200, 18, 10053, 14839), + (14112, 6370, 6370, 6370, 6370, 9, 91, 32329, 7, 600, 18, 7352, 14113), + (14115, -1, -1, 14115, 14115, 12, 91, -1, 0, 0, 18, -1, 14116), + (14129, -1, -1, 14129, 14129, 12, 91, -1, 0, 0, 18, -1, 14130), + (14130, -1, -1, 14129, 14129, 15, 93, -1, 0, 0, 18, 14129, 14131), + (14132, -1, -1, 7751, 7751, 7, 91, -1, 0, 0, 18, 7753, 14133), + (14135, -1, -1, 14135, 14135, 12, 91, -1, 0, 0, 18, -1, 14136), + (14138, -1, -1, 12615, 12615, 18, 95, -1, 0, 0, 18, 12617, 15499), + (14139, 14139, 14139, 14139, 14139, 15, 95, 32328, 60, 60, 18, -1, -1), + (14140, -1, -1, 12607, 12607, 15, 95, 0, 0, 0, 18, 12607, 15631), + (14141, -1, -1, 14141, 14141, 9, 91, -1, 0, 0, 18, -1, 14142), + (14144, -1, -1, 14144, 14144, 7, 91, -1, 0, 0, 18, -1, 14145), + (14148, -1, -1, 14148, 14148, 9, 91, 0, 0, 0, 18, -1, 14149), + (14151, -1, -1, 14151, 14151, 9, 91, 0, 0, 0, 18, -1, 14152), + (14154, -1, -1, 10657, 10657, 12, 91, 0, 0, 0, 18, 12681, 14155), + (14157, -1, -1, 14157, 14157, 9, 91, 0, 0, 0, 18, -1, 14158), + (14160, -1, -1, 14160, 14160, 9, 91, 0, 0, 0, 18, -1, 14161), + (14163, -1, -1, 14163, 14163, 9, 91, 0, 0, 0, 18, -1, 14164), + (14166, -1, -1, 14166, 14166, 9, 91, 0, 0, 0, 18, -1, 14167), + (14169, -1, -1, 14169, 14169, 7, 91, -1, 0, 0, 18, -1, 14170), + (14173, -1, -1, 12710, 12710, 9, 91, -1, 0, 0, 18, 12712, 14174), + (14176, -1, -1, 13204, 13204, 9, 91, -1, 0, 0, 18, 13206, 14177), + (14179, -1, -1, 14179, 14179, 9, 95, -1, 0, 0, 18, -1, -1), + (14180, -1, -1, 14180, 14180, 9, 95, -1, 0, 0, 18, -1, -1), + (14181, -1, -1, 14181, 14181, 9, 91, -1, 0, 0, 18, -1, 14182), + (14186, -1, -1, 14186, 14186, 9, 91, -1, 0, 0, 18, -1, 14187), + (14189, 5017, 5017, 5017, 5017, 9, 91, 32332, 8, 600, 18, 10158, 14190), + (14192, 14192, 14192, 14192, 14192, 15, 95, 32335, 36, 12, 18, -1, 15525), + (14196, -1, -1, 6935, 6935, 9, 91, -1, 0, 0, 18, 6904, 14197), + (14199, -1, -1, 6908, 6908, 12, 95, -1, 0, 0, 18, 6910, 15560), + (14200, -1, -1, 14200, 14200, 9, 91, 32336, 0, 0, 18, -1, 14201), + (14203, -1, -1, 14203, 14203, 12, 91, -1, 0, 0, 18, -1, 14204), + (14206, 14206, 14206, 14206, 14206, 12, 95, 32339, 41, 600, 18, -1, 15324), + (14207, 14207, 14207, 14207, 14207, 12, 95, 32340, 39, 180, 18, -1, -1), + (14208, 14208, 14208, 14208, 14208, 12, 95, 32341, 17, 180, 18, -1, 14568), + (14209, 14209, 14209, 14209, 14209, 12, 95, 32342, 22, 3, 18, -1, -1), + (14210, -1, -1, 10358, 10358, 12, 91, -1, 0, 0, 18, 10360, 14211), + (14213, -1, -1, 14213, 14213, 11, 91, -1, 0, 0, 18, -1, 14214), + (14218, -1, -1, 962, 962, 9, 91, -1, 0, 0, 18, 10363, 14219), + (14221, 1383, 1383, 1383, 1383, 18, 95, 32345, 6, 300, 18, 6487, 14581), + (14222, 146, 146, 146, 146, 15, 95, 32346, 2, 180, 18, 13258, 14977), + (14223, -1, -1, 13010, 13010, 12, 95, 0, 0, 0, 18, 13012, 16205), + (14224, 14224, -1, 14224, 14224, 9, 91, 345, 61, 5, 18, -1, 15860), + (14225, -1, -1, 14225, 14225, 9, 91, -1, 0, 0, 18, -1, 14226), + (14229, 14229, 14229, 14229, 14229, 12, 100, 37168, 42, 600, 19, -1, -1), + (14231, 14231, 14231, 14231, 14231, 12, 95, 32347, 91, 6, 18, -1, 16207), + (14232, 14232, -1, 14232, 14232, 12, 95, 32348, 92, 6, 18, -1, 14674), + (14233, 14233, 14233, 14233, 14233, 15, 95, 32349, 93, 30, 18, -1, 15621), + (14234, 14234, 14234, 14234, 14234, 9, 91, 32350, 94, 1800, 18, -1, 14235), + (14237, 12638, 12638, 12638, 12638, 9, 91, 23581, 68, 10, 18, -1, -1), + (14238, -1, -1, 12968, 12968, 9, 91, 0, 0, 0, 18, 12970, 14239), + (14241, -1, -1, 14241, 14241, 9, 91, -1, 0, 0, 18, -1, 14242), + (14244, -1, -1, 14244, 14244, 9, 91, -1, 0, 0, 18, -1, 14245), + (14249, -1, -1, 14249, 14249, 9, 91, -1, 0, 0, 18, -1, 14250), + (14254, -1, -1, 14254, 14254, 11, 91, -1, 0, 0, 18, -1, 14255), + (14256, 6561, 6561, 6561, 6561, 9, 91, 32353, 32, 30, 18, 10420, 14257), + (14259, -1, -1, 14259, 14259, 11, 91, -1, 0, 0, 18, -1, 14260), + (14262, 14262, 14262, 14262, 14262, 15, 95, 32357, 95, 180, 18, -1, -1), + (14264, 14264, 14264, 14264, 14264, 12, 95, 32358, 97, 120, 18, -1, 14600), + (14265, 14265, 14265, 14265, 14265, 15, 95, 32359, 68, 30, 18, -1, -1), + (14272, 6218, 6218, 6218, 14272, 12, 95, 32369, 0, 1, 18, 7488, 17381), + (14273, 723, 723, 723, 723, 12, 95, 32370, 6, 30, 18, 10300, 14869), + (14274, 6971, 6971, 6971, 6971, 9, 91, 32371, 41, 600, 18, 10290, 17383), + (14275, -1, -1, 14275, 14275, 7, 91, -1, 0, 0, 18, -1, 14276), + (14278, -1, -1, 14278, 14278, 12, 95, 0, 0, 0, 18, 6990, 16248), + (14279, -1, -1, 1287, 1287, 11, 95, -1, 0, 0, 18, 12815, 16529), + (14280, 4890, -1, 4890, 4890, 12, 95, 32373, 3, 8640, 18, 5872, 14776), + (14281, 14281, 14281, 14281, 14281, 12, 95, 32375, 39, 15, 18, -1, -1), + (14282, 14282, 14282, 14282, 14282, 9, 91, 32374, 39, 7, 18, -1, -1), + (14283, -1, -1, 14283, 14283, 7, 91, -1, 0, 0, 18, -1, 14284), + (14286, -1, -1, 14286, 14286, 9, 91, -1, 0, 0, 18, -1, 14287), + (14289, -1, -1, 14289, 14289, 9, 91, -1, 0, 0, 18, -1, 14290), + (14292, -1, -1, 14292, 14292, 9, 91, -1, 0, 0, 18, -1, 14293), + (14295, -1, -1, 14295, 14295, 9, 95, -1, 0, 0, 18, -1, 14296), + (14301, -1, -1, 14301, 14301, 9, 91, -1, 0, 0, 18, -1, 14302), + (14304, -1, -1, 14304, 14304, 9, 91, -1, 0, 0, 18, -1, 14305), + (14307, 14307, 14307, 14307, 14307, 12, 95, 32376, 92, 1200, 18, -1, 14743), + (14308, -1, -1, 14308, 14308, 9, 91, -1, 0, 0, 18, -1, 14309), + (14311, -1, -1, 14311, 14311, 9, 91, -1, 0, 0, 18, -1, 14312), + (14314, -1, -1, 7715, 7715, 7, 91, -1, 0, 0, 18, 7717, 14315), + (14318, -1, -1, 14318, 14318, 9, 91, -1, 0, 0, 18, -1, 14319), + (14321, 14321, 14321, 14321, 14321, 12, 95, 32378, 92, 8, 18, -1, 14781), + (14322, 14322, 14322, 14322, 14322, 12, 95, 32379, 94, 2160, 18, -1, 14782), + (14323, 14323, 14323, 14323, 14323, 12, 95, 32380, 92, 150, 18, -1, -1), + (14324, 155, 155, 155, 155, 15, 95, 32381, 8, 60, 18, 7238, 15610), + (14328, -1, -1, 7822, 7822, 7, 91, -1, 0, 0, 18, 7826, 14329), + (14331, -1, -1, 14331, 14331, 9, 91, -1, 0, 0, 18, -1, 14332), + (14338, 1337, 1337, 1337, 1337, 12, 91, 32382, 13, 4320, 18, 6160, 14339), + (14341, -1, -1, 14341, 14341, 5, 91, -1, 0, 0, 18, -1, 14342), + (14346, 14346, 14346, 14346, 14346, 9, 91, 32385, 94, 12, 18, -1, 14347), + (14349, -1, -1, 1210, 1213, 12, 91, -1, 0, 0, 18, 12528, 14350), + (14352, 1274, 1274, 1274, 1274, 12, 91, 32391, 9, 540, 18, 12762, 14353), + (14355, 6815, 6815, 6815, 6815, 9, 91, 32394, 60, 600, 18, 12788, 14356), + (14358, 14358, -1, 14358, 14358, 15, 95, 32397, 98, 300, 18, -1, -1), + (14359, 14359, 14359, 14359, 14359, 15, 95, 32399, 93, 1200, 18, -1, -1), + (14360, 14360, 14360, 14360, 14360, 15, 95, 32400, 95, 1800, 18, -1, 16334), + (14361, -1, -1, 637, 637, 12, 91, -1, 0, 0, 18, 12555, 14362), + (14364, -1, -1, 14364, 14364, 9, 91, -1, 0, 0, 18, -1, 14365), + (14367, -1, -1, 14367, 14367, 0, 1, -1, 0, 0, 0, -1, 14368), + (14371, 14371, 14371, 14371, 14371, 0, 1, 32910, 0, 10, 0, -1, -1), + (14372, 13844, 13844, 13844, 13844, 6, 95, 31667, 47, 6, 18, -1, -1), + (14373, 14373, 14373, 14373, 14373, 0, 85, 33106, 87, 3600, 19, -1, -1), + (14374, 14374, 14374, 14374, 14374, 0, 86, 33107, 88, 28800, 19, -1, -1), + (14690, 14690, 14690, 14690, 14690, 15, 96, 37014, 45, 600, 19, -1, 17479), + (14729, 8342, 8342, 8342, 8342, 15, 100, 33909, 54, 240, 19, 8342, 17501), + (14730, 616, 616, 616, 616, 12, 96, 33910, 7, 900, 19, 10261, 14731), + (14733, 4909, 4909, 4909, 4909, 18, 100, 33913, 16, 1320, 19, 12957, 17147), + (14734, 7903, 7903, 7903, 7903, 12, 100, 33914, 60, 30, 19, 12976, 15853), + (14739, 1462, 1462, 1462, 1462, 18, 99, 33919, 5, 300, 19, 4902, 16054), + (14764, -1, -1, 10551, 10551, 12, 96, -1, 0, 0, 19, 10553, 14765), + (14991, 926, 926, 926, 926, 5, 85, 11071, 12, 1800, 17, 930, 14992), + (14992, 926, 926, 926, 926, 5, 86, 11072, 12, 1800, 17, 14991, 14993), + (15073, 15073, -1, 15073, 15073, 0, 1, 37668, 90, 60, 19, -1, -1), + (15074, -1, -1, 15074, 15074, 0, 1, -1, 0, 0, 19, -1, 15075), + (15096, 15096, 15096, 15096, 15096, 5, 96, 38151, 35, 30, 19, -1, 15097), + (15099, 15099, 15099, 15099, 15099, 12, 100, 37187, 15, 45, 19, -1, 16566), + (15100, -1, -1, 15100, 15100, 5, 96, -1, 0, 0, 19, -1, 15101), + (15105, -1, -1, 15105, 15105, 11, 96, -1, 0, 0, 19, -1, 15106), + (15108, -1, -1, 15108, 15108, 9, 98, -1, 0, 0, 19, -1, 15109), + (15111, 8300, 8300, 8300, 8300, 11, 97, 37189, 8, 900, 19, 8302, 15112), + (15113, -1, -1, 15113, 15113, 11, 96, -1, 0, 0, 19, -1, 15114), + (15119, 15119, 15119, 15119, 15119, 12, 100, 37194, 16, 1200, 19, -1, 15749), + (15120, -1, -1, 15120, 15120, 9, 96, -1, 0, 0, 19, -1, 15121), + (15123, -1, -1, 15123, 15123, 9, 96, -1, 0, 0, 19, -1, 15124), + (15126, -1, -1, 15126, 15126, 9, 96, -1, 0, 0, 19, -1, 15127), + (15129, 15129, 15129, 15129, 15129, 12, 100, 37196, 32, 180, 19, -1, 15736), + (15130, 15130, 15130, 15130, 15130, 12, 100, 37197, 32, 180, 19, -1, 15737), + (15131, 15131, 15131, 15131, 15131, 12, 100, 37198, 32, 180, 19, -1, 15738), + (15132, -1, -1, 15132, 15132, 9, 96, -1, 0, 0, 19, -1, 15133), + (15135, -1, -1, 15135, 15135, 9, 100, -1, 0, 0, 19, -1, -1), + (15136, 15136, 15136, 15136, 15136, 9, 96, 38001, 5, 120, 19, -1, 17241), + (15140, 13100, 13100, 13100, 13100, 11, 100, 38002, 86, 300, 19, 13100, -1), + (15141, -1, -1, 190, 190, 9, 96, -1, 0, 0, 19, 5040, 15142), + (15146, 15146, 15146, 15146, 15146, 13, 100, 38006, 95, 9, 19, -1, 15758), + (15147, 15147, 15147, 15147, 15147, 11, 96, 38007, 8, 1200, 19, -1, 15148), + (15150, -1, -1, 15150, 15150, 7, 96, -1, 0, 0, 19, -1, 15151), + (15153, -1, -1, 15153, 15153, 11, 100, -1, 0, 0, 19, -1, -1), + (15154, -1, -1, 15154, 15154, 9, 96, -1, 0, 0, 19, -1, -1), + (15155, -1, -1, 15155, 15155, 5, 96, -1, 0, 0, 19, -1, 15156), + (15158, -1, -1, 15158, 15158, 13, 100, -1, 0, 0, 19, -1, -1), + (15159, -1, -1, 15159, 15159, 7, 96, -1, 0, 0, 19, -1, 15160), + (15162, -1, -1, 15162, 15162, 7, 96, -1, 0, 0, 19, -1, 15163), + (15168, -1, -1, 15168, 15168, 9, 96, -1, 0, 0, 19, -1, 15169), + (15172, -1, -1, 210, 210, 12, 100, -1, 0, 0, 19, 7401, 16658), + (15173, 6639, 6639, 6639, 6639, 9, 100, 38012, 42, 300, 19, 6639, 15788), + (15174, -1, -1, 12582, 12582, 9, 96, -1, 0, 0, 19, 12584, 15175), + (15177, 15177, 15177, 15177, 15177, 9, 100, 38013, 94, 180, 19, -1, -1), + (15179, -1, -1, 15179, 15179, 7, 96, -1, 0, 0, 19, -1, 15180), + (15182, -1, -1, 7757, 7757, 5, 96, -1, 0, 0, 19, 12589, 15183), + (15188, -1, -1, 1528, 4819, 5, 96, -1, 0, 0, 19, 4823, 15189), + (15193, 15193, 15193, 15193, 15193, 15, 100, 38016, 92, 600, 19, -1, -1), + (15194, -1, -1, 15194, 15194, 9, 100, -1, 0, 0, 19, -1, -1), + (15200, 15200, 15200, 15200, 15200, 9, 96, 38304, 32, 1080, 19, -1, 15201), + (15203, 15203, 15203, 15203, 15203, 15, 100, 38307, 34, 480, 19, -1, -1), + (15204, -1, -1, 15204, 15204, 9, 96, -1, 0, 0, 19, -1, 15205), + (15207, -1, -1, 15207, 15207, 9, 96, -1, 0, 0, 19, -1, 15208), + (15210, 15210, 15210, 15210, 15210, 9, 96, 38308, 12, 120, 19, -1, 15211), + (15213, 15213, 15213, 15213, 15213, 15, 100, 38312, 42, 1080, 19, -1, 17509), + (15214, 15214, 15214, 15214, 15214, 9, 96, 38313, 43, 1800, 19, -1, 15215), + (15217, -1, -1, 15217, 15217, 11, 96, -1, 0, 0, 19, -1, 15218), + (15220, -1, -1, 15220, 15220, 9, 100, -1, 0, 0, 19, -1, 15221), + (15223, -1, -1, 15223, 15223, 9, 100, -1, 0, 0, 19, -1, 15224), + (15226, -1, -1, 15226, 15226, 9, 100, -1, 0, 0, 19, -1, 15227), + (15229, -1, -1, 15229, 15229, 9, 100, -1, 0, 0, 19, -1, 15230), + (15232, -1, -1, 15232, 15232, 9, 96, -1, 0, 0, 19, -1, 15233), + (15235, 785, 785, 785, 785, 9, 96, 38325, 8, 900, 19, 789, 15236), + (15238, -1, -1, 5276, 5276, 11, 96, -1, 0, 0, 19, 5278, 15239), + (15241, 168, 168, 168, 168, 11, 96, 38329, 4, 10, 19, 170, 15242), + (15244, 171, 171, 171, 171, 11, 96, 38333, 4, 10, 19, 173, 15245), + (15247, 174, 174, 174, 174, 11, 96, 38336, 4, 10, 19, 176, 15248), + (15250, 177, 177, 177, 177, 11, 96, 38340, 4, 10, 19, 179, 15251), + (15253, -1, -1, 15253, 15253, 4, 96, -1, 0, 0, 19, -1, 15254), + (15258, -1, -1, 7743, 7743, 11, 100, -1, 0, 0, 19, 10718, -1), + (15270, -1, -1, 12430, 12430, 15, 100, -1, 0, 0, 19, 12878, -1), + (15280, -1, -1, 10722, 10722, 9, 96, -1, 0, 0, 19, 10726, 15281), + (15283, -1, -1, 15283, 15283, 5, 96, -1, 0, 0, 19, -1, 15284), + (15288, -1, -1, 15288, 15288, 7, 96, -1, 0, 0, 19, -1, 15289), + (15295, -1, -1, 15295, 15295, 7, 96, -1, 0, 0, 19, -1, 15296), + (15298, 10806, 10806, 10806, 10806, 9, 96, 38025, 71, 540, 19, 10808, 15299), + (15301, 10809, 10809, 10809, 10809, 9, 96, 38028, 71, 540, 19, 10811, 15302), + (15304, 15304, 15304, 15304, 15304, 12, 100, 38031, 91, 360, 19, -1, -1), + (15314, 0, 0, 6481, 6481, 11, 96, -1, 0, 0, 19, 6483, 15315), + (15317, -1, -1, 15317, 15317, 9, 96, -1, 0, 0, 19, 5012, 15318), + (15320, -1, -1, 7940, 7940, 11, 100, -1, 0, 0, 19, 6486, -1), + (15321, 746, 746, 746, 746, 9, 96, 38033, 10, 2160, 19, 10024, 15322), + (15328, -1, -1, 7948, 7948, 9, 96, -1, 0, 0, 19, 10037, 15329), + (15338, 15338, 15338, 15338, 15338, 9, 96, 38054, 30, 600, 19, -1, 15339), + (15341, 136, -1, 136, 136, 7, 100, 38057, 7, 1800, 19, 136, -1), + (15342, -1, -1, 15341, 15341, 7, 100, -1, 0, 0, 19, -1, -1), + (15343, 15343, 15343, 15343, 15343, 12, 100, 38058, 21, 300, 19, -1, -1), + (15344, -1, -1, 2400, 2400, 12, 97, -1, 0, 0, 19, 2402, 15345), + (15348, -1, -1, 13001, 13001, 7, 96, -1, 0, 0, 19, 13003, 15349), + (15356, -1, -1, 15356, 15356, 15, 100, -1, 0, 0, 19, -1, 15851), + (15357, 15357, 15357, 15357, 15357, 9, 96, 38062, 95, 2, 19, -1, -1), + (15358, -1, -1, 15358, 15358, 12, 100, -1, 0, 0, 19, -1, -1), + (15359, -1, -1, 474, 474, 5, 96, -1, 0, 0, 19, 476, 15360), + (15362, 15362, 15362, 15362, 15362, 15, 100, 38063, 89, 20, 19, -1, -1), + (15363, -1, -1, 10951, 10951, 12, 97, -1, 0, 0, 19, 10953, 15364), + (15371, -1, -1, 15371, 15371, 7, 96, -1, 0, 0, 19, -1, 15372), + (15374, -1, -1, 15374, 15374, 9, 96, -1, 0, 0, 19, -1, 15375), + (15377, 15377, 15377, 15377, 15377, 15, 100, 38070, 75, 420, 19, -1, 15852), + (15383, -1, -1, 15383, 15383, 9, 96, -1, 0, 0, 19, -1, 15384), + (15389, -1, -1, 15389, 15389, 9, 96, -1, 0, 0, 19, -1, 15390), + (15396, -1, -1, 141, 12863, 12, 100, -1, 0, 0, 19, 12863, -1), + (15397, -1, -1, 6346, 6346, 9, 96, -1, 0, 0, 19, 7617, 15398), + (15403, -1, -1, 15403, 15403, 7, 96, -1, 0, 0, 19, -1, 15404), + (15406, -1, -1, 15406, 15406, 7, 96, -1, 0, 0, 19, -1, 15407), + (15414, -1, -1, 15414, 15414, 9, 100, -1, 0, 0, 19, -1, -1), + (15421, -1, -1, 6538, 6538, 12, 100, -1, 0, 0, 19, 7478, -1), + (15422, -1, -1, 83, 83, 12, 100, -1, 0, 0, 19, 1218, -1), + (15423, 15423, 15423, 15423, 15423, 15, 100, 38078, 52, 180, 19, -1, 15884), + (15424, 15424, 15424, 15424, 15424, 12, 100, 38079, 78, 1200, 19, -1, -1), + (15425, 15425, 15425, 15425, 15425, 15, 100, 38077, 79, 6, 19, -1, 15903), + (15426, -1, -1, 810, 810, 5, 96, -1, 0, 0, 19, 4828, 15427), + (15429, -1, -1, 15429, 15429, 7, 96, -1, 0, 0, 19, -1, 15430), + (15432, -1, -1, 15432, 15432, 7, 96, -1, 0, 0, 19, -1, 15433), + (15438, -1, -1, 15438, 15438, 9, 96, -1, 0, 0, 19, -1, 15439), + (15441, -1, -1, 815, 815, 10, 96, -1, 0, 0, 19, 7636, 15442), + (15444, -1, -1, 15444, 15444, 9, 96, 38080, 0, 0, 19, -1, 15445), + (15447, 15447, 15447, 15447, 15447, 9, 96, 38083, 78, 180, 19, -1, 15448), + (15450, -1, -1, 15450, 15450, 9, 96, -1, 0, 0, 19, -1, 15451), + (15453, -1, -1, 15453, 15453, 9, 96, -1, 0, 0, 19, -1, 15454), + (15456, -1, -1, 15456, 15456, 9, 96, -1, 0, 0, 19, -1, 15457), + (15459, 1245, 1245, 1245, 1245, 9, 96, 38404, 8, 2160, 19, 1247, 15460), + (15462, 8039, 8039, 8039, 38407, 15, 100, 38407, 58, 7, 19, 8039, 17167), + (15466, -1, -1, 10561, 10561, 9, 96, -1, 0, 0, 19, 10563, 15467), + (15469, -1, -1, 10558, 10558, 9, 96, -1, 0, 0, 19, 10560, 15470), + (15472, -1, -1, 8035, 8035, 9, 96, -1, 0, 0, 19, 10287, 15473), + (15475, 15475, 15475, 15475, 15475, 11, 96, 38408, 41, 600, 20, -1, 15476), + (15478, -1, -1, 15478, 15478, 9, 96, -1, 0, 0, 19, -1, 15479), + (15481, 15481, 15481, 15481, 15481, 18, 100, 38603, 53, 1080, 19, -1, -1), + (15482, 15482, 15482, 15482, 15482, 11, 96, 38414, 42, 1800, 19, -1, 15483), + (15485, -1, -1, 15485, 15485, 18, 100, -1, 0, 0, 19, -1, -1), + (15486, 15486, 15486, 15486, 15486, 12, 96, 38418, 43, 600, 19, -1, 15487), + (15489, 15489, 15489, 15489, 15489, 18, 100, 38421, 52, 10, 19, -1, -1), + (15490, 15490, 15490, 15490, 15490, 11, 96, 38422, 44, 10, 19, -1, 15491), + (15493, -1, -1, 15493, 15493, 9, 96, -1, 0, 0, 19, -1, 15494), + (15496, 15496, 15496, 15496, 15496, 11, 96, 38425, 46, 1800, 19, -1, 15497), + (15502, -1, -1, 15502, 15502, 9, 96, -1, 0, 0, 19, -1, 15503), + (15509, -1, -1, 15509, 15509, 9, 96, -1, 0, 0, 19, -1, 15510), + (15512, -1, -1, 15512, 15512, 9, 96, 38086, 0, 0, 19, -1, 15513), + (15515, 15515, 15515, 15515, 15515, 12, 100, 38089, 11, 90, 19, -1, 17417), + (15516, -1, -1, 15516, 15516, 9, 100, -1, 0, 0, 19, -1, 15960), + (15517, -1, -1, 15517, 15517, 7, 96, -1, 0, 0, 19, -1, 15518), + (15521, 15521, 15521, 15521, 15521, 12, 96, 38090, 42, 60, 19, -1, -1), + (15526, -1, -1, 12716, 12716, 7, 96, -1, 0, 0, 19, 12718, 15527), + (15529, -1, -1, 695, 695, 4, 96, -1, 0, 0, 19, 699, 15530), + (15540, -1, -1, 15540, 15540, 7, 96, -1, 0, 0, 19, -1, 15541), + (15543, -1, -1, 15543, 15543, 7, 96, -1, 0, 0, 19, -1, 15544), + (15546, -1, -1, 15546, 15546, 7, 96, -1, 0, 0, 19, -1, 15547), + (15549, -1, -1, 15549, 15549, 7, 96, -1, 0, 0, 19, -1, 15550), + (15552, -1, -1, 6302, 6302, 5, 96, -1, 0, 0, 19, 11013, 15553), + (15555, -1, -1, 15555, 15555, 11, 96, -1, 0, 0, 19, -1, 15556), + (15558, 10400, 10400, 10400, 10400, 9, 100, 38104, 62, 900, 19, 10400, -1), + (15564, -1, -1, 15564, 15564, 9, 96, -1, 0, 0, 19, -1, 15565), + (15567, 15567, 15567, 15567, 15567, 12, 96, 38106, 11, 1200, 19, -1, 15568), + (15569, 15569, 15569, 15569, 15569, 12, 96, 38108, 13, 60, 19, -1, 15991), + (15570, 15570, 15570, 15570, 15570, 15, 100, 38109, 64, 600, 19, -1, 15992), + (15571, -1, -1, 15571, 15571, 7, 96, -1, 0, 0, 19, -1, 15572), + (15574, 15574, 15574, 15574, 15574, 9, 80, 38110, 73, 4, 15, -1, 15575), + (15575, 15574, 15574, 15574, 15574, 9, 85, 38111, 73, 4, 16, 15574, 15576), + (15576, 15574, 15574, 15574, 15574, 9, 90, 38112, 73, 4, 17, 15575, 15577), + (15577, 15574, 15574, 15574, 15574, 9, 95, 38113, 73, 4, 18, 15576, 15578), + (15579, -1, -1, 15579, 15579, 7, 96, -1, 0, 0, 19, -1, 15580), + (15582, 15582, 15582, 15582, 15582, 9, 96, 38115, 34, 600, 19, -1, 15583), + (15585, -1, -1, 634, 634, 11, 96, -1, 0, 0, 19, 10780, 15586), + (15588, 10701, 10701, 10701, 10701, 12, 96, 38121, 32, 360, 19, 12756, 15589), + (15591, -1, -1, 15591, 15591, 5, 96, -1, 0, 0, 19, -1, 15592), + (15594, 15594, 15594, 15594, 15594, 9, 96, 38197, 39, 30, 19, -1, 15595), + (15598, -1, -1, 15598, 15598, 12, 96, -1, 0, 0, 19, -1, 15599), + (15601, 15601, 15601, 15601, 15601, 12, 96, 38131, 34, 6, 19, -1, 16077), + (15602, -1, -1, 15602, 15602, 9, 96, -1, 0, 0, 19, -1, 15603), + (15605, 12866, 12866, 12866, 12866, 15, 96, 38132, 74, 1800, 19, 12866, -1), + (15606, -1, -1, 8069, 8069, 5, 96, -1, 0, 0, 19, 8071, 15607), + (15609, -1, -1, 15609, 15609, 15, 100, -1, 0, 0, 19, -1, -1), + (15611, 15611, 15611, 15611, 15611, 18, 100, 38136, 32, 900, 19, -1, 16078), + (15612, 15612, 15612, 15612, 15612, 12, 96, 38137, 36, 20, 19, -1, 15613), + (15615, 15615, 15615, 15615, 15615, 12, 96, 38140, 44, 20, 19, -1, 15616), + (15619, 15619, 15619, 15619, 15619, 15, 100, 37188, 32, 600, 19, -1, -1), + (15622, -1, -1, 15622, 15622, 7, 96, -1, 0, 0, 19, -1, 15623), + (15625, -1, -1, 15625, 15625, 9, 96, -1, 0, 0, 19, -1, 15626), + (15628, 5022, 5022, 5022, 5022, 9, 96, 38176, 5, 600, 19, 6040, 15629), + (15632, -1, -1, 7005, 7005, 5, 96, -1, 0, 0, 19, 7007, 15633), + (15634, -1, -1, 15634, 15634, 3, 80, -1, 0, 0, 19, -1, 15635), + (15635, -1, -1, 15634, 15634, 5, 85, -1, 0, 0, 19, 15634, 15636), + (15639, 15639, 15639, 15639, 15639, 12, 96, 38183, 56, 60, 19, -1, -1), + (15640, 15640, 15640, 15640, 15640, 12, 100, 38184, 43, 60, 19, -1, -1), + (15642, 15642, 15642, 15642, 15642, 18, 100, 38187, 13, 1440, 19, -1, -1), + (15643, 15643, 15643, 15643, 15643, 9, 96, 38188, 75, 600, 19, -1, 15644), + (15646, 15646, 15646, 15646, 15646, 15, 100, 38194, 74, 60, 19, -1, 17255), + (15648, -1, -1, 15648, 15648, 9, 96, -1, 0, 0, 19, -1, 15649), + (15694, -1, -1, 8215, 8215, 5, 96, -1, 0, 0, 20, 12563, 15695), + (15714, -1, -1, 5263, 5263, 12, 96, -1, 0, 0, 20, 12468, 15715), + (15719, -1, -1, 1287, 1287, 11, 96, -1, 0, 0, 20, 13240, 15720), + (15746, -1, -1, 7033, 7033, 12, 96, 0, 0, 0, 20, 7035, 15747), + (15768, -1, -1, 15768, 15768, 7, 96, -1, 0, 0, 20, -1, 15769), + (15771, 15771, -1, 15771, 15771, 1, 55, 38274, 0, 3, 20, -1, -1), + (15772, -1, -1, 8232, 8232, 8, 100, -1, 0, 0, 20, 8261, -1), + (15773, -1, -1, 8040, 8040, 8, 100, -1, 0, 0, 20, 8313, -1), + (15775, 6508, 6508, 6508, 6508, 9, 96, 38276, 38, 600, 20, 10080, 15776), + (15778, -1, -1, 589, 589, 12, 96, -1, 0, 0, 20, 13106, 15779), + (15782, 7755, 7755, 7755, 7755, 12, 96, 38280, 53, 900, 20, 7755, 16187), + (15798, 15798, 15798, 15798, 15798, 9, 100, 38297, 34, 18, 20, -1, 15799), + (15819, 15819, 15819, 15819, 15819, 18, 100, 40807, 18, 900, 20, -1, -1), + (15833, -1, -1, 15833, 15833, 9, 96, 0, 0, 0, 20, -1, 15834), + (15836, -1, -1, 15836, 15836, 9, 100, 0, 0, 0, 20, -1, 15837), + (15839, 10450, 10450, 10450, 10450, 7, 96, 40817, 63, 900, 20, 10670, 15840), + (15855, 13004, 13004, 13004, 13004, 9, 96, 40832, 78, 300, 20, 13004, -1), + (15891, -1, -1, 11078, 11078, 9, 96, 0, 0, 0, 20, 11078, 15892), + (15893, -1, -1, 11079, 11079, 9, 96, 0, 0, 0, 20, 11079, 15894), + (15895, -1, -1, 11077, 11077, 9, 96, 0, 0, 0, 20, 11077, 15896), + (15904, 15904, 15904, 15904, 15904, 7, 66, 40874, 54, 600, 20, -1, -1), + (15908, -1, -1, 15908, 15908, 3, 80, -1, 0, 0, 20, -1, 15909), + (15909, -1, -1, 15908, 15908, 5, 85, -1, 0, 0, 20, 15908, 15910), + (15910, -1, -1, 15908, 15908, 7, 90, -1, 0, 0, 20, 15909, 15911), + (15954, -1, -1, 10853, 10853, 5, 90, -1, 0, 0, 20, 10864, 15955), + (15961, -1, -1, 12737, 12737, 9, 96, 0, 0, 0, 20, 12739, 15962), + (15988, 10333, 10333, 10333, 10333, 9, 96, 40894, 55, 120, 20, 12726, 15989), + (16016, 16016, 16016, 16016, 16016, 12, 100, 40919, 17, 12, 20, -1, -1), + (16062, -1, -1, 1572, 1572, 5, 96, -1, 0, 0, 20, 10556, 16063), + (16071, 16071, 16071, 16071, 16071, 15, 100, 40953, 46, 1800, 20, -1, 16072), + (16081, 16081, 16081, 16081, 16081, 15, 100, 40969, 55, 6, 20, -1, -1), + (16082, 16082, 16082, 16082, 16082, 3, 100, 40970, 53, 6, 20, -1, -1), + (16083, 16083, 16083, 16083, 16083, 3, 55, 40971, 46, 6, 20, -1, -1), + (16084, -1, -1, 16084, 16084, 9, 100, 0, 0, 0, 20, -1, 16085), + (16087, -1, -1, 16087, 16087, 5, 100, 0, 0, 6, 20, -1, 16088), + (16094, -1, -1, 477, 477, 2, 100, -1, 0, 0, 20, 6235, 16095), + (16096, 16096, 16096, 16096, 16096, 12, 100, 40972, 36, 6, 20, -1, -1), + (16097, 16097, 16097, 16097, 16097, 12, 100, 40973, 38, 600, 20, -1, 16098), + (16103, 16103, 16103, 16103, 16103, 0, 85, 41071, 35, 180, 16, -1, -1), + (16104, -1, -1, 16104, 16104, 5, 85, 0, 0, 0, 20, -1, -1), + (16105, 16105, 16105, 16105, 16105, 0, 85, 41086, 76, 30, 20, -1, -1), + (16106, 16106, 16106, 16106, 16106, 0, 85, 41087, 76, 30, 20, -1, -1), + (16107, 16107, 16107, 16107, 16107, 0, 85, 41088, 76, 30, 20, -1, -1), + (16108, 16108, 16108, 16108, 16108, 12, 100, 41090, 77, 120, 20, -1, -1), + (16109, -1, -1, 16109, 16109, 11, 96, -1, 0, 0, 20, -1, 16110), + (16113, 16113, 16113, 16113, 16113, 15, 100, 41096, 78, 60, 20, -1, -1), + (16114, -1, -1, 16114, 16114, 5, 96, -1, 0, 0, 20, -1, 16115), + (16117, -1, -1, 16117, 16117, 11, 96, -1, 0, 0, 20, -1, 16118), + (16120, -1, -1, 16120, 16120, 9, 105, -1, 0, 0, 21, -1, -1), + (16121, -1, -1, 6611, 6611, 6, 100, -1, 0, 0, 20, 10574, 16122), + (16124, -1, -1, 16124, 16124, 5, 96, -1, 0, 0, 20, -1, 16125), + (16128, -1, -1, 16128, 16128, 6, 96, -1, 0, 0, 20, -1, 16129), + (16131, -1, -1, 16131, 16131, 5, 96, -1, 0, 0, 20, -1, 16132), + (16137, -1, -1, 16137, 16137, 9, 100, -1, 0, 0, 20, -1, 16138), + (16140, -1, -1, 16140, 16140, 9, 100, -1, 0, 0, 20, -1, -1), + (16146, -1, -1, 16146, 16146, 11, 100, -1, 0, 0, 20, -1, 16147), + (16149, -1, -1, 16149, 16149, 9, 100, -1, 0, 0, 20, -1, 16150), + (16152, -1, -1, 16152, 16152, 11, 100, -1, 0, 0, 20, -1, 16153), + (16156, -1, -1, 16156, 16156, 12, 100, -1, 0, 0, 20, -1, 16157), + (16159, -1, -1, 16159, 16159, 15, 100, -1, 0, 0, 20, -1, -1), + (16160, 16160, 16160, 16160, 16160, 18, 100, 41110, 81, 900, 20, -1, -1), + (16162, 16162, 16162, 16162, 16162, 12, 100, 41112, 80, 180, 20, -1, -1), + (16163, 16163, 16163, 16163, 16163, 18, 100, 41113, 63, 180, 20, -1, 16695), + (16164, -1, -1, 6636, 6636, 9, 96, -1, 0, 0, 20, 12531, 16165), + (16170, -1, -1, 5248, 5248, 12, 96, -1, 0, 0, 20, 7358, 16171), + (16173, -1, -1, 5263, 5263, 9, 101, -1, 0, 0, 21, 12465, 16174), + (16176, -1, -1, 16176, 16176, 7, 100, -1, 0, 0, 20, -1, 16177), + (16179, -1, -1, 16179, 16179, 18, 100, 41122, 0, 0, 20, -1, -1), + (16180, -1, -1, 16180, 16180, 7, 96, -1, 0, 0, 20, -1, 16181), + (16185, 16185, 16185, 16185, 16185, 18, 100, 41124, 68, 600, 20, -1, 16729), + (16186, -1, -1, 16186, 16186, 12, 100, 41125, 0, 0, 20, -1, -1), + (16188, 16188, 16188, 16188, 16188, 12, 100, 41126, 58, 180, 20, -1, -1), + (16189, -1, -1, 10915, 10915, 9, 96, -1, 0, 0, 20, 10917, 16190), + (16192, -1, -1, 6641, 6641, 9, 96, -1, 0, 0, 20, 10077, 16193), + (16195, 16195, 16195, 16195, 16195, 15, 100, 41133, 59, 60, 20, -1, -1), + (16196, 16196, 16196, 16196, 16196, 15, 100, 41134, 60, 900, 20, -1, 16665), + (16197, 16197, 16197, 16197, 16197, 12, 96, 41136, 61, 900, 20, -1, 16198), + (16200, 16200, 16200, 16200, 16200, 9, 96, 41139, 63, 900, 20, -1, 16201), + (16203, 16203, 16203, 16203, 16203, 12, 96, 41143, 98, 120, 20, -1, 16204), + (16208, -1, -1, 16208, 16208, 5, 96, -1, 0, 0, 20, -1, 16209), + (16211, -1, -1, 16211, 16211, 7, 100, -1, 0, 0, 20, -1, 16212), + (16214, 10958, 10958, 10958, 16214, 18, 100, 41148, 62, 900, 20, 13000, -1), + (16215, 16215, 16215, 16215, 16215, 9, 96, 41150, 92, 300, 20, -1, 16216), + (16218, -1, -1, 16218, 16218, 7, 96, -1, 0, 0, 20, -1, 16219), + (16221, -1, -1, 16221, 16221, 9, 100, -1, 0, 0, 20, -1, 16223), + (16222, 16222, -1, 16222, 16222, 9, 100, 41153, 88, 30, 20, -1, -1), + (16225, -1, -1, 16225, 16225, 5, 96, -1, 0, 0, 20, -1, 16226), + (16230, -1, -1, 16230, 16230, 5, 96, -1, 0, 0, 20, -1, 16231), + (16235, -1, -1, 16235, 16235, 7, 96, -1, 0, 0, 20, -1, 16236), + (16238, -1, -1, 16238, 16238, 7, 96, -1, 0, 0, 20, -1, 16239), + (16246, 6983, 6983, 6983, 6983, 9, 96, 41157, 66, 720, 20, 6983, 16247), + (16249, -1, -1, 230, 230, 9, 100, -1, 0, 0, 20, 12677, -1), + (16250, 828, 828, 828, 828, 9, 96, 41159, 2, 3600, 20, 830, -1), + (16257, -1, -1, 16257, 16257, 11, 100, 0, 0, 0, 20, -1, 16258), + (16260, -1, -1, 16260, 16260, 11, 100, -1, 0, 0, 20, -1, 16261), + (16263, 16263, 16263, 16263, 16263, 11, 96, 41161, 95, 600, 20, -1, 16264), + (16266, -1, -1, 6560, 6560, 9, 96, -1, 0, 0, 20, 6277, -1), + (16267, -1, -1, 888, 888, 3, 96, -1, 0, 0, 20, 892, 16268), + (16272, -1, -1, 16272, 16272, 9, 96, -1, 0, 0, 20, -1, 16273), + (16276, -1, -1, 16276, 16276, 5, 96, -1, 0, 0, 20, -1, 16277), + (16287, -1, -1, 16287, 16287, 7, 96, -1, 0, 0, 20, -1, 16288), + (16296, 16296, 16296, 16296, 16296, 13, 100, 41168, 60, 30, 20, -1, -1), + (16297, -1, -1, 6337, 6337, 6, 96, -1, 0, 0, 20, 10155, 16298), + (16300, -1, -1, 16300, 16300, 9, 100, -1, 0, 0, 20, -1, 16301), + (16303, -1, -1, 12721, 12721, 9, 96, 0, 0, 0, 20, 12723, 16304), + (16306, -1, -1, 6340, 6340, 6, 96, -1, 0, 0, 20, 7453, -1), + (16310, 16310, 16310, 16310, 16310, 12, 100, 41169, 97, 600, 20, -1, -1), + (16317, -1, -1, 16317, 16317, 5, 100, -1, 0, 0, 20, -1, 16318), + (16324, 6607, 6607, 6607, 16324, 9, 96, 16491, 61, 600, 20, 6609, 16325), + (16327, -1, -1, 6362, 6362, 7, 96, 0, 0, 0, 20, 6366, 16328), + (16330, -1, -1, 16330, 16330, 9, 96, -1, 0, 0, 20, -1, 16331), + (16336, -1, -1, 16336, 16336, 7, 96, -1, 0, 0, 20, -1, 16337), + (16339, -1, -1, 16339, 16339, 7, 96, -1, 0, 0, 20, -1, 16340), + (16342, -1, -1, 16342, 16342, 7, 96, -1, 0, 0, 20, -1, 16343), + (16360, 16360, 16360, 16360, 16360, 9, 100, 41188, 91, 6, 20, -1, -1), + (16361, -1, -1, 9509, 9509, 7, 96, -1, 0, 0, 20, 9515, -1), + (16363, 16363, 16363, 16363, 16363, 12, 96, 41193, 89, 1800, 20, -1, 16364), + (16366, -1, -1, 16366, 16366, 12, 96, -1, 0, 0, 20, -1, 16367), + (16369, 16369, 16369, 16369, 16369, 15, 100, 41196, 98, 12, 20, -1, -1), + (16370, 16370, -1, 16370, 16370, 5, 100, 41197, 98, 12, 20, -1, -1), + (16371, -1, -1, 16371, 16371, 3, 96, -1, 0, 0, 20, -1, 16372), + (16380, -1, -1, 16380, 16380, 5, 96, -1, 0, 0, 20, -1, 16381), + (16386, -1, -1, 16386, 16386, 7, 96, -1, 0, 0, 20, -1, 16387), + (16392, -1, -1, 16392, 16392, 5, 96, -1, 0, 0, 20, -1, 16393), + (16395, 16395, 16395, 16395, 16395, 7, 100, 41305, 93, 10, 20, -1, -1), + (16396, -1, -1, 16396, 16396, 7, 96, -1, 0, 0, 20, -1, 16397), + (16402, -1, -1, 6112, 6112, 5, 96, -1, 0, 0, 20, 12967, 16403), + (16414, -1, -1, 1056, 1056, 5, 101, -1, 0, 0, 21, 7525, 16415), + (16419, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 8447, 16420), + (16420, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 16419, 16421), + (16421, -1, -1, 12636, 12636, 0, 1, -1, 0, 0, 16, 16420, -1), + (16440, -1, -1, 6540, 6540, 10, 101, -1, 0, 0, 21, 12510, 16441), + (16475, -1, -1, 8201, 8201, 9, 101, -1, 0, 0, 21, 8203, 16476), + (16489, -1, -1, 1107, 1107, 9, 101, -1, 0, 0, 21, 12558, 16490), + (16536, -1, -1, 16536, 16536, 5, 101, -1, 0, 0, 21, -1, 16537), + (16604, -1, -1, 849, 849, 11, 105, -1, 0, 0, 21, 10622, -1), + (16644, -1, -1, 16644, 16644, 11, 101, -1, 0, 0, 21, -1, 16645), + (16666, -1, -1, 16666, 16666, 9, 101, -1, 0, 0, 21, -1, 16667), + (16716, 6764, 6764, 6764, 6764, 12, 105, 41308, 52, 600, 21, 10057, -1), + (16730, -1, -1, 1608, 1608, 13, 101, -1, 0, 0, 21, 10069, 16731), + (16745, -1, -1, 16745, 16745, 9, 101, -1, 0, 0, 21, -1, 16746), + (16883, 1119, 1119, 1119, 1119, 12, 101, 41594, 8, 900, 21, 10299, 16884), + (16887, -1, -1, 729, 729, 11, 101, -1, 0, 0, 21, 10307, 16888), + (16890, -1, -1, 724, 724, 15, 101, -1, 0, 0, 21, 7493, 16891), + (17004, -1, -1, 556, 556, 7, 101, -1, 0, 0, 21, 1567, 17005), + (17030, 4857, 4857, 4857, 4857, 15, 101, 41660, 7, 600, 21, 5769, 17031), + (17131, 12785, 12785, 12785, 12785, 15, 105, 41736, 80, 30, 21, 12785, -1), + (17199, 17199, 17199, 17199, 17199, 100, 51, 41819, 31, 2, 21, -1, -1), + (17206, -1, -1, 10588, 10588, 7, 101, 0, 0, 0, 21, 10592, 17207), + (17209, -1, -1, 17209, 17209, 9, 101, -1, 0, 0, 21, -1, 17210), + (17212, -1, -1, 17212, 17212, 12, 101, -1, 0, 0, 21, -1, 17213), + (17215, -1, -1, 17215, 17215, 12, 101, -1, 0, 0, 21, -1, 17216), + (17218, -1, -1, 17218, 17218, 9, 101, -1, 0, 0, 21, -1, 17219), + (17229, -1, -1, 17229, 17229, 9, 101, -1, 0, 0, 21, -1, 17230), + (17235, -1, -1, 17235, 17235, 15, 101, -1, 0, 0, 21, -1, 17236), + (17238, 17238, 17238, 17238, 17238, 24, 105, 41808, 10, 900, 21, -1, -1), + (17239, -1, -1, 6489, 6489, 12, 101, -1, 0, 0, 21, 6491, -1), + (17242, -1, -1, 17242, 17242, 12, 101, -1, 0, 0, 21, -1, 17243), + (17245, -1, -1, 17245, 17245, 12, 101, -1, 0, 0, 21, -1, 17246), + (17248, 17248, 17248, 17248, 17248, 24, 105, 41811, 93, 1080, 21, -1, -1), + (17249, -1, -1, 17249, 17249, 12, 101, -1, 0, 0, 21, -1, 17250), + (17252, -1, -1, 17252, 17252, 9, 101, -1, 0, 0, 21, -1, 17253), + (17256, 17256, 17256, 17256, 17256, 21, 105, 41815, 93, 360, 21, -1, -1), + (17257, 17257, 17257, 17257, 17257, 21, 105, 41816, 98, 300, 21, -1, -1), + (17258, -1, -1, 17258, 17258, 15, 101, 0, 0, 0, 21, -1, 17259), + (17267, -1, -1, 17267, 17267, 9, 101, -1, 0, 0, 21, -1, 17268), + (17273, 17273, 17273, 17273, 17273, 15, 101, 41830, 98, 720, 21, -1, -1), + (17276, 1569, 1569, 1569, 1569, 9, 101, 41831, 5, 1800, 21, 10161, 17277), + (17280, 17280, 17280, 17280, 17280, 21, 105, 41834, 97, 720, 21, -1, -1), + (17281, -1, -1, 17281, 17281, 15, 105, -1, 0, 0, 21, -1, -1), + (17288, -1, -1, 17288, 17288, 9, 105, -1, 0, 0, 21, 7317, -1), + (17289, -1, -1, 17289, 17289, 7, 101, -1, 0, 0, 21, -1, 17290), + (17295, -1, -1, 692, 692, 12, 101, -1, 0, 0, 21, 12769, 17296), + (17298, 749, 749, 749, 749, 15, 105, 41837, 11, 1800, 21, 1208, -1), + (17307, -1, -1, 17307, 17307, 9, 101, -1, 0, 0, 21, -1, 17308), + (17310, -1, -1, 7945, 7945, 9, 105, -1, 0, 0, 21, 10347, -1), + (17311, 970, 970, 970, 970, 9, 101, 41845, 6, 1800, 21, 1326, 17312), + (17317, -1, -1, 17317, 17317, 9, 101, -1, 0, 0, 21, -1, 17318), + (17328, 17328, 17328, 17328, 17328, 21, 105, 41854, 87, 600, 21, -1, -1), + (17329, 17329, 17329, 17329, 17329, 12, 101, 41855, 88, 20, 21, -1, -1), + (17333, 153, 153, 153, 153, 18, 105, 41856, 3, 2160, 21, 12996, -1), + (17334, -1, -1, 12977, 12977, 12, 102, 0, 0, 0, 21, 12981, 17335), + (17336, -1, -1, 17336, 17336, 9, 101, -1, 0, 0, 21, -1, 17337), + (17339, -1, -1, 17339, 17339, 9, 101, -1, 0, 0, 21, -1, 17340), + (17342, 17342, 17342, 17342, 17342, 15, 105, 41857, 85, 60, 21, -1, -1), + (17344, 17344, 17344, 17344, 17344, 15, 101, 41858, 94, 780, 21, -1, 17345), + (17347, 17347, 17347, 17347, 17347, 12, 101, 41861, 32, 30, 21, -1, 17348), + (17350, -1, -1, 7664, 7664, 5, 102, -1, 0, 0, 21, 10109, 17351), + (17357, -1, -1, 17357, 17357, 9, 96, -1, 0, 0, 19, -1, 17358), + (17361, -1, -1, 17361, 17361, 5, 100, -1, 0, 0, 21, -1, 17362), + (17364, 17364, 17364, 17364, 17364, 15, 105, 46160, 87, 120, 21, -1, -1), + (17365, -1, -1, 10792, 10792, 15, 101, 0, 0, 0, 21, 10796, 17366), + (17370, -1, -1, 17370, 17370, 15, 102, 0, 0, 0, 21, -1, 17371), + (17372, 17372, 17372, 17372, 17372, 18, 104, 46161, 85, 300, 21, -1, -1), + (17373, 17373, -1, 17373, 17373, 15, 105, 46162, 98, 900, 21, -1, -1), + (17375, -1, -1, 17375, 17375, 12, 101, -1, 0, 0, 21, -1, 17376), + (17378, 17378, 17378, 17378, 17378, 10, 101, 46164, 97, 3, 21, -1, -1), + (17379, 17378, 17378, 17378, 17378, 10, 101, 46165, 86, 3, 21, -1, -1), + (17380, 17378, 17378, 17378, 17378, 10, 101, 46166, 97, 3, 21, -1, -1), + (17382, 5015, 5015, 5015, 5015, 15, 103, 46168, 9, 900, 21, 10301, -1), + (17384, 17384, 17384, 17384, 17384, 18, 101, 46171, 10, 20, 21, -1, -1), + (17391, -1, -1, 495, 495, 12, 105, -1, 0, 0, 21, 10668, -1), + (17406, -1, -1, 10653, 10653, 12, 103, -1, 0, 0, 21, 10655, -1), + (17409, -1, -1, 17409, 17409, 15, 105, -1, 0, 0, 21, -1, -1), + (17414, -1, -1, 17414, 17414, 9, 101, -1, 0, 0, 21, -1, 17415), + (17418, -1, -1, 17418, 17418, 7, 101, -1, 0, 0, 21, -1, 17419), + (17428, 17428, 17428, 17428, 17428, 15, 101, 46178, 0, 0, 21, -1, 17429), + (17436, -1, -1, 17436, 17436, 7, 101, -1, 0, 0, 21, -1, 17437), + (17439, -1, -1, 17439, 17439, 9, 102, -1, 0, 0, 21, -1, 17440), + (17441, -1, -1, 255, 255, 15, 102, -1, 0, 0, 21, 7633, -1), + (17445, -1, -1, 17445, 17445, 15, 101, 0, 0, 0, 21, -1, 17446), + (17448, -1, -1, 17448, 17448, 15, 102, 0, 0, 0, 21, -1, 17449), + (17476, -1, -1, 10800, 10800, 15, 101, -1, 0, 0, 21, 10802, 17477), + (17486, 12864, -1, 12864, 12864, 12, 105, 46195, 73, 10, 21, 12864, -1), + (17492, -1, -1, 17492, 17492, 9, 101, -1, 0, 0, 21, -1, 17493), + (17495, -1, -1, 17495, 17495, 9, 101, -1, 0, 0, 21, -1, 17496), + (17515, -1, -1, 17515, 17515, 7, 102, -1, 0, 0, 21, -1, 17516), + (17517, -1, -1, 17517, 17517, 9, 101, -1, 0, 0, 21, -1, 17518), + (17522, -1, -1, 17522, 17522, 9, 101, -1, 0, 0, 21, -1, 17523), + (17533, -1, -1, 17533, 17533, 15, 105, -1, 0, 0, 21, -1, -1), + (17534, 6828, 6828, 6828, 6828, 15, 105, 46207, 43, 60, 21, 10208, -1), + (17535, 967, 967, 967, 967, 9, 101, 46208, 10, 1800, 21, 12791, 17536), + (17538, 17538, 17538, 17538, 17538, 21, 105, 46212, 91, 1800, 21, -1, -1), + (17539, 4934, 4934, 4934, 4934, 12, 105, 46214, 13, 300, 21, 10278, -1), + (17540, 4935, 4935, 4935, 4935, 12, 105, 46215, 14, 300, 21, 10277, -1), + (17541, 8038, 8038, 8038, 8038, 12, 105, 46217, 56, 12, 21, 8038, -1), + (17547, -1, -1, 17547, 17547, 12, 102, -1, 0, 0, 21, -1, 17548), + (17549, -1, -1, 17549, 17549, 9, 101, -1, 0, 0, 21, -1, 17550), + (17553, -1, -1, 17553, 17553, 18, 105, -1, 0, 0, 21, -1, -1), + (17554, -1, -1, 17554, 17554, 15, 105, -1, 0, 0, 21, -1, -1), + (17555, -1, -1, 17555, 17555, 5, 101, -1, 0, 0, 21, -1, 17556), + (17558, -1, -1, 17558, 17558, 5, 101, -1, 0, 0, 21, -1, 17559), + (17561, -1, -1, 17561, 17561, 5, 101, -1, 0, 0, 21, -1, 17562), + (17564, -1, -1, 17564, 17564, 5, 101, -1, 0, 0, 21, -1, 17565), + (17567, -1, -1, 17567, 17567, 5, 101, -1, 0, 0, 21, -1, 17568), + (17570, -1, -1, 17570, 17570, 5, 101, -1, 0, 0, 21, -1, 17571), + (17573, -1, -1, 17573, 17573, 5, 101, -1, 0, 0, 21, -1, 17574), + (17576, -1, -1, 17576, 17576, 5, 101, -1, 0, 0, 21, -1, 17577), + (17579, -1, -1, 17579, 17579, 5, 101, -1, 0, 0, 21, -1, 17580), + (17582, -1, -1, 17582, 17582, 5, 101, -1, 0, 0, 21, -1, 17583), + (17585, -1, -1, 17585, 17585, 5, 101, -1, 0, 0, 21, -1, 17586), + (17588, -1, -1, 17588, 17588, 5, 101, -1, 0, 0, 21, -1, 17589), + (17591, -1, -1, 17591, 17591, 5, 101, -1, 0, 0, 21, -1, 17592), + (17594, -1, -1, 17594, 17594, 5, 101, -1, 0, 0, 21, -1, 17595), + (17597, -1, -1, 17597, 17597, 5, 101, -1, 0, 0, 21, -1, 17598), + (17600, -1, -1, 17600, 17600, 5, 101, -1, 0, 0, 21, -1, 17601), + (17603, -1, -1, 17603, 17603, 5, 101, -1, 0, 0, 21, -1, 17604), + (17606, -1, -1, 17606, 17606, 5, 101, -1, 0, 0, 21, -1, 17607), + (17609, -1, -1, 17609, 17609, 5, 101, -1, 0, 0, 21, -1, 17610), + (17612, -1, -1, 17612, 17612, 5, 101, -1, 0, 0, 21, -1, 17613), + (17615, -1, -1, 17615, 17615, 5, 101, -1, 0, 0, 21, -1, 17616), + (17618, -1, -1, 17618, 17618, 5, 101, -1, 0, 0, 21, -1, 17619), + (17621, -1, -1, 17621, 17621, 5, 101, -1, 0, 0, 21, -1, 17622), + (17624, -1, -1, 17624, 17624, 5, 101, -1, 0, 0, 21, -1, 17625), + (17627, -1, -1, 17627, 17627, 5, 101, -1, 0, 0, 21, -1, 17628), + (17630, -1, -1, 17630, 17630, 5, 101, -1, 0, 0, 21, -1, 17631), + (17633, -1, -1, 17633, 17633, 5, 101, -1, 0, 0, 21, -1, 17634), + (17639, -1, -1, 17639, 17639, 9, 91, 0, 0, 0, 18, -1, 17640), + (18972, -1, -1, 279, 279, 15, 105, -1, 0, 0, 21, 279, -1), + (30050, -1, -1, 30050, 30050, 0, 1, -1, 0, 0, 0, -1, 30051), + (30100, -1, -1, 30100, 30100, 0, 1, -1, 0, 0, 0, -1, 30101), + (30150, -1, -1, 30150, 30150, 0, 1, -1, 0, 0, 0, -1, 30151), + (30175, -1, -1, 30175, 30175, 0, 1, -1, 0, 0, 0, -1, 30176), + (30180, -1, -1, 30180, 30180, 0, 1, -1, 0, 0, 0, -1, 30181), + (30185, -1, -1, 30185, 30185, 0, 1, -1, 0, 0, 0, -1, 30186), + (30190, -1, -1, 30190, 30190, 0, 1, -1, 0, 0, 0, -1, 30191), + (30195, -1, -1, 30195, 30195, 0, 1, -1, 0, 0, 0, -1, 30196), + (49999, -1, -1, -1, -1, 0, 71, 0, 0, 0, 0, -1, 1); + +-- Dumping structure for table eqdb.aa_rank_effects +DROP TABLE IF EXISTS `aa_rank_effects`; +CREATE TABLE IF NOT EXISTS `aa_rank_effects` ( + `rank_id` int(10) unsigned NOT NULL, + `slot` int(10) unsigned NOT NULL DEFAULT '1', + `effect_id` int(10) NOT NULL DEFAULT '0', + `base1` int(10) NOT NULL DEFAULT '0', + `base2` int(10) NOT NULL DEFAULT '0', + PRIMARY KEY (`rank_id`,`slot`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO `aa_rank_effects` (`rank_id`, `slot`, `effect_id`, `base1`, `base2`) VALUES + (2, 1, 4, 2, 0), + (3, 1, 4, 4, 0), + (4, 1, 4, 6, 0), + (5, 1, 4, 8, 0), + (6, 1, 4, 10, 0), + (7, 1, 7, 2, 0), + (8, 1, 7, 4, 0), + (9, 1, 7, 6, 0), + (10, 1, 7, 8, 0), + (11, 1, 7, 10, 0), + (12, 1, 6, 2, 0), + (13, 1, 6, 4, 0), + (14, 1, 6, 6, 0), + (15, 1, 6, 8, 0), + (16, 1, 6, 10, 0), + (17, 1, 5, 2, 0), + (18, 1, 5, 4, 0), + (19, 1, 5, 6, 0), + (20, 1, 5, 8, 0), + (21, 1, 5, 10, 0), + (22, 1, 8, 2, 0), + (23, 1, 8, 4, 0), + (24, 1, 8, 6, 0), + (25, 1, 8, 8, 0), + (26, 1, 8, 10, 0), + (27, 1, 9, 2, 0), + (28, 1, 9, 4, 0), + (29, 1, 9, 6, 0), + (30, 1, 9, 8, 0), + (31, 1, 9, 10, 0), + (32, 1, 10, 2, 0), + (33, 1, 10, 4, 0), + (34, 1, 10, 6, 0), + (35, 1, 10, 8, 0), + (36, 1, 10, 10, 0), + (37, 1, 46, 2, 0), + (38, 1, 46, 4, 0), + (39, 1, 46, 6, 0), + (40, 1, 46, 8, 0), + (41, 1, 46, 10, 0), + (42, 1, 47, 2, 0), + (43, 1, 47, 4, 0), + (44, 1, 47, 6, 0), + (45, 1, 47, 8, 0), + (46, 1, 47, 10, 0), + (47, 1, 50, 2, 0), + (48, 1, 50, 4, 0), + (49, 1, 50, 6, 0), + (50, 1, 50, 8, 0), + (51, 1, 50, 10, 0), + (52, 1, 48, 2, 0), + (53, 1, 48, 4, 0), + (54, 1, 48, 6, 0), + (55, 1, 48, 8, 0), + (56, 1, 48, 10, 0), + (57, 1, 49, 2, 0), + (58, 1, 49, 4, 0), + (59, 1, 49, 6, 0), + (60, 1, 49, 8, 0), + (61, 1, 49, 10, 0), + (62, 1, 271, 8, 0), + (63, 1, 271, 14, 0), + (64, 1, 271, 21, 0), + (68, 1, 233, 110, 0), + (69, 1, 233, 125, 0), + (70, 1, 233, 150, 0), + (71, 1, 246, 110, 0), + (72, 1, 246, 125, 0), + (73, 1, 246, 150, 0), + (74, 1, 269, 10, 0), + (75, 1, 269, 20, 0), + (76, 1, 269, 30, 0), + (77, 1, 125, 2, 2), + (77, 2, 137, 0, 0), + (77, 3, 141, 1, 0), + (77, 4, 139, -6233, 0), + (77, 5, 139, -6265, 0), + (77, 6, 125, 2, 2), + (77, 7, 137, 147, 0), + (77, 8, 141, 1, 0), + (78, 1, 125, 5, 5), + (78, 2, 137, 0, 0), + (78, 3, 141, 1, 0), + (78, 4, 139, -6233, 0), + (78, 5, 139, -6265, 0), + (78, 6, 125, 5, 5), + (78, 7, 137, 147, 0), + (78, 8, 141, 1, 0), + (79, 1, 125, 10, 10), + (79, 2, 137, 0, 0), + (79, 3, 141, 1, 0), + (79, 4, 139, -6233, 0), + (79, 5, 139, -6265, 0), + (79, 6, 125, 10, 10), + (79, 7, 137, 147, 0), + (79, 8, 141, 1, 0), + (80, 1, 274, 3, 0), + (81, 1, 274, 6, 0), + (82, 1, 274, 10, 0), + (83, 1, 132, 2, 2), + (84, 1, 132, 5, 5), + (85, 1, 132, 10, 10), + (86, 1, 128, 5, 5), + (86, 2, 138, 1, 0), + (86, 3, 140, 1, 0), + (86, 4, 139, -2741, 0), + (86, 5, 139, -16843, 0), + (86, 6, 385, -16192, 0), + (86, 7, 385, -10547, 0), + (86, 8, 385, -13543, 0), + (87, 1, 128, 15, 15), + (87, 2, 138, 1, 0), + (87, 3, 140, 1, 0), + (87, 4, 139, -2741, 0), + (87, 5, 139, -16843, 0), + (87, 6, 385, -16192, 0), + (87, 7, 385, -10547, 0), + (87, 8, 385, -13543, 0), + (88, 1, 128, 30, 30), + (88, 2, 138, 1, 0), + (88, 3, 140, 1, 0), + (88, 4, 139, -2741, 0), + (88, 5, 139, -16843, 0), + (88, 6, 385, -16192, 0), + (88, 7, 385, -10547, 0), + (88, 8, 385, -13543, 0), + (92, 1, 294, 2, 100), + (93, 1, 294, 4, 100), + (94, 1, 294, 7, 100), + (98, 1, 114, -5, 0), + (99, 1, 114, -10, 0), + (100, 1, 114, -20, 0), + (101, 1, 265, 20, 0), + (102, 1, 265, 40, 0), + (103, 1, 265, 52, 0), + (104, 1, 127, 10, 10), + (104, 2, 138, 1, 0), + (104, 3, 140, 1, 0), + (104, 4, 143, 3000, 0), + (105, 1, 127, 25, 25), + (105, 2, 138, 1, 0), + (105, 3, 140, 1, 0), + (105, 4, 143, 3000, 0), + (106, 1, 127, 50, 50), + (106, 2, 138, 1, 0), + (106, 3, 140, 1, 0), + (106, 4, 143, 3000, 0), + (107, 1, 214, 200, 0), + (108, 1, 214, 500, 0), + (109, 1, 214, 1000, 0), + (110, 1, 0, 1, 0), + (111, 1, 0, 2, 0), + (112, 1, 0, 3, 0), + (113, 1, 169, 15, -1), + (114, 1, 169, 40, -1), + (115, 1, 169, 75, -1), + (116, 1, 181, 5, 0), + (117, 1, 181, 10, 0), + (118, 1, 181, 25, 0), + (119, 1, 278, 500, 16000), + (119, 2, 440, 50, 100), + (120, 1, 278, 510, 17102), + (120, 2, 440, 52, 100), + (121, 1, 278, 520, 19635), + (121, 2, 440, 54, 100), + (122, 1, 259, 2, 0), + (123, 1, 259, 5, 0), + (124, 1, 259, 10, 0), + (125, 1, 172, 2, 0), + (126, 1, 172, 5, 0), + (127, 1, 172, 10, 0), + (137, 1, 127, 10, 10), + (137, 2, 137, 88, 0), + (138, 1, 127, 25, 25), + (138, 2, 137, 88, 0), + (139, 1, 127, 50, 50), + (139, 2, 137, 88, 0), + (141, 1, 127, 2, 2), + (141, 2, 137, 0, 0), + (141, 3, 138, 0, 0), + (141, 4, 141, 1, 0), + (141, 5, 143, 3000, 0), + (141, 6, 127, 2, 2), + (141, 7, 385, 16555, 0), + (141, 8, 385, 16655, 0), + (142, 1, 127, 5, 5), + (142, 2, 137, 0, 0), + (142, 3, 138, 0, 0), + (142, 4, 141, 1, 0), + (142, 5, 143, 3000, 0), + (142, 6, 127, 5, 5), + (142, 7, 385, 16555, 0), + (142, 8, 385, 16655, 0), + (143, 1, 127, 10, 10), + (143, 2, 137, 0, 0), + (143, 3, 138, 0, 0), + (143, 4, 141, 1, 0), + (143, 5, 143, 3000, 0), + (143, 6, 127, 10, 10), + (143, 7, 385, 16555, 0), + (143, 8, 385, 16655, 0), + (144, 1, 244, 50, 0), + (147, 1, 127, 10, 10), + (147, 2, 138, 1, 0), + (147, 3, 140, 1, 0), + (147, 4, 143, 3000, 0), + (148, 1, 127, 25, 25), + (148, 2, 138, 1, 0), + (148, 3, 140, 1, 0), + (148, 4, 143, 3000, 0), + (149, 1, 127, 50, 50), + (149, 2, 138, 1, 0), + (149, 3, 140, 1, 0), + (149, 4, 143, 3000, 0), + (150, 1, 268, 10, 59), + (151, 1, 268, 25, 59), + (152, 1, 268, 50, 59), + (158, 1, 238, 1, 0), + (159, 1, 268, 10, 68), + (160, 1, 268, 25, 68), + (161, 1, 268, 50, 68), + (182, 1, 131, 100, 0), + (182, 2, 137, 33, 0), + (190, 1, 219, 225, 680), + (191, 1, 219, 235, 1190), + (192, 1, 219, 240, 1700), + (195, 1, 181, 100, 0), + (196, 1, 226, 1, 0), + (198, 1, 276, 32, 0), + (199, 1, 301, 30, 0), + (200, 1, 301, 60, 0), + (201, 1, 301, 100, 0), + (205, 1, 251, 100, 0), + (210, 1, 302, 50, 50), + (210, 2, 385, 99, 0), + (211, 1, 302, 100, 100), + (211, 2, 385, 99, 0), + (212, 1, 302, 200, 200), + (212, 2, 385, 99, 0), + (213, 1, 260, 2, 23), + (213, 2, 260, 2, 24), + (213, 3, 260, 2, 25), + (213, 4, 260, 2, 26), + (214, 1, 260, 4, 23), + (214, 2, 260, 4, 24), + (214, 3, 260, 4, 25), + (214, 4, 260, 4, 26), + (215, 1, 260, 6, 23), + (215, 2, 260, 6, 24), + (215, 3, 260, 6, 25), + (215, 4, 260, 6, 26), + (225, 1, 272, 1, 0), + (226, 1, 272, 3, 0), + (227, 1, 272, 5, 0), + (230, 1, 275, 10, 0), + (231, 1, 275, 20, 0), + (232, 1, 275, 30, 0), + (237, 1, 227, 1, 25), + (238, 1, 227, 3, 25), + (239, 1, 227, 5, 25), + (240, 1, 224, 20, 26), + (240, 2, 173, 1, 0), + (241, 1, 224, 35, 26), + (241, 2, 173, 2, 0), + (242, 1, 224, 50, 26), + (242, 2, 173, 3, 0), + (244, 1, 268, 10, 56), + (244, 2, 234, 7500, 0), + (245, 1, 268, 25, 56), + (245, 2, 234, 5000, 0), + (246, 1, 268, 50, 56), + (246, 2, 234, 2500, 0), + (247, 1, 224, 15, 0), + (248, 1, 224, 30, 0), + (249, 1, 224, 50, 0), + (255, 1, 279, 7, 0), + (256, 1, 279, 11, 0), + (257, 1, 279, 15, 0), + (263, 1, 282, 10, 0), + (264, 1, 282, 25, 0), + (265, 1, 282, 50, 0), + (266, 1, 128, 50, 50), + (266, 2, 138, 1, 0), + (266, 3, 140, 1, 0), + (266, 4, 139, -2741, 0), + (266, 5, 139, -16843, 0), + (266, 6, 385, -16192, 0), + (266, 7, 385, -10547, 0), + (266, 8, 385, -13543, 0), + (267, 1, 294, 2, 100), + (268, 1, 294, 4, 100), + (269, 1, 294, 6, 100), + (273, 1, 288, 1000, 21), + (275, 1, 260, 2, 50), + (276, 1, 260, 4, 50), + (277, 1, 260, 6, 50), + (278, 1, 0, 1, 0), + (278, 2, 15, 1, 0), + (279, 1, 214, 200, 0), + (279, 2, 259, 2, 0), + (279, 3, 172, 2, 0), + (280, 1, 227, 1, 62), + (280, 2, 227, 1, 17), + (281, 1, 227, 3, 62), + (281, 2, 227, 3, 17), + (282, 1, 227, 5, 62), + (282, 2, 227, 5, 17), + (283, 1, 228, 10, 0), + (284, 1, 228, 20, 0), + (285, 1, 228, 30, 0), + (286, 1, 10, 0, 0), + (287, 1, 253, 1, 0), + (288, 1, 257, 1, 0), + (288, 2, 267, 1, 31), + (288, 3, 267, 1, 32), + (288, 4, 267, 1, 33), + (288, 5, 267, 1, 15), + (288, 6, 267, 1, 16), + (288, 7, 267, 1, 17), + (288, 8, 267, 1, 18), + (288, 9, 267, 1, 19), + (288, 10, 267, 1, 20), + (292, 1, 4, 12, 0), + (293, 1, 4, 14, 0), + (294, 1, 4, 16, 0), + (295, 1, 4, 18, 0), + (296, 1, 4, 20, 0), + (297, 1, 4, 22, 0), + (298, 1, 4, 24, 0), + (299, 1, 4, 26, 0), + (300, 1, 4, 28, 0), + (301, 1, 4, 30, 0), + (302, 1, 7, 12, 0), + (303, 1, 7, 14, 0), + (304, 1, 7, 16, 0), + (305, 1, 7, 18, 0), + (306, 1, 7, 20, 0), + (307, 1, 7, 22, 0), + (308, 1, 7, 24, 0), + (309, 1, 7, 26, 0), + (310, 1, 7, 28, 0), + (311, 1, 7, 30, 0), + (312, 1, 6, 12, 0), + (313, 1, 6, 14, 0), + (314, 1, 6, 16, 0), + (315, 1, 6, 18, 0), + (316, 1, 6, 20, 0), + (317, 1, 6, 22, 0), + (318, 1, 6, 24, 0), + (319, 1, 6, 26, 0), + (320, 1, 6, 28, 0), + (321, 1, 6, 30, 0), + (322, 1, 5, 12, 0), + (323, 1, 5, 14, 0), + (324, 1, 5, 16, 0), + (325, 1, 5, 18, 0), + (326, 1, 5, 20, 0), + (327, 1, 5, 22, 0), + (328, 1, 5, 24, 0), + (329, 1, 5, 26, 0), + (330, 1, 5, 28, 0), + (331, 1, 5, 30, 0), + (332, 1, 8, 12, 0), + (333, 1, 8, 14, 0), + (334, 1, 8, 16, 0), + (335, 1, 8, 18, 0), + (336, 1, 8, 20, 0), + (337, 1, 8, 22, 0), + (338, 1, 8, 24, 0), + (339, 1, 8, 26, 0), + (340, 1, 8, 28, 0), + (341, 1, 8, 30, 0), + (342, 1, 9, 12, 0), + (343, 1, 9, 14, 0), + (344, 1, 9, 16, 0), + (345, 1, 9, 18, 0), + (346, 1, 9, 20, 0), + (347, 1, 9, 22, 0), + (348, 1, 9, 24, 0), + (349, 1, 9, 26, 0), + (350, 1, 9, 28, 0), + (351, 1, 9, 30, 0), + (352, 1, 10, 12, 0), + (353, 1, 10, 14, 0), + (354, 1, 10, 16, 0), + (355, 1, 10, 18, 0), + (356, 1, 10, 20, 0), + (357, 1, 10, 22, 0), + (358, 1, 10, 24, 0), + (359, 1, 10, 26, 0), + (360, 1, 10, 28, 0), + (361, 1, 10, 30, 0), + (362, 1, 46, 12, 0), + (363, 1, 46, 14, 0), + (364, 1, 46, 16, 0), + (365, 1, 46, 18, 0), + (366, 1, 46, 20, 0), + (367, 1, 46, 22, 0), + (368, 1, 46, 24, 0), + (369, 1, 46, 26, 0), + (370, 1, 46, 28, 0), + (371, 1, 46, 30, 0), + (372, 1, 47, 12, 0), + (373, 1, 47, 14, 0), + (374, 1, 47, 16, 0), + (375, 1, 47, 18, 0), + (376, 1, 47, 20, 0), + (377, 1, 47, 22, 0), + (378, 1, 47, 24, 0), + (379, 1, 47, 26, 0), + (380, 1, 47, 28, 0), + (381, 1, 47, 30, 0), + (382, 1, 50, 12, 0), + (383, 1, 50, 14, 0), + (384, 1, 50, 16, 0), + (385, 1, 50, 18, 0), + (386, 1, 50, 20, 0), + (387, 1, 50, 22, 0), + (388, 1, 50, 24, 0), + (389, 1, 50, 26, 0), + (390, 1, 50, 28, 0), + (391, 1, 50, 30, 0), + (392, 1, 48, 12, 0), + (393, 1, 48, 14, 0), + (394, 1, 48, 16, 0), + (395, 1, 48, 18, 0), + (396, 1, 48, 20, 0), + (397, 1, 48, 22, 0), + (398, 1, 48, 24, 0), + (399, 1, 48, 26, 0), + (400, 1, 48, 28, 0), + (401, 1, 48, 30, 0), + (402, 1, 49, 12, 0), + (403, 1, 49, 14, 0), + (404, 1, 49, 16, 0), + (405, 1, 49, 18, 0), + (406, 1, 49, 20, 0), + (407, 1, 49, 22, 0), + (408, 1, 49, 24, 0), + (409, 1, 49, 26, 0), + (410, 1, 49, 28, 0), + (411, 1, 49, 30, 0), + (412, 1, 263, 1, 0), + (413, 1, 263, 2, 0), + (414, 1, 263, 3, 0), + (415, 1, 263, 4, 0), + (416, 1, 263, 5, 0), + (417, 1, 263, 6, 0), + (418, 1, 262, 5, 0), + (418, 2, 262, 5, 1), + (418, 3, 262, 5, 2), + (418, 4, 262, 5, 3), + (418, 5, 262, 5, 4), + (418, 6, 262, 5, 5), + (418, 7, 262, 5, 6), + (419, 1, 262, 10, 0), + (419, 2, 262, 10, 1), + (419, 3, 262, 10, 2), + (419, 4, 262, 10, 3), + (419, 5, 262, 10, 4), + (419, 6, 262, 10, 5), + (419, 7, 262, 10, 6), + (420, 1, 262, 15, 0), + (420, 2, 262, 15, 1), + (420, 3, 262, 15, 2), + (420, 4, 262, 15, 3), + (420, 5, 262, 15, 4), + (420, 6, 262, 15, 5), + (420, 7, 262, 15, 6), + (421, 1, 262, 20, 0), + (421, 2, 262, 20, 1), + (421, 3, 262, 20, 2), + (421, 4, 262, 20, 3), + (421, 5, 262, 20, 4), + (421, 6, 262, 20, 5), + (421, 7, 262, 20, 6), + (422, 1, 262, 25, 0), + (422, 2, 262, 25, 1), + (422, 3, 262, 25, 2), + (422, 4, 262, 25, 3), + (422, 5, 262, 25, 4), + (422, 6, 262, 25, 5), + (422, 7, 262, 25, 6), + (423, 1, 214, 150, 0), + (424, 1, 214, 300, 0), + (425, 1, 214, 450, 0), + (426, 1, 262, 10, 5), + (426, 2, 262, 10, 4), + (427, 1, 262, 20, 5), + (427, 2, 262, 20, 4), + (428, 1, 262, 30, 5), + (428, 2, 262, 30, 4), + (429, 1, 262, 40, 5), + (429, 2, 262, 40, 4), + (430, 1, 262, 50, 5), + (430, 2, 262, 50, 4), + (434, 1, 125, 13, 13), + (434, 2, 137, 0, 0), + (434, 3, 141, 1, 0), + (434, 4, 139, -6233, 0), + (434, 5, 139, -6265, 0), + (434, 6, 125, 13, 13), + (434, 7, 137, 147, 0), + (434, 8, 141, 1, 0), + (435, 1, 125, 16, 16), + (435, 2, 137, 0, 0), + (435, 3, 141, 1, 0), + (435, 4, 139, -6233, 0), + (435, 5, 139, -6265, 0), + (435, 6, 125, 16, 16), + (435, 7, 137, 147, 0), + (435, 8, 141, 1, 0), + (436, 1, 125, 19, 19), + (436, 2, 137, 0, 0), + (436, 3, 141, 1, 0), + (436, 4, 139, -6233, 0), + (436, 5, 139, -6265, 0), + (436, 6, 125, 19, 19), + (436, 7, 137, 147, 0), + (436, 8, 141, 1, 0), + (437, 1, 274, 12, 0), + (438, 1, 274, 14, 0), + (439, 1, 274, 16, 0), + (440, 1, 278, 530, 21210), + (440, 2, 440, 56, 100), + (441, 1, 278, 540, 23160), + (441, 2, 440, 58, 100), + (442, 1, 278, 550, 25230), + (442, 2, 440, 60, 100), + (443, 1, 169, 100, -1), + (444, 1, 169, 125, -1), + (445, 1, 169, 150, -1), + (446, 1, 265, 54, 0), + (447, 1, 265, 56, 0), + (448, 1, 265, 58, 0), + (449, 1, 172, 13, 0), + (450, 1, 172, 16, 0), + (451, 1, 172, 19, 0), + (452, 1, 172, 22, 0), + (453, 1, 172, 25, 0), + (454, 1, 259, 13, 0), + (455, 1, 259, 16, 0), + (456, 1, 259, 19, 0), + (457, 1, 259, 22, 0), + (458, 1, 259, 25, 0), + (462, 1, 264, 60, 39), + (462, 2, 264, 864, 1061), + (463, 1, 264, 120, 39), + (463, 2, 264, 1728, 1061), + (464, 1, 264, 180, 39), + (464, 2, 264, 2592, 1061), + (468, 1, 264, 180, 41), + (469, 1, 264, 360, 41), + (470, 1, 264, 540, 41), + (471, 1, 264, 864, 57), + (471, 2, 264, 864, 616), + (472, 1, 264, 1728, 57), + (472, 2, 264, 1728, 616), + (473, 1, 264, 2592, 57), + (473, 2, 264, 2592, 616), + (474, 1, 264, 240, 50), + (475, 1, 264, 480, 50), + (476, 1, 264, 720, 50), + (477, 1, 264, 432, 43), + (478, 1, 264, 864, 43), + (479, 1, 264, 1296, 43), + (480, 1, 264, 432, 117), + (481, 1, 264, 864, 117), + (482, 1, 264, 1296, 117), + (483, 1, 264, 540, 58), + (483, 2, 264, 540, 418), + (484, 1, 264, 1080, 58), + (484, 2, 264, 1080, 418), + (485, 1, 264, 1620, 58), + (485, 2, 264, 1620, 418), + (489, 1, 264, 90, 110), + (490, 1, 264, 180, 110), + (491, 1, 264, 270, 110), + (492, 1, 264, 60, 109), + (493, 1, 264, 120, 109), + (494, 1, 264, 180, 109), + (495, 1, 264, 180, 98), + (496, 1, 264, 360, 98), + (497, 1, 264, 540, 98), + (498, 1, 264, 144, 102), + (499, 1, 264, 288, 102), + (500, 1, 264, 432, 102), + (501, 1, 264, 432, 107), + (502, 1, 264, 864, 107), + (503, 1, 264, 1296, 107), + (504, 1, 224, 110, 0), + (505, 1, 224, 120, 0), + (506, 1, 224, 130, 0), + (537, 1, 282, 60, 0), + (538, 1, 282, 75, 0), + (539, 1, 275, 68, 0), + (540, 1, 275, 76, 0), + (541, 1, 275, 84, 0), + (542, 1, 279, 17, 0), + (543, 1, 279, 19, 0), + (544, 1, 279, 21, 0), + (551, 1, 225, 3, 0), + (552, 1, 225, 6, 0), + (553, 1, 225, 9, 0), + (554, 1, 225, 12, 0), + (555, 1, 225, 15, 0), + (556, 1, 225, 3, 0), + (557, 1, 225, 6, 0), + (558, 1, 225, 9, 0), + (559, 1, 225, 12, 0), + (560, 1, 225, 15, 0), + (561, 1, 177, 3, -1), + (562, 1, 177, 6, -1), + (563, 1, 177, 9, -1), + (564, 1, 177, 3, -1), + (565, 1, 177, 6, -1), + (566, 1, 177, 9, -1), + (567, 1, 244, -12, 0), + (574, 1, 281, 25, 0), + (575, 1, 281, 50, 0), + (576, 1, 281, 75, 0), + (577, 1, 277, 20, 0), + (578, 1, 277, 40, 0), + (579, 1, 277, 60, 0), + (580, 1, 267, 1, 4), + (580, 2, 267, 1, 5), + (580, 3, 267, 1, 29), + (581, 1, 267, 1, 2), + (581, 2, 267, 1, 3), + (581, 3, 267, 1, 4), + (581, 4, 267, 1, 5), + (581, 5, 267, 1, 29), + (582, 1, 267, 1, 0), + (582, 2, 267, 1, 1), + (582, 3, 267, 1, 2), + (582, 4, 267, 1, 3), + (582, 5, 267, 1, 4), + (582, 6, 267, 1, 4), + (582, 7, 267, 1, 5), + (582, 8, 267, 1, 6), + (582, 9, 267, 1, 7), + (582, 10, 267, 1, 8), + (582, 11, 267, 1, 9), + (582, 12, 267, 1, 10), + (582, 13, 267, 1, 11), + (582, 14, 267, 1, 12), + (582, 15, 267, 1, 13), + (582, 16, 267, 1, 14), + (582, 17, 267, 1, 28), + (582, 18, 267, 1, 29), + (582, 19, 267, 1, 30), + (583, 1, 264, 7, 73), + (583, 2, 264, 7, 702), + (583, 3, 264, 7, 3826), + (583, 4, 264, 7, 7712), + (584, 1, 264, 14, 73), + (584, 2, 264, 14, 702), + (584, 3, 264, 14, 3826), + (584, 4, 264, 14, 7712), + (585, 1, 264, 21, 73), + (585, 2, 264, 21, 702), + (585, 3, 264, 21, 3826), + (585, 4, 264, 21, 7712), + (586, 1, 255, 12, 0), + (587, 1, 255, 24, 0), + (588, 1, 255, 36, 0), + (589, 1, 303, 500, 500), + (589, 2, 139, 2766, 0), + (590, 1, 303, 1000, 1000), + (590, 2, 139, 2766, 0), + (591, 1, 303, 1500, 1500), + (591, 2, 139, 2766, 0), + (593, 1, 264, 720, 6001), + (593, 2, 264, 720, 3676), + (594, 1, 264, 1440, 6001), + (594, 2, 264, 1440, 3676), + (595, 1, 264, 2160, 6001), + (595, 2, 264, 2160, 3676), + (596, 1, 264, 720, 6000), + (596, 2, 264, 720, 87), + (597, 1, 264, 1440, 6000), + (597, 2, 264, 1440, 87), + (598, 1, 264, 2160, 6000), + (598, 2, 264, 2160, 87), + (599, 1, 266, 2, 0), + (600, 1, 266, 5, 0), + (601, 1, 266, 8, 0), + (602, 1, 266, 2, 0), + (603, 1, 266, 5, 0), + (604, 1, 266, 8, 0), + (605, 1, 256, 1, 0), + (606, 1, 285, 20, 0), + (607, 1, 285, 40, 0), + (608, 1, 285, 60, 0), + (609, 1, 285, 80, 0), + (610, 1, 285, 100, 0), + (611, 1, 283, 20, 0), + (612, 1, 283, 40, 0), + (613, 1, 283, 60, 0), + (614, 1, 283, 80, 0), + (615, 1, 283, 100, 0), + (622, 1, 227, 1, 29), + (622, 2, 227, 1, 42), + (623, 1, 227, 2, 29), + (623, 2, 227, 2, 42), + (624, 1, 227, 3, 29), + (624, 2, 227, 3, 42), + (625, 1, 294, 3, 100), + (626, 1, 294, 6, 100), + (627, 1, 294, 9, 100), + (628, 1, 290, 5, 0), + (629, 1, 290, 10, 0), + (631, 1, 292, 15, 0), + (632, 1, 292, 30, 0), + (633, 1, 292, 45, 0), + (634, 1, 274, 3, 0), + (635, 1, 274, 6, 0), + (636, 1, 274, 10, 0), + (637, 1, 294, 2, 100), + (638, 1, 294, 4, 100), + (639, 1, 294, 6, 100), + (640, 1, 294, 7, 100), + (641, 1, 294, 8, 100), + (642, 1, 294, 9, 100), + (644, 1, 217, 0, 32000), + (644, 2, 346, 59, 0), + (649, 1, 243, 15, 0), + (650, 1, 243, 25, 0), + (651, 1, 243, 35, 0), + (652, 1, 293, 25, 0), + (653, 1, 293, 50, 0), + (654, 1, 293, 75, 0), + (655, 1, 127, 10, 10), + (655, 2, 137, 32, 0), + (655, 3, 127, 10, 10), + (655, 4, 137, 33, 0), + (655, 5, 127, 10, 10), + (655, 6, 137, 82, 0), + (655, 7, 127, 2, 2), + (655, 8, 137, 152, 0), + (655, 9, 143, 3000, 0), + (656, 1, 127, 25, 25), + (656, 2, 137, 32, 0), + (656, 3, 127, 25, 25), + (656, 4, 137, 33, 0), + (656, 5, 127, 25, 25), + (656, 6, 137, 82, 0), + (656, 7, 127, 5, 5), + (656, 8, 137, 152, 0), + (656, 9, 143, 3000, 0), + (657, 1, 127, 50, 50), + (657, 2, 137, 32, 0), + (657, 3, 127, 50, 50), + (657, 4, 137, 33, 0), + (657, 5, 127, 50, 50), + (657, 6, 137, 82, 0), + (657, 7, 127, 10, 10), + (657, 8, 137, 152, 0), + (657, 9, 143, 3000, 0), + (658, 1, 15, 1, 0), + (659, 1, 15, 2, 0), + (660, 1, 15, 3, 0), + (661, 1, 0, 1, 0), + (662, 1, 0, 2, 0), + (663, 1, 0, 3, 0), + (665, 1, 270, 10, 0), + (666, 1, 270, 15, 0), + (667, 1, 270, 25, 0), + (668, 1, 270, 55, 0), + (669, 1, 270, 60, 0), + (670, 1, 270, 65, 0), + (671, 1, 241, 95, 0), + (672, 1, 271, 28, 0), + (673, 1, 271, 35, 0), + (674, 1, 0, 4, 0), + (675, 1, 0, 5, 0), + (676, 1, 246, 325, 0), + (677, 1, 246, 350, 0), + (678, 1, 221, 3, 0), + (679, 1, 221, 6, 0), + (680, 1, 221, 9, 0), + (681, 1, 221, 12, 0), + (682, 1, 221, 15, 0), + (683, 1, 189, 1, 0), + (684, 1, 189, 2, 0), + (685, 1, 189, 3, 0), + (686, 1, 200, 10, 0), + (687, 1, 200, 20, 0), + (688, 1, 200, 30, 0), + (689, 1, 200, 40, 0), + (690, 1, 200, 50, 0), + (691, 1, 248, 100, 0), + (692, 1, 229, 5, 0), + (693, 1, 229, 10, 0), + (694, 1, 229, 15, 0), + (695, 1, 247, 10, 53), + (696, 1, 247, 20, 53), + (697, 1, 247, 30, 53), + (698, 1, 247, 40, 53), + (699, 1, 247, 50, 53), + (700, 1, 260, 8, 23), + (700, 2, 260, 8, 24), + (700, 3, 260, 8, 25), + (700, 4, 260, 8, 26), + (701, 1, 260, 8, 50), + (724, 1, 218, 1, 0), + (725, 1, 218, 2, 0), + (726, 1, 218, 3, 0), + (727, 1, 218, 4, 0), + (728, 1, 218, 5, 0), + (729, 1, 280, 4, 0), + (730, 1, 280, 8, 0), + (731, 1, 280, 12, 0), + (732, 1, 280, 16, 0), + (733, 1, 280, 20, 0), + (734, 1, 237, 1, 0), + (735, 1, 265, 54, 0), + (736, 1, 265, 56, 0), + (737, 1, 265, 58, 0), + (738, 1, 114, -5, 0), + (739, 1, 114, -10, 0), + (740, 1, 114, -20, 0), + (754, 1, 264, 18, 153), + (755, 1, 264, 36, 153), + (756, 1, 264, 54, 153), + (762, 1, 247, 10, 53), + (763, 1, 247, 20, 53), + (764, 1, 247, 30, 53), + (765, 1, 247, 40, 53), + (766, 1, 247, 50, 53), + (767, 1, 273, 3, 0), + (768, 1, 273, 6, 0), + (769, 1, 273, 9, 0), + (770, 1, 294, 7, 100), + (771, 1, 294, 8, 100), + (772, 1, 294, 9, 100), + (776, 1, 242, 10, 0), + (777, 1, 242, 20, 0), + (778, 1, 242, 30, 0), + (779, 1, 242, 40, 0), + (780, 1, 242, 50, 0), + (781, 1, 287, 1, 1), + (781, 2, 137, 31, 0), + (781, 3, 136, 5, 0), + (782, 1, 264, 432, 35), + (783, 1, 264, 864, 35), + (784, 1, 264, 1296, 35), + (790, 1, 218, 1, 0), + (791, 1, 218, 2, 0), + (792, 1, 218, 3, 0), + (793, 1, 218, 4, 0), + (794, 1, 218, 5, 0), + (795, 1, 280, 4, 0), + (796, 1, 280, 8, 0), + (797, 1, 280, 12, 0), + (798, 1, 280, 16, 0), + (799, 1, 280, 20, 0), + (800, 1, 215, 2, 0), + (801, 1, 215, 5, 0), + (802, 1, 215, 10, 0), + (803, 1, 213, 2, 0), + (804, 1, 213, 5, 0), + (805, 1, 213, 10, 0), + (806, 1, 249, 1, 0), + (807, 1, 292, 5, 0), + (808, 1, 292, 10, 0), + (809, 1, 292, 15, 0), + (810, 1, 239, 10, 0), + (811, 1, 239, 20, 0), + (812, 1, 239, 30, 0), + (813, 1, 239, 40, 0), + (814, 1, 239, 50, 0), + (815, 1, 279, 7, 0), + (816, 1, 279, 11, 0), + (817, 1, 279, 15, 0), + (818, 1, 279, 17, 0), + (819, 1, 279, 19, 0), + (820, 1, 220, 10, 26), + (820, 2, 220, 10, 30), + (820, 3, 220, 10, 38), + (821, 1, 220, 20, 26), + (821, 2, 220, 20, 30), + (821, 3, 220, 20, 38), + (822, 1, 220, 30, 26), + (822, 2, 220, 30, 30), + (822, 3, 220, 30, 38), + (823, 1, 222, 20, 0), + (824, 1, 222, 40, 0), + (825, 1, 222, 60, 0), + (826, 1, 222, 80, 0), + (827, 1, 222, 100, 0), + (834, 1, 218, 1, 0), + (835, 1, 218, 2, 0), + (836, 1, 218, 3, 0), + (837, 1, 218, 4, 0), + (838, 1, 218, 5, 0), + (839, 1, 280, 4, 0), + (840, 1, 280, 8, 0), + (841, 1, 280, 12, 0), + (842, 1, 280, 16, 0), + (843, 1, 280, 20, 0), + (844, 1, 274, 12, 0), + (845, 1, 274, 14, 0), + (846, 1, 258, 5, 0), + (847, 1, 258, 10, 0), + (848, 1, 258, 15, 0), + (849, 1, 264, 240, 180), + (850, 1, 264, 480, 180), + (851, 1, 264, 720, 180), + (852, 1, 231, 1, 0), + (853, 1, 231, 2, 0), + (854, 1, 231, 3, 0), + (855, 1, 220, 5, 10), + (856, 1, 220, 10, 10), + (857, 1, 220, 15, 10), + (858, 1, 220, 20, 10), + (859, 1, 220, 25, 10), + (864, 1, 216, 10, 0), + (864, 2, 216, 10, 1), + (864, 3, 216, 10, 2), + (864, 4, 216, 10, 3), + (864, 5, 216, 10, 10), + (864, 6, 216, 10, 28), + (864, 7, 216, 10, 30), + (864, 8, 216, 10, 36), + (864, 9, 216, 10, 77), + (865, 1, 216, 20, 0), + (865, 2, 216, 20, 1), + (865, 3, 216, 20, 2), + (865, 4, 216, 20, 3), + (865, 5, 216, 20, 10), + (865, 6, 216, 20, 28), + (865, 7, 216, 20, 30), + (865, 8, 216, 20, 36), + (865, 9, 216, 20, 77), + (866, 1, 216, 30, 0), + (866, 2, 216, 30, 1), + (866, 3, 216, 30, 2), + (866, 4, 216, 30, 3), + (866, 5, 216, 30, 10), + (866, 6, 216, 30, 28), + (866, 7, 216, 30, 30), + (866, 8, 216, 30, 36), + (866, 9, 216, 30, 77), + (867, 1, 59, -3, 0), + (868, 1, 59, -6, 0), + (869, 1, 59, -9, 0), + (870, 1, 59, -12, 0), + (871, 1, 59, -15, 0), + (878, 1, 252, 10, 0), + (879, 1, 252, 20, 0), + (880, 1, 252, 30, 0), + (881, 1, 245, 10, 0), + (882, 1, 245, 20, 0), + (883, 1, 245, 30, 0), + (884, 1, 245, 40, 0), + (885, 1, 245, 50, 0), + (886, 1, 264, 576, 102), + (887, 1, 264, 720, 102), + (888, 1, 250, 10, 0), + (889, 1, 250, 20, 0), + (890, 1, 250, 30, 0), + (891, 1, 250, 40, 0), + (892, 1, 250, 50, 0), + (893, 1, 303, 2000, 2000), + (893, 2, 139, 2766, 0), + (894, 1, 303, 2500, 2500), + (894, 2, 139, 2766, 0), + (895, 1, 59, -3, 0), + (896, 1, 59, -6, 0), + (897, 1, 59, -9, 0), + (898, 1, 59, -12, 0), + (899, 1, 59, -15, 0), + (907, 1, 69, 100, 0), + (908, 1, 69, 200, 0), + (909, 1, 69, 300, 0), + (910, 1, 69, 400, 0), + (911, 1, 69, 500, 0), + (915, 1, 220, 5, 10), + (915, 2, 220, 5, 30), + (916, 1, 220, 10, 10), + (916, 2, 220, 10, 30), + (917, 1, 220, 15, 10), + (917, 2, 220, 15, 30), + (918, 1, 230, 2, 0), + (919, 1, 230, 4, 0), + (920, 1, 230, 6, 0), + (924, 1, 294, 10, 100), + (925, 1, 294, 11, 100), + (934, 1, 169, 15, -1), + (935, 1, 169, 30, -1), + (936, 1, 169, 60, -1), + (937, 1, 169, 15, 0), + (937, 2, 169, 15, 1), + (937, 3, 169, 15, 2), + (937, 4, 169, 15, 3), + (937, 5, 169, 15, 7), + (937, 6, 169, 15, 8), + (937, 7, 169, 15, 10), + (937, 8, 169, 15, 28), + (937, 9, 169, 15, 30), + (937, 10, 169, 15, 36), + (937, 11, 169, 15, 51), + (938, 1, 169, 40, 0), + (938, 2, 169, 40, 1), + (938, 3, 169, 40, 2), + (938, 4, 169, 40, 3), + (938, 5, 169, 40, 7), + (938, 6, 169, 40, 8), + (938, 7, 169, 40, 10), + (938, 8, 169, 40, 28), + (938, 9, 169, 40, 30), + (938, 10, 169, 40, 36), + (938, 11, 169, 30, 51), + (939, 1, 169, 75, 0), + (939, 2, 169, 75, 1), + (939, 3, 169, 75, 2), + (939, 4, 169, 75, 3), + (939, 5, 169, 75, 7), + (939, 6, 169, 75, 8), + (939, 7, 169, 75, 10), + (939, 8, 169, 75, 28), + (939, 9, 169, 75, 30), + (939, 10, 169, 75, 36), + (939, 11, 169, 60, 51), + (940, 1, 169, 15, 0), + (940, 2, 169, 15, 1), + (940, 3, 169, 15, 2), + (940, 4, 169, 15, 3), + (940, 5, 169, 15, 7), + (940, 6, 169, 15, 8), + (940, 7, 169, 15, 10), + (940, 8, 169, 15, 28), + (940, 9, 169, 15, 30), + (940, 10, 169, 15, 36), + (940, 11, 169, 15, 51), + (940, 12, 169, 15, 77), + (941, 1, 169, 40, 0), + (941, 2, 169, 40, 1), + (941, 3, 169, 40, 2), + (941, 4, 169, 40, 3), + (941, 5, 169, 30, 7), + (941, 6, 169, 40, 8), + (941, 7, 169, 40, 10), + (941, 8, 169, 40, 28), + (941, 9, 169, 40, 30), + (941, 10, 169, 40, 36), + (941, 11, 169, 40, 51), + (941, 12, 169, 40, 77), + (942, 1, 169, 75, 0), + (942, 2, 169, 75, 1), + (942, 3, 169, 75, 2), + (942, 4, 169, 75, 3), + (942, 5, 169, 60, 7), + (942, 6, 169, 75, 8), + (942, 7, 169, 75, 10), + (942, 8, 169, 75, 28), + (942, 9, 169, 75, 30), + (942, 10, 169, 75, 36), + (942, 11, 169, 75, 51), + (942, 12, 169, 75, 77), + (943, 1, 169, 146, -1), + (944, 1, 169, 172, -1), + (945, 1, 169, 198, -1), + (946, 1, 169, 175, 0), + (946, 2, 169, 175, 1), + (946, 3, 169, 175, 2), + (946, 4, 169, 175, 3), + (946, 5, 169, 175, 7), + (946, 6, 169, 175, 8), + (946, 7, 169, 175, 10), + (946, 8, 169, 175, 28), + (946, 9, 169, 175, 30), + (946, 10, 169, 175, 36), + (946, 11, 169, 146, 51), + (947, 1, 169, 200, 0), + (947, 2, 169, 200, 1), + (947, 3, 169, 200, 2), + (947, 4, 169, 200, 3), + (947, 5, 169, 200, 7), + (947, 6, 169, 200, 8), + (947, 7, 169, 200, 10), + (947, 8, 169, 200, 28), + (947, 9, 169, 200, 30), + (947, 10, 169, 200, 36), + (947, 11, 169, 172, 51), + (948, 1, 169, 225, 0), + (948, 2, 169, 225, 1), + (948, 3, 169, 225, 2), + (948, 4, 169, 225, 3), + (948, 5, 169, 225, 7), + (948, 6, 169, 225, 8), + (948, 7, 169, 225, 10), + (948, 8, 169, 225, 28), + (948, 9, 169, 225, 30), + (948, 10, 169, 225, 36), + (948, 11, 169, 198, 51), + (949, 1, 169, 175, 0), + (949, 2, 169, 175, 1), + (949, 3, 169, 175, 2), + (949, 4, 169, 175, 3), + (949, 5, 169, 161, 7), + (949, 6, 169, 175, 8), + (949, 7, 169, 175, 10), + (949, 8, 169, 175, 28), + (949, 9, 169, 175, 30), + (949, 10, 169, 175, 36), + (949, 11, 169, 175, 51), + (949, 12, 169, 175, 77), + (950, 1, 169, 200, 0), + (950, 2, 169, 200, 1), + (950, 3, 169, 200, 2), + (950, 4, 169, 200, 3), + (950, 5, 169, 187, 7), + (950, 6, 169, 200, 8), + (950, 7, 169, 200, 10), + (950, 8, 169, 200, 28), + (950, 9, 169, 200, 30), + (950, 10, 169, 200, 36), + (950, 11, 169, 200, 51), + (950, 12, 169, 200, 77), + (951, 1, 169, 225, 0), + (951, 2, 169, 225, 1), + (951, 3, 169, 225, 2), + (951, 4, 169, 225, 3), + (951, 5, 169, 213, 7), + (951, 6, 169, 225, 8), + (951, 7, 169, 225, 10), + (951, 8, 169, 225, 28), + (951, 9, 169, 225, 30), + (951, 10, 169, 225, 36), + (951, 11, 169, 225, 51), + (951, 12, 169, 225, 77), + (952, 1, 214, 125, 0), + (953, 1, 214, 250, 0), + (954, 1, 214, 375, 0), + (955, 1, 262, 10, 4), + (955, 2, 262, 10, 5), + (956, 1, 262, 20, 4), + (956, 2, 262, 20, 5), + (957, 1, 262, 30, 4), + (957, 2, 262, 30, 5), + (958, 1, 262, 40, 4), + (958, 2, 262, 40, 5), + (959, 1, 262, 50, 4), + (959, 2, 262, 50, 5), + (962, 1, 232, 2, 4544), + (963, 1, 232, 4, 4544), + (964, 1, 232, 6, 4544), + (965, 1, 232, 8, 4544), + (966, 1, 232, 10, 4544), + (975, 1, 264, 864, 102), + (976, 1, 131, 100, 0), + (976, 2, 137, 33, 0), + (978, 1, 14, 1, 0), + (978, 2, 246, 350, 0), + (979, 1, 268, 10, 63), + (980, 1, 268, 25, 63), + (981, 1, 268, 50, 63), + (982, 1, 268, 10, 60), + (983, 1, 268, 25, 60), + (984, 1, 268, 50, 60), + (985, 1, 268, 10, 65), + (986, 1, 268, 25, 65), + (987, 1, 268, 50, 65), + (988, 1, 268, 10, 64), + (989, 1, 268, 25, 64), + (990, 1, 268, 50, 64), + (991, 1, 268, 10, 69), + (992, 1, 268, 25, 69), + (993, 1, 268, 50, 69), + (994, 1, 268, 10, 61), + (995, 1, 268, 25, 61), + (996, 1, 268, 50, 61), + (997, 1, 331, 5, 0), + (998, 1, 331, 15, 0), + (999, 1, 331, 25, 0), + (1001, 1, 262, 30, 0), + (1001, 2, 262, 30, 1), + (1001, 3, 262, 30, 2), + (1001, 4, 262, 30, 3), + (1001, 5, 262, 30, 4), + (1001, 6, 262, 30, 5), + (1001, 7, 262, 30, 6), + (1002, 1, 262, 35, 0), + (1002, 2, 262, 35, 1), + (1002, 3, 262, 35, 2), + (1002, 4, 262, 35, 3), + (1002, 5, 262, 35, 4), + (1002, 6, 262, 35, 5), + (1002, 7, 262, 35, 6), + (1003, 1, 262, 40, 0), + (1003, 2, 262, 40, 1), + (1003, 3, 262, 40, 2), + (1003, 4, 262, 40, 3), + (1003, 5, 262, 40, 4), + (1003, 6, 262, 40, 5), + (1003, 7, 262, 40, 6), + (1004, 1, 262, 45, 0), + (1004, 2, 262, 45, 1), + (1004, 3, 262, 45, 2), + (1004, 4, 262, 45, 3), + (1004, 5, 262, 45, 4), + (1004, 6, 262, 45, 5), + (1004, 7, 262, 45, 6), + (1005, 1, 262, 50, 0), + (1005, 2, 262, 50, 1), + (1005, 3, 262, 50, 2), + (1005, 4, 262, 50, 3), + (1005, 5, 262, 50, 4), + (1005, 6, 262, 50, 5), + (1005, 7, 262, 50, 6), + (1006, 1, 262, 5, 7), + (1006, 2, 262, 5, 8), + (1006, 3, 262, 5, 9), + (1006, 4, 262, 5, 10), + (1006, 5, 262, 5, 11), + (1007, 1, 262, 10, 7), + (1007, 2, 262, 10, 8), + (1007, 3, 262, 10, 9), + (1007, 4, 262, 10, 10), + (1007, 5, 262, 10, 11), + (1008, 1, 262, 15, 7), + (1008, 2, 262, 15, 8), + (1008, 3, 262, 15, 9), + (1008, 4, 262, 15, 10), + (1008, 5, 262, 15, 11), + (1009, 1, 262, 20, 7), + (1009, 2, 262, 20, 8), + (1009, 3, 262, 20, 9), + (1009, 4, 262, 20, 10), + (1009, 5, 262, 20, 11), + (1010, 1, 262, 25, 7), + (1010, 2, 262, 25, 8), + (1010, 3, 262, 25, 9), + (1010, 4, 262, 25, 10), + (1010, 5, 262, 25, 11), + (1011, 1, 262, 8, 7), + (1011, 2, 262, 8, 8), + (1011, 3, 262, 8, 9), + (1011, 4, 262, 8, 10), + (1011, 5, 262, 8, 11), + (1012, 1, 262, 16, 7), + (1012, 2, 262, 16, 8), + (1012, 3, 262, 16, 9), + (1012, 4, 262, 16, 10), + (1012, 5, 262, 16, 11), + (1013, 1, 262, 24, 7), + (1013, 2, 262, 24, 8), + (1013, 3, 262, 24, 9), + (1013, 4, 262, 24, 10), + (1013, 5, 262, 24, 11), + (1014, 1, 262, 32, 7), + (1014, 2, 262, 32, 8), + (1014, 3, 262, 32, 9), + (1014, 4, 262, 32, 10), + (1014, 5, 262, 32, 11), + (1016, 1, 262, 50, 7), + (1016, 2, 262, 50, 8), + (1016, 3, 262, 50, 9), + (1016, 4, 262, 50, 10), + (1016, 5, 262, 50, 11), + (1021, 1, 327, 1, 0), + (1022, 1, 327, 2, 0), + (1023, 1, 327, 3, 0), + (1024, 1, 327, 4, 0), + (1025, 1, 327, 5, 0), + (1026, 1, 328, 50, 0), + (1027, 1, 328, 100, 0), + (1028, 1, 328, 150, 0), + (1029, 1, 328, 200, 0), + (1030, 1, 328, 250, 0), + (1031, 1, 0, 6, 0), + (1032, 1, 0, 7, 0), + (1033, 1, 0, 8, 0), + (1034, 1, 0, 9, 0), + (1035, 1, 0, 10, 0), + (1036, 1, 189, 4, 0), + (1037, 1, 189, 5, 0), + (1038, 1, 189, 6, 0), + (1041, 1, 330, 25, 0), + (1041, 2, 330, 25, 1), + (1041, 3, 330, 25, 2), + (1041, 4, 330, 25, 3), + (1041, 5, 330, 25, 28), + (1041, 6, 330, 25, 36), + (1041, 7, 330, 25, 77), + (1042, 1, 330, 50, 0), + (1042, 2, 330, 50, 1), + (1042, 3, 330, 50, 2), + (1042, 4, 330, 50, 3), + (1042, 5, 330, 50, 28), + (1042, 6, 330, 50, 36), + (1042, 7, 330, 50, 77), + (1043, 1, 330, 75, 0), + (1043, 2, 330, 75, 1), + (1043, 3, 330, 75, 2), + (1043, 4, 330, 75, 3), + (1043, 5, 330, 75, 28), + (1043, 6, 330, 75, 36), + (1043, 7, 330, 75, 77), + (1044, 1, 330, 25, 0), + (1044, 2, 330, 25, 1), + (1044, 3, 330, 25, 2), + (1044, 4, 330, 25, 3), + (1044, 5, 330, 25, 28), + (1044, 6, 330, 25, 36), + (1045, 1, 330, 50, 0), + (1045, 2, 330, 50, 1), + (1045, 3, 330, 50, 2), + (1045, 4, 330, 50, 3), + (1045, 5, 330, 50, 28), + (1045, 6, 330, 50, 36), + (1046, 1, 330, 75, 0), + (1046, 2, 330, 75, 1), + (1046, 3, 330, 75, 2), + (1046, 4, 330, 75, 3), + (1046, 5, 330, 75, 28), + (1046, 6, 330, 75, 36), + (1047, 1, 330, 25, 0), + (1047, 2, 330, 25, 1), + (1047, 3, 330, 25, 2), + (1047, 4, 330, 25, 3), + (1047, 5, 330, 25, 28), + (1047, 6, 330, 25, 36), + (1047, 7, 330, 25, 77), + (1048, 1, 330, 50, 0), + (1048, 2, 330, 50, 1), + (1048, 3, 330, 50, 2), + (1048, 4, 330, 50, 3), + (1048, 5, 330, 50, 28), + (1048, 6, 330, 50, 36), + (1048, 7, 330, 50, 77), + (1049, 1, 330, 75, 0), + (1049, 2, 330, 75, 1), + (1049, 3, 330, 75, 2), + (1049, 4, 330, 75, 3), + (1049, 5, 330, 75, 28), + (1049, 6, 330, 75, 36), + (1049, 7, 330, 75, 77), + (1050, 1, 330, 15, 0), + (1050, 2, 330, 15, 1), + (1050, 3, 330, 15, 2), + (1050, 4, 330, 15, 3), + (1050, 5, 330, 15, 28), + (1050, 6, 330, 15, 36), + (1050, 7, 330, 15, 77), + (1051, 1, 330, 30, 0), + (1051, 2, 330, 30, 1), + (1051, 3, 330, 30, 2), + (1051, 4, 330, 30, 3), + (1051, 5, 330, 30, 28), + (1051, 6, 330, 30, 36), + (1051, 7, 330, 30, 77), + (1052, 1, 330, 50, 0), + (1052, 2, 330, 50, 1), + (1052, 3, 330, 50, 2), + (1052, 4, 330, 50, 3), + (1052, 5, 330, 50, 28), + (1052, 6, 330, 50, 36), + (1052, 7, 330, 50, 77), + (1053, 1, 278, 560, 27200), + (1053, 2, 440, 61, 100), + (1054, 1, 278, 580, 30135), + (1054, 2, 440, 63, 100), + (1055, 1, 278, 600, 32780), + (1055, 2, 440, 65, 100), + (1056, 1, 317, 1, 0), + (1057, 1, 317, 2, 0), + (1058, 1, 317, 3, 0), + (1059, 1, 317, 4, 0), + (1060, 1, 317, 5, 0), + (1061, 1, 172, 26, 0), + (1062, 1, 172, 27, 0), + (1063, 1, 172, 28, 0), + (1064, 1, 172, 30, 0), + (1065, 1, 172, 32, 0), + (1066, 1, 259, 27, 0), + (1067, 1, 259, 29, 0), + (1068, 1, 259, 31, 0), + (1069, 1, 259, 33, 0), + (1070, 1, 259, 35, 0), + (1071, 1, 326, 1, 0), + (1072, 1, 318, 1, 0), + (1073, 1, 318, 2, 0), + (1074, 1, 318, 3, 0), + (1075, 1, 318, 4, 0), + (1076, 1, 318, 5, 0), + (1083, 1, 125, 22, 22), + (1083, 2, 137, 0, 0), + (1083, 3, 141, 1, 0), + (1083, 4, 139, -6233, 0), + (1083, 5, 139, -6265, 0), + (1083, 6, 125, 22, 22), + (1083, 7, 137, 147, 0), + (1083, 8, 141, 1, 0), + (1084, 1, 125, 25, 25), + (1084, 2, 137, 0, 0), + (1084, 3, 141, 1, 0), + (1084, 4, 139, -6233, 0), + (1084, 5, 139, -6265, 0), + (1084, 6, 125, 25, 25), + (1084, 7, 137, 147, 0), + (1084, 8, 141, 1, 0), + (1085, 1, 125, 28, 28), + (1085, 2, 137, 0, 0), + (1085, 3, 141, 1, 0), + (1085, 4, 139, -6233, 0), + (1085, 5, 139, -6265, 0), + (1085, 6, 125, 28, 28), + (1085, 7, 137, 147, 0), + (1085, 8, 141, 1, 0), + (1086, 1, 274, 18, 0), + (1087, 1, 274, 20, 0), + (1088, 1, 274, 22, 0), + (1089, 1, 268, 10, 58), + (1090, 1, 268, 25, 58), + (1091, 1, 268, 50, 58), + (1092, 1, 238, 1, 0), + (1093, 1, 304, -20, 0), + (1094, 1, 304, -40, 0), + (1095, 1, 304, -60, 0), + (1096, 1, 304, -80, 0), + (1097, 1, 304, -100, 0), + (1099, 1, 273, 12, 0), + (1100, 1, 273, 15, 0), + (1101, 1, 273, 18, 0), + (1107, 1, 294, 2, 100), + (1108, 1, 294, 4, 100), + (1109, 1, 294, 6, 100), + (1113, 1, 331, 30, 0), + (1114, 1, 331, 35, 0), + (1115, 1, 331, 40, 0), + (1122, 1, 308, 1, 0), + (1129, 1, 267, 1, 24), + (1129, 2, 267, 1, 25), + (1129, 3, 267, 1, 26), + (1130, 1, 267, 1, 18), + (1130, 2, 267, 1, 19), + (1130, 3, 267, 1, 20), + (1130, 4, 267, 1, 21), + (1130, 5, 267, 1, 22), + (1130, 6, 267, 1, 23), + (1130, 7, 267, 1, 24), + (1130, 8, 267, 1, 25), + (1130, 9, 267, 1, 26), + (1131, 1, 185, 10, 51), + (1132, 1, 185, 20, 51), + (1133, 1, 185, 30, 51), + (1134, 1, 220, 32, 74), + (1135, 1, 220, 64, 74), + (1136, 1, 220, 96, 74), + (1137, 1, 310, 180000, 0), + (1137, 2, 139, 5027, 0), + (1137, 3, 310, 180000, 0), + (1137, 4, 139, 5028, 0), + (1137, 5, 310, 180000, 0), + (1137, 6, 139, 5029, 0), + (1137, 7, 310, 180000, 0), + (1137, 8, 139, 5030, 0), + (1137, 9, 310, 180000, 0), + (1137, 10, 139, 5031, 0), + (1137, 11, 310, 180000, 0), + (1137, 12, 139, 5032, 0), + (1137, 13, 310, 180000, 0), + (1137, 14, 139, 8476, 0), + (1138, 1, 310, 360000, 0), + (1138, 2, 139, 5027, 0), + (1138, 3, 310, 360000, 0), + (1138, 4, 139, 5028, 0), + (1138, 5, 310, 360000, 0), + (1138, 6, 139, 5029, 0), + (1138, 7, 310, 360000, 0), + (1138, 8, 139, 5030, 0), + (1138, 9, 310, 360000, 0), + (1138, 10, 139, 5031, 0), + (1138, 11, 310, 360000, 0), + (1138, 12, 139, 5032, 0), + (1138, 13, 310, 360000, 0), + (1138, 14, 139, 8476, 0), + (1139, 1, 310, 540000, 0), + (1139, 2, 139, 5027, 0), + (1139, 3, 310, 540000, 0), + (1139, 4, 139, 5028, 0), + (1139, 5, 310, 540000, 0), + (1139, 6, 139, 5029, 0), + (1139, 7, 310, 540000, 0), + (1139, 8, 139, 5030, 0), + (1139, 9, 310, 540000, 0), + (1139, 10, 139, 5031, 0), + (1139, 11, 310, 540000, 0), + (1139, 12, 139, 5032, 0), + (1139, 13, 310, 540000, 0), + (1139, 14, 139, 8476, 0), + (1140, 1, 216, 10, 51), + (1141, 1, 216, 20, 51), + (1142, 1, 216, 30, 51), + (1155, 1, 128, 25, 0), + (1155, 2, 139, 5027, 0), + (1155, 3, 128, 25, 0), + (1155, 4, 139, 5028, 0), + (1155, 5, 128, 25, 0), + (1155, 6, 139, 5029, 0), + (1155, 7, 128, 25, 0), + (1155, 8, 139, 5030, 0), + (1155, 9, 128, 25, 0), + (1155, 10, 139, 5031, 0), + (1155, 11, 128, 25, 0), + (1155, 12, 139, 5032, 0), + (1155, 13, 128, 25, 0), + (1155, 14, 139, 8476, 0), + (1156, 1, 128, 50, 0), + (1156, 2, 139, 5027, 0), + (1156, 3, 128, 50, 0), + (1156, 4, 139, 5028, 0), + (1156, 5, 128, 50, 0), + (1156, 6, 139, 5029, 0), + (1156, 7, 128, 50, 0), + (1156, 8, 139, 5030, 0), + (1156, 9, 128, 50, 0), + (1156, 10, 139, 5031, 0), + (1156, 11, 128, 50, 0), + (1156, 12, 139, 5032, 0), + (1156, 13, 128, 50, 0), + (1156, 14, 139, 8476, 0), + (1157, 1, 128, 100, 0), + (1157, 2, 139, 5027, 0), + (1157, 3, 128, 100, 0), + (1157, 4, 139, 5028, 0), + (1157, 5, 128, 100, 0), + (1157, 6, 139, 5029, 0), + (1157, 7, 128, 100, 0), + (1157, 8, 139, 5030, 0), + (1157, 9, 128, 100, 0), + (1157, 10, 139, 5031, 0), + (1157, 11, 128, 100, 0), + (1157, 12, 139, 5032, 0), + (1157, 13, 128, 100, 0), + (1157, 14, 139, 8476, 0), + (1158, 1, 220, 128, 74), + (1159, 1, 220, 160, 74), + (1160, 1, 220, 192, 74), + (1161, 1, 220, 224, 74), + (1162, 1, 220, 256, 74), + (1163, 1, 279, 23, 0), + (1164, 1, 279, 25, 0), + (1165, 1, 279, 27, 0), + (1166, 1, 224, 20, 74), + (1166, 2, 173, 1, 0), + (1167, 1, 224, 35, 74), + (1167, 2, 173, 1, 0), + (1168, 1, 224, 50, 74), + (1168, 2, 173, 2, 0), + (1172, 1, 292, 50, 0), + (1173, 1, 292, 55, 0), + (1174, 1, 292, 60, 0), + (1181, 1, 305, -20, 0), + (1182, 1, 305, -40, 0), + (1183, 1, 305, -60, 0), + (1184, 1, 305, -80, 0), + (1185, 1, 305, -100, 0), + (1186, 1, 319, 3, 0), + (1187, 1, 319, 6, 0), + (1188, 1, 319, 10, 0), + (1196, 1, 220, 20, 7), + (1197, 1, 220, 40, 7), + (1198, 1, 220, 60, 7), + (1199, 1, 220, 80, 7), + (1200, 1, 220, 100, 7), + (1210, 1, 294, 0, 107), + (1211, 1, 294, 0, 115), + (1212, 1, 294, 0, 125), + (1213, 1, 294, 0, 107), + (1214, 1, 294, 0, 115), + (1215, 1, 294, 0, 125), + (1216, 1, 132, 2, 2), + (1217, 1, 132, 5, 5), + (1218, 1, 132, 10, 10), + (1219, 1, 339, 3, 8105), + (1219, 2, 142, 65, 0), + (1219, 3, 311, 0, 0), + (1219, 4, 134, 70, 0), + (1219, 5, 348, 10, 0), + (1219, 6, 137, 0, 0), + (1219, 7, 339, 3, 8105), + (1219, 8, 142, 65, 0), + (1219, 9, 311, 0, 0), + (1219, 10, 134, 70, 0), + (1219, 11, 348, 10, 0), + (1219, 12, 137, 100, 0), + (1219, 13, 339, 3, 8105), + (1219, 14, 142, 65, 0), + (1219, 15, 311, 0, 0), + (1219, 16, 134, 70, 0), + (1219, 17, 348, 10, 0), + (1219, 18, 137, 79, 0), + (1219, 19, 339, 3, 8105), + (1219, 20, 142, 65, 0), + (1219, 21, 311, 0, 0), + (1219, 22, 134, 70, 0), + (1219, 23, 348, 10, 0), + (1219, 24, 137, 147, 0), + (1220, 1, 339, 6, 8105), + (1220, 2, 142, 65, 0), + (1220, 3, 311, 0, 0), + (1220, 4, 134, 70, 0), + (1220, 5, 348, 10, 0), + (1220, 6, 137, 0, 0), + (1220, 7, 339, 6, 8105), + (1220, 8, 142, 65, 0), + (1220, 9, 311, 0, 0), + (1220, 10, 134, 70, 0), + (1220, 11, 348, 10, 0), + (1220, 12, 137, 100, 0), + (1220, 13, 339, 6, 8105), + (1220, 14, 142, 65, 0), + (1220, 15, 311, 0, 0), + (1220, 16, 134, 70, 0), + (1220, 17, 348, 10, 0), + (1220, 18, 137, 79, 0), + (1220, 19, 339, 6, 8105), + (1220, 20, 142, 65, 0), + (1220, 21, 311, 0, 0), + (1220, 22, 134, 70, 0), + (1220, 23, 348, 10, 0), + (1220, 24, 137, 147, 0), + (1221, 1, 339, 10, 8105), + (1221, 2, 142, 65, 0), + (1221, 3, 311, 0, 0), + (1221, 4, 134, 70, 0), + (1221, 5, 348, 10, 0), + (1221, 6, 137, 0, 0), + (1221, 7, 339, 10, 8105), + (1221, 8, 142, 65, 0), + (1221, 9, 311, 0, 0), + (1221, 10, 134, 70, 0), + (1221, 11, 348, 10, 0), + (1221, 12, 137, 100, 0), + (1221, 13, 339, 10, 8105), + (1221, 14, 142, 65, 0), + (1221, 15, 311, 0, 0), + (1221, 16, 134, 70, 0), + (1221, 17, 348, 10, 0), + (1221, 18, 137, 79, 0), + (1221, 19, 339, 10, 8105), + (1221, 20, 142, 65, 0), + (1221, 21, 311, 0, 0), + (1221, 22, 134, 70, 0), + (1221, 23, 348, 10, 0), + (1221, 24, 137, 147, 0), + (1230, 1, 313, 25, 0), + (1231, 1, 313, 50, 0), + (1232, 1, 313, 75, 0), + (1265, 1, 220, 40, 26), + (1265, 2, 220, 40, 30), + (1265, 3, 220, 40, 38), + (1266, 1, 220, 50, 26), + (1266, 2, 220, 50, 30), + (1266, 3, 220, 50, 38), + (1267, 1, 220, 60, 26), + (1267, 2, 220, 60, 30), + (1267, 3, 220, 60, 38), + (1268, 1, 292, 20, 0), + (1269, 1, 292, 25, 0), + (1270, 1, 292, 30, 0), + (1284, 1, 293, 15, 0), + (1285, 1, 293, 30, 0), + (1286, 1, 293, 50, 0), + (1287, 1, 320, 1, 0), + (1288, 1, 320, 3, 0), + (1289, 1, 320, 5, 0), + (1290, 1, 216, 40, 0), + (1290, 2, 216, 40, 1), + (1290, 3, 216, 40, 2), + (1290, 4, 216, 40, 3), + (1290, 5, 216, 40, 10), + (1290, 6, 216, 40, 28), + (1290, 7, 216, 40, 30), + (1290, 8, 216, 40, 36), + (1290, 9, 216, 40, 77), + (1291, 1, 216, 50, 0), + (1291, 2, 216, 50, 1), + (1291, 3, 216, 50, 2), + (1291, 4, 216, 50, 3), + (1291, 5, 216, 50, 10), + (1291, 6, 216, 50, 28), + (1291, 7, 216, 50, 30), + (1291, 8, 216, 50, 36), + (1291, 9, 216, 50, 77), + (1292, 1, 216, 60, 0), + (1292, 2, 216, 60, 1), + (1292, 3, 216, 60, 2), + (1292, 4, 216, 60, 3), + (1292, 5, 216, 60, 10), + (1292, 6, 216, 60, 28), + (1292, 7, 216, 60, 30), + (1292, 8, 216, 60, 36), + (1292, 9, 216, 60, 77), + (1296, 1, 247, 20, 53), + (1297, 1, 247, 40, 53), + (1298, 1, 247, 60, 53), + (1299, 1, 247, 80, 53), + (1300, 1, 247, 100, 53), + (1301, 1, 258, 20, 0), + (1302, 1, 258, 25, 0), + (1303, 1, 258, 30, 0), + (1304, 1, 216, 50, 8), + (1305, 1, 216, 100, 8), + (1306, 1, 216, 150, 8), + (1307, 1, 325, 10, 0), + (1308, 1, 325, 20, 0), + (1309, 1, 325, 30, 0), + (1310, 1, 325, 40, 0), + (1311, 1, 325, 50, 0), + (1313, 1, 85, 6037, 0), + (1314, 1, 85, 6038, 0), + (1315, 1, 85, 6039, 0), + (1316, 1, 302, 216, 216), + (1316, 2, 385, 99, 0), + (1317, 1, 302, 233, 233), + (1317, 2, 385, 99, 0), + (1318, 1, 302, 250, 250), + (1318, 2, 385, 99, 0), + (1319, 1, 274, 16, 0), + (1320, 1, 274, 18, 0), + (1321, 1, 274, 20, 0), + (1361, 1, 159, 10, 0), + (1361, 2, 262, 10, 0), + (1361, 3, 262, 10, 1), + (1361, 4, 262, 10, 2), + (1361, 5, 262, 10, 3), + (1361, 6, 262, 10, 4), + (1361, 7, 262, 10, 5), + (1361, 8, 262, 10, 6), + (1362, 1, 214, 300, 0), + (1362, 2, 97, 200, 0), + (1362, 3, 190, 200, 0), + (1363, 1, 327, 1, 0), + (1364, 1, 273, 1, 0), + (1364, 2, 274, 1, 0), + (1364, 3, 294, 1, 100), + (1364, 4, 169, 40, 0), + (1364, 5, 169, 40, 1), + (1364, 6, 169, 40, 2), + (1364, 7, 169, 40, 3), + (1364, 8, 169, 40, 8), + (1364, 9, 169, 40, 10), + (1364, 10, 169, 40, 26), + (1364, 11, 169, 40, 28), + (1364, 12, 169, 40, 30), + (1364, 13, 169, 40, 36), + (1364, 14, 169, 40, 74), + (1365, 1, 180, 2, 0), + (1366, 1, 159, 10, 0), + (1366, 2, 262, 10, 0), + (1366, 3, 262, 10, 1), + (1366, 4, 262, 10, 2), + (1366, 5, 262, 10, 3), + (1366, 6, 262, 10, 4), + (1366, 7, 262, 10, 5), + (1366, 8, 262, 10, 6), + (1367, 1, 214, 300, 0), + (1367, 2, 97, 200, 0), + (1367, 3, 190, 200, 0), + (1368, 1, 327, 1, 0), + (1369, 1, 273, 1, 0), + (1369, 2, 274, 1, 0), + (1369, 3, 294, 1, 100), + (1369, 4, 169, 40, 0), + (1369, 5, 169, 40, 1), + (1369, 6, 169, 40, 2), + (1369, 7, 169, 40, 3), + (1369, 8, 169, 40, 8), + (1369, 9, 169, 40, 10), + (1369, 10, 169, 40, 26), + (1369, 11, 169, 40, 28), + (1369, 12, 169, 40, 30), + (1369, 13, 169, 40, 36), + (1369, 14, 169, 40, 74), + (1370, 1, 180, 2, 0), + (1378, 1, 10, 0, 0), + (1379, 1, 10, 0, 0), + (1380, 1, 10, 0, 0), + (1382, 1, 10, 0, 0), + (1388, 2, 13, 1, 0), + (1389, 1, 328, 300, 0), + (1390, 1, 328, 350, 0), + (1391, 1, 328, 400, 0), + (1392, 1, 328, 450, 0), + (1393, 1, 328, 500, 0), + (1394, 1, 172, 33, 0), + (1395, 1, 172, 34, 0), + (1396, 1, 172, 35, 0), + (1397, 1, 172, 37, 0), + (1398, 1, 172, 39, 0), + (1399, 1, 259, 37, 0), + (1400, 1, 259, 39, 0), + (1401, 1, 259, 41, 0), + (1402, 1, 259, 43, 0), + (1403, 1, 259, 45, 0), + (1414, 1, 264, 432, 451), + (1415, 1, 264, 864, 451), + (1416, 1, 264, 1296, 451), + (1417, 1, 264, 1728, 451), + (1418, 1, 264, 2160, 451), + (1420, 1, 282, 20, 0), + (1421, 1, 282, 40, 0), + (1422, 1, 282, 60, 0), + (1423, 1, 282, 80, 0), + (1424, 1, 282, 100, 0), + (1430, 1, 280, 27, 0), + (1431, 1, 280, 34, 0), + (1432, 1, 280, 41, 0), + (1435, 1, 339, 3, 8105), + (1435, 2, 142, 65, 0), + (1435, 3, 311, 0, 0), + (1435, 4, 134, 70, 0), + (1435, 5, 348, 10, 0), + (1435, 6, 137, 0, 0), + (1435, 7, 339, 3, 8105), + (1435, 8, 142, 65, 0), + (1435, 9, 311, 0, 0), + (1435, 10, 134, 70, 0), + (1435, 11, 348, 10, 0), + (1435, 12, 137, 100, 0), + (1435, 13, 339, 3, 8105), + (1435, 14, 142, 65, 0), + (1435, 15, 311, 0, 0), + (1435, 16, 134, 70, 0), + (1435, 17, 348, 10, 0), + (1435, 18, 137, 79, 0), + (1435, 19, 339, 3, 8105), + (1435, 20, 142, 65, 0), + (1435, 21, 311, 0, 0), + (1435, 22, 134, 70, 0), + (1435, 23, 348, 10, 0), + (1435, 24, 137, 147, 0), + (1436, 1, 339, 6, 8105), + (1436, 2, 142, 65, 0), + (1436, 3, 311, 0, 0), + (1436, 4, 134, 70, 0), + (1436, 5, 348, 10, 0), + (1436, 6, 137, 0, 0), + (1436, 7, 339, 6, 8105), + (1436, 8, 142, 65, 0), + (1436, 9, 311, 0, 0), + (1436, 10, 134, 70, 0), + (1436, 11, 348, 10, 0), + (1436, 12, 137, 100, 0), + (1436, 13, 339, 6, 8105), + (1436, 14, 142, 65, 0), + (1436, 15, 311, 0, 0), + (1436, 16, 134, 70, 0), + (1436, 17, 348, 10, 0), + (1436, 18, 137, 79, 0), + (1436, 19, 339, 6, 8105), + (1436, 20, 142, 65, 0), + (1436, 21, 311, 0, 0), + (1436, 22, 134, 70, 0), + (1436, 23, 348, 10, 0), + (1436, 24, 137, 147, 0), + (1437, 1, 339, 10, 8105), + (1437, 2, 142, 65, 0), + (1437, 3, 311, 0, 0), + (1437, 4, 134, 70, 0), + (1437, 5, 348, 10, 0), + (1437, 6, 137, 0, 0), + (1437, 7, 339, 10, 8105), + (1437, 8, 142, 65, 0), + (1437, 9, 311, 0, 0), + (1437, 10, 134, 70, 0), + (1437, 11, 348, 10, 0), + (1437, 12, 137, 100, 0), + (1437, 13, 339, 10, 8105), + (1437, 14, 142, 65, 0), + (1437, 15, 311, 0, 0), + (1437, 16, 134, 70, 0), + (1437, 17, 348, 10, 0), + (1437, 18, 137, 79, 0), + (1437, 19, 339, 10, 8105), + (1437, 20, 142, 65, 0), + (1437, 21, 311, 0, 0), + (1437, 22, 134, 70, 0), + (1437, 23, 348, 10, 0), + (1437, 24, 137, 147, 0), + (1453, 1, 131, 10, 10), + (1453, 2, 137, 32, 0), + (1453, 3, 311, 1, 0), + (1454, 1, 131, 20, 20), + (1454, 2, 137, 32, 0), + (1454, 3, 311, 1, 0), + (1455, 1, 131, 30, 30), + (1455, 2, 137, 32, 0), + (1455, 3, 311, 1, 0), + (1456, 1, 131, 40, 40), + (1456, 2, 137, 32, 0), + (1456, 3, 311, 1, 0), + (1457, 1, 131, 50, 50), + (1457, 2, 137, 32, 0), + (1457, 3, 311, 1, 0), + (1467, 1, 280, 27, 0), + (1468, 1, 280, 34, 0), + (1469, 1, 280, 41, 0), + (1471, 1, 264, 90, 362), + (1472, 1, 264, 180, 362), + (1473, 1, 264, 270, 362), + (1474, 1, 264, 360, 362), + (1475, 1, 264, 450, 362), + (1483, 1, 294, 0, 133), + (1484, 1, 294, 0, 141), + (1485, 1, 294, 0, 150), + (1486, 1, 339, 1, 8165), + (1486, 2, 138, 1, 0), + (1486, 3, 141, 1, 0), + (1486, 4, 142, 60, 0), + (1486, 5, 137, 0, 0), + (1486, 6, 311, 0, 0), + (1486, 7, 134, 75, 0), + (1486, 8, 139, -265, 0), + (1486, 9, 139, -754, 0), + (1486, 10, 139, -1332, 0), + (1486, 11, 139, -1572, 0), + (1486, 12, 139, -2749, 0), + (1486, 13, 139, -4979, 0), + (1486, 14, 139, -5418, 0), + (1486, 15, 139, -5403, 0), + (1486, 16, 348, 10, 0), + (1487, 1, 339, 3, 8166), + (1487, 2, 138, 1, 0), + (1487, 3, 141, 1, 0), + (1487, 4, 142, 60, 0), + (1487, 5, 137, 0, 0), + (1487, 6, 311, 0, 0), + (1487, 7, 134, 75, 0), + (1487, 8, 139, -265, 0), + (1487, 9, 139, -754, 0), + (1487, 10, 139, -1332, 0), + (1487, 11, 139, -1572, 0), + (1487, 12, 139, -2749, 0), + (1487, 13, 139, -4979, 0), + (1487, 14, 139, -5418, 0), + (1487, 15, 139, -5403, 0), + (1487, 16, 348, 10, 0), + (1488, 1, 339, 5, 8167), + (1488, 2, 138, 1, 0), + (1488, 3, 141, 1, 0), + (1488, 4, 142, 60, 0), + (1488, 5, 137, 0, 0), + (1488, 6, 311, 0, 0), + (1488, 7, 134, 75, 0), + (1488, 8, 139, -265, 0), + (1488, 9, 139, -754, 0), + (1488, 10, 139, -1332, 0), + (1488, 11, 139, -1572, 0), + (1488, 12, 139, -2749, 0), + (1488, 13, 139, -4979, 0), + (1488, 14, 139, -5418, 0), + (1488, 15, 139, -5403, 0), + (1488, 16, 348, 10, 0), + (1489, 1, 339, 7, 8168), + (1489, 2, 138, 1, 0), + (1489, 3, 141, 1, 0), + (1489, 4, 142, 60, 0), + (1489, 5, 137, 0, 0), + (1489, 6, 311, 0, 0), + (1489, 7, 134, 75, 0), + (1489, 8, 139, -265, 0), + (1489, 9, 139, -754, 0), + (1489, 10, 139, -1332, 0), + (1489, 11, 139, -1572, 0), + (1489, 12, 139, -2749, 0), + (1489, 13, 139, -4979, 0), + (1489, 14, 139, -5418, 0), + (1489, 15, 139, -5403, 0), + (1489, 16, 348, 10, 0), + (1490, 1, 339, 9, 8169), + (1490, 2, 138, 1, 0), + (1490, 3, 141, 1, 0), + (1490, 4, 142, 60, 0), + (1490, 5, 137, 0, 0), + (1490, 6, 311, 0, 0), + (1490, 7, 134, 75, 0), + (1490, 8, 139, -265, 0), + (1490, 9, 139, -754, 0), + (1490, 10, 139, -1332, 0), + (1490, 11, 139, -1572, 0), + (1490, 12, 139, -2749, 0), + (1490, 13, 139, -4979, 0), + (1490, 14, 139, -5418, 0), + (1490, 15, 139, -5403, 0), + (1490, 16, 348, 10, 0), + (1504, 1, 287, 2, 0), + (1504, 2, 385, 2754, 1), + (1505, 1, 287, 4, 0), + (1505, 2, 385, 2754, 1), + (1506, 1, 287, 6, 0), + (1506, 2, 385, 2754, 1), + (1511, 1, 264, 60, 175), + (1511, 2, 264, 60, 792), + (1512, 1, 264, 120, 175), + (1512, 2, 264, 120, 792), + (1513, 1, 264, 180, 175), + (1513, 2, 264, 180, 792), + (1514, 1, 273, 2, 0), + (1515, 1, 273, 4, 0), + (1516, 1, 273, 6, 0), + (1524, 1, 219, 260, 1800), + (1525, 1, 219, 300, 2000), + (1526, 1, 219, 280, 1900), + (1528, 1, 239, 30, 0), + (1529, 1, 239, 35, 0), + (1530, 1, 239, 40, 0), + (1531, 1, 239, 45, 0), + (1532, 1, 239, 50, 0), + (1533, 1, 266, 11, 0), + (1534, 1, 266, 14, 0), + (1535, 1, 266, 17, 0), + (1536, 1, 266, 11, 0), + (1537, 1, 266, 14, 0), + (1538, 1, 266, 17, 0), + (1539, 1, 252, 37, 0), + (1540, 1, 252, 44, 0), + (1541, 1, 252, 50, 0), + (1543, 1, 220, 10, 8), + (1544, 1, 220, 20, 8), + (1545, 1, 220, 30, 8), + (1546, 1, 264, 120, 420), + (1547, 1, 264, 240, 420), + (1548, 1, 264, 360, 420), + (1549, 1, 293, 25, 0), + (1550, 1, 293, 50, 0), + (1551, 1, 293, 75, 0), + (1552, 1, 271, 5, 0), + (1553, 1, 271, 10, 0), + (1554, 1, 271, 15, 0), + (1555, 1, 264, 240, 359), + (1556, 1, 264, 480, 359), + (1557, 1, 264, 720, 359), + (1563, 1, 225, 18, 0), + (1564, 1, 225, 21, 0), + (1565, 1, 225, 24, 0), + (1566, 1, 225, 27, 0), + (1567, 1, 225, 30, 0), + (1572, 1, 339, 2, 8261), + (1572, 2, 138, 0, 0), + (1572, 3, 137, 31, 0), + (1572, 4, 311, 0, 0), + (1573, 1, 339, 4, 8262), + (1573, 2, 138, 0, 0), + (1573, 3, 137, 31, 0), + (1573, 4, 311, 0, 0), + (1574, 1, 339, 6, 8263), + (1574, 2, 138, 0, 0), + (1574, 3, 137, 31, 0), + (1574, 4, 311, 0, 0), + (1575, 1, 339, 8, 8264), + (1575, 2, 138, 0, 0), + (1575, 3, 137, 31, 0), + (1575, 4, 311, 0, 0), + (1576, 1, 339, 10, 8265), + (1576, 2, 138, 0, 0), + (1576, 3, 137, 31, 0), + (1576, 4, 311, 0, 0), + (1577, 1, 274, 3, 0), + (1578, 1, 274, 6, 0), + (1579, 1, 274, 10, 0), + (1583, 1, 264, 360, 300), + (1584, 1, 264, 720, 300), + (1585, 1, 264, 1080, 300), + (1586, 1, 264, 1440, 300), + (1587, 1, 264, 1800, 300), + (1588, 1, 344, 50, 0), + (1589, 1, 344, 100, 0), + (1590, 1, 344, 150, 0), + (1591, 1, 293, 25, 0), + (1592, 1, 341, 10, 0), + (1593, 1, 341, 20, 0), + (1594, 1, 341, 30, 0), + (1595, 1, 341, 40, 0), + (1596, 1, 341, 50, 0), + (1601, 1, 217, 0, 35200), + (1601, 2, 346, 60, 0), + (1602, 1, 217, 0, 42440), + (1602, 2, 346, 62, 0), + (1603, 1, 217, 0, 46480), + (1603, 2, 346, 64, 0), + (1604, 1, 439, 0, 32000), + (1604, 2, 345, 59, 0), + (1605, 1, 439, 0, 35200), + (1605, 2, 345, 60, 0), + (1606, 1, 439, 0, 42440), + (1606, 2, 345, 61, 0), + (1608, 1, 347, 2, 0), + (1609, 1, 347, 4, 0), + (1610, 1, 347, 6, 0), + (1611, 1, 282, 20, 0), + (1612, 1, 282, 40, 0), + (1613, 1, 282, 60, 0), + (1614, 1, 282, 80, 0), + (1615, 1, 282, 100, 0), + (1616, 1, 279, 7, 0), + (1617, 1, 279, 11, 0), + (1618, 1, 279, 15, 0), + (1619, 1, 279, 17, 0), + (1620, 1, 279, 19, 0), + (1621, 1, 177, 20, -1), + (1622, 1, 177, 22, -1), + (1623, 1, 177, 24, -1), + (1624, 1, 177, 20, -1), + (1625, 1, 177, 22, -1), + (1626, 1, 177, 24, -1), + (1627, 1, 271, 5, 0), + (1628, 1, 271, 10, 0), + (1629, 1, 271, 15, 0), + (1633, 1, 225, 18, 0), + (1634, 1, 225, 21, 0), + (1635, 1, 225, 24, 0), + (1636, 1, 225, 27, 0), + (1637, 1, 225, 30, 0), + (1641, 1, 359, 100, 0), + (1642, 1, 359, 60, 0), + (1648, 1, 339, 10, 8105), + (1648, 2, 142, 65, 0), + (1648, 3, 311, 0, 0), + (1648, 4, 134, 70, 0), + (1648, 5, 348, 10, 0), + (1648, 6, 137, 0, 0), + (1648, 7, 339, 10, 8105), + (1648, 8, 142, 65, 0), + (1648, 9, 311, 0, 0), + (1648, 10, 134, 70, 0), + (1648, 11, 348, 10, 0), + (1648, 12, 137, 100, 0), + (1648, 13, 339, 10, 8105), + (1648, 14, 142, 65, 0), + (1648, 15, 311, 0, 0), + (1648, 16, 134, 70, 0), + (1648, 17, 348, 10, 0), + (1648, 18, 137, 79, 0), + (1648, 19, 339, 10, 8105), + (1648, 20, 142, 65, 0), + (1648, 21, 311, 0, 0), + (1648, 22, 134, 70, 0), + (1648, 23, 348, 10, 0), + (1648, 24, 137, 147, 0), + (1648, 25, 339, 10, 11404), + (1648, 26, 142, 71, 0), + (1648, 27, 311, 0, 0), + (1648, 28, 134, 75, 0), + (1648, 29, 348, 10, 0), + (1648, 30, 137, 0, 0), + (1648, 31, 339, 10, 11404), + (1648, 32, 142, 71, 0), + (1648, 33, 311, 0, 0), + (1648, 34, 134, 75, 0), + (1648, 35, 348, 10, 0), + (1648, 36, 137, 100, 0), + (1648, 37, 339, 10, 11404), + (1648, 38, 142, 71, 0), + (1648, 39, 311, 0, 0), + (1648, 40, 134, 75, 0), + (1648, 41, 348, 10, 0), + (1648, 42, 137, 79, 0), + (1648, 43, 339, 10, 11404), + (1648, 44, 142, 71, 0), + (1648, 45, 311, 0, 0), + (1648, 46, 134, 75, 0), + (1648, 47, 348, 10, 0), + (1648, 48, 137, 147, 0), + (1649, 1, 339, 10, 8105), + (1649, 2, 142, 65, 0), + (1649, 3, 311, 0, 0), + (1649, 4, 134, 70, 0), + (1649, 5, 348, 10, 0), + (1649, 6, 137, 0, 0), + (1649, 7, 339, 10, 8105), + (1649, 8, 142, 65, 0), + (1649, 9, 311, 0, 0), + (1649, 10, 134, 70, 0), + (1649, 11, 348, 10, 0), + (1649, 12, 137, 100, 0), + (1649, 13, 339, 10, 8105), + (1649, 14, 142, 65, 0), + (1649, 15, 311, 0, 0), + (1649, 16, 134, 70, 0), + (1649, 17, 348, 10, 0), + (1649, 18, 137, 79, 0), + (1649, 19, 339, 10, 8105), + (1649, 20, 142, 65, 0), + (1649, 21, 311, 0, 0), + (1649, 22, 134, 70, 0), + (1649, 23, 348, 10, 0), + (1649, 24, 137, 147, 0), + (1649, 25, 339, 10, 11404), + (1649, 26, 142, 71, 0), + (1649, 27, 311, 0, 0), + (1649, 28, 134, 75, 0), + (1649, 29, 348, 10, 0), + (1649, 30, 137, 0, 0), + (1649, 31, 339, 10, 11404), + (1649, 32, 142, 71, 0), + (1649, 33, 311, 0, 0), + (1649, 34, 134, 75, 0), + (1649, 35, 348, 10, 0), + (1649, 36, 137, 100, 0), + (1649, 37, 339, 10, 11404), + (1649, 38, 142, 71, 0), + (1649, 39, 311, 0, 0), + (1649, 40, 134, 75, 0), + (1649, 41, 348, 10, 0), + (1649, 42, 137, 79, 0), + (1649, 43, 339, 10, 11404), + (1649, 44, 142, 71, 0), + (1649, 45, 311, 0, 0), + (1649, 46, 134, 75, 0), + (1649, 47, 348, 10, 0), + (1649, 48, 137, 147, 0), + (1649, 49, 339, 10, 13199), + (1649, 50, 142, 76, 0), + (1649, 51, 311, 0, 0), + (1649, 52, 134, 80, 0), + (1649, 53, 348, 10, 0), + (1649, 54, 137, 0, 0), + (1649, 55, 339, 10, 13199), + (1649, 56, 142, 76, 0), + (1649, 57, 311, 0, 0), + (1649, 58, 134, 80, 0), + (1649, 59, 348, 10, 0), + (1649, 60, 137, 100, 0), + (1649, 61, 339, 10, 13199), + (1649, 62, 142, 76, 0), + (1649, 63, 311, 0, 0), + (1649, 64, 134, 80, 0), + (1649, 65, 348, 10, 0), + (1649, 66, 137, 79, 0), + (1649, 67, 339, 10, 13199), + (1649, 68, 142, 76, 0), + (1649, 69, 311, 0, 0), + (1649, 70, 134, 80, 0), + (1649, 71, 348, 10, 0), + (1649, 72, 137, 147, 0), + (1650, 1, 339, 10, 8105), + (1650, 2, 142, 65, 0), + (1650, 3, 311, 0, 0), + (1650, 4, 134, 70, 0), + (1650, 5, 348, 10, 0), + (1650, 6, 137, 0, 0), + (1650, 7, 339, 10, 8105), + (1650, 8, 142, 65, 0), + (1650, 9, 311, 0, 0), + (1650, 10, 134, 70, 0), + (1650, 11, 348, 10, 0), + (1650, 12, 137, 100, 0), + (1650, 13, 339, 10, 8105), + (1650, 14, 142, 65, 0), + (1650, 15, 311, 0, 0), + (1650, 16, 134, 70, 0), + (1650, 17, 348, 10, 0), + (1650, 18, 137, 79, 0), + (1650, 19, 339, 10, 8105), + (1650, 20, 142, 65, 0), + (1650, 21, 311, 0, 0), + (1650, 22, 134, 70, 0), + (1650, 23, 348, 10, 0), + (1650, 24, 137, 147, 0), + (1650, 25, 339, 10, 11404), + (1650, 26, 142, 71, 0), + (1650, 27, 311, 0, 0), + (1650, 28, 134, 75, 0), + (1650, 29, 348, 10, 0), + (1650, 30, 137, 0, 0), + (1650, 31, 339, 10, 11404), + (1650, 32, 142, 71, 0), + (1650, 33, 311, 0, 0), + (1650, 34, 134, 75, 0), + (1650, 35, 348, 10, 0), + (1650, 36, 137, 100, 0), + (1650, 37, 339, 10, 11404), + (1650, 38, 142, 71, 0), + (1650, 39, 311, 0, 0), + (1650, 40, 134, 75, 0), + (1650, 41, 348, 10, 0), + (1650, 42, 137, 79, 0), + (1650, 43, 339, 10, 11404), + (1650, 44, 142, 71, 0), + (1650, 45, 311, 0, 0), + (1650, 46, 134, 75, 0), + (1650, 47, 348, 10, 0), + (1650, 48, 137, 147, 0), + (1650, 49, 339, 10, 13199), + (1650, 50, 142, 76, 0), + (1650, 51, 311, 0, 0), + (1650, 52, 134, 80, 0), + (1650, 53, 348, 10, 0), + (1650, 54, 137, 0, 0), + (1650, 55, 339, 10, 13199), + (1650, 56, 142, 76, 0), + (1650, 57, 311, 0, 0), + (1650, 58, 134, 80, 0), + (1650, 59, 348, 10, 0), + (1650, 60, 137, 100, 0), + (1650, 61, 339, 10, 13199), + (1650, 62, 142, 76, 0), + (1650, 63, 311, 0, 0), + (1650, 64, 134, 80, 0), + (1650, 65, 348, 10, 0), + (1650, 66, 137, 79, 0), + (1650, 67, 339, 10, 13199), + (1650, 68, 142, 76, 0), + (1650, 69, 311, 0, 0), + (1650, 70, 134, 80, 0), + (1650, 71, 348, 10, 0), + (1650, 72, 137, 147, 0), + (1650, 73, 339, 10, 13830), + (1650, 74, 142, 81, 0), + (1650, 75, 311, 0, 0), + (1650, 76, 134, 85, 0), + (1650, 77, 348, 10, 0), + (1650, 78, 137, 0, 0), + (1650, 79, 339, 10, 13830), + (1650, 80, 142, 81, 0), + (1650, 81, 311, 0, 0), + (1650, 82, 134, 85, 0), + (1650, 83, 348, 10, 0), + (1650, 84, 137, 100, 0), + (1650, 85, 339, 10, 13830), + (1650, 86, 142, 81, 0), + (1650, 87, 311, 0, 0), + (1650, 88, 134, 85, 0), + (1650, 89, 348, 10, 0), + (1650, 90, 137, 79, 0), + (1650, 91, 339, 10, 13830), + (1650, 92, 142, 81, 0), + (1650, 93, 311, 0, 0), + (1650, 94, 134, 85, 0), + (1650, 95, 348, 10, 0), + (1650, 96, 137, 147, 0), + (1651, 1, 97, 300, 0), + (1652, 1, 97, 350, 0), + (1653, 1, 97, 400, 0), + (1654, 1, 97, 450, 0), + (1655, 1, 97, 500, 0), + (1656, 1, 127, 40, 0), + (1656, 2, 137, 154, 0), + (1656, 3, 403, 2, 0), + (1656, 4, 404, 10, 0), + (1657, 1, 127, 50, 0), + (1657, 2, 137, 154, 0), + (1657, 3, 403, 2, 0), + (1657, 4, 404, 10, 0), + (1659, 1, 127, 40, 0), + (1659, 2, 137, 154, 0), + (1659, 3, 403, 2, 0), + (1659, 4, 404, 10, 0), + (1660, 1, 127, 50, 0), + (1660, 2, 137, 154, 0), + (1660, 3, 403, 2, 0), + (1660, 4, 404, 10, 0), + (1662, 1, 370, 2, 0), + (1663, 1, 370, 4, 0), + (1664, 1, 370, 6, 0), + (1665, 1, 370, 8, 0), + (1666, 1, 370, 10, 0), + (2400, 1, 264, 90, 38), + (2401, 1, 264, 180, 38), + (2402, 1, 264, 270, 38), + (4666, 0, 366, 10, 50), + (4666, 1, 349, 5, 0), + (4667, 0, 366, 30, 50), + (4667, 1, 349, 10, 0), + (4668, 0, 366, 60, 50), + (4668, 1, 349, 15, 0), + (4669, 0, 366, 10, 500), + (4669, 1, 349, 20, 0), + (4670, 0, 366, 30, 500), + (4670, 1, 349, 25, 0), + (4672, 1, 268, 10, 57), + (4673, 1, 268, 25, 57), + (4674, 1, 268, 50, 57), + (4675, 1, 268, 10, 68), + (4676, 1, 268, 25, 68), + (4677, 1, 268, 50, 68), + (4678, 1, 262, 55, 0), + (4678, 2, 262, 55, 1), + (4678, 3, 262, 55, 2), + (4678, 4, 262, 55, 3), + (4678, 5, 262, 55, 4), + (4678, 6, 262, 55, 5), + (4678, 7, 262, 55, 6), + (4679, 1, 262, 60, 0), + (4679, 2, 262, 60, 1), + (4679, 3, 262, 60, 2), + (4679, 4, 262, 60, 3), + (4679, 5, 262, 60, 4), + (4679, 6, 262, 60, 5), + (4679, 7, 262, 60, 6), + (4680, 1, 262, 65, 0), + (4680, 2, 262, 65, 1), + (4680, 3, 262, 65, 2), + (4680, 4, 262, 65, 3), + (4680, 5, 262, 65, 4), + (4680, 6, 262, 65, 5), + (4680, 7, 262, 65, 6), + (4681, 1, 262, 70, 0), + (4681, 2, 262, 70, 1), + (4681, 3, 262, 70, 2), + (4681, 4, 262, 70, 3), + (4681, 5, 262, 70, 4), + (4681, 6, 262, 70, 5), + (4681, 7, 262, 70, 6), + (4682, 1, 262, 75, 0), + (4682, 2, 262, 75, 1), + (4682, 3, 262, 75, 2), + (4682, 4, 262, 75, 3), + (4682, 5, 262, 75, 4), + (4682, 6, 262, 75, 5), + (4682, 7, 262, 75, 6), + (4683, 1, 328, 550, 0), + (4684, 1, 328, 600, 0), + (4685, 1, 328, 650, 0), + (4686, 1, 328, 700, 0), + (4687, 1, 328, 750, 0), + (4688, 1, 282, 20, 0), + (4689, 1, 282, 40, 0), + (4690, 1, 282, 60, 0), + (4691, 1, 282, 80, 0), + (4692, 1, 282, 100, 0), + (4693, 1, 0, 11, 0), + (4694, 1, 0, 12, 0), + (4695, 1, 0, 13, 0), + (4696, 1, 0, 14, 0), + (4697, 1, 0, 15, 0), + (4698, 1, 362, 1, 0), + (4699, 1, 363, 1, 0), + (4707, 1, 330, 85, 0), + (4707, 2, 330, 85, 1), + (4707, 3, 330, 85, 2), + (4707, 4, 330, 85, 3), + (4707, 5, 330, 85, 28), + (4707, 6, 330, 85, 36), + (4707, 7, 330, 85, 77), + (4708, 1, 330, 95, 0), + (4708, 2, 330, 95, 1), + (4708, 3, 330, 95, 2), + (4708, 4, 330, 95, 3), + (4708, 5, 330, 95, 28), + (4708, 6, 330, 95, 36), + (4708, 7, 330, 95, 77), + (4709, 1, 330, 105, 0), + (4709, 2, 330, 105, 1), + (4709, 3, 330, 105, 2), + (4709, 4, 330, 105, 3), + (4709, 5, 330, 105, 28), + (4709, 6, 330, 105, 36), + (4709, 7, 330, 105, 77), + (4710, 1, 330, 85, 0), + (4710, 2, 330, 85, 1), + (4710, 3, 330, 85, 2), + (4710, 4, 330, 85, 3), + (4710, 5, 330, 85, 28), + (4710, 6, 330, 85, 36), + (4711, 1, 330, 95, 0), + (4711, 2, 330, 95, 1), + (4711, 3, 330, 95, 2), + (4711, 4, 330, 95, 3), + (4711, 5, 330, 95, 28), + (4711, 6, 330, 95, 36), + (4712, 1, 330, 105, 0), + (4712, 2, 330, 105, 1), + (4712, 3, 330, 105, 2), + (4712, 4, 330, 105, 3), + (4712, 5, 330, 105, 28), + (4712, 6, 330, 105, 36), + (4713, 1, 330, 85, 0), + (4713, 2, 330, 85, 1), + (4713, 3, 330, 85, 2), + (4713, 4, 330, 85, 3), + (4713, 5, 330, 85, 28), + (4713, 6, 330, 85, 36), + (4713, 7, 330, 85, 77), + (4714, 1, 330, 95, 0), + (4714, 2, 330, 95, 1), + (4714, 3, 330, 95, 2), + (4714, 4, 330, 95, 3), + (4714, 5, 330, 95, 28), + (4714, 6, 330, 95, 36), + (4714, 7, 330, 95, 77), + (4715, 1, 330, 105, 0), + (4715, 2, 330, 105, 1), + (4715, 3, 330, 105, 2), + (4715, 4, 330, 105, 3), + (4715, 5, 330, 105, 28), + (4715, 6, 330, 105, 36), + (4715, 7, 330, 105, 77), + (4716, 1, 330, 60, 0), + (4716, 2, 330, 60, 1), + (4716, 3, 330, 60, 2), + (4716, 4, 330, 60, 3), + (4716, 5, 330, 60, 28), + (4716, 6, 330, 60, 36), + (4716, 7, 330, 60, 77), + (4717, 1, 330, 70, 0), + (4717, 2, 330, 70, 1), + (4717, 3, 330, 70, 2), + (4717, 4, 330, 70, 3), + (4717, 5, 330, 70, 28), + (4717, 6, 330, 70, 36), + (4717, 7, 330, 70, 77), + (4718, 1, 330, 80, 0), + (4718, 2, 330, 80, 1), + (4718, 3, 330, 80, 2), + (4718, 4, 330, 80, 3), + (4718, 5, 330, 80, 28), + (4718, 6, 330, 80, 36), + (4718, 7, 330, 80, 77), + (4722, 1, 278, 620, 35216), + (4722, 2, 440, 66, 100), + (4723, 1, 278, 650, 38310), + (4723, 2, 440, 68, 100), + (4724, 1, 278, 670, 41300), + (4724, 2, 440, 70, 100), + (4725, 1, 341, 60, 0), + (4726, 1, 341, 70, 0), + (4727, 1, 341, 80, 0), + (4728, 1, 341, 90, 0), + (4729, 1, 341, 100, 0), + (4733, 1, 294, 11, 100), + (4734, 1, 294, 13, 100), + (4735, 1, 294, 15, 100), + (4739, 1, 360, 10, 11023), + (4740, 1, 360, 20, 11023), + (4741, 1, 360, 30, 11023), + (4744, 1, 318, 6, 0), + (4745, 1, 318, 7, 0), + (4746, 1, 318, 8, 0), + (4747, 1, 318, 9, 0), + (4748, 1, 318, 10, 0), + (4749, 1, 294, 11, 100), + (4750, 1, 294, 13, 100), + (4751, 1, 294, 15, 100), + (4752, 1, 294, 0, 155), + (4753, 1, 294, 0, 160), + (4754, 1, 294, 0, 165), + (4755, 1, 294, 0, 130), + (4756, 1, 294, 0, 135), + (4757, 1, 294, 0, 140), + (4758, 1, 266, 27, 0), + (4759, 1, 266, 28, 0), + (4760, 1, 266, 29, 0), + (4761, 1, 273, 2, 0), + (4762, 1, 273, 3, 0), + (4763, 1, 273, 4, 0), + (4764, 1, 326, 2, 0), + (4767, 1, 114, -43, 0), + (4768, 1, 114, -46, 0), + (4769, 1, 114, -50, 0), + (4773, 1, 339, 10, 8105), + (4773, 2, 142, 65, 0), + (4773, 3, 311, 0, 0), + (4773, 4, 134, 70, 0), + (4773, 5, 348, 10, 0), + (4773, 6, 137, 0, 0), + (4773, 7, 339, 10, 8105), + (4773, 8, 142, 65, 0), + (4773, 9, 311, 0, 0), + (4773, 10, 134, 70, 0), + (4773, 11, 348, 10, 0), + (4773, 12, 137, 100, 0), + (4773, 13, 339, 10, 8105), + (4773, 14, 142, 65, 0), + (4773, 15, 311, 0, 0), + (4773, 16, 134, 70, 0), + (4773, 17, 348, 10, 0), + (4773, 18, 137, 79, 0), + (4773, 19, 339, 10, 8105), + (4773, 20, 142, 65, 0), + (4773, 21, 311, 0, 0), + (4773, 22, 134, 70, 0), + (4773, 23, 348, 10, 0), + (4773, 24, 137, 147, 0), + (4773, 25, 339, 10, 11404), + (4773, 26, 142, 71, 0), + (4773, 27, 311, 0, 0), + (4773, 28, 134, 75, 0), + (4773, 29, 348, 10, 0), + (4773, 30, 137, 0, 0), + (4773, 31, 339, 10, 11404), + (4773, 32, 142, 71, 0), + (4773, 33, 311, 0, 0), + (4773, 34, 134, 75, 0), + (4773, 35, 348, 10, 0), + (4773, 36, 137, 100, 0), + (4773, 37, 339, 10, 11404), + (4773, 38, 142, 71, 0), + (4773, 39, 311, 0, 0), + (4773, 40, 134, 75, 0), + (4773, 41, 348, 10, 0), + (4773, 42, 137, 79, 0), + (4773, 43, 339, 10, 11404), + (4773, 44, 142, 71, 0), + (4773, 45, 311, 0, 0), + (4773, 46, 134, 75, 0), + (4773, 47, 348, 10, 0), + (4773, 48, 137, 147, 0), + (4776, 1, 319, 12, 0), + (4777, 1, 319, 14, 0), + (4778, 1, 319, 16, 0), + (4779, 1, 274, 24, 0), + (4780, 1, 274, 26, 0), + (4781, 1, 274, 28, 0), + (4790, 1, 220, 288, 74), + (4791, 1, 220, 320, 74), + (4792, 1, 220, 352, 74), + (4793, 1, 220, 384, 74), + (4794, 1, 220, 416, 74), + (4795, 1, 279, 28, 0), + (4796, 1, 279, 29, 0), + (4797, 1, 279, 30, 0), + (4798, 1, 292, 65, 0), + (4799, 1, 292, 70, 0), + (4800, 1, 292, 75, 0), + (4801, 1, 227, 30, 32), + (4802, 1, 227, 60, 32), + (4803, 1, 227, 90, 32), + (4804, 1, 220, 448, 74), + (4805, 1, 220, 480, 74), + (4806, 1, 220, 512, 74), + (4807, 1, 220, 544, 74), + (4808, 1, 220, 576, 74), + (4809, 1, 216, 40, 74), + (4810, 1, 216, 80, 74), + (4811, 1, 216, 120, 74), + (4813, 1, 220, 70, 26), + (4813, 2, 220, 70, 30), + (4813, 3, 220, 70, 38), + (4814, 1, 220, 80, 26), + (4814, 2, 220, 80, 30), + (4814, 3, 220, 80, 38), + (4815, 1, 220, 90, 26), + (4815, 2, 220, 90, 30), + (4815, 3, 220, 90, 38), + (4819, 1, 239, 52, 0), + (4820, 1, 239, 54, 0), + (4821, 1, 239, 56, 0), + (4822, 1, 239, 58, 0), + (4823, 1, 239, 60, 0), + (4824, 1, 239, 52, 0), + (4825, 1, 239, 54, 0), + (4826, 1, 239, 56, 0), + (4827, 1, 239, 58, 0), + (4828, 1, 239, 60, 0), + (4829, 1, 264, 480, 420), + (4830, 1, 264, 600, 420), + (4831, 1, 264, 720, 420), + (4844, 1, 349, 5, 0), + (4845, 1, 349, 10, 0), + (4846, 1, 349, 15, 0), + (4847, 1, 349, 20, 0), + (4848, 1, 349, 25, 0), + (4861, 1, 264, 600, 68), + (4862, 1, 264, 1200, 68), + (4863, 1, 264, 1800, 68), + (4887, 1, 264, 120, 413), + (4888, 1, 264, 240, 413), + (4889, 1, 264, 360, 413), + (4897, 1, 280, 44, 0), + (4898, 1, 280, 47, 0), + (4899, 1, 280, 50, 0), + (4921, 1, 264, 1896, 117), + (4921, 2, 244, 75, 0), + (4922, 1, 264, 2496, 117), + (4922, 2, 244, 60, 0), + (4923, 1, 264, 3096, 117), + (4923, 2, 244, 45, 0), + (4924, 1, 273, 1, 0), + (4925, 1, 273, 2, 0), + (4926, 1, 273, 3, 0), + (4948, 1, 258, 35, 0), + (4949, 1, 258, 40, 0), + (4950, 1, 258, 45, 0), + (4951, 1, 220, 40, 8), + (4952, 1, 220, 50, 8), + (4953, 1, 220, 60, 8), + (4957, 1, 252, 55, 0), + (4958, 1, 252, 60, 0), + (4959, 1, 252, 65, 0), + (4960, 1, 280, 46, 0), + (4961, 1, 280, 51, 0), + (4962, 1, 280, 56, 0), + (4983, 1, 216, 65, 0), + (4983, 2, 216, 65, 1), + (4983, 3, 216, 65, 2), + (4983, 4, 216, 65, 3), + (4983, 5, 216, 65, 10), + (4983, 6, 216, 65, 28), + (4983, 7, 216, 65, 30), + (4983, 8, 216, 65, 36), + (4983, 9, 216, 65, 77), + (4984, 1, 216, 70, 0), + (4984, 2, 216, 70, 1), + (4984, 3, 216, 70, 2), + (4984, 4, 216, 70, 3), + (4984, 5, 216, 70, 10), + (4984, 6, 216, 70, 28), + (4984, 7, 216, 70, 30), + (4984, 8, 216, 70, 36), + (4984, 9, 216, 70, 77), + (4985, 1, 216, 75, 0), + (4985, 2, 216, 75, 1), + (4985, 3, 216, 75, 2), + (4985, 4, 216, 75, 3), + (4985, 5, 216, 75, 10), + (4985, 6, 216, 75, 28), + (4985, 7, 216, 75, 30), + (4985, 8, 216, 75, 36), + (4985, 9, 216, 75, 77), + (4986, 1, 217, 0, 52960), + (4986, 2, 346, 66, 40), + (4987, 1, 217, 0, 55400), + (4987, 2, 346, 68, 40), + (4988, 1, 217, 0, 60280), + (4988, 2, 346, 70, 40), + (4989, 1, 347, 8, 0), + (4990, 1, 347, 10, 0), + (4991, 1, 347, 12, 0), + (4992, 1, 279, 21, 0), + (4993, 1, 279, 23, 0), + (4994, 1, 279, 25, 0), + (4995, 1, 279, 27, 0), + (4996, 1, 279, 28, 0), + (5000, 1, 313, 80, 0), + (5001, 1, 313, 90, 0), + (5002, 1, 313, 100, 0), + (5010, 1, 264, 432, 35), + (5011, 1, 264, 864, 35), + (5012, 1, 264, 1296, 35), + (5013, 1, 293, 90, 0), + (5014, 1, 293, 100, 0), + (5029, 1, 85, 11621, 0), + (5030, 1, 85, 11622, 0), + (5031, 1, 85, 11623, 0), + (5032, 1, 274, 22, 0), + (5033, 1, 274, 24, 0), + (5034, 1, 274, 26, 0), + (5035, 1, 293, 60, 0), + (5036, 1, 293, 70, 0), + (5037, 1, 293, 80, 0), + (5038, 1, 219, 330, 2100), + (5039, 1, 219, 360, 2200), + (5040, 1, 219, 390, 2300), + (5045, 1, 180, 5, 0), + (5061, 1, 244, -25, 0), + (5085, 1, 360, 25, 11297), + (5086, 1, 360, 25, 11298), + (5087, 1, 360, 25, 11299), + (5118, 1, 264, 720, 396), + (5118, 2, 264, 720, 8504), + (5118, 3, 264, 720, 8505), + (5119, 1, 264, 1440, 396), + (5119, 2, 264, 1440, 8504), + (5119, 3, 264, 1440, 8505), + (5120, 1, 264, 2160, 396), + (5120, 2, 264, 2160, 8504), + (5120, 3, 264, 2160, 8505), + (5127, 1, 264, 300, 261), + (5128, 1, 264, 600, 261), + (5129, 1, 264, 900, 261), + (5133, 1, 294, 13, 100), + (5134, 1, 294, 15, 100), + (5135, 1, 294, 17, 100), + (5136, 1, 282, 20, 0), + (5137, 1, 282, 40, 0), + (5138, 1, 282, 60, 0), + (5139, 1, 282, 80, 0), + (5140, 1, 282, 100, 0), + (5141, 1, 279, 21, 0), + (5142, 1, 279, 23, 0), + (5143, 1, 279, 25, 0), + (5144, 1, 279, 27, 0), + (5145, 1, 279, 28, 0), + (5243, 1, 69, 600, 0), + (5244, 1, 69, 700, 0), + (5245, 1, 69, 800, 0), + (5246, 1, 69, 900, 0), + (5247, 1, 69, 1000, 0), + (5248, 1, 360, 10, 11232), + (5249, 1, 360, 20, 11232), + (5250, 1, 360, 30, 11232), + (5254, 1, 218, 6, 0), + (5255, 1, 218, 7, 0), + (5256, 1, 218, 8, 0), + (5257, 1, 218, 9, 0), + (5258, 1, 218, 10, 0), + (5259, 1, 218, 6, 0), + (5260, 1, 218, 7, 0), + (5261, 1, 218, 8, 0), + (5262, 1, 218, 9, 0), + (5263, 1, 218, 10, 0), + (5264, 1, 218, 1, 0), + (5265, 1, 218, 2, 0), + (5266, 1, 218, 3, 0), + (5267, 1, 218, 4, 0), + (5268, 1, 218, 5, 0), + (5269, 1, 131, 50, 50), + (5269, 2, 137, 82, 0), + (5270, 1, 303, 3000, 3000), + (5270, 2, 139, 2766, 0), + (5271, 1, 303, 3500, 3500), + (5271, 2, 139, 2766, 0), + (5272, 1, 303, 4000, 4000), + (5272, 2, 139, 2766, 0), + (5276, 1, 264, 60, 621), + (5276, 2, 264, 60, 622), + (5276, 3, 264, 60, 623), + (5276, 4, 264, 60, 784), + (5276, 5, 264, 60, 785), + (5276, 6, 264, 60, 786), + (5276, 7, 264, 60, 787), + (5276, 8, 264, 60, 624), + (5277, 1, 264, 120, 621), + (5277, 2, 264, 120, 622), + (5277, 3, 264, 120, 623), + (5277, 4, 264, 120, 784), + (5277, 5, 264, 120, 785), + (5277, 6, 264, 120, 786), + (5277, 7, 264, 120, 787), + (5277, 8, 264, 120, 624), + (5278, 1, 264, 180, 621), + (5278, 2, 264, 180, 622), + (5278, 3, 264, 180, 623), + (5278, 4, 264, 180, 784), + (5278, 5, 264, 180, 785), + (5278, 6, 264, 180, 786), + (5278, 7, 264, 180, 787), + (5278, 8, 264, 180, 624), + (5283, 1, 320, 1, 0), + (5284, 1, 320, 3, 0), + (5285, 1, 320, 5, 0), + (5286, 1, 294, 7, 100), + (5287, 1, 294, 8, 100), + (5288, 1, 294, 9, 100), + (5290, 1, 439, 0, 46480), + (5290, 2, 345, 62, 0), + (5291, 1, 439, 0, 52960), + (5291, 2, 345, 63, 0), + (5292, 1, 439, 0, 55400), + (5292, 2, 345, 64, 0), + (5293, 1, 439, 0, 60280), + (5293, 2, 345, 65, 0), + (5294, 1, 439, 0, 65440), + (5294, 2, 345, 66, 50), + (5295, 1, 360, 10, 11629), + (5296, 1, 360, 20, 11629), + (5297, 1, 360, 30, 11629), + (5301, 1, 189, 7, 0), + (5302, 1, 189, 8, 0), + (5303, 1, 189, 9, 0), + (5304, 1, 189, 10, 0), + (5305, 1, 189, 11, 0), + (5306, 1, 15, 4, 0), + (5307, 1, 15, 5, 0), + (5308, 1, 15, 6, 0), + (5309, 1, 15, 7, 0), + (5310, 1, 15, 8, 0), + (5317, 1, 114, -43, 0), + (5318, 1, 114, -46, 0), + (5319, 1, 114, -50, 0), + (5320, 1, 218, 11, 0), + (5321, 1, 218, 12, 0), + (5322, 1, 218, 13, 0), + (5323, 1, 218, 14, 0), + (5324, 1, 218, 15, 0), + (5325, 1, 280, 27, 0), + (5326, 1, 280, 34, 0), + (5327, 1, 280, 41, 0), + (5328, 1, 280, 44, 0), + (5329, 1, 280, 47, 0), + (5339, 1, 215, 24, 0), + (5347, 1, 375, 225, 0), + (5348, 1, 375, 230, 0), + (5360, 1, 397, 1300, 0), + (5366, 1, 247, 75, 20), + (5500, 1, 231, 5, 0), + (5501, 1, 231, 7, 0), + (5502, 1, 231, 9, 0), + (5516, 1, 320, 6, 0), + (5517, 1, 320, 7, 0), + (5518, 1, 320, 8, 0), + (5519, 1, 172, 40, 0), + (5520, 1, 172, 41, 0), + (5521, 1, 172, 42, 0), + (5522, 1, 172, 43, 0), + (5523, 1, 172, 44, 0), + (5524, 1, 259, 46, 0), + (5525, 1, 259, 47, 0), + (5526, 1, 259, 48, 0), + (5527, 1, 259, 49, 0), + (5528, 1, 259, 50, 0), + (5529, 1, 339, 11, 12680), + (5529, 2, 138, 1, 0), + (5529, 3, 141, 1, 0), + (5529, 4, 142, 60, 0), + (5529, 5, 137, 0, 0), + (5529, 6, 311, 0, 0), + (5529, 7, 134, 80, 0), + (5529, 8, 139, -265, 0), + (5529, 9, 139, -754, 0), + (5529, 10, 139, -1332, 0), + (5529, 11, 139, -1572, 0), + (5529, 12, 139, -2749, 0), + (5529, 13, 139, -4979, 0), + (5529, 14, 139, -5418, 0), + (5529, 15, 139, -5403, 0), + (5529, 16, 348, 10, 0), + (5530, 1, 339, 13, 12681), + (5530, 2, 138, 1, 0), + (5530, 3, 141, 1, 0), + (5530, 4, 142, 60, 0), + (5530, 5, 137, 0, 0), + (5530, 6, 311, 0, 0), + (5530, 7, 134, 80, 0), + (5530, 8, 139, -265, 0), + (5530, 9, 139, -754, 0), + (5530, 10, 139, -1332, 0), + (5530, 11, 139, -1572, 0), + (5530, 12, 139, -2749, 0), + (5530, 13, 139, -4979, 0), + (5530, 14, 139, -5418, 0), + (5530, 15, 139, -5403, 0), + (5530, 16, 348, 10, 0), + (5531, 1, 339, 15, 12682), + (5531, 2, 138, 1, 0), + (5531, 3, 141, 1, 0), + (5531, 4, 142, 60, 0), + (5531, 5, 137, 0, 0), + (5531, 6, 311, 0, 0), + (5531, 7, 134, 80, 0), + (5531, 8, 139, -265, 0), + (5531, 9, 139, -754, 0), + (5531, 10, 139, -1332, 0), + (5531, 11, 139, -1572, 0), + (5531, 12, 139, -2749, 0), + (5531, 13, 139, -4979, 0), + (5531, 14, 139, -5418, 0), + (5531, 15, 139, -5403, 0), + (5531, 16, 348, 10, 0), + (5532, 1, 339, 17, 12683), + (5532, 2, 138, 1, 0), + (5532, 3, 141, 1, 0), + (5532, 4, 142, 60, 0), + (5532, 5, 137, 0, 0), + (5532, 6, 311, 0, 0), + (5532, 7, 134, 80, 0), + (5532, 8, 139, -265, 0), + (5532, 9, 139, -754, 0), + (5532, 10, 139, -1332, 0), + (5532, 11, 139, -1572, 0), + (5532, 12, 139, -2749, 0), + (5532, 13, 139, -4979, 0), + (5532, 14, 139, -5418, 0), + (5532, 15, 139, -5403, 0), + (5532, 16, 348, 10, 0), + (5533, 1, 339, 19, 12684), + (5533, 2, 138, 1, 0), + (5533, 3, 141, 1, 0), + (5533, 4, 142, 60, 0), + (5533, 5, 137, 0, 0), + (5533, 6, 311, 0, 0), + (5533, 7, 134, 80, 0), + (5533, 8, 139, -265, 0), + (5533, 9, 139, -754, 0), + (5533, 10, 139, -1332, 0), + (5533, 11, 139, -1572, 0), + (5533, 12, 139, -2749, 0), + (5533, 13, 139, -4979, 0), + (5533, 14, 139, -5418, 0), + (5533, 15, 139, -5403, 0), + (5533, 16, 348, 10, 0), + (5534, 1, 266, 18, 0), + (5535, 1, 266, 20, 0), + (5536, 1, 266, 22, 0), + (5542, 1, 330, 110, 0), + (5542, 2, 330, 110, 1), + (5542, 3, 330, 110, 2), + (5542, 4, 330, 110, 3), + (5542, 5, 330, 110, 28), + (5542, 6, 330, 110, 36), + (5542, 7, 330, 110, 77), + (5543, 1, 330, 115, 0), + (5543, 2, 330, 115, 1), + (5543, 3, 330, 115, 2), + (5543, 4, 330, 115, 3), + (5543, 5, 330, 115, 28), + (5543, 6, 330, 115, 36), + (5543, 7, 330, 115, 77), + (5544, 1, 330, 120, 0), + (5544, 2, 330, 120, 1), + (5544, 3, 330, 120, 2), + (5544, 4, 330, 120, 3), + (5544, 5, 330, 120, 28), + (5544, 6, 330, 120, 36), + (5544, 7, 330, 120, 77), + (5545, 1, 330, 110, 0), + (5545, 2, 330, 110, 1), + (5545, 3, 330, 110, 2), + (5545, 4, 330, 110, 3), + (5545, 5, 330, 110, 28), + (5545, 6, 330, 110, 36), + (5546, 1, 330, 115, 0), + (5546, 2, 330, 115, 1), + (5546, 3, 330, 115, 2), + (5546, 4, 330, 115, 3), + (5546, 5, 330, 115, 28), + (5546, 6, 330, 115, 36), + (5547, 1, 330, 120, 0), + (5547, 2, 330, 120, 1), + (5547, 3, 330, 120, 2), + (5547, 4, 330, 120, 3), + (5547, 5, 330, 120, 28), + (5547, 6, 330, 120, 36), + (5548, 1, 330, 110, 0), + (5548, 2, 330, 110, 1), + (5548, 3, 330, 110, 2), + (5548, 4, 330, 110, 3), + (5548, 5, 330, 110, 28), + (5548, 6, 330, 110, 36), + (5548, 7, 330, 110, 77), + (5549, 1, 330, 115, 0), + (5549, 2, 330, 115, 1), + (5549, 3, 330, 115, 2), + (5549, 4, 330, 115, 3), + (5549, 5, 330, 115, 28), + (5549, 6, 330, 115, 36), + (5549, 7, 330, 115, 77), + (5550, 1, 330, 120, 0), + (5550, 2, 330, 120, 1), + (5550, 3, 330, 120, 2), + (5550, 4, 330, 120, 3), + (5550, 5, 330, 120, 28), + (5550, 6, 330, 120, 36), + (5550, 7, 330, 120, 77), + (5551, 1, 330, 85, 0), + (5551, 2, 330, 85, 1), + (5551, 3, 330, 85, 2), + (5551, 4, 330, 85, 3), + (5551, 5, 330, 85, 28), + (5551, 6, 330, 85, 36), + (5551, 7, 330, 85, 77), + (5552, 1, 330, 90, 0), + (5552, 2, 330, 90, 1), + (5552, 3, 330, 90, 2), + (5552, 4, 330, 90, 3), + (5552, 5, 330, 90, 28), + (5552, 6, 330, 90, 36), + (5552, 7, 330, 90, 77), + (5553, 1, 330, 95, 0), + (5553, 2, 330, 95, 1), + (5553, 3, 330, 95, 2), + (5553, 4, 330, 95, 3), + (5553, 5, 330, 95, 28), + (5553, 6, 330, 95, 36), + (5553, 7, 330, 95, 77), + (5554, 1, 278, 700, 44340), + (5554, 2, 440, 71, 100), + (5555, 1, 278, 720, 47230), + (5555, 2, 440, 73, 100), + (5556, 1, 278, 750, 51057), + (5556, 2, 440, 75, 100), + (5557, 1, 341, 110, 0), + (5558, 1, 341, 120, 0), + (5559, 1, 341, 130, 0), + (5560, 1, 341, 140, 0), + (5561, 1, 341, 150, 0), + (5562, 1, 360, 40, 11023), + (5563, 1, 360, 50, 11023), + (5564, 1, 360, 60, 11023), + (5566, 1, 318, 11, 0), + (5567, 1, 318, 12, 0), + (5568, 1, 318, 13, 0), + (5569, 1, 318, 14, 0), + (5570, 1, 318, 15, 0), + (5571, 1, 294, 16, 100), + (5572, 1, 294, 17, 100), + (5573, 1, 294, 18, 100), + (5574, 1, 294, 0, 170), + (5575, 1, 294, 0, 175), + (5576, 1, 294, 0, 180), + (5577, 1, 294, 0, 145), + (5578, 1, 294, 0, 150), + (5579, 1, 294, 0, 155), + (5580, 1, 266, 30, 0), + (5581, 1, 266, 31, 0), + (5582, 1, 266, 32, 0), + (5586, 1, 114, -53, 0), + (5587, 1, 114, -56, 0), + (5588, 1, 114, -59, 0), + (5589, 1, 319, 17, 0), + (5590, 1, 319, 19, 0), + (5591, 1, 319, 21, 0), + (5592, 1, 274, 30, 0), + (5593, 1, 274, 32, 0), + (5594, 1, 274, 34, 0), + (5595, 1, 279, 31, 0), + (5596, 1, 279, 32, 0), + (5597, 1, 279, 33, 0), + (5611, 1, 274, 28, 0), + (5612, 1, 274, 30, 0), + (5613, 1, 274, 32, 0), + (5617, 1, 294, 18, 100), + (5618, 1, 294, 19, 100), + (5619, 1, 294, 20, 100), + (5620, 1, 320, 6, 0), + (5621, 1, 320, 7, 0), + (5622, 1, 320, 8, 0), + (5623, 1, 15, 9, 0), + (5624, 1, 15, 10, 0), + (5625, 1, 15, 11, 0), + (5626, 1, 15, 12, 0), + (5627, 1, 15, 13, 0), + (5628, 1, 114, -53, 0), + (5629, 1, 114, -56, 0), + (5630, 1, 114, -59, 0), + (5729, 1, 218, 11, 0), + (5730, 1, 218, 12, 0), + (5731, 1, 218, 13, 0), + (5732, 1, 218, 14, 0), + (5733, 1, 218, 15, 0), + (5738, 1, 280, 62, 0), + (5739, 1, 280, 63, 0), + (5740, 1, 280, 64, 0), + (5776, 1, 169, 5, -1), + (5777, 1, 169, 10, -1), + (5778, 1, 169, 15, -1), + (5797, 1, 264, 2520, 396), + (5797, 2, 264, 2520, 8504), + (5797, 3, 264, 2520, 8505), + (5798, 1, 264, 2880, 396), + (5798, 2, 264, 2880, 8504), + (5798, 3, 264, 2880, 8505), + (5799, 1, 264, 3240, 396), + (5799, 2, 264, 3240, 8504), + (5799, 3, 264, 3240, 8505), + (5806, 1, 279, 7, 0), + (5807, 1, 279, 11, 0), + (5808, 1, 279, 15, 0), + (5825, 1, 244, -40, 0), + (5850, 1, 287, 2, 1), + (5850, 2, 137, 31, 0), + (5850, 3, 136, 5, 0), + (5860, 1, 243, 40, 0), + (5861, 1, 243, 45, 0), + (5862, 1, 243, 50, 0), + (5880, 1, 287, 8, 0), + (5880, 2, 385, 2754, 1), + (5881, 1, 287, 10, 0), + (5881, 2, 385, 2754, 1), + (5882, 1, 287, 12, 0), + (5882, 2, 385, 2754, 1), + (5883, 2, 139, 2754, 1), + (5886, 1, 274, 12, 0), + (5887, 1, 274, 14, 0), + (5888, 1, 274, 16, 0), + (5889, 1, 280, 51, 0), + (5890, 1, 280, 52, 0), + (5891, 1, 280, 53, 0), + (5909, 1, 279, 29, 0), + (5910, 1, 279, 30, 0), + (5911, 1, 279, 31, 0), + (5912, 1, 279, 32, 0), + (5913, 1, 279, 33, 0), + (5917, 1, 220, 100, 26), + (5917, 2, 220, 100, 30), + (5917, 3, 220, 100, 38), + (5918, 1, 220, 110, 26), + (5918, 2, 220, 110, 30), + (5918, 3, 220, 110, 38), + (5919, 1, 220, 120, 26), + (5919, 2, 220, 120, 30), + (5919, 3, 220, 120, 38), + (5922, 1, 292, 35, 0), + (5923, 1, 292, 40, 0), + (5924, 1, 292, 45, 0), + (5939, 1, 218, 6, 0), + (5940, 1, 218, 7, 0), + (5941, 1, 218, 8, 0), + (5942, 1, 218, 9, 0), + (5943, 1, 218, 10, 0), + (5944, 1, 273, 4, 0), + (5945, 1, 273, 5, 0), + (5946, 1, 273, 6, 0), + (5950, 1, 264, 240, 175), + (5950, 2, 264, 240, 792), + (5951, 1, 264, 300, 175), + (5951, 2, 264, 300, 792), + (5952, 1, 264, 360, 175), + (5952, 2, 264, 360, 792), + (5954, 1, 264, 2400, 68), + (5955, 1, 264, 3000, 68), + (5956, 1, 264, 3600, 68), + (5972, 1, 264, 2880, 6001), + (5972, 2, 264, 2880, 3676), + (5973, 1, 264, 2880, 6000), + (5973, 2, 264, 2880, 87), + (6003, 1, 279, 29, 0), + (6004, 1, 279, 30, 0), + (6005, 1, 279, 31, 0), + (6006, 1, 279, 32, 0), + (6007, 1, 279, 33, 0), + (6011, 1, 216, 95, 0), + (6011, 2, 216, 95, 1), + (6011, 3, 216, 95, 2), + (6011, 4, 216, 95, 3), + (6011, 5, 216, 95, 10), + (6011, 6, 216, 95, 28), + (6011, 7, 216, 95, 30), + (6011, 8, 216, 95, 36), + (6011, 9, 216, 95, 77), + (6012, 1, 216, 100, 0), + (6012, 2, 216, 100, 1), + (6012, 3, 216, 100, 2), + (6012, 4, 216, 100, 3), + (6012, 5, 216, 100, 10), + (6012, 6, 216, 100, 28), + (6012, 7, 216, 100, 30), + (6012, 8, 216, 100, 36), + (6012, 9, 216, 100, 77), + (6013, 1, 216, 105, 0), + (6013, 2, 216, 105, 1), + (6013, 3, 216, 105, 2), + (6013, 4, 216, 105, 3), + (6013, 5, 216, 105, 10), + (6013, 6, 216, 105, 28), + (6013, 7, 216, 105, 30), + (6013, 8, 216, 105, 36), + (6013, 9, 216, 105, 77), + (6014, 1, 360, 40, 12617), + (6015, 1, 360, 50, 12617), + (6016, 1, 360, 60, 12617), + (6017, 1, 217, 0, 65440), + (6017, 2, 346, 72, 28), + (6018, 1, 217, 0, 70880), + (6018, 2, 346, 74, 28), + (6019, 1, 217, 0, 76600), + (6019, 2, 346, 76, 28), + (6020, 1, 220, 15, 21), + (6020, 2, 220, 15, 23), + (6020, 3, 220, 30, 52), + (6020, 4, 220, 15, 28), + (6021, 1, 220, 25, 21), + (6021, 2, 220, 25, 23), + (6021, 3, 220, 50, 52), + (6021, 4, 220, 25, 28), + (6022, 1, 220, 35, 21), + (6022, 2, 220, 35, 23), + (6022, 3, 220, 70, 52), + (6022, 4, 220, 35, 28), + (6023, 1, 278, 900, 66950), + (6023, 2, 440, 82, 100), + (6024, 1, 278, 900, 70230), + (6024, 2, 440, 84, 100), + (6025, 1, 278, 900, 74935), + (6025, 2, 440, 86, 100), + (6026, 1, 127, 10, 0), + (6026, 2, 139, 16106, 0), + (6027, 1, 127, 25, 0), + (6027, 2, 139, 16106, 0), + (6028, 1, 127, 50, 0), + (6028, 2, 139, 16106, 0), + (6029, 1, 216, 200, 8), + (6030, 1, 216, 250, 8), + (6031, 1, 216, 300, 8), + (6032, 1, 439, 0, 70880), + (6032, 2, 345, 68, 50), + (6033, 1, 439, 0, 76600), + (6033, 2, 345, 70, 50), + (6034, 1, 439, 0, 82600), + (6034, 2, 345, 72, 35), + (6035, 1, 258, 48, 0), + (6036, 1, 258, 51, 0), + (6037, 1, 258, 54, 0), + (6042, 1, 220, 70, 8), + (6043, 1, 220, 80, 8), + (6044, 1, 220, 100, 8), + (6045, 1, 220, 45, 21), + (6045, 2, 220, 45, 23), + (6045, 3, 220, 90, 52), + (6045, 4, 220, 45, 28), + (6046, 1, 220, 55, 21), + (6046, 2, 220, 55, 23), + (6046, 3, 220, 110, 52), + (6046, 4, 220, 55, 28), + (6047, 1, 220, 65, 21), + (6047, 2, 220, 65, 23), + (6047, 3, 220, 130, 52), + (6047, 4, 220, 65, 28), + (6048, 1, 220, 75, 21), + (6048, 2, 220, 75, 23), + (6048, 3, 220, 150, 52), + (6048, 4, 220, 75, 28), + (6049, 1, 220, 85, 21), + (6049, 2, 220, 85, 23), + (6049, 3, 220, 170, 52), + (6049, 4, 220, 85, 28), + (6050, 1, 220, 95, 21), + (6050, 2, 220, 95, 23), + (6050, 3, 220, 190, 52), + (6050, 4, 220, 95, 28), + (6051, 1, 213, 1, 0), + (6052, 1, 213, 3, 0), + (6053, 1, 213, 5, 0), + (6057, 1, 220, 105, 21), + (6057, 2, 220, 105, 23), + (6057, 3, 220, 210, 52), + (6057, 4, 220, 105, 28), + (6058, 1, 220, 115, 21), + (6058, 2, 220, 115, 23), + (6058, 3, 220, 230, 52), + (6058, 4, 220, 115, 28), + (6059, 1, 220, 125, 21), + (6059, 2, 220, 125, 23), + (6059, 3, 220, 250, 52), + (6059, 4, 220, 125, 28), + (6060, 1, 247, 5, 76), + (6061, 1, 247, 10, 76), + (6063, 1, 303, 4500, 4500), + (6063, 2, 139, 2766, 0), + (6064, 1, 303, 5000, 5000), + (6064, 2, 139, 2766, 0), + (6065, 1, 303, 5500, 5500), + (6065, 2, 139, 2766, 0), + (6066, 1, 85, 12629, 0), + (6067, 1, 85, 12630, 0), + (6068, 1, 85, 12631, 0), + (6069, 1, 85, 12632, 0), + (6070, 1, 85, 12633, 0), + (6071, 1, 85, 12634, 0), + (6072, 1, 302, 266, 266), + (6072, 2, 385, 99, 0), + (6073, 1, 302, 290, 290), + (6073, 2, 385, 99, 0), + (6074, 1, 302, 310, 310), + (6074, 2, 385, 99, 0), + (6075, 1, 59, -18, 0), + (6076, 1, 59, -21, 0), + (6077, 1, 59, -24, 0), + (6078, 1, 59, -27, 0), + (6079, 1, 59, -30, 0), + (6080, 1, 189, 12, 0), + (6081, 1, 189, 13, 0), + (6082, 1, 247, 50, 20), + (6083, 1, 247, 75, 20), + (6084, 1, 247, 100, 20), + (6085, 1, 292, 20, 0), + (6086, 1, 292, 30, 0), + (6087, 1, 292, 40, 0), + (6088, 1, 264, 180, 392), + (6089, 1, 264, 360, 392), + (6090, 1, 264, 540, 392), + (6112, 1, 131, 10, 10), + (6112, 2, 348, 10, 0), + (6112, 3, 137, -32, 0), + (6113, 1, 287, 2, 0), + (6113, 2, 137, 100, 0), + (6113, 3, 385, -4232, 0), + (6113, 4, 385, -4332, 0), + (6113, 5, 139, -2741, 0), + (6113, 6, 385, -16192, 0), + (6113, 7, 139, -16843, 0), + (6114, 1, 287, 3, 0), + (6114, 2, 137, 100, 0), + (6114, 3, 385, -4232, 0), + (6114, 4, 385, -4332, 0), + (6114, 5, 139, -2741, 0), + (6114, 6, 385, -16192, 0), + (6114, 7, 139, -16843, 0), + (6115, 1, 287, 4, 0), + (6115, 2, 137, 100, 0), + (6115, 3, 385, -4232, 0), + (6115, 4, 385, -4332, 0), + (6115, 5, 139, -2741, 0), + (6115, 6, 385, -16192, 0), + (6115, 7, 139, -16843, 0), + (6119, 1, 69, 100, 0), + (6120, 1, 69, 200, 0), + (6121, 1, 69, 300, 0), + (6122, 1, 69, 400, 0), + (6123, 1, 69, 500, 0), + (6124, 1, 320, 1, 0), + (6125, 1, 320, 3, 0), + (6126, 1, 320, 5, 0), + (6127, 1, 320, 6, 0), + (6128, 1, 320, 7, 0), + (6129, 1, 320, 8, 0), + (6130, 1, 255, 48, 0), + (6131, 1, 255, 60, 0), + (6132, 1, 255, 72, 0), + (6136, 1, 264, 360, 300), + (6202, 1, 247, 10, 35), + (6203, 1, 247, 20, 35), + (6204, 1, 247, 60, 35), + (6209, 1, 264, 720, 245), + (6210, 1, 264, 1440, 245), + (6211, 1, 264, 2160, 245), + (6215, 1, 247, 5, 76), + (6216, 1, 247, 10, 76), + (6217, 1, 247, 15, 76), + (6223, 1, 232, 11, 4544), + (6224, 1, 232, 12, 4544), + (6225, 1, 232, 13, 4544), + (6226, 1, 232, 14, 4544), + (6227, 1, 232, 15, 4544), + (6228, 1, 264, 120, 404), + (6229, 1, 264, 240, 404), + (6230, 1, 264, 360, 404), + (6231, 1, 264, 480, 404), + (6233, 1, 264, 1728, 43), + (6234, 1, 264, 2160, 43), + (6235, 1, 264, 2592, 43), + (6236, 1, 287, 1, 0), + (6236, 2, 137, 3, 0), + (6236, 3, 137, 99, 0), + (6236, 4, 138, 0, 0), + (6236, 5, 244, 50, 0), + (6237, 1, 287, 2, 0), + (6237, 2, 137, 3, 0), + (6237, 3, 137, 99, 0), + (6237, 4, 138, 0, 0), + (6237, 5, 244, 38, 0), + (6238, 1, 287, 3, 0), + (6238, 2, 137, 3, 0), + (6238, 3, 137, 99, 0), + (6238, 4, 138, 0, 0), + (6238, 5, 244, 25, 0), + (6240, 1, 273, 3, 0), + (6241, 1, 273, 6, 0), + (6242, 1, 273, 9, 0), + (6243, 1, 273, 12, 0), + (6244, 1, 273, 15, 0), + (6245, 1, 273, 18, 0), + (6249, 1, 310, 1000, 0), + (6249, 2, 139, 11903, 0), + (6249, 3, 310, 1000, 0), + (6249, 4, 139, 11904, 0), + (6249, 5, 310, 1000, 0), + (6249, 6, 139, 11905, 0), + (6249, 7, 310, 1000, 0), + (6249, 8, 139, 1362, 0), + (6249, 9, 310, 1000, 0), + (6249, 10, 139, 8032, 0), + (6249, 11, 310, 1000, 0), + (6249, 12, 385, 6131, 0), + (6249, 13, 385, 6231, 0), + (6249, 14, 385, 6331, 0), + (6249, 15, 385, 6431, 0), + (6249, 16, 385, 6531, 0), + (6249, 17, 385, 6631, 0), + (6250, 1, 310, 2000, 0), + (6250, 2, 139, 11903, 0), + (6250, 3, 310, 2000, 0), + (6250, 4, 139, 11904, 0), + (6250, 5, 310, 2000, 0), + (6250, 6, 139, 11905, 0), + (6250, 7, 310, 2000, 0), + (6250, 8, 139, 1362, 0), + (6250, 9, 310, 2000, 0), + (6250, 10, 139, 8032, 0), + (6250, 11, 310, 2000, 0), + (6250, 12, 385, 6131, 0), + (6250, 13, 385, 6231, 0), + (6250, 14, 385, 6331, 0), + (6250, 15, 385, 6431, 0), + (6250, 16, 385, 6531, 0), + (6250, 17, 385, 6631, 0), + (6251, 1, 310, 3000, 0), + (6251, 2, 139, 11903, 0), + (6251, 3, 310, 3000, 0), + (6251, 4, 139, 11904, 0), + (6251, 5, 310, 3000, 0), + (6251, 6, 139, 11905, 0), + (6251, 7, 310, 3000, 0), + (6251, 8, 139, 1362, 0), + (6251, 9, 310, 3000, 0), + (6251, 10, 139, 8032, 0), + (6251, 11, 310, 3000, 0), + (6251, 12, 385, 6131, 0), + (6251, 13, 385, 6231, 0), + (6251, 14, 385, 6331, 0), + (6251, 15, 385, 6431, 0), + (6251, 16, 385, 6531, 0), + (6251, 17, 385, 6631, 0), + (6252, 1, 310, 4000, 0), + (6252, 2, 139, 11903, 0), + (6252, 3, 310, 4000, 0), + (6252, 4, 139, 11904, 0), + (6252, 5, 310, 4000, 0), + (6252, 6, 139, 11905, 0), + (6252, 7, 310, 4000, 0), + (6252, 8, 139, 1362, 0), + (6252, 9, 310, 4000, 0), + (6252, 10, 139, 8032, 0), + (6252, 11, 310, 4000, 0), + (6252, 12, 385, 6131, 0), + (6252, 13, 385, 6231, 0), + (6252, 14, 385, 6331, 0), + (6252, 15, 385, 6431, 0), + (6252, 16, 385, 6531, 0), + (6252, 17, 385, 6631, 0), + (6253, 1, 310, 5000, 0), + (6253, 2, 139, 11903, 0), + (6253, 3, 310, 5000, 0), + (6253, 4, 139, 11904, 0), + (6253, 5, 310, 5000, 0), + (6253, 6, 139, 11905, 0), + (6253, 7, 310, 5000, 0), + (6253, 8, 139, 1362, 0), + (6253, 9, 310, 5000, 0), + (6253, 10, 139, 8032, 0), + (6253, 11, 310, 5000, 0), + (6253, 12, 385, 6131, 0), + (6253, 13, 385, 6231, 0), + (6253, 14, 385, 6331, 0), + (6253, 15, 385, 6431, 0), + (6253, 16, 385, 6531, 0), + (6253, 17, 385, 6631, 0), + (6257, 1, 128, 5, 5), + (6257, 2, 138, 1, 0), + (6257, 3, 140, 1, 0), + (6257, 4, 139, -2741, 0), + (6257, 5, 139, -16843, 0), + (6257, 6, 385, -16192, 0), + (6258, 1, 128, 15, 15), + (6258, 2, 138, 1, 0), + (6258, 3, 140, 1, 0), + (6258, 4, 139, -2741, 0), + (6258, 5, 139, -16843, 0), + (6258, 6, 385, -16192, 0), + (6259, 1, 128, 30, 30), + (6259, 2, 138, 1, 0), + (6259, 3, 140, 1, 0), + (6259, 4, 139, -2741, 0), + (6259, 5, 139, -16843, 0), + (6259, 6, 385, -16192, 0), + (6260, 1, 264, 720, 98), + (6261, 1, 264, 900, 98), + (6262, 1, 264, 1080, 98), + (6266, 1, 224, 20, 10), + (6266, 2, 173, 1, 0), + (6267, 1, 224, 35, 10), + (6267, 2, 173, 2, 0), + (6268, 1, 224, 50, 10), + (6268, 2, 173, 3, 0), + (6269, 1, 224, 20, 30), + (6269, 2, 173, 1, 0), + (6270, 1, 224, 35, 30), + (6270, 2, 173, 2, 0), + (6271, 1, 224, 50, 30), + (6271, 2, 173, 3, 0), + (6272, 1, 264, 15, 672), + (6273, 1, 264, 30, 672), + (6274, 1, 264, 45, 672), + (6275, 1, 224, 20, 8), + (6275, 2, 173, 1, 0), + (6276, 1, 224, 35, 8), + (6276, 2, 173, 2, 0), + (6277, 1, 224, 50, 8), + (6277, 2, 173, 3, 0), + (6283, 1, 85, 13200, 0), + (6284, 1, 85, 13200, 25), + (6285, 1, 85, 13200, 50), + (6287, 1, 224, 20, 30), + (6287, 2, 173, 1, 0), + (6288, 1, 224, 35, 30), + (6288, 2, 173, 3, 0), + (6289, 1, 224, 50, 30), + (6289, 2, 173, 3, 0), + (6300, 1, 247, 20, 76), + (6301, 1, 247, 25, 76), + (6302, 1, 264, 120, 3710), + (6303, 1, 264, 240, 3710), + (6304, 1, 264, 360, 3710), + (6319, 1, 264, 1728, 107), + (6320, 1, 264, 2160, 107), + (6321, 1, 264, 2592, 107), + (6322, 1, 216, 5, 51), + (6323, 1, 216, 15, 51), + (6324, 1, 216, 25, 51), + (6331, 1, 252, 70, 0), + (6332, 1, 252, 75, 0), + (6334, 1, 185, 5, 51), + (6335, 1, 185, 10, 51), + (6336, 1, 185, 15, 51), + (6337, 1, 264, 60, 553), + (6338, 1, 264, 120, 553), + (6339, 1, 264, 180, 553), + (6340, 1, 264, 180, 777), + (6341, 1, 264, 360, 777), + (6342, 1, 264, 540, 777), + (6343, 1, 264, 5, 468), + (6343, 2, 264, 5, 469), + (6343, 3, 264, 5, 470), + (6344, 1, 264, 10, 468), + (6344, 2, 264, 10, 469), + (6344, 3, 264, 10, 470), + (6345, 1, 264, 15, 468), + (6345, 2, 264, 15, 469), + (6345, 3, 264, 15, 470), + (6346, 1, 264, 180, 494), + (6347, 1, 264, 360, 494), + (6348, 1, 264, 540, 494), + (6349, 1, 264, 180, 500), + (6350, 1, 264, 360, 500), + (6351, 1, 264, 540, 500), + (6355, 1, 310, 360000, 0), + (6355, 2, 139, 4506, 0), + (6355, 3, 310, 360000, 0), + (6355, 4, 385, 11122, 0), + (6355, 5, 385, 11222, 0), + (6355, 6, 385, 11322, 0), + (6355, 7, 385, 11522, 0), + (6356, 1, 310, 720000, 0), + (6356, 2, 139, 4506, 0), + (6356, 3, 310, 720000, 0), + (6356, 4, 385, 11122, 0), + (6356, 5, 385, 11222, 0), + (6356, 6, 385, 11322, 0), + (6356, 7, 385, 11522, 0), + (6357, 1, 310, 1080000, 0), + (6357, 2, 139, 4506, 0), + (6357, 3, 310, 1080000, 0), + (6357, 4, 385, 11122, 0), + (6357, 5, 385, 11222, 0), + (6357, 6, 385, 11322, 0), + (6357, 7, 385, 11522, 0), + (6358, 1, 310, 1440000, 0), + (6358, 2, 139, 4506, 0), + (6358, 3, 310, 1440000, 0), + (6358, 4, 385, 11122, 0), + (6358, 5, 385, 11222, 0), + (6358, 6, 385, 11322, 0), + (6358, 7, 385, 11522, 0), + (6359, 1, 310, 1800000, 0), + (6359, 2, 139, 4506, 0), + (6359, 3, 310, 1800000, 0), + (6359, 4, 385, 11122, 0), + (6359, 5, 385, 11222, 0), + (6359, 6, 385, 11322, 0), + (6359, 7, 385, 11522, 0), + (6360, 1, 310, 2160000, 0), + (6360, 2, 139, 4506, 0), + (6360, 3, 310, 2160000, 0), + (6360, 4, 385, 11122, 0), + (6360, 5, 385, 11222, 0), + (6360, 6, 385, 11322, 0), + (6360, 7, 385, 11522, 0), + (6361, 1, 213, 3, 0), + (6362, 1, 310, 120000, 0), + (6362, 2, 139, 5040, 0), + (6363, 1, 310, 240000, 0), + (6363, 2, 139, 5040, 0), + (6364, 1, 310, 360000, 0), + (6364, 2, 139, 5040, 0), + (6365, 1, 310, 480000, 0), + (6365, 2, 139, 5040, 0), + (6366, 1, 310, 600000, 0), + (6366, 2, 139, 5040, 0), + (6375, 1, 375, 107, 0), + (6376, 1, 375, 115, 0), + (6377, 1, 375, 125, 0), + (6383, 1, 215, 5, 0), + (6384, 1, 215, 7, 0), + (6385, 1, 215, 10, 0), + (6386, 1, 293, 5, 0), + (6387, 1, 293, 10, 0), + (6388, 1, 293, 15, 0), + (6389, 1, 293, 20, 0), + (6390, 1, 0, 16, 0), + (6391, 1, 0, 17, 0), + (6392, 1, 0, 18, 0), + (6393, 1, 0, 19, 0), + (6394, 1, 0, 20, 0), + (6395, 1, 85, 13502, 0), + (6396, 1, 85, 13503, 0), + (6397, 1, 85, 13504, 0), + (6403, 1, 294, 11, 100), + (6404, 1, 294, 13, 100), + (6405, 1, 294, 15, 100), + (6406, 1, 360, 25, 13201), + (6407, 1, 360, 25, 13202), + (6408, 1, 360, 25, 13203), + (6409, 1, 247, 5, 76), + (6410, 1, 247, 10, 76), + (6411, 1, 247, 15, 76), + (6412, 1, 247, 20, 76), + (6413, 1, 247, 25, 76), + (6414, 1, 247, 30, 76), + (6415, 1, 247, 35, 76), + (6416, 1, 247, 40, 76), + (6417, 1, 247, 45, 76), + (6418, 1, 247, 50, 76), + (6419, 1, 247, 5, 76), + (6420, 1, 247, 10, 76), + (6421, 1, 247, 15, 76), + (6422, 1, 214, 100, 0), + (6423, 1, 214, 200, 0), + (6424, 1, 214, 300, 0), + (6428, 1, 320, 1, 0), + (6429, 1, 320, 3, 0), + (6430, 1, 320, 5, 0), + (6431, 1, 317, 6, 0), + (6432, 1, 317, 7, 0), + (6433, 1, 317, 8, 0), + (6434, 1, 317, 9, 0), + (6435, 1, 317, 10, 0), + (6436, 1, 244, 70, 0), + (6437, 1, 244, 60, 0), + (6438, 1, 244, 50, 0), + (6439, 1, 264, 720, 41), + (6440, 1, 264, 900, 41), + (6441, 1, 264, 840, 420), + (6442, 1, 264, 540, 362), + (6443, 1, 264, 630, 362), + (6445, 1, 127, 15, 0), + (6445, 2, 139, 3248, 0), + (6445, 3, 127, 15, 0), + (6445, 4, 139, 3249, 0), + (6446, 1, 127, 30, 0), + (6446, 2, 139, 3248, 0), + (6446, 3, 127, 30, 0), + (6446, 4, 139, 3249, 0), + (6447, 1, 127, 50, 0), + (6447, 2, 139, 3248, 0), + (6447, 3, 127, 50, 0), + (6447, 4, 139, 3249, 0), + (6452, 1, 310, 1000, 0), + (6452, 2, 403, 7, 0), + (6452, 3, 404, 35, 0), + (6452, 4, 144, 2000, 0), + (6452, 5, 310, 5000, 0), + (6452, 6, 403, 7, 0), + (6452, 7, 404, 35, 0), + (6452, 8, 144, 10000, 0), + (6453, 1, 310, 2000, 0), + (6453, 2, 403, 7, 0), + (6453, 3, 404, 35, 0), + (6453, 4, 144, 2000, 0), + (6453, 5, 310, 10000, 0), + (6453, 6, 403, 7, 0), + (6453, 7, 404, 35, 0), + (6453, 8, 144, 10000, 0), + (6454, 1, 310, 3000, 0), + (6454, 2, 403, 7, 0), + (6454, 3, 404, 35, 0), + (6454, 4, 144, 2000, 0), + (6454, 5, 310, 15000, 0), + (6454, 6, 403, 7, 0), + (6454, 7, 404, 35, 0), + (6454, 8, 144, 10000, 0), + (6458, 1, 310, 30000, 0), + (6458, 2, 385, 5137, 0), + (6458, 3, 385, 5237, 0), + (6458, 4, 385, 5337, 0), + (6458, 5, 385, 5437, 0), + (6458, 6, 385, 5537, 0), + (6458, 7, 385, 5637, 0), + (6458, 8, 127, 15, 15), + (6458, 9, 385, 5137, 0), + (6458, 10, 385, 5237, 0), + (6458, 11, 385, 5337, 0), + (6458, 12, 385, 5437, 0), + (6458, 13, 385, 5537, 0), + (6458, 14, 385, 5637, 0), + (6459, 1, 310, 60000, 0), + (6459, 2, 385, 5137, 0), + (6459, 3, 385, 5237, 0), + (6459, 4, 385, 5337, 0), + (6459, 5, 385, 5437, 0), + (6459, 6, 385, 5537, 0), + (6459, 7, 385, 5637, 0), + (6459, 8, 127, 30, 30), + (6459, 9, 385, 5137, 0), + (6459, 10, 385, 5237, 0), + (6459, 11, 385, 5337, 0), + (6459, 12, 385, 5437, 0), + (6459, 13, 385, 5537, 0), + (6459, 14, 385, 5637, 0), + (6460, 1, 310, 90000, 0), + (6460, 2, 385, 5137, 0), + (6460, 3, 385, 5237, 0), + (6460, 4, 385, 5337, 0), + (6460, 5, 385, 5437, 0), + (6460, 6, 385, 5537, 0), + (6460, 7, 385, 5637, 0), + (6460, 8, 127, 50, 50), + (6460, 9, 385, 5137, 0), + (6460, 10, 385, 5237, 0), + (6460, 11, 385, 5337, 0), + (6460, 12, 385, 5437, 0), + (6460, 13, 385, 5537, 0), + (6460, 14, 385, 5637, 0), + (6461, 1, 127, 15, 0), + (6461, 2, 385, 14130, 0), + (6461, 3, 385, 14230, 0), + (6461, 4, 385, 14330, 0), + (6461, 5, 385, 14430, 0), + (6461, 6, 385, 14530, 0), + (6461, 7, 385, 14630, 0), + (6461, 8, 310, 30000, 0), + (6461, 9, 385, 14130, 0), + (6461, 10, 385, 14230, 0), + (6461, 11, 385, 14330, 0), + (6461, 12, 385, 14430, 0), + (6461, 13, 385, 14530, 0), + (6461, 14, 385, 14630, 0), + (6462, 1, 127, 30, 0), + (6462, 2, 385, 14130, 0), + (6462, 3, 385, 14230, 0), + (6462, 4, 385, 14330, 0), + (6462, 5, 385, 14430, 0), + (6462, 6, 385, 14530, 0), + (6462, 7, 385, 14630, 0), + (6462, 8, 310, 60000, 0), + (6462, 9, 385, 14130, 0), + (6462, 10, 385, 14230, 0), + (6462, 11, 385, 14330, 0), + (6462, 12, 385, 14430, 0), + (6462, 13, 385, 14530, 0), + (6462, 14, 385, 14630, 0), + (6463, 1, 127, 50, 0), + (6463, 2, 385, 14130, 0), + (6463, 3, 385, 14230, 0), + (6463, 4, 385, 14330, 0), + (6463, 5, 385, 14430, 0), + (6463, 6, 385, 14530, 0), + (6463, 7, 385, 14630, 0), + (6463, 8, 310, 90000, 0), + (6463, 9, 385, 14130, 0), + (6463, 10, 385, 14230, 0), + (6463, 11, 385, 14330, 0), + (6463, 12, 385, 14430, 0), + (6463, 13, 385, 14530, 0), + (6463, 14, 385, 14630, 0), + (6467, 1, 214, 100, 0), + (6468, 1, 214, 200, 0), + (6469, 1, 214, 300, 0), + (6470, 1, 247, 15, 76), + (6471, 1, 247, 20, 76), + (6472, 1, 247, 30, 76), + (6473, 1, 247, 35, 76), + (6474, 1, 247, 55, 76), + (6475, 1, 247, 60, 76), + (6476, 1, 247, 20, 76), + (6477, 1, 247, 25, 76), + (6478, 1, 264, 1, 3800), + (6479, 1, 264, 2, 3800), + (6480, 1, 264, 3, 3800), + (6481, 1, 264, 6480, 36), + (6482, 1, 264, 12960, 36), + (6483, 1, 264, 19440, 36), + (6484, 1, 264, 105, 558), + (6485, 1, 264, 120, 558), + (6486, 1, 264, 135, 558), + (6489, 1, 310, 600000, 0), + (6489, 2, 139, 4500, 0), + (6489, 3, 411, 8, 0), + (6490, 1, 310, 1200000, 0), + (6490, 2, 139, 4500, 0), + (6490, 3, 411, 8, 0), + (6491, 1, 310, 1800000, 0), + (6491, 2, 139, 4500, 0), + (6491, 3, 411, 8, 0), + (6500, 1, 273, 5, 0), + (6501, 1, 273, 6, 0), + (6502, 1, 273, 7, 0), + (6503, 1, 127, 12, 0), + (6503, 2, 385, 3338, 0), + (6504, 1, 127, 24, 0), + (6504, 2, 385, 3338, 0), + (6505, 1, 127, 36, 0), + (6505, 2, 385, 3338, 0), + (6506, 1, 127, 50, 0), + (6506, 2, 385, 3338, 0), + (6511, 1, 216, 5, 7), + (6512, 1, 216, 15, 7), + (6513, 1, 216, 25, 7), + (6514, 1, 127, 15, 0), + (6514, 2, 139, 5880, 0), + (6515, 1, 127, 30, 0), + (6515, 2, 139, 5880, 0), + (6516, 1, 127, 50, 0), + (6516, 2, 139, 5880, 0), + (6517, 1, 339, 10, 8105), + (6517, 2, 142, 65, 0), + (6517, 3, 311, 0, 0), + (6517, 4, 134, 70, 0), + (6517, 5, 348, 10, 0), + (6517, 6, 137, 0, 0), + (6517, 7, 339, 10, 8105), + (6517, 8, 142, 65, 0), + (6517, 9, 311, 0, 0), + (6517, 10, 134, 70, 0), + (6517, 11, 348, 10, 0), + (6517, 12, 137, 100, 0), + (6517, 13, 339, 10, 8105), + (6517, 14, 142, 65, 0), + (6517, 15, 311, 0, 0), + (6517, 16, 134, 70, 0), + (6517, 17, 348, 10, 0), + (6517, 18, 137, 79, 0), + (6517, 19, 339, 10, 8105), + (6517, 20, 142, 65, 0), + (6517, 21, 311, 0, 0), + (6517, 22, 134, 70, 0), + (6517, 23, 348, 10, 0), + (6517, 24, 137, 147, 0), + (6517, 25, 339, 10, 11404), + (6517, 26, 142, 71, 0), + (6517, 27, 311, 0, 0), + (6517, 28, 134, 75, 0), + (6517, 29, 348, 10, 0), + (6517, 30, 137, 0, 0), + (6517, 31, 339, 10, 11404), + (6517, 32, 142, 71, 0), + (6517, 33, 311, 0, 0), + (6517, 34, 134, 75, 0), + (6517, 35, 348, 10, 0), + (6517, 36, 137, 100, 0), + (6517, 37, 339, 10, 11404), + (6517, 38, 142, 71, 0), + (6517, 39, 311, 0, 0), + (6517, 40, 134, 75, 0), + (6517, 41, 348, 10, 0), + (6517, 42, 137, 79, 0), + (6517, 43, 339, 10, 11404), + (6517, 44, 142, 71, 0), + (6517, 45, 311, 0, 0), + (6517, 46, 134, 75, 0), + (6517, 47, 348, 10, 0), + (6517, 48, 137, 147, 0), + (6517, 49, 339, 10, 13199), + (6517, 50, 142, 76, 0), + (6517, 51, 311, 0, 0), + (6517, 52, 134, 80, 0), + (6517, 53, 348, 10, 0), + (6517, 54, 137, 0, 0), + (6517, 55, 339, 10, 13199), + (6517, 56, 142, 76, 0), + (6517, 57, 311, 0, 0), + (6517, 58, 134, 80, 0), + (6517, 59, 348, 10, 0), + (6517, 60, 137, 100, 0), + (6517, 61, 339, 10, 13199), + (6517, 62, 142, 76, 0), + (6517, 63, 311, 0, 0), + (6517, 64, 134, 80, 0), + (6517, 65, 348, 10, 0), + (6517, 66, 137, 79, 0), + (6517, 67, 339, 10, 13199), + (6517, 68, 142, 76, 0), + (6517, 69, 311, 0, 0), + (6517, 70, 134, 80, 0), + (6517, 71, 348, 10, 0), + (6517, 72, 137, 147, 0), + (6518, 1, 221, 18, 0), + (6519, 1, 221, 21, 0), + (6520, 1, 221, 24, 0), + (6521, 1, 327, 6, 0), + (6522, 1, 327, 7, 0), + (6523, 1, 328, 800, 0), + (6524, 1, 328, 850, 0), + (6525, 1, 328, 900, 0), + (6526, 1, 328, 950, 0), + (6527, 1, 328, 1000, 0), + (6528, 1, 264, 3024, 107), + (6531, 1, 360, 40, 11629), + (6532, 1, 360, 50, 11629), + (6533, 1, 360, 60, 11629), + (6540, 1, 363, 2, 0), + (6545, 1, 362, 2, 0), + (6546, 1, 2, 4, 0), + (6547, 1, 2, 8, 0), + (6548, 1, 2, 12, 0), + (6549, 1, 2, 16, 0), + (6550, 1, 2, 20, 0), + (6551, 1, 2, 24, 0), + (6552, 1, 2, 28, 0), + (6553, 1, 2, 32, 0), + (6554, 1, 2, 36, 0), + (6555, 1, 2, 40, 0), + (6556, 1, 2, 44, 0), + (6557, 1, 2, 48, 0), + (6558, 1, 2, 52, 0), + (6559, 1, 2, 56, 0), + (6560, 1, 2, 60, 0), + (6561, 1, 2, 64, 0), + (6562, 1, 2, 68, 0), + (6563, 1, 2, 72, 0), + (6564, 1, 2, 76, 0), + (6565, 1, 2, 80, 0), + (6566, 1, 2, 84, 0), + (6567, 1, 2, 88, 0), + (6568, 1, 2, 92, 0), + (6569, 1, 2, 96, 0), + (6570, 1, 2, 100, 0), + (6571, 1, 2, 104, 0), + (6601, 1, 339, 5, 13519), + (6601, 2, 137, 21, 0), + (6602, 1, 339, 10, 13519), + (6602, 2, 137, 21, 0), + (6603, 1, 339, 15, 13519), + (6603, 2, 137, 21, 0), + (6604, 1, 339, 20, 13519), + (6604, 2, 137, 21, 0), + (6605, 1, 339, 25, 13519), + (6605, 2, 137, 21, 0), + (6611, 1, 310, 120000, 0), + (6611, 2, 139, 4670, 0), + (6612, 1, 310, 240000, 0), + (6612, 2, 139, 4670, 0), + (6613, 1, 310, 360000, 0), + (6613, 2, 139, 4670, 0), + (6614, 1, 310, 120000, 0), + (6614, 2, 139, 4674, 0), + (6615, 1, 310, 240000, 0), + (6615, 2, 139, 4674, 0), + (6616, 1, 310, 360000, 0), + (6616, 2, 139, 4674, 0), + (6618, 1, 310, 480000, 0), + (6618, 2, 139, 4670, 0), + (6619, 1, 310, 600000, 0), + (6619, 2, 139, 4670, 0), + (6630, 1, 218, 1, 0), + (6631, 1, 218, 2, 0), + (6632, 1, 218, 3, 0), + (6633, 1, 218, 4, 0), + (6634, 1, 218, 5, 0), + (6636, 1, 294, 0, 107), + (6637, 1, 294, 0, 115), + (6638, 1, 294, 0, 125), + (6641, 1, 339, 10, 16101), + (6641, 2, 138, 0, 0), + (6641, 3, 142, 70, 0), + (6641, 4, 403, 4, 0), + (6641, 5, 348, 1, 0), + (6641, 6, 404, 2, 0), + (6641, 7, 141, 1, 0), + (6642, 1, 339, 10, 16102), + (6642, 2, 138, 0, 0), + (6642, 3, 142, 70, 0), + (6642, 4, 403, 4, 0), + (6642, 5, 348, 1, 0), + (6642, 6, 404, 2, 0), + (6642, 7, 141, 1, 0), + (6643, 1, 339, 10, 16103), + (6643, 2, 138, 0, 0), + (6643, 3, 142, 70, 0), + (6643, 4, 403, 4, 0), + (6643, 5, 348, 1, 0), + (6643, 6, 404, 2, 0), + (6643, 7, 141, 1, 0), + (6660, 1, 325, 55, 0), + (6661, 1, 325, 60, 0), + (6662, 1, 325, 65, 0), + (6666, 1, 287, 2, 0), + (6666, 2, 139, 8001, 0), + (6666, 3, 385, 12529, 0), + (6667, 1, 287, 4, 0), + (6667, 2, 139, 8001, 0), + (6667, 3, 385, 12529, 0), + (6668, 1, 287, 2, 0), + (6668, 2, 139, 11251, 0), + (6668, 3, 139, 11252, 0), + (6668, 4, 139, 11253, 0), + (6669, 1, 287, 4, 0), + (6669, 2, 139, 11251, 0), + (6669, 3, 139, 11252, 0), + (6669, 4, 139, 11253, 0), + (6670, 1, 287, 6, 0), + (6670, 2, 139, 11251, 0), + (6670, 3, 139, 11252, 0), + (6670, 4, 139, 11253, 0), + (6697, 1, 264, 30, 857), + (6698, 1, 264, 60, 857), + (6699, 1, 264, 90, 857), + (6700, 1, 264, 120, 857), + (6701, 1, 264, 150, 857), + (6703, 1, 264, 10, 171), + (6704, 1, 264, 20, 171), + (6705, 1, 264, 30, 171), + (6709, 1, 127, 5, 0), + (6709, 2, 139, 3842, 0), + (6710, 1, 127, 10, 0), + (6710, 2, 139, 3842, 0), + (6711, 1, 127, 15, 0), + (6711, 2, 139, 3842, 0), + (6712, 1, 264, 30, 177), + (6713, 1, 264, 60, 177), + (6714, 1, 264, 90, 177), + (6715, 1, 264, 120, 177), + (6716, 1, 264, 150, 177), + (6751, 1, 310, 240000, 0), + (6751, 2, 139, 4519, 0), + (6752, 1, 310, 480000, 0), + (6752, 2, 139, 4519, 0), + (6753, 1, 310, 720000, 0), + (6753, 2, 139, 4519, 0), + (6761, 1, 292, 5, 0), + (6762, 1, 292, 10, 0), + (6763, 1, 292, 15, 0), + (6765, 1, 330, 15, 7), + (6766, 1, 330, 30, 7), + (6767, 1, 330, 50, 7), + (6768, 1, 310, 960000, 0), + (6768, 2, 139, 4519, 0), + (6769, 1, 310, 1200000, 0), + (6769, 2, 139, 4519, 0), + (6791, 1, 339, 20, 16139), + (6791, 2, 137, 21, 0), + (6791, 3, 385, -18000, 0), + (6791, 4, 339, 20, 16139), + (6791, 5, 137, 343, 0), + (6791, 6, 385, -18000, 0), + (6792, 1, 339, 20, 16140), + (6792, 2, 137, 21, 0), + (6792, 3, 385, -18000, 0), + (6792, 4, 339, 20, 16140), + (6792, 5, 137, 343, 0), + (6792, 6, 385, -18000, 0), + (6793, 1, 339, 20, 16141), + (6793, 2, 137, 21, 0), + (6793, 3, 385, -18000, 0), + (6793, 4, 339, 20, 16141), + (6793, 5, 137, 343, 0), + (6793, 6, 385, -18000, 0), + (6819, 1, 264, 180, 524), + (6820, 1, 264, 360, 524), + (6821, 1, 264, 540, 524), + (6823, 1, 264, 180, 320), + (6824, 1, 264, 360, 320), + (6825, 1, 264, 540, 320), + (6826, 1, 264, 720, 320), + (6827, 1, 264, 900, 320), + (6870, 1, 264, 180, 544), + (6871, 1, 264, 360, 544), + (6872, 1, 264, 540, 544), + (6873, 1, 279, 7, 0), + (6874, 1, 279, 11, 0), + (6875, 1, 279, 15, 0), + (6876, 1, 375, 107, 0), + (6877, 1, 375, 115, 0), + (6878, 1, 375, 125, 0), + (6879, 1, 243, 15, 0), + (6880, 1, 243, 25, 0), + (6881, 1, 243, 35, 0), + (6882, 1, 242, 5, 0), + (6883, 1, 242, 10, 0), + (6884, 1, 242, 15, 0), + (6900, 1, 264, 840, 465), + (6901, 1, 264, 1140, 465), + (6902, 1, 264, 1440, 465), + (6903, 1, 264, 1740, 465), + (6904, 1, 264, 2040, 465), + (6905, 1, 225, 33, 0), + (6906, 1, 225, 36, 0), + (6907, 1, 225, 39, 0), + (6908, 1, 264, 180, 499), + (6909, 1, 264, 360, 499), + (6910, 1, 264, 540, 499), + (6911, 1, 224, 60, 74), + (6911, 2, 173, 2, 0), + (6912, 1, 224, 70, 74), + (6912, 2, 173, 3, 0), + (6913, 1, 224, 80, 74), + (6913, 2, 173, 3, 0), + (6935, 1, 264, 180, 465), + (6936, 1, 264, 360, 465), + (6937, 1, 264, 540, 465), + (6938, 1, 361, 65, 16164), + (6939, 1, 361, 75, 16165), + (6940, 1, 361, 85, 16166), + (6941, 1, 264, 120, 962), + (6942, 1, 264, 240, 962), + (6943, 1, 264, 360, 962), + (6944, 1, 264, 480, 962), + (6945, 1, 264, 600, 962), + (6974, 1, 264, 3, 247), + (6974, 2, 264, 2, 986), + (6974, 3, 264, 2, 987), + (6974, 4, 264, 2, 988), + (6975, 1, 264, 6, 247), + (6975, 2, 264, 4, 986), + (6975, 3, 264, 4, 987), + (6975, 4, 264, 4, 988), + (6976, 1, 264, 12, 247), + (6976, 2, 264, 6, 986), + (6976, 3, 264, 6, 987), + (6976, 4, 264, 6, 988), + (6977, 1, 264, 6, 3817), + (6978, 1, 264, 12, 3817), + (6979, 1, 264, 18, 3817), + (6980, 1, 264, 45, 128), + (6981, 1, 264, 90, 128), + (6982, 1, 264, 135, 128), + (6987, 1, 353, 1, 0), + (6988, 1, 287, 1, 0), + (6988, 2, 385, 16439, 0), + (6988, 3, 411, 32768, 0), + (6989, 1, 287, 2, 0), + (6989, 2, 385, 16439, 0), + (6989, 3, 411, 32768, 0), + (6990, 1, 287, 3, 0), + (6990, 2, 385, 16439, 0), + (6990, 3, 411, 32768, 0), + (7005, 1, 264, 432, 789), + (7006, 1, 264, 864, 789), + (7007, 1, 264, 1296, 789), + (7008, 1, 439, 0, 109400), + (7008, 2, 345, 80, 35), + (7009, 1, 439, 0, 116800), + (7009, 2, 345, 82, 35), + (7010, 1, 378, 25, 96), + (7011, 1, 378, 30, 96), + (7012, 1, 378, 35, 96), + (7013, 1, 378, 40, 96), + (7014, 1, 378, 45, 96), + (7015, 1, 378, 50, 96), + (7033, 1, 421, 5, 0), + (7033, 2, 139, 16097, 0), + (7033, 3, 139, 23612, 0), + (7033, 4, 139, 32196, 0), + (7033, 5, 139, 32565, 0), + (7033, 6, 423, 6, 0), + (7033, 7, 422, 5, 0), + (7033, 8, 411, 2, 0), + (7034, 1, 421, 10, 0), + (7034, 2, 139, 16097, 0), + (7034, 3, 139, 23612, 0), + (7034, 4, 139, 32196, 0), + (7034, 5, 139, 32565, 0), + (7034, 6, 423, 6, 0), + (7034, 7, 422, 5, 0), + (7034, 8, 411, 2, 0), + (7035, 1, 421, 15, 0), + (7035, 2, 139, 16097, 0), + (7035, 3, 139, 23612, 0), + (7035, 4, 139, 32196, 0), + (7035, 5, 139, 32565, 0), + (7035, 6, 423, 6, 0), + (7035, 7, 422, 5, 0), + (7035, 8, 411, 2, 0), + (7036, 1, 264, 10, 3646), + (7037, 1, 264, 20, 3646), + (7038, 1, 264, 30, 3646), + (7050, 1, 265, 62, 0), + (7051, 1, 265, 64, 0), + (7052, 1, 265, 66, 0), + (7053, 1, 265, 67, 0), + (7054, 1, 265, 69, 0), + (7055, 1, 265, 71, 0), + (7056, 1, 265, 62, 0), + (7057, 1, 265, 64, 0), + (7058, 1, 265, 66, 0), + (7059, 1, 265, 67, 0), + (7060, 1, 265, 69, 0), + (7061, 1, 265, 71, 0), + (7062, 1, 372, 50, 0), + (7063, 1, 265, 72, 0), + (7064, 1, 265, 74, 0), + (7065, 1, 265, 76, 0), + (7066, 1, 265, 72, 0), + (7067, 1, 265, 74, 0), + (7068, 1, 265, 76, 0), + (7100, 1, 264, 180, 254), + (7101, 1, 264, 360, 254), + (7102, 1, 264, 540, 254), + (7103, 1, 264, 432, 286), + (7103, 2, 264, 432, 10753), + (7103, 3, 264, 432, 9101), + (7104, 1, 264, 864, 286), + (7104, 2, 264, 864, 10753), + (7104, 3, 264, 864, 9101), + (7105, 1, 264, 1296, 286), + (7105, 2, 264, 1296, 10753), + (7105, 3, 264, 1296, 9101), + (7106, 1, 224, 20, 30), + (7106, 2, 173, 1, 0), + (7107, 1, 224, 35, 30), + (7107, 2, 173, 2, 0), + (7108, 1, 224, 50, 30), + (7108, 2, 173, 3, 0), + (7112, 1, 85, 13596, 50), + (7113, 1, 85, 13597, 50), + (7114, 1, 85, 13598, 50), + (7116, 1, 264, 360, 110), + (7117, 1, 264, 450, 110), + (7118, 1, 264, 540, 110), + (7122, 1, 349, 30, 0), + (7123, 1, 349, 35, 0), + (7124, 1, 349, 40, 0), + (7125, 1, 349, 45, 0), + (7126, 1, 349, 50, 0), + (7128, 1, 264, 240, 109), + (7129, 1, 264, 300, 109), + (7130, 1, 264, 360, 109), + (7131, 1, 439, 0, 88880), + (7131, 2, 345, 74, 28), + (7132, 1, 439, 0, 95440), + (7132, 2, 345, 76, 28), + (7133, 1, 439, 0, 102280), + (7133, 2, 345, 78, 28), + (7134, 1, 220, 120, 8), + (7135, 1, 220, 140, 8), + (7136, 1, 220, 165, 8), + (7137, 1, 264, 60, 672), + (7138, 1, 264, 75, 672), + (7139, 1, 264, 90, 672), + (7146, 1, 252, 80, 0), + (7147, 1, 252, 85, 0), + (7148, 1, 216, 350, 8), + (7149, 1, 216, 400, 8), + (7150, 1, 216, 450, 8), + (7151, 1, 258, 59, 0), + (7152, 1, 258, 64, 0), + (7153, 1, 258, 69, 0), + (7160, 1, 227, 120, 32), + (7161, 1, 227, 150, 32), + (7162, 1, 227, 180, 32), + (7163, 1, 220, 130, 26), + (7163, 2, 220, 130, 30), + (7163, 3, 220, 130, 38), + (7164, 1, 220, 140, 26), + (7164, 2, 220, 140, 30), + (7164, 3, 220, 140, 38), + (7165, 1, 220, 150, 26), + (7165, 2, 220, 150, 30), + (7165, 3, 220, 150, 38), + (7166, 1, 264, 20, 468), + (7166, 2, 264, 20, 469), + (7166, 3, 264, 20, 470), + (7167, 1, 264, 25, 468), + (7167, 2, 264, 25, 469), + (7167, 3, 264, 25, 470), + (7168, 1, 264, 30, 468), + (7168, 2, 264, 30, 469), + (7168, 3, 264, 30, 470), + (7169, 1, 220, 135, 21), + (7169, 2, 220, 135, 23), + (7169, 3, 220, 270, 52), + (7169, 4, 220, 135, 28), + (7170, 1, 220, 145, 21), + (7170, 2, 220, 145, 23), + (7170, 3, 220, 290, 52), + (7170, 4, 220, 145, 28), + (7171, 1, 220, 155, 21), + (7171, 2, 220, 155, 23), + (7171, 3, 220, 310, 52), + (7171, 4, 220, 155, 28), + (7175, 1, 283, 120, 0), + (7176, 1, 283, 140, 0), + (7177, 1, 283, 160, 0), + (7196, 1, 169, 20, -1), + (7197, 1, 169, 25, -1), + (7198, 1, 169, 30, -1), + (7204, 1, 218, 11, 0), + (7205, 1, 218, 12, 0), + (7206, 1, 218, 13, 0), + (7207, 1, 218, 14, 0), + (7208, 1, 218, 15, 0), + (7210, 1, 280, 50, 0), + (7211, 1, 280, 53, 0), + (7212, 1, 280, 56, 0), + (7213, 1, 280, 59, 0), + (7214, 1, 280, 62, 0), + (7215, 1, 264, 4200, 68), + (7216, 1, 264, 4800, 68), + (7220, 1, 360, 60, 12701), + (7221, 1, 360, 60, 12702), + (7222, 1, 360, 60, 12703), + (7232, 1, 294, 0, 185), + (7233, 1, 294, 0, 190), + (7234, 1, 294, 0, 195), + (7260, 1, 287, 14, 0), + (7260, 2, 385, 2754, 1), + (7261, 1, 287, 16, 0), + (7261, 2, 385, 2754, 1), + (7262, 1, 287, 18, 0), + (7262, 2, 385, 2754, 1), + (7263, 1, 274, 18, 0), + (7264, 1, 274, 20, 0), + (7265, 1, 274, 22, 0), + (7267, 1, 280, 54, 0), + (7268, 1, 280, 55, 0), + (7269, 1, 280, 56, 0), + (7270, 1, 218, 16, 0), + (7271, 1, 218, 17, 0), + (7272, 1, 218, 18, 0), + (7273, 1, 218, 19, 0), + (7274, 1, 218, 20, 0), + (7279, 1, 310, 6000, 0), + (7279, 2, 139, 11903, 0), + (7279, 3, 310, 6000, 0), + (7279, 4, 139, 11904, 0), + (7279, 5, 310, 6000, 0), + (7279, 6, 139, 11905, 0), + (7279, 7, 310, 6000, 0), + (7279, 8, 139, 1362, 0), + (7279, 9, 310, 6000, 0), + (7279, 10, 139, 8032, 0), + (7279, 11, 310, 6000, 0), + (7279, 12, 385, 6131, 0), + (7279, 13, 385, 6231, 0), + (7279, 14, 385, 6331, 0), + (7279, 15, 385, 6431, 0), + (7279, 16, 385, 6531, 0), + (7279, 17, 385, 6631, 0), + (7280, 1, 310, 7000, 0), + (7280, 2, 139, 11903, 0), + (7280, 3, 310, 7000, 0), + (7280, 4, 139, 11904, 0), + (7280, 5, 310, 7000, 0), + (7280, 6, 139, 11905, 0), + (7280, 7, 310, 7000, 0), + (7280, 8, 139, 1362, 0), + (7280, 9, 310, 7000, 0), + (7280, 10, 139, 8032, 0), + (7280, 11, 310, 7000, 0), + (7280, 12, 385, 6131, 0), + (7280, 13, 385, 6231, 0), + (7280, 14, 385, 6331, 0), + (7280, 15, 385, 6431, 0), + (7280, 16, 385, 6531, 0), + (7280, 17, 385, 6631, 0), + (7281, 1, 310, 8000, 0), + (7281, 2, 139, 11903, 0), + (7281, 3, 310, 8000, 0), + (7281, 4, 139, 11904, 0), + (7281, 5, 310, 8000, 0), + (7281, 6, 139, 11905, 0), + (7281, 7, 310, 8000, 0), + (7281, 8, 139, 1362, 0), + (7281, 9, 310, 8000, 0), + (7281, 10, 139, 8032, 0), + (7281, 11, 310, 8000, 0), + (7281, 12, 385, 6131, 0), + (7281, 13, 385, 6231, 0), + (7281, 14, 385, 6331, 0), + (7281, 15, 385, 6431, 0), + (7281, 16, 385, 6531, 0), + (7281, 17, 385, 6631, 0), + (7282, 1, 310, 9000, 0), + (7282, 2, 139, 11903, 0), + (7282, 3, 310, 9000, 0), + (7282, 4, 139, 11904, 0), + (7282, 5, 310, 9000, 0), + (7282, 6, 139, 11905, 0), + (7282, 7, 310, 9000, 0), + (7282, 8, 139, 1362, 0), + (7282, 9, 310, 9000, 0), + (7282, 10, 139, 8032, 0), + (7282, 11, 310, 9000, 0), + (7282, 12, 385, 6131, 0), + (7282, 13, 385, 6231, 0), + (7282, 14, 385, 6331, 0), + (7282, 15, 385, 6431, 0), + (7282, 16, 385, 6531, 0), + (7282, 17, 385, 6631, 0), + (7283, 1, 310, 10000, 0), + (7283, 2, 139, 11903, 0), + (7283, 3, 310, 10000, 0), + (7283, 4, 139, 11904, 0), + (7283, 5, 310, 10000, 0), + (7283, 6, 139, 11905, 0), + (7283, 7, 310, 10000, 0), + (7283, 8, 139, 1362, 0), + (7283, 9, 310, 10000, 0), + (7283, 10, 139, 8032, 0), + (7283, 11, 310, 10000, 0), + (7283, 12, 385, 6131, 0), + (7283, 13, 385, 6231, 0), + (7283, 14, 385, 6331, 0), + (7283, 15, 385, 6431, 0), + (7283, 16, 385, 6531, 0), + (7283, 17, 385, 6631, 0), + (7284, 1, 287, 3, 0), + (7284, 2, 137, 31, 0), + (7284, 3, 136, 5, 0), + (7313, 1, 244, 40, 0), + (7314, 1, 244, 30, 0), + (7315, 1, 244, 20, 0), + (7316, 1, 264, 1080, 41), + (7317, 1, 264, 1260, 41), + (7318, 1, 339, 25, 16015), + (7318, 2, 137, 21, 0), + (7319, 1, 339, 25, 16016), + (7319, 2, 137, 21, 0), + (7320, 1, 339, 25, 16017), + (7320, 2, 137, 21, 0), + (7321, 1, 339, 25, 16018), + (7321, 2, 137, 21, 0), + (7322, 1, 339, 25, 16019), + (7322, 2, 137, 21, 0), + (7323, 1, 264, 720, 254), + (7324, 1, 264, 900, 254), + (7325, 1, 264, 1080, 254), + (7326, 1, 264, 1728, 286), + (7326, 2, 264, 1728, 10753), + (7326, 3, 264, 1728, 9101), + (7327, 1, 264, 2160, 286), + (7327, 2, 264, 2160, 10753), + (7327, 3, 264, 2160, 9101), + (7328, 1, 264, 2592, 286), + (7328, 2, 264, 2592, 10753), + (7328, 3, 264, 2592, 9101), + (7336, 1, 85, 16029, 0), + (7337, 1, 85, 16030, 0), + (7338, 1, 85, 16031, 0), + (7353, 1, 216, 115, 0), + (7353, 2, 216, 115, 1), + (7353, 3, 216, 115, 2), + (7353, 4, 216, 115, 3), + (7353, 5, 216, 115, 10), + (7353, 6, 216, 115, 28), + (7353, 7, 216, 115, 30), + (7353, 8, 216, 115, 36), + (7353, 9, 216, 115, 77), + (7354, 1, 216, 120, 0), + (7354, 2, 216, 120, 1), + (7354, 3, 216, 120, 2), + (7354, 4, 216, 120, 3), + (7354, 5, 216, 120, 10), + (7354, 6, 216, 120, 28), + (7354, 7, 216, 120, 30), + (7354, 8, 216, 120, 36), + (7354, 9, 216, 120, 77), + (7355, 1, 216, 125, 0), + (7355, 2, 216, 125, 1), + (7355, 3, 216, 125, 2), + (7355, 4, 216, 125, 3), + (7355, 5, 216, 125, 10), + (7355, 6, 216, 125, 28), + (7355, 7, 216, 125, 30), + (7355, 8, 216, 125, 36), + (7355, 9, 216, 125, 77), + (7356, 1, 360, 60, 16056), + (7357, 1, 360, 60, 16057), + (7358, 1, 360, 60, 16058), + (7359, 1, 217, 0, 82600), + (7359, 2, 346, 78, 22), + (7360, 1, 217, 0, 88880), + (7360, 2, 346, 80, 22), + (7361, 1, 217, 0, 95440), + (7361, 2, 346, 82, 22), + (7362, 1, 59, -18, 0), + (7363, 1, 59, -21, 0), + (7364, 1, 59, -24, 0), + (7365, 1, 59, -27, 0), + (7366, 1, 59, -30, 0), + (7373, 1, 2, 108, 0), + (7374, 1, 2, 112, 0), + (7375, 1, 2, 116, 0), + (7376, 1, 2, 120, 0), + (7377, 1, 2, 124, 0), + (7378, 1, 347, 14, 0), + (7379, 1, 347, 16, 0), + (7380, 1, 347, 18, 0), + (7381, 1, 347, 20, 0), + (7382, 1, 347, 22, 0), + (7383, 1, 347, 24, 0), + (7384, 1, 360, 25, 16063), + (7385, 1, 360, 25, 16064), + (7386, 1, 360, 25, 16065), + (7390, 1, 303, 6000, 6000), + (7390, 2, 139, 2766, 0), + (7391, 1, 303, 6500, 6500), + (7391, 2, 139, 2766, 0), + (7392, 1, 303, 7500, 8500), + (7392, 2, 139, 2766, 0), + (7393, 1, 85, 16066, 0), + (7394, 1, 85, 16067, 0), + (7395, 1, 85, 16068, 0), + (7396, 1, 85, 16069, 0), + (7397, 1, 85, 16070, 0), + (7398, 1, 85, 16071, 0), + (7399, 1, 302, 350, 350), + (7399, 2, 385, 99, 0), + (7400, 1, 302, 370, 370), + (7400, 2, 385, 99, 0), + (7401, 1, 302, 400, 400), + (7401, 2, 385, 99, 0), + (7402, 1, 59, -33, 0), + (7403, 1, 59, -36, 0), + (7404, 1, 59, -39, 0), + (7405, 1, 59, -42, 0), + (7406, 1, 59, -45, 0), + (7407, 1, 181, 100, -1), + (7448, 1, 264, 240, 553), + (7449, 1, 264, 300, 553), + (7450, 1, 264, 360, 553), + (7451, 1, 264, 720, 777), + (7452, 1, 264, 900, 777), + (7453, 1, 264, 1080, 777), + (7478, 1, 264, 2880, 245), + (7489, 1, 218, 16, 0), + (7490, 1, 218, 17, 0), + (7491, 1, 218, 18, 0), + (7492, 1, 218, 19, 0), + (7493, 1, 218, 20, 0), + (7494, 1, 280, 65, 0), + (7495, 1, 280, 66, 0), + (7496, 1, 280, 67, 0), + (7500, 1, 363, 3, 0), + (7501, 1, 172, 45, 0), + (7502, 1, 172, 46, 0), + (7503, 1, 172, 47, 0), + (7504, 1, 172, 48, 0), + (7505, 1, 172, 49, 0), + (7506, 1, 259, 51, 0), + (7507, 1, 259, 52, 0), + (7508, 1, 259, 53, 0), + (7509, 1, 259, 54, 0), + (7510, 1, 259, 55, 0), + (7511, 1, 328, 1050, 0), + (7512, 1, 328, 1100, 0), + (7513, 1, 328, 1150, 0), + (7514, 1, 328, 1200, 0), + (7515, 1, 328, 1250, 0), + (7516, 1, 262, 30, 7), + (7516, 2, 262, 30, 8), + (7516, 3, 262, 30, 9), + (7516, 4, 262, 30, 10), + (7516, 5, 262, 30, 11), + (7517, 1, 262, 35, 7), + (7517, 2, 262, 35, 8), + (7517, 3, 262, 35, 9), + (7517, 4, 262, 35, 10), + (7517, 5, 262, 35, 11), + (7518, 1, 262, 40, 7), + (7518, 2, 262, 40, 8), + (7518, 3, 262, 40, 9), + (7518, 4, 262, 40, 10), + (7518, 5, 262, 40, 11), + (7519, 1, 262, 45, 7), + (7519, 2, 262, 45, 8), + (7519, 3, 262, 45, 9), + (7519, 4, 262, 45, 10), + (7519, 5, 262, 45, 11), + (7520, 1, 262, 50, 7), + (7520, 2, 262, 50, 8), + (7520, 3, 262, 50, 9), + (7520, 4, 262, 50, 10), + (7520, 5, 262, 50, 11), + (7521, 1, 317, 11, 0), + (7522, 1, 317, 12, 0), + (7523, 1, 317, 13, 0), + (7524, 1, 317, 14, 0), + (7525, 1, 317, 15, 0), + (7526, 1, 69, 600, 0), + (7527, 1, 69, 700, 0), + (7528, 1, 69, 800, 0), + (7529, 1, 69, 900, 0), + (7530, 1, 69, 1000, 0), + (7534, 1, 0, 21, 0), + (7535, 1, 0, 22, 0), + (7536, 1, 0, 23, 0), + (7537, 1, 0, 24, 0), + (7538, 1, 0, 25, 0), + (7539, 1, 327, 8, 0), + (7540, 1, 327, 9, 0), + (7541, 1, 214, 1100, 0), + (7542, 1, 214, 1200, 0), + (7543, 1, 214, 1300, 0), + (7544, 1, 221, 27, 0), + (7545, 1, 221, 30, 0), + (7546, 1, 221, 33, 0), + (7547, 1, 262, 80, 0), + (7547, 2, 262, 80, 1), + (7547, 3, 262, 80, 2), + (7547, 4, 262, 80, 3), + (7547, 5, 262, 80, 4), + (7547, 6, 262, 80, 5), + (7547, 7, 262, 80, 6), + (7548, 1, 262, 85, 0), + (7548, 2, 262, 85, 1), + (7548, 3, 262, 85, 2), + (7548, 4, 262, 85, 3), + (7548, 5, 262, 85, 4), + (7548, 6, 262, 85, 5), + (7548, 7, 262, 85, 6), + (7549, 1, 262, 90, 0), + (7549, 2, 262, 90, 1), + (7549, 3, 262, 90, 2), + (7549, 4, 262, 90, 3), + (7549, 5, 262, 90, 4), + (7549, 6, 262, 90, 5), + (7549, 7, 262, 90, 6), + (7550, 1, 262, 95, 0), + (7550, 2, 262, 95, 1), + (7550, 3, 262, 95, 2), + (7550, 4, 262, 95, 3), + (7550, 5, 262, 95, 4), + (7550, 6, 262, 95, 5), + (7550, 7, 262, 95, 6), + (7551, 1, 262, 100, 0), + (7551, 2, 262, 100, 1), + (7551, 3, 262, 100, 2), + (7551, 4, 262, 100, 3), + (7551, 5, 262, 100, 4), + (7551, 6, 262, 100, 5), + (7551, 7, 262, 100, 6), + (7553, 1, 326, 3, 0), + (7554, 1, 339, 20, 16194), + (7554, 2, 138, 1, 0), + (7554, 3, 141, 1, 0), + (7554, 4, 142, 65, 0), + (7554, 5, 137, 0, 0), + (7554, 6, 311, 0, 0), + (7554, 7, 134, 85, 0), + (7554, 8, 139, -265, 0), + (7554, 9, 139, -754, 0), + (7554, 10, 139, -1332, 0), + (7554, 11, 139, -1572, 0), + (7554, 12, 139, -2749, 0), + (7554, 13, 139, -4979, 0), + (7554, 14, 139, -5418, 0), + (7554, 15, 139, -5403, 0), + (7554, 16, 348, 10, 0), + (7555, 1, 339, 21, 16195), + (7555, 2, 138, 1, 0), + (7555, 3, 141, 1, 0), + (7555, 4, 142, 65, 0), + (7555, 5, 137, 0, 0), + (7555, 6, 311, 0, 0), + (7555, 7, 134, 85, 0), + (7555, 8, 139, -265, 0), + (7555, 9, 139, -754, 0), + (7555, 10, 139, -1332, 0), + (7555, 11, 139, -1572, 0), + (7555, 12, 139, -2749, 0), + (7555, 13, 139, -4979, 0), + (7555, 14, 139, -5418, 0), + (7555, 15, 139, -5403, 0), + (7555, 16, 348, 10, 0), + (7556, 1, 339, 22, 16196), + (7556, 2, 138, 1, 0), + (7556, 3, 141, 1, 0), + (7556, 4, 142, 65, 0), + (7556, 5, 137, 0, 0), + (7556, 6, 311, 0, 0), + (7556, 7, 134, 85, 0), + (7556, 8, 139, -265, 0), + (7556, 9, 139, -754, 0), + (7556, 10, 139, -1332, 0), + (7556, 11, 139, -1572, 0), + (7556, 12, 139, -2749, 0), + (7556, 13, 139, -4979, 0), + (7556, 14, 139, -5418, 0), + (7556, 15, 139, -5403, 0), + (7556, 16, 348, 10, 0), + (7557, 1, 339, 23, 16417), + (7557, 2, 138, 1, 0), + (7557, 3, 141, 1, 0), + (7557, 4, 142, 65, 0), + (7557, 5, 137, 0, 0), + (7557, 6, 311, 0, 0), + (7557, 7, 134, 85, 0), + (7557, 8, 139, -265, 0), + (7557, 9, 139, -754, 0), + (7557, 10, 139, -1332, 0), + (7557, 11, 139, -1572, 0), + (7557, 12, 139, -2749, 0), + (7557, 13, 139, -4979, 0), + (7557, 14, 139, -5418, 0), + (7557, 15, 139, -5403, 0), + (7557, 16, 348, 10, 0), + (7558, 1, 339, 24, 16418), + (7558, 2, 138, 1, 0), + (7558, 3, 141, 1, 0), + (7558, 4, 142, 65, 0), + (7558, 5, 137, 0, 0), + (7558, 6, 311, 0, 0), + (7558, 7, 134, 85, 0), + (7558, 8, 139, -265, 0), + (7558, 9, 139, -754, 0), + (7558, 10, 139, -1332, 0), + (7558, 11, 139, -1572, 0), + (7558, 12, 139, -2749, 0), + (7558, 13, 139, -4979, 0), + (7558, 14, 139, -5418, 0), + (7558, 15, 139, -5403, 0), + (7558, 16, 348, 10, 0), + (7559, 1, 266, 23, 0), + (7560, 1, 266, 24, 0), + (7561, 1, 266, 25, 0), + (7562, 1, 330, 125, 0), + (7562, 2, 330, 125, 1), + (7562, 3, 330, 125, 2), + (7562, 4, 330, 125, 3), + (7562, 5, 330, 125, 28), + (7562, 6, 330, 125, 36), + (7562, 7, 330, 125, 77), + (7563, 1, 330, 130, 0), + (7563, 2, 330, 130, 1), + (7563, 3, 330, 130, 2), + (7563, 4, 330, 130, 3), + (7563, 5, 330, 130, 28), + (7563, 6, 330, 130, 36), + (7563, 7, 330, 130, 77), + (7564, 1, 330, 135, 0), + (7564, 2, 330, 135, 1), + (7564, 3, 330, 135, 2), + (7564, 4, 330, 135, 3), + (7564, 5, 330, 135, 28), + (7564, 6, 330, 135, 36), + (7564, 7, 330, 135, 77), + (7565, 1, 278, 800, 54510), + (7565, 2, 440, 76, 100), + (7566, 1, 278, 850, 58400), + (7566, 2, 440, 78, 100), + (7567, 1, 278, 900, 62680), + (7567, 2, 440, 80, 100), + (7568, 1, 341, 160, 0), + (7569, 1, 341, 170, 0), + (7570, 1, 341, 180, 0), + (7571, 1, 341, 190, 0), + (7572, 1, 341, 200, 0), + (7573, 1, 360, 70, 11023), + (7574, 1, 360, 80, 11023), + (7575, 1, 360, 90, 11023), + (7576, 1, 318, 16, 0), + (7577, 1, 318, 17, 0), + (7578, 1, 318, 18, 0), + (7579, 1, 318, 19, 0), + (7580, 1, 318, 20, 0), + (7581, 1, 294, 0, 160), + (7582, 1, 294, 0, 165), + (7583, 1, 294, 0, 170), + (7584, 1, 114, -60, 0), + (7585, 1, 114, -61, 0), + (7586, 1, 114, -62, 0), + (7587, 1, 319, 22, 0), + (7588, 1, 319, 23, 0), + (7589, 1, 319, 24, 0), + (7590, 1, 274, 35, 0), + (7591, 1, 274, 36, 0), + (7592, 1, 274, 37, 0), + (7593, 1, 15, 14, 0), + (7594, 1, 15, 15, 0), + (7595, 1, 15, 16, 0), + (7596, 1, 15, 17, 0), + (7597, 1, 15, 18, 0), + (7598, 1, 114, -60, 0), + (7599, 1, 114, -61, 0), + (7600, 1, 114, -62, 0), + (7601, 1, 213, 7, 0), + (7602, 1, 213, 9, 0), + (7603, 1, 213, 11, 0), + (7604, 1, 189, 14, 0), + (7605, 1, 189, 15, 0), + (7612, 1, 270, 70, 0), + (7613, 1, 270, 75, 0), + (7614, 1, 270, 80, 0), + (7615, 1, 264, 720, 494), + (7616, 1, 264, 900, 494), + (7617, 1, 264, 1080, 494), + (7618, 1, 264, 720, 500), + (7619, 1, 264, 900, 500), + (7620, 1, 264, 1080, 500), + (7621, 1, 339, 10, 8105), + (7621, 2, 142, 65, 0), + (7621, 3, 311, 0, 0), + (7621, 4, 134, 70, 0), + (7621, 5, 348, 10, 0), + (7621, 6, 137, 0, 0), + (7621, 7, 339, 10, 8105), + (7621, 8, 142, 65, 0), + (7621, 9, 311, 0, 0), + (7621, 10, 134, 70, 0), + (7621, 11, 348, 10, 0), + (7621, 12, 137, 100, 0), + (7621, 13, 339, 10, 8105), + (7621, 14, 142, 65, 0), + (7621, 15, 311, 0, 0), + (7621, 16, 134, 70, 0), + (7621, 17, 348, 10, 0), + (7621, 18, 137, 79, 0), + (7621, 19, 339, 10, 8105), + (7621, 20, 142, 65, 0), + (7621, 21, 311, 0, 0), + (7621, 22, 134, 70, 0), + (7621, 23, 348, 10, 0), + (7621, 24, 137, 147, 0), + (7621, 25, 339, 10, 11404), + (7621, 26, 142, 71, 0), + (7621, 27, 311, 0, 0), + (7621, 28, 134, 75, 0), + (7621, 29, 348, 10, 0), + (7621, 30, 137, 0, 0), + (7621, 31, 339, 10, 11404), + (7621, 32, 142, 71, 0), + (7621, 33, 311, 0, 0), + (7621, 34, 134, 75, 0), + (7621, 35, 348, 10, 0), + (7621, 36, 137, 100, 0), + (7621, 37, 339, 10, 11404), + (7621, 38, 142, 71, 0), + (7621, 39, 311, 0, 0), + (7621, 40, 134, 75, 0), + (7621, 41, 348, 10, 0), + (7621, 42, 137, 79, 0), + (7621, 43, 339, 10, 11404), + (7621, 44, 142, 71, 0), + (7621, 45, 311, 0, 0), + (7621, 46, 134, 75, 0), + (7621, 47, 348, 10, 0), + (7621, 48, 137, 147, 0), + (7621, 49, 339, 10, 13199), + (7621, 50, 142, 76, 0), + (7621, 51, 311, 0, 0), + (7621, 52, 134, 80, 0), + (7621, 53, 348, 10, 0), + (7621, 54, 137, 0, 0), + (7621, 55, 339, 10, 13199), + (7621, 56, 142, 76, 0), + (7621, 57, 311, 0, 0), + (7621, 58, 134, 80, 0), + (7621, 59, 348, 10, 0), + (7621, 60, 137, 100, 0), + (7621, 61, 339, 10, 13199), + (7621, 62, 142, 76, 0), + (7621, 63, 311, 0, 0), + (7621, 64, 134, 80, 0), + (7621, 65, 348, 10, 0), + (7621, 66, 137, 79, 0), + (7621, 67, 339, 10, 13199), + (7621, 68, 142, 76, 0), + (7621, 69, 311, 0, 0), + (7621, 70, 134, 80, 0), + (7621, 71, 348, 10, 0), + (7621, 72, 137, 147, 0), + (7621, 73, 339, 10, 13830), + (7621, 74, 142, 81, 0), + (7621, 75, 311, 0, 0), + (7621, 76, 134, 85, 0), + (7621, 77, 348, 10, 0), + (7621, 78, 137, 0, 0), + (7621, 79, 339, 10, 13830), + (7621, 80, 142, 81, 0), + (7621, 81, 311, 0, 0), + (7621, 82, 134, 85, 0), + (7621, 83, 348, 10, 0), + (7621, 84, 137, 100, 0), + (7621, 85, 339, 10, 13830), + (7621, 86, 142, 81, 0), + (7621, 87, 311, 0, 0), + (7621, 88, 134, 85, 0), + (7621, 89, 348, 10, 0), + (7621, 90, 137, 79, 0), + (7621, 91, 339, 10, 13830), + (7621, 92, 142, 81, 0), + (7621, 93, 311, 0, 0), + (7621, 94, 134, 85, 0), + (7621, 95, 348, 10, 0), + (7621, 96, 137, 147, 0), + (7622, 1, 265, 79, 0), + (7623, 1, 265, 80, 0), + (7624, 1, 265, 81, 0), + (7625, 1, 265, 79, 0), + (7626, 1, 265, 80, 0), + (7627, 1, 265, 81, 0), + (7628, 1, 292, 46, 0), + (7629, 1, 292, 47, 0), + (7630, 1, 292, 48, 0), + (7631, 1, 279, 34, 0), + (7632, 1, 279, 35, 0), + (7633, 1, 279, 36, 0), + (7634, 1, 279, 34, 0), + (7635, 1, 279, 35, 0), + (7636, 1, 279, 36, 0), + (7637, 1, 279, 34, 0), + (7638, 1, 279, 35, 0), + (7639, 1, 279, 36, 0), + (7640, 1, 200, 60, 0), + (7641, 1, 294, 17, 100), + (7642, 1, 294, 19, 100), + (7643, 1, 294, 21, 100), + (7644, 1, 375, 130, 0), + (7645, 1, 375, 135, 0), + (7646, 1, 375, 140, 0), + (7647, 1, 229, 20, 0), + (7648, 1, 229, 25, 0), + (7649, 1, 229, 30, 0), + (7650, 1, 330, 125, 0), + (7650, 2, 330, 125, 1), + (7650, 3, 330, 125, 2), + (7650, 4, 330, 125, 3), + (7650, 5, 330, 125, 28), + (7650, 6, 330, 125, 36), + (7651, 1, 330, 130, 0), + (7651, 2, 330, 130, 1), + (7651, 3, 330, 130, 2), + (7651, 4, 330, 130, 3), + (7651, 5, 330, 130, 28), + (7651, 6, 330, 130, 36), + (7652, 1, 330, 135, 0), + (7652, 2, 330, 135, 1), + (7652, 3, 330, 135, 2), + (7652, 4, 330, 135, 3), + (7652, 5, 330, 135, 28), + (7652, 6, 330, 135, 36), + (7653, 1, 330, 125, 0), + (7653, 2, 330, 125, 1), + (7653, 3, 330, 125, 2), + (7653, 4, 330, 125, 3), + (7653, 5, 330, 125, 28), + (7653, 6, 330, 125, 36), + (7653, 7, 330, 125, 77), + (7654, 1, 330, 130, 0), + (7654, 2, 330, 130, 1), + (7654, 3, 330, 130, 2), + (7654, 4, 330, 130, 3), + (7654, 5, 330, 130, 28), + (7654, 6, 330, 130, 36), + (7654, 7, 330, 130, 77), + (7655, 1, 330, 135, 0), + (7655, 2, 330, 135, 1), + (7655, 3, 330, 135, 2), + (7655, 4, 330, 135, 3), + (7655, 5, 330, 135, 28), + (7655, 6, 330, 135, 36), + (7655, 7, 330, 135, 77), + (7656, 1, 330, 100, 0), + (7656, 2, 330, 100, 1), + (7656, 3, 330, 100, 2), + (7656, 4, 330, 100, 3), + (7656, 5, 330, 100, 28), + (7656, 6, 330, 100, 36), + (7656, 7, 330, 100, 77), + (7657, 1, 330, 105, 0), + (7657, 2, 330, 105, 1), + (7657, 3, 330, 105, 2), + (7657, 4, 330, 105, 3), + (7657, 5, 330, 105, 28), + (7657, 6, 330, 105, 36), + (7657, 7, 330, 105, 77), + (7658, 1, 330, 110, 0), + (7658, 2, 330, 110, 1), + (7658, 3, 330, 110, 2), + (7658, 4, 330, 110, 3), + (7658, 5, 330, 110, 28), + (7658, 6, 330, 110, 36), + (7658, 7, 330, 110, 77), + (7659, 1, 264, 72, 153), + (7660, 1, 264, 90, 153), + (7661, 1, 264, 108, 153), + (7663, 1, 375, 150, 0), + (7664, 1, 264, 10, 170), + (7665, 1, 264, 20, 170), + (7666, 1, 264, 30, 170), + (7667, 1, 264, 40, 170), + (7668, 1, 264, 50, 170), + (7670, 1, 229, 35, 0), + (7671, 1, 229, 40, 0), + (7672, 1, 229, 45, 0), + (7673, 1, 220, 50, 10), + (7674, 1, 220, 65, 10), + (7675, 1, 220, 80, 10), + (7676, 1, 220, 95, 10), + (7677, 1, 220, 110, 10), + (7678, 1, 231, 11, 0), + (7679, 1, 231, 13, 0), + (7680, 1, 231, 15, 0), + (7681, 1, 326, 4, 0), + (7682, 1, 264, 5400, 68), + (7683, 1, 327, 10, 0), + (7684, 1, 327, 11, 0), + (7685, 1, 327, 12, 0), + (7686, 1, 349, 55, 0), + (7687, 1, 349, 60, 0), + (7688, 1, 349, 65, 0), + (7690, 1, 353, 1, 0), + (7692, 1, 319, 25, 0), + (7693, 1, 319, 26, 0), + (7694, 1, 319, 27, 0), + (7695, 1, 127, 5, 0), + (7695, 2, 385, 14232, 0), + (7696, 1, 127, 10, 0), + (7696, 2, 385, 14232, 0), + (7697, 1, 127, 15, 0), + (7697, 2, 385, 14232, 0), + (7699, 1, 181, 100, 0), + (7700, 1, 279, 7, 0), + (7701, 1, 279, 11, 0), + (7702, 1, 279, 15, 0), + (7704, 1, 264, 540, 3707), + (7705, 1, 264, 720, 3707), + (7706, 1, 264, 900, 3707), + (7707, 1, 303, 8500, 9500), + (7707, 2, 139, 2766, 0), + (7708, 1, 303, 9500, 11000), + (7708, 2, 139, 2766, 0), + (7709, 1, 303, 11000, 14000), + (7709, 2, 139, 2766, 0), + (7713, 1, 274, 34, 0), + (7714, 1, 274, 36, 0), + (7715, 1, 264, 2, 901), + (7716, 1, 264, 4, 901), + (7717, 1, 264, 6, 901), + (7718, 1, 281, 90, 0), + (7722, 1, 339, 25, 23492), + (7722, 2, 138, 1, 0), + (7722, 3, 141, 1, 0), + (7722, 4, 142, 70, 0), + (7722, 5, 137, 0, 0), + (7722, 6, 311, 0, 0), + (7722, 7, 134, 90, 0), + (7722, 8, 139, -265, 0), + (7722, 9, 139, -754, 0), + (7722, 10, 139, -1332, 0), + (7722, 11, 139, -1572, 0), + (7722, 12, 139, -2749, 0), + (7722, 13, 139, -4979, 0), + (7722, 14, 139, -5418, 0), + (7722, 15, 139, -5403, 0), + (7722, 16, 348, 10, 0), + (7723, 1, 339, 26, 23493), + (7723, 2, 138, 1, 0), + (7723, 3, 141, 1, 0), + (7723, 4, 142, 70, 0), + (7723, 5, 137, 0, 0), + (7723, 6, 311, 0, 0), + (7723, 7, 134, 90, 0), + (7723, 8, 139, -265, 0), + (7723, 9, 139, -754, 0), + (7723, 10, 139, -1332, 0), + (7723, 11, 139, -1572, 0), + (7723, 12, 139, -2749, 0), + (7723, 13, 139, -4979, 0), + (7723, 14, 139, -5418, 0), + (7723, 15, 139, -5403, 0), + (7723, 16, 348, 10, 0), + (7724, 1, 339, 27, 23494), + (7724, 2, 138, 1, 0), + (7724, 3, 141, 1, 0), + (7724, 4, 142, 70, 0), + (7724, 5, 137, 0, 0), + (7724, 6, 311, 0, 0), + (7724, 7, 134, 90, 0), + (7724, 8, 139, -265, 0), + (7724, 9, 139, -754, 0), + (7724, 10, 139, -1332, 0), + (7724, 11, 139, -1572, 0), + (7724, 12, 139, -2749, 0), + (7724, 13, 139, -4979, 0), + (7724, 14, 139, -5418, 0), + (7724, 15, 139, -5403, 0), + (7724, 16, 348, 10, 0), + (7725, 1, 339, 28, 23495), + (7725, 2, 138, 1, 0), + (7725, 3, 141, 1, 0), + (7725, 4, 142, 70, 0), + (7725, 5, 137, 0, 0), + (7725, 6, 311, 0, 0), + (7725, 7, 134, 90, 0), + (7725, 8, 139, -265, 0), + (7725, 9, 139, -754, 0), + (7725, 10, 139, -1332, 0), + (7725, 11, 139, -1572, 0), + (7725, 12, 139, -2749, 0), + (7725, 13, 139, -4979, 0), + (7725, 14, 139, -5418, 0), + (7725, 15, 139, -5403, 0), + (7725, 16, 348, 10, 0), + (7726, 1, 339, 29, 23496), + (7726, 2, 138, 1, 0), + (7726, 3, 141, 1, 0), + (7726, 4, 142, 70, 0), + (7726, 5, 137, 0, 0), + (7726, 6, 311, 0, 0), + (7726, 7, 134, 90, 0), + (7726, 8, 139, -265, 0), + (7726, 9, 139, -754, 0), + (7726, 10, 139, -1332, 0), + (7726, 11, 139, -1572, 0), + (7726, 12, 139, -2749, 0), + (7726, 13, 139, -4979, 0), + (7726, 14, 139, -5418, 0), + (7726, 15, 139, -5403, 0), + (7726, 16, 348, 10, 0), + (7733, 1, 257, 1, 0), + (7733, 2, 267, 1, 31), + (7733, 3, 267, 1, 32), + (7733, 4, 267, 1, 33), + (7733, 5, 267, 1, 15), + (7733, 6, 267, 1, 16), + (7733, 7, 267, 1, 17), + (7733, 8, 267, 1, 18), + (7733, 9, 267, 1, 19), + (7733, 10, 267, 1, 20), + (7743, 1, 264, 90, 184), + (7744, 1, 264, 180, 184), + (7745, 1, 264, 270, 184), + (7746, 1, 310, 2000, 0), + (7746, 2, 385, 11233, 0), + (7746, 3, 385, 11333, 0), + (7746, 4, 411, 16, 0), + (7748, 1, 271, 5, 0), + (7749, 1, 271, 10, 0), + (7750, 1, 271, 15, 0), + (7751, 1, 264, 60, 2234), + (7752, 1, 264, 120, 2234), + (7753, 1, 264, 180, 2234), + (7757, 1, 264, 120, 9403), + (7758, 1, 264, 240, 9403), + (7759, 1, 264, 360, 9403), + (7760, 1, 264, 2, 824), + (7761, 1, 264, 4, 824), + (7762, 1, 264, 6, 824), + (7763, 1, 310, 4000, 0), + (7763, 2, 385, 11233, 0), + (7763, 3, 385, 11333, 0), + (7763, 4, 411, 16, 0), + (7764, 1, 310, 6000, 0), + (7764, 2, 385, 11233, 0), + (7764, 3, 385, 11333, 0), + (7764, 4, 411, 16, 0), + (7765, 1, 392, 1000, 0), + (7765, 2, 139, 21820, 0), + (7765, 3, 411, 4, 0), + (7766, 1, 392, 2000, 0), + (7766, 2, 139, 21820, 0), + (7766, 3, 411, 4, 0), + (7767, 1, 392, 3000, 0), + (7767, 2, 139, 21820, 0), + (7767, 3, 411, 4, 0), + (7768, 1, 392, 4000, 0), + (7768, 2, 139, 21820, 0), + (7768, 3, 411, 4, 0), + (7818, 1, 288, 200, 51), + (7818, 2, 288, 50, 51), + (7819, 1, 405, 7, 0), + (7820, 1, 405, 9, 0), + (7821, 1, 405, 11, 0), + (7822, 1, 264, 1, 1154), + (7823, 1, 264, 2, 1154), + (7824, 1, 264, 3, 1154), + (7825, 1, 264, 4, 1154), + (7826, 1, 264, 5, 1154), + (7827, 1, 398, 9000, 0), + (7827, 2, 385, 7225, 0), + (7827, 3, 385, 7325, 0), + (7827, 4, 385, 7425, 0), + (7828, 1, 310, 2000, 0), + (7828, 2, 385, 7225, 0), + (7828, 3, 385, 7325, 0), + (7828, 4, 385, 7425, 0), + (7828, 5, 385, 7525, 0), + (7828, 6, 385, 7625, 0), + (7829, 1, 310, 4000, 0), + (7829, 2, 385, 7225, 0), + (7829, 3, 385, 7325, 0), + (7829, 4, 385, 7425, 0), + (7829, 5, 385, 7525, 0), + (7829, 6, 385, 7625, 0), + (7830, 1, 310, 6000, 0), + (7830, 2, 385, 7225, 0), + (7830, 3, 385, 7325, 0), + (7830, 4, 385, 7425, 0), + (7830, 5, 385, 7525, 0), + (7830, 6, 385, 7625, 0), + (7832, 1, 264, 60, 60), + (7833, 2, 264, 120, 60), + (7834, 3, 264, 180, 60), + (7835, 4, 264, 240, 60), + (7836, 5, 264, 300, 60), + (7837, 1, 262, 55, 7), + (7837, 2, 262, 55, 8), + (7837, 3, 262, 55, 9), + (7837, 4, 262, 55, 10), + (7837, 5, 262, 55, 11), + (7838, 1, 262, 60, 7), + (7838, 2, 262, 60, 8), + (7838, 3, 262, 60, 9), + (7838, 4, 262, 60, 10), + (7838, 5, 262, 60, 11), + (7839, 1, 262, 65, 7), + (7839, 2, 262, 65, 8), + (7839, 3, 262, 65, 9), + (7839, 4, 262, 65, 10), + (7839, 5, 262, 65, 11), + (7840, 1, 262, 70, 7), + (7840, 2, 262, 70, 8), + (7840, 3, 262, 70, 9), + (7840, 4, 262, 70, 10), + (7840, 5, 262, 70, 11), + (7841, 1, 262, 75, 7), + (7841, 2, 262, 75, 8), + (7841, 3, 262, 75, 9), + (7841, 4, 262, 75, 10), + (7841, 5, 262, 75, 11), + (7842, 1, 339, 30, 27695), + (7842, 2, 138, 1, 0), + (7842, 3, 141, 1, 0), + (7842, 4, 142, 70, 0), + (7842, 5, 137, 0, 0), + (7842, 6, 311, 0, 0), + (7842, 7, 134, 100, 0), + (7842, 8, 139, -265, 0), + (7842, 9, 139, -754, 0), + (7842, 10, 139, -1332, 0), + (7842, 11, 139, -1572, 0), + (7842, 12, 139, -2749, 0), + (7842, 13, 139, -4979, 0), + (7842, 14, 139, -5418, 0), + (7842, 15, 139, -5403, 0), + (7842, 16, 348, 10, 0), + (7843, 1, 339, 31, 27696), + (7843, 2, 138, 1, 0), + (7843, 3, 141, 1, 0), + (7843, 4, 142, 70, 0), + (7843, 5, 137, 0, 0), + (7843, 6, 311, 0, 0), + (7843, 7, 134, 100, 0), + (7843, 8, 139, -265, 0), + (7843, 9, 139, -754, 0), + (7843, 10, 139, -1332, 0), + (7843, 11, 139, -1572, 0), + (7843, 12, 139, -2749, 0), + (7843, 13, 139, -4979, 0), + (7843, 14, 139, -5418, 0), + (7843, 15, 139, -5403, 0), + (7843, 16, 348, 10, 0), + (7844, 1, 339, 32, 27697), + (7844, 2, 138, 1, 0), + (7844, 3, 141, 1, 0), + (7844, 4, 142, 70, 0), + (7844, 5, 137, 0, 0), + (7844, 6, 311, 0, 0), + (7844, 7, 134, 100, 0), + (7844, 8, 139, -265, 0), + (7844, 9, 139, -754, 0), + (7844, 10, 139, -1332, 0), + (7844, 11, 139, -1572, 0), + (7844, 12, 139, -2749, 0), + (7844, 13, 139, -4979, 0), + (7844, 14, 139, -5418, 0), + (7844, 15, 139, -5403, 0), + (7844, 16, 348, 10, 0), + (7881, 1, 405, 13, 0), + (7882, 1, 405, 15, 0), + (7883, 1, 405, 17, 0), + (7884, 1, 287, 1, 0), + (7884, 2, 139, 4691, 0), + (7884, 3, 411, 128, 0), + (7885, 1, 287, 1, 0), + (7885, 2, 385, 8111, 0), + (7885, 3, 385, 15008, 0), + (7885, 4, 385, 8411, 0), + (7885, 5, 385, 8511, 0), + (7885, 6, 411, 128, 0), + (7886, 1, 328, 1300, 0), + (7887, 1, 328, 1350, 0), + (7888, 1, 328, 1400, 0), + (7889, 1, 328, 1450, 0), + (7890, 1, 328, 1500, 0), + (7900, 1, 339, 45, 16189), + (7900, 2, 136, 11, 0), + (7900, 3, 383, 45, 16189), + (7900, 4, 385, 11012, 0), + (7900, 5, 383, 45, 16189), + (7900, 6, 385, 5130, 0), + (7900, 7, 383, 45, 16189), + (7900, 8, 385, 5230, 0), + (7900, 9, 383, 45, 16189), + (7900, 10, 136, 22, 0), + (7900, 11, 383, 45, 16189), + (7900, 12, 385, 5330, 0), + (7900, 13, 385, 5430, 0), + (7900, 14, 385, 5530, 0), + (7901, 1, 339, 45, 16190), + (7901, 2, 136, 11, 0), + (7901, 3, 383, 45, 16190), + (7901, 4, 385, 11012, 0), + (7901, 5, 383, 45, 16190), + (7901, 6, 385, 5130, 0), + (7901, 7, 383, 45, 16190), + (7901, 8, 385, 5230, 0), + (7901, 9, 383, 45, 16190), + (7901, 10, 136, 22, 0), + (7901, 11, 383, 45, 16190), + (7901, 12, 385, 5330, 0), + (7901, 13, 385, 5430, 0), + (7901, 14, 385, 5530, 0), + (7902, 1, 339, 45, 16191), + (7902, 2, 136, 11, 0), + (7902, 3, 383, 45, 16191), + (7902, 4, 385, 11012, 0), + (7902, 5, 383, 45, 16191), + (7902, 6, 385, 5130, 0), + (7902, 7, 383, 45, 16191), + (7902, 8, 385, 5230, 0), + (7902, 9, 383, 45, 16191), + (7902, 10, 136, 22, 0), + (7902, 11, 383, 45, 16191), + (7902, 12, 385, 5330, 0), + (7902, 13, 385, 5430, 0), + (7902, 14, 385, 5530, 0), + (7904, 1, 0, 26, 0), + (7905, 1, 0, 27, 0), + (7906, 1, 0, 28, 0), + (7907, 1, 0, 29, 0), + (7908, 1, 0, 30, 0), + (7940, 1, 264, 15, 558), + (7941, 1, 264, 30, 558), + (7942, 1, 264, 45, 558), + (7945, 1, 310, 2000, 0), + (7945, 2, 139, 8007, 0), + (7945, 3, 310, 2000, 0), + (7945, 4, 385, 4140, 0), + (7945, 5, 385, 4240, 0), + (7945, 6, 385, 4340, 0), + (7945, 7, 385, 4440, 0), + (7945, 8, 385, 4540, 0), + (7945, 9, 385, 4640, 0), + (7946, 1, 310, 4000, 0), + (7946, 2, 139, 8007, 0), + (7946, 3, 310, 4000, 0), + (7946, 4, 385, 4140, 0), + (7946, 5, 385, 4240, 0), + (7946, 6, 385, 4340, 0), + (7946, 7, 385, 4440, 0), + (7946, 8, 385, 4540, 0), + (7946, 9, 385, 4640, 0), + (7947, 1, 310, 6000, 0), + (7947, 2, 139, 8007, 0), + (7947, 3, 310, 6000, 0), + (7947, 4, 385, 4140, 0), + (7947, 5, 385, 4240, 0), + (7947, 6, 385, 4340, 0), + (7947, 7, 385, 4440, 0), + (7947, 8, 385, 4540, 0), + (7947, 9, 385, 4640, 0), + (7948, 1, 339, 25, 16197), + (7948, 2, 138, 1, 0), + (7948, 3, 142, 60, 0), + (7948, 4, 137, 35, 0), + (7948, 5, 134, 75, 0), + (7948, 6, 339, 25, 16197), + (7948, 7, 138, 1, 0), + (7948, 8, 142, 60, 0), + (7948, 9, 137, 36, 0), + (7948, 10, 134, 75, 0), + (7948, 11, 339, 25, 16197), + (7948, 12, 138, 1, 0), + (7948, 13, 142, 60, 0), + (7948, 14, 137, 369, 0), + (7948, 15, 134, 75, 0), + (7948, 16, 339, 25, 16197), + (7948, 17, 138, 1, 0), + (7948, 18, 142, 60, 0), + (7948, 19, 137, 116, 0), + (7948, 20, 134, 75, 0), + (7949, 1, 339, 25, 16198), + (7949, 2, 138, 1, 0), + (7949, 3, 142, 60, 0), + (7949, 4, 137, 35, 0), + (7949, 5, 134, 80, 0), + (7949, 6, 339, 25, 16198), + (7949, 7, 138, 1, 0), + (7949, 8, 142, 60, 0), + (7949, 9, 137, 36, 0), + (7949, 10, 134, 80, 0), + (7949, 11, 339, 25, 16198), + (7949, 12, 138, 1, 0), + (7949, 13, 142, 60, 0), + (7949, 14, 137, 369, 0), + (7949, 15, 134, 80, 0), + (7949, 16, 339, 25, 16198), + (7949, 17, 138, 1, 0), + (7949, 18, 142, 60, 0), + (7949, 19, 137, 116, 0), + (7949, 20, 134, 80, 0), + (7950, 1, 339, 25, 16199), + (7950, 2, 138, 1, 0), + (7950, 3, 142, 60, 0), + (7950, 4, 137, 35, 0), + (7950, 5, 134, 85, 0), + (7950, 6, 339, 25, 16199), + (7950, 7, 138, 1, 0), + (7950, 8, 142, 60, 0), + (7950, 9, 137, 36, 0), + (7950, 10, 134, 85, 0), + (7950, 11, 339, 25, 16199), + (7950, 12, 138, 1, 0), + (7950, 13, 142, 60, 0), + (7950, 14, 137, 369, 0), + (7950, 15, 134, 85, 0), + (7950, 16, 339, 25, 16199), + (7950, 17, 138, 1, 0), + (7950, 18, 142, 60, 0), + (7950, 19, 137, 116, 0), + (7950, 20, 134, 85, 0), + (7980, 1, 243, 15, 0), + (7981, 1, 243, 25, 0), + (7982, 1, 243, 35, 0), + (7983, 1, 264, 120, 520), + (7984, 1, 264, 240, 520), + (7985, 1, 264, 360, 520), + (7989, 1, 264, 30, 705), + (7989, 2, 264, 30, 1092), + (7989, 3, 264, 30, 10396), + (7989, 4, 264, 30, 10397), + (7990, 1, 264, 60, 705), + (7990, 2, 264, 60, 1092), + (7990, 3, 264, 60, 10396), + (7990, 4, 264, 60, 10397), + (7991, 1, 264, 90, 705), + (7991, 2, 264, 90, 1092), + (7991, 3, 264, 90, 10396), + (7991, 4, 264, 90, 10397), + (7992, 1, 264, 120, 705), + (7992, 2, 264, 120, 1092), + (7992, 3, 264, 120, 10396), + (7992, 4, 264, 120, 10397), + (7994, 1, 264, 240, 39), + (7994, 2, 264, 3456, 1061), + (7995, 1, 264, 300, 39), + (7995, 2, 264, 4320, 1061), + (8000, 1, 69, 200, 0), + (8000, 2, 2, 75, 0), + (8000, 3, 97, 200, 0), + (8000, 4, 317, 8, 0), + (8031, 1, 264, 30, 791), + (8032, 1, 264, 60, 791), + (8033, 1, 264, 90, 791), + (8035, 1, 264, 180, 521), + (8036, 1, 264, 360, 521), + (8037, 1, 264, 540, 521), + (8040, 1, 128, 5, 5), + (8040, 2, 138, 1, 0), + (8040, 3, 140, 1, 0), + (8040, 4, 311, 0, 0), + (8040, 5, 411, 256, 0), + (8040, 6, 137, -40, 0), + (8040, 7, 391, 1, 0), + (8041, 1, 128, 15, 15), + (8041, 2, 138, 1, 0), + (8041, 3, 140, 1, 0), + (8041, 4, 311, 0, 0), + (8041, 5, 411, 256, 0), + (8041, 6, 137, -40, 0), + (8041, 7, 391, 1, 0), + (8042, 1, 128, 30, 30), + (8042, 2, 138, 1, 0), + (8042, 3, 140, 1, 0), + (8042, 4, 311, 0, 0), + (8042, 5, 411, 256, 0), + (8042, 6, 137, -40, 0), + (8042, 7, 391, 1, 0), + (8043, 1, 128, 50, 50), + (8043, 2, 138, 1, 0), + (8043, 3, 140, 1, 0), + (8043, 4, 311, 0, 0), + (8043, 5, 411, 256, 0), + (8043, 6, 137, -40, 0), + (8043, 7, 391, 1, 0), + (8059, 1, 128, 50, 50), + (8059, 2, 138, 1, 0), + (8059, 3, 140, 1, 0), + (8059, 4, 311, 0, 0), + (8059, 5, 411, 66434, 0), + (8059, 6, 137, -40, 0), + (8069, 1, 244, -10, 0), + (8070, 1, 244, -15, 0), + (8071, 1, 244, -20, 0), + (8076, 1, 264, 360, 565), + (8076, 2, 264, 360, 793), + (8076, 3, 264, 360, 794), + (8077, 1, 264, 720, 565), + (8077, 2, 264, 720, 793), + (8077, 3, 264, 720, 794), + (8078, 1, 264, 1080, 565), + (8078, 2, 264, 1080, 793), + (8078, 3, 264, 1080, 794), + (8079, 1, 264, 1440, 565), + (8079, 2, 264, 1440, 793), + (8079, 3, 264, 1440, 794), + (8080, 1, 264, 1800, 565), + (8080, 2, 264, 1800, 793), + (8080, 3, 264, 1800, 794), + (8081, 1, 264, 2160, 565), + (8081, 2, 264, 2160, 793), + (8081, 3, 264, 2160, 794), + (8082, 1, 264, 60, 208), + (8083, 1, 264, 120, 208), + (8084, 1, 264, 180, 208), + (8190, 1, 280, 2, 0), + (8191, 1, 280, 4, 0), + (8192, 1, 280, 6, 0), + (8193, 1, 339, 100, 16225), + (8193, 2, 139, 6838, 0), + (8195, 1, 264, 120, 3707), + (8196, 1, 264, 240, 3707), + (8197, 1, 264, 360, 3707), + (8198, 1, 294, 0, 110), + (8199, 1, 294, 0, 120), + (8200, 1, 294, 0, 130), + (8201, 1, 218, 1, 0), + (8202, 1, 218, 2, 0), + (8203, 1, 218, 3, 0), + (8204, 1, 127, 10, 0), + (8204, 2, 137, 154, 0), + (8204, 3, 403, 2, 0), + (8204, 4, 404, 10, 0), + (8205, 1, 127, 20, 0), + (8205, 2, 137, 154, 0), + (8205, 3, 403, 2, 0), + (8205, 4, 404, 10, 0), + (8206, 1, 127, 30, 0), + (8206, 2, 137, 154, 0), + (8206, 3, 403, 2, 0), + (8206, 4, 404, 10, 0), + (8207, 1, 127, 10, 0), + (8207, 2, 137, 154, 0), + (8207, 3, 403, 2, 0), + (8207, 4, 404, 10, 0), + (8208, 1, 127, 20, 0), + (8208, 2, 137, 154, 0), + (8208, 3, 403, 2, 0), + (8208, 4, 404, 10, 0), + (8209, 1, 127, 30, 0), + (8209, 2, 137, 154, 0), + (8209, 3, 403, 2, 0), + (8209, 4, 404, 10, 0), + (8210, 1, 97, 50, 0), + (8211, 1, 97, 100, 0), + (8212, 1, 97, 150, 0), + (8213, 1, 97, 200, 0), + (8214, 1, 97, 250, 0), + (8215, 1, 190, 50, 0), + (8216, 1, 190, 100, 0), + (8217, 1, 190, 150, 0), + (8218, 1, 190, 200, 0), + (8219, 1, 190, 250, 0), + (8223, 1, 128, 50, 50), + (8223, 2, 138, 1, 0), + (8223, 3, 140, 1, 0), + (8223, 4, 139, -2741, 0), + (8223, 5, 139, -16843, 0), + (8223, 6, 385, -16192, 0), + (8224, 1, 339, 10, 16230), + (8224, 2, 138, 1, 0), + (8224, 3, 141, 1, 0), + (8224, 4, 142, 60, 0), + (8224, 5, 137, 0, 0), + (8224, 6, 311, 0, 0), + (8224, 7, 134, 80, 0), + (8224, 8, 139, -265, 0), + (8224, 9, 139, -754, 0), + (8224, 10, 139, -1332, 0), + (8224, 11, 139, -1572, 0), + (8224, 12, 139, -2749, 0), + (8224, 13, 139, -4979, 0), + (8224, 14, 139, -5418, 0), + (8224, 15, 139, -5403, 0), + (8225, 1, 339, 10, 16231), + (8225, 2, 138, 1, 0), + (8225, 3, 141, 1, 0), + (8225, 4, 142, 65, 0), + (8225, 5, 137, 0, 0), + (8225, 6, 311, 0, 0), + (8225, 7, 134, 85, 0), + (8225, 8, 139, -265, 0), + (8225, 9, 139, -754, 0), + (8225, 10, 139, -1332, 0), + (8225, 11, 139, -1572, 0), + (8225, 12, 139, -2749, 0), + (8225, 13, 139, -4979, 0), + (8225, 14, 139, -5418, 0), + (8225, 15, 139, -5403, 0), + (8226, 1, 339, 10, 16232), + (8226, 2, 138, 1, 0), + (8226, 3, 141, 1, 0), + (8226, 4, 142, 70, 0), + (8226, 5, 137, 0, 0), + (8226, 6, 311, 0, 0), + (8226, 7, 134, 90, 0), + (8226, 8, 139, -265, 0), + (8226, 9, 139, -754, 0), + (8226, 10, 139, -1332, 0), + (8226, 11, 139, -1572, 0), + (8226, 12, 139, -2749, 0), + (8226, 13, 139, -4979, 0), + (8226, 14, 139, -5418, 0), + (8226, 15, 139, -5403, 0), + (8228, 1, 378, 5, 22), + (8229, 1, 378, 10, 22), + (8230, 1, 378, 15, 22), + (8232, 1, 128, 5, 5), + (8232, 2, 138, 1, 0), + (8232, 3, 140, 1, 0), + (8232, 4, 311, 0, 0), + (8232, 5, 411, 66434, 0), + (8232, 6, 137, -40, 0), + (8233, 1, 128, 15, 15), + (8233, 2, 138, 1, 0), + (8233, 3, 140, 1, 0), + (8233, 4, 311, 0, 0), + (8233, 5, 411, 66434, 0), + (8233, 6, 137, -40, 0), + (8234, 1, 128, 30, 30), + (8234, 2, 138, 1, 0), + (8234, 3, 140, 1, 0), + (8234, 4, 311, 0, 0), + (8234, 5, 411, 66434, 0), + (8234, 6, 137, -40, 0), + (8235, 1, 1, 29, 0), + (8236, 1, 1, 58, 0), + (8237, 1, 1, 87, 0), + (8238, 1, 1, 116, 0), + (8239, 1, 1, 145, 0), + (8240, 1, 1, 31, 0), + (8241, 1, 1, 62, 0), + (8242, 1, 1, 93, 0), + (8243, 1, 1, 124, 0), + (8244, 1, 1, 155, 0), + (8245, 1, 1, 33, 0), + (8246, 1, 1, 66, 0), + (8247, 1, 1, 99, 0), + (8248, 1, 1, 132, 0), + (8249, 1, 1, 165, 0), + (8250, 1, 1, 40, 0), + (8251, 1, 1, 80, 0), + (8252, 1, 1, 120, 0), + (8253, 1, 1, 160, 0), + (8254, 1, 1, 200, 0), + (8255, 1, 1, 50, 0), + (8256, 1, 1, 100, 0), + (8257, 1, 1, 150, 0), + (8258, 1, 1, 200, 0), + (8259, 1, 1, 250, 0), + (8261, 1, 128, 65, 65), + (8261, 2, 138, 1, 0), + (8261, 3, 140, 1, 0), + (8261, 4, 311, 0, 0), + (8261, 5, 411, 66434, 0), + (8261, 6, 137, -40, 0), + (8262, 1, 128, 70, 70), + (8262, 2, 138, 1, 0), + (8262, 3, 140, 1, 0), + (8262, 4, 139, -2741, 0), + (8262, 5, 139, -16843, 0), + (8262, 6, 385, -16192, 0), + (8263, 1, 262, 5, 0), + (8264, 1, 262, 10, 0), + (8265, 1, 262, 15, 0), + (8266, 1, 262, 20, 0), + (8267, 1, 262, 25, 0), + (8268, 1, 262, 5, 1), + (8269, 1, 262, 10, 1), + (8270, 1, 262, 15, 1), + (8271, 1, 262, 20, 1), + (8272, 1, 262, 25, 1), + (8273, 1, 262, 5, 2), + (8274, 1, 262, 10, 2), + (8275, 1, 262, 15, 2), + (8276, 1, 262, 20, 2), + (8277, 1, 262, 25, 2), + (8278, 1, 262, 5, 3), + (8279, 1, 262, 10, 3), + (8280, 1, 262, 15, 3), + (8281, 1, 262, 20, 3), + (8282, 1, 262, 25, 3), + (8283, 1, 262, 5, 4), + (8284, 1, 262, 10, 4), + (8285, 1, 262, 15, 4), + (8286, 1, 262, 20, 4), + (8287, 1, 262, 25, 4), + (8288, 1, 262, 5, 5), + (8289, 1, 262, 10, 5), + (8290, 1, 262, 15, 5), + (8291, 1, 262, 20, 5), + (8292, 1, 262, 25, 5), + (8293, 1, 262, 5, 6), + (8294, 1, 262, 10, 6), + (8295, 1, 262, 15, 6), + (8296, 1, 262, 20, 6), + (8297, 1, 262, 25, 6), + (8304, 1, 1, 174, 0), + (8305, 1, 1, 203, 0), + (8306, 1, 1, 232, 0), + (8307, 1, 1, 261, 0), + (8308, 1, 1, 290, 0), + (8313, 1, 128, 65, 65), + (8313, 2, 138, 1, 0), + (8313, 3, 140, 1, 0), + (8313, 4, 311, 0, 0), + (8313, 5, 411, 256, 0), + (8313, 6, 137, -40, 0), + (8313, 7, 391, 1, 0), + (8314, 1, 378, 2, 3), + (8315, 1, 378, 3, 3), + (8316, 1, 378, 4, 3), + (8317, 1, 264, 1, 8205), + (8318, 1, 264, 2, 8205), + (8319, 1, 264, 2, 199), + (8320, 1, 264, 4, 199), + (8321, 1, 264, 6, 199), + (8322, 1, 378, 15, 31), + (8323, 1, 378, 20, 31), + (8324, 1, 378, 25, 31), + (8325, 1, 114, -3, 0), + (8326, 1, 114, -6, 0), + (8327, 1, 114, -9, 0), + (8328, 1, 268, 75, 56), + (8328, 2, 234, 1000, 0), + (8329, 1, 227, 4, 29), + (8329, 2, 227, 4, 42), + (8331, 1, 413, 10, 0), + (8331, 2, 139, 8001, 0), + (8331, 3, 385, 12529, 0), + (8331, 4, 411, 512, 0), + (8332, 1, 287, 1, 0), + (8332, 2, 385, 116121, 0), + (8333, 1, 287, 2, 0), + (8333, 2, 385, 116121, 0), + (8334, 1, 287, 3, 0), + (8334, 2, 385, 116121, 0), + (8335, 1, 127, 10, 0), + (8335, 2, 385, 16188, 0), + (8336, 1, 127, 20, 0), + (8336, 2, 385, 16188, 0), + (8337, 1, 127, 30, 0), + (8337, 2, 385, 16188, 0), + (8338, 1, 127, 40, 0), + (8338, 2, 385, 16188, 0), + (8339, 1, 127, 50, 0), + (8339, 2, 385, 16188, 0), + (8344, 1, 294, 0, 175), + (8345, 1, 294, 0, 180), + (8346, 1, 294, 0, 185), + (8347, 1, 264, 600, 616), + (8348, 1, 264, 1200, 616), + (8349, 1, 264, 1800, 616), + (8350, 1, 310, 1200, 0), + (8350, 2, 385, 6212, 0), + (8350, 3, 310, 600, 0), + (8350, 4, 385, 6215, 0), + (8350, 5, 310, 150, 0), + (8350, 6, 385, 6218, 0), + (8350, 7, 310, 9000, 0), + (8350, 8, 385, 6232, 0), + (8350, 9, 310, 600, 0), + (8350, 10, 385, 6243, 0), + (8350, 11, 310, 150, 0), + (8350, 12, 385, 6245, 0), + (8350, 13, 310, 1200, 0), + (8350, 14, 385, 6412, 0), + (8350, 15, 310, 600, 0), + (8350, 16, 385, 6415, 0), + (8350, 17, 310, 150, 0), + (8350, 18, 385, 6418, 0), + (8350, 19, 310, 9000, 0), + (8350, 20, 385, 6432, 0), + (8350, 21, 310, 600, 0), + (8350, 22, 385, 6443, 0), + (8350, 23, 310, 150, 0), + (8350, 24, 385, 6445, 0), + (8351, 1, 262, 30, 0), + (8352, 1, 262, 35, 0), + (8353, 1, 262, 40, 0), + (8354, 1, 262, 45, 0), + (8355, 1, 262, 50, 0), + (8356, 1, 262, 55, 0), + (8357, 1, 262, 60, 0), + (8358, 1, 262, 65, 0), + (8359, 1, 262, 70, 0), + (8360, 1, 262, 75, 0), + (8361, 1, 262, 30, 1), + (8362, 1, 262, 35, 1), + (8363, 1, 262, 40, 1), + (8364, 1, 262, 45, 1), + (8365, 1, 262, 50, 1), + (8366, 1, 262, 55, 1), + (8367, 1, 262, 60, 1), + (8368, 1, 262, 65, 1), + (8369, 1, 262, 70, 1), + (8370, 1, 262, 75, 1), + (8371, 1, 262, 30, 2), + (8372, 1, 262, 35, 2), + (8373, 1, 262, 40, 2), + (8374, 1, 262, 45, 2), + (8375, 1, 262, 50, 2), + (8376, 1, 262, 55, 2), + (8377, 1, 262, 60, 2), + (8378, 1, 262, 65, 2), + (8379, 1, 262, 70, 2), + (8380, 1, 262, 75, 2), + (8381, 1, 262, 30, 3), + (8382, 1, 262, 35, 3), + (8383, 1, 262, 40, 3), + (8384, 1, 262, 45, 3), + (8385, 1, 262, 50, 3), + (8386, 1, 262, 55, 3), + (8387, 1, 262, 60, 3), + (8388, 1, 262, 65, 3), + (8389, 1, 262, 70, 3), + (8390, 1, 262, 75, 3), + (8391, 1, 262, 30, 4), + (8392, 1, 262, 35, 4), + (8393, 1, 262, 40, 4), + (8394, 1, 262, 45, 4), + (8395, 1, 262, 50, 4), + (8396, 1, 262, 55, 4), + (8397, 1, 262, 60, 4), + (8398, 1, 262, 65, 4), + (8399, 1, 262, 70, 4), + (8400, 1, 262, 75, 4), + (8401, 1, 262, 30, 5), + (8402, 1, 262, 35, 5), + (8403, 1, 262, 40, 5), + (8404, 1, 262, 45, 5), + (8405, 1, 262, 50, 5), + (8406, 1, 262, 55, 5), + (8407, 1, 262, 60, 5), + (8408, 1, 262, 65, 5), + (8409, 1, 262, 70, 5), + (8410, 1, 262, 75, 5), + (8411, 1, 262, 30, 6), + (8412, 1, 262, 35, 6), + (8413, 1, 262, 40, 6), + (8414, 1, 262, 45, 6), + (8415, 1, 262, 50, 6), + (8416, 1, 262, 55, 6), + (8417, 1, 262, 60, 6), + (8418, 1, 262, 65, 6), + (8419, 1, 262, 70, 6), + (8420, 1, 262, 75, 6), + (8421, 1, 339, 10, 27535), + (8421, 2, 138, 1, 0), + (8421, 3, 141, 1, 0), + (8421, 4, 142, 75, 0), + (8421, 5, 137, 0, 0), + (8421, 6, 311, 0, 0), + (8421, 7, 134, 95, 0), + (8421, 8, 139, -265, 0), + (8421, 9, 139, -754, 0), + (8421, 10, 139, -1332, 0), + (8421, 11, 139, -1572, 0), + (8421, 12, 139, -2749, 0), + (8421, 13, 139, -4979, 0), + (8421, 14, 139, -5418, 0), + (8421, 15, 139, -5403, 0), + (8422, 1, 1, 198, 0), + (8423, 1, 1, 231, 0), + (8424, 1, 1, 264, 0), + (8425, 1, 1, 297, 0), + (8426, 1, 1, 330, 0), + (8427, 1, 264, 1260, 254), + (8428, 1, 264, 1440, 254), + (8429, 1, 264, 1620, 254), + (8430, 1, 328, 1600, 0), + (8435, 1, 0, 35, 0), + (8440, 1, 259, 66, 0), + (8445, 1, 426, 3, 0), + (8446, 1, 426, 4, 0), + (8447, 1, 426, 5, 0), + (8448, 1, 69, 2200, 0), + (8463, 1, 172, 60, 0), + (8464, 1, 172, 61, 0), + (8470, 1, 262, 80, 7), + (8470, 2, 262, 80, 8), + (8470, 3, 262, 80, 9), + (8470, 4, 262, 80, 10), + (8470, 5, 262, 80, 11), + (9001, 1, 247, 10, 58), + (9002, 1, 247, 20, 58), + (9003, 1, 247, 30, 58), + (9004, 1, 247, 40, 58), + (9005, 1, 247, 50, 58), + (9006, 1, 247, 60, 58), + (9007, 1, 247, 70, 58), + (9008, 1, 247, 80, 58), + (9009, 1, 247, 90, 58), + (9010, 1, 247, 100, 58), + (9011, 1, 247, 10, 58), + (9012, 1, 247, 20, 58), + (9013, 1, 247, 30, 58), + (9014, 1, 247, 40, 58), + (9015, 1, 247, 50, 58), + (9016, 1, 247, 60, 58), + (9017, 1, 247, 70, 58), + (9018, 1, 247, 80, 58), + (9019, 1, 247, 90, 58), + (9020, 1, 247, 100, 58), + (9021, 1, 247, 10, 58), + (9022, 1, 247, 20, 58), + (9023, 1, 247, 30, 58), + (9024, 1, 247, 40, 58), + (9025, 1, 247, 50, 58), + (9026, 1, 247, 60, 58), + (9027, 1, 247, 70, 58), + (9028, 1, 247, 80, 58), + (9029, 1, 247, 90, 58), + (9030, 1, 247, 100, 58), + (9033, 1, 264, 18000, 481), + (9033, 2, 264, 18000, 482), + (9033, 3, 264, 18000, 483), + (9033, 4, 264, 147600, 484), + (9033, 5, 264, 18000, 485), + (9033, 6, 264, 61200, 486), + (9033, 7, 264, 3600, 487), + (9033, 8, 264, 1080, 511), + (9033, 9, 264, 18000, 182), + (9033, 10, 264, 18000, 8081), + (9033, 11, 264, 18000, 8130), + (9033, 12, 264, 18000, 453), + (9033, 13, 264, 18000, 2000), + (9100, 1, 97, 10, 0), + (9100, 2, 262, 1, 5), + (9101, 1, 97, 20, 0), + (9101, 2, 262, 2, 5), + (9102, 1, 97, 30, 0), + (9102, 2, 262, 3, 5), + (9103, 1, 97, 40, 0), + (9103, 2, 262, 4, 5), + (9104, 1, 97, 50, 0), + (9104, 2, 262, 5, 5), + (9105, 1, 97, 60, 0), + (9105, 2, 262, 6, 5), + (9106, 1, 97, 70, 0), + (9106, 2, 262, 7, 5), + (9107, 1, 97, 80, 0), + (9107, 2, 262, 8, 5), + (9108, 1, 97, 90, 0), + (9108, 2, 262, 9, 5), + (9109, 1, 69, 10, 0), + (9109, 2, 262, 1, 1), + (9110, 1, 69, 20, 0), + (9110, 2, 262, 2, 1), + (9111, 1, 69, 30, 0), + (9111, 2, 262, 3, 1), + (9112, 1, 69, 40, 0), + (9112, 2, 262, 4, 1), + (9113, 1, 69, 50, 0), + (9113, 2, 262, 5, 1), + (9114, 1, 69, 60, 0), + (9114, 2, 262, 6, 1), + (9115, 1, 69, 70, 0), + (9115, 2, 262, 7, 1), + (9116, 1, 69, 80, 0), + (9116, 2, 262, 8, 1), + (9117, 1, 69, 90, 0), + (9117, 2, 262, 9, 1), + (9118, 1, 97, 10, 0), + (9118, 2, 262, 1, 5), + (9119, 1, 97, 20, 0), + (9119, 2, 262, 2, 5), + (9120, 1, 97, 30, 0), + (9120, 2, 262, 3, 5), + (9121, 1, 97, 40, 0), + (9121, 2, 262, 4, 5), + (9122, 1, 97, 50, 0), + (9122, 2, 262, 5, 5), + (9123, 1, 97, 60, 0), + (9123, 2, 262, 6, 5), + (9124, 1, 97, 70, 0), + (9124, 2, 262, 7, 5), + (9125, 1, 97, 80, 0), + (9125, 2, 262, 8, 5), + (9126, 1, 97, 90, 0), + (9126, 2, 262, 9, 5), + (9127, 1, 69, 10, 0), + (9127, 2, 262, 1, 5), + (9128, 1, 69, 20, 0), + (9128, 2, 262, 2, 5), + (9129, 1, 69, 30, 0), + (9129, 2, 262, 3, 5), + (9130, 1, 69, 40, 0), + (9130, 2, 262, 4, 5), + (9131, 1, 69, 50, 0), + (9131, 2, 262, 5, 5), + (9132, 1, 69, 60, 0), + (9132, 2, 262, 6, 5), + (9133, 1, 69, 70, 0), + (9133, 2, 262, 7, 5), + (9134, 1, 69, 80, 0), + (9134, 2, 262, 8, 5), + (9135, 1, 69, 90, 0), + (9135, 2, 262, 9, 5), + (9136, 1, 97, 10, 0), + (9136, 2, 262, 1, 4), + (9137, 1, 97, 20, 0), + (9137, 2, 262, 2, 4), + (9138, 1, 97, 30, 0), + (9138, 2, 262, 3, 4), + (9139, 1, 97, 40, 0), + (9139, 2, 262, 4, 4), + (9140, 1, 97, 50, 0), + (9140, 2, 262, 5, 4), + (9141, 1, 97, 60, 0), + (9141, 2, 262, 6, 4), + (9142, 1, 97, 70, 0), + (9142, 2, 262, 7, 4), + (9143, 1, 97, 80, 0), + (9143, 2, 262, 8, 4), + (9144, 1, 97, 90, 0), + (9144, 2, 262, 9, 4), + (9145, 1, 97, 10, 0), + (9145, 2, 262, 1, 4), + (9146, 1, 97, 20, 0), + (9146, 2, 262, 2, 4), + (9147, 1, 97, 30, 0), + (9147, 2, 262, 3, 4), + (9148, 1, 97, 40, 0), + (9148, 2, 262, 4, 4), + (9149, 1, 97, 50, 0), + (9149, 2, 262, 5, 4), + (9150, 1, 97, 60, 0), + (9150, 2, 262, 6, 4), + (9151, 1, 97, 70, 0), + (9151, 2, 262, 7, 4), + (9152, 1, 97, 80, 0), + (9152, 2, 262, 8, 4), + (9153, 1, 97, 90, 0), + (9153, 2, 262, 9, 4), + (9154, 1, 69, 10, 0), + (9154, 2, 262, 1, 1), + (9155, 1, 69, 20, 0), + (9155, 2, 262, 2, 1), + (9156, 1, 69, 30, 0), + (9156, 2, 262, 3, 1), + (9157, 1, 69, 40, 0), + (9157, 2, 262, 4, 1), + (9158, 1, 69, 50, 0), + (9158, 2, 262, 5, 1), + (9159, 1, 69, 60, 0), + (9159, 2, 262, 6, 1), + (9160, 1, 69, 70, 0), + (9160, 2, 262, 7, 1), + (9161, 1, 69, 80, 0), + (9161, 2, 262, 8, 1), + (9162, 1, 69, 90, 0), + (9162, 2, 262, 9, 1), + (9163, 1, 69, 10, 0), + (9163, 2, 262, 1, 3), + (9164, 1, 69, 20, 0), + (9164, 2, 262, 2, 3), + (9165, 1, 69, 30, 0), + (9165, 2, 262, 3, 3), + (9166, 1, 69, 40, 0), + (9166, 2, 262, 4, 3), + (9167, 1, 69, 50, 0), + (9167, 2, 262, 5, 3), + (9168, 1, 69, 60, 0), + (9168, 2, 262, 6, 3), + (9169, 1, 69, 70, 0), + (9169, 2, 262, 7, 3), + (9170, 1, 69, 80, 0), + (9170, 2, 262, 8, 3), + (9171, 1, 69, 90, 0), + (9171, 2, 262, 9, 3), + (9172, 1, 69, 10, 0), + (9172, 2, 262, 1, 0), + (9173, 1, 69, 20, 0), + (9173, 2, 262, 2, 0), + (9174, 1, 69, 30, 0), + (9174, 2, 262, 3, 0), + (9175, 1, 69, 40, 0), + (9175, 2, 262, 4, 0), + (9176, 1, 69, 50, 0), + (9176, 2, 262, 5, 0), + (9177, 1, 69, 60, 0), + (9177, 2, 262, 6, 0), + (9178, 1, 69, 70, 0), + (9178, 2, 262, 7, 0), + (9179, 1, 69, 80, 0), + (9179, 2, 262, 8, 0), + (9180, 1, 69, 90, 0), + (9180, 2, 262, 9, 0), + (9181, 1, 69, 10, 0), + (9181, 2, 262, 1, 0), + (9182, 1, 69, 20, 0), + (9182, 2, 262, 2, 0), + (9183, 1, 69, 30, 0), + (9183, 2, 262, 3, 0), + (9184, 1, 69, 40, 0), + (9184, 2, 262, 4, 0), + (9185, 1, 69, 50, 0), + (9185, 2, 262, 5, 0), + (9186, 1, 69, 60, 0), + (9186, 2, 262, 6, 0), + (9187, 1, 69, 70, 0), + (9187, 2, 262, 7, 0), + (9188, 1, 69, 80, 0), + (9188, 2, 262, 8, 0), + (9189, 1, 69, 90, 0), + (9189, 2, 262, 9, 0), + (9190, 1, 69, 10, 0), + (9190, 2, 262, 1, 0), + (9191, 1, 69, 20, 0), + (9191, 2, 262, 2, 0), + (9192, 1, 69, 30, 0), + (9192, 2, 262, 3, 0), + (9193, 1, 69, 40, 0), + (9193, 2, 262, 4, 0), + (9194, 1, 69, 50, 0), + (9194, 2, 262, 5, 0), + (9195, 1, 69, 60, 0), + (9195, 2, 262, 6, 0), + (9196, 1, 69, 70, 0), + (9196, 2, 262, 7, 0), + (9197, 1, 69, 80, 0), + (9197, 2, 262, 8, 0), + (9198, 1, 69, 90, 0), + (9198, 2, 262, 9, 0), + (9199, 1, 97, 10, 0), + (9199, 2, 262, 1, 0), + (9200, 1, 97, 20, 0), + (9200, 2, 262, 2, 0), + (9201, 1, 97, 30, 0), + (9201, 2, 262, 3, 0), + (9202, 1, 97, 40, 0), + (9202, 2, 262, 4, 0), + (9203, 1, 97, 50, 0), + (9203, 2, 262, 5, 0), + (9204, 1, 97, 60, 0), + (9204, 2, 262, 6, 0), + (9205, 1, 97, 70, 0), + (9205, 2, 262, 7, 0), + (9206, 1, 97, 80, 0), + (9206, 2, 262, 8, 0), + (9207, 1, 97, 90, 0), + (9207, 2, 262, 9, 0), + (9208, 1, 69, 10, 0), + (9208, 2, 262, 1, 0), + (9209, 1, 69, 20, 0), + (9209, 2, 262, 2, 0), + (9210, 1, 69, 30, 0), + (9210, 2, 262, 3, 0), + (9211, 1, 69, 40, 0), + (9211, 2, 262, 4, 0), + (9212, 1, 69, 50, 0), + (9212, 2, 262, 5, 0), + (9213, 1, 69, 60, 0), + (9213, 2, 262, 6, 0), + (9214, 1, 69, 70, 0), + (9214, 2, 262, 7, 0), + (9215, 1, 69, 80, 0), + (9215, 2, 262, 8, 0), + (9216, 1, 69, 90, 0), + (9216, 2, 262, 9, 0), + (9217, 1, 190, 10, 0), + (9217, 2, 262, 1, 0), + (9218, 1, 190, 20, 0), + (9218, 2, 262, 2, 0), + (9219, 1, 190, 30, 0), + (9219, 2, 262, 3, 0), + (9220, 1, 190, 40, 0), + (9220, 2, 262, 4, 0), + (9221, 1, 190, 50, 0), + (9221, 2, 262, 5, 0), + (9222, 1, 190, 60, 0), + (9222, 2, 262, 6, 0), + (9223, 1, 190, 70, 0), + (9223, 2, 262, 7, 0), + (9224, 1, 190, 80, 0), + (9224, 2, 262, 8, 0), + (9225, 1, 190, 90, 0), + (9225, 2, 262, 9, 0), + (9226, 1, 69, 10, 0), + (9226, 2, 262, 1, 0), + (9227, 1, 69, 20, 0), + (9227, 2, 262, 2, 0), + (9228, 1, 69, 30, 0), + (9228, 2, 262, 3, 0), + (9229, 1, 69, 40, 0), + (9229, 2, 262, 4, 0), + (9230, 1, 69, 50, 0), + (9230, 2, 262, 5, 0), + (9231, 1, 69, 60, 0), + (9231, 2, 262, 6, 0), + (9232, 1, 69, 70, 0), + (9232, 2, 262, 7, 0), + (9233, 1, 69, 80, 0), + (9233, 2, 262, 8, 0), + (9234, 1, 69, 90, 0), + (9234, 2, 262, 9, 0), + (9235, 1, 190, 10, 0), + (9235, 2, 262, 1, 0), + (9236, 1, 190, 20, 0), + (9236, 2, 262, 2, 0), + (9237, 1, 190, 30, 0), + (9237, 2, 262, 3, 0), + (9238, 1, 190, 40, 0), + (9238, 2, 262, 4, 0), + (9239, 1, 190, 50, 0), + (9239, 2, 262, 5, 0), + (9240, 1, 190, 60, 0), + (9240, 2, 262, 6, 0), + (9241, 1, 190, 70, 0), + (9241, 2, 262, 7, 0), + (9242, 1, 190, 80, 0), + (9242, 2, 262, 8, 0), + (9243, 1, 190, 90, 0), + (9243, 2, 262, 9, 0), + (9503, 1, 397, 100, 0), + (9504, 1, 397, 200, 0), + (9505, 1, 397, 300, 0), + (9506, 1, 398, 1000, 0), + (9506, 2, 137, 152, 0), + (9507, 1, 398, 2000, 0), + (9507, 2, 137, 152, 0), + (9508, 1, 398, 3000, 0), + (9508, 2, 137, 152, 0), + (9509, 1, 399, 1, 0), + (9509, 2, 141, 1, 0), + (9509, 3, 138, 0, 0), + (9509, 4, 134, 254, 0), + (9509, 5, 348, 10, 0), + (9509, 6, 137, 0, 0), + (9509, 7, 311, 0, 0), + (9509, 8, 137, -152, 0), + (9509, 9, 137, -39, 0), + (9510, 1, 399, 2, 0), + (9510, 2, 141, 1, 0), + (9510, 3, 138, 0, 0), + (9510, 4, 134, 254, 0), + (9510, 5, 348, 10, 0), + (9510, 6, 137, 0, 0), + (9510, 7, 311, 0, 0), + (9510, 8, 137, -152, 0), + (9510, 9, 137, -39, 0), + (9511, 1, 399, 3, 0), + (9511, 2, 141, 1, 0), + (9511, 3, 138, 0, 0), + (9511, 4, 134, 254, 0), + (9511, 5, 348, 10, 0), + (9511, 6, 137, 0, 0), + (9511, 7, 311, 0, 0), + (9511, 8, 137, -152, 0), + (9511, 9, 137, -39, 0), + (9512, 1, 405, 1, 0), + (9513, 1, 405, 3, 0), + (9514, 1, 405, 5, 0), + (9515, 1, 399, 4, 0), + (9515, 2, 141, 1, 0), + (9515, 3, 138, 0, 0), + (9515, 4, 134, 254, 0), + (9515, 5, 348, 10, 0), + (9515, 6, 137, 0, 0), + (9515, 7, 311, 0, 0), + (9515, 8, 137, -152, 0), + (9515, 9, 137, -39, 0), + (10004, 1, 310, 480000, 0), + (10004, 2, 139, 4674, 0), + (10005, 1, 310, 600000, 0), + (10005, 2, 139, 4674, 0), + (10007, 1, 85, 16500, 50), + (10008, 1, 85, 16501, 50), + (10009, 1, 85, 16502, 50), + (10025, 1, 339, 25, 16517), + (10025, 2, 137, 21, 0), + (10026, 1, 339, 25, 16518), + (10026, 2, 137, 21, 0), + (10027, 1, 339, 25, 16519), + (10027, 2, 137, 21, 0), + (10028, 1, 339, 25, 16520), + (10028, 2, 137, 21, 0), + (10029, 1, 339, 25, 16555), + (10029, 2, 137, 21, 0), + (10030, 1, 264, 60, 558), + (10031, 1, 264, 75, 558), + (10032, 1, 264, 90, 558), + (10033, 1, 310, 8000, 0), + (10033, 2, 139, 8007, 0), + (10033, 3, 310, 8000, 0), + (10033, 4, 385, 4140, 0), + (10033, 5, 385, 4240, 0), + (10033, 6, 385, 4340, 0), + (10033, 7, 385, 4440, 0), + (10033, 8, 385, 4540, 0), + (10033, 9, 385, 4640, 0), + (10034, 1, 310, 10000, 0), + (10034, 2, 139, 8007, 0), + (10034, 3, 310, 10000, 0), + (10034, 4, 385, 4140, 0), + (10034, 5, 385, 4240, 0), + (10034, 6, 385, 4340, 0), + (10034, 7, 385, 4440, 0), + (10034, 8, 385, 4540, 0), + (10034, 9, 385, 4640, 0), + (10035, 1, 339, 25, 16556), + (10035, 2, 138, 1, 0), + (10035, 3, 142, 60, 0), + (10035, 4, 137, 35, 0), + (10035, 5, 134, 85, 0), + (10035, 6, 339, 25, 16556), + (10035, 7, 138, 1, 0), + (10035, 8, 142, 60, 0), + (10035, 9, 137, 36, 0), + (10035, 10, 134, 85, 0), + (10035, 11, 339, 25, 16556), + (10035, 12, 138, 1, 0), + (10035, 13, 142, 60, 0), + (10035, 14, 137, 369, 0), + (10035, 15, 134, 85, 0), + (10035, 16, 339, 25, 16556), + (10035, 17, 138, 1, 0), + (10035, 18, 142, 60, 0), + (10035, 19, 137, 116, 0), + (10035, 20, 134, 85, 0), + (10036, 1, 339, 25, 16557), + (10036, 2, 138, 1, 0), + (10036, 3, 142, 60, 0), + (10036, 4, 137, 35, 0), + (10036, 5, 134, 85, 0), + (10036, 6, 339, 25, 16557), + (10036, 7, 138, 1, 0), + (10036, 8, 142, 60, 0), + (10036, 9, 137, 36, 0), + (10036, 10, 134, 85, 0), + (10036, 11, 339, 25, 16557), + (10036, 12, 138, 1, 0), + (10036, 13, 142, 60, 0), + (10036, 14, 137, 369, 0), + (10036, 15, 134, 85, 0), + (10036, 16, 339, 25, 16557), + (10036, 17, 138, 1, 0), + (10036, 18, 142, 60, 0), + (10036, 19, 137, 116, 0), + (10036, 20, 134, 85, 0), + (10037, 1, 339, 25, 16558), + (10037, 2, 138, 1, 0), + (10037, 3, 142, 60, 0), + (10037, 4, 137, 35, 0), + (10037, 5, 134, 85, 0), + (10037, 6, 339, 25, 16558), + (10037, 7, 138, 1, 0), + (10037, 8, 142, 60, 0), + (10037, 9, 137, 36, 0), + (10037, 10, 134, 85, 0), + (10037, 11, 339, 25, 16558), + (10037, 12, 138, 1, 0), + (10037, 13, 142, 60, 0), + (10037, 14, 137, 369, 0), + (10037, 15, 134, 85, 0), + (10037, 16, 339, 25, 16558), + (10037, 17, 138, 1, 0), + (10037, 18, 142, 60, 0), + (10037, 19, 137, 116, 0), + (10037, 20, 134, 85, 0), + (10041, 1, 294, 0, 135), + (10042, 1, 294, 0, 145), + (10043, 1, 294, 0, 155), + (10044, 1, 339, 20, 16564), + (10044, 2, 137, 21, 0), + (10044, 3, 385, -18000, 0), + (10044, 4, 339, 20, 16564), + (10044, 5, 137, 343, 0), + (10044, 6, 385, -18000, 0), + (10045, 1, 339, 20, 16565), + (10045, 2, 137, 21, 0), + (10045, 3, 385, -18000, 0), + (10045, 4, 339, 20, 16565), + (10045, 5, 137, 343, 0), + (10045, 6, 385, -18000, 0), + (10046, 1, 339, 20, 16566), + (10046, 2, 137, 21, 0), + (10046, 3, 385, -18000, 0), + (10046, 4, 339, 20, 16566), + (10046, 5, 137, 343, 0), + (10046, 6, 385, -18000, 0), + (10050, 1, 85, 16567, 0), + (10051, 1, 85, 16568, 0), + (10052, 1, 85, 16569, 0), + (10058, 1, 330, 55, 7), + (10059, 1, 330, 60, 7), + (10060, 1, 330, 65, 7), + (10064, 1, 347, 25, 0), + (10065, 1, 347, 26, 0), + (10066, 1, 347, 27, 0), + (10067, 1, 347, 28, 0), + (10068, 1, 347, 29, 0), + (10069, 1, 347, 30, 0), + (10070, 1, 218, 6, 0), + (10071, 1, 218, 7, 0), + (10072, 1, 218, 8, 0), + (10073, 1, 218, 9, 0), + (10074, 1, 218, 10, 0), + (10075, 1, 339, 10, 16581), + (10075, 2, 138, 0, 0), + (10075, 3, 142, 70, 0), + (10075, 4, 403, 4, 0), + (10075, 5, 348, 1, 0), + (10075, 6, 404, 2, 0), + (10075, 7, 141, 1, 0), + (10076, 1, 339, 10, 16582), + (10076, 2, 138, 0, 0), + (10076, 3, 142, 70, 0), + (10076, 4, 403, 4, 0), + (10076, 5, 348, 1, 0), + (10076, 6, 404, 2, 0), + (10076, 7, 141, 1, 0), + (10077, 1, 339, 10, 16583), + (10077, 2, 138, 0, 0), + (10077, 3, 142, 70, 0), + (10077, 4, 403, 4, 0), + (10077, 5, 348, 1, 0), + (10077, 6, 404, 2, 0), + (10077, 7, 141, 1, 0), + (10081, 1, 85, 16584, 0), + (10082, 1, 85, 16585, 0), + (10083, 1, 85, 16586, 0), + (10084, 1, 375, 175, 0), + (10085, 1, 375, 200, 0), + (10086, 1, 375, 215, 0), + (10087, 1, 397, 400, 0), + (10088, 1, 397, 600, 0), + (10089, 1, 397, 800, 0), + (10105, 1, 264, 60, 170), + (10106, 1, 264, 70, 170), + (10107, 1, 264, 80, 170), + (10108, 1, 264, 90, 170), + (10109, 1, 264, 100, 170), + (10110, 1, 264, 480, 520), + (10111, 1, 264, 600, 520), + (10112, 1, 264, 720, 520), + (10122, 1, 227, 210, 32), + (10123, 1, 227, 240, 32), + (10124, 1, 283, 180, 0), + (10125, 1, 283, 200, 0), + (10126, 1, 283, 220, 0), + (10130, 1, 264, 720, 544), + (10131, 1, 264, 900, 544), + (10132, 1, 264, 1080, 544), + (10133, 1, 279, 19, 0), + (10134, 1, 279, 23, 0), + (10135, 1, 279, 27, 0), + (10136, 1, 375, 130, 0), + (10137, 1, 375, 135, 0), + (10138, 1, 375, 140, 0), + (10153, 1, 264, 420, 553), + (10154, 1, 264, 480, 553), + (10155, 1, 264, 540, 553), + (10165, 1, 220, 195, 8), + (10166, 1, 220, 225, 8), + (10167, 1, 220, 255, 8), + (10171, 1, 252, 90, 0), + (10172, 1, 252, 95, 0), + (10173, 1, 258, 70, 0), + (10174, 1, 258, 71, 0), + (10175, 1, 258, 72, 0), + (10176, 1, 264, 40, 171), + (10177, 1, 264, 50, 171), + (10178, 1, 264, 60, 171), + (10182, 1, 264, 180, 177), + (10183, 1, 264, 210, 177), + (10184, 1, 264, 240, 177), + (10185, 1, 264, 270, 177), + (10186, 1, 264, 300, 177), + (10203, 1, 264, 720, 524), + (10204, 1, 264, 900, 524), + (10205, 1, 264, 1080, 524), + (10206, 1, 264, 1080, 320), + (10207, 1, 264, 1260, 320), + (10213, 1, 218, 16, 0), + (10214, 1, 218, 17, 0), + (10215, 1, 218, 18, 0), + (10216, 1, 218, 19, 0), + (10217, 1, 218, 20, 0), + (10219, 1, 280, 63, 0), + (10220, 1, 280, 64, 0), + (10221, 1, 280, 65, 0), + (10222, 1, 280, 66, 0), + (10223, 1, 280, 67, 0), + (10227, 1, 360, 60, 16720), + (10228, 1, 360, 60, 16721), + (10229, 1, 360, 60, 16722), + (10249, 1, 264, 240, 208), + (10250, 1, 264, 300, 208), + (10251, 1, 264, 360, 208), + (10262, 1, 274, 23, 0), + (10263, 1, 274, 24, 0), + (10264, 1, 274, 25, 0), + (10265, 1, 280, 57, 0), + (10266, 1, 280, 58, 0), + (10267, 1, 280, 59, 0), + (10268, 1, 339, 45, 16736), + (10268, 2, 136, 11, 0), + (10268, 3, 383, 45, 16736), + (10268, 4, 385, 11012, 0), + (10268, 5, 383, 45, 16736), + (10268, 6, 385, 5130, 0), + (10268, 7, 383, 45, 16736), + (10268, 8, 385, 5230, 0), + (10268, 9, 383, 45, 16736), + (10268, 10, 136, 22, 0), + (10268, 11, 383, 45, 16736), + (10268, 12, 385, 5330, 0), + (10268, 13, 385, 5430, 0), + (10268, 14, 385, 5530, 0), + (10269, 1, 339, 45, 16737), + (10269, 2, 136, 11, 0), + (10269, 3, 383, 45, 16737), + (10269, 4, 385, 11012, 0), + (10269, 5, 383, 45, 16737), + (10269, 6, 385, 5130, 0), + (10269, 7, 383, 45, 16737), + (10269, 8, 385, 5230, 0), + (10269, 9, 383, 45, 16737), + (10269, 10, 136, 22, 0), + (10269, 11, 383, 45, 16737), + (10269, 12, 385, 5330, 0), + (10269, 13, 385, 5430, 0), + (10269, 14, 385, 5530, 0), + (10270, 1, 339, 45, 16738), + (10270, 2, 136, 11, 0), + (10270, 3, 383, 45, 16738), + (10270, 4, 385, 11012, 0), + (10270, 5, 383, 45, 16738), + (10270, 6, 385, 5130, 0), + (10270, 7, 383, 45, 16738), + (10270, 8, 385, 5230, 0), + (10270, 9, 383, 45, 16738), + (10270, 10, 136, 22, 0), + (10270, 11, 383, 45, 16738), + (10270, 12, 385, 5330, 0), + (10270, 13, 385, 5430, 0), + (10270, 14, 385, 5530, 0), + (10282, 1, 264, 120, 791), + (10283, 1, 264, 150, 791), + (10284, 1, 264, 180, 791), + (10285, 1, 264, 720, 521), + (10286, 1, 264, 900, 521), + (10287, 1, 264, 1080, 521), + (10291, 1, 264, 15, 247), + (10291, 2, 264, 8, 986), + (10291, 3, 264, 8, 987), + (10291, 4, 264, 8, 988), + (10292, 1, 264, 18, 247), + (10292, 2, 264, 10, 986), + (10292, 3, 264, 10, 987), + (10292, 4, 264, 10, 988), + (10293, 1, 264, 21, 247), + (10293, 2, 264, 12, 986), + (10293, 3, 264, 12, 987), + (10293, 4, 264, 12, 988), + (10305, 1, 280, 68, 0), + (10306, 1, 280, 69, 0), + (10307, 1, 280, 70, 0), + (10311, 1, 220, 608, 74), + (10312, 1, 220, 640, 74), + (10313, 1, 220, 672, 74), + (10314, 1, 220, 704, 74), + (10315, 1, 220, 736, 74), + (10316, 1, 216, 160, 74), + (10317, 1, 216, 200, 74), + (10318, 1, 216, 240, 74), + (10329, 1, 264, 60, 3701), + (10332, 1, 287, 1, 0), + (10332, 2, 137, 22, 0), + (10332, 3, 411, 256, 0), + (10340, 1, 220, 100, 26), + (10341, 1, 220, 160, 26), + (10342, 1, 220, 235, 26), + (10343, 1, 264, 5, 469), + (10344, 1, 264, 10, 469), + (10345, 1, 264, 15, 469), + (10347, 1, 310, 12000, 0), + (10347, 2, 139, 8007, 0), + (10347, 3, 310, 12000, 0), + (10347, 4, 385, 4140, 0), + (10347, 5, 385, 4240, 0), + (10347, 6, 385, 4340, 0), + (10347, 7, 385, 4440, 0), + (10347, 8, 385, 4540, 0), + (10347, 9, 385, 4640, 0), + (10348, 1, 244, 60, 0), + (10349, 1, 244, 50, 0), + (10350, 1, 244, 40, 0), + (10355, 1, 124, 50, 50), + (10355, 2, 385, 19, 0), + (10355, 3, 144, 0, 0), + (10355, 4, 403, 3, 0), + (10355, 5, 404, 48, 0), + (10355, 6, 385, -21768, 0), + (10356, 1, 124, 100, 100), + (10356, 2, 385, 19, 0), + (10356, 3, 144, 0, 0), + (10356, 4, 403, 3, 0), + (10356, 5, 404, 48, 0), + (10356, 6, 385, -21768, 0), + (10357, 1, 124, 150, 150), + (10357, 2, 385, 19, 0), + (10357, 3, 144, 0, 0), + (10357, 4, 403, 3, 0), + (10357, 5, 404, 48, 0), + (10357, 6, 385, -21768, 0), + (10358, 1, 310, 10000, 0), + (10358, 2, 139, 1546, 0), + (10358, 3, 310, 10000, 0), + (10358, 4, 385, 4357, 0), + (10358, 5, 385, 4457, 0), + (10358, 6, 385, 4557, 0), + (10358, 7, 385, 4657, 0), + (10358, 8, 411, 4, 0), + (10359, 1, 310, 20000, 0), + (10359, 2, 139, 1546, 0), + (10359, 3, 310, 20000, 0), + (10359, 4, 385, 4357, 0), + (10359, 5, 385, 4457, 0), + (10359, 6, 385, 4557, 0), + (10359, 7, 385, 4657, 0), + (10359, 8, 411, 4, 0), + (10360, 1, 310, 30000, 0), + (10360, 2, 139, 1546, 0), + (10360, 3, 310, 30000, 0), + (10360, 4, 385, 4357, 0), + (10360, 5, 385, 4457, 0), + (10360, 6, 385, 4557, 0), + (10360, 7, 385, 4657, 0), + (10360, 8, 411, 4, 0), + (10361, 1, 232, 17, 4544), + (10362, 1, 232, 19, 4544), + (10363, 1, 232, 21, 4544), + (10364, 1, 413, -5, 0), + (10364, 2, 139, 480, 0), + (10364, 3, 385, 4352, 0), + (10364, 4, 385, 4452, 0), + (10365, 1, 413, -10, 0), + (10365, 2, 139, 480, 0), + (10365, 3, 385, 4352, 0), + (10365, 4, 385, 4452, 0), + (10366, 1, 413, -15, 0), + (10366, 2, 139, 480, 0), + (10366, 3, 385, 4352, 0), + (10366, 4, 385, 4452, 0), + (10370, 1, 114, -5, 0), + (10371, 1, 114, -10, 0), + (10372, 1, 114, -20, 0), + (10380, 1, 126, 5, 0), + (10380, 2, 134, 85, 0), + (10380, 3, 135, 4, 0), + (10380, 4, 135, 5, 0), + (10381, 1, 126, 10, 0), + (10381, 2, 134, 85, 0), + (10381, 3, 135, 4, 0), + (10381, 4, 135, 5, 0), + (10382, 1, 126, 15, 0), + (10382, 2, 134, 85, 0), + (10382, 3, 135, 4, 0), + (10382, 4, 135, 5, 0), + (10383, 1, 360, 25, 21770), + (10384, 1, 360, 25, 21771), + (10385, 1, 360, 25, 21772), + (10388, 1, 323, 21850, 0), + (10389, 1, 287, 5, 0), + (10389, 2, 385, 16107, 0), + (10389, 3, 411, 512, 0), + (10390, 1, 287, 10, 0), + (10390, 2, 385, 16107, 0), + (10390, 3, 411, 512, 0), + (10391, 1, 287, 15, 0), + (10391, 2, 385, 16107, 0), + (10391, 3, 411, 512, 0), + (10398, 1, 264, 120, 3701), + (10399, 1, 264, 180, 3701), + (10401, 1, 310, 30000, 0), + (10401, 2, 385, 3107, 0), + (10401, 3, 385, 3207, 0), + (10401, 4, 385, 3307, 0), + (10401, 5, 385, 3407, 0), + (10401, 6, 385, 3507, 0), + (10401, 7, 385, 3607, 0), + (10402, 1, 310, 60000, 0), + (10402, 2, 385, 3107, 0), + (10402, 3, 385, 3207, 0), + (10402, 4, 385, 3307, 0), + (10402, 5, 385, 3407, 0), + (10402, 6, 385, 3507, 0), + (10402, 7, 385, 3607, 0), + (10403, 1, 310, 90000, 0), + (10403, 2, 385, 3107, 0), + (10403, 3, 385, 3207, 0), + (10403, 4, 385, 3307, 0), + (10403, 5, 385, 3407, 0), + (10403, 6, 385, 3507, 0), + (10403, 7, 385, 3607, 0), + (10404, 1, 287, 1, 0), + (10404, 2, 139, 8003, 0), + (10405, 1, 310, 120000, 0), + (10405, 2, 139, 4590, 0), + (10406, 1, 310, 240000, 0), + (10406, 2, 139, 4590, 0), + (10407, 1, 310, 360000, 0), + (10407, 2, 139, 4590, 0), + (10408, 1, 310, 480000, 0), + (10408, 2, 139, 4590, 0), + (10409, 1, 310, 600000, 0), + (10409, 2, 139, 4590, 0), + (10410, 1, 247, 130, 76), + (10413, 1, 264, 60, 207), + (10414, 2, 264, 120, 207), + (10415, 3, 264, 180, 207), + (10416, 4, 264, 240, 207), + (10417, 5, 264, 300, 207), + (10431, 1, 264, 210, 791), + (10432, 1, 264, 240, 791), + (10433, 1, 264, 270, 791), + (10434, 1, 127, 16, 0), + (10434, 2, 385, 5921, 0), + (10435, 1, 127, 33, 0), + (10435, 2, 385, 5921, 0), + (10436, 1, 127, 50, 0), + (10436, 2, 385, 5921, 0), + (10437, 1, 339, 25, 23523), + (10437, 2, 137, 21, 0), + (10438, 1, 339, 25, 23524), + (10438, 2, 137, 21, 0), + (10439, 1, 339, 25, 23525), + (10439, 2, 137, 21, 0), + (10440, 1, 339, 25, 23526), + (10440, 2, 137, 21, 0), + (10442, 1, 413, -20, 0), + (10442, 2, 139, 480, 0), + (10442, 3, 385, 4352, 0), + (10442, 4, 385, 4452, 0), + (10443, 1, 413, -25, 0), + (10443, 2, 139, 480, 0), + (10443, 3, 385, 4352, 0), + (10443, 4, 385, 4452, 0), + (10453, 1, 126, 1, 1), + (10453, 2, 137, 21, 0), + (10453, 3, 231, 1, 0), + (10454, 1, 126, 2, 2), + (10454, 2, 137, 21, 0), + (10454, 3, 231, 2, 0), + (10455, 1, 126, 3, 3), + (10455, 2, 137, 21, 0), + (10455, 3, 231, 3, 0), + (10456, 1, 127, 15, 15), + (10456, 2, 139, 12786, 0), + (10457, 1, 127, 30, 30), + (10457, 2, 139, 12786, 0), + (10458, 1, 127, 50, 50), + (10458, 2, 139, 12786, 0), + (10459, 1, 310, 3000, 0), + (10459, 2, 139, 480, 0), + (10459, 3, 310, 3000, 0), + (10459, 4, 385, 4352, 0), + (10459, 5, 385, 4452, 0), + (10459, 6, 385, 4552, 0), + (10460, 1, 310, 6000, 0), + (10460, 2, 139, 480, 0), + (10460, 3, 310, 6000, 0), + (10460, 4, 385, 4352, 0), + (10460, 5, 385, 4452, 0), + (10460, 6, 385, 4552, 0), + (10461, 1, 310, 10000, 0), + (10461, 2, 139, 480, 0), + (10461, 3, 310, 10000, 0), + (10461, 4, 385, 4352, 0), + (10461, 5, 385, 4452, 0), + (10461, 6, 385, 4552, 0), + (10464, 1, 264, 120, 391), + (10465, 1, 264, 240, 391), + (10466, 1, 264, 360, 391), + (10467, 1, 128, 70, 70), + (10467, 2, 138, 1, 0), + (10467, 3, 140, 1, 0), + (10467, 4, 139, -2741, 0), + (10467, 5, 139, -16843, 0), + (10467, 6, 385, -16192, 0), + (10467, 7, 385, -10547, 0), + (10467, 8, 385, -13543, 0), + (10470, 1, 127, 10, 0), + (10470, 2, 385, 8048, 0), + (10471, 1, 127, 20, 0), + (10471, 2, 385, 8048, 0), + (10472, 1, 127, 30, 0), + (10472, 2, 385, 8048, 0), + (10473, 1, 265, 82, 0), + (10474, 1, 265, 83, 0), + (10475, 1, 265, 84, 0), + (10476, 1, 265, 85, 0), + (10477, 1, 265, 86, 0), + (10478, 1, 360, 3, 46246), + (10511, 1, 264, 60, 185), + (10511, 2, 264, 60, 10426), + (10512, 1, 264, 120, 185), + (10512, 2, 264, 120, 10426), + (10513, 1, 264, 180, 185), + (10513, 2, 264, 180, 10426), + (10514, 1, 264, 60, 519), + (10514, 2, 264, 60, 10427), + (10515, 1, 264, 180, 519), + (10515, 2, 264, 180, 10427), + (10516, 1, 264, 120, 519), + (10516, 2, 264, 120, 10427), + (10519, 1, 264, 60, 3213), + (10522, 1, 264, 2, 3732), + (10527, 1, 264, 30, 1400), + (10532, 1, 264, 30, 1401), + (10537, 1, 264, 30, 1402), + (10548, 1, 349, 10, 0), + (10548, 2, 200, 10, 0), + (10548, 3, 419, 27672, 20), + (10551, 1, 339, 10, 16825), + (10551, 2, 137, 31, 0), + (10552, 1, 339, 10, 16826), + (10552, 2, 137, 31, 0), + (10553, 1, 339, 10, 16827), + (10553, 2, 137, 31, 0), + (10554, 1, 339, 12, 8265), + (10554, 2, 138, 0, 0), + (10554, 3, 137, 31, 0), + (10554, 4, 311, 0, 0), + (10555, 1, 339, 14, 8265), + (10555, 2, 138, 0, 0), + (10555, 3, 137, 31, 0), + (10555, 4, 311, 0, 0), + (10556, 1, 339, 16, 8265), + (10556, 2, 138, 0, 0), + (10556, 3, 137, 31, 0), + (10556, 4, 311, 0, 0), + (10558, 1, 264, 60, 1120), + (10559, 1, 264, 120, 1120), + (10560, 1, 264, 180, 1120), + (10561, 1, 126, 5, 5), + (10561, 2, 139, 12576, 0), + (10561, 3, 126, 5, 5), + (10561, 4, 139, 12828, 0), + (10562, 1, 126, 10, 10), + (10562, 2, 139, 12576, 0), + (10562, 3, 126, 10, 10), + (10562, 4, 139, 12828, 0), + (10563, 1, 126, 15, 15), + (10563, 2, 139, 12576, 0), + (10563, 3, 126, 15, 15), + (10563, 4, 139, 12828, 0), + (10568, 1, 85, 23614, 50), + (10574, 1, 310, 720000, 0), + (10574, 2, 139, 4670, 0), + (10575, 1, 310, 720000, 0), + (10575, 2, 139, 4674, 0), + (10576, 1, 264, 420, 109), + (10579, 1, 264, 40, 3646), + (10580, 1, 264, 50, 3646), + (10588, 1, 264, 2, 601), + (10589, 1, 264, 4, 601), + (10590, 1, 264, 6, 601), + (10591, 1, 264, 8, 601), + (10592, 1, 264, 10, 601), + (10604, 1, 213, 13, 0), + (10605, 1, 213, 15, 0), + (10606, 1, 213, 17, 0), + (10607, 1, 215, 12, 0), + (10608, 1, 215, 14, 0), + (10609, 1, 215, 16, 0), + (10610, 1, 129, 25, 25), + (10610, 2, 385, 100265, 0), + (10611, 1, 129, 25, 25), + (10611, 2, 385, 100265, 0), + (10612, 1, 129, 25, 25), + (10612, 2, 385, 100265, 0), + (10621, 1, 264, 960, 180), + (10622, 1, 264, 1200, 180), + (10623, 1, 279, 19, 0), + (10624, 1, 279, 24, 0), + (10625, 1, 279, 30, 0), + (10627, 1, 224, 20, 74), + (10627, 2, 173, 1, 0), + (10628, 1, 224, 35, 74), + (10628, 2, 173, 2, 0), + (10629, 1, 224, 50, 74), + (10629, 2, 173, 3, 0), + (10632, 1, 265, 82, 0), + (10633, 1, 265, 83, 0), + (10634, 1, 265, 84, 0), + (10635, 1, 265, 85, 0), + (10636, 1, 265, 86, 0), + (10637, 1, 320, 12, 0), + (10638, 1, 320, 13, 0), + (10639, 1, 320, 14, 0), + (10641, 2, 385, 11064, 0), + (10643, 1, 124, 200, 200), + (10643, 2, 385, 19, 0), + (10643, 3, 144, 0, 0), + (10643, 4, 403, 3, 0), + (10643, 5, 404, 48, 0), + (10643, 6, 385, -21768, 0), + (10644, 1, 124, 250, 250), + (10644, 2, 385, 19, 0), + (10644, 3, 144, 0, 0), + (10644, 4, 403, 3, 0), + (10644, 5, 404, 48, 0), + (10644, 6, 385, -21768, 0), + (10645, 1, 124, 300, 300), + (10645, 2, 385, 19, 0), + (10645, 3, 144, 0, 0), + (10645, 4, 403, 3, 0), + (10645, 5, 404, 48, 0), + (10645, 6, 385, -21768, 0), + (10650, 1, 378, 1, 3), + (10651, 1, 378, 2, 3), + (10652, 1, 378, 3, 3), + (10653, 1, 310, 120000, 0), + (10653, 2, 139, 4502, 0), + (10653, 3, 139, 4509, 0), + (10654, 1, 310, 240000, 0), + (10654, 2, 139, 4502, 0), + (10654, 3, 139, 4509, 0), + (10655, 1, 310, 360000, 0), + (10655, 2, 139, 4502, 0), + (10655, 3, 139, 4509, 0), + (10656, 1, 287, 1, 0), + (10656, 2, 385, 15002, 0), + (10656, 3, 385, 15003, 0), + (10656, 4, 411, 128, 0), + (10657, 1, 264, 300, 276), + (10658, 1, 264, 600, 276), + (10659, 1, 264, 900, 276), + (10660, 1, 220, 175, 26), + (10660, 2, 220, 175, 30), + (10660, 3, 220, 175, 38), + (10661, 1, 220, 200, 26), + (10661, 2, 220, 200, 30), + (10661, 3, 220, 200, 38), + (10662, 1, 220, 225, 26), + (10662, 2, 220, 225, 30), + (10662, 3, 220, 225, 38), + (10663, 1, 220, 165, 21), + (10663, 2, 220, 165, 23), + (10663, 3, 220, 330, 52), + (10663, 4, 220, 165, 28), + (10664, 1, 220, 175, 21), + (10664, 2, 220, 175, 23), + (10664, 3, 220, 350, 52), + (10664, 4, 220, 175, 28), + (10665, 1, 220, 185, 21), + (10665, 2, 220, 185, 23), + (10665, 3, 220, 370, 52), + (10665, 4, 220, 185, 28), + (10666, 1, 264, 1200, 98), + (10667, 1, 264, 1320, 98), + (10668, 1, 264, 1440, 98), + (10671, 1, 310, 720000, 0), + (10671, 2, 139, 4590, 0), + (10672, 1, 310, 840000, 0), + (10672, 2, 139, 4590, 0), + (10673, 1, 310, 960000, 0), + (10673, 2, 139, 4590, 0), + (10674, 1, 310, 1080000, 0), + (10674, 2, 139, 4590, 0), + (10675, 1, 310, 1200000, 0), + (10675, 2, 139, 4590, 0), + (10676, 1, 339, 20, 23623), + (10676, 2, 137, 21, 0), + (10676, 3, 385, -18000, 0), + (10676, 4, 339, 20, 23623), + (10676, 5, 137, 343, 0), + (10676, 6, 385, -18000, 0), + (10677, 1, 339, 20, 23624), + (10677, 2, 137, 21, 0), + (10677, 3, 385, -18000, 0), + (10677, 4, 339, 20, 23624), + (10677, 5, 137, 343, 0), + (10677, 6, 385, -18000, 0), + (10678, 1, 339, 20, 23625), + (10678, 2, 137, 21, 0), + (10678, 3, 385, -18000, 0), + (10678, 4, 339, 20, 23625), + (10678, 5, 137, 343, 0), + (10678, 6, 385, -18000, 0), + (10685, 1, 266, 34, 0), + (10686, 1, 266, 39, 0), + (10687, 1, 266, 45, 0), + (10688, 1, 220, 125, 10), + (10689, 1, 220, 145, 10), + (10690, 1, 220, 165, 10), + (10691, 1, 220, 190, 10), + (10692, 1, 220, 220, 10), + (10705, 1, 85, 23542, 0), + (10706, 1, 85, 23543, 0), + (10707, 1, 85, 23544, 0), + (10714, 1, 264, 90, 873), + (10715, 1, 264, 180, 873), + (10717, 1, 264, 360, 184), + (10718, 1, 264, 450, 184), + (10719, 1, 264, 120, 872), + (10720, 1, 264, 240, 872), + (10721, 1, 264, 360, 872), + (10722, 1, 264, 120, 778), + (10723, 1, 264, 240, 778), + (10724, 1, 264, 360, 778), + (10725, 1, 264, 480, 778), + (10726, 1, 264, 600, 778), + (10727, 1, 264, 120, 2235), + (10728, 1, 264, 240, 2235), + (10730, 1, 264, 10, 870), + (10731, 1, 264, 20, 870), + (10733, 1, 264, 1, 219), + (10734, 1, 264, 2, 219), + (10735, 1, 264, 3, 219), + (10743, 1, 220, 135, 7), + (10744, 1, 220, 170, 7), + (10745, 1, 220, 205, 7), + (10748, 1, 59, -35, 0), + (10749, 1, 59, -42, 0), + (10750, 1, 264, 3024, 286), + (10750, 2, 264, 3024, 10753), + (10750, 3, 264, 3024, 9101), + (10751, 1, 264, 3456, 286), + (10751, 2, 264, 3456, 10753), + (10751, 3, 264, 3456, 9101), + (10755, 1, 59, -50, 0), + (10763, 1, 292, 50, 0), + (10764, 1, 292, 60, 0), + (10766, 1, 330, 70, 7), + (10767, 1, 330, 75, 7), + (10768, 1, 330, 80, 7), + (10769, 1, 310, 1440000, 0), + (10769, 2, 139, 4519, 0), + (10770, 1, 310, 1680000, 0), + (10770, 2, 139, 4519, 0), + (10778, 1, 274, 38, 0), + (10779, 1, 274, 40, 0), + (10780, 1, 274, 42, 0), + (10781, 1, 1, 186, 0), + (10782, 1, 1, 217, 0), + (10783, 1, 1, 248, 0), + (10784, 1, 1, 279, 0), + (10785, 1, 1, 310, 0), + (10788, 1, 363, 4, 0), + (10792, 1, 287, 1, 0), + (10792, 2, 385, 5240, 0), + (10792, 3, 385, 5340, 0), + (10792, 4, 385, 5440, 0), + (10792, 5, 385, 5540, 0), + (10792, 6, 385, 5640, 0), + (10793, 1, 287, 2, 0), + (10793, 2, 385, 5240, 0), + (10793, 3, 385, 5340, 0), + (10793, 4, 385, 5440, 0), + (10793, 5, 385, 5540, 0), + (10793, 6, 385, 5640, 0), + (10794, 1, 287, 3, 0), + (10794, 2, 385, 5240, 0), + (10794, 3, 385, 5340, 0), + (10794, 4, 385, 5440, 0), + (10794, 5, 385, 5540, 0), + (10794, 6, 385, 5640, 0), + (10795, 1, 287, 4, 0), + (10795, 2, 385, 5240, 0), + (10795, 3, 385, 5340, 0), + (10795, 4, 385, 5440, 0), + (10795, 5, 385, 5540, 0), + (10795, 6, 385, 5640, 0), + (10796, 1, 287, 5, 0), + (10796, 2, 385, 5240, 0), + (10796, 3, 385, 5340, 0), + (10796, 4, 385, 5440, 0), + (10796, 5, 385, 5540, 0), + (10796, 6, 385, 5640, 0), + (10800, 1, 264, 60, 462), + (10801, 1, 264, 120, 462), + (10802, 1, 264, 180, 462), + (10803, 1, 293, 25, 0), + (10804, 1, 293, 50, 0), + (10805, 1, 293, 75, 0), + (10815, 1, 185, 2, 1), + (10815, 2, 185, 2, 3), + (10816, 1, 185, 4, 1), + (10816, 2, 185, 4, 3), + (10817, 1, 185, 6, 1), + (10817, 2, 185, 6, 3), + (10818, 1, 185, 1, 36), + (10819, 1, 185, 3, 36), + (10820, 1, 185, 5, 36), + (10821, 1, 185, 2, 0), + (10821, 2, 185, 2, 2), + (10822, 1, 185, 4, 0), + (10822, 2, 185, 4, 2), + (10823, 1, 185, 6, 0), + (10823, 2, 185, 6, 2), + (10850, 1, 288, 100, 8), + (10851, 1, 288, 100, 8), + (10852, 1, 288, 100, 8), + (10853, 1, 292, 5, 0), + (10854, 1, 292, 10, 0), + (10855, 1, 292, 15, 0), + (10856, 1, 292, 20, 0), + (10857, 1, 292, 25, 0), + (10858, 1, 292, 30, 0), + (10859, 1, 292, 35, 0), + (10860, 1, 292, 40, 0), + (10861, 1, 292, 45, 0), + (10862, 1, 292, 46, 0), + (10863, 1, 292, 47, 0), + (10864, 1, 292, 48, 0), + (10865, 1, 216, 500, 8), + (10866, 1, 216, 550, 8), + (10867, 1, 216, 650, 8), + (10903, 1, 281, 25, 0), + (10904, 1, 281, 50, 0), + (10905, 1, 281, 75, 0), + (10906, 1, 59, -48, 0), + (10907, 1, 59, -51, 0), + (10908, 1, 59, -54, 0), + (10909, 1, 264, 60, 7007), + (10910, 1, 264, 120, 7007), + (10911, 1, 264, 180, 7007), + (10915, 1, 339, 10, 16876), + (10915, 2, 138, 0, 0), + (10915, 3, 142, 70, 0), + (10915, 4, 411, 32, 0), + (10915, 5, 348, 1, 0), + (10915, 6, 141, 1, 0), + (10916, 1, 339, 10, 16877), + (10916, 2, 138, 0, 0), + (10916, 3, 142, 70, 0), + (10916, 4, 411, 32, 0), + (10916, 5, 348, 1, 0), + (10916, 6, 141, 1, 0), + (10917, 1, 339, 10, 16878), + (10917, 2, 138, 0, 0), + (10917, 3, 142, 70, 0), + (10917, 4, 411, 32, 0), + (10917, 5, 348, 1, 0), + (10917, 6, 141, 1, 0), + (10950, 1, 287, 1, 0), + (10950, 2, 403, 4, 0), + (10950, 3, 404, 38, 0), + (10950, 4, 348, 1, 0), + (10950, 5, 137, 11, 0), + (10950, 6, 140, 2, 0), + (10951, 1, 264, 60, 447), + (10952, 1, 264, 120, 447), + (10953, 1, 264, 180, 447), + (10954, 1, 264, 60, 662), + (10955, 1, 264, 120, 662), + (10956, 1, 264, 180, 662), + (11000, 1, 227, 1, 73), + (11001, 1, 227, 2, 73), + (11002, 1, 227, 3, 73), + (11003, 1, 287, 1, 0), + (11003, 2, 137, 158, 0), + (11003, 3, 411, 2, 0), + (11004, 1, 287, 1, 0), + (11004, 2, 139, 8000, 0), + (11005, 1, 287, 2, 0), + (11005, 2, 139, 8000, 0), + (11006, 1, 287, 3, 0), + (11006, 2, 139, 8000, 0), + (11011, 1, 264, 480, 3710), + (11012, 1, 264, 600, 3710), + (11013, 1, 264, 720, 3710), + (11014, 1, 264, 10, 3899), + (11014, 2, 264, 10, 611), + (11014, 3, 264, 10, 960), + (11014, 4, 264, 10, 1252), + (11015, 1, 264, 20, 3899), + (11015, 2, 264, 20, 611), + (11015, 3, 264, 20, 960), + (11015, 4, 264, 20, 1252), + (11016, 1, 264, 30, 3899), + (11016, 2, 264, 30, 611), + (11016, 3, 264, 30, 960), + (11016, 4, 264, 30, 1252), + (11020, 1, 264, 40, 3899), + (11020, 2, 264, 40, 611), + (11020, 3, 264, 40, 960), + (11020, 4, 264, 40, 1252), + (11050, 1, 264, 360, 452), + (11050, 2, 264, 360, 6106), + (11050, 3, 264, 360, 493), + (11051, 1, 264, 720, 452), + (11051, 2, 264, 720, 6106), + (11051, 3, 264, 720, 493), + (11052, 1, 264, 1080, 452), + (11052, 2, 264, 1080, 6106), + (11052, 3, 264, 1080, 493), + (11053, 1, 264, 1260, 500), + (11054, 1, 264, 1440, 500), + (11059, 1, 264, 1440, 452), + (11059, 2, 264, 1440, 6106), + (11059, 3, 264, 1440, 493), + (11060, 1, 264, 1800, 452), + (11060, 2, 264, 1800, 6106), + (11060, 3, 264, 1800, 493), + (11061, 1, 114, -63, 0), + (11062, 1, 114, -64, 0), + (11063, 1, 114, -65, 0), + (11074, 1, 247, 100, 39), + (11075, 1, 247, 150, 39), + (11076, 1, 247, 200, 39), + (11077, 1, 264, 10, 986), + (11078, 1, 264, 10, 988), + (11079, 1, 264, 10, 987), + (11082, 1, 185, 40, 51), + (11083, 1, 185, 50, 51), + (11084, 1, 185, 60, 51), + (11085, 1, 247, 20, 2), + (11085, 2, 247, 20, 3), + (11085, 3, 247, 20, 77), + (11085, 4, 220, 25, 77), + (11085, 5, 220, 25, 2), + (11085, 6, 220, 25, 3), + (11086, 1, 247, 40, 2), + (11086, 2, 247, 40, 3), + (11086, 3, 247, 40, 77), + (11086, 4, 220, 35, 77), + (11086, 5, 220, 35, 2), + (11086, 6, 220, 35, 3), + (11087, 1, 247, 60, 2), + (11087, 2, 247, 60, 3), + (11087, 3, 247, 60, 77), + (11087, 4, 220, 50, 77), + (11087, 5, 220, 50, 2), + (11087, 6, 220, 50, 3), + (11088, 1, 264, 180, 505), + (11089, 1, 264, 360, 505), + (11090, 1, 264, 540, 505), + (11091, 1, 264, 720, 505), + (12396, 1, 172, 50, 0), + (12397, 1, 172, 51, 0), + (12398, 1, 172, 52, 0), + (12399, 1, 172, 53, 0), + (12400, 1, 172, 54, 0), + (12401, 1, 259, 56, 0), + (12402, 1, 259, 57, 0), + (12403, 1, 259, 58, 0), + (12404, 1, 259, 59, 0), + (12405, 1, 259, 60, 0), + (12406, 1, 69, 1100, 0), + (12407, 1, 69, 1200, 0), + (12408, 1, 69, 1300, 0), + (12409, 1, 69, 1400, 0), + (12410, 1, 69, 1500, 0), + (12411, 1, 1, 300, 0), + (12412, 1, 1, 350, 0), + (12413, 1, 1, 400, 0), + (12414, 1, 1, 450, 0), + (12415, 1, 1, 500, 0), + (12416, 1, 399, 3, 0), + (12416, 2, 141, 1, 0), + (12416, 3, 138, 0, 0), + (12416, 4, 142, 255, 0), + (12416, 5, 391, 0, 0), + (12416, 6, 311, 0, 0), + (12416, 7, 137, -152, 0), + (12416, 8, 411, 100350, 0), + (12416, 9, 137, -39, 0), + (12417, 1, 399, 6, 0), + (12417, 2, 141, 1, 0), + (12417, 3, 138, 0, 0), + (12417, 4, 142, 255, 0), + (12417, 5, 391, 0, 0), + (12417, 6, 311, 0, 0), + (12417, 7, 137, -152, 0), + (12417, 8, 411, 100350, 0), + (12417, 9, 137, -39, 0), + (12418, 1, 399, 9, 0), + (12418, 2, 141, 1, 0), + (12418, 3, 138, 0, 0), + (12418, 4, 142, 255, 0), + (12418, 5, 391, 0, 0), + (12418, 6, 311, 0, 0), + (12418, 7, 137, -152, 0), + (12418, 8, 411, 100350, 0), + (12418, 9, 137, -39, 0), + (12419, 1, 292, 15, 0), + (12420, 1, 292, 30, 0), + (12421, 1, 292, 45, 0), + (12423, 1, 273, 21, 0), + (12424, 1, 273, 24, 0), + (12425, 1, 273, 27, 0), + (12426, 1, 273, 21, 0), + (12427, 1, 273, 24, 0), + (12428, 1, 273, 27, 0), + (12432, 1, 294, 17, 100), + (12433, 1, 294, 19, 100), + (12434, 1, 294, 21, 100), + (12435, 1, 294, 23, 100), + (12436, 1, 294, 25, 100), + (12437, 1, 294, 27, 100), + (12438, 1, 200, 70, 0), + (12439, 1, 341, 210, 0), + (12440, 1, 341, 220, 0), + (12441, 1, 341, 230, 0), + (12442, 1, 341, 240, 0), + (12443, 1, 341, 250, 0), + (12444, 1, 318, 21, 0), + (12445, 1, 318, 22, 0), + (12446, 1, 318, 23, 0), + (12447, 1, 318, 24, 0), + (12448, 1, 318, 25, 0), + (12449, 1, 125, 31, 31), + (12449, 2, 137, 0, 0), + (12449, 3, 141, 1, 0), + (12449, 4, 139, -6233, 0), + (12449, 5, 139, -6265, 0), + (12449, 6, 125, 31, 31), + (12449, 7, 137, 147, 0), + (12449, 8, 141, 1, 0), + (12450, 1, 125, 34, 34), + (12450, 2, 137, 0, 0), + (12450, 3, 141, 1, 0), + (12450, 4, 139, -6233, 0), + (12450, 5, 139, -6265, 0), + (12450, 6, 125, 34, 34), + (12450, 7, 137, 147, 0), + (12450, 8, 141, 1, 0), + (12451, 1, 125, 37, 37), + (12451, 2, 137, 0, 0), + (12451, 3, 141, 1, 0), + (12451, 4, 139, -6233, 0), + (12451, 5, 139, -6265, 0), + (12451, 6, 125, 37, 37), + (12451, 7, 137, 147, 0), + (12451, 8, 141, 1, 0), + (12452, 1, 274, 38, 0), + (12453, 1, 274, 39, 0), + (12454, 1, 274, 40, 0), + (12455, 1, 15, 19, 0), + (12456, 1, 15, 20, 0), + (12457, 1, 15, 21, 0), + (12458, 1, 15, 22, 0), + (12459, 1, 15, 23, 0), + (12463, 1, 320, 9, 0), + (12464, 1, 320, 10, 0), + (12465, 1, 320, 11, 0), + (12466, 1, 320, 9, 0), + (12467, 1, 320, 10, 0), + (12468, 1, 320, 11, 0), + (12469, 1, 320, 9, 0), + (12470, 1, 320, 10, 0), + (12471, 1, 320, 11, 0), + (12472, 1, 320, 6, 0), + (12473, 1, 320, 7, 0), + (12474, 1, 320, 8, 0), + (12475, 1, 264, 180, 7003), + (12476, 1, 264, 360, 7003), + (12477, 1, 264, 540, 7003), + (12478, 1, 264, 60, 3705), + (12479, 1, 264, 120, 3705), + (12480, 1, 264, 180, 3705), + (12481, 1, 247, 40, 76), + (12482, 1, 247, 45, 76), + (12483, 1, 247, 65, 76), + (12484, 1, 247, 70, 76), + (12485, 1, 247, 30, 76), + (12486, 1, 247, 35, 76), + (12487, 1, 247, 25, 76), + (12488, 1, 247, 30, 76), + (12492, 1, 69, 1600, 0), + (12493, 1, 69, 1700, 0), + (12494, 1, 69, 1800, 0), + (12495, 1, 69, 1900, 0), + (12496, 1, 69, 2000, 0), + (12497, 1, 125, 40, 40), + (12497, 2, 137, 0, 0), + (12497, 3, 141, 1, 0), + (12497, 4, 139, -6233, 0), + (12497, 5, 139, -6265, 0), + (12497, 6, 125, 40, 40), + (12497, 7, 137, 147, 0), + (12497, 8, 141, 1, 0), + (12498, 1, 125, 43, 43), + (12498, 2, 137, 0, 0), + (12498, 3, 141, 1, 0), + (12498, 4, 139, -6233, 0), + (12498, 5, 139, -6265, 0), + (12498, 6, 125, 43, 43), + (12498, 7, 137, 147, 0), + (12498, 8, 141, 1, 0), + (12499, 1, 125, 46, 46), + (12499, 2, 137, 0, 0), + (12499, 3, 141, 1, 0), + (12499, 4, 139, -6233, 0), + (12499, 5, 139, -6265, 0), + (12499, 6, 125, 46, 46), + (12499, 7, 137, 147, 0), + (12499, 8, 141, 1, 0), + (12500, 1, 310, 1000, 0), + (12500, 2, 385, 4004, 0), + (12500, 3, 385, 11202, 0), + (12500, 4, 385, 11302, 0), + (12500, 5, 385, 11402, 0), + (12500, 6, 385, 11502, 0), + (12500, 7, 385, 11602, 0), + (12501, 1, 310, 2000, 0), + (12501, 2, 385, 4004, 0), + (12501, 3, 385, 11202, 0), + (12501, 4, 385, 11302, 0), + (12501, 5, 385, 11402, 0), + (12501, 6, 385, 11502, 0), + (12501, 7, 385, 11602, 0), + (12502, 1, 310, 3000, 0), + (12502, 2, 385, 4004, 0), + (12502, 3, 385, 11202, 0), + (12502, 4, 385, 11302, 0), + (12502, 5, 385, 11402, 0), + (12502, 6, 385, 11502, 0), + (12502, 7, 385, 11602, 0), + (12505, 1, 310, 4000, 0), + (12505, 2, 385, 4004, 0), + (12505, 3, 385, 11202, 0), + (12505, 4, 385, 11302, 0), + (12505, 5, 385, 11402, 0), + (12505, 6, 385, 11502, 0), + (12505, 7, 385, 11602, 0), + (12506, 1, 310, 5000, 0), + (12506, 2, 385, 4004, 0), + (12506, 3, 385, 11202, 0), + (12506, 4, 385, 11302, 0), + (12506, 5, 385, 11402, 0), + (12506, 6, 385, 11502, 0), + (12506, 7, 385, 11602, 0), + (12507, 1, 301, 120, 0), + (12508, 1, 247, 50, 76), + (12509, 1, 247, 55, 76), + (12510, 1, 247, 60, 76), + (12511, 1, 247, 75, 76), + (12512, 1, 247, 80, 76), + (12513, 1, 247, 85, 76), + (12514, 1, 247, 40, 76), + (12515, 1, 247, 45, 76), + (12516, 1, 247, 50, 76), + (12517, 1, 247, 35, 76), + (12518, 1, 247, 40, 76), + (12519, 1, 247, 45, 76), + (12523, 1, 294, 0, 200), + (12526, 1, 294, 0, 190), + (12527, 1, 294, 0, 195), + (12528, 1, 294, 0, 200), + (12529, 1, 294, 0, 165), + (12530, 1, 294, 0, 175), + (12531, 1, 294, 0, 185), + (12532, 1, 341, 260, 0), + (12533, 1, 341, 270, 0), + (12534, 1, 341, 280, 0), + (12535, 1, 341, 290, 0), + (12536, 1, 341, 300, 0), + (12537, 1, 318, 26, 0), + (12538, 1, 318, 27, 0), + (12539, 1, 318, 28, 0), + (12540, 1, 318, 29, 0), + (12541, 1, 318, 30, 0), + (12548, 1, 278, 900, 79230), + (12548, 2, 440, 87, 100), + (12549, 1, 278, 900, 86260), + (12549, 2, 440, 88, 100), + (12550, 1, 278, 900, 88260), + (12550, 2, 440, 89, 100), + (12551, 1, 278, 900, 91510), + (12551, 2, 440, 90, 100), + (12552, 1, 278, 900, 96305), + (12552, 2, 440, 91, 100), + (12553, 1, 294, 29, 102), + (12554, 1, 294, 31, 104), + (12555, 1, 294, 33, 106), + (12556, 1, 294, 23, 100), + (12557, 1, 294, 25, 100), + (12558, 1, 294, 27, 100), + (12559, 1, 190, 300, 0), + (12560, 1, 190, 350, 0), + (12561, 1, 190, 400, 0), + (12562, 1, 190, 450, 0), + (12563, 1, 190, 500, 0), + (12564, 1, 319, 28, 0), + (12565, 1, 319, 29, 0), + (12566, 1, 319, 30, 0), + (12567, 1, 274, 41, 0), + (12568, 1, 274, 42, 0), + (12569, 1, 274, 43, 0), + (12570, 1, 15, 24, 0), + (12571, 1, 15, 25, 0), + (12572, 1, 15, 26, 0), + (12573, 1, 15, 27, 0), + (12574, 1, 15, 28, 0), + (12575, 1, 292, 60, 0), + (12576, 1, 231, 17, 0), + (12577, 1, 231, 19, 0), + (12578, 1, 231, 21, 0), + (12579, 1, 85, 23569, 0), + (12580, 1, 85, 23570, 0), + (12581, 1, 85, 23571, 0), + (12582, 1, 264, 10, 9400), + (12583, 1, 264, 20, 9400), + (12584, 1, 264, 30, 9400), + (12587, 1, 264, 480, 9403), + (12588, 1, 264, 600, 9403), + (12589, 1, 264, 720, 9403), + (12591, 1, 247, 90, 76), + (12594, 1, 247, 55, 76), + (12597, 1, 247, 50, 76), + (12598, 1, 247, 55, 76), + (12600, 1, 310, 60000, 0), + (12600, 2, 139, 6197, 0), + (12600, 3, 411, 512, 0), + (12603, 1, 287, 1, 0), + (12603, 2, 139, 6197, 0), + (12603, 3, 411, 512, 0), + (12606, 1, 271, 5, 0), + (12607, 1, 310, 12000, 0), + (12607, 2, 385, 13007, 0), + (12607, 3, 385, 12105, 0), + (12607, 4, 385, 12205, 0), + (12607, 5, 310, 36000, 0), + (12607, 6, 385, 12305, 0), + (12607, 7, 385, 12405, 0), + (12607, 8, 385, 12505, 0), + (12607, 9, 411, 512, 0), + (12610, 1, 279, 19, 0), + (12612, 1, 439, 0, 124480), + (12612, 2, 345, 84, 25), + (12613, 1, 439, 0, 132440), + (12613, 2, 345, 86, 25), + (12615, 1, 310, 120000, 0), + (12615, 2, 139, 4695, 0), + (12615, 3, 411, 512, 0), + (12616, 1, 310, 240000, 0), + (12616, 2, 139, 4695, 0), + (12616, 3, 411, 512, 0), + (12617, 1, 310, 360000, 0), + (12617, 2, 139, 4695, 0), + (12617, 3, 411, 512, 0), + (12636, 1, 426, 1, 0), + (12637, 1, 426, 2, 0), + (12639, 1, 264, 240, 519), + (12639, 2, 264, 240, 10427), + (12642, 1, 264, 240, 185), + (12642, 2, 264, 240, 10426), + (12645, 1, 287, 1, 0), + (12645, 2, 385, 8190, 0), + (12645, 3, 287, 1, 0), + (12645, 4, 385, 21818, 0), + (12645, 5, 411, 64, 0), + (12646, 1, 287, 1, 0), + (12646, 2, 385, 3277, 0), + (12646, 3, 287, 1, 0), + (12646, 4, 385, 21816, 0), + (12652, 1, 399, 1, 0), + (12652, 2, 138, 1, 0), + (12652, 3, 137, 0, 0), + (12652, 4, 348, 10, 0), + (12652, 5, 311, 0, 0), + (12652, 6, 141, 1, 0), + (12652, 7, 134, 254, 0), + (12652, 8, 137, -39, 0), + (12653, 1, 399, 2, 0), + (12653, 2, 138, 1, 0), + (12653, 3, 137, 0, 0), + (12653, 4, 348, 10, 0), + (12653, 5, 311, 0, 0), + (12653, 6, 141, 1, 0), + (12653, 7, 134, 254, 0), + (12653, 8, 137, -39, 0), + (12654, 1, 399, 3, 0), + (12654, 2, 138, 1, 0), + (12654, 3, 137, 0, 0), + (12654, 4, 348, 10, 0), + (12654, 5, 311, 0, 0), + (12654, 6, 141, 1, 0), + (12654, 7, 134, 254, 0), + (12654, 8, 137, -39, 0), + (12664, 1, 264, 2, 3728), + (12667, 1, 220, 250, 26), + (12667, 2, 220, 250, 30), + (12667, 3, 220, 250, 38), + (12668, 1, 220, 275, 26), + (12668, 2, 220, 275, 30), + (12668, 3, 220, 275, 38), + (12669, 1, 220, 300, 26), + (12669, 2, 220, 300, 30), + (12669, 3, 220, 300, 38), + (12670, 1, 220, 200, 21), + (12670, 2, 220, 200, 23), + (12670, 3, 220, 400, 52), + (12670, 4, 220, 200, 28), + (12671, 1, 220, 215, 21), + (12671, 2, 220, 215, 23), + (12671, 3, 220, 450, 52), + (12671, 4, 220, 215, 28), + (12672, 1, 220, 235, 21), + (12672, 2, 220, 235, 23), + (12672, 3, 220, 510, 52), + (12672, 4, 220, 235, 28), + (12673, 1, 264, 960, 420), + (12674, 1, 227, 270, 32), + (12675, 1, 227, 300, 32), + (12676, 1, 227, 330, 32), + (12677, 1, 275, 92, 0), + (12678, 1, 287, 2, 0), + (12678, 2, 385, 15002, 0), + (12678, 3, 385, 15003, 0), + (12678, 4, 411, 128, 0), + (12679, 1, 264, 1200, 276), + (12680, 1, 264, 1500, 276), + (12681, 1, 264, 1800, 276), + (12685, 1, 292, 49, 0), + (12686, 1, 292, 50, 0), + (12687, 1, 292, 51, 0), + (12688, 1, 287, 1, 0), + (12688, 2, 385, 8473, 0), + (12688, 3, 385, 8318, 0), + (12688, 4, 385, 8418, 0), + (12688, 5, 385, 8518, 0), + (12688, 6, 411, 128, 0), + (12689, 1, 287, 2, 0), + (12689, 2, 139, 4691, 0), + (12689, 3, 411, 128, 0), + (12690, 1, 287, 2, 0), + (12690, 2, 385, 8111, 0), + (12690, 3, 385, 15008, 0), + (12690, 4, 385, 8411, 0), + (12690, 5, 385, 8511, 0), + (12690, 6, 411, 128, 0), + (12691, 1, 287, 1, 0), + (12691, 2, 385, 15007, 0), + (12691, 3, 411, 128, 0), + (12691, 4, 385, 8316, 0), + (12692, 1, 220, 255, 21), + (12692, 2, 220, 255, 23), + (12692, 3, 220, 570, 52), + (12692, 4, 220, 255, 28), + (12693, 1, 220, 275, 21), + (12693, 2, 220, 275, 23), + (12693, 3, 220, 630, 52), + (12693, 4, 220, 275, 28), + (12694, 1, 189, 16, 0), + (12695, 1, 189, 17, 0), + (12696, 1, 189, 18, 0), + (12697, 1, 330, 140, 0), + (12697, 2, 330, 140, 1), + (12697, 3, 330, 140, 2), + (12697, 4, 330, 140, 3), + (12697, 5, 330, 140, 28), + (12697, 6, 330, 140, 36), + (12697, 7, 330, 140, 77), + (12698, 1, 330, 145, 0), + (12698, 2, 330, 145, 1), + (12698, 3, 330, 145, 2), + (12698, 4, 330, 145, 3), + (12698, 5, 330, 145, 28), + (12698, 6, 330, 145, 36), + (12698, 7, 330, 145, 77), + (12699, 1, 330, 150, 0), + (12699, 2, 330, 150, 1), + (12699, 3, 330, 150, 2), + (12699, 4, 330, 150, 3), + (12699, 5, 330, 150, 28), + (12699, 6, 330, 150, 36), + (12699, 7, 330, 150, 77), + (12703, 1, 283, 240, 0), + (12704, 1, 283, 260, 0), + (12705, 1, 283, 280, 0), + (12706, 1, 220, 60, 28), + (12706, 2, 220, 60, 0), + (12706, 3, 427, 23598, 3), + (12706, 4, 428, 28, 0), + (12706, 5, 428, 0, 0), + (12707, 1, 220, 85, 28), + (12707, 2, 220, 85, 0), + (12707, 3, 427, 23598, 5), + (12707, 4, 428, 28, 0), + (12707, 5, 428, 0, 0), + (12708, 1, 220, 115, 28), + (12708, 2, 220, 115, 0), + (12708, 3, 427, 23598, 7), + (12708, 4, 428, 28, 0), + (12708, 5, 428, 0, 0), + (12709, 1, 287, 1, 0), + (12709, 2, 139, 4516, 0), + (12709, 3, 411, 256, 0), + (12710, 1, 310, 360000, 0), + (12710, 2, 139, 4516, 0), + (12710, 3, 411, 256, 0), + (12711, 1, 310, 720000, 0), + (12711, 2, 139, 4516, 0), + (12711, 3, 411, 256, 0), + (12712, 1, 310, 1080000, 0), + (12712, 2, 139, 4516, 0), + (12712, 3, 411, 256, 0), + (12713, 1, 264, 2, 8202), + (12714, 1, 264, 4, 8202), + (12715, 1, 264, 6, 8202), + (12716, 1, 264, 30, 3702), + (12717, 1, 264, 60, 3702), + (12718, 1, 264, 90, 3702), + (12719, 1, 128, 10, 0), + (12719, 2, 385, 12769, 0), + (12719, 3, 411, 256, 0), + (12720, 1, 287, 1, 0), + (12720, 2, 139, 12519, 0), + (12720, 3, 411, 256, 0), + (12721, 1, 264, 60, 3506), + (12722, 1, 264, 120, 3506), + (12723, 1, 264, 180, 3506), + (12727, 1, 264, 960, 359), + (12728, 1, 264, 1200, 359), + (12729, 1, 264, 1440, 359), + (12733, 1, 287, 2, 0), + (12733, 2, 137, 22, 0), + (12733, 3, 411, 256, 0), + (12734, 1, 375, 145, 0), + (12735, 1, 375, 150, 0), + (12736, 1, 375, 155, 0), + (12737, 1, 129, 5, 0), + (12737, 2, 385, 12768, 0), + (12737, 3, 411, 256, 0), + (12738, 1, 129, 10, 0), + (12738, 2, 385, 12768, 0), + (12738, 3, 411, 256, 0), + (12739, 1, 129, 15, 0), + (12739, 2, 385, 12768, 0), + (12739, 3, 411, 256, 0), + (12757, 1, 264, 6000, 68), + (12758, 1, 264, 6600, 68), + (12759, 1, 264, 7200, 68), + (12767, 1, 229, 50, 0), + (12768, 1, 229, 55, 0), + (12769, 1, 229, 60, 0), + (12773, 1, 264, 60, 1580), + (12774, 1, 264, 120, 1580), + (12775, 1, 264, 180, 1580), + (12776, 1, 264, 240, 1580), + (12777, 1, 264, 300, 1580), + (12779, 1, 264, 0, 826), + (12780, 1, 264, 1, 826), + (12781, 1, 264, 1, 826), + (12782, 1, 129, 10, 0), + (12782, 2, 385, 16106, 0), + (12783, 1, 129, 20, 0), + (12783, 2, 385, 16106, 0), + (12784, 1, 129, 30, 0), + (12784, 2, 385, 16106, 0), + (12792, 1, 397, 1000, 0), + (12793, 1, 397, 1200, 0), + (12794, 1, 397, 1250, 0), + (12795, 1, 213, 19, 0), + (12796, 1, 213, 21, 0), + (12797, 1, 213, 23, 0), + (12798, 1, 218, 21, 0), + (12799, 1, 218, 22, 0), + (12800, 1, 218, 23, 0), + (12801, 1, 215, 18, 0), + (12802, 1, 215, 20, 0), + (12803, 1, 215, 22, 0), + (12813, 1, 320, 2, 0), + (12814, 1, 320, 4, 0), + (12815, 1, 320, 6, 0), + (12816, 1, 128, 1, 0), + (12816, 2, 385, 2223, 0), + (12816, 3, 385, 2323, 0), + (12816, 4, 385, 2240, 0), + (12816, 5, 385, 2340, 0), + (12816, 6, 385, 2440, 0), + (12816, 7, 385, 2540, 0), + (12816, 8, 398, 6000, 0), + (12816, 9, 385, 11872, 0), + (12816, 10, 385, 14154, 0), + (12816, 11, 385, 18166, 0), + (12816, 12, 385, 27225, 0), + (12816, 13, 385, 2419, 0), + (12816, 14, 385, 2427, 0), + (12816, 15, 385, 30374, 0), + (12816, 16, 385, 2527, 0), + (12816, 17, 385, 36431, 0), + (12819, 1, 310, 23400, 0), + (12819, 2, 139, 4671, 0), + (12819, 3, 411, 32768, 0), + (12820, 1, 310, 46800, 0), + (12820, 2, 139, 4671, 0), + (12820, 3, 411, 32768, 0), + (12822, 1, 310, 153000, 0), + (12822, 2, 139, 8233, 0), + (12822, 3, 310, 120000, 0), + (12822, 4, 385, 2439, 0), + (12822, 5, 385, 2539, 0), + (12822, 6, 411, 32768, 0), + (12831, 1, 127, 17, 0), + (12831, 2, 385, 3291, 0), + (12831, 3, 385, 3817, 0), + (12831, 4, 411, 32768, 0), + (12834, 1, 264, 180, 128), + (12835, 1, 264, 225, 128), + (12840, 1, 264, 24, 3817), + (12841, 1, 264, 30, 3817), + (12843, 1, 225, 42, 0), + (12846, 1, 288, 20, 28), + (12846, 2, 288, 20, 0), + (12849, 1, 127, 14, 0), + (12849, 2, 385, 16794, 0), + (12849, 3, 411, 32768, 0), + (12860, 1, 294, 21, 102), + (12863, 1, 127, 15, 15), + (12863, 2, 137, 0, 0), + (12863, 3, 138, 0, 0), + (12863, 4, 141, 1, 0), + (12863, 5, 143, 3000, 0), + (12863, 6, 127, 15, 15), + (12863, 7, 385, 16555, 0), + (12863, 8, 385, 16655, 0), + (12871, 1, 264, 2160, 452), + (12871, 2, 264, 2160, 6106), + (12871, 3, 264, 2160, 493), + (12872, 1, 264, 2520, 452), + (12872, 2, 264, 2520, 6106), + (12872, 3, 264, 2520, 493), + (12874, 1, 264, 2572, 451), + (12876, 1, 264, 900, 7003), + (12877, 1, 264, 1260, 7003), + (12878, 1, 264, 1620, 7003), + (12881, 1, 264, 45, 172), + (12886, 1, 10, 0, 0), + (12887, 1, 10, 0, 0), + (12888, 1, 10, 0, 0), + (12889, 1, 10, 0, 0), + (12890, 1, 10, 0, 0), + (12894, 1, 264, 30, 1122), + (12899, 1, 264, 3456, 57), + (12899, 2, 264, 3456, 616), + (12900, 1, 264, 4320, 57), + (12900, 2, 264, 4320, 616), + (12902, 1, 264, 30, 1380), + (12903, 1, 264, 60, 1380), + (12907, 1, 264, 30, 1381), + (12908, 1, 264, 60, 1381), + (12912, 1, 264, 30, 1382), + (12913, 1, 264, 60, 1382), + (12920, 1, 130, 10, 10), + (12920, 2, 139, 2569, 0), + (12920, 3, 130, -10, -10), + (12920, 4, 139, 2568, 0), + (12929, 1, 287, 4, 0), + (12929, 2, 137, 3, 0), + (12929, 3, 137, 99, 0), + (12929, 4, 138, 0, 0), + (12929, 5, 244, 20, 0), + (12930, 1, 287, 5, 0), + (12930, 2, 137, 3, 0), + (12930, 3, 137, 99, 0), + (12930, 4, 138, 0, 0), + (12930, 5, 244, 15, 0), + (12945, 1, 280, 60, 0), + (12946, 1, 280, 61, 0), + (12947, 1, 280, 62, 0), + (12948, 1, 280, 63, 0), + (12949, 1, 280, 64, 0), + (12950, 1, 218, 21, 0), + (12951, 1, 218, 22, 0), + (12952, 1, 218, 23, 0), + (12953, 1, 218, 24, 0), + (12954, 1, 218, 25, 0), + (12966, 1, 131, 25, 25), + (12966, 2, 348, 10, 0), + (12966, 3, 137, -32, 0), + (12967, 1, 131, 50, 50), + (12967, 2, 348, 10, 0), + (12967, 3, 137, -32, 0), + (12968, 1, 264, 3, 1041), + (12969, 1, 264, 6, 1041), + (12970, 1, 264, 9, 1041), + (12977, 1, 287, 2, 0), + (12977, 2, 385, 16188, 0), + (12978, 1, 287, 4, 0), + (12978, 2, 385, 16188, 0), + (12979, 1, 287, 6, 0), + (12979, 2, 385, 16188, 0), + (12980, 1, 287, 8, 0), + (12980, 2, 385, 16188, 0), + (12981, 1, 287, 10, 0), + (12981, 2, 385, 16188, 0), + (12988, 1, 287, 3, 0), + (12988, 2, 140, 3, 0), + (12988, 3, 348, 1, 0), + (12988, 4, 138, 0, 0), + (12988, 5, 137, 0, 0), + (13001, 1, 264, 60, 9504), + (13002, 1, 264, 120, 9504), + (13003, 1, 264, 180, 9504), + (13005, 1, 264, 70, 171), + (13006, 1, 264, 80, 171), + (13007, 1, 264, 90, 171), + (13010, 1, 264, 10, 47), + (13011, 1, 264, 20, 47), + (13012, 1, 264, 30, 47), + (13013, 1, 264, 120, 446), + (13014, 1, 264, 240, 446), + (13015, 1, 264, 360, 446), + (13017, 1, 375, 15, 0), + (13018, 1, 375, 25, 0), + (13019, 1, 375, 35, 0), + (13021, 1, 247, 80, 2), + (13021, 2, 247, 80, 3), + (13021, 3, 247, 80, 77), + (13021, 4, 220, 75, 77), + (13021, 5, 220, 75, 2), + (13021, 6, 220, 75, 3), + (13023, 1, 330, 115, 0), + (13023, 2, 330, 115, 1), + (13023, 3, 330, 115, 2), + (13023, 4, 330, 115, 3), + (13023, 5, 330, 115, 28), + (13023, 6, 330, 115, 36), + (13023, 7, 330, 115, 77), + (13026, 1, 266, 26, 0), + (13027, 1, 266, 27, 0), + (13028, 1, 266, 28, 0), + (13029, 1, 288, 250, 51), + (13029, 2, 288, 60, 51), + (13032, 1, 185, 70, 51), + (13033, 1, 185, 80, 51), + (13035, 1, 220, 768, 74), + (13040, 1, 216, 280, 74), + (13043, 1, 169, 35, -1), + (13046, 1, 1, 240, 0), + (13047, 1, 1, 280, 0), + (13048, 1, 1, 320, 0), + (13049, 1, 1, 360, 0), + (13050, 1, 1, 400, 0), + (13051, 1, 287, 2, 0), + (13051, 2, 139, 8003, 0), + (13052, 1, 310, 120000, 0), + (13052, 2, 385, 3107, 0), + (13052, 3, 385, 3207, 0), + (13052, 4, 385, 3307, 0), + (13052, 5, 385, 3407, 0), + (13052, 6, 385, 3507, 0), + (13052, 7, 385, 3607, 0), + (13055, 1, 264, 60, 8400), + (13067, 1, 264, 120, 643), + (13072, 1, 310, 120000, 0), + (13072, 2, 139, 6197, 0), + (13072, 3, 411, 512, 0), + (13073, 1, 310, 180000, 0), + (13073, 2, 139, 6197, 0), + (13073, 3, 411, 512, 0), + (13074, 1, 330, 140, 0), + (13074, 2, 330, 140, 1), + (13074, 3, 330, 140, 2), + (13074, 4, 330, 140, 3), + (13074, 5, 330, 140, 28), + (13074, 6, 330, 140, 36), + (13075, 1, 330, 145, 0), + (13075, 2, 330, 145, 1), + (13075, 3, 330, 145, 2), + (13075, 4, 330, 145, 3), + (13075, 5, 330, 145, 28), + (13075, 6, 330, 145, 36), + (13076, 1, 330, 150, 0), + (13076, 2, 330, 150, 1), + (13076, 3, 330, 150, 2), + (13076, 4, 330, 150, 3), + (13076, 5, 330, 150, 28), + (13076, 6, 330, 150, 36), + (13077, 1, 330, 140, 0), + (13077, 2, 330, 140, 1), + (13077, 3, 330, 140, 2), + (13077, 4, 330, 140, 3), + (13077, 5, 330, 140, 28), + (13077, 6, 330, 140, 36), + (13077, 7, 330, 140, 77), + (13078, 1, 330, 145, 0), + (13078, 2, 330, 145, 1), + (13078, 3, 330, 145, 2), + (13078, 4, 330, 145, 3), + (13078, 5, 330, 145, 28), + (13078, 6, 330, 145, 36), + (13078, 7, 330, 145, 77), + (13080, 1, 172, 55, 0), + (13081, 1, 172, 56, 0), + (13082, 1, 172, 57, 0), + (13083, 1, 172, 58, 0), + (13084, 1, 172, 59, 0), + (13085, 1, 259, 61, 0), + (13086, 1, 259, 62, 0), + (13087, 1, 259, 63, 0), + (13088, 1, 259, 64, 0), + (13089, 1, 259, 65, 0), + (13090, 1, 339, 10, 8105), + (13090, 2, 142, 65, 0), + (13090, 3, 311, 0, 0), + (13090, 4, 134, 70, 0), + (13090, 5, 348, 10, 0), + (13090, 6, 137, 0, 0), + (13090, 7, 339, 10, 8105), + (13090, 8, 142, 65, 0), + (13090, 9, 311, 0, 0), + (13090, 10, 134, 70, 0), + (13090, 11, 348, 10, 0), + (13090, 12, 137, 100, 0), + (13090, 13, 339, 10, 8105), + (13090, 14, 142, 65, 0), + (13090, 15, 311, 0, 0), + (13090, 16, 134, 70, 0), + (13090, 17, 348, 10, 0), + (13090, 18, 137, 79, 0), + (13090, 19, 339, 10, 8105), + (13090, 20, 142, 65, 0), + (13090, 21, 311, 0, 0), + (13090, 22, 134, 70, 0), + (13090, 23, 348, 10, 0), + (13090, 24, 137, 147, 0), + (13090, 25, 339, 10, 11404), + (13090, 26, 142, 71, 0), + (13090, 27, 311, 0, 0), + (13090, 28, 134, 75, 0), + (13090, 29, 348, 10, 0), + (13090, 30, 137, 0, 0), + (13090, 31, 339, 10, 11404), + (13090, 32, 142, 71, 0), + (13090, 33, 311, 0, 0), + (13090, 34, 134, 75, 0), + (13090, 35, 348, 10, 0), + (13090, 36, 137, 100, 0), + (13090, 37, 339, 10, 11404), + (13090, 38, 142, 71, 0), + (13090, 39, 311, 0, 0), + (13090, 40, 134, 75, 0), + (13090, 41, 348, 10, 0), + (13090, 42, 137, 79, 0), + (13090, 43, 339, 10, 11404), + (13090, 44, 142, 71, 0), + (13090, 45, 311, 0, 0), + (13090, 46, 134, 75, 0), + (13090, 47, 348, 10, 0), + (13090, 48, 137, 147, 0), + (13090, 49, 339, 10, 13199), + (13090, 50, 142, 76, 0), + (13090, 51, 311, 0, 0), + (13090, 52, 134, 80, 0), + (13090, 53, 348, 10, 0), + (13090, 54, 137, 0, 0), + (13090, 55, 339, 10, 13199), + (13090, 56, 142, 76, 0), + (13090, 57, 311, 0, 0), + (13090, 58, 134, 80, 0), + (13090, 59, 348, 10, 0), + (13090, 60, 137, 100, 0), + (13090, 61, 339, 10, 13199), + (13090, 62, 142, 76, 0), + (13090, 63, 311, 0, 0), + (13090, 64, 134, 80, 0), + (13090, 65, 348, 10, 0), + (13090, 66, 137, 79, 0), + (13090, 67, 339, 10, 13199), + (13090, 68, 142, 76, 0), + (13090, 69, 311, 0, 0), + (13090, 70, 134, 80, 0), + (13090, 71, 348, 10, 0), + (13090, 72, 137, 147, 0), + (13090, 73, 339, 10, 13830), + (13090, 74, 142, 81, 0), + (13090, 75, 311, 0, 0), + (13090, 76, 134, 85, 0), + (13090, 77, 348, 10, 0), + (13090, 78, 137, 0, 0), + (13090, 79, 339, 10, 13830), + (13090, 80, 142, 81, 0), + (13090, 81, 311, 0, 0), + (13090, 82, 134, 85, 0), + (13090, 83, 348, 10, 0), + (13090, 84, 137, 100, 0), + (13090, 85, 339, 10, 13830), + (13090, 86, 142, 81, 0), + (13090, 87, 311, 0, 0), + (13090, 88, 134, 85, 0), + (13090, 89, 348, 10, 0), + (13090, 90, 137, 79, 0), + (13090, 91, 339, 10, 13830), + (13090, 92, 142, 81, 0), + (13090, 93, 311, 0, 0), + (13090, 94, 134, 85, 0), + (13090, 95, 348, 10, 0), + (13090, 96, 137, 147, 0), + (13090, 97, 339, 10, 27527), + (13090, 98, 142, 86, 0), + (13090, 99, 311, 0, 0), + (13090, 100, 134, 90, 0), + (13090, 101, 348, 10, 0), + (13090, 102, 137, 0, 0), + (13090, 103, 339, 10, 27527), + (13090, 104, 142, 86, 0), + (13090, 105, 311, 0, 0), + (13090, 106, 134, 90, 0), + (13090, 107, 348, 10, 0), + (13090, 108, 137, 100, 0), + (13090, 109, 339, 10, 27527), + (13090, 110, 142, 86, 0), + (13090, 111, 311, 0, 0), + (13090, 112, 134, 90, 0), + (13090, 113, 348, 10, 0), + (13090, 114, 137, 79, 0), + (13090, 115, 339, 10, 27527), + (13090, 116, 142, 86, 0), + (13090, 117, 311, 0, 0), + (13090, 118, 134, 90, 0), + (13090, 119, 348, 10, 0), + (13090, 120, 137, 147, 0), + (13091, 1, 339, 10, 8105), + (13091, 2, 142, 65, 0), + (13091, 3, 311, 0, 0), + (13091, 4, 134, 70, 0), + (13091, 5, 348, 10, 0), + (13091, 6, 137, 0, 0), + (13091, 7, 339, 10, 8105), + (13091, 8, 142, 65, 0), + (13091, 9, 311, 0, 0), + (13091, 10, 134, 70, 0), + (13091, 11, 348, 10, 0), + (13091, 12, 137, 100, 0), + (13091, 13, 339, 10, 8105), + (13091, 14, 142, 65, 0), + (13091, 15, 311, 0, 0), + (13091, 16, 134, 70, 0), + (13091, 17, 348, 10, 0), + (13091, 18, 137, 79, 0), + (13091, 19, 339, 10, 8105), + (13091, 20, 142, 65, 0), + (13091, 21, 311, 0, 0), + (13091, 22, 134, 70, 0), + (13091, 23, 348, 10, 0), + (13091, 24, 137, 147, 0), + (13091, 25, 339, 10, 11404), + (13091, 26, 142, 71, 0), + (13091, 27, 311, 0, 0), + (13091, 28, 134, 75, 0), + (13091, 29, 348, 10, 0), + (13091, 30, 137, 0, 0), + (13091, 31, 339, 10, 11404), + (13091, 32, 142, 71, 0), + (13091, 33, 311, 0, 0), + (13091, 34, 134, 75, 0), + (13091, 35, 348, 10, 0), + (13091, 36, 137, 100, 0), + (13091, 37, 339, 10, 11404), + (13091, 38, 142, 71, 0), + (13091, 39, 311, 0, 0), + (13091, 40, 134, 75, 0), + (13091, 41, 348, 10, 0), + (13091, 42, 137, 79, 0), + (13091, 43, 339, 10, 11404), + (13091, 44, 142, 71, 0), + (13091, 45, 311, 0, 0), + (13091, 46, 134, 75, 0), + (13091, 47, 348, 10, 0), + (13091, 48, 137, 147, 0), + (13091, 49, 339, 10, 13199), + (13091, 50, 142, 76, 0), + (13091, 51, 311, 0, 0), + (13091, 52, 134, 80, 0), + (13091, 53, 348, 10, 0), + (13091, 54, 137, 0, 0), + (13091, 55, 339, 10, 13199), + (13091, 56, 142, 76, 0), + (13091, 57, 311, 0, 0), + (13091, 58, 134, 80, 0), + (13091, 59, 348, 10, 0), + (13091, 60, 137, 100, 0), + (13091, 61, 339, 10, 13199), + (13091, 62, 142, 76, 0), + (13091, 63, 311, 0, 0), + (13091, 64, 134, 80, 0), + (13091, 65, 348, 10, 0), + (13091, 66, 137, 79, 0), + (13091, 67, 339, 10, 13199), + (13091, 68, 142, 76, 0), + (13091, 69, 311, 0, 0), + (13091, 70, 134, 80, 0), + (13091, 71, 348, 10, 0), + (13091, 72, 137, 147, 0), + (13091, 73, 339, 10, 13830), + (13091, 74, 142, 81, 0), + (13091, 75, 311, 0, 0), + (13091, 76, 134, 85, 0), + (13091, 77, 348, 10, 0), + (13091, 78, 137, 0, 0), + (13091, 79, 339, 10, 13830), + (13091, 80, 142, 81, 0), + (13091, 81, 311, 0, 0), + (13091, 82, 134, 85, 0), + (13091, 83, 348, 10, 0), + (13091, 84, 137, 100, 0), + (13091, 85, 339, 10, 13830), + (13091, 86, 142, 81, 0), + (13091, 87, 311, 0, 0), + (13091, 88, 134, 85, 0), + (13091, 89, 348, 10, 0), + (13091, 90, 137, 79, 0), + (13091, 91, 339, 10, 13830), + (13091, 92, 142, 81, 0), + (13091, 93, 311, 0, 0), + (13091, 94, 134, 85, 0), + (13091, 95, 348, 10, 0), + (13091, 96, 137, 147, 0), + (13091, 97, 339, 10, 27527), + (13091, 98, 142, 86, 0), + (13091, 99, 311, 0, 0), + (13091, 100, 134, 90, 0), + (13091, 101, 348, 10, 0), + (13091, 102, 137, 0, 0), + (13091, 103, 339, 10, 27527), + (13091, 104, 142, 86, 0), + (13091, 105, 311, 0, 0), + (13091, 106, 134, 90, 0), + (13091, 107, 348, 10, 0), + (13091, 108, 137, 100, 0), + (13091, 109, 339, 10, 27527), + (13091, 110, 142, 86, 0), + (13091, 111, 311, 0, 0), + (13091, 112, 134, 90, 0), + (13091, 113, 348, 10, 0), + (13091, 114, 137, 79, 0), + (13091, 115, 339, 10, 27527), + (13091, 116, 142, 86, 0), + (13091, 117, 311, 0, 0), + (13091, 118, 134, 90, 0), + (13091, 119, 348, 10, 0), + (13091, 120, 137, 147, 0), + (13092, 1, 217, 0, 102280), + (13092, 2, 346, 84, 18), + (13093, 1, 217, 0, 109400), + (13093, 2, 346, 86, 18), + (13094, 1, 217, 0, 116800), + (13094, 2, 346, 88, 18), + (13095, 1, 439, 0, 140680), + (13095, 2, 345, 88, 25), + (13096, 1, 287, 1, 0), + (13096, 2, 140, 3, 0), + (13096, 3, 348, 1, 0), + (13096, 4, 138, 0, 0), + (13096, 5, 137, 0, 0), + (13097, 1, 287, 2, 0), + (13097, 2, 140, 3, 0), + (13097, 3, 348, 1, 0), + (13097, 4, 138, 0, 0), + (13097, 5, 137, 0, 0), + (13098, 1, 287, 3, 0), + (13098, 2, 140, 3, 0), + (13098, 3, 348, 1, 0), + (13098, 4, 138, 0, 0), + (13098, 5, 137, 0, 0), + (13099, 1, 132, 15, 15), + (13101, 1, 360, 25, 27537), + (13102, 1, 360, 25, 27538), + (13103, 1, 360, 25, 27539), + (13104, 1, 303, 14000, 18000), + (13104, 2, 139, 2766, 0), + (13105, 1, 303, 18000, 22500), + (13105, 2, 139, 2766, 0), + (13106, 1, 303, 22500, 27500), + (13106, 2, 139, 2766, 0), + (13110, 1, 185, 8, 1), + (13110, 2, 185, 8, 3), + (13111, 1, 185, 10, 1), + (13111, 2, 185, 10, 3), + (13113, 1, 185, 7, 36), + (13114, 1, 185, 9, 36), + (13116, 1, 185, 8, 0), + (13116, 2, 185, 8, 2), + (13117, 1, 185, 10, 0), + (13117, 2, 185, 10, 2), + (13122, 1, 2, 128, 0), + (13123, 1, 2, 132, 0), + (13124, 1, 2, 136, 0), + (13127, 1, 287, 4, 0), + (13127, 2, 140, 3, 0), + (13127, 3, 348, 1, 0), + (13127, 4, 138, 0, 0), + (13127, 5, 137, 0, 0), + (13130, 1, 264, 1440, 7003), + (13140, 1, 264, 480, 391), + (13141, 1, 264, 600, 391), + (13142, 1, 264, 720, 391), + (13143, 1, 127, 17, 0), + (13143, 2, 385, 8054, 0), + (13144, 1, 127, 34, 0), + (13144, 2, 385, 8054, 0), + (13145, 1, 127, 50, 0), + (13145, 2, 385, 8054, 0), + (13146, 1, 127, 17, 0), + (13146, 2, 385, 8054, 0), + (13147, 1, 127, 34, 0), + (13147, 2, 385, 8054, 0), + (13148, 1, 127, 50, 0), + (13148, 2, 385, 8054, 0), + (13149, 1, 97, 550, 0), + (13150, 1, 97, 600, 0), + (13151, 1, 97, 650, 0), + (13152, 1, 97, 700, 0), + (13153, 1, 97, 750, 0), + (13166, 1, 264, 5, 749), + (13166, 2, 264, 5, 822), + (13166, 3, 264, 5, 1274), + (13166, 4, 264, 5, 1275), + (13167, 1, 264, 10, 749), + (13167, 2, 264, 10, 822), + (13167, 3, 264, 10, 1274), + (13167, 4, 264, 10, 1275), + (13168, 1, 264, 15, 749), + (13168, 2, 264, 15, 822), + (13168, 3, 264, 15, 1274), + (13168, 4, 264, 15, 1275), + (13184, 1, 220, 315, 26), + (13185, 1, 220, 400, 26), + (13186, 1, 220, 500, 26), + (13187, 1, 405, 19, 0), + (13188, 1, 405, 21, 0), + (13189, 1, 405, 23, 0), + (13196, 1, 279, 31, 0), + (13197, 1, 279, 35, 0), + (13198, 1, 279, 39, 0), + (13199, 1, 378, 30, 31), + (13200, 1, 378, 35, 31), + (13201, 1, 378, 40, 31), + (13204, 1, 264, 180, 8261), + (13205, 1, 264, 360, 8261), + (13206, 1, 264, 540, 8261), + (13207, 1, 288, 100, 8), + (13208, 1, 288, 100, 8), + (13209, 1, 288, 100, 8), + (13210, 1, 325, 70, 0), + (13211, 1, 325, 75, 0), + (13212, 1, 325, 80, 0), + (13213, 1, 220, 285, 8), + (13214, 1, 220, 315, 8), + (13215, 1, 220, 350, 8), + (13216, 1, 220, 390, 8), + (13217, 1, 220, 440, 8), + (13218, 1, 216, 750, 8), + (13219, 1, 114, -12, 0), + (13220, 1, 114, -15, 0), + (13221, 1, 114, -18, 0), + (13222, 1, 310, 240000, 0), + (13222, 2, 139, 6197, 0), + (13222, 3, 411, 512, 0), + (13223, 1, 310, 300000, 0), + (13223, 2, 139, 6197, 0), + (13223, 3, 411, 512, 0), + (13226, 1, 360, 60, 27593), + (13238, 1, 320, 9, 0), + (13239, 1, 320, 10, 0), + (13240, 1, 320, 11, 0), + (13262, 1, 264, 1008, 102), + (13263, 1, 264, 1152, 102), + (13264, 1, 264, 1290, 102), + (13278, 1, 213, 25, 0), + (13281, 1, 318, 31, 0), + (13286, 1, 278, 900, 102200), + (13286, 2, 440, 92, 100), + (13294, 1, 339, 10, 8105), + (13294, 2, 142, 65, 0), + (13294, 3, 311, 0, 0), + (13294, 4, 134, 70, 0), + (13294, 5, 348, 10, 0), + (13294, 6, 137, 0, 0), + (13294, 7, 339, 10, 8105), + (13294, 8, 142, 65, 0), + (13294, 9, 311, 0, 0), + (13294, 10, 134, 70, 0), + (13294, 11, 348, 10, 0), + (13294, 12, 137, 100, 0), + (13294, 13, 339, 10, 8105), + (13294, 14, 142, 65, 0), + (13294, 15, 311, 0, 0), + (13294, 16, 134, 70, 0), + (13294, 17, 348, 10, 0), + (13294, 18, 137, 79, 0), + (13294, 19, 339, 10, 8105), + (13294, 20, 142, 65, 0), + (13294, 21, 311, 0, 0), + (13294, 22, 134, 70, 0), + (13294, 23, 348, 10, 0), + (13294, 24, 137, 147, 0), + (13294, 25, 339, 10, 11404), + (13294, 26, 142, 71, 0), + (13294, 27, 311, 0, 0), + (13294, 28, 134, 75, 0), + (13294, 29, 348, 10, 0), + (13294, 30, 137, 0, 0), + (13294, 31, 339, 10, 11404), + (13294, 32, 142, 71, 0), + (13294, 33, 311, 0, 0), + (13294, 34, 134, 75, 0), + (13294, 35, 348, 10, 0), + (13294, 36, 137, 100, 0), + (13294, 37, 339, 10, 11404), + (13294, 38, 142, 71, 0), + (13294, 39, 311, 0, 0), + (13294, 40, 134, 75, 0), + (13294, 41, 348, 10, 0), + (13294, 42, 137, 79, 0), + (13294, 43, 339, 10, 11404), + (13294, 44, 142, 71, 0), + (13294, 45, 311, 0, 0), + (13294, 46, 134, 75, 0), + (13294, 47, 348, 10, 0), + (13294, 48, 137, 147, 0), + (13294, 49, 339, 10, 13199), + (13294, 50, 142, 76, 0), + (13294, 51, 311, 0, 0), + (13294, 52, 134, 80, 0), + (13294, 53, 348, 10, 0), + (13294, 54, 137, 0, 0), + (13294, 55, 339, 10, 13199), + (13294, 56, 142, 76, 0), + (13294, 57, 311, 0, 0), + (13294, 58, 134, 80, 0), + (13294, 59, 348, 10, 0), + (13294, 60, 137, 100, 0), + (13294, 61, 339, 10, 13199), + (13294, 62, 142, 76, 0), + (13294, 63, 311, 0, 0), + (13294, 64, 134, 80, 0), + (13294, 65, 348, 10, 0), + (13294, 66, 137, 79, 0), + (13294, 67, 339, 10, 13199), + (13294, 68, 142, 76, 0), + (13294, 69, 311, 0, 0), + (13294, 70, 134, 80, 0), + (13294, 71, 348, 10, 0), + (13294, 72, 137, 147, 0), + (13294, 73, 339, 10, 13830), + (13294, 74, 142, 81, 0), + (13294, 75, 311, 0, 0), + (13294, 76, 134, 85, 0), + (13294, 77, 348, 10, 0), + (13294, 78, 137, 0, 0), + (13294, 79, 339, 10, 13830), + (13294, 80, 142, 81, 0), + (13294, 81, 311, 0, 0), + (13294, 82, 134, 85, 0), + (13294, 83, 348, 10, 0), + (13294, 84, 137, 100, 0), + (13294, 85, 339, 10, 13830), + (13294, 86, 142, 81, 0), + (13294, 87, 311, 0, 0), + (13294, 88, 134, 85, 0), + (13294, 89, 348, 10, 0), + (13294, 90, 137, 79, 0), + (13294, 91, 339, 10, 13830), + (13294, 92, 142, 81, 0), + (13294, 93, 311, 0, 0), + (13294, 94, 134, 85, 0), + (13294, 95, 348, 10, 0), + (13294, 96, 137, 147, 0), + (13294, 97, 339, 10, 27527), + (13294, 98, 142, 86, 0), + (13294, 99, 311, 0, 0), + (13294, 100, 134, 90, 0), + (13294, 101, 348, 10, 0), + (13294, 102, 137, 0, 0), + (13294, 103, 339, 10, 27527), + (13294, 104, 142, 86, 0), + (13294, 105, 311, 0, 0), + (13294, 106, 134, 90, 0), + (13294, 107, 348, 10, 0), + (13294, 108, 137, 100, 0), + (13294, 109, 339, 10, 27527), + (13294, 110, 142, 86, 0), + (13294, 111, 311, 0, 0), + (13294, 112, 134, 90, 0), + (13294, 113, 348, 10, 0), + (13294, 114, 137, 79, 0), + (13294, 115, 339, 10, 27527), + (13294, 116, 142, 86, 0), + (13294, 117, 311, 0, 0), + (13294, 118, 134, 90, 0), + (13294, 119, 348, 10, 0), + (13294, 120, 137, 147, 0), + (13294, 121, 339, 10, 30644), + (13294, 122, 142, 91, 0), + (13294, 123, 311, 0, 0), + (13294, 124, 134, 95, 0), + (13294, 125, 348, 10, 0), + (13294, 126, 137, 0, 0), + (13294, 127, 339, 10, 30644), + (13294, 128, 142, 91, 0), + (13294, 129, 311, 0, 0), + (13294, 130, 134, 95, 0), + (13294, 131, 348, 10, 0), + (13294, 132, 137, 100, 0), + (13294, 133, 339, 10, 30644), + (13294, 134, 142, 91, 0), + (13294, 135, 311, 0, 0), + (13294, 136, 134, 95, 0), + (13294, 137, 348, 10, 0), + (13294, 138, 137, 79, 0), + (13294, 139, 339, 10, 30644), + (13294, 140, 142, 91, 0), + (13294, 141, 311, 0, 0), + (13294, 142, 134, 95, 0), + (13294, 143, 348, 10, 0), + (13294, 144, 137, 147, 0), + (13295, 1, 339, 10, 8105), + (13295, 2, 142, 65, 0), + (13295, 3, 311, 0, 0), + (13295, 4, 134, 70, 0), + (13295, 5, 348, 10, 0), + (13295, 6, 137, 0, 0), + (13295, 7, 339, 10, 8105), + (13295, 8, 142, 65, 0), + (13295, 9, 311, 0, 0), + (13295, 10, 134, 70, 0), + (13295, 11, 348, 10, 0), + (13295, 12, 137, 100, 0), + (13295, 13, 339, 10, 8105), + (13295, 14, 142, 65, 0), + (13295, 15, 311, 0, 0), + (13295, 16, 134, 70, 0), + (13295, 17, 348, 10, 0), + (13295, 18, 137, 79, 0), + (13295, 19, 339, 10, 8105), + (13295, 20, 142, 65, 0), + (13295, 21, 311, 0, 0), + (13295, 22, 134, 70, 0), + (13295, 23, 348, 10, 0), + (13295, 24, 137, 147, 0), + (13295, 25, 339, 10, 11404), + (13295, 26, 142, 71, 0), + (13295, 27, 311, 0, 0), + (13295, 28, 134, 75, 0), + (13295, 29, 348, 10, 0), + (13295, 30, 137, 0, 0), + (13295, 31, 339, 10, 11404), + (13295, 32, 142, 71, 0), + (13295, 33, 311, 0, 0), + (13295, 34, 134, 75, 0), + (13295, 35, 348, 10, 0), + (13295, 36, 137, 100, 0), + (13295, 37, 339, 10, 11404), + (13295, 38, 142, 71, 0), + (13295, 39, 311, 0, 0), + (13295, 40, 134, 75, 0), + (13295, 41, 348, 10, 0), + (13295, 42, 137, 79, 0), + (13295, 43, 339, 10, 11404), + (13295, 44, 142, 71, 0), + (13295, 45, 311, 0, 0), + (13295, 46, 134, 75, 0), + (13295, 47, 348, 10, 0), + (13295, 48, 137, 147, 0), + (13295, 49, 339, 10, 13199), + (13295, 50, 142, 76, 0), + (13295, 51, 311, 0, 0), + (13295, 52, 134, 80, 0), + (13295, 53, 348, 10, 0), + (13295, 54, 137, 0, 0), + (13295, 55, 339, 10, 13199), + (13295, 56, 142, 76, 0), + (13295, 57, 311, 0, 0), + (13295, 58, 134, 80, 0), + (13295, 59, 348, 10, 0), + (13295, 60, 137, 100, 0), + (13295, 61, 339, 10, 13199), + (13295, 62, 142, 76, 0), + (13295, 63, 311, 0, 0), + (13295, 64, 134, 80, 0), + (13295, 65, 348, 10, 0), + (13295, 66, 137, 79, 0), + (13295, 67, 339, 10, 13199), + (13295, 68, 142, 76, 0), + (13295, 69, 311, 0, 0), + (13295, 70, 134, 80, 0), + (13295, 71, 348, 10, 0), + (13295, 72, 137, 147, 0), + (13295, 73, 339, 10, 13830), + (13295, 74, 142, 81, 0), + (13295, 75, 311, 0, 0), + (13295, 76, 134, 85, 0), + (13295, 77, 348, 10, 0), + (13295, 78, 137, 0, 0), + (13295, 79, 339, 10, 13830), + (13295, 80, 142, 81, 0), + (13295, 81, 311, 0, 0), + (13295, 82, 134, 85, 0), + (13295, 83, 348, 10, 0), + (13295, 84, 137, 100, 0), + (13295, 85, 339, 10, 13830), + (13295, 86, 142, 81, 0), + (13295, 87, 311, 0, 0), + (13295, 88, 134, 85, 0), + (13295, 89, 348, 10, 0), + (13295, 90, 137, 79, 0), + (13295, 91, 339, 10, 13830), + (13295, 92, 142, 81, 0), + (13295, 93, 311, 0, 0), + (13295, 94, 134, 85, 0), + (13295, 95, 348, 10, 0), + (13295, 96, 137, 147, 0), + (13295, 97, 339, 10, 27527), + (13295, 98, 142, 86, 0), + (13295, 99, 311, 0, 0), + (13295, 100, 134, 90, 0), + (13295, 101, 348, 10, 0), + (13295, 102, 137, 0, 0), + (13295, 103, 339, 10, 27527), + (13295, 104, 142, 86, 0), + (13295, 105, 311, 0, 0), + (13295, 106, 134, 90, 0), + (13295, 107, 348, 10, 0), + (13295, 108, 137, 100, 0), + (13295, 109, 339, 10, 27527), + (13295, 110, 142, 86, 0), + (13295, 111, 311, 0, 0), + (13295, 112, 134, 90, 0), + (13295, 113, 348, 10, 0), + (13295, 114, 137, 79, 0), + (13295, 115, 339, 10, 27527), + (13295, 116, 142, 86, 0), + (13295, 117, 311, 0, 0), + (13295, 118, 134, 90, 0), + (13295, 119, 348, 10, 0), + (13295, 120, 137, 147, 0), + (13295, 121, 339, 10, 30644), + (13295, 122, 142, 91, 0), + (13295, 123, 311, 0, 0), + (13295, 124, 134, 95, 0), + (13295, 125, 348, 10, 0), + (13295, 126, 137, 0, 0), + (13295, 127, 339, 10, 30644), + (13295, 128, 142, 91, 0), + (13295, 129, 311, 0, 0), + (13295, 130, 134, 95, 0), + (13295, 131, 348, 10, 0), + (13295, 132, 137, 100, 0), + (13295, 133, 339, 10, 30644), + (13295, 134, 142, 91, 0), + (13295, 135, 311, 0, 0), + (13295, 136, 134, 95, 0), + (13295, 137, 348, 10, 0), + (13295, 138, 137, 79, 0), + (13295, 139, 339, 10, 30644), + (13295, 140, 142, 91, 0), + (13295, 141, 311, 0, 0), + (13295, 142, 134, 95, 0), + (13295, 143, 348, 10, 0), + (13295, 144, 137, 147, 0), + (13296, 1, 125, 49, 49), + (13296, 2, 137, 0, 0), + (13296, 3, 141, 1, 0), + (13296, 4, 139, -6233, 0), + (13296, 5, 139, -6265, 0), + (13296, 6, 125, 49, 49), + (13296, 7, 137, 147, 0), + (13296, 8, 141, 1, 0), + (13297, 1, 125, 52, 52), + (13297, 2, 137, 0, 0), + (13297, 3, 141, 1, 0), + (13297, 4, 139, -6233, 0), + (13297, 5, 139, -6265, 0), + (13297, 6, 125, 52, 52), + (13297, 7, 137, 147, 0), + (13297, 8, 141, 1, 0), + (13299, 1, 319, 31, 0), + (13302, 1, 274, 44, 0), + (13305, 1, 189, 19, 0), + (13308, 1, 265, 87, 0), + (13313, 1, 15, 29, 0), + (13318, 1, 97, 850, 0), + (13323, 1, 320, 15, 0), + (13326, 1, 330, 155, 0), + (13326, 2, 330, 155, 1), + (13326, 3, 330, 155, 2), + (13326, 4, 330, 155, 3), + (13326, 5, 330, 155, 28), + (13326, 6, 330, 155, 36), + (13332, 1, 330, 155, 0), + (13332, 2, 330, 155, 1), + (13332, 3, 330, 155, 2), + (13332, 4, 330, 155, 3), + (13332, 5, 330, 155, 28), + (13332, 6, 330, 155, 36), + (13332, 7, 330, 155, 77), + (13338, 1, 1, 370, 0), + (13343, 1, 1, 340, 0), + (13348, 1, 1, 440, 0), + (13353, 1, 1, 330, 0), + (13358, 1, 1, 540, 0), + (13396, 1, 375, 40, 0), + (13404, 1, 273, 8, 0), + (13411, 1, 399, 4, 0), + (13411, 2, 138, 1, 0), + (13411, 3, 137, 0, 0), + (13411, 4, 348, 10, 0), + (13411, 5, 311, 0, 0), + (13411, 6, 141, 1, 0), + (13411, 7, 134, 254, 0), + (13411, 8, 137, -39, 0), + (13413, 1, 399, 12, 0), + (13413, 2, 141, 1, 0), + (13413, 3, 138, 0, 0), + (13413, 4, 142, 255, 0), + (13413, 5, 391, 0, 0), + (13413, 6, 311, 0, 0), + (13413, 7, 137, -152, 0), + (13413, 8, 411, 100350, 0), + (13413, 9, 137, -39, 0), + (13415, 1, 264, 150, 705), + (13415, 2, 264, 150, 1092), + (13415, 3, 264, 150, 10396), + (13415, 4, 264, 150, 10397), + (13416, 1, 264, 20, 626), + (13438, 1, 266, 29, 0), + (13449, 1, 264, 2, 11073), + (13463, 1, 264, 90, 458), + (13474, 1, 264, 120, 444), + (13477, 1, 126, 20, 0), + (13477, 2, 134, 95, 0), + (13477, 3, 135, 4, 0), + (13477, 4, 135, 5, 0), + (13485, 1, 279, 3, 0), + (13502, 1, 375, 160, 0), + (13508, 1, 378, 5, 3), + (13511, 1, 279, 43, 0), + (13520, 1, 292, 70, 0), + (13521, 1, 293, 25, 0), + (13533, 1, 378, 55, 96), + (13545, 1, 323, 30787, 0), + (13562, 1, 264, 480, 872), + (13565, 1, 264, 60, 3804), + (13568, 1, 264, 60, 876), + (13578, 1, 244, 30, 0), + (13589, 1, 279, 34, 0), + (13590, 1, 279, 38, 0), + (13598, 1, 339, 20, 30809), + (13598, 2, 137, 21, 0), + (13598, 3, 385, -18000, 0), + (13598, 4, 339, 20, 30809), + (13598, 5, 137, 343, 0), + (13598, 6, 385, -18000, 0), + (13601, 1, 231, 22, 0), + (13607, 1, 126, 4, 4), + (13607, 2, 137, 21, 0), + (13607, 3, 231, 4, 4), + (13610, 1, 266, 47, 0), + (13613, 1, 220, 260, 10), + (13616, 1, 220, 150, 2), + (13616, 2, 220, 150, 3), + (13616, 3, 220, 150, 77), + (13617, 1, 220, 375, 2), + (13617, 2, 220, 375, 3), + (13617, 3, 220, 375, 77), + (13618, 1, 220, 500, 2), + (13618, 2, 220, 500, 3), + (13618, 3, 220, 500, 77), + (13621, 1, 218, 11, 0), + (13627, 1, 59, -59, 0), + (13628, 1, 59, -64, 0), + (13630, 1, 398, 10000, 0), + (13630, 2, 137, 152, 0), + (13667, 1, 287, 1, 0), + (13667, 2, 385, 8054, 0), + (13675, 1, 218, 24, 0), + (13684, 1, 399, 2, 0), + (13684, 2, 140, 2, 0), + (13684, 3, 348, 10, 0), + (13684, 4, 138, 0, 0), + (13684, 5, 137, -152, 0), + (13684, 6, 137, -39, 0), + (13685, 1, 399, 3, 0), + (13685, 2, 140, 2, 0), + (13685, 3, 348, 10, 0), + (13685, 4, 138, 0, 0), + (13685, 5, 137, -152, 0), + (13685, 6, 137, -39, 0), + (13686, 1, 399, 4, 0), + (13686, 2, 140, 2, 0), + (13686, 3, 348, 10, 0), + (13686, 4, 138, 0, 0), + (13686, 5, 137, -152, 0), + (13686, 6, 137, -39, 0), + (13689, 1, 127, 10, 0), + (13689, 2, 139, 27592, 0), + (13689, 3, 139, 31548, 0), + (13707, 1, 274, 26, 0), + (13710, 1, 280, 65, 0), + (13713, 1, 218, 26, 0), + (13753, 1, 264, 360, 534), + (13758, 1, 264, 360, 602), + (13763, 1, 287, 4, 0), + (13763, 2, 137, 31, 0), + (13763, 3, 136, 5, 0), + (13764, 1, 264, 60, 535), + (13767, 1, 439, 0, 153514), + (13767, 2, 345, 90, 22), + (13773, 1, 279, 21, 0), + (13774, 1, 279, 23, 0), + (13775, 1, 279, 25, 0), + (13779, 1, 288, 100, 8), + (13782, 1, 220, 490, 8), + (13789, 1, 216, 850, 8), + (13790, 1, 216, 950, 8), + (13795, 1, 258, 73, 0), + (13798, 1, 114, -21, 0), + (13804, 1, 378, 4, 3), + (13813, 1, 220, 150, 28), + (13813, 2, 220, 150, 0), + (13813, 3, 427, 23598, 9), + (13813, 4, 428, 28, 0), + (13813, 5, 428, 0, 0), + (13820, 1, 220, 325, 26), + (13820, 2, 220, 325, 30), + (13820, 3, 220, 325, 38), + (13823, 1, 220, 295, 21), + (13823, 2, 220, 295, 23), + (13823, 3, 220, 670, 52), + (13823, 4, 220, 295, 28), + (13826, 1, 405, 25, 0), + (13829, 1, 220, 550, 26), + (13835, 1, 283, 300, 0), + (13841, 1, 264, 17, 469), + (13873, 1, 264, 30, 961), + (13878, 1, 264, 60, 609), + (13881, 1, 264, 60, 387), + (13884, 1, 265, 87, 0), + (13889, 1, 264, 60, 1012), + (13894, 1, 327, 13, 0), + (13905, 1, 310, 24000, 0), + (13905, 2, 385, 15319, 0), + (13908, 1, 310, 3000, 0), + (13908, 2, 385, 15307, 0), + (13908, 3, 385, 15407, 0), + (13908, 4, 385, 15507, 0), + (13908, 5, 385, 15607, 0), + (13911, 1, 310, 3000, 0), + (13911, 2, 385, 16005, 0), + (13911, 3, 310, 3000, 0), + (13911, 4, 385, 15405, 0), + (13911, 5, 385, 15505, 0), + (13911, 6, 385, 15605, 0), + (13911, 7, 411, 2, 0), + (13917, 1, 264, 120, 606), + (13921, 1, 114, -66, 0), + (13924, 1, 114, -64, 0), + (13927, 1, 114, -25, 0), + (13930, 1, 341, 310, 0), + (13933, 1, 262, 80, 0), + (13943, 1, 262, 80, 1), + (13953, 1, 262, 80, 2), + (13963, 1, 262, 80, 3), + (13973, 1, 262, 80, 4), + (13983, 1, 262, 80, 5), + (13993, 1, 262, 80, 6), + (14011, 1, 264, 30, 10394), + (14017, 1, 69, 10, 0), + (14018, 1, 69, 10, 0), + (14026, 1, 185, 3, 2), + (14026, 2, 185, 3, 3), + (14026, 3, 185, 3, 77), + (14026, 4, 220, 50, 2), + (14026, 5, 220, 50, 3), + (14026, 6, 220, 50, 77), + (14029, 1, 395, 5, 5), + (14029, 2, 385, 9758, 0), + (14029, 3, 385, 9858, 0), + (14029, 4, 385, 9958, 0), + (14032, 1, 181, 100, 0), + (14037, 1, 264, 180, 804), + (14040, 1, 264, 180, 300), + (14043, 1, 85, 32197, 0), + (14046, 1, 264, 90, 87), + (14056, 1, 310, 360000, 0), + (14056, 2, 139, 4504, 0), + (14059, 1, 310, -180000, 0), + (14059, 2, 139, 4520, 0), + (14062, 1, 264, 60, 821), + (14065, 1, 264, 60, 3215), + (14068, 1, 264, 60, 3216), + (14076, 1, 310, 480000, 0), + (14076, 2, 139, 4518, 0), + (14082, 1, 360, 26, 32314), + (14085, 1, 264, 2, 741), + (14088, 1, 264, 30, 769), + (14091, 1, 264, 120, 701), + (14094, 1, 124, 325, 350), + (14094, 2, 385, 19, 0), + (14094, 3, 144, 0, 0), + (14094, 4, 403, 3, 0), + (14094, 5, 404, 48, 0), + (14094, 6, 385, -21768, 0), + (14097, 1, 85, 32317, 5), + (14100, 1, 127, 50, 0), + (14100, 2, 137, 21, 0), + (14100, 3, 143, 1, 0), + (14100, 4, 134, 253, 0), + (14100, 5, 348, 1, 0), + (14101, 1, 310, 2520000, 0), + (14101, 2, 139, 4506, 0), + (14101, 3, 310, 2520000, 0), + (14101, 4, 385, 11122, 0), + (14101, 5, 385, 11222, 0), + (14101, 6, 385, 11322, 0), + (14101, 7, 385, 11522, 0), + (14115, 1, 287, 1, 0), + (14115, 2, 385, 16130, 0), + (14129, 1, 220, 60, 36), + (14129, 2, 427, 32327, 3), + (14129, 3, 428, 36, 0), + (14130, 1, 220, 90, 36), + (14130, 2, 427, 32327, 5), + (14130, 3, 428, 36, 0), + (14132, 1, 264, 240, 2234), + (14135, 1, 310, 132000, 0), + (14135, 2, 385, 13005, 0), + (14135, 3, 385, 12423, 0), + (14135, 4, 385, 12504, 0), + (14135, 5, 310, 132000, 0), + (14135, 6, 139, 4676, 0), + (14135, 7, 411, 512, 0), + (14138, 1, 310, 480000, 0), + (14138, 2, 139, 4695, 0), + (14138, 3, 411, 512, 0), + (14140, 1, 310, 24000, 0), + (14140, 2, 385, 13007, 0), + (14140, 3, 385, 12105, 0), + (14140, 4, 385, 12205, 0), + (14140, 5, 310, 72000, 0), + (14140, 6, 385, 12305, 0), + (14140, 7, 385, 12405, 0), + (14140, 8, 385, 12505, 0), + (14140, 9, 411, 512, 0), + (14141, 1, 185, 2, 36), + (14144, 1, 287, 1, 0), + (14144, 2, 385, 13204, 0), + (14144, 3, 411, 512, 0), + (14148, 1, 310, 90000, 0), + (14148, 2, 139, 4691, 0), + (14151, 1, 185, 2, 26), + (14151, 2, 220, 100, 26), + (14154, 1, 264, 2100, 276), + (14157, 1, 216, 150, 26), + (14160, 1, 264, 60, 7001), + (14163, 1, 287, 1, 0), + (14163, 2, 385, 16178, 0), + (14163, 3, 411, 128, 0), + (14166, 1, 264, 60, 945), + (14169, 1, 310, 202500, 0), + (14169, 2, 139, 8030, 0), + (14169, 3, 411, 256, 0), + (14173, 1, 310, 1440000, 0), + (14173, 2, 139, 4516, 0), + (14173, 3, 411, 256, 0), + (14176, 1, 264, 660, 8261), + (14179, 1, 287, 1, 0), + (14179, 2, 385, 5830, 0), + (14179, 3, 411, 256, 0), + (14180, 1, 287, 1, 0), + (14180, 2, 139, 8030, 0), + (14180, 3, 411, 256, 0), + (14181, 1, 247, 25, 20), + (14186, 1, 247, 25, 76), + (14196, 1, 264, 2340, 465), + (14199, 1, 264, 720, 499), + (14200, 1, 288, 15, 2), + (14200, 2, 288, 15, 3), + (14200, 3, 288, 15, 51), + (14200, 4, 288, 15, 77), + (14203, 1, 310, 150000, 0), + (14203, 2, 385, 3419, 0), + (14203, 3, 385, 14005, 0), + (14203, 4, 385, 3519, 0), + (14203, 5, 411, 65536, 0), + (14210, 1, 310, 40000, 0), + (14210, 2, 139, 1546, 0), + (14210, 3, 310, 40000, 0), + (14210, 4, 385, 4357, 0), + (14210, 5, 385, 4457, 0), + (14210, 6, 385, 4557, 0), + (14210, 7, 385, 4657, 0), + (14210, 8, 411, 4, 0), + (14213, 1, 264, 120, 1065), + (14218, 1, 232, 23, 4544), + (14223, 1, 264, 40, 47), + (14225, 1, 127, 16, 0), + (14225, 2, 385, 3283, 0), + (14225, 3, 411, 1024, 0), + (14238, 1, 264, 12, 1041), + (14241, 1, 264, 180, 386), + (14244, 1, 286, 100, 0), + (14244, 2, 138, 0, 0), + (14244, 3, 143, 1, 0), + (14244, 4, 348, 1, 0), + (14244, 5, 411, 64, 0), + (14249, 1, 392, 200, 0), + (14249, 2, 138, 1, 0), + (14249, 3, 348, 1, 0), + (14254, 1, 287, 1, 0), + (14254, 2, 385, 2025, 0), + (14254, 3, 385, 5121, 0), + (14254, 4, 385, 5221, 0), + (14254, 5, 385, 5562, 0), + (14259, 1, 287, 1, 0), + (14259, 2, 139, 23585, 0), + (14275, 1, 239, 20, 0), + (14278, 1, 287, 4, 0), + (14278, 2, 385, 16439, 0), + (14278, 3, 411, 32768, 0), + (14279, 1, 320, 8, 0), + (14283, 1, 127, 17, 0), + (14283, 2, 385, 3151, 0), + (14283, 3, 385, 5887, 0), + (14286, 1, 287, 1, 0), + (14286, 2, 385, 4877, 0), + (14289, 1, 127, 10, 0), + (14289, 2, 385, 2754, 0), + (14292, 1, 127, 10, 0), + (14292, 2, 385, 3286, 0), + (14295, 1, 264, 1, 3816), + (14301, 1, 405, 5, 0), + (14304, 1, 264, 45, 8341), + (14308, 1, 264, 20, 431), + (14311, 1, 264, 360, 430), + (14314, 1, 264, 8, 901), + (14318, 1, 127, 10, 0), + (14318, 2, 139, 21754, 0), + (14328, 1, 264, 6, 1154), + (14331, 1, 264, 120, 515), + (14341, 1, 264, 360, 748), + (14349, 1, 294, 0, 205), + (14361, 1, 294, 35, 109), + (14364, 1, 264, 90, 173), + (14367, 1, 445, 1, 0), + (14764, 1, 339, 10, 33950), + (14764, 2, 137, 31, 0), + (15074, 1, 264, 5, 15073), + (15100, 1, 264, 2, 467), + (15105, 1, 264, 120, 131), + (15108, 1, 310, 60000, 0), + (15108, 2, 385, 15521, 0), + (15108, 3, 411, 2, 0), + (15111, 1, 287, 1, 0), + (15111, 2, 385, 21778, 0), + (15113, 1, 287, 3, 0), + (15113, 2, 385, 21778, 0), + (15113, 3, 411, 2, 0), + (15120, 1, 264, 60, 800), + (15123, 1, 310, 120000, 0), + (15123, 2, 385, 15422, 0), + (15123, 3, 411, 2, 0), + (15126, 1, 310, 1000, 0), + (15126, 2, 385, 15212, 0), + (15126, 3, 411, 2, 0), + (15132, 1, 264, 10, 660), + (15135, 1, 287, 1, 0), + (15135, 2, 139, 32313, 0), + (15141, 1, 219, 420, 2400), + (15150, 1, 127, 10, 0), + (15150, 2, 385, 10505, 0), + (15150, 3, 385, 10105, 0), + (15150, 4, 385, 10205, 0), + (15150, 5, 385, 10305, 0), + (15150, 6, 385, 10405, 0), + (15150, 7, 385, 10605, 0), + (15153, 1, 287, 1, 0), + (15153, 2, 139, 4518, 0), + (15154, 1, 287, 1, 0), + (15154, 2, 139, 32312, 0), + (15155, 1, 287, 1, 0), + (15155, 2, 385, 10320, 0), + (15155, 3, 385, 10420, 0), + (15155, 4, 385, 10520, 0), + (15158, 1, 287, 1, 0), + (15158, 2, 385, 32307, 0), + (15159, 1, 287, 1, 0), + (15159, 2, 385, 27537, 0), + (15162, 1, 264, 120, 659), + (15168, 1, 264, 60, 657), + (15172, 1, 302, 430, 430), + (15172, 2, 385, 99, 0), + (15174, 1, 264, 40, 9400), + (15179, 1, 127, 10, 0), + (15179, 2, 139, 21804, 0), + (15179, 3, 139, 38280, 0), + (15182, 1, 264, 840, 9403), + (15188, 1, 239, 62, 0), + (15194, 1, 287, 1, 0), + (15194, 2, 385, 13407, 0), + (15194, 3, 385, 13507, 0), + (15204, 1, 264, 60, 390), + (15207, 1, 264, 60, 323), + (15217, 1, 339, 10, 38319), + (15217, 2, 385, 11006, 0), + (15217, 3, 385, 7108, 0), + (15217, 4, 385, 7208, 0), + (15217, 5, 385, 7308, 0), + (15217, 6, 385, 7408, 0), + (15217, 7, 385, 7508, 0), + (15217, 8, 385, 7608, 0), + (15220, 1, 287, 1, 0), + (15220, 2, 385, 11065, 0), + (15223, 1, 287, 1, 0), + (15223, 2, 385, 11067, 0), + (15226, 1, 287, 1, 0), + (15226, 2, 385, 11064, 0), + (15229, 1, 287, 1, 0), + (15229, 2, 385, 11066, 0), + (15232, 1, 339, 100, 38322), + (15232, 2, 385, 7518, 0), + (15238, 1, 264, 240, 621), + (15238, 2, 264, 240, 622), + (15238, 3, 264, 240, 623), + (15238, 4, 264, 240, 784), + (15238, 5, 264, 240, 785), + (15238, 6, 264, 240, 786), + (15238, 7, 264, 240, 787), + (15238, 8, 264, 240, 624), + (15253, 1, 127, 10, 0), + (15253, 2, 385, 32322, 0), + (15258, 1, 264, 540, 184), + (15270, 1, 264, 1980, 7003), + (15280, 1, 264, 720, 778), + (15283, 1, 310, 1000, 0), + (15283, 2, 385, 11402, 0), + (15283, 3, 385, 11502, 0), + (15283, 4, 385, 11441, 0), + (15283, 5, 385, 11541, 0), + (15283, 6, 385, 11641, 0), + (15288, 1, 220, 50, 0), + (15288, 2, 220, 50, 1), + (15288, 3, 220, 100, 2), + (15288, 4, 220, 100, 3), + (15288, 5, 220, 50, 36), + (15288, 6, 220, 100, 77), + (15295, 1, 127, 10, 0), + (15295, 2, 385, 21654, 0), + (15314, 1, 264, 25920, 36), + (15317, 1, 264, 1728, 35), + (15320, 1, 264, 150, 558), + (15328, 1, 339, 25, 38037), + (15328, 2, 138, 1, 0), + (15328, 3, 142, 65, 0), + (15328, 4, 137, 35, 0), + (15328, 5, 134, 90, 0), + (15328, 6, 339, 25, 38037), + (15328, 7, 138, 1, 0), + (15328, 8, 142, 65, 0), + (15328, 9, 137, 36, 0), + (15328, 10, 134, 90, 0), + (15328, 11, 339, 25, 38037), + (15328, 12, 138, 1, 0), + (15328, 13, 142, 65, 0), + (15328, 14, 137, 369, 0), + (15328, 15, 134, 90, 0), + (15328, 16, 339, 25, 38037), + (15328, 17, 138, 1, 0), + (15328, 18, 142, 65, 0), + (15328, 19, 137, 116, 0), + (15328, 20, 134, 90, 0), + (15342, 1, 287, 1, 0), + (15342, 2, 385, 23605, 0), + (15344, 1, 264, 360, 38), + (15348, 1, 264, 240, 9504), + (15356, 1, 232, 20, 4544), + (15358, 1, 287, 1, 0), + (15358, 2, 385, 32350, 0), + (15359, 1, 264, 960, 50), + (15363, 1, 264, 240, 447), + (15371, 1, 264, 1, 3729), + (15374, 1, 195, 20, 0), + (15383, 1, 310, 1000, 0), + (15383, 2, 385, 5132, 0), + (15383, 3, 385, 5232, 0), + (15383, 4, 385, 5332, 0), + (15383, 5, 385, 5432, 0), + (15383, 6, 385, 5532, 0), + (15383, 7, 385, 5032, 0), + (15383, 8, 385, 5632, 0), + (15389, 1, 127, 16, 0), + (15389, 2, 385, 23575, 0), + (15396, 1, 127, 20, 20), + (15396, 2, 137, 0, 0), + (15396, 3, 138, 0, 0), + (15396, 4, 141, 1, 0), + (15396, 5, 143, 3000, 0), + (15396, 6, 127, 20, 20), + (15396, 7, 385, 16555, 0), + (15396, 8, 385, 16655, 0), + (15397, 1, 264, 1260, 494), + (15403, 1, 264, 10, 8604), + (15406, 1, 127, 10, 10), + (15406, 2, 385, 37097, 0), + (15414, 1, 287, 1, 0), + (15414, 2, 139, 30736, 0), + (15421, 1, 264, 3600, 245), + (15422, 1, 132, 15, 15), + (15426, 1, 239, 62, 0), + (15429, 1, 220, 135, 2), + (15432, 1, 184, 5, -1), + (15438, 1, 310, 180000, 0), + (15438, 2, 385, 8316, 0), + (15438, 3, 411, 128, 0), + (15441, 1, 279, 38, 0), + (15444, 1, 288, 60, 26), + (15450, 1, 310, 3000, 0), + (15450, 2, 385, 8202, 0), + (15450, 3, 385, 8302, 0), + (15450, 4, 385, 8402, 0), + (15450, 5, 385, 8502, 0), + (15450, 6, 385, 8602, 0), + (15450, 7, 411, 128, 0), + (15453, 1, 310, 60000, 0), + (15453, 2, 385, 8421, 0), + (15453, 3, 411, 128, 0), + (15456, 1, 264, 5, 470), + (15466, 1, 126, 20, 20), + (15466, 2, 139, 12576, 0), + (15466, 3, 126, 20, 20), + (15466, 4, 139, 12828, 0), + (15469, 1, 264, 240, 1120), + (15472, 1, 264, 1260, 521), + (15478, 1, 264, 120, 578), + (15485, 1, 339, 10, 38417), + (15485, 2, 142, 96, 0), + (15485, 3, 311, 0, 0), + (15485, 4, 134, 105, 0), + (15485, 5, 348, 10, 0), + (15485, 6, 137, 0, 0), + (15485, 7, 339, 10, 38417), + (15485, 8, 142, 96, 0), + (15485, 9, 311, 0, 0), + (15485, 10, 134, 105, 0), + (15485, 11, 348, 10, 0), + (15485, 12, 137, 100, 0), + (15485, 13, 339, 10, 38417), + (15485, 14, 142, 96, 0), + (15485, 15, 311, 0, 0), + (15485, 16, 134, 105, 0), + (15485, 17, 348, 10, 0), + (15485, 18, 137, 79, 0), + (15485, 19, 339, 10, 38417), + (15485, 20, 142, 96, 0), + (15485, 21, 311, 0, 0), + (15485, 22, 134, 105, 0), + (15485, 23, 348, 10, 0), + (15485, 24, 137, 147, 0), + (15493, 1, 127, 10, 0), + (15493, 2, 137, 31, 0), + (15502, 1, 310, 240000, 0), + (15502, 2, 139, 4673, 0), + (15502, 3, 411, 512, 0), + (15509, 1, 310, 3000, 0), + (15509, 2, 385, 12315, 0), + (15509, 3, 385, 12415, 0), + (15509, 4, 385, 12515, 0), + (15509, 5, 385, 12615, 0), + (15509, 10, 411, 512, 0), + (15512, 1, 288, 50, 8), + (15516, 1, 126, 20, 0), + (15516, 2, 139, 3066, 0), + (15516, 3, 411, 256, 0), + (15517, 1, 127, 16, 0), + (15517, 2, 139, 3066, 0), + (15517, 3, 411, 256, 0), + (15526, 1, 264, 120, 3702), + (15529, 1, 247, 60, 53), + (15540, 1, 185, 5, 1), + (15543, 1, 185, 5, 0), + (15546, 1, 185, 5, 36), + (15549, 1, 264, 15, 244), + (15552, 1, 264, 840, 3710), + (15555, 1, 339, 5, 38103), + (15555, 2, 385, 3208, 0), + (15555, 3, 385, 3308, 0), + (15555, 4, 385, 3408, 0), + (15555, 5, 385, 3508, 0), + (15564, 1, 220, 68, 51), + (15571, 1, 264, 180, 351), + (15579, 1, 287, 2, 0), + (15579, 2, 139, 16106, 0), + (15585, 1, 274, 44, 0), + (15591, 1, 127, 10, 0), + (15591, 2, 139, 16839, 0), + (15598, 1, 264, 180, 759), + (15598, 2, 264, 180, 1150), + (15598, 3, 264, 180, 1151), + (15598, 4, 264, 180, 1152), + (15602, 1, 124, 1, 0), + (15602, 2, 138, 0, 0), + (15602, 3, 141, 1, 0), + (15602, 4, 348, 10, 0), + (15606, 1, 244, -25, 0), + (15609, 1, 383, 10, 38134), + (15609, 2, 141, 1, 0), + (15609, 3, 348, 10, 0), + (15609, 4, 142, 85, 0), + (15609, 5, 143, 3000, 0), + (15622, 1, 127, 5, 5), + (15622, 2, 137, 0, 0), + (15622, 3, 138, 0, 0), + (15622, 4, 141, 1, 0), + (15625, 1, 330, 10, 8), + (15632, 1, 264, 1728, 789), + (15634, 1, 310, 1500, 0), + (15634, 2, 385, 12110, 0), + (15634, 3, 385, 12210, 0), + (15634, 4, 385, 12310, 0), + (15634, 5, 385, 12410, 0), + (15634, 6, 385, 12510, 0), + (15635, 1, 310, 3000, 0), + (15635, 2, 385, 12110, 0), + (15635, 3, 385, 12210, 0), + (15635, 4, 385, 12310, 0), + (15635, 5, 385, 12410, 0), + (15635, 6, 385, 12510, 0), + (15648, 1, 185, 3, 74), + (15694, 1, 190, 550, 0), + (15714, 1, 320, 12, 0), + (15719, 1, 320, 12, 0), + (15746, 1, 421, 20, 0), + (15746, 2, 139, 16097, 0), + (15746, 3, 139, 23612, 0), + (15746, 4, 139, 32196, 0), + (15746, 5, 139, 32565, 0), + (15746, 6, 423, 6, 0), + (15746, 7, 422, 5, 0), + (15746, 8, 411, 2, 0), + (15768, 1, 125, 1, 2), + (15768, 2, 136, 46, 0), + (15772, 1, 128, 80, 80), + (15772, 2, 138, 1, 0), + (15772, 3, 140, 1, 0), + (15772, 4, 311, 0, 0), + (15772, 5, 411, 66434, 0), + (15772, 6, 137, -40, 0), + (15773, 1, 128, 80, 80), + (15773, 2, 138, 1, 0), + (15773, 3, 140, 1, 0), + (15773, 4, 311, 0, 0), + (15773, 5, 411, 256, 0), + (15773, 6, 137, -40, 0), + (15773, 7, 391, 1, 0), + (15778, 1, 303, 27500, 32500), + (15778, 2, 139, 2766, 0), + (15833, 1, 264, 60, 2045), + (15836, 1, 264, 60, 463), + (15891, 1, 264, 20, 988), + (15893, 1, 264, 20, 987), + (15895, 1, 264, 20, 986), + (15908, 1, 220, 125, 0), + (15908, 2, 220, 200, 2), + (15909, 1, 220, 155, 0), + (15909, 2, 220, 290, 2), + (15910, 1, 220, 185, 0), + (15910, 2, 220, 385, 2), + (15954, 1, 292, 49, 0), + (15961, 1, 129, 20, 0), + (15961, 2, 385, 12768, 0), + (15961, 3, 411, 256, 0), + (16062, 1, 339, 20, 40941), + (16062, 2, 138, 0, 0), + (16062, 3, 137, 31, 0), + (16062, 4, 311, 0, 0), + (16084, 1, 158, 1, 0), + (16087, 1, 264, 432, 53), + (16094, 1, 264, 3024, 43), + (16104, 1, 10, 0, 0), + (16109, 1, 69, 3000, 0), + (16114, 1, 114, 2, 0), + (16117, 1, 171, 2, 0), + (16120, 1, 226, 1, 0), + (16121, 1, 310, 840000, 0), + (16121, 2, 139, 4670, 0), + (16124, 1, 264, 2, 3711), + (16128, 1, 127, 8, 0), + (16128, 2, 139, 13143, 0), + (16131, 1, 130, 10, 0), + (16131, 2, 385, 18000, 0), + (16137, 1, 287, 1, 0), + (16137, 2, 385, 21821, 0), + (16140, 1, 287, 1, 0), + (16140, 2, 385, 30666, 0), + (16146, 1, 339, 2, 41107), + (16146, 2, 142, 95, 0), + (16146, 3, 138, 1, 0), + (16146, 4, 137, 0, 0), + (16146, 5, 348, 10, 0), + (16146, 6, 141, 1, 0), + (16149, 1, 129, 20, 0), + (16149, 2, 385, 4357, 0), + (16149, 3, 385, 4457, 0), + (16149, 4, 385, 4557, 0), + (16149, 5, 411, 4, 0), + (16152, 1, 339, 3, 41108), + (16152, 2, 142, 90, 0), + (16152, 3, 138, 0, 0), + (16152, 4, 137, 0, 0), + (16152, 5, 348, 10, 0), + (16152, 6, 141, 1, 0), + (16156, 1, 392, 1000, 0), + (16156, 2, 385, 32341, 0), + (16159, 1, 287, 1, 0), + (16159, 2, 385, 32307, 0), + (16164, 1, 294, 0, 195), + (16170, 1, 360, 70, 41119), + (16173, 1, 320, 12, 0), + (16176, 1, 264, 2, 337), + (16179, 1, 288, 8, 7), + (16180, 1, 264, 5, 584), + (16186, 1, 288, 100, 30), + (16189, 1, 339, 12, 41127), + (16189, 2, 138, 0, 0), + (16189, 3, 142, 70, 0), + (16189, 4, 411, 32, 0), + (16189, 5, 348, 1, 0), + (16189, 6, 141, 1, 0), + (16192, 1, 339, 12, 41130), + (16192, 2, 138, 0, 0), + (16192, 3, 142, 70, 0), + (16192, 4, 403, 4, 0), + (16192, 5, 348, 1, 0), + (16192, 6, 404, 2, 0), + (16192, 7, 141, 1, 0), + (16208, 1, 247, 5, 27), + (16211, 1, 287, 1, 0), + (16211, 2, 139, 23581, 0), + (16211, 3, 139, 32359, 0), + (16218, 1, 264, 10, 403), + (16221, 1, 287, 1, 0), + (16221, 2, 385, 23586, 0), + (16225, 1, 264, 1, 219), + (16230, 1, 310, 1000, 0), + (16230, 2, 385, 2431, 0), + (16230, 3, 385, 2531, 0), + (16230, 4, 385, 2545, 0), + (16230, 5, 385, 2631, 0), + (16235, 1, 126, 35, 0), + (16235, 2, 134, 100, 0), + (16235, 3, 135, 3, 0), + (16238, 1, 287, 2, 0), + (16238, 2, 385, 23693, 0), + (16238, 3, 460, 1, 0), + (16249, 1, 275, 100, 0), + (16257, 1, 429, 37114, 2), + (16257, 2, 428, 52, 0), + (16260, 1, 427, 41160, 3), + (16260, 2, 428, 23, 0), + (16266, 1, 224, 50, 8), + (16266, 2, 173, 4, 0), + (16267, 1, 250, 52, 0), + (16272, 1, 175, 2, 0), + (16276, 1, 247, 10, 36), + (16287, 1, 264, 20, 669), + (16297, 1, 264, 600, 553), + (16300, 1, 264, 60, 668), + (16303, 1, 264, 240, 3506), + (16306, 1, 264, 1260, 777), + (16317, 1, 220, 100, -1), + (16327, 1, 310, 720000, 0), + (16327, 2, 139, 5040, 0), + (16330, 1, 330, 105, 74), + (16336, 1, 264, 30, 1257), + (16339, 1, 264, 10, 773), + (16342, 1, 127, 10, 0), + (16342, 2, 385, 38115, 0), + (16361, 1, 399, 5, 0), + (16361, 2, 141, 1, 0), + (16361, 3, 138, 0, 0), + (16361, 4, 134, 254, 0), + (16361, 5, 348, 10, 0), + (16361, 6, 137, 0, 0), + (16361, 7, 311, 0, 0), + (16361, 8, 137, -152, 0), + (16361, 9, 137, -39, 0), + (16366, 1, 286, 200, 0), + (16366, 2, 138, 0, 0), + (16366, 3, 143, 1, 0), + (16366, 4, 348, 10, 0), + (16371, 1, 129, 20, 0), + (16371, 2, 385, 2754, 0), + (16380, 1, 264, 30, 2061), + (16386, 1, 264, 10, 2064), + (16392, 1, 264, 90, 2202), + (16396, 1, 127, 5, 5), + (16396, 2, 137, 0, 0), + (16396, 3, 138, 0, 0), + (16396, 4, 141, 1, 0), + (16402, 1, 131, 60, 60), + (16402, 2, 348, 10, 0), + (16402, 3, 137, -32, 0), + (16414, 1, 317, 16, 0), + (16419, 1, 426, 6, 0), + (16420, 1, 426, 7, 0), + (16421, 1, 426, 8, 0), + (16440, 1, 247, 65, 76), + (16475, 1, 218, 4, 0), + (16489, 1, 294, 29, 102), + (16536, 1, 405, 3, 0), + (16604, 1, 264, 1440, 180), + (16644, 1, 264, 60, 747), + (16666, 1, 264, 60, 742), + (16730, 1, 347, 31, 0), + (16745, 1, 264, 60, 706), + (16887, 1, 280, 75, 0), + (16890, 1, 218, 21, 0), + (17004, 1, 225, 35, 0), + (17206, 1, 264, 12, 601), + (17209, 1, 264, 180, 111), + (17212, 1, 264, 60, 10367), + (17215, 1, 378, 2, 22), + (17215, 2, 378, 2, 31), + (17215, 3, 378, 2, 3), + (17215, 4, 378, 2, 20), + (17218, 1, 127, 10, 0), + (17218, 2, 139, 27560, 0), + (17229, 1, 220, 900, 3), + (17229, 2, 220, 900, 2), + (17229, 3, 220, 900, 77), + (17235, 1, 127, 15, 0), + (17235, 2, 385, 12609, 0), + (17239, 1, 310, 2400000, 0), + (17239, 2, 139, 4500, 0), + (17239, 3, 411, 8, 0), + (17242, 1, 378, 1, 22), + (17242, 2, 378, 1, 31), + (17242, 3, 378, 1, 3), + (17242, 4, 378, 1, 20), + (17245, 1, 378, 1, 22), + (17245, 2, 378, 1, 31), + (17245, 3, 378, 1, 3), + (17245, 4, 378, 1, 20), + (17249, 1, 264, 120, 651), + (17252, 1, 310, 3000, 0), + (17252, 2, 385, 13438, 0), + (17252, 3, 385, 13538, 0), + (17252, 4, 385, 13638, 0), + (17258, 1, 399, 2, 0), + (17258, 2, 137, 457, 0), + (17258, 3, 399, 2, 0), + (17258, 4, 134, 253, 0), + (17258, 5, 142, 100, 0), + (17258, 6, 138, 0, 0), + (17258, 7, 136, 13, 0), + (17258, 8, 136, 20, 0), + (17258, 9, 137, -39, 0), + (17267, 1, 127, 10, 0), + (17267, 2, 385, 13507, 0), + (17267, 3, 385, 13107, 0), + (17267, 4, 385, 13207, 0), + (17267, 5, 385, 13307, 0), + (17267, 6, 385, 13407, 0), + (17267, 7, 385, 13607, 0), + (17281, 1, 287, 1, 0), + (17281, 2, 385, 16646, 0), + (17288, 1, 264, 1440, 41), + (17289, 1, 264, 180, 1062), + (17295, 1, 229, 62, 0), + (17307, 1, 127, 8, 0), + (17307, 2, 139, 38058, 0), + (17310, 1, 310, 14000, 0), + (17310, 2, 139, 8007, 0), + (17310, 3, 310, 14000, 0), + (17310, 4, 385, 4140, 0), + (17310, 5, 385, 4240, 0), + (17310, 6, 385, 4340, 0), + (17310, 7, 385, 4440, 0), + (17310, 8, 385, 4540, 0), + (17310, 9, 385, 4640, 0), + (17317, 1, 264, 60, 1270), + (17334, 1, 287, 12, 0), + (17334, 2, 385, 16188, 0), + (17336, 1, 287, 1, 0), + (17336, 2, 385, 32348, 0), + (17339, 1, 264, 12, 760), + (17350, 1, 264, 110, 170), + (17357, 1, 287, 1, 0), + (17357, 2, 137, 100, 0), + (17357, 3, 138, 1, 0), + (17361, 1, 264, 60, 405), + (17361, 2, 264, 60, 426), + (17365, 1, 287, 6, 0), + (17365, 2, 385, 5240, 0), + (17365, 3, 385, 5340, 0), + (17365, 4, 385, 5440, 0), + (17365, 5, 385, 5540, 0), + (17365, 6, 385, 5640, 0), + (17370, 1, 287, 1, 0), + (17370, 2, 138, 0, 0), + (17370, 3, 137, 0, 0), + (17370, 4, 137, 100, 0), + (17370, 5, 140, 1, 0), + (17370, 6, 348, 10, 0), + (17375, 1, 127, 10, 0), + (17375, 2, 385, 38078, 0), + (17391, 1, 264, 1560, 98), + (17406, 1, 310, 480000, 0), + (17406, 2, 139, 4502, 0), + (17406, 3, 139, 4509, 0), + (17409, 1, 214, 205, 0), + (17409, 2, 259, 4, 0), + (17409, 3, 172, 4, 0), + (17414, 1, 264, 120, 673), + (17418, 1, 247, 10, 74), + (17428, 1, 288, 5, 51), + (17436, 1, 264, 60, 372), + (17439, 1, 287, 1, 0), + (17439, 2, 385, 6040, 0), + (17441, 1, 279, 37, 0), + (17445, 1, 310, 60000, 0), + (17445, 2, 385, 3312, 0), + (17448, 1, 287, 1, 0), + (17448, 2, 385, 14005, 0), + (17448, 3, 385, 3519, 0), + (17476, 1, 264, 240, 462), + (17492, 1, 264, 120, 840), + (17495, 1, 264, 20, 9702), + (17515, 1, 127, 25, 0), + (17515, 2, 385, 7125, 0), + (17517, 1, 127, 17, 0), + (17517, 2, 385, 23683, 0), + (17517, 3, 460, 1, 0), + (17522, 1, 264, 30, 764), + (17533, 1, 287, 1, 0), + (17533, 2, 139, 32399, 0), + (17533, 3, 460, 1, 0), + (17547, 1, 287, 1, 0), + (17547, 2, 137, 0, 0), + (17547, 3, 137, 100, 0), + (17547, 4, 140, 2, 0), + (17547, 5, 138, 0, 0), + (17547, 6, 348, 10, 0), + (17549, 1, 264, 10, 8700), + (17553, 1, 339, 8, 41768), + (17553, 2, 138, 0, 0), + (17553, 3, 141, 1, 0), + (17553, 4, 134, 253, 0), + (17553, 5, 142, 85, 0), + (17553, 6, 143, 1, 0), + (17553, 7, 311, 0, 0), + (17553, 8, 348, 1, 0), + (17553, 9, 137, 0, 0), + (17554, 1, 227, 2, 74), + (17555, 1, 286, 126, 2), + (17555, 2, 385, 9606, 0), + (17555, 3, 303, 252, 0), + (17555, 4, 385, 9606, 0), + (17558, 1, 413, 2, 2), + (17558, 2, 385, 9603, 0), + (17558, 3, 411, 2048, 0), + (17561, 1, 413, 2, 2), + (17561, 2, 385, 9609, 0), + (17561, 3, 411, 2048, 0), + (17564, 1, 413, 2, 2), + (17564, 2, 385, 9619, 0), + (17564, 3, 411, 2048, 0), + (17567, 1, 413, 2, 2), + (17567, 2, 385, 9613, 0), + (17567, 3, 411, 2048, 0), + (17570, 1, 413, 2, 2), + (17570, 2, 385, 9604, 0), + (17570, 3, 411, 2048, 0), + (17573, 1, 413, 2, 2), + (17573, 2, 385, 9651, 0), + (17573, 3, 411, 2048, 0), + (17576, 1, 413, 2, 2), + (17576, 2, 385, 16652, 0), + (17576, 3, 411, 4096, 0), + (17579, 1, 413, 2, 2), + (17579, 2, 385, 16629, 0), + (17579, 3, 411, 4096, 0), + (17582, 1, 413, 2, 2), + (17582, 2, 385, 16650, 0), + (17582, 3, 411, 4096, 0), + (17585, 1, 413, 2, 2), + (17585, 2, 385, 16608, 0), + (17585, 3, 411, 4096, 0), + (17588, 1, 413, 2, 2), + (17588, 2, 385, 16615, 0), + (17588, 3, 411, 4096, 0), + (17591, 1, 413, 2, 2), + (17591, 2, 385, 16618, 0), + (17591, 3, 411, 4096, 0), + (17594, 1, 413, 2, 2), + (17594, 2, 385, 16625, 0), + (17594, 3, 411, 4096, 0), + (17597, 1, 286, 345, 0), + (17597, 2, 385, 7604, 0), + (17600, 1, 413, 2, 2), + (17600, 2, 385, 7608, 0), + (17600, 3, 411, 8192, 0), + (17603, 1, 413, 2, 2), + (17603, 2, 385, 7612, 0), + (17603, 3, 411, 8192, 0), + (17606, 1, 392, 419, 0), + (17606, 2, 385, 7613, 0), + (17606, 3, 396, 838, 0), + (17606, 4, 385, 7613, 0), + (17609, 1, 413, 2, 2), + (17609, 2, 385, 7636, 0), + (17609, 3, 411, 8192, 0), + (17612, 1, 413, 2, 2), + (17612, 2, 385, 7618, 0), + (17612, 3, 411, 8192, 0), + (17615, 1, 286, 539, 0), + (17615, 2, 385, 7638, 0), + (17618, 1, 413, 2, 2), + (17618, 2, 385, 6664, 0), + (17618, 3, 411, 16384, 0), + (17621, 1, 413, 2, 2), + (17621, 2, 385, 6648, 0), + (17621, 3, 411, 16384, 0), + (17624, 1, 413, 2, 2), + (17624, 2, 385, 6649, 0), + (17624, 3, 411, 16384, 0), + (17627, 1, 413, 2, 2), + (17627, 2, 385, 6611, 0), + (17627, 3, 411, 16384, 0), + (17630, 1, 413, 2, 2), + (17630, 2, 385, 6652, 0), + (17630, 3, 411, 16384, 0), + (17633, 1, 413, 2, 2), + (17633, 2, 385, 6655, 0), + (17633, 3, 411, 16384, 0), + (17639, 1, 323, 37182, 100), + (18972, 1, 214, 210, 0), + (18972, 2, 259, 5, 0), + (18972, 3, 172, 5, 0), + (30050, 1, 69, 25, 0), + (30050, 2, 97, 25, 0), + (30050, 3, 190, 25, 0), + (30050, 4, 328, 25, 0), + (30100, 1, 1, 10, 0), + (30100, 2, 2, 10, 0), + (30100, 3, 341, 10, 0), + (30150, 1, 262, 5, 0), + (30150, 2, 262, 5, 1), + (30150, 3, 262, 5, 2), + (30150, 4, 262, 5, 3), + (30150, 5, 262, 5, 4), + (30150, 6, 262, 5, 5), + (30150, 7, 262, 5, 6), + (30150, 8, 159, 5, 0), + (30150, 9, 0, 2, 0), + (30150, 10, 15, 2, 0), + (30150, 11, 189, 2, 0), + (30150, 12, 317, 2, 0), + (30150, 13, 318, 2, 0), + (30175, 1, 271, 1, 0), + (30180, 1, 264, 1, 8202), + (30185, 1, 264, 1, 1011), + (30195, 1, 432, 1, 0), + (49999, 1, 10, 0, 0); + +DROP TABLE IF EXISTS `aa_rank_prereqs`; +CREATE TABLE IF NOT EXISTS `aa_rank_prereqs` ( + `rank_id` int(10) unsigned NOT NULL, + `aa_id` int(10) NOT NULL, + `points` int(10) NOT NULL, + PRIMARY KEY (`rank_id`,`aa_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO `aa_rank_prereqs` (`rank_id`, `aa_id`, `points`) VALUES + (129, 19, 3), + (131, 19, 3), + (136, 19, 3), + (141, 23, 3), + (142, 23, 3), + (143, 23, 3), + (146, 224, 3), + (162, 224, 3), + (190, 30, 3), + (191, 30, 3), + (192, 30, 3), + (195, 31, 3), + (230, 17, 3), + (231, 17, 3), + (232, 17, 3), + (255, 309, 3), + (256, 309, 3), + (257, 309, 3), + (260, 31, 3), + (261, 31, 3), + (262, 31, 3), + (263, 17, 3), + (264, 17, 3), + (265, 17, 3), + (267, 23, 3), + (268, 23, 3), + (269, 23, 3), + (446, 26, 3), + (447, 26, 3), + (448, 26, 3), + (462, 39, 1), + (463, 39, 1), + (464, 39, 1), + (468, 41, 1), + (469, 41, 1), + (470, 41, 1), + (471, 57, 1), + (472, 57, 1), + (473, 57, 1), + (474, 50, 1), + (475, 50, 1), + (476, 50, 1), + (477, 43, 1), + (478, 43, 1), + (479, 43, 1), + (480, 117, 1), + (481, 117, 1), + (482, 117, 1), + (483, 58, 1), + (484, 58, 1), + (485, 58, 1), + (489, 110, 1), + (490, 110, 1), + (491, 110, 1), + (492, 109, 1), + (493, 109, 1), + (494, 109, 1), + (495, 98, 1), + (496, 98, 1), + (497, 98, 1), + (498, 102, 1), + (499, 102, 1), + (500, 102, 1), + (501, 107, 1), + (502, 107, 1), + (503, 107, 1), + (531, 19, 3), + (532, 19, 3), + (534, 6001, 11), + (535, 6001, 11), + (536, 6001, 11), + (537, 112, 3), + (538, 112, 3), + (539, 17, 3), + (540, 17, 3), + (541, 17, 3), + (542, 309, 3), + (543, 309, 3), + (544, 309, 3), + (567, 45, 1), + (574, 125, 1), + (575, 125, 1), + (576, 125, 1), + (583, 73, 1), + (584, 73, 1), + (585, 73, 1), + (586, 120, 1), + (587, 120, 1), + (588, 120, 1), + (589, 87, 1), + (590, 87, 1), + (591, 87, 1), + (592, 30, 1), + (593, 6001, 11), + (594, 6001, 11), + (595, 6001, 11), + (596, 6000, 11), + (597, 6000, 11), + (598, 6000, 11), + (637, 23, 3), + (638, 23, 3), + (639, 23, 3), + (640, 23, 3), + (641, 23, 3), + (642, 23, 3), + (643, 55, 1), + (644, 82, 1), + (702, 30, 1), + (703, 30, 1), + (704, 30, 1), + (705, 30, 1), + (706, 30, 1), + (715, 6001, 11), + (716, 6001, 11), + (717, 6001, 11), + (754, 153, 3), + (755, 153, 3), + (756, 153, 3), + (770, 23, 3), + (771, 23, 3), + (772, 23, 3), + (773, 217, 1), + (774, 217, 1), + (775, 217, 1), + (782, 35, 1), + (783, 35, 1), + (784, 35, 1), + (806, 81, 1), + (849, 180, 3), + (850, 180, 3), + (851, 180, 3), + (886, 102, 1), + (887, 102, 1), + (893, 87, 1), + (894, 87, 1), + (924, 23, 3), + (925, 23, 3), + (931, 23, 1), + (932, 23, 1), + (933, 23, 1), + (975, 102, 1), + (1018, 227, 3), + (1041, 30, 6), + (1042, 30, 6), + (1043, 30, 6), + (1044, 310, 6), + (1045, 310, 6), + (1046, 310, 6), + (1047, 311, 3), + (1048, 311, 3), + (1049, 311, 3), + (1050, 309, 6), + (1051, 309, 6), + (1052, 309, 6), + (1102, 30, 1), + (1103, 30, 1), + (1104, 30, 1), + (1105, 30, 1), + (1106, 30, 1), + (1107, 23, 3), + (1108, 23, 3), + (1109, 23, 3), + (1110, 187, 5), + (1111, 187, 5), + (1112, 187, 5), + (1122, 176, 2), + (1126, 58, 1), + (1127, 58, 1), + (1128, 58, 1), + (1129, 125, 1), + (1130, 125, 1), + (1150, 189, 3), + (1151, 189, 3), + (1152, 189, 3), + (1163, 309, 3), + (1164, 309, 3), + (1165, 309, 3), + (1203, 19, 3), + (1204, 19, 3), + (1205, 19, 3), + (1210, 114, 6), + (1211, 114, 6), + (1212, 114, 6), + (1213, 215, 6), + (1214, 215, 6), + (1215, 215, 6), + (1242, 173, 3), + (1243, 173, 3), + (1244, 173, 3), + (1251, 61, 1), + (1252, 64, 1), + (1253, 62, 1), + (1254, 63, 1), + (1274, 175, 3), + (1275, 175, 3), + (1276, 175, 3), + (1278, 6001, 11), + (1279, 6001, 11), + (1280, 6001, 11), + (1323, 47, 1), + (1337, 308, 3), + (1338, 308, 3), + (1339, 308, 3), + (1414, 451, 1), + (1415, 451, 1), + (1416, 451, 1), + (1417, 451, 1), + (1418, 451, 1), + (1420, 17, 3), + (1421, 17, 3), + (1422, 17, 3), + (1423, 17, 3), + (1424, 17, 3), + (1425, 374, 3), + (1426, 374, 3), + (1427, 374, 3), + (1428, 374, 3), + (1429, 374, 3), + (1435, 20, 3), + (1436, 20, 3), + (1437, 20, 3), + (1458, 375, 3), + (1459, 255, 5), + (1460, 255, 5), + (1461, 255, 5), + (1471, 362, 1), + (1472, 362, 1), + (1473, 362, 1), + (1474, 362, 1), + (1475, 362, 1), + (1483, 114, 6), + (1484, 114, 6), + (1485, 114, 6), + (1486, 19, 7), + (1487, 19, 7), + (1488, 19, 7), + (1489, 19, 7), + (1490, 19, 7), + (1494, 80, 1), + (1495, 185, 6), + (1496, 185, 6), + (1497, 185, 6), + (1501, 46, 1), + (1502, 46, 1), + (1503, 46, 1), + (1504, 60, 1), + (1505, 60, 1), + (1506, 60, 1), + (1511, 175, 3), + (1512, 175, 3), + (1513, 175, 3), + (1514, 259, 6), + (1515, 259, 6), + (1516, 259, 6), + (1524, 30, 3), + (1525, 30, 3), + (1526, 30, 3), + (1543, 439, 3), + (1544, 439, 3), + (1545, 439, 3), + (1546, 420, 1), + (1547, 420, 1), + (1548, 420, 1), + (1552, 13, 5), + (1553, 13, 5), + (1554, 13, 5), + (1555, 359, 3), + (1556, 359, 3), + (1557, 359, 3), + (1558, 46, 1), + (1559, 46, 1), + (1560, 46, 1), + (1572, 263, 1), + (1573, 263, 1), + (1574, 263, 1), + (1575, 263, 1), + (1576, 263, 1), + (1577, 58, 1), + (1578, 58, 1), + (1579, 58, 1), + (1583, 300, 6), + (1584, 300, 6), + (1585, 300, 6), + (1586, 300, 6), + (1587, 300, 6), + (1591, 222, 3), + (1601, 82, 1), + (1602, 82, 1), + (1603, 82, 1), + (1608, 82, 3), + (1609, 82, 3), + (1610, 82, 3), + (1611, 181, 2), + (1612, 181, 2), + (1613, 181, 2), + (1614, 181, 2), + (1615, 181, 2), + (1627, 13, 5), + (1628, 13, 5), + (1629, 13, 5), + (1638, 224, 3), + (1639, 565, 1), + (1640, 793, 1), + (1641, 121, 3), + (1642, 121, 3), + (1643, 77, 1), + (1644, 85, 1), + (1645, 77, 1), + (1646, 85, 1), + (1656, 153, 1), + (1657, 153, 1), + (1659, 285, 1), + (1660, 285, 1), + (1667, 570, 1), + (2400, 38, 1), + (2401, 38, 1), + (2402, 38, 1), + (3676, 35, 1), + (4666, 435, 3), + (4667, 435, 3), + (4668, 435, 3), + (4669, 435, 3), + (4670, 435, 3), + (4688, 497, 5), + (4689, 497, 5), + (4690, 497, 5), + (4691, 497, 5), + (4692, 497, 5), + (4707, 30, 6), + (4708, 30, 6), + (4709, 30, 6), + (4710, 310, 6), + (4711, 310, 6), + (4712, 310, 6), + (4713, 311, 3), + (4714, 311, 3), + (4715, 311, 3), + (4716, 309, 6), + (4717, 309, 6), + (4718, 309, 6), + (4749, 23, 3), + (4750, 23, 3), + (4751, 23, 3), + (4752, 114, 6), + (4753, 114, 6), + (4754, 114, 6), + (4755, 215, 6), + (4756, 215, 6), + (4757, 215, 6), + (4761, 526, 3), + (4762, 526, 3), + (4763, 526, 3), + (4773, 20, 3), + (4795, 309, 3), + (4796, 309, 3), + (4797, 309, 3), + (4829, 420, 1), + (4830, 420, 1), + (4831, 420, 1), + (4844, 435, 3), + (4845, 435, 3), + (4846, 435, 3), + (4847, 435, 3), + (4848, 435, 3), + (4861, 68, 1), + (4862, 68, 1), + (4863, 68, 1), + (4864, 175, 3), + (4865, 175, 3), + (4866, 175, 3), + (4887, 413, 3), + (4888, 413, 3), + (4889, 413, 3), + (4890, 57, 1), + (4894, 409, 3), + (4895, 409, 3), + (4896, 409, 3), + (4903, 784, 1), + (4906, 785, 1), + (4909, 786, 1), + (4912, 787, 1), + (4915, 794, 1), + (4916, 794, 1), + (4917, 794, 1), + (4921, 117, 1), + (4922, 117, 1), + (4923, 117, 1), + (4924, 740, 3), + (4925, 740, 3), + (4926, 740, 3), + (4931, 173, 8), + (4932, 173, 8), + (4933, 173, 8), + (4951, 439, 3), + (4952, 439, 3), + (4953, 439, 3), + (4975, 30, 1), + (4976, 30, 1), + (4977, 30, 1), + (4978, 30, 1), + (4979, 30, 1), + (4986, 82, 1), + (4987, 82, 1), + (4988, 82, 1), + (4989, 82, 3), + (4990, 82, 3), + (4991, 82, 3), + (5010, 35, 1), + (5011, 35, 1), + (5012, 35, 1), + (5038, 30, 3), + (5039, 30, 3), + (5040, 30, 3), + (5041, 6001, 11), + (5042, 6001, 11), + (5043, 6001, 11), + (5061, 45, 1), + (5069, 224, 3), + (5070, 19, 3), + (5071, 19, 3), + (5072, 19, 3), + (5080, 255, 5), + (5081, 255, 5), + (5082, 255, 5), + (5098, 73, 2), + (5118, 396, 1), + (5119, 396, 1), + (5120, 396, 1), + (5127, 261, 3), + (5128, 261, 3), + (5129, 261, 3), + (5133, 23, 3), + (5134, 23, 3), + (5135, 23, 3), + (5136, 496, 5), + (5137, 496, 5), + (5138, 496, 5), + (5139, 496, 5), + (5140, 496, 5), + (5251, 447, 3), + (5252, 447, 3), + (5253, 447, 3), + (5264, 278, 5), + (5265, 278, 5), + (5266, 278, 5), + (5267, 278, 5), + (5268, 278, 5), + (5270, 87, 1), + (5271, 87, 1), + (5272, 87, 1), + (5286, 23, 3), + (5287, 23, 3), + (5288, 23, 3), + (5311, 185, 6), + (5312, 185, 6), + (5313, 185, 6), + (5330, 1685, 1), + (5333, 1685, 1), + (5336, 1685, 1), + (5339, 1685, 1), + (5342, 1685, 1), + (5347, 1685, 1), + (5348, 1685, 1), + (5350, 707, 4), + (5350, 1685, 1), + (5353, 1685, 1), + (5356, 1685, 1), + (5357, 1685, 1), + (5360, 1685, 1), + (5363, 447, 3), + (5363, 1685, 1), + (5366, 1685, 1), + (5369, 1685, 1), + (5513, 58, 1), + (5514, 58, 1), + (5515, 58, 1), + (5529, 19, 7), + (5530, 19, 7), + (5531, 19, 7), + (5532, 19, 7), + (5533, 19, 7), + (5542, 30, 6), + (5543, 30, 6), + (5544, 30, 6), + (5545, 310, 6), + (5546, 310, 6), + (5547, 310, 6), + (5548, 311, 3), + (5549, 311, 3), + (5550, 311, 3), + (5551, 309, 6), + (5552, 309, 6), + (5553, 309, 6), + (5571, 23, 3), + (5572, 23, 3), + (5573, 23, 3), + (5574, 114, 6), + (5575, 114, 6), + (5576, 114, 6), + (5577, 215, 6), + (5578, 215, 6), + (5579, 215, 6), + (5595, 309, 3), + (5596, 309, 3), + (5597, 309, 3), + (5607, 794, 1), + (5608, 794, 1), + (5609, 794, 1), + (5617, 23, 3), + (5618, 23, 3), + (5619, 23, 3), + (5702, 30, 1), + (5703, 30, 1), + (5704, 30, 1), + (5705, 30, 1), + (5706, 30, 1), + (5759, 374, 3), + (5760, 374, 3), + (5761, 374, 3), + (5762, 374, 3), + (5763, 374, 3), + (5791, 19, 3), + (5792, 19, 3), + (5793, 19, 3), + (5797, 396, 1), + (5798, 396, 1), + (5799, 396, 1), + (5803, 255, 5), + (5804, 255, 5), + (5805, 255, 5), + (5806, 30, 3), + (5807, 30, 3), + (5808, 30, 3), + (5825, 45, 1), + (5826, 185, 6), + (5827, 185, 6), + (5828, 185, 6), + (5854, 217, 1), + (5855, 217, 1), + (5856, 217, 1), + (5857, 173, 3), + (5858, 173, 3), + (5859, 173, 3), + (5869, 57, 1), + (5871, 57, 1), + (5872, 57, 1), + (5880, 60, 1), + (5881, 60, 1), + (5882, 60, 1), + (5886, 58, 1), + (5887, 58, 1), + (5888, 58, 1), + (5892, 784, 1), + (5893, 785, 1), + (5894, 786, 1), + (5895, 787, 1), + (5939, 278, 5), + (5940, 278, 5), + (5941, 278, 5), + (5942, 278, 5), + (5943, 278, 5), + (5944, 740, 3), + (5945, 740, 3), + (5946, 740, 3), + (5947, 175, 3), + (5948, 175, 3), + (5949, 175, 3), + (5950, 175, 3), + (5951, 175, 3), + (5952, 175, 3), + (5954, 68, 1), + (5955, 68, 1), + (5956, 68, 1), + (5969, 6001, 11), + (5970, 6001, 11), + (5971, 6001, 11), + (5972, 6001, 11), + (5973, 6000, 11), + (5984, 702, 1), + (6017, 82, 1), + (6018, 82, 1), + (6019, 82, 1), + (6026, 826, 1), + (6027, 826, 1), + (6028, 826, 1), + (6042, 439, 3), + (6043, 439, 3), + (6044, 439, 3), + (6054, 173, 8), + (6055, 173, 8), + (6056, 173, 8), + (6063, 87, 1), + (6064, 87, 1), + (6065, 87, 1), + (6088, 392, 1), + (6089, 392, 1), + (6090, 392, 1), + (6092, 447, 3), + (6093, 447, 3), + (6094, 447, 3), + (6102, 224, 3), + (6106, 308, 3), + (6107, 308, 3), + (6108, 308, 3), + (6109, 308, 3), + (6110, 308, 3), + (6111, 308, 3), + (6130, 120, 1), + (6131, 120, 1), + (6132, 120, 1), + (6136, 300, 6), + (6158, 308, 3), + (6159, 308, 3), + (6160, 308, 3), + (6209, 245, 3), + (6210, 245, 3), + (6211, 245, 3), + (6228, 404, 1), + (6229, 404, 1), + (6230, 404, 1), + (6231, 404, 1), + (6233, 43, 1), + (6234, 43, 1), + (6235, 43, 1), + (6260, 98, 1), + (6261, 98, 1), + (6262, 98, 1), + (6272, 672, 1), + (6273, 672, 1), + (6274, 672, 1), + (6275, 790, 1), + (6276, 790, 1), + (6277, 790, 1), + (6302, 3710, 1), + (6303, 3710, 1), + (6304, 3710, 1), + (6319, 107, 1), + (6320, 107, 1), + (6321, 107, 1), + (6333, 125, 1), + (6337, 553, 1), + (6338, 553, 1), + (6339, 553, 1), + (6340, 777, 1), + (6341, 777, 1), + (6342, 777, 1), + (6346, 494, 3), + (6347, 494, 3), + (6348, 494, 3), + (6349, 500, 3), + (6350, 500, 3), + (6351, 500, 3), + (6352, 409, 3), + (6353, 409, 3), + (6354, 409, 3), + (6380, 128, 3), + (6381, 128, 3), + (6382, 128, 3), + (6400, 187, 5), + (6401, 187, 5), + (6402, 187, 5), + (6403, 23, 3), + (6404, 23, 3), + (6405, 23, 3), + (6439, 41, 1), + (6440, 41, 1), + (6441, 420, 1), + (6442, 362, 1), + (6443, 362, 1), + (6445, 176, 1), + (6446, 176, 1), + (6447, 176, 1), + (6478, 3800, 1), + (6479, 3800, 1), + (6480, 3800, 1), + (6481, 36, 1), + (6482, 36, 1), + (6483, 36, 1), + (6484, 558, 1), + (6485, 558, 1), + (6486, 558, 1), + (6499, 611, 1), + (6500, 526, 3), + (6501, 526, 3), + (6502, 526, 3), + (6503, 172, 1), + (6504, 172, 1), + (6505, 172, 1), + (6506, 172, 1), + (6514, 404, 1), + (6515, 404, 1), + (6516, 404, 1), + (6517, 20, 1), + (6528, 107, 1), + (6630, 278, 5), + (6631, 278, 5), + (6632, 278, 5), + (6633, 278, 5), + (6634, 278, 5), + (6636, 358, 3), + (6637, 358, 3), + (6638, 358, 3), + (6668, 672, 3), + (6669, 672, 3), + (6670, 672, 3), + (6697, 857, 1), + (6698, 857, 1), + (6699, 857, 1), + (6700, 857, 1), + (6701, 857, 1), + (6703, 171, 1), + (6704, 171, 1), + (6705, 171, 1), + (6712, 177, 1), + (6713, 177, 1), + (6714, 177, 1), + (6715, 177, 1), + (6716, 177, 1), + (6755, 184, 3), + (6756, 184, 3), + (6757, 184, 3), + (6819, 524, 1), + (6820, 524, 1), + (6821, 524, 1), + (6823, 320, 1), + (6824, 320, 1), + (6825, 320, 1), + (6826, 320, 1), + (6827, 320, 1), + (6870, 544, 1), + (6871, 544, 1), + (6872, 544, 1), + (6873, 3837, 3), + (6874, 3837, 3), + (6875, 3837, 3), + (6876, 259, 3), + (6877, 259, 3), + (6878, 259, 3), + (6900, 465, 3), + (6901, 465, 3), + (6902, 465, 3), + (6903, 465, 3), + (6904, 465, 3), + (6908, 499, 1), + (6909, 499, 1), + (6910, 499, 1), + (6930, 611, 1), + (6935, 465, 3), + (6936, 465, 3), + (6937, 465, 3), + (6941, 962, 1), + (6942, 962, 1), + (6943, 962, 1), + (6944, 962, 1), + (6945, 962, 1), + (6977, 3817, 1), + (6978, 3817, 1), + (6979, 3817, 1), + (6980, 128, 1), + (6981, 128, 1), + (6982, 128, 1), + (6983, 245, 3), + (6988, 985, 1), + (6989, 985, 1), + (6990, 985, 1), + (7005, 789, 1), + (7006, 789, 1), + (7007, 789, 1), + (7033, 804, 1), + (7034, 804, 1), + (7035, 804, 1), + (7036, 3646, 1), + (7037, 3646, 1), + (7038, 3646, 1), + (7050, 26, 3), + (7051, 26, 3), + (7052, 26, 3), + (7053, 26, 3), + (7054, 26, 3), + (7055, 26, 3), + (7063, 26, 3), + (7064, 26, 3), + (7065, 26, 3), + (7100, 254, 3), + (7101, 254, 3), + (7102, 254, 3), + (7103, 286, 1), + (7104, 286, 1), + (7105, 286, 1), + (7116, 110, 1), + (7117, 110, 1), + (7118, 110, 1), + (7122, 435, 3), + (7123, 435, 3), + (7124, 435, 3), + (7125, 435, 3), + (7126, 435, 3), + (7128, 109, 1), + (7129, 109, 1), + (7130, 109, 1), + (7134, 439, 3), + (7135, 439, 3), + (7136, 439, 3), + (7137, 672, 1), + (7138, 672, 1), + (7139, 672, 1), + (7184, 1685, 1), + (7199, 175, 3), + (7200, 175, 3), + (7201, 175, 3), + (7204, 278, 5), + (7205, 278, 5), + (7206, 278, 5), + (7207, 278, 5), + (7208, 278, 5), + (7215, 68, 1), + (7216, 68, 1), + (7232, 114, 6), + (7233, 114, 6), + (7234, 114, 6), + (7246, 794, 1), + (7247, 794, 1), + (7248, 794, 1), + (7253, 784, 1), + (7254, 785, 1), + (7255, 786, 1), + (7256, 787, 1), + (7260, 60, 1), + (7261, 60, 1), + (7262, 60, 1), + (7263, 58, 1), + (7264, 58, 1), + (7265, 58, 1), + (7266, 125, 1), + (7276, 217, 1), + (7277, 217, 1), + (7278, 217, 1), + (7285, 173, 3), + (7286, 173, 3), + (7287, 173, 3), + (7288, 409, 3), + (7289, 409, 3), + (7290, 409, 3), + (7291, 173, 8), + (7292, 173, 8), + (7293, 173, 8), + (7301, 19, 3), + (7302, 19, 3), + (7303, 19, 3), + (7310, 255, 5), + (7311, 255, 5), + (7312, 255, 5), + (7316, 41, 1), + (7317, 41, 1), + (7323, 254, 3), + (7324, 254, 3), + (7325, 254, 3), + (7326, 286, 1), + (7327, 286, 1), + (7328, 286, 1), + (7329, 6001, 11), + (7330, 6001, 11), + (7331, 6001, 11), + (7335, 702, 1), + (7359, 82, 1), + (7360, 82, 1), + (7361, 82, 1), + (7378, 82, 3), + (7379, 82, 3), + (7380, 82, 3), + (7381, 82, 3), + (7382, 82, 3), + (7383, 82, 3), + (7390, 87, 1), + (7391, 87, 1), + (7392, 87, 1), + (7407, 31, 3), + (7414, 185, 6), + (7415, 185, 6), + (7416, 185, 6), + (7433, 30, 1), + (7434, 30, 1), + (7435, 30, 1), + (7436, 30, 1), + (7437, 30, 1), + (7445, 187, 5), + (7446, 187, 5), + (7447, 187, 5), + (7448, 553, 1), + (7449, 553, 1), + (7450, 553, 1), + (7451, 777, 1), + (7452, 777, 1), + (7453, 777, 1), + (7466, 224, 3), + (7472, 447, 3), + (7473, 447, 3), + (7474, 447, 3), + (7478, 245, 3), + (7497, 128, 3), + (7498, 128, 3), + (7499, 128, 3), + (7554, 19, 7), + (7555, 19, 7), + (7556, 19, 7), + (7557, 19, 7), + (7558, 19, 7), + (7562, 30, 6), + (7563, 30, 6), + (7564, 30, 6), + (7581, 215, 6), + (7582, 215, 6), + (7583, 215, 6), + (7615, 494, 3), + (7616, 494, 3), + (7617, 494, 3), + (7618, 500, 3), + (7619, 500, 3), + (7620, 500, 3), + (7621, 20, 1), + (7622, 26, 3), + (7623, 26, 3), + (7624, 26, 3), + (7631, 309, 3), + (7632, 309, 3), + (7633, 309, 3), + (7650, 310, 6), + (7651, 310, 6), + (7652, 310, 6), + (7653, 311, 3), + (7654, 311, 3), + (7655, 311, 3), + (7656, 309, 6), + (7657, 309, 6), + (7658, 309, 6), + (7659, 153, 3), + (7660, 153, 3), + (7661, 153, 3), + (7664, 170, 3), + (7665, 170, 3), + (7666, 170, 3), + (7667, 170, 3), + (7668, 170, 3), + (7682, 68, 1), + (7686, 435, 3), + (7687, 435, 3), + (7688, 435, 3), + (7691, 224, 3), + (7695, 862, 3), + (7696, 862, 3), + (7697, 862, 3), + (7700, 310, 3), + (7701, 310, 3), + (7702, 310, 3), + (7704, 3707, 1), + (7705, 3707, 1), + (7706, 3707, 1), + (7707, 87, 1), + (7708, 87, 1), + (7709, 87, 1), + (7710, 702, 1), + (7711, 702, 1), + (7712, 3826, 1), + (7715, 901, 1), + (7716, 901, 1), + (7717, 901, 1), + (7718, 125, 1), + (7722, 19, 7), + (7723, 19, 7), + (7724, 19, 7), + (7725, 19, 7), + (7726, 19, 7), + (7733, 195, 3), + (7743, 184, 1), + (7744, 184, 1), + (7745, 184, 1), + (7748, 13, 5), + (7749, 13, 5), + (7750, 13, 5), + (7751, 2234, 1), + (7752, 2234, 1), + (7753, 2234, 1), + (7754, 85, 1), + (7757, 9403, 1), + (7758, 9403, 1), + (7759, 9403, 1), + (7760, 824, 1), + (7761, 824, 1), + (7762, 824, 1), + (7765, 7689, 1), + (7766, 7689, 1), + (7767, 7689, 1), + (7768, 7689, 1), + (7770, 19, 3), + (7771, 19, 3), + (7772, 19, 3), + (7773, 19, 3), + (7774, 19, 3), + (7775, 19, 3), + (7822, 1154, 1), + (7823, 1154, 1), + (7824, 1154, 1), + (7825, 1154, 1), + (7826, 1154, 1), + (7827, 1404, 3), + (7832, 60, 1), + (7833, 60, 1), + (7834, 60, 1), + (7835, 60, 1), + (7836, 60, 1), + (7842, 19, 7), + (7843, 19, 7), + (7844, 19, 7), + (7940, 558, 1), + (7941, 558, 1), + (7942, 558, 1), + (7943, 39, 1), + (7944, 41, 1), + (7951, 19, 3), + (7952, 19, 3), + (7953, 19, 3), + (7983, 520, 1), + (7984, 520, 1), + (7985, 520, 1), + (7986, 705, 1), + (7987, 705, 1), + (7988, 705, 1), + (7989, 1092, 1), + (7990, 1092, 1), + (7991, 1092, 1), + (7992, 1092, 1), + (7993, 39, 1), + (7994, 39, 1), + (7995, 39, 1), + (8031, 791, 1), + (8032, 791, 1), + (8033, 791, 1), + (8035, 521, 1), + (8036, 521, 1), + (8037, 521, 1), + (8069, 160, 4), + (8070, 160, 4), + (8071, 160, 4), + (8076, 565, 1), + (8077, 565, 1), + (8078, 565, 1), + (8079, 565, 1), + (8080, 565, 1), + (8081, 565, 1), + (8082, 208, 1), + (8083, 208, 1), + (8084, 208, 1), + (8195, 3707, 1), + (8196, 3707, 1), + (8197, 3707, 1), + (8198, 210, 1), + (8199, 210, 1), + (8200, 210, 1), + (8204, 153, 1), + (8205, 153, 1), + (8206, 153, 1), + (8207, 285, 1), + (8208, 285, 1), + (8209, 285, 1), + (8220, 3812, 1), + (8224, 516, 3), + (8225, 516, 3), + (8226, 516, 3), + (8260, 1211, 1), + (8263, 142, 20), + (8264, 142, 20), + (8265, 142, 20), + (8266, 142, 20), + (8267, 142, 20), + (8268, 142, 20), + (8269, 142, 20), + (8270, 142, 20), + (8271, 142, 20), + (8272, 142, 20), + (8273, 142, 20), + (8274, 142, 20), + (8275, 142, 20), + (8276, 142, 20), + (8277, 142, 20), + (8278, 142, 20), + (8279, 142, 20), + (8280, 142, 20), + (8281, 142, 20), + (8282, 142, 20), + (8283, 142, 20), + (8284, 142, 20), + (8285, 142, 20), + (8286, 142, 20), + (8287, 142, 20), + (8288, 142, 20), + (8289, 142, 20), + (8290, 142, 20), + (8291, 142, 20), + (8292, 142, 20), + (8293, 142, 20), + (8294, 142, 20), + (8295, 142, 20), + (8296, 142, 20), + (8297, 142, 20), + (8303, 309, 6), + (8309, 31, 3), + (8310, 31, 3), + (8311, 31, 3), + (8312, 110, 1), + (8317, 8205, 1), + (8318, 8205, 1), + (8319, 199, 1), + (8320, 199, 1), + (8321, 199, 1), + (8332, 861, 1), + (8333, 861, 1), + (8334, 861, 1), + (8335, 1041, 1), + (8336, 1041, 1), + (8337, 1041, 1), + (8338, 1041, 1), + (8339, 1041, 1), + (8344, 215, 6), + (8345, 215, 6), + (8346, 215, 6), + (8347, 616, 1), + (8348, 616, 1), + (8349, 616, 1), + (8351, 142, 20), + (8352, 142, 20), + (8353, 142, 20), + (8354, 142, 20), + (8355, 142, 20), + (8356, 142, 20), + (8357, 142, 20), + (8358, 142, 20), + (8359, 142, 20), + (8360, 142, 20), + (8361, 142, 20), + (8362, 142, 20), + (8363, 142, 20), + (8364, 142, 20), + (8365, 142, 20), + (8366, 142, 20), + (8367, 142, 20), + (8368, 142, 20), + (8369, 142, 20), + (8370, 142, 20), + (8371, 142, 20), + (8372, 142, 20), + (8373, 142, 20), + (8374, 142, 20), + (8375, 142, 20), + (8376, 142, 20), + (8377, 142, 20), + (8378, 142, 20), + (8379, 142, 20), + (8380, 142, 20), + (8381, 142, 20), + (8382, 142, 20), + (8383, 142, 20), + (8384, 142, 20), + (8385, 142, 20), + (8386, 142, 20), + (8387, 142, 20), + (8388, 142, 20), + (8389, 142, 20), + (8390, 142, 20), + (8391, 142, 20), + (8392, 142, 20), + (8393, 142, 20), + (8394, 142, 20), + (8395, 142, 20), + (8396, 142, 20), + (8397, 142, 20), + (8398, 142, 20), + (8399, 142, 20), + (8400, 142, 20), + (8401, 142, 20), + (8402, 142, 20), + (8403, 142, 20), + (8404, 142, 20), + (8405, 142, 20), + (8406, 142, 20), + (8407, 142, 20), + (8408, 142, 20), + (8409, 142, 20), + (8410, 142, 20), + (8411, 142, 20), + (8412, 142, 20), + (8413, 142, 20), + (8414, 142, 20), + (8415, 142, 20), + (8416, 142, 20), + (8417, 142, 20), + (8418, 142, 20), + (8419, 142, 20), + (8420, 142, 20), + (8421, 516, 3), + (8427, 254, 3), + (8428, 254, 3), + (8429, 254, 3), + (9103, 1350, 3), + (9104, 1350, 3), + (9105, 1350, 3), + (9106, 1351, 3), + (9107, 1351, 3), + (9108, 1351, 3), + (9112, 1390, 3), + (9113, 1390, 3), + (9114, 1390, 3), + (9115, 1391, 3), + (9116, 1391, 3), + (9117, 1391, 3), + (9121, 1370, 3), + (9122, 1370, 3), + (9123, 1370, 3), + (9124, 1371, 3), + (9125, 1371, 3), + (9126, 1371, 3), + (9130, 1380, 3), + (9131, 1380, 3), + (9132, 1380, 3), + (9133, 1381, 3), + (9134, 1381, 3), + (9135, 1381, 3), + (9139, 1470, 3), + (9140, 1470, 3), + (9141, 1470, 3), + (9142, 1471, 3), + (9143, 1471, 3), + (9144, 1471, 3), + (9148, 1480, 3), + (9149, 1480, 3), + (9150, 1480, 3), + (9151, 1481, 3), + (9152, 1481, 3), + (9153, 1481, 3), + (9157, 1490, 3), + (9158, 1490, 3), + (9159, 1490, 3), + (9160, 1491, 3), + (9161, 1491, 3), + (9162, 1491, 3), + (9166, 1460, 3), + (9167, 1460, 3), + (9168, 1460, 3), + (9169, 1461, 3), + (9170, 1461, 3), + (9171, 1461, 3), + (9175, 1450, 3), + (9176, 1450, 3), + (9177, 1450, 3), + (9178, 1451, 3), + (9179, 1451, 3), + (9180, 1451, 3), + (9184, 1440, 3), + (9185, 1440, 3), + (9186, 1440, 3), + (9187, 1441, 3), + (9188, 1441, 3), + (9189, 1441, 3), + (9193, 1420, 3), + (9194, 1420, 3), + (9195, 1420, 3), + (9196, 1421, 3), + (9197, 1421, 3), + (9198, 1421, 3), + (9202, 1430, 3), + (9203, 1430, 3), + (9204, 1430, 3), + (9205, 1431, 3), + (9206, 1431, 3), + (9207, 1431, 3), + (9211, 1400, 3), + (9212, 1400, 3), + (9213, 1400, 3), + (9214, 1401, 3), + (9215, 1401, 3), + (9216, 1401, 3), + (9220, 1360, 3), + (9221, 1360, 3), + (9222, 1360, 3), + (9223, 1361, 3), + (9224, 1361, 3), + (9225, 1361, 3), + (9229, 1500, 3), + (9230, 1500, 3), + (9231, 1500, 3), + (9232, 1501, 3), + (9233, 1501, 3), + (9234, 1501, 3), + (9238, 1410, 3), + (9239, 1410, 3), + (9240, 1410, 3), + (9241, 1411, 3), + (9242, 1411, 3), + (9243, 1411, 3), + (9300, 1300, 3), + (9301, 1300, 3), + (9302, 1300, 3), + (9303, 1300, 6), + (9304, 1300, 6), + (9305, 1300, 6), + (9306, 1300, 9), + (9307, 1300, 9), + (9308, 1300, 9), + (9309, 1313, 3), + (9310, 1313, 3), + (9311, 1313, 3), + (9312, 1313, 6), + (9313, 1313, 6), + (9314, 1313, 6), + (9315, 1313, 9), + (9316, 1313, 9), + (9317, 1313, 9), + (9318, 1302, 3), + (9319, 1302, 3), + (9320, 1302, 3), + (9321, 1302, 6), + (9322, 1302, 6), + (9323, 1302, 6), + (9324, 1302, 9), + (9325, 1302, 9), + (9326, 1302, 9), + (9327, 1303, 3), + (9328, 1303, 3), + (9329, 1303, 3), + (9330, 1303, 6), + (9331, 1303, 6), + (9332, 1303, 6), + (9333, 1303, 9), + (9334, 1303, 9), + (9335, 1303, 9), + (9336, 1301, 3), + (9337, 1301, 3), + (9338, 1301, 3), + (9339, 1301, 6), + (9340, 1301, 6), + (9341, 1301, 6), + (9342, 1301, 9), + (9343, 1301, 9), + (9344, 1301, 9), + (9345, 1312, 3), + (9346, 1312, 3), + (9347, 1312, 3), + (9348, 1312, 6), + (9349, 1312, 6), + (9350, 1312, 6), + (9351, 1312, 9), + (9352, 1312, 9), + (9353, 1312, 9), + (9354, 1315, 3), + (9355, 1315, 3), + (9356, 1315, 3), + (9357, 1315, 6), + (9358, 1315, 6), + (9359, 1315, 6), + (9360, 1315, 9), + (9361, 1315, 9), + (9362, 1315, 9), + (9363, 1310, 3), + (9364, 1310, 3), + (9365, 1310, 3), + (9366, 1310, 6), + (9367, 1310, 6), + (9368, 1310, 6), + (9369, 1310, 9), + (9370, 1310, 9), + (9371, 1310, 9), + (9372, 1311, 3), + (9373, 1311, 3), + (9374, 1311, 3), + (9375, 1311, 6), + (9376, 1311, 6), + (9377, 1311, 6), + (9378, 1311, 9), + (9379, 1311, 9), + (9380, 1311, 9), + (9381, 1309, 3), + (9382, 1309, 3), + (9383, 1309, 3), + (9384, 1309, 6), + (9385, 1309, 6), + (9386, 1309, 6), + (9387, 1309, 9), + (9388, 1309, 9), + (9389, 1309, 9), + (9390, 1308, 3), + (9391, 1308, 3), + (9392, 1308, 3), + (9393, 1308, 6), + (9394, 1308, 6), + (9395, 1308, 6), + (9396, 1308, 9), + (9397, 1308, 9), + (9398, 1308, 9), + (9399, 1307, 3), + (9400, 1307, 3), + (9401, 1307, 3), + (9402, 1307, 6), + (9403, 1307, 6), + (9404, 1307, 6), + (9405, 1307, 9), + (9406, 1307, 9), + (9407, 1307, 9), + (9408, 1304, 3), + (9409, 1304, 3), + (9410, 1304, 3), + (9411, 1304, 6), + (9412, 1304, 6), + (9413, 1304, 6), + (9414, 1304, 9), + (9415, 1304, 9), + (9416, 1304, 9), + (9417, 1305, 3), + (9418, 1305, 3), + (9419, 1305, 3), + (9420, 1305, 6), + (9421, 1305, 6), + (9422, 1305, 6), + (9423, 1305, 9), + (9424, 1305, 9), + (9425, 1305, 9), + (9426, 1306, 3), + (9427, 1306, 3), + (9428, 1306, 3), + (9429, 1306, 6), + (9430, 1306, 6), + (9431, 1306, 6), + (9432, 1306, 9), + (9433, 1306, 9), + (9434, 1306, 9), + (9435, 1314, 3), + (9436, 1314, 3), + (9437, 1314, 3), + (9438, 1314, 6), + (9439, 1314, 6), + (9440, 1314, 6), + (9441, 1314, 9), + (9442, 1314, 9), + (9443, 1314, 9), + (9500, 72, 1), + (10016, 19, 3), + (10017, 19, 3), + (10018, 19, 3), + (10030, 558, 1), + (10031, 558, 1), + (10032, 558, 1), + (10038, 19, 3), + (10039, 19, 3), + (10040, 19, 3), + (10041, 358, 3), + (10042, 358, 3), + (10043, 358, 3), + (10047, 6001, 11), + (10048, 6001, 11), + (10049, 6001, 11), + (10064, 82, 3), + (10065, 82, 3), + (10066, 82, 3), + (10067, 82, 3), + (10068, 82, 3), + (10069, 82, 3), + (10070, 278, 5), + (10071, 278, 5), + (10072, 278, 5), + (10073, 278, 5), + (10074, 278, 5), + (10093, 185, 6), + (10105, 170, 3), + (10106, 170, 3), + (10107, 170, 3), + (10108, 170, 3), + (10109, 170, 3), + (10110, 520, 1), + (10111, 520, 1), + (10112, 520, 1), + (10130, 544, 1), + (10131, 544, 1), + (10132, 544, 1), + (10133, 3837, 3), + (10134, 3837, 3), + (10135, 3837, 3), + (10136, 259, 3), + (10137, 259, 3), + (10138, 259, 3), + (10150, 187, 5), + (10151, 187, 5), + (10152, 187, 5), + (10153, 553, 1), + (10154, 553, 1), + (10155, 553, 1), + (10165, 439, 3), + (10166, 439, 3), + (10167, 439, 3), + (10176, 171, 1), + (10177, 171, 1), + (10178, 171, 1), + (10182, 177, 1), + (10183, 177, 1), + (10184, 177, 1), + (10185, 177, 1), + (10186, 177, 1), + (10197, 447, 3), + (10198, 447, 3), + (10199, 447, 3), + (10203, 524, 1), + (10204, 524, 1), + (10205, 524, 1), + (10206, 320, 1), + (10207, 320, 1), + (10209, 175, 3), + (10210, 175, 3), + (10211, 175, 3), + (10213, 278, 5), + (10214, 278, 5), + (10215, 278, 5), + (10216, 278, 5), + (10217, 278, 5), + (10249, 208, 1), + (10250, 208, 1), + (10251, 208, 1), + (10255, 784, 1), + (10256, 785, 1), + (10257, 786, 1), + (10258, 787, 1), + (10262, 58, 1), + (10263, 58, 1), + (10264, 58, 1), + (10271, 173, 3), + (10272, 173, 3), + (10273, 173, 3), + (10274, 173, 8), + (10275, 173, 8), + (10276, 173, 8), + (10282, 791, 1), + (10283, 791, 1), + (10284, 791, 1), + (10285, 521, 1), + (10286, 521, 1), + (10287, 521, 1), + (10308, 128, 3), + (10309, 128, 3), + (10310, 128, 3), + (10329, 3701, 1), + (10330, 199, 3), + (10332, 943, 3), + (10336, 941, 1), + (10337, 941, 1), + (10338, 941, 1), + (10354, 6001, 17), + (10389, 841, 1), + (10390, 841, 1), + (10391, 841, 1), + (10396, 705, 4), + (10397, 1092, 4), + (10398, 3701, 1), + (10399, 3701, 1), + (10413, 207, 1), + (10414, 207, 1), + (10415, 207, 1), + (10416, 207, 1), + (10417, 207, 1), + (10426, 185, 18), + (10427, 519, 15), + (10428, 173, 8), + (10429, 173, 8), + (10430, 173, 8), + (10431, 791, 1), + (10432, 791, 1), + (10433, 791, 1), + (10434, 792, 1), + (10435, 792, 1), + (10436, 792, 1), + (10450, 19, 9), + (10451, 19, 9), + (10452, 19, 9), + (10456, 3800, 1), + (10457, 3800, 1), + (10458, 3800, 1), + (10462, 396, 1), + (10463, 396, 1), + (10464, 391, 9), + (10465, 391, 9), + (10466, 391, 9), + (10468, 19, 9), + (10469, 19, 9), + (10470, 558, 1), + (10471, 558, 1), + (10472, 558, 1), + (10473, 26, 3), + (10474, 26, 3), + (10475, 26, 3), + (10476, 26, 3), + (10477, 26, 3), + (10510, 705, 1), + (10511, 185, 3), + (10512, 185, 3), + (10513, 185, 3), + (10514, 519, 3), + (10515, 519, 3), + (10516, 519, 3), + (10519, 3213, 1), + (10522, 3732, 1), + (10527, 1400, 1), + (10532, 1401, 1), + (10537, 1402, 1), + (10548, 605, 13), + (10554, 263, 1), + (10555, 263, 1), + (10556, 263, 1), + (10557, 1120, 1), + (10558, 1120, 1), + (10559, 1120, 1), + (10560, 1120, 1), + (10561, 3551, 1), + (10562, 3551, 1), + (10563, 3551, 1), + (10564, 217, 1), + (10565, 217, 1), + (10566, 217, 1), + (10576, 109, 1), + (10579, 3646, 1), + (10580, 3646, 1), + (10588, 601, 1), + (10589, 601, 1), + (10590, 601, 1), + (10591, 601, 1), + (10592, 601, 1), + (10610, 265, 5), + (10611, 265, 5), + (10612, 265, 5), + (10621, 180, 3), + (10622, 180, 3), + (10623, 30, 3), + (10624, 30, 3), + (10625, 30, 3), + (10626, 702, 1), + (10646, 3826, 1), + (10657, 276, 3), + (10658, 276, 3), + (10659, 276, 3), + (10666, 98, 1), + (10667, 98, 1), + (10668, 98, 1), + (10670, 19, 9), + (10708, 6001, 11), + (10709, 6001, 11), + (10710, 6001, 11), + (10711, 30, 6), + (10712, 30, 6), + (10713, 30, 6), + (10714, 873, 1), + (10715, 873, 1), + (10717, 184, 1), + (10718, 184, 1), + (10719, 872, 1), + (10720, 872, 1), + (10721, 872, 1), + (10722, 778, 1), + (10723, 778, 1), + (10724, 778, 1), + (10725, 778, 1), + (10726, 778, 1), + (10727, 2235, 1), + (10728, 2235, 1), + (10730, 870, 1), + (10731, 870, 1), + (10733, 219, 1), + (10734, 219, 1), + (10735, 219, 1), + (10750, 286, 1), + (10751, 286, 1), + (10752, 7108, 1), + (10753, 286, 1), + (10789, 10424, 1), + (10790, 705, 4), + (10791, 1092, 4), + (10800, 462, 3), + (10801, 462, 3), + (10802, 462, 3), + (10903, 125, 1), + (10904, 125, 1), + (10905, 125, 1), + (10909, 7007, 1), + (10910, 7007, 1), + (10911, 7007, 1), + (10915, 823, 3), + (10916, 823, 3), + (10917, 823, 3), + (10951, 447, 3), + (10952, 447, 3), + (10953, 447, 3), + (10954, 662, 3), + (10955, 662, 3), + (10956, 662, 3), + (11011, 3710, 1), + (11012, 3710, 1), + (11013, 3710, 1), + (11014, 3899, 1), + (11015, 3899, 1), + (11016, 3899, 1), + (11020, 3899, 1), + (11050, 452, 3), + (11051, 452, 3), + (11052, 452, 3), + (11053, 500, 3), + (11054, 500, 3), + (11059, 452, 3), + (11060, 452, 3), + (11077, 986, 1), + (11078, 988, 1), + (11079, 987, 1), + (11088, 505, 1), + (11089, 505, 1), + (11090, 505, 1), + (11091, 505, 1), + (12422, 1202, 1), + (12432, 23, 3), + (12433, 23, 3), + (12434, 23, 3), + (12435, 23, 3), + (12436, 23, 3), + (12437, 23, 3), + (12475, 7003, 1), + (12476, 7003, 1), + (12477, 7003, 1), + (12478, 3705, 9), + (12479, 3705, 9), + (12480, 3705, 9), + (12523, 114, 6), + (12526, 215, 6), + (12527, 215, 6), + (12528, 215, 6), + (12529, 358, 3), + (12530, 358, 3), + (12531, 358, 3), + (12553, 23, 3), + (12554, 23, 3), + (12555, 23, 3), + (12556, 23, 3), + (12557, 23, 3), + (12558, 23, 3), + (12582, 9400, 1), + (12583, 9400, 1), + (12584, 9400, 1), + (12587, 9403, 1), + (12588, 9403, 1), + (12589, 9403, 1), + (12600, 3514, 1), + (12606, 13, 5), + (12610, 310, 3), + (12626, 1410, 3), + (12629, 1411, 3), + (12632, 1412, 3), + (12635, 428, 2), + (12639, 519, 3), + (12642, 185, 3), + (12645, 519, 1), + (12646, 185, 1), + (12664, 3728, 1), + (12673, 420, 1), + (12677, 17, 3), + (12679, 276, 3), + (12680, 276, 3), + (12681, 276, 3), + (12697, 30, 6), + (12698, 30, 6), + (12699, 30, 6), + (12713, 8202, 1), + (12714, 8202, 1), + (12715, 8202, 1), + (12716, 3702, 1), + (12717, 3702, 1), + (12718, 3702, 1), + (12719, 3702, 1), + (12720, 3506, 1), + (12721, 3506, 1), + (12722, 3506, 1), + (12723, 3506, 1), + (12727, 359, 3), + (12728, 359, 3), + (12729, 359, 3), + (12730, 941, 1), + (12731, 941, 1), + (12732, 941, 1), + (12733, 943, 3), + (12734, 259, 3), + (12735, 259, 3), + (12736, 259, 3), + (12737, 3701, 1), + (12738, 3701, 1), + (12739, 3701, 1), + (12749, 30, 1), + (12750, 30, 1), + (12751, 30, 1), + (12757, 68, 1), + (12758, 68, 1), + (12759, 68, 1), + (12760, 175, 3), + (12761, 175, 3), + (12762, 175, 3), + (12773, 1580, 1), + (12774, 1580, 1), + (12775, 1580, 1), + (12776, 1580, 1), + (12777, 1580, 1), + (12779, 826, 1), + (12780, 826, 1), + (12781, 826, 1), + (12782, 826, 1), + (12783, 826, 1), + (12784, 826, 1), + (12798, 278, 5), + (12799, 278, 5), + (12800, 278, 5), + (12831, 128, 1), + (12834, 128, 1), + (12835, 128, 1), + (12840, 3817, 1), + (12841, 3817, 1), + (12849, 8303, 1), + (12860, 23, 3), + (12863, 23, 3), + (12865, 1155, 1), + (12866, 639, 1), + (12867, 6106, 6), + (12871, 452, 3), + (12872, 452, 3), + (12874, 451, 1), + (12876, 7003, 1), + (12877, 7003, 1), + (12878, 7003, 1), + (12881, 172, 1), + (12886, 304, 5), + (12887, 303, 5), + (12888, 305, 5), + (12889, 501, 1), + (12890, 507, 1), + (12892, 509, 3), + (12894, 1122, 1), + (12899, 57, 1), + (12900, 57, 1), + (12902, 1380, 1), + (12903, 1380, 1), + (12907, 1381, 1), + (12908, 1381, 1), + (12912, 1382, 1), + (12913, 1382, 1), + (12934, 173, 3), + (12956, 784, 1), + (12957, 786, 1), + (12958, 787, 1), + (12959, 785, 1), + (12964, 596, 1), + (12965, 597, 1), + (12968, 1041, 1), + (12969, 1041, 1), + (12970, 1041, 1), + (12977, 1041, 1), + (12978, 1041, 1), + (12979, 1041, 1), + (12980, 1041, 1), + (12981, 1041, 1), + (12992, 707, 4), + (12993, 707, 4), + (12994, 707, 4), + (13001, 9504, 1), + (13002, 9504, 1), + (13003, 9504, 1), + (13004, 153, 9), + (13005, 171, 1), + (13006, 171, 1), + (13007, 171, 1), + (13008, 859, 1), + (13009, 3730, 1), + (13010, 47, 1), + (13011, 47, 1), + (13012, 47, 1), + (13013, 446, 1), + (13014, 446, 1), + (13015, 446, 1), + (13017, 3815, 10), + (13018, 3815, 10), + (13019, 3815, 10), + (13023, 309, 6), + (13055, 8400, 1), + (13067, 643, 1), + (13072, 3514, 1), + (13073, 3514, 1), + (13074, 310, 6), + (13075, 310, 6), + (13076, 310, 6), + (13077, 311, 3), + (13078, 311, 3), + (13090, 20, 1), + (13092, 82, 1), + (13093, 82, 1), + (13094, 82, 1), + (13104, 87, 1), + (13105, 87, 1), + (13106, 87, 1), + (13130, 1685, 1), + (13140, 391, 9), + (13141, 391, 9), + (13142, 391, 9), + (13143, 500, 1), + (13144, 500, 1), + (13145, 500, 1), + (13146, 494, 1), + (13147, 494, 1), + (13148, 494, 1), + (13155, 705, 1), + (13166, 822, 1), + (13167, 822, 1), + (13168, 822, 1), + (13170, 128, 3), + (13190, 187, 5), + (13191, 187, 5), + (13192, 187, 5), + (13196, 3837, 3), + (13197, 3837, 3), + (13198, 3837, 3), + (13203, 199, 3), + (13204, 8261, 1), + (13205, 8261, 1), + (13206, 8261, 1), + (13213, 439, 3), + (13214, 439, 3), + (13215, 439, 3), + (13216, 439, 3), + (13217, 439, 3), + (13222, 3514, 1), + (13223, 3514, 1), + (13241, 173, 8), + (13244, 46, 1), + (13247, 409, 3), + (13253, 58, 1), + (13254, 58, 1), + (13255, 58, 1), + (13256, 224, 3), + (13257, 224, 3), + (13258, 224, 3), + (13262, 102, 1), + (13263, 102, 1), + (13264, 102, 1), + (13271, 1685, 1), + (13272, 1685, 1), + (13295, 20, 1), + (13308, 26, 3), + (13326, 310, 6), + (13326, 1685, 1), + (13332, 30, 6), + (13363, 1685, 1), + (13383, 1685, 1), + (13385, 1685, 1), + (13388, 1685, 1), + (13389, 1685, 1), + (13396, 1685, 1), + (13396, 3815, 10), + (13401, 1685, 1), + (13404, 259, 6), + (13404, 1685, 1), + (13410, 1685, 1), + (13413, 1685, 1), + (13415, 1092, 1), + (13415, 1685, 1), + (13416, 626, 1), + (13416, 1685, 1), + (13419, 1685, 1), + (13425, 1685, 1), + (13444, 1685, 1), + (13447, 1685, 1), + (13449, 1685, 1), + (13449, 11073, 1), + (13454, 1685, 1), + (13463, 458, 1), + (13463, 1685, 1), + (13466, 1685, 1), + (13467, 1685, 1), + (13468, 1685, 1), + (13472, 1685, 1), + (13474, 444, 1), + (13474, 1685, 1), + (13477, 1685, 1), + (13483, 1685, 1), + (13484, 1685, 1), + (13485, 1685, 1), + (13490, 1685, 1), + (13492, 199, 3), + (13492, 1685, 1), + (13493, 1685, 1), + (13496, 187, 5), + (13496, 1685, 1), + (13499, 30, 1), + (13499, 1685, 1), + (13502, 259, 3), + (13502, 1685, 1), + (13505, 1685, 1), + (13508, 1685, 1), + (13511, 1685, 1), + (13511, 3837, 3), + (13514, 1685, 1), + (13517, 941, 1), + (13517, 1685, 1), + (13520, 1685, 1), + (13521, 1685, 1), + (13524, 1685, 1), + (13527, 1685, 1), + (13528, 1685, 1), + (13529, 1685, 1), + (13530, 1685, 1), + (13533, 1685, 1), + (13542, 184, 3), + (13542, 1685, 1), + (13545, 1685, 1), + (13546, 1685, 1), + (13549, 1685, 1), + (13556, 1685, 1), + (13562, 872, 1), + (13562, 1685, 1), + (13565, 1685, 1), + (13565, 3804, 1), + (13568, 876, 1), + (13568, 1685, 1), + (13571, 1685, 1), + (13575, 1685, 1), + (13578, 1685, 1), + (13584, 1685, 1), + (13585, 1685, 1), + (13585, 3826, 1), + (13586, 1685, 1), + (13589, 30, 3), + (13589, 1685, 1), + (13590, 30, 3), + (13590, 1685, 1), + (13592, 702, 1), + (13592, 1685, 1), + (13595, 1685, 1), + (13595, 6001, 11), + (13598, 1685, 1), + (13601, 1685, 1), + (13604, 1685, 1), + (13607, 1685, 1), + (13610, 1685, 1), + (13613, 1685, 1), + (13616, 1685, 1), + (13617, 1685, 1), + (13618, 1685, 1), + (13619, 1685, 1), + (13621, 278, 5), + (13621, 1685, 1), + (13624, 1685, 1), + (13627, 1685, 1), + (13628, 1685, 1), + (13630, 1685, 1), + (13633, 1685, 1), + (13646, 1668, 1), + (13646, 1685, 1), + (13650, 1685, 1), + (13653, 1685, 1), + (13656, 1685, 1), + (13663, 1685, 1), + (13667, 500, 1), + (13667, 1685, 1), + (13670, 1685, 1), + (13673, 1158, 1), + (13674, 7754, 1), + (13675, 278, 5), + (13675, 1685, 1), + (13678, 1685, 1), + (13682, 1685, 1), + (13683, 1685, 1), + (13684, 1685, 1), + (13685, 1685, 1), + (13686, 1685, 1), + (13687, 1685, 1), + (13688, 1685, 1), + (13689, 751, 1), + (13689, 1685, 1), + (13692, 1685, 1), + (13693, 1685, 1), + (13695, 1685, 1), + (13698, 784, 1), + (13698, 1685, 1), + (13701, 785, 1), + (13701, 1685, 1), + (13704, 787, 1), + (13704, 1685, 1), + (13707, 58, 1), + (13707, 1685, 1), + (13710, 1685, 1), + (13713, 1685, 1), + (13718, 1685, 1), + (13720, 1685, 1), + (13723, 58, 1), + (13723, 1685, 1), + (13726, 1685, 1), + (13727, 25, 3), + (13727, 1685, 1), + (13734, 217, 1), + (13734, 1685, 1), + (13753, 534, 1), + (13753, 1685, 1), + (13758, 602, 1), + (13758, 1685, 1), + (13763, 1685, 1), + (13764, 535, 1), + (13764, 1685, 1), + (13767, 1685, 1), + (13770, 1685, 1), + (13771, 1685, 1), + (13773, 310, 3), + (13773, 1685, 1), + (13774, 310, 3), + (13774, 1685, 1), + (13775, 310, 3), + (13775, 1685, 1), + (13779, 1685, 1), + (13782, 439, 3), + (13782, 1685, 1), + (13785, 1685, 1), + (13789, 1685, 1), + (13790, 1685, 1), + (13792, 1685, 1), + (13795, 1685, 1), + (13798, 1685, 1), + (13804, 1685, 1), + (13807, 1685, 1), + (13810, 1685, 1), + (13813, 1685, 1), + (13816, 1685, 1), + (13819, 1685, 1), + (13820, 1685, 1), + (13823, 1685, 1), + (13826, 1685, 1), + (13829, 1685, 1), + (13832, 1685, 1), + (13835, 1685, 1), + (13838, 1685, 1), + (13841, 1685, 1), + (13845, 1685, 1), + (13872, 1685, 1), + (13873, 961, 1), + (13873, 1685, 1), + (13878, 609, 1), + (13878, 1685, 1), + (13881, 387, 1), + (13881, 1685, 1), + (13889, 1012, 1), + (13889, 1685, 1), + (13899, 1685, 1), + (13905, 1685, 1), + (13908, 1685, 1), + (13911, 1685, 1), + (13914, 1685, 1), + (13917, 606, 1), + (13917, 1685, 1), + (13920, 125, 1), + (13920, 1685, 1), + (13933, 142, 20), + (13943, 142, 20), + (13953, 142, 20), + (13963, 142, 20), + (13973, 142, 20), + (13983, 142, 20), + (13993, 142, 20), + (14003, 1685, 1), + (14006, 30, 6), + (14006, 1685, 1), + (14009, 1685, 1), + (14010, 1685, 1), + (14011, 1685, 1), + (14011, 10394, 1), + (14016, 1685, 1), + (14016, 6001, 17), + (14018, 1684, 1), + (14019, 1685, 1), + (14026, 1685, 1), + (14029, 1685, 1), + (14032, 1685, 1), + (14037, 804, 1), + (14037, 1685, 1), + (14040, 300, 1), + (14040, 1685, 1), + (14043, 1685, 1), + (14046, 87, 1), + (14046, 1685, 1), + (14051, 1685, 1), + (14052, 1685, 1), + (14053, 1685, 1), + (14054, 1685, 1), + (14055, 1685, 1), + (14056, 1685, 1), + (14059, 1685, 1), + (14062, 821, 1), + (14062, 1685, 1), + (14065, 1685, 1), + (14065, 3215, 1), + (14068, 1685, 1), + (14068, 3216, 1), + (14071, 1685, 1), + (14076, 1685, 1), + (14080, 1685, 1), + (14081, 1685, 1), + (14082, 1685, 1), + (14085, 741, 1), + (14085, 1685, 1), + (14088, 769, 1), + (14088, 1685, 1), + (14091, 701, 1), + (14091, 1685, 1), + (14094, 1685, 1), + (14097, 1685, 1), + (14100, 1685, 1), + (14101, 1685, 1), + (14111, 1685, 1), + (14112, 1685, 1), + (14115, 872, 1), + (14115, 1685, 1), + (14129, 1685, 1), + (14130, 1685, 1), + (14132, 1685, 1), + (14132, 2234, 1), + (14135, 1685, 1), + (14138, 1685, 1), + (14139, 1685, 1), + (14140, 1685, 1), + (14141, 1685, 1), + (14144, 1685, 1), + (14144, 3515, 1), + (14148, 1685, 1), + (14151, 1685, 1), + (14154, 276, 3), + (14154, 1685, 1), + (14157, 1685, 1), + (14160, 1685, 1), + (14160, 7001, 1), + (14163, 1685, 1), + (14163, 7001, 1), + (14166, 945, 1), + (14166, 1685, 1), + (14169, 1685, 1), + (14173, 1685, 1), + (14176, 1685, 1), + (14176, 8261, 1), + (14179, 359, 1), + (14179, 1685, 1), + (14180, 1685, 1), + (14181, 1685, 1), + (14181, 3837, 12), + (14186, 809, 5), + (14186, 1685, 1), + (14189, 1685, 1), + (14192, 1685, 1), + (14196, 465, 3), + (14196, 1685, 1), + (14199, 499, 1), + (14199, 1685, 1), + (14200, 1685, 1), + (14203, 1685, 1), + (14206, 1685, 1), + (14207, 1685, 1), + (14208, 1685, 1), + (14208, 7689, 1), + (14209, 1685, 1), + (14210, 1685, 1), + (14213, 1065, 1), + (14213, 1685, 1), + (14218, 1685, 1), + (14221, 1685, 1), + (14222, 224, 3), + (14222, 1685, 1), + (14223, 47, 1), + (14223, 1685, 1), + (14224, 1685, 1), + (14225, 177, 1), + (14225, 1685, 1), + (14229, 135, 1), + (14231, 1685, 1), + (14232, 1685, 1), + (14233, 1685, 1), + (14234, 1685, 1), + (14237, 1685, 1), + (14238, 1041, 1), + (14238, 1685, 1), + (14241, 386, 1), + (14241, 1685, 1), + (14244, 1685, 1), + (14249, 1685, 1), + (14254, 386, 1), + (14254, 1685, 1), + (14256, 1685, 1), + (14259, 384, 1), + (14259, 1685, 1), + (14265, 939, 1), + (14265, 1685, 1), + (14272, 1685, 1), + (14273, 1685, 1), + (14274, 1685, 1), + (14275, 1685, 1), + (14278, 985, 1), + (14278, 1685, 1), + (14280, 57, 1), + (14280, 1685, 1), + (14281, 291, 1), + (14281, 1685, 1), + (14282, 1685, 1), + (14282, 3812, 1), + (14283, 1685, 1), + (14286, 753, 1), + (14286, 1685, 1), + (14289, 1685, 1), + (14292, 207, 1), + (14292, 1685, 1), + (14295, 1685, 1), + (14295, 3816, 1), + (14304, 1685, 1), + (14304, 8341, 1), + (14307, 1685, 1), + (14308, 431, 1), + (14308, 1685, 1), + (14311, 430, 1), + (14311, 1685, 1), + (14314, 901, 1), + (14314, 1685, 1), + (14318, 1685, 1), + (14318, 7703, 1), + (14321, 1685, 1), + (14322, 1685, 1), + (14323, 1685, 1), + (14324, 1685, 1), + (14328, 1154, 1), + (14328, 1685, 1), + (14331, 515, 1), + (14331, 1685, 1), + (14338, 308, 3), + (14338, 1685, 1), + (14341, 748, 1), + (14341, 1685, 1), + (14346, 1685, 1), + (14349, 215, 6), + (14352, 175, 3), + (14352, 1685, 1), + (14355, 1685, 1), + (14358, 1685, 1), + (14359, 1685, 1), + (14360, 1685, 1), + (14361, 23, 3), + (14364, 173, 1), + (14364, 1685, 1), + (14372, 1685, 1), + (14690, 756, 1), + (14733, 786, 1), + (15100, 467, 1), + (15105, 131, 1), + (15113, 130, 1), + (15120, 800, 1), + (15132, 660, 1), + (15135, 660, 1), + (15141, 30, 3), + (15147, 701, 13), + (15154, 659, 1), + (15158, 657, 1), + (15159, 770, 1), + (15162, 659, 1), + (15168, 657, 1), + (15174, 9400, 1), + (15179, 7755, 1), + (15182, 9403, 1), + (15204, 390, 1), + (15207, 323, 1), + (15210, 1041, 1), + (15220, 622, 1), + (15223, 624, 1), + (15226, 621, 1), + (15229, 623, 1), + (15253, 462, 1), + (15258, 184, 1), + (15270, 7003, 1), + (15280, 778, 1), + (15295, 2234, 1), + (15314, 36, 1), + (15317, 35, 1), + (15320, 558, 1), + (15341, 19, 3), + (15342, 8500, 1), + (15344, 38, 1), + (15348, 9504, 1), + (15356, 149, 1), + (15358, 151, 1), + (15359, 50, 1), + (15363, 447, 3), + (15371, 3729, 1), + (15377, 638, 1), + (15389, 935, 1), + (15396, 23, 3), + (15397, 494, 3), + (15403, 8604, 1), + (15406, 3817, 1), + (15414, 241, 1), + (15421, 245, 3), + (15424, 247, 1), + (15424, 982, 6), + (15466, 3551, 1), + (15469, 1120, 1), + (15472, 521, 1), + (15478, 578, 1), + (15481, 398, 24), + (15482, 261, 1), + (15485, 495, 9), + (15486, 534, 3), + (15526, 3702, 1), + (15549, 244, 1), + (15552, 3710, 1), + (15571, 351, 1), + (15579, 826, 1), + (15591, 2899, 1), + (15598, 759, 1), + (15598, 1150, 1), + (15598, 1151, 1), + (15598, 1152, 1), + (15605, 639, 1), + (15606, 160, 4), + (15622, 23, 3), + (15632, 789, 1), + (15639, 749, 1), + (15640, 822, 2), + (15746, 804, 1), + (15778, 87, 1), + (15833, 2045, 1), + (15836, 463, 1), + (15839, 19, 9), + (15855, 153, 9), + (15891, 988, 1), + (15893, 987, 1), + (15895, 986, 1), + (15961, 3701, 1), + (16062, 263, 1), + (16071, 2209, 3), + (16087, 53, 1), + (16094, 43, 1), + (16103, 7703, 1), + (16105, 684, 1), + (16106, 684, 1), + (16107, 684, 1), + (16117, 309, 6), + (16124, 3711, 1), + (16128, 3711, 1), + (16131, 73, 1), + (16137, 10394, 1), + (16140, 489, 1), + (16156, 137, 1), + (16159, 2045, 1), + (16163, 260, 1), + (16163, 7747, 1), + (16164, 358, 3), + (16176, 337, 1), + (16180, 584, 1), + (16185, 9202, 1), + (16185, 9203, 1), + (16189, 823, 3), + (16203, 403, 1), + (16211, 152, 1), + (16218, 403, 1), + (16221, 393, 1), + (16225, 219, 1), + (16238, 443, 1), + (16246, 245, 3), + (16249, 17, 3), + (16257, 470, 20), + (16266, 790, 1), + (16287, 669, 1), + (16297, 553, 1), + (16300, 668, 1), + (16303, 3506, 1), + (16306, 777, 1), + (16336, 1257, 1), + (16339, 773, 1), + (16342, 1257, 1), + (16371, 60, 1), + (16380, 2061, 1), + (16386, 2064, 1), + (16392, 2202, 1), + (16489, 23, 3), + (16604, 180, 3), + (16644, 747, 1), + (16666, 742, 1), + (16730, 82, 3), + (16745, 706, 1), + (17206, 601, 1), + (17209, 111, 1), + (17212, 10367, 1), + (17218, 744, 1), + (17235, 3826, 1), + (17280, 8205, 1), + (17281, 359, 1), + (17288, 41, 1), + (17289, 1062, 1), + (17307, 2047, 1), + (17317, 1270, 1), + (17334, 1041, 1), + (17336, 148, 1), + (17339, 760, 1), + (17342, 148, 1), + (17350, 170, 3), + (17361, 405, 1), + (17361, 426, 1), + (17364, 935, 4), + (17375, 1239, 1), + (17391, 98, 1), + (17409, 120, 1), + (17414, 673, 1), + (17436, 372, 1), + (17439, 372, 1), + (17441, 309, 3), + (17476, 462, 3), + (17492, 840, 1), + (17495, 9702, 1), + (17515, 3841, 1), + (17517, 441, 1), + (17522, 764, 1), + (17533, 677, 1), + (17549, 8700, 1); + +RENAME TABLE `character_alternate_abilities` TO `character_alternate_abilities_old`; +DROP TABLE IF EXISTS `character_alternate_abilities`; +CREATE TABLE IF NOT EXISTS `character_alternate_abilities` ( + `id` int(11) unsigned NOT NULL DEFAULT '0', + `aa_id` smallint(11) unsigned NOT NULL DEFAULT '0', + `aa_value` smallint(11) unsigned NOT NULL DEFAULT '0', + `charges` smallint(11) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`,`aa_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +ALTER TABLE `character_data` ADD COLUMN `aa_points_spent_old` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `aa_points_spent`; +ALTER TABLE `character_data` ADD COLUMN `aa_points_old` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `aa_points`; + +UPDATE `character_data` SET `aa_points_spent_old` = `aa_points_spent`, `aa_points_old` = `aa_points`; + + -- sanity checks since if someone never logged in after the db conversion there is junk data + -- I don't have a good way of addressing this so I keep the old data in aa_points_spent_old and aa_points_old and character_alternate_abilities_old + -- for anyone who wants to personally polish up their player data +UPDATE `character_data` SET `aa_points_spent` = 2700 WHERE `aa_points_spent` > 2700; +UPDATE `character_data` SET `aa_points` = 5000 WHERE `aa_points` > 5000; + + -- another sanity check, give people a few levels below 51 to keep their points +UPDATE `character_data` SET `aa_points_spent` = 0 WHERE `level` < 48; +UPDATE `character_data` SET `aa_points` = 0 WHERE `level` < 48; + + -- aa refund here +UPDATE `character_data` SET `aa_points` = `aa_points_spent` + `aa_points`; +UPDATE `character_data` SET `aa_points_spent` = 0; diff --git a/world/client.cpp b/world/client.cpp index 26a69222b..2c476902a 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -152,7 +152,13 @@ void Client::SendEnterWorld(std::string name) void Client::SendExpansionInfo() { auto outapp = new EQApplicationPacket(OP_ExpansionInfo, sizeof(ExpansionInfo_Struct)); ExpansionInfo_Struct *eis = (ExpansionInfo_Struct*)outapp->pBuffer; - eis->Expansions = (RuleI(World, ExpansionSettings)); + if(RuleB(World, UseClientBasedExpansionSettings)) { + eis->Expansions = ExpansionFromClientVersion(eqs->GetClientVersion()); + //eis->Expansions = ExpansionFromClientVersion(this->GetCLE. + } else { + eis->Expansions = (RuleI(World, ExpansionSettings)); + } + QueuePacket(outapp); safe_delete(outapp); } diff --git a/world/launcher_link.cpp b/world/launcher_link.cpp index bd8bfdc4b..33adba6a8 100644 --- a/world/launcher_link.cpp +++ b/world/launcher_link.cpp @@ -60,7 +60,7 @@ bool LauncherLink::Process() { end = m_states.end(); for(; cur != end; ++cur) { if(!cur->second.up) { - StartZone(cur->first.c_str()); + StartZone(cur->first.c_str(), cur->second.port); } } m_bootTimer.Disable(); @@ -184,14 +184,6 @@ bool LauncherLink::Process() { bool LauncherLink::ContainsZone(const char *short_name) const { return(m_states.find(short_name) != m_states.end()); - - /* - * std::map::const_iterator cur, end; - cur = m_states.begin(); - end = m_states.end(); - for(; cur != end; cur++) { - if( - }*/ } void LauncherLink::BootZone(const char *short_name, uint16 port) { @@ -202,15 +194,20 @@ void LauncherLink::BootZone(const char *short_name, uint16 port) { Log.Out(Logs::Detail, Logs::World_Server, "%s: Loaded zone '%s' on port %d", m_name.c_str(), short_name, zs.port); m_states[short_name] = zs; - StartZone(short_name); + StartZone(short_name, port); } void LauncherLink::StartZone(const char *short_name) { + StartZone(short_name, 0); +} + +void LauncherLink::StartZone(const char *short_name, uint16 port) { auto pack = new ServerPacket(ServerOP_LauncherZoneRequest, sizeof(LauncherZoneRequest)); LauncherZoneRequest* s = (LauncherZoneRequest *) pack->pBuffer; strn0cpy(s->short_name, short_name, 32); s->command = ZR_Start; + s->port = port; SendPacket(pack); delete pack; @@ -222,6 +219,7 @@ void LauncherLink::RestartZone(const char *short_name) { strn0cpy(s->short_name, short_name, 32); s->command = ZR_Restart; + s->port = 0; SendPacket(pack); delete pack; @@ -233,6 +231,7 @@ void LauncherLink::StopZone(const char *short_name) { strn0cpy(s->short_name, short_name, 32); s->command = ZR_Stop; + s->port = 0; SendPacket(pack); delete pack; @@ -332,35 +331,3 @@ void LauncherLink::Shutdown() { SendPacket(pack); delete pack; } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/world/launcher_link.h b/world/launcher_link.h index d1d8b6d61..35cbbcfea 100644 --- a/world/launcher_link.h +++ b/world/launcher_link.h @@ -50,6 +50,7 @@ public: void Shutdown(); void BootZone(const char *short_name, uint16 port); void StartZone(const char *short_name); + void StartZone(const char *short_name, uint16 port); void RestartZone(const char *short_name); void StopZone(const char *short_name); void BootDynamics(uint8 new_total); diff --git a/zone/CMakeLists.txt b/zone/CMakeLists.txt index 5573e6f4f..ba9aa8620 100644 --- a/zone/CMakeLists.txt +++ b/zone/CMakeLists.txt @@ -2,6 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) SET(zone_sources aa.cpp + aa_ability.cpp aggro.cpp attack.cpp beacon.cpp @@ -126,6 +127,7 @@ SET(zone_sources SET(zone_headers aa.h + aa_ability.h basic_functions.h beacon.h bot.h diff --git a/zone/aa.cpp b/zone/aa.cpp index e81345086..307eb3ba8 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -23,7 +23,7 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net) #include "../common/races.h" #include "../common/spdat.h" #include "../common/string_util.h" - +#include "../common/deity.h" #include "aa.h" #include "client.h" #include "corpse.h" @@ -37,461 +37,6 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net) extern QueryServ* QServ; - -AA_DBAction AA_Actions[aaHighestID][MAX_AA_ACTION_RANKS]; //[aaid][rank] -std::mapaas_send; -std::map > aa_effects; //stores the effects from the aa_effects table in memory -std::map AARequiredLevelAndCost; - - -int Client::GetAATimerID(aaID activate) -{ - SendAA_Struct* aa2 = zone->FindAA(activate); - - if(!aa2) - { - for(int i = 1;i < MAX_AA_ACTION_RANKS; ++i) - { - int a = activate - i; - - if(a <= 0) - break; - - aa2 = zone->FindAA(a); - - if(aa2 != nullptr) - break; - } - } - - if(aa2) - return aa2->spell_type; - - return 0; -} - -int Client::CalcAAReuseTimer(const AA_DBAction *caa) { - - if(!caa) - return 0; - - int ReuseTime = caa->reuse_time; - - if(ReuseTime > 0) - { - int ReductionPercentage; - - if(caa->redux_aa > 0 && caa->redux_aa < aaHighestID) - { - ReductionPercentage = GetAA(caa->redux_aa) * caa->redux_rate; - - if(caa->redux_aa2 > 0 && caa->redux_aa2 < aaHighestID) - ReductionPercentage += (GetAA(caa->redux_aa2) * caa->redux_rate2); - - ReuseTime = caa->reuse_time * (100 - ReductionPercentage) / 100; - } - - } - return ReuseTime; -} - -void Client::ActivateAA(aaID activate){ - if(activate < 0 || activate >= aaHighestID) - return; - if(IsStunned() || IsFeared() || IsMezzed() || IsSilenced() || IsPet() || IsSitting() || GetFeigned()) - return; - - int AATimerID = GetAATimerID(activate); - - SendAA_Struct* aa2 = nullptr; - aaID aaid = activate; - uint8 activate_val = GetAA(activate); - //this wasn't taking into acct multi tiered act talents before... - if(activate_val == 0){ - aa2 = zone->FindAA(activate); - if(!aa2){ - int i; - int a; - for(i=1;iFindAA(a); - if(aa2 != nullptr) - break; - } - } - if(aa2){ - aaid = (aaID) aa2->id; - activate_val = GetAA(aa2->id); - } - } - - if (activate_val == 0){ - return; - } - - if(aa2) - { - if(aa2->account_time_required) - { - if((Timer::GetTimeSeconds() + account_creation) < aa2->account_time_required) - { - return; - } - } - } - - if(!p_timers.Expired(&database, AATimerID + pTimerAAStart)) - { - uint32 aaremain = p_timers.GetRemainingTime(AATimerID + pTimerAAStart); - uint32 aaremain_hr = aaremain / (60 * 60); - uint32 aaremain_min = (aaremain / 60) % 60; - uint32 aaremain_sec = aaremain % 60; - - if(aa2) { - if (aaremain_hr >= 1) //1 hour or more - Message(13, "You can use the ability %s again in %u hour(s) %u minute(s) %u seconds", - aa2->name, aaremain_hr, aaremain_min, aaremain_sec); - else //less than an hour - Message(13, "You can use the ability %s again in %u minute(s) %u seconds", - aa2->name, aaremain_min, aaremain_sec); - } else { - if (aaremain_hr >= 1) //1 hour or more - Message(13, "You can use this ability again in %u hour(s) %u minute(s) %u seconds", - aaremain_hr, aaremain_min, aaremain_sec); - else //less than an hour - Message(13, "You can use this ability again in %u minute(s) %u seconds", - aaremain_min, aaremain_sec); - } - return; - } - - if(activate_val > MAX_AA_ACTION_RANKS) - activate_val = MAX_AA_ACTION_RANKS; - activate_val--; //to get array index. - - //get our current node, now that the indices are well bounded - const AA_DBAction *caa = &AA_Actions[aaid][activate_val]; - - if((aaid == aaImprovedHarmTouch || aaid == aaLeechTouch) && !p_timers.Expired(&database, pTimerHarmTouch)){ - Message(13,"Ability recovery time not yet met."); - return; - } - - //everything should be configured out now - - uint16 target_id = 0; - - //figure out our target - switch(caa->target) { - case aaTargetUser: - case aaTargetGroup: - target_id = GetID(); - break; - case aaTargetCurrent: - case aaTargetCurrentGroup: - if(GetTarget() == nullptr) { - Message_StringID(MT_DefaultText, AA_NO_TARGET); //You must first select a target for this ability! - p_timers.Clear(&database, AATimerID + pTimerAAStart); - return; - } - target_id = GetTarget()->GetID(); - break; - case aaTargetPet: - if(GetPet() == nullptr) { - Message(0, "A pet is required for this skill."); - return; - } - target_id = GetPetID(); - break; - } - - //handle non-spell action - if(caa->action != aaActionNone) { - if(caa->mana_cost > 0) { - if(GetMana() < caa->mana_cost) { - Message_StringID(13, INSUFFICIENT_MANA); - return; - } - SetMana(GetMana() - caa->mana_cost); - } - if(caa->reuse_time > 0) - { - uint32 timer_base = CalcAAReuseTimer(caa); - if(activate == aaImprovedHarmTouch || activate == aaLeechTouch) - { - p_timers.Start(pTimerHarmTouch, HarmTouchReuseTime); - } - p_timers.Start(AATimerID + pTimerAAStart, timer_base); - SendAATimer(AATimerID, 0, 0); - } - HandleAAAction(aaid); - } - - //cast the spell, if we have one - if(caa->spell_id > 0 && caa->spell_id < SPDAT_RECORDS) { - - if(caa->reuse_time > 0) - { - uint32 timer_base = CalcAAReuseTimer(caa); - SendAATimer(AATimerID, 0, 0); - p_timers.Start(AATimerID + pTimerAAStart, timer_base); - if(activate == aaImprovedHarmTouch || activate == aaLeechTouch) - { - p_timers.Start(pTimerHarmTouch, HarmTouchReuseTime); - } - // Bards can cast instant cast AAs while they are casting another song - if (spells[caa->spell_id].cast_time == 0 && GetClass() == BARD && IsBardSong(casting_spell_id)) { - if(!SpellFinished(caa->spell_id, entity_list.GetMob(target_id), 10, -1, -1, spells[caa->spell_id].ResistDiff, false)) { - //Reset on failed cast - SendAATimer(AATimerID, 0, 0xFFFFFF); - Message_StringID(15,ABILITY_FAILED); - p_timers.Clear(&database, AATimerID + pTimerAAStart); - return; - } - } else { - if (!CastSpell(caa->spell_id, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, AATimerID + pTimerAAStart, timer_base, 1)) { - //Reset on failed cast - SendAATimer(AATimerID, 0, 0xFFFFFF); - Message_StringID(15,ABILITY_FAILED); - p_timers.Clear(&database, AATimerID + pTimerAAStart); - return; - } - } - } - else - { - if(!CastSpell(caa->spell_id, target_id)) - return; - } - } - // Check if AA is expendable - if (aas_send[activate - activate_val]->special_category == 7) { - - // Add the AA cost to the extended profile to track overall total - m_epp.expended_aa += aas_send[activate]->cost; - - SetAA(activate, 0); - - SaveAA(); /* Save Character AA */ - SendAA(activate); - SendAATable(); - } -} - -void Client::HandleAAAction(aaID activate) { - if(activate < 0 || activate >= aaHighestID) - return; - - uint8 activate_val = GetAA(activate); - - if (activate_val == 0) - return; - - if(activate_val > MAX_AA_ACTION_RANKS) - activate_val = MAX_AA_ACTION_RANKS; - activate_val--; //to get array index. - - //get our current node, now that the indices are well bounded - const AA_DBAction *caa = &AA_Actions[activate][activate_val]; - - uint16 timer_id = 0; - uint16 timer_duration = caa->duration; - aaTargetType target = aaTargetUser; - - uint16 spell_id = SPELL_UNKNOWN; //gets cast at the end if not still unknown - - switch(caa->action) { - case aaActionAETaunt: - entity_list.AETaunt(this); - break; - - case aaActionFlamingArrows: - //toggle it - if(CheckAAEffect(aaEffectFlamingArrows)) - EnableAAEffect(aaEffectFlamingArrows); - else - DisableAAEffect(aaEffectFlamingArrows); - break; - - case aaActionFrostArrows: - if(CheckAAEffect(aaEffectFrostArrows)) - EnableAAEffect(aaEffectFrostArrows); - else - DisableAAEffect(aaEffectFrostArrows); - break; - - case aaActionRampage: - EnableAAEffect(aaEffectRampage, 10); - break; - - case aaActionSharedHealth: - if(CheckAAEffect(aaEffectSharedHealth)) - EnableAAEffect(aaEffectSharedHealth); - else - DisableAAEffect(aaEffectSharedHealth); - break; - - case aaActionCelestialRegen: { - //special because spell_id depends on a different AA - switch (GetAA(aaCelestialRenewal)) { - case 1: - spell_id = 3250; - break; - case 2: - spell_id = 3251; - break; - default: - spell_id = 2740; - break; - } - target = aaTargetCurrent; - break; - } - - case aaActionDireCharm: { - //special because spell_id depends on class - switch (GetClass()) - { - case DRUID: - spell_id = 2760; //2644? - break; - case NECROMANCER: - spell_id = 2759; //2643? - break; - case ENCHANTER: - spell_id = 2761; //2642? - break; - } - target = aaTargetCurrent; - break; - } - - case aaActionImprovedFamiliar: { - //Spell IDs might be wrong... - if (GetAA(aaAllegiantFamiliar)) - spell_id = 3264; //1994? - else - spell_id = 2758; //2155? - break; - } - - case aaActionActOfValor: - if(GetTarget() != nullptr) { - int curhp = GetTarget()->GetHP(); - target = aaTargetCurrent; - GetTarget()->HealDamage(curhp, this); - Death(this, 0, SPELL_UNKNOWN, SkillHandtoHand); - } - break; - - case aaActionSuspendedMinion: - if (GetPet()) { - target = aaTargetPet; - switch (GetAA(aaSuspendedMinion)) { - case 1: - spell_id = 3248; - break; - case 2: - spell_id = 3249; - break; - } - //do we really need to cast a spell? - - Message(0,"You call your pet to your side."); - GetPet()->WipeHateList(); - GetPet()->GMMove(GetX(),GetY(),GetZ()); - if (activate_val > 1) - entity_list.ClearFeignAggro(GetPet()); - } else { - Message(0,"You have no pet to call."); - } - break; - - case aaActionEscape: - Escape(); - break; - - // Don't think this code is used any longer for Bestial Alignment as the aa.has a spell_id and no nonspell_action. - case aaActionBeastialAlignment: - switch(GetBaseRace()) { - case BARBARIAN: - spell_id = AA_Choose3(activate_val, 4521, 4522, 4523); - break; - case TROLL: - spell_id = AA_Choose3(activate_val, 4524, 4525, 4526); - break; - case OGRE: - spell_id = AA_Choose3(activate_val, 4527, 4527, 4529); - break; - case IKSAR: - spell_id = AA_Choose3(activate_val, 4530, 4531, 4532); - break; - case VAHSHIR: - spell_id = AA_Choose3(activate_val, 4533, 4534, 4535); - break; - } - - case aaActionLeechTouch: - target = aaTargetCurrent; - spell_id = SPELL_HARM_TOUCH2; - EnableAAEffect(aaEffectLeechTouch, 1000); - break; - - case aaActionFadingMemories: - // Do nothing since spell effect works correctly, but mana isn't used. - break; - - default: - Log.Out(Logs::General, Logs::Error, "Unknown AA nonspell action type %d", caa->action); - return; - } - - - uint16 target_id = 0; - //figure out our target - switch(target) { - case aaTargetUser: - case aaTargetGroup: - target_id = GetID(); - break; - case aaTargetCurrent: - case aaTargetCurrentGroup: - if(GetTarget() == nullptr) { - Message_StringID(MT_DefaultText, AA_NO_TARGET); //You must first select a target for this ability! - p_timers.Clear(&database, timer_id + pTimerAAEffectStart); - return; - } - target_id = GetTarget()->GetID(); - break; - case aaTargetPet: - if(GetPet() == nullptr) { - Message(0, "A pet is required for this skill."); - return; - } - target_id = GetPetID(); - break; - } - - //cast the spell, if we have one - if(IsValidSpell(spell_id)) { - int aatid = GetAATimerID(activate); - if (!CastSpell(spell_id, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, pTimerAAStart + aatid, CalcAAReuseTimer(caa), 1)) { - SendAATimer(aatid, 0, 0xFFFFFF); - Message_StringID(15,ABILITY_FAILED); - p_timers.Clear(&database, pTimerAAStart + aatid); - return; - } - } - - //handle the duration timer if we have one. - if(timer_id > 0 && timer_duration > 0) { - p_timers.Start(pTimerAAEffectStart + timer_id, timer_duration); - } -} - void Mob::TemporaryPets(uint16 spell_id, Mob *targ, const char *name_override, uint32 duration_override, bool followme, bool sticktarg) { //It might not be a bad idea to put these into the database, eventually.. @@ -895,612 +440,27 @@ void Mob::WakeTheDead(uint16 spell_id, Mob *target, uint32 duration) target->AddToHateList(this, 1, 0); } -//turn on an AA effect -//duration == 0 means no time limit, used for one-shot deals, etc.. -void Client::EnableAAEffect(aaEffectType type, uint32 duration) { - if(type > _maxaaEffectType) - return; //for now, special logic needed. - m_epp.aa_effects |= 1 << (type-1); - - if(duration > 0) { - p_timers.Start(pTimerAAEffectStart + type, duration); - } else { - p_timers.Clear(&database, pTimerAAEffectStart + type); - } -} - -void Client::DisableAAEffect(aaEffectType type) { - if(type > _maxaaEffectType) - return; //for now, special logic needed. - uint32 bit = 1 << (type-1); - if(m_epp.aa_effects & bit) { - m_epp.aa_effects ^= bit; - } - p_timers.Clear(&database, pTimerAAEffectStart + type); -} - -/* -By default an AA effect is a one shot deal, unless -a duration timer is set. -*/ -bool Client::CheckAAEffect(aaEffectType type) { - if(type > _maxaaEffectType) - return(false); //for now, special logic needed. - if(m_epp.aa_effects & (1 << (type-1))) { //is effect enabled? - //has our timer expired? - if(p_timers.Expired(&database, pTimerAAEffectStart + type)) { - DisableAAEffect(type); - return(false); - } - return(true); - } - return(false); -} - -void Client::SendAAStats() { - EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAExpUpdate, sizeof(AltAdvStats_Struct)); - AltAdvStats_Struct *aps = (AltAdvStats_Struct *)outapp->pBuffer; - aps->experience = m_pp.expAA; - aps->experience = (uint32)(((float)330.0f * (float)m_pp.expAA) / (float)max_AAXP); - aps->unspent = m_pp.aapoints; - aps->percentage = m_epp.perAA; - QueuePacket(outapp); - safe_delete(outapp); -} - -void Client::BuyAA(AA_Action* action) -{ - Log.Out(Logs::Detail, Logs::AA, "Starting to buy AA %d", action->ability); - - //find the AA information from the database - SendAA_Struct* aa2 = zone->FindAA(action->ability); - if(!aa2) { - //hunt for a lower level... - int i; - int a; - for(i=1;iability - i; - if(a <= 0) - break; - Log.Out(Logs::Detail, Logs::AA, "Could not find AA %d, trying potential parent %d", action->ability, a); - aa2 = zone->FindAA(a); - if(aa2 != nullptr) - break; - } - } - if(aa2 == nullptr) - return; //invalid ability... - - if(aa2->special_category == 1 || aa2->special_category == 2) - return; // Not purchasable progression style AAs - - if(aa2->special_category == 8 && aa2->cost == 0) - return; // Not purchasable racial AAs(set a cost to make them purchasable) - - uint32 cur_level = GetAA(aa2->id); - if((aa2->id + cur_level) != action->ability) { //got invalid AA - Log.Out(Logs::Detail, Logs::AA, "Unable to find or match AA %d (found %d + lvl %d)", action->ability, aa2->id, cur_level); - return; - } - - if(aa2->account_time_required) - { - if((Timer::GetTimeSeconds() - account_creation) < aa2->account_time_required) - { - return; - } - } - - uint32 real_cost; - uint8 req_level; - std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(action->ability); - - if(RequiredLevel != AARequiredLevelAndCost.end()) { - real_cost = RequiredLevel->second.Cost; - req_level = RequiredLevel->second.Level; - } - else { - real_cost = aa2->cost + (aa2->cost_inc * cur_level); - req_level = aa2->class_type + (aa2->level_inc * cur_level); - } - - if (req_level > GetLevel()) - return; //Cheater trying to Buy AA... - - if (m_pp.aapoints >= real_cost && cur_level < aa2->max_level) { - SetAA(aa2->id, cur_level + 1); - - Log.Out(Logs::Detail, Logs::AA, "Set AA %d to level %d", aa2->id, cur_level + 1); - - m_pp.aapoints -= real_cost; - - /* Do Player Profile rank calculations and set player profile */ - SaveAA(); - /* Save to Database to avoid having to write the whole AA array to the profile, only write changes*/ - // database.SaveCharacterAA(this->CharacterID(), aa2->id, (cur_level + 1)); - - if ((RuleB(AA, Stacking) && (GetClientVersionBit() >= 4) && (aa2->hotkey_sid == 4294967295u)) - && ((aa2->max_level == (cur_level + 1)) && aa2->sof_next_id)){ - SendAA(aa2->id); - SendAA(aa2->sof_next_id); - } - else - SendAA(aa2->id); - - SendAATable(); - - /* - We are building these messages ourself instead of using the stringID to work around patch discrepencies - these are AA_GAIN_ABILITY (410) & AA_IMPROVE (411), respectively, in both Titanium & SoF. not sure about 6.2 - */ - - /* Initial purchase of an AA ability */ - if (cur_level < 1){ - Message(15, "You have gained the ability \"%s\" at a cost of %d ability %s.", aa2->name, real_cost, (real_cost>1) ? "points" : "point"); - - /* QS: Player_Log_AA_Purchases */ - if (RuleB(QueryServ, PlayerLogAAPurchases)){ - std::string event_desc = StringFormat("Initial AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); - QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - } - } - /* Ranked purchase of an AA ability */ - else{ - Message(15, "You have improved %s %d at a cost of %d ability %s.", aa2->name, cur_level + 1, real_cost, (real_cost > 1) ? "points" : "point"); - - /* QS: Player_Log_AA_Purchases */ - if (RuleB(QueryServ, PlayerLogAAPurchases)){ - std::string event_desc = StringFormat("Ranked AA Purchase :: aa_name:%s aa_id:%i at cost:%i in zoneid:%i instid:%i", aa2->name, aa2->id, real_cost, this->GetZoneID(), this->GetInstanceID()); - QServ->PlayerLogEvent(Player_Log_AA_Purchases, this->CharacterID(), event_desc); - } - } - - SendAAStats(); - - CalcBonuses(); - if(title_manager.IsNewAATitleAvailable(m_pp.aapoints_spent, GetBaseClass())) - NotifyNewTitlesAvailable(); - } -} - -void Client::SendAATimer(uint32 ability, uint32 begin, uint32 end) { - EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction,sizeof(UseAA_Struct)); - UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; - uaaout->ability = ability; - uaaout->begin = begin; - uaaout->end = end; - QueuePacket(outapp); - safe_delete(outapp); -} - -//sends all AA timers. -void Client::SendAATimers() { - //we dont use SendAATimer because theres no reason to allocate the EQApplicationPacket every time - EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction,sizeof(UseAA_Struct)); - UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; - - PTimerList::iterator c,e; - c = p_timers.begin(); - e = p_timers.end(); - for(; c != e; ++c) { - PersistentTimer *cur = c->second; - if(cur->GetType() < pTimerAAStart || cur->GetType() > pTimerAAEnd) - continue; //not an AA timer - //send timer - uaaout->begin = cur->GetStartTime(); - uaaout->end = static_cast(time(nullptr)); - uaaout->ability = cur->GetType() - pTimerAAStart; // uuaaout->ability is really a shared timer number - QueuePacket(outapp); - } - - safe_delete(outapp); -} - -void Client::SendAATable() { - EQApplicationPacket* outapp = new EQApplicationPacket(OP_RespondAA, sizeof(AATable_Struct)); - - AATable_Struct* aa2 = (AATable_Struct *)outapp->pBuffer; - aa2->aa_spent = GetAAPointsSpent(); - - uint32 i; - for(i=0;i < MAX_PP_AA_ARRAY;i++){ - aa2->aa_list[i].AA = aa[i]->value ? aa[i]->AA : 0; // bit of a hack to prevent expendables punching a hole - aa2->aa_list[i].value = aa[i]->value; - aa2->aa_list[i].charges = aa[i]->charges; - } - QueuePacket(outapp); - safe_delete(outapp); -} - -void Client::SendPreviousAA(uint32 id, int seq){ - uint32 value=0; - SendAA_Struct* saa2 = nullptr; - if(id==0) - saa2 = zone->GetAABySequence(seq); - else - saa2 = zone->FindAA(id); - if(!saa2) - return; - int size=sizeof(SendAA_Struct)+sizeof(AA_Ability)*saa2->total_abilities; - uchar* buffer = new uchar[size]; - SendAA_Struct* saa=(SendAA_Struct*)buffer; - value = GetAA(saa2->id); - EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAATable); - outapp->size=size; - outapp->pBuffer=(uchar*)saa; - value--; - memcpy(saa,saa2,size); - - if(value>0){ - if(saa->spellid==0) - saa->spellid=0xFFFFFFFF; - saa->id+=value; - saa->next_id=saa->id+1; - if(value==1) - saa->last_id=saa2->id; - else - saa->last_id=saa->id-1; - saa->current_level=value+1; - saa->cost2 = 0; //cost 2 is what the client uses to calc how many points we've spent, so we have to add up the points in order - for(uint32 i = 0; i < (value+1); i++) { - saa->cost2 += saa->cost + (saa->cost_inc * i); - } - } - - database.FillAAEffects(saa); - QueuePacket(outapp); - safe_delete(outapp); -} - -void Client::SendAA(uint32 id, int seq) { - - uint32 value=0; - SendAA_Struct* saa2 = nullptr; - SendAA_Struct* qaa = nullptr; - SendAA_Struct* saa_pp = nullptr; - bool IsBaseLevel = true; - bool aa_stack = false; - - if(id==0) - saa2 = zone->GetAABySequence(seq); - else - saa2 = zone->FindAA(id); - if(!saa2) - return; - - uint16 classes = saa2->classes; - if(!(classes & (1 << GetClass())) && (GetClass()!=BERSERKER || saa2->berserker==0)){ - return; - } - - if(saa2->account_time_required) - { - if((Timer::GetTimeSeconds() - account_creation) < saa2->account_time_required) - { - return; - } - } - - // Hide Quest/Progression AAs unless player has been granted the first level using $client->IncrementAA(skill_id). - if (saa2->special_category == 1 || saa2->special_category == 2 ) { - if(GetAA(saa2->id) == 0) - return; - // For Quest line AA(demiplane AEs) where only 1 is visible at a time, check to make sure only the highest level obtained is shown - if(saa2->aa_expansion > 0) { - qaa = zone->FindAA(saa2->id+1); - if(qaa && (saa2->aa_expansion == qaa->aa_expansion) && GetAA(qaa->id) > 0) - return; - } - } - -/* Beginning of Shroud AAs, these categories are for Passive and Active Shroud AAs - Eventually with a toggle we could have it show player list or shroud list - if (saa2->special_category == 3 || saa2->special_category == 4) - return; -*/ - // Check for racial/Drakkin blood line AAs - if (saa2->special_category == 8) - { - uint32 client_race = this->GetBaseRace(); - - // Drakkin Bloodlines - if (saa2->aa_expansion > 522) - { - if (client_race != 522) - return; // Check for Drakkin Race - - int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline - - if (heritage != saa2->aa_expansion) - return; - } - // Racial AAs - else if (client_race != saa2->aa_expansion) - { - return; - } - } - - /* - AA stacking on SoF+ clients. - - Note: There were many ways to achieve this effect - The method used proved to be the most straight forward and consistent. - Stacking does not currently work ideally for AA's that use hotkeys, therefore they will be excluded at this time. - - TODO: Problem with aa.hotkeys - When you reach max rank of an AA tier (ie 5/5), it automatically displays the next AA in - the series and you can not transfer the hotkey to the next AA series. To the best of the my ability and through many - different variations of coding I could not find an ideal solution to this issue. - - How stacking works: - Utilizes two new fields: sof_next_id (which is the next id in the series), sof_current_level (ranks the AA's as the current level) - 1) If no AA's purchased only display the base levels of each AA series. - 2) When you purchase an AA and its rank is maxed it sends the packet for the completed AA, and the packet - for the next aa in the series. The previous tier is removed from your window, and the new AA is displayed. - 3) When you zone/buy your player profile will be checked and determine what AA can be displayed base on what you have already. - */ - - if (RuleB(AA, Stacking) && (GetClientVersionBit() >= 4) && (saa2->hotkey_sid == 4294967295u)) - aa_stack = true; - - if (aa_stack){ - uint32 aa_AA = 0; - uint32 aa_value = 0; - for (int i = 0; i < MAX_PP_AA_ARRAY; i++) { - if (aa[i]) { - aa_AA = aa[i]->AA; - aa_value = aa[i]->value; - - if (aa_AA){ - - if (aa_value > 0) - aa_AA -= aa_value-1; - - saa_pp = zone->FindAA(aa_AA); - - if (saa_pp){ - - if (saa_pp->sof_next_skill == saa2->sof_next_skill){ - - if (saa_pp->id == saa2->id) - break; //You already have this in the player profile. - else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value < saa_pp->max_level)) - return; //DISABLE DISPLAY HIGHER - You have not reached max level yet of your current AA. - else if ((saa_pp->sof_current_level < saa2->sof_current_level) && (aa_value == saa_pp->max_level) && (saa_pp->sof_next_id == saa2->id)) - IsBaseLevel = false; //ALLOW DISPLAY HIGHER - } - } - } - } - } - } - - //Hide higher tiers of multi tiered AA's if the base level is not fully purchased. - if (aa_stack && IsBaseLevel && saa2->sof_current_level > 0) - return; - - int size=sizeof(SendAA_Struct)+sizeof(AA_Ability)*saa2->total_abilities; - - if(size == 0) - return; - - uchar* buffer = new uchar[size]; - SendAA_Struct* saa=(SendAA_Struct*)buffer; - memcpy(saa,saa2,size); - - if(saa->spellid==0) - saa->spellid=0xFFFFFFFF; - - value=GetAA(saa->id); - uint32 orig_val = value; - - if(value && saa->id){ - - if(value < saa->max_level){ - saa->id+=value; - saa->next_id=saa->id+1; - value++; - } - - else if (aa_stack && saa->sof_next_id){ - saa->id+=value-1; - saa->next_id=saa->sof_next_id; - - //Prevent removal of previous AA from window if next AA belongs to a higher client version. - SendAA_Struct* saa_next = nullptr; - saa_next = zone->FindAA(saa->sof_next_id); - - // this check should work as long as we continue to just add the clients and just increase - // each number .... - if (saa_next && static_cast(GetClientVersion()) < saa_next->clientver - 1) { - saa->next_id=0xFFFFFFFF; - } - } - - else{ - saa->id+=value-1; - saa->next_id=0xFFFFFFFF; - } - - uint32 current_level_mod = 0; - if (aa_stack) - current_level_mod = saa->sof_current_level; - - saa->last_id=saa->id-1; - saa->current_level=value+(current_level_mod); - saa->cost = saa2->cost + (saa2->cost_inc*(value-1)); - saa->cost2 = 0; - for(uint32 i = 0; i < value; i++) { - saa->cost2 += saa2->cost + (saa2->cost_inc * i); - } - saa->class_type = saa2->class_type + (saa2->level_inc*(value-1)); - } - - if (aa_stack){ - - if (saa->sof_current_level >= 1 && value == 0) - saa->current_level = saa->sof_current_level+1; - - saa->max_level = saa->sof_max_level; - } - - database.FillAAEffects(saa); - - if(value > 0) - { - // AA_Action stores the base ID - const AA_DBAction *caa = &AA_Actions[saa->id - value + 1][value - 1]; - - if(caa && caa->reuse_time > 0) - saa->spell_refresh = CalcAAReuseTimer(caa); - } - - //You can now use the level_inc field in the altadv_vars table to accomplish this, though still needed - //for special cases like LOH/HT due to inability to implement correct stacking of AA's that use hotkeys. - std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(saa->id); - - if(RequiredLevel != AARequiredLevelAndCost.end()) - { - saa->class_type = RequiredLevel->second.Level; - saa->cost = RequiredLevel->second.Cost; - } - - - EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAATable); - outapp->size=size; - outapp->pBuffer=(uchar*)saa; - if(id==0 && value && (orig_val < saa->max_level)) //send previous AA only on zone in - SendPreviousAA(id, seq); - - QueuePacket(outapp); - safe_delete(outapp); - //will outapp delete the buffer for us even though it didnt make it? --- Yes, it should -} - -void Client::SendAAList(){ - int total = zone->GetTotalAAs(); - for(int i=0;i < total;i++){ - SendAA(0,i); - } -} - -uint32 Client::GetAA(uint32 aa_id) const { - std::map::const_iterator res; - res = aa_points.find(aa_id); - if(res != aa_points.end()) { - return(res->second); - } - return(0); -} - -bool Client::SetAA(uint32 aa_id, uint32 new_value) { - aa_points[aa_id] = new_value; - uint32 cur; - auto sendaa = zone->FindAA(aa_id); // this is a bit hacky - uint32 charges = sendaa->special_category == 7 && new_value ? 1 : 0; - for(cur=0;cur < MAX_PP_AA_ARRAY;cur++){ - if((aa[cur]->value > 1) && ((aa[cur]->AA - aa[cur]->value + 1)== aa_id)){ - aa[cur]->value = new_value; - if(new_value > 0) - aa[cur]->AA++; - aa[cur]->charges = charges; - return true; - } - else if((aa[cur]->value == 1) && (aa[cur]->AA == aa_id)){ - aa[cur]->value = new_value; - if(new_value > 0) - aa[cur]->AA++; - aa[cur]->charges = charges; - return true; - } - // hack to prevent expendable exploit, we should probably be reshuffling the array to fix the hole - else if(aa[cur]->value == 0 && new_value == 1 && aa[cur]->AA == aa_id) { - aa[cur]->value = new_value; - aa[cur]->charges = charges; - return true; - } - else if(aa[cur]->AA==0){ //end of list - aa[cur]->AA = aa_id; - aa[cur]->value = new_value; - aa[cur]->charges = charges; - return true; - } - } - return false; -} - -SendAA_Struct* Zone::FindAA(uint32 id) { - return aas_send[id]; -} - -void Zone::LoadAAs() { - Log.Out(Logs::General, Logs::Status, "Loading AA information..."); - totalAAs = database.CountAAs(); - if(totalAAs == 0) { - Log.Out(Logs::General, Logs::Error, "Failed to load AAs!"); - aas = nullptr; - return; - } - aas = new SendAA_Struct *[totalAAs]; - - database.LoadAAs(aas); - - int i; - for(i=0; i < totalAAs; i++){ - SendAA_Struct* aa = aas[i]; - aas_send[aa->id] = aa; - } - - //load AA Effects into aa_effects - Log.Out(Logs::General, Logs::Status, "Loading AA Effects..."); - if (database.LoadAAEffects2()) - Log.Out(Logs::General, Logs::Status, "Loaded %d AA Effects.", aa_effects.size()); - else - Log.Out(Logs::General, Logs::Error, "Failed to load AA Effects!"); -} - -bool ZoneDatabase::LoadAAEffects2() { - aa_effects.clear(); //start fresh - - const std::string query = "SELECT aaid, slot, effectid, base1, base2 FROM aa_effects ORDER BY aaid ASC, slot ASC"; - auto results = QueryDatabase(query); - if (!results.Success()) { - return false; - } - - if (!results.RowCount()) { //no results - return false; - } - - for(auto row = results.begin(); row != results.end(); ++row) { - int aaid = atoi(row[0]); - int slot = atoi(row[1]); - int effectid = atoi(row[2]); - int base1 = atoi(row[3]); - int base2 = atoi(row[4]); - aa_effects[aaid][slot].skill_id = effectid; - aa_effects[aaid][slot].base1 = base1; - aa_effects[aaid][slot].base2 = base2; - aa_effects[aaid][slot].slot = slot; //not really needed, but we'll populate it just in case - } - - return true; -} - -void Client::ResetAA(){ +void Client::ResetAA() { + SendClearAA(); RefundAA(); - uint32 i; - for (i=0; i < MAX_PP_AA_ARRAY; i++) { - aa[i]->AA = 0; - aa[i]->value = 0; - aa[i]->charges = 0; - m_pp.aa_array[i].AA = 0; - m_pp.aa_array[i].value = 0; - m_pp.aa_array[i].charges= 0; - } - std::map::iterator itr; - for(itr = aa_points.begin(); itr != aa_points.end(); ++itr) - aa_points[itr->first] = 0; + memset(&m_pp.aa_array[0], 0, sizeof(AA_Array) * MAX_PP_AA_ARRAY); + + int i = 0; + for(auto &rank_value : aa_ranks) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_value.first, rank_value.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!rank) { + continue; + } + + m_pp.aa_array[i].AA = rank_value.first; + m_pp.aa_array[i].value = rank_value.second.first; + m_pp.aa_array[i].charges = rank_value.second.second; + ++i; + } for(int i = 0; i < _maxLeaderAA; ++i) m_pp.leader_abilities.ranks[i] = 0; @@ -1510,13 +470,7 @@ void Client::ResetAA(){ m_pp.group_leadership_exp = 0; m_pp.raid_leadership_exp = 0; - database.DeleteCharacterAAs(this->CharacterID()); - SaveAA(); - SendClearAA(); - SendAAList(); - SendAATable(); - SendAAStats(); - database.DeleteCharacterLeadershipAAs(this->CharacterID()); + database.DeleteCharacterLeadershipAAs(CharacterID()); // undefined for these clients if (GetClientVersionBit() & BIT_TitaniumAndEarlier) Kick(); @@ -1797,268 +751,43 @@ void Client::InspectBuffs(Client* Inspector, int Rank) Inspector->FastQueuePacket(&outapp); } -//this really need to be renamed to LoadAAActions() -bool ZoneDatabase::LoadAAEffects() { - memset(AA_Actions, 0, sizeof(AA_Actions)); //I hope the compiler is smart about this size... +void Client::RefundAA() { + int refunded = 0; - const std::string query = "SELECT aaid, rank, reuse_time, spell_id, target, " - "nonspell_action, nonspell_mana, nonspell_duration, " - "redux_aa, redux_rate, redux_aa2, redux_rate2 FROM aa_actions"; - auto results = QueryDatabase(query); - if (!results.Success()) { - return false; - } + auto rank_value = aa_ranks.begin(); + while(rank_value != aa_ranks.end()) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_value->first, rank_value->second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; - for (auto row = results.begin(); row != results.end(); ++row) { - - int aaid = atoi(row[0]); - int rank = atoi(row[1]); - if(aaid < 0 || aaid >= aaHighestID || rank < 0 || rank >= MAX_AA_ACTION_RANKS) + if(!ability) { + ++rank_value; continue; - AA_DBAction *caction = &AA_Actions[aaid][rank]; - - caction->reuse_time = atoi(row[2]); - caction->spell_id = atoi(row[3]); - caction->target = (aaTargetType) atoi(row[4]); - caction->action = (aaNonspellAction) atoi(row[5]); - caction->mana_cost = atoi(row[6]); - caction->duration = atoi(row[7]); - caction->redux_aa = (aaID) atoi(row[8]); - caction->redux_rate = atoi(row[9]); - caction->redux_aa2 = (aaID) atoi(row[10]); - caction->redux_rate2 = atoi(row[11]); - - } - - return true; -} - -//Returns the number effects an aa.has when we send them to the client -//For the purposes of sizing a packet because every skill does not -//have the same number effects, they can range from none to a few depending on AA. -//counts the # of effects by counting the different slots of an AAID in the DB. - -//AndMetal: this may now be obsolete since we have Zone::GetTotalAALevels() -uint8 ZoneDatabase::GetTotalAALevels(uint32 skill_id) { - - std::string query = StringFormat("SELECT count(slot) FROM aa_effects WHERE aaid = %i", skill_id); - auto results = QueryDatabase(query); - if (!results.Success()) { - return 0; - } - - if (results.RowCount() != 1) - return 0; - - auto row = results.begin(); - - return atoi(row[0]); -} - -//this will allow us to count the number of effects for an AA by pulling the info from memory instead of the database. hopefully this will same some CPU cycles -uint8 Zone::GetTotalAALevels(uint32 skill_id) { - size_t sz = aa_effects[skill_id].size(); - return sz >= 255 ? 255 : static_cast(sz); -} - -/* -Every AA can send the client effects, which are purely for client side effects. -Essentially it's like being able to attach a very simple version of a spell to -Any given AA, it has 4 fields: -skill_id = spell effect id -slot = ID slot, doesn't appear to have any impact on stacking like real spells, just needs to be unique. -base1 = the base field of a spell -base2 = base field 2 of a spell, most AAs do not utilize this -example: - skill_id = SE_STA - slot = 1 - base1 = 15 - This would if you filled the abilities struct with this make the client show if it had - that AA an additional 15 stamina on the client's stats -*/ -void ZoneDatabase::FillAAEffects(SendAA_Struct* aa_struct){ - if(!aa_struct) - return; - - auto it = aa_effects.find(aa_struct->id); - if (it != aa_effects.end()) { - for (uint32 slot = 0; slot < aa_struct->total_abilities; slot++) { - // aa_effects is a map of a map, so the slot reference does not start at 0 - aa_struct->abilities[slot].skill_id = it->second[slot + 1].skill_id; - aa_struct->abilities[slot].base1 = it->second[slot + 1].base1; - aa_struct->abilities[slot].base2 = it->second[slot + 1].base2; - aa_struct->abilities[slot].slot = it->second[slot + 1].slot; } - } -} -uint32 ZoneDatabase::CountAAs(){ - - const std::string query = "SELECT count(title_sid) FROM altadv_vars"; - auto results = QueryDatabase(query); - if (!results.Success()) { - return 0; - } - - if (results.RowCount() != 1) - return 0; - - auto row = results.begin(); - - return atoi(row[0]);; -} - -uint32 ZoneDatabase::CountAAEffects() { - - const std::string query = "SELECT count(id) FROM aa_effects"; - auto results = QueryDatabase(query); - if (!results.Success()) { - return 0; - } - - if (results.RowCount() != 1) - return 0; - - auto row = results.begin(); - - return atoi(row[0]); -} - -uint32 ZoneDatabase::GetSizeAA(){ - int size=CountAAs()*sizeof(SendAA_Struct); - if(size>0) - size+=CountAAEffects()*sizeof(AA_Ability); - return size; -} - -void ZoneDatabase::LoadAAs(SendAA_Struct **load){ - if(!load) - return; - - std::string query = "SELECT skill_id FROM altadv_vars ORDER BY skill_id"; - auto results = QueryDatabase(query); - if (results.Success()) { - int skill = 0, index = 0; - for (auto row = results.begin(); row != results.end(); ++row, ++index) { - skill = atoi(row[0]); - load[index] = GetAASkillVars(skill); - load[index]->seq = index+1; + if(ability->charges > 0 && rank_value->second.second < 1) { + ++rank_value; + continue; } - } else { + + if(ability->grant_only) { + ++rank_value; + continue; + } + + refunded += rank->total_cost; + rank_value = aa_ranks.erase(rank_value); } - AARequiredLevelAndCost.clear(); - query = "SELECT skill_id, level, cost from aa_required_level_cost order by skill_id"; - results = QueryDatabase(query); - if (!results.Success()) { - return; + if(refunded > 0) { + m_pp.aapoints += refunded; + SaveAA(); + Save(); } - AALevelCost_Struct aalcs; - for (auto row = results.begin(); row != results.end(); ++row) { - aalcs.Level = atoi(row[1]); - aalcs.Cost = atoi(row[2]); - AARequiredLevelAndCost[atoi(row[0])] = aalcs; - } -} - -SendAA_Struct* ZoneDatabase::GetAASkillVars(uint32 skill_id) -{ - std::string query = "SET @row = 0"; //initialize "row" variable in database for next query - auto results = QueryDatabase(query); - if (!results.Success()) { - return nullptr; - } - - query = StringFormat("SELECT a.cost, a.max_level, a.hotkey_sid, a.hotkey_sid2, a.title_sid, a.desc_sid, a.type, " - "COALESCE(" //So we can return 0 if it's null. - "(" // this is our derived table that has the row # - // that we can SELECT from, because the client is stupid. - "SELECT p.prereq_index_num " - "FROM (SELECT a2.skill_id, @row := @row + 1 AS prereq_index_num " - "FROM altadv_vars a2) AS p " - "WHERE p.skill_id = a.prereq_skill), 0) " - "AS prereq_skill_index, a.prereq_minpoints, a.spell_type, a.spell_refresh, a.classes, " - "a.berserker, a.spellid, a.class_type, a.name, a.cost_inc, a.aa_expansion, a.special_category, " - "a.sof_type, a.sof_cost_inc, a.sof_max_level, a.sof_next_skill, " - "a.clientver, " // Client Version 0 = None, 1 = All, 2 = Titanium/6.2, 4 = SoF 5 = SOD 6 = UF - "a.account_time_required, a.sof_current_level, a.sof_next_id, a.level_inc " - "FROM altadv_vars a WHERE skill_id=%i", skill_id); - results = QueryDatabase(query); - if (!results.Success()) { - return nullptr; - } - - if (results.RowCount() != 1) - return nullptr; - - int total_abilities = GetTotalAALevels(skill_id); //eventually we'll want to use zone->GetTotalAALevels(skill_id) since it should save queries to the DB - int totalsize = total_abilities * sizeof(AA_Ability) + sizeof(SendAA_Struct); - - SendAA_Struct* sendaa = nullptr; - uchar* buffer; - - buffer = new uchar[totalsize]; - memset(buffer,0,totalsize); - sendaa = (SendAA_Struct*)buffer; - - auto row = results.begin(); - - //ATOI IS NOT UNSIGNED LONG-SAFE!!! - - sendaa->cost = atoul(row[0]); - sendaa->cost2 = sendaa->cost; - sendaa->max_level = atoul(row[1]); - sendaa->hotkey_sid = atoul(row[2]); - sendaa->id = skill_id; - sendaa->hotkey_sid2 = atoul(row[3]); - sendaa->title_sid = atoul(row[4]); - sendaa->desc_sid = atoul(row[5]); - sendaa->type = atoul(row[6]); - sendaa->prereq_skill = atoul(row[7]); - sendaa->prereq_minpoints = atoul(row[8]); - sendaa->spell_type = atoul(row[9]); - sendaa->spell_refresh = atoul(row[10]); - sendaa->classes = static_cast(atoul(row[11])); - sendaa->berserker = static_cast(atoul(row[12])); - sendaa->last_id = 0xFFFFFFFF; - sendaa->current_level=1; - sendaa->spellid = atoul(row[13]); - sendaa->class_type = atoul(row[14]); - strcpy(sendaa->name,row[15]); - - sendaa->total_abilities=total_abilities; - if(sendaa->max_level > 1) - sendaa->next_id=skill_id+1; - else - sendaa->next_id=0xFFFFFFFF; - - sendaa->cost_inc = atoi(row[16]); - - // Begin SoF Specific/Adjusted AA Fields - sendaa->aa_expansion = atoul(row[17]); - sendaa->special_category = atoul(row[18]); - sendaa->sof_type = atoul(row[19]); - sendaa->sof_cost_inc = atoi(row[20]); - sendaa->sof_max_level = atoul(row[21]); - sendaa->sof_next_skill = atoul(row[22]); - sendaa->clientver = atoul(row[23]); - sendaa->account_time_required = atoul(row[24]); - - //Internal use only - not sent to client - sendaa->sof_current_level = atoul(row[25]); - sendaa->sof_next_id = atoul(row[26]); - sendaa->level_inc = static_cast(atoul(row[27])); - - return sendaa; -} - -void Client::DurationRampage(uint32 duration) -{ - if(duration) { - m_epp.aa_effects |= 1 << (aaEffectRampage-1); - p_timers.Start(pTimerAAEffectStart + aaEffectRampage, duration); - } + SendAlternateAdvancementTable(); + SendAlternateAdvancementPoints(); + SendAlternateAdvancementStats(); } AA_SwarmPetInfo::AA_SwarmPetInfo() @@ -2079,3 +808,917 @@ Mob *AA_SwarmPetInfo::GetOwner() { return entity_list.GetMobID(owner_id); } + +//New AA +void Client::SendAlternateAdvancementTable() { + for(auto &aa : zone->aa_abilities) { + uint32 charges = 0; + auto ranks = GetAA(aa.second->first_rank_id, &charges); + if(ranks) { + if(aa.second->GetMaxLevel(this) == ranks) { + SendAlternateAdvancementRank(aa.first, ranks); + } else { + SendAlternateAdvancementRank(aa.first, ranks); + SendAlternateAdvancementRank(aa.first, ranks + 1); + } + } else { + SendAlternateAdvancementRank(aa.first, 1); + } + } +} + +void Client::SendAlternateAdvancementRank(int aa_id, int level) { + if(!zone) + return; + + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa_id, level); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { + return; + } + + if(!(ability->classes & (1 << GetClass()))) { + return; + } + + if(!CanUseAlternateAdvancementRank(rank)) { + return; + } + + int size = sizeof(AARankInfo_Struct) + (sizeof(AARankEffect_Struct) * rank->effects.size()) + (sizeof(AARankPrereq_Struct) * rank->prereqs.size()); + EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, size); + AARankInfo_Struct *aai = (AARankInfo_Struct*)outapp->pBuffer; + + aai->id = rank->id; + aai->upper_hotkey_sid = rank->upper_hotkey_sid; + aai->lower_hotkey_sid = rank->lower_hotkey_sid; + aai->title_sid = rank->title_sid; + aai->desc_sid = rank->desc_sid; + aai->cost = rank->cost; + aai->seq = aa_id; + aai->type = ability->type; + aai->spell = rank->spell; + aai->spell_type = rank->spell_type; + aai->spell_refresh = rank->recast_time; + aai->classes = ability->classes; + aai->level_req = rank->level_req; + aai->current_level = level; + aai->max_level = ability->GetMaxLevel(this); + aai->prev_id = rank->prev_id; + + if(rank->next && !CanUseAlternateAdvancementRank(rank->next) || ability->charges > 0) { + aai->next_id = -1; + } else { + aai->next_id = rank->next_id; + } + aai->total_cost = rank->total_cost; + aai->expansion = rank->expansion; + aai->category = ability->category; + aai->charges = ability->charges; + aai->grant_only = ability->grant_only; + aai->total_effects = rank->effects.size(); + aai->total_prereqs = rank->prereqs.size(); + + outapp->SetWritePosition(sizeof(AARankInfo_Struct)); + for(auto &effect : rank->effects) { + outapp->WriteSInt32(effect.effect_id); + outapp->WriteSInt32(effect.base1); + outapp->WriteSInt32(effect.base2); + outapp->WriteSInt32(effect.slot); + } + + for(auto &prereq : rank->prereqs) { + outapp->WriteSInt32(prereq.first); + outapp->WriteSInt32(prereq.second); + } + + QueuePacket(outapp); + safe_delete(outapp); +} + +void Client::SendAlternateAdvancementStats() { + EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAExpUpdate, sizeof(AltAdvStats_Struct)); + AltAdvStats_Struct *aps = (AltAdvStats_Struct *)outapp->pBuffer; + aps->experience = (uint32)(((float)330.0f * (float)m_pp.expAA) / (float)max_AAXP); + aps->unspent = m_pp.aapoints; + aps->percentage = m_epp.perAA; + QueuePacket(outapp); + safe_delete(outapp); +} + +void Client::SendAlternateAdvancementPoints() { + EQApplicationPacket* outapp = new EQApplicationPacket(OP_RespondAA, sizeof(AATable_Struct)); + AATable_Struct* aa2 = (AATable_Struct *)outapp->pBuffer; + + int i = 0; + for(auto &aa : zone->aa_abilities) { + uint32 charges = 0; + auto ranks = GetAA(aa.second->first_rank_id, &charges); + if(ranks) { + AA::Rank *rank = aa.second->GetRankByPointsSpent(ranks); + if(rank) { + aa2->aa_list[i].AA = rank->id; + aa2->aa_list[i].value = rank->total_cost; + aa2->aa_list[i].charges = charges; + i++; + } + } + } + + + aa2->aa_spent = GetSpentAA(); + QueuePacket(outapp); + safe_delete(outapp); +} + +void Client::SendAlternateAdvancementTimer(int ability, int begin, int end) { + EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction, sizeof(UseAA_Struct)); + UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; + uaaout->ability = ability; + uaaout->begin = begin; + uaaout->end = end; + QueuePacket(outapp); + safe_delete(outapp); +} + +//sends all AA timers. +void Client::SendAlternateAdvancementTimers() { + //we dont use SendAATimer because theres no reason to allocate the EQApplicationPacket every time + EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction, sizeof(UseAA_Struct)); + UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; + + PTimerList::iterator c, e; + c = p_timers.begin(); + e = p_timers.end(); + for(; c != e; ++c) { + PersistentTimer *cur = c->second; + if(cur->GetType() < pTimerAAStart || cur->GetType() > pTimerAAEnd) + continue; //not an AA timer + //send timer + uaaout->begin = cur->GetStartTime(); + uaaout->end = static_cast(time(nullptr)); + uaaout->ability = cur->GetType() - pTimerAAStart; // uuaaout->ability is really a shared timer number + QueuePacket(outapp); + } + + safe_delete(outapp); +} + +void Client::ResetAlternateAdvancementTimer(int ability) { + AA::Rank *rank = zone->GetAlternateAdvancementRank(casting_spell_aa_id); + if(rank) { + SendAlternateAdvancementTimer(rank->spell_type, 0, time(0)); + p_timers.Clear(&database, rank->spell_type + pTimerAAStart); + } +} + +void Client::ResetAlternateAdvancementTimers() { + EQApplicationPacket* outapp = new EQApplicationPacket(OP_AAAction, sizeof(UseAA_Struct)); + UseAA_Struct* uaaout = (UseAA_Struct*)outapp->pBuffer; + + PTimerList::iterator c, e; + c = p_timers.begin(); + e = p_timers.end(); + std::vector r_timers; + for(; c != e; ++c) { + PersistentTimer *cur = c->second; + if(cur->GetType() < pTimerAAStart || cur->GetType() > pTimerAAEnd) + continue; + //send timer + uaaout->begin = 0; + uaaout->end = static_cast(time(nullptr)); + uaaout->ability = cur->GetType() - pTimerAAStart; + r_timers.push_back(cur->GetType()); + QueuePacket(outapp); + } + + for(auto &i : r_timers) { + p_timers.Clear(&database, i); + } + + safe_delete(outapp); +} + +void Client::PurchaseAlternateAdvancementRank(int rank_id) { + AA::Rank *rank = zone->GetAlternateAdvancementRank(rank_id); + if(!rank) { + return; + } + + if(!rank->base_ability) { + return; + } + + if(!CanPurchaseAlternateAdvancementRank(rank, true, true)) { + return; + } + + FinishAlternateAdvancementPurchase(rank, false); +} + +bool Client::GrantAlternateAdvancementAbility(int aa_id, int points, bool ignore_cost) { + bool ret = false; + for(int i = 1; i <= points; ++i) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa_id, i); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!rank) { + continue; + } + + if(!rank->base_ability) { + continue; + } + + if(!CanPurchaseAlternateAdvancementRank(rank, !ignore_cost, false)) { + continue; + } + + ret = true; + FinishAlternateAdvancementPurchase(rank, ignore_cost); + } + + return ret; +} + +void Client::FinishAlternateAdvancementPurchase(AA::Rank *rank, bool ignore_cost) { + int rank_id = rank->base_ability->first_rank_id; + + if(rank->base_ability->charges > 0) { + uint32 charges = 0; + GetAA(rank_id, &charges); + + if(charges > 0) { + return; + } + + SetAA(rank_id, rank->current_value, rank->base_ability->charges); + } + else { + SetAA(rank_id, rank->current_value, 0); + + //if not max then send next aa + if(rank->next) { + SendAlternateAdvancementRank(rank->base_ability->id, rank->next->current_value); + } + } + + int cost = !ignore_cost ? rank->cost : 0; + + m_pp.aapoints -= cost ; + SaveAA(); + + SendAlternateAdvancementPoints(); + SendAlternateAdvancementStats(); + + if(rank->prev) { + Message_StringID(15, AA_IMPROVE, + std::to_string(rank->title_sid).c_str(), + std::to_string(rank->prev->current_value).c_str(), + std::to_string(cost).c_str(), + cost == 1 ? std::to_string(AA_POINT).c_str() : std::to_string(AA_POINTS).c_str()); + + /* QS: Player_Log_AA_Purchases */ + if(RuleB(QueryServ, PlayerLogAAPurchases)) { + std::string event_desc = StringFormat("Ranked AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, cost, GetZoneID(), GetInstanceID()); + QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); + } + } + else { + Message_StringID(15, AA_GAIN_ABILITY, + std::to_string(rank->title_sid).c_str(), + std::to_string(cost).c_str(), + cost == 1 ? std::to_string(AA_POINT).c_str() : std::to_string(AA_POINTS).c_str()); + /* QS: Player_Log_AA_Purchases */ + if(RuleB(QueryServ, PlayerLogAAPurchases)) { + std::string event_desc = StringFormat("Initial AA Purchase :: aa_id:%i at cost:%i in zoneid:%i instid:%i", rank->id, cost, GetZoneID(), GetInstanceID()); + QServ->PlayerLogEvent(Player_Log_AA_Purchases, CharacterID(), event_desc); + } + } + + CalcBonuses(); + + if(cost > 0) { + if(title_manager.IsNewAATitleAvailable(m_pp.aapoints_spent, GetBaseClass())) + NotifyNewTitlesAvailable(); + } +} + +//need to rewrite this +void Client::IncrementAlternateAdvancementRank(int rank_id) { + AA::Rank *rank = zone->GetAlternateAdvancementRank(rank_id); + if(!rank) { + return; + } + + if(!rank->base_ability) { + return; + } + + int points = GetAA(rank_id); + GrantAlternateAdvancementAbility(rank->base_ability->id, points + 1, true); +} + +void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { + AA::Rank *rank = zone->GetAlternateAdvancementRank(rank_id); + if(!rank) { + return; + } + + AA::Ability *ability = rank->base_ability; + if(!ability) { + return; + } + + if(!IsValidSpell(rank->spell)) { + return; + } + + if(!CanUseAlternateAdvancementRank(rank)) { + return; + } + + //make sure it is not a passive + if(rank->effects.size() > 0) { + return; + } + + uint32 charges = 0; + // We don't have the AA + if (!GetAA(rank_id, &charges)) + return; + + //if expendable make sure we have charges + if(ability->charges > 0 && charges < 1) + return; + + //check cooldown + if(!p_timers.Expired(&database, rank->spell_type + pTimerAAStart)) { + uint32 aaremain = p_timers.GetRemainingTime(rank->spell_type + pTimerAAStart); + uint32 aaremain_hr = aaremain / (60 * 60); + uint32 aaremain_min = (aaremain / 60) % 60; + uint32 aaremain_sec = aaremain % 60; + + if(aaremain_hr >= 1) { + Message(13, "You can use this ability again in %u hour(s) %u minute(s) %u seconds", + aaremain_hr, aaremain_min, aaremain_sec); + } + else { + Message(13, "You can use this ability again in %u minute(s) %u seconds", + aaremain_min, aaremain_sec); + } + + return; + } + + //calculate cooldown + int cooldown = rank->recast_time - GetAlternateAdvancementCooldownReduction(rank); + if(cooldown < 0) { + cooldown = 0; + } + + // Bards can cast instant cast AAs while they are casting another song + if(spells[rank->spell].cast_time == 0 && GetClass() == BARD && IsBardSong(casting_spell_id)) { + if(!SpellFinished(rank->spell, entity_list.GetMob(target_id), ALTERNATE_ABILITY_SPELL_SLOT, spells[rank->spell].mana, -1, spells[rank->spell].ResistDiff, false)) { + return; + } + ExpendAlternateAdvancementCharge(ability->id); + } else { + if(!CastSpell(rank->spell, target_id, ALTERNATE_ABILITY_SPELL_SLOT, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, nullptr, rank->id)) { + return; + } + } + + CastToClient()->GetPTimers().Start(rank->spell_type + pTimerAAStart, cooldown); + SendAlternateAdvancementTimer(rank->spell_type, 0, 0); +} + +int Mob::GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in) { + if(!rank_in) { + return 0; + } + + AA::Ability *ability_in = rank_in->base_ability; + if(!ability_in) { + return 0; + } + + for(auto &aa : aa_ranks) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { + continue; + } + + for(auto &effect : rank->effects) { + if(effect.effect_id == SE_HastenedAASkill && effect.base2 == ability_in->id) { + return effect.base1; + } + } + } + + return 0; +} + +void Mob::ExpendAlternateAdvancementCharge(uint32 aa_id) { + for(auto &iter : aa_ranks) { + AA::Ability *ability = zone->GetAlternateAdvancementAbility(iter.first); + if(ability && aa_id == ability->id) { + if(iter.second.second > 0) { + iter.second.second -= 1; + + if(iter.second.second == 0) { + if(IsClient()) { + AA::Rank *r = ability->GetRankByPointsSpent(iter.second.first); + if(r) { + CastToClient()->GetEPP().expended_aa += r->cost; + } + } + aa_ranks.erase(iter.first); + } + + if(IsClient()) { + Client *c = CastToClient(); + c->SaveAA(); + c->SendAlternateAdvancementPoints(); + } + } + + return; + } + } +} + +bool ZoneDatabase::LoadAlternateAdvancement(Client *c) { + c->ClearAAs(); + std::string query = StringFormat( + "SELECT " + "aa_id, " + "aa_value, " + "charges " + "FROM " + "`character_alternate_abilities` " + "WHERE `id` = %u", c->CharacterID()); + MySQLRequestResult results = database.QueryDatabase(query); + + int i = 0; + for(auto row = results.begin(); row != results.end(); ++row) { + uint32 aa = atoi(row[0]); + uint32 value = atoi(row[1]); + uint32 charges = atoi(row[2]); + + auto rank = zone->GetAlternateAdvancementRank(aa); + if(!rank) { + continue; + } + + auto ability = rank->base_ability; + if(!ability) { + continue; + } + + rank = ability->GetRankByPointsSpent(value); + + if(c->CanUseAlternateAdvancementRank(rank)) { + c->GetPP().aa_array[i].AA = aa; + c->GetPP().aa_array[i].value = value; + c->GetPP().aa_array[i].charges = charges; + c->SetAA(aa, value, charges); + i++; + } + } + + return true; +} + +AA::Ability *Zone::GetAlternateAdvancementAbility(int id) { + auto iter = aa_abilities.find(id); + if(iter != aa_abilities.end()) { + return iter->second.get(); + } + + return nullptr; +} + +AA::Ability *Zone::GetAlternateAdvancementAbilityByRank(int rank_id) { + AA::Rank *rank = GetAlternateAdvancementRank(rank_id); + + if(!rank) + return nullptr; + + return rank->base_ability; +} + +AA::Rank *Zone::GetAlternateAdvancementRank(int rank_id) { + auto iter = aa_ranks.find(rank_id); + if(iter != aa_ranks.end()) { + return iter->second.get(); + } + + return nullptr; +} + +std::pair Zone::GetAlternateAdvancementAbilityAndRank(int id, int points_spent) { + AA::Ability *ability = GetAlternateAdvancementAbility(id); + + if(!ability) { + return std::make_pair(nullptr, nullptr); + } + + AA::Rank *rank = ability->GetRankByPointsSpent(points_spent); + if(!rank) { + return std::make_pair(nullptr, nullptr); + } + + return std::make_pair(ability, rank); +} + +uint32 Mob::GetAA(uint32 rank_id, uint32 *charges) const { + if(zone) { + AA::Ability *ability = zone->GetAlternateAdvancementAbilityByRank(rank_id); + if(!ability) + return 0; + + auto iter = aa_ranks.find(ability->id); + if(iter != aa_ranks.end()) { + if(charges) { + *charges = iter->second.second; + } + return iter->second.first; + } + } + return 0; +} + +uint32 Mob::GetAAByAAID(uint32 aa_id, uint32 *charges) const { + if(zone) { + AA::Ability *ability = zone->GetAlternateAdvancementAbility(aa_id); + + if(!ability) + return 0; + + auto iter = aa_ranks.find(ability->id); + if(iter != aa_ranks.end()) { + if(charges) { + *charges = iter->second.second; + } + return iter->second.first; + } + } + + return 0; +} + +bool Mob::SetAA(uint32 rank_id, uint32 new_value, uint32 charges) { + if(zone) { + AA::Ability *ability = zone->GetAlternateAdvancementAbilityByRank(rank_id); + + if(!ability) { + return false; + } + + if(new_value > ability->GetMaxLevel(this)) { + return false; + } + + aa_ranks[ability->id] = std::make_pair(new_value, charges); + } + + return true; +} + + +bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { + AA::Ability *ability = rank->base_ability; + + if(!ability) + return false; + + if(!(ability->classes & (1 << GetClass()))) { + return false; + } + + // Passive and Active Shroud AAs + // For now we skip them + if(ability->category == 3 || ability->category == 4) { + return false; + } + + //the one titanium hack i will allow + //just to make sure we dont crash the client with newer aas + //we'll exclude any expendable ones + if(IsClient() && CastToClient()->GetClientVersionBit() & BIT_TitaniumAndEarlier) { + if(ability->charges > 0) { + return false; + } + } + + if(IsClient()) { + if(!(CastToClient()->GetPP().expansions & (1 << rank->expansion))) { + return false; + } + } else { + if(!(RuleI(World, ExpansionSettings) & (1 << rank->expansion))) { + return false; + } + } + + auto race = GetArrayRace(GetBaseRace()); + race = race > 16 ? 1 : race; + if(!(ability->races & (1 << (race - 1)))) { + return false; + } + + auto deity = ConvertDeityToBitDeity((DeityTypes)GetDeity()); + if(!(ability->deities & deity)) { + return false; + } + + if(IsClient() && CastToClient()->Admin() < ability->status) { + return false; + } + + if(GetBaseRace() == 522) { + //drakkin_heritage + if(!(ability->drakkin_heritage & (1 << GetDrakkinHeritage()))) { + return false; + } + } + + return true; +} + +bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price, bool check_grant) { + AA::Ability *ability = rank->base_ability; + + if(!ability) + return false; + + if(!CanUseAlternateAdvancementRank(rank)) { + return false; + } + + //You can't purchase grant only AAs they can only be assigned + if(check_grant && ability->grant_only) { + return false; + } + + //check level req + if(rank->level_req > GetLevel()) { + return false; + } + + uint32 current_charges = 0; + auto points = GetAA(rank->id, ¤t_charges); + + //check that we are on previous rank already (if exists) + //grant ignores the req to own the previous rank. + if(check_grant && rank->prev) { + if(points != rank->prev->current_value) { + return false; + } + } + + //check that we aren't already on this rank or one ahead of us + if(points >= rank->current_value) { + return false; + } + + //if expendable only let us purchase if we have no charges already + //not quite sure on how this functions client side atm + //I intend to look into it later to make sure the behavior is right + if(ability->charges > 0 && current_charges > 0) { + return false; + } + + //check prereqs + for(auto &prereq : rank->prereqs) { + AA::Ability *prereq_ability = zone->GetAlternateAdvancementAbility(prereq.first); + + if(prereq_ability) { + auto ranks = GetAA(prereq_ability->first_rank_id); + if(ranks < prereq.second) { + return false; + } + } + } + + //check price, if client + if(check_price && IsClient()) { + if(rank->cost > CastToClient()->GetAAPoints()) { + return false; + } + } + + return true; +} + +void Zone::LoadAlternateAdvancement() { + Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Data..."); + if(!database.LoadAlternateAdvancementAbilities(aa_abilities, + aa_ranks)) + { + aa_abilities.clear(); + aa_ranks.clear(); + Log.Out(Logs::General, Logs::Status, "Failed to load Alternate Advancement Data"); + return; + } + + Log.Out(Logs::General, Logs::Status, "Processing Alternate Advancement Data..."); + for(const auto &ability : aa_abilities) { + ability.second->first = GetAlternateAdvancementRank(ability.second->first_rank_id); + + //process these ranks + AA::Rank *current = ability.second->first; + int i = 1; + int prev_id = -1; + while(current) { + current->prev_id = prev_id; + current->prev = GetAlternateAdvancementRank(current->prev_id); + current->next = GetAlternateAdvancementRank(current->next_id); + current->base_ability = ability.second.get(); + current->current_value = i; + + if(current->prev) { + current->total_cost = current->cost + current->prev->total_cost; + + //check prereqs here + for(auto &prev_prereq : current->prev->prereqs) { + //if prev has an aa we dont have set + // then set it here too + //if prev has an aa we have + // then set to whichever is highest + + auto iter = current->prereqs.find(prev_prereq.first); + if(iter == current->prereqs.end()) { + //not found + current->prereqs[prev_prereq.first] = prev_prereq.second; + } else { + //they already have it too! + auto points = std::max(iter->second, prev_prereq.second); + current->prereqs[iter->first] = points; + } + } + } + else { + current->prev_id = -1; + current->total_cost = current->cost; + } + + if(!current->next) { + current->next_id = -1; + } + + i++; + prev_id = current->id; + current = current->next; + } + } + + Log.Out(Logs::General, Logs::Status, "Loaded Alternate Advancement Data"); +} + +bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map> &abilities, + std::unordered_map> &ranks) +{ + Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Abilities..."); + abilities.clear(); + std::string query = "SELECT id, name, category, classes, races, deities, drakkin_heritage, status, type, charges, " + "grant_only, first_rank_id FROM aa_ability WHERE enabled = 1"; + auto results = QueryDatabase(query); + if(results.Success()) { + for(auto row = results.begin(); row != results.end(); ++row) { + AA::Ability *ability = new AA::Ability; + ability->id = atoi(row[0]); + ability->name = row[1]; + ability->category = atoi(row[2]); + //EQ client has classes left shifted by one bit for some odd reason + ability->classes = atoi(row[3]) << 1; + ability->races = atoi(row[4]); + ability->deities = atoi(row[5]); + ability->drakkin_heritage = atoi(row[6]); + ability->status = atoi(row[7]); + ability->type = atoi(row[8]); + ability->charges = atoi(row[9]); + ability->grant_only = atoi(row[10]) != 0 ? true : false; + ability->first_rank_id = atoi(row[11]); + ability->first = nullptr; + + abilities[ability->id] = std::unique_ptr(ability); + } + } else { + Log.Out(Logs::General, Logs::Error, "Failed to load Alternate Advancement Abilities"); + return false; + } + + Log.Out(Logs::General, Logs::Status, "Loaded %d Alternate Advancement Abilities", (int)abilities.size()); + + Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Ability Ranks..."); + ranks.clear(); + query = "SELECT id, upper_hotkey_sid, lower_hotkey_sid, title_sid, desc_sid, cost, level_req, spell, spell_type, recast_time, " + "next_id, expansion FROM aa_ranks"; + results = QueryDatabase(query); + if(results.Success()) { + for(auto row = results.begin(); row != results.end(); ++row) { + AA::Rank *rank = new AA::Rank; + rank->id = atoi(row[0]); + rank->upper_hotkey_sid = atoi(row[1]); + rank->lower_hotkey_sid = atoi(row[2]); + rank->title_sid = atoi(row[3]); + rank->desc_sid = atoi(row[4]); + rank->cost = atoi(row[5]); + rank->level_req = atoi(row[6]); + rank->spell = atoi(row[7]); + rank->spell_type = atoi(row[8]); + rank->recast_time = atoi(row[9]); + rank->next_id = atoi(row[10]); + rank->expansion = atoi(row[11]); + rank->base_ability = nullptr; + rank->total_cost = 0; + rank->prev_id = -1; + rank->next = nullptr; + rank->prev = nullptr; + + ranks[rank->id] = std::unique_ptr(rank); + } + } else { + Log.Out(Logs::General, Logs::Error, "Failed to load Alternate Advancement Ability Ranks"); + return false; + } + + Log.Out(Logs::General, Logs::Status, "Loaded %d Alternate Advancement Ability Ranks", (int)ranks.size()); + + Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Ability Rank Effects..."); + query = "SELECT rank_id, slot, effect_id, base1, base2 FROM aa_rank_effects"; + results = QueryDatabase(query); + if(results.Success()) { + for(auto row = results.begin(); row != results.end(); ++row) { + AA::RankEffect effect; + int rank_id = atoi(row[0]); + effect.slot = atoi(row[1]); + effect.effect_id = atoi(row[2]); + effect.base1 = atoi(row[3]); + effect.base2 = atoi(row[4]); + + if(effect.slot < 1) + continue; + + if(ranks.count(rank_id) > 0) { + AA::Rank *rank = ranks[rank_id].get(); + rank->effects.push_back(effect); + } + } + } else { + Log.Out(Logs::General, Logs::Error, "Failed to load Alternate Advancement Ability Rank Effects"); + return false; + } + + Log.Out(Logs::General, Logs::Status, "Loaded Alternate Advancement Ability Rank Effects"); + + Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Ability Rank Prereqs..."); + query = "SELECT rank_id, aa_id, points FROM aa_rank_prereqs"; + results = QueryDatabase(query); + if(results.Success()) { + for(auto row = results.begin(); row != results.end(); ++row) { + int rank_id = atoi(row[0]); + int aa_id = atoi(row[1]); + int points = atoi(row[2]); + + if(aa_id <= 0 || points <= 0) { + continue; + } + + if(ranks.count(rank_id) > 0) { + AA::Rank *rank = ranks[rank_id].get(); + rank->prereqs[aa_id] = points; + } + } + } else { + Log.Out(Logs::General, Logs::Error, "Failed to load Alternate Advancement Ability Rank Prereqs"); + return false; + } + + Log.Out(Logs::General, Logs::Status, "Loaded Alternate Advancement Ability Rank Prereqs"); + + return true; +} + +bool Mob::CheckAATimer(int timer) +{ + if (timer >= aaTimerMax) + return false; + if (aa_timers[timer].Enabled()) { + if (aa_timers[timer].Check(false)) { + aa_timers[timer].Disable(); + return false; + } else { + return true; + } + } + return false; +} diff --git a/zone/aa.h b/zone/aa.h index ad41fc3ae..280f56d53 100644 --- a/zone/aa.h +++ b/zone/aa.h @@ -1,27 +1,8 @@ - #ifndef AA_H #define AA_H -struct AA_Ability; -struct SendAA_Struct; - - -#define MANA_BURN 664 - -#include - #define MAX_SWARM_PETS 12 //this can change as long as you make more coords (swarm_pet_x/swarm_pet_y) -//this might be missing some, and some might not be used... -typedef enum { //AA Targeting Constants - aaTargetUser = 1, - aaTargetCurrent = 2, //use current target - aaTargetGroup = 3, //target group of user - aaTargetCurrentGroup = 4, //target group of current target - aaTargetPet = 5 //target the user's pet -} aaTargetType; - - typedef enum { aaActionNone = 0, aaActionAETaunt = 1, @@ -42,21 +23,6 @@ typedef enum { aaActionFadingMemories = 16 } aaNonspellAction; -//use these for AAs which dont cast spells, yet need effects -//if this list grows beyond 32, more work is needed in *AAEffect -typedef enum { //AA Effect IDs - aaEffectMassGroupBuff = 1, //unused - Handled via spell effect. - aaEffectRampage, - aaEffectSharedHealth, - aaEffectFlamingArrows, - aaEffectFrostArrows, - aaEffectWarcry, - aaEffectLeechTouch, - aaEffectProjectIllusion, // unused - Handled via spell effect - _maxaaEffectType = 32 -} aaEffectType; - - enum { //leadership AA indexes groupAAMarkNPC = 0, groupAANPCHealth, @@ -133,571 +99,6 @@ static const uint8 LeadershipAACosts[_maxLeaderAA][MAX_LEADERSHIP_TIERS] = { { 0, 0, 0, 0, 0, 0 }, //raidAA15 }; -/* -typedef enum { //AA IDs - aaNone = 0, - aaInnateStrength = 2, //works - aaInnateStamina = 7, //works - aaInnateAgility = 12, //works - //aaCompleteHeal = 13,/ //not implemented, but is in dbstr_us.txt - aaInnateDexterity = 17, //works - aaInnateIntelligence = 22, //works - aaInnateWisdom = 27, //works - aaInnateCharisma = 32, //works - aaInnateFireProtection = 37, //works - aaInnateColdProtection = 42, //works - aaInnateMagicProtection = 47, //works - aaInnatePoisonProtection = 52, //works - aaInnateDiseaseProtection = 57, //works - aaInnateRunSpeed = 62, //works - aaInnateRegeneration = 65, //works - aaInnateMetabolism = 68, - aaInnateLungCapacity = 71, //handled by client - aaFirstAid = 74, //untested - aaHealingAdept = 77, //untested - aaHealingGift = 80, //untested - aaSpellCastingMastery = 83, //untested - aaSpellCastingReinforcement = 86, //untested - aaMentalClarity = 89, - aaSpellCastingFury = 92, //untested - aaChanellingFocus = 95, - aaSpellCastingSubtlety = 98, //untested - aaSpellCastingExpertise = 101, //untested - aaSpellCastingDeftness = 104, //untested - aaNaturalDurability = 107, //works - aaNaturalHealing = 110, //untested - aaCombatFury = 113, //untested - aaFearResistance = 116, //untested - aaFinishingBlow = 119, //untested - aaCombatStability = 122, - aaCombatAgility = 125, - aaMassGroupBuff = 128, //untested - aaDivineResurrection = 129, //DB - aaInnateInvisToUndead = 130, //DB - aaCelestialRegeneration = 131, //untested - aaBestowDivineAura = 132, //DB - aaTurnUndead = 133, //DB - aaPurifySoul = 136, //DB - aaQuickEvacuation = 137, //untested - aaExodus = 140, //untested - aaQuickDamage = 141, //untested - aaEnhancedRoot = 144, - aaDireCharm = 145, //untested - aaCannibalization = 146, //DB - aaQuickBuff = 147, //untested - aaAlchemyMastery = 150, - aaRabidBear = 153, //DB - aaManaBurn = 154, //DB - aaImprovedFamiliar = 155, //untested, implemented? - aaNexusGate = 156, //DB - aaUnknown54 = 157, - aaPermanentIllusion = 158, - aaJewelCraftMastery = 159, - aaGatherMana = 162, //DB - aaMendCompanion = 163, //DB - aaQuickSummoning = 164, //untested - aaFrenziedBurnout = 167, //DB - aaElementalFormFire = 168, //DB - aaElementalFormWater = 171, //DB - aaElementalFormEarth = 174, //DB - aaElementalFormAir = 177, //DB - aaImprovedReclaimEnergy = 180, //untested - aaTurnSummoned = 181, //DB - aaElementalPact = 182, //DB - aaLifeBurn = 183, //DB - aaDeadMesmerization = 184, //DB - aaFearstorm = 185, //DB - aaFleshToBone = 186, //DB - aaCallToCorpse = 187, //DB - aaDivineStun = 188, //DB - aaImprovedLayOnHands = 189, - aaSlayUndead = 190, - aaActOfValor = 193, //DB - aaHolySteed = 194, //DB - aaFearless = 195, - aa2HandBash = 196, //works. handled by client? - aaInnateCamouflage = 197, //DB - aaAmbidexterity = 198, //untested - aaArcheryMastery = 199, //untested - aaFletchingMastery = 202, //removed from db? - aaEndlessQuiver = 205, //untested - aaUnholySteed = 206, //DB - aaImprovedHarmTouch = 207, //untested - aaLeechTouch = 208, //DB - aaDeathPeace = 209, - aaSoulAbrasion = 210, //untested - aaInstrumentMastery = 213, //untested - aaUnknown91 = 216, //not used - aaUnknown92 = 219, //not used - aaUnknown93 = 222, //not used - aaJamFest = 225, - aaUnknown95 = 228, - aaSonicCall = 229, - aaCriticalMend = 230, //untested - aaPurifyBody = 233, //DB - aaChainCombo = 234, - aaRapidFeign = 237, //works - aaReturnKick = 240, - aaEscape = 243, //DB - aaPoisonMastery = 244, - aaDoubleRiposte = 247, //untested - aaQuickHide = 250, - aaQuickThrow = 253, //corrected from dbstr_us.txt - aaPurgePoison = 254, //DB - aaFlurry = 255, //untested - aaRampage = 258, //untested - aaAreaTaunt = 259, //untested - aaWarcry = 260, //DB - aaBandageWound = 263, //untested - aaSpellCastingReinforcementMastery = 266, //untested - aaSpellCastingFuryMastery = 267, //untested - aaExtendedNotes = 270, //untested - aaDragonPunch = 273, - aaStrongRoot = 274, //DB - aaSingingMastery = 275, //untested - aaBodyAndMindRejuvenation = 278, //added - aaPhysicalEnhancement = 279, //untested - aaAdvTrapNegotiation = 280, //untested - aaAcrobatics = 283, //untested - aaScribbleNotes = 286, - aaChaoticStab = 287, //untested - aaPetDiscipline = 288, //added - aaHobbleofSpirits = 289, //DB - aaFrenzyofSpirit = 290, //DB - aaParagonofSpirit = 291, //DB - aaAdvancedInnateStrength = 292, //works - aaAdvancedInnateStamina = 302, //works - aaAdvancedInnateAgility = 312, //works - aaAdvancedInnateDexterity = 322, //works - aaAdvancedInnateIntelligence = 332, //works - aaAdvancedInnateWisdom = 342, //works - aaAdvancedInnateCharisma = 352, //works - aaWardingofSolusek = 362, //works - aaBlessingofEci = 372, //works - aaMarrsProtection = 382, //works - aaShroudofTheFaceless = 392, //works - aaBertoxxulousGift = 402, //works - aaNewTanaanCraftingMastery = 412, - aaPlanarPower = 418, //untested - aaPlanarDurability = 423, //added - aaInnateEnlightenment = 426, //added - aaAdvancedSpellCastingMastery = 431,//untested - aaAdvancedHealingAdept = 434, //untested - aaAdvancedHealingGift = 437, //untested - aaCoupdeGrace = 440, //added - aaFuryoftheAges = 443, //added - aaMasteryofthePast = 446, //untested - aaLightningReflexes = 449, //added - aaInnateDefense = 454, //added - aaRadiantCure = 459, //DB - aaHastenedDivinity = 462, //DB - aaHastenedTurning = 465, //DB - aaHastenedPurificationofSoul = 468, //DB - aaHastenedGathering = 471, //DB - aaHastenedRabidity = 474, //DB - aaHastenedExodus = 477, //DB - aaHastenedRoot = 480, //DB - aaHastenedMending = 483, //DB - aaHastenedBanishment = 486, //DB - aaHastenedInstigation = 489, //DB, maybe - aaFuriousRampage = 492, //DB - aaHastenedPurificationoftheBody = 495,//DB - aaHastyExit = 498, //DB - aaHastenedPurification = 501, //DB - aaFlashofSteel = 504, - aaDivineArbitration = 507, //DB - aaWrathoftheWild = 510, //DB - aaVirulentParalysis = 513, //DB - aaHarvestofDruzzil = 516, //DB - aaEldritchRune = 517, //DB - aaServantofRo = 520, //DB - aaWaketheDead = 523, //DB - aaSuspendedMinion = 526, //untested - aaSpiritCall = 528, //DB - aaCelestialRenewal = 531, //DB - aaAllegiantFamiliar = 533, - aaHandofPiety = 534, //DB - aaMithanielsBinding = 537, //untested - aaMendingoftheTranquil = 539, - aaRagingFlurry = 542, - aaGuardianoftheForest = 545, //DB - aaSpiritoftheWood = 548, //DB - aaBestialFrenzy = 551, //untested - aaHarmoniousAttack = 556, //untested - aaKnightsAdvantage = 561, - aaFerocity = 564, - aaViscidRoots = 567, - aaSionachiesCrescendo = 568, //untested - aaAyonaesTutelage = 571, - aaFeignedMinion = 574, - aaUnfailingDivinity = 577, - aaAnimationEmpathy = 580, // Implemented - aaRushtoJudgement = 583, - aaLivingShield = 586, - aaConsumptionoftheSoul = 589, //untested - aaBoastfulBellow = 592, //DB - aaFervrentBlessing = 593, //untested - aaTouchoftheWicked = 596, //untested - aaPunishingBlade = 599, - aaSpeedoftheKnight = 602, - aaShroudofStealth = 605, - aaNimbleEvasion = 606, - aaTechniqueofMasterWu = 611, - aaHostoftheElements = 616, //DB - aaCallofXuzl = 619, //DB - aaHastenedStealth = 622, - aaIngenuity = 625, - aaFleetofFoot = 628, - aaFadingMemories = 630, - aaTacticalMastery = 631, - aaTheftofLife = 634, - aaFuryofMagic = 637, - aaFuryofMagicMastery2 = 640, //whats the difference? - aaProjectIllusion = 643, - aaHeadshot = 644, //added - aaEntrap = 645, //DB - aaUnholyTouch = 646, //untested - aaTotalDomination = 649, // Implemented - aaStalwartEndurance = 652, //implemented as bonus - aaQuickSummoning2 = 655, //whats the difference? - aaMentalClarity2 = 658, //whats the difference? - aaInnateRegeneration2 = 661, //whats the difference? - aaManaBurn2 = 664, //whats the difference? - aaExtendedNotes2 = 665, //not implemented - later expansions replaced Extended Notes with this. - aaSionachiesCrescendo2 = 668, //not implemented - later expansions replaced Sionachies Crescendo with this. - aaImprovedReclaimEnergy2 = 671, //whats the difference? untetsed - aaSwiftJourney = 672, //implemented as bonus - aaConvalescence = 674, //added 9/26/08 - aaLastingBreath = 676, //handled by client - aaPackrat = 678, //added 9/29/08 - aaHeightenedEndurance = 683, - aaWeaponAffinity = 686, //implemented - aaSecondaryForte = 691, - aaPersistantCasting = 692, - aaTuneofPursuance = 695, - aaImprovedInstrumentMastery = 700, - aaImprovedSingingMastery =701, - aaExultantBellowing = 702, - aaEchoofTaelosia = 707, - aaInternalMetronome = 710, //In 2006 this AA was removed. - aaPiousSupplication = 715, - aaBeastialAlignment = 718, //untested - aaWrathofXuzl = 721, - aaFeralSwipe = 723, //DB? - aaWardersFury = 724, - aaWardersAlacrity = 729, - aaPetAffinity = 734, // Implemented - aaMasteryofthePast2 = 735, //whats the difference? - aaSpellCastingSubtlety2 = 738, //whats the difference? - aaTouchoftheDivine = 741, - aaDivineAvatar = 746, //DB - aaExquisiteBenediction = 749, //DB - aaQuickenedCuring = 754, - aaNaturesBoon = 757, //DB - aaAdvancedTracking = 762, - aaCriticalAffliction = 767, - aaFuryofMagicMastery = 770, //whats the difference? - aaDoppelganger = 773, - aaEnchancedForgetfulness = 776, - aaMesmerizationMastery = 781, - aaQuickMassGroupBuff = 782, - aaSharedHealth = 785, - aaElementalFury = 790, - aaElementalAlacrity = 795, - aaElementalAgility = 800, - aaElementalDurability = 803, - aaSinisterStrikes = 806, - aaStrikethrough = 807, - aaStonewall = 810, - aaRapidStrikes = 815, - aaKickMastery = 820, - aaHightenedAwareness = 823, - aaDestructiveForce = 828, //DB - aaSwarmofDecay = 831, //DB - aaDeathsFury = 834, - aaQuickeningofDeath = 839, - aaAdvancedTheftofLife = 844, - aaTripleBackstab = 846, - aaHastenedPiety = 849, - aaImmobilizingBash = 852, - aaViciousSmash = 855, - aaRadiantCure2 = 860, //whats the difference? - aaPurification = 863, - aaPrecisionofthePathfinder = 864, - aaCoatofThistles = 867, - aaFlamingArrows = 872, //untested - aaFrostArrows = 875, //untested - aaSeizedOpportunity = 878, - aaTrapCircumvention = 881, - aaImprovedHastyExit = 886, - aaVirulentVenom = 888, - aaImprovedConsumptionofSoul = 893, - aaIntenseHatred = 895, - aaAdvancedSpiritCall = 900, - aaCalloftheAncients = 902, //DB - aaSturdiness = 907, - aaWarlordsTenacity = 912, //DB - aaStrengthenedStrike = 915, - aaExtendedShielding = 918, - aaRosFlamingFamiliar = 921, //DB - aaEcisIcyFamiliar = 922, //DB - aaDruzzilsMysticalFamiliar = 923, //DB - aaAdvancedFuryofMagicMastery = 924, //added 9/29/08 - aaWardofDestruction = 926, //DB - aaFrenziedDevastation = 931, //DB - aaCombatFury2 = 934, //whats the difference? - aaCombatFury3 = 937, //whats the difference? - aaCombatFury4 = 940, //whats the difference? - aaFuryoftheAges2 = 943, //whats the difference? - aaFuryoftheAges3 = 946, //whats the difference? - aaFuryoftheAges4 = 949, //whats the difference? - aaPlanarDurability2 = 952, //whats the difference? - aaInnateEnlightenment2 = 955, //whats the difference? - aaDireCharm2 = 960, //whats the difference? - aaDireCharm3 = 961, //whats the difference? - aaTouchoftheDivine2 = 962, //whats the difference? - aaTouchofDecay = 967, - aaCalloftheAncients2 = 970, //whats the difference? - aaImprovedVision = 975, - aaEternalBreath = 978, //handled by client - aaBlacksmithingMastery = 979, //added 9/29/08 - aaBakingMastery = 982, //added 9/29/08 - aaBrewingMastery = 985, //added 9/29/08 - aaFletchingMastery2 = 988, //added 9/29/08 - aaPotteryMastery = 991, //added 9/29/08 - aaTailoringMastery = 994, //added 9/29/08 - aaSalvage = 997, - aaOrigin = 1000, //spell - aaChaoticPotential = 1001, //added - aaDiscordantDefiance = 1006, //added 9/29/08 - aaTrialsofMataMuram = 1011, - aaMysticalAttuning = 1021, - aaDelayDeath = 1026, - aaHealthyAura = 1031, - aaFitness = 1036, - aaVeteransWrath = 1041, //added 9/29/08 - aaVeteransWrath2 = 1044, //whats the difference? - aaVeteransWrath3 = 1047, //whats the difference? - aaVeteransWrath4 = 1050, //whats the difference? - aaDeathblow = 1053, - aaReflexiveMastery = 1061, - aaDefensiveInstincts = 1066, - aaMnemonicRetention = 1071, //Implemented - aaExpansiveMind = 1072, //added 9/29/08 - aaSleightofHand = 1077, - aaSleightofHand2 = 1080, //whats the difference? - aaHealingAdeptMastery = 1083, - aaHealingGiftMastery = 1086, - aaArcaneTongues = 1089, - aaMasterofDisguise = 1092, - aaSlipperyAttacks = 1093, - aaImprovedCriticalAffliction = 1099, - aaFortifiedBellowing = 1102, - aaFuryofMagic2 = 1107, //whats the difference? - aaDanceofBlades = 1110, - aaShieldofNotes = 1116, - aaRoarofThunder = 1119, - aaPersistentMinion = 1122, - aaPerfectionofSpirit = 1123, - aaReplentishCompanion = 1126, - aaAdvancedPetDiscipline = 1129, - aaThrowingMastery = 1131, - aaBlurofAxes = 1134, - aaHastenedWarCry = 1137, - aaDeadAim = 1140, - aaFrenziedDefense = 1143, - aaTirelessSprint = 1146, - aaDesperation = 1149, - aaUntamedRage = 1150, - aaEchoingCries = 1155, - aaViciousFrenzy = 1158, - aaCrazedOnslaught = 1163, - aaOverwhelmingAttack = 1172, - aaFuriousRage = 1175, - aaBloodPact = 1178, - aaShieldingResistance = 1181, - aaHealingBoon = 1186, - aaResplendentCure = 1189, - aaCelestialHammer = 1192, - aaDivineRetribution = 1195, - aaCelestialRejuvination = 1203, - aaFerventBenediction = 1206, - aaSanctuary = 1209, - aaDestructiveFury = 1210, //added 9/29/08 - aaDestructiveFury2 = 1213, //whats the difference? - aaBoonoftheForest = 1222, - aaSpiritoftheGrove = 1225, - aaCalloftheWild = 1228, - aaSecondaryRecall = 1229, - aaNaturesBounty = 1230, - aaStasis = 1233, - aaColorShock = 1239, - aaMindOverMatter = 1242, - aaSoothingWords = 1245, - aaElementalSwarm = 1248, - aaHeartofFlames = 1251, - aaHeartofVapor = 1252, - aaHeartofIce = 1253, - aaHeartofStone = 1254, - aaImitateDeath = 1255, - aaCripplingStrike = 1256, - aaStunningKick = 1259, - aaEyeGouge = 1262, - aaIronKicks = 1265, - aaStyleoftheMimic = 1268, - aaDeathPeace2 = 1272, //whats the difference? - aaArmyoftheDead = 1274, - aaCelestialStun = 1277, - aaHandofDevotion = 1278, - aaSteadfastWill = 1284, - aaShieldBlock = 1287, - aaScoutsEfficiency = 1290, - aaGuardianoftheGlade = 1293, - aaTrackingMastery = 1296, - aaFlurryofKnives = 1301, - aaPrecision = 1304, - aaNervesofSteel = 1307, - aaTouchoftheCursed = 1313, - aaSpiritualCorrosion = 1316, - aaSoulThief = 1319, - aaSpiritualChanneling = 1323, - aaBoonoftheAncients = 1324, - aaAncestralAid = 1327, - aaResoluteDefiance = 1330, - aaPresstheAttack = 1333, - aaMindCrash = 1334, - aaProlongedDestruction = 1337, - aaRosGreaterFamiliar = 1340, - aaEcisGreaterFamiliar = 1341, - aaDruzzilsGreaterFamiliar = 1342, - aaTeleportBind = 1343, - aaDevotedFamiliar = 1344, - aaAuspiceoftheHunter = 1345, - aaSavageSpirit = 1348, - aaPresstheAttack2 = 1351, //whats the difference? - aaCripplingStrike2 = 1352, //whats the difference? - aaStunningKick2 = 1353, //whats the difference? - aaEyeGouge2 = 1358, //whats the difference? - - //Dragons of Norrath - //good info here: http://www.eqthieves.com/exp-don-progression.htm and here: http://everquest.allakhazam.com/db/guides.html?guide=811 - aaGiftoftheDarkReign = 1361, //from dbstr_us.txt - aaTenacityoftheDarkReign = 1362, //from dbstr_us.txt - aaEmbraceoftheDarkReign = 1363, //from dbstr_us.txt - aaPoweroftheDarkReign = 1364, //from dbstr_us.txt - aaFervoroftheDarkReign = 1365, //from dbstr_us.txt - aaGiftoftheKeepers = 1366, //from dbstr_us.txt - aaValoroftheKeepers = 1367, //from dbstr_us.txt - aaEmbraceoftheKeepers = 1368, //from dbstr_us.txt - aaPoweroftheKeepers = 1369, //from dbstr_us.txt - aaSanctityoftheKeepers = 1370, //from dbstr_us.txt - - //Veteran AAs - aaLessonoftheDevoted = 1371, //from dbstr_us.txt - aaInfusionoftheFaithful = 1372, //from dbstr_us.txt - aaChaoticJester = 1373, //from dbstr_us.txt - aaExpedientRecovery = 1374, //from dbstr_us.txt - aaSteadfastServant = 1375, //from dbstr_us.txt - aaStaunchRecovery = 1376, //from dbstr_us.txt - aaIntensityoftheResolute = 1377, //from dbstr_us.txt - - //Depths of Darkhollow - - //the following 5 look to be used as flags for completion of the Blood Raids for access to the Demiplane of Blood - //quest info here: http://everquest.allakhazam.com/db/quest.html?quest=3582 - //"You must also complete the five Blood Raids in any order: The Council of Nine, Emperor Draygun, Bloodeye, Matriarch Shyra, Sendaii, the Hive Queen" - //"The AA's you receive are: Curse of Blood (1/5), Affliction of Blood (2/5), Torment of Blood (3/5), Temptation of Blood (4/5), Invitation of Blood (5/5)." - aaCurseofBlood = 1378, //from dbstr_us.txt - aaAfflictionofBlood = 1379, //from dbstr_us.txt - aaTormentofBlood = 1380, //from dbstr_us.txt - aaTemptationofBlood = 1381, //from dbstr_us.txt - aaInvitationofBlood = 1382, //from dbstr_us.txt - - aaTurnUndead2 = 1383, //from dbstr_us.txt, Class AA changed in DoD - aaWrackUndead = 1386, //from dbstr_us.txt, PoP Class AA changed in DoD - aaEradicateUndead = 1387, //from dbstr_us.txt - aaInnateSeeInvis = 1388, //from dbstr_us.txt - aaProlongedMortality = 1389, //from dbstr_us.txt - aaPrecognition = 1394, //from dbstr_us.txt - aaThickSkin = 1399, //from dbstr_us.txt - aaSilentCasting = 1404, //from dbstr_us.txt - aaSilentCasting2 = 1409, //from dbstr_us.txt - aaHastenedMindCrash = 1414, //from dbstr_us.txt - aaFieldDressing = 1417, //from dbstr_us.txt - aaBandageWounds = 1420, //from dbstr_us.txt - aaCascadingRage = 1425, //from dbstr_us.txt - aaElementalFerocity = 1430, //from dbstr_us.txt - aaGiftofMana = 1435, //from dbstr_us.txt - aaRuneofShadows = 1440, //from dbstr_us.txt - aaChannelingMastery = 1445, //from dbstr_us.txt - aaConservation = 1453, //from dbstr_us.txt - aaCryofBattle = 1458, //from dbstr_us.txt - aaWardofPurity = 1459, //from dbstr_us.txt - aaTurnSummoned2 = 1462, //from dbstr_us.txt - aaWrackSummoned = 1465, //from dbstr_us.txt - aaEradicateSummoned = 1466, //from dbstr_us.txt - aaWardersSavagery = 1467, //from dbstr_us.txt - aaShackleofSpirits = 1470, //from dbstr_us.txt - aaHastenedThunder = 1471, //from dbstr_us.txt - aaTranslocationalAnchor = 1474, //from dbstr_us.txt - aaStealthyGetaway = 1477, //from dbstr_us.txt - aaPyromancy = 1478, //from dbstr_us.txt - aaMasteryofFury = 1483, //from dbstr_us.txt - aaAbundantHealing = 1486, //from dbstr_us.txt - aaGreaterAvatar = 1491, //from dbstr_us.txt - aaSharedCamouflage = 1494, //from dbstr_us.txt - aaConvergenceofSpirits = 1495, //from dbstr_us.txt - aaNaturesGuardian = 1498, //from dbstr_us.txt - aaEdictofCommand = 1501, //from dbstr_us.txt - aaExtendedBurnout = 1504, //from dbstr_us.txt - aaGuardianofRo = 1507, //from dbstr_us.txt - aaBloodMagic = 1510, //from dbstr_us.txt - aaGraverobbing = 1511, //from dbstr_us.txt - aaAfflictionMastery = 1514, //from dbstr_us.txt - aaGreaterRabidBear = 1517, //from dbstr_us.txt - aaAncestralGuard = 1520, //from dbstr_us.txt - aaCloakofLight = 1523, //from dbstr_us.txt - aaVanquishUndead = 1524, //from dbstr_us.txt - aaCloakofShadows = 1527, //from dbstr_us.txt - aaWillfulDeath = 1528, //from dbstr_us.txt - aaSwiftBlade = 1533, //from dbstr_us.txt - aaWickedBlade = 1536, //from dbstr_us.txt - aaForcedOpening = 1539, //from dbstr_us.txt - aaAppraisal = 1542, //from dbstr_us.txt - aaPreciseStrikes = 1543, //from dbstr_us.txt - aaHastenedDeath = 1546, //from dbstr_us.txt - aaUnflinchingResolve = 1549, //from dbstr_us.txt - aaWeightlessSteps = 1552, //from dbstr_us.txt - aaHastenedBlades = 1555, //from dbstr_us.txt - aaImprovedHarmoniousAttack = 1563, //from dbstr_us.txt - aaImprovedBestialFrenzy = 1566, //from dbstr_us.txt - aaSongofStone = 1569, //from dbstr_us.txt - aaDeepSleep = 1572, //from dbstr_us.txt - aaCompanionsGift = 1577, //from dbstr_us.txt - aaHastenedDefiance = 1583, //from dbstr_us.txt - aaDauntlessPerseverance = 1586, //from dbstr_us.txt - aaConcentration = 1587, //from dbstr_us.txt - aaEnhancedAggression = 1592, //from dbstr_us.txt - aaCallofChallenge = 1597, //from dbstr_us.txt - aaCacophony = 1598, //from dbstr_us.txt - aaImprovedHeadshot = 1601, //from dbstr_us.txt - aaAnatomy = 1604, //from dbstr_us.txt - aaFetterofSpirits = 1607, //from dbstr_us.txt - aaTrickShot = 1608, //from dbstr_us.txt - aaLightningStrikes = 1616, //from dbstr_us.txt - aaRelentlessAssault = 1621, //from dbstr_us.txt - aaKnightsExpertise = 1624, //from dbstr_us.txt - aaSelosEnduringCadence = 1627, //from dbstr_us.txt - aaHarmTouch = 7800, //from dbstr_us.txt - aaLayonHands = 7850, //from dbstr_us.txt - aaLayonHandsRank16 = 7866, - - aaHighestID //this should always be last, and should always - //follow the highest AA ID -} aaID; -*/ - - typedef enum { //AA IDs aaNone =0, aaInnateStrength =2,//implemented as bonus @@ -2109,21 +1510,6 @@ typedef enum { //AA IDs //follow the highest AA ID } aaID; - -//Structure representing the database's AA actions -struct AA_DBAction { - uint32 reuse_time; //in seconds - uint16 spell_id; //spell to cast, SPELL_UNKNOWN=no spell - aaTargetType target; //from aaTargetType - aaNonspellAction action; //non-spell action to take - uint16 mana_cost; //mana the NON-SPELL action costs - uint16 duration; //duration of NON-SPELL effect, 0=N/A - aaID redux_aa; //AA which reduces reuse time - int32 redux_rate; //%/point in redux_aa reduction in reuse time - aaID redux_aa2; //AA which reduces reuse time - int32 redux_rate2; //%/point in redux_aa reduction in reuse time -}; - //Structure representing the database's swarm pet configs struct AA_SwarmPet { uint8 count; //number to summon @@ -2131,23 +1517,6 @@ struct AA_SwarmPet { uint16 duration; //how long they last, in seconds }; -struct AALevelCost_Struct -{ - uint32 Level; - uint32 Cost; -}; - -//assumes that no activatable aa.has more than 5 ranks -#define MAX_AA_ACTION_RANKS 20 -extern AA_DBAction AA_Actions[aaHighestID][MAX_AA_ACTION_RANKS]; //[aaid][rank] -extern std::map AA_SwarmPets; //key=spell_id - -#define AA_Choose3(val, v1, v2, v3) (val==1?v1:(val==2?v2:v3)) - -extern std::mapaas_send; -extern std::map > aa_effects; -extern std::map AARequiredLevelAndCost; - enum { //values of AA_Action.action aaActionActivate = 0, aaActionSetEXP = 1, @@ -2167,4 +1536,11 @@ public: uint32 owner_id; }; +enum AATimers +{ + aaTimerRampage, + aaTimerWarcry, + aaTimerMax +}; + #endif diff --git a/zone/aa_ability.cpp b/zone/aa_ability.cpp new file mode 100644 index 000000000..3612b00c7 --- /dev/null +++ b/zone/aa_ability.cpp @@ -0,0 +1,70 @@ +/* EQEMu: Everquest Server Emulator + Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY except by those people which sell it, which + are required to give you total support for your newly bought product; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "../common/global_define.h" +#include "../common/types.h" +#include "masterentity.h" +#include "aa_ability.h" + +AA::Rank *AA::Ability::GetMaxRank() { + if(!first) + return nullptr; + + Rank *current = first; + while(current->next) { + current = current->next; + } + + return current; +} + +AA::Rank *AA::Ability::GetRankByPointsSpent(int current_level) { + if(current_level == 0) + return nullptr; + + if(!first) + return nullptr; + + int i = 1; + Rank *current = first; + while(current->next) { + if(i == current_level) { + break; + } + + i++; + current = current->next; + } + + return current; +} + +int AA::Ability::GetMaxLevel(Mob *who) { + int max_level = 0; + Rank *current = first; + while(current) { + if(!who->CanUseAlternateAdvancementRank(current)) { + return max_level; + } + + max_level++; + current = current->next; + } + + return max_level; +} \ No newline at end of file diff --git a/zone/aa_ability.h b/zone/aa_ability.h new file mode 100644 index 000000000..0d6a240c4 --- /dev/null +++ b/zone/aa_ability.h @@ -0,0 +1,61 @@ +/* EQEMu: Everquest Server Emulator + Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY except by those people which sell it, which + are required to give you total support for your newly bought product; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef EQEMU_ZONE_AA_ABILITY_H +#define EQEMU_ZONE_AA_ABILITY_H + +#include "../common/global_define.h" +#include +#include +#include +#include "aa_rank_effects.h" +#include "aa_rank.h" + +class Mob; + +namespace AA +{ + +class Ability +{ +public: + Ability() { } + ~Ability() { } + + Rank *GetMaxRank(); + Rank *GetRankByPointsSpent(int current_level); + int GetMaxLevel(Mob *who); + + int id; + std::string name; + int category; + int classes; + int races; + int deities; + int drakkin_heritage; + int status; + bool grant_only; + int type; + int charges; + int first_rank_id; + Rank *first; +}; + +} + +#endif diff --git a/zone/aa_rank.h b/zone/aa_rank.h new file mode 100644 index 000000000..c328e4ebb --- /dev/null +++ b/zone/aa_rank.h @@ -0,0 +1,56 @@ +/* EQEMu: Everquest Server Emulator + Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY except by those people which sell it, which + are required to give you total support for your newly bought product; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef EQEMU_ZONE_AA_RANK_H +#define EQEMU_ZONE_AA_RANK_H + +namespace AA +{ + +class Ability; +class Rank +{ +public: + Rank() { } + ~Rank() { } + + int id; + int upper_hotkey_sid; + int lower_hotkey_sid; + int title_sid; + int desc_sid; + int cost; + int level_req; + int spell; + int spell_type; + int recast_time; + int prev_id; + Rank *prev; + int next_id; + Rank *next; + int current_value; + int expansion; + int total_cost; + Ability *base_ability; + std::vector effects; + std::map prereqs; +}; + +} + +#endif diff --git a/zone/aa_rank_effects.h b/zone/aa_rank_effects.h new file mode 100644 index 000000000..d68937078 --- /dev/null +++ b/zone/aa_rank_effects.h @@ -0,0 +1,38 @@ +/* EQEMu: Everquest Server Emulator + Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY except by those people which sell it, which + are required to give you total support for your newly bought product; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef EQEMU_ZONE_AA_RANK_EFFECTS_H +#define EQEMU_ZONE_AA_RANK_EFFECTS_H + +#include "../common/global_define.h" +#include + +namespace AA +{ + +struct RankEffect +{ + int slot; + int effect_id; + int base1; + int base2; +}; + +} + +#endif diff --git a/zone/attack.cpp b/zone/attack.cpp index ffdb0ec41..868c5ff03 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -341,7 +341,7 @@ bool Mob::CheckHitChance(Mob* other, SkillUseTypes skillinuse, int Hand, int16 c return(tohit_roll <= chancetohit); } -bool Mob::AvoidDamage(Mob* other, int32 &damage, bool CanRiposte) +bool Mob::AvoidDamage(Mob *other, int32 &damage, int hand) { /* called when a mob is attacked, does the checks to see if it's a hit * and does other mitigation checks. 'this' is the mob being attacked. @@ -353,22 +353,32 @@ bool Mob::AvoidDamage(Mob* other, int32 &damage, bool CanRiposte) * -4 - dodge * */ - float skill; - float bonus; - float RollTable[4] = {0,0,0,0}; - float roll; - Mob *attacker=other; - Mob *defender=this; - //garunteed hit - bool ghit = false; - if((attacker->aabonuses.MeleeSkillCheck + attacker->spellbonuses.MeleeSkillCheck + attacker->itembonuses.MeleeSkillCheck) > 500) - ghit = true; + /* Order according to current (SoF+?) dev quotes: + * https://forums.daybreakgames.com/eq/index.php?threads/test-update-06-10-15.223510/page-2#post-3261772 + * https://forums.daybreakgames.com/eq/index.php?threads/test-update-06-10-15.223510/page-2#post-3268227 + * Riposte 50, hDEX, must have weapon/fists, doesn't work on archery/throwing + * Block 25, hDEX, works on archery/throwing, behind block done here if back to attacker base1 is chance + * Parry 45, hDEX, doesn't work on throwing/archery, must be facing target + * Dodge 45, hAGI, works on archery/throwing, monks can dodge attacks from behind + * Shield Block, rand base1 + * Staff Block, rand base1 + * regular strike through + * avoiding the attack (CheckHitChance) + * As soon as one succeeds, none of the rest are checked + * + * Formula (all int math) + * (posted for parry, assume rest at the same) + * Chance = (((SKILL + 100) + [((SKILL+100) * SPA(175).Base1) / 100]) / 45) + [(hDex / 25) - min([hDex / 25], hStrikethrough)]. + * hStrikethrough is a mob stat that was added to counter the bonuses of heroic stats + * Number rolled against 100, if the chance is greater than 100 it happens 100% of time + * + * Things with 10k accuracy mods can be avoided with these skills qq + */ + Mob *attacker = other; + Mob *defender = this; - bool InFront = false; - - if (attacker->InFrontMob(this, attacker->GetX(), attacker->GetY())) - InFront = true; + bool InFront = attacker->InFrontMob(this, attacker->GetX(), attacker->GetY()); /* This special ability adds a negative modifer to the defenders riposte/block/parry/chance @@ -383,10 +393,9 @@ bool Mob::AvoidDamage(Mob* other, int32 &damage, bool CanRiposte) int counter_parry = 0; int counter_dodge = 0; - if (attacker->GetSpecialAbility(COUNTER_AVOID_DAMAGE)){ - + if (attacker->GetSpecialAbility(COUNTER_AVOID_DAMAGE)) { counter_all = attacker->GetSpecialAbilityParam(COUNTER_AVOID_DAMAGE, 0); - counter_riposte = attacker->GetSpecialAbilityParam(COUNTER_AVOID_DAMAGE,1); + counter_riposte = attacker->GetSpecialAbilityParam(COUNTER_AVOID_DAMAGE, 1); counter_block = attacker->GetSpecialAbilityParam(COUNTER_AVOID_DAMAGE, 2); counter_parry = attacker->GetSpecialAbilityParam(COUNTER_AVOID_DAMAGE, 3); counter_dodge = attacker->GetSpecialAbilityParam(COUNTER_AVOID_DAMAGE, 4); @@ -400,31 +409,37 @@ bool Mob::AvoidDamage(Mob* other, int32 &damage, bool CanRiposte) Log.Out(Logs::Detail, Logs::Combat, "I am enraged, riposting frontal attack."); } - ///////////////////////////////////////////////////////// - // riposte - ///////////////////////////////////////////////////////// - float riposte_chance = 0.0f; - if (CanRiposte && damage > 0 && CanThisClassRiposte() && InFront) - { - riposte_chance = (100.0f + static_cast(aabonuses.RiposteChance + spellbonuses.RiposteChance + - itembonuses.RiposteChance - counter_riposte - counter_all)) / 100.0f; - skill = GetSkill(SkillRiposte); - if (IsClient()) { + // riposte -- it may seem crazy, but if the attacker has SPA 173 on them, they are immune to Ripo + bool ImmuneRipo = attacker->aabonuses.RiposteChance || attacker->spellbonuses.RiposteChance || attacker->itembonuses.RiposteChance; + // Need to check if we have something in MainHand to actually attack with (or fists) + if (hand != MainRange && CanThisClassRiposte() && InFront && !ImmuneRipo) { + if (IsClient()) CastToClient()->CheckIncreaseSkill(SkillRiposte, other, -10); + // check auto discs ... I guess aa/items too :P + if (spellbonuses.RiposteChance == 10000 || aabonuses.RiposteChance == 10000 || itembonuses.RiposteChance == 10000) { + damage = -3; + return true; } - - if (!ghit) { //if they are not using a garunteed hit discipline - bonus = 2.0 + skill/60.0 + (GetDEX()/200); - bonus *= riposte_chance; - bonus = mod_riposte_chance(bonus, attacker); - RollTable[0] = bonus + (itembonuses.HeroicDEX / 25); // 25 heroic = 1%, applies to ripo, parry, block + int chance = GetSkill(SkillRiposte) + 100; + chance += (chance * (aabonuses.RiposteChance + spellbonuses.RiposteChance + itembonuses.RiposteChance)) / 100; + chance /= 50; + chance += itembonuses.HeroicDEX / 25; // live has "heroic strickthrough" here to counter + if (counter_riposte || counter_all) { + float counter = (counter_riposte + counter_all) / 100.0f; + chance -= chance * counter; + } + // AA Slippery Attacks + if (hand == MainSecondary) { + int slip = aabonuses.OffhandRiposteFail + itembonuses.OffhandRiposteFail + spellbonuses.OffhandRiposteFail; + chance += chance * slip / 100; + } + if (chance > 0 && zone->random.Roll(chance)) { // could be <0 from offhand stuff + damage = -3; + return true; } } - /////////////////////////////////////////////////////// // block - /////////////////////////////////////////////////////// - bool bBlockFromRear = false; // a successful roll on this does not mean a successful block is forthcoming. only that a chance to block @@ -435,101 +450,100 @@ bool Mob::AvoidDamage(Mob* other, int32 &damage, bool CanRiposte) if (BlockBehindChance && zone->random.Roll(BlockBehindChance)) bBlockFromRear = true; - float block_chance = 0.0f; - if (damage > 0 && CanThisClassBlock() && (InFront || bBlockFromRear)) { - block_chance = (100.0f + static_cast(aabonuses.IncreaseBlockChance + spellbonuses.IncreaseBlockChance + - itembonuses.IncreaseBlockChance - counter_block - counter_all)) / 100.0f; - skill = CastToClient()->GetSkill(SkillBlock); - if (IsClient()) { + if (CanThisClassBlock() && (InFront || bBlockFromRear)) { + if (IsClient()) CastToClient()->CheckIncreaseSkill(SkillBlock, other, -10); - } - - if (!ghit) { //if they are not using a garunteed hit discipline - bonus = 2.0 + skill/35.0 + (GetDEX()/200); - bonus = mod_block_chance(bonus, attacker); - RollTable[1] = RollTable[0] + (bonus * block_chance); - } - } - else{ - RollTable[1] = RollTable[0]; - } - - //Try Shield Block OR TwoHandBluntBlockCheck - if(damage > 0 && HasShieldEquiped() && (aabonuses.ShieldBlock || spellbonuses.ShieldBlock || itembonuses.ShieldBlock) && (InFront || bBlockFromRear)) - RollTable[1] += static_cast(aabonuses.ShieldBlock + spellbonuses.ShieldBlock + itembonuses.ShieldBlock - counter_block - counter_all); - - else if(damage > 0 && HasTwoHandBluntEquiped() && (aabonuses.TwoHandBluntBlock || spellbonuses.TwoHandBluntBlock || itembonuses.TwoHandBluntBlock) && (InFront || bBlockFromRear)) - RollTable[1] += static_cast(aabonuses.TwoHandBluntBlock + spellbonuses.TwoHandBluntBlock + itembonuses.TwoHandBluntBlock - counter_block - counter_all); - - ////////////////////////////////////////////////////// - // parry - ////////////////////////////////////////////////////// - float parry_chance = 0.0f; - if (damage > 0 && CanThisClassParry() && InFront){ - parry_chance = (100.0f + static_cast(aabonuses.ParryChance + itembonuses.ParryChance + - itembonuses.ParryChance - counter_parry - counter_all)) / 100.0f; - skill = CastToClient()->GetSkill(SkillParry); - if (IsClient()) { - CastToClient()->CheckIncreaseSkill(SkillParry, other, -10); - } - - if (!ghit) { //if they are not using a garunteed hit discipline - bonus = 2.0 + skill/60.0 + (GetDEX()/200); - bonus *= parry_chance; - bonus = mod_parry_chance(bonus, attacker); - RollTable[2] = RollTable[1] + bonus; - } - } - else{ - RollTable[2] = RollTable[1]; - } - - //////////////////////////////////////////////////////// - // dodge - //////////////////////////////////////////////////////// - float dodge_chance = 0.0f; - if (damage > 0 && CanThisClassDodge() && InFront){ - - dodge_chance = (100.0f + static_cast(aabonuses.DodgeChance + spellbonuses.DodgeChance + - itembonuses.DodgeChance - counter_dodge - counter_all)) / 100.0f; - - skill = CastToClient()->GetSkill(SkillDodge); - if (IsClient()) { - CastToClient()->CheckIncreaseSkill(SkillDodge, other, -10); - } - - if (!ghit) { //if they are not using a garunteed hit discipline - bonus = 2.0 + skill/60.0 + (GetAGI()/200); - bonus *= dodge_chance; - //DCBOOMKAR - bonus = mod_dodge_chance(bonus, attacker); - RollTable[3] = RollTable[2] + bonus - (itembonuses.HeroicDEX / 25) + (itembonuses.HeroicAGI / 25); - } - } - else{ - RollTable[3] = RollTable[2]; - } - - if(damage > 0){ - roll = zone->random.Real(0,100); - if(roll <= RollTable[0]){ - damage = -3; - } - else if(roll <= RollTable[1]){ + // check auto discs ... I guess aa/items too :P + if (spellbonuses.IncreaseBlockChance == 10000 || aabonuses.IncreaseBlockChance == 10000 || + itembonuses.IncreaseBlockChance == 10000) { damage = -1; + return true; } - else if(roll <= RollTable[2]){ - damage = -2; + int chance = GetSkill(SkillBlock) + 100; + chance += (chance * (aabonuses.IncreaseBlockChance + spellbonuses.IncreaseBlockChance + itembonuses.IncreaseBlockChance)) / 100; + chance /= 25; + chance += itembonuses.HeroicDEX / 25; // live has "heroic strickthrough" here to counter + if (counter_block || counter_all) { + float counter = (counter_block + counter_all) / 100.0f; + chance -= chance * counter; } - else if(roll <= RollTable[3]){ - damage = -4; + if (zone->random.Roll(chance)) { + damage = -1; + return true; } } - Log.Out(Logs::Detail, Logs::Combat, "Final damage after all avoidances: %d", damage); + // parry + if (CanThisClassParry() && InFront && hand != MainRange) { + if (IsClient()) + CastToClient()->CheckIncreaseSkill(SkillParry, other, -10); + // check auto discs ... I guess aa/items too :P + if (spellbonuses.ParryChance == 10000 || aabonuses.ParryChance == 10000 || itembonuses.ParryChance == 10000) { + damage = -2; + return true; + } + int chance = GetSkill(SkillParry) + 100; + chance += (chance * (aabonuses.ParryChance + spellbonuses.ParryChance + itembonuses.ParryChance)) / 100; + chance /= 45; + chance += itembonuses.HeroicDEX / 25; // live has "heroic strickthrough" here to counter + if (counter_parry || counter_all) { + float counter = (counter_parry + counter_all) / 100.0f; + chance -= chance * counter; + } + if (zone->random.Roll(chance)) { + damage = -2; + return true; + } + } + + // dodge + if (CanThisClassDodge() && (InFront || GetClass() == MONK) ) { + if (IsClient()) + CastToClient()->CheckIncreaseSkill(SkillDodge, other, -10); + // check auto discs ... I guess aa/items too :P + if (spellbonuses.DodgeChance == 10000 || aabonuses.DodgeChance == 10000 || itembonuses.DodgeChance == 10000) { + damage = -4; + return true; + } + int chance = GetSkill(SkillDodge) + 100; + chance += (chance * (aabonuses.DodgeChance + spellbonuses.DodgeChance + itembonuses.DodgeChance)) / 100; + chance /= 45; + chance += itembonuses.HeroicAGI / 25; // live has "heroic strickthrough" here to counter + if (counter_dodge || counter_all) { + float counter = (counter_dodge + counter_all) / 100.0f; + chance -= chance * counter; + } + if (zone->random.Roll(chance)) { + damage = -4; + return true; + } + } + + // Try Shield Block OR TwoHandBluntBlockCheck + if (HasShieldEquiped() && (aabonuses.ShieldBlock || spellbonuses.ShieldBlock || itembonuses.ShieldBlock) && (InFront || bBlockFromRear)) { + int chance = aabonuses.ShieldBlock + spellbonuses.ShieldBlock + itembonuses.ShieldBlock; + if (counter_block || counter_all) { + float counter = (counter_block + counter_all) / 100.0f; + chance -= chance * counter; + } + if (zone->random.Roll(chance)) { + damage = -1; + return true; + } + } + + if (HasTwoHandBluntEquiped() && (aabonuses.TwoHandBluntBlock || spellbonuses.TwoHandBluntBlock || itembonuses.TwoHandBluntBlock) && (InFront || bBlockFromRear)) { + int chance = aabonuses.TwoHandBluntBlock + itembonuses.TwoHandBluntBlock + spellbonuses.TwoHandBluntBlock; + if (counter_block || counter_all) { + float counter = (counter_block + counter_all) / 100.0f; + chance -= chance * counter; + } + if (zone->random.Roll(chance)) { + damage = -1; + return true; + } + } - if (damage < 0) - return true; return false; } @@ -1286,6 +1300,7 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b } } + // this effect is actually a min cap that happens after the final damage is calculated min_hit += min_hit * GetMeleeMinDamageMod_SE(skillinuse) / 100; if(max_hit < min_hit) @@ -1312,66 +1327,52 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b } //check to see if we hit.. - if(!other->CheckHitChance(this, skillinuse, Hand, hit_chance_bonus)) { - Log.Out(Logs::Detail, Logs::Combat, "Attack missed. Damage set to 0."); - damage = 0; - } else { //we hit, try to avoid it - other->AvoidDamage(this, damage); - other->MeleeMitigation(this, damage, min_hit, opts); - if(damage > 0) - CommonOutgoingHitSuccess(other, damage, skillinuse); - - Log.Out(Logs::Detail, Logs::Combat, "Final damage after all reductions: %d", damage); - } - - //riposte - bool slippery_attack = false; // Part of hack to allow riposte to become a miss, but still allow a Strikethrough chance (like on Live) - if (damage == -3) { - if (bRiposte) return false; - else { - if (Hand == MainSecondary) {// Do we even have it & was attack with mainhand? If not, don't bother with other calculations - //Live AA - SlipperyAttacks - //This spell effect most likely directly modifies the actual riposte chance when using offhand attack. - int32 OffhandRiposteFail = aabonuses.OffhandRiposteFail + itembonuses.OffhandRiposteFail + spellbonuses.OffhandRiposteFail; - OffhandRiposteFail *= -1; //Live uses a negative value for this. - - if (OffhandRiposteFail && - (OffhandRiposteFail > 99 || zone->random.Roll(OffhandRiposteFail))) { - damage = 0; // Counts as a miss - slippery_attack = true; - } else - DoRiposte(other); - if (IsDead()) return false; + if (other->AvoidDamage(this, damage, Hand)) { + if (!bRiposte && !IsStrikethrough) { + int strike_through = itembonuses.StrikeThrough + spellbonuses.StrikeThrough + aabonuses.StrikeThrough; + if(strike_through && zone->random.Roll(strike_through)) { + Message_StringID(MT_StrikeThrough, STRIKETHROUGH_STRING); // You strike through your opponents defenses! + Attack(other, Hand, false, true); // Strikethrough only gives another attempted hit + return false; } - else + // I'm pretty sure you can riposte a riposte + if (damage == -3 && !bRiposte) { DoRiposte(other); - if (IsDead()) return false; + if (IsDead()) + return false; + } + } + Log.Out(Logs::Detail, Logs::Combat, "Avoided damage with code %d", damage); + } else { + if (other->CheckHitChance(this, skillinuse, Hand, hit_chance_bonus)) { + other->MeleeMitigation(this, damage, min_hit, opts); + if (damage > 0) + CommonOutgoingHitSuccess(other, damage, skillinuse); + Log.Out(Logs::Detail, Logs::Combat, "Final damage after all reductions: %d", damage); + } else { + Log.Out(Logs::Detail, Logs::Combat, "Attack missed. Damage set to 0."); + damage = 0; } } - - if (((damage < 0) || slippery_attack) && !bRiposte && !IsStrikethrough) { // Hack to still allow Strikethrough chance w/ Slippery Attacks AA - int32 bonusStrikeThrough = itembonuses.StrikeThrough + spellbonuses.StrikeThrough + aabonuses.StrikeThrough; - - if(bonusStrikeThrough && zone->random.Roll(bonusStrikeThrough)) { - Message_StringID(MT_StrikeThrough, STRIKETHROUGH_STRING); // You strike through your opponents defenses! - Attack(other, Hand, false, true); // Strikethrough only gives another attempted hit - return false; - } - } - } - else{ + } else { damage = -5; } // Hate Generation is on a per swing basis, regardless of a hit, miss, or block, its always the same. // If we are this far, this means we are atleast making a swing. - if (!bRiposte) // Ripostes never generate any aggro. - other->AddToHateList(this, hate); + other->AddToHateList(this, hate); /////////////////////////////////////////////////////////// ////// Send Attack Damage /////////////////////////////////////////////////////////// + if (damage > 0 && aabonuses.SkillAttackProc[0] && aabonuses.SkillAttackProc[1] == skillinuse && + IsValidSpell(aabonuses.SkillAttackProc[2])) { + float chance = aabonuses.SkillAttackProc[0] / 1000.0f; + if (zone->random.Roll(chance)) + SpellFinished(aabonuses.SkillAttackProc[2], other, 10, 0, -1, + spells[aabonuses.SkillAttackProc[2]].ResistDiff); + } other->Damage(this, damage, SPELL_UNKNOWN, skillinuse); if (IsDead()) return false; @@ -1905,21 +1906,18 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool hit_chance_bonus += opts->hit_chance; } - if(!other->CheckHitChance(this, skillinuse, Hand, hit_chance_bonus)) { - damage = 0; //miss - } else { //hit, check for damage avoidance - other->AvoidDamage(this, damage); - other->MeleeMitigation(this, damage, min_dmg+eleBane, opts); - if(damage > 0) { + if (other->AvoidDamage(this, damage, Hand)) { + if (!bRiposte && damage == -3) + DoRiposte(other); + } else { + if (other->CheckHitChance(this, skillinuse, Hand, hit_chance_bonus)) { + other->MeleeMitigation(this, damage, min_dmg+eleBane, opts); CommonOutgoingHitSuccess(other, damage, skillinuse); + } else { + damage = 0; } - Log.Out(Logs::Detail, Logs::Combat, "Generating hate %d towards %s", hate, GetName()); - // now add done damage to the hate list - if(damage > 0) - other->AddToHateList(this, hate); - else - other->AddToHateList(this, 0); } + other->AddToHateList(this, hate); } Log.Out(Logs::Detail, Logs::Combat, "Final damage against %s: %d", other->GetName(), damage); @@ -1932,12 +1930,6 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool else damage = -5; - //cant riposte a riposte - if (bRiposte && damage == -3) { - Log.Out(Logs::Detail, Logs::Combat, "Riposte of riposte canceled."); - return false; - } - if(GetHP() > 0 && !other->HasDied()) { other->Damage(this, damage, SPELL_UNKNOWN, skillinuse, false); // Not avoidable client already had thier chance to Avoid } else @@ -1967,11 +1959,6 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool if(GetHP() > 0 && !other->HasDied()) TriggerDefensiveProcs(nullptr, other, Hand, damage); - // now check ripostes - if (damage == -3) { // riposting - DoRiposte(other); - } - if (damage > 0) return true; @@ -3419,41 +3406,39 @@ bool Mob::HasRangedProcs() const return false; } -bool Client::CheckDoubleAttack(bool tripleAttack) { - +bool Client::CheckDoubleAttack() +{ + int chance = 0; + int skill = GetSkill(SkillDoubleAttack); //Check for bonuses that give you a double attack chance regardless of skill (ie Bestial Frenzy/Harmonious Attack AA) - uint32 bonusGiveDA = aabonuses.GiveDoubleAttack + spellbonuses.GiveDoubleAttack + itembonuses.GiveDoubleAttack; - - if(!HasSkill(SkillDoubleAttack) && !bonusGiveDA) + int bonusGiveDA = aabonuses.GiveDoubleAttack + spellbonuses.GiveDoubleAttack + itembonuses.GiveDoubleAttack; + if (skill > 0) + chance = skill + GetLevel(); + else if (!bonusGiveDA) return false; - float chance = 0.0f; + if (bonusGiveDA) + chance += bonusGiveDA / 100.0f * 500; // convert to skill value + int per_inc = aabonuses.DoubleAttackChance + spellbonuses.DoubleAttackChance + itembonuses.DoubleAttackChance; + if (per_inc) + chance += chance * per_inc / 100; - uint16 skill = GetSkill(SkillDoubleAttack); + return zone->random.Int(1, 500) <= chance; +} - int32 bonusDA = aabonuses.DoubleAttackChance + spellbonuses.DoubleAttackChance + itembonuses.DoubleAttackChance; +// Admittedly these parses were short, but this check worked for 3 toons across multiple levels +// with varying triple attack skill (1-3% error at least) +bool Client::CheckTripleAttack() +{ + int chance = GetSkill(SkillTripleAttack); + if (chance < 1) + return false; - //Use skill calculations otherwise, if you only have AA applied GiveDoubleAttack chance then use that value as the base. - if (skill) - chance = (float(skill+GetLevel()) * (float(100.0f+bonusDA+bonusGiveDA) /100.0f)) /500.0f; - else - chance = (float(bonusGiveDA) * (float(100.0f+bonusDA)/100.0f) ) /100.0f; + int per_inc = aabonuses.TripleAttackChance + spellbonuses.TripleAttackChance + itembonuses.TripleAttackChance; + if (per_inc) + chance += chance * per_inc / 100; - //Live now uses a static Triple Attack skill (lv 46 = 2% lv 60 = 20%) - We do not have this skill on EMU ATM. - //A reasonable forumla would then be TA = 20% * chance - //AA's can also give triple attack skill over cap. (ie Burst of Power) NOTE: Skill ID in spell data is 76 (Triple Attack) - //Kayen: Need to decide if we can implement triple attack skill before working in over the cap effect. - if(tripleAttack) { - // Only some Double Attack classes get Triple Attack [This is already checked in client_processes.cpp] - int32 triple_bonus = spellbonuses.TripleAttackChance + itembonuses.TripleAttackChance; - chance *= 0.2f; //Baseline chance is 20% of your double attack chance. - chance *= float(100.0f+triple_bonus)/100.0f; //Apply modifiers. - } - - if(zone->random.Roll(chance)) - return true; - - return false; + return zone->random.Int(1, 1000) <= chance; } bool Client::CheckDoubleRangedAttack() { @@ -3465,6 +3450,21 @@ bool Client::CheckDoubleRangedAttack() { return false; } +bool Mob::CheckDoubleAttack() +{ + // Not 100% certain pets follow this or if it's just from pets not always + // having the same skills as most mobs + int chance = GetSkill(SkillDoubleAttack); + if (GetLevel() > 35) + chance += GetLevel(); + + int per_inc = aabonuses.DoubleAttackChance + spellbonuses.DoubleAttackChance + itembonuses.DoubleAttackChance; + if (per_inc) + chance += chance * per_inc / 100; + + return zone->random.Int(1, 500) <= chance; +} + void Mob::CommonDamage(Mob* attacker, int32 &damage, const uint16 spell_id, const SkillUseTypes skill_used, bool &avoidable, const int8 buffslot, const bool iBuffTic) { // This method is called with skill_used=ABJURE for Damage Shield damage. bool FromDamageShield = (skill_used == SkillAbjuration); @@ -3512,14 +3512,6 @@ void Mob::CommonDamage(Mob* attacker, int32 &damage, const uint16 spell_id, cons if(damage > 0) { //if there is some damage being done and theres an attacker involved if(attacker) { - if(spell_id == SPELL_HARM_TOUCH2 && attacker->IsClient() && attacker->CastToClient()->CheckAAEffect(aaEffectLeechTouch)){ - int healed = damage; - healed = attacker->GetActSpellHealing(spell_id, healed); - attacker->HealDamage(healed); - entity_list.MessageClose(this, true, 300, MT_Emote, "%s beams a smile at %s", attacker->GetCleanName(), this->GetCleanName() ); - attacker->CastToClient()->DisableAAEffect(aaEffectLeechTouch); - } - // if spell is lifetap add hp to the caster if (spell_id != SPELL_UNKNOWN && IsLifetapSpell( spell_id )) { int healed = damage; @@ -3583,6 +3575,9 @@ void Mob::CommonDamage(Mob* attacker, int32 &damage, const uint16 spell_id, cons SetHP(GetHP() - damage); + if (IsClient()) + this->CastToClient()->SendHPUpdateMarquee(); + if(HasDied()) { bool IsSaved = false; @@ -3693,11 +3688,11 @@ void Mob::CommonDamage(Mob* attacker, int32 &damage, const uint16 spell_id, cons //send an HP update if we are hurt if(GetHP() < GetMaxHP()) - SendHPUpdate(!iBuffTic); // the OP_Damage actually updates the client in these cases, so we skill them + SendHPUpdate(!iBuffTic); // the OP_Damage actually updates the client in these cases, so we skip the HP update for them } //end `if damage was done` //send damage packet... - if(!iBuffTic) { //buff ticks do not send damage, instead they just call SendHPUpdate(), which is done below + if(!iBuffTic) { //buff ticks do not send damage, instead they just call SendHPUpdate(), which is done above EQApplicationPacket* outapp = new EQApplicationPacket(OP_Damage, sizeof(CombatDamage_Struct)); CombatDamage_Struct* a = (CombatDamage_Struct*)outapp->pBuffer; a->target = GetID(); @@ -4413,42 +4408,55 @@ bool Mob::TryFinishingBlow(Mob *defender, SkillUseTypes skillinuse) return false; } -void Mob::DoRiposte(Mob* defender) { +void Mob::DoRiposte(Mob *defender) +{ Log.Out(Logs::Detail, Logs::Combat, "Preforming a riposte"); if (!defender) return; defender->Attack(this, MainPrimary, true); - if (HasDied()) return; + if (HasDied()) + return; - int32 DoubleRipChance = defender->aabonuses.GiveDoubleRiposte[0] + - defender->spellbonuses.GiveDoubleRiposte[0] + - defender->itembonuses.GiveDoubleRiposte[0]; + // this effect isn't used on live? See no AAs or spells + int32 DoubleRipChance = defender->aabonuses.DoubleRiposte + defender->spellbonuses.DoubleRiposte + + defender->itembonuses.DoubleRiposte; - DoubleRipChance = defender->aabonuses.DoubleRiposte + - defender->spellbonuses.DoubleRiposte + - defender->itembonuses.DoubleRiposte; - - //Live AA - Double Riposte - if(DoubleRipChance && zone->random.Roll(DoubleRipChance)) { - Log.Out(Logs::Detail, Logs::Combat, "Preforming a double riposed (%d percent chance)", DoubleRipChance); + if (DoubleRipChance && zone->random.Roll(DoubleRipChance)) { + Log.Out(Logs::Detail, Logs::Combat, + "Preforming a double riposted from SE_DoubleRiposte (%d percent chance)", DoubleRipChance); defender->Attack(this, MainPrimary, true); - if (HasDied()) return; + if (HasDied()) + return; } - //Double Riposte effect, allows for a chance to do RIPOSTE with a skill specfic special attack (ie Return Kick). - //Coded narrowly: Limit to one per client. Limit AA only. [1 = Skill Attack Chance, 2 = Skill] + DoubleRipChance = defender->aabonuses.GiveDoubleRiposte[0] + defender->spellbonuses.GiveDoubleRiposte[0] + + defender->itembonuses.GiveDoubleRiposte[0]; + + // Live AA - Double Riposte + if (DoubleRipChance && zone->random.Roll(DoubleRipChance)) { + Log.Out(Logs::Detail, Logs::Combat, + "Preforming a double riposted from SE_GiveDoubleRiposte base1 == 0 (%d percent chance)", + DoubleRipChance); + defender->Attack(this, MainPrimary, true); + if (HasDied()) + return; + } + + // Double Riposte effect, allows for a chance to do RIPOSTE with a skill specific special attack (ie Return Kick). + // Coded narrowly: Limit to one per client. Limit AA only. [1 = Skill Attack Chance, 2 = Skill] DoubleRipChance = defender->aabonuses.GiveDoubleRiposte[1]; - if(DoubleRipChance && zone->random.Roll(DoubleRipChance)) { - Log.Out(Logs::Detail, Logs::Combat, "Preforming a return SPECIAL ATTACK (%d percent chance)", DoubleRipChance); + if (DoubleRipChance && zone->random.Roll(DoubleRipChance)) { + Log.Out(Logs::Detail, Logs::Combat, "Preforming a return SPECIAL ATTACK (%d percent chance)", + DoubleRipChance); if (defender->GetClass() == MONK) defender->MonkSpecialAttack(this, defender->aabonuses.GiveDoubleRiposte[2]); - else if (defender->IsClient()) - defender->CastToClient()->DoClassAttacks(this,defender->aabonuses.GiveDoubleRiposte[2], true); + else if (defender->IsClient() && defender->CastToClient()->HasSkill((SkillUseTypes)defender->aabonuses.GiveDoubleRiposte[2])) + defender->CastToClient()->DoClassAttacks(this, defender->aabonuses.GiveDoubleRiposte[2], true); } } @@ -4640,7 +4648,7 @@ void Mob::TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success, ui if (IsClient() && aabonuses.LimitToSkill[skill]){ CanProc = true; - uint32 effect = 0; + uint32 effect_id = 0; int32 base1 = 0; int32 base2 = 0; uint32 slot = 0; @@ -4659,36 +4667,41 @@ void Mob::TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success, ui proc_spell_id = 0; ProcMod = 0; - std::map >::const_iterator find_iter = aa_effects.find(aaid); - if(find_iter == aa_effects.end()) - break; + for(auto &rank_info : aa_ranks) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_info.first, rank_info.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; - for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; - - if (effect == SE_SkillProc || effect == SE_SkillProcSuccess) { - proc_spell_id = base1; - ProcMod = static_cast(base2); + if(!ability) { + continue; } - else if (effect == SE_LimitToSkill && base1 <= HIGHEST_SKILL) { + for(auto &effect : rank->effects) { + effect_id = effect.effect_id; + base1 = effect.base1; + base2 = effect.base2; + slot = effect.slot; - if (CanProc && base1 == skill && IsValidSpell(proc_spell_id)) { - float final_chance = chance * (ProcMod / 100.0f); + if(effect_id == SE_SkillProc || effect_id == SE_SkillProcSuccess) { + proc_spell_id = base1; + ProcMod = static_cast(base2); + } + else if(effect_id == SE_LimitToSkill && base1 <= HIGHEST_SKILL) { - if (zone->random.Roll(final_chance)) { - ExecWeaponProc(nullptr, proc_spell_id, on); - CanProc = false; - break; + if (CanProc && base1 == skill && IsValidSpell(proc_spell_id)) { + float final_chance = chance * (ProcMod / 100.0f); + + if (zone->random.Roll(final_chance)) { + ExecWeaponProc(nullptr, proc_spell_id, on); + CanProc = false; + break; + } } } - } - else { - proc_spell_id = 0; - ProcMod = 0; + else { + proc_spell_id = 0; + ProcMod = 0; + } } } } @@ -4906,7 +4919,6 @@ void Client::SetAttackTimer() attack_timer.SetAtTrigger(4000, true); Timer *TimerToUse = nullptr; - const Item_Struct *PrimaryWeapon = nullptr; for (int i = MainRange; i <= MainSecondary; i++) { //pick a timer @@ -4928,19 +4940,8 @@ void Client::SetAttackTimer() //special offhand stuff if (i == MainSecondary) { - //if we have a 2H weapon in our main hand, no dual - if (PrimaryWeapon != nullptr) { - if (PrimaryWeapon->ItemClass == ItemClassCommon - && (PrimaryWeapon->ItemType == ItemType2HSlash - || PrimaryWeapon->ItemType == ItemType2HBlunt - || PrimaryWeapon->ItemType == ItemType2HPiercing)) { - attack_dw_timer.Disable(); - continue; - } - } - //if we cant dual wield, skip it - if (!CanThisClassDualWield()) { + if (!CanThisClassDualWield() || HasTwoHanderEquipped()) { attack_dw_timer.Disable(); continue; } @@ -4989,9 +4990,6 @@ void Client::SetAttackTimer() if (quiver_haste > 0) speed *= quiver_haste; TimerToUse->SetAtTrigger(std::max(RuleI(Combat, MinHastedDelay), speed), true, true); - - if (i == MainPrimary) - PrimaryWeapon = ItemToUse; } } @@ -5029,8 +5027,8 @@ void NPC::SetAttackTimer() //special offhand stuff if (i == MainSecondary) { - //NPCs get it for free at 13 - if(GetLevel() < 13) { + // SPECATK_QUAD is uncheesable + if(!CanThisClassDualWield() || (HasTwoHanderEquipped() && !GetSpecialAbility(SPECATK_QUAD))) { attack_dw_timer.Disable(); continue; } @@ -5039,3 +5037,140 @@ void NPC::SetAttackTimer() TimerToUse->SetAtTrigger(std::max(RuleI(Combat, MinHastedDelay), speed), true, true); } } + +void Client::DoAttackRounds(Mob *target, int hand, bool IsFromSpell) +{ + if (!target) + return; + + Attack(target, hand, false, false, IsFromSpell); + + bool candouble = CanThisClassDoubleAttack(); + // extra off hand non-sense, can only double with skill of 150 or above + // or you have any amount of GiveDoubleAttack + if (candouble && hand == MainSecondary) + candouble = GetSkill(SkillDoubleAttack) > 149 || (aabonuses.GiveDoubleAttack + spellbonuses.GiveDoubleAttack + itembonuses.GiveDoubleAttack) > 0; + + if (candouble) { + CheckIncreaseSkill(SkillDoubleAttack, target, -10); + if (CheckDoubleAttack()) { + Attack(target, hand, false, false, IsFromSpell); + // you can only triple from the main hand + if (hand == MainPrimary && CanThisClassTripleAttack()) { + CheckIncreaseSkill(SkillTripleAttack, target, -10); + if (CheckTripleAttack()) + Attack(target, hand, false, false, IsFromSpell); + } + } + } + + if (hand == MainPrimary) { + // According to http://www.monkly-business.net/forums/showpost.php?p=312095&postcount=168 a dev told them flurry isn't dependant on triple attack + // the parses kind of back that up and all of my parses seemed to be 4 or 5 attacks in the round which would work out to be + // doubles or triples with 2 from flurries or triple with 1 or 2 flurries ... Going with the "dev quote" I guess like we've always had it + auto flurrychance = aabonuses.FlurryChance + spellbonuses.FlurryChance + itembonuses.FlurryChance; + if (flurrychance && zone->random.Roll(flurrychance)) { + Attack(target, hand, false, false, IsFromSpell); + Attack(target, hand, false, false, IsFromSpell); + Message_StringID(MT_NPCFlurry, YOU_FLURRY); + } + // I haven't parsed where this guy happens, but it's not part of the normal chain above so this is fine + auto extraattackchance = aabonuses.ExtraAttackChance + spellbonuses.ExtraAttackChance + itembonuses.ExtraAttackChance; + if (extraattackchance && HasTwoHanderEquipped() && zone->random.Roll(extraattackchance)) + Attack(target, hand, false, false, IsFromSpell); + } +} + +bool Mob::CheckDualWield() +{ + // Pets /might/ follow a slightly different progression + // although it could all be from pets having different skills than most mobs + int chance = GetSkill(SkillDualWield); + if (GetLevel() > 35) + chance += GetLevel(); + + chance += aabonuses.Ambidexterity + spellbonuses.Ambidexterity + itembonuses.Ambidexterity; + int per_inc = spellbonuses.DualWieldChance + aabonuses.DualWieldChance + itembonuses.DualWieldChance; + if (per_inc) + chance += chance * per_inc / 100; + + return zone->random.Int(1, 375) <= chance; +} + +bool Client::CheckDualWield() +{ + int chance = GetSkill(SkillDualWield) + GetLevel(); + + chance += aabonuses.Ambidexterity + spellbonuses.Ambidexterity + itembonuses.Ambidexterity; + int per_inc = spellbonuses.DualWieldChance + aabonuses.DualWieldChance + itembonuses.DualWieldChance; + if (per_inc) + chance += chance * per_inc / 100; + + return zone->random.Int(1, 375) <= chance; +} + +void Mob::DoMainHandAttackRounds(Mob *target, ExtraAttackOptions *opts) +{ + if (!target) + return; + + if (RuleB(Combat, UseLiveCombatRounds)) { + // A "quad" on live really is just a successful dual wield where both double attack + // The mobs that could triple lost the ability to when the triple attack skill was added in + Attack(target, MainPrimary, false, false, false, opts); + if (CanThisClassDoubleAttack() && CheckDoubleAttack()) + Attack(target, MainPrimary, false, false, false, opts); + return; + } + + if (IsNPC()) { + int16 n_atk = CastToNPC()->GetNumberOfAttacks(); + if (n_atk <= 1) { + Attack(target, MainPrimary, false, false, false, opts); + } else { + for (int i = 0; i < n_atk; ++i) { + Attack(target, MainPrimary, false, false, false, opts); + } + } + } else { + Attack(target, MainPrimary, false, false, false, opts); + } + + // we use this random value in three comparisons with different + // thresholds, and if its truely random, then this should work + // out reasonably and will save us compute resources. + int32 RandRoll = zone->random.Int(0, 99); + if ((CanThisClassDoubleAttack() || GetSpecialAbility(SPECATK_TRIPLE) || GetSpecialAbility(SPECATK_QUAD)) + // check double attack, this is NOT the same rules that clients use... + && + RandRoll < (GetLevel() + NPCDualAttackModifier)) { + Attack(target, MainPrimary, false, false, false, opts); + // lets see if we can do a triple attack with the main hand + // pets are excluded from triple and quads... + if ((GetSpecialAbility(SPECATK_TRIPLE) || GetSpecialAbility(SPECATK_QUAD)) && !IsPet() && + RandRoll < (GetLevel() + NPCTripleAttackModifier)) { + Attack(target, MainPrimary, false, false, false, opts); + // now lets check the quad attack + if (GetSpecialAbility(SPECATK_QUAD) && RandRoll < (GetLevel() + NPCQuadAttackModifier)) { + Attack(target, MainPrimary, false, false, false, opts); + } + } + } +} + +void Mob::DoOffHandAttackRounds(Mob *target, ExtraAttackOptions *opts) +{ + if (!target) + return; + // Mobs will only dual wield w/ the flag or have a secondary weapon + // For now, SPECATK_QUAD means innate DW when Combat:UseLiveCombatRounds is true + if ((GetSpecialAbility(SPECATK_INNATE_DW) || + (RuleB(Combat, UseLiveCombatRounds) && GetSpecialAbility(SPECATK_QUAD))) || + GetEquipment(MaterialSecondary) != 0) { + if (CheckDualWield()) { + Attack(target, MainSecondary, false, false, false, opts); + if (CanThisClassDoubleAttack() && GetLevel() > 35 && CheckDoubleAttack()) + Attack(target, MainSecondary, false, false, false, opts); + } + } +} diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 5dd7440f6..155dfc4ae 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -42,6 +42,7 @@ void Mob::CalcBonuses() { CalcSpellBonuses(&spellbonuses); + CalcAABonuses(&aabonuses); CalcMaxHP(); CalcMaxMana(); SetAttackTimer(); @@ -51,9 +52,7 @@ void Mob::CalcBonuses() void NPC::CalcBonuses() { - Mob::CalcBonuses(); - memset(&aabonuses, 0, sizeof(StatBonuses)); - + memset(&itembonuses, 0, sizeof(StatBonuses)); if(RuleB(NPC, UseItemBonusesForNonPets)){ memset(&itembonuses, 0, sizeof(StatBonuses)); CalcItemBonuses(&itembonuses); @@ -74,12 +73,8 @@ void Client::CalcBonuses() memset(&itembonuses, 0, sizeof(StatBonuses)); CalcItemBonuses(&itembonuses); CalcEdibleBonuses(&itembonuses); - CalcSpellBonuses(&spellbonuses); - - Log.Out(Logs::Detail, Logs::AA, "Calculating AA Bonuses for %s.", this->GetCleanName()); - CalcAABonuses(&aabonuses); //we're not quite ready for this - Log.Out(Logs::Detail, Logs::AA, "Finished calculating AA Bonuses for %s.", this->GetCleanName()); + CalcAABonuses(&aabonuses); ProcessItemCaps(); // caps that depend on spell/aa bonuses @@ -113,6 +108,9 @@ void Client::CalcBonuses() rooted = FindType(SE_Root); XPRate = 100 + spellbonuses.XPRateMod; + + if (GetMaxXTargets() != 5 + aabonuses.extra_xtargets) + SetMaxXTargets(5 + aabonuses.extra_xtargets); } int Client::CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat) @@ -143,6 +141,7 @@ void Client::CalcItemBonuses(StatBonuses* newbon) { ClearItemFactionBonuses(); SetShieldEquiped(false); SetTwoHandBluntEquiped(false); + SetTwoHanderEquipped(false); unsigned int i; //should not include 21 (SLOT_AMMO) @@ -156,8 +155,11 @@ void Client::CalcItemBonuses(StatBonuses* newbon) { const Item_Struct *item = inst->GetItem(); if (i == MainSecondary && (item && item->ItemType == ItemTypeShield)) SetShieldEquiped(true); - else if (i == MainPrimary && (item && item->ItemType == ItemType2HBlunt)) + else if (i == MainPrimary && (item && item->ItemType == ItemType2HBlunt)) { SetTwoHandBluntEquiped(true); + SetTwoHanderEquipped(true); + } else if (i == MainPrimary && (item && (item->ItemType == ItemType2HSlash || item->ItemType == ItemType2HPiercing))) + SetTwoHanderEquipped(true); } //Power Source Slot @@ -632,809 +634,859 @@ void Client::CalcEdibleBonuses(StatBonuses* newbon) { } } -void Client::CalcAABonuses(StatBonuses* newbon) { - memset(newbon, 0, sizeof(StatBonuses)); //start fresh +void Mob::CalcAABonuses(StatBonuses *newbon) +{ + memset(newbon, 0, sizeof(StatBonuses)); // start fresh - int i; - uint32 slots = 0; - uint32 aa_AA = 0; - uint32 aa_value = 0; - if(this->aa) { - for (i = 0; i < MAX_PP_AA_ARRAY; i++) { //iterate through all of the client's AAs - if (this->aa[i]) { // make sure aa exists or we'll crash zone - aa_AA = this->aa[i]->AA; //same as aaid from the aa_effects table - aa_value = this->aa[i]->value; //how many points in it - if (aa_AA > 0 || aa_value > 0) { //do we have the AA? if 1 of the 2 is set, we can assume we do - //slots = database.GetTotalAALevels(aa_AA); //find out how many effects from aa_effects table - slots = zone->GetTotalAALevels(aa_AA); //find out how many effects from aa_effects, which is loaded into memory - if (slots > 0) //and does it have any effects? may be able to put this above, not sure if it runs on each iteration - ApplyAABonuses(aa_AA, slots, newbon); //add the bonuses - } - } + for (const auto &aa : aa_ranks) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { + continue; } + + // bad data or no effects + if (rank->effects.empty()) + continue; + + ApplyAABonuses(*rank, newbon); } } - //A lot of the normal spell functions (IsBlankSpellEffect, etc) are set for just spells (in common/spdat.h). //For now, we'll just put them directly into the code and comment with the corresponding normal function //Maybe we'll fix it later? :-D -void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon) +void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) { - if(slots == 0) //sanity check. why bother if no slots to fill? + if (rank.effects.empty()) // sanity check. why bother if no slots to fill? return; - //from AA_Ability struct uint32 effect = 0; int32 base1 = 0; - int32 base2 = 0; //only really used for SE_RaiseStatCap & SE_ReduceSkillTimer in aa_effects table + int32 base2 = 0; // only really used for SE_RaiseStatCap & SE_ReduceSkillTimer in aa_effects table uint32 slot = 0; - std::map >::const_iterator find_iter = aa_effects.find(aaid); - if(find_iter == aa_effects.end()) - { - return; - } + for (const auto &e : rank.effects) { + effect = e.effect_id; + base1 = e.base1; + base2 = e.base2; + slot = e.slot; - for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; - - //we default to 0 (SE_CurrentHP) for the effect, so if there aren't any base1/2 values, we'll just skip it + // we default to 0 (SE_CurrentHP) for the effect, so if there aren't any base1/2 values, we'll just skip it if (effect == 0 && base1 == 0 && base2 == 0) continue; - //IsBlankSpellEffect() - if (effect == SE_Blank || (effect == SE_CHA && base1 == 0) || effect == SE_StackingCommand_Block || effect == SE_StackingCommand_Overwrite) + // IsBlankSpellEffect() + if (effect == SE_Blank || (effect == SE_CHA && base1 == 0) || effect == SE_StackingCommand_Block || + effect == SE_StackingCommand_Overwrite) continue; - Log.Out(Logs::Detail, Logs::AA, "Applying Effect %d from AA %u in slot %d (base1: %d, base2: %d) on %s", effect, aaid, slot, base1, base2, this->GetCleanName()); + Log.Out(Logs::Detail, Logs::AA, "Applying Effect %d from AA %u in slot %d (base1: %d, base2: %d) on %s", + effect, rank.id, slot, base1, base2, GetCleanName()); - uint8 focus = IsFocusEffect(0, 0, true,effect); - if (focus) - { + uint8 focus = IsFocusEffect(0, 0, true, effect); + if (focus) { newbon->FocusEffects[focus] = static_cast(effect); continue; } - switch (effect) - { - //Note: AA effects that use accuracy are skill limited, while spell effect is not. - case SE_Accuracy: - if ((base2 == ALL_SKILLS) && (newbon->Accuracy[HIGHEST_SKILL+1] < base1)) - newbon->Accuracy[HIGHEST_SKILL+1] = base1; - else if (newbon->Accuracy[base2] < base1) - newbon->Accuracy[base2] += base1; - break; - case SE_CurrentHP: //regens - newbon->HPRegen += base1; - break; - case SE_CurrentEndurance: - newbon->EnduranceRegen += base1; - break; - case SE_MovementSpeed: - newbon->movementspeed += base1; //should we let these stack? - /*if (base1 > newbon->movementspeed) //or should we use a total value? - newbon->movementspeed = base1;*/ - break; - case SE_STR: - newbon->STR += base1; - break; - case SE_DEX: - newbon->DEX += base1; - break; - case SE_AGI: - newbon->AGI += base1; - break; - case SE_STA: - newbon->STA += base1; - break; - case SE_INT: - newbon->INT += base1; - break; - case SE_WIS: - newbon->WIS += base1; - break; - case SE_CHA: - newbon->CHA += base1; - break; - case SE_WaterBreathing: - //handled by client - break; - case SE_CurrentMana: - newbon->ManaRegen += base1; - break; - case SE_ItemManaRegenCapIncrease: - newbon->ItemManaRegenCap += base1; - break; - case SE_ResistFire: - newbon->FR += base1; - break; - case SE_ResistCold: - newbon->CR += base1; - break; - case SE_ResistPoison: - newbon->PR += base1; - break; - case SE_ResistDisease: - newbon->DR += base1; - break; - case SE_ResistMagic: - newbon->MR += base1; - break; - case SE_ResistCorruption: - newbon->Corrup += base1; - break; - case SE_IncreaseSpellHaste: - break; - case SE_IncreaseRange: - break; - case SE_MaxHPChange: - newbon->MaxHP += base1; - break; - case SE_Packrat: - newbon->Packrat += base1; - break; - case SE_TwoHandBash: - break; - case SE_SetBreathLevel: - break; - case SE_RaiseStatCap: - switch(base2) - { - //are these #define'd somewhere? - case 0: //str - newbon->STRCapMod += base1; - break; - case 1: //sta - newbon->STACapMod += base1; - break; - case 2: //agi - newbon->AGICapMod += base1; - break; - case 3: //dex - newbon->DEXCapMod += base1; - break; - case 4: //wis - newbon->WISCapMod += base1; - break; - case 5: //int - newbon->INTCapMod += base1; - break; - case 6: //cha - newbon->CHACapMod += base1; - break; - case 7: //mr - newbon->MRCapMod += base1; - break; - case 8: //cr - newbon->CRCapMod += base1; - break; - case 9: //fr - newbon->FRCapMod += base1; - break; - case 10: //pr - newbon->PRCapMod += base1; - break; - case 11: //dr - newbon->DRCapMod += base1; - break; - case 12: //corruption - newbon->CorrupCapMod += base1; - break; - } - break; - case SE_PetDiscipline2: - break; - case SE_SpellSlotIncrease: - break; - case SE_MysticalAttune: - newbon->BuffSlotIncrease += base1; - break; - case SE_TotalHP: - newbon->HP += base1; - break; - case SE_StunResist: - newbon->StunResist += base1; - break; - case SE_SpellCritChance: - newbon->CriticalSpellChance += base1; - break; - case SE_SpellCritDmgIncrease: - newbon->SpellCritDmgIncrease += base1; - break; - case SE_DotCritDmgIncrease: - newbon->DotCritDmgIncrease += base1; - break; - case SE_ResistSpellChance: - newbon->ResistSpellChance += base1; - break; - case SE_CriticalHealChance: - newbon->CriticalHealChance += base1; - break; - case SE_CriticalHealOverTime: - newbon->CriticalHealOverTime += base1; - break; - case SE_CriticalDoTChance: - newbon->CriticalDoTChance += base1; - break; - case SE_ReduceSkillTimer: - newbon->SkillReuseTime[base2] += base1; - break; - case SE_Fearless: - newbon->Fearless = true; - break; - case SE_PersistantCasting: - newbon->PersistantCasting += base1; - break; - case SE_DelayDeath: - newbon->DelayDeath += base1; - break; - case SE_FrontalStunResist: - newbon->FrontalStunResist += base1; - break; - case SE_ImprovedBindWound: - newbon->BindWound += base1; - break; - case SE_MaxBindWound: - newbon->MaxBindWound += base1; - break; - case SE_ExtraAttackChance: - newbon->ExtraAttackChance += base1; - break; - case SE_SeeInvis: - newbon->SeeInvis = base1; - break; - case SE_BaseMovementSpeed: - newbon->BaseMovementSpeed += base1; - break; - case SE_IncreaseRunSpeedCap: - newbon->IncreaseRunSpeedCap += base1; - break; - case SE_ConsumeProjectile: - newbon->ConsumeProjectile += base1; - break; - case SE_ForageAdditionalItems: - newbon->ForageAdditionalItems += base1; - break; - case SE_Salvage: - newbon->SalvageChance += base1; - break; - case SE_ArcheryDamageModifier: - newbon->ArcheryDamageModifier += base1; - break; - case SE_DoubleRangedAttack: - newbon->DoubleRangedAttack += base1; - break; - case SE_DamageShield: - newbon->DamageShield += base1; - break; - case SE_CharmBreakChance: - newbon->CharmBreakChance += base1; - break; - case SE_OffhandRiposteFail: - newbon->OffhandRiposteFail += base1; - break; - case SE_ItemAttackCapIncrease: - newbon->ItemATKCap += base1; - break; - case SE_GivePetGroupTarget: - newbon->GivePetGroupTarget = true; - break; - case SE_ItemHPRegenCapIncrease: - newbon->ItemHPRegenCap = +base1; - break; - case SE_Ambidexterity: - newbon->Ambidexterity += base1; - break; - case SE_PetMaxHP: - newbon->PetMaxHP += base1; - break; - case SE_AvoidMeleeChance: - newbon->AvoidMeleeChanceEffect += base1; - break; - case SE_CombatStability: - newbon->CombatStability += base1; - break; - case SE_AddSingingMod: - switch (base2) - { - case ItemTypeWindInstrument: - newbon->windMod += base1; - break; - case ItemTypeStringedInstrument: - newbon->stringedMod += base1; - break; - case ItemTypeBrassInstrument: - newbon->brassMod += base1; - break; - case ItemTypePercussionInstrument: - newbon->percussionMod += base1; - break; - case ItemTypeSinging: - newbon->singingMod += base1; - break; - } - break; - case SE_SongModCap: - newbon->songModCap += base1; - break; - case SE_PetCriticalHit: - newbon->PetCriticalHit += base1; - break; - case SE_PetAvoidance: - newbon->PetAvoidance += base1; - break; - case SE_ShieldBlock: - newbon->ShieldBlock += base1; - break; - case SE_ShieldEquipHateMod: - newbon->ShieldEquipHateMod += base1; - break; - case SE_ShieldEquipDmgMod: - newbon->ShieldEquipDmgMod[0] += base1; - newbon->ShieldEquipDmgMod[1] += base2; - break; - case SE_SecondaryDmgInc: - newbon->SecondaryDmgInc = true; - break; - case SE_ChangeAggro: - newbon->hatemod += base1; - break; - case SE_EndurancePool: - newbon->Endurance += base1; - break; - case SE_ChannelChanceItems: - newbon->ChannelChanceItems += base1; - break; - case SE_ChannelChanceSpells: - newbon->ChannelChanceSpells += base1; - break; - case SE_DoubleSpecialAttack: - newbon->DoubleSpecialAttack += base1; - break; - case SE_TripleBackstab: - newbon->TripleBackstab += base1; - break; - case SE_FrontalBackstabMinDmg: - newbon->FrontalBackstabMinDmg = true; - break; - case SE_FrontalBackstabChance: - newbon->FrontalBackstabChance += base1; - break; - case SE_BlockBehind: - newbon->BlockBehind += base1; - break; - - case SE_StrikeThrough: - case SE_StrikeThrough2: - newbon->StrikeThrough += base1; - break; - case SE_DoubleAttackChance: - newbon->DoubleAttackChance += base1; - break; - case SE_GiveDoubleAttack: - newbon->GiveDoubleAttack += base1; - break; - case SE_ProcChance: - newbon->ProcChanceSPA += base1; - break; - case SE_RiposteChance: - newbon->RiposteChance += base1; - break; - case SE_Flurry: - newbon->FlurryChance += base1; - break; - case SE_PetFlurry: - newbon->PetFlurry += base1; - break; - case SE_BardSongRange: - newbon->SongRange += base1; - break; - case SE_RootBreakChance: - newbon->RootBreakChance += base1; - break; - case SE_UnfailingDivinity: - newbon->UnfailingDivinity += base1; - break; - case SE_CrippBlowChance: - newbon->CrippBlowChance += base1; - break; - - case SE_HitChance: - { - if(base2 == ALL_SKILLS) - newbon->HitChanceEffect[HIGHEST_SKILL+1] += base1; - else - newbon->HitChanceEffect[base2] += base1; - } - - case SE_ProcOnKillShot: - for(int i = 0; i < MAX_SPELL_TRIGGER*3; i+=3) - { - if(!newbon->SpellOnKill[i] || ((newbon->SpellOnKill[i] == base2) && (newbon->SpellOnKill[i+1] < base1))) - { - //base1 = chance, base2 = SpellID to be triggered, base3 = min npc level - newbon->SpellOnKill[i] = base2; - newbon->SpellOnKill[i+1] = base1; - - if (GetLevel() > 15) - newbon->SpellOnKill[i+2] = GetLevel() - 15; //AA specifiy "non-trivial" - else - newbon->SpellOnKill[i+2] = 0; - - break; - } - } + switch (effect) { + // Note: AA effects that use accuracy are skill limited, while spell effect is not. + case SE_Accuracy: + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; + if ((base2 == ALL_SKILLS) && (newbon->Accuracy[HIGHEST_SKILL + 1] < base1)) + newbon->Accuracy[HIGHEST_SKILL + 1] = base1; + else if (newbon->Accuracy[base2] < base1) + newbon->Accuracy[base2] += base1; break; - - case SE_SpellOnDeath: - for(int i = 0; i < MAX_SPELL_TRIGGER*2; i+=2) - { - if(!newbon->SpellOnDeath[i]) - { - // base1 = SpellID to be triggered, base2 = chance to fire - newbon->SpellOnDeath[i] = base1; - newbon->SpellOnDeath[i+1] = base2; - break; - } - } + case SE_CurrentHP: // regens + newbon->HPRegen += base1; break; - - case SE_TriggerOnCast: - - for(int i = 0; i < MAX_SPELL_TRIGGER; i++) - { - if (newbon->SpellTriggers[i] == aaid) - break; - - if(!newbon->SpellTriggers[i]) - { - //Save the 'aaid' of each triggerable effect to an array - newbon->SpellTriggers[i] = aaid; - break; - } - } + case SE_CurrentEndurance: + newbon->EnduranceRegen += base1; break; - - case SE_CriticalHitChance: - { - if(base2 == ALL_SKILLS) - newbon->CriticalHitChance[HIGHEST_SKILL+1] += base1; - else - newbon->CriticalHitChance[base2] += base1; + case SE_MovementSpeed: + newbon->movementspeed += base1; // should we let these stack? + /*if (base1 > newbon->movementspeed) //or should we use a total value? + newbon->movementspeed = base1;*/ + break; + case SE_STR: + newbon->STR += base1; + break; + case SE_DEX: + newbon->DEX += base1; + break; + case SE_AGI: + newbon->AGI += base1; + break; + case SE_STA: + newbon->STA += base1; + break; + case SE_INT: + newbon->INT += base1; + break; + case SE_WIS: + newbon->WIS += base1; + break; + case SE_CHA: + newbon->CHA += base1; + break; + case SE_WaterBreathing: + // handled by client + break; + case SE_CurrentMana: + newbon->ManaRegen += base1; + break; + case SE_ManaPool: + newbon->Mana += base1; + break; + case SE_ItemManaRegenCapIncrease: + newbon->ItemManaRegenCap += base1; + break; + case SE_ResistFire: + newbon->FR += base1; + break; + case SE_ResistCold: + newbon->CR += base1; + break; + case SE_ResistPoison: + newbon->PR += base1; + break; + case SE_ResistDisease: + newbon->DR += base1; + break; + case SE_ResistMagic: + newbon->MR += base1; + break; + case SE_ResistCorruption: + newbon->Corrup += base1; + break; + case SE_IncreaseSpellHaste: + break; + case SE_IncreaseRange: + break; + case SE_MaxHPChange: + newbon->MaxHP += base1; + break; + case SE_Packrat: + newbon->Packrat += base1; + break; + case SE_TwoHandBash: + break; + case SE_SetBreathLevel: + break; + case SE_RaiseStatCap: + switch (base2) { + // are these #define'd somewhere? + case 0: // str + newbon->STRCapMod += base1; + break; + case 1: // sta + newbon->STACapMod += base1; + break; + case 2: // agi + newbon->AGICapMod += base1; + break; + case 3: // dex + newbon->DEXCapMod += base1; + break; + case 4: // wis + newbon->WISCapMod += base1; + break; + case 5: // int + newbon->INTCapMod += base1; + break; + case 6: // cha + newbon->CHACapMod += base1; + break; + case 7: // mr + newbon->MRCapMod += base1; + break; + case 8: // cr + newbon->CRCapMod += base1; + break; + case 9: // fr + newbon->FRCapMod += base1; + break; + case 10: // pr + newbon->PRCapMod += base1; + break; + case 11: // dr + newbon->DRCapMod += base1; + break; + case 12: // corruption + newbon->CorrupCapMod += base1; + break; } break; - - case SE_CriticalDamageMob: - { - // base1 = effect value, base2 = skill restrictions(-1 for all) - if(base2 == ALL_SKILLS) - newbon->CritDmgMob[HIGHEST_SKILL+1] += base1; - else - newbon->CritDmgMob[base2] += base1; + case SE_SpellSlotIncrease: + break; + case SE_MysticalAttune: + newbon->BuffSlotIncrease += base1; + break; + case SE_TotalHP: + newbon->HP += base1; + break; + case SE_StunResist: + newbon->StunResist += base1; + break; + case SE_SpellCritChance: + newbon->CriticalSpellChance += base1; + break; + case SE_SpellCritDmgIncrease: + newbon->SpellCritDmgIncrease += base1; + break; + case SE_DotCritDmgIncrease: + newbon->DotCritDmgIncrease += base1; + break; + case SE_ResistSpellChance: + newbon->ResistSpellChance += base1; + break; + case SE_CriticalHealChance: + newbon->CriticalHealChance += base1; + break; + case SE_CriticalHealOverTime: + newbon->CriticalHealOverTime += base1; + break; + case SE_CriticalDoTChance: + newbon->CriticalDoTChance += base1; + break; + case SE_ReduceSkillTimer: + newbon->SkillReuseTime[base2] += base1; + break; + case SE_Fearless: + newbon->Fearless = true; + break; + case SE_PersistantCasting: + newbon->PersistantCasting += base1; + break; + case SE_DelayDeath: + newbon->DelayDeath += base1; + break; + case SE_FrontalStunResist: + newbon->FrontalStunResist += base1; + break; + case SE_ImprovedBindWound: + newbon->BindWound += base1; + break; + case SE_MaxBindWound: + newbon->MaxBindWound += base1; + break; + case SE_ExtraAttackChance: + newbon->ExtraAttackChance += base1; + break; + case SE_SeeInvis: + newbon->SeeInvis = base1; + break; + case SE_BaseMovementSpeed: + newbon->BaseMovementSpeed += base1; + break; + case SE_IncreaseRunSpeedCap: + newbon->IncreaseRunSpeedCap += base1; + break; + case SE_ConsumeProjectile: + newbon->ConsumeProjectile += base1; + break; + case SE_ForageAdditionalItems: + newbon->ForageAdditionalItems += base1; + break; + case SE_Salvage: + newbon->SalvageChance += base1; + break; + case SE_ArcheryDamageModifier: + newbon->ArcheryDamageModifier += base1; + break; + case SE_DoubleRangedAttack: + newbon->DoubleRangedAttack += base1; + break; + case SE_DamageShield: + newbon->DamageShield += base1; + break; + case SE_CharmBreakChance: + newbon->CharmBreakChance += base1; + break; + case SE_OffhandRiposteFail: + newbon->OffhandRiposteFail += base1; + break; + case SE_ItemAttackCapIncrease: + newbon->ItemATKCap += base1; + break; + case SE_GivePetGroupTarget: + newbon->GivePetGroupTarget = true; + break; + case SE_ItemHPRegenCapIncrease: + newbon->ItemHPRegenCap = +base1; + break; + case SE_Ambidexterity: + newbon->Ambidexterity += base1; + break; + case SE_PetMaxHP: + newbon->PetMaxHP += base1; + break; + case SE_AvoidMeleeChance: + newbon->AvoidMeleeChanceEffect += base1; + break; + case SE_CombatStability: + newbon->CombatStability += base1; + break; + case SE_AddSingingMod: + switch (base2) { + case ItemTypeWindInstrument: + newbon->windMod += base1; + break; + case ItemTypeStringedInstrument: + newbon->stringedMod += base1; + break; + case ItemTypeBrassInstrument: + newbon->brassMod += base1; + break; + case ItemTypePercussionInstrument: + newbon->percussionMod += base1; + break; + case ItemTypeSinging: + newbon->singingMod += base1; break; } + break; + case SE_SongModCap: + newbon->songModCap += base1; + break; + case SE_PetCriticalHit: + newbon->PetCriticalHit += base1; + break; + case SE_PetAvoidance: + newbon->PetAvoidance += base1; + break; + case SE_ShieldBlock: + newbon->ShieldBlock += base1; + break; + case SE_ShieldEquipHateMod: + newbon->ShieldEquipHateMod += base1; + break; + case SE_ShieldEquipDmgMod: + newbon->ShieldEquipDmgMod[0] += base1; + newbon->ShieldEquipDmgMod[1] += base2; + break; + case SE_SecondaryDmgInc: + newbon->SecondaryDmgInc = true; + break; + case SE_ChangeAggro: + newbon->hatemod += base1; + break; + case SE_EndurancePool: + newbon->Endurance += base1; + break; + case SE_ChannelChanceItems: + newbon->ChannelChanceItems += base1; + break; + case SE_ChannelChanceSpells: + newbon->ChannelChanceSpells += base1; + break; + case SE_DoubleSpecialAttack: + newbon->DoubleSpecialAttack += base1; + break; + case SE_TripleBackstab: + newbon->TripleBackstab += base1; + break; + case SE_FrontalBackstabMinDmg: + newbon->FrontalBackstabMinDmg = true; + break; + case SE_FrontalBackstabChance: + newbon->FrontalBackstabChance += base1; + break; + case SE_BlockBehind: + newbon->BlockBehind += base1; + break; - case SE_CriticalSpellChance: - { - newbon->CriticalSpellChance += base1; - - if (base2 > newbon->SpellCritDmgIncNoStack) - newbon->SpellCritDmgIncNoStack = base2; + case SE_StrikeThrough: + case SE_StrikeThrough2: + newbon->StrikeThrough += base1; + break; + case SE_DoubleAttackChance: + newbon->DoubleAttackChance += base1; + break; + case SE_GiveDoubleAttack: + newbon->GiveDoubleAttack += base1; + break; + case SE_ProcChance: + newbon->ProcChanceSPA += base1; + break; + case SE_RiposteChance: + newbon->RiposteChance += base1; + break; + case SE_Flurry: + newbon->FlurryChance += base1; + break; + case SE_PetFlurry: + newbon->PetFlurry += base1; + break; + case SE_BardSongRange: + newbon->SongRange += base1; + break; + case SE_RootBreakChance: + newbon->RootBreakChance += base1; + break; + case SE_UnfailingDivinity: + newbon->UnfailingDivinity += base1; + break; + case SE_CrippBlowChance: + newbon->CrippBlowChance += base1; + break; + case SE_HitChance: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) break; - } - - case SE_ResistFearChance: - { - if(base1 == 100) // If we reach 100% in a single spell/item then we should be immune to negative fear resist effects until our immunity is over - newbon->Fearless = true; - - newbon->ResistFearChance += base1; // these should stack - break; - } - - case SE_SkillDamageAmount: - { - if(base2 == ALL_SKILLS) - newbon->SkillDamageAmount[HIGHEST_SKILL+1] += base1; - else - newbon->SkillDamageAmount[base2] += base1; - break; - } - - case SE_SpecialAttackKBProc: - { - //You can only have one of these per client. [AA Dragon Punch] - newbon->SpecialAttackKBProc[0] = base1; //Chance base 100 = 25% proc rate - newbon->SpecialAttackKBProc[1] = base2; //Skill to KB Proc Off - break; - } - - case SE_DamageModifier: - { - if(base2 == ALL_SKILLS) - newbon->DamageModifier[HIGHEST_SKILL+1] += base1; - else - newbon->DamageModifier[base2] += base1; - break; - } - - case SE_DamageModifier2: - { - if(base2 == ALL_SKILLS) - newbon->DamageModifier2[HIGHEST_SKILL+1] += base1; - else - newbon->DamageModifier2[base2] += base1; - break; - } - - case SE_SlayUndead: - { - if(newbon->SlayUndead[1] < base1) - newbon->SlayUndead[0] = base1; // Rate - newbon->SlayUndead[1] = base2; // Damage Modifier - break; - } - - case SE_DoubleRiposte: - { - newbon->DoubleRiposte += base1; - } - - case SE_GiveDoubleRiposte: - { - //0=Regular Riposte 1=Skill Attack Riposte 2=Skill - if(base2 == 0){ - if(newbon->GiveDoubleRiposte[0] < base1) - newbon->GiveDoubleRiposte[0] = base1; - } - //Only for special attacks. - else if(base2 > 0 && (newbon->GiveDoubleRiposte[1] < base1)){ - newbon->GiveDoubleRiposte[1] = base1; - newbon->GiveDoubleRiposte[2] = base2; - } - - break; - } - - //Kayen: Not sure best way to implement this yet. - //Physically raises skill cap ie if 55/55 it will raise to 55/60 - case SE_RaiseSkillCap: - { - if(newbon->RaiseSkillCap[0] < base1){ - newbon->RaiseSkillCap[0] = base1; //value - newbon->RaiseSkillCap[1] = base2; //skill - } - break; - } - - case SE_MasteryofPast: - { - if(newbon->MasteryofPast < base1) - newbon->MasteryofPast = base1; - break; - } - - case SE_CastingLevel2: - case SE_CastingLevel: - { - newbon->effective_casting_level += base1; - break; - } - - case SE_DivineSave: - { - if(newbon->DivineSaveChance[0] < base1) - { - newbon->DivineSaveChance[0] = base1; - newbon->DivineSaveChance[1] = base2; - } - break; - } - - - case SE_SpellEffectResistChance: - { - for(int e = 0; e < MAX_RESISTABLE_EFFECTS*2; e+=2) - { - if(newbon->SEResist[e+1] && (newbon->SEResist[e] == base2) && (newbon->SEResist[e+1] < base1)){ - newbon->SEResist[e] = base2; //Spell Effect ID - newbon->SEResist[e+1] = base1; //Resist Chance - break; - } - else if (!newbon->SEResist[e+1]){ - newbon->SEResist[e] = base2; //Spell Effect ID - newbon->SEResist[e+1] = base1; //Resist Chance - break; - } - } - break; - } - - case SE_MitigateDamageShield: - { - if (base1 < 0) - base1 = base1*(-1); - - newbon->DSMitigationOffHand += base1; - break; - } - - case SE_FinishingBlow: - { - //base1 = chance, base2 = damage - if (newbon->FinishingBlow[1] < base2){ - newbon->FinishingBlow[0] = base1; - newbon->FinishingBlow[1] = base2; - } - break; - } - - case SE_FinishingBlowLvl: - { - //base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?) - if (newbon->FinishingBlowLvl[0] < base1){ - newbon->FinishingBlowLvl[0] = base1; - newbon->FinishingBlowLvl[1] = base2; - } - break; - } - - case SE_StunBashChance: - newbon->StunBashChance += base1; - break; - - case SE_IncreaseChanceMemwipe: - newbon->IncreaseChanceMemwipe += base1; - break; - - case SE_CriticalMend: - newbon->CriticalMend += base1; - break; - - case SE_HealRate: - newbon->HealRate += base1; - break; - - case SE_MeleeLifetap: - { - - if((base1 < 0) && (newbon->MeleeLifetap > base1)) - newbon->MeleeLifetap = base1; - - else if(newbon->MeleeLifetap < base1) - newbon->MeleeLifetap = base1; - break; - } - - case SE_Vampirism: - newbon->Vampirism += base1; - break; - - case SE_FrenziedDevastation: - newbon->FrenziedDevastation += base2; - break; - - case SE_SpellProcChance: - newbon->SpellProcChance += base1; - break; - - case SE_Berserk: - newbon->BerserkSPA = true; - break; - - case SE_Metabolism: - newbon->Metabolism += base1; - break; - - case SE_ImprovedReclaimEnergy: - { - if((base1 < 0) && (newbon->ImprovedReclaimEnergy > base1)) - newbon->ImprovedReclaimEnergy = base1; - - else if(newbon->ImprovedReclaimEnergy < base1) - newbon->ImprovedReclaimEnergy = base1; - break; - } - - case SE_HeadShot: - { - if(newbon->HeadShot[1] < base2){ - newbon->HeadShot[0] = base1; - newbon->HeadShot[1] = base2; - } - break; - } - - case SE_HeadShotLevel: - { - if(newbon->HSLevel < base1) - newbon->HSLevel = base1; - break; - } - - case SE_Assassinate: - { - if(newbon->Assassinate[1] < base2){ - newbon->Assassinate[0] = base1; - newbon->Assassinate[1] = base2; - } - break; - } - - case SE_AssassinateLevel: - { - if(newbon->AssassinateLevel < base1) - newbon->AssassinateLevel = base1; - break; - } - - case SE_PetMeleeMitigation: - newbon->PetMeleeMitigation += base1; - break; - - case SE_MeleeVulnerability: - newbon->MeleeVulnerability += base1; - break; - - case SE_FactionModPct: - { - if((base1 < 0) && (newbon->FactionModPct > base1)) - newbon->FactionModPct = base1; - - else if(newbon->FactionModPct < base1) - newbon->FactionModPct = base1; - break; - } - - case SE_IllusionPersistence: - newbon->IllusionPersistence = true; - break; - - case SE_LimitToSkill:{ - if (base1 <= HIGHEST_SKILL) - newbon->LimitToSkill[base1] = true; - break; - } - - case SE_SkillProc:{ - for(int e = 0; e < MAX_SKILL_PROCS; e++) - { - if(newbon->SkillProc[e] && newbon->SkillProc[e] == aaid) - break; //Do not use the same aa id more than once. - - else if(!newbon->SkillProc[e]){ - newbon->SkillProc[e] = aaid; - break; - } - } - break; - } - - case SE_SkillProcSuccess:{ - - for(int e = 0; e < MAX_SKILL_PROCS; e++) - { - if(newbon->SkillProcSuccess[e] && newbon->SkillProcSuccess[e] == aaid) - break; //Do not use the same spell id more than once. - - else if(!newbon->SkillProcSuccess[e]){ - newbon->SkillProcSuccess[e] = aaid; - break; - } - } - break; - } - - case SE_MeleeMitigation: - newbon->MeleeMitigationEffect -= base1; - break; - + if (base2 == ALL_SKILLS) + newbon->HitChanceEffect[HIGHEST_SKILL + 1] += base1; + else + newbon->HitChanceEffect[base2] += base1; } + + case SE_ProcOnKillShot: + for (int i = 0; i < MAX_SPELL_TRIGGER * 3; i += 3) { + if (!newbon->SpellOnKill[i] || + ((newbon->SpellOnKill[i] == base2) && (newbon->SpellOnKill[i + 1] < base1))) { + // base1 = chance, base2 = SpellID to be triggered, base3 = min npc level + newbon->SpellOnKill[i] = base2; + newbon->SpellOnKill[i + 1] = base1; + + if (GetLevel() > 15) + newbon->SpellOnKill[i + 2] = + GetLevel() - 15; // AA specifiy "non-trivial" + else + newbon->SpellOnKill[i + 2] = 0; + + break; + } + } + break; + + case SE_SpellOnDeath: + for (int i = 0; i < MAX_SPELL_TRIGGER * 2; i += 2) { + if (!newbon->SpellOnDeath[i]) { + // base1 = SpellID to be triggered, base2 = chance to fire + newbon->SpellOnDeath[i] = base1; + newbon->SpellOnDeath[i + 1] = base2; + break; + } + } + break; + + case SE_TriggerOnCast: + + for (int i = 0; i < MAX_SPELL_TRIGGER; i++) { + if (newbon->SpellTriggers[i] == rank.id) + break; + + if (!newbon->SpellTriggers[i]) { + // Save the 'rank.id' of each triggerable effect to an array + newbon->SpellTriggers[i] = rank.id; + break; + } + } + break; + + case SE_CriticalHitChance: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; + if (base2 == ALL_SKILLS) + newbon->CriticalHitChance[HIGHEST_SKILL + 1] += base1; + else + newbon->CriticalHitChance[base2] += base1; + } break; + + case SE_CriticalDamageMob: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; + // base1 = effect value, base2 = skill restrictions(-1 for all) + if (base2 == ALL_SKILLS) + newbon->CritDmgMob[HIGHEST_SKILL + 1] += base1; + else + newbon->CritDmgMob[base2] += base1; + break; + } + + case SE_CriticalSpellChance: { + newbon->CriticalSpellChance += base1; + + if (base2 > newbon->SpellCritDmgIncNoStack) + newbon->SpellCritDmgIncNoStack = base2; + + break; + } + + case SE_ResistFearChance: { + if (base1 == 100) // If we reach 100% in a single spell/item then we should be immune to + // negative fear resist effects until our immunity is over + newbon->Fearless = true; + + newbon->ResistFearChance += base1; // these should stack + break; + } + + case SE_SkillDamageAmount: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; + if (base2 == ALL_SKILLS) + newbon->SkillDamageAmount[HIGHEST_SKILL + 1] += base1; + else + newbon->SkillDamageAmount[base2] += base1; + break; + } + + case SE_SkillAttackProc: { + // You can only have one of these per client. [AA Dragon Punch] + newbon->SkillAttackProc[0] = base1; // Chance base 1000 = 100% proc rate + newbon->SkillAttackProc[1] = base2; // Skill to Proc Off + newbon->SkillAttackProc[2] = rank.spell; // spell to proc + break; + } + + case SE_DamageModifier: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; + if (base2 == ALL_SKILLS) + newbon->DamageModifier[HIGHEST_SKILL + 1] += base1; + else + newbon->DamageModifier[base2] += base1; + break; + } + + case SE_DamageModifier2: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; + if (base2 == ALL_SKILLS) + newbon->DamageModifier2[HIGHEST_SKILL + 1] += base1; + else + newbon->DamageModifier2[base2] += base1; + break; + } + + case SE_SlayUndead: { + if (newbon->SlayUndead[1] < base1) + newbon->SlayUndead[0] = base1; // Rate + newbon->SlayUndead[1] = base2; // Damage Modifier + break; + } + + case SE_DoubleRiposte: { + newbon->DoubleRiposte += base1; + break; + } + + case SE_GiveDoubleRiposte: { + // 0=Regular Riposte 1=Skill Attack Riposte 2=Skill + if (base2 == 0) { + if (newbon->GiveDoubleRiposte[0] < base1) + newbon->GiveDoubleRiposte[0] = base1; + } + // Only for special attacks. + else if (base2 > 0 && (newbon->GiveDoubleRiposte[1] < base1)) { + newbon->GiveDoubleRiposte[1] = base1; + newbon->GiveDoubleRiposte[2] = base2; + } + + break; + } + + // Kayen: Not sure best way to implement this yet. + // Physically raises skill cap ie if 55/55 it will raise to 55/60 + case SE_RaiseSkillCap: { + if (newbon->RaiseSkillCap[0] < base1) { + newbon->RaiseSkillCap[0] = base1; // value + newbon->RaiseSkillCap[1] = base2; // skill + } + break; + } + + case SE_MasteryofPast: { + if (newbon->MasteryofPast < base1) + newbon->MasteryofPast = base1; + break; + } + + case SE_CastingLevel2: + case SE_CastingLevel: { + newbon->effective_casting_level += base1; + break; + } + + case SE_DivineSave: { + if (newbon->DivineSaveChance[0] < base1) { + newbon->DivineSaveChance[0] = base1; + newbon->DivineSaveChance[1] = base2; + } + break; + } + + case SE_SpellEffectResistChance: { + for (int e = 0; e < MAX_RESISTABLE_EFFECTS * 2; e += 2) { + if (newbon->SEResist[e + 1] && (newbon->SEResist[e] == base2) && + (newbon->SEResist[e + 1] < base1)) { + newbon->SEResist[e] = base2; // Spell Effect ID + newbon->SEResist[e + 1] = base1; // Resist Chance + break; + } else if (!newbon->SEResist[e + 1]) { + newbon->SEResist[e] = base2; // Spell Effect ID + newbon->SEResist[e + 1] = base1; // Resist Chance + break; + } + } + break; + } + + case SE_MitigateDamageShield: { + if (base1 < 0) + base1 = base1 * (-1); + + newbon->DSMitigationOffHand += base1; + break; + } + + case SE_FinishingBlow: { + // base1 = chance, base2 = damage + if (newbon->FinishingBlow[1] < base2) { + newbon->FinishingBlow[0] = base1; + newbon->FinishingBlow[1] = base2; + } + break; + } + + case SE_FinishingBlowLvl: { + // base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?) + if (newbon->FinishingBlowLvl[0] < base1) { + newbon->FinishingBlowLvl[0] = base1; + newbon->FinishingBlowLvl[1] = base2; + } + break; + } + + case SE_StunBashChance: + newbon->StunBashChance += base1; + break; + + case SE_IncreaseChanceMemwipe: + newbon->IncreaseChanceMemwipe += base1; + break; + + case SE_CriticalMend: + newbon->CriticalMend += base1; + break; + + case SE_HealRate: + newbon->HealRate += base1; + break; + + case SE_MeleeLifetap: { + + if ((base1 < 0) && (newbon->MeleeLifetap > base1)) + newbon->MeleeLifetap = base1; + + else if (newbon->MeleeLifetap < base1) + newbon->MeleeLifetap = base1; + break; + } + + case SE_Vampirism: + newbon->Vampirism += base1; + break; + + case SE_FrenziedDevastation: + newbon->FrenziedDevastation += base2; + break; + + case SE_SpellProcChance: + newbon->SpellProcChance += base1; + break; + + case SE_Berserk: + newbon->BerserkSPA = true; + break; + + case SE_Metabolism: + newbon->Metabolism += base1; + break; + + case SE_ImprovedReclaimEnergy: { + if ((base1 < 0) && (newbon->ImprovedReclaimEnergy > base1)) + newbon->ImprovedReclaimEnergy = base1; + + else if (newbon->ImprovedReclaimEnergy < base1) + newbon->ImprovedReclaimEnergy = base1; + break; + } + + case SE_HeadShot: { + if (newbon->HeadShot[1] < base2) { + newbon->HeadShot[0] = base1; + newbon->HeadShot[1] = base2; + } + break; + } + + case SE_HeadShotLevel: { + if (newbon->HSLevel < base1) + newbon->HSLevel = base1; + break; + } + + case SE_Assassinate: { + if (newbon->Assassinate[1] < base2) { + newbon->Assassinate[0] = base1; + newbon->Assassinate[1] = base2; + } + break; + } + + case SE_AssassinateLevel: { + if (newbon->AssassinateLevel < base1) + newbon->AssassinateLevel = base1; + break; + } + + case SE_PetMeleeMitigation: + newbon->PetMeleeMitigation += base1; + break; + + case SE_FactionModPct: { + if ((base1 < 0) && (newbon->FactionModPct > base1)) + newbon->FactionModPct = base1; + + else if (newbon->FactionModPct < base1) + newbon->FactionModPct = base1; + break; + } + + case SE_IllusionPersistence: + newbon->IllusionPersistence = true; + break; + + case SE_LimitToSkill: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; + if (base1 <= HIGHEST_SKILL) + newbon->LimitToSkill[base1] = true; + break; + } + + case SE_SkillProc: { + for (int e = 0; e < MAX_SKILL_PROCS; e++) { + if (newbon->SkillProc[e] && newbon->SkillProc[e] == rank.id) + break; // Do not use the same aa id more than once. + + else if (!newbon->SkillProc[e]) { + newbon->SkillProc[e] = rank.id; + break; + } + } + break; + } + + case SE_SkillProcSuccess: { + + for (int e = 0; e < MAX_SKILL_PROCS; e++) { + if (newbon->SkillProcSuccess[e] && newbon->SkillProcSuccess[e] == rank.id) + break; // Do not use the same spell id more than once. + + else if (!newbon->SkillProcSuccess[e]) { + newbon->SkillProcSuccess[e] = rank.id; + break; + } + } + break; + } + + case SE_MeleeMitigation: + newbon->MeleeMitigationEffect -= base1; + break; + + case SE_ATK: + newbon->ATK += base1; + break; + case SE_IncreaseExtTargetWindow: + newbon->extra_xtargets += base1; + break; + // to do + case SE_PetDiscipline: + break; + case SE_PetDiscipline2: + break; + case SE_ReduceTradeskillFail: + break; + case SE_PotionBeltSlots: + break; + case SE_BandolierSlots: + break; + case SE_ForageSkill: + break; + case SE_TradeSkillMastery: + break; + case SE_SecondaryForte: + break; + case SE_FeignedCastOnChance: + break; + case SE_ExtendedShielding: + break; + case SE_ShieldDuration: + break; + case SE_ReduceApplyPoisonTime: + break; + case SE_NimbleEvasion: + break; + case SE_TrapCircumvention: + break; + case SE_ShroudofStealth: + break; + case SE_FeignedMinion: + break; + + // handled client side + case SE_ReduceFallDamage: + // not handled here + case SE_HastenedAASkill: + // not handled here but don't want to clutter debug log -- these may need to be verified to ignore + case SE_LimitMaxLevel: + case SE_LimitResist: + case SE_LimitTarget: + case SE_LimitEffect: + case SE_LimitSpellType: + case SE_LimitMinDur: + case SE_LimitInstant: + case SE_LimitMinLevel: + case SE_LimitCastTimeMin: + case SE_LimitCastTimeMax: + case SE_LimitSpell: + case SE_LimitCombatSkills: + case SE_LimitManaMin: + case SE_LimitSpellGroup: + case SE_LimitSpellClass: + case SE_LimitSpellSubclass: + case SE_LimitHPPercent: + case SE_LimitManaPercent: + case SE_LimitEndPercent: + case SE_LimitClass: + case SE_LimitRace: + case SE_LimitCastingSkill: + case SE_LimitUseMin: + case SE_LimitUseType: + break; + + default: + Log.Out(Logs::Detail, Logs::AA, "SPA %d not accounted for in AA %s (%d)", effect, rank.base_ability->name.c_str(), rank.id); + break; + } + } } @@ -1875,6 +1927,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_CriticalHitChance: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (AdditiveWornBonus) { if(base2 == ALL_SKILLS) new_bonus->CriticalHitChance[HIGHEST_SKILL+1] += effect_value; @@ -2078,6 +2133,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_HitChance: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (AdditiveWornBonus){ if(base2 == ALL_SKILLS) @@ -2112,6 +2170,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_DamageModifier: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->DamageModifier[HIGHEST_SKILL+1] += effect_value; else @@ -2121,6 +2182,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_DamageModifier2: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->DamageModifier2[HIGHEST_SKILL+1] += effect_value; else @@ -2130,6 +2194,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_MinDamageModifier: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->MinDamageModifier[HIGHEST_SKILL+1] += effect_value; else @@ -2203,6 +2270,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_Accuracy: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if ((effect_value < 0) && (new_bonus->Accuracy[HIGHEST_SKILL+1] > effect_value)) new_bonus->Accuracy[HIGHEST_SKILL+1] = effect_value; @@ -2226,6 +2296,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_SkillDamageTaken: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; //When using npc_spells_effects if MAX value set, use stackable quest based modifier. if (IsAISpellEffect && max){ if(base2 == ALL_SKILLS) @@ -2344,6 +2417,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_CriticalDamageMob: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->CritDmgMob[HIGHEST_SKILL+1] += effect_value; else @@ -2360,6 +2436,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_SkillDamageAmount: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->SkillDamageAmount[HIGHEST_SKILL+1] += effect_value; else @@ -2465,6 +2544,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_SkillDamageAmount2: { + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if(base2 == ALL_SKILLS) new_bonus->SkillDamageAmount2[HIGHEST_SKILL+1] += effect_value; else @@ -2980,10 +3062,6 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne new_bonus->PetMeleeMitigation += effect_value; break; - case SE_MeleeVulnerability: - new_bonus->MeleeVulnerability += effect_value; - break; - case SE_Sanctuary: new_bonus->Sanctuary = true; break; @@ -3003,6 +3081,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne break; case SE_LimitToSkill:{ + // Bad data or unsupported new skill + if (base2 > HIGHEST_SKILL) + break; if (effect_value <= HIGHEST_SKILL){ new_bonus->LimitToSkill[effect_value] = true; } @@ -4560,12 +4641,6 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) aabonuses.FactionModPct = effect_value; break; - case SE_MeleeVulnerability: - spellbonuses.MeleeVulnerability = effect_value; - itembonuses.MeleeVulnerability = effect_value; - aabonuses.MeleeVulnerability = effect_value; - break; - case SE_IllusionPersistence: spellbonuses.IllusionPersistence = false; itembonuses.IllusionPersistence = false; diff --git a/zone/bot.cpp b/zone/bot.cpp index 3a9d46e97..94b7d9e90 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -132,7 +132,6 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to SetHasBeenSummoned(false); LoadStance(); SetTaunting((GetClass() == WARRIOR || GetClass() == PALADIN || GetClass() == SHADOWKNIGHT) && (GetBotStance() == BotStanceAggressive)); - SetGroupMessagesOn(GetClass() == CLERIC || GetClass() == DRUID || GetClass() == SHAMAN || GetClass() == ENCHANTER); SetInHealRotation(false); SetHealRotationActive(false); SetHasHealedThisCycle(false); @@ -172,17 +171,17 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to end_regen = CalcEnduranceRegen(); if(cur_hp > max_hp) cur_hp = max_hp; - + if(cur_hp <= 0) { SetHP(max_hp/5); SetMana(0); BuffFadeAll(); SpellOnTarget(756, this); // Rezz effects } - + if(cur_mana > max_mana) cur_mana = max_mana; - + cur_end = max_end; } @@ -694,6 +693,7 @@ void Bot::GenerateBaseStats() { this->pAggroRange = 0; this->pAssistRange = 0; this->raid_target = false; + this->deity = 396; } void Bot::GenerateAppearance() { @@ -1140,7 +1140,7 @@ void Bot::GenerateArmorClass() { iksarlevel -= 10; if(iksarlevel > 25) iksarlevel = 25; - + if(iksarlevel > 0) displayed += (iksarlevel * 12 / 10); } @@ -1259,601 +1259,41 @@ int32 Bot::GenerateBaseHitPoints() { return new_base_hp; } -void Bot::GenerateAABonuses(StatBonuses* newbon) { - // General AA bonus - uint8 botClass = GetClass(); - uint8 botLevel = GetLevel(); - memset(newbon, 0, sizeof(StatBonuses)); //start fresh - if(botLevel >= 51) { - //level 51 = 1 AA level - int i; - int totalAAs = database.CountAAs(); - uint32 slots = 0; - uint32 aa_AA = 0; - uint32 aa_value = 0; - for (i = 0; i < totalAAs; i++) { //iterate through all of the client's AAs - std::map::iterator aa = botAAs.find(i); - if(aa != botAAs.end()) { // make sure aa exists or we'll crash zone - aa_AA = aa->second.aa_id; //same as aaid from the aa_effects table - aa_value = aa->second.total_levels; //how many points in it - if (aa_AA > 0 || aa_value > 0) { //do we have the AA? if 1 of the 2 is set, we can assume we do - //slots = database.GetTotalAALevels(aa_AA); //find out how many effects from aa_effects table - slots = zone->GetTotalAALevels(aa_AA); //find out how many effects from aa_effects, which is loaded into memory - if (slots > 0) //and does it have any effects? may be able to put this above, not sure if it runs on each iteration - ApplyAABonuses((aa_AA + aa_value - 1), slots, newbon); //add the bonuses - } - } - } - } -} - void Bot::LoadAAs() { int maxAAExpansion = RuleI(Bots, BotAAExpansion); //get expansion to get AAs up to - botAAs.clear(); //start fresh + aa_ranks.clear(); - std::string query; - if(GetClass() == BERSERKER) - query = StringFormat("SELECT skill_id FROM altadv_vars WHERE berserker = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetLevel(), maxAAExpansion); - else - query = StringFormat("SELECT skill_id FROM altadv_vars WHERE ((classes & ( 1 << %i )) >> %i) = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetClass(), GetClass(), GetLevel(), maxAAExpansion); + int id = 0; + int points = 0; + auto iter = zone->aa_abilities.begin(); + while(iter != zone->aa_abilities.end()) { + AA::Ability *ability = (*iter).second.get(); - auto results = database.QueryDatabase(query); - if(!results.Success()) { - Log.Out(Logs::General, Logs::Error, "Error in Bot::LoadAAs()"); - return; - } - - int totalAAs = database.CountAAs(); - for (auto row = results.begin(); row != results.end(); ++row) { - uint32 skill_id = 0; - skill_id = atoi(row[0]); - if(skill_id <= 0 || skill_id >= totalAAs) - continue; - - SendAA_Struct *sendAA = zone->FindAA(skill_id); - - if(!sendAA) - continue; - - for(int i=0; imax_level; i++) { - //Get AA info & add to list - uint32 aaid = (sendAA->id + i); - uint8 total_levels = 0; - uint8 req_level; - std::map::iterator RequiredLevel = AARequiredLevelAndCost.find(aaid); - //Get level required for AA - if(RequiredLevel != AARequiredLevelAndCost.end()) - req_level = RequiredLevel->second.Level; - else - req_level = (sendAA->class_type + i * sendAA->level_inc); - - if(req_level > GetLevel()) - break; - - //Bot is high enough level for AA - std::map::iterator foundAA = botAAs.find(aaid); - // AA is already in list - if(foundAA != botAAs.end()) - continue; - - if(sendAA->id == aaid) { - BotAA newAA; - newAA.total_levels = 0; - newAA.aa_id = aaid; - newAA.req_level = req_level; - newAA.total_levels += 1; - botAAs[aaid] = newAA; //add to list - } - else //update master AA record with number of levels a bot has in AA, based on level. - botAAs[sendAA->id].total_levels += 1; - } - } - -} - -uint32 Bot::GetAA(uint32 aa_id) { - std::map::const_iterator find_iter = botAAs.find(aa_id); - int aaLevel = 0; - if(find_iter != botAAs.end()) - aaLevel = find_iter->second.total_levels; - - return aaLevel; -} - -//current with Client::ApplyAABonuses 9/26/12 -void Bot::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon) { - if(slots == 0) //sanity check. why bother if no slots to fill? - return; - - //from AA_Ability struct - uint32 effect = 0; - int32 base1 = 0; - int32 base2 = 0; //only really used for SE_RaiseStatCap & SE_ReduceSkillTimer in aa_effects table - uint32 slot = 0; - std::map >::const_iterator find_iter = aa_effects.find(aaid); - if(find_iter == aa_effects.end()) - return; - - for (std::map::const_iterator iter = aa_effects[aaid].begin(); iter != aa_effects[aaid].end(); ++iter) { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; - //we default to 0 (SE_CurrentHP) for the effect, so if there aren't any base1/2 values, we'll just skip it - if ((effect == 0 && base1 == 0 && base2 == 0) || effect == SE_Blank || (effect == SE_CHA && base1 == 0) || effect == SE_StackingCommand_Block || effect == SE_StackingCommand_Overwrite) - continue; - - Log.Out(Logs::Detail, Logs::AA, "Applying Effect %d from AA %u in slot %d (base1: %d, base2: %d) on %s", effect, aaid, slot, base1, base2, this->GetCleanName()); - uint8 focus = IsFocusEffect(0, 0, true, effect); - if (focus) { - newbon->FocusEffects[focus] = effect; + //skip expendables + if(!ability->first || ability->charges > 0) { + ++iter; continue; } - switch (effect) { - //Note: AA effects that use accuracy are skill limited, while spell effect is not. - case SE_Accuracy: - if ((base2 == -1) && (newbon->Accuracy[HIGHEST_SKILL+1] < base1)) - newbon->Accuracy[HIGHEST_SKILL+1] = base1; - else if (newbon->Accuracy[base2] < base1) - newbon->Accuracy[base2] += base1; - break; - case SE_CurrentHP: //regens - newbon->HPRegen += base1; - break; - case SE_CurrentEndurance: - newbon->EnduranceRegen += base1; - break; - case SE_MovementSpeed: - newbon->movementspeed += base1; - break; - case SE_STR: - newbon->STR += base1; - break; - case SE_DEX: - newbon->DEX += base1; - break; - case SE_AGI: - newbon->AGI += base1; - break; - case SE_STA: - newbon->STA += base1; - break; - case SE_INT: - newbon->INT += base1; - break; - case SE_WIS: - newbon->WIS += base1; - break; - case SE_CHA: - newbon->CHA += base1; - break; - case SE_WaterBreathing: - //handled by client - break; - case SE_CurrentMana: - newbon->ManaRegen += base1; - break; - case SE_ItemManaRegenCapIncrease: - newbon->ItemManaRegenCap += base1; - break; - case SE_ResistFire: - newbon->FR += base1; - break; - case SE_ResistCold: - newbon->CR += base1; - break; - case SE_ResistPoison: - newbon->PR += base1; - break; - case SE_ResistDisease: - newbon->DR += base1; - break; - case SE_ResistMagic: - newbon->MR += base1; - break; - case SE_ResistCorruption: - newbon->Corrup += base1; - break; - case SE_IncreaseSpellHaste: - break; - case SE_IncreaseRange: - break; - case SE_MaxHPChange: - newbon->MaxHP += base1; - break; - case SE_Packrat: - newbon->Packrat += base1; - break; - case SE_TwoHandBash: - break; - case SE_SetBreathLevel: - break; - case SE_RaiseStatCap: - switch(base2) { - //are these #define'd somewhere? - case 0: //str - newbon->STRCapMod += base1; - break; - case 1: //sta - newbon->STACapMod += base1; - break; - case 2: //agi - newbon->AGICapMod += base1; - break; - case 3: //dex - newbon->DEXCapMod += base1; - break; - case 4: //wis - newbon->WISCapMod += base1; - break; - case 5: //int - newbon->INTCapMod += base1; - break; - case 6: //cha - newbon->CHACapMod += base1; - break; - case 7: //mr - newbon->MRCapMod += base1; - break; - case 8: //cr - newbon->CRCapMod += base1; - break; - case 9: //fr - newbon->FRCapMod += base1; - break; - case 10: //pr - newbon->PRCapMod += base1; - break; - case 11: //dr - newbon->DRCapMod += base1; - break; - case 12: //corruption - newbon->CorrupCapMod += base1; - break; - } - break; - case SE_PetDiscipline2: - break; - case SE_SpellSlotIncrease: - break; - case SE_MysticalAttune: - newbon->BuffSlotIncrease += base1; - break; - case SE_TotalHP: - newbon->HP += base1; - break; - case SE_StunResist: - newbon->StunResist += base1; - break; - case SE_SpellCritChance: - newbon->CriticalSpellChance += base1; - break; - case SE_SpellCritDmgIncrease: - newbon->SpellCritDmgIncrease += base1; - break; - case SE_DotCritDmgIncrease: - newbon->DotCritDmgIncrease += base1; - break; - case SE_ResistSpellChance: - newbon->ResistSpellChance += base1; - break; - case SE_CriticalHealChance: - newbon->CriticalHealChance += base1; - break; - case SE_CriticalHealOverTime: - newbon->CriticalHealOverTime += base1; - break; - case SE_CriticalDoTChance: - newbon->CriticalDoTChance += base1; - break; - case SE_ReduceSkillTimer: - newbon->SkillReuseTime[base2] += base1; - break; - case SE_Fearless: - newbon->Fearless = true; - break; - case SE_PersistantCasting: - newbon->PersistantCasting += base1; - break; - case SE_DelayDeath: - newbon->DelayDeath += base1; - break; - case SE_FrontalStunResist: - newbon->FrontalStunResist += base1; - break; - case SE_ImprovedBindWound: - newbon->BindWound += base1; - break; - case SE_MaxBindWound: - newbon->MaxBindWound += base1; - break; - case SE_ExtraAttackChance: - newbon->ExtraAttackChance += base1; - break; - case SE_SeeInvis: - newbon->SeeInvis = base1; - break; - case SE_BaseMovementSpeed: - newbon->BaseMovementSpeed += base1; - break; - case SE_IncreaseRunSpeedCap: - newbon->IncreaseRunSpeedCap += base1; - break; - case SE_ConsumeProjectile: - newbon->ConsumeProjectile += base1; - break; - case SE_ArcheryDamageModifier: - newbon->ArcheryDamageModifier += base1; - break; - case SE_DamageShield: - newbon->DamageShield += base1; - break; - case SE_CharmBreakChance: - newbon->CharmBreakChance += base1; - break; - case SE_OffhandRiposteFail: - newbon->OffhandRiposteFail += base1; - break; - case SE_ItemAttackCapIncrease: - newbon->ItemATKCap += base1; - break; - case SE_GivePetGroupTarget: - newbon->GivePetGroupTarget = true; - break; - case SE_ItemHPRegenCapIncrease: - newbon->ItemHPRegenCap = +base1; - break; - case SE_Ambidexterity: - newbon->Ambidexterity += base1; - break; - case SE_PetMaxHP: - newbon->PetMaxHP += base1; - break; - case SE_AvoidMeleeChance: - newbon->AvoidMeleeChance += base1; - break; - case SE_CombatStability: - newbon->CombatStability += base1; - break; - case SE_PetCriticalHit: - newbon->PetCriticalHit += base1; - break; - case SE_PetAvoidance: - newbon->PetAvoidance += base1; - break; - case SE_ShieldBlock: - newbon->ShieldBlock += base1; - break; - case SE_SecondaryDmgInc: - newbon->SecondaryDmgInc = true; - break; - case SE_ChangeAggro: - newbon->hatemod += base1; - break; - case SE_EndurancePool: - newbon->Endurance += base1; - break; - case SE_ChannelChanceItems: - newbon->ChannelChanceItems += base1; - break; - case SE_ChannelChanceSpells: - newbon->ChannelChanceSpells += base1; - break; - case SE_DoubleSpecialAttack: - newbon->DoubleSpecialAttack += base1; - break; - case SE_TripleBackstab: - newbon->TripleBackstab += base1; - break; - case SE_FrontalBackstabMinDmg: - newbon->FrontalBackstabMinDmg = true; - break; - case SE_FrontalBackstabChance: - newbon->FrontalBackstabChance += base1; - break; - case SE_BlockBehind: - newbon->BlockBehind += base1; - break; - case SE_StrikeThrough2: - newbon->StrikeThrough += base1; - break; - case SE_DoubleAttackChance: - newbon->DoubleAttackChance += base1; - break; - case SE_GiveDoubleAttack: - newbon->GiveDoubleAttack += base1; - break; - case SE_ProcChance: - newbon->ProcChance += base1; - break; - case SE_RiposteChance: - newbon->RiposteChance += base1; - break; - case SE_Flurry: - newbon->FlurryChance += base1; - break; - case SE_PetFlurry: - newbon->PetFlurry = base1; - break; - case SE_BardSongRange: - newbon->SongRange += base1; - break; - case SE_RootBreakChance: - newbon->RootBreakChance += base1; - break; - case SE_UnfailingDivinity: - newbon->UnfailingDivinity += base1; - break; - case SE_ProcOnKillShot: { - for(int i = 0; i < (MAX_SPELL_TRIGGER * 3); i += 3) { - if(!newbon->SpellOnKill[i] || ((newbon->SpellOnKill[i] == base2) && (newbon->SpellOnKill[i + 1] < base1))) { - //base1 = chance, base2 = SpellID to be triggered, base3 = min npc level - newbon->SpellOnKill[i] = base2; - newbon->SpellOnKill[i + 1] = base1; + id = ability->first->id; + points = 0; - if (GetLevel() > 15) - newbon->SpellOnKill[i + 2] = (GetLevel() - 15); //AA specifiy "non-trivial" - else - newbon->SpellOnKill[i + 2] = 0; + AA::Rank *current = ability->first; - break; - } - } - break; - } - case SE_SpellOnDeath: { - for(int i = 0; i < (MAX_SPELL_TRIGGER * 2); i += 2) { - if(!newbon->SpellOnDeath[i]) { - // base1 = SpellID to be triggered, base2 = chance to fire - newbon->SpellOnDeath[i] = base1; - newbon->SpellOnDeath[i + 1] = base2; - break; - } - } - break; - } - case SE_TriggerOnCast: { - for(int i = 0; i < MAX_SPELL_TRIGGER; i++) { - if (newbon->SpellTriggers[i] == aaid) - break; - - if(!newbon->SpellTriggers[i]) { - //Save the 'aaid' of each triggerable effect to an array - newbon->SpellTriggers[i] = aaid; - break; - } - } - break; - } - case SE_CriticalHitChance: { - if(base2 == -1) - newbon->CriticalHitChance[HIGHEST_SKILL+1] += base1; - else - newbon->CriticalHitChance[base2] += base1; - break; - } - case SE_CriticalDamageMob: { - // base1 = effect value, base2 = skill restrictions(-1 for all) - if(base2 == -1) - newbon->CritDmgMob[HIGHEST_SKILL + 1] += base1; - else - newbon->CritDmgMob[base2] += base1; - break; - } - case SE_CriticalSpellChance: { - newbon->CriticalSpellChance += base1; - if (base2 > newbon->SpellCritDmgIncrease) - newbon->SpellCritDmgIncrease = base2; - - break; - } - case SE_ResistFearChance: { - if(base1 == 100) // If we reach 100% in a single spell/item then we should be immune to negative fear resist effects until our immunity is over - newbon->Fearless = true; - - newbon->ResistFearChance += base1; // these should stack - break; - } - case SE_SkillDamageAmount: { - if(base2 == -1) - newbon->SkillDamageAmount[HIGHEST_SKILL + 1] += base1; - else - newbon->SkillDamageAmount[base2] += base1; - break; - } - case SE_SpecialAttackKBProc: { - //You can only have one of these per client. [AA Dragon Punch] - newbon->SpecialAttackKBProc[0] = base1; //Chance base 100 = 25% proc rate - newbon->SpecialAttackKBProc[1] = base2; //Skill to KB Proc Off - break; - } - case SE_DamageModifier: { - if(base2 == -1) - newbon->DamageModifier[HIGHEST_SKILL + 1] += base1; - else - newbon->DamageModifier[base2] += base1; - break; - } - case SE_SlayUndead: { - if(newbon->SlayUndead[1] < base1) - newbon->SlayUndead[0] = base1; // Rate - newbon->SlayUndead[1] = base2; // Damage Modifier - break; - } - case SE_GiveDoubleRiposte: { - //0=Regular Riposte 1=Skill Attack Riposte 2=Skill - if(base2 == 0) { - if(newbon->GiveDoubleRiposte[0] < base1) - newbon->GiveDoubleRiposte[0] = base1; - } - //Only for special attacks. - else if(base2 > 0 && (newbon->GiveDoubleRiposte[1] < base1)) { - newbon->GiveDoubleRiposte[1] = base1; - newbon->GiveDoubleRiposte[2] = base2; - } - break; - } - //Kayen: Not sure best way to implement this yet. - //Physically raises skill cap ie if 55/55 it will raise to 55/60 - case SE_RaiseSkillCap: { - if(newbon->RaiseSkillCap[0] < base1) { - newbon->RaiseSkillCap[0] = base1; //value - newbon->RaiseSkillCap[1] = base2; //skill - } - break; - } - case SE_MasteryofPast: { - if(newbon->MasteryofPast < base1) - newbon->MasteryofPast = base1; - break; - } - case SE_CastingLevel2: - case SE_CastingLevel: { - newbon->effective_casting_level += base1; - break; - } - case SE_DivineSave: { - if(newbon->DivineSaveChance[0] < base1) { - newbon->DivineSaveChance[0] = base1; - newbon->DivineSaveChance[1] = base2; - } - break; - } - case SE_SpellEffectResistChance: { - for(int e = 0; e < (MAX_RESISTABLE_EFFECTS * 2); e += 2) { - if(!newbon->SEResist[e] || ((newbon->SEResist[e] = base2) && (newbon->SEResist[e + 1] < base1)) ){ - newbon->SEResist[e] = base2; - newbon->SEResist[e + 1] = base1; - break; - } - } - break; - } - case SE_MitigateDamageShield: { - if (base1 < 0) - base1 = (base1 * -1); - - newbon->DSMitigationOffHand += base1; - break; - } - case SE_FinishingBlow: { - //base1 = chance, base2 = damage - if (newbon->FinishingBlow[1] < base2) { - newbon->FinishingBlow[0] = base1; - newbon->FinishingBlow[1] = base2; - } - break; - } - case SE_FinishingBlowLvl: { - //base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?) - if (newbon->FinishingBlowLvl[0] < base1) { - newbon->FinishingBlowLvl[0] = base1; - newbon->FinishingBlowLvl[1] = base2; - } - break; + while(current) { + if(!CanUseAlternateAdvancementRank(current)) { + current = nullptr; + } else { + current = current->next; + points++; } } + + if(points > 0) { + SetAA(id, points); + } + + ++iter; } } @@ -2096,7 +1536,7 @@ bool Bot::IsBotNameAvailable(char *botName, std::string* errorMessage) { *errorMessage = std::string(results.ErrorMessage()); return false; } - + if (results.RowCount()) return false; @@ -2129,7 +1569,7 @@ bool Bot::Save() { auto botOwner = GetBotOwner(); if (botOwner) botOwner->Message(13, results.ErrorMessage().c_str()); - + return false; } @@ -2168,7 +1608,7 @@ bool Bot::Save() { auto botOwner = GetBotOwner(); if (botOwner) botOwner->Message(13, results.ErrorMessage().c_str()); - + return false; } SaveBuffs(); @@ -2416,7 +1856,7 @@ void Bot::SavePetItems(uint32* petItems, uint32 botPetSaveId) { if(!petItems || botPetSaveId == 0) return; - for (int itemIndex = 0;itemIndex < EmuConstants::EQUIPMENT_SIZE; itemIndex++) { + for (int itemIndex = 0; itemIndex < EmuConstants::EQUIPMENT_SIZE; itemIndex++) { if(petItems[itemIndex] == 0) continue; @@ -2604,7 +2044,7 @@ void Bot::BotMeditate(bool isSitting) { if(IsSitting()) Stand(); } - + if(IsSitting()) { if(!rest_timer.Enabled()) rest_timer.Start(RuleI(Character, RestRegenTimeToActivate) * 1000); @@ -2648,14 +2088,14 @@ void Bot::BotRangedAttack(Mob* other) { BuffFadeByEffect(SE_Invisibility2); invisible = false; } - + if(invisible_undead) { Log.Out(Logs::Detail, Logs::Combat, "Removing invisibility vs. undead due to melee attack."); BuffFadeByEffect(SE_InvisVsUndead); BuffFadeByEffect(SE_InvisVsUndead2); invisible_undead = false; } - + if(invisible_animals) { Log.Out(Logs::Detail, Logs::Combat, "Removing invisibility vs. animals due to melee attack."); BuffFadeByEffect(SE_InvisVsAnimals); @@ -2751,24 +2191,25 @@ void Bot::DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, SkillUseTypes else damage = zone->random.Int(min_hit, max_hit); - if(!other->CheckHitChance(this, skillinuse, Hand, chance_mod)) - damage = 0; - else { - other->AvoidDamage(this, damage, CanRiposte); - other->MeleeMitigation(this, damage, min_hit); - if(damage > 0) { - damage += damage*focus/100; - ApplyMeleeDamageBonus(skillinuse, damage); - damage += other->GetFcDamageAmtIncoming(this, 0, true, skillinuse); - damage += ((itembonuses.HeroicSTR / 10) + (damage * other->GetSkillDmgTaken(skillinuse) / 100) + GetSkillDmgAmt(skillinuse)); - TryCriticalHit(other, skillinuse, damage, nullptr); + if (other->AvoidDamage(this, damage, CanRiposte ? MainRange : MainPrimary)) { // MainRange excludes ripo, primary doesn't have any extra behavior + if (damage == -3) { + DoRiposte(other); + if (HasDied()) + return; + } + } else { + if (other->CheckHitChance(this, skillinuse, Hand, chance_mod)) { + other->MeleeMitigation(this, damage, min_hit); + if (damage > 0) { + damage += damage*focus/100; + ApplyMeleeDamageBonus(skillinuse, damage); + damage += other->GetFcDamageAmtIncoming(this, 0, true, skillinuse); + damage += ((itembonuses.HeroicSTR / 10) + (damage * other->GetSkillDmgTaken(skillinuse) / 100) + GetSkillDmgAmt(skillinuse)); + TryCriticalHit(other, skillinuse, damage, nullptr); + } + } else { + damage = 0; } - } - - if (damage == -3) { - DoRiposte(other); - if (HasDied()) - return; } } else @@ -2779,11 +2220,11 @@ void Bot::DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, SkillUseTypes const Item_Struct* botweapon = 0; if(inst) botweapon = inst->GetItem(); - + if(botweapon) { if(botweapon->ItemType == ItemTypeShield) hate += botweapon->AC; - + hate = (hate * (100 + GetFuriousBash(botweapon->Focus.Effect)) / 100); } } @@ -2839,7 +2280,7 @@ void Bot::ApplySpecialAttackMod(SkillUseTypes skill, int32 &dmg, int32 &mindmg) const Item_Struct* botweapon = 0; if(inst) botweapon = inst->GetItem(); - + if(botweapon) dmg += botweapon->AC * (RuleI(Combat, SpecialAttackACBonus))/100; } @@ -2952,7 +2393,7 @@ void Bot::AI_Process() { if(!GetTarget() || (IsBotCaster() && !IsBotCasterCombatRange(GetTarget())) || (IsBotArcher() && IsArcheryRange(GetTarget())) || (DistanceSquaredNoZ(static_cast(m_Position), m_PreSummonLocation) < 10)) { if(GetTarget()) FaceTarget(GetTarget()); - + SetHasBeenSummoned(false); } else if(!IsRooted()) { if(GetTarget() && GetTarget()->GetHateTop() && GetTarget()->GetHateTop() != this) { @@ -2971,7 +2412,7 @@ void Bot::AI_Process() { } else { if(GetTarget()) FaceTarget(GetTarget()); - + SetHasBeenSummoned(false); } return; @@ -3180,7 +2621,7 @@ void Bot::AI_Process() { entity_list.MessageClose_StringID(this, false, 200, 0, BERSERK_START, GetName()); this->berserk = true; } - + if (berserk && this->GetHPRatio() > 30) { entity_list.MessageClose_StringID(this, false, 200, 0, BERSERK_END, GetName()); this->berserk = false; @@ -3407,16 +2848,16 @@ void Bot::PetAIProcess() { aa_skill += botPet->GetOwner()->GetAA(aaWardersAlacrity); if(aa_skill >= 1) aa_chance += ((aa_skill > 5 ? 5 : aa_skill) * 4); - + if(aa_skill >= 6) aa_chance += ((aa_skill - 5 > 3 ? 3 : aa_skill - 5) * 7); - + if(aa_skill >= 9) aa_chance += ((aa_skill - 8 > 3 ? 3 : aa_skill - 8) * 3); - + if(aa_skill >= 12) aa_chance += ((aa_skill - 11) * 1); - + //aa_chance += botPet->GetOwner()->GetAA(aaCompanionsAlacrity) * 3; @@ -3596,7 +3037,7 @@ void Bot::Spawn(Client* botCharacterOwner, std::string* errorMessage) { uint8 materialFromSlot = 0xFF; for(int i = EmuConstants::EQUIPMENT_BEGIN; i <= EmuConstants::EQUIPMENT_END; ++i) { itemID = GetBotItemBySlot(i); - if(itemID != 0) { + if(itemID != 0) { materialFromSlot = Inventory::CalcMaterialFromSlot(i); if(materialFromSlot != 0xFF) this->SendWearChange(materialFromSlot); @@ -3834,7 +3275,7 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { if(item) { if(strlen(item->IDFile) > 2) ns->spawn.equipment[MaterialPrimary].Material = atoi(&item->IDFile[2]); - + ns->spawn.colors[MaterialPrimary].Color = GetEquipmentColor(MaterialPrimary); } } @@ -3845,7 +3286,7 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { if(item) { if(strlen(item->IDFile) > 2) ns->spawn.equipment[MaterialSecondary].Material = atoi(&item->IDFile[2]); - + ns->spawn.colors[MaterialSecondary].Color = GetEquipmentColor(MaterialSecondary); } } @@ -4699,7 +4140,7 @@ bool Bot::Bot_Command_CharmTarget(int charmtype, Mob *target) { charmid = 198; else if((charmlevel >= 31) && (charmlevel <= 46)) charmid = 197; - else if((charmlevel >= 18) && (charmlevel <= 30)) + else if((charmlevel >= 18) && (charmlevel <= 30)) charmid = 196; break; case 3: // Druid @@ -4801,7 +4242,7 @@ bool Bot::Bot_Command_RezzTarget(Mob *target) { rezid = 2172; else if(rezlevel >= 37) rezid = 388; - else if(rezlevel >= 32) + else if(rezlevel >= 32) rezid = 2171; else if(rezlevel >= 27) rezid = 391; @@ -4943,11 +4384,11 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli "Left Finger", "Right Finger", "Chest", "Legs", "Feet", "Waist", "Ammo", "Powersource" }; bool success = false; int how_many_slots = 0; - for(int j = EmuConstants::EQUIPMENT_BEGIN; j <= (EmuConstants::EQUIPMENT_END + 1); ++j) { + for(int j = EmuConstants::EQUIPMENT_BEGIN; j <= (EmuConstants::EQUIPMENT_END + 1); ++j) { if((mWeaponItem->Slots & (1 << j))) { if (j == 22) j = 9999; - + how_many_slots++; if(!GetBotItem(j)) { if(j == MainPrimary) { @@ -5008,7 +4449,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli if((mWeaponItem->Slots & (1 << j))) { if (j == 22) j = 9999; - + swap_item = GetBotItem(j); failedLoreCheck = false; for (int k = AUG_BEGIN; k < EmuConstants::ITEM_COMMON_SIZE; ++k) { @@ -5195,7 +4636,7 @@ void Bot::Damage(Mob *from, int32 damage, uint16 spell_id, SkillUseTypes attack_ Log.Out(Logs::Detail, Logs::Combat, "Triggering EVENT_ATTACK due to attack by %s", from->GetName()); parse->EventNPC(EVENT_ATTACK, this, from, "", 0); } - + attacked_timer.Start(CombatEventTimer_expire); // if spell is lifetap add hp to the caster if (spell_id != SPELL_UNKNOWN && IsLifetapSpell(spell_id)) { @@ -5246,7 +4687,7 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b if ((IsCasting() && (GetClass() != BARD) && !IsFromSpell) || other == nullptr || (GetHP() < 0) || (GetAppearance() == eaDead) || (!IsAttackAllowed(other))) { if(this->GetOwnerID()) entity_list.MessageClose(this, 1, 200, 10, "%s says, '%s is not a legal target master.'", this->GetCleanName(), this->GetTarget()->GetCleanName()); - + if(other) { RemoveFromHateList(other); Log.Out(Logs::Detail, Logs::Combat, "I am not allowed to attack %s", other->GetCleanName()); @@ -5258,14 +4699,14 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b Log.Out(Logs::Detail, Logs::Combat, "Attack canceled, Divine Aura is in effect."); return false; } - + FaceTarget(GetTarget()); ItemInst* weapon = nullptr; if(Hand == MainPrimary) { weapon = GetBotItem(MainPrimary); OffHandAtk(false); } - + if(Hand == MainSecondary) { weapon = GetBotItem(MainSecondary); OffHandAtk(true); @@ -5292,7 +4733,7 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b uint32 hate = 0; if (weapon) hate = (weapon->GetItem()->Damage + weapon->GetItem()->ElemDmgAmt); - + int weapon_damage = GetWeaponDamage(other, weapon, &hate); if (hate == 0 && weapon_damage > 1) hate = weapon_damage; @@ -5372,70 +4813,38 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b } //check to see if we hit.. - if(!other->CheckHitChance(other, skillinuse, Hand)) { - Log.Out(Logs::Detail, Logs::Combat, "Attack missed. Damage set to 0."); - damage = 0; - other->AddToHateList(this, 0); - } else { //we hit, try to avoid it - other->AvoidDamage(this, damage); - other->MeleeMitigation(this, damage, min_hit, opts); - if(damage > 0) { + if (other->AvoidDamage(this, damage, Hand)) { + if (!FromRiposte && !IsStrikethrough) { + int strike_through = itembonuses.StrikeThrough + spellbonuses.StrikeThrough + aabonuses.StrikeThrough; + if(strike_through && zone->random.Roll(strike_through)) { + Message_StringID(MT_StrikeThrough, STRIKETHROUGH_STRING); // You strike through your opponents defenses! + Attack(other, Hand, false, true); // Strikethrough only gives another attempted hit + return false; + } + if (damage == -3 && !FromRiposte) { + DoRiposte(other); + if (HasDied()) + return false; + } + } + } else { + if (other->CheckHitChance(this, skillinuse, Hand)) { + other->MeleeMitigation(this, damage, min_hit, opts); ApplyMeleeDamageBonus(skillinuse, damage); damage += ((itembonuses.HeroicSTR / 10) + (damage * other->GetSkillDmgTaken(skillinuse) / 100) + GetSkillDmgAmt(skillinuse)); TryCriticalHit(other, skillinuse, damage, opts); - Log.Out(Logs::Detail, Logs::Combat, "Generating hate %d towards %s", hate, GetCleanName()); - // now add done damage to the hate list - //other->AddToHateList(this, hate); - } - else - other->AddToHateList(this, 0); - Log.Out(Logs::Detail, Logs::Combat, "Final damage after all reductions: %d", damage); - } - - //riposte - bool slippery_attack = false; // Part of hack to allow riposte to become a miss, but still allow a Strikethrough chance (like on Live) - if (damage == -3) { - if (FromRiposte) - return false; - else { - if (Hand == MainSecondary) {// Do we even have it & was attack with mainhand? If not, don't bother with other calculations - //Live AA - SlipperyAttacks - //This spell effect most likely directly modifies the actual riposte chance when using offhand attack. - int32 OffhandRiposteFail = (aabonuses.OffhandRiposteFail + itembonuses.OffhandRiposteFail + spellbonuses.OffhandRiposteFail); - OffhandRiposteFail *= -1; //Live uses a negative value for this. - - if (OffhandRiposteFail && - (OffhandRiposteFail > 99 || (zone->random.Int(0, 100) < OffhandRiposteFail))) { - damage = 0; // Counts as a miss - slippery_attack = true; - } else - DoRiposte(other); - if (GetHP() < 0) - return false; - } - else - DoRiposte(other); - if (GetHP() < 0) - return false; - } - } - - if (((damage < 0) || slippery_attack) && !FromRiposte && !IsStrikethrough) { // Hack to still allow Strikethrough chance w/ Slippery Attacks AA - int32 bonusStrikeThrough = (itembonuses.StrikeThrough + spellbonuses.StrikeThrough + aabonuses.StrikeThrough); - if(bonusStrikeThrough && (zone->random.Int(0, 100) < bonusStrikeThrough)) { - Message_StringID(MT_StrikeThrough, STRIKETHROUGH_STRING); // You strike through your opponents defenses! - Attack(other, Hand, false, true); // Strikethrough only gives another attempted hit - return false; + } else { + damage = 0; } } + Log.Out(Logs::Detail, Logs::Combat, "Final damage after all reductions: %d", damage); } else damage = -5; // Hate Generation is on a per swing basis, regardless of a hit, miss, or block, its always the same. // If we are this far, this means we are atleast making a swing. - if (!FromRiposte) - other->AddToHateList(this, hate); + other->AddToHateList(this, hate); /////////////////////////////////////////////////////////// ////// Send Attack Damage @@ -5457,14 +4866,14 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b BuffFadeByEffect(SE_Invisibility2); invisible = false; } - + if(invisible_undead) { Log.Out(Logs::Detail, Logs::Combat, "Removing invisibility vs. undead due to melee attack."); BuffFadeByEffect(SE_InvisVsUndead); BuffFadeByEffect(SE_InvisVsUndead2); invisible_undead = false; } - + if(invisible_animals){ Log.Out(Logs::Detail, Logs::Combat, "Removing invisibility vs. animals due to melee attack."); BuffFadeByEffect(SE_InvisVsAnimals); @@ -5495,7 +4904,8 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b return false; } -int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id) { +int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint32 points, uint16 spell_id) +{ const SPDat_Spell_Struct &spell = spells[spell_id]; int32 value = 0; int lvlModifier = 100; @@ -5509,15 +4919,21 @@ int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id) { uint32 slot = 0; bool LimitFound = false; int FocusCount = 0; - std::map >::const_iterator find_iter = aa_effects.find(aa_ID); - if(find_iter == aa_effects.end()) + + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa_ID, points); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { return 0; - - for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; + } + + for(auto &eff : rank->effects) { + effect = eff.effect_id; + base1 = eff.base1; + base2 = eff.base2; + slot = eff.slot; + //AA Foci's can contain multiple focus effects within the same AA. //To handle this we will not automatically return zero if a limit is found. //Instead if limit is found and multiple effects, we will reset the limit check @@ -5731,6 +5147,24 @@ int32 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id) { value = base1; break; } + /* + case SE_SympatheticProc: + { + if(type == focusSympatheticProc) + { + float ProcChance, ProcBonus; + int16 ProcRateMod = base1; //Baseline is 100 for most Sympathetic foci + int32 cast_time = GetActSpellCasttime(spell_id, spells[spell_id].cast_time); + GetSympatheticProcChances(ProcBonus, ProcChance, cast_time, ProcRateMod); + + if(zone->random.Real(0, 1) <= ProcChance) + value = focus_id; + + else + value = 0; + } + break; + }*/ case SE_FcDamageAmt: { if(type == focusFcDamageAmt) value = base1; @@ -5822,7 +5256,7 @@ int32 Bot::GetBotFocusEffect(BotfocusType bottype, uint16 spell_id) { ItemInst* ins = GetBotItem(x); if (!ins) continue; - + TempItem = ins->GetItem(); if (TempItem && TempItem->Focus.Effect > 0 && TempItem->Focus.Effect != SPELL_UNKNOWN) { if(rand_effectiveness) { @@ -5915,22 +5349,31 @@ int32 Bot::GetBotFocusEffect(BotfocusType bottype, uint16 spell_id) { // AA Focus if (aabonuses.FocusEffects[bottype]) { - int totalAAs = database.CountAAs(); int32 Total3 = 0; uint32 slots = 0; uint32 aa_AA = 0; uint32 aa_value = 0; - for (int i = 0; i < totalAAs; i++) { //iterate through all of the client's AAs - std::map::iterator aa = botAAs.find(i); - if(aa != botAAs.end()) { // make sure aa exists or we'll crash zone - aa_AA = aa->second.aa_id; //same as aaid from the aa_effects table - aa_value = aa->second.total_levels; //how many points in it - if (aa_AA < 1 || aa_value < 1) - continue; - Total3 = CalcBotAAFocus(bottype, aa_AA, spell_id); - if ((Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) || (Total3 < 0 && Total3 < realTotal3)) - realTotal3 = Total3; + for(auto &aa : aa_ranks) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { + continue; + } + + aa_AA = ability->id; + aa_value = aa.second.first; + if (aa_AA < 1 || aa_value < 1) + continue; + + Total3 = CalcBotAAFocus(bottype, aa_AA, aa_value, spell_id); + if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { + realTotal3 = Total3; + } + else if (Total3 < 0 && Total3 < realTotal3) { + realTotal3 = Total3; } } } @@ -5994,7 +5437,7 @@ int32 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel if (spell.classes[(GetClass() % 16) - 1] < focus_spell.base[i]) return 0; break; - + case SE_LimitCastTimeMin: if (spells[spell_id].cast_time < (uint32)focus_spell.base[i]) return 0; @@ -6025,8 +5468,8 @@ int32 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel return 0; } break; - - + + case SE_LimitSpellType: switch(focus_spell.base[i]) { case 0: @@ -6041,7 +5484,7 @@ int32 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel Log.Out(Logs::General, Logs::Normal, "CalcFocusEffect: unknown limit spelltype %d", focus_spell.base[i]); } break; - + case SE_LimitManaMin: if(spell.mana < focus_spell.base[i]) return 0; @@ -6236,19 +5679,19 @@ int32 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel case SE_FcBaseEffects: { if (bottype == BotfocusFcBaseEffects) value = focus_spell.base[i]; - + break; } case SE_FcDamagePctCrit: { if(bottype == BotfocusFcDamagePctCrit) value = focus_spell.base[i]; - + break; } case SE_FcIncreaseNumHits: { if(bottype == BotfocusIncreaseNumHits) value = focus_spell.base[i]; - + break; } default: @@ -6296,132 +5739,6 @@ float Bot::GetProcChances(float ProcBonus, uint16 hand) { return ProcChance; } -bool Bot::AvoidDamage(Mob* other, int32 &damage, bool CanRiposte) { - if(GetAppearance() == eaDead) - return false; - - float skill = 0; - float bonus = 0; - float RollTable[4] = {0,0,0,0}; - float roll = 0; - Mob *attacker = other; - Mob *defender = this; - - bool ghit = false; - if((attacker->GetSpellBonuses().MeleeSkillCheck + attacker->GetItemBonuses().MeleeSkillCheck) > 500) - ghit = true; - - if (IsEnraged() && !other->BehindMob(this, other->GetX(), other->GetY())) { - damage = -3; - Log.Out(Logs::Detail, Logs::Combat, "I am enraged, riposting frontal attack."); - } - - float riposte_chance = 0.0f; - if (CanRiposte && damage > 0 && CanThisClassRiposte() && !other->BehindMob(this, other->GetX(), other->GetY())) { - riposte_chance = ((100.0f + (float)defender->GetAABonuses().RiposteChance + (float)defender->GetSpellBonuses().RiposteChance + (float)defender->GetItemBonuses().RiposteChance) / 100.0f); - skill = GetSkill(SkillRiposte); - if (!ghit) { - bonus = (2.0 + skill / 60.0 + (GetDEX() / 200)); - bonus *= riposte_chance; - RollTable[0] = (bonus + (itembonuses.HeroicDEX / 25)); - } - } - - bool bBlockFromRear = false; - bool bShieldBlockFromRear = false; - if (this->IsBot()) { - int aaChance = 0; - int BlockBehindChance = (aabonuses.BlockBehind + spellbonuses.BlockBehind + itembonuses.BlockBehind); - if (BlockBehindChance && (BlockBehindChance > zone->random.Int(1, 100))){ - bBlockFromRear = true; - if (spellbonuses.BlockBehind || itembonuses.BlockBehind) - bShieldBlockFromRear = true; - } - } - - float block_chance = 0.0f; - if (damage > 0 && CanThisClassBlock() && (!other->BehindMob(this, other->GetX(), other->GetY()) || bBlockFromRear)) { - block_chance = ((100.0f + (float)spellbonuses.IncreaseBlockChance + (float)itembonuses.IncreaseBlockChance) / 100.0f); - skill = GetSkill(SkillBlock); - if (!ghit) { - bonus = (2.0 + skill / 35.0 + (GetDEX() / 200)); - RollTable[1] = (RollTable[0] + (bonus * block_chance) - riposte_chance); - block_chance *= bonus; - } - } else - RollTable[1] = RollTable[0]; - - if(damage > 0 && (aabonuses.ShieldBlock || spellbonuses.ShieldBlock || itembonuses.ShieldBlock) - && (!other->BehindMob(this, other->GetX(), other->GetY()) || bShieldBlockFromRear)) { - bool equiped = GetBotItem(MainSecondary); - if(equiped) { - uint8 shield = GetBotItem(MainSecondary)->GetItem()->ItemType; - float bonusShieldBlock = 0.0f; - if(shield == ItemTypeShield) { - bonusShieldBlock = (aabonuses.ShieldBlock + spellbonuses.ShieldBlock + itembonuses.ShieldBlock); - RollTable[1] = (RollTable[0] + bonusShieldBlock); - } - } - } - - if(damage > 0 && (aabonuses.TwoHandBluntBlock || spellbonuses.TwoHandBluntBlock || itembonuses.TwoHandBluntBlock) - && (!other->BehindMob(this, other->GetX(), other->GetY()) || bShieldBlockFromRear)) { - bool equiped2 = GetBotItem(MainPrimary); - if(equiped2) { - uint8 TwoHandBlunt = GetBotItem(MainPrimary)->GetItem()->ItemType; - float bonusStaffBlock = 0.0f; - if(TwoHandBlunt == ItemType2HBlunt) { - bonusStaffBlock = (aabonuses.TwoHandBluntBlock + spellbonuses.TwoHandBluntBlock + itembonuses.TwoHandBluntBlock); - RollTable[1] = (RollTable[0] + bonusStaffBlock); - } - } - } - - float parry_chance = 0.0f; - if (damage > 0 && CanThisClassParry() && !other->BehindMob(this, other->GetX(), other->GetY())) { - parry_chance = ((100.0f + (float)defender->GetSpellBonuses().ParryChance + (float)defender->GetItemBonuses().ParryChance) / 100.0f); - skill = GetSkill(SkillParry); - if (!ghit) { - bonus = (2.0 + skill / 60.0 + (GetDEX() / 200)); - bonus *= parry_chance; - RollTable[2] = (RollTable[1] + bonus - block_chance); - } - } else - RollTable[2] = (RollTable[1] - block_chance); - - float dodge_chance = 0.0f; - if (damage > 0 && CanThisClassDodge() && !other->BehindMob(this, other->GetX(), other->GetY())) { - dodge_chance = ((100.0f + (float)defender->GetSpellBonuses().DodgeChance + (float)defender->GetItemBonuses().DodgeChance) / 100.0f); - skill = GetSkill(SkillDodge); - if (!ghit) { - bonus = (2.0 + skill / 60.0 + (GetAGI() / 200)); - bonus *= dodge_chance; - RollTable[3] = (RollTable[2] + bonus - (itembonuses.HeroicDEX / 25) + (itembonuses.HeroicAGI / 25) - parry_chance); - } - } else { - RollTable[3] = (RollTable[2] - (itembonuses.HeroicDEX / 25) + (itembonuses.HeroicAGI / 25) - parry_chance); - } - - if(damage > 0) { - roll = zone->random.Real(0,100); - if(roll <= RollTable[0]) - damage = -3; - else if(roll <= RollTable[1]) - damage = -1; - else if(roll <= RollTable[2]) - damage = -2; - else if(roll <= RollTable[3]) - damage = -4; - } - - Log.Out(Logs::Detail, Logs::Combat, "Final damage after all avoidances: %d", damage); - - if (damage < 0) - return true; - - return false; -} - int Bot::GetMonkHandToHandDamage(void) { static int damage[66] = { // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @@ -6501,36 +5818,35 @@ void Bot::DoSpecialAttackDamage(Mob *who, SkillUseTypes skill, int32 max_damage, const Item_Struct* botweapon = 0; if(inst) botweapon = inst->GetItem(); - + if(botweapon) { if(botweapon->ItemType == ItemTypeShield) hate += botweapon->AC; - + hate = (hate * (100 + GetFuriousBash(botweapon->Focus.Effect)) / 100); } } min_damage += (min_damage * GetMeleeMinDamageMod_SE(skill) / 100); - if(HitChance && !who->CheckHitChance(this, skill, MainPrimary)) - max_damage = 0; - else { - bool CanRiposte = true; - if(skill == SkillThrowing || skill == SkillArchery) - CanRiposte = false; - - who->AvoidDamage(this, max_damage, CanRiposte); - who->MeleeMitigation(this, max_damage, min_damage); - - if(max_damage > 0) { + int hand = MainPrimary; + if (skill == SkillThrowing || skill == SkillArchery) + hand = MainRange; + if (who->AvoidDamage(this, max_damage, hand)) { + if (max_damage == -3) + DoRiposte(who); + } else { + if (HitChance || who->CheckHitChance(this, skill, MainPrimary)) { + who->MeleeMitigation(this, max_damage, min_damage); ApplyMeleeDamageBonus(skill, max_damage); max_damage += who->GetFcDamageAmtIncoming(this, 0, true, skill); max_damage += ((itembonuses.HeroicSTR / 10) + (max_damage * who->GetSkillDmgTaken(skill) / 100) + GetSkillDmgAmt(skill)); TryCriticalHit(who, skill, max_damage); + } else { + max_damage = 0; } } - if(max_damage >= 0) - who->AddToHateList(this, hate); + who->AddToHateList(this, hate); who->Damage(this, max_damage, SPELL_UNKNOWN, skill, false); @@ -6540,22 +5856,21 @@ void Bot::DoSpecialAttackDamage(Mob *who, SkillUseTypes skill, int32 max_damage, if (max_damage > 0) CheckNumHitsRemaining(NumHit::OutgoingHitSuccess); - if(aabonuses.SpecialAttackKBProc[0] && aabonuses.SpecialAttackKBProc[1] == skill){ + //[AA Dragon Punch] value[0] = 100 for 25%, chance value[1] = skill +/* if(aabonuses.SpecialAttackKBProc[0] && aabonuses.SpecialAttackKBProc[1] == skill){ int kb_chance = 25; kb_chance += (kb_chance * (100 - aabonuses.SpecialAttackKBProc[0]) / 100); if (zone->random.Int(0, 99) < kb_chance) SpellFinished(904, who, 10, 0, -1, spells[904].ResistDiff); - } + //who->Stun(100); Kayen: This effect does not stun on live, it only moves the NPC. + }*/ if (HasSkillProcs()) TrySkillProc(who, skill, (ReuseTime * 1000)); if (max_damage > 0 && HasSkillProcSuccess()) TrySkillProc(who, skill, (ReuseTime * 1000), true); - - if(max_damage == -3 && !(who->GetHP() <= 0)) - DoRiposte(who); } void Bot::TryBackstab(Mob *other, int ReuseTime) { @@ -6568,7 +5883,7 @@ void Bot::TryBackstab(Mob *other, int ReuseTime) { const Item_Struct* botpiercer = nullptr; if(inst) botpiercer = inst->GetItem(); - + if(!botpiercer || (botpiercer->ItemType != ItemType1HPiercing)) { BotGroupSay(this, "I can't backstab with this weapon!"); return; @@ -6740,7 +6055,7 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { bool canBash = false; if((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(MainSecondary) && m_inv.GetItem(MainSecondary)->GetItem()->ItemType == ItemTypeShield) || (m_inv.GetItem(MainPrimary) && (m_inv.GetItem(MainPrimary)->GetItem()->ItemType == ItemType2HSlash || m_inv.GetItem(MainPrimary)->GetItem()->ItemType == ItemType2HBlunt || m_inv.GetItem(MainPrimary)->GetItem()->ItemType == ItemType2HPiercing) && GetAA(aa2HandBash) >= 1)) canBash = true; - + if(!canBash || zone->random.Int(0, 100) > 25) skill_to_use = SkillKick; else @@ -7193,7 +6508,7 @@ void Bot::SetAttackTimer() { } else { delay = ItemToUse->Delay; } - + speed = (RuleB(Spells, Jun182014HundredHandsRevamp) ? static_cast(((delay / haste_mod) + ((hhe / 1000.0f) * (delay / haste_mod))) * 100) : static_cast(((delay / haste_mod) + ((hhe / 100.0f) * delay)) * 100)); TimerToUse->SetAtTrigger(std::max(RuleI(Combat, MinHastedDelay), speed), true); @@ -7504,7 +6819,7 @@ int32 Bot::GetActSpellDuration(uint16 spell_id, int32 duration) { increase += 30; if (GetAA(aaSpellCastingReinforcementMastery) == 1) increase += 20; - + break; } @@ -7523,7 +6838,7 @@ float Bot::GetAOERange(uint16 spell_id) { range = spells[spell_id].aoerange; if(range == 0) range = spells[spell_id].range; - + if(range == 0) range = 10; @@ -7543,7 +6858,7 @@ bool Bot::SpellEffect(Mob* caster, uint16 spell_id, float partial) { if(g) { EQApplicationPacket hp_app; CreateHPPacket(&hp_app); - for(int i=0; imembers[i] && g->members[i]->IsClient()) g->members[i]->CastToClient()->QueuePacket(&hp_app); } @@ -7556,7 +6871,8 @@ void Bot::DoBuffTic(const Buffs_Struct &buff, int slot, Mob* caster) { Mob::DoBuffTic(buff, slot, caster); } -bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, int16 *resist_adjust) { +bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, + uint32* oSpellWillFinish, uint32 item_slot, int16 *resist_adjust, uint32 aa_id) { bool Result = false; if(zone && !zone->IsSpellBlocked(spell_id, glm::vec3(GetPosition()))) { Log.Out(Logs::Detail, Logs::Spells, "CastSpell called for spell %s (%d) on entity %d, slot %d, time %d, mana %d, from item slot %d", spells[spell_id].name, spell_id, target_id, slot, cast_time, mana_cost, (item_slot==0xFFFFFFFF)?999:item_slot); @@ -7569,14 +6885,14 @@ bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_t Log.Out(Logs::Detail, Logs::Spells, "Spell casting canceled: not able to cast now. Valid? %d, casting %d, waiting? %d, spellend? %d, stunned? %d, feared? %d, mezed? %d, silenced? %d", IsValidSpell(spell_id), casting_spell_id, delaytimer, spellend_timer.Enabled(), IsStunned(), IsFeared(), IsMezzed(), IsSilenced() ); if(IsSilenced() && !IsDiscipline(spell_id)) Message_StringID(13, SILENCED_STRING); - + if(IsAmnesiad() && IsDiscipline(spell_id)) - + Message_StringID(13, MELEE_SILENCE); - + if(casting_spell_id) AI_Event_SpellCastFinished(false, casting_spell_slot); - + return false; } } @@ -7585,7 +6901,7 @@ bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_t Message_StringID(13, SPELL_WOULDNT_HOLD); if(casting_spell_id) AI_Event_SpellCastFinished(false, casting_spell_slot); - + return false; } @@ -7594,7 +6910,7 @@ bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_t InterruptSpell(173, 0x121, false); return false; } - + if(slot < MAX_PP_MEMSPELL && !CheckFizzle(spell_id)) { int fizzle_msg = IsBardSong(spell_id) ? MISS_NOTE : SPELL_FIZZLE; InterruptSpell(fizzle_msg, 0x121, spell_id); @@ -7612,7 +6928,8 @@ bool Bot::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_t bardsong_slot = 0; bardsong_timer.Disable(); } - Result = DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot); + + Result = DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, aa_id); } return Result; } @@ -7751,12 +7068,13 @@ bool Bot::DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_ce return Result; } -bool Bot::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot) { +bool Bot::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, uint32 aa_id) { bool Result = false; - if(GetClass() == BARD) + if(GetClass() == BARD) cast_time = 0; - Result = Mob::DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot); + Result = Mob::DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, aa_id); + if(oSpellWillFinish) { const SPDat_Spell_Struct &spell = spells[spell_id]; *oSpellWillFinish = Timer::GetCurrentTime() + ((spell.recast_time > 20000) ? 10000 : spell.recast_time); @@ -7782,7 +7100,7 @@ int32 Bot::GenerateBaseManaPoints() { } else ConvertedWisInt = WisInt; - + if(GetLevel() < 41) { wisint_mana = (GetLevel() * 75 * ConvertedWisInt / 1000); base_mana = (GetLevel() * 15); @@ -7799,7 +7117,7 @@ int32 Bot::GenerateBaseManaPoints() { MindLesserFactor = ((WisInt - 199) / 2); else MindLesserFactor = 0; - + MindFactor = WisInt - MindLesserFactor; if(WisInt > 100) bot_mana = (((5 * (MindFactor + 20)) / 2) * 3 * GetLevel() / 40); @@ -7816,7 +7134,7 @@ int32 Bot::GenerateBaseManaPoints() { ConvertedWisInt -= ((WisInt - 201) * 5 / 4); } else ConvertedWisInt = WisInt; - + if(GetLevel() < 41) { wisint_mana = (GetLevel() * 75 * ConvertedWisInt / 1000); base_mana = (GetLevel() * 15); @@ -7833,7 +7151,7 @@ int32 Bot::GenerateBaseManaPoints() { MindLesserFactor = ((WisInt - 199) / 2); else MindLesserFactor = 0; - + MindFactor = (WisInt - MindLesserFactor); if(WisInt > 100) bot_mana = (((5 * (MindFactor + 20)) / 2) * 3 * GetLevel() / 40); @@ -7858,7 +7176,7 @@ bool Bot::DoFinishedSpellAETarget(uint16 spell_id, Mob* spellTarget, uint16 slot if(GetClass() == BARD) { if(!ApplyNextBardPulse(bardsong, this, bardsong_slot)) InterruptSpell(SONG_ENDS_ABRUPTLY, 0x121, bardsong); - + stopLogic = true; } return true; @@ -7869,7 +7187,7 @@ bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, uint16 if(IsGrouped() && (spellTarget->IsBot() || spellTarget->IsClient()) && RuleB(Bots, BotGroupBuffing)) { bool noGroupSpell = false; uint16 thespell = spell_id; - for(int i=0; i < AIspells.size(); i++) { + for(int i = 0; i < AIspells.size(); i++) { int j = BotGetSpells(i); int spelltype = BotGetSpellType(i); bool spellequal = (j == thespell); @@ -7894,13 +7212,13 @@ bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, uint16 if(!noGroupSpell) { Group *g = GetGroup(); if(g) { - for(int i = 0; i < MAX_GROUP_MEMBERS;i++) { + for(int i = 0; i < MAX_GROUP_MEMBERS; i++) { if(g->members[i]) { if((g->members[i]->GetClass() == NECROMANCER) && (IsEffectInSpell(thespell, SE_AbsorbMagicAtt) || IsEffectInSpell(thespell, SE_Rune))) { } else SpellOnTarget(thespell, g->members[i]); - + if(g->members[i] && g->members[i]->GetPetID()) SpellOnTarget(thespell, g->members[i]->GetPet()); } @@ -7941,7 +7259,7 @@ void Bot::CalcBonuses() { GenerateBaseStats(); CalcItemBonuses(&itembonuses); CalcSpellBonuses(&spellbonuses); - GenerateAABonuses(&aabonuses); + CalcAABonuses(&aabonuses); SetAttackTimer(); CalcATK(); CalcSTR(); @@ -8067,7 +7385,7 @@ int32 Bot::CalcSTR() { int32 mod = aabonuses.STR; if(val > 255 && GetLevel() <= 60) val = 255; - + STR = (val + mod); if(STR < 1) STR = 1; @@ -8084,7 +7402,7 @@ int32 Bot::CalcSTA() { int32 mod = aabonuses.STA; if(val > 255 && GetLevel() <= 60) val = 255; - + STA = (val + mod); if(STA < 1) STA = 1; @@ -8118,7 +7436,7 @@ int32 Bot::CalcDEX() { int32 mod = aabonuses.DEX; if(val > 255 && GetLevel() <= 60) val = 255; - + DEX = (val + mod); if(DEX < 1) DEX = 1; @@ -8135,12 +7453,12 @@ int32 Bot::CalcINT() { int32 mod = aabonuses.INT; if(val > 255 && GetLevel() <= 60) val = 255; - + INT = (val + mod); if(INT < 1) INT = 1; - + int m = GetMaxINT(); if(INT > m) INT = m; @@ -8153,7 +7471,7 @@ int32 Bot::CalcWIS() { int32 mod = aabonuses.WIS; if(val > 255 && GetLevel() <= 60) val = 255; - + WIS = (val + mod); if(WIS < 1) @@ -8171,7 +7489,7 @@ int32 Bot::CalcCHA() { int32 mod = aabonuses.CHA; if(val > 255 && GetLevel() <= 60) val = 255; - + CHA = (val + mod); if(CHA < 1) @@ -8568,10 +7886,10 @@ void Bot::DoEnduranceUpkeep() { if(cost_redux > 0) { if(upkeep <= cost_redux) continue; - + upkeep -= cost_redux; } - + if((upkeep+upkeep_sum) > GetEndurance()) BuffFadeBySlot(buffs_i); else @@ -8715,7 +8033,7 @@ bool Bot::CanHeal() { if(botSpell.SpellId != 0) result = true; - + return result; } @@ -8771,7 +8089,7 @@ void Bot::BotGroupOrderAttack(Group* group, Mob* target, Client* client) { if(group && target) { Mob* groupLeader = group->GetLeader(); if(groupLeader) { - for(int i=0; i < MAX_GROUP_MEMBERS; i++) { + for(int i = 0; i < MAX_GROUP_MEMBERS; i++) { if(group->members[i] && group->members[i]->IsBot()) { Bot* botGroupMember = group->members[i]->CastToBot(); if(botGroupMember->GetBotOwnerCharacterID() == client->CharacterID()) { @@ -9412,52 +8730,52 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(0, "#bot create [name] [class (id)] [race (id)] [model (male/female)] - create a permanent bot. See #bot help create."); c->Message(0, "#bot help create - show all the race/class id. (make it easier to create bots)"); c->Message(0, "#bot delete - completely destroy forever the targeted bot and all its items."); - c->Message(0, "#bot list [all/class(1-16)] - list your bots all or by class. Classes: 1(WAR), 2(CLR), 3(PAL), 4(RNG), 5(SHD), 6(DRU), 7(MNK), 8(BRD), 9(ROG), 10(SHM), 11(NEC), 12(WIZ), 13(MAG), 14(ENC), 15(BST), 16(BER)"); + c->Message(0, "#bot list [all/class(1-16)] - list all of your bots or list by class. Classes: 1(WAR), 2(CLR), 3(PAL), 4(RNG), 5(SHD), 6(DRU), 7(MNK), 8(BRD), 9(ROG), 10(SHM), 11(NEC), 12(WIZ), 13(MAG), 14(ENC), 15(BST), 16(BER)"); c->Message(0, "#bot spawn [bot name] - spawn a bot from it's name (use list to see all the bots). "); c->Message(0, "#bot inventory list - show the inventory (and the slots IDs) of the targeted bot."); c->Message(0, "#bot inventory remove [slotid] - remove the item at the given slot in the inventory of the targeted bot."); c->Message(0, "#bot update - you must type that command once you gain a level."); c->Message(0, "#bot summon - It will summon your targeted bot to you."); - c->Message(0, "#bot ai mez - If you're grouped with an Enchanter, he will mez your target."); + c->Message(0, "#bot mez - If you're grouped with an Enchanter, he will mesmerize your target."); c->Message(0, "#bot picklock - You must have a targeted Rogue bot in your group and be right on the door."); c->Message(0, "#bot cure [poison|disease|curse|blindness] Cleric has most options"); - c->Message(0, "#bot bindme - You must have a Cleric in your group to get Bind Affinity cast on you."); - c->Message(0, "#bot track - look at mobs in the zone (ranger has options)"); + c->Message(0, "#bot bind - You must have a Cleric in your group to get Bind Affinity cast on you."); + c->Message(0, "#bot track - look at mobs in the zone (Ranger has options)"); c->Message(0, "#bot target calm - attempts to pacify your target mob."); - c->Message(0, "#bot evac - transports your pc group to safe location in the current zone. bots are lost"); - c->Message(0, "#bot resurrectme - Your bot Cleric will rez you."); - c->Message(0, "#bot corpse summon - Necromancers summon corpse."); + c->Message(0, "#bot evac - transports your group to safe location in the current zone (bots are lost)"); + c->Message(0, "#bot resurrect - Your Cleric bot will resurrect your targeted player corpse."); + c->Message(0, "#bot corpse summon - Necromancers summon your targeted player's corpses."); c->Message(0, "#bot lore - cast Identify on the item on your mouse pointer."); - c->Message(0, "#bot sow - Bot sow on you (Druid has options)"); + c->Message(0, "#bot speed - Bots will cast Spirit of Wolf on you (Druid has options)"); c->Message(0, "#bot invis - Bot invisiblity (must have proper class in group)"); c->Message(0, "#bot levitate - Bot levitation (must have proper class in group)"); c->Message(0, "#bot resist - Bot resist buffs (must have proper class in group)"); - c->Message(0, "#bot runeme - Enchanter Bot cast Rune spell on you"); + c->Message(0, "#bot rune - Enchanter bot casts Rune spell on you"); c->Message(0, "#bot shrink - Shaman or Beastlord will shrink target"); c->Message(0, "#bot endureb - Bot enduring breath (must have proper class in group)"); c->Message(0, "#bot charm - (must have proper class in group)"); c->Message(0, "#bot dire charm - (must have proper class in group)"); c->Message(0, "#bot pet remove - (remove pet before charm)"); - c->Message(0, "#bot gate - you need a Druid or Wizard in your group)"); + c->Message(0, "#bot gate - Druid or Wizard bot will cast gate."); c->Message(0, "#bot archery - Toggle Archery Skilled bots between using a Bow or using Melee weapons."); - c->Message(0, "#bot magepet [earth|water|air|fire|monster] - Select the pet type you want your Mage bot to use."); - c->Message(0, "#bot giveitem - Gives your targeted bot the item you have on your cursor."); - c->Message(0, "#bot augmentitem - Allows you to augment items for other classes. You must have the Augmentation Sealer window filled."); + c->Message(0, "#bot setpet [earth|water|air|fire|monster] - Select the pet type you want your Magician bot to use."); + c->Message(0, "#bot [giveitem|gi] - Gives your targeted bot the item you have on your cursor."); + c->Message(0, "#bot [augmentitem|ai] - Allows you to augment items for other classes. (You MUST have the Augmentation Sealer window filled)"); c->Message(0, "#bot camp - Tells your bot to camp out of the game."); - c->Message(0, "#bot group help - Displays the commands available to manage any BOTs in your group."); - c->Message(0, "#bot botgroup help - Displays the commands available to manage BOT ONLY groups."); + c->Message(0, "#bot group help - Displays the commands available to manage any bots in your group."); + c->Message(0, "#bot botgroup help - Displays the commands available to manage bot ONLY groups."); c->Message(0, "#bot mana [ | all] - Displays a mana report for all your spawned bots."); c->Message(0, "#bot setfollowdistance ### - sets target bots follow distance to ### (ie 30 or 250)."); - c->Message(0, "#bot [hair|haircolor|beard|beardcolor|face|eyes|heritage|tattoo|details ] - Change your BOTs appearance."); + c->Message(0, "#bot [hair|haircolor|beard|beardcolor|face|eyes|heritage|tattoo|details ] - Change your bot's appearance."); c->Message(0, "#bot armorcolor - #bot help armorcolor for info"); - c->Message(0, "#bot taunt [on|off] - Turns taunt on/off for targeted bot"); + c->Message(0, "#bot taunt [on|off] - Determines whether or not your targeted bot will taunt."); c->Message(0, "#bot stance [name] [stance (id)|list] - Sets/lists stance for named bot (Passive = 0, Balanced = 1, Efficient = 2, Reactive = 3, Aggressive = 4, Burn = 5, BurnAE = 6)"); - c->Message(0, "#bot groupmessages [on|off] [bot name|all] - Turns group messages on/off for named bot/all bots."); - c->Message(0, "#bot defensive [bot name] - Causes warrior or knight bot to use defensive discipline / buff."); - c->Message(0, "#bot healrotation help - Displays the commands available to manage BOT heal rotations."); - c->Message(0, "#bot pull [] [target] - Bot Pulling Target NPC's"); - c->Message(0, "#bot setinspectmessage - Copies your inspect message to a targeted bot that you own"); - c->Message(0, "#bot bardoutofcombat [on|off] - Determines wheter bard bots use out of combat songs."); + c->Message(0, "#bot defensive [bot name] - Causes Warrior, Shadow Knight, or Paladin bot to use their defensive discipline or buff."); + c->Message(0, "#bot healrotation help - Displays the commands available to manage bot heal rotations."); + c->Message(0, "#bot pull [] [target] - Bot will attempt to pull your target NPC."); + c->Message(0, "#bot setinspectmessage - Copies your inspect message to a targeted bot that you own."); + c->Message(0, "#bot bardoutofcombat [on|off] - Determines whether Bard bots use out of combat songs."); + c->Message(0, "#bot showhelm [on|off] - Determines whether or not your targeted bot's helmet will show. (Requires a respawn to take effect)"); return; } @@ -9477,10 +8795,10 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { haspuller = true; Mob *puller = g->members[i]; if (puller->CastToBot()->IsArcheryRange(target)) { - puller->CastToBot()->BotGroupSay(puller->CastToBot(), "Trying to Pull %s \n", target->GetCleanName()); + puller->CastToBot()->BotGroupSay(puller->CastToBot(), "Trying to pull %s.", target->GetCleanName()); puller->CastToBot()->BotRangedAttack(target); } else { - puller->CastToBot()->BotGroupSay(puller->CastToBot(), "Out of Range %s \n", target->GetCleanName()); + puller->CastToBot()->BotGroupSay(puller->CastToBot(), "%s is out of range.", target->GetCleanName()); } } } @@ -9529,7 +8847,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if (!results.Success()) return; - for (int i = 0; i < 7; i++) { + for (int i = 0; i < 7; i++) { uint8 slotmaterial = Inventory::CalcMaterialFromSlot((uint8)slots[i]); c->GetTarget()->CastToBot()->SendWearChange(slotmaterial); } @@ -9549,7 +8867,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } return; } - + if(!strcasecmp(sep->arg[1], "help") && !strcasecmp(sep->arg[2], "armorcolor")){ c->Message(0, "-----------------#bot armorcolor help-----------------------------"); c->Message(0, "Armor: -1(All), 2(Helm), 7(Arms), 9(Bracer), 12(Hands), 17(Chest/Robe), 18(Legs), 19(Boots)"); @@ -9560,7 +8878,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { return; } - if(!strcasecmp(sep->arg[1], "augmentitem")) { + if(!strcasecmp(sep->arg[1], "augmentitem") || !strcasecmp(sep->arg[1], "ai")) { AugmentItem_Struct* in_augment = new AugmentItem_Struct[sizeof(AugmentItem_Struct)]; in_augment->container_slot = 1000; // in_augment->augment_slot = -1; @@ -9568,15 +8886,14 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { return; } - if(!strcasecmp(sep->arg[1], "giveitem")) { + if(!strcasecmp(sep->arg[1], "giveitem") || !strcasecmp(sep->arg[1], "gi")) { if(c->GetTarget() && c->GetTarget()->IsBot() && (c->GetTarget()->CastToBot()->GetBotOwner() == c)) { Bot* targetedBot = c->GetTarget()->CastToBot(); if(targetedBot) targetedBot->FinishTrade(c, BotTradeClientNoDropNoTrade); } - else { + else c->Message(15, "You must target a bot you own to do this."); - } return; } @@ -9589,7 +8906,8 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { Bot* targetedBot = c->GetTarget()->CastToBot(); if(targetedBot) targetedBot->Camp(); - } else + } + else c->Message(15, "You must target a bot you own to do this."); } @@ -9598,16 +8916,16 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(!strcasecmp(sep->arg[1], "create")) { if(sep->arg[2][0] == '\0' || sep->arg[3][0] == '\0' || sep->arg[4][0] == '\0' || sep->arg[5][0] == '\0' || sep->arg[6][0] != '\0') { - c->Message(0, "Usage: #bot create [name] [class(id)] [race(id)] [gender (male/female)]"); + c->Message(0, "Usage: #bot create [name] [class(id)] [race(id)] [gender (male/female|0/1)]"); return; } else if(strcasecmp(sep->arg[3],"1") && strcasecmp(sep->arg[3],"2") && strcasecmp(sep->arg[3],"3") && strcasecmp(sep->arg[3],"4") && strcasecmp(sep->arg[3],"5") && strcasecmp(sep->arg[3],"6") && strcasecmp(sep->arg[3],"7") && strcasecmp(sep->arg[3],"8") && strcasecmp(sep->arg[3],"9") && strcasecmp(sep->arg[3],"10") && strcasecmp(sep->arg[3],"11") && strcasecmp(sep->arg[3],"12") && strcasecmp(sep->arg[3],"13") && strcasecmp(sep->arg[3],"14") && strcasecmp(sep->arg[3],"15") && strcasecmp(sep->arg[3],"16")) { - c->Message(0, "Usage: #bot create [name] [class(id)] [race(id)] [gender (male/female)]"); + c->Message(0, "Usage: #bot create [name] [class(id)] [race(id)] [gender (male/female|0/1)]"); return; } else if(strcasecmp(sep->arg[4],"1") && strcasecmp(sep->arg[4],"2") && strcasecmp(sep->arg[4],"3") && strcasecmp(sep->arg[4],"4") && strcasecmp(sep->arg[4],"5") && strcasecmp(sep->arg[4],"6") && strcasecmp(sep->arg[4],"7") && strcasecmp(sep->arg[4],"8") && strcasecmp(sep->arg[4],"9") && strcasecmp(sep->arg[4],"10") && strcasecmp(sep->arg[4],"11") && strcasecmp(sep->arg[4],"12") && strcasecmp(sep->arg[4],"330") && strcasecmp(sep->arg[4],"128") && strcasecmp(sep->arg[4],"130") && strcasecmp(sep->arg[4],"522")) { - c->Message(0, "Usage: #bot create [name] [class(1-16)] [race(1-12,128,130,330,522)] [gender (male/female)]"); + c->Message(0, "Usage: #bot create [name] [class(1-16)] [race(1-12,128,130,330,522)] [gender (male/female|0/1)]"); return; - } else if(strcasecmp(sep->arg[5],"male") && strcasecmp(sep->arg[5],"female")) { - c->Message(0, "Usage: #bot create [name] [class(1-16)] [race(1-12,128,130,330,522)] [gender (male/female)]"); + } else if(strcasecmp(sep->arg[5],"male") && strcasecmp(sep->arg[5],"0") && strcasecmp(sep->arg[5],"female") && strcasecmp(sep->arg[5],"1")) { + c->Message(0, "Usage: #bot create [name] [class(1-16)] [race(1-12,128,130,330,522)] [gender (male/female|0/1)]"); return; } @@ -9623,7 +8941,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } int gender = 0; - if(!strcasecmp(sep->arg[5], "female")) + if(!strcasecmp(sep->arg[5], "female") || !strcasecmp(sep->arg[5], "1")) gender = 1; if(!IsBotNameAvailable(sep->arg[2],&TempErrorMessage)) { @@ -9655,9 +8973,8 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { else c->Message(0, "%s saved as bot %u.", NewBot->GetCleanName(), NewBot->GetBotID()); } - else { - // TODO: Log error message here - } + else + Log.Out(Logs::General, Logs::Error, "Error in #bot create, cannot find NewBot"); return; } @@ -9672,23 +8989,18 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } if(!strcasecmp(sep->arg[1], "delete") ) { - if((c->GetTarget() == nullptr) || !c->GetTarget()->IsBot()) - { + if((c->GetTarget() == nullptr) || !c->GetTarget()->IsBot()) { c->Message(15, "You must target a bot!"); return; - } - else if(c->GetTarget()->CastToBot()->GetBotOwnerCharacterID() != c->CharacterID()) - { + } else if(c->GetTarget()->CastToBot()->GetBotOwnerCharacterID() != c->CharacterID()) { c->Message(15, "You can't delete a bot that you don't own."); return; } if(c->GetTarget()->IsBot()) { Bot* BotTargeted = c->GetTarget()->CastToBot(); - if(BotTargeted) { BotTargeted->DeleteBot(&TempErrorMessage); - if(!TempErrorMessage.empty()) { c->Message(13, "Database Error: %s", TempErrorMessage.c_str()); return; @@ -9708,7 +9020,6 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { listAll = false; std::list AvailableBots = GetBotList(c->CharacterID(), &TempErrorMessage); - if(!TempErrorMessage.empty()) { c->Message(13, "Database Error: %s", TempErrorMessage.c_str()); return; @@ -9721,9 +9032,9 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(0, "Name: %s -- Class: %s -- Level: %u -- Race: %s", TempAvailableBotsList->BotName, ClassIdToString(TempAvailableBotsList->BotClass).c_str(), TempAvailableBotsList->BotLevel, RaceIdToString(TempAvailableBotsList->BotRace).c_str()); } - } else { - c->Message(0, "You have no bots created. Use the #bot create command to create a bot."); } + else + c->Message(0, "You have no bots created. Use the #bot create command to create a bot."); } if(!strcasecmp(sep->arg[1], "mana")) { @@ -9756,16 +9067,22 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(0, "Name: %s -- Class: %s -- Mana: %3.1f%%", tempBot->GetCleanName(), ClassIdToString(tempBot->GetClass()).c_str(), tempBot->GetManaRatio()); } } - } else { - c->Message(0, "You have no spawned bots in this zone."); } + else + c->Message(0, "You have no spawned bots in this zone."); } return; } if(!strcasecmp(sep->arg[1], "spawn") ) { + if (RuleB(Bots, BotCharacterLevelEnabled)) { + if (c->GetLevel() < RuleI(Bots, BotCharacterLevel)) { + c->Message(0, "You are only level %d, you must be level %d to spawn a bot!", c->GetLevel(), RuleI(Bots, BotCharacterLevel)); + return; + } + } + uint32 botId = GetBotIDByBotName(std::string(sep->arg[2])); - if(GetBotOwnerCharacterID(botId, &TempErrorMessage) != c->CharacterID()) { c->Message(0, "You can't spawn a bot that you don't own."); return; @@ -9783,18 +9100,17 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(c->IsGrouped()) { Group *g = entity_list.GetGroupByClient(c); - for (int i=0; imembers[i] && !g->members[i]->qglobal && (g->members[i]->GetAppearance() != eaDead) && (g->members[i]->IsEngaged() || (g->members[i]->IsClient() && g->members[i]->CastToClient()->GetAggroCount()))) { c->Message(0, "You can't summon bots while you are engaged."); return; } - if(g && g->members[i] && g->members[i]->qglobal) { + + if(g && g->members[i] && g->members[i]->qglobal) return; - } } - } - else { + } else { if(c->GetAggroCount() > 0) { c->Message(0, "You can't spawn bots while you are engaged."); return; @@ -9802,7 +9118,6 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } Mob* TempBotMob = entity_list.GetMobByBotID(botId); - if(TempBotMob) { c->Message(0, "This bot is already in the zone."); return; @@ -9817,7 +9132,6 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(RuleB(Bots, BotQuest) && !c->GetGM()) { const int allowedBots = AllowedBotSpawns(c->CharacterID(), &TempErrorMessage); - if(!TempErrorMessage.empty()) { c->Message(13, "Database Error: %s", TempErrorMessage.c_str()); return; @@ -9850,7 +9164,6 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(TempBot) { TempBot->Spawn(c, &TempErrorMessage); - if(!TempErrorMessage.empty()) { c->Message(13, "Database Error: %s", TempErrorMessage.c_str()); safe_delete(TempBot); @@ -9858,9 +9171,9 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } TempBot->BotGroupSay(TempBot, "I am ready for battle."); - } else { - c->Message(0, "BotID: %i not found", atoi(sep->arg[2])); } + else + c->Message(0, "BotID: %i not found", atoi(sep->arg[2])); return; } @@ -9872,7 +9185,6 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } Bot* archerBot = c->GetTarget()->CastToBot(); - if(archerBot) { if(archerBot->IsBotArcher()) archerBot->SetBotArcher(false); @@ -9880,7 +9192,6 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { archerBot->SetBotArcher(true); archerBot->ChangeBotArcherWeapons(archerBot->IsBotArcher()); - if(archerBot->GetClass() == RANGER && archerBot->GetLevel() >= 61) archerBot->SetRangerAutoWeaponSelect(archerBot->IsBotArcher()); } @@ -9889,30 +9200,25 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } if(!strcasecmp(sep->arg[1], "picklock")) { - if((c->GetTarget() == nullptr) || (c->GetTarget() == c) || !c->GetTarget()->IsBot() || (c->GetTarget()->GetClass() != ROGUE)) { - c->Message(15, "You must target a rogue bot!"); - } - else { + if((c->GetTarget() == nullptr) || (c->GetTarget() == c) || !c->GetTarget()->IsBot() || (c->GetTarget()->GetClass() != ROGUE)) + c->Message(15, "You must target a Rogue bot!"); + else entity_list.BotPickLock(c->GetTarget()->CastToBot()); - } return; } if(!strcasecmp(sep->arg[1], "summon")) { if((c->GetTarget() == nullptr) || (c->GetTarget() == c) || !c->GetTarget()->IsBot() || c->GetTarget()->IsPet()) - { c->Message(15, "You must target a bot!"); - } - else if(c->GetTarget()->IsMob() && !c->GetTarget()->IsPet()) - { + else if(c->GetTarget()->IsMob() && !c->GetTarget()->IsPet()) { Mob *b = c->GetTarget(); if(b) { - if(!b->IsBot()){ + if(!b->IsBot()) c->Message(15, "You must target a bot!"); - } else if((b->CastToBot()->GetBotOwnerCharacterID() != c->CharacterID())) { + else if((b->CastToBot()->GetBotOwnerCharacterID() != c->CharacterID())) b->CastToBot()->BotGroupSay(b->CastToBot(), "You can only summon your own bots."); - } else { + else { b->SetTarget(c->CastToMob()); b->Warp(glm::vec3(c->GetPosition())); } @@ -9927,7 +9233,6 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(c->GetTarget()->IsBot() && c->GetTarget()->CastToBot()->GetBotOwnerCharacterID() == c->CharacterID()) { Mob* b = c->GetTarget(); int x = c->GetTarget()->CastToBot()->GetBotItemsCount(&TempErrorMessage); - if(!TempErrorMessage.empty()) { c->Message(13, "Database Error: %s", TempErrorMessage.c_str()); return; @@ -9946,9 +9251,8 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { linker.SetLinkType(linker.linkItemInst); for(int i = EmuConstants::EQUIPMENT_BEGIN; i <= (EmuConstants::EQUIPMENT_END + 1); ++i) { - if((i == MainSecondary) && is2Hweapon) { + if((i == MainSecondary) && is2Hweapon) continue; - } inst = b->CastToBot()->GetBotItem(i == 22 ? 9999 : i); if (inst) @@ -9960,37 +9264,35 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(13, "Database Error: %s", TempErrorMessage.c_str()); return; } + if(item == nullptr) { c->Message(15, "I need something for my %s (Item %i)", equipped[i], (i == 22 ? 9999 : i)); continue; } + if((i == MainPrimary) && ((item->ItemType == ItemType2HSlash) || (item->ItemType == ItemType2HBlunt) || (item->ItemType == ItemType2HPiercing))) { is2Hweapon = true; } linker.SetItemInst(inst); - item_link = linker.GenerateLink(); - c->Message(15, "Using %s in my %s (Item %i)", item_link.c_str(), equipped[i], (i == 22 ? 9999 : i)); } - } else { - c->Message(15, "You must group your bot first."); } - } else { - c->Message(15, "You must target a bot first."); + else + c->Message(15, "You must group your bot first."); } + else + c->Message(15, "You must target a bot first."); + return; } if(!strcasecmp(sep->arg[1], "inventory") && !strcasecmp(sep->arg[2], "remove")) { - if((c->GetTarget() == nullptr) || (sep->arg[3][0] == '\0') || !c->GetTarget()->IsBot()) - { + if((c->GetTarget() == nullptr) || (sep->arg[3][0] == '\0') || !c->GetTarget()->IsBot()) { c->Message(15, "Usage: #bot inventory remove [slotid] (You must have a bot targeted) "); return; - } - else if(c->GetTarget()->IsBot() && c->GetTarget()->CastToBot()->GetBotOwnerCharacterID() == c->CharacterID()) - { + } else if(c->GetTarget()->IsBot() && c->GetTarget()->CastToBot()->GetBotOwnerCharacterID() == c->CharacterID()) { if(c->GetTradeskillObject() || (c->trade->state == Trading)) return; @@ -9999,6 +9301,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(15, "A bot has 22 slots in its inventory, please choose a slot between 0 and 21 or 9999."); return; } + const char* equipped[EmuConstants::EQUIPMENT_SIZE + 1] = {"Charm", "Left Ear", "Head", "Face", "Right Ear", "Neck", "Shoulders", "Arms", "Back", "Left Wrist", "Right Wrist", "Range", "Hands", "Primary Hand", "Secondary Hand", "Left Finger", "Right Finger", "Chest", "Legs", "Feet", "Waist", "Ammo", "Powersource" }; @@ -10023,7 +9326,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { failedLoreCheck = true; } } - + if(c->CheckLoreConflict(itm)) failedLoreCheck = true; } @@ -10031,9 +9334,9 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(itm) { c->PushItemOnCursor(*itminst, true); Bot *gearbot = c->GetTarget()->CastToBot(); - if((slotId == MainRange)||(slotId == MainAmmo)||(slotId == MainPrimary)||(slotId == MainSecondary)) { + if((slotId == MainRange)||(slotId == MainAmmo)||(slotId == MainPrimary)||(slotId == MainSecondary)) gearbot->SetBotArcher(false); - } + gearbot->RemoveBotItemBySlot(slotId, &TempErrorMessage); if(!TempErrorMessage.empty()) { @@ -10125,7 +9428,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(c->IsGrouped()) { Group *g = entity_list.GetGroupByClient(c); - for (int i=0; imembers[i] && g->members[i]->IsEngaged()) { c->Message(15, "You can't update bots while you are engaged."); return; @@ -10138,21 +9441,20 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { bot->SetPetChooser(false); bot->CalcBotStats(); } else { - if(c->GetFeigned()) { + if(c->GetFeigned()) c->Message(15, "You cannot update bots while feigned."); - } else { - c->Message(15, "You must target your bot first"); - } + else + c->Message(15, "You must target your bot first."); } - } else { - c->Message(15, "You must target a bot first"); } + else + c->Message(15, "You must target a bot first."); return; } //Bind - if(!strcasecmp(sep->arg[1], "bindme")) { + if(!strcasecmp(sep->arg[1], "bind")) { Mob *binder = nullptr; bool hasbinder = false; if(c->IsGrouped()) { @@ -10164,12 +9466,12 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { binder = g->members[i]; } } - + if(!hasbinder) c->Message(15, "You must have a Cleric in your group."); } } - + if(hasbinder) { binder->CastToBot()->BotGroupSay(binder->CastToBot(), "Attempting to bind you %s.", c->GetName()); binder->CastToNPC()->CastSpell(35, c->GetID(), 1, -1, -1); @@ -10178,7 +9480,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } // Rune - if(!strcasecmp(sep->arg[1], "runeme")) { + if(!strcasecmp(sep->arg[1], "rune")) { Mob *runeer = nullptr; bool hasruneer = false; if(c->IsGrouped()) { @@ -10190,16 +9492,16 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { runeer = g->members[i]; } } - + if(!hasruneer) c->Message(15, "You must have an Enchanter in your group."); } } - + if(hasruneer) { - if (c->GetLevel() <= 12) { + if (c->GetLevel() <= 12) runeer->CastToBot()->BotGroupSay(runeer->CastToBot(), "I need to be level 13 or higher for this..."); - } else if ((c->GetLevel() >= 13) && (c->GetLevel() <= 21)) { + else if ((c->GetLevel() >= 13) && (c->GetLevel() <= 21)) { runeer->CastToBot()->BotGroupSay(runeer->CastToBot(), "Casting Rune I..."); runeer->CastSpell(481, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() >= 22) && (c->GetLevel() <= 32)) { @@ -10260,26 +9562,26 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { switch(TrackerClass) { case RANGER: if(!strcasecmp(sep->arg[2], "all")) { - Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Tracking everything", c->GetName()); + Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Tracking everything."); entity_list.ShowSpawnWindow(c, RangeR, false); } else if(!strcasecmp(sep->arg[2], "rare")) { - Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Selective tracking", c->GetName()); + Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Selective tracking."); entity_list.ShowSpawnWindow(c, RangeR, true); } else if(!strcasecmp(sep->arg[2], "near")) { - Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Tracking mobs nearby", c->GetName()); + Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Tracking mobs nearby."); entity_list.ShowSpawnWindow(c, RangeD, false); } else - Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "You want to [track all], [track near], or [track rare]?", c->GetName()); + Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Do you want to %s, %s, or %s?", Tracker->CastToBot()->CreateSayLink(c, "#bot track all", "track all").c_str(), Tracker->CastToBot()->CreateSayLink(c, "#bot track near", "track near").c_str(), Tracker->CastToBot()->CreateSayLink(c, "#bot track rare", "track rare").c_str()); break; case BARD: if(TrackerClass != RANGER) - Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Tracking up", c->GetName()); + Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Tracking up."); entity_list.ShowSpawnWindow(c, RangeB, false); break; case DRUID: if(TrackerClass = BARD) - Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Tracking up", c->GetName()); + Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Tracking up."); entity_list.ShowSpawnWindow(c, RangeD, false); break; default: @@ -10337,9 +9639,9 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { || !strcasecmp(sep->arg[2], "blindness") && (c->GetLevel() <= 3) || !strcasecmp(sep->arg[2], "disease") && (c->GetLevel() <= 4) || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 1)) { - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have the needed level yet", sep->arg[2]); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I am not the required level yet."); } else - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want [cure poison], [cure disease], [cure curse], or [cure blindness]?", c->GetName()); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want to cure %s, %s, %s, or %s?", Curer->CastToBot()->CreateSayLink(c, "#bot cure poison", "poison").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure disease", "disease").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure curse", "curse").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure blindness", "blindness").c_str()); break; case SHAMAN: @@ -10350,16 +9652,16 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Trying to cure us of %s.", sep->arg[2]); Curer->CastToBot()->Bot_Command_Cure(2, Curer->GetLevel()); } else if(!strcasecmp(sep->arg[2], "curse")) { - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have that spell", sep->arg[2]); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have that spell."); } else if(!strcasecmp(sep->arg[2], "blindness") && (c->GetLevel() >= 7)) { Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Trying to cure us of %s.", sep->arg[2]); Curer->CastToBot()->Bot_Command_Cure(4, Curer->GetLevel()); } else if (!strcasecmp(sep->arg[2], "blindness") && (c->GetLevel() <= 7) || !strcasecmp(sep->arg[2], "disease") && (c->GetLevel() <= 1) || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 2)) { - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have the needed level yet", sep->arg[2]); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I am not the required level yet."); } else - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want [cure poison], [cure disease], or [cure blindness]?", c->GetName()); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want to cure %s, %s, or %s?", Curer->CastToBot()->CreateSayLink(c, "#bot cure poison", "poison").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure disease", "disease").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure blindness", "blindness").c_str()); break; case DRUID: @@ -10370,14 +9672,14 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Trying to cure us of %s.", sep->arg[2]); Curer->CastToBot()->Bot_Command_Cure(2, Curer->GetLevel()); } else if(!strcasecmp(sep->arg[2], "curse")) { // Fire level 1 - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have that spell", sep->arg[2]); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have that spell."); } else if(!strcasecmp(sep->arg[2], "blindness") && (c->GetLevel() >= 13)) { - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have that spell", sep->arg[2]); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have that spell."); } else if (!strcasecmp(sep->arg[2], "disease") && (c->GetLevel() <= 4) || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 5)) { - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have the needed level yet", sep->arg[2]) ; + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I am not the required level yet."); } else - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want [cure poison], or [cure disease]?", c->GetName()); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want to cure %s or %s?", Curer->CastToBot()->CreateSayLink(c, "#bot cure poison", "poison").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure disease", "disease").c_str()); break; default: c->Message(15, "You must have a Cleric, Shaman, or Druid in your group."); @@ -10387,7 +9689,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } //Mez - if(!strcasecmp(sep->arg[1], "ai") && !strcasecmp(sep->arg[2], "mez")) { + if(!strcasecmp(sep->arg[1], "mez")) { Mob *target = c->GetTarget(); if(target == nullptr || target == c || target->IsBot() || (target->IsPet() && target->GetOwner() && target->GetOwner()->IsBot())) { c->Message(15, "You must select a monster"); @@ -10405,7 +9707,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { mezzer->CastToBot()->MesmerizeTarget(target); } } - + if(!hasmezzer) c->Message(15, "You must have an Enchanter in your group."); } @@ -10424,22 +9726,22 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { case ENCHANTER: if(casterlevel >= 15) hascaster = true; - + break; case WIZARD: if(casterlevel >= 14) hascaster = true; - + break; case NECROMANCER: if(casterlevel >= 17) hascaster = true; - + break; case MAGICIAN: if(casterlevel >= 13) hascaster = true; - + break; default: break; @@ -10451,19 +9753,19 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } } - + if(!hascaster) c->Message(15, "You don't see anyone in your group that can cast Identify."); } else c->Message(15, "You don't see anyone in your group that can cast Identify."); - + return; } //Resurrect - if(!strcasecmp(sep->arg[1], "resurrectme")) { + if(!strcasecmp(sep->arg[1], "resurrect")) { Mob *target = c->GetTarget(); - if(target == nullptr || !target->IsCorpse()) { + if(target == nullptr || !target->IsPlayerCorpse()) { c->Message(15, "You must select a corpse!"); return; } @@ -10480,16 +9782,16 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { break; } } - + if(!hasrezzer) c->Message(15, "You must have a Cleric in your group!"); } else c->Message(15, "You must have a Cleric in your group!"); - + return; } - if(!strcasecmp(sep->arg[1], "magepet")) { + if(!strcasecmp(sep->arg[1], "setpet")) { if(c->GetTarget() && c->GetTarget()->IsBot() && (c->GetTarget()->GetClass() == MAGICIAN)) { if(c->GetTarget()->CastToBot()->GetBotOwnerCharacterID() == c->CharacterID()) { int botlevel = c->GetTarget()->GetLevel(); @@ -10498,7 +9800,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->GetTarget()->CastToBot()->BotGroupSay(c->GetTarget()->CastToBot(), "I don't have any pets yet."); return; } - + if(!strcasecmp(sep->arg[2], "water")) { c->GetTarget()->CastToBot()->SetPetChooserID(0); } else if(!strcasecmp(sep->arg[2], "fire")) { @@ -10526,7 +9828,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } else c->GetTarget()->CastToBot()->SetPetChooserID(4); } - + if(c->GetTarget()->GetPet()) { uint16 id = c->GetTarget()->GetPetID(); c->GetTarget()->SetPetID(0); @@ -10535,7 +9837,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } else c->Message(15, "You must target your Magician bot!"); - + return; } @@ -10545,7 +9847,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(15, "You must select player with his corpse in the zone!"); return; } - + if(c->IsGrouped()) { bool hassummoner = false; Mob *t = c->GetTarget(); @@ -10579,10 +9881,10 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } } - + if (!hassummoner) c->Message(15, "You must have a Necromancer or Shadow Knight in your group."); - + return; } } @@ -10603,9 +9905,10 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(pacer->Bot_Command_CalmTarget(target)) { if(target->FindType(SE_Lull) || target->FindType(SE_Harmony) || target->FindType(SE_InstantHate)) c->Message(0, "I have successfully pacified %s.", target->GetCleanName()); - + return; - } else + } + else c->Message(0, "I failed to pacify %s.", target->GetCleanName()); } // seperated cleric and chanter so chanter is primary @@ -10616,9 +9919,10 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(pacer->Bot_Command_CalmTarget(target)) { if(target->FindType(SE_Lull) || target->FindType(SE_Harmony) || target->FindType(SE_InstantHate)) c->Message(0, "I have successfully pacified %s.", target->GetCleanName()); - + return; - } else + } + else c->Message(0, "I failed to pacify %s.", target->GetCleanName()); } } @@ -10635,7 +9939,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(15, "You must select a monster!"); return; } - + uint32 DBtype = c->GetTarget()->GetBodyType(); Mob *Charmer; uint32 CharmerClass = 0; @@ -10668,30 +9972,33 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { switch(CharmerClass) { case ENCHANTER: if (c->GetLevel() >= 11) { - Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Trying to charm %s.", target->GetCleanName(), sep->arg[2]); - Charmer->CastToBot()->Bot_Command_CharmTarget (1,target); - } else if (c->GetLevel() <= 10){ - Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "I don't have the required level yet.", sep->arg[2]); - } else - Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Mob level is too high or can't be charmed.", c->GetName()); + Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Trying to charm %s.", target->GetCleanName()); + Charmer->CastToBot()->Bot_Command_CharmTarget(1, target); + } + else if (c->GetLevel() <= 10) + Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "I am not the required level yet."); + else + Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Mob level is too high or can't be charmed."); break; case NECROMANCER: if ((c->GetLevel() >= 18) && (DBtype == 3)) { - Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Trying to charm %s.", target->GetCleanName(), sep->arg[2]); - Charmer->CastToBot()->Bot_Command_CharmTarget (2,target); - } else if (c->GetLevel() <= 17){ - Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "I don't have the required level yet.", sep->arg[2]); - } else - Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Mob is not undead.", c->GetName()); + Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Trying to charm %s.", target->GetCleanName()); + Charmer->CastToBot()->Bot_Command_CharmTarget(2, target); + } + else if (c->GetLevel() <= 17) + Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "I am not the required level yet."); + else + Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Mob is not undead."); break; case DRUID: if ((c->GetLevel() >= 13) && (DBtype == 21)) { - Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Trying to charm %s.", target->GetCleanName(), sep->arg[2]); - Charmer->CastToBot()->Bot_Command_CharmTarget (3,target); - } else if (c->GetLevel() <= 12){ - Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "I don't have the required level yet.", sep->arg[2]); - } else - Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Mob is not an animal.", c->GetName()); + Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Trying to charm %s.", target->GetCleanName()); + Charmer->CastToBot()->Bot_Command_CharmTarget(3, target); + } + else if (c->GetLevel() <= 12) + Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "I am not the required level yet."); + else + Charmer->CastToBot()->BotGroupSay(Charmer->CastToBot(), "Mob is not an animal."); break; default: c->Message(15, "You must have an Enchanter, Necromancer, or Druid in your group."); @@ -10717,11 +10024,13 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->GetTarget()->CastToBot()->SetBotCharmer(true); c->GetTarget()->CastToBot()->BotGroupSay(c->GetTarget()->CastToBot(), "Available for Dire Charm command."); } - } else + } + else c->Message(15, "You must target your Enchanter, Necromancer, or Druid bot."); - } else + } + else c->Message(15, "You must target an Enchanter, Necromancer, or Druid bot."); - + return; } @@ -10764,30 +10073,33 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { switch(DirerClass) { case ENCHANTER: if (c->GetLevel() >= 55) { - Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Trying to dire charm %s.", target->GetCleanName(), sep->arg[2]); + Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Trying to dire charm %s.", target->GetCleanName()); Direr->CastToBot()->Bot_Command_DireTarget (1,target); - } else if (c->GetLevel() <= 55){ - Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "I don't have the required level yet.", sep->arg[2]); - } else - Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Mob level is too high or can't be charmed.", c->GetName()); + } + else if (c->GetLevel() <= 55) + Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "I am not the required level yet."); + else + Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Mob level is too high or can't be charmed."); break; case NECROMANCER: if ((c->GetLevel() >= 55) && (DBtype == 3)) { - Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Trying to dire charm %s.", target->GetCleanName(), sep->arg[2]); + Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Trying to dire charm %s.", target->GetCleanName()); Direr->CastToBot()->Bot_Command_DireTarget (2,target); - } else if (c->GetLevel() <= 55){ - Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "I don't have the required level yet.", sep->arg[2]); - } else - Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Mob is not undead.", c->GetName()); + } + else if (c->GetLevel() <= 55) + Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "I am not the required level yet."); + else + Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Mob is not undead."); break; case DRUID: if ((c->GetLevel() >= 55) && (DBtype == 21)) { - Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Trying to dire charm %s.", target->GetCleanName(), sep->arg[2]); + Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Trying to dire charm %s.", target->GetCleanName()); Direr->CastToBot()->Bot_Command_DireTarget (3,target); - } else if (c->GetLevel() <= 55){ - Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "I don't have the required level yet.", sep->arg[2]); - } else - Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Mob is not an animal.", c->GetName()); + } + else if (c->GetLevel() <= 55) + Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "I am not the required level yet."); + else + Direr->CastToBot()->BotGroupSay(Direr->CastToBot(), "Mob is not an animal."); break; default: c->Message(15, "You must have an Enchanter, Necromancer, or Druid in your group."); @@ -10809,23 +10121,24 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { evac = g->members[i]; } } - + if(!hasevac) c->Message(15, "You must have a Druid in your group."); } } - + if((hasevac) && (c->GetLevel() >= 18)) { evac->CastToBot()->BotGroupSay(evac->CastToBot(), "Attempting to evacuate you, %s.", c->GetName()); evac->CastToClient()->CastSpell(2183, c->GetID(), 1, -1, -1); - } else if((hasevac) && (c->GetLevel() <= 17)) - evac->CastToBot()->BotGroupSay(evac->CastToBot(), "I'm not level 18 yet.", c->GetName()); - + } + else if((hasevac) && (c->GetLevel() <= 17)) + evac->CastToBot()->BotGroupSay(evac->CastToBot(), "I'm not level 18 yet."); + return; } // Sow - if ((!strcasecmp(sep->arg[1], "sow")) && (c->IsGrouped())) { + if ((!strcasecmp(sep->arg[1], "speed")) && (c->IsGrouped())) { Mob *Sower; uint32 SowerClass = 0; Group *g = c->GetGroup(); @@ -10863,37 +10176,37 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { switch(SowerClass) { case DRUID: if ((!strcasecmp(sep->arg[2], "regular")) && (zone->CanCastOutdoor()) && (c->GetLevel() >= 10)) { - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting sow..."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting Spirit of Wolf."); Sower->CastSpell(278, c->GetID(), 1, -1, -1); } else if ((!strcasecmp(sep->arg[2], "regular")) && (zone->CanCastOutdoor()) && (c->GetLevel() <= 10)) Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I'm not level 10 yet."); else if ((!strcasecmp(sep->arg[2], "wolf")) && zone->CanCastOutdoor() && (c->GetLevel() >= 20)) { - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting group wolf..."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting group Spirit of Wolf."); Sower->CastSpell(428, c->GetID(), 1, -1, -1); } else if ((!strcasecmp(sep->arg[2], "wolf")) && (c->GetLevel() <= 20)) Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I'm not level 20 yet."); else if ((!strcasecmp(sep->arg[2], "feral")) && (c->GetLevel() >= 50)) { - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting Feral Pack..."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting Feral Pack."); Sower->CastSpell(4058, c->GetID(), 1, -1, -1); } else if ((!strcasecmp(sep->arg[2], "feral")) && (c->GetLevel() <= 50)) Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I'm not level 50 yet."); else if ((!strcasecmp(sep->arg[2], "shrew")) && (c->GetLevel() >= 35)) { - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting Pack Shrew..."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting Pack Shrew."); Sower->CastSpell(4055, c->GetID(), 1, -1, -1); } else if ((!strcasecmp(sep->arg[2], "wolf")) && (c->GetLevel() <= 35)) Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I'm not level 35 yet."); else if ((!zone->CanCastOutdoor()) && (!strcasecmp(sep->arg[2], "regular")) || (!zone->CanCastOutdoor()) && (!strcasecmp(sep->arg[2], "wolf"))) - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try [sow shrew] if you're 35 or higher, or [sow feral] if you're 50 or higher."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try %s if you're 35 or higher, or %s if you're 50 or higher.", Sower->CastToBot()->CreateSayLink(c, "#bot speed shrew", "Pack Shrew").c_str(), Sower->CastToBot()->CreateSayLink(c, "#bot speed feral", "Feral Pack").c_str()); else if (!zone->CanCastOutdoor()) - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try [sow shrew] if you're 35 or higher, or [sow feral] if you're 50 or higher."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try 5s if you're 35 or higher, or %s if you're 50 or higher.", Sower->CastToBot()->CreateSayLink(c, "#bot speed shrew", "Pack Shrew").c_str(), Sower->CastToBot()->CreateSayLink(c, "#bot speed feral", "Feral Pack").c_str()); else if (zone->CanCastOutdoor()) - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Do you want [sow regular] or [sow wolf]?"); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Do you want %s or %s?", Sower->CastToBot()->CreateSayLink(c, "#bot speed regular", "Spirit of Wolf").c_str(), Sower->CastToBot()->CreateSayLink(c, "#bot speed wolf", "Group Spirit of Wolf").c_str()); else if (!zone->CanCastOutdoor()) - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try [sow shrew] if you're 35 or higher, or [sow feral] if you're 50 or higher."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try %s if you're 35 or higher, or %s if you're 50 or higher.", Sower->CastToBot()->CreateSayLink(c, "#bot speed shrew", "Pack Shrew").c_str(), Sower->CastToBot()->CreateSayLink(c, "#bot speed feral", "Feral").c_str()); break; case SHAMAN: if ((zone->CanCastOutdoor()) && (c->GetLevel() >= 9)) { @@ -10939,7 +10252,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { Group *g = c->GetGroup(); Mob *target = c->GetTarget(); if(target == nullptr || (!target->IsClient() && (c->GetTarget()->CastToBot()->GetBotOwner() != c))) - c->Message(15, "You must select a player or bot you own"); + c->Message(15, "You must select a player or bot you own!"); else if(g) { for(int i = 0; i < MAX_GROUP_MEMBERS; i++){ @@ -10986,6 +10299,25 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { // Gate if ((!strcasecmp(sep->arg[1], "gate")) && (c->IsGrouped())) { + const char* druidgate[25][4] = { { "#bot gate karana", "karana", "North Karana", "550" }, { "#bot gate commons", "commons", "West Commonlands", "551" }, + { "#bot gate tox", "tox", "Toxxulia Forest", "552" }, { "#bot gate butcher", "butcher", "Butcherblock Mountains", "553" }, { "#bot gate lava", "lava", "Lavastorm Mountains", "554" }, + { "#bot gate ro", "ro", "South Ro", "555" }, { "#bot gate feerott", "feerrott", "Feerrott", "556" }, { "#bot gate steamfont", "steamfont", "Steamfont Mountains", "557" }, + { "#bot gate misty", "misty", "Misty Thicket", "558" }, { "#bot gate wakening", "wakening", "Wakening Lands", "1398" }, { "#bot gate iceclad", "iceclad", "Ieclad Ocean", "1434" }, + { "#bot gate divide", "divide", "The Great Divide", "1438" }, { "#bot gate cobalt", "cobalt", "Cobalt Scar", "1440" }, { "#bot gate combines", "combines", "The Combines", "1517" }, + { "#bot gate surefall", "surefall", "Surefall Glade", "2020" }, { "#bot gate grimling", "grimling", "Grimling Forest", "2419" }, { "#bot gate twilight", "twilight", "The Twilight Sea", "2424" }, + { "#bot gate dawnshroud", "dawnshroud", "Dawnshroud Peak", "2429" }, { "#bot gate nexus", "nexus", "The Nexus", "2432" }, { "#bot gate pok", "pok", "Plane of Knowledge", "3184" }, + { "#bot gate stonebrunt", "stonebrunt", "Stonebrunt Mountains", "3792" }, { "#bot gate bloodfields", "bloodfields", "Bloodfields", "6184" }, + { "#bot gate emerald", "emerald", "The Emerald Jungle", "1737" }, { "#bot gate skyfire", "skyfire", "Skyfire Mountains", "1736" }, { "#bot gate slaughter", "slaughter", "Wall of Slaughter", "6179" } }; + const char* wizardgate[24][4] = { { "#bot gate commons", "commons", "West Commonlands", "566" }, { "#bot gate fay", "fay", "Greater Faydark", "563" }, + { "#bot gate ro", "ro", "South Ro", "567" }, { "#bot gate tox", "tox", "Toxxulia Forest", "561" }, { "#bot gate nk", "nk", "North Karana", "562" }, + { "#bot gate nek", "nek", "Nektulos Forest", "564" }, { "#bot gate wakening", "wakening", "Wakening Lands", "1399" }, { "#bot gate iceclad", "iceclad", "Iceclad Ocean", "1418" }, + { "#bot gate divide", "divide", "The Great Divide", "1423" }, { "#bot gate cobalt", "cobalt", "Cobaltscar", "1425" }, { "#bot gate dreadlands", "dreadlands", "Dreadlands", "1516" }, + { "#bot gate wk", "wk", "West Karana", "568" }, { "#bot gate twilight", "twilight", "Twilight Sea", "2425" }, { "#bot gate dawnshroud", "dawnshroud", "Dawnshroud Peak", "2430" }, + { "#bot gate nexus", "nexus", "Nexus", "2944" }, { "#bot gate pok", "pok", "Plane of Knowledge", "3180" }, { "#bot gate wos", "wos", "Wall of Slaughter", "6178" }, + { "#bot gate grimling", "grimling", "Grimling Forest", "2420" }, { "#bot gate emerald", "emerald", "Emerald Jungle", "1739" }, { "#bot gate hateplane", "hateplane", "Plane of Hate", "666" }, + { "#bot gate airplane", "airplane", "Plane of Sky", "674" }, { "#bot gate skyfire", "skyfire", "Skyfire Mountains", "1738" }, + { "#bot gate bloodfields", "bloodfields", "Bloodfields", "6183" }, { "#bot gate stonebrunt", "stonebrunt", "Stonebrunt Mountains", "3793" } }; + bool valid = false; Mob *Gater; uint32 GaterClass = 0; Group *g = c->GetGroup(); @@ -11009,212 +10341,36 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } switch(GaterClass) { - case DRUID: - if ((!strcasecmp(sep->arg[2], "karana")) && (c->GetLevel() >= 25) ) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Karana."); - Gater->CastSpell(550, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "commons")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Commons."); - Gater->CastSpell(551, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "tox")) && (c->GetLevel() >= 25)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Toxxulia."); - Gater->CastSpell(552, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "butcher")) && (c->GetLevel() >= 25)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Butcherblock."); - Gater->CastSpell(553, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "lava")) && (c->GetLevel() >= 30)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Lavastorm."); - Gater->CastSpell(554, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "ro")) && (c->GetLevel() >= 32)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Ro."); - Gater->CastSpell(555, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "feerrott")) && (c->GetLevel() >= 32)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Feerrott."); - Gater->CastSpell(556, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "steamfont")) && (c->GetLevel() >= 31)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Steamfont."); - Gater->CastSpell(557, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "misty")) && (c->GetLevel() >= 36)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Misty."); - Gater->CastSpell(558, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "wakening")) && (c->GetLevel() >= 40)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Wakening Lands."); - Gater->CastSpell(1398, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "iceclad")) && (c->GetLevel() >= 32)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Iceclad Ocean."); - Gater->CastSpell(1434, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "divide")) && (c->GetLevel() >= 36)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of The Great Divide."); - Gater->CastSpell(1438, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "cobalt")) && (c->GetLevel() >= 42)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Cobalt Scar."); - Gater->CastSpell(1440, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "combines")) && (c->GetLevel() >= 33)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of The Combines."); - Gater->CastSpell(1517, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "surefall")) && (c->GetLevel() >= 26)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Surefall Glade."); - Gater->CastSpell(2020, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "grimling")) && (c->GetLevel() >= 29)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Grimling Forest."); - Gater->CastSpell(2419, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "twilight")) && (c->GetLevel() >= 33)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Twilight."); - Gater->CastSpell(2424, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "dawnshroud")) && (c->GetLevel() >= 37)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Dawnshroud."); - Gater->CastSpell(2429, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "nexus")) && (c->GetLevel() >= 26)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of The Nexus."); - Gater->CastSpell(2432, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "pok")) && (c->GetLevel() >= 38)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Knowledge."); - Gater->CastSpell(3184, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "stonebrunt")) && (c->GetLevel() >= 28)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Stonebrunt Mountains."); - Gater->CastSpell(3792, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "bloodfields")) && (c->GetLevel() >= 55)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Bloodfields."); - Gater->CastSpell(6184, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "emerald")) && (c->GetLevel() >= 39)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Wind of the South."); - Gater->CastSpell(1737, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "skyfire")) && (c->GetLevel() >= 44)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Wind of the North."); - Gater->CastSpell(1736, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "slaughter")) && (c->GetLevel() >= 64)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Slaughter."); - Gater->CastSpell(6179, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "karana") - || !strcasecmp(sep->arg[2], "tox") - || !strcasecmp(sep->arg[2], "butcher") && (c->GetLevel() <= 25)) - || !strcasecmp(sep->arg[2], "commons") && (c->GetLevel() <= 27) - || (!strcasecmp(sep->arg[2], "ro") - || !strcasecmp(sep->arg[2], "feerrott") && (c->GetLevel() <= 32)) - || !strcasecmp(sep->arg[2], "steamfont") && (c->GetLevel() <= 31) - || !strcasecmp(sep->arg[2], "misty") && (c->GetLevel() <= 36) - || !strcasecmp(sep->arg[2], "lava") && (c->GetLevel() <= 30) - || !strcasecmp(sep->arg[2], "wakening") && (c->GetLevel() <= 40) - || !strcasecmp(sep->arg[2], "iceclad") && (c->GetLevel() <= 32) - || !strcasecmp(sep->arg[2], "divide") && (c->GetLevel() <= 38) - || !strcasecmp(sep->arg[2], "cobalt") && (c->GetLevel() <= 42) - || !strcasecmp(sep->arg[2], "combines") && (c->GetLevel() <= 33) - || !strcasecmp(sep->arg[2], "surefall") && (c->GetLevel() <= 26) - || !strcasecmp(sep->arg[2], "grimling") && (c->GetLevel() <= 29) - || !strcasecmp(sep->arg[2], "twilight") && (c->GetLevel() <= 33) - || !strcasecmp(sep->arg[2], "dawnshroud") && (c->GetLevel() <= 37) - || !strcasecmp(sep->arg[2], "nexus") && (c->GetLevel() <= 26) - || !strcasecmp(sep->arg[2], "pok") && (c->GetLevel() <= 38) - || !strcasecmp(sep->arg[2], "stonebrunt") && (c->GetLevel() <= 28) - || !strcasecmp(sep->arg[2], "bloodfields") && (c->GetLevel() <= 55) - || !strcasecmp(sep->arg[2], "emerald") && (c->GetLevel() <= 38) - || !strcasecmp(sep->arg[2], "skyfire") && (c->GetLevel() <= 43) - || !strcasecmp(sep->arg[2], "wos") && (c->GetLevel() <= 64)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "I don't have the needed level yet."); - } else - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "With the proper level I can [gate] to [karana], [commons], [tox], [butcher], [lava], [ro], [feerrott], [steamfont], [misty], [wakening], [iceclad], [divide], [cobalt], [combines], [surefall], [grimling], [twilight], [dawnshroud], [nexus], [pok], [stonebrunt], [bloodfields], [emerald], [skyfire] or [wos]."); + case DRUID: { + for (int i = 0; i < 25; i++) { + if (!strcasecmp(sep->arg[2], druidgate[i][1])) { + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Gating to %s!", druidgate[i][2]); + Gater->CastSpell(atoi(druidgate[i][3]), c->GetID(), 1, -1, -1); + valid = true; + } + } + if (!valid) { + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "With the proper level I can gate you to all of the following zones:"); + for (int i = 0; i < 25; i++) + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "%s", Gater->CastToBot()->CreateSayLink(c, druidgate[i][0], druidgate[i][2]).c_str()); + } break; - case WIZARD: - if ((!strcasecmp(sep->arg[2], "commons")) && (c->GetLevel() >= 35) ) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Common Portal."); - Gater->CastSpell(566, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "fay")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Fay Portal."); - Gater->CastSpell(563, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "ro")) && (c->GetLevel() >= 37)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Ro Portal."); - Gater->CastSpell(567, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "tox")) && (c->GetLevel() >= 25)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Toxxulia Portal."); - Gater->CastSpell(561, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "nk")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting North Karana Portal."); - Gater->CastSpell(562, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "nek")) && (c->GetLevel() >= 32)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Nektulos Portal."); - Gater->CastSpell(564, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "wakening")) && (c->GetLevel() >= 43)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Wakening Lands Portal."); - Gater->CastSpell(1399, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "iceclad")) && (c->GetLevel() >= 33)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Iceclad Ocean Portal."); - Gater->CastSpell(1418, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "divide")) && (c->GetLevel() >= 36)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Great Divide Portal."); - Gater->CastSpell(1423, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "cobalt")) && (c->GetLevel() >= 43)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Cobalt Scar Portal."); - Gater->CastSpell(1425, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "combines")) && (c->GetLevel() >= 34)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Combines Portal."); - Gater->CastSpell(1516, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "wk")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting West Karana Portal."); - Gater->CastSpell(568, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "twilight")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Twilight Portal."); - Gater->CastSpell(2425, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "dawnshroud")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Dawnshroud Portal."); - Gater->CastSpell(2430, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "nexus")) && (c->GetLevel() >= 29)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Nexus Portal."); - Gater->CastSpell(2944, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "pok")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Plane of Knowledge Portal."); - Gater->CastSpell(3180, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "wos")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Wall of Slaughter Portal."); - Gater->CastSpell(6178, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "grimling")) && (c->GetLevel() >= 29)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Fay Portal."); - Gater->CastSpell(2420, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "emerald")) && (c->GetLevel() >= 37)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Porting to Emerald Jungle."); - Gater->CastSpell(1739, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "hateplane")) && (c->GetLevel() >= 39)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Porting to Hate Plane."); - Gater->CastSpell(666, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "airplane")) && (c->GetLevel() >= 39)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Porting to Airplane."); - Gater->CastSpell(674, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "skyfire")) && (c->GetLevel() >= 36)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Porting to Skyfire."); - Gater->CastSpell(1738, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "bloodfields")) && (c->GetLevel() >= 55)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Bloodfields Portal."); - Gater->CastSpell(6183, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "stonebrunt")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Stonebrunt Portal."); - Gater->CastSpell(3793, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "commons") && (c->GetLevel() <= 35)) - || !strcasecmp(sep->arg[2], "fay") && (c->GetLevel() <= 27) - || (!strcasecmp(sep->arg[2], "ro") && (c->GetLevel() <= 37)) - || !strcasecmp(sep->arg[2], "tox") && (c->GetLevel() <= 25) - || !strcasecmp(sep->arg[2], "nk") && (c->GetLevel() <= 25) - || !strcasecmp(sep->arg[2], "nek") && (c->GetLevel() <= 32) - || !strcasecmp(sep->arg[2], "wakening") && (c->GetLevel() <= 43) - || !strcasecmp(sep->arg[2], "iceclad") && (c->GetLevel() <= 33) - || !strcasecmp(sep->arg[2], "divide") && (c->GetLevel() <= 36) - || !strcasecmp(sep->arg[2], "cobalt") && (c->GetLevel() <= 43) - || !strcasecmp(sep->arg[2], "combines") && (c->GetLevel() <= 34) - || !strcasecmp(sep->arg[2], "wk") && (c->GetLevel() <= 37) - || !strcasecmp(sep->arg[2], "twilight") && (c->GetLevel() <= 33) - || !strcasecmp(sep->arg[2], "dawnshroud") && (c->GetLevel() <= 39) - || !strcasecmp(sep->arg[2], "nexus") && (c->GetLevel() <= 29) - || (!strcasecmp(sep->arg[2], "pok") - || !strcasecmp(sep->arg[2], "hateplane") - || !strcasecmp(sep->arg[2], "airplane") && (c->GetLevel() <= 38)) - || !strcasecmp(sep->arg[2], "grimling") && (c->GetLevel() <= 29) - || !strcasecmp(sep->arg[2], "bloodfields") && (c->GetLevel() <= 55) - || !strcasecmp(sep->arg[2], "stonebrunt") && (c->GetLevel() <= 27) - || !strcasecmp(sep->arg[2], "emerald") && (c->GetLevel() <= 36) - || !strcasecmp(sep->arg[2], "skyfire") && (c->GetLevel() <= 36) - || !strcasecmp(sep->arg[2], "wos") && (c->GetLevel() <= 64)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "I don't have the needed level yet."); - } else - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "With the proper level I can [gate] to [commons], [fay], [ro], [tox], [nk], [wakening], [iceclad], [divide], [cobalt], [combines], [wk], [grimling], [twilight], [dawnshroud], [nexus], [pok], [stonebrunt], [bloodfields], [emerald], [skyfire], [hateplane], [airplane] or [wos].", c->GetName()); + } + case WIZARD: { + for (int i = 0; i < 24; i++) { + if (!strcasecmp(sep->arg[2], wizardgate[i][1])) { + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Gating to %s!", wizardgate[i][2]); + Gater->CastSpell(atoi(wizardgate[i][3]), c->GetID(), 1, -1, -1); + valid = true; + } + } + if (!valid) { + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "With the proper level I can gate you to all of the following zones:"); + for (int i = 0; i < 24; i++) + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "%s", Gater->CastToBot()->CreateSayLink(c, wizardgate[i][0], wizardgate[i][2]).c_str()); + } break; + } default: c->Message(15, "You must have a Druid or Wizard in your group."); break; @@ -11361,25 +10517,25 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if ((c->GetLevel() <= 14) && (!strcasecmp(sep->arg[2], "undead"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 14 yet."); else if ((!c->IsInvisible(c)) && (!c->invisible_undead) && (c->GetLevel() >= 14) && (!strcasecmp(sep->arg[2], "undead"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invis undead."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibility vs. Undead."); Inviser->CastSpell(235, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() <= 4) && (!strcasecmp(sep->arg[2], "live"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 4 yet."); else if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (c->GetLevel() >= 4) && (!strcasecmp(sep->arg[2], "live"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invisibilty."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibilty."); Inviser->CastSpell(42, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() <= 6) && (!strcasecmp(sep->arg[2], "see"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 6 yet."); else if ((c->GetLevel() >= 6) && (!strcasecmp(sep->arg[2], "see"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting see invisible."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting See Invisibility."); Inviser->CastSpell(80, c->GetID(), 1, -1, -1); } else if ((c->IsInvisible(c)) || (c->invisible_undead)) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I can't cast this if you're already invis-buffed."); else - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want [invis undead], [invis live] or [invis see]?"); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want %s, %s, or %s?", Inviser->CastToBot()->CreateSayLink(c, "#bot invis live", "Invisibility").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis undead", "Invisibility vs. Undead").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis see", "See Invisibility").c_str()); break; case MAGICIAN: if (!strcasecmp(sep->arg[2], "undead")) @@ -11387,47 +10543,47 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { else if ((c->GetLevel() <= 8) && (!strcasecmp(sep->arg[2], "live"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 8 yet."); else if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (c->GetLevel() >= 8) && (!strcasecmp(sep->arg[2], "live"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invisibilty."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibilty."); Inviser->CastSpell(42, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() <= 16) && (!strcasecmp(sep->arg[2], "see"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 16 yet."); else if ((c->GetLevel() >= 16) && (!strcasecmp(sep->arg[2], "see"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting see invisible."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting See Invisibility."); Inviser->CastSpell(80, c->GetID(), 1, -1, -1); } else if ((c->IsInvisible(c)) || (c->invisible_undead)) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I can't cast this if you're already invis-buffed."); else - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want [invis live] or [invis see]?"); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want %s or %s?", Inviser->CastToBot()->CreateSayLink(c, "#bot invis live", "Invisibility").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis see", "see Invisibility").c_str()); break; case WIZARD: if ((c->GetLevel() <= 39) && (!strcasecmp(sep->arg[2], "undead"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 39 yet."); else if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (c->GetLevel() >= 39) && (!strcasecmp(sep->arg[2], "undead"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invis undead."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibility vs. Undead."); Inviser->CastSpell(235, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() <= 16) && (!strcasecmp(sep->arg[2], "live"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 16 yet."); else if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (c->GetLevel() >= 16) && (!strcasecmp(sep->arg[2], "live"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invisibilty."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibilty."); Inviser->CastSpell(42, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() <= 4) && (!strcasecmp(sep->arg[2], "see"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 6 yet."); else if ((c->GetLevel() >= 4) && (!strcasecmp(sep->arg[2], "see"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting see invisible."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting See Invisibility."); Inviser->CastSpell(80, c->GetID(), 1, -1, -1); } else if ((c->IsInvisible(c)) || (c->invisible_undead)) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I can't cast this if you're already invis-buffed."); else - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want [invis undead], [invis live] or [invis see]?"); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want %s, %s, or %s?", Inviser->CastToBot()->CreateSayLink(c, "#bot invis undead", "Invisibility vs. Undead").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis live", "Invisibility").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis see", "See Invisibility").c_str()); break; case NECROMANCER: if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (!strcasecmp(sep->arg[2], "undead"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invis undead."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibility vs. Undead."); Inviser->CastSpell(235, c->GetID(), 1, -1, -1); } else if (!strcasecmp(sep->arg[2], "see")) @@ -11437,7 +10593,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { else if ((c->IsInvisible(c))|| (c->invisible_undead)) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I can't cast this if you're already invis-buffed."); else - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I only have [invis undead]"); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I only have %s.", Inviser->CastToBot()->CreateSayLink(c, "#bot invis undead", "Invisibility vs. Undead").c_str()); break; case DRUID: if (!strcasecmp(sep->arg[2], "undead")) @@ -11448,7 +10604,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Superior Camouflage."); Inviser->CastSpell(34, c->GetID(), 1, -1, -1); } else if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (c->GetLevel() >= 4) && (!strcasecmp(sep->arg[2], "live")) && (zone->CanCastOutdoor())) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Camouflage..."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Camouflage."); Inviser->CastSpell(247, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() >= 4) && (!strcasecmp(sep->arg[2], "live")) && (!zone->CanCastOutdoor())) @@ -11456,13 +10612,13 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { else if ((c->GetLevel() <= 13) && (!strcasecmp(sep->arg[2], "see"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 13 yet."); else if ((c->GetLevel() >= 13) && (!strcasecmp(sep->arg[2], "see"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting see invisible."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting See Invisibility."); Inviser->CastSpell(80, c->GetID(), 1, -1, -1); } else if ((c->IsInvisible(c)) || (c->invisible_undead)) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I can't cast this if you're already invis-buffed."); else - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want [invis live] or [invis see]?"); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want %s or %s?", Inviser->CastToBot()->CreateSayLink(c, "#bot invis live", "Invisibility").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis see", "See Invisibility").c_str()); break; default: c->Message(15, "You must have a Enchanter, Magician, Wizard, Druid, or Necromancer in your group."); @@ -11589,79 +10745,79 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { switch(ResisterClass) { case CLERIC: if(!strcasecmp(sep->arg[2], "poison") && (c->GetLevel() >= 6)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting poison protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Poison protection."); Resister->CastToBot()->Bot_Command_Resist(1, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "disease") && (c->GetLevel() >= 11)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting disease protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Disease protection."); Resister->CastToBot()->Bot_Command_Resist(2, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "fire") && (c->GetLevel() >= 8)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting fire protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Fire protection."); Resister->CastToBot()->Bot_Command_Resist(3, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "cold") && (c->GetLevel() >= 13)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting cold protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Cold protection."); Resister->CastToBot()->Bot_Command_Resist(4, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() >= 16)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting magic protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Magic protection."); Resister->CastToBot()->Bot_Command_Resist(5, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() <= 16) || !strcasecmp(sep->arg[2], "cold") && (c->GetLevel() <= 13) || !strcasecmp(sep->arg[2], "fire") && (c->GetLevel() <= 8) || !strcasecmp(sep->arg[2], "disease") && (c->GetLevel() <= 11) || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 6)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "I don't have the required level yet."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "I am not the required level yet."); } else - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want [resist poison], [resist disease], [resist fire], [resist cold], or [resist magic]?"); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want %s, %s, %s, %s, or %s?", Resister->CastToBot()->CreateSayLink(c, "#bot resist poison", "Resist Poison").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot resist disease", "Resist Disease").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis fire", "Resist Fire").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis cold", "Resist Cold").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis magic", "Resist Magic").c_str()); break; case SHAMAN: if(!strcasecmp(sep->arg[2], "poison") && (c->GetLevel() >= 20)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting poison protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Poison protection."); Resister->CastToBot()->Bot_Command_Resist(12, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "disease") && (c->GetLevel() >= 8)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting disease protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Disease protection."); Resister->CastToBot()->Bot_Command_Resist(13, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "fire") && (c->GetLevel() >= 5)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting fire protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Fire protection."); Resister->CastToBot()->Bot_Command_Resist(14, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "cold") && (c->GetLevel() >= 1)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting cold protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Cold protection."); Resister->CastToBot()->Bot_Command_Resist(15, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() >= 19)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting magic protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Magic protection."); Resister->CastToBot()->Bot_Command_Resist(16, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() <= 19) || !strcasecmp(sep->arg[2], "cold") && (c->GetLevel() <= 1) || !strcasecmp(sep->arg[2], "fire") && (c->GetLevel() <= 5) || !strcasecmp(sep->arg[2], "disease") && (c->GetLevel() <= 8) || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 20)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "I don't have the needed level yet."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "I am not the required level yet."); } else - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want [resist poison], [resist disease], [resist fire], [resist cold], or [resist magic]?"); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want %s, %s, %s, %s, or %s?", Resister->CastToBot()->CreateSayLink(c, "#bot resist poison", "Resist Poison").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot resist disease", "Resist Disease").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis fire", "Resist Fire").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis cold", "Resist Cold").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis magic", "Resist Magic").c_str()); break; case DRUID: if (!strcasecmp(sep->arg[2], "poison") && (c->GetLevel() >= 19)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting poison protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Poison protection."); Resister->CastToBot()->Bot_Command_Resist(7, Resister->GetLevel()); } else if (!strcasecmp(sep->arg[2], "disease") && (c->GetLevel() >= 19)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting disease protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Disease protection."); Resister->CastToBot()->Bot_Command_Resist(8, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "fire")) { // Fire level 1 - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting fire protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Fire protection."); Resister->CastToBot()->Bot_Command_Resist(9, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "cold") && (c->GetLevel() >= 13)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting cold protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Cold protection."); Resister->CastToBot()->Bot_Command_Resist(10, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() >= 16)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting magic protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Magic protection."); Resister->CastToBot()->Bot_Command_Resist(11, Resister->GetLevel()); } else if (!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() <= 16) || !strcasecmp(sep->arg[2], "cold") && (c->GetLevel() <= 9) || !strcasecmp(sep->arg[2], "disease") && (c->GetLevel() <= 19) || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 19)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "I don't have the required level yet.") ; + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "I am not the required level yet.") ; } else - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want [resist poison], [resist disease], [resist fire], [resist cold], or [resist magic]?"); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want %s, %s, %s, %s, or %s?", Resister->CastToBot()->CreateSayLink(c, "#bot resist poison", "Resist Poison").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot resist disease", "Resist Disease").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis fire", "Resist Fire").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis cold", "Resist Cold").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis magic", "Resist Magic").c_str()); break; default: c->Message(15, "You must have a Cleric, Shaman, or Druid in your group."); @@ -11734,7 +10890,8 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { botGroupLeader->BotGroupSay(botGroupLeader, "I am prepared to lead."); else botGroupLeader->BotGroupSay(botGroupLeader, "I cannot lead."); - } else + } + else c->Message(13, "You must target a spawned bot first."); return; @@ -11789,16 +10946,19 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(Bot::AddBotToGroup(botGroupMember, g)) { database.SetGroupID(botGroupMember->GetName(), g->GetID(), botGroupMember->GetBotID()); botGroupMember->BotGroupSay(botGroupMember, "I have joined %s\'s group.", botGroupLeader->GetName()); - } else + } + else botGroupMember->BotGroupSay(botGroupMember, "I can not join %s\'s group.", botGroupLeader->GetName()); } else { Group* tempGroup = botGroupMember->GetGroup(); if(tempGroup) botGroupMember->BotGroupSay(botGroupMember, "I can not join %s\'s group. I am already a member in %s\'s group.", botGroupLeader->GetName(), tempGroup->GetLeaderName()); } - } else + } + else c->Message(13, "You must target a spawned bot first."); - } else + } + else botGroupLeader->BotGroupSay(botGroupMember, "I have no more openings in my group, %s.", c->GetName()); } else { Group* tempGroup = botGroupLeader->GetGroup(); @@ -11829,9 +10989,11 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { botGroupMember->BotGroupSay(botGroupMember, "I am no longer in a group."); else botGroupMember->BotGroupSay(botGroupMember, "I can not leave %s\'s group.", g->GetLeaderName()); - } else + } + else botGroupMember->BotGroupSay(botGroupMember, "I am not in a group."); - } else + } + else c->Message(13, "You must target a spawned bot first."); return; @@ -11856,7 +11018,8 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { botGroupLeader->BotGroupSay(botGroupLeader, "I have disbanded my group, %s.", c->GetName()); else botGroupLeader->BotGroupSay(botGroupLeader, "I was not able to disband my group, %s.", c->GetName()); - } else + } + else botGroupLeader->BotGroupSay(botGroupLeader, "I can not disband my group, %s, because I am not the leader. %s is the leader of my group.", c->GetName(), g->GetLeaderName()); } else botGroupLeader->BotGroupSay(botGroupLeader, "I am not a group leader, %s.", c->GetName()); @@ -11884,7 +11047,8 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(g->IsLeader(botGroupLeader)) BotGroupSummon(g, c); } - } else if(c->HasGroup()) + } + else if(c->HasGroup()) BotGroupSummon(c->GetGroup(), c); return; @@ -11907,7 +11071,8 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(g->IsLeader(botGroupLeader)) BotGroupOrderFollow(g, c); } - } else if(c->HasGroup()) + } + else if(c->HasGroup()) BotGroupOrderFollow(c->GetGroup(), c); return; @@ -11930,13 +11095,14 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(g->IsLeader(botGroupLeader)) BotGroupOrderGuard(g, c); } - } else if(c->HasGroup()) + } + else if(c->HasGroup()) BotGroupOrderGuard(c->GetGroup(), c); return; } - if(!strcasecmp(sep->arg[1], "botgroup") && !strcasecmp(sep->arg[2], "attack") ) { + if(!strcasecmp(sep->arg[1], "botgroup") && !strcasecmp(sep->arg[2], "attack")) { Mob* targetMob = c->GetTarget(); Bot* botGroupLeader = 0; std::string botGroupLeaderName = std::string(sep->arg[3]); @@ -11955,13 +11121,17 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(g->IsLeader(botGroupLeader)) BotGroupOrderAttack(g, targetMob, c); } - } else if(c->HasGroup()) + } + else if(c->HasGroup()) BotGroupOrderAttack(c->GetGroup(), targetMob, c); - } else + } + else c->Message(13, "You must target a monster."); - } else + } + else c->Message(13, "You must target a monster."); - } else + } + else c->Message(13, "You must target a spawned bot group leader first."); } return; @@ -11977,7 +11147,8 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(!botGroupList.empty()) { for(std::list::iterator botGroupListItr = botGroupList.begin(); botGroupListItr != botGroupList.end(); ++botGroupListItr) c->Message(0, "Bot Group Name: %s -- Bot Group Leader: %s", botGroupListItr->BotGroupName.c_str(), botGroupListItr->BotGroupLeaderName.c_str()); - } else + } + else c->Message(0, "You have no bot groups created. Use the #bot botgroup save command to save bot groups."); return; @@ -11989,7 +11160,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { for(int i = 0; i < MAX_GROUP_MEMBERS; i++) { if(!g->members[i]) continue; - + if((g->members[i]->IsClient() && g->members[i]->CastToClient()->GetAggroCount()) || g->members[i]->IsEngaged()) { c->Message(0, "You can't spawn bots while your group is engaged."); return; @@ -12078,7 +11249,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(13, "Unable to create botgroup."); return; } - + Group *newBotGroup = botGroupLeader->GetGroup(); if(!newBotGroup) { c->Message(13, "Unable to find valid botgroup"); @@ -12095,7 +11266,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { safe_delete(botGroupMember); return; } - + if(!botGroupMember) { safe_delete(botGroupMember); continue; @@ -12150,11 +11321,14 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(13, "Database Error: %s", TempErrorMessage.c_str()); else c->Message(0, "%s's bot group has been saved as %s.", groupLeader->GetName(), botGroupName.c_str()); - } else + } + else c->Message(0, "You must target a bot group leader only."); - } else + } + else c->Message(0, "You must target a bot that is in the same zone as you."); - } else + } + else c->Message(0, "The bot group name already exists. Please choose another name to save your bot group as."); } return; @@ -12183,15 +11357,15 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { float Size = target->GetSize(); if (!strcasecmp(sep->arg[1], "hair")) HairStyle = atoi(sep->arg[2]); - + if (!strcasecmp(sep->arg[1], "haircolor")) HairColor = atoi(sep->arg[2]); - + if (!strcasecmp(sep->arg[1], "beard") || !strcasecmp(sep->arg[1], "beardcolor")) { if (!Gender || Race == 8) { if (!strcasecmp(sep->arg[1], "beard")) Beard = atoi(sep->arg[2]); - + if (!strcasecmp(sep->arg[1], "beardcolor")) BeardColor = atoi(sep->arg[2]); } else { @@ -12199,7 +11373,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { return; } } - + if (!strcasecmp(sep->arg[1], "face")) LuclinFace = atoi(sep->arg[2]); @@ -12207,19 +11381,19 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { EyeColor1 = EyeColor2 = atoi(sep->arg[2]); c->Message(0, "Eye Values = 0 - 11"); } - + if(!strcasecmp(sep->arg[1], "heritage") || !strcasecmp(sep->arg[1], "tattoo") || !strcasecmp(sep->arg[1], "details")) { if(Race == 522) { if(!strcasecmp(sep->arg[1], "heritage")) { DrakkinHeritage = atoi(sep->arg[2]); c->Message(0, "Heritage Values = 0 - 6"); } - + if(!strcasecmp(sep->arg[1], "tattoo")) { DrakkinTattoo = atoi(sep->arg[2]); c->Message(0, "Tattoo Values = 0 - 7"); } - + if(!strcasecmp(sep->arg[1], "details")) { DrakkinDetails = atoi(sep->arg[2]); c->Message(0, "Details Values = 0 - 7"); @@ -12237,11 +11411,14 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(13, "%s save failed!", target->GetCleanName()); c->Message(0, "Feature changed."); - } else + } + else c->Message(0, "You must own the bot to make changes."); - } else + } + else c->Message(0, "Requires a value."); - } else + } + else c->Message(0, "A bot needs to be targeted."); return; } @@ -12281,13 +11458,15 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } targetedBot->SetTaunting(taunt); - } else + } + else c->Message(13, "You must select a bot with the taunt skill."); - } else { - c->Message(13, "You must target a spawned bot."); } + else + c->Message(13, "You must target a spawned bot."); } - } else + } + else c->Message(0, "Usage #bot taunt [on|off]"); return; @@ -12362,63 +11541,13 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } c->Message(0, "Stance for %s: %s.", tempBot->GetCleanName(), stanceName.c_str()); - } else + } + else c->Message(13, "You must name a valid bot."); - } else + } + else c->Message(0, "Usage #bot stance [name] [stance (id)] (Passive = 0, Balanced = 1, Efficient = 2, Reactive = 3, Aggressive = 4, Burn = 5, BurnAE = 6)"); - - return; - } - if(!strcasecmp(sep->arg[1], "groupmessages")) { - bool groupMessages = false; - if(sep->arg[2] && sep->arg[3]){ - if(!strcasecmp(sep->arg[2], "on")) - groupMessages = true; - else if (!strcasecmp(sep->arg[2], "off")) - groupMessages = false; - else { - c->Message(0, "Usage #bot groupmessages [on|off] [bot name|all]"); - return; - } - - Bot* tempBot; - if(!strcasecmp(sep->arg[3], "all")) { - std::list spawnedBots = entity_list.GetBotsByBotOwnerCharacterID(c->CharacterID()); - if(!spawnedBots.empty()) { - for(std::list::iterator botsListItr = spawnedBots.begin(); botsListItr != spawnedBots.end(); ++botsListItr) { - Bot* tempBot = *botsListItr; - if(tempBot) { - tempBot->SetGroupMessagesOn(groupMessages); - } - } - } else - c->Message(0, "You have no spawned bots in this zone."); - - c->Message(0, "Group messages now %s for all bots.", groupMessages?"on":"off"); - } else { - std::string botName = std::string(sep->arg[3]); - if(!botName.empty()) - tempBot = entity_list.GetBotByBotName(botName); - else { - c->Message(13, "You must name a valid bot."); - return; - } - - if(tempBot) { - if (tempBot->GetBotOwner() != c) { - c->Message(13, "You must target a bot that you own."); - return; - } - tempBot->SetGroupMessagesOn(groupMessages); - c->Message(0, "Group messages now %s.", groupMessages?"on":"off"); - } else { - c->Message(13, "You must name a valid bot."); - } - } - } else - c->Message(0, "Usage #bot groupmessages [on|off] [bot name|all]"); - return; } @@ -12484,9 +11613,10 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(defensiveSpellID > 0) tempBot->UseDiscipline(defensiveSpellID, tempBot->GetID()); - } else + } + else c->Message(13, "You must name a valid bot."); - + return; } @@ -13074,7 +12204,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(0, "Usage #bot bardoutofcombat [on|off]"); return; } - + if(!strcasecmp(sep->arg[1], "showhelm")) { bool showhelm = true; if (sep->arg[2]) { @@ -13086,10 +12216,10 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(0, "Usage #bot showhelm [on|off]"); return; } - + Mob *target = c->GetTarget(); if (target && target->IsBot() && (c == target->GetOwner()->CastToClient())) { - Bot* b = target->CastToBot(); + Bot* b = target->CastToBot(); if (b) { b->SetShowHelm(showhelm); c->Message(0, "Your bot will %s show their helmet.", (showhelm ? "now" : "no longer")); @@ -13097,7 +12227,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } else c->Message(0, "Usage #bot showhelm [on|off]"); - + return; } } @@ -13257,7 +12387,7 @@ Mob* EntityList::GetMobByBotID(uint32 botID) { for (auto it = mob_list.begin(); it != mob_list.end(); ++it) { if(!it->second) continue; - + if(it->second->IsBot() && it->second->CastToBot()->GetBotID() == botID) { Result = it->second; break; @@ -13493,7 +12623,7 @@ uint8 Bot::GetNumberNeedingHealedInGroup(uint8 hpr, bool includePets) { if(this->HasGroup()) { g = this->GetGroup(); if(g) { - for( int i = 0; imembers[i] && !g->members[i]->qglobal) { if(g->members[i]->GetHPRatio() <= hpr) needHealed++; @@ -13551,7 +12681,7 @@ uint32 Bot::CalcCurrentWeight() { for(int i = EmuConstants::EQUIPMENT_BEGIN; i <= EmuConstants::EQUIPMENT_END; ++i) { inst = GetBotItem(i); if(inst) { - TempItem = inst->GetItem(); + TempItem = inst->GetItem(); if (TempItem) Total += TempItem->Weight; } @@ -13560,7 +12690,7 @@ uint32 Bot::CalcCurrentWeight() { float Packrat = ((float)spellbonuses.Packrat + (float)aabonuses.Packrat); if (Packrat > 0) Total = (uint32)((float)Total * (1.0f - ((Packrat * 1.0f) / 100.0f))); - + return Total; } @@ -13693,7 +12823,7 @@ void Bot::SetDefaultBotStance() { BotStanceType defaultStance = BotStanceBalanced; if (GetClass() == WARRIOR) defaultStance = BotStanceAggressive; - + _baseBotStance = BotStancePassive; _botStance = defaultStance; } @@ -13843,21 +12973,21 @@ void Bot::SetPrevHealRotationMember( Bot* healer ) { Bot* Bot::GetHealRotationLeader( ) { if(_healRotationLeader) return entity_list.GetBotByBotID(_healRotationLeader); - + return 0; } Bot* Bot::GetNextHealRotationMember( ) { if(_healRotationMemberNext) return entity_list.GetBotByBotID(_healRotationMemberNext); - + return 0; } Bot* Bot::GetPrevHealRotationMember( ) { if(_healRotationMemberNext) return entity_list.GetBotByBotID(_healRotationMemberPrev); - + return 0; } @@ -13871,7 +13001,7 @@ bool Bot::AddHealRotationTarget( Mob* target ) { } else if(!strcasecmp(tempTarget->GetCleanName(), target->GetCleanName())) { if(tempTarget->GetID() != target->GetID()) _healRotationTargets[i] = target->GetID(); - + return false; } } @@ -14031,4 +13161,45 @@ void Bot::BotHealRotationsClear(Client* c) { } } -#endif \ No newline at end of file +std::string Bot::CreateSayLink(Client* c, const char* message, const char* name) { + int sayid = 0; + int sz = strlen(message); + char *escaped_string = new char[sz * 2]; + database.DoEscapeString(escaped_string, message, sz); + std::string query = StringFormat("SELECT `id` FROM `saylink` WHERE `phrase` = '%s'", escaped_string); + auto results = database.QueryDatabase(query); + if (results.Success()) { + if (results.RowCount() >= 1) { + for (auto row = results.begin();row != results.end(); ++row) + sayid = atoi(row[0]); + } else { + std::string insert_query = StringFormat("INSERT INTO `saylink` (`phrase`) VALUES ('%s')", escaped_string); + results = database.QueryDatabase(insert_query); + if (!results.Success()) { + Log.Out(Logs::General, Logs::Error, "Error in saylink phrase queries", results.ErrorMessage().c_str()); + } else { + results = database.QueryDatabase(query); + if (results.Success()) { + if (results.RowCount() >= 1) + for(auto row = results.begin(); row != results.end(); ++row) + sayid = atoi(row[0]); + } + else + Log.Out(Logs::General, Logs::Error, "Error in saylink phrase queries", results.ErrorMessage().c_str()); + } + } + } + safe_delete_array(escaped_string); + + sayid += 500000; + + Client::TextLink linker; + linker.SetLinkType(linker.linkItemData); + linker.SetProxyItemID(sayid); + linker.SetProxyText(name); + + auto say_link = linker.GenerateLink(); + return say_link; +} + +#endif diff --git a/zone/bot.h b/zone/bot.h index 19968c394..9a2f2a308 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -169,7 +169,6 @@ public: uint16 BotGetSpellType(int spellslot) { return AIspells[spellslot].type; } uint16 BotGetSpellPriority(int spellslot) { return AIspells[spellslot].priority; } virtual float GetProcChances(float ProcBonus, uint16 hand); - virtual bool AvoidDamage(Mob* other, int32 &damage, bool CanRiposte); virtual int GetMonkHandToHandDamage(void); virtual bool TryFinishingBlow(Mob *defender, SkillUseTypes skillinuse); virtual void DoRiposte(Mob* defender); @@ -314,11 +313,12 @@ public: virtual float GetAOERange(uint16 spell_id); virtual bool SpellEffect(Mob* caster, uint16 spell_id, float partial = 100); virtual void DoBuffTic(const Buffs_Struct &buff, int slot, Mob* caster = nullptr); - virtual bool CastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, int16 *resist_adjust = nullptr); + virtual bool CastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, + uint32 item_slot = 0xFFFFFFFF, int16 *resist_adjust = nullptr, uint32 aa_id = 0); virtual bool SpellOnTarget(uint16 spell_id, Mob* spelltar); virtual bool IsImmuneToSpell(uint16 spell_id, Mob *caster); virtual bool DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_center, CastAction_type &CastAction); - virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF); + virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, uint32 aa_id = 0); // Bot Action Command Methods bool MesmerizeTarget(Mob* target); @@ -448,12 +448,8 @@ public: bool IsBotWISCaster() { return (GetClass() == CLERIC || GetClass() == DRUID || GetClass() == SHAMAN); } bool CanHeal(); int GetRawACNoShield(int &shield_ac); - void LoadAAs(); - uint32 GetAA(uint32 aa_id); - void ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon); bool GetHasBeenSummoned() { return _hasBeenSummoned; } const glm::vec3 GetPreSummonLocation() const { return m_PreSummonLocation; } - bool GetGroupMessagesOn() { return _groupMessagesOn; } bool GetInHealRotation() { return _isInHealRotation; } bool GetHealRotationActive() { return (GetInHealRotation() && _isHealRotationActive); } bool GetHealRotationUseFastHeals() { return _healRotationUseFastHeals; } @@ -539,7 +535,6 @@ public: void SetDisciplineRecastTimer(int timer_index, int32 recast_delay); void SetHasBeenSummoned(bool s); void SetPreSummonLocation(const glm::vec3& location) { m_PreSummonLocation = location; } - void SetGroupMessagesOn(bool groupMessagesOn) { _groupMessagesOn = groupMessagesOn; } void SetInHealRotation( bool inRotation ) { _isInHealRotation = inRotation; } void SetHealRotationActive( bool isActive ) { _isHealRotationActive = isActive; } void SetHealRotationUseFastHeals( bool useFastHeals ) { _healRotationUseFastHeals = useFastHeals; } @@ -552,6 +547,8 @@ public: void SetNumHealRotationMembers( uint8 numMembers ) { _numHealRotationMembers = numMembers; } void SetBardUseOutOfCombatSongs(bool useOutOfCombatSongs) { _bardUseOutOfCombatSongs = useOutOfCombatSongs;} void SetShowHelm(bool showhelm) { _showhelm = showhelm; } + + std::string CreateSayLink(Client* botOwner, const char* message, const char* name); // Class Destructors virtual ~Bot(); @@ -564,7 +561,7 @@ protected: virtual bool CheckBotDoubleAttack(bool Triple = false); virtual int32 GetBotFocusEffect(BotfocusType bottype, uint16 spell_id); virtual int32 CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spell_id, bool best_focus=false); - virtual int32 CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id); + virtual int32 CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint32 points, uint16 spell_id); virtual void PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* client); virtual bool AIDoSpellCast(uint8 i, Mob* tar, int32 mana_cost, uint32* oDontDoAgainBefore = 0); virtual float GetMaxMeleeRangeToTarget(Mob* target); @@ -608,7 +605,6 @@ private: bool _hasBeenSummoned; glm::vec3 m_PreSummonLocation; uint8 _spellCastingChances[MaxStances][MaxSpellTypes]; - bool _groupMessagesOn; bool _isInHealRotation; bool _isHealRotationActive; bool _healRotationUseFastHeals; @@ -646,12 +642,12 @@ private: uint8 _baseGender; // Bots gender. Necessary to preserve the original value otherwise it can be changed by illusions. // Class Methods + void LoadAAs(); int32 acmod(); void GenerateBaseStats(); void GenerateAppearance(); void GenerateArmorClass(); int32 GenerateBaseHitPoints(); - void GenerateAABonuses(StatBonuses* newbon); int32 GenerateBaseManaPoints(); void GenerateSpecialAttacks(); void SetBotID(uint32 botID); diff --git a/zone/botspellsai.cpp b/zone/botspellsai.cpp index fcbb052fe..cd8d28275 100644 --- a/zone/botspellsai.cpp +++ b/zone/botspellsai.cpp @@ -75,7 +75,7 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint16 iSpellTypes) { MakeAnyLenString(&gmsg, "Attempting to mez %s.", addMob->GetCleanName()); - if(gmsg && GetGroupMessagesOn()) + if(gmsg) BotGroupSay(this, gmsg); } } @@ -262,7 +262,7 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint16 iSpellTypes) { } } - if(gmsg && GetGroupMessagesOn()) + if(gmsg) BotGroupSay(this, gmsg); } } @@ -793,7 +793,7 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint16 iSpellTypes) { MakeAnyLenString(&gmsg, "Attempting to slow %s.", tar->GetCleanName()); - if(gmsg && GetGroupMessagesOn()) + if(gmsg) BotGroupSay(this, gmsg); } } diff --git a/zone/client.cpp b/zone/client.cpp index e4d49e979..47b2eea68 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -176,7 +176,6 @@ Client::Client(EQStreamInterface* ieqs) admin = 0; lsaccountid = 0; shield_target = nullptr; - SQL_log = nullptr; guild_id = GUILD_NONE; guildrank = 0; GuildBanker = false; @@ -198,6 +197,7 @@ Client::Client(EQStreamInterface* ieqs) SetTarget(0); auto_attack = false; auto_fire = false; + runmode = false; linkdead_timer.Disable(); zonesummon_id = 0; zonesummon_ignorerestrictions = 0; @@ -440,7 +440,7 @@ void Client::SendZoneInPackets() //Send AA Exp packet: if (GetLevel() >= 51) - SendAAStats(); + SendAlternateAdvancementStats(); // Send exp packets outapp = new EQApplicationPacket(OP_ExpUpdate, sizeof(ExpUpdate_Struct)); @@ -457,7 +457,7 @@ void Client::SendZoneInPackets() } safe_delete(outapp); - SendAATimers(); + SendAlternateAdvancementTimers(); outapp = new EQApplicationPacket(OP_RaidUpdate, sizeof(ZoneInSendName_Struct)); ZoneInSendName_Struct* zonesendname = (ZoneInSendName_Struct*)outapp->pBuffer; @@ -524,48 +524,39 @@ void Client::ReportConnectingState() { }; } -bool Client::SaveAA(){ - int first_entry = 0; - std::string rquery; - /* Save Player AA */ +bool Client::SaveAA() { + std::string iquery; int spentpoints = 0; - for (int a = 0; a < MAX_PP_AA_ARRAY; a++) { - uint32 points = aa[a]->value; - if (points > HIGHEST_AA_VALUE) { - aa[a]->value = HIGHEST_AA_VALUE; - points = HIGHEST_AA_VALUE; - } - if (points > 0) { - SendAA_Struct* curAA = zone->FindAA(aa[a]->AA - aa[a]->value + 1); - if (curAA) { - for (int rank = 0; rank::iterator RequiredLevel = AARequiredLevelAndCost.find(aa[a]->AA - aa[a]->value + 1 + rank); - if (RequiredLevel != AARequiredLevelAndCost.end()) { - spentpoints += RequiredLevel->second.Cost; - } - else - spentpoints += (curAA->cost + (curAA->cost_inc * rank)); - } - } - } - } - m_pp.aapoints_spent = spentpoints + m_epp.expended_aa; - int highest = 0; - for (int a = 0; a < MAX_PP_AA_ARRAY; a++) { - if (aa[a]->AA > 0) { // those with value 0 will be cleaned up on next load - if (first_entry != 1){ - rquery = StringFormat("REPLACE INTO `character_alternate_abilities` (id, slot, aa_id, aa_value, charges)" - " VALUES (%u, %u, %u, %u, %u)", character_id, a, aa[a]->AA, aa[a]->value, aa[a]->charges); - first_entry = 1; + int i = 0; + for(auto &rank : aa_ranks) { + AA::Ability *ability = zone->GetAlternateAdvancementAbility(rank.first); + if(!ability) + continue; + + if(rank.second.first > 0) { + AA::Rank *r = ability->GetRankByPointsSpent(rank.second.first); + + if(!r) + continue; + + spentpoints += r->total_cost; + + if(i == 0) { + iquery = StringFormat("REPLACE INTO `character_alternate_abilities` (id, aa_id, aa_value, charges)" + " VALUES (%u, %u, %u, %u)", character_id, ability->first_rank_id, rank.second.first, rank.second.second); } else { - rquery = rquery + StringFormat(", (%u, %u, %u, %u, %u)", character_id, a, aa[a]->AA, aa[a]->value, aa[a]->charges); + iquery += StringFormat(", (%u, %u, %u, %u)", character_id, ability->first_rank_id, rank.second.first, rank.second.second); } - highest = a; + i++; } } - auto results = database.QueryDatabase(rquery); - /* This is another part of the hack to clean up holes left by expendable AAs */ - rquery = StringFormat("DELETE FROM `character_alternate_abilities` WHERE `id` = %u AND `slot` > %d", character_id, highest); + + m_pp.aapoints_spent = spentpoints + m_epp.expended_aa; + + if(iquery.length() > 0) { + database.QueryDatabase(iquery); + } + return true; } @@ -8040,56 +8031,6 @@ void Client::TryItemTimer(int slot) } } -void Client::RefundAA() { - int cur = 0; - bool refunded = false; - - for(int x = 0; x < aaHighestID; x++) { - cur = GetAA(x); - if(cur > 0){ - SendAA_Struct* curaa = zone->FindAA(x); - if(cur){ - SetAA(x, 0); - for(int j = 0; j < cur; j++) { - m_pp.aapoints += curaa->cost + (curaa->cost_inc * j); - refunded = true; - } - } - else - { - m_pp.aapoints += cur; - SetAA(x, 0); - refunded = true; - } - } - } - - if(refunded) { - SaveAA(); - Save(); - // Kick(); - } -} - -void Client::IncrementAA(int aa_id) { - SendAA_Struct* aa2 = zone->FindAA(aa_id); - - if(aa2 == nullptr) - return; - - if(GetAA(aa_id) == aa2->max_level) - return; - - SetAA(aa_id, GetAA(aa_id) + 1); - - SaveAA(); - - SendAA(aa_id); - SendAATable(); - SendAAStats(); - CalcBonuses(); -} - void Client::SendItemScale(ItemInst *inst) { int slot = m_inv.GetSlotByItemInst(inst); if(slot != -1) { @@ -8638,3 +8579,16 @@ void Client::QuestReward(Mob* target, uint32 copper, uint32 silver, uint32 gold, QueuePacket(outapp, false, Client::CLIENT_CONNECTED); safe_delete(outapp); } + +void Client::SendHPUpdateMarquee(){ + if (!RuleB(Character, MarqueeHPUpdates)) + return; + + /* Health Update Marquee Display: Custom*/ + uint32 health_percentage = (uint32)(this->cur_hp * 100 / this->max_hp); + if (health_percentage == 100) + return; + + std::string health_update_notification = StringFormat("Health: %u%%", health_percentage); + this->SendMarqueeMessage(15, 510, 0, 3000, 3000, health_update_notification); +} diff --git a/zone/client.h b/zone/client.h index 4a166feed..03d09d50c 100644 --- a/zone/client.h +++ b/zone/client.h @@ -45,7 +45,6 @@ struct Item_Struct; #include "../common/item_struct.h" #include "../common/clientversions.h" -#include "aa.h" #include "common.h" #include "merc.h" #include "mob.h" @@ -227,6 +226,7 @@ public: virtual int32 GetMeleeMitDmg(Mob *attacker, int32 damage, int32 minhit, float mit_rating, float atk_rating); virtual void SetAttackTimer(); float GetQuiverHaste(); + void DoAttackRounds(Mob *target, int hand, bool IsFromSpell = false); void AI_Init(); void AI_Start(uint32 iMoveDelay = 0); @@ -541,7 +541,6 @@ public: bool Flurry(); bool Rampage(); - void DurationRampage(uint32 duration); inline uint32 GetEXP() const { return m_pp.exp; } @@ -623,6 +622,7 @@ public: inline uint32 AccountID() const { return account_id; } inline const char* AccountName()const { return account_name; } + inline int GetAccountCreation() const { return account_creation; } inline int16 Admin() const { return admin; } inline uint32 CharacterID() const { return character_id; } void UpdateAdmin(bool iFromDB = true); @@ -759,45 +759,35 @@ public: inline PTimerList &GetPTimers() { return(p_timers); } - //AA Methods - void SendAAList(); - void ResetAA(); - void SendClearAA(); - void SendAA(uint32 id, int seq=1); - void SendPreviousAA(uint32 id, int seq=1); - void BuyAA(AA_Action* action); - //this function is used by some AA stuff - void MemorizeSpell(uint32 slot,uint32 spellid,uint32 scribing); - void SetAATitle(const char *Title); - void SetTitleSuffix(const char *txt); - inline uint32 GetMaxAAXP(void) const { return max_AAXP; } - inline uint32 GetAAXP() const { return m_pp.expAA; } - void SendAAStats(); - void SendAATable(); - void SendAATimers(); - int GetAATimerID(aaID activate); - int CalcAAReuseTimer(const AA_DBAction *caa); - void ActivateAA(aaID activate); - void SendAATimer(uint32 ability, uint32 begin, uint32 end); - void EnableAAEffect(aaEffectType type, uint32 duration = 0); - void DisableAAEffect(aaEffectType type); - bool CheckAAEffect(aaEffectType type); - void HandleAAAction(aaID activate); - uint32 GetAA(uint32 aa_id) const; - bool SetAA(uint32 aa_id, uint32 new_value); - inline uint32 GetAAPointsSpent() { return m_pp.aapoints_spent; } - int16 CalcAAFocusEffect(focusType type, uint16 focus_spell, uint16 spell_id); - int16 CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id); - void SetAAPoints(uint32 points) { m_pp.aapoints = points; SendAAStats(); } - void AddAAPoints(uint32 points) { m_pp.aapoints += points; SendAAStats(); } + //New AA Methods + void SendAlternateAdvancementRank(int aa_id, int level); + void SendAlternateAdvancementTable(); + void SendAlternateAdvancementStats(); + void PurchaseAlternateAdvancementRank(int rank_id); + bool GrantAlternateAdvancementAbility(int aa_id, int points, bool ignore_cost = false); + void IncrementAlternateAdvancementRank(int rank_id); + void ActivateAlternateAdvancementAbility(int rank_id, int target_id); + void SendAlternateAdvancementPoints(); + void SendAlternateAdvancementTimer(int ability, int begin, int end); + void SendAlternateAdvancementTimers(); + void ResetAlternateAdvancementTimer(int ability); + void ResetAlternateAdvancementTimers(); + + void SetAAPoints(uint32 points) { m_pp.aapoints = points; SendAlternateAdvancementStats(); } + void AddAAPoints(uint32 points) { m_pp.aapoints += points; SendAlternateAdvancementStats(); } int GetAAPoints() { return m_pp.aapoints; } int GetSpentAA() { return m_pp.aapoints_spent; } + + //old AA methods that we still use + void ResetAA(); void RefundAA(); - void IncrementAA(int aa_id); - int32 GetAAEffectDataBySlot(uint32 aa_ID, uint32 slot_id, bool GetEffect, bool GetBase1, bool GetBase2); - int32 GetAAEffectid(uint32 aa_ID, uint32 slot_id) { return GetAAEffectDataBySlot(aa_ID, slot_id, true, false,false); } - int32 GetAABase1(uint32 aa_ID, uint32 slot_id) { return GetAAEffectDataBySlot(aa_ID, slot_id, false, true,false); } - int32 GetAABase2(uint32 aa_ID, uint32 slot_id) { return GetAAEffectDataBySlot(aa_ID, slot_id, false, false,true); } + void SendClearAA(); + inline uint32 GetMaxAAXP(void) const { return max_AAXP; } + inline uint32 GetAAXP() const { return m_pp.expAA; } + int16 CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id); + void SetAATitle(const char *Title); + void SetTitleSuffix(const char *txt); + void MemorizeSpell(uint32 slot, uint32 spellid, uint32 scribing); int32 acmod(); // Item methods @@ -898,8 +888,10 @@ public: bool CheckTradeLoreConflict(Client* other); void LinkDead(); void Insight(uint32 t_id); - bool CheckDoubleAttack(bool tripleAttack = false); + bool CheckDoubleAttack(); + bool CheckTripleAttack(); bool CheckDoubleRangedAttack(); + bool CheckDualWield(); //remove charges/multiple objects from inventory: //bool DecreaseByType(uint32 type, uint8 amt); @@ -1157,6 +1149,7 @@ public: void RemoveAutoXTargets(); void ShowXTargets(Client *c); bool GroupFollow(Client* inviter); + inline bool GetRunMode() const { return runmode; } void InitializeMercInfo(); bool CheckCanSpawnMerc(uint32 template_id); @@ -1260,6 +1253,9 @@ public: void QuestReward(Mob* target, uint32 copper = 0, uint32 silver = 0, uint32 gold = 0, uint32 platinum = 0, uint32 itemid = 0, uint32 exp = 0, bool faction = false); void ResetHPUpdateTimer() { hpupdate_timer.Start(); } + + void SendHPUpdateMarquee(); + protected: friend class Mob; void CalcItemBonuses(StatBonuses* newbon); @@ -1267,8 +1263,6 @@ protected: void AdditiveWornBonuses(const ItemInst *inst, StatBonuses* newbon, bool isAug = false); int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat); void CalcEdibleBonuses(StatBonuses* newbon); - void CalcAABonuses(StatBonuses* newbon); - void ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon); void ProcessItemCaps(); void MakeBuffFadePacket(uint16 spell_id, int slot_id, bool send_message = true); bool client_data_loaded; @@ -1276,6 +1270,8 @@ protected: int16 GetFocusEffect(focusType type, uint16 spell_id); uint16 GetSympatheticFocusEffect(focusType type, uint16 spell_id); + void FinishAlternateAdvancementPurchase(AA::Rank *rank, bool ignore_cost); + Mob* bind_sight_target; glm::vec4 m_AutoAttackPosition; @@ -1385,6 +1381,7 @@ private: bool AFK; bool auto_attack; bool auto_fire; + bool runmode; uint8 gmspeed; bool medding; uint16 horseId; @@ -1492,11 +1489,7 @@ private: uint32 tribute_master_id; - FILE *SQL_log; uint32 max_AAXP; - uint32 staminacount; - AA_Array* aa[MAX_PP_AA_ARRAY]; //this list contains pointers into our player profile - std::map aa_points; bool npcflag; uint8 npclevel; bool feigned; diff --git a/zone/client_mods.cpp b/zone/client_mods.cpp index f12c20064..13a8130bd 100644 --- a/zone/client_mods.cpp +++ b/zone/client_mods.cpp @@ -1121,7 +1121,7 @@ int32 Client::CalcMaxMana() switch (GetCasterClass()) { case 'I': case 'W': { - max_mana = (CalcBaseMana() + itembonuses.Mana + spellbonuses.Mana + GroupLeadershipAAManaEnhancement()); + max_mana = (CalcBaseMana() + itembonuses.Mana + spellbonuses.Mana + aabonuses.Mana + GroupLeadershipAAManaEnhancement()); break; } case 'N': { @@ -1978,7 +1978,18 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const return 10; uint32 effectmod = 10; - int effectmodcap = RuleI(Character, BaseInstrumentSoftCap); + int effectmodcap = 0; + bool nocap = false; + if (RuleB(Character, UseSpellFileSongCap)) { + effectmodcap = spells[spell_id].songcap / 10; + // this looks a bit weird, but easiest way I could think to keep both systems working + if (effectmodcap == 0) + nocap = true; + else + effectmodcap += 10; + } else { + effectmodcap = RuleI(Character, BaseInstrumentSoftCap); + } // this should never use spell modifiers... // if a spell grants better modifers, they are copied into the item mods // because the spells are supposed to act just like having the intrument. @@ -2048,10 +2059,11 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const effectmod = 10; return effectmod; } - effectmodcap += aabonuses.songModCap + spellbonuses.songModCap + itembonuses.songModCap; + if (!RuleB(Character, UseSpellFileSongCap)) + effectmodcap += aabonuses.songModCap + spellbonuses.songModCap + itembonuses.songModCap; if (effectmod < 10) effectmod = 10; - if (effectmod > effectmodcap) + if (!nocap && effectmod > effectmodcap) // if the cap is calculated to be 0 using new rules, no cap. effectmod = effectmodcap; Log.Out(Logs::Detail, Logs::Spells, "%s::GetInstrumentMod() spell=%d mod=%d modcap=%d\n", GetName(), spell_id, effectmod, effectmodcap); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 2ae2babac..ce63610da 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -389,6 +389,7 @@ void MapOpcodes() ConnectedOpcodes[OP_XTargetRequest] = &Client::Handle_OP_XTargetRequest; ConnectedOpcodes[OP_YellForHelp] = &Client::Handle_OP_YellForHelp; ConnectedOpcodes[OP_ZoneChange] = &Client::Handle_OP_ZoneChange; + ConnectedOpcodes[OP_ResetAA] = &Client::Handle_OP_ResetAA; } void ClearMappedOpcode(EmuOpcode op) @@ -1082,7 +1083,7 @@ void Client::Handle_Connect_OP_ReqNewZone(const EQApplicationPacket *app) void Client::Handle_Connect_OP_SendAAStats(const EQApplicationPacket *app) { - SendAATimers(); + SendAlternateAdvancementTimers(); EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAAStats, 0); QueuePacket(outapp); safe_delete(outapp); @@ -1091,7 +1092,7 @@ void Client::Handle_Connect_OP_SendAAStats(const EQApplicationPacket *app) void Client::Handle_Connect_OP_SendAATable(const EQApplicationPacket *app) { - SendAAList(); + SendAlternateAdvancementTable(); return; } @@ -1152,7 +1153,7 @@ void Client::Handle_Connect_OP_TGB(const EQApplicationPacket *app) void Client::Handle_Connect_OP_UpdateAA(const EQApplicationPacket *app) { - SendAATable(); + SendAlternateAdvancementPoints(); } void Client::Handle_Connect_OP_WearChange(const EQApplicationPacket *app) @@ -1439,58 +1440,15 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) if (m_pp.ldon_points_tak < 0 || m_pp.ldon_points_tak > 2000000000){ m_pp.ldon_points_tak = 0; } if (m_pp.ldon_points_available < 0 || m_pp.ldon_points_available > 2000000000){ m_pp.ldon_points_available = 0; } - /* Initialize AA's : Move to function eventually */ - for (uint32 a = 0; a < MAX_PP_AA_ARRAY; a++) - aa[a] = &m_pp.aa_array[a]; - query = StringFormat( - "SELECT " - "slot, " - "aa_id, " - "aa_value, " - "charges " - "FROM " - "`character_alternate_abilities` " - "WHERE `id` = %u ORDER BY `slot`", this->CharacterID()); - results = database.QueryDatabase(query); i = 0; - int offset = 0; // offset to fix the hole from expendables - for (auto row = results.begin(); row != results.end(); ++row) { - i = atoi(row[0]) - offset; - m_pp.aa_array[i].AA = atoi(row[1]); - m_pp.aa_array[i].value = atoi(row[2]); - m_pp.aa_array[i].charges = atoi(row[3]); - /* A used expendable could cause there to be a "hole" in the array, this is very bad. Bad things like keeping your expendable after use. - We could do a few things, one of them being reshuffling when the hole is created or defer the fixing until a later point, like during load! - Or just never making a hole in the array and just have hacks every where. Fixing the hole at load really just keeps 1 hack in Client::SendAATable - and keeping this offset that will cause the next AA to be pushed back over the hole. We also need to clean up on save so we don't have multiple - entries for a single AA. - */ - if (m_pp.aa_array[i].value == 0) - offset++; + if(RuleB(World, UseClientBasedExpansionSettings)) { + m_pp.expansions = ExpansionFromClientVersion(GetClientVersion()); + } + else { + m_pp.expansions = RuleI(World, ExpansionSettings); } - for (uint32 a = 0; a < MAX_PP_AA_ARRAY; a++){ - uint32 id = aa[a]->AA; - //watch for invalid AA IDs - if (id == aaNone) - continue; - if (id >= aaHighestID) { - aa[a]->AA = aaNone; - aa[a]->value = 0; - continue; - } - if (aa[a]->value == 0) { - aa[a]->AA = aaNone; - continue; - } - if (aa[a]->value > HIGHEST_AA_VALUE) { - aa[a]->AA = aaNone; - aa[a]->value = 0; - continue; - } - if (aa[a]->value > 1) /* hack in some stuff for sony's new AA method (where each level of each aa.has a seperate ID) */ - aa_points[(id - aa[a]->value + 1)] = aa[a]->value; - else - aa_points[id] = aa[a]->value; + if(!database.LoadAlternateAdvancement(this)) { + Log.Out(Logs::General, Logs::Error, "Error loading AA points for %s", GetName()); } if (SPDAT_RECORDS > 0) { @@ -1615,11 +1573,6 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) /* Update LFP in case any (or all) of our group disbanded while we were zoning. */ if (IsLFP()) { UpdateLFP(); } - /* Get Expansions from variables table and ship via PP */ - char val[20] = { 0 }; - if (database.GetVariable("Expansions", val, 20)){ m_pp.expansions = atoi(val); } - else{ m_pp.expansions = 0x3FF; } - p_timers.SetCharID(CharacterID()); if (!p_timers.Load(&database)) { Log.Out(Logs::General, Logs::Error, "Unable to load ability timers from the database for %s (%i)!", GetCleanName(), CharacterID()); @@ -1794,38 +1747,39 @@ void Client::Handle_OP_AAAction(const EQApplicationPacket *app) Log.Out(Logs::Detail, Logs::AA, "Received OP_AAAction"); if (app->size != sizeof(AA_Action)){ - printf("Error! OP_AAAction size didnt match!\n"); + Log.Out(Logs::General, Logs::AA, "Error! OP_AAAction size didnt match!"); return; } AA_Action* action = (AA_Action*)app->pBuffer; if (action->action == aaActionActivate) {//AA Hotkey Log.Out(Logs::Detail, Logs::AA, "Activating AA %d", action->ability); - ActivateAA((aaID)action->ability); + ActivateAlternateAdvancementAbility(action->ability, action->target_id); } else if (action->action == aaActionBuy) { - BuyAA(action); + PurchaseAlternateAdvancementRank(action->ability); } else if (action->action == aaActionDisableEXP){ //Turn Off AA Exp if (m_epp.perAA > 0) Message_StringID(0, AA_OFF); + m_epp.perAA = 0; - SendAAStats(); + SendAlternateAdvancementStats(); } else if (action->action == aaActionSetEXP) { if (m_epp.perAA == 0) Message_StringID(0, AA_ON); m_epp.perAA = action->exp_value; - if (m_epp.perAA<0 || m_epp.perAA>100) m_epp.perAA = 0; // stop exploit with sanity check + if (m_epp.perAA < 0 || m_epp.perAA > 100) + m_epp.perAA = 0; // stop exploit with sanity check + // send an update - SendAAStats(); - SendAATable(); + SendAlternateAdvancementStats(); + SendAlternateAdvancementTable(); } else { - printf("Unknown AA action: %u %u 0x%x %d\n", action->action, action->ability, action->unknown08, action->exp_value); + Log.Out(Logs::General, Logs::AA, "Unknown AA action : %u %u %u %d", action->action, action->ability, action->target_id, action->exp_value); } - - return; } void Client::Handle_OP_AcceptNewTask(const EQApplicationPacket *app) @@ -3898,8 +3852,6 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) return; } - m_TargetRing = glm::vec3(castspell->x_pos, castspell->y_pos, castspell->z_pos); - CastSpell(spell_to_cast, castspell->target_id, castspell->slot); } /* Spell Slot or Potion Belt Slot */ @@ -6056,7 +6008,7 @@ void Client::Handle_OP_GMSearchCorpse(const EQApplicationPacket *app) char *escSearchString = new char[129]; database.DoEscapeString(escSearchString, gmscs->Name, strlen(gmscs->Name)); - std::string query = StringFormat("SELECT charname, zoneid, x, y, z, time_of_death, rezzed, IsBurried " + std::string query = StringFormat("SELECT charname, zoneid, x, y, z, time_of_death, is_rezzed, is_buried " "FROM character_corpses WheRE charname LIKE '%%%s%%' ORDER BY charname LIMIT %i", escSearchString, maxResults); safe_delete_array(escSearchString); @@ -8852,7 +8804,7 @@ void Client::Handle_OP_LFGuild(const EQApplicationPacket *app) pack->WriteUInt32(QSG_LFGuild_UpdatePlayerInfo); pack->WriteUInt32(GetBaseClass()); pack->WriteUInt32(GetLevel()); - pack->WriteUInt32(GetAAPointsSpent()); + pack->WriteUInt32(GetSpentAA()); pack->WriteString(pts->Comment); pack->WriteUInt32(pts->Toggle); pack->WriteUInt32(pts->TimeZone); @@ -11836,6 +11788,18 @@ void Client::Handle_OP_SetGuildMOTD(const EQApplicationPacket *app) void Client::Handle_OP_SetRunMode(const EQApplicationPacket *app) { + if (app->size < sizeof(SetRunMode_Struct)) { + Log.Out(Logs::General, Logs::Error, "Received invalid sized " + "OP_SetRunMode: got %d, expected %d", app->size, + sizeof(SetRunMode_Struct)); + DumpPacket(app); + return; + } + SetRunMode_Struct* rms = (SetRunMode_Struct*)app->pBuffer; + if (rms->mode) + runmode = true; + else + runmode = false; return; } @@ -14216,9 +14180,12 @@ void Client::Handle_OP_YellForHelp(const EQApplicationPacket *app) return; } -/* -void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) +void Client::Handle_OP_ResetAA(const EQApplicationPacket *app) { + if(Admin() >= 50) { + Message(0, "Resetting AA points."); + ResetAA(); + } return; } -*/ + diff --git a/zone/client_packet.h b/zone/client_packet.h index 1a9591f4c..a39e3fb74 100644 --- a/zone/client_packet.h +++ b/zone/client_packet.h @@ -295,3 +295,4 @@ void Handle_OP_XTargetRequest(const EQApplicationPacket *app); void Handle_OP_YellForHelp(const EQApplicationPacket *app); void Handle_OP_ZoneChange(const EQApplicationPacket *app); + void Handle_OP_ResetAA(const EQApplicationPacket *app); diff --git a/zone/client_process.cpp b/zone/client_process.cpp index 4a16e7698..70899e2d6 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -391,73 +391,12 @@ bool Client::Process() { } else if (auto_attack_target->GetHP() > -10) // -10 so we can watch people bleed in PvP { - if(CheckAAEffect(aaEffectRampage)) - { - entity_list.AEAttack(this, 30); - } else { - Attack(auto_attack_target, MainPrimary); // Kaiyodo - added attacking hand to arguments - } ItemInst *wpn = GetInv().GetItem(MainPrimary); TryWeaponProc(wpn, auto_attack_target, MainPrimary); - bool tripleAttackSuccess = false; - if( auto_attack_target && CanThisClassDoubleAttack() ) { - - CheckIncreaseSkill(SkillDoubleAttack, auto_attack_target, -10); - if(CheckDoubleAttack()) { - //should we allow rampage on double attack? - if(CheckAAEffect(aaEffectRampage)) { - entity_list.AEAttack(this, 30); - } else { - Attack(auto_attack_target, MainPrimary, false); - } - } - - //triple attack: rangers, monks, warriors, berserkers over level 60 - if((((GetClass() == MONK || GetClass() == WARRIOR || GetClass() == RANGER || GetClass() == BERSERKER) - && GetLevel() >= 60) || GetSpecialAbility(SPECATK_TRIPLE)) - && CheckDoubleAttack(true)) - { - tripleAttackSuccess = true; - Attack(auto_attack_target, MainPrimary, false); - } - - //quad attack, does this belong here?? - if(GetSpecialAbility(SPECATK_QUAD) && CheckDoubleAttack(true)) - { - Attack(auto_attack_target, MainPrimary, false); - } - } - - //Live AA - Flurry, Rapid Strikes ect (Flurry does not require Triple Attack). - int16 flurrychance = aabonuses.FlurryChance + spellbonuses.FlurryChance + itembonuses.FlurryChance; - - if (auto_attack_target && flurrychance) - { - if(zone->random.Int(0, 99) < flurrychance) - { - Message_StringID(MT_NPCFlurry, YOU_FLURRY); - Attack(auto_attack_target, MainPrimary, false); - Attack(auto_attack_target, MainPrimary, false); - } - } - - int16 ExtraAttackChanceBonus = spellbonuses.ExtraAttackChance + itembonuses.ExtraAttackChance + aabonuses.ExtraAttackChance; - - if (auto_attack_target && ExtraAttackChanceBonus) { - ItemInst *wpn = GetInv().GetItem(MainPrimary); - if(wpn){ - if(wpn->GetItem()->ItemType == ItemType2HSlash || - wpn->GetItem()->ItemType == ItemType2HBlunt || - wpn->GetItem()->ItemType == ItemType2HPiercing ) - { - if(zone->random.Int(0, 99) < ExtraAttackChanceBonus) - { - Attack(auto_attack_target, MainPrimary, false); - } - } - } - } + DoAttackRounds(auto_attack_target, MainPrimary); + if (CheckAATimer(aaTimerRampage)) + entity_list.AEAttack(this, 30); } } @@ -489,32 +428,12 @@ bool Client::Process() { //you can't see your target } else if(auto_attack_target->GetHP() > -10) { - float DualWieldProbability = 0.0f; - - int16 Ambidexterity = aabonuses.Ambidexterity + spellbonuses.Ambidexterity + itembonuses.Ambidexterity; - DualWieldProbability = (GetSkill(SkillDualWield) + GetLevel() + Ambidexterity) / 400.0f; // 78.0 max - int16 DWBonus = spellbonuses.DualWieldChance + itembonuses.DualWieldChance; - DualWieldProbability += DualWieldProbability*float(DWBonus)/ 100.0f; - - float random = zone->random.Real(0, 1); CheckIncreaseSkill(SkillDualWield, auto_attack_target, -10); - if (random < DualWieldProbability){ // Max 78% of DW - if(CheckAAEffect(aaEffectRampage)) { - entity_list.AEAttack(this, 30, MainSecondary); - } else { - Attack(auto_attack_target, MainSecondary); // Single attack with offhand - } + if (CheckDualWield()) { ItemInst *wpn = GetInv().GetItem(MainSecondary); TryWeaponProc(wpn, auto_attack_target, MainSecondary); - if( CanThisClassDoubleAttack() && CheckDoubleAttack()) { - if(CheckAAEffect(aaEffectRampage)) { - entity_list.AEAttack(this, 30, MainSecondary); - } else { - if(auto_attack_target && auto_attack_target->GetHP() > -10) - Attack(auto_attack_target, MainSecondary); // Single attack with offhand - } - } + DoAttackRounds(auto_attack_target, MainSecondary); } } } @@ -522,9 +441,7 @@ bool Client::Process() { if (position_timer.Check()) { if (IsAIControlled()) { - if(IsMoving()) - SendPosUpdate(2); - else + if(!IsMoving()) { animation = 0; m_Delta = glm::vec4(0.0f, 0.0f, 0.0f, m_Delta.w); diff --git a/zone/command.cpp b/zone/command.cpp index 82aae6e25..2dbb9297e 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -147,7 +147,7 @@ Access Levels: */ int command_init(void) { - + if ( @@ -168,10 +168,10 @@ int command_init(void) { command_add("aggro", "(range) [-v] - Display aggro information for all mobs 'range' distance from your target. -v is verbose faction info.", 80, command_aggro) || command_add("aggrozone", "[aggro] - Aggro every mob in the zone with X aggro. Default is 0. Not recommend if you're not invulnerable.", 100, command_aggrozone) || command_add("ai", "[factionid/spellslist/con/guard/roambox/stop/start] - Modify AI on NPC target", 100, command_ai) || - command_add("altactivate", "[argument] - activates alternate advancement abilities, use altactivate help for more information", 0, command_altactivate) || command_add("appearance", "[type] [value] - Send an appearance packet for you or your target", 150, command_appearance) || command_add("attack", "[targetname] - Make your NPC target attack targetname", 150, command_attack) || command_add("augmentitem", "Force augments an item. Must have the augment item window open.", 250, command_augmentitem) || + command_add("aug", nullptr, 250, command_augmentitem) || command_add("ban", "[name] [reason]- Ban by character name", 150, command_ban) || command_add("beard", "- Change the beard of your target", 80, command_beard) || command_add("beardcolor", "- Change the beard color of your target", 80, command_beardcolor) || @@ -218,11 +218,14 @@ int command_init(void) { command_add("flagedit", "- Edit zone flags on your target", 100, command_flagedit) || command_add("flags", "- displays the flags of you or your target", 0, command_flags) || command_add("flymode", "[0/1/2] - Set your or your player target's flymode to off/on/levitate", 50, command_flymode) || + command_add("fn", nullptr, 100, command_findnpctype) || command_add("fov", "- Check wether you're behind or in your target's field of view", 80, command_fov) || command_add("freeze", "- Freeze your target", 80, command_freeze) || + command_add("fs", nullptr, 50, command_findspell) || + command_add("fz", nullptr, 100, command_findzone) || command_add("gassign", "[id] - Assign targetted NPC to predefined wandering grid id", 100, command_gassign) || command_add("gender", "[0/1/2] - Change your or your target's gender to male/female/neuter", 50, command_gender) || - command_add("getplayerburriedcorpsecount", "- Get the target's total number of burried player corpses.", 100, command_getplayerburriedcorpsecount) || + command_add("getplayerburiedcorpsecount", "- Get the target's total number of buried player corpses.", 100, command_getplayerburiedcorpsecount) || command_add("getvariable", "[varname] - Get the value of a variable from the database", 200, command_getvariable) || command_add("gi", nullptr,200, command_giveitem) || command_add("ginfo", "- get group info on target.", 20, command_ginfo) || @@ -275,7 +278,6 @@ int command_init(void) { command_add("los", nullptr,0, command_checklos) || command_add("makepet", "[level] [class] [race] [texture] - Make a pet", 50, command_makepet) || command_add("mana", "- Fill your or your target's mana", 50, command_mana) || - command_add("manaburn", "- Use AA Wizard class skill manaburn on target", 10, command_manaburn) || command_add("maxskills", "Maxes skills for you.", 200, command_max_all_skills) || command_add("memspell", "[slotid] [spellid] - Memorize spellid in the specified slot", 50, command_memspell) || command_add("merchant_close_shop", "Closes a merchant shop", 100, command_merchantcloseshop) || @@ -324,6 +326,7 @@ int command_init(void) { command_add("raidloot", "LEADER|GROUPLEADER|SELECTED|ALL - Sets your raid loot settings if you have permission to do so.", 0, command_raidloot) || command_add("randomfeatures", "- Temporarily randomizes the Facial Features of your target", 80, command_randomfeatures) || command_add("refreshgroup", "- Refreshes Group.", 0, command_refreshgroup) || + command_add("reloadaa", "Reloads AA data", 200, command_reloadaa) || command_add("reloadallrules", "Executes a reload of all rules.", 80, command_reloadallrules) || command_add("reloademote", "Reloads NPC Emotes", 80, command_reloademote) || command_add("reloadlevelmods", nullptr,255, command_reloadlevelmods) || @@ -336,8 +339,10 @@ int command_init(void) { command_add("reloadzonepoints", "- Reload zone points from database", 150, command_reloadzps) || command_add("reloadzps", nullptr,0, command_reloadzps) || command_add("repop", "[delay] - Repop the zone with optional delay", 100, command_repop) || - command_add("resetaa", "- Resets a Player's AA in their profile and refunds spent AA's to unspent, disconnects player.", 200, command_resetaa) || + command_add("resetaa", "- Resets a Player's AA in their profile and refunds spent AA's to unspent, may disconnect player.", 200, command_resetaa) || + command_add("resetaa_timer", "Command to reset AA cooldown timers.", 200, command_resetaa_timer) || command_add("revoke", "[charname] [1/0] - Makes charname unable to talk on OOC", 200, command_revoke) || + command_add("rq", nullptr, 150, command_reloadqst) || command_add("rules", "(subcommand) - Manage server rules", 250, command_rules) || command_add("save", "- Force your player or player corpse target to be saved to the database", 50, command_save) || command_add("scribespell", "[spellid] - Scribe specified spell in your target's spell book.", 180, command_scribespell) || @@ -386,7 +391,7 @@ int command_init(void) { command_add("spon", "- Sends OP_MemorizeSpell", 80, command_spon) || command_add("stun", "[duration] - Stuns you or your target for duration", 100, command_stun) || command_add("summon", "[charname] - Summons your player/npc/corpse target, or charname if specified", 80, command_summon) || - command_add("summonburriedplayercorpse", "- Summons the target's oldest burried corpse, if any exist.", 100, command_summonburriedplayercorpse) || + command_add("summonburiedplayercorpse", "- Summons the target's oldest buried corpse, if any exist.", 100, command_summonburiedplayercorpse) || command_add("summonitem", "[itemid] [charges] - Summon an item onto your cursor. Charges are optional.", 200, command_summonitem) || command_add("suspend", "[name] [days] [reason] - Suspend by character name and for specificed number of days", 150, command_suspend) || command_add("task", "(subcommand) - Task system commands", 150, command_task) || @@ -431,7 +436,7 @@ int command_init(void) { command_add("zsave", " - Saves zheader to the database", 80, command_zsave) || command_add("zsky", "[skytype] - Change zone sky type", 80, command_zsky) || command_add("zstats", "- Show info about zone header", 80, command_zstats) || - command_add("zunderworld", "[zcoord] - Sets the underworld using zcoord", 80, command_zunderworld) || + command_add("zunderworld", "[zcoord] - Sets the underworld using zcoord", 80, command_zunderworld) || command_add("zuwcoords", "[z coord] - Set underworld coord", 80, command_zuwcoords) ) { @@ -641,8 +646,8 @@ void command_logcommand(Client *c, const char *message) c->AccountName(), c->AccountID(), admin,c->GetName(), - c->GetTarget()?c->GetTarget()->GetName():"None", - "Command", + c->GetTarget()?c->GetTarget()->GetName():"None", + "Command", message, 1 ); @@ -675,8 +680,8 @@ void command_incstat(Client* c, const Seperator* sep){ } } -void command_resetaa(Client* c,const Seperator *sep){ - if(c->GetTarget()!=0 && c->GetTarget()->IsClient()){ +void command_resetaa(Client* c,const Seperator *sep) { + if(c->GetTarget() && c->GetTarget()->IsClient()){ c->GetTarget()->CastToClient()->ResetAA(); c->Message(13,"Successfully reset %s's AAs", c->GetTarget()->GetName()); } @@ -728,7 +733,7 @@ void command_setfaction(Client *c, const Seperator *sep) auto npcTypeID = c->GetTarget()->CastToNPC()->GetNPCTypeID(); c->Message(15,"Setting NPC %u to faction %i", npcTypeID, atoi(sep->argplus[1])); - std::string query = StringFormat("UPDATE npc_types SET npc_faction_id = %i WHERE id = %i", + std::string query = StringFormat("UPDATE npc_types SET npc_faction_id = %i WHERE id = %i", atoi(sep->argplus[1]), npcTypeID); database.QueryDatabase(query); } @@ -1486,7 +1491,7 @@ void command_npcstats(Client *c, const Seperator *sep) c->Message(0, "Current HP: %i Max HP: %i", c->GetTarget()->GetHP(), c->GetTarget()->GetMaxHP()); //c->Message(0, "Weapon Item Number: %s", c->GetTarget()->GetWeapNo()); c->Message(0, "Gender: %i Size: %f Bodytype: %d", c->GetTarget()->GetGender(), c->GetTarget()->GetSize(), c->GetTarget()->GetBodyType()); - c->Message(0, "Runspeed: %i Walkspeed: %i", c->GetTarget()->GetRunspeed(), c->GetTarget()->GetWalkspeed()); + c->Message(0, "Runspeed: %.3f Walkspeed: %.3f", static_cast(0.025f * c->GetTarget()->GetRunspeed()), static_cast(0.025f * c->GetTarget()->GetWalkspeed())); c->Message(0, "Spawn Group: %i Grid: %i", c->GetTarget()->CastToNPC()->GetSp2(), c->GetTarget()->CastToNPC()->GetGrid()); c->Message(0, "EmoteID: %i", c->GetTarget()->CastToNPC()->GetEmoteID()); c->GetTarget()->CastToNPC()->QueryLoot(c); @@ -2299,7 +2304,7 @@ void command_setskill(Client *c, const Seperator *sep) Log.Out(Logs::General, Logs::Normal, "Set skill request from %s, target:%s skill_id:%i value:%i", c->GetName(), c->GetTarget()->GetName(), atoi(sep->arg[1]), atoi(sep->arg[2]) ); int skill_num = atoi(sep->arg[1]); uint16 skill_value = atoi(sep->arg[2]); - if(skill_num < HIGHEST_SKILL) + if(skill_num <= HIGHEST_SKILL) c->GetTarget()->CastToClient()->SetSkill((SkillUseTypes)skill_num, skill_value); } } @@ -2570,7 +2575,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), "WornSlot: %i, Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), "WornSlot: %i, Item: %i (%s), Charges: %i", indexMain, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_main == nullptr) ? 0 : inst_main->GetCharges())); } @@ -2581,7 +2586,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), "WornSlot: %i, Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), "WornSlot: %i, Item: %i (%s), Charges: %i", MainPowerSource, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_main == nullptr) ? 0 : inst_main->GetCharges())); } @@ -2593,7 +2598,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), "InvSlot: %i, Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), "InvSlot: %i, Item: %i (%s), Charges: %i", indexMain, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_main == nullptr) ? 0 : inst_main->GetCharges())); for (uint8 indexSub = SUB_BEGIN; inst_main && inst_main->IsType(ItemClassContainer) && (indexSub < EmuConstants::ITEM_CONTAINER_SIZE); ++indexSub) { @@ -2603,7 +2608,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), " InvBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), " InvBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", Inventory::CalcSlotId(indexMain, indexSub), indexMain, indexSub, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_sub == nullptr) ? 0 : inst_sub->GetCharges())); } } @@ -2615,7 +2620,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message(1, "CursorSlot: %i, Item: %i (%s), Charges: %i", + c->Message(1, "CursorSlot: %i, Item: %i (%s), Charges: %i", MainCursor, 0, item_link.c_str(), 0); } else { @@ -2627,7 +2632,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), "CursorSlot: %i, Depth: %i, Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), "CursorSlot: %i, Depth: %i, Item: %i (%s), Charges: %i", MainCursor, cursorDepth, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_main == nullptr) ? 0 : inst_main->GetCharges())); for (uint8 indexSub = SUB_BEGIN; (cursorDepth == 0) && inst_main && inst_main->IsType(ItemClassContainer) && (indexSub < EmuConstants::ITEM_CONTAINER_SIZE); ++indexSub) { @@ -2637,7 +2642,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), " CursorBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), " CursorBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", Inventory::CalcSlotId(MainCursor, indexSub), MainCursor, indexSub, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_sub == nullptr) ? 0 : inst_sub->GetCharges())); } } @@ -2652,7 +2657,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), "TributeSlot: %i, Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), "TributeSlot: %i, Item: %i (%s), Charges: %i", indexMain, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_main == nullptr) ? 0 : inst_main->GetCharges())); } @@ -2664,7 +2669,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), "BankSlot: %i, Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), "BankSlot: %i, Item: %i (%s), Charges: %i", indexMain, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_main == nullptr) ? 0 : inst_main->GetCharges())); for (uint8 indexSub = SUB_BEGIN; inst_main && inst_main->IsType(ItemClassContainer) && (indexSub < EmuConstants::ITEM_CONTAINER_SIZE); ++indexSub) { @@ -2674,7 +2679,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), " BankBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), " BankBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", Inventory::CalcSlotId(indexMain, indexSub), indexMain, indexSub, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_sub == nullptr) ? 0 : inst_sub->GetCharges())); } } @@ -2685,8 +2690,8 @@ void command_peekinv(Client *c, const Seperator *sep) linker.SetItemInst(inst_main); item_link = linker.GenerateLink(); - - c->Message((item_data == nullptr), "SharedBankSlot: %i, Item: %i (%s), Charges: %i", + + c->Message((item_data == nullptr), "SharedBankSlot: %i, Item: %i (%s), Charges: %i", indexMain, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_main == nullptr) ? 0 : inst_main->GetCharges())); for (uint8 indexSub = SUB_BEGIN; inst_main && inst_main->IsType(ItemClassContainer) && (indexSub < EmuConstants::ITEM_CONTAINER_SIZE); ++indexSub) { @@ -2696,7 +2701,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), " SharedBankBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), " SharedBankBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", Inventory::CalcSlotId(indexMain, indexSub), indexMain, indexSub, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_sub == nullptr) ? 0 : inst_sub->GetCharges())); } } @@ -2709,7 +2714,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), "TradeSlot: %i, Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), "TradeSlot: %i, Item: %i (%s), Charges: %i", indexMain, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_main == nullptr) ? 0 : inst_main->GetCharges())); for (uint8 indexSub = SUB_BEGIN; inst_main && inst_main->IsType(ItemClassContainer) && (indexSub < EmuConstants::ITEM_CONTAINER_SIZE); ++indexSub) { @@ -2719,7 +2724,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), " TradeBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), " TradeBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", Inventory::CalcSlotId(indexMain, indexSub), indexMain, indexSub, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_sub == nullptr) ? 0 : inst_sub->GetCharges())); } } @@ -2741,7 +2746,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), "WorldSlot: %i, Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), "WorldSlot: %i, Item: %i (%s), Charges: %i", (EmuConstants::WORLD_BEGIN + indexMain), ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_main == nullptr) ? 0 : inst_main->GetCharges())); for (uint8 indexSub = SUB_BEGIN; inst_main && inst_main->IsType(ItemClassContainer) && (indexSub < EmuConstants::ITEM_CONTAINER_SIZE); ++indexSub) { @@ -2751,7 +2756,7 @@ void command_peekinv(Client *c, const Seperator *sep) item_link = linker.GenerateLink(); - c->Message((item_data == nullptr), " WorldBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", + c->Message((item_data == nullptr), " WorldBagSlot: %i (Slot #%i, Bag #%i), Item: %i (%s), Charges: %i", INVALID_INDEX, indexMain, indexSub, ((item_data == nullptr) ? 0 : item_data->ID), item_link.c_str(), ((inst_sub == nullptr) ? 0 : inst_sub->GetCharges())); } } @@ -3749,7 +3754,7 @@ void command_spellinfo(Client *c, const Seperator *sep) c->Message(0, " zonetype: %d", s->zonetype); c->Message(0, " EnvironmentType: %d", s->EnvironmentType); c->Message(0, " TimeOfDay: %d", s->TimeOfDay); - c->Message(0, " classes[15]: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", + c->Message(0, " classes[15]: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", s->classes[0], s->classes[1], s->classes[2], s->classes[3], s->classes[4], s->classes[5], s->classes[6], s->classes[7], s->classes[8], s->classes[9], s->classes[10], s->classes[11], s->classes[12], s->classes[13], s->classes[14]); @@ -3879,7 +3884,7 @@ void command_repop(Client *c, const Seperator *sep) LinkedListIterator iterator(zone->spawn2_list); iterator.Reset(); while (iterator.MoreElements()) { - std::string query = StringFormat("DELETE FROM respawn_times WHERE id = %lu AND instance_id = %lu", + std::string query = StringFormat("DELETE FROM respawn_times WHERE id = %lu AND instance_id = %lu", (unsigned long)iterator.GetData()->GetID(), (unsigned long)zone->GetInstanceID()); auto results = database.QueryDatabase(query); @@ -4253,7 +4258,7 @@ void command_spawnfix(Client *c, const Seperator *sep) { return; } - std::string query = StringFormat("UPDATE spawn2 SET x = '%f', y = '%f', z = '%f', heading = '%f' WHERE id = '%i'", + std::string query = StringFormat("UPDATE spawn2 SET x = '%f', y = '%f', z = '%f', heading = '%f' WHERE id = '%i'", c->GetX(), c->GetY(), c->GetZ(), c->GetHeading(),s2->GetID()); auto results = database.QueryDatabase(query); if (!results.Success()) { @@ -4396,11 +4401,11 @@ void command_time(Client *c, const Seperator *sep) c->Message(13, "To set the Time: #time HH [MM]"); TimeOfDay_Struct eqTime; zone->zone_time.GetCurrentEQTimeOfDay( time(0), &eqTime); - sprintf(timeMessage,"%02d:%s%d %s (Timezone: %ih %im)", + sprintf(timeMessage,"%02d:%s%d %s (Timezone: %ih %im)", ((eqTime.hour - 1) % 12) == 0 ? 12 : ((eqTime.hour - 1) % 12), - (eqTime.minute < 10) ? "0" : "", + (eqTime.minute < 10) ? "0" : "", eqTime.minute, - (eqTime.hour >= 13) ? "pm" : "am", + (eqTime.hour >= 13) ? "pm" : "am", zone->zone_time.getEQTimeZoneHr(), zone->zone_time.getEQTimeZoneMin() ); @@ -4842,36 +4847,6 @@ void command_zonestatus(Client *c, const Seperator *sep) } } -void command_manaburn(Client *c, const Seperator *sep) -{ - Mob* target=c->GetTarget(); - - if (c->GetTarget() == 0) - c->Message(0, "#Manaburn needs a target."); - else { - int cur_level=c->GetAA(MANA_BURN);//ManaBurn ID - if (DistanceSquared(c->GetPosition(), target->GetPosition()) > 200) - c->Message(0,"You are too far away from your target."); - else { - if(cur_level == 1) { - if(c->IsAttackAllowed(target)) - { - c->SetMana(0); - int nukedmg=(c->GetMana())*2; - if (nukedmg>0) - { - target->Damage(c, nukedmg, 2751, SkillAbjuration/*hackish*/); - c->Message(4,"You unleash an enormous blast of magical energies."); - } - Log.Out(Logs::General, Logs::Normal, "Manaburn request from %s, damage: %d", c->GetName(), nukedmg); - } - } - else - c->Message(0, "You have not learned this skill."); - } - } -} - void command_doanim(Client *c, const Seperator *sep) { if (!sep->IsNumber(1)) @@ -5586,16 +5561,23 @@ void command_setaapts(Client *c, const Seperator *sep) if(sep->arg[1][0] == '\0' || sep->arg[2][0] == '\0') c->Message(0, "Usage: #setaapts "); - else if(atoi(sep->arg[2]) <= 0 || atoi(sep->arg[2]) > 200) - c->Message(0, "You must have a number greater than 0 for points and no more than 200."); + else if(atoi(sep->arg[2]) <= 0 || atoi(sep->arg[2]) > 5000) + c->Message(0, "You must have a number greater than 0 for points and no more than 5000."); else if(!strcasecmp(sep->arg[1], "group")) { - t->SetLeadershipEXP(atoi(sep->arg[2])*GROUP_EXP_PER_POINT, t->GetRaidEXP()); + t->GetPP().group_leadership_points = atoi(sep->arg[2]); + t->GetPP().group_leadership_exp = 0; + t->Message(MT_Experience, "Setting Group AA points to %u", t->GetPP().group_leadership_points); + t->SendLeadershipEXPUpdate(); } else if(!strcasecmp(sep->arg[1], "raid")) { - t->SetLeadershipEXP(t->GetGroupEXP(), atoi(sep->arg[2])*RAID_EXP_PER_POINT); + t->GetPP().raid_leadership_points = atoi(sep->arg[2]); + t->GetPP().raid_leadership_exp = 0; + t->Message(MT_Experience, "Setting Raid AA points to %u", t->GetPP().raid_leadership_points); + t->SendLeadershipEXPUpdate(); } else { - t->SetEXP(t->GetEXP(),t->GetMaxAAXP()*atoi(sep->arg[2]),false); - t->SendAAStats(); - t->SendAATable(); + t->GetPP().aapoints = atoi(sep->arg[2]); + t->GetPP().expAA = 0; + t->Message(MT_Experience, "Setting personal AA points to %u", t->GetPP().aapoints); + t->SendAlternateAdvancementStats(); } } @@ -5754,7 +5736,7 @@ void command_suspend(Client *c, const Seperator *sep) } std::string query = StringFormat("UPDATE `account` SET `suspendeduntil` = DATE_ADD(NOW(), INTERVAL %i DAY), " - "suspend_reason = '%s' WHERE `id` = %i", + "suspend_reason = '%s' WHERE `id` = %i", duration, EscapeString(message).c_str(), accountID); auto results = database.QueryDatabase(query); @@ -6226,21 +6208,21 @@ void command_npcedit(Client *c, const Seperator *sep) database.QueryDatabase(query); return; } - + if (strcasecmp(sep->arg[1], "meleetype") == 0) { c->Message(15,"NPCID %u now has a primary melee type of %i and a secondary melee type of %i.", npcTypeID, atoi(sep->arg[2]), atoi(sep->arg[3])); std::string query = StringFormat("UPDATE npc_types SET prim_melee_type = %i, sec_melee_type = %i WHERE id = %i", atoi(sep->arg[2]), atoi(sep->arg[3]), npcTypeID); database.QueryDatabase(query); return; } - + if (strcasecmp(sep->arg[1], "rangedtype") == 0) { c->Message(15,"NPCID %u now has a ranged type of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET rangedtype = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); database.QueryDatabase(query); return; } - + if (strcasecmp(sep->arg[1], "ammoidfile") == 0) { c->Message(15,"NPCID %u's ammo id file is now %i", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET ammoidfile = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); @@ -6275,7 +6257,7 @@ void command_npcedit(Client *c, const Seperator *sep) database.QueryDatabase(query); return; } - + if (strcasecmp(sep->arg[1], "walkspeed") == 0) { c->Message(15,"NPCID %u now walks at %f", npcTypeID, atof(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET walkspeed = %f WHERE id = %i", atof(sep->argplus[2]), npcTypeID); @@ -6429,7 +6411,7 @@ void command_npcedit(Client *c, const Seperator *sep) database.QueryDatabase(query); return; } - + if (strcasecmp(sep->arg[1], "Avoidance") == 0) { c->Message(15,"NPCID %u now has %i Avoidance.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET avoidance = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); @@ -6485,7 +6467,7 @@ void command_npcedit(Client *c, const Seperator *sep) database.QueryDatabase(query); return; } - + if (strcasecmp(sep->arg[1], "Attackcount") == 0) { c->Message(15,"NPCID %u now has attack_count set to %i", npcTypeID,atoi(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET attack_count = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); @@ -6522,7 +6504,7 @@ void command_npcedit(Client *c, const Seperator *sep) "luclin_hairstyle = %i, luclin_beard = %i, " "face = %i, drakkin_heritage = %i, " "drakkin_tattoo = %i, drakkin_details = %i " - "WHERE id = %i", + "WHERE id = %i", target->GetHairColor(), target->GetBeardColor(), target->GetHairStyle(), target->GetBeard(), target->GetLuclinFace(), target->GetDrakkinHeritage(), @@ -6608,7 +6590,7 @@ void command_npcedit(Client *c, const Seperator *sep) database.QueryDatabase(query); return; } - + if (strcasecmp(sep->arg[1], "slow_mitigation") == 0) { c->Message(15, "NPCID %u's slow mitigation limit is now %i.", npcTypeID, atoi(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET slow_mitigation = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); @@ -6663,7 +6645,7 @@ void command_qglobal(Client *c, const Seperator *sep) { } if(!strcasecmp(sep->arg[1], "on")) { - std::string query = StringFormat("UPDATE npc_types SET qglobal = 1 WHERE id = '%i'", + std::string query = StringFormat("UPDATE npc_types SET qglobal = 1 WHERE id = '%i'", target->GetNPCTypeID()); auto results = database.QueryDatabase(query); if(!results.Success()) { @@ -6676,7 +6658,7 @@ void command_qglobal(Client *c, const Seperator *sep) { } if(!strcasecmp(sep->arg[1], "off")) { - std::string query = StringFormat("UPDATE npc_types SET qglobal = 0 WHERE id = '%i'", + std::string query = StringFormat("UPDATE npc_types SET qglobal = 0 WHERE id = '%i'", target->GetNPCTypeID()); auto results = database.QueryDatabase(query); if(!results.Success()) { @@ -7072,13 +7054,13 @@ void command_ginfo(Client *c, const Seperator *sep) if(g->membername[r][0] == '\0') continue; c->Message(0, "...Zoned Member: %s, Roles: %s %s %s", g->membername[r], - (g->MemberRoles[r] & RoleAssist) ? "Assist" : "", - (g->MemberRoles[r] & RoleTank) ? "Tank" : "", + (g->MemberRoles[r] & RoleAssist) ? "Assist" : "", + (g->MemberRoles[r] & RoleTank) ? "Tank" : "", (g->MemberRoles[r] & RolePuller) ? "Puller" : ""); } else { c->Message(0, "...In-Zone Member: %s (0x%x) Roles: %s %s %s", g->membername[r], g->members[r], - (g->MemberRoles[r] & RoleAssist) ? "Assist" : "", - (g->MemberRoles[r] & RoleTank) ? "Tank" : "", + (g->MemberRoles[r] & RoleAssist) ? "Assist" : "", + (g->MemberRoles[r] & RoleTank) ? "Tank" : "", (g->MemberRoles[r] & RolePuller) ? "Puller" : ""); } @@ -7241,7 +7223,7 @@ void command_flagedit(Client *c, const Seperator *sep) { flag_name[127] = '\0'; std::string query = StringFormat("UPDATE zone SET flag_needed = '%s' " - "WHERE zoneidnumber = %d AND version = %d", + "WHERE zoneidnumber = %d AND version = %d", flag_name, zoneid, zone->GetInstanceVersion()); auto results = database.QueryDatabase(query); if(!results.Success()) { @@ -7268,7 +7250,7 @@ void command_flagedit(Client *c, const Seperator *sep) { } std::string query = StringFormat("UPDATE zone SET flag_needed = '' " - "WHERE zoneidnumber = %d AND version = %d", + "WHERE zoneidnumber = %d AND version = %d", zoneid, zone->GetInstanceVersion()); auto results = database.QueryDatabase(query); if(!results.Success()) { @@ -7678,56 +7660,6 @@ void command_reloadtitles(Client *c, const Seperator *sep) } -void command_altactivate(Client *c, const Seperator *sep){ - if(sep->arg[1][0] == '\0'){ - c->Message(10, "Invalid argument, usage:"); - c->Message(10, "#altactivate list - lists the AA ID numbers that are available to you"); - c->Message(10, "#altactivate time [argument] - returns the time left until you can use the AA with the ID that matches the argument."); - c->Message(10, "#altactivate [argument] - activates the AA with the ID that matches the argument."); - return; - } - if(!strcasecmp(sep->arg[1], "help")){ - c->Message(10, "Usage:"); - c->Message(10, "#altactivate list - lists the AA ID numbers that are available to you"); - c->Message(10, "#altactivate time [argument] - returns the time left until you can use the AA with the ID that matches the argument."); - c->Message(10, "#altactivate [argument] - activates the AA with the ID that matches the argument."); - return; - } - if(!strcasecmp(sep->arg[1], "list")){ - c->Message(10, "You have access to the following AA Abilities:"); - int x, val; - SendAA_Struct* saa = nullptr; - for(x = 0; x < aaHighestID; x++){ - if(AA_Actions[x][0].spell_id || AA_Actions[x][0].action){ //if there's an action or spell associated we assume it's a valid - val = 0; //and assume if they don't have a value for the first rank then it isn't valid for any rank - saa = nullptr; - val = c->GetAA(x); - if(val){ - saa = zone->FindAA(x); - c->Message(10, "%d: %s %d", x, saa->name, val); - } - } - } - } - else if(!strcasecmp(sep->arg[1], "time")){ - int ability = atoi(sep->arg[2]); - if(c->GetAA(ability)){ - int remain = c->GetPTimers().GetRemainingTime(pTimerAAStart + ability); - if(remain) - c->Message(10, "You may use that ability in %d minutes and %d seconds.", (remain/60), (remain%60)); - else - c->Message(10, "You may use that ability now."); - } - else{ - c->Message(10, "You do not have access to that ability."); - } - } - else - { - c->ActivateAA((aaID) atoi(sep->arg[1])); - } -} - void command_traindisc(Client *c, const Seperator *sep) { uint8 max_level, min_level; @@ -7874,7 +7806,7 @@ void command_deletegraveyard(Client *c, const Seperator *sep) return; } -void command_summonburriedplayercorpse(Client *c, const Seperator *sep) +void command_summonburiedplayercorpse(Client *c, const Seperator *sep) { Client *t=c; @@ -7888,12 +7820,12 @@ void command_summonburriedplayercorpse(Client *c, const Seperator *sep) Corpse* PlayerCorpse = database.SummonBuriedCharacterCorpses(t->CharacterID(), t->GetZoneID(), zone->GetInstanceID(), t->GetPosition()); if(!PlayerCorpse) - c->Message(0, "Your target doesn't have any burried corpses."); + c->Message(0, "Your target doesn't have any buried corpses."); return; } -void command_getplayerburriedcorpsecount(Client *c, const Seperator *sep) +void command_getplayerburiedcorpsecount(Client *c, const Seperator *sep) { Client *t=c; @@ -7907,9 +7839,9 @@ void command_getplayerburriedcorpsecount(Client *c, const Seperator *sep) uint32 CorpseCount = database.GetCharacterBuriedCorpseCount(t->CharacterID()); if(CorpseCount > 0) - c->Message(0, "Your target has a total of %u burried corpses.", CorpseCount); + c->Message(0, "Your target has a total of %u buried corpses.", CorpseCount); else - c->Message(0, "Your target doesn't have any burried corpses."); + c->Message(0, "Your target doesn't have any buried corpses."); return; } @@ -7950,7 +7882,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) std::string query = StringFormat("INSERT INTO spawngroup " "(name, spawn_limit, dist, max_x, min_x, max_y, min_y, delay) " - "VALUES (\"%s\", %i, %f, %f, %f, %f, %f, %i)", + "VALUES (\"%s\", %i, %f, %f, %f, %f, %f, %i)", sep->arg[2], (sep->arg[3]? atoi(sep->arg[3]): 0), (sep->arg[4]? atof(sep->arg[4]): 0), @@ -7977,7 +7909,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) } std::string query = StringFormat("INSERT INTO spawnentry (spawngroupID, npcID, chance) " - "VALUES (%i, %i, %i)", + "VALUES (%i, %i, %i)", atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4])); auto results = database.QueryDatabase(query); if (!results.Success()) { @@ -7998,7 +7930,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) } std::string query = StringFormat("UPDATE spawngroup SET dist = '%f', max_x = '%f', min_x = '%f', " - "max_y = '%f', min_y = '%f', delay = '%i' WHERE id = '%i'", + "max_y = '%f', min_y = '%f', delay = '%i' WHERE id = '%i'", atof(sep->arg[3]), atof(sep->arg[4]), atof(sep->arg[5]), atof(sep->arg[6]), atof(sep->arg[7]), atoi(sep->arg[8]), atoi(sep->arg[2])); @@ -8083,7 +8015,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) } std::string query = StringFormat("UPDATE spawn2 SET x = '%f', y = '%f', z = '%f', heading = '%f' " - "WHERE id = '%i'", + "WHERE id = '%i'", c->GetX(), c->GetY(), c->GetZ(), c->GetHeading(),s2->GetID()); auto results = database.QueryDatabase(query); if (!results.Success()) { @@ -8154,7 +8086,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) int16 version = atoi(sep->arg[2]); std::string query = StringFormat("UPDATE spawn2 SET version = %i " - "WHERE spawngroupID = '%i'", + "WHERE spawngroupID = '%i'", version, c->GetTarget()->CastToNPC()->GetSp2()); auto results = database.QueryDatabase(query); if (!results.Success()) { @@ -10205,7 +10137,7 @@ void command_zopp(Client *c, const Seperator *sep) ItemInst* FakeItemInst = database.CreateItem(FakeItem, charges); c->SendItemPacket(slotid, FakeItemInst, packettype); - c->Message(0, "Sending zephyr op packet to client - [%s] %s (%u) with %i %s to slot %i.", + c->Message(0, "Sending zephyr op packet to client - [%s] %s (%u) with %i %s to slot %i.", packettype == ItemPacketTrade ? "Trade" : "Summon", FakeItem->Name, itemid, charges, std::abs(charges == 1) ? "charge" : "charges", slotid); safe_delete(FakeItemInst); @@ -10424,7 +10356,7 @@ void command_tune(Client *c, const Seperator *sep) ac_override = 0; if (!info_level) info_level = 1; - + if(!strcasecmp(sep->arg[2], "A")) c->Tune_FindATKByPctMitigation(defender, attacker, pct_mitigation, interval, max_loop,ac_override,info_level); else if(!strcasecmp(sep->arg[2], "B")) @@ -10459,7 +10391,7 @@ void command_tune(Client *c, const Seperator *sep) atk_override = 0; if (!info_level) info_level = 1; - + if(!strcasecmp(sep->arg[2], "A")) c->Tune_FindACByPctMitigation(defender, attacker, pct_mitigation, interval, max_loop,atk_override,info_level); else if(!strcasecmp(sep->arg[2], "B")) @@ -10501,7 +10433,7 @@ void command_tune(Client *c, const Seperator *sep) c->Message(10, "#Tune - Error hit chance out of bounds. [Max %.2f Min .2f]", RuleR(Combat,MaxChancetoHit),RuleR(Combat,MinChancetoHit)); return; } - + if(!strcasecmp(sep->arg[2], "A")) c->Tune_FindAccuaryByHitChance(defender, attacker, hit_chance, interval, max_loop,avoid_override,info_level); else if(!strcasecmp(sep->arg[2], "B")) @@ -10543,7 +10475,7 @@ void command_tune(Client *c, const Seperator *sep) c->Message(10, "#Tune - Error hit chance out of bounds. [Max %.2f Min .2f]", RuleR(Combat,MaxChancetoHit),RuleR(Combat,MinChancetoHit)); return; } - + if(!strcasecmp(sep->arg[2], "A")) c->Tune_FindAvoidanceByHitChance(defender, attacker, hit_chance, interval, max_loop,acc_override, info_level); else if(!strcasecmp(sep->arg[2], "B")) @@ -10569,7 +10501,7 @@ void command_logtest(Client *c, const Seperator *sep){ for (i = 0; i < atoi(sep->arg[1]); i++){ Log.Out(Logs::General, Logs::Debug, "[%u] Test #2... Took %f seconds", i, ((float)(std::clock() - t)) / CLOCKS_PER_SEC); } - + } } @@ -10625,7 +10557,7 @@ void command_logs(Client *c, const Seperator *sep){ c->Message(15, "Your Log Settings have been applied"); c->Message(15, "Output Method: %s :: Debug Level: %i - Category: %s", sep->arg[2], atoi(sep->arg[4]), Logs::LogCategoryName[atoi(sep->arg[3])]); } - /* We use a general 'is_category_enabled' now, let's update when we update any output settings + /* We use a general 'is_category_enabled' now, let's update when we update any output settings This is used in hot places of code to check if its enabled in any way before triggering logs */ if (sep->arg[4] > 0){ @@ -10653,9 +10585,41 @@ void command_mysqltest(Client *c, const Seperator *sep) for (i = 0; i < atoi(sep->arg[1]); i++){ std::string query = "SELECT * FROM `zone`"; auto results = database.QueryDatabase(query); - } + } } - Log.Out(Logs::General, Logs::Debug, "MySQL Test... Took %f seconds", ((float)(std::clock() - t)) / CLOCKS_PER_SEC); + Log.Out(Logs::General, Logs::Debug, "MySQL Test... Took %f seconds", ((float)(std::clock() - t)) / CLOCKS_PER_SEC); +} + +void command_resetaa_timer(Client *c, const Seperator *sep) { + Client *target = nullptr; + if(!c->GetTarget() || !c->GetTarget()->IsClient()) { + target = c; + } else { + target = c->GetTarget()->CastToClient(); + } + + if(sep->IsNumber(1)) + { + int timer_id = atoi(sep->arg[1]); + c->Message(0, "Reset of timer %i for %s", timer_id, c->GetName()); + c->ResetAlternateAdvancementTimer(timer_id); + } + else if(!strcasecmp(sep->arg[1], "all")) + { + c->Message(0, "Reset all timers for %s", c->GetName()); + c->ResetAlternateAdvancementTimers(); + } + else + { + c->Message(0, "usage: #resetaa_timer [all | timer_id]"); + } +} + +void command_reloadaa(Client *c, const Seperator *sep) { + c->Message(0, "Reloading Alternate Advancement Data..."); + zone->LoadAlternateAdvancement(); + c->Message(0, "Alternate Advancement Data Reloaded"); + entity_list.SendAlternateAdvancementStats(); } void command_hotfix(Client *c, const Seperator *sep) { diff --git a/zone/command.h b/zone/command.h index 7c33ef49a..cdf67639c 100644 --- a/zone/command.h +++ b/zone/command.h @@ -216,7 +216,6 @@ void command_time(Client *c, const Seperator *sep); void command_guild(Client *c, const Seperator *sep); bool helper_guild_edit(Client *c, uint32 dbid, uint32 eqid, uint8 rank, const char* what, const char* value); void command_zonestatus(Client *c, const Seperator *sep); -void command_manaburn(Client *c, const Seperator *sep); void command_doanim(Client *c, const Seperator *sep); void command_randomfeatures(Client *c, const Seperator *sep); void command_face(Client *c, const Seperator *sep); @@ -276,13 +275,12 @@ void command_guildlist(Client *c, const Seperator *sep); void command_rules(Client *c, const Seperator *sep); void command_task(Client *c, const Seperator *sep); void command_reloadtitles(Client *c, const Seperator *sep); -void command_altactivate(Client *c, const Seperator *sep); void command_refundaa(Client *c, const Seperator *sep); void command_traindisc(Client *c, const Seperator *sep); void command_deletegraveyard(Client *c, const Seperator *sep); void command_setgraveyard(Client *c, const Seperator *sep); -void command_getplayerburriedcorpsecount(Client *c, const Seperator *sep); -void command_summonburriedplayercorpse(Client *c, const Seperator *sep); +void command_getplayerburiedcorpsecount(Client *c, const Seperator *sep); +void command_summonburiedplayercorpse(Client *c, const Seperator *sep); void command_unscribespell(Client *c, const Seperator *sep); void command_scribespell(Client *c, const Seperator *sep); void command_refreshgroup(Client *c, const Seperator *sep); @@ -325,6 +323,8 @@ void command_tune(Client *c, const Seperator *sep); void command_logtest(Client *c, const Seperator *sep); void command_mysqltest(Client *c, const Seperator *sep); void command_logs(Client *c, const Seperator *sep); +void command_resetaa_timer(Client *c, const Seperator *sep); +void command_reloadaa(Client *c, const Seperator *sep); void command_hotfix(Client *c, const Seperator *sep); #ifdef EQPROFILE diff --git a/zone/common.h b/zone/common.h index d9e3637a8..0b875456b 100644 --- a/zone/common.h +++ b/zone/common.h @@ -22,6 +22,7 @@ #define TARGET_RING_SPELL_SLOT 12 #define DISCIPLINE_SPELL_SLOT 10 #define ABILITY_SPELL_SLOT 9 +#define ALTERNATE_ABILITY_SPELL_SLOT 0xFF //LOS Parameters: #define HEAD_POSITION 0.9f //ratio of GetSize() where NPCs see from @@ -400,7 +401,6 @@ struct StatBonuses { int32 Metabolism; // Food/drink consumption rates. bool Sanctuary; // Sanctuary effect, lowers place on hate list until cast on others. int32 FactionModPct; // Modifies amount of faction gained. - int32 MeleeVulnerability; // Weakness/mitigation to melee damage bool LimitToSkill[HIGHEST_SKILL+2]; // Determines if we need to search for a skill proc. uint32 SkillProc[MAX_SKILL_PROCS]; // Max number of spells containing skill_procs. uint32 SkillProcSuccess[MAX_SKILL_PROCS]; // Max number of spells containing skill_procs_success. @@ -412,7 +412,7 @@ struct StatBonuses { int8 BaseMovementSpeed; // Adjust base run speed, does not stack with other movement bonuses. uint8 IncreaseRunSpeedCap; // Increase max run speed above cap. int32 DoubleSpecialAttack; // Chance to to perform a double special attack (ie flying kick 2x) - int32 SpecialAttackKBProc[2]; // Chance to to do a knockback from special attacks. (0 = chance 1 = Skill) + int32 SkillAttackProc[3]; // [0] chance to proc [2] spell on [1] skill usage uint8 FrontalStunResist; // Chance to resist a frontal stun int32 BindWound; // Increase amount of HP by percent. int32 MaxBindWound; // Increase max amount of HP you can bind wound. @@ -461,6 +461,7 @@ struct StatBonuses { uint8 AssassinateLevel; // Max Level Assassinate will be effective at. int32 PetMeleeMitigation; // Add AC to owner's pet. bool IllusionPersistence; // Causes illusions not to fade. + uint16 extra_xtargets; // extra xtarget entries }; typedef struct diff --git a/zone/corpse.cpp b/zone/corpse.cpp index fad65aa3a..af937e41b 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -835,7 +835,7 @@ bool Corpse::Process() { Save(); player_corpse_depop = true; corpse_db_id = 0; - Log.Out(Logs::General, Logs::None, "Tagged %s player corpse has burried.", this->GetName()); + Log.Out(Logs::General, Logs::None, "Tagged %s player corpse has buried.", this->GetName()); } else { Log.Out(Logs::General, Logs::Error, "Unable to bury %s player corpse.", this->GetName()); diff --git a/zone/effects.cpp b/zone/effects.cpp index 55e56cdac..85a858c94 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -421,12 +421,6 @@ int32 Mob::GetActSpellDuration(uint16 spell_id, int32 duration) int tic_inc = 0; tic_inc = GetFocusEffect(focusSpellDurByTic, spell_id); - // unsure on the exact details, but bard songs that don't cost mana at some point get an extra tick, 60 for now - // a level 53 bard reported getting 2 tics - // bard DOTs do get this extra tick, but beneficial long bard songs don't? (invul, crescendo) - if ((IsShortDurationBuff(spell_id) || IsDetrimentalSpell(spell_id)) && IsBardSong(spell_id) && - spells[spell_id].mana == 0 && GetClass() == BARD && GetLevel() > 60) - tic_inc++; float focused = ((duration * increase) / 100.0f) + tic_inc; int ifocused = static_cast(focused); @@ -878,7 +872,7 @@ void EntityList::AEBardPulse(Mob *caster, Mob *center, uint16 spell_id, bool aff caster->CastToClient()->CheckSongSkillIncrease(spell_id); } -//Dook- Rampage and stuff for clients. +// Rampage and stuff for clients. Normal and Duration rampages //NPCs handle it differently in Mob::Rampage void EntityList::AEAttack(Mob *attacker, float dist, int Hand, int count, bool IsFromSpell) { //Dook- Will need tweaking, currently no pets or players or horses @@ -896,7 +890,10 @@ void EntityList::AEAttack(Mob *attacker, float dist, int Hand, int count, bool I && curmob->GetRace() != 216 && curmob->GetRace() != 472 /* dont attack horses */ && (DistanceSquared(curmob->GetPosition(), attacker->GetPosition()) <= dist2) ) { - attacker->Attack(curmob, Hand, false, false, IsFromSpell); + if (!attacker->IsClient() || attacker->GetClass() == MONK || attacker->GetClass() == RANGER) + attacker->Attack(curmob, Hand, false, false, IsFromSpell); + else + attacker->CastToClient()->DoAttackRounds(curmob, Hand, IsFromSpell); hit++; if (count != 0 && hit >= count) return; diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 6db7777ac..871d47074 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -1748,18 +1748,18 @@ XS(XS__clear_zone_flag) XSRETURN_EMPTY; } -XS(XS__summonburriedplayercorpse); -XS(XS__summonburriedplayercorpse) +XS(XS__summonburiedplayercorpse); +XS(XS__summonburiedplayercorpse) { dXSARGS; if (items != 5) - Perl_croak(aTHX_ "Usage: summonburriedplayercorpse(char_id,dest_x,dest_y,dest_z,dest_heading)"); + Perl_croak(aTHX_ "Usage: summonburiedplayercorpse(char_id,dest_x,dest_y,dest_z,dest_heading)"); bool RETVAL; uint32 char_id = (int)SvIV(ST(0)); auto position = glm::vec4((float)SvIV(ST(1)), (float)SvIV(ST(2)), (float)SvIV(ST(3)),(float)SvIV(ST(4))); - RETVAL = quest_manager.summonburriedplayercorpse(char_id, position); + RETVAL = quest_manager.summonburiedplayercorpse(char_id, position); ST(0) = boolSV(RETVAL); sv_2mortal(ST(0)); @@ -1784,19 +1784,19 @@ XS(XS__summonallplayercorpses) XSRETURN(1); } -XS(XS__getplayerburriedcorpsecount); -XS(XS__getplayerburriedcorpsecount) +XS(XS__getplayerburiedcorpsecount); +XS(XS__getplayerburiedcorpsecount) { dXSARGS; if (items != 1) - Perl_croak(aTHX_ "Usage: getplayerburriedcorpsecount(char_id)"); + Perl_croak(aTHX_ "Usage: getplayerburiedcorpsecount(char_id)"); uint32 RETVAL; dXSTARG; uint32 char_id = (int)SvIV(ST(0)); - RETVAL = quest_manager.getplayerburriedcorpsecount(char_id); + RETVAL = quest_manager.getplayerburiedcorpsecount(char_id); XSprePUSH; PUSHu((IV)RETVAL); XSRETURN(1); @@ -3712,7 +3712,7 @@ EXTERN_C XS(boot_quest) newXS(strcpy(buf, "get_spawn_condition"), XS__get_spawn_condition, file); newXS(strcpy(buf, "getguildnamebyid"), XS__getguildnamebyid, file); newXS(strcpy(buf, "getlevel"), XS__getlevel, file); - newXS(strcpy(buf, "getplayerburriedcorpsecount"), XS__getplayerburriedcorpsecount, file); + newXS(strcpy(buf, "getplayerburiedcorpsecount"), XS__getplayerburiedcorpsecount, file); newXS(strcpy(buf, "gettaskactivitydonecount"), XS__gettaskactivitydonecount, file); newXS(strcpy(buf, "givecash"), XS__givecash, file); newXS(strcpy(buf, "gmmove"), XS__gmmove, file); @@ -3802,7 +3802,7 @@ EXTERN_C XS(boot_quest) newXS(strcpy(buf, "stopalltimers"), XS__stopalltimers, file); newXS(strcpy(buf, "stoptimer"), XS__stoptimer, file); newXS(strcpy(buf, "summonallplayercorpses"), XS__summonallplayercorpses, file); - newXS(strcpy(buf, "summonburriedplayercorpse"), XS__summonburriedplayercorpse, file); + newXS(strcpy(buf, "summonburiedplayercorpse"), XS__summonburiedplayercorpse, file); newXS(strcpy(buf, "summonitem"), XS__summonitem, file); newXS(strcpy(buf, "surname"), XS__surname, file); newXS(strcpy(buf, "targlobal"), XS__targlobal, file); diff --git a/zone/entity.cpp b/zone/entity.cpp index c7493b907..8749b102c 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -58,7 +58,6 @@ extern uint32 numclients; extern PetitionList petition_list; extern char errorname[32]; -extern uint16 adverrornum; Entity::Entity() { @@ -4705,3 +4704,11 @@ void EntityList::StopMobAI() mob.second->AI_ShutDown(); } } + +void EntityList::SendAlternateAdvancementStats() { + for(auto &c : client_list) { + c.second->SendAlternateAdvancementTable(); + c.second->SendAlternateAdvancementStats(); + c.second->SendAlternateAdvancementPoints(); + } +} diff --git a/zone/entity.h b/zone/entity.h index 446c5d505..1adf23783 100644 --- a/zone/entity.h +++ b/zone/entity.h @@ -398,7 +398,6 @@ public: void SaveAllClientsTaskState(); void ReloadAllClientsTaskState(int TaskID=0); - uint16 CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time = 300000); uint16 CreateGroundObjectFromModel(const char *model, const glm::vec4& position, uint8 type = 0x00, uint32 decay_time = 0); uint16 CreateDoor(const char *model, const glm::vec4& position, uint8 type = 0, uint16 size = 100); @@ -429,6 +428,7 @@ public: uint16 GetFreeID(); void RefreshAutoXTargets(Client *c); void RefreshClientXTargets(Client *c); + void SendAlternateAdvancementStats(); protected: friend class Zone; diff --git a/zone/exp.cpp b/zone/exp.cpp index 826b12e67..0172263e7 100644 --- a/zone/exp.cpp +++ b/zone/exp.cpp @@ -515,7 +515,7 @@ void Client::SetEXP(uint32 set_exp, uint32 set_aaxp, bool isrezzexp) { if (GetLevel() < 51) { m_epp.perAA = 0; // turn off aa exp if they drop below 51 } else - SendAAStats(); //otherwise, send them an AA update + SendAlternateAdvancementStats(); //otherwise, send them an AA update //send the expdata in any case so the xp bar isnt stuck after leveling uint32 tmpxp1 = GetEXPForLevel(GetLevel()+1); diff --git a/zone/hate_list.cpp b/zone/hate_list.cpp index e68924844..86a75a545 100644 --- a/zone/hate_list.cpp +++ b/zone/hate_list.cpp @@ -535,37 +535,20 @@ int HateList::AreaRampage(Mob *caster, Mob *target, int count, ExtraAttackOption if (!target || !caster) return 0; - int ret = 0; - std::list id_list; - auto iterator = list.begin(); - while (iterator != list.end()) - { - struct_HateList *h = (*iterator); - ++iterator; - if (h && h->entity_on_hatelist && h->entity_on_hatelist != caster) - { - if (caster->CombatRange(h->entity_on_hatelist)) - { - id_list.push_back(h->entity_on_hatelist->GetID()); - ++ret; + int hit_count = 0; + auto it = list.begin(); + while (it != list.end() && hit_count < count) { + struct_HateList *h = (*it); + if (h && h->entity_on_hatelist && h->entity_on_hatelist != caster) { + if (caster->CombatRange(h->entity_on_hatelist)) { + ++hit_count; + caster->ProcessAttackRounds(h->entity_on_hatelist, opts); } } + ++it; } - std::list::iterator iter = id_list.begin(); - while (iter != id_list.end()) - { - Mob *cur = entity_list.GetMobID((*iter)); - if (cur) - { - for (int i = 0; i < count; ++i) { - caster->Attack(cur, MainPrimary, false, false, false, opts); - } - } - iter++; - } - - return ret; + return hit_count; } void HateList::SpellCast(Mob *caster, uint32 spell_id, float range, Mob* ae_center) diff --git a/zone/loottables.cpp b/zone/loottables.cpp index e3014b12e..12766b57f 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -334,9 +334,11 @@ void NPC::AddLootDrop(const Item_Struct *item2, ItemList* itemlist, int16 charge eslot = MaterialPrimary; if (item2->Damage > 0) SendAddPlayerState(PlayerState::PrimaryWeaponEquipped); + if (item2->ItemType == ItemType2HBlunt || item2->ItemType == ItemType2HSlash || item2->ItemType == ItemType2HPiercing) + SetTwoHanderEquipped(true); } else if (foundslot == MainSecondary - && (GetOwner() != nullptr || (GetLevel() >= 13 && zone->random.Roll(NPC_DW_CHANCE)) || (item2->Damage==0)) && + && (GetOwner() != nullptr || (CanThisClassDualWield() && zone->random.Roll(NPC_DW_CHANCE)) || (item2->Damage==0)) && (item2->ItemType == ItemType1HSlash || item2->ItemType == ItemType1HBlunt || item2->ItemType == ItemTypeShield || item2->ItemType == ItemType1HPiercing)) { diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 47607b705..d69924577 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -350,6 +350,11 @@ const char *Lua_Client::AccountName() { return self->AccountName(); } +int Lua_Client::GetAccountAge() { + Lua_Safe_Call_Int(); + return time(nullptr) - self->GetAccountCreation(); +} + int Lua_Client::Admin() { Lua_Safe_Call_Bool(); return self->Admin(); @@ -1024,7 +1029,17 @@ void Lua_Client::AddLevelBasedExp(int exp_pct, int max_level) { void Lua_Client::IncrementAA(int aa) { Lua_Safe_Call_Void(); - self->IncrementAA(aa); + self->IncrementAlternateAdvancementRank(aa); +} + +bool Lua_Client::GrantAlternateAdvancementAbility(int aa_id, int points) { + Lua_Safe_Call_Bool(); + self->GrantAlternateAdvancementAbility(aa_id, points); +} + +bool Lua_Client::GrantAlternateAdvancementAbility(int aa_id, int points, bool ignore_cost) { + Lua_Safe_Call_Bool(); + self->GrantAlternateAdvancementAbility(aa_id, points, ignore_cost); } void Lua_Client::MarkSingleCompassLoc(float in_x, float in_y, float in_z) { @@ -1365,6 +1380,7 @@ luabind::scope lua_register_client() { .def("GetRawItemAC", (int(Lua_Client::*)(void))&Lua_Client::GetRawItemAC) .def("AccountID", (uint32(Lua_Client::*)(void))&Lua_Client::AccountID) .def("AccountName", (const char *(Lua_Client::*)(void))&Lua_Client::AccountName) + .def("GetAccountAge", (int(Lua_Client::*)(void))&Lua_Client::GetAccountAge) .def("Admin", (int(Lua_Client::*)(void))&Lua_Client::Admin) .def("CharacterID", (uint32(Lua_Client::*)(void))&Lua_Client::CharacterID) .def("GuildRank", (int(Lua_Client::*)(void))&Lua_Client::GuildRank) @@ -1500,6 +1516,8 @@ luabind::scope lua_register_client() { .def("AddLevelBasedExp", (void(Lua_Client::*)(int))&Lua_Client::AddLevelBasedExp) .def("AddLevelBasedExp", (void(Lua_Client::*)(int,int))&Lua_Client::AddLevelBasedExp) .def("IncrementAA", (void(Lua_Client::*)(int))&Lua_Client::IncrementAA) + .def("GrantAlternateAdvancementAbility", (bool(Lua_Client::*)(int, int))&Lua_Client::GrantAlternateAdvancementAbility) + .def("GrantAlternateAdvancementAbility", (bool(Lua_Client::*)(int, int, bool))&Lua_Client::GrantAlternateAdvancementAbility) .def("MarkSingleCompassLoc", (void(Lua_Client::*)(float,float,float))&Lua_Client::MarkSingleCompassLoc) .def("MarkSingleCompassLoc", (void(Lua_Client::*)(float,float,float,int))&Lua_Client::MarkSingleCompassLoc) .def("GetNextAvailableSpellBookSlot", (int(Lua_Client::*)(void))&Lua_Client::GetNextAvailableSpellBookSlot) diff --git a/zone/lua_client.h b/zone/lua_client.h index 8f930fc26..dd1059a0a 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -166,9 +166,9 @@ public: void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3); void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4); void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5); - void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, + void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, bool attuned); - void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, + void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, bool attuned, int to_slot); void SetStats(int type, int value); void IncStats(int type, int value); @@ -233,6 +233,8 @@ public: void AddLevelBasedExp(int exp_pct); void AddLevelBasedExp(int exp_pct, int max_level); void IncrementAA(int aa); + bool GrantAlternateAdvancementAbility(int aa_id, int points); + bool GrantAlternateAdvancementAbility(int aa_id, int points, bool ignore_cost); void MarkSingleCompassLoc(float in_x, float in_y, float in_z); void MarkSingleCompassLoc(float in_x, float in_y, float in_z, int count); int GetNextAvailableSpellBookSlot(); @@ -260,6 +262,7 @@ public: bool HasSpellScribed(int spell_id); void SetAccountFlag(std::string flag, std::string val); std::string GetAccountFlag(std::string flag); + int GetAccountAge(); Lua_Group GetGroup(); Lua_Raid GetRaid(); bool PutItemInInventory(int slot_id, Lua_ItemInst inst); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index bf65fea7c..483426b2e 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -513,16 +513,16 @@ void lua_toggle_spawn_event(int event_id, bool enable, bool strict, bool reset) quest_manager.toggle_spawn_event(event_id, enable, strict, reset); } -void lua_summon_burried_player_corpse(uint32 char_id, float x, float y, float z, float h) { - quest_manager.summonburriedplayercorpse(char_id, glm::vec4(x, y, z, h)); +void lua_summon_buried_player_corpse(uint32 char_id, float x, float y, float z, float h) { + quest_manager.summonburiedplayercorpse(char_id, glm::vec4(x, y, z, h)); } void lua_summon_all_player_corpses(uint32 char_id, float x, float y, float z, float h) { quest_manager.summonallplayercorpses(char_id, glm::vec4(x, y, z, h)); } -int lua_get_player_burried_corpse_count(uint32 char_id) { - return quest_manager.getplayerburriedcorpsecount(char_id); +int lua_get_player_buried_corpse_count(uint32 char_id) { + return quest_manager.getplayerburiedcorpsecount(char_id); } bool lua_bury_player_corpse(uint32 char_id) { @@ -1524,9 +1524,9 @@ luabind::scope lua_register_general() { luabind::def("spawn_condition", &lua_spawn_condition), luabind::def("get_spawn_condition", &lua_get_spawn_condition), luabind::def("toggle_spawn_event", &lua_toggle_spawn_event), - luabind::def("summon_burried_player_corpse", &lua_summon_burried_player_corpse), + luabind::def("summon_buried_player_corpse", &lua_summon_buried_player_corpse), luabind::def("summon_all_player_corpses", &lua_summon_all_player_corpses), - luabind::def("get_player_burried_corpse_count", &lua_get_player_burried_corpse_count), + luabind::def("get_player_buried_corpse_count", &lua_get_player_buried_corpse_count), luabind::def("bury_player_corpse", &lua_bury_player_corpse), luabind::def("task_selector", &lua_task_selector), luabind::def("task_set_selector", &lua_task_set_selector), diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index f4d7d64cb..431f18ffe 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -790,7 +790,7 @@ bool Lua_Mob::CastSpell(int spell_id, int target_id, int slot, int cast_time, in int16 res = resist_adjust; return self->CastSpell(spell_id, target_id, slot, cast_time, mana_cost, nullptr, static_cast(item_slot), - static_cast(timer), static_cast(timer_duration), 0, &res); + static_cast(timer), static_cast(timer_duration), &res); } bool Lua_Mob::SpellFinished(int spell_id, Lua_Mob target) { @@ -1195,6 +1195,21 @@ int Lua_Mob::GetAA(int id) { return self->GetAA(id); } +int Lua_Mob::GetAAByAAID(int id) { + Lua_Safe_Call_Int(); + return self->GetAAByAAID(id); +} + +bool Lua_Mob::SetAA(int rank_id, int new_value) { + Lua_Safe_Call_Bool(); + return self->SetAA(rank_id, new_value); +} + +bool Lua_Mob::SetAA(int rank_id, int new_value, int charges) { + Lua_Safe_Call_Bool(); + return self->SetAA(rank_id, new_value, charges); +} + bool Lua_Mob::DivineAura() { Lua_Safe_Call_Bool(); return self->DivineAura(); @@ -2074,6 +2089,9 @@ luabind::scope lua_register_mob() { .def("CheckHealAggroAmount", (int(Lua_Mob::*)(int))&Lua_Mob::CheckHealAggroAmount) .def("CheckHealAggroAmount", (int(Lua_Mob::*)(int,uint32))&Lua_Mob::CheckHealAggroAmount) .def("GetAA", (int(Lua_Mob::*)(int))&Lua_Mob::GetAA) + .def("GetAAByAAID", (int(Lua_Mob::*)(int))&Lua_Mob::GetAAByAAID) + .def("SetAA", (bool(Lua_Mob::*)(int,int))&Lua_Mob::SetAA) + .def("SetAA", (bool(Lua_Mob::*)(int,int,int))&Lua_Mob::SetAA) .def("DivineAura", (bool(Lua_Mob::*)(void))&Lua_Mob::DivineAura) .def("SetOOCRegen", (void(Lua_Mob::*)(int))&Lua_Mob::SetOOCRegen) .def("GetEntityVariable", (const char*(Lua_Mob::*)(const char*))&Lua_Mob::GetEntityVariable) @@ -2216,7 +2234,14 @@ luabind::scope lua_register_special_abilities() { luabind::value("destructible_object", static_cast(DESTRUCTIBLE_OBJECT)), luabind::value("no_harm_from_client", static_cast(NO_HARM_FROM_CLIENT)), luabind::value("always_flee", static_cast(ALWAYS_FLEE)), - luabind::value("flee_percent", static_cast(FLEE_PERCENT)) + luabind::value("flee_percent", static_cast(FLEE_PERCENT)), + luabind::value("allow_beneficial", static_cast(ALLOW_BENEFICIAL)), + luabind::value("disable_melee", static_cast(DISABLE_MELEE)), + luabind::value("npc_chase_distance", static_cast(NPC_CHASE_DISTANCE)), + luabind::value("allow_to_tank", static_cast(ALLOW_TO_TANK)), + luabind::value("ignore_root_aggro_rules", static_cast(IGNORE_ROOT_AGGRO_RULES)), + luabind::value("casting_resist_diff", static_cast(CASTING_RESIST_DIFF)), + luabind::value("counter_avoid_damage", static_cast(COUNTER_AVOID_DAMAGE)) ]; } diff --git a/zone/lua_mob.h b/zone/lua_mob.h index 023fedd2a..4f427aca5 100644 --- a/zone/lua_mob.h +++ b/zone/lua_mob.h @@ -249,6 +249,9 @@ public: int CheckHealAggroAmount(int spell_id); int CheckHealAggroAmount(int spell_id, uint32 heal_possible); int GetAA(int id); + int GetAAByAAID(int id); + bool SetAA(int rank_id, int new_value); + bool SetAA(int rank_id, int new_value, int charges); bool DivineAura(); void SetOOCRegen(int regen); const char* GetEntityVariable(const char *name); diff --git a/zone/mob.cpp b/zone/mob.cpp index b107565bc..0b46c8b12 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -211,6 +211,7 @@ Mob::Mob(const char* in_name, trackable = true; has_shieldequiped = false; has_twohandbluntequiped = false; + has_twohanderequipped = false; has_numhits = false; has_MGB = false; has_ProjectIllusion = false; @@ -307,8 +308,8 @@ Mob::Mob(const char* in_name, casting_spell_id = 0; casting_spell_timer = 0; casting_spell_timer_duration = 0; - casting_spell_type = 0; casting_spell_inventory_slot = 0; + casting_spell_aa_id = 0; target = 0; ActiveProjectileATK = false; @@ -725,7 +726,7 @@ int Mob::_GetFearSpeed() const { movemod = -85; if (IsClient()) { - if (CastToClient()->IsRunning()) + if (CastToClient()->GetRunMode()) speed_mod = GetBaseRunspeed(); else speed_mod = GetBaseWalkspeed(); @@ -1085,7 +1086,7 @@ void Mob::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) ns->spawn.max_hp = 100; //this field needs a better name ns->spawn.race = race; ns->spawn.runspeed = runspeed; - ns->spawn.walkspeed = runspeed * 0.5f; + ns->spawn.walkspeed = walkspeed; ns->spawn.class_ = class_; ns->spawn.gender = gender; ns->spawn.level = level; @@ -1142,6 +1143,10 @@ void Mob::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) else ns->spawn.flymode = flymode; + if(IsBoat()) { + ns->spawn.flymode = 1; + } + ns->spawn.lastName[0] = '\0'; strn0cpy(ns->spawn.lastName, lastname, sizeof(ns->spawn.lastName)); @@ -1354,8 +1359,12 @@ void Mob::SendHPUpdate(bool skip_self) } } + bool dospam = RuleB(Character, SpamHPUpdates); // send to self - we need the actual hps here - if(IsClient() && !skip_self) { + if(IsClient() && (!skip_self || dospam)) { + + this->CastToClient()->SendHPUpdateMarquee(); + EQApplicationPacket* hp_app2 = new EQApplicationPacket(OP_HPUpdate,sizeof(SpawnHPUpdate_Struct)); SpawnHPUpdate_Struct* ds = (SpawnHPUpdate_Struct*)hp_app2->pBuffer; ds->cur_hp = CastToClient()->GetHP() - itembonuses.HP; @@ -1364,7 +1373,8 @@ void Mob::SendHPUpdate(bool skip_self) CastToClient()->QueuePacket(hp_app2); safe_delete(hp_app2); } - ResetHPUpdateTimer(); // delay the timer + if (!dospam) + ResetHPUpdateTimer(); // delay the timer } // this one just warps the mob to the current location @@ -1385,19 +1395,23 @@ void Mob::SendPosUpdate(uint8 iSendToSelf) { MakeSpawnUpdate(spu); if (iSendToSelf == 2) { - if (this->IsClient()) - this->CastToClient()->FastQueuePacket(&app,false); + if (IsClient()) { + CastToClient()->FastQueuePacket(&app,false); + } } else { if(move_tic_count == RuleI(Zone, NPCPositonUpdateTicCount)) { - entity_list.QueueClients(this, app, (iSendToSelf==0), false); + entity_list.QueueClients(this, app, (iSendToSelf == 0), false); move_tic_count = 0; } - else + else if(move_tic_count % 2 == 0) { - entity_list.QueueCloseClients(this, app, (iSendToSelf==0), 800, nullptr, false); + entity_list.QueueCloseClients(this, app, (iSendToSelf == 0), 700, nullptr, false); + move_tic_count++; + } + else { move_tic_count++; } } @@ -1475,7 +1489,7 @@ void Mob::ShowStats(Client* client) if(n->respawn2 != 0) spawngroupid = n->respawn2->SpawnGroupID(); client->Message(0, " NPCID: %u SpawnGroupID: %u Grid: %i LootTable: %u FactionID: %i SpellsID: %u ", GetNPCTypeID(),spawngroupid, n->GetGrid(), n->GetLoottableID(), n->GetNPCFactionID(), n->GetNPCSpellsID()); - client->Message(0, " Accuracy: %i MerchantID: %i EmoteID: %i Runspeed: %u Walkspeed: %u", n->GetAccuracyRating(), n->MerchantType, n->GetEmoteID(), n->GetRunspeed(), n->GetWalkspeed()); + client->Message(0, " Accuracy: %i MerchantID: %i EmoteID: %i Runspeed: %.3f Walkspeed: %.3f", n->GetAccuracyRating(), n->MerchantType, n->GetEmoteID(), static_cast(0.025f * n->GetRunspeed()), static_cast(0.025f * n->GetWalkspeed())); n->QueryLoot(client); } if (IsAIControlled()) { @@ -2399,6 +2413,14 @@ bool Mob::CanThisClassDoubleAttack(void) const } } +bool Mob::CanThisClassTripleAttack() const +{ + if (!IsClient()) + return false; // When they added the real triple attack skill, mobs lost the ability to triple + else + return CastToClient()->HasSkill(SkillTripleAttack); +} + bool Mob::IsWarriorClass(void) const { switch(GetClass()) @@ -3505,9 +3527,11 @@ void Mob::TriggerOnCast(uint32 focus_spell, uint32 spell_id, bool aa_trigger) uint32 trigger_spell_id = 0; - if (aa_trigger && IsClient()){ - //focus_spell = aaid - trigger_spell_id = CastToClient()->CalcAAFocus(focusTriggerOnCast, focus_spell, spell_id); + if (aa_trigger && IsClient()) { + // focus_spell = aaid + auto rank = zone->GetAlternateAdvancementRank(focus_spell); + if (rank) + trigger_spell_id = CastToClient()->CalcAAFocus(focusTriggerOnCast, *rank, spell_id); if(IsValidSpell(trigger_spell_id) && GetTarget()) SpellFinished(trigger_spell_id, GetTarget(), 10, 0, -1, spells[trigger_spell_id].ResistDiff); @@ -3763,11 +3787,8 @@ int16 Mob::GetSkillDmgTaken(const SkillUseTypes skill_used) skilldmg_mod += itembonuses.SkillDmgTaken[HIGHEST_SKILL+1] + spellbonuses.SkillDmgTaken[HIGHEST_SKILL+1] + itembonuses.SkillDmgTaken[skill_used] + spellbonuses.SkillDmgTaken[skill_used]; - skilldmg_mod += SkillDmgTaken_Mod[skill_used] + SkillDmgTaken_Mod[HIGHEST_SKILL+1]; - skilldmg_mod += spellbonuses.MeleeVulnerability + itembonuses.MeleeVulnerability + aabonuses.MeleeVulnerability; - if(skilldmg_mod < -100) skilldmg_mod = -100; diff --git a/zone/mob.h b/zone/mob.h index ded9c04dc..fcabf93fd 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -23,6 +23,8 @@ #include "hate_list.h" #include "pathing.h" #include "position.h" +#include "aa_ability.h" +#include "aa.h" #include #include #include @@ -147,7 +149,7 @@ public: int MonkSpecialAttack(Mob* other, uint8 skill_used); virtual void TryBackstab(Mob *other,int ReuseTime = 10); void TriggerDefensiveProcs(const ItemInst* weapon, Mob *on, uint16 hand = MainPrimary, int damage = 0); - virtual bool AvoidDamage(Mob* attacker, int32 &damage, bool CanRiposte = true); + bool AvoidDamage(Mob* attacker, int32 &damage, int hand); virtual bool CheckHitChance(Mob* attacker, SkillUseTypes skillinuse, int Hand, int16 chance_mod = 0); virtual void TryCriticalHit(Mob *defender, uint16 skill, int32 &damage, ExtraAttackOptions *opts = nullptr); void TryPetCriticalHit(Mob *defender, uint16 skill, int32 &damage); @@ -164,6 +166,20 @@ public: void CommonOutgoingHitSuccess(Mob* defender, int32 &damage, SkillUseTypes skillInUse); void CommonBreakInvisible(); bool HasDied(); + virtual bool CheckDualWield(); + void DoMainHandAttackRounds(Mob *target, ExtraAttackOptions *opts = nullptr); + void DoOffHandAttackRounds(Mob *target, ExtraAttackOptions *opts = nullptr); + virtual bool CheckDoubleAttack(); + // inline process for places where we need to do them outside of the AI_Process + void ProcessAttackRounds(Mob *target, ExtraAttackOptions *opts = nullptr) + { + if (target) { + DoMainHandAttackRounds(target, opts); + if (CanThisClassDualWield()) + DoOffHandAttackRounds(target, opts); + } + return; + } //Appearance void SendLevelAppearance(); @@ -221,10 +237,12 @@ public: virtual void SpellProcess(); virtual bool CastSpell(uint16 spell_id, uint16 target_id, uint16 slot = USE_ITEM_SPELL_SLOT, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, - uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, uint32 type = 0, int16 *resist_adjust = nullptr); + uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, int16 *resist_adjust = nullptr, + uint32 aa_id = 0); virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot = 10, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, - uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, uint32 type = 0, int16 resist_adjust = 0); + uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, int16 resist_adjust = 0, + uint32 aa_id = 0); void CastedSpellFinished(uint16 spell_id, uint32 target_id, uint16 slot, uint16 mana_used, uint32 inventory_slot = 0xFFFFFFFF, int16 resist_adjust = 0); bool SpellFinished(uint16 spell_id, Mob *target, uint16 slot = 10, uint16 mana_used = 0, @@ -318,6 +336,8 @@ public: inline void SetShieldEquiped(bool val) { has_shieldequiped = val; } bool HasTwoHandBluntEquiped() const { return has_twohandbluntequiped; } inline void SetTwoHandBluntEquiped(bool val) { has_twohandbluntequiped = val; } + bool HasTwoHanderEquipped() { return has_twohanderequipped; } + void SetTwoHanderEquipped(bool val) { has_twohanderequipped = val; } virtual uint16 GetSkill(SkillUseTypes skill_num) const { return 0; } virtual uint32 GetEquipment(uint8 material_slot) const { return(0); } virtual int32 GetEquipmentMaterial(uint8 material_slot) const; @@ -365,7 +385,7 @@ public: inline Mob* GetTarget() const { return target; } virtual void SetTarget(Mob* mob); virtual inline float GetHPRatio() const { return max_hp == 0 ? 0 : ((float)cur_hp/max_hp*100); } - virtual inline float GetIntHPRatio() const { return max_hp == 0 ? 0 : (cur_hp/max_hp*100); } + virtual inline int GetIntHPRatio() const { return max_hp == 0 ? 0 : static_cast(cur_hp * 100 / max_hp); } inline virtual int32 GetAC() const { return AC + itembonuses.AC + spellbonuses.AC; } inline virtual int32 GetATK() const { return ATK + itembonuses.ATK + spellbonuses.ATK; } inline virtual int32 GetATKBonus() const { return itembonuses.ATK + spellbonuses.ATK; } @@ -730,6 +750,7 @@ public: virtual int GetMonkHandToHandDamage(void); bool CanThisClassDoubleAttack(void) const; + bool CanThisClassTripleAttack() const; bool CanThisClassDualWield(void) const; bool CanThisClassRiposte(void) const; bool CanThisClassDodge(void) const; @@ -860,7 +881,6 @@ public: uint32 GetZoneID() const; //for perl virtual int32 CheckAggroAmount(uint16 spell_id, bool isproc = false); virtual int32 CheckHealAggroAmount(uint16 spell_id, uint32 heal_possible = 0); - virtual uint32 GetAA(uint32 aa_id) const { return(0); } uint32 GetInstrumentMod(uint16 spell_id) const; int CalcSpellEffectValue(uint16 spell_id, int effect_id, int caster_level = 1, uint32 instrument_mod = 10, Mob *caster = nullptr, int ticsremaining = 0); @@ -956,6 +976,19 @@ public: void Tune_FindAccuaryByHitChance(Mob* defender, Mob *attacker, float hit_chance, int interval, int max_loop, int avoid_override, int Msg = 0); void Tune_FindAvoidanceByHitChance(Mob* defender, Mob *attacker, float hit_chance, int interval, int max_loop, int acc_override, int Msg = 0); + //aa new + uint32 GetAA(uint32 rank_id, uint32 *charges = nullptr) const; + uint32 GetAAByAAID(uint32 aa_id, uint32 *charges = nullptr) const; + bool SetAA(uint32 rank_id, uint32 new_value, uint32 charges = 0); + void ClearAAs() { aa_ranks.clear(); } + bool CanUseAlternateAdvancementRank(AA::Rank *rank); + bool CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price, bool check_grant); + int GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in); + void ExpendAlternateAdvancementCharge(uint32 aa_id); + void CalcAABonuses(StatBonuses* newbon); + void ApplyAABonuses(const AA::Rank &rank, StatBonuses* newbon); + bool CheckAATimer(int timer); + protected: void CommonDamage(Mob* other, int32 &damage, const uint16 spell_id, const SkillUseTypes attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic); static uint16 GetProcID(uint16 spell_id, uint8 effect_index); @@ -969,7 +1002,6 @@ protected: virtual bool AI_PursueCastCheck() { return(false); } virtual bool AI_IdleCastCheck() { return(false); } - bool IsFullHP; bool moved; @@ -1145,6 +1177,7 @@ protected: uint32 casting_spell_timer_duration; uint32 casting_spell_type; int16 casting_spell_resist_adjust; + uint32 casting_spell_aa_id; bool casting_spell_checks; uint16 bardsong; uint8 bardsong_slot; @@ -1191,6 +1224,7 @@ protected: bool offhand; bool has_shieldequiped; bool has_twohandbluntequiped; + bool has_twohanderequipped; bool has_numhits; bool has_MGB; bool has_ProjectIllusion; @@ -1311,6 +1345,9 @@ protected: bool bEnraged; bool destructibleobject; + std::unordered_map> aa_ranks; + Timer aa_timers[aaTimerMax]; + private: void _StopSong(); //this is not what you think it is Mob* target; diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 045c2cb75..c8654849a 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -342,7 +342,7 @@ bool NPC::AIDoSpellCast(uint8 i, Mob* tar, int32 mana_cost, uint32* oDontDoAgain SetCurrentSpeed(0); } - return CastSpell(AIspells[i].spellid, tar->GetID(), 1, AIspells[i].manacost == -2 ? 0 : -1, mana_cost, oDontDoAgainBefore, -1, -1, 0, 0, &(AIspells[i].resist_adjust)); + return CastSpell(AIspells[i].spellid, tar->GetID(), 1, AIspells[i].manacost == -2 ? 0 : -1, mana_cost, oDontDoAgainBefore, -1, -1, 0, &(AIspells[i].resist_adjust)); } bool EntityList::AICheckCloseBeneficialSpells(NPC* caster, uint8 iChance, float iRange, uint16 iSpellTypes) { @@ -772,7 +772,10 @@ void Client::AI_Process() engaged = true; } else { if(AImovement_timer->Check()) { - //animation = GetFearSpeed() * 21; + int speed = GetFearSpeed(); + animation = speed; + speed *= 2; + SetCurrentSpeed(speed); // Check if we have reached the last fear point if ((std::abs(GetX() - m_FearWalkTarget.x) < 0.1) && (std::abs(GetY() - m_FearWalkTarget.y) < 0.1)) { @@ -780,18 +783,18 @@ void Client::AI_Process() CalculateNewFearpoint(); } if(!RuleB(Pathing, Fear) || !zone->pathing) - CalculateNewPosition2(m_FearWalkTarget.x, m_FearWalkTarget.y, m_FearWalkTarget.z, GetFearSpeed(), true); + CalculateNewPosition2(m_FearWalkTarget.x, m_FearWalkTarget.y, m_FearWalkTarget.z, speed, true); else { bool WaypointChanged, NodeReached; glm::vec3 Goal = UpdatePath(m_FearWalkTarget.x, m_FearWalkTarget.y, m_FearWalkTarget.z, - GetFearSpeed(), WaypointChanged, NodeReached); + speed, WaypointChanged, NodeReached); if(WaypointChanged) tar_ndx = 20; - CalculateNewPosition2(Goal.x, Goal.y, Goal.z, GetFearSpeed()); + CalculateNewPosition2(Goal.x, Goal.y, Goal.z, speed); } } return; @@ -824,118 +827,45 @@ void Client::AI_Process() bool is_combat_range = CombatRange(GetTarget()); - if(is_combat_range) { - if(charm_class_attacks_timer.Check()) { + if (is_combat_range) { + if (charm_class_attacks_timer.Check()) { DoClassAttacks(GetTarget()); } if (AImovement_timer->Check()) { - if(CalculateHeadingToTarget(GetTarget()->GetX(), GetTarget()->GetY()) != m_Position.w) - { + if (CalculateHeadingToTarget(GetTarget()->GetX(), GetTarget()->GetY()) != + m_Position.w) { SetHeading(CalculateHeadingToTarget(GetTarget()->GetX(), GetTarget()->GetY())); SendPosition(); } SetCurrentSpeed(0); } - if(GetTarget() && !IsStunned() && !IsMezzed() && !GetFeigned()) { - if(attack_timer.Check()) { - Attack(GetTarget(), MainPrimary); - if(GetTarget()) { - if(CheckDoubleAttack()) { - Attack(GetTarget(), MainPrimary); - if(GetTarget()) { - bool triple_attack_success = false; - if((((GetClass() == MONK || GetClass() == WARRIOR || GetClass() == RANGER || GetClass() == BERSERKER) - && GetLevel() >= 60) || GetSpecialAbility(SPECATK_TRIPLE)) - && CheckDoubleAttack(true)) - { - Attack(GetTarget(), MainPrimary, true); - triple_attack_success = true; - } - - if(GetTarget()) - { - //Live AA - Flurry, Rapid Strikes ect (Flurry does not require Triple Attack). - int16 flurrychance = aabonuses.FlurryChance + spellbonuses.FlurryChance + itembonuses.FlurryChance; - - if (flurrychance) - { - if(zone->random.Roll(flurrychance)) - { - Message_StringID(MT_NPCFlurry, YOU_FLURRY); - Attack(GetTarget(), MainPrimary, false); - Attack(GetTarget(), MainPrimary, false); - } - } - - int16 ExtraAttackChanceBonus = spellbonuses.ExtraAttackChance + itembonuses.ExtraAttackChance + aabonuses.ExtraAttackChance; - - if (ExtraAttackChanceBonus && GetTarget()) { - ItemInst *wpn = GetInv().GetItem(MainPrimary); - if(wpn){ - if(wpn->GetItem()->ItemType == ItemType2HSlash || - wpn->GetItem()->ItemType == ItemType2HBlunt || - wpn->GetItem()->ItemType == ItemType2HPiercing ) - { - if(zone->random.Roll(ExtraAttackChanceBonus)) - { - Attack(GetTarget(), MainPrimary, false); - } - } - } - } - - if (GetClass() == WARRIOR || GetClass() == BERSERKER) - { - if(!dead && !berserk && this->GetHPRatio() < 30) - { - entity_list.MessageClose_StringID(this, false, 200, 0, BERSERK_START, GetName()); - berserk = true; - } - else if (berserk && this->GetHPRatio() > 30) - { - entity_list.MessageClose_StringID(this, false, 200, 0, BERSERK_END, GetName()); - berserk = false; - } - } - } - } - } - } + if (GetTarget() && !IsStunned() && !IsMezzed() && !GetFeigned()) { + if (attack_timer.Check()) { + // Should charmed clients not be procing? + DoAttackRounds(GetTarget(), MainPrimary); } } - if(CanThisClassDualWield() && attack_dw_timer.Check()) - { - if(GetTarget()) - { - float DualWieldProbability = 0.0f; - - int16 Ambidexterity = aabonuses.Ambidexterity + spellbonuses.Ambidexterity + itembonuses.Ambidexterity; - DualWieldProbability = (GetSkill(SkillDualWield) + GetLevel() + Ambidexterity) / 400.0f; // 78.0 max - int16 DWBonus = spellbonuses.DualWieldChance + itembonuses.DualWieldChance; - DualWieldProbability += DualWieldProbability*float(DWBonus)/ 100.0f; - - if(zone->random.Roll(DualWieldProbability)) - { - Attack(GetTarget(), MainSecondary); - if(CheckDoubleAttack()) - { - Attack(GetTarget(), MainSecondary); - } - + if (CanThisClassDualWield() && GetTarget() && !IsStunned() && !IsMezzed() && !GetFeigned()) { + if (attack_dw_timer.Check()) { + if (CheckDualWield()) { + // Should charmed clients not be procing? + DoAttackRounds(GetTarget(), MainSecondary); } } } - } - else - { + } else { if(!IsRooted()) { if(AImovement_timer->Check()) { + int newspeed = GetRunspeed(); + animation = newspeed; + newspeed *= 2; + SetCurrentSpeed(newspeed); if(!RuleB(Pathing, Aggro) || !zone->pathing) - CalculateNewPosition2(GetTarget()->GetX(), GetTarget()->GetY(), GetTarget()->GetZ(), GetRunspeed()); + CalculateNewPosition2(GetTarget()->GetX(), GetTarget()->GetY(), GetTarget()->GetZ(), newspeed); else { bool WaypointChanged, NodeReached; @@ -945,7 +875,7 @@ void Client::AI_Process() if(WaypointChanged) tar_ndx = 20; - CalculateNewPosition2(Goal.x, Goal.y, Goal.z, GetRunspeed()); + CalculateNewPosition2(Goal.x, Goal.y, Goal.z, newspeed); } } } @@ -989,11 +919,12 @@ void Client::AI_Process() { if(AImovement_timer->Check()) { - int speed = GetWalkspeed(); - if (dist >= 5625) - speed = GetRunspeed(); - - CalculateNewPosition2(owner->GetX(), owner->GetY(), owner->GetZ(), speed); + int nspeed = (dist >= 5625 ? GetRunspeed() : GetWalkspeed()); + animation = nspeed; + nspeed *= 2; + SetCurrentSpeed(nspeed); + + CalculateNewPosition2(owner->GetX(), owner->GetY(), owner->GetZ(), nspeed); } } else @@ -1170,43 +1101,9 @@ void Mob::AI_Process() { //try main hand first if(attack_timer.Check()) { - if(IsNPC()) { - int16 n_atk = CastToNPC()->GetNumberOfAttacks(); - if(n_atk <= 1) { - Attack(target, MainPrimary); - } else { - for(int i = 0; i < n_atk; ++i) { - Attack(target, MainPrimary); - } - } - } else { - Attack(target, MainPrimary); - } - - if (target) { - //we use this random value in three comparisons with different - //thresholds, and if its truely random, then this should work - //out reasonably and will save us compute resources. - int32 RandRoll = zone->random.Int(0, 99); - if ((CanThisClassDoubleAttack() || GetSpecialAbility(SPECATK_TRIPLE) - || GetSpecialAbility(SPECATK_QUAD)) - //check double attack, this is NOT the same rules that clients use... - && RandRoll < (GetLevel() + NPCDualAttackModifier)) { - Attack(target, MainPrimary); - // lets see if we can do a triple attack with the main hand - //pets are excluded from triple and quads... - if ((GetSpecialAbility(SPECATK_TRIPLE) || GetSpecialAbility(SPECATK_QUAD)) - && !IsPet() && RandRoll < (GetLevel() + NPCTripleAttackModifier)) { - Attack(target, MainPrimary); - // now lets check the quad attack - if (GetSpecialAbility(SPECATK_QUAD) - && RandRoll < (GetLevel() + NPCQuadAttackModifier)) { - Attack(target, MainPrimary); - } - } - } - } + DoMainHandAttackRounds(target); + bool specialed = false; // NPCs can only do one of these a round if (GetSpecialAbility(SPECATK_FLURRY)) { int flurry_chance = GetSpecialAbilityParam(SPECATK_FLURRY, 0); flurry_chance = flurry_chance > 0 ? flurry_chance : RuleI(Combat, NPCFlurryChance); @@ -1238,6 +1135,7 @@ void Mob::AI_Process() { opts.crit_flat = cur; Flurry(&opts); + specialed = true; } } @@ -1258,7 +1156,7 @@ void Mob::AI_Process() { } } - if (GetSpecialAbility(SPECATK_RAMPAGE)) + if (GetSpecialAbility(SPECATK_RAMPAGE) && !specialed) { int rampage_chance = GetSpecialAbilityParam(SPECATK_RAMPAGE, 0); rampage_chance = rampage_chance > 0 ? rampage_chance : 20; @@ -1294,10 +1192,11 @@ void Mob::AI_Process() { opts.crit_flat = cur; } Rampage(&opts); + specialed = true; } } - if (GetSpecialAbility(SPECATK_AREA_RAMPAGE)) + if (GetSpecialAbility(SPECATK_AREA_RAMPAGE) && !specialed) { int rampage_chance = GetSpecialAbilityParam(SPECATK_AREA_RAMPAGE, 0); rampage_chance = rampage_chance > 0 ? rampage_chance : 20; @@ -1334,30 +1233,14 @@ void Mob::AI_Process() { } AreaRampage(&opts); + specialed = true; } } } //now off hand if (attack_dw_timer.Check() && CanThisClassDualWield()) - { - int myclass = GetClass(); - //can only dual wield without a weapon if your a monk - if(GetSpecialAbility(SPECATK_INNATE_DW) || (GetEquipment(MaterialSecondary) != 0 && GetLevel() > 29) || myclass == MONK || myclass == MONKGM) { - float DualWieldProbability = (GetSkill(SkillDualWield) + GetLevel()) / 400.0f; - if(zone->random.Roll(DualWieldProbability)) - { - Attack(target, MainSecondary); - if (CanThisClassDoubleAttack()) - { - if (zone->random.Roll(GetLevel() + 20)) - { - Attack(target, MainSecondary); - } - } - } - } - } + DoOffHandAttackRounds(target); //now special attacks (kick, etc) if(IsNPC()) @@ -1494,7 +1377,7 @@ void Mob::AI_Process() { int speed = GetWalkspeed(); if (dist >= 5625) speed = GetRunspeed(); - + CalculateNewPosition2(owner->GetX(), owner->GetY(), owner->GetZ(), speed); } else @@ -2095,14 +1978,14 @@ bool Mob::Rampage(ExtraAttackOptions *opts) if (m_target == GetTarget()) continue; if (CombatRange(m_target)) { - Attack(m_target, MainPrimary, false, false, false, opts); + ProcessAttackRounds(m_target, opts); index_hit++; } } } if (RuleB(Combat, RampageHitsTarget) && index_hit < rampage_targets) - Attack(GetTarget(), MainPrimary, false, false, false, opts); + ProcessAttackRounds(GetTarget(), opts); return true; } @@ -2120,9 +2003,8 @@ void Mob::AreaRampage(ExtraAttackOptions *opts) rampage_targets = rampage_targets > 0 ? rampage_targets : 1; index_hit = hate_list.AreaRampage(this, GetTarget(), rampage_targets, opts); - if(index_hit == 0) { - Attack(GetTarget(), MainPrimary, false, false, false, opts); - } + if(index_hit == 0) + ProcessAttackRounds(GetTarget(), opts); } uint32 Mob::GetLevelCon(uint8 mylevel, uint8 iOtherLevel) { diff --git a/zone/net.cpp b/zone/net.cpp index 4a95e487f..f561fbf3d 100644 --- a/zone/net.cpp +++ b/zone/net.cpp @@ -28,7 +28,6 @@ #include "../common/eq_packet_structs.h" #include "../common/mutex.h" #include "../common/version.h" - #include "../common/packet_dump_file.h" #include "../common/opcodemgr.h" #include "../common/guilds.h" @@ -57,17 +56,14 @@ #include "titles.h" #include "guild_mgr.h" #include "tasks.h" - #include "quest_parser_collection.h" #include "embparser.h" #include "lua_parser.h" - #include "questmgr.h" #include #include #include - #include #include #include @@ -96,7 +92,6 @@ EntityList entity_list; WorldServer worldserver; uint32 numclients = 0; char errorname[32]; -uint16 adverrornum = 0; extern Zone* zone; EQStreamFactory eqsf(ZoneStream); npcDecayTimes_Struct npcCorpseDecayTimes[100]; @@ -116,28 +111,77 @@ int main(int argc, char** argv) { RegisterExecutablePlatform(ExePlatformZone); Log.LoadLogSettingsDefaults(); set_exception_handler(); - const char *zone_name; QServ = new QueryServ; - if(argc == 3) { + Log.Out(Logs::General, Logs::Zone_Server, "Loading server configuration.."); + if(!ZoneConfig::LoadConfig()) { + Log.Out(Logs::General, Logs::Error, "Loading server configuration failed."); + return 1; + } + const ZoneConfig *Config = ZoneConfig::get(); + + const char *zone_name; + uint32 instance_id = 0; + std::string z_name; + if(argc == 4) { + instance_id = atoi(argv[3]); worldserver.SetLauncherName(argv[2]); - worldserver.SetLaunchedName(argv[1]); - if(strncmp(argv[1], "dynamic_", 8) == 0) { - //dynamic zone with a launcher name correlation + auto zone_port = SplitString(argv[1], ':'); + + if(zone_port.size() > 0) { + z_name = zone_port[0]; + } + + if(zone_port.size() > 1) { + std::string p_name = zone_port[1]; + Config->SetZonePort(atoi(p_name.c_str())); + } + + worldserver.SetLaunchedName(z_name.c_str()); + if(strncmp(z_name.c_str(), "dynamic_", 8) == 0) { + zone_name = "."; + } + else { + zone_name = z_name.c_str(); + } + } else if(argc == 3) { + worldserver.SetLauncherName(argv[2]); + auto zone_port = SplitString(argv[1], ':'); + + if(zone_port.size() > 0) { + z_name = zone_port[0]; + } + + if(zone_port.size() > 1) { + std::string p_name = zone_port[1]; + Config->SetZonePort(atoi(p_name.c_str())); + } + + worldserver.SetLaunchedName(z_name.c_str()); + if(strncmp(z_name.c_str(), "dynamic_", 8) == 0) { zone_name = "."; } else { - zone_name = argv[1]; - worldserver.SetLaunchedName(zone_name); + zone_name = z_name.c_str(); } } else if (argc == 2) { worldserver.SetLauncherName("NONE"); - worldserver.SetLaunchedName(argv[1]); - if(strncmp(argv[1], "dynamic_", 8) == 0) { - //dynamic zone with a launcher name correlation + auto zone_port = SplitString(argv[1], ':'); + + if(zone_port.size() > 0) { + z_name = zone_port[0]; + } + + if(zone_port.size() > 1) { + std::string p_name = zone_port[1]; + Config->SetZonePort(atoi(p_name.c_str())); + } + + worldserver.SetLaunchedName(z_name.c_str()); + if(strncmp(z_name.c_str(), "dynamic_", 8) == 0) { zone_name = "."; - } else { - zone_name = argv[1]; - worldserver.SetLaunchedName(zone_name); + } + else { + zone_name = z_name.c_str(); } } else { zone_name = "."; @@ -145,13 +189,6 @@ int main(int argc, char** argv) { worldserver.SetLauncherName("NONE"); } - Log.Out(Logs::General, Logs::Zone_Server, "Loading server configuration.."); - if (!ZoneConfig::LoadConfig()) { - Log.Out(Logs::General, Logs::Error, "Loading server configuration failed."); - return 1; - } - const ZoneConfig *Config = ZoneConfig::get(); - worldserver.SetPassword(Config->SharedKey.c_str()); Log.Out(Logs::General, Logs::Zone_Server, "Connecting to MySQL..."); @@ -257,9 +294,6 @@ int main(int argc, char** argv) { Log.Out(Logs::General, Logs::Zone_Server, "Loading titles"); title_manager.LoadTitles(); - Log.Out(Logs::General, Logs::Zone_Server, "Loading AA effects"); - database.LoadAAEffects(); - Log.Out(Logs::General, Logs::Zone_Server, "Loading tributes"); database.LoadTributes(); @@ -324,7 +358,7 @@ int main(int argc, char** argv) { #endif if (!strlen(zone_name) || !strcmp(zone_name,".")) { Log.Out(Logs::General, Logs::Zone_Server, "Entering sleep mode"); - } else if (!Zone::Bootup(database.GetZoneID(zone_name), 0, true)) { //todo: go above and fix this to allow cmd line instance + } else if (!Zone::Bootup(database.GetZoneID(zone_name), instance_id, true)) { Log.Out(Logs::General, Logs::Error, "Zone Bootup failed :: Zone::Bootup"); zone = 0; } diff --git a/zone/npc.cpp b/zone/npc.cpp index d4a33b6d0..8dbab7c64 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -31,7 +31,6 @@ #include "../common/linked_list.h" #include "../common/servertalk.h" -#include "aa.h" #include "client.h" #include "entity.h" #include "npc.h" @@ -279,6 +278,18 @@ NPC::NPC(const NPCType* d, Spawn2* in_respawn, const glm::vec4& position, int if for(r = 0; r <= HIGHEST_SKILL; r++) { skills[r] = database.GetSkillCap(GetClass(),(SkillUseTypes)r,moblevel); } + // some overrides -- really we need to be able to set skills for mobs in the DB + // There are some known low level SHM/BST pets that do not follow this, which supports + // the theory of needing to be able to set skills for each mob separately + if (moblevel > 50) { + skills[SkillDoubleAttack] = 250; + skills[SkillDualWield] = 250; + } else if (moblevel > 3) { + skills[SkillDoubleAttack] = moblevel * 5; + skills[SkillDualWield] = skills[SkillDoubleAttack]; + } else { + skills[SkillDoubleAttack] = moblevel * 5; + } if(d->trap_template > 0) { @@ -1929,7 +1940,15 @@ void NPC::ModifyNPCStat(const char *identifier, const char *newValue) else if(id == "pr") { PR = atoi(val.c_str()); return; } else if(id == "dr") { DR = atoi(val.c_str()); return; } else if(id == "PhR") { PhR = atoi(val.c_str()); return; } - else if(id == "runspeed") { runspeed = (float)atof(val.c_str()); CalcBonuses(); return; } + else if(id == "runspeed") { + runspeed = (float)atof(val.c_str()); + base_runspeed = (int)((float)runspeed * 40.0f); + base_walkspeed = base_runspeed * 100 / 265; + walkspeed = ((float)base_walkspeed) * 0.025f; + base_fearspeed = base_runspeed * 100 / 127; + fearspeed = ((float)base_fearspeed) * 0.025f; + CalcBonuses(); return; + } else if(id == "special_attacks") { NPCSpecialAttacks(val.c_str(), 0, 1); return; } else if(id == "special_abilities") { ProcessSpecialAbilities(val.c_str()); return; } else if(id == "attack_speed") { attack_speed = (float)atof(val.c_str()); CalcBonuses(); return; } diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index eed8305f4..ee4ee943d 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -4077,33 +4077,7 @@ XS(XS_Client_RefundAA) { if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - int curpt = 0; - bool refunded = false; - - for(int x1=0;x1GetAA(x1); - if(curpt > 0){ - SendAA_Struct* curaa = zone->FindAA(x1); - if(curaa){ - THIS->SetAA(x1, 0); - for(int x2=0;x2GetPP().aapoints += curaa->cost + (curaa->cost_inc * x2); - refunded = true; - } - } - else //aa doesn't exist.. but if they bought it then it had at least a cost of 1 point each - { //so give back what we can - THIS->GetPP().aapoints += curpt; - THIS->SetAA(x1, 0); - refunded = true; - } - } - } - - if(refunded){ - THIS->Save(); //save of course - THIS->Kick(); //client gets all buggy if we don't immediatly relog so just force it on them - } + THIS->RefundAA(); } XSRETURN_EMPTY; } @@ -4915,11 +4889,44 @@ XS(XS_Client_IncrementAA) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - THIS->IncrementAA(aaskillid); + THIS->IncrementAlternateAdvancementRank(aaskillid); } XSRETURN_EMPTY; } +XS(XS_Client_GrantAlternateAdvancementAbility); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_GrantAlternateAdvancementAbility) +{ + dXSARGS; + if(items < 3 || items > 4) + Perl_croak(aTHX_ "Usage: Client::GrantAlternateAdvancementAbility(THIS, aa_id, points, [ignore_cost])"); + { + Client * THIS; + bool RETVAL; + int aa_id = (int)SvIV(ST(1)); + int points = (int)SvIV(ST(2)); + bool ignore_cost = false; + + if(sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } + else + Perl_croak(aTHX_ "THIS is not of type Client"); + if(THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + if(items > 3) { + ignore_cost = (bool)SvTRUE(ST(3)); + } + + RETVAL = THIS->GrantAlternateAdvancementAbility(aa_id, points, ignore_cost); + ST(0) = boolSV(RETVAL); + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + XS(XS_Client_GetAALevel); XS(XS_Client_GetAALevel) { @@ -6463,6 +6470,7 @@ XS(boot_Client) newXSproto(strcpy(buf, "GetIP"), XS_Client_GetIP, file, "$"); newXSproto(strcpy(buf, "AddLevelBasedExp"), XS_Client_AddLevelBasedExp, file, "$$;$"); newXSproto(strcpy(buf, "IncrementAA"), XS_Client_IncrementAA, file, "$$"); + newXSproto(strcpy(buf, "GrantAlternateAdvancementAbility"), XS_Client_GrantAlternateAdvancementAbility, file, "$$$;$"); newXSproto(strcpy(buf, "GetAALevel"), XS_Client_GetAALevel, file, "$$"); newXSproto(strcpy(buf, "MarkCompassLoc"), XS_Client_MarkCompassLoc, file, "$$$$"); newXSproto(strcpy(buf, "ClearCompassMark"), XS_Client_ClearCompassMark, file, "$"); diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index f5ef80a4c..dcd999a3e 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -3998,9 +3998,9 @@ XS(XS_Mob_CastSpell) } if (resist_adjust == 0)//If you do not pass resist adjust as nullptr it will ignore the spells default resist adjust - THIS->CastSpell(spell_id, target_id, slot, casttime, mana_cost, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0); + THIS->CastSpell(spell_id, target_id, slot, casttime, mana_cost, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0); else - THIS->CastSpell(spell_id, target_id, slot, casttime, mana_cost, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0, &resist_adjust); + THIS->CastSpell(spell_id, target_id, slot, casttime, mana_cost, 0, 0xFFFFFFFF, 0xFFFFFFFF, 0, &resist_adjust); } XSRETURN_EMPTY; } @@ -6360,12 +6360,12 @@ XS(XS_Mob_GetAA) { dXSARGS; if (items != 2) - Perl_croak(aTHX_ "Usage: Mob::GetAA(THIS, aa_id)"); + Perl_croak(aTHX_ "Usage: Mob::GetAA(THIS, rank_id)"); { Mob * THIS; uint32 RETVAL; dXSTARG; - uint32 aa_id = (uint32)SvUV(ST(1)); + uint32 rank_id = (uint32)SvUV(ST(1)); if (sv_derived_from(ST(0), "Mob")) { IV tmp = SvIV((SV*)SvRV(ST(0))); @@ -6376,12 +6376,68 @@ XS(XS_Mob_GetAA) if(THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->GetAA(aa_id); + RETVAL = THIS->GetAA(rank_id); XSprePUSH; PUSHu((UV)RETVAL); } XSRETURN(1); } +XS(XS_Mob_GetAAByAAID); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Mob_GetAAByAAID) +{ + dXSARGS; + if(items != 2) + Perl_croak(aTHX_ "Usage: Mob::GetAAByAAID(THIS, aa_id)"); + { + Mob * THIS; + uint32 RETVAL; + dXSTARG; + uint32 aa_id = (uint32)SvUV(ST(1)); + + if(sv_derived_from(ST(0), "Mob")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + THIS = INT2PTR(Mob *, tmp); + } + else + Perl_croak(aTHX_ "THIS is not of type Mob"); + if(THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + RETVAL = THIS->GetAAByAAID(aa_id); + XSprePUSH; PUSHu((UV)RETVAL); + } + XSRETURN(1); +} + +XS(XS_Mob_SetAA); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Mob_SetAA) +{ + dXSARGS; + if(items < 3 || items > 4) + Perl_croak(aTHX_ "Usage: Mob::SetAA(THIS, aa_id, points, [charges])"); + { + Mob * THIS; + bool RETVAL; + int aa_id = (int)SvIV(ST(1)); + int points = (int)SvIV(ST(2)); + int charges = (items == 4) ? (int)SvIV(ST(3)) : 0; + + if(sv_derived_from(ST(0), "Mob")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + THIS = INT2PTR(Mob *, tmp); + } + else + Perl_croak(aTHX_ "THIS is not of type Mob"); + if(THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + RETVAL = THIS->SetAA(aa_id, points, charges); + ST(0) = boolSV(RETVAL); + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + XS(XS_Mob_DivineAura); /* prototype to pass -Wmissing-prototypes */ XS(XS_Mob_DivineAura) { @@ -8625,6 +8681,8 @@ XS(boot_Mob) newXSproto(strcpy(buf, "CheckAggroAmount"), XS_Mob_CheckAggroAmount, file, "$$"); newXSproto(strcpy(buf, "CheckHealAggroAmount"), XS_Mob_CheckHealAggroAmount, file, "$$"); newXSproto(strcpy(buf, "GetAA"), XS_Mob_GetAA, file, "$$"); + newXSproto(strcpy(buf, "GetAAByAAID"), XS_Mob_GetAAByAAID, file, "$$"); + newXSproto(strcpy(buf, "SetAA"), XS_Mob_SetAA, file, "$$$;$"); newXSproto(strcpy(buf, "DivineAura"), XS_Mob_DivineAura, file, "$"); newXSproto(strcpy(buf, "AddFeignMemory"), XS_Mob_AddFeignMemory, file, "$$"); newXSproto(strcpy(buf, "RemoveFromFeignMemory"), XS_Mob_RemoveFromFeignMemory, file, "$$"); diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 67a1f06da..b6243091f 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -874,7 +874,7 @@ bool QuestManager::isdisctome(int item_id) { void QuestManager::safemove() { QuestManagerCurrentQuestVars(); if (initiator && initiator->IsClient()) - initiator->GoToSafeCoords(zone->GetZoneID(), 0); + initiator->GoToSafeCoords(zone->GetZoneID(), zone->GetInstanceID()); } void QuestManager::rain(int weather) { @@ -1774,7 +1774,7 @@ void QuestManager::sethp(int hpperc) { owner->Damage(owner, newhp, SPELL_UNKNOWN, SkillHandtoHand, false, 0, false); } -bool QuestManager::summonburriedplayercorpse(uint32 char_id, const glm::vec4& position) { +bool QuestManager::summonburiedplayercorpse(uint32 char_id, const glm::vec4& position) { bool Result = false; if(char_id <= 0) @@ -1798,7 +1798,7 @@ bool QuestManager::summonallplayercorpses(uint32 char_id, const glm::vec4& posit return true; } -uint32 QuestManager::getplayerburriedcorpsecount(uint32 char_id) { +uint32 QuestManager::getplayerburiedcorpsecount(uint32 char_id) { uint32 Result = 0; if(char_id > 0) { diff --git a/zone/questmgr.h b/zone/questmgr.h index 879407dc6..960a8f1f4 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -159,9 +159,9 @@ public: void set_zone_flag(int zone_id); void clear_zone_flag(int zone_id); void sethp(int hpperc); - bool summonburriedplayercorpse(uint32 char_id, const glm::vec4& position); + bool summonburiedplayercorpse(uint32 char_id, const glm::vec4& position); bool summonallplayercorpses(uint32 char_id, const glm::vec4& position); - uint32 getplayerburriedcorpsecount(uint32 char_id); + uint32 getplayerburiedcorpsecount(uint32 char_id); bool buryplayercorpse(uint32 char_id); void forcedooropen(uint32 doorid, bool altmode); void forcedoorclose(uint32 doorid, bool altmode); diff --git a/zone/special_attacks.cpp b/zone/special_attacks.cpp index b844e9ca1..1a134d167 100644 --- a/zone/special_attacks.cpp +++ b/zone/special_attacks.cpp @@ -130,49 +130,41 @@ void Mob::DoSpecialAttackDamage(Mob *who, SkillUseTypes skill, int32 max_damage, min_damage += min_damage * GetMeleeMinDamageMod_SE(skill) / 100; - if(HitChance && !who->CheckHitChance(this, skill, MainPrimary)) - max_damage = 0; - - else{ - bool CanRiposte = true; - if(skill == SkillThrowing || skill == SkillArchery) // changed from '&&' - CanRiposte = false; - - if (CanAvoid) - who->AvoidDamage(this, max_damage, CanRiposte); - - who->MeleeMitigation(this, max_damage, min_damage); - - if(max_damage > 0) + int hand = MainPrimary; // Avoid checks hand for throwing/archery exclusion, primary should work for most + if (skill == SkillThrowing || skill == SkillArchery) + hand = MainRange; + if (who->AvoidDamage(this, max_damage, hand)) { + if (max_damage == -3) + DoRiposte(who); + } else { + if (HitChance || who->CheckHitChance(this, skill, MainPrimary)) { + who->MeleeMitigation(this, max_damage, min_damage); CommonOutgoingHitSuccess(who, max_damage, skill); - + } else { + max_damage = 0; + } } who->AddToHateList(this, hate, 0, false); + if (max_damage > 0 && aabonuses.SkillAttackProc[0] && aabonuses.SkillAttackProc[1] == skill && + IsValidSpell(aabonuses.SkillAttackProc[2])) { + float chance = aabonuses.SkillAttackProc[0] / 1000.0f; + if (zone->random.Roll(chance)) + SpellFinished(aabonuses.SkillAttackProc[2], who, 10, 0, -1, + spells[aabonuses.SkillAttackProc[2]].ResistDiff); + } who->Damage(this, max_damage, SPELL_UNKNOWN, skill, false); //Make sure 'this' has not killed the target and 'this' is not dead (Damage shield ect). if(!GetTarget())return; if (HasDied()) return; - //[AA Dragon Punch] value[0] = 100 for 25%, chance value[1] = skill - if(aabonuses.SpecialAttackKBProc[0] && aabonuses.SpecialAttackKBProc[1] == skill){ - int kb_chance = 25; - kb_chance += kb_chance*(100-aabonuses.SpecialAttackKBProc[0])/100; - - if (zone->random.Roll(kb_chance)) - SpellFinished(904, who, 10, 0, -1, spells[904].ResistDiff); - //who->Stun(100); Kayen: This effect does not stun on live, it only moves the NPC. - } - if (HasSkillProcs()) TrySkillProc(who, skill, ReuseTime*1000); if (max_damage > 0 && HasSkillProcSuccess()) TrySkillProc(who, skill, ReuseTime*1000, true); - if(max_damage == -3 && !who->HasDied()) - DoRiposte(who); } @@ -544,7 +536,7 @@ void Mob::TryBackstab(Mob *other, int ReuseTime) { RogueBackstab(other,false,ReuseTime); if (level > 54) { - if(IsClient() && CastToClient()->CheckDoubleAttack(false)) + if(IsClient() && CastToClient()->CheckDoubleAttack()) { if(other->GetHP() > 0) RogueBackstab(other,false,ReuseTime); @@ -566,7 +558,7 @@ void Mob::TryBackstab(Mob *other, int ReuseTime) { if (level > 54) { // Check for double attack with main hand assuming maxed DA Skill (MS) - if(IsClient() && CastToClient()->CheckDoubleAttack(false)) + if(IsClient() && CastToClient()->CheckDoubleAttack()) if(other->GetHP() > 0) RogueBackstab(other,true, ReuseTime); @@ -975,7 +967,7 @@ void Mob::DoArcheryAttackDmg(Mob* other, const ItemInst* RangeWeapon, const Ite } if (!HeadShot) - other->AvoidDamage(this, TotalDmg, false); + other->AvoidDamage(this, TotalDmg, MainRange); other->MeleeMitigation(this, TotalDmg, minDmg); if(TotalDmg > 0){ @@ -1308,7 +1300,7 @@ void NPC::DoRangedAttackDmg(Mob* other, bool Launch, int16 damage_mod, int16 cha TotalDmg += TotalDmg * damage_mod / 100; - other->AvoidDamage(this, TotalDmg, false); + other->AvoidDamage(this, TotalDmg, MainRange); other->MeleeMitigation(this, TotalDmg, MinDmg); if (TotalDmg > 0) @@ -1542,7 +1534,7 @@ void Mob::DoThrowingAttackDmg(Mob* other, const ItemInst* RangeWeapon, const Ite Log.Out(Logs::Detail, Logs::Combat, "Item DMG %d. Max Damage %d. Hit for damage %d", WDmg, MaxDmg, TotalDmg); if (!Assassinate_Dmg) - other->AvoidDamage(this, TotalDmg, false); //CanRiposte=false - Can not riposte throw attacks. + other->AvoidDamage(this, TotalDmg, MainRange); other->MeleeMitigation(this, TotalDmg, minDmg); if(TotalDmg > 0) @@ -2414,27 +2406,26 @@ void Mob::DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, SkillUseTypes else damage = zone->random.Int(min_hit, max_hit); - if(!other->CheckHitChance(this, skillinuse, Hand, chance_mod)) { - damage = 0; + if (other->AvoidDamage(this, damage, CanRiposte ? MainRange : MainPrimary)) { // MainRange excludes ripo, primary doesn't have any extra behavior + if (damage == -3) { + DoRiposte(other); + if (HasDied()) + return; + } } else { - other->AvoidDamage(this, damage, CanRiposte); - other->MeleeMitigation(this, damage, min_hit); - if(damage > 0) + if (other->CheckHitChance(this, skillinuse, Hand, chance_mod)) { + other->MeleeMitigation(this, damage, min_hit); CommonOutgoingHitSuccess(other, damage, skillinuse); + } else { + damage = 0; + } } - if (damage == -3) { - DoRiposte(other); - if (HasDied()) - return; - } } else damage = -5; - other->AddToHateList(this, hate); - bool CanSkillProc = true; if (skillinuse == SkillOffense){ //Hack to allow damage to display. skillinuse = SkillTigerClaw; //'strike' your opponent - Arbitrary choice for message. @@ -2442,19 +2433,18 @@ void Mob::DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, SkillUseTypes } other->AddToHateList(this, hate, 0, false); + if (damage > 0 && aabonuses.SkillAttackProc[0] && aabonuses.SkillAttackProc[1] == skillinuse && + IsValidSpell(aabonuses.SkillAttackProc[2])) { + float chance = aabonuses.SkillAttackProc[0] / 1000.0f; + if (zone->random.Roll(chance)) + SpellFinished(aabonuses.SkillAttackProc[2], other, 10, 0, -1, + spells[aabonuses.SkillAttackProc[2]].ResistDiff); + } other->Damage(this, damage, SPELL_UNKNOWN, skillinuse); if (HasDied()) return; - if(aabonuses.SpecialAttackKBProc[0] && aabonuses.SpecialAttackKBProc[1] == skillinuse){ - int kb_chance = 25; - kb_chance += kb_chance*(100-aabonuses.SpecialAttackKBProc[0])/100; - - if (zone->random.Roll(kb_chance)) - SpellFinished(904, other, 10, 0, -1, spells[904].ResistDiff); - } - if (CanSkillProc && HasSkillProcs()) TrySkillProc(other, skillinuse, ReuseTime); diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index b331113bd..4c1f1fa45 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -638,41 +638,23 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove snprintf(effect_desc, _EDLEN, "Group Fear Immunity"); #endif //Added client messages to give some indication this effect is active. - uint32 group_id_caster = 0; - uint32 time = spell.base[i]*10; - if(caster->IsClient()) - { - if(caster->IsGrouped()) - { - group_id_caster = GetGroup()->GetID(); - } - else if(caster->IsRaidGrouped()) - { - group_id_caster = (GetRaid()->GetGroup(CastToClient()) == 0xFFFF) ? 0 : (GetRaid()->GetGroup(CastToClient()) + 1); + // Is there a message generated? Too disgusted by raids. + uint32 time = spell.base[i] * 10 * 1000; + if (caster->IsClient()) { + if (caster->IsGrouped()) { + auto group = caster->GetGroup(); + for (int i = 0; i < 6; ++i) + if (group->members[i]) + group->members[i]->aa_timers[aaTimerWarcry].Start(time); + } else if (caster->IsRaidGrouped()) { + auto raid = caster->GetRaid(); + uint32 gid = raid->GetGroup(caster->CastToClient()); + if (gid < 12) + for (int i = 0; i < MAX_RAID_MEMBERS; ++i) + if (raid->members[i].member && raid->members[i].GroupNumber == gid) + raid->members[i].member->aa_timers[aaTimerWarcry].Start(time); } } - if(group_id_caster){ - Group *g = entity_list.GetGroupByID(group_id_caster); - uint32 time = spell.base[i]*10; - if(g){ - for(int gi=0; gi < 6; gi++){ - if(g->members[gi] && g->members[gi]->IsClient()) - { - g->members[gi]->CastToClient()->EnableAAEffect(aaEffectWarcry , time); - if (g->members[gi]->GetID() != caster->GetID()) - g->members[gi]->Message(13, "You hear the war cry."); - else - Message(13, "You let loose a fierce war cry."); - } - } - } - } - - else{ - CastToClient()->EnableAAEffect(aaEffectWarcry , time); - Message(13, "You let loose a fierce war cry."); - } - break; } @@ -1788,9 +1770,9 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #endif if(spells[spell_id].base2[i] == 0) - AddProcToWeapon(procid, false, 100, spell_id, level_override); + AddProcToWeapon(procid, false, 100, spell_id, caster_level); else - AddProcToWeapon(procid, false, spells[spell_id].base2[i]+100, spell_id, level_override); + AddProcToWeapon(procid, false, spells[spell_id].base2[i]+100, spell_id, caster_level); break; } @@ -2232,12 +2214,12 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove case SE_AEMelee: { + //old aa + #ifdef SPELL_EFFECT_SPAM snprintf(effect_desc, _EDLEN, "Duration Rampage"); #endif - if (caster && caster->IsClient()) { // will tidy this up later so that NPCs can duration ramp from spells too - CastToClient()->DurationRampage(effect_value*12); - } + aa_timers[aaTimerRampage].Start(effect_value * 10 * 1000); // Live bug, was suppose to be 1 second per value break; } @@ -2966,7 +2948,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove case SE_FcIncreaseNumHits: case SE_CastonFocusEffect: case SE_FcHealAmtIncoming: - case SE_MeleeVulnerability: + case SE_LimitManaMax: case SE_DoubleRangedAttack: case SE_ShieldEquipHateMod: case SE_ShieldEquipDmgMod: @@ -3374,7 +3356,7 @@ void Mob::BuffProcess() { --buffs[buffs_i].ticsremaining; - if ((buffs[buffs_i].ticsremaining == 0 && !IsShortDurationBuff(buffs[buffs_i].spellid)) || buffs[buffs_i].ticsremaining < 0) { + if ((buffs[buffs_i].ticsremaining == 0 && !(IsShortDurationBuff(buffs[buffs_i].spellid) || IsBardSong(buffs[buffs_i].spellid))) || buffs[buffs_i].ticsremaining < 0) { Log.Out(Logs::Detail, Logs::Spells, "Buff %d in slot %d has expired. Fading.", buffs[buffs_i].spellid, buffs_i); BuffFadeBySlot(buffs_i); } @@ -3435,11 +3417,6 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster) } } - // Check for non buff spell effects to fade - // AE melee effects - if (IsClient()) - CastToClient()->CheckAAEffect(aaEffectRampage); - for (int i = 0; i < EFFECT_COUNT; i++) { if (IsBlankSpellEffect(buff.spellid, i)) continue; @@ -4149,44 +4126,7 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) CalcBonuses(); } -int32 Client::GetAAEffectDataBySlot(uint32 aa_ID, uint32 slot_id, bool GetEffect, bool GetBase1, bool GetBase2) -{ - int32 aa_effects_data[3] = { 0 }; - uint32 effect = 0; - int32 base1 = 0; - int32 base2 = 0; - uint32 slot = 0; - - - std::map >::const_iterator find_iter = aa_effects.find(aa_ID); - if(find_iter == aa_effects.end()) - return 0; - - for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) - { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; - - if (slot && slot == slot_id) { - - if (GetEffect) - return effect; - - if (GetBase1) - return base1; - - if (GetBase2) - return base2; - } - } - - return 0; -} - - -int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id) +int16 Client::CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id) { const SPDat_Spell_Struct &spell = spells[spell_id]; @@ -4200,8 +4140,9 @@ int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id) uint32 slot = 0; bool LimitFailure = false; - bool LimitInclude[MaxLimitInclude] = { false }; - /* Certain limits require only one of several Include conditions to be true. Ie. Add damage to fire OR ice spells. + bool LimitInclude[MaxLimitInclude] = {false}; + /* Certain limits require only one of several Include conditions to be true. Ie. Add damage to fire OR ice + spells. 0/1 SE_LimitResist 2/3 SE_LimitSpell 4/5 SE_LimitEffect @@ -4214,18 +4155,11 @@ int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id) */ int FocusCount = 0; - std::map >::const_iterator find_iter = aa_effects.find(aa_ID); - if(find_iter == aa_effects.end()) - { - return 0; - } - - for (std::map::const_iterator iter = aa_effects[aa_ID].begin(); iter != aa_effects[aa_ID].end(); ++iter) - { - effect = iter->second.skill_id; - base1 = iter->second.base1; - base2 = iter->second.base2; - slot = iter->second.slot; + for (const auto &e : rank.effects) { + effect = e.effect_id; + base1 = e.base1; + base2 = e.base2; + slot = e.slot; /* AA Foci's can contain multiple focus effects within the same AA. @@ -4234,431 +4168,429 @@ int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id) when the next valid focus effect is found. */ - if (IsFocusEffect(0, 0, true,effect) || (effect == SE_TriggerOnCast)){ + if (IsFocusEffect(0, 0, true, effect) || (effect == SE_TriggerOnCast)) { FocusCount++; - //If limit found on prior check next, else end loop. - if (FocusCount > 1){ + // If limit found on prior check next, else end loop. + if (FocusCount > 1) { - for(int e = 0; e < MaxLimitInclude; e+=2) { - if (LimitInclude[e] && !LimitInclude[e+1]) + for (int e = 0; e < MaxLimitInclude; e += 2) { + if (LimitInclude[e] && !LimitInclude[e + 1]) LimitFailure = true; } - if (LimitFailure){ + if (LimitFailure) { value = 0; LimitFailure = false; - for(int e = 0; e < MaxLimitInclude; e++) { - LimitInclude[e] = false; //Reset array + for (int e = 0; e < MaxLimitInclude; e++) { + LimitInclude[e] = false; // Reset array } } - else{ + else { break; } } } + switch (effect) { + case SE_Blank: + break; - switch (effect) - { - case SE_Blank: - break; + // Handle Focus Limits - //Handle Focus Limits - - case SE_LimitResist: - if(base1 < 0){ - if(spell.resisttype == -base1) //Exclude - LimitFailure = true; - } - else { + case SE_LimitResist: + if (base1 < 0) { + if (spell.resisttype == -base1) // Exclude + LimitFailure = true; + } else { LimitInclude[0] = true; - if (spell.resisttype == base1) //Include + if (spell.resisttype == base1) // Include LimitInclude[1] = true; - } - break; + } + break; - case SE_LimitInstant: - if(base1 == 1 && spell.buffduration) //Fail if not instant - LimitFailure = true; - if(base1 == 0 && (spell.buffduration == 0)) //Fail if instant - LimitFailure = true; - - break; - - case SE_LimitMaxLevel: - spell_level = spell.classes[(GetClass()%16) - 1]; - lvldiff = spell_level - base1; - //every level over cap reduces the effect by base2 percent unless from a clicky when ItemCastsUseFocus is true - if(lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || RuleB(Character, ItemCastsUseFocus) == false)) { - if(base2 > 0){ - lvlModifier -= base2*lvldiff; - if(lvlModifier < 1) - LimitFailure = true; - } - else - LimitFailure = true; - } - break; - - case SE_LimitMinLevel: - if((spell.classes[(GetClass()%16) - 1]) < base1) - LimitFailure = true; - break; - - case SE_LimitCastTimeMin: - if (static_cast(spell.cast_time) < base1) - LimitFailure = true; - break; - - case SE_LimitCastTimeMax: - if (static_cast(spell.cast_time) > base1) - LimitFailure = true; - break; - - case SE_LimitSpell: - if(base1 < 0) { //Exclude - if (spell_id == -base1) - LimitFailure = true; - } - else { - LimitInclude[2] = true; - if (spell_id == base1) //Include - LimitInclude[3] = true; - } - break; - - case SE_LimitMinDur: - if (base1 > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) - LimitFailure = true; - - break; - - case SE_LimitEffect: - if(base1 < 0){ - if(IsEffectInSpell(spell_id,-base1)) //Exclude - LimitFailure = true; - } - else{ - LimitInclude[4] = true; - if(IsEffectInSpell(spell_id,base1)) //Include - LimitInclude[5] = true; - } - break; - - case SE_LimitSpellType: - switch(base1) - { - case 0: - if (!IsDetrimentalSpell(spell_id)) - LimitFailure = true; - break; - case 1: - if (!IsBeneficialSpell(spell_id)) - LimitFailure = true; - break; - } - break; - - case SE_LimitManaMin: - if(spell.mana < base1) - LimitFailure = true; - break; - - case SE_LimitTarget: - if (base1 < 0) { - if (-base1 == spell.targettype) //Exclude - LimitFailure = true; - } - else { - LimitInclude[6] = true; - if (base1 == spell.targettype) //Include - LimitInclude[7] = true; - } - break; - - case SE_LimitCombatSkills: - if (base1 == 0 && (IsCombatSkill(spell_id) || IsCombatProc(spell_id))) //Exclude Discs / Procs - LimitFailure = true; - else if (base1 == 1 && (!IsCombatSkill(spell_id) || !IsCombatProc(spell_id))) //Exclude Spells - LimitFailure = true; + case SE_LimitInstant: + if (base1 == 1 && spell.buffduration) // Fail if not instant + LimitFailure = true; + if (base1 == 0 && (spell.buffduration == 0)) // Fail if instant + LimitFailure = true; break; - case SE_LimitSpellGroup: - if(base1 < 0) { - if (-base1 == spell.spellgroup) //Exclude + case SE_LimitMaxLevel: + spell_level = spell.classes[(GetClass() % 16) - 1]; + lvldiff = spell_level - base1; + // every level over cap reduces the effect by base2 percent unless from a clicky when + // ItemCastsUseFocus is true + if (lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || + RuleB(Character, ItemCastsUseFocus) == false)) { + if (base2 > 0) { + lvlModifier -= base2 * lvldiff; + if (lvlModifier < 1) LimitFailure = true; - } - else { - LimitInclude[8] = true; - if (base1 == spell.spellgroup) //Include - LimitInclude[9] = true; - } - break; + } else + LimitFailure = true; + } + break; - case SE_LimitCastingSkill: - if(base1 < 0) { - if(-base1 == spell.skill) - LimitFailure = true; - } - else { - LimitInclude[10] = true; - if(base1 == spell.skill) - LimitInclude[11] = true; - } - break; + case SE_LimitMinLevel: + if ((spell.classes[(GetClass() % 16) - 1]) < base1) + LimitFailure = true; + break; - case SE_LimitSpellClass: - if(base1 < 0) { //Exclude - if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) - return(0); - } - else { - LimitInclude[12] = true; - if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) //Include - LimitInclude[13] = true; - } - break; + case SE_LimitCastTimeMin: + if (static_cast(spell.cast_time) < base1) + LimitFailure = true; + break; - case SE_LimitSpellSubclass: - if(base1 < 0) { //Exclude - if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) - return(0); - } - else { - LimitInclude[14] = true; - if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) //Include - LimitInclude[15] = true; - } - break; + case SE_LimitCastTimeMax: + if (static_cast(spell.cast_time) > base1) + LimitFailure = true; + break; - case SE_LimitClass: - //Do not use this limit more then once per spell. If multiple class, treat value like items would. + case SE_LimitSpell: + if (base1 < 0) { // Exclude + if (spell_id == -base1) + LimitFailure = true; + } else { + LimitInclude[2] = true; + if (spell_id == base1) // Include + LimitInclude[3] = true; + } + break; + + case SE_LimitMinDur: + if (base1 > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) + LimitFailure = true; + + break; + + case SE_LimitEffect: + if (base1 < 0) { + if (IsEffectInSpell(spell_id, -base1)) // Exclude + LimitFailure = true; + } else { + LimitInclude[4] = true; + // they use 33 here for all classes ... unsure if the type check is really needed + if (base1 == SE_SummonPet && type == focusReagentCost) { + if (IsSummonPetSpell(spell_id) || IsSummonSkeletonSpell(spell_id)) + LimitInclude[5] = true; + } else { + if (IsEffectInSpell(spell_id, base1)) // Include + LimitInclude[5] = true; + } + } + break; + + case SE_LimitSpellType: + switch (base1) { + case 0: + if (!IsDetrimentalSpell(spell_id)) + LimitFailure = true; + break; + case 1: + if (!IsBeneficialSpell(spell_id)) + LimitFailure = true; + break; + } + break; + + case SE_LimitManaMin: + if (spell.mana < base1) + LimitFailure = true; + break; + + case SE_LimitManaMax: + if (spell.mana > base1) + LimitFailure = true; + break; + + case SE_LimitTarget: + if (base1 < 0) { + if (-base1 == spell.targettype) // Exclude + LimitFailure = true; + } else { + LimitInclude[6] = true; + if (base1 == spell.targettype) // Include + LimitInclude[7] = true; + } + break; + + case SE_LimitCombatSkills: + if (base1 == 0 && (IsCombatSkill(spell_id) || IsCombatProc(spell_id))) // Exclude Discs / Procs + LimitFailure = true; + else if (base1 == 1 && (!IsCombatSkill(spell_id) || !IsCombatProc(spell_id))) // Exclude Spells + LimitFailure = true; + + break; + + case SE_LimitSpellGroup: + if (base1 < 0) { + if (-base1 == spell.spellgroup) // Exclude + LimitFailure = true; + } else { + LimitInclude[8] = true; + if (base1 == spell.spellgroup) // Include + LimitInclude[9] = true; + } + break; + + case SE_LimitCastingSkill: + if (base1 < 0) { + if (-base1 == spell.skill) + LimitFailure = true; + } else { + LimitInclude[10] = true; + if (base1 == spell.skill) + LimitInclude[11] = true; + } + break; + + case SE_LimitSpellClass: + if (base1 < 0) { // Exclude + if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) + return (0); + } else { + LimitInclude[12] = true; + if (CheckSpellCategory(spell_id, base1, SE_LimitSpellClass)) // Include + LimitInclude[13] = true; + } + break; + + case SE_LimitSpellSubclass: + if (base1 < 0) { // Exclude + if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) + return (0); + } else { + LimitInclude[14] = true; + if (CheckSpellCategory(spell_id, base1, SE_LimitSpellSubclass)) // Include + LimitInclude[15] = true; + } + break; + + case SE_LimitClass: + // Do not use this limit more then once per spell. If multiple class, treat value like items + // would. if (!PassLimitClass(base1, GetClass())) LimitFailure = true; break; - case SE_LimitRace: - if (base1 != GetRace()) - LimitFailure = true; - break; - - case SE_LimitUseMin: - if (base1 > spell.numhits) - LimitFailure = true; - break; - - case SE_LimitUseType: - if (base1 != spell.numhitstype) - LimitFailure = true; - break; - - //Handle Focus Effects - case SE_ImprovedDamage: - if (type == focusImprovedDamage && base1 > value) - value = base1; - break; - - case SE_ImprovedHeal: - if (type == focusImprovedHeal && base1 > value) - value = base1; - break; - - case SE_ReduceManaCost: - if (type == focusManaCost) - value = base1; + case SE_LimitRace: + if (base1 != GetRace()) + LimitFailure = true; break; - case SE_IncreaseSpellHaste: - if (type == focusSpellHaste && base1 > value) - value = base1; - break; + case SE_LimitUseMin: + if (base1 > spell.numhits) + LimitFailure = true; + break; - case SE_IncreaseSpellDuration: - if (type == focusSpellDuration && base1 > value) - value = base1; - break; + case SE_LimitUseType: + if (base1 != spell.numhitstype) + LimitFailure = true; + break; - case SE_SpellDurationIncByTic: - if (type == focusSpellDurByTic && base1 > value) - value = base1; - break; + // Handle Focus Effects + case SE_ImprovedDamage: + if (type == focusImprovedDamage && base1 > value) + value = base1; + break; - case SE_SwarmPetDuration: - if (type == focusSwarmPetDuration && base1 > value) - value = base1; - break; + case SE_ImprovedHeal: + if (type == focusImprovedHeal && base1 > value) + value = base1; + break; - case SE_IncreaseRange: - if (type == focusRange && base1 > value) - value = base1; - break; + case SE_ReduceManaCost: + if (type == focusManaCost) + value = base1; + break; - case SE_ReduceReagentCost: - if (type == focusReagentCost && base1 > value) - value = base1; - break; + case SE_IncreaseSpellHaste: + if (type == focusSpellHaste && base1 > value) + value = base1; + break; - case SE_PetPowerIncrease: - if (type == focusPetPower && base1 > value) - value = base1; - break; + case SE_IncreaseSpellDuration: + if (type == focusSpellDuration && base1 > value) + value = base1; + break; - case SE_SpellResistReduction: - if (type == focusResistRate && base1 > value) - value = base1; - break; + case SE_SpellDurationIncByTic: + if (type == focusSpellDurByTic && base1 > value) + value = base1; + break; - case SE_SpellHateMod: - if (type == focusSpellHateMod ) { - if(value != 0) { - if(value > 0){ - if(base1 > value) - value = base1; - } - else{ - if(base1 < value) - value = base1; - } - } - else - value = base1; - } - break; + case SE_SwarmPetDuration: + if (type == focusSwarmPetDuration && base1 > value) + value = base1; + break; - case SE_ReduceReuseTimer: - if(type == focusReduceRecastTime) - value = base1 / 1000; - break; + case SE_IncreaseRange: + if (type == focusRange && base1 > value) + value = base1; + break; - case SE_TriggerOnCast: - if(type == focusTriggerOnCast){ - if(zone->random.Roll(base1)) { - value = base2; + case SE_ReduceReagentCost: + if (type == focusReagentCost && base1 > value) + value = base1; + break; + + case SE_PetPowerIncrease: + if (type == focusPetPower && base1 > value) + value = base1; + break; + + case SE_SpellResistReduction: + if (type == focusResistRate && base1 > value) + value = base1; + break; + + case SE_SpellHateMod: + if (type == focusSpellHateMod) { + if (value != 0) { + if (value > 0) { + if (base1 > value) + value = base1; } else { - value = 0; - LimitFailure = true; + if (base1 < value) + value = base1; } - break; - } - - case SE_FcSpellVulnerability: - if(type == focusSpellVulnerability) + } else value = base1; - break; + } + break; - case SE_BlockNextSpellFocus: - if(type == focusBlockNextSpell){ - if(zone->random.Roll(base1)) - value = 1; - } - break; + case SE_ReduceReuseTimer: + if (type == focusReduceRecastTime) + value = base1 / 1000; + break; - case SE_FcTwincast: - if(type == focusTwincast) - value = base1; - break; - - //Note if using these as AA, make sure this is first focus used. - case SE_SympatheticProc: - if(type == focusSympatheticProc) + case SE_TriggerOnCast: + if (type == focusTriggerOnCast) { + if (zone->random.Roll(base1)) { value = base2; - break; - - case SE_FcDamageAmt: - if(type == focusFcDamageAmt) - value = base1; + } else { + value = 0; + LimitFailure = true; + } break; + } - case SE_FcDamageAmtCrit: - if(type == focusFcDamageAmtCrit) - value = base1; - break; + case SE_FcSpellVulnerability: + if (type == focusSpellVulnerability) + value = base1; + break; - case SE_FcDamageAmtIncoming: - if(type == focusFcDamageAmtIncoming) - value = base1; - break; + case SE_BlockNextSpellFocus: + if (type == focusBlockNextSpell) { + if (zone->random.Roll(base1)) + value = 1; + } + break; - case SE_FcHealAmtIncoming: - if(type == focusFcHealAmtIncoming) - value = base1; - break; + case SE_FcTwincast: + if (type == focusTwincast) + value = base1; + break; - case SE_FcHealPctCritIncoming: - if (type == focusFcHealPctCritIncoming) - value = base1; - break; + // Note if using these as AA, make sure this is first focus used. + case SE_SympatheticProc: + if (type == focusSympatheticProc) + value = base2; + break; - case SE_FcHealAmtCrit: - if(type == focusFcHealAmtCrit) - value = base1; - break; + case SE_FcDamageAmt: + if (type == focusFcDamageAmt) + value = base1; + break; - case SE_FcHealAmt: - if(type == focusFcHealAmt) - value = base1; - break; + case SE_FcDamageAmtCrit: + if (type == focusFcDamageAmtCrit) + value = base1; + break; - case SE_FcHealPctIncoming: - if(type == focusFcHealPctIncoming) - value = base1; - break; + case SE_FcDamageAmtIncoming: + if (type == focusFcDamageAmtIncoming) + value = base1; + break; - case SE_FcBaseEffects: - if (type == focusFcBaseEffects) - value = base1; - break; + case SE_FcHealAmtIncoming: + if (type == focusFcHealAmtIncoming) + value = base1; + break; - case SE_FcDamagePctCrit: - if(type == focusFcDamagePctCrit) - value = base1; - break; + case SE_FcHealPctCritIncoming: + if (type == focusFcHealPctCritIncoming) + value = base1; + break; - case SE_FcIncreaseNumHits: - if(type == focusIncreaseNumHits) - value = base1; - break; + case SE_FcHealAmtCrit: + if (type == focusFcHealAmtCrit) + value = base1; + break; - case SE_FcLimitUse: - if(type == focusFcLimitUse) - value = base1; - break; + case SE_FcHealAmt: + if (type == focusFcHealAmt) + value = base1; + break; - case SE_FcMute: - if(type == focusFcMute) - value = base1; - break; + case SE_FcHealPctIncoming: + if (type == focusFcHealPctIncoming) + value = base1; + break; - case SE_FcStunTimeMod: - if(type == focusFcStunTimeMod) - value = base1; - break; + case SE_FcBaseEffects: + if (type == focusFcBaseEffects) + value = base1; + break; + case SE_FcDamagePctCrit: + if (type == focusFcDamagePctCrit) + value = base1; + break; + + case SE_FcIncreaseNumHits: + if (type == focusIncreaseNumHits) + value = base1; + break; + + case SE_FcLimitUse: + if (type == focusFcLimitUse) + value = base1; + break; + + case SE_FcMute: + if (type == focusFcMute) + value = base1; + break; + + case SE_FcStunTimeMod: + if (type == focusFcStunTimeMod) + value = base1; + break; } } - for(int e = 0; e < MaxLimitInclude; e+=2) { - if (LimitInclude[e] && !LimitInclude[e+1]) + for (int e = 0; e < MaxLimitInclude; e += 2) { + if (LimitInclude[e] && !LimitInclude[e + 1]) return 0; } if (LimitFailure) return 0; - return(value*lvlModifier/100); + return (value * lvlModifier / 100); } //given an item/spell's focus ID and the spell being cast, determine the focus ammount, if any //assumes that spell_id is not a bard spell and that both ids are valid spell ids -int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, bool best_focus) { - - if(!IsValidSpell(focus_id) || !IsValidSpell(spell_id)) +int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, bool best_focus) +{ + if (!IsValidSpell(focus_id) || !IsValidSpell(spell_id)) return 0; - const SPDat_Spell_Struct &focus_spell = spells[focus_id]; const SPDat_Spell_Struct &spell = spells[spell_id]; @@ -4668,8 +4600,9 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo int lvldiff = 0; uint32 Caston_spell_id = 0; - bool LimitInclude[MaxLimitInclude] = { false }; - /* Certain limits require only one of several Include conditions to be true. Ie. Add damage to fire OR ice spells. + bool LimitInclude[MaxLimitInclude] = {false}; + /* Certain limits require only one of several Include conditions to be true. Ie. Add damage to fire OR ice + spells. 0/1 SE_LimitResist 2/3 SE_LimitSpell 4/5 SE_LimitEffect @@ -4689,21 +4622,20 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_LimitResist: - if(focus_spell.base[i] < 0){ - if (spell.resisttype == -focus_spell.base[i]) //Exclude + if (focus_spell.base[i] < 0) { + if (spell.resisttype == -focus_spell.base[i]) // Exclude return 0; - } - else { + } else { LimitInclude[0] = true; - if (spell.resisttype == focus_spell.base[i]) //Include + if (spell.resisttype == focus_spell.base[i]) // Include LimitInclude[1] = true; } break; case SE_LimitInstant: - if(focus_spell.base[i] == 1 && spell.buffduration) //Fail if not instant + if (focus_spell.base[i] == 1 && spell.buffduration) // Fail if not instant return 0; - if(focus_spell.base[i] == 0 && (spell.buffduration == 0)) //Fail if instant + if (focus_spell.base[i] == 0 && (spell.buffduration == 0)) // Fail if instant return 0; break; @@ -4711,16 +4643,17 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo case SE_LimitMaxLevel: if (IsNPC()) break; - spell_level = spell.classes[(GetClass()%16) - 1]; + spell_level = spell.classes[(GetClass() % 16) - 1]; lvldiff = spell_level - focus_spell.base[i]; - //every level over cap reduces the effect by focus_spell.base2[i] percent unless from a clicky when ItemCastsUseFocus is true - if(lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || RuleB(Character, ItemCastsUseFocus) == false)){ - if(focus_spell.base2[i] > 0){ - lvlModifier -= focus_spell.base2[i]*lvldiff; - if(lvlModifier < 1) + // every level over cap reduces the effect by focus_spell.base2[i] percent unless from a clicky + // when ItemCastsUseFocus is true + if (lvldiff > 0 && (spell_level <= RuleI(Character, MaxLevel) || + RuleB(Character, ItemCastsUseFocus) == false)) { + if (focus_spell.base2[i] > 0) { + lvlModifier -= focus_spell.base2[i] * lvldiff; + if (lvlModifier < 1) return 0; - } - else + } else return 0; } break; @@ -4728,116 +4661,120 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo case SE_LimitMinLevel: if (IsNPC()) break; - if (spell.classes[(GetClass()%16) - 1] < focus_spell.base[i]) - return(0); + if (spell.classes[(GetClass() % 16) - 1] < focus_spell.base[i]) + return (0); break; case SE_LimitCastTimeMin: if (spells[spell_id].cast_time < (uint16)focus_spell.base[i]) - return(0); + return (0); break; case SE_LimitCastTimeMax: if (spells[spell_id].cast_time > (uint16)focus_spell.base[i]) - return(0); + return (0); break; case SE_LimitSpell: - if(focus_spell.base[i] < 0) { //Exclude + if (focus_spell.base[i] < 0) { // Exclude if (spell_id == -focus_spell.base[i]) - return(0); - } - else { + return (0); + } else { LimitInclude[2] = true; - if (spell_id == focus_spell.base[i]) //Include + if (spell_id == focus_spell.base[i]) // Include LimitInclude[3] = true; } break; case SE_LimitMinDur: - if (focus_spell.base[i] > CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) - return(0); + if (focus_spell.base[i] > + CalcBuffDuration_formula(GetLevel(), spell.buffdurationformula, spell.buffduration)) + return (0); break; case SE_LimitEffect: - if(focus_spell.base[i] < 0){ - if(IsEffectInSpell(spell_id,-focus_spell.base[i])) //Exclude + if (focus_spell.base[i] < 0) { + if (IsEffectInSpell(spell_id, -focus_spell.base[i])) // Exclude return 0; - } - else{ + } else { LimitInclude[4] = true; - if(IsEffectInSpell(spell_id,focus_spell.base[i])) //Include + if (IsEffectInSpell(spell_id, focus_spell.base[i])) // Include LimitInclude[5] = true; } break; - case SE_LimitSpellType: - switch( focus_spell.base[i]){ - case 0: - if (!IsDetrimentalSpell(spell_id)) - return 0; - break; - case 1: - if (!IsBeneficialSpell(spell_id)) - return 0; - break; - default: - Log.Out(Logs::General, Logs::Normal, "CalcFocusEffect: unknown limit spelltype %d", focus_spell.base[i]); + switch (focus_spell.base[i]) { + case 0: + if (!IsDetrimentalSpell(spell_id)) + return 0; + break; + case 1: + if (!IsBeneficialSpell(spell_id)) + return 0; + break; + default: + Log.Out(Logs::General, Logs::Normal, "CalcFocusEffect: unknown limit spelltype %d", + focus_spell.base[i]); } break; case SE_LimitManaMin: - if(spell.mana < focus_spell.base[i]) + if (spell.mana < focus_spell.base[i]) + return 0; + break; + + case SE_LimitManaMax: + if (spell.mana > focus_spell.base[i]) return 0; break; case SE_LimitTarget: if (focus_spell.base[i] < 0) { - if (-focus_spell.base[i] == spell.targettype) //Exclude + if (-focus_spell.base[i] == spell.targettype) // Exclude return 0; - } - else { + } else { LimitInclude[6] = true; - if (focus_spell.base[i] == spell.targettype) //Include + if (focus_spell.base[i] == spell.targettype) // Include LimitInclude[7] = true; } break; case SE_LimitCombatSkills: - if (focus_spell.base[i] == 0 && (IsCombatSkill(spell_id) || IsCombatProc(spell_id))) //Exclude Discs / Procs + if (focus_spell.base[i] == 0 && + (IsCombatSkill(spell_id) || IsCombatProc(spell_id))) // Exclude Discs / Procs return 0; - else if (focus_spell.base[i] == 1 && (!IsCombatSkill(spell_id) || !IsCombatProc(spell_id))) //Exclude Spells + else if (focus_spell.base[i] == 1 && + (!IsCombatSkill(spell_id) || !IsCombatProc(spell_id))) // Exclude Spells return 0; break; case SE_LimitSpellGroup: - if(focus_spell.base[i] < 0) { - if (-focus_spell.base[i] == spell.spellgroup) //Exclude + if (focus_spell.base[i] < 0) { + if (-focus_spell.base[i] == spell.spellgroup) // Exclude return 0; - } - else { + } else { LimitInclude[8] = true; - if (focus_spell.base[i] == spell.spellgroup) //Include + if (focus_spell.base[i] == spell.spellgroup) // Include LimitInclude[9] = true; } break; case SE_LimitCastingSkill: - if(focus_spell.base[i] < 0) { - if(-focus_spell.base[i] == spell.skill) + if (focus_spell.base[i] < 0) { + if (-focus_spell.base[i] == spell.skill) return 0; - } - else { + } else { LimitInclude[10] = true; - if(focus_spell.base[i] == spell.skill) + if (focus_spell.base[i] == spell.skill) LimitInclude[11] = true; } break; case SE_LimitClass: - //Do not use this limit more then once per spell. If multiple class, treat value like items would. + // Do not use this limit more then once per spell. If multiple class, treat value like items + // would. if (!PassLimitClass(focus_spell.base[i], GetClass())) return 0; break; @@ -4863,40 +4800,38 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_LimitSpellClass: - if(focus_spell.base[i] < 0) { //Exclude + if (focus_spell.base[i] < 0) { // Exclude if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellClass)) - return(0); - } - else { + return (0); + } else { LimitInclude[12] = true; - if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellClass)) //Include + if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellClass)) // Include LimitInclude[13] = true; } break; case SE_LimitSpellSubclass: - if(focus_spell.base[i] < 0) { //Exclude + if (focus_spell.base[i] < 0) { // Exclude if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellSubclass)) - return(0); - } - else { + return (0); + } else { LimitInclude[14] = true; - if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellSubclass)) //Include + if (CheckSpellCategory(spell_id, focus_spell.base[i], SE_LimitSpellSubclass)) // Include LimitInclude[15] = true; } break; - - //handle effects + // handle effects case SE_ImprovedDamage: if (type == focusImprovedDamage) { // This is used to determine which focus should be used for the random calculation - if(best_focus) { + if (best_focus) { // If the spell contains a value in the base2 field then that is the max value if (focus_spell.base2[i] != 0) { value = focus_spell.base2[i]; } - // If the spell does not contain a base2 value, then its a straight non random value + // If the spell does not contain a base2 value, then its a straight non random + // value else { value = focus_spell.base[i]; } @@ -4904,8 +4839,7 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo // Actual focus calculation starts here else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { value = focus_spell.base[i]; - } - else { + } else { value = zone->random.Int(focus_spell.base[i], focus_spell.base2[i]); } } @@ -4913,18 +4847,15 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo case SE_ImprovedHeal: if (type == focusImprovedHeal) { - if(best_focus) { + if (best_focus) { if (focus_spell.base2[i] != 0) { value = focus_spell.base2[i]; - } - else { + } else { value = focus_spell.base[i]; } - } - else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { + } else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { value = focus_spell.base[i]; - } - else { + } else { value = zone->random.Int(focus_spell.base[i], focus_spell.base2[i]); } } @@ -4932,18 +4863,15 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo case SE_ReduceManaCost: if (type == focusManaCost) { - if(best_focus) { + if (best_focus) { if (focus_spell.base2[i] != 0) { value = focus_spell.base2[i]; - } - else { + } else { value = focus_spell.base[i]; } - } - else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { + } else if (focus_spell.base2[i] == 0 || focus_spell.base[i] == focus_spell.base2[i]) { value = focus_spell.base[i]; - } - else { + } else { value = zone->random.Int(focus_spell.base[i], focus_spell.base2[i]); } } @@ -4990,30 +4918,28 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_SpellHateMod: - if (type == focusSpellHateMod){ - if(value != 0){ - if(value > 0){ - if(focus_spell.base[i] > value) + if (type == focusSpellHateMod) { + if (value != 0) { + if (value > 0) { + if (focus_spell.base[i] > value) + value = focus_spell.base[i]; + } else { + if (focus_spell.base[i] < value) value = focus_spell.base[i]; } - else{ - if(focus_spell.base[i] < value) - value = focus_spell.base[i]; - } - } - else + } else value = focus_spell.base[i]; } break; case SE_ReduceReuseTimer: - if(type == focusReduceRecastTime) + if (type == focusReduceRecastTime) value = focus_spell.base[i] / 1000; break; case SE_TriggerOnCast: - if(type == focusTriggerOnCast){ - if(zone->random.Roll(focus_spell.base[i])) + if (type == focusTriggerOnCast) { + if (zone->random.Roll(focus_spell.base[i])) value = focus_spell.base2[i]; else value = 0; @@ -5021,50 +4947,50 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_BlockNextSpellFocus: - if(type == focusBlockNextSpell){ - if(zone->random.Roll(focus_spell.base[i])) + if (type == focusBlockNextSpell) { + if (zone->random.Roll(focus_spell.base[i])) value = 1; } break; case SE_SympatheticProc: - if(type == focusSympatheticProc) { + if (type == focusSympatheticProc) { value = focus_id; } break; case SE_FcSpellVulnerability: - if(type == focusSpellVulnerability) + if (type == focusSpellVulnerability) value = focus_spell.base[i]; break; case SE_FcTwincast: - if(type == focusTwincast) + if (type == focusTwincast) value = focus_spell.base[i]; break; case SE_FcDamageAmt: - if(type == focusFcDamageAmt) + if (type == focusFcDamageAmt) value = focus_spell.base[i]; break; case SE_FcDamageAmtCrit: - if(type == focusFcDamageAmtCrit) + if (type == focusFcDamageAmtCrit) value = focus_spell.base[i]; break; case SE_FcDamageAmtIncoming: - if(type == focusFcDamageAmtIncoming) + if (type == focusFcDamageAmtIncoming) value = focus_spell.base[i]; break; case SE_FcHealAmtIncoming: - if(type == focusFcHealAmtIncoming) + if (type == focusFcHealAmtIncoming) value = focus_spell.base[i]; break; case SE_FcDamagePctCrit: - if(type == focusFcDamagePctCrit) + if (type == focusFcDamagePctCrit) value = focus_spell.base[i]; break; @@ -5074,17 +5000,17 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_FcHealAmtCrit: - if(type == focusFcHealAmtCrit) + if (type == focusFcHealAmtCrit) value = focus_spell.base[i]; break; - case SE_FcHealAmt: - if(type == focusFcHealAmt) + case SE_FcHealAmt: + if (type == focusFcHealAmt) value = focus_spell.base[i]; break; case SE_FcHealPctIncoming: - if(type == focusFcHealPctIncoming) + if (type == focusFcHealPctIncoming) value = focus_spell.base[i]; break; @@ -5094,51 +5020,51 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo break; case SE_FcIncreaseNumHits: - if(type == focusIncreaseNumHits) + if (type == focusIncreaseNumHits) value = focus_spell.base[i]; break; case SE_FcLimitUse: - if(type == focusFcLimitUse) + if (type == focusFcLimitUse) value = focus_spell.base[i]; break; case SE_FcMute: - if(type == focusFcMute) + if (type == focusFcMute) value = focus_spell.base[i]; break; case SE_FcStunTimeMod: - if(type == focusFcStunTimeMod) + if (type == focusFcStunTimeMod) value = focus_spell.base[i]; break; case SE_FcTimerRefresh: - if(type == focusFcTimerRefresh) + if (type == focusFcTimerRefresh) value = focus_spell.base[i]; break; #if EQDEBUG >= 6 - //this spits up a lot of garbage when calculating spell focuses - //since they have all kinds of extra effects on them. + // this spits up a lot of garbage when calculating spell focuses + // since they have all kinds of extra effects on them. default: - Log.Out(Logs::General, Logs::Normal, "CalcFocusEffect: unknown effectid %d", focus_spell.effectid[i]); + Log.Out(Logs::General, Logs::Normal, "CalcFocusEffect: unknown effectid %d", + focus_spell.effectid[i]); #endif } - } - for(int e = 0; e < MaxLimitInclude; e+=2) { - if (LimitInclude[e] && !LimitInclude[e+1]) + for (int e = 0; e < MaxLimitInclude; e += 2) { + if (LimitInclude[e] && !LimitInclude[e + 1]) return 0; } - if (Caston_spell_id){ - if(IsValidSpell(Caston_spell_id) && (Caston_spell_id != spell_id)) + if (Caston_spell_id) { + if (IsValidSpell(Caston_spell_id) && (Caston_spell_id != spell_id)) SpellFinished(Caston_spell_id, this, 10, 0, -1, spells[Caston_spell_id].ResistDiff); } - return(value*lvlModifier/100); + return (value * lvlModifier / 100); } uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { @@ -5226,32 +5152,32 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { /*Note: At present, ff designing custom AA to have a sympathetic proc effect, only use one focus effect within the aa_effects data for each AA*[No live AA's use this effect to my knowledge]*/ - if (aabonuses.FocusEffects[type]){ - - uint32 aa_AA = 0; - uint32 aa_value = 0; - - for (int i = 0; i < MAX_PP_AA_ARRAY; i++) - { - aa_AA = this->aa[i]->AA; - aa_value = this->aa[i]->value; - if (aa_AA < 1 || aa_value < 1) - continue; - + if (aabonuses.FocusEffects[type]) { + for (const auto &aa : aa_ranks) { if (SympatheticProcList.size() > MAX_SYMPATHETIC_PROCS) + break; + + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { + continue; + } + + if (rank->effects.empty()) continue; - proc_spellid = CalcAAFocus(type, aa_AA, spell_id); - - if (IsValidSpell(proc_spellid)){ - ProcChance = GetSympatheticProcChances(spell_id, GetAABase1(aa_AA, 1)); - if(zone->random.Roll(ProcChance)) + proc_spellid = CalcAAFocus(type, *rank, spell_id); + if (IsValidSpell(proc_spellid)) { + ProcChance = GetSympatheticProcChances(spell_id, rank->effects[0].base1); + if (zone->random.Roll(ProcChance)) SympatheticProcList.push_back(proc_spellid); } } } - if (SympatheticProcList.size() > 0) + if (!SympatheticProcList.empty()) { uint8 random = zone->random.Int(0, SympatheticProcList.size()-1); int FinalSympatheticProc = SympatheticProcList[random]; @@ -5262,9 +5188,9 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { return 0; } -int16 Client::GetFocusEffect(focusType type, uint16 spell_id) { - - if (IsBardSong(spell_id) && type != focusFcBaseEffects) +int16 Client::GetFocusEffect(focusType type, uint16 spell_id) +{ + if (IsBardSong(spell_id) && type != focusFcBaseEffects && type != focusSpellDuration) return 0; int16 realTotal = 0; @@ -5499,18 +5425,20 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id) { if (aabonuses.FocusEffects[type]){ int16 Total3 = 0; - uint32 slots = 0; - uint32 aa_AA = 0; - uint32 aa_value = 0; - for (int i = 0; i < MAX_PP_AA_ARRAY; i++) - { - aa_AA = this->aa[i]->AA; - aa_value = this->aa[i]->value; - if (aa_AA < 1 || aa_value < 1) + for (const auto &aa : aa_ranks) { + auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first); + auto ability = ability_rank.first; + auto rank = ability_rank.second; + + if(!ability) { + continue; + } + + if (rank->effects.empty()) continue; - Total3 = CalcAAFocus(type, aa_AA, spell_id); + Total3 = CalcAAFocus(type, *rank, spell_id); if (Total3 > 0 && realTotal3 >= 0 && Total3 > realTotal3) { realTotal3 = Total3; } @@ -5520,9 +5448,6 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id) { } } - if(type == focusReagentCost && IsSummonPetSpell(spell_id) && GetAA(aaElementalPact)) - return 100; - if(type == focusReagentCost && (IsEffectInSpell(spell_id, SE_SummonItem) || IsSacrificeSpell(spell_id))) return 0; //Summon Spells that require reagents are typically imbue type spells, enchant metal, sacrifice and shouldn't be affected diff --git a/zone/spells.cpp b/zone/spells.cpp index faaace669..0a4dc29b3 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -146,7 +146,8 @@ void NPC::SpellProcess() // to allow procs to work bool Mob::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, - uint32 timer, uint32 timer_duration, uint32 type, int16 *resist_adjust) + uint32 timer, uint32 timer_duration, int16 *resist_adjust, + uint32 aa_id) { Log.Out(Logs::Detail, Logs::Spells, "CastSpell called for spell %s (%d) on entity %d, slot %d, time %d, mana %d, from item slot %d", (IsValidSpell(spell_id))?spells[spell_id].name:"UNKNOWN SPELL", spell_id, target_id, slot, cast_time, mana_cost, (item_slot==0xFFFFFFFF)?999:item_slot); @@ -318,11 +319,11 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, if(resist_adjust) { - return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, type, *resist_adjust)); + return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, *resist_adjust, aa_id)); } else { - return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, type, spells[spell_id].ResistDiff)); + return(DoCastSpell(spell_id, target_id, slot, cast_time, mana_cost, oSpellWillFinish, item_slot, timer, timer_duration, spells[spell_id].ResistDiff, aa_id)); } } @@ -336,8 +337,8 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, uint16 slot, // bool Mob::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, - uint32 item_slot, uint32 timer, uint32 timer_duration, uint32 type, - int16 resist_adjust) + uint32 item_slot, uint32 timer, uint32 timer_duration, + int16 resist_adjust, uint32 aa_id) { Mob* pMob = nullptr; int32 orgcasttime; @@ -361,7 +362,7 @@ bool Mob::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, casting_spell_timer = timer; casting_spell_timer_duration = timer_duration; } - casting_spell_type = type; + casting_spell_aa_id = aa_id; SaveSpellLoc(); Log.Out(Logs::Detail, Logs::Spells, "Casting %d Started at (%.3f,%.3f,%.3f)", spell_id, m_SpellLocation.x, m_SpellLocation.y, m_SpellLocation.z); @@ -408,24 +409,19 @@ bool Mob::DoCastSpell(uint16 spell_id, uint16 target_id, uint16 slot, // ok now we know the target casting_spell_targetid = target_id; - if (mana_cost == -1) { + // We don't get actual mana cost here, that's done when we consume the mana + if (mana_cost == -1) mana_cost = spell.mana; - mana_cost = GetActSpellCost(spell_id, mana_cost); - } - - if(HasMGB() && spells[spell_id].can_mgb) - mana_cost *= 2; // mana is checked for clients on the frontend. we need to recheck it for NPCs though - // fix: items dont need mana :-/ // If you're at full mana, let it cast even if you dont have enough mana // we calculated this above, now enforce it - if(mana_cost > 0 && slot != 10) + if(mana_cost > 0 && slot != USE_ITEM_SPELL_SLOT) { int my_curmana = GetMana(); int my_maxmana = GetMaxMana(); - if(my_curmana < spell.mana) // not enough mana + if(my_curmana < mana_cost) // not enough mana { //this is a special case for NPCs with no mana... if(IsNPC() && my_curmana == my_maxmana) @@ -783,9 +779,9 @@ void Mob::ZeroCastingVars() casting_spell_inventory_slot = 0; casting_spell_timer = 0; casting_spell_timer_duration = 0; - casting_spell_type = 0; casting_spell_resist_adjust = 0; casting_spell_checks = false; + casting_spell_aa_id = 0; delaytimer = false; } @@ -816,10 +812,9 @@ void Mob::InterruptSpell(uint16 message, uint16 color, uint16 spellid) CastToNPC()->AI_Event_SpellCastFinished(false, casting_spell_slot); } - if(casting_spell_type == 1 && IsClient()) { //Rest AA Timer on failed cast - CastToClient()->SendAATimer(casting_spell_timer - pTimerAAStart, 0, 0xFFFFFF); - CastToClient()->Message_StringID(15,ABILITY_FAILED); - CastToClient()->GetPTimers().Clear(&database, casting_spell_timer); + if(casting_spell_aa_id && IsClient()) { //Rest AA Timer on failed cast + CastToClient()->Message_StringID(MT_SpellFailure, ABILITY_FAILED); + CastToClient()->ResetAlternateAdvancementTimer(casting_spell_aa_id); } ZeroCastingVars(); // resets all the state keeping stuff @@ -2078,7 +2073,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 else if(!SpellOnTarget(spell_id, spell_target, false, true, resist_adjust, false, level_override)) { if(IsBuffSpell(spell_id) && IsBeneficialSpell(spell_id)) { // Prevent mana usage/timers being set for beneficial buffs - if(casting_spell_type == 1) + if(casting_spell_aa_id) InterruptSpell(); return false; } @@ -2157,11 +2152,11 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 } #endif //BOTS + // We hold off turning MBG off so we can still use it to calc the mana cost if(spells[spell_id].can_mgb && HasMGB()) { SpellOnTarget(spell_id, this); entity_list.MassGroupBuff(this, this, spell_id, true); - SetMGB(false); } else { @@ -2262,20 +2257,36 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16 } // if this was a spell slot or an ability use up the mana for it - // CastSpell already reduced the cost for it if we're a client with focus if(slot != USE_ITEM_SPELL_SLOT && slot != POTION_BELT_SPELL_SLOT && slot != TARGET_RING_SPELL_SLOT && mana_used > 0) { + mana_used = GetActSpellCost(spell_id, mana_used); + if (HasMGB() && spells[spell_id].can_mgb) { + mana_used *= 2; + SetMGB(false); + } + // clamp if we some how got focused above our current mana + if (GetMana() < mana_used) + mana_used = GetMana(); Log.Out(Logs::Detail, Logs::Spells, "Spell %d: consuming %d mana", spell_id, mana_used); - if (!DoHPToManaCovert(mana_used)) + if (!DoHPToManaCovert(mana_used)) { SetMana(GetMana() - mana_used); TryTriggerOnValueAmount(false, true); + } } //set our reuse timer on long ass reuse_time spells... if(IsClient() && !isproc) { - if(spell_id == casting_spell_id && casting_spell_timer != 0xFFFFFFFF) + if(casting_spell_aa_id) { + AA::Rank *rank = zone->GetAlternateAdvancementRank(casting_spell_aa_id); + + if(rank && rank->base_ability) { + ExpendAlternateAdvancementCharge(rank->base_ability->id); + } + } + else if(spell_id == casting_spell_id && casting_spell_timer != 0xFFFFFFFF) { + //aa new todo: aa expendable charges here CastToClient()->GetPTimers().Start(casting_spell_timer, casting_spell_timer_duration); Log.Out(Logs::Detail, Logs::Spells, "Spell %d: Setting custom reuse timer %d to %d", spell_id, casting_spell_timer, casting_spell_timer_duration); } @@ -3753,7 +3764,7 @@ bool Mob::SpellOnTarget(uint16 spell_id, Mob *spelltar, bool reflect, bool use_r // if SpellEffect returned false there's a problem applying the // spell. It's most likely a buff that can't stack. Log.Out(Logs::Detail, Logs::Spells, "Spell %d could not apply its effects %s -> %s\n", spell_id, GetName(), spelltar->GetName()); - if(casting_spell_type != 1) // AA is handled differently + if(casting_spell_aa_id) Message_StringID(MT_SpellFailure, SPELL_NO_HOLD); safe_delete(action_packet); return false; @@ -4116,8 +4127,7 @@ bool Mob::IsImmuneToSpell(uint16 spell_id, Mob *caster) } return true; } - - else if (IsClient() && CastToClient()->CheckAAEffect(aaEffectWarcry)) + else if (CheckAATimer(aaTimerWarcry)) { Message(13, "Your are immune to fear."); Log.Out(Logs::Detail, Logs::Spells, "Clients has WarCry effect, immune to fear!"); diff --git a/zone/titles.cpp b/zone/titles.cpp index 3a4162060..8e6115aee 100644 --- a/zone/titles.cpp +++ b/zone/titles.cpp @@ -179,10 +179,10 @@ bool TitleManager::IsClientEligibleForTitle(Client *c, std::vector:: if((Title->Class >= 0) && (c->GetBaseClass() != Title->Class)) return false; - if((Title->MinAAPoints >= 0) && (c->GetAAPointsSpent() < static_cast(Title->MinAAPoints))) + if((Title->MinAAPoints >= 0) && (c->GetSpentAA() < static_cast(Title->MinAAPoints))) return false; - if((Title->MaxAAPoints >= 0) && (c->GetAAPointsSpent() > static_cast(Title->MaxAAPoints))) + if((Title->MaxAAPoints >= 0) && (c->GetSpentAA() > static_cast(Title->MaxAAPoints))) return false; if(Title->SkillID >= 0) diff --git a/zone/waypoints.cpp b/zone/waypoints.cpp index 7570165a3..e900c6838 100644 --- a/zone/waypoints.cpp +++ b/zone/waypoints.cpp @@ -212,7 +212,7 @@ void NPC::UpdateWaypoint(int wp_index) Log.Out(Logs::Detail, Logs::AI, "Next waypoint %d: (%.3f, %.3f, %.3f, %.3f)", wp_index, m_CurrentWayPoint.x, m_CurrentWayPoint.y, m_CurrentWayPoint.z, m_CurrentWayPoint.w); //fix up pathing Z - if(zone->HasMap() && RuleB(Map, FixPathingZAtWaypoints)) + if(zone->HasMap() && RuleB(Map, FixPathingZAtWaypoints) && !IsBoat()) { if(!RuleB(Watermap, CheckForWaterAtWaypoints) || !zone->HasWaterMap() || @@ -443,31 +443,10 @@ void NPC::NextGuardPosition() { } } -/* -// we need this for charmed NPCs -void Mob::SaveSpawnSpot() { - spawn_x = x_pos; - spawn_y = y_pos; - spawn_z = z_pos; - spawn_heading = heading; -}*/ - - - - -/*float Mob::CalculateDistanceToNextWaypoint() { - return CalculateDistance(cur_wp_x, cur_wp_y, cur_wp_z); -}*/ - float Mob::CalculateDistance(float x, float y, float z) { return (float)sqrtf( ((m_Position.x-x)*(m_Position.x-x)) + ((m_Position.y-y)*(m_Position.y-y)) + ((m_Position.z-z)*(m_Position.z-z)) ); } -/* -uint8 NPC::CalculateHeadingToNextWaypoint() { - return CalculateHeadingToTarget(cur_wp_x, cur_wp_y); -} -*/ float Mob::CalculateHeadingToTarget(float in_x, float in_y) { float angle; @@ -521,7 +500,7 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo } bool send_update = false; - int compare_steps = IsBoat() ? 1 : 20; + int compare_steps = 20; if(tar_ndx < compare_steps && m_TargetLocation.x==x && m_TargetLocation.y==y) { float new_x = m_Position.x + m_TargetV.x*tar_vector; @@ -597,7 +576,7 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo pRunAnimSpeed = speed; if(IsClient()) { - animation = speed; + animation = speed / 2; } //pRunAnimSpeed = (int8)(speed*NPC_RUNANIM_RATIO); //speed *= NPC_SPEED_MULTIPLIER; @@ -611,7 +590,7 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo tar_vector = (float)speed / mag; // mob move fix - int numsteps = (int) ( mag * 16.0f / (float)speed); + int numsteps = (int) ( mag * 16.0f / (float)speed + 0.5f); // mob move fix @@ -621,9 +600,9 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo if (numsteps>1) { tar_vector=1.0f ; - m_TargetV.x = 1.25f * m_TargetV.x/(float)numsteps; - m_TargetV.y = 1.25f * m_TargetV.y/(float)numsteps; - m_TargetV.z = 1.25f *m_TargetV.z/(float)numsteps; + m_TargetV.x = m_TargetV.x/(float)numsteps; + m_TargetV.y = m_TargetV.y/(float)numsteps; + m_TargetV.z = m_TargetV.z/(float)numsteps; float new_x = m_Position.x + m_TargetV.x; float new_y = m_Position.y + m_TargetV.y; @@ -636,7 +615,7 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo m_Position.y = new_y; m_Position.z = new_z; m_Position.w = CalculateHeadingToTarget(x, y); - tar_ndx = 22 - numsteps; + tar_ndx = 20 - numsteps; Log.Out(Logs::Detail, Logs::AI, "Next position2 (%.3f, %.3f, %.3f) (%d steps)", m_Position.x, m_Position.y, m_Position.z, numsteps); } else @@ -656,6 +635,11 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo else { tar_vector/=16.0f; + float dur = Timer::GetCurrentTime() - pLastChange; + if(dur < 1.0f) { + dur = 1.0f; + } + tar_vector = (tar_vector * AImovement_duration) / 100.0f; float new_x = m_Position.x + m_TargetV.x*tar_vector; float new_y = m_Position.y + m_TargetV.y*tar_vector; @@ -717,8 +701,6 @@ bool Mob::MakeNewPositionAndSendUpdate(float x, float y, float z, int speed, boo } else { - // force an update now - move_tic_count = RuleI(Zone, NPCPositonUpdateTicCount); SendPosUpdate(); SetAppearance(eaStanding, false); } diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index a1820366a..a2b85a6e3 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1931,10 +1931,10 @@ bool WorldServer::SendChannelMessage(Client* from, const char* to, uint8 chan_nu bool WorldServer::SendEmoteMessage(const char* to, uint32 to_guilddbid, uint32 type, const char* message, ...) { va_list argptr; - char buffer[256]; + char buffer[4096] = { 0 }; va_start(argptr, message); - vsnprintf(buffer, 256, message, argptr); + vsnprintf(buffer, sizeof(buffer) - 1, message, argptr); va_end(argptr); return SendEmoteMessage(to, to_guilddbid, 0, type, buffer); @@ -1942,10 +1942,10 @@ bool WorldServer::SendEmoteMessage(const char* to, uint32 to_guilddbid, uint32 t bool WorldServer::SendEmoteMessage(const char* to, uint32 to_guilddbid, int16 to_minstatus, uint32 type, const char* message, ...) { va_list argptr; - char buffer[256]; + char buffer[4096] = { 0 }; va_start(argptr, message); - vsnprintf(buffer, 256, message, argptr); + vsnprintf(buffer, sizeof(buffer) - 1, message, argptr); va_end(argptr); if (!Connected() && to == 0) { diff --git a/zone/zone.cpp b/zone/zone.cpp index e58bea24a..e5e30f01a 100644 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -68,7 +68,6 @@ extern bool staticzone; extern NetConnection net; extern PetitionList petition_list; extern QuestParserCollection* parse; -extern uint16 adverrornum; extern uint32 numclients; extern WorldServer worldserver; extern Zone* zone; @@ -805,8 +804,6 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) weather_intensity = 0; blocked_spells = nullptr; totalBS = 0; - aas = nullptr; - totalAAs = 0; zone_has_current_time = false; Instance_Shutdown_Timer = nullptr; @@ -865,16 +862,6 @@ Zone::~Zone() { safe_delete(qGlobals); safe_delete_array(adv_data); safe_delete_array(map_name); - - if(aas != nullptr) { - int r; - for(r = 0; r < totalAAs; r++) { - uchar *data = (uchar *) aas[r]; - safe_delete_array(data); - } - safe_delete_array(aas); - } - safe_delete(GuildBanks); } @@ -953,16 +940,12 @@ bool Zone::Init(bool iStaticZone) { zone->LoadAlternateCurrencies(); zone->LoadNPCEmotes(&NPCEmoteList); - //Load AA information - adverrornum = 500; - LoadAAs(); + LoadAlternateAdvancement(); //Load merchant data - adverrornum = 501; zone->GetMerchantDataForZoneLoad(); //Load temporary merchant data - adverrornum = 502; zone->LoadTempMerchantData(); // Merc data @@ -974,7 +957,6 @@ bool Zone::Init(bool iStaticZone) { if (RuleB(Zone, LevelBasedEXPMods)) zone->LoadLevelEXPMods(); - adverrornum = 503; petition_list.ClearPetitions(); petition_list.ReadDatabase(); diff --git a/zone/zone.h b/zone/zone.h index 7b1b855a7..94bba72e4 100644 --- a/zone/zone.h +++ b/zone/zone.h @@ -27,6 +27,7 @@ #include "qglobals.h" #include "spawn2.h" #include "spawngroup.h" +#include "aa_ability.h" struct ZonePoint { @@ -113,11 +114,13 @@ public: inline const uint32& GetMaxClients() { return pMaxClients; } - void LoadAAs(); - int GetTotalAAs() { return totalAAs; } - SendAA_Struct* GetAABySequence(uint32 seq) { return aas[seq]; } - SendAA_Struct* FindAA(uint32 id); - uint8 GetTotalAALevels(uint32 skill_id); + //new AA + void LoadAlternateAdvancement(); + AA::Ability *GetAlternateAdvancementAbility(int id); + AA::Ability *GetAlternateAdvancementAbilityByRank(int rank_id); + AA::Rank *GetAlternateAdvancementRank(int rank_id); + std::pair GetAlternateAdvancementAbilityAndRank(int id, int points_spent); + void LoadZoneDoors(const char* zone, int16 version); bool LoadZoneObjects(); bool LoadGroundSpawns(); @@ -193,6 +196,10 @@ public: char *adv_data; bool did_adventure_actions; + //new AA + std::unordered_map> aa_abilities; + std::unordered_map> aa_ranks; + void DoAdventureCountIncrease(); void DoAdventureAssassinationCountIncrease(); void DoAdventureActions(); @@ -313,9 +320,6 @@ private: int totalBS; ZoneSpellsBlocked *blocked_spells; - int totalAAs; - SendAA_Struct **aas; //array of AA structs - /* Spawn related things */ diff --git a/zone/zonedb.h b/zone/zonedb.h index 1fb4d3b29..35275b654 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -6,6 +6,7 @@ #include "position.h" #include "../common/faction.h" #include "../common/eqemu_logsys.h" +#include "aa_ability.h" class Client; class Corpse; @@ -339,17 +340,10 @@ public: bool SetCharacterFactionLevel(uint32 char_id, int32 faction_id, int32 value, uint8 temp, faction_map &val_list); // needed for factions Dec, 16 2001 bool LoadFactionData(); - /* AAs */ - bool LoadAAEffects(); - bool LoadAAEffects2(); - bool LoadSwarmSpells(); - SendAA_Struct*GetAASkillVars(uint32 skill_id); - uint8 GetTotalAALevels(uint32 skill_id); - uint32 GetSizeAA(); - uint32 CountAAs(); - void LoadAAs(SendAA_Struct **load); - uint32 CountAAEffects(); - void FillAAEffects(SendAA_Struct* aa_struct); + /* AAs New */ + bool LoadAlternateAdvancementAbilities(std::unordered_map> &abilities, + std::unordered_map> &ranks); + bool LoadAlternateAdvancement(Client *c); /* Zone related */ bool GetZoneCFG(uint32 zoneid, uint16 instance_id, NewZone_Struct *data, bool &can_bind, bool &can_combat, bool &can_levitate, bool &can_castoutdoor, bool &is_city, bool &is_hotzone, bool &allow_mercs, uint8 &zone_type, int &ruleset, char **map_filename);