"].join("\n");
var pSpan = "";
/* let benchHKCCBegin, benchHKCCEnd; */
/* -------------------------- Functions ------------------------------------------------------------------------------------------- */
/**
* Main Function. Checks Hollow Knight game completion by analyzing the save file
* @param {object} jsonObject Decoded save data in JavaScript Object Notation form (JSON)
*/
function HKCheckCompletion(jsonObject) {
var benchStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : performance.now();
// start benchmark
// benchHKCCBegin = new Date();
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.CheckCompletion.timeStart = benchStart;
var HKPlayerData;
var HKWorldItems;
var HKSceneData;
if (jsonObject.hasOwnProperty("playerData")) {
HKPlayerData = jsonObject.playerData;
} else {
_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].saveAnalyzed = false;
return false;
}
if (jsonObject.hasOwnProperty("sceneData")) {
HKSceneData = jsonObject.sceneData;
if (jsonObject.sceneData.hasOwnProperty("persistentBools")) {
HKWorldItems = jsonObject.sceneData.persistentBools;
} else {
_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].saveAnalyzed = false;
return false;
}
} else {
_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].saveAnalyzed = false;
return false;
}
// Generate database entries
// console.log(GenerateDatabaseEntries(HKWorldItems, "Shiny", "Note", "corniferNote", "Cornifer#Locations"));
/* Initialize DataChecker object for checking status of items in save file */
var saveDataChecker = new DataChecker(jsonObject);
// Pre-Cleaning and filling initial data (h2, id) needed for PrepareHTMLString()
// PrefillHTML(HK.sections);
// Prevents adding current percent data after each function call and resets what the analyzing has done to the original object. Prevents wrong data display after subsequent save analyzing.
ResetCompletion(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"]);
// ============================================================================================================================= //
// ---------------- Time Played ----------------------------------------------------------------------------------------------- //
CheckPlayTime(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.intro, HKPlayerData.playTime);
// ---------------- Game Completion Status ------------------------------------------------------------------------------------ //
CheckCompletionPercent(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.intro, HKPlayerData);
// ---------------- Game Completion Status ------------------------------------------------------------------------------------ //
CheckSaveFileVersion(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.intro, HKPlayerData.version);
// ---------------- Health Masks ---------------------------------------------------------------------------------------------- //
CheckHealthMasks(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.intro, HKPlayerData.maxHealthBase, HKPlayerData.permadeathMode);
// ---------------- Silk Bars ------------------------------------------------------------------------------------------------- //
CheckSilkBar(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.intro, HKPlayerData.silkMax);
// ---------------- Check Crests ------------------------------------------------------------------------------------- //
CheckCrests(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.intro, HKPlayerData);
// ---------------- Rosary Amount ------------------------------------------------------------------------------------------------ //
CheckRosary(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.intro, HKPlayerData.geo, HKPlayerData.HeroCorpseMoneyPool);
// ---------------- Shell Shards Amount ------------------------------------------------------------------------------------------------ //
CheckshellShards(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.intro, HKPlayerData.ShellShards);
// ---------------- Crests Crests Crests Crests Crests Crests ---------------------------------------------------------------------------------------------------- //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.crests, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.crests.entries, HKPlayerData);
// ---------------- Needle Upgrades --------------------------------------------------------------------------------------------- //
CheckNeedleUpgrades(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.NeedleUpgrades, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.NeedleUpgrades.entries, HKPlayerData);
// ---------------- Silk Heart --------------------------------------------------------------------------------------------- //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.silkHeart, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.silkHeart.entries, HKPlayerData);
// ---------------- Tools ---------------------------------------------------------------------------------------------------- //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.redTools, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.redTools.entries, HKPlayerData.Tools.savedData);
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.blueTools, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.blueTools.entries, HKPlayerData.Tools.savedData);
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.yellowTools, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.yellowTools.entries, HKPlayerData.Tools.savedData);
// ---------------- Equipment (Abilities) ------------------------------------------------------------------------------------------------- //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.equipment, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.equipment.entries, HKPlayerData.Tools.savedData);
// ---------------- skills ---------------------------------------------------------------------------------------------------- //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.skills, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.skills.entries, HKPlayerData);
// ---------------- Miscellaneous ---------------------------------------------------------------------------------------------------- //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.miscellaneous, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.miscellaneous.entries, HKPlayerData);
// ---------------- Mask Shards ----------------------------------------------------------------------------------------------- //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.maskShards, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.maskShards.entries, HKPlayerData, HKWorldItems);
// ---------------- Spool Fragments ------------------------------------------------------------------------------------------ //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.spoolFragments, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.spoolFragments.entries, HKPlayerData, HKWorldItems);
// ---------------- Crafting Kit Upgrades ------------------------------------------------------------------------------------------ //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.craftingKitUpgrades, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.craftingKitUpgrades.entries, HKPlayerData, HKWorldItems);
// ---------------- Tool Pouch Upgrades ------------------------------------------------------------------------------------------ //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.toolPouchUpgrades, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.toolPouchUpgrades.entries, HKPlayerData, HKWorldItems);
// ---------------- flea ---------------------------------------------------------------------------------------------------- //
CheckIfDataTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.flea, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.flea.entries, HKPlayerData);
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
/*
// ---------------- Bosses (Base Game) ---------------------------------------------------------------------------------------- //
CheckIfDataTrue(HK.sections.bosses, HK.sections.bosses.entries, HKPlayerData, HKWorldItems);
// ---------------- Colosseum of Fools ---------------------------------------------------------------------------------------- //
CheckIfDataTrue(HK.sections.colosseum, HK.sections.colosseum.entries, HKPlayerData);
// ---------------- Dreamers -------------------------------------------------------------------------------------------------- //
CheckIfDataTrue(HK.sections.dreamers, HK.sections.dreamers.entries, HKPlayerData);
// ---------------- Dream Nail and Essence ------------------------------------------------------------------------------------ //
CheckIfDataTrue(HK.sections.dreamNail, HK.sections.dreamNail.entries, HKPlayerData);
// ---------------- Nail Arts ------------------------------------------------------------------------------------------------- //
CheckIfDataTrue(HK.sections.nailArts, HK.sections.nailArts.entries, HKPlayerData);
// ---------------- Warrior Dreams -------------------------------------------------------------------------------------------- //
CheckWarriorDreams(HK.sections.warriorDreams, HK.sections.warriorDreams.entries, HKPlayerData);
// ---------------- Grimm Troupe Content Pack --------------------------------------------------------------------------------- //
CheckIfDataTrue(HK.sections.grimmTroupe, HK.sections.grimmTroupe.entries, HKPlayerData);
// ---------------- Lifeblood Content Pack ------------------------------------------------------------------------------------ //
CheckIfDataTrue(HK.sections.lifeblood, HK.sections.lifeblood.entries, HKPlayerData);
// ---------------- Godmaster Content Pack ------------------------------------------------------------------------------------ //
CheckIfDataTrue(HK.sections.godmaster, HK.sections.godmaster.entries, HKPlayerData);
*/
// ------------------------- Hunter's Journal --------------------------------------------------------------------------------- //
/* Must be checked before Statistics (for correct entry numbers) */
CheckHuntersJournal(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"], "huntersJournal", HKPlayerData);
//CheckHuntersJournal(HK, "huntersJournalOptional", HKPlayerData);
/*
// ------------------------- Essentials % -> Collectibles --------------------------------------------------------------------- //
CheckAdditionalThings(HK.sections.essentialsCollectibles, jsonObject);
// ------------------------- Essentials % -> Stag Stations -------------------------------------------------------------------- //
CheckAdditionalThings(HK.sections.essentialsStagStations, jsonObject);
// ------------------------- Essentials % -> World Interactions -------------------------------------------------------------- //
CheckAdditionalThings(HK.sections.essentialsWorldInteractions, jsonObject);
// ------------------------- Essentials % -> Bosses --------------------------------------------------------------------- //
CheckAdditionalThings(HK.sections.essentialsBosses, jsonObject);
// ------------------------- Achievements Essentials -> Collectibles --------------------------------------------------------- //
CheckAdditionalThings(HK.sections.achievementsCollectibles, jsonObject);
// ------------------------- Achievements Essentials -> Maps ----------------------------------------------------------- //
CheckAdditionalThings(HK.sections.achievementsMaps, jsonObject);
// ------------------------- Achievements Essentials -> World Interactions --------------------------------------------------- //
CheckAdditionalThings(HK.sections.achievementsWorldInteractions, jsonObject);
// ------------------------- Achievements Essentials -> Bosses ----------------------------------------------------------- //
CheckAdditionalThings(HK.sections.achievementsBosses, jsonObject);
// ------------------------- Collectibles -> Charm Notches ------------------------------------------------------------------- //
CheckAdditionalThings(HK.sections.charmNotches, jsonObject);
// ------------------------- Collectibles -> Grubs ---------------------------------------------------------------------- //
saveDataChecker.checkItems(HK.sections.grubs);
// ------------------------- Collectibles -> Whispering Roots ---------------------------------------------------------------- //
saveDataChecker.checkItems(HK.sections.whisperingRoots);
// ------------------------- Collectibles -> Relics - Wanderer's Journal ------------------------------------------------------- //
saveDataChecker.checkItems(HK.sections.relicsWanderersJournal);
// ------------------------- Collectibles -> Relics - Hallownest Seal ----------------------------------------------------------- //
saveDataChecker.checkItems(HK.sections.relicsHallownestSeal);
// ------------------------- Collectibles -> Relics - King's Idol ----------------------------------------------------------- //
saveDataChecker.checkItems(HK.sections.relicsKingsIdol);
// ------------------------- Collectibles -> Relics - Arcane Egg ----------------------------------------------------------- //
saveDataChecker.checkItems(HK.sections.relicsArcaneEgg);
// ------------------------- Collectibles -> Rancid Eggs ----------------------------------------------------------- //
saveDataChecker.checkItems(HK.sections.rancidEggs);
// ------------------------- Collectibles -> Items ---------------------------------------------------------------------- //
CheckAdditionalThings(HK.sections.items, jsonObject);
// ------------------------- Geo Caches -> Geo Chests ----------------------------------------------------------- //
saveDataChecker.checkItems(HK.sections.geoChests);
// ------------------------- Geo Caches -> Geo Rocks ----------------------------------------------------------- //
saveDataChecker.checkGeoRocks(HK.sections.geoRocks);
// ------------------------- Secrets -> World Interactions ---------------------------------------------------------------------- //
CheckAdditionalThings(HK.sections.worldInteractions, jsonObject);
// ------------------------- Secrets -> Secret Rooms ---------------------------------------------------------------------- //
CheckAdditionalThings(HK.sections.secretRooms, jsonObject);
// ------------------------- Secrets -> Cornifer's Notes ----------------------------------------------------------- //
saveDataChecker.checkItems(HK.sections.corniferNotes);
// ------------------------- Game Statistics ---------------------------------------------------------------------------------- //
CheckAdditionalThings(HK.sections.statistics, jsonObject);
// ------------------------- Godhome Statistics ------------------------------------------------------------------------------- //
CheckAdditionalThings(HK.sections.godhomeStatistics, jsonObject);
*/
/* ------------------------- Pantheon Statistics ------------------------------------------------------------------------------ */
/*CheckPantheon(HK, "pantheonOfTheArtist", HKPlayerData);
CheckPantheon(HK, "pantheonOfTheSage", HKPlayerData);
CheckPantheon(HK, "pantheonOfTheKnight", HKPlayerData);
CheckPantheon(HK, "pantheonOfHallownest", HKPlayerData);
CheckHallOfGods(HK, HKPlayerData);*/
// ------------------------- Hints ---------------------------------------------------------------------------------------------- //
CheckHintsTrue(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.hints, _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.hints.entries, HKPlayerData, HKWorldItems);
// ------------------------- Extended game completion check --------------------------------------------------------------------- //
/* Percent completion is filled inside GenerateInnerHTML() using CompletionFill() */
CheckExtendedCompletion(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"]);
// ------------------------- Indicate that the save file was loaded and analyzed correctly -------------------------------------- //
_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].saveAnalyzed = true;
// ------------------------- Generate everything on the page with updated values ------------------------------------------------ //
(0,_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.GenerateInnerHTML)(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"]);
// Prevents wrong checkbox behaviour (must run after everything is finished)
(0,_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.CheckboxHintsToggle)();
(0,_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.CheckboxSpoilersToggle)();
/* focus the text area after analyzing the save, without scrolling the document (too slow) */
/* document.getElementById("save-area").focus({preventScroll: true}); */
// finish and show benchmark
// benchHKCCEnd = new Date();
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.CheckCompletion.timeEnd = performance.now();
// console.info("HKCheckCompletion() time (ms) =", benchHKCCEnd - benchHKCCBegin);
// Benchmark(benchmarkTimes);
return true;
}
/**
* Generates and appends a new entry inside the HTML of a given ID
* @param {object} section object containing div ID and h2 title of the HTML element
* @param {string} textPrefix Main name of the entry
* @param {string} textSuffix Optional suffix after the main name (spoilers: locations, costs etc.)
*/
function PrepareHTMLString(section) {
var textPrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "Unknown Completion Element: ";
var textSuffix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "Unknown Description Element";
var wiki = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
var icon = completionSymbol;
var b = ["", ""];
if (!textPrefix.length) b = ["", ""];
if (wiki.length) b = [""), ""];
var span = ["", ""];
var spoilerSpan = ["", ""];
if (section.id === "hk-hints") {
span[0] = "";
icon = "";
}
// let dash = "";
if (textSuffix.length && textPrefix.length) textSuffix = "— " + textSuffix;
if (textPrefix.includes("")) textSuffix = "".concat(textSuffix, "");
// return divStart + icon + b[0] + textPrefix + b[1] + span[0] + pSpan + spoilerSpan[0] + dash + textSuffix + spoilerSpan[1] + span[1] + divEnd;
return "\n ".concat(divStart, "\n ").concat(icon).concat(b[0]).concat(textPrefix).concat(b[1]).concat(span[0]).concat(pSpan).concat(spoilerSpan[0]).concat(textSuffix).concat(spoilerSpan[1]).concat(span[1], "\n ").concat(divEnd, "\n ");
}
/**
* Fills HTML with the playTime value of the save file
* @param {object} section ID of the HTML element for data appending
* @param {number} playTime Number of total gameplay time in seconds
*/
function CheckPlayTime(section, playTime) {
var seconds = Math.floor(playTime);
var minutes = Math.floor(seconds / 60 % 60);
var hours = Math.floor(seconds / 3600);
var sec = Math.floor(seconds % 60);
section.entries.timePlayed.timeH = hours;
section.entries.timePlayed.timeM = minutes;
section.entries.timePlayed.timeS = sec;
if (sec < 10) sec = "0" + sec;
if (minutes < 10) minutes = "0" + minutes;
var textFill = "Time Played:" + pSpan + "" + hours + " h " + minutes + " min " + sec + " sec";
section.entries.timePlayed.spoiler = hours + " h " + minutes + " min " + sec + " sec";
// document.getElementById(section.id).innerHTML += divStart + SYMBOL_CLOCK + textFill + divEnd;
}
/**
* Searches for completionPercentage in playerData and fills HTML with the value of the save file
* @param {object} section ID of the HTML element for data appending
* @param {number} completionPercentage Number of completion percentage
*/
function CheckCompletionPercent(section, playerData) {
var completionPercentage = Math.round(playerData.completionPercentage);
var maxPercent = 0;
// Normal (current) game version behaviour: 112%
section.maxPercent = section.maxPercentDefault;
maxPercent = section.maxPercentDefault;
section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterDefault;
section.percent = completionPercentage;
section.entries.gameCompletion.spoiler = completionPercentage;
/*
// Lifeblood behaviour: 107%
if (!playerData.hasOwnProperty("hasGodfinder")) {
section.maxPercent = section.maxPercentLifeblood;
maxPercent = section.maxPercentLifeblood;
section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterLifeblood;
}
// Grimm Troupe bahaviour: 106%
if (!playerData.hasOwnProperty("killedHiveKnight")) {
section.maxPercent = section.maxPercentGrimmTroupe;
maxPercent = section.maxPercentGrimmTroupe;
section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterGrimmTroupe;
}
*/
/* Base Game behaviour with no Content Packs: 100% */
//if (!playerData.hasOwnProperty("gotCharm_37")) {
section.maxPercent = section.maxPercentBaseGame;
maxPercent = section.maxPercentBaseGame;
section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterBaseGame;
//}
completionPercentage >= maxPercent ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, "gameCompletion") : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, "gameCompletion");
}
/**
* Calculates the amount of all green ticks and total entries. Saves them to database for later display.
* @param {object} db reference to the main HK database
*/
function CheckExtendedCompletion(db) {
var sections = db.sections;
var entries = {};
var gameCompletionExtended = db.sections.intro.entries.gameCompletionExtended;
var intro = db.sections.intro;
var amount = 0;
var max = 0;
for (var section in sections) {
entries = sections[section].entries;
switch (section) {
/* Ignore these sections totally */
case "intro":
case "hints":
case "huntersJournal":
//case "huntersJournalOptional":
//case "flea":
continue;
default:
// console.info("Section loop:", section);
for (var entry in entries) {
// console.info("Entry loop:", entry);
switch (entry) {
/* Do not count (ignore) these entries at all */
case "oldNail":
case "pantheonMaster": // Pantheons are counted in Godmaster section
case "pantheonArtist":
case "pantheonSage":
case "pantheonKnight":
case "pantheonHallownest":
case "geoPool":
case "dreamOrbs":
case "charmsOwned":
case "nailDamage":
case "jinnEggsSold":
case "xunFlowerBrokeTimes":
case "itemsDiscovered":
case "stagStationsOpened":
case "areaMaps":
case "killedMegaMossCharger":
case "killedBigBuzzer":
case "killedOblobble":
case "killedLobsterLancer":
case "killedFlukeMother":
case "killedNailBros":
case "killedPaintmaster":
case "killedNailsage":
case "killedHollowKnightPrime":
case "killsBigBuzzer":
case "whiteDefenderDefeated":
case "greyPrinceDefeated":
case "killedHollowKnight":
case "killedFinalBoss":
// Collectibles are counted in their own sections
// falls through
case "grubsCollected":
case "whisperingRoots":
case "relicsWandererJournal":
case "relicsHallownestSeal":
case "relicsKingsIdol":
case "relicsArcaneEgg":
case "soldTrinket1":
case "soldTrinket2":
case "soldTrinket3":
case "soldTrinket4":
case "relicsSoldTotalGeo":
case "bankerBalance":
case "rancidEggs":
case "geoRocks":
case "ore":
case "simpleKeys":
// console.info("Ignored:", entry);
continue;
}
if (entries[entry].hasOwnProperty("icon")) {
switch (entry) {
/* Do not add these to total and done (they will be added as amount/max later instead) */
case "grubsCollected":
case "grubRewards":
case "areaMaps":
case "journalEntriesCompleted":
case "journalNotesCompleted":
case "whisperingRoots":
case "relicsWandererJournal":
case "relicsHallownestSeal":
case "relicsKingsIdol":
case "relicsArcaneEgg":
case "geoRocks":
case "whiteDefenderDefeats":
case "greyPrinceDefeats":
/* console.info("Ignored:", entry); */
break;
default:
if (entries[entry].icon !== "none") {
intro.extendedCompletionTotal++;
// console.info("Counted Total:", entry);
} /* else {
console.info("Not Counted Total:", entry);
} */
/* Missable Arcane Egg exception, subtract from total */
if (entries[entry].icon === "none" && entry === "arcaneEggLifebloodCoreRoom") {
/* console.info(`${entry} has passed:`, entries[entry].icon); */
/* When got the Lifeblood Core charm, but didn't pick up the Arcane Egg */
if (sections.charms.entries.gotCharm_9.icon === "green") {
intro.extendedCompletionTotal--;
/* console.info(`${entry} completion Total subtracted`); */
}
}
switch (entries[entry].icon) {
case "red":
case "none":
case "partial":
case "partialJournal":
continue;
default:
intro.extendedCompletionDone++;
// console.info("Counted (Done):", entry);
}
}
/* Skip disabled entries entirely from counting (subtract a point from Total) */
if (entries[entry].hasOwnProperty("disabled") && entries[entry].disabled === true) {
/* Do not subtract a point for WD/GPZ Defeats nr if they were not added to Total in the first place */
if (entry === "greyPrinceDefeats" || entry === "whiteDefenderDefeats") {
continue;
}
intro.extendedCompletionTotal--;
// console.info("Subtracted Total:", entry);
}
/* Counting amount/max for several entries */else if (entries[entry].hasOwnProperty("amount") && entries[entry].hasOwnProperty("max")) {
/* Skip counting 3000 Fountain Geo, too much */
if (entry === "fountainGeo") {
continue; // continue to next entry loop
}
amount = entries[entry].amount;
max = entries[entry].max;
/* Prevent overflowing the counter */
if (amount > max) {
amount = max;
}
intro.extendedCompletionDone += amount;
intro.extendedCompletionTotal += max;
// console.info(`${entry}: ${amount}/${max}`, entries[entry].name);
amount = 0;
max = 0;
}
/* Counting Geo Rocks */
/* else if (entries[entry].hasOwnProperty("activated") && entries[entry].hasOwnProperty("max")) {
amount = entries[entry].activated;
max = entries[entry].max;
// Check in case the player has discovered more than 205 (max) Geo Rocks
if (max < entries[entry].discoveredTotal) {
max = entries[entry].discoveredTotal;
}
intro.extendedCompletionDone += amount;
intro.extendedCompletionTotal += max;
console.info(`${entry}: ${amount}/${max}`, entries[entry].name);
amount = 0;
max = 0;
} */
}
}
}
}
if (intro.extendedCompletionDone >= intro.extendedCompletionTotal) {
gameCompletionExtended.icon = "green";
} else {
gameCompletionExtended.icon = "red";
}
var percent = intro.extendedCompletionDone / intro.extendedCompletionTotal * 100;
gameCompletionExtended.spoiler = intro.extendedCompletionDone;
gameCompletionExtended.spoilerAfter = " / ".concat(intro.extendedCompletionTotal, " = ").concat(percent.toFixed(2), " %");
}
/**
* Reads the "version" string from the save file and appends it to the selected div ID element
* @param {object} section ID of the HTML element for data appending
* @param {string} saveVersion Save File version in format 0.0.0.0
*/
function CheckSaveFileVersion(section) {
var saveVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].sections.intro.entries.saveVersion.spoiler;
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, section.entries.saveVersion.id);
section.entries.saveVersion.spoiler = "".concat(saveVersion);
/* let textFill = `Save Version:${pSpan}${saveVersion}${pSpan}`; */
// document.getElementById(section.id).innerHTML += divStart + completionSymbol + textFill + divEnd;
}
/**
* Fills HTML with appropriate number of health mask images
* @param {object} section ID of the HTML element for data appending
* @param {number} masks Number of max health masks from the save (baseline without tools and lifeblood)
* @param {number} permadeathMode Value of permadeathMode property. 0 = Normal, 1 = Steel Soul, 2 = Steel Soul broken save
*/
function CheckHealthMasks(section) {
var masks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;
var permadeathMode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
section.entries.health.amountTotal = masks;
if (permadeathMode > 0) {
section.entries.health.permadeathMode = true;
} else {
section.entries.health.permadeathMode = false;
}
/* let icon = SYMBOL_EMPTY;
let textFill = "Health:";
let maskImages = "";
let maskNormal = ``;
let maskSteel = ``;
let maskImg = "";
(permadeathMode > 0) ? maskImg = maskSteel: maskImg = maskNormal;
for (let i = 0; i < masks; i++) {
maskImages += maskImg;
} */
// document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + maskImages + divEnd;
}
/**
* Fills HTML with appropriate number of soul orbs images
* @param {object} section ID of the HTML element for data appending
* @param {number} totalSilk Number of max Silk reserve from the save. 18 = full Silk Bar
*/
function CheckSilkBar(section, totalSilk) {
/* let icon = SYMBOL_EMPTY;
let textFill = "Soul:";
let soulImages = "";
let soulNormal = ``;
let soulImg = soulNormal;
for (let i = 0, total = totalSoul / 33; i < total; i++) {
soulImages += soulImg;
} */
section.entries.silk.amountTotal = totalSilk;
// document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + soulImages + divEnd;
}
/**
* Fills HTML with the Geo value of the save file
* @param {object} section ID of the HTML element for data appending
* @param {number} geoValue Number of total rosaries value
*/
function CheckRosary(section) {
var geoValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var geoPoolValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
section.entries.rosaries.amount = geoValue;
section.entries.rosaries.amountShade = geoPoolValue;
section.entries.rosaries.amountTotal = geoValue + geoPoolValue;
/* let icon = SYMBOL_EMPTY;
let textFill = `Geo:${geoValue}`;
// Show Shade Geo value and image only if Shade has at least 1 Geo on it
if (geoPoolValue > 0) textFill += `
${pSpan}+${geoPoolValue}`;
// Show also total Geo (Geo + Shade Geo) if player has at least 1 geo alongside the shade geo
if (geoValue > 0 && geoPoolValue > 0) textFill += `${pSpan}=${pSpan}${geoValue+geoPoolValue}`; */
// document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + divEnd;
}
/**
* Fills HTML with the shell shards value of the save file
* @param {object} section ID of the HTML element for data appending
* @param {number} geoValue Number of total shellShards value
*/
function CheckshellShards(section) {
var shellShardsValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
section.entries.shellShards.amount = shellShardsValue;
}
/**
* Fills HTML with appropriate number of notch images
* @param {object} section ID of the HTML element for data appending
* @param {object} PlayerData Contain the memory of the cerst.
*/
function CheckCrests(section, PlayerData) {
var amountTotal = 1;
section.entries.crests.reaper = PlayerData.completedMemory_reaper;
section.entries.crests.wanderer = PlayerData.completedMemory_wanderer;
section.entries.crests.beast = PlayerData.completedMemory_beast;
section.entries.crests.witch = PlayerData.completedMemory_witch;
section.entries.crests.toolmaster = PlayerData.completedMemory_toolmaster;
section.entries.crests.shaman = PlayerData.completedMemory_shaman;
if (PlayerData.completedMemory_reaper) amountTotal++;
if (PlayerData.completedMemory_wanderer) amountTotal++;
if (PlayerData.completedMemory_beast) amountTotal++;
if (PlayerData.completedMemory_witch) amountTotal++;
if (PlayerData.completedMemory_toolmaster) amountTotal++;
if (PlayerData.completedMemory_shaman) amountTotal++;
section.entries.crests.amountTotal = amountTotal;
/* // How many overcharmed notches images to show
notchesOvercharmed = notchesFilled - notchesTotal;
if (notchesOvercharmed < 1) notchesOvercharmed = 0;
section.entries.notches.amountOvercharmed = notchesOvercharmed;
// How many unused notches images to show
notchesUnused = notchesTotal - notchesFilled;
if (notchesUnused < 1) notchesUnused = 0;
section.entries.notches.amountUnused = notchesUnused;
// Correct number of filled/used notches images to show when player is overcharmed
if (notchesFilled > notchesTotal) notchesFilled = notchesTotal;
section.entries.notches.amountFilled = notchesFilled;*/
/* let icon = SYMBOL_EMPTY;
let textFill = `Notches:${pSpan}`;
let notchImages = "";
let notchNormalImage = ``;
let notchFilledImage = ``;
let notchOvercharmedImage = ``;
// First check filled (used) notches and fill them (skips if no filled notches)
if (notchesFilled > 0) {
for (let i = 0; i < notchesFilled; i++) {
notchImages += notchFilledImage;
}
}
// Second check overcharmed notches and fill them (skips if player is not overcharmed)
if (notchesOvercharmed > 0) {
for (let i = 0; i < notchesOvercharmed; i++) {
notchImages += notchOvercharmedImage;
}
}
// Lastly, fill all unused notches
if (notchesUnused > 0) {
for (let i = 0; i < notchesUnused; i++) {
notchImages += notchNormalImage;
}
} */
// document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + notchImages + divEnd;
}
/**
* Verifies if the data in a specific object is true or false, and appends HTML accordingly.
* @param {object} section ID of the HTML element for data appending
* @param {object} dataObject Object containing data to be verified (use copy - data inside this object will be deleted)
* @param {object} playerData Reference/pointer to specific data where to search (playerData)
* @param {Array} worldData Reference/pointer to specific data where to search (sceneData.persistentBoolItems)
*/
function CheckIfDataTrue(section, dataObject, playerData) {
var worldData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
/* let {
textPrefix,
textSuffix,
} = "";
let sFillText = "";
let wiki = ""; */
var checkText = "";
var _loop = function _loop(i) {
/* textPrefix = dataObject[i].name;
textSuffix = dataObject[i].spoiler;
(dataObject[i].hasOwnProperty("wiki")) ? wiki = dataObject[i].wiki: wiki = ""; */
if (section.id === "hk-redTools" || section.id === "hk-blueTools" || section.id === "hk-yellowTools" || section.id === "hk-equipment") {
switch (i) {
case "webShot":
//check if he have any type of webshot which count as 1% (the player cant have multiple of it)
var foundArchitect = playerData.find(function (playerData) {
return playerData.Name === "WebShot Architect";
});
var foundForge = playerData.find(function (playerData) {
return playerData.Name === "WebShot Forge";
});
var foundWeaver = playerData.find(function (playerData) {
return playerData.Name === "WebShot Weaver";
});
foundArchitect !== undefined && foundArchitect.Data.IsUnlocked === true || foundForge !== undefined && foundForge.Data.IsUnlocked === true || foundWeaver !== undefined && foundWeaver.Data.IsUnlocked === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "curveClaws":
//check if he have any type of curveClaws which count as 1% (normal or upgraded one)
var foundClaws = playerData.find(function (playerData) {
return playerData.Name === "Curve Claws";
});
var foundClawsUpgrade = playerData.find(function (playerData) {
return playerData.Name === "Curve Claws Upgraded";
});
foundClaws !== undefined && foundClaws.Data.IsUnlocked === true || foundClawsUpgrade !== undefined && foundClawsUpgrade.Data.IsUnlocked === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "mosscreepTool":
//check if he have any type of Mosscreep which count as 1% (normal or upgraded one)
var foundMosscreep = playerData.find(function (playerData) {
return playerData.Name === "Mosscreep Tool 1";
});
var foundMosscreepUpgrade = playerData.find(function (playerData) {
return playerData.Name === "Mosscreep Tool 2";
});
foundMosscreep !== undefined && foundMosscreep.Data.IsUnlocked === true || foundMosscreepUpgrade !== undefined && foundMosscreepUpgrade.Data.IsUnlocked === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "DazzleBind":
//check if he have any type of Dazzle Bind which count as 1% (normal or upgraded one)
var foundDazzle = playerData.find(function (playerData) {
return playerData.Name === "Dazzle Bind";
});
var foundDazzleUpgrade = playerData.find(function (playerData) {
return playerData.Name === "Dazzle Bind Upgraded";
});
foundDazzle !== undefined && foundDazzle.Data.IsUnlocked === true || foundDazzleUpgrade !== undefined && foundDazzleUpgrade.Data.IsUnlocked === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "deadMansPurse":
//check if he have any type of Bomb for normal and steel mod which count as 1% (normal or upgraded one)
var foundBombNormal = playerData.find(function (playerData) {
return playerData.Name === "Dead Mans Purse";
});
var foundBombSteel = playerData.find(function (playerData) {
return playerData.Name === "Shell Satchel";
});
foundBombNormal !== undefined && foundBombNormal.Data.IsUnlocked === true || foundBombSteel !== undefined && foundBombSteel.Data.IsUnlocked === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
default:
var foundData = playerData.find(function (playerData) {
return playerData.Name === dataObject[i].id;
});
foundData !== undefined && foundData.Data.IsUnlocked === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
}
// CHECK SILK HEART
else if (section.id === "hk-silkHeart") {
var exist = playerData.scenesVisited.indexOf(i);
exist >= 0 ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
//CHECK SILK HEART MASK AND SPOOL SILK (they change it from old design)
else if (section.id === "hk-maskshards" || section.id === "hk-spoolFragments" || section.id === "hk-toolPouchUpgrades" || section.id === "hk-craftingKitUpgrades") {
switch (i) {
//buy from sellers
case "PurchasedBonebottomHeartPiece":
case "MerchantEnclaveShellFragment":
case "PurchasedBelltownSpoolSegment":
case "MetCaravanTroupeLeaderJudge":
case "MerchantEnclaveSpoolPiece":
case "purchasedGrindleSpoolPiece":
case "PurchasedForgeToolKit":
case "PurchasedArchitectToolKit":
case "purchasedGrindleToolKit":
case "PurchasedPilgrimsRestToolPouch":
playerData[i] === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
//Finishing wishes
case "beastflyHuntWish":
case "sprintmasterRaceWish":
case "destroyThreadCoresWish":
case "destroyThreadCoresWish":
case "antTrapperWish":
case "saveShermaWish":
case "crowFeathersWish":
case "journalWish":
var wishList = playerData.QuestCompletionData.savedData;
var foundWish = wishList.find(function (wishList) {
return wishList.Name === dataObject[i].sceneName;
});
foundWish !== undefined && foundWish.Data.IsCompleted === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
//I hate that caravan....
case "CaravanTroupeLocation":
playerData[i] === 3 ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
//World Scene
default:
var sceneList = worldData.serializedList;
var sceneInfo = sceneList.find(function (sceneList) {
return sceneList.SceneName === dataObject[i].sceneName && sceneList.ID === dataObject[i].id;
});
sceneInfo !== undefined && sceneInfo.Value === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
}
} else {
/*switch (i) {
case "gotCharm_36":
// prevents green checkbox and adding 1% when only got one white fragment
(playerData.gotQueenFragment === true && playerData.gotKingFragment === true) ? SetIconGreen(section, i): SetIconRed(section, i);
break;
case "gotCharm_37":
case "gotCharm_38":
case "gotCharm_39":
case "gotCharm_40":
case "killedGrimm":
case "grimmChildLevel":
case "killedHiveKnight":
case "hasGodfinder":
// fades out the entries if save file is from older game versions
if (playerData.hasOwnProperty(i) === false) {
SetIconNone(section, i);
dataObject[i].disabled = true;
//textPrefix = `${textPrefix}`;
break;
}
// Checks for Nightmare King (4) or Banishment (5)
if (i === "grimmChildLevel") {
// (playerData.grimmChildLevel >= 4) ? SetIconGreen(section, i): SetIconRed(section, i);
// Check if Nightmare King or Banishment by looking at grimmChildLevel
switch (playerData[i]) {
case 4:
dataObject[i].name = dataObject[i].nameNightmareKing;
dataObject[i].spoiler = dataObject[i].spoilerNightmareKing;
dataObject[i].wiki = dataObject[i].wikiNightmareKing;
SetIconGreen(section, i);
break;
case 5:
dataObject[i].name = dataObject[i].nameBanishment;
dataObject[i].spoiler = dataObject[i].spoilerBanishment;
dataObject[i].wiki = dataObject[i].wikiBanishment;
SetIconGreen(section, i);
break;
default:
SetIconRed(section, i);
dataObject[i].name = dataObject[i].nameDefault;
dataObject[i].spoiler = dataObject[i].spoilerDefault;
dataObject[i].wiki = dataObject[i].wikiDefault;
}
break;
}
if (i === "gotCharm_40") {
SetIconRed(section, i);
dataObject[i].name = dataObject[i].nameDefault;
dataObject[i].spoiler = dataObject[i].spoilerDefault;
dataObject[i].wiki = dataObject[i].wikiDefault;
switch (playerData.grimmChildLevel) {
case 1:
if (playerData[i] === true) {
dataObject[i].name = dataObject[i].nameGrimmchildP1;
dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP1;
dataObject[i].wiki = dataObject[i].wikiGrimmchild;
SetIconGreen(section, i);
}
break;
case 2:
dataObject[i].name = dataObject[i].nameGrimmchildP2;
dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP2;
dataObject[i].wiki = dataObject[i].wikiGrimmchild;
SetIconGreen(section, i);
break;
case 3:
dataObject[i].name = dataObject[i].nameGrimmchildP3;
dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP3;
dataObject[i].wiki = dataObject[i].wikiGrimmchild;
SetIconGreen(section, i);
break;
case 4:
dataObject[i].name = dataObject[i].nameGrimmchildP4;
dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP4;
dataObject[i].wiki = dataObject[i].wikiGrimmchild;
SetIconGreen(section, i);
break;
case 5:
dataObject[i].name = dataObject[i].nameCarefreeMelody;
dataObject[i].spoiler = dataObject[i].spoilerCarefreeMelody;
dataObject[i].wiki = dataObject[i].wikiCarefreeMelody;
SetIconGreen(section, i);
break;
default:
dataObject[i].name = dataObject[i].nameDefault;
dataObject[i].spoiler = dataObject[i].spoilerDefault;
dataObject[i].wiki = dataObject[i].wikiDefault;
}
break;
}
(playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);
break;
case "bossGruzMother":
case "bossBroodingMawlek":
case "maskShardCrossroadsSprings":
case "maskShardCrossroadsMawlek":
case "maskShardGrubfather":
case "maskShardBretta":
case "maskShardQueensStation":
case "maskShardWaterways":
case "maskShardStoneSanctuary":
case "maskShardCrystalPeak":
case "maskShardDeepnest":
case "maskShardHive":
case "maskShardDelicateFlower":
case "vesselFragmentGreenpath":
case "vesselFragmentCrossroads":
case "vesselFragmentCityOfTears":
case "vesselFragmentDeepnest":
case "vesselFragmentFountain":
(WorldDataActivated(dataObject[i].id, dataObject[i].sceneName, worldData)) ? SetIconGreen(section, i): SetIconRed(section, i);
break;
case "pantheonMaster":
case "pantheonArtist":
case "pantheonSage":
case "pantheonKnight":
checkText = CheckGodmasterDoors(dataObject[i], playerData);
if (checkText === "PropertyNotFound") {
SetIconNone(section, i);
dataObject[i].disabled = true;
//textPrefix = `${textPrefix}`;
break;
} else if (checkText === "PantheonCompleted") {
SetIconGreen(section, i);
break;
} else {
SetIconRed(section, i);
}
break;
default:
(playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);
}*/
playerData[i] === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
/* sFillText += PrepareHTMLString(section, textPrefix, textSuffix, wiki); */
};
for (var i in dataObject) {
_loop(i);
}
// AppendHTML(section, sFillText);
}
/**
* Verifies if the data in a specific object is 0 or > 0, and appends HTML accordingly.
* @param {object} section ID of the HTML element for data appending
* @param {object} dataObject Object containing data to be verified (use copy - data inside this object will be deleted)
* @param {object} playerData Reference/pointer to specific data where to search
*/
function CheckSpellLevel(section, dataObject, playerData) {
// let sFillText = "";
for (var i in dataObject) {
switch (i) {
case "vengefulSpirit":
case "shadeSoul":
playerData.fireballLevel >= dataObject[i].fireballLevel ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
// sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);
break;
case "desolateDive":
case "descendingDark":
playerData.quakeLevel >= dataObject[i].quakeLevel ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
// sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);
break;
case "howlingWraiths":
case "abyssShriek":
playerData.screamLevel >= dataObject[i].screamLevel ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
// sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);
break;
default:
break;
}
}
// AppendHTML(section, sFillText);
}
/**
* Verifies if the data in a specific object is 0 or > 0, and appends HTML accordingly.
* @param {object} section ID of the HTML element for data appending
* @param {object} dataObject Object containing data to be verified
* @param {object} playerData Reference/pointer to specific data where to search
*/
function CheckWarriorDreams(section, dataObject, playerData) {
var sFillText = "";
for (var i in dataObject) {
playerData[i] >= 2 ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);
}
// AppendHTML(section, sFillText);
}
/**
* Verifies if the Godmaster Pantheons 1-4 are completed by the player, and appends HTML accordingly.
* @param {object} dataObject Object containing pantheon data to be verified (with property)
* @param {object} playerData Reference/pointer to specific data where to search in the save file
*/
function CheckGodmasterDoors(dataObject, playerData) {
if (playerData.hasOwnProperty(dataObject.property) === false) {
return "PropertyNotFound";
} else if (playerData[dataObject.property].completed === true) {
return "PantheonCompleted";
} else {
return "PantheonNotCompleted";
}
}
/**
* Verifies the level of player's needle upgrades, and appends HTML accordingly.
* @param {object} section ID of the HTML element for data appending
* @param {object} dataObject Object containing needle upgrades data to be verified
* @param {object} playerData Reference/pointer to specific data where to search in the save file
*/
function CheckNeedleUpgrades(section, dataObject, playerData) {
// appends "Nail" to every array element
// same as names in the database object
var Needle = ["starting", "sharpened", "shining", "hivesteel", "paleSteel"].map(function (element) {
return element + "Needle";
});
var sFillText = "";
for (var i = 0; i < 5; i++) {
playerData.nailUpgrades >= i ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, Needle[i]) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, Needle[i]);
sFillText += PrepareHTMLString(section, dataObject[Needle[i]].name, dataObject[Needle[i]].spoiler, dataObject[Needle[i]].wiki);
}
if (section.percent) section.percent--; // subject one for the Old Nail
}
/**
* Verifies if the specific Interactable (Item, Boss, Chest etc.) is activated. Returns true or false.
* @param {string} idText ID text of the Interactable (id in sceneData)
* @param {string} sceneNameText Map codename of the Interactable (sceneName in sceneData)
* @param {Array} worldData Array of Interactable data to search in (sceneData.persistentBoolItems)
*/
function WorldDataActivated(idText, sceneNameText, worldData) {
// Search for the Interactable
for (var i = 0, length = worldData.length; i < length; i++) {
// Verify if the Interactable is activated and return the result
if (worldData[i].id === idText && worldData[i].sceneName === sceneNameText && worldData[i].activated === true) {
return true;
}
}
// If not, return false
return false;
}
/**
* Verifies if the data in a specific section is true or false, or checks what values they have.
* @param {object} section Reference/pointer to the specific section of the whole hk-database
* @param {object} saveFile Reference/pointer to the whole Hollow Knight save file object (jsonObject)
*/
function CheckAdditionalThings(section, saveFile) {
var entries = section.entries;
var playerData = saveFile.playerData;
var sceneData = saveFile.sceneData;
var worldData = saveFile.sceneData.persistentBoolItems;
// Start main loop
for (var i in entries) {
var _ = 0,
amount = _.amount,
countTotal = _.countTotal,
total = _.total,
notActivated = _.notActivated,
activated = _.activated,
discoveredTotal = _.discoveredTotal;
switch (i) {
case "grubsCollected":
case "grubRewards":
case "charmsOwned":
case "dreamOrbs":
case "whisperingRoots":
case "fountainGeo":
case "nailDamage":
case "journalEntriesCompleted":
case "journalNotesCompleted":
case "whiteDefenderDefeats":
case "greyPrinceDefeats":
if (i === "whisperingRoots") {
amount = CountWorldItem("Dream Plant");
} else {
amount = playerData[i];
}
countTotal = amount;
entries[i].amount = amount;
if (i === "journalEntriesCompleted" || i === "journalNotesCompleted") {
countTotal = "".concat(amount, " / ").concat(playerData.journalEntriesTotal);
entries[i].amountTotal = playerData.journalEntriesTotal;
entries[i].spoiler = "".concat(entries[i].spoilerDefault, " (").concat(entries[i].max, " max)");
/* when Zote is dead, the max Journal entries will equal 4 less instead of 164. For the green tick */
if (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true) {
if (playerData.hasOwnProperty("killedGreyPrince")) {
entries[i].max -= 4; // Subtract GPZ and 3 Zotelings from max
}
entries[i].spoiler = "".concat(entries[i].spoilerDefault, " (").concat(entries[i].max, " max)"); /* Change spoiler for less confusion */
}
/* when Grimm Troupe is banished, max Journal entries will be 1 or 2 less */
if (playerData.hasOwnProperty("destroyedNightmareLantern") && playerData.destroyedNightmareLantern === true) {
entries[i].max--; // Subtract Nightmare King from max
/* if the player didn't defeat any Grimmkin Nightmare before banishing, subtract it from max */
if (playerData.killedFlameBearerLarge === false) {
entries[i].max--; // Subtract Grimmkin Nightmare from max
entries[i].spoiler = "".concat(entries[i].spoilerDefault, " (").concat(entries[i].max, " max)"); /* Change spoiler for less confusion */
}
}
}
if (i === "grubRewards") {
entries[i].amountTotal = playerData.grubsCollected;
}
if (i === "greyPrinceDefeats") {
// backwards compatibility with earlier game versions
if (playerData.hasOwnProperty(i) === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
break;
} else if (playerData.zoteDead === true || playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true) {
entries[i].disabled = true;
}
}
if (i === "whiteDefenderDefeats") {
// backwards compatibility with earlier game versions
if (playerData.hasOwnProperty(i) === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
break;
}
}
if (amount >= entries[i].max) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else if (amount > 0) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconPartial)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
}
break;
case "geoPool":
amount = Math.abs(playerData[i]);
entries[i].amount = amount;
if (amount > 0) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconPartial)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, i, "revealed");
}
break;
case "rancidEggs":
case "jinnEggsSold":
case "xunFlowerBrokeTimes":
case "soldTrinket1":
case "soldTrinket2":
case "soldTrinket3":
case "soldTrinket4":
case "ore":
case "simpleKeys":
amount = Math.abs(playerData[i]);
entries[i].amount = amount;
if (amount > 0) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, i, "revealed");
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
}
if (i === "jinnEggsSold") {
// fade out if not on Steel Soul
if (playerData.permadeathMode < 1) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, i, "revealed");
}
}
if (i === "xunFlowerBrokeTimes") {
if (amount < 1 && playerData.xunFlowerGiven === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, i, "revealed");
} else if (amount > 0) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, i, "revealed");
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
}
}
break;
case "tukDungEgg":
// fade out if on Steel Soul
if (playerData.permadeathMode > 0) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
continue;
}
playerData[i] === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "relicsSoldTotalGeo":
amount = 0;
for (var _i = 1; _i <= 4; _i++) {
amount += entries["soldTrinket".concat(_i)].amount * entries["soldTrinket".concat(_i)].geoValue;
}
entries[i].amount = amount;
if (amount > 0) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, i, "revealed");
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
}
break;
case "bankerBalance":
amount = playerData[i];
/* When value is negative, reset to zero */
if (amount < 0) {
amount = 0;
}
entries[i].amount = amount;
if (amount > 0 || playerData.bankerAccountPurchased === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, i, "revealed");
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
}
break;
case "millibelleLeft":
if (playerData.bankerTheft >= 1) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
break;
case "millibelleCheckedStand":
if (playerData.bankerTheft >= 2) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
break;
case "millibelleReclaimedAllGeo":
if (playerData.bankerTheft >= 1 && playerData.bankerBalance <= 0) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
break;
case "itemsDiscovered":
discoveredTotal = sceneData.persistentBoolItems.length;
notActivated = CountItems(discoveredTotal, "notActivated");
activated = CountItems(discoveredTotal, "active");
entries[i].discoveredTotal = discoveredTotal;
entries[i].notActivated = notActivated;
entries[i].activated = activated;
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, i, "revealed");
break;
case "shopkeeperKey":
playerData.hasSlykey === true || playerData.gaveSlykey === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "elegantKey":
playerData.hasWhiteKey === true || playerData.usedWhiteKey === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "loveKey":
playerData.hasLoveKey === true || playerData.openedLoveDoor === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "paleOreSeer":
// #2
playerData.dreamReward3 === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
/* -------------------- World Interactables ------------------------------- */
case "simpleKeyCityOfTears": // #2
case "simpleKeyAncientBasin": // #3
case "paleOreAncientBasin": // #1
case "paleOreCrystalPeak": // #3
case "paleOreDeepnest": // #4
case "paleOreGrubfather": // #5
case "paleOreColosseum": // #6
case "pantheonSoulWarrior":
case "shadeSoulWarrior":
case "pantheonCrystalGuardian":
case "pantheonEnragedGuardian":
case "mantisVillageFloorLever":
case "whiteLadyRoom":
case "throneRoomLoreTablet":
case "towerOfLoveSecretRoom":
case "weaversDenSecretRoom1":
case "weaversDenSecretRoom2":
case "cityCrest":
case "soulSanctumShortcut":
case "colosseumHiddenHotSpring":
FindWorldItem(entries[i].id, entries[i].sceneName) ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "pathOfPainEntrance":
/* Backwards compatibility with older save files (before Grimm Troupe) */
if (playerData.hasOwnProperty("destroyedNightmareLantern") === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
} else if (FindWorldItem(entries[i].id, entries[i].sceneName)) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
break;
case "paleLurkersRetreat":
/* Backwards compatibility with older save files (before Godmaster) */
if (playerData.hasOwnProperty("hasGodfinder") === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
} else if (FindWorldItem(entries[i].id, entries[i].sceneName)) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
break;
case "grimmTentSecretRoom":
/* Backwards compatibility with older save files */
if (playerData.hasOwnProperty("destroyedNightmareLantern") === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
} else if (FindWorldItem(entries[i].id, entries[i].sceneName)) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else {
/* When the Ritual has been completed or Grimm Troupe has been Banished, the secret is no longer possible to discover */
if (playerData.grimmChildLevel >= 4) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
}
break;
case "relicsWandererJournal":
case "relicsHallownestSeal":
case "relicsKingsIdol":
case "relicsArcaneEgg":
total = playerData[entries[i].nameHeld] + playerData[entries[i].nameSold];
if (total >= entries[i].max) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else if (total > 0) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconPartial)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
}
entries[i].amount = total;
break;
case "arcaneEggLifebloodCoreRoom":
FindWorldItem(entries[i].id, entries[i].sceneName) ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
break;
case "pantheonHallownest":
if (playerData.hasOwnProperty("bossDoorStateTier5") === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
} else {
playerData.bossDoorStateTier5.completed === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
break;
case "killsBindingSeal":
if (playerData.hasOwnProperty(i) === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
break;
}
playerData[i] == 0 ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "killsBigBuzzer":
playerData[i] == 0 ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "killedVoidIdol_1":
if (playerData.hasOwnProperty(i) === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
break;
}
playerData[i] === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
if (playerData[i] === false && (playerData.killedVoidIdol_2 === true || playerData.killedVoidIdol_3 === true)) (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
break;
case "killedVoidIdol_2":
if (playerData.hasOwnProperty(i) === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
break;
}
playerData[i] === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
if (playerData[i] === false && playerData.killedVoidIdol_3 === true) (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
break;
case "greyPrinceDefeated":
// compatibility with earlier game versions
if (playerData.hasOwnProperty(i) === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
break;
} else if (playerData.zoteDead === true || playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true) {
entries[i].disabled = true;
}
playerData[i] === true ? (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i) : (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
if (playerData.zoteRescuedBuzzer === true && playerData[i] === false) (0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
break;
case "zoteStatus":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
entries[i].name = entries[i].nameDefault;
entries[i].spoiler = entries[i].spoilerDefault;
if (playerData.zoteDead === true) {
entries[i].name = entries[i].nameNeglect;
entries[i].spoiler = entries[i].spoilerNeglect;
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else if (playerData.killedZote === true) {
entries[i].name = entries[i].nameRivalry;
entries[i].spoiler = entries[i].spoilerRivalry;
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else if (playerData.zoteRescuedBuzzer === false) {
if (playerData.hasWalljump === false) {
entries[i].name = entries[i].nameTrappedVengefly;
entries[i].spoiler = entries[i].spoilerTrappedVengefly;
} else if (playerData.hasWalljump === true) {
entries[i].name = entries[i].nameNotRescuedVengefly;
entries[i].spoiler = entries[i].spoilerNotRescuedVengefly;
}
} else if (playerData.zoteRescuedBuzzer === true) {
if (playerData.zoteRescuedDeepnest === false) {
entries[i].name = entries[i].nameTrappedDeepnest;
entries[i].spoiler = entries[i].spoilerTrappedDeepnest;
} else if (playerData.zoteRescuedDeepnest === true) {
if (playerData.killedZote === false) {
entries[i].name = entries[i].nameColosseum;
entries[i].spoiler = entries[i].spoilerColosseum;
}
}
}
break;
case "nailsmithStatus":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
entries[i].name = entries[i].nameDefault;
entries[i].spoiler = entries[i].spoilerDefault;
if (playerData.nailsmithKilled === true) {
entries[i].name = entries[i].namePurity;
entries[i].spoiler = entries[i].spoilerPurity;
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else if (playerData.nailsmithConvoArt === true) {
entries[i].name = entries[i].nameHappyCouple;
entries[i].spoiler = entries[i].spoilerHappyCouple;
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else if (playerData.nailsmithSpared === true) {
entries[i].name = entries[i].nameSheoHutWaiting;
entries[i].spoiler = entries[i].spoilerSheoHutWaiting;
} else {
entries[i].name = entries[i].nameUpgradeNail;
entries[i].spoiler = entries[i].spoilerUpgradeNail;
}
break;
case "mrMushroomState1":
case "mrMushroomState2":
case "mrMushroomState3":
case "mrMushroomState4":
case "mrMushroomState5":
case "mrMushroomState6":
case "mrMushroomState7":
CheckMrMushroomState(section, entries[i], playerData["mrMushroomState"]);
break;
case "openedTownBuilding":
case "openedCrossroads":
case "openedGreenpath":
case "openedRuins1":
case "openedRuins2":
case "openedFungalWastes":
case "openedRoyalGardens":
case "openedRestingGrounds":
case "openedDeepnest":
case "openedHiddenStation":
case "openedStagNest":
/* backwards compatibility with earlier game versions */
if (playerData.hasOwnProperty(i) === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
break;
} else if (playerData[i] === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
/* Create amount property before incrementing (avoids NaN) */
if (!entries.stagStationsOpened.hasOwnProperty("amount")) {
entries.stagStationsOpened.amount = 0;
}
/* increment the stag stations amount by one */
entries.stagStationsOpened.amount++;
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
break;
case "stagStationsOpened":
/* backwards compatibility check */
if (!playerData.hasOwnProperty("openedHiddenStation")) {
/* Subtract one from maximum for extended completion counting */
entries[i].max--;
}
if (entries[i].amount >= entries[i].max) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else if (entries[i].amount > 0) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconPartial)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
break;
case "mapCrossroads":
case "mapGreenpath":
case "mapFungalWastes":
case "mapCliffs":
case "mapCity":
case "mapMines":
case "mapWaterways":
case "mapRestingGrounds":
case "mapAbyss":
case "mapOutskirts":
case "mapFogCanyon":
case "mapRoyalGardens":
case "mapDeepnest":
if (playerData[i] === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
/* Create amount property before incrementing (avoids NaN) */
if (!entries.areaMaps.hasOwnProperty("amount")) {
entries.areaMaps.amount = 0;
}
/* increment the area maps amount by one */
entries.areaMaps.amount++;
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
break;
case "areaMaps":
if (entries[i].amount >= entries[i].max) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else if (entries[i].amount > 0) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconPartial)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
break;
/* Unobtainable Unbreakable Charms after Grimm Troupe Banishment */
case "fragileGreed_unbreakable":
case "fragileHealth_unbreakable":
case "fragileStrength_unbreakable":
/* backwards compatibility with earlier game versions */
if (playerData.hasOwnProperty(i) === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
} else if (playerData[i] === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else {
/* If player doesn't have an Unbreakable Charm, and they Banished the Grimm Troupe, the entry needs to be disabled */
if (playerData.hasOwnProperty("destroyedNightmareLantern") && playerData.destroyedNightmareLantern === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
}
break;
default:
// backwards compatibility with earlier game versions
if (playerData.hasOwnProperty(i) === false) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, i);
entries[i].disabled = true;
break;
} else if (playerData[i] === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, i);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, i);
}
} // end switch (i)
} // end for (let i in dataObject)
// ==========================================
// -------------- Methods ---------------- //
/**
* Verifies if the specific Interactable (Item, Boss, Chest etc.) is activated (completed). Returns true or false.
* @param {string} idText ID text of the Interactable (id in sceneData)
* @param {string} sceneNameText Map codename of the Interactable (sceneName in sceneData)
* @returns {boolean}
*/
function FindWorldItem() {
var idText = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var sceneNameText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
for (var _i2 = 0, length = worldData.length; _i2 < length; _i2++) {
if (worldData[_i2].id === idText && worldData[_i2].sceneName === sceneNameText && worldData[_i2].activated === true) {
return true;
}
}
return false;
}
/**
* Searches for a given item that the player has found and returns the amount of them that the player completed.
* @param {string} itemId Name of the item
* @returns {number}
*/
function CountWorldItem() {
var itemId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var total = 0;
for (var _i3 = 0, length = worldData.length; _i3 < length; _i3++) {
if (worldData[_i3].id === itemId) {
if (worldData[_i3].activated === true) total++;
}
}
return total;
}
/**
* Counts the total amount of Geo Rocks Unbroken or Broken. Logs to console all the Unbroken IDs and Map locations.
* @param {number} arrayLength How many items the Geo Rocks array is currently storing (for iteration)
* @param {string} mode Choose which Geo Rocks to count (broken or unbroken)
*/
/* function CountGeoRocks(arrayLength, mode = "unbroken") {
let countTotal = 0;
let geoRocksLog = [];
if (mode === "unbroken") {
for (let i = 0; i < arrayLength; i++) {
if (sceneData.geoRocks[i].hitsLeft > 0) {
countTotal++;
geoRocksLog.push(`#${countTotal} 🏔️ ${sceneData.geoRocks[i].id} 🗺️ ${TranslateMapName(sceneData.geoRocks[i].sceneName)} ⌨️ ${sceneData.geoRocks[i].sceneName}`);
}
}
if (!countTotal) {
console.log("%cAll Geo Rocks Broken!", "color: #16c60c; font-weight: 700;");
} else {
console.groupCollapsed(`%cUnbroken Geo Rocks (${countTotal}):`, "color: #16c60c; font-weight: 700;");
for (let i = 0, length = geoRocksLog.length; i < length; i++) {
console.log(geoRocksLog[i]);
}
console.groupEnd();
}
} else {
for (let i = 0; i < arrayLength; i++) {
if (sceneData.geoRocks[i].hitsLeft === 0) countTotal++;
}
}
return countTotal;
} */
/**
* Counts the amount of in-game Interactables Activated or Not Activated. Logs to console all the Not Activated IDs and Map locations.
* @param {number} arrayLength How many items the Interactables array is currently storing (for iteration)
* @param {string} mode Choose which Interactables to count (notActivated or activated)
*/
function CountItems(arrayLength) {
var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "notActivated";
var countTotal = 0;
var itemsLog = [];
if (mode === "notActivated") {
/*
let list = new ItemListBox(worldData);
*/
for (var _i4 = 0; _i4 < arrayLength; _i4++) {
if (worldData[_i4].activated === false && worldData[_i4].semiPersistent === false) {
countTotal++;
itemsLog.push("#".concat(countTotal, " ").concat(worldData[_i4].id, " \uD83D\uDDFA\uFE0F ").concat((0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.TranslateMapName)(worldData[_i4].sceneName), " \u2328\uFE0F ").concat(worldData[_i4].sceneName));
}
}
if (!countTotal) {
console.log("%cAll Interactables Activated!", "color: #16c60c; font-weight: 700;");
} else {
console.groupCollapsed("%cInteractables Not Activated (".concat(countTotal, "):"), "color: #16c60c; font-weight: 700;");
for (var _i5 = 0, length = itemsLog.length; _i5 < length; _i5++) {
console.log(itemsLog[_i5]);
}
console.groupEnd();
}
} else {
for (var _i6 = 0; _i6 < arrayLength; _i6++) {
if (worldData[_i6].activated === true) countTotal++;
}
}
return countTotal;
}
/**
* Compares and logs all unrescued Grubs in a list: IDs and map locations
*/
/* function LogMissingGrubs() {
let rescuedGrubsSceneList = [];
for (let i = 0, length = worldData.length; i < length; i++) {
if (worldData[i].id.includes("Grub Bottle")) {
if (worldData[i].activated === true) {
// There are 3 duplicates of the same map scene name from older game save files. Prevents adding duplicates
// if (worldData[i].sceneName === "Ruins2_11" && worldData[i].id === "Grub Bottle (1)") {
// continue;
// } else if (worldData[i].sceneName === "Ruins2_11" && worldData[i].id === "Grub Bottle (2)") {
// continue;
// } else {
rescuedGrubsSceneList.push(worldData[i].sceneName);
// }
}
}
}
// Filtering the reference database Grub list to include only the missing values
let missingGrubsList = section.grubsList.filter(x => !rescuedGrubsSceneList.includes(x));
let length = missingGrubsList.length;
if (!length) {
console.log("%cAll Grubs Rescued!", "color: #16c60c; font-weight: 700;");
} else {
console.groupCollapsed(`%cUnrescued Grubs (${length}):`, "color: #16c60c; font-weight: 700;");
for (let i = 0; i < length; i++) {
console.log(`#${section.grubsList.indexOf(missingGrubsList[i]) + 1} 🗺️ ${TranslateMapName(missingGrubsList[i])} ⌨️ ${missingGrubsList[i]}`);
}
console.groupEnd();
}
return false;
} */
} // end function CheckAdditionalThings()
/**
* Checks and fills all the 7 locations of Mr Mushroom.
* @param {object} section ID of the HTML element for data appending
* @param {object} entry object containing the Mr Mushroom name and spoilers/locations
* @param {number} mrMushroomState playerData.mrMushroomState read from the save file. (0-8)
*/
function CheckMrMushroomState(section, entry) {
var mrMushroomState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
if (mrMushroomState >= entry.state) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, "mrMushroomState".concat(entry.state - 1));
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, "mrMushroomState".concat(entry.state - 1));
}
}
/**
* Checks and marks all the Hunter's Journal creatures entries with amounts, partial completion etc.
* @param {object} db Reference to the HK database
* @param {object} playerData Reference to the player's save data
*/
function CheckHuntersJournal(db, sectionName, playerData) {
var section = db.sections[sectionName];
var entries = db.sections[sectionName].entries;
//let entriesStatistics = db.sections.statistics.entries; // Alba: disabled for future use
var name = "";
var nameDefault = "";
var amountKillsLeft = 0;
var journalPlayerList = playerData.EnemyJournalKillData.list;
var _loop2 = function _loop2(entry) {
var MonsterInfo = journalPlayerList.find(function (journalPlayerList) {
return journalPlayerList.Name === entries[entry].databaseName;
});
//recorded and founded and reached to the requirement
if (MonsterInfo !== undefined && MonsterInfo.Record.Kills >= entries[entry].killRequire) {
entries[entry].name = entries[entry].gameName;
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, entry);
}
// didnt reach the limit but at least kill him once.
else if (MonsterInfo !== undefined && MonsterInfo.Record.Kills >= 1) {
name = entries[entry].gameName + " (".concat(entries[entry].killRequire - MonsterInfo.Record.Kills, ")");
entries[entry].name = name;
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconPartialJournal)(section, entry);
} else {
name = entries[entry].gameName + " (".concat(entries[entry].killRequire, ")");
entries[entry].name = name;
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, entry);
}
};
for (var entry in entries) {
_loop2(entry);
}
}
function CheckPantheon(db, sectionName, playerData) {
var section = db.sections[sectionName];
var property = db.sections[sectionName].property;
var entries = db.sections[sectionName].entries;
for (var entry in entries) {
/* Backwards compatibility, disable and skip to next when not found */
if (!playerData.hasOwnProperty(property)) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, entry);
entries[entry].disabled = true;
continue;
}
if (playerData[property][entry] === true) {
switch (entry) {
case "boundNail":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, entry, "bindingNail");
break;
case "boundShell":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, entry, "bindingShell");
break;
case "boundCharms":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, entry, "bindingCharms");
break;
case "boundSoul":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, entry, "bindingSoul");
break;
case "allBindings":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, entry, "bindingAll");
break;
default:
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, entry);
}
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, entry);
}
}
}
function CheckHallOfGods(db, playerData) {
var section = db.sections.hallOfGods;
var entries = db.sections.hallOfGods.entries;
var id = "";
var check = "";
var isUnlocked = false;
for (var entry in entries) {
id = entries[entry].id;
/* Backwards compatibility, disable and skip to next when not found */
if (!playerData.hasOwnProperty("statueState".concat(id))) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, entry);
entries[entry].disabled = true;
continue;
}
check = entries[entry].check;
isUnlocked = playerData["statueState".concat(id)].isUnlocked;
switch (entry) {
case "GreyPrinceUnlocked":
case "GreyPrinceAttuned":
case "GreyPrinceAscended":
case "GreyPrinceRadiant":
/* When Zote OFF, disable entry and skip to next entry */
if (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(section, entry);
entries[entry].disabled = true;
continue;
}
}
if (playerData["statueState".concat(id)][check] === true) {
switch (check) {
case "isUnlocked":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(section, entry);
break;
case "completedTier1":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, entry, "attuned");
break;
case "completedTier2":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, entry, "ascended");
break;
case "completedTier3":
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, entry, "radiant");
break;
default:
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, entry, "partial");
break;
}
}
/* When boss is only unlocked, other entries get a gray icon (awaiting completion) */else if (isUnlocked) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIcon)(section, entry, "partial");
}
/* When not unlocked, every entry gets a red icon */else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(section, entry);
}
} /* end for (let entry in entries) */
}
/**
* Checks, validates and shows hints to the player depending on their save progression, in chronological order. Shows only hint for the last uncompleted event. If Hollow Knight is defeated, shows a dummy text.
* @param {object} section object containing div hints ID and h2 title
* @param {object} dataObject object containing all hints data
* @param {object} playerData object containing HK Player Data to look in
* @param {object} worldData object containing HK World Data to look in
* @returns {boolean} true when defeated Hollow Knight, false if not
*/
function CheckHintsTrue(section, dataObject, playerData, worldData) {
if (playerData.killedHollowKnight === true) {
// a text to show when player already finished their first playthrough (killed Hollow Knight first time)
section.current = "endOfHints";
return true;
}
for (var i in dataObject) {
if (i === "endOfHints") {
break;
} else if (playerData[i] === true) {
continue;
} else if (i === "fireballLevel") {
if (playerData[i] >= 1) {
continue;
} else {
section.current = i;
break;
}
} else if (i === "Crossroads_04") {
var GruzMotherDefeated = false;
for (var k = 0, length = worldData.length; k < length; k++) {
if (worldData[k].id === "Battle Scene" && worldData[k].sceneName === "Crossroads_04" && worldData[k].activated === true) {
GruzMotherDefeated = true;
break;
}
}
if (GruzMotherDefeated) {
continue; // next dataObject (i)
} else {
section.current = i;
break;
}
} else if (i === "dungDefenderOrHornet2") {
if (playerData.defeatedDungDefender === true) {
continue;
} else if (playerData.hornetOutskirtsDefeated === true) {
continue;
} else {
// if no Dung Defender or Hornet 2
section.current = i;
break;
}
} else if (i === "ismaTearOrShadeCloak") {
if (playerData.hasAcidArmour === true) {
continue;
} else if (playerData.hasKingsBrand === true) {
if (playerData.hasShadowDash === true) {
continue;
} else {
// if Kings Brand but no Shade Cloak
section.current = i;
break;
}
} else {
// if no Isma's Tear or Kings Brand
section.current = i;
break;
}
/*
After killing Hollow Knight:
- gather 1800 Essence (Essence sources)
- get Awoken Dream Nail from Seer
- use Awoken Dream Nail on the knight corpse in Ancient Basin/Palace Grounds (discover White Palace)
- acquire White Fragment from White Palace
- defeat Hornet 2
- get King's Brand
- open door to the Abyss
- light the lighthouse
- get Shade Cloak
- visit Queen's Gardens
- defeat Traitor Lord
- get White Fragment from White Lady
- equip Kingsoul and visit Birthplace
- get Void Heart
- go to Black Egg Temple, Dream Nail Hollow Knight and defeat Radiance (end of hints)
*/
} else {
// if anything from the hints list is not done
section.current = i;
break;
}
} // end: for (let i in dataObject)
} // function CheckHintsTrue()
/**
* Pre-Cleans HTML. Reads contents inside text area and parses it to a JavaScript object. If not empty, runs HKCheckCompletion() to check data.
*/
function HKReadTextArea() {
var textAreaId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
// start benchmark
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.HKReadTextArea.timeStart = performance.now();
var contents = document.getElementById(textAreaId).value;
if (contents.length) {
// starts the main HTML generating function GenerateInnerHTML() and ensures proper checkbox behaviour
InitializeHTMLPopulation(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"]);
try {
var jsonObject = JSON.parse(contents);
// console.log(jsonObject);
if (jsonObject.hasOwnProperty("playerData")) {
HKCheckCompletion(jsonObject);
}
// end benchmark and show results
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.HKReadTextArea.timeEnd = performance.now();
var result = _page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.HKReadTextArea.timeEnd - _page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.HKReadTextArea.timeStart;
console.info("HKReadTextArea() time (ms) = %c".concat(result.toFixed(2)), "color: #008cdc; font-weight: 700;");
} catch (error) {
_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"].saveAnalyzed = false;
alert("This seems like not a valid Hollow Knight save.\n".concat(error));
console.info("This seems like not a valid Hollow Knight save.\n".concat(error));
}
} else {
/* reset timer */
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.HKReadTextArea.timeStart = 0;
}
}
/**
* Populate all HTML with given ID and their initial data set as false (used at DOM load)
* @param {object} db JavaScript Object containing all HTML IDs to populate
*/
function InitializeHTMLPopulation(db) {
(0,_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.GenerateInnerHTML)(db);
// Check local storage first to set proper checkbox state before the below functions start (default is always unchecked)
if ((0,_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.StorageAvailable)('localStorage')) {
if (localStorage.getItem("hkCheckboxHints") === "checked") document.getElementById("checkbox-hints").checked = true;
if (localStorage.getItem("hkCheckboxSpoilers") === "checked") document.getElementById("checkbox-spoilers").checked = true;
}
// Prevents wrong checkbox behaviour (must run after everything is finished)
(0,_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.CheckboxHintsToggle)();
(0,_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.CheckboxSpoilersToggle)();
}
/**
* Reset the object state in memory to default values, like before first save analyzing. Undo all changes.
* @param {object} db database object reference
*/
function ResetCompletion(db) {
var sections = db.sections;
var entries = {};
db.saveAnalyzed = false;
/* Bring Extended Completion to default values (0) */
var gameCompletionExtended = db.sections.intro.entries.gameCompletionExtended;
var intro = db.sections.intro;
intro.extendedCompletionDone = 0;
intro.extendedCompletionTotal = 0;
gameCompletionExtended.spoiler = 0;
gameCompletionExtended.spoilerAfter = "";
for (var section in sections) {
entries = sections[section].entries;
if (sections[section].hasOwnProperty("percent")) sections[section].percent = 0;
if (sections[section].hasOwnProperty("midPercent")) sections[section].midPercent = 0;
switch (section) {
case "intro":
case "hints":
break;
default:
for (var entry in entries) {
if (entries[entry].hasOwnProperty("icon")) {
entries[entry].icon = "red";
}
if (entries[entry].hasOwnProperty("disabled")) {
entries[entry].disabled = false;
}
if (entries[entry].hasOwnProperty("amount")) {
entries[entry].amount = 0;
}
if (entries[entry].hasOwnProperty("amountTotal")) {
entries[entry].amountTotal = 0;
}
if (entries[entry].hasOwnProperty("max")) {
entries[entry].max = entries[entry].maxDefault;
}
}
}
}
}
/* -------------------------- Classes --------------------------------------------------------------------------------------- */
var DataChecker = /*#__PURE__*/function () {
/**
* Used for checking and verifying data (like Grubs, Items or Geo Rocks) inside a player's save file.
* Pass a save to the object and it will be split automatically to playerData, boolData and geoRocksData.
* @param {object} saveFile The whole player's save file, in JSON format
*/
function DataChecker(saveFile) {
_classCallCheck(this, DataChecker);
this.saveFile = saveFile;
this.playerData = saveFile.playerData;
this.boolData = saveFile.sceneData.persistentBoolItems;
this.geoRocksData = saveFile.sceneData.geoRocks;
}
/**
* Verifies if a specific Collectible is found in boolData and returns true/false.
* @param {string} id the Collectible's id in the database.
* @param {string} sceneName the Collectible's sceneName in the database.
* @returns {boolean}
*/
return _createClass(DataChecker, [{
key: "_FindItem",
value: function _FindItem() {
var entry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
for (var i = 0, length = this.boolData.length; i < length; i++) {
if (this.boolData[i].id === entry.id && this.boolData[i].sceneName === entry.sceneName && this.boolData[i].activated === true) {
return true;
}
}
return false;
} // end _FindItem
/**
* Verifies if a specific Geo Rock is destroyed and returns true/false.
* @param {string} id the Geo Rock's id in the database.
* @param {string} sceneName the Geo Rock's sceneName in the database.
* @returns {boolean}
*/
}, {
key: "_FindGeoRock",
value: function _FindGeoRock() {
var entry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
for (var i = 0, length = this.geoRocksData.length; i < length; i++) {
if (this.geoRocksData[i].id === entry.id && this.geoRocksData[i].sceneName === entry.sceneName && this.geoRocksData[i].hitsLeft === 0) {
return true;
}
}
return false;
} // end _FindGeoRock
/**
* Verifies the status of all items in a given section (e.g. Grubs or Whispering Roots) from the database.
* @param {object} section Provide a section object to check.
*/
}, {
key: "checkItems",
value: function checkItems(section) {
this.section = section;
this.entries = section.entries;
for (var entry in this.entries) {
switch (entry) {
// The Collector: Tower of Love Grubs activation Bug in the game - needs a workaround.
// All 3 Grubs in the Tower of Love must be treated as one.
case "grub33":
case "grub34":
if (this.entries.grub32.icon === "green") {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(this.section, entry);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(this.section, entry);
}
break;
// playerData activation checks true/false
case "hallownestSeal17": // The Seer's Essence Reward - Hallownest Seal
case "arcaneEgg2": // The Seer's Essence Reward - Arcane Egg
case "rancidEgg20":
// Sly's Rancid Egg shop item
if (this.playerData[this.entries[entry].id] === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(this.section, entry);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(this.section, entry);
}
break;
// Tuk's Rancid Egg - Normal or Steel Soul mode behaviour
case "rancidEgg21":
// Steel Soul
if (this.playerData.permadeathMode > 0) {
// id: "Shiny Item", sceneName: "Waterways_03"
if (this._FindItem(this.entries[entry])) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(this.section, entry);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(this.section, entry);
}
// Set Steel Soul text description
this.entries[entry].spoiler = this.entries[entry].spoilerSteelSoul;
}
// Normal Mode
else {
// playerData.tukDungEgg
if (this.playerData[this.entries[entry].idPlayerData] === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(this.section, entry);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(this.section, entry);
}
// Set Normal Mode text description
this.entries[entry].spoiler = this.entries[entry].spoilerNormal;
}
break;
// missable Arcane Egg in Lifeblood Core Room
case "arcaneEgg4":
if (this._FindItem(this.entries[entry])) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(this.section, entry);
}
// When got the Lifeblood Core charm, but didn't pick up the Arcane Egg
else if (this.playerData.gotCharm_9 === true) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconNone)(this.section, entry);
this.entries[entry].disabled = true;
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(this.section, entry);
}
break;
// boolData activation checks
default:
if (this._FindItem(this.entries[entry])) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(this.section, entry);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(this.section, entry);
}
}
}
} // end checkItems
/**
* Verifies the status of all Geo Rocks from the database.
* @param {object} section Provide a Geo Rocks section object to check.
*/
}, {
key: "checkGeoRocks",
value: function checkGeoRocks(section) {
this.section = section;
this.entries = section.entries;
for (var entry in this.entries) {
switch (entry) {
default:
if (this._FindGeoRock(this.entries[entry])) {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconGreen)(this.section, entry);
} else {
(0,_hk_functions_js__WEBPACK_IMPORTED_MODULE_2__.SetIconRed)(this.section, entry);
}
}
}
} // end checkGeoRocks
}]);
}(); // end class DataChecker
/* ----------------------- Event Listeners -------------------------- */
// Populate HTML at load (before img and css)
document.addEventListener("DOMContentLoaded", function () {
InitializeHTMLPopulation(_hk_database_js__WEBPACK_IMPORTED_MODULE_0__["default"]);
});
// Analyze Text button
document.getElementById("save-area-read").addEventListener("click", function () {
HKReadTextArea("save-area");
}, false);
/***/ }),
/***/ "./src/js/LoadSaveFile.js":
/*!********************************!*\
!*** ./src/js/LoadSaveFile.js ***!
\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ LoadSaveFile: () => (/* binding */ LoadSaveFile)
/* harmony export */ });
/* harmony import */ var _HKCheckCompletion_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./HKCheckCompletion.js */ "./src/js/HKCheckCompletion.js");
/* harmony import */ var _page_functions_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./page-functions.js */ "./src/js/page-functions.js");
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
/*
Parts of the code thanks to bloodorca https://github.com/bloodorca/hollow (base64.js, functions.js) with slight modifications.
The steps used there for decryption were taken from KayDeeTee https://github.com/KayDeeTee/Hollow-Knight-SaveManager
Without these two people the existence of this tool wouldn't be possible :)
*/
// ---------------- Constants ----------------- //
// AES JS for file decryption
var aesjs = __webpack_require__(/*! ./aes-js.js */ "./src/js/aes-js.js");
// For reading the text area after save decoding
var CSHARP_HEADER = [0, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0]; // 22 bytes
var BASE64_ARRAY = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".split("").map(function (c) {
return c.charCodeAt(0);
});
var BASE64_DECODE_TABLE = new Map(BASE64_ARRAY.map(function (ord, i) {
return [ord, i];
}));
var AES_KEY = new TextEncoder().encode('UKu52ePUBwetZ9wNX88o54dnfKRu0T1l'); // encodes a string to Uint8Array (prepare for AES JS)
var ECB_STREAM_CIPHER = new aesjs.ModeOfOperation.ecb(AES_KEY); // create a new AES stream cipher object using the encoded key
// ---------------- Variables ----------------- //
/* let benchLSFBegin, benchLSFEnd, benchTotal; */
// ---------------- Functions ----------------- //
/**
* Main input tag file function. Selects the first file, reads it as an Array Buffer, starts the processing of the file when loaded.
* Starts benchmarking.
* @param {FileList} input FileList object containing a list of File objects. The FileList behaves like an array, so you can check its length property to get the number of selected files.
*/
// eslint-disable-next-line no-unused-vars
function LoadSaveFile(input, time) {
var inputFileList = input.files;
// console.info("Input length: " + input.files.length)
// Cease further processing if user canceled the file input dialog
if (inputFileList.length < 1) return false;
// start benchmark
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.LoadSaveFile.timeStart = time;
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.Total.timeStart = time;
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.HKReadTextArea.timeStart = 0;
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.HKReadTextArea.timeEnd = 0;
// Prepares a File object from the first file of the input files for reading as an Array Buffer
var inputFileObject = inputFileList[0];
// Cleans the file list to avoid problems after subsequent use
// document.getElementById("save-area-file").value = "";
// 1. read file
// The ArrayBuffer object is used to represent a generic, fixed-length raw binary data buffer.
// It is an array of bytes, often referred to in other languages as a "byte array".
// new FileReader()
var inputReader = new FileReader();
// readAsArrayBuffer(file)
inputReader.readAsArrayBuffer(inputFileObject);
// addEventListener("load", function) - to decode the file when loaded
inputReader.addEventListener("load", ProcessFileObject);
}
/**
* Reads the File object as an Array Buffer and does all other operations (decoding, decryption, conversion to string, pasting to text area).
* Launches the HKReadTextArea() function automatically after pasting the string to text area
*/
function ProcessFileObject() {
var inputArrayBuffer = this.result;
var decodedString;
// 2. Decode file
try {
// Uint8Array(ArrayBuffer) uint8_t equivalent in C
inputArrayBuffer = new Uint8Array(inputArrayBuffer);
// ArrayBuffer.slice()
// The slice() method copies up to, but not including, the byte indicated by the end parameter.
inputArrayBuffer.slice();
// remove C# header and LengthPrefixedString header (ArrayBuffer)
inputArrayBuffer = RemoveHeaders(inputArrayBuffer);
// base64 Decoding (ArrayBuffer)
inputArrayBuffer = Base64Decode(inputArrayBuffer);
// AES decryption (ECB) removes pkcs7 padding (ArrayBuffer)
inputArrayBuffer = AESDecryption(inputArrayBuffer);
// Convert ArrayBuffer to string/text TextDecoder().decode(ArrayBuffer)
decodedString = new TextDecoder().decode(inputArrayBuffer);
// finish and show benchmark
/* benchLSFEnd = new Date(); */
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.LoadSaveFile.timeEnd = performance.now();
/* console.info("LoadSaveFile() time (ms) =", benchLSFEnd - benchLSFBegin); */
// 4. Analyze the decoded string immediately
try {
(0,_HKCheckCompletion_js__WEBPACK_IMPORTED_MODULE_0__.HKCheckCompletion)(JSON.parse(decodedString));
} catch (error) {
alert("This seems like not a valid Hollow Knight save. ".concat(error));
console.info("This seems like not a valid Hollow Knight save. ".concat(error));
}
// 5. Paste decoded string file to text area
_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
return _regenerator().w(function (_context) {
while (1) switch (_context.n) {
case 0:
document.getElementById("save-area").value = "";
_context.n = 1;
return decodedString;
case 1:
document.getElementById("save-area").value = _context.v;
case 2:
return _context.a(2);
}
}, _callee);
}))();
// finish total and show benchmark
_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes.Total.timeEnd = performance.now();
(0,_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.Benchmark)(_page_functions_js__WEBPACK_IMPORTED_MODULE_1__.benchmarkTimes);
/* console.info("Total time (ms) =", benchTotal - benchLSFBegin); */
// alert(`Decoded String: ${decodedString}`);
// alert(`Array Buffer: ${inputArrayBuffer}`);
} catch (error) {
alert("The file cannot be decoded. ".concat(error));
console.info("The file cannot be decoded. ".concat(error));
}
}
/**
* Removes C# header, LengthPrefixedString header and byte 11 at the end of the Uint8 Array Buffer
* @param {Uint8Array} buffer Uint8Array buffer for removing the header from
* @param {Uint8Array} csHeader Uint8Array for the C# header length calculation
* @returns {Uint8Array}
*/
function RemoveHeaders(buffer) {
var csHeader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : CSHARP_HEADER;
// Remove the fixed C# header and byte 11 at the end.
buffer = buffer.subarray(csHeader.length, buffer.length - 1);
// Remove LengthPrefixedString header
var lengthCount = 0;
for (var i = 0; i < 5; i++) {
lengthCount++;
if ((buffer[i] & 0x80) == 0) {
break;
}
}
return buffer.subarray(lengthCount);
}
/**
* Decodes an Array Buffer using a Base64 decode table
* @param {Uint8Array} buffer Uint8Array Buffer to decode
* @returns {Uint8Array}
*/
function Base64Decode(buffer) {
buffer = new Uint8Array(buffer).slice();
buffer = buffer.map(function (v) {
return BASE64_DECODE_TABLE.get(v);
});
// The indexOf() method returns the first index at which a given element can be found in the array, or -1 if it is not present.
var p = buffer.indexOf(64);
var end;
if (p != -1) {
end = p;
} else {
end = buffer.length;
}
buffer = buffer.subarray(0, end);
var output = new Uint8Array(3 * buffer.length / 4);
var continuous = Math.floor(buffer.length / 4) * 4;
for (var i = 0; i < continuous; i += 4) {
var k = 3 * i / 4;
output[k] = buffer[i] << 2 | buffer[i + 1] >> 4;
output[k + 1] = (buffer[i + 1] & 0x0F) << 4 | buffer[i + 2] >> 2;
output[k + 2] = (buffer[i + 2] & 0x03) << 6 | buffer[i + 3];
}
if (buffer[continuous] != undefined) {
var _k = 3 * continuous / 4;
output[_k] = buffer[continuous] << 2 | buffer[continuous + 1] >> 4;
if (buffer[continuous + 2] != undefined) {
output[_k + 1] = (buffer[continuous + 1] & 0x0F) << 4 | buffer[continuous + 2] >> 2;
}
}
return output;
}
/**
* Decrypt an Uint8Array Buffer using aesjs (ECB) and a predefined AES key + remove pkcs7 padding
* @param {Uint8Array} buffer Uint8Array buffer to decrypt
* @returns {Uint8Array}
*/
function AESDecryption(buffer) {
var cipherObject = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ECB_STREAM_CIPHER;
var output = cipherObject.decrypt(buffer);
return output.subarray(0, -output[output.length - 1]);
}
// Assign actions (functions) to launch when a specific element is used
document.getElementById("save-area-file").addEventListener("change", function (event) {
LoadSaveFile(event.target, performance.now());
});
document.getElementById("save-area-file").addEventListener("click", function (mouseEvent) {
mouseEvent.target.value = "";
});
/***/ }),
/***/ "./src/js/aes-js.js":
/*!**************************!*\
!*** ./src/js/aes-js.js ***!
\**************************/
/***/ (function(module) {
"use strict";
/* eslint-disable */
(function (root) {
function checkInt(value) {
return parseInt(value) === value;
}
function checkInts(arrayish) {
if (!checkInt(arrayish.length)) {
return false;
}
for (var i = 0; i < arrayish.length; i++) {
if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {
return false;
}
}
return true;
}
function coerceArray(arg, copy) {
// ArrayBuffer view
if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') {
if (copy) {
if (arg.slice) {
arg = arg.slice();
} else {
arg = Array.prototype.slice.call(arg);
}
}
return arg;
}
// It's an array; check it is a valid representation of a byte
if (Array.isArray(arg)) {
if (!checkInts(arg)) {
throw new Error('Array contains invalid value: ' + arg);
}
return new Uint8Array(arg);
}
// Something else, but behaves like an array (maybe a Buffer? Arguments?)
if (checkInt(arg.length) && checkInts(arg)) {
return new Uint8Array(arg);
}
throw new Error('unsupported array-like object');
}
function createArray(length) {
return new Uint8Array(length);
}
function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {
if (sourceStart != null || sourceEnd != null) {
if (sourceArray.slice) {
sourceArray = sourceArray.slice(sourceStart, sourceEnd);
} else {
sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);
}
}
targetArray.set(sourceArray, targetStart);
}
var convertUtf8 = function () {
function toBytes(text) {
var result = [],
i = 0;
text = encodeURI(text);
while (i < text.length) {
var c = text.charCodeAt(i++);
// if it is a % sign, encode the following 2 bytes as a hex value
if (c === 37) {
result.push(parseInt(text.substr(i, 2), 16));
i += 2;
// otherwise, just the actual byte
} else {
result.push(c);
}
}
return coerceArray(result);
}
function fromBytes(bytes) {
var result = [],
i = 0;
while (i < bytes.length) {
var c = bytes[i];
if (c < 128) {
result.push(String.fromCharCode(c));
i++;
} else if (c > 191 && c < 224) {
result.push(String.fromCharCode((c & 0x1f) << 6 | bytes[i + 1] & 0x3f));
i += 2;
} else {
result.push(String.fromCharCode((c & 0x0f) << 12 | (bytes[i + 1] & 0x3f) << 6 | bytes[i + 2] & 0x3f));
i += 3;
}
}
return result.join('');
}
return {
toBytes: toBytes,
fromBytes: fromBytes
};
}();
var convertHex = function () {
function toBytes(text) {
var result = [];
for (var i = 0; i < text.length; i += 2) {
result.push(parseInt(text.substr(i, 2), 16));
}
return result;
}
// http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html
var Hex = '0123456789abcdef';
function fromBytes(bytes) {
var result = [];
for (var i = 0; i < bytes.length; i++) {
var v = bytes[i];
result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);
}
return result.join('');
}
return {
toBytes: toBytes,
fromBytes: fromBytes
};
}();
// Number of rounds by keysize
var numberOfRounds = {
16: 10,
24: 12,
32: 14
};
// Round constant words
var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];
// S-box and Inverse S-box (S is for Substitution)
var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];
var Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];
// Transformations for encryption
var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];
var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];
var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];
var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];
// Transformations for decryption
var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];
var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];
var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];
var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];
// Transformations for decryption key expansion
var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];
var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];
var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];
var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];
function convertToInt32(bytes) {
var result = [];
for (var i = 0; i < bytes.length; i += 4) {
result.push(bytes[i] << 24 | bytes[i + 1] << 16 | bytes[i + 2] << 8 | bytes[i + 3]);
}
return result;
}
var _AES = function AES(key) {
if (!(this instanceof _AES)) {
throw Error('AES must be instanitated with `new`');
}
Object.defineProperty(this, 'key', {
value: coerceArray(key, true)
});
this._prepare();
};
_AES.prototype._prepare = function () {
var rounds = numberOfRounds[this.key.length];
if (rounds == null) {
throw new Error('invalid key size (must be 16, 24 or 32 bytes)');
}
// encryption round keys
this._Ke = [];
// decryption round keys
this._Kd = [];
for (var i = 0; i <= rounds; i++) {
this._Ke.push([0, 0, 0, 0]);
this._Kd.push([0, 0, 0, 0]);
}
var roundKeyCount = (rounds + 1) * 4;
var KC = this.key.length / 4;
// convert the key into ints
var tk = convertToInt32(this.key);
// copy values into round key arrays
var index;
for (var i = 0; i < KC; i++) {
index = i >> 2;
this._Ke[index][i % 4] = tk[i];
this._Kd[rounds - index][i % 4] = tk[i];
}
// key expansion (fips-197 section 5.2)
var rconpointer = 0;
var t = KC,
tt;
while (t < roundKeyCount) {
tt = tk[KC - 1];
tk[0] ^= S[tt >> 16 & 0xFF] << 24 ^ S[tt >> 8 & 0xFF] << 16 ^ S[tt & 0xFF] << 8 ^ S[tt >> 24 & 0xFF] ^ rcon[rconpointer] << 24;
rconpointer += 1;
// key expansion (for non-256 bit)
if (KC != 8) {
for (var i = 1; i < KC; i++) {
tk[i] ^= tk[i - 1];
}
// key expansion for 256-bit keys is "slightly different" (fips-197)
} else {
for (var i = 1; i < KC / 2; i++) {
tk[i] ^= tk[i - 1];
}
tt = tk[KC / 2 - 1];
tk[KC / 2] ^= S[tt & 0xFF] ^ S[tt >> 8 & 0xFF] << 8 ^ S[tt >> 16 & 0xFF] << 16 ^ S[tt >> 24 & 0xFF] << 24;
for (var i = KC / 2 + 1; i < KC; i++) {
tk[i] ^= tk[i - 1];
}
}
// copy values into round key arrays
var i = 0,
r,
c;
while (i < KC && t < roundKeyCount) {
r = t >> 2;
c = t % 4;
this._Ke[r][c] = tk[i];
this._Kd[rounds - r][c] = tk[i++];
t++;
}
}
// inverse-cipher-ify the decryption round key (fips-197 section 5.3)
for (var r = 1; r < rounds; r++) {
for (var c = 0; c < 4; c++) {
tt = this._Kd[r][c];
this._Kd[r][c] = U1[tt >> 24 & 0xFF] ^ U2[tt >> 16 & 0xFF] ^ U3[tt >> 8 & 0xFF] ^ U4[tt & 0xFF];
}
}
};
_AES.prototype.encrypt = function (plaintext) {
if (plaintext.length != 16) {
throw new Error('invalid plaintext size (must be 16 bytes)');
}
var rounds = this._Ke.length - 1;
var a = [0, 0, 0, 0];
// convert plaintext to (ints ^ key)
var t = convertToInt32(plaintext);
for (var i = 0; i < 4; i++) {
t[i] ^= this._Ke[0][i];
}
// apply round transforms
for (var r = 1; r < rounds; r++) {
for (var i = 0; i < 4; i++) {
a[i] = T1[t[i] >> 24 & 0xff] ^ T2[t[(i + 1) % 4] >> 16 & 0xff] ^ T3[t[(i + 2) % 4] >> 8 & 0xff] ^ T4[t[(i + 3) % 4] & 0xff] ^ this._Ke[r][i];
}
t = a.slice();
}
// the last round is special
var result = createArray(16),
tt;
for (var i = 0; i < 4; i++) {
tt = this._Ke[rounds][i];
result[4 * i] = (S[t[i] >> 24 & 0xff] ^ tt >> 24) & 0xff;
result[4 * i + 1] = (S[t[(i + 1) % 4] >> 16 & 0xff] ^ tt >> 16) & 0xff;
result[4 * i + 2] = (S[t[(i + 2) % 4] >> 8 & 0xff] ^ tt >> 8) & 0xff;
result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff;
}
return result;
};
_AES.prototype.decrypt = function (ciphertext) {
if (ciphertext.length != 16) {
throw new Error('invalid ciphertext size (must be 16 bytes)');
}
var rounds = this._Kd.length - 1;
var a = [0, 0, 0, 0];
// convert plaintext to (ints ^ key)
var t = convertToInt32(ciphertext);
for (var i = 0; i < 4; i++) {
t[i] ^= this._Kd[0][i];
}
// apply round transforms
for (var r = 1; r < rounds; r++) {
for (var i = 0; i < 4; i++) {
a[i] = T5[t[i] >> 24 & 0xff] ^ T6[t[(i + 3) % 4] >> 16 & 0xff] ^ T7[t[(i + 2) % 4] >> 8 & 0xff] ^ T8[t[(i + 1) % 4] & 0xff] ^ this._Kd[r][i];
}
t = a.slice();
}
// the last round is special
var result = createArray(16),
tt;
for (var i = 0; i < 4; i++) {
tt = this._Kd[rounds][i];
result[4 * i] = (Si[t[i] >> 24 & 0xff] ^ tt >> 24) & 0xff;
result[4 * i + 1] = (Si[t[(i + 3) % 4] >> 16 & 0xff] ^ tt >> 16) & 0xff;
result[4 * i + 2] = (Si[t[(i + 2) % 4] >> 8 & 0xff] ^ tt >> 8) & 0xff;
result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff;
}
return result;
};
/**
* Mode Of Operation - Electonic Codebook (ECB)
*/
var _ModeOfOperationECB = function ModeOfOperationECB(key) {
if (!(this instanceof _ModeOfOperationECB)) {
throw Error('AES must be instanitated with `new`');
}
this.description = "Electronic Code Block";
this.name = "ecb";
this._aes = new _AES(key);
};
_ModeOfOperationECB.prototype.encrypt = function (plaintext) {
plaintext = coerceArray(plaintext);
if (plaintext.length % 16 !== 0) {
throw new Error('invalid plaintext size (must be multiple of 16 bytes)');
}
var ciphertext = createArray(plaintext.length);
var block = createArray(16);
for (var i = 0; i < plaintext.length; i += 16) {
copyArray(plaintext, block, 0, i, i + 16);
block = this._aes.encrypt(block);
copyArray(block, ciphertext, i);
}
return ciphertext;
};
_ModeOfOperationECB.prototype.decrypt = function (ciphertext) {
ciphertext = coerceArray(ciphertext);
if (ciphertext.length % 16 !== 0) {
throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');
}
var plaintext = createArray(ciphertext.length);
var block = createArray(16);
for (var i = 0; i < ciphertext.length; i += 16) {
copyArray(ciphertext, block, 0, i, i + 16);
block = this._aes.decrypt(block);
copyArray(block, plaintext, i);
}
return plaintext;
};
/**
* Mode Of Operation - Cipher Block Chaining (CBC)
*/
var _ModeOfOperationCBC = function ModeOfOperationCBC(key, iv) {
if (!(this instanceof _ModeOfOperationCBC)) {
throw Error('AES must be instanitated with `new`');
}
this.description = "Cipher Block Chaining";
this.name = "cbc";
if (!iv) {
iv = createArray(16);
} else if (iv.length != 16) {
throw new Error('invalid initialation vector size (must be 16 bytes)');
}
this._lastCipherblock = coerceArray(iv, true);
this._aes = new _AES(key);
};
_ModeOfOperationCBC.prototype.encrypt = function (plaintext) {
plaintext = coerceArray(plaintext);
if (plaintext.length % 16 !== 0) {
throw new Error('invalid plaintext size (must be multiple of 16 bytes)');
}
var ciphertext = createArray(plaintext.length);
var block = createArray(16);
for (var i = 0; i < plaintext.length; i += 16) {
copyArray(plaintext, block, 0, i, i + 16);
for (var j = 0; j < 16; j++) {
block[j] ^= this._lastCipherblock[j];
}
this._lastCipherblock = this._aes.encrypt(block);
copyArray(this._lastCipherblock, ciphertext, i);
}
return ciphertext;
};
_ModeOfOperationCBC.prototype.decrypt = function (ciphertext) {
ciphertext = coerceArray(ciphertext);
if (ciphertext.length % 16 !== 0) {
throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');
}
var plaintext = createArray(ciphertext.length);
var block = createArray(16);
for (var i = 0; i < ciphertext.length; i += 16) {
copyArray(ciphertext, block, 0, i, i + 16);
block = this._aes.decrypt(block);
for (var j = 0; j < 16; j++) {
plaintext[i + j] = block[j] ^ this._lastCipherblock[j];
}
copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);
}
return plaintext;
};
/**
* Mode Of Operation - Cipher Feedback (CFB)
*/
var _ModeOfOperationCFB = function ModeOfOperationCFB(key, iv, segmentSize) {
if (!(this instanceof _ModeOfOperationCFB)) {
throw Error('AES must be instanitated with `new`');
}
this.description = "Cipher Feedback";
this.name = "cfb";
if (!iv) {
iv = createArray(16);
} else if (iv.length != 16) {
throw new Error('invalid initialation vector size (must be 16 size)');
}
if (!segmentSize) {
segmentSize = 1;
}
this.segmentSize = segmentSize;
this._shiftRegister = coerceArray(iv, true);
this._aes = new _AES(key);
};
_ModeOfOperationCFB.prototype.encrypt = function (plaintext) {
if (plaintext.length % this.segmentSize != 0) {
throw new Error('invalid plaintext size (must be segmentSize bytes)');
}
var encrypted = coerceArray(plaintext, true);
var xorSegment;
for (var i = 0; i < encrypted.length; i += this.segmentSize) {
xorSegment = this._aes.encrypt(this._shiftRegister);
for (var j = 0; j < this.segmentSize; j++) {
encrypted[i + j] ^= xorSegment[j];
}
// Shift the register
copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);
}
return encrypted;
};
_ModeOfOperationCFB.prototype.decrypt = function (ciphertext) {
if (ciphertext.length % this.segmentSize != 0) {
throw new Error('invalid ciphertext size (must be segmentSize bytes)');
}
var plaintext = coerceArray(ciphertext, true);
var xorSegment;
for (var i = 0; i < plaintext.length; i += this.segmentSize) {
xorSegment = this._aes.encrypt(this._shiftRegister);
for (var j = 0; j < this.segmentSize; j++) {
plaintext[i + j] ^= xorSegment[j];
}
// Shift the register
copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);
}
return plaintext;
};
/**
* Mode Of Operation - Output Feedback (OFB)
*/
var _ModeOfOperationOFB = function ModeOfOperationOFB(key, iv) {
if (!(this instanceof _ModeOfOperationOFB)) {
throw Error('AES must be instanitated with `new`');
}
this.description = "Output Feedback";
this.name = "ofb";
if (!iv) {
iv = createArray(16);
} else if (iv.length != 16) {
throw new Error('invalid initialation vector size (must be 16 bytes)');
}
this._lastPrecipher = coerceArray(iv, true);
this._lastPrecipherIndex = 16;
this._aes = new _AES(key);
};
_ModeOfOperationOFB.prototype.encrypt = function (plaintext) {
var encrypted = coerceArray(plaintext, true);
for (var i = 0; i < encrypted.length; i++) {
if (this._lastPrecipherIndex === 16) {
this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);
this._lastPrecipherIndex = 0;
}
encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];
}
return encrypted;
};
// Decryption is symetric
_ModeOfOperationOFB.prototype.decrypt = _ModeOfOperationOFB.prototype.encrypt;
/**
* Counter object for CTR common mode of operation
*/
var _Counter = function Counter(initialValue) {
if (!(this instanceof _Counter)) {
throw Error('Counter must be instanitated with `new`');
}
// We allow 0, but anything false-ish uses the default 1
if (initialValue !== 0 && !initialValue) {
initialValue = 1;
}
if (typeof initialValue === 'number') {
this._counter = createArray(16);
this.setValue(initialValue);
} else {
this.setBytes(initialValue);
}
};
_Counter.prototype.setValue = function (value) {
if (typeof value !== 'number' || parseInt(value) != value) {
throw new Error('invalid counter value (must be an integer)');
}
for (var index = 15; index >= 0; --index) {
this._counter[index] = value % 256;
value = value >> 8;
}
};
_Counter.prototype.setBytes = function (bytes) {
bytes = coerceArray(bytes, true);
if (bytes.length != 16) {
throw new Error('invalid counter bytes size (must be 16 bytes)');
}
this._counter = bytes;
};
_Counter.prototype.increment = function () {
for (var i = 15; i >= 0; i--) {
if (this._counter[i] === 255) {
this._counter[i] = 0;
} else {
this._counter[i]++;
break;
}
}
};
/**
* Mode Of Operation - Counter (CTR)
*/
var _ModeOfOperationCTR = function ModeOfOperationCTR(key, counter) {
if (!(this instanceof _ModeOfOperationCTR)) {
throw Error('AES must be instanitated with `new`');
}
this.description = "Counter";
this.name = "ctr";
if (!(counter instanceof _Counter)) {
counter = new _Counter(counter);
}
this._counter = counter;
this._remainingCounter = null;
this._remainingCounterIndex = 16;
this._aes = new _AES(key);
};
_ModeOfOperationCTR.prototype.encrypt = function (plaintext) {
var encrypted = coerceArray(plaintext, true);
for (var i = 0; i < encrypted.length; i++) {
if (this._remainingCounterIndex === 16) {
this._remainingCounter = this._aes.encrypt(this._counter._counter);
this._remainingCounterIndex = 0;
this._counter.increment();
}
encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];
}
return encrypted;
};
// Decryption is symetric
_ModeOfOperationCTR.prototype.decrypt = _ModeOfOperationCTR.prototype.encrypt;
///////////////////////
// Padding
// See:https://tools.ietf.org/html/rfc2315
function pkcs7pad(data) {
data = coerceArray(data, true);
var padder = 16 - data.length % 16;
var result = createArray(data.length + padder);
copyArray(data, result);
for (var i = data.length; i < result.length; i++) {
result[i] = padder;
}
return result;
}
function pkcs7strip(data) {
data = coerceArray(data, true);
if (data.length < 16) {
throw new Error('PKCS#7 invalid length');
}
var padder = data[data.length - 1];
if (padder > 16) {
throw new Error('PKCS#7 padding byte out of range');
}
var length = data.length - padder;
for (var i = 0; i < padder; i++) {
if (data[length + i] !== padder) {
throw new Error('PKCS#7 invalid padding byte');
}
}
var result = createArray(length);
copyArray(data, result, 0, 0, length);
return result;
}
///////////////////////
// Exporting
// The block cipher
var aesjs = {
AES: _AES,
Counter: _Counter,
ModeOfOperation: {
ecb: _ModeOfOperationECB,
cbc: _ModeOfOperationCBC,
cfb: _ModeOfOperationCFB,
ofb: _ModeOfOperationOFB,
ctr: _ModeOfOperationCTR
},
utils: {
hex: convertHex,
utf8: convertUtf8
},
padding: {
pkcs7: {
pad: pkcs7pad,
strip: pkcs7strip
}
},
_arrayTest: {
coerceArray: coerceArray,
createArray: createArray,
copyArray: copyArray
}
};
// node.js
if (true) {
module.exports = aesjs;
// RequireJS/AMD
// http://www.requirejs.org/docs/api.html
// https://github.com/amdjs/amdjs-api/wiki/AMD
} else // removed by dead control flow
{}
})(this);
/***/ }),
/***/ "./src/js/hk-database.js":
/*!*******************************!*\
!*** ./src/js/hk-database.js ***!
\*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
// ---------------- Hollow Knight Data Constant Objects ----------------- //
/*
This is the whole database for the tool, based on the .json save file data
*/
var HK = {
saveAnalyzed: false,
sections: {
/* ################ Intro ################### */
intro: {
h2: "Game Status",
id: "hk-intro",
percent: 0,
maxPercent: 100,
maxPercentDefault: 100,
maxPercentBaseGame: 100,
/*percent: 0,
maxPercent: 112,
maxPercentDefault: 112,
maxPercentBaseGame: 100,
maxPercentGrimmTroupe: 106,
maxPercentLifeblood: 107,*/
extendedCompletionDone: 0,
extendedCompletionTotal: 0,
entries: {
timePlayed: {
id: "timePlayed",
icon: "clock",
name: "Time Played:",
spoiler: "0 h 00 min 00 sec",
timeH: 0,
timeM: 0,
timeS: 0
},
gameCompletion: {
id: "gameCompletion",
icon: "red",
name: "Game Completion:",
spoiler: 0,
spoilerAfter: "(out of 100 %)",
spoilerAfterDefault: "(out of 100 %)",
spoilerAfterBaseGame: "(out of 100 %)"
/*spoilerAfter: "(out of 112 %)",
spoilerAfterDefault: "(out of 112 %)",
spoilerAfterBaseGame: "(out of 100 %)",
spoilerAfterGrimmTroupe: "(out of 106 %)",
spoilerAfterLifeblood: "(out of 107 %)",*/
},
gameCompletionExtended: {
id: "gameCompletionExtended",
icon: "red",
name: "True Completion:",
spoiler: 0,
spoilerAfter: " / 0 = 0.00 %",
spoilerAfterDefault: " / 0 = 0.00 %"
},
saveVersion: {
id: "saveVersion",
icon: "none",
name: "Save Version:",
spoiler: "0.0.0.0"
},
health: {
id: "health",
icon: "none",
name: "Health:",
spoiler: "",
amountTotal: 5,
permadeathMode: false
},
silk: {
id: "silk",
icon: "none",
name: "Silk:",
spoiler: "",
amountTotal: 5
},
crests: {
id: "crests",
icon: "none",
name: "Crests:",
spoiler: "",
amountTotal: 1,
hunter: true,
reaper: false,
wanderer: false,
beast: false,
witch: false,
toolmaster: false,
shaman: false
/*amountFilled: 0,
amountUnused: 3,
amountOvercharmed: 0*/
},
rosaries: {
id: "rosaries",
icon: "none",
name: "Rosaries:",
spoiler: "",
amount: 0,
amountShade: 0,
amountTotal: 0
},
shellShards: {
id: "shellShards",
icon: "none",
name: "Shell Shards:",
spoiler: "",
amount: 0
}
}
},
/* ################ Hints ################### */
hints: {
h2: "Elderbug once told me...",
id: "hk-hints",
current: "fireballLevel",
entries: {
fireballLevel: {
spoiler: "A mysterious shaman is living in a dwelling, somewhere below the town of Dirtmouth."
},
hornet1Defeated: {
spoiler: "A skilled protector is guarding old ruins in a lush green forest."
},
hasDash: {
spoiler: "An old cloak is lying on a green path near a broken shell."
},
hasWalljump: {
spoiler: "A sharp claw is lying forgotten, somewhere amidst the insect village."
},
Crossroads_04: {
spoiler: "A mother is sleeping peacefully, somewhere below the town of Dirtmouth."
},
slyRescued: {
spoiler: "Our fellow town bug seems to be lost, somewhere in the crossroads."
},
hasLantern: {
spoiler: "Did you know? A bright little crystal companion is able to light a way through the thickest dark places."
},
hasSuperDash: {
spoiler: "There is some powerful crystal beating somewhere deep inside the mines."
},
hasDreamNail: {
spoiler: "A weapon from a dream world can only be found, where the souls can peacefully rest."
},
/*
Either:
- used the elevator in Resting Grounds to City of Tears
- opened the Fungal Wastes city gate
*/
killedInfectedKnight: {
spoiler: "A shattered corpse forgotten in a windy cave is lying somewhere in the ancient depths below the rainy city."
},
hasDoubleJump: {
spoiler: "Something incredibly light was dropped by a monarchfly in the ancient depths below the rainy city."
},
dungDefenderOrHornet2: {
spoiler: "There are two skilled combatants. One is living at the heart of the sewers. One is watching over a shell amidst ash falling from the sky."
},
ismaTearOrShadeCloak: {
spoiler: "There are two precious items. One in a grove accessed from the waterways. One guarded by a massive royal door behind the darkness."
},
defeatedMegaJelly: {
spoiler: "An intelligent being is floating inside hidden archives, behind the fog."
},
monomonDefeated: {
spoiler: "A dreamer is sleeping somewhere, hidden in a foggy area."
},
hegemolDefeated: {
spoiler: "A dreamer is sleeping near a spider nest area."
},
killedBlackKnight: {
spoiler: "Discarded shells of black guards can be seen lying on the floor of a high spire."
},
lurienDefeated: {
spoiler: "A dreamer is sleeping somewhere, at the top of a high spire."
},
killedHollowKnight: {
spoiler: "He heard a disturbance from inside a black temple. Maybe it's worth investigating."
},
endOfHints: {
spoiler: "The Knight still explores the world of Hallownest patiently, in constant search of its remaining secrets. [this is the end of the hint system (for the moment). The rest is up to you]"
}
}
},
/* ################ Crests ################### */
crests: {
h2: "Crests",
id: "hk-crests",
description: "special implements help you to progress in the game. Each new Crest learned provides 1% Game Completion.",
percent: 0,
maxPercent: 6,
entries: {
completedMemory_reaper: {
name: "Reaper",
spoiler: "Greymoor, west",
wiki: "Reaper"
},
completedMemory_wanderer: {
name: "Wanderer",
spoiler: "Moss Grotto, Bonegrave",
wiki: "Wanderer"
},
completedMemory_beast: {
name: "Beast",
spoiler: "Hunter's March, defeat Savage Beastfly boss",
wiki: "Beast"
},
completedMemory_witch: {
name: "Witch",
spoiler: "Greymoor, complete Twisted Bud and Infestation Operation Wishs",
wiki: "Witch"
},
completedMemory_toolmaster: {
name: "Architect",
spoiler: "Underworks, (must have 30 tools to buy architect key from Twelfth architect) ",
wiki: "Architect"
},
completedMemory_shaman: {
name: "Shaman",
spoiler: "Moss Grotto, Ruined Chapel, Act 3",
wiki: "Shaman"
}
}
},
/* ################ Needle Upgrades ################### */
NeedleUpgrades: {
h2: "Needle Upgrades",
id: "hk-Needleupgrades",
description: "Upgrades to the Hornet's main weapon damage. Each upgrade provides 1% Game Completion.",
percent: 0,
maxPercent: 4,
entries: {
startingNeedle: {
name: "#0 Starting Needle",
spoiler: "Starting Weapon",
wiki: "Needle"
},
sharpenedNeedle: {
name: "#1 Sharpened Needle",
spoiler: "Pinmaster Plinney on Bellhart for free",
wiki: "Pinmaster+Plinney"
},
shiningNeedle: {
name: "#2 Shining Needle",
spoiler: "find missing pale oil",
wiki: "Pale+Oil"
},
hivesteelNeedle: {
name: "#3 Hivesteel Needle",
spoiler: "find missing pale oil",
wiki: "Pale+Oil"
},
paleSteelNeedle: {
name: "#4 Pale Steel Needle",
spoiler: "find missing pale oil",
wiki: "Pale+Oil"
}
}
},
/* ################ Silk Heart ################### */
silkHeart: {
h2: "Silk Heart",
id: "hk-silkHeart",
description: "Item that grant Hornet automatic Silk regeneration.. \n Each new Silk Heart learned provides 1% Game Completion.",
percent: 0,
maxPercent: 3,
entries: {
Memory_Silk_Heart_BellBeast: {
name: "#1 Silk Heart",
spoiler: "The Marrow, Defeating the Bell Beast",
wiki: "Silk+Heart"
},
Memory_Silk_Heart_WardBoss: {
name: "#2 Silk Heart",
spoiler: "Whiteward, Defeating The Unravelled, requires Surgeon's Key",
wiki: "Silk+Heart"
},
Memory_Silk_Heart_LaceTower: {
name: "#3 Silk Heart",
spoiler: "The Cradle, Defeating Lace for the second time",
wiki: "Silk+Heart"
}
}
},
/* #################### Red Tools ################### */
redTools: {
h2: "Red Tools",
id: "hk-redTools",
description: "Active tools that are almost always limited-use consumables. \n Each Tool found in the game provides 1% Game Completion.",
/*description: `Each Charm found in the game provides 1% Game Completion.
Note: 4 new Charms were added to the game in patch version 1.2.1.0. They are part of the Grimm Troupe Content Pack section below.`,*/
percent: 0,
maxPercent: 18,
// reference: https://radiance.host/apidocs/Charms.html
entries: {
straightPin: {
id: "Straight Pin",
name: "#1 Straight Pin",
spoiler: "The Marrow, inside of Grindle's cell",
wiki: "Straight+Pin"
},
triPin: {
id: "Tri Pin",
name: "#2 Threefold Pin",
spoiler: "Greymoor, above Craw Lake, hidden cave",
wiki: "Threefold+Pin"
},
stingShard: {
id: "Sting Shard",
name: "#3 Sting Shard",
spoiler: "Forge Daughter: 140 Rosaries and 1 Craftmetal",
wiki: "Sting+Shard"
},
Tack: {
id: "Tack",
name: "#4 Tacks",
spoiler: "complete the Roach Guts Wish",
wiki: "Tacks"
},
harpoon: {
id: "Harpoon",
name: "#5 Longpin",
spoiler: "Shellwood, main Bellhart entrance, behind Wood Wasp",
wiki: "Longpin"
},
curveClaws: {
id: "Curve Claws",
name: "#6 Curveclaw",
spoiler: "Skarr: 140 Rosaries, or above skarr main location",
wiki: "Curveclaw"
},
shakraRing: {
id: "Shakra Ring",
name: "#7 Throwing Ring",
spoiler: "complete Trail's End wish",
wiki: "Throwing+Ring"
},
pimpilo: {
id: "Pimpilo",
name: "#8 Pimpillo",
spoiler: "Greymoor, northwest, above Yarnaby's home",
wiki: "Pimpillo"
},
conchDrill: {
id: "Conch Drill",
name: "#9 Conchcutter",
spoiler: "Sands of Karak, Coral Tower",
wiki: "Conchcutter"
},
webShot: {
id: "WebShot",
name: "#10 Silkshot",
spoiler: "Royal Waterways, defeat Dung Defender",
wiki: "Silkshot"
},
screwAttack: {
id: "Screw Attack",
name: "#11 Delver's Drill",
spoiler: "Underworks, bottom left",
wiki: "Delver's+Drill"
},
cogworkSaw: {
id: "Cogwork Saw",
name: "#12 Cogwork Wheel",
spoiler: "Twelfth Architect: 360 Rosaries and 1 Craftmetal.",
wiki: "Cogwork+Wheel"
},
cogworkFlier: {
id: "Cogwork Flier",
name: "#13 Cogfly",
spoiler: "High Halls, crafting bench, Requires 1 Craftmetal",
wiki: "Cogfly"
},
rosaryCannon: {
id: "Rosary Cannon",
name: "#14 Rosary Cannon",
spoiler: " High Halls, est of The Forum, behind locked door",
wiki: "Rosary+Cannon"
},
lightningRod: {
id: "Lightning Rod",
name: "#15 Voltvessels",
spoiler: "Memorium, top-right, behind a hidden wall",
wiki: "Voltvessels"
},
flintstone: {
id: "Flintstone",
name: "#16 Flintslate",
spoiler: "Deep Docks, behind the Simple Key door",
wiki: "Flintslate"
},
fleaBrew: {
id: "Flea Brew",
name: "#17 Flea Brew",
spoiler: "Helping out the Flea Caravan",
wiki: "Flea+Brew"
},
lifebloodSyringe: {
id: "Lifeblood Syringe",
name: "#18 Plasmium Phial",
spoiler: "Complete Alchemist's Assistant Wish",
wiki: "Plasmium+Phial"
}
}
},
/* #################### Blue Tools ################### */
blueTools: {
h2: "Blue Tools",
id: "hk-blueTools",
description: "Combat-focused passive tools. Each Tool found in the game provides 1% Game Completion.",
/*description: `Each Charm found in the game provides 1% Game Completion.
Note: 4 new Charms were added to the game in patch version 1.2.1.0. They are part of the Grimm Troupe Content Pack section below.`,*/
percent: 0,
maxPercent: 21,
// reference: https://radiance.host/apidocs/Charms.html
entries: {
mosscreepTool: {
id: "Mosscreep Tool",
name: "#1 Druid's Eye",
spoiler: "Salubra: 220 Geo",
wiki: "Druid's+Eye"
},
lavaCharm: {
id: "Lava Charm",
name: "#2 Magma Bell",
spoiler: "Complete Rite of the Pollip Wish",
wiki: "Magma+Bell"
},
bellBind: {
id: "Bell Bind",
name: "#3 Warding Bell",
spoiler: "lower Far Fields",
wiki: "Warding+Bell"
},
poisonPouch: {
id: "Poison Pouch",
name: "#4 Pollip Pouch",
spoiler: "Forgotten Crossroads, requires Crystal Heart",
wiki: "Pollip+Pouch"
},
fracturedMask: {
id: "Fractured Mask",
name: "#5 Fractured Mask",
spoiler: "Skarr: 260 Rosaries, or above skarr main location",
wiki: "Fractured+Mask"
},
multibind: {
id: "Multibind",
name: "#6 Multibinder",
spoiler: "Frey: 800 after comleting My Missing Courier Wish",
wiki: "Multibinder"
},
whiteRing: {
id: "White Ring",
name: "#7 Weavelight",
spoiler: "Weavenest Atla, defeating the 2nd Moss Mother",
wiki: "Weavelight"
},
brollySpike: {
id: "Brolly Spike",
name: "#8 Sawtooth Circlet",
spoiler: "Twelfth Architect: 230 Rosaries and 1 Craftmetal",
wiki: "Sawtooth+Circlet"
},
quickbind: {
id: "Quickbind",
name: "#9 Injector Band",
spoiler: "Whiteward",
wiki: "Injector+Band"
},
spoolExtender: {
id: "Spool Extender",
name: "#10 Spool Extender",
spoiler: "Jubilana: 720 Rosaries",
wiki: "Spool+Extender"
},
reserveBind: {
id: "Reserve Bind",
name: "#11 Reserve Bind",
spoiler: "complete Final Audience Wish",
wiki: "Reserve+Bind"
},
DazzleBind: {
id: "Dazzle Bind",
name: "#12 Claw Mirror",
spoiler: "Defeat Trobbio",
wiki: "Claw+Mirror"
},
revengeCrystal: {
id: "Revenge Crystal",
name: "#13 Memory Crystal",
spoiler: "Mount Fay, southwest, breakable wall next to bench",
wiki: "Memory+Crystal"
},
thiefClaw: {
id: "Thief Claw",
name: "#14 Snitch Pick",
spoiler: "Grindle : 740 Rosaries",
wiki: "Snitch Pick"
},
zapImbuement: {
id: "Zap Imbuement",
name: "#15 Volt Filament",
spoiler: "Defeat Voltvyrm",
wiki: "Volt+Filament"
},
quickSling: {
id: "Quick Sling",
name: "#16 Quick Sling",
spoiler: "2nd room above Bilewater word, breakable ceiling",
wiki: "Quick+Sling"
},
maggotCharm: {
id: "Maggot Charm",
name: "#17 Wreath of Purity",
spoiler: "Putrified Ducts, secret passage",
wiki: "Wreath+of+Purity"
},
longneedle: {
id: "Longneedle",
name: "#18 Longclaw",
spoiler: "complete Broodfeast or Runtfeast Wish",
wiki: "Longclaw"
},
wispLantern: {
id: "Wisp Lantern",
name: "#19 Wispfire Lantern",
spoiler: "Defeat Father of the Flame in Wisp Thicket",
wiki: "Wispfire+Lantern"
},
fleaCharm: {
id: "Flea Charm",
name: "#20 Egg of Flealia",
spoiler: "Fleamaster Mooshka: Find all the 30 fleas",
wiki: "Egg+of+Flealia"
},
pinstressTool: {
id: "Pinstress Tool",
name: "#21 Pin Badge",
spoiler: "Defeat Pinstress",
wiki: "Pin+Badge"
}
}
},
/* #################### Red tools ################### */
yellowTools: {
h2: "Yellow Tools",
id: "hk-yellowTools",
description: "miscellaneous passive tools. Each Tool found in the game provides 1% Game Completion.",
/*description: `Each Charm found in the game provides 1% Game Completion.
Note: 4 new Charms were added to the game in patch version 1.2.1.0. They are part of the Grimm Troupe Content Pack section below.`,*/
percent: 0,
maxPercent: 12,
// reference: https://radiance.host/apidocs/Charms.html
entries: {
compass: {
id: "Compass",
name: "#1 Compass",
spoiler: "Shakra: 70 Rosaries",
wiki: "Compass"
},
boneNecklace: {
id: "Bone Necklace",
name: "#2 Shard Pendant",
spoiler: "The Marrow, left side of the collapsing platforms",
wiki: "Magnetite+Brooch"
},
rosaryMagnet: {
id: "Rosary Magnet",
name: "#3 Magnetite Brooch",
spoiler: "Pebb: 120 Rosaries",
wiki: "Grubberfly's+Elegy"
},
weightedAnklet: {
id: "Weighted Anklet",
name: "#4 Weighted Belt",
spoiler: "Mort: 160",
wiki: "Weighted+Belt"
},
barbedWire: {
id: "Barbed Wire",
name: "#5 Barbed Bracelet",
spoiler: "Sinner's Road, souteast",
wiki: "Barbed+Bracelet"
},
deadMansPurse: {
id: "Dead Mans Purse",
name: "#6 Dead Bug's Purse",
spoiler: "Wormways",
wiki: "Dead+Bug's+Purse"
},
magnetiteDice: {
id: "Magnetite Dice",
name: "#7 Magnetite Dice",
spoiler: "Given by Lumble the Lucky, or Grindle: 300 on Act 3",
wiki: "Magnetite+Dice"
},
scuttlebrace: {
id: "Scuttlebrace",
name: "#8 Scuttlebrace",
spoiler: "Twelfth Architect: 140 Rosaries and 1 Craftmetal",
wiki: "Scuttlebrace"
},
Wallcling: {
id: "Wallcling",
name: "#9 Ascendant's Grip",
spoiler: "Jubilana: 350 Rosaries",
wiki: "Ascendant's+Grip"
},
musicianCharm: {
id: "Musician Charm",
name: "#10 Silkspeed Anklets",
spoiler: "Jubilana: 350 Rosaries after Lost Merchant Wish",
wiki: "Silkspeed+Anklets"
},
sprintmaster: {
id: "Sprintmaster",
name: "#11 Silkspeed Anklets",
spoiler: "Far Fields, inside Weavenest Cindril",
wiki: "Silkspeed+Anklets"
},
thiefCharm: {
id: "Thief Charm",
name: "#12 Thief's Mark",
spoiler: "Grindle: 350 Rosaries",
wiki: "Thief's+Mark"
}
}
},
/* ################ Equipment ################### */
equipment: {
h2: "Equipment",
id: "hk-equipment",
description: "Also known as Abilities. Each piece of equipment collected provides 1% Game Completion.",
percent: 0,
maxPercent: 6,
entries: {
silkSpear: {
id: "Silk Spear",
name: "Silkspear",
spoiler: "Mosshome",
wiki: "Silkspear"
},
threadSphere: {
id: "Thread Sphere",
name: "Thread Storm",
spoiler: "Greymoor",
wiki: "Thread+Storm"
},
Parry: {
id: "Parry",
name: "Cross Stitch",
spoiler: "Bilewater, Exhaust Organ, Defeat Phantom",
wiki: "Cross+Stitch"
},
silkCharge: {
id: "Silk Charge",
name: "Sharpdart",
spoiler: "Wormways",
wiki: "Sharpdart"
},
silkBomb: {
id: "Silk Bomb",
name: "Rune Rage",
spoiler: "The Slab, Kill the First Sinner",
wiki: "Rune Rage"
},
silkBossNeedle: {
id: "Silk Boss Needle",
name: "Pale Nails",
spoiler: "Kingdom's Edge, defeat Hornet Sentinel",
wiki: "Pale+Nails"
}
}
/*
entries: {
hasDash: {
name: "Mothwing Cloak",
spoiler: "Greenpath: Dash ability",
wiki: "Mothwing_Cloak"
},
hasWalljump: {
name: "Mantis Claw",
spoiler: "Mantis Village: Wall Jump ability",
wiki: "Mantis_Claw"
},
hasSuperDash: {
name: "Crystal Heart",
spoiler: "Crystal Peak: Super Dash ability",
wiki: "Crystal_Heart"
},
hasDoubleJump: {
name: "Monarch Wings",
spoiler: "Ancient Basin: Double Jump ability",
wiki: "Monarch_Wings"
},
hasAcidArmour: {
name: "Isma's Tear",
spoiler: "Royal Waterways: Acid Armour ability",
wiki: "Isma's_Tear"
},
hasKingsBrand: {
name: "King's Brand",
spoiler: "Kingdom's Edge, defeat Hornet Sentinel",
wiki: "King's_Brand"
},
hasShadowDash: {
name: "Shade Cloak",
spoiler: "The Abyss: Shadow Dash ability",
wiki: "Shade_Cloak"
}
},
*/
},
/* ################ Skills ################### */
skills: {
h2: "Skills",
id: "hk-skills",
description: "Skills help you to progress in the game. Each new Skill learned provides 1% Game Completion.",
percent: 0,
maxPercent: 6,
entries: {
hasDash: {
name: "Swift Step",
spoiler: "Deep Docks",
wiki: "Swift+Step"
},
hasWalljump: {
name: "Cling Grip",
spoiler: "Shellwood",
wiki: "Cling+Grip"
},
hasHarpoonDash: {
name: "Clawline",
spoiler: "Underworks",
wiki: "Clawline"
},
hasNeedolin: {
name: "Needolin",
spoiler: "Bellhart, defeat Widow",
wiki: "Needolin"
},
hasChargeSlash: {
name: "Needle Strike",
spoiler: "Blasted Steps: from the Pinstress",
wiki: "Needle+Strike"
},
hasSuperJump: {
name: "Silk Soar",
spoiler: "The Abyss, Weavenest Absolom, Act 3",
wiki: "Silk+Soar"
}
}
},
/* ################ Miscellaneous ################### */
miscellaneous: {
h2: "Miscellaneous",
id: "hk-miscellaneous",
description: "Extra miscellaneous. Each miscellaneous provides 1% Game Completion.",
percent: 0,
maxPercent: 2,
entries: {
HasSeenEvaHeal: {
name: "Sylphsong Step",
spoiler: "Eva: Require 6 crests and 18 memory lockets.",
wiki: "Sylphsong"
},
CompletedRedMemory: {
name: "Everbloom",
spoiler: "Complete The Old Hearts Wish, Act 3",
wiki: "Everbloom"
}
}
},
/* ################ Mask Shards ################### */
maskShards: {
h2: "Mask Shards",
id: "hk-maskshards",
description: "Shards for increasing max health. Each 4 Mask Fragments collected (a full Mask) provide 1% Game Completion.",
percent: 0,
maxPercent: 5,
entries: {
PurchasedBonebottomHeartPiece: {
name: "#1 Mask Shards",
spoiler: "Pebb: 300 Rosariy, or Grindle: 320 Rosairy if Pebb left",
wiki: "All+Mask+Shard+Locations#BoneBottom",
id: "",
sceneName: ""
},
wormwayMask: {
name: "#2 Mask Shards",
spoiler: "Wormways, Behind a breakable wall",
wiki: "All+Mask+Shard+Locations#Wormways",
id: "Heart Piece",
sceneName: "Crawl_02"
},
deepDocksMask: {
name: "#3 Mask Shards ",
spoiler: "Between the Marrow and Deep Docks, Cling Grip recommended",
wiki: "All+Mask+Shard+Locations#DeepDocks",
id: "Heart Piece",
sceneName: "Dock_08"
},
farFieldsMask1: {
name: "#4 Mask Shards",
spoiler: "Area above Seamstress's home in Far Fields, requires Drifter's Cloak",
wiki: "All+Mask+Shard+Locations#FarFields",
id: "Heart Piece",
sceneName: "Bone_East_20"
},
shellwoodMask: {
name: "#5 Mask Shard",
spoiler: "Centre of Shellwood, behind a breakable wall",
wiki: "All+Mask+Shard+Locations#Shellwood",
id: "Heart Piece",
sceneName: "Shellwood_14"
},
weavenestAtlaMask: {
name: "#6 Mask Shard",
spoiler: "East Weavenest Atla, behind breakable wall, requires Cling Grip",
wiki: "All+Mask+Shard+Locations#WeavenestAtla",
id: "Heart Piece",
sceneName: "Weave_05b"
},
MerchantEnclaveShellFragment: {
name: "#7 Mask Shard",
spoiler: "Jubilana: 750 Rosaries, after complete The Wandering Merchant Wish",
wiki: "All+Mask+Shard+Locations#ChoralChambers",
id: "",
sceneName: ""
},
cogworkCoreMask: {
name: "#8 Mask Shard",
spoiler: "West Cogwork Core past enemy gauntlet, defeat Cogwork Dancers",
wiki: "All+Mask+Shard+Locations#CogworkCore",
id: "Heart Piece",
sceneName: "Song_09"
},
libraryMask: {
name: "#9 Mask Shard",
spoiler: "Behind moving box puzzle in central Whispering Vaults",
wiki: "All+Mask+Shard+Locations#WhisperingVaults",
id: "Heart Piece",
sceneName: "Library_05"
},
beastflyHuntWish: {
name: "#10 Mask Shard",
spoiler: "Reward for completing the Savage Beastfly Wish",
wiki: "All+Mask+Shard+Locations#Bellhart",
id: "",
sceneName: "Beastfly Hunt"
},
boneBuildingMask: {
name: "#11 Mask Shard",
spoiler: "East Far Fields, inside bone building, requires Clawline and Drifter's Cloak ",
wiki: "All+Mask+Shard+Locations#FarFields",
id: "Heart Piece (1)",
sceneName: "Bone_East_LavaChallenge"
},
mountFayMask: {
name: "#12 Mask Shard",
spoiler: "Mount Fay, soutwest, west of the bench, requires Faydown Cloak",
wiki: "All+Mask+Shard+Locations#MountFay",
id: "Heart Piece",
sceneName: "Peak_04c"
},
slabMask: {
name: "#13 Mask Shard",
spoiler: "the Slab, Northeast, require key of Apostate and Faydown Cloak",
wiki: "All+Mask+Shard+Locations#TheSlab",
id: "Heart Piece",
sceneName: "Slab_17"
},
bilewaterMask: {
name: "#14 Mask Shard",
spoiler: "Bilewater, east, end of a hallway filled with Slubberlugs",
wiki: "All+Mask+Shard+Locations#Bilewater",
id: "Heart Piece",
sceneName: "Shadow_13"
},
wispThicketMask: {
name: "#15 Mask Shard",
spoiler: "Wisp Thicket, east, requires Faydown Cloak",
wiki: "All+Mask+Shard+Locations#WispThicket",
id: "Heart Piece",
sceneName: "Wisp_07"
},
blastedStepsMask: {
name: "#16 Mask Shard",
spoiler: "Blasted Steps, west, requires Clawline and Faydown Cloak.",
wiki: "All+Mask+Shard+Locations#BlastedSteps",
id: "Heart Piece",
sceneName: "Coral_19b"
},
brightveinMask: {
name: "#17 Mask Shard",
spoiler: "Brightvein, requires Silk Soar",
wiki: "All+Mask+Shard+Locations#MountFay",
id: "Heart Piece",
sceneName: "Peak_06"
},
sprintmasterRaceWish: {
name: "#18 Mask Shard",
spoiler: "Far Fields, east, complete Fastest in Pharloom wish",
wiki: "All+Mask+Shard+Locations#FarFields",
id: "",
sceneName: "Sprintmaster Race"
},
destroyThreadCoresWish: {
name: "#19 Mask Shard",
spoiler: "Bellhart Wishwall, complete Dark Hearts wish",
wiki: "All+Mask+Shard+Locations#Bellhart",
id: "",
sceneName: "Destroy Thread Cores"
},
antTrapperWish: {
name: "#20 Mask Shard",
spoiler: "Bellhart Wishwall, complete Hidden Hunter wish",
wiki: "All+Mask+Shard+Locations#Bellhart",
id: "",
sceneName: "Ant Trapper"
}
}
},
/* ################ Spool Fragments ################### */
spoolFragments: {
h2: "Spool Fragments",
id: "hk-spoolFragments",
description: "Fragments for increasing max silk capacity.. Each 2 Spool Fragments collected (a full spool) provide 1% Game Completion.",
percent: 0,
maxPercent: 9,
entries: {
boneBottomSpool: {
name: "#1 Fragments",
spoiler: "Bone Bottom, Mosshome, behind a breakable wall",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Bone_11b"
},
deepDocksSpool1: {
name: "#2 Fragments",
spoiler: "Deep Docks, lower left (too lazy to explane the location..)",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Bone_East_13"
},
greymoorSpool: {
name: "#3 Fragments",
spoiler: "Greymoor, above Shakra's bench",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Greymoor_02"
},
PurchasedBelltownSpoolSegment: {
name: "#4 Fragments",
spoiler: "Frey: 270 Rosaries, Complete My Missing Courier Wish",
wiki: "Spool+Fragment",
id: "",
sceneName: ""
},
weavenestAtlaSpool: {
name: "#5 Fragments",
spoiler: "Weavenest Atla, require Needolin",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Weave_11"
},
slabSpool: {
name: "#6 Fragments",
spoiler: "The Slab, west, require Cling Grip",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Peak_01"
},
grandGateSpool: {
name: "#7 Fragments",
spoiler: "Grand Gate, top",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Song_19_entrance"
},
UnderworksSpool1: {
name: "#8 Fragments",
spoiler: "Underworks, pass a challenging battle area",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Under_10"
},
MetCaravanTroupeLeaderJudge: {
name: "#9 Fragments",
spoiler: "Grand Gate, Flea Caravan, requires 12 fleas and Last Judge defeated",
wiki: "Spool+Fragment",
id: "",
sceneName: ""
},
whitewardSpool: {
name: "#10 Fragments",
spoiler: "Whiteward, under the lift, require White Key",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Ward_01"
},
cogworkCoreSpool: {
name: "#11 Fragments",
spoiler: "Cogwork Core, Southeast",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Cog_07"
},
UnderworksSpool2: {
name: "#12 Fragments",
spoiler: "Underworks, east of the Cauldron",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Library_11b"
},
saveShermaWish: {
name: "#13 Fragments",
spoiler: "complete Balm For The Wounded Wish",
wiki: "Quests",
id: "",
sceneName: "Save Sherma"
},
MerchantEnclaveSpoolPiece: {
name: "#14 Fragments",
spoiler: "Jubilana: 500 rosaries, after complete Lost Merchant Wish",
wiki: "Quests",
id: "",
sceneName: ""
},
deepDocksSpool2: {
name: "#15 Fragments",
spoiler: "Deep Docks, Southeast, require Clawline and Cling Grip",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Dock_03c"
},
highHallsSpool: {
name: "#16 Fragments",
spoiler: "High Halls, top of left vertical room, require Faydown Cloak and Clawline",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Hang_03_top"
},
MemoriumSpool: {
name: "#17 Fragments",
spoiler: "Memorium, western section, requires Faydown Cloak and Clawline",
wiki: "Spool+Fragment",
id: "Silk Spool",
sceneName: "Arborium_09"
},
purchasedGrindleSpoolPiece: {
name: "#18 Fragments",
spoiler: "Grindle: 680 rosaries, requires Faydown Cloak and Cling Grip",
wiki: "Spool+Fragment",
id: "",
sceneName: ""
}
}
},
/* ################ Crafting Kit Upgrades ################### */
craftingKitUpgrades: {
h2: "Crafting Kit Upgrades",
id: "hk-craftingKitUpgrades",
description: "Upgrade that increase Red Tool damage by +60%.. Each upgrade provide 1% Game Completion.",
percent: 0,
maxPercent: 4,
entries: {
PurchasedForgeToolKit: {
name: "#1 Upgrades",
spoiler: "Forge Daughter: 180 rosaries",
wiki: "Crafting+Kit",
id: "",
sceneName: ""
},
crowFeathersWish: {
name: "#2 Upgrades",
spoiler: "complete Crawbug Clearing Wish",
wiki: "Crafting+Kit",
id: "",
sceneName: "Crow Feathers"
},
PurchasedArchitectToolKit: {
name: "#3 Upgrades",
spoiler: "Twelfth Architect: 450 rosaries, requires Clawline",
wiki: "Crafting+Kit",
id: "",
sceneName: ""
},
purchasedGrindleToolKit: {
name: "#4 Upgrades",
spoiler: "Grindle: 700 rosaries, requires Faydown Cloak",
wiki: "Crafting+Kit",
id: "",
sceneName: ""
}
}
},
/* ################ Tool Pouch Upgrades ################### */
toolPouchUpgrades: {
h2: "Tool Pouch Upgrades",
id: "hk-toolPouchUpgrades",
description: "Upgrade that increase Red Tool damage by +60%.. Each upgrade provide 1% Game Completion.",
percent: 0,
maxPercent: 4,
entries: {
PurchasedPilgrimsRestToolPouch: {
name: "#1 Upgrades",
spoiler: "Mort: 220 rosaries, or Grindle: 220 (Act 3)",
wiki: "Tool+Pouch",
id: "",
sceneName: ""
},
ladybugCraftPickupToolPouch: {
name: "#2 Upgrades",
spoiler: "The Marrow, Lodie Callange (Act 1 & 2), on table (Act 3)",
wiki: "Tool+Pouch",
id: "Ladybug Craft Pickup",
sceneName: "Bone_12"
},
journalWish: {
name: "#3 Upgrades",
spoiler: "complete Nuu's Wish: Bugs of Pharloom",
wiki: "Tool+Pouch",
id: "",
sceneName: "Journal"
},
CaravanTroupeLocation: {
name: "#4 Upgrades",
spoiler: "Mooshka after helping the Flea Caravan move to Putrified Ducts",
wiki: "Tool+Pouch",
id: 3,
sceneName: "CaravanTroupeLocation"
}
}
},
/* ################ Hunter's Journal ################### */
huntersJournal: {
h2: "Hunter's Journal",
id: "hk-journal",
description: "All the 146 base-game Hunter's Journal entries that are counted for Hunter's Mark and Keen Hunter/True Hunter achievements. The 17 most commonly missed Journal entries are right at the top of this list. \n Numbers above: Completed/Encountered of 146 Base Total \n = note completed. \n = entry discovered, but note not completed. \n = entry not yet discovered. \n (no.) = amount left to complete note.",
percent: 0,
midPercent: 0,
maxPercent: 237,
entries: {
mossBoneCrawler: {
gameName: "Mossgrub",
databaseName: "MossBone Crawler",
name: "Mossgrub (25)",
spoiler: "Moss Grotto and Memorium",
killRequire: "25",
wiki: "Mossgrub"
},
mossBoneCrawlerFat: {
gameName: "Massive Mossgrub",
databaseName: "MossBone Crawler Fat",
name: "Massive Mossgrub (3)",
spoiler: "Memorium",
killRequire: "3",
wiki: "Massive+Mossgrub"
},
mossBoneFly: {
gameName: "Mossmir",
databaseName: "MossBone Fly",
name: "Mossmir (20)",
spoiler: "Moss Grotto",
killRequire: "20",
wiki: "Mossmir"
},
mossboneMother: {
gameName: "Moss Mother",
databaseName: "Mossbone Mother",
name: "Moss Mother (3)",
spoiler: "Ruined Chapel, Weavenest Atla (act 1/2), and Moss Grotto (Act3)",
killRequire: "3",
wiki: "Moss+Mother"
},
aspidCollector: {
gameName: "Aknid",
databaseName: "Aspid Collector",
name: "Aknid (15)",
spoiler: "Mosshome and Bone Bottom",
killRequire: "15",
wiki: "Aknid"
},
boneGoomba: {
gameName: "Skull Scuttler",
databaseName: "Bone Goomba",
name: "Skull Scuttler (35)",
spoiler: "The Marrows",
killRequire: "35",
wiki: "Skull+Scuttler"
},
boneGoombaBounceFly: {
gameName: "Skullwing",
databaseName: "Bone Goomba Bounce Fly",
name: "Skullwing (15)",
spoiler: "Weavenest Atla",
killRequire: "15",
wiki: "Skullwing"
},
boneGoombaLarge: {
gameName: "Skull Brute",
databaseName: "Bone Goomba Large",
name: "Skull Brute (15)",
spoiler: "The Marrow",
killRequire: "15",
wiki: "Skull+Brute"
},
skullKing: {
gameName: "Skull Tyrant",
databaseName: "Skull King",
name: "Skull Tyrant (1)",
spoiler: "The Marrow",
killRequire: "1",
wiki: "Skull+Tyrant"
},
boneCrawler: {
gameName: "Kilik",
databaseName: "Bone Crawler",
name: "Kilik (25)",
spoiler: "The Marrow",
killRequire: "25",
wiki: "Kilik"
},
boneFlyer: {
gameName: "Beastfly",
databaseName: "Bone Flyer",
name: "Beastfly (30)",
spoiler: "The Marrow",
killRequire: "30",
wiki: "Beastfly"
},
boneFlyerGiant: {
gameName: "Savage Beastfly",
databaseName: "Bone Flyer Giant",
name: "Savage Beastfly (2)",
spoiler: "Chapel of the Beast, and Savage Beastfly Wish",
killRequire: "2",
wiki: "Savage+Beastfly"
},
boneCircler: {
gameName: "Caranid",
databaseName: "Bone Circler",
name: "Caranid (25)",
spoiler: "Deep Docks, The Marrow, and Far Fields",
killRequire: "25",
wiki: "Caranid"
},
boneCirclerVicious: {
gameName: "Vicious Caranid",
databaseName: "Bone Circler Vicious",
name: "Vicious Caranid (15)",
spoiler: "Far Fields",
killRequire: "15",
wiki: "Vicious+Caranid"
},
boneHopper: {
gameName: "Hardbone Hopper",
databaseName: "Bone Hopper",
name: "Hardbone Hopper (20)",
spoiler: "northeast Deep Docks",
killRequire: "20",
wiki: "Hardbone+Hopper"
},
boneHopperGiant: {
gameName: "Hardbone Elder",
databaseName: "Bone Hopper Giant",
name: "Hardbone Elder (10)",
spoiler: "northeast Far Fields (Act 3)",
killRequire: "10",
wiki: "Hardbone+Elder"
},
boneSpitter: {
gameName: "Tarmite",
databaseName: "Bone Spitter",
name: "Tarmite (10)",
spoiler: "southeast Far Fields",
killRequire: "10",
wiki: "Tarmite"
},
boneRoller: {
gameName: "Mawling",
databaseName: "Bone Roller",
name: "Mawling (30)",
spoiler: "Moss Grotto, Weavenest Atla, and Memorium",
killRequire: "30",
wiki: "Mawling"
},
boneThumper: {
gameName: "Marrowmaw",
databaseName: "Bone Thumper",
name: "Marrowmaw (8)",
spoiler: "west Weavenest Atla and east of the bench in the Memorium",
killRequire: "8",
wiki: "Marrowmaw"
},
spineFloater: {
gameName: "Hoker",
databaseName: "Spine Floater",
name: "Hoker (15)",
spoiler: "Far Fields",
killRequire: "15",
wiki: "Hoker"
},
rockRoller: {
gameName: "Flintbeetle",
databaseName: "Rock Roller",
name: "Flintbeetle (3)",
spoiler: "Volatile Flintbeetles Wish",
killRequire: "3",
wiki: "Flintbeetle"
},
rhino: {
gameName: "Rhinogrund",
databaseName: "Rhino",
name: "Rhinogrund (2)",
spoiler: "The Memorium (Act 1/2), Far Fields (Act 3)",
killRequire: "2",
wiki: "Rhinogrund"
},
cryptWorm: {
gameName: "Gromling",
databaseName: "Crypt Worm",
name: "Gromling (25)",
spoiler: "north-east Wormways",
killRequire: "25",
wiki: "Gromling"
},
boneWorm: {
gameName: "Grom",
databaseName: "Bone Worm",
name: "Grom (10)",
spoiler: "Wormways",
killRequire: "10",
wiki: "Grom"
},
boneBeast: {
gameName: "Bell Beast",
databaseName: "Bone Beast",
name: "Bell Beast (1)",
spoiler: "The Marrow's Bellway Station",
killRequire: "1",
wiki: "Bell+Beast"
},
pilgrim03: {
gameName: "Pilgrim Groveller",
databaseName: "Pilgrim 03",
name: "Pilgrim Groveller (35)",
spoiler: "Mosshome",
killRequire: "35",
wiki: "Pilgrim+Groveller"
},
pilgrim01: {
gameName: "Pilgrim Pouncer",
databaseName: "Pilgrim 01",
name: "Pilgrim Pouncer (35)",
spoiler: "Mosshome",
killRequire: "35",
wiki: "Pilgrim+Pouncer"
},
pilgrim04: {
gameName: "Pilgrim Hornfly",
databaseName: "Pilgrim 04",
name: "Pilgrim Hornfly (15)",
spoiler: "East Far Fields and west Bone Bottom",
killRequire: "15",
wiki: "Pilgrim+Hornfly"
},
pilgrim02: {
gameName: "Pilgrim Hulk",
databaseName: "Pilgrim 02",
name: "Pilgrim Hulk (10)",
spoiler: "East of the balloon in Far Fields",
killRequire: "10",
wiki: "Pilgrim+Hulk"
},
pilgrimBellThrower: {
gameName: "Pilgrim Bellbearer",
databaseName: "Pilgrim Bell Thrower",
name: "Pilgrim Bellbearer (10)",
spoiler: "Wormways",
killRequire: "10",
wiki: "Pilgrim+Bellbearer"
},
pilgrimFly: {
gameName: "Winged Pilgrim",
databaseName: "Pilgrim Fly",
name: "Winged Pilgrim (25)",
spoiler: "The Marrow and east of the balloon in Far Fields",
killRequire: "25",
wiki: "Winged+Pilgrim"
},
pilgrim05: {
gameName: "Elder Pilgrim",
databaseName: "Pilgrim 05",
name: "Elder Pilgrim (5)",
spoiler: "Bonegrave",
killRequire: "5",
wiki: "Elder+Pilgrim"
},
pilgrimBellthrowerFly: {
gameName: "Winged Pilgrim Bellbearer",
databaseName: "Pilgrim Bellthrower Fly",
name: "Winged Pilgrim Bellbearer (10)",
spoiler: "Greymoor and west Shellwood",
killRequire: "10",
wiki: "Winged+Pilgrim+Bellbearer"
},
pilgrimHiker: {
gameName: "Pilgrim Hiker",
databaseName: "Pilgrim Hiker",
name: "Pilgrim Hiker (10)",
spoiler: "Blasted Steps",
killRequire: "10",
wiki: "Pilgrim+Hiker"
},
pilgrimStaffWielder: {
gameName: "Pilgrim Guide",
databaseName: "Pilgrim StaffWielder",
name: "Pilgrim Guide (15)",
spoiler: "Greymoor in east of Halfway Home",
killRequire: "15",
wiki: "Pilgrim+Guide"
},
pilgrimMossSpitter: {
gameName: "Overgrown Pilgrim",
databaseName: "Pilgrim Moss Spitter",
name: "Overgrown Pilgrim (20)",
spoiler: "Mosshome",
killRequire: "20",
wiki: "Overgrown+Pilgrim"
},
rosaryPilgrim: {
gameName: "Covetous Pilgrim",
databaseName: "Rosary Pilgrim",
name: "Covetous Pilgrim (2)",
spoiler: "Shellwood and Bilewater",
killRequire: "2",
wiki: "Covetous+Pilgrim"
},
rosaryThief: {
gameName: "Snitchfly",
databaseName: "Rosary Thief",
name: "Snitchfly (4)",
spoiler: "Bone Bottom (Act 3) and Pilgrim's Rest (Act 3)",
killRequire: "4",
wiki: "Snitchfly"
},
tarSlug: {
gameName: "Lavalug",
databaseName: "Tar Slug",
name: "Lavalug (12)",
spoiler: "Deep Docks",
killRequire: "12",
wiki: "Lavalug"
},
tarSlugHuge: {
gameName: "Lavalarga",
databaseName: "Tar Slug Huge",
name: "Lavalarga (8)",
spoiler: "Deep Docks in a room with magma-walls & platforms",
killRequire: "8",
wiki: "Lavalarga"
},
dockWorker: {
gameName: "Smelt Shoveller",
databaseName: "Dock Worker",
name: "Smelt Shoveller (25)",
spoiler: "Deep Docks and the eastern edge of The Marrow",
killRequire: "25",
wiki: "Smelt+Shoveller"
},
dockFlyer: {
gameName: "Flintstone Flyer",
databaseName: "Dock Flyer",
name: "Flintstone Flyer (25)",
spoiler: "Deep Docks",
killRequire: "25",
wiki: "Flintstone+Flyer"
},
dockBomber: {
gameName: "Flintflame Flyer",
databaseName: "Dock Bomber",
name: "Flintflame Flyer (10)",
spoiler: "Deep Docks, require Simple Key",
killRequire: "10",
wiki: "Flintflame+Flyer"
},
shieldDockWorker: {
gameName: "Smokerock Sifter",
databaseName: "Shield Dock Worker",
name: "Smokerock Sifter (10)",
spoiler: "Deep Docks",
killRequire: "10",
wiki: "Smokerock+Sifter"
},
dockCharger: {
gameName: "Deep Diver",
databaseName: "Dock Charger",
name: "Deep Diver (5)",
spoiler: "Deep Docks, require Simple Key",
killRequire: "5",
wiki: "Deep+Diver"
},
dockGuardThrower: {
gameName: "Forebrothers Signis & Gron",
databaseName: "Dock Guard Thrower",
name: "Forebrothers Signis & Gron (1)",
spoiler: "south Deep Docks, require Simple Key",
killRequire: "1",
wiki: "Forebrothers+Signis+&+Gron"
},
smallCrab: {
gameName: "Cragglite",
databaseName: "Small Crab",
name: "Cragglite (3)",
spoiler: "Wormways, must defeat Craggler",
killRequire: "3",
wiki: "Cragglite"
},
roofCrab: {
gameName: "Craggler",
databaseName: "Roof Crab",
name: "Craggler (1)",
spoiler: "Wormways",
killRequire: "1",
wiki: "Craggler"
},
fieldsFlockFlyers: {
gameName: "Brushflit",
databaseName: "Fields Flock Flyers",
name: "Brushflit (15)",
spoiler: "Far Fields",
killRequire: "15",
wiki: "Brushflit"
},
fieldsGoomba: {
gameName: "Fertid",
databaseName: "Fields Goomba",
name: "Fertid (25)",
spoiler: "Far Fields",
killRequire: "25",
wiki: "Fertid"
},
fieldsFlyer: {
gameName: "Flapping Fertid",
databaseName: "Fields Flyer",
name: "Flapping Fertid (20)",
spoiler: "Far Fields",
killRequire: "20",
wiki: "Flapping+Fertid"
},
songGolem: {
gameName: "Fourth Chorus",
databaseName: "Song Golem",
name: "Fourth Chorus (1)",
spoiler: "Far Fields",
killRequire: "1",
wiki: "Fourth+Chorus"
},
boneHunterTiny: {
gameName: "Skarrlid",
databaseName: "Bone Hunter Tiny",
name: "Skarrlid (25)",
spoiler: "Hunter's March",
killRequire: "25",
wiki: "Skarrlid"
},
boneHunterBuzzer: {
gameName: "Skarrwing",
databaseName: "Bone Hunter Buzzer",
name: "Skarrwing (30)",
spoiler: "Hunter's March",
killRequire: "30",
wiki: "Skarrwing"
},
boneHunterChild: {
gameName: "Skarr Scout",
databaseName: "Bone Hunter Child",
name: "Skarr Scout (20)",
spoiler: "Hunter's March",
killRequire: "20",
wiki: "Skarr+Scout"
},
boneHunter: {
gameName: "Skarr Stalker",
databaseName: "Bone Hunter",
name: "Skarr Stalker (15)",
spoiler: "Hunter's March",
killRequire: "15",
wiki: "Skarr+Stalker"
},
boneHunterFly: {
gameName: "Spear Skarr",
databaseName: "Bone Hunter Fly",
name: "Spear Skarr (10)",
spoiler: "Hunter's March",
killRequire: "10",
wiki: "Spear+Skarr"
},
boneHunterThrow: {
gameName: "Skarrgard",
databaseName: "Bone Hunter Throw",
name: "Skarrgard (2)",
spoiler: "Hunter's March",
killRequire: "2",
wiki: "Skarrgard"
},
boneHunterTrapper: {
gameName: "Gurr the Outcast",
databaseName: "Bone Hunter Trapper",
name: "Gurr the Outcast (1)",
spoiler: "Guarding between The Marrow and Hunter's March, and storeroom at the top of Hunter's March",
killRequire: "1",
wiki: "Gurr+the+Outcast"
},
boneHunterChief: {
gameName: "Last Claw",
databaseName: "Bone Hunter Chief",
name: "Last Claw (6)",
spoiler: "Skarrsinger Karmelita's arena",
killRequire: "6",
wiki: "Last+Claw"
},
hunterQueen: {
gameName: "Skarrsinger Karmelita",
databaseName: "Hunter Queen",
name: "Skarrsinger Karmelita (1)",
spoiler: "Start from her statue in Hunter's Marchm Silk Soar required.",
killRequire: "1",
wiki: "Skarrsinger+Karmelita"
},
mite: {
gameName: "Mite",
databaseName: "Mite",
name: "Mite (30)",
spoiler: "Greymoor",
killRequire: "30",
wiki: "Mite"
},
mitefly: {
gameName: "Fluttermite",
databaseName: "Mitefly",
name: "Fluttermite (25)",
spoiler: "Greymoor",
killRequire: "25",
wiki: "Fluttermite"
},
gnatGiant: {
gameName: "Mitemother",
databaseName: "Gnat Giant",
name: "Mitemother (10)",
spoiler: "Greymoor",
killRequire: "10",
wiki: "Mitemother"
},
farmerCatcher: {
gameName: "Dreg Catcher",
databaseName: "Farmer Catcher",
name: "Dreg Catcher (20)",
spoiler: "Greymoor",
killRequire: "20",
wiki: "Dreg+Catcher"
},
farmerScissors: {
gameName: "Silk Snipper",
databaseName: "Farmer Scissors",
name: "Silk Snipper (25)",
spoiler: "Western towers of Greymoor",
killRequire: "25",
wiki: "Silk+Snipper"
},
farmerCentipede: {
gameName: "Thread Raker",
databaseName: "Farmer Centipede",
name: "Thread Raker (15)",
spoiler: "Outside Greymoor Bellway station",
killRequire: "15",
wiki: "Thread+Raker"
},
vampireGnat: {
gameName: "Moorwing",
databaseName: "Vampire Gnat",
name: "Moorwing (1)",
spoiler: "Greymoor",
killRequire: "1",
wiki: "Moorwing"
},
wisp: {
gameName: "Wisp",
databaseName: "Wisp",
name: "Wisp (15)",
spoiler: "Wisp Thicket",
killRequire: "15",
wiki: "Wisp"
},
farmerWisp: {
gameName: "Burning Bug",
databaseName: "Farmer Wisp",
name: "Burning Bug (8)",
spoiler: "Wisp Thicket",
killRequire: "8",
wiki: "Burning+Bug"
},
wispPyreEffigy: {
gameName: "Father of the Flame",
databaseName: "Wisp Pyre Effigy",
name: "Father of the Flame (1)",
spoiler: "Wisp Thicket",
killRequire: "1",
wiki: "Father+of+the+Flame"
},
crow: {
gameName: "Craw",
databaseName: "Crow",
name: "Craw (25)",
spoiler: "Greymoor, near Craw Lake",
killRequire: "25",
wiki: "Craw"
},
crowman: {
gameName: "Tallcraw",
databaseName: "Crowman",
name: "Tallcraw (20)",
spoiler: "Greymoor",
killRequire: "20",
wiki: "Tallcraw"
},
crowmanDagger: {
gameName: "Squatcraw",
databaseName: "Crowman Dagger",
name: "Squatcraw (15)",
spoiler: "Greymoor",
killRequire: "15",
wiki: "Squatcraw"
},
crowmanJurorTiny: {
gameName: "Craw Juror",
databaseName: "Crowman Juror Tiny",
name: "Craw Juror (15)",
spoiler: "Greymoor, near Craw Lake, require Craw Summon",
killRequire: "15",
wiki: "Craw+Juror"
},
crowmanJuror: {
gameName: "Tallcraw Juror",
databaseName: "Crowman Juror",
name: "Tallcraw Juror (10)",
spoiler: "Greymoor, near Craw Lake, require Craw Summon",
killRequire: "10",
wiki: "Tallcraw+Juror"
},
crowmanDaggerJuror: {
gameName: "Squatcraw Juror",
databaseName: "Crowman Dagger Juror",
name: "Squatcraw Juror (8)",
spoiler: "Greymoor, near Craw Lake, require Craw Summon",
killRequire: "8",
wiki: "Squatcraw+Juror"
},
crawfather: {
gameName: "Crawfather",
databaseName: "Crawfather",
name: "Crawfather (1)",
spoiler: "Greymoor, near Craw Lake, require Craw Summon",
killRequire: "1",
wiki: "Crawfather"
},
maggots: {
gameName: "Muckmaggot",
databaseName: "Maggots",
name: "Muckmaggot (80)",
spoiler: "the waters of Sinner's Road, Bilewater, and Putrified Ducts",
killRequire: "80",
wiki: "Muckmaggot"
},
dustroachPollywog: {
gameName: "Slubberlug",
databaseName: "Dustroach Pollywog",
name: "Slubberlug (12)",
spoiler: "Bilewater",
killRequire: "12",
wiki: "Slubberlug"
},
dustroach: {
gameName: "Muckroach",
databaseName: "Dustroach",
name: "Muckroach (20)",
spoiler: "Sinner's Road",
killRequire: "20",
wiki: "Muckroach"
},
bloatRoach: {
gameName: "Bloatroach",
databaseName: "Bloat Roach",
name: "Bloatroach (12)",
spoiler: "Bilewater",
killRequire: "12",
wiki: "Bloatroach"
},
roachfeederShort: {
gameName: "Roachcatcher",
databaseName: "Roachfeeder Short",
name: "Roachcatcher (20)",
spoiler: "Sinner's Road",
killRequire: "20",
wiki: "Roachcatcher"
},
roachfeederTall: {
gameName: "Roachfeeder",
databaseName: "Roachfeeder Tall",
name: "Roachfeeder (20)",
spoiler: "Sinner's Road",
killRequire: "20",
wiki: "Roachfeeder"
},
roachkeeper: {
gameName: "Roachkeeper",
databaseName: "Roachkeeper",
name: "Roachkeeper (10)",
spoiler: "Sinner's Road",
killRequire: "10",
wiki: "Roachkeeper"
},
roachkeeperChefTiny: {
gameName: "Roachserver",
databaseName: "Roachkeeper Chef Tiny",
name: "Roachserver (10)",
spoiler: "Disgraced Chef Lugoli's arena",
killRequire: "10",
wiki: "Roachserver"
},
roachkeeperChef: {
gameName: "Disgraced Chef Lugoli",
databaseName: "Roachkeeper Chef",
name: "Disgraced Chef Lugoli (1)",
spoiler: "Eastern end of Sinner's Road, requires Faydown Cloak",
killRequire: "1",
wiki: "Disgraced+Chef+Lugoli"
},
wraith: {
gameName: "Wraith",
databaseName: "Wraith",
name: "Wraith (10)",
spoiler: "The Mist",
killRequire: "10",
wiki: "Wraith"
},
swampDrifter: {
gameName: "Mothleaf Lagnia",
databaseName: "Swamp Drifter",
name: "Mothleaf Lagnia (25)",
spoiler: "Bilewater",
killRequire: "25",
wiki: "Mothleaf+Lagnia"
},
swampGoomba: {
gameName: "Miremite",
databaseName: "Swamp Goomba",
name: "Miremite (20)",
spoiler: "Bilewater",
killRequire: "20",
wiki: "Miremite"
},
swampMosquito: {
gameName: "Swamp Squit",
databaseName: "Swamp Mosquito",
name: "Swamp Squit (30)",
spoiler: "Bilewater",
killRequire: "30",
wiki: "Swamp+Squit"
},
swampMosquitoSkinny: {
gameName: "Spit Squit",
databaseName: "Swamp Mosquito Skinny",
name: "Spit Squit (20)",
spoiler: "Putrified Ducts",
killRequire: "20",
wiki: "Spit+Squit"
},
swampMuckman: {
gameName: "Stilkin",
databaseName: "Swamp Muckman",
name: "Stilkin (15)",
spoiler: "Bilewater",
killRequire: "15",
wiki: "Stilkin"
},
swampMuckmanTall: {
gameName: "Stilkin Trapper",
databaseName: "Swamp Muckman Tall",
name: "Stilkin Trapper (12)",
spoiler: "Groal the Great's boss arena, and Bilewater after defeating him",
killRequire: "12",
wiki: "Stilkin+Trapper"
},
swampShaman: {
gameName: "Groal the Great",
databaseName: "Swamp Shaman",
name: "Groal the Great (1)",
spoiler: "Bilewater",
killRequire: "1",
wiki: "Groal+the+Great"
},
swampBarnacle: {
gameName: "Barnak",
databaseName: "Swamp Barnacle",
name: "Barnak (8)",
spoiler: "Putrified Ducts",
killRequire: "8",
wiki: "Barnak"
},
swampDuctsucker: {
gameName: "Ductsucker",
databaseName: "Swamp Ductsucker",
name: "Ductsucker (6)",
spoiler: "Putrified Ducts",
killRequire: "6",
wiki: "Ductsucker"
},
pondSkater: {
gameName: "Pond Skipper",
databaseName: "Pond Skater",
name: "Pond Skipper (15)",
spoiler: "Shellwood",
killRequire: "15",
wiki: "Pond+Skipper"
},
pilgrimFisher: {
gameName: "Pondcatcher",
databaseName: "Pilgrim Fisher",
name: "Pondcatcher (20)",
spoiler: "Shellwood",
killRequire: "20",
wiki: "Pondcatcher"
},
shellwoodGnat: {
gameName: "Shellwood Gnat",
databaseName: "Shellwood Gnat",
name: "Shellwood Gnat (15)",
spoiler: "Shellwood",
killRequire: "15",
wiki: "Shellwood+Gnat"
},
shellwoodWasp: {
gameName: "Wood Wasp",
databaseName: "Shellwood Wasp",
name: "Wood Wasp (12)",
spoiler: "Shellwood",
killRequire: "12",
wiki: "Wood+Wasp"
},
stickInsect: {
gameName: "Splinter",
databaseName: "Stick Insect",
name: "Splinter (12)",
spoiler: "Shellwood",
killRequire: "12",
wiki: "Splinter"
},
stickInsectCharger: {
gameName: "Splinterhorn",
databaseName: "Stick Insect Charger",
name: "Splinterhorn (10)",
spoiler: "Shellwood",
killRequire: "10",
wiki: "Splinterhorn"
},
stickInsectFlyer: {
gameName: "Splinterbark",
databaseName: "Stick Insect Flyer",
name: "Splinterbark (10)",
spoiler: "Shellwood, or Sister Splinter arena",
killRequire: "10",
wiki: "Splinterbark"
},
splinterQueen: {
gameName: "Sister Splinter",
databaseName: "Splinter Queen",
name: "Sister Splinter (1)",
spoiler: "top of Shellwood",
killRequire: "1",
wiki: "Sister+Splinter"
},
flowerDrifter: {
gameName: "Phacia",
databaseName: "Flower Drifter",
name: "Phacia (25)",
spoiler: "Shellwood",
killRequire: "25",
wiki: "Phacia"
},
bloomShooter: {
gameName: "Pollenica",
databaseName: "Bloom Shooter",
name: "Pollenica (10)",
spoiler: "Shellwood",
killRequire: "10",
wiki: "Pollenica"
},
bloomPuncher: {
gameName: "Gahlia",
databaseName: "Bloom Puncher",
name: "Gahlia (20)",
spoiler: "Shellwood",
killRequire: "20",
wiki: "Gahlia"
},
seth: {
gameName: "Shrine Guardian Seth",
databaseName: "Seth",
name: "Shrine Guardian Seth (1)",
spoiler: "hidden area in Shellwood",
killRequire: "1",
wiki: "Shrine+Guardian+Seth"
},
flowerQueen: {
gameName: "Nyleth",
databaseName: "Flower Queen",
name: "Nyleth (1)",
spoiler: "hidden area in Shellwood",
killRequire: "1",
wiki: "Nyleth"
},
bellGoomba: {
gameName: "Furm",
databaseName: "Bell Goomba",
name: "Furm (25)",
spoiler: "bell tunnels around Bellhart",
killRequire: "25",
wiki: "Furm"
},
bellFly: {
gameName: "Winged Furm",
databaseName: "Bell Fly",
name: "Winged Furm (12)",
spoiler: "bell tunnels around Bellhart",
killRequire: "12",
wiki: "Winged+Furm"
},
bladeSpider: {
gameName: "Pharlid",
databaseName: "Blade Spider",
name: "Pharlid (20)",
spoiler: "Blasted Steps",
killRequire: "20",
wiki: "Pharlid"
},
bladeSpiderHang: {
gameName: "Pharlid Diver",
databaseName: "Blade Spider Hang",
name: "Pharlid Diver (10)",
spoiler: "Weavenest Atla",
killRequire: "10",
wiki: "Pharlid+Diver"
},
shellFossilMimic: {
gameName: "Shardillard",
databaseName: "Shell Fossil Mimic",
name: "Shardillard (3)",
spoiler: "Deep Docks, Greymoor, Sands of Karak, The Marrow",
killRequire: "3",
wiki: "Shardillard"
},
sandCentipede: {
gameName: "Sandcarver",
databaseName: "Sand Centipede",
name: "Sandcarver (40)",
spoiler: "Blasted Steps and the Sands of Karak",
killRequire: "40",
wiki: "Sandcarver"
},
coralJudgeChild: {
gameName: "Squirrm",
databaseName: "Coral Judge Child",
name: "Squirrm (4)",
spoiler: "secret room in Blasted Steps",
killRequire: "4",
wiki: "Squirrm"
},
coralJudge: {
gameName: "Judge",
databaseName: "Coral Judge",
name: "Judge (15)",
spoiler: "Blasted Steps",
killRequire: "15",
wiki: "Judge"
},
lastJudge: {
gameName: "Last Judge",
databaseName: "Last Judge",
name: "Last Judge (1)",
spoiler: "Blasted Steps",
killRequire: "1",
wiki: "Last+Judge"
},
coralSpikeGoomba: {
gameName: "Coral Furm",
databaseName: "Coral Spike Goomba",
name: "Coral Furm (15)",
spoiler: "Sands of Karak",
killRequire: "15",
wiki: "Coral+Furm"
},
coralConchShooter: {
gameName: "Driznit",
databaseName: "Coral Conch Shooter",
name: "Driznit (25)",
spoiler: "Blasted Steps",
killRequire: "25",
wiki: "Driznit"
},
coralConchShooterHeavy: {
gameName: "Driznarga",
databaseName: "Coral Conch Shooter Heavy",
name: "Driznarga (14)",
spoiler: "Sands of Karak and Memorium",
killRequire: "14",
wiki: "Driznarga"
},
coralConchStabber: {
gameName: "Pokenabbin",
databaseName: "Coral Conch Stabber",
name: "Pokenabbin (16)",
spoiler: "Sands of Karak",
killRequire: "16",
wiki: "Pokenabbin"
},
coralConchDriller: {
gameName: "Conchfly",
databaseName: "Coral Conch Driller",
name: "Conchfly (8)",
spoiler: "Sands of Karak",
killRequire: "8",
wiki: "Conchfly"
},
coralConchDrillerGiant: {
gameName: "Great Conchfly",
databaseName: "Coral Conch Driller Giant",
name: "Great Conchfly (2)",
spoiler: "Blasted Steps",
killRequire: "2",
wiki: "Great+Conchfly"
},
coralGoombas: {
gameName: "Crustcrawler",
databaseName: "Coral Goombas",
name: "Crustcrawler (10)",
spoiler: "Coral Tower",
killRequire: "10",
wiki: "Crustcrawler"
},
coralGoombaLarge: {
gameName: "Crustcrag",
databaseName: "Coral Goomba Large",
name: "Crustcrag (6)",
spoiler: "Memorium",
killRequire: "6",
wiki: "Crustcrag"
},
coralSwimmerFat: {
gameName: "Kai",
databaseName: "Coral Swimmer Fat",
name: "Kai (10)",
spoiler: "Coral Tower",
killRequire: "10",
wiki: "Kai"
},
pokeSwimmer: {
gameName: "Spinebeak Kai",
databaseName: "Poke Swimmer",
name: "Spinebeak Kai (10)",
spoiler: "Coral Tower",
killRequire: "10",
wiki: "Spinebeak+Kai"
},
spikeSwimmer: {
gameName: "Steelspine Kai",
databaseName: "Spike Swimmer",
name: "Steelspine Kai (15)",
spoiler: "Coral Tower",
killRequire: "15",
wiki: "Steelspine+Kai"
},
coralSwimmerSmall: {
gameName: "Yuma",
databaseName: "Coral Swimmer Small",
name: "Yuma (16)",
spoiler: "Coral Tower",
killRequire: "16",
wiki: "Yuma"
},
coralBigJellyfish: {
gameName: "Yumama",
databaseName: "Coral Big Jellyfish",
name: "Yumama (3)",
spoiler: "Coral Tower",
killRequire: "3",
wiki: "Yumama"
},
coralWarrior: {
gameName: "Karaka",
databaseName: "Coral Warrior",
name: "Karaka (10)",
spoiler: "Coral Tower",
killRequire: "10",
wiki: "Karaka"
},
coralFlyer: {
gameName: "Kakri",
databaseName: "Coral Flyer",
name: "Kakri (10)",
spoiler: "Coral Tower",
killRequire: "10",
wiki: "Kakri"
},
coralFlyerThrow: {
gameName: "Yago",
databaseName: "Coral Flyer Throw",
name: "Yago (12)",
spoiler: "Coral Tower",
killRequire: "12",
wiki: "Yago"
},
coralBrawler: {
gameName: "Karak Gor",
databaseName: "Coral Brawler",
name: "Karak Gor (8)",
spoiler: "Coral Tower",
killRequire: "8",
wiki: "Karak+Gor"
},
coralHunter: {
gameName: "Alita",
databaseName: "Coral Hunter",
name: "Alita (6)",
spoiler: "Coral Tower",
killRequire: "6",
wiki: "Alita"
},
coralBubbleBrute: {
gameName: "Corrcrust Karaka",
databaseName: "Coral Bubble Brute",
name: "Corrcrust Karaka (6)",
spoiler: "Coral Tower",
killRequire: "6",
wiki: "Corrcrust+Karaka"
},
coralKing: {
gameName: "Crust King Khann",
databaseName: "Coral King",
name: "Crust King Khann (1)",
spoiler: "Coral Tower",
killRequire: "1",
wiki: "Crust+King+Khann"
},
coralWarriorGrey: {
gameName: "Watcher at the Edge",
databaseName: "Coral Warrior Grey",
name: "Watcher at the Edge (1)",
spoiler: "hidden zone inside of Sands of Karak, require Silk Soar (Act 3)",
killRequire: "1",
wiki: "Watcher+at+the+Edge"
},
zapCoreEnemy: {
gameName: "Voltvyrm",
databaseName: "Zap Core Enemy",
name: "Voltvyrm (1)",
spoiler: "Sands of Karak.",
killRequire: "1",
wiki: "Voltvyrm"
},
citadelBat: {
gameName: "Drapefly",
databaseName: "Citadel Bat",
name: "Drapefly (30)",
spoiler: "Underworks and Slab",
killRequire: "30",
wiki: "Drapefly"
},
citadelBatLarge: {
gameName: "Drapelord",
databaseName: "Citadel Bat Large",
name: "Drapelord (4)",
spoiler: "East Memorium",
killRequire: "4",
wiki: "Drapelord"
},
miteHeavy: {
gameName: "Drapemite",
databaseName: "Mite Heavy",
name: "Drapemite (20)",
spoiler: "Underworks and Slab",
killRequire: "20",
wiki: "Drapemite"
},
understoreMiteGiant: {
gameName: "Giant Drapemite",
databaseName: "Understore Mite Giant",
name: "Giant Drapemite (6)",
spoiler: "High Halls",
killRequire: "6",
wiki: "Giant+Drapemite"
},
understoreSmall: {
gameName: "Underworker",
databaseName: "Understore Small",
name: "Underworker (15)",
spoiler: "Underworks ",
killRequire: "15",
wiki: "Underworker"
},
pilgrim03Understore: {
gameName: "Underscrub",
databaseName: "Pilgrim 03 Understore",
name: "Underscrub (20)",
spoiler: "Underworks ",
killRequire: "20",
wiki: "Underscrub"
},
pilgrimStaffUnderstore: {
gameName: "Undersweep",
databaseName: "Pilgrim Staff Understore",
name: "Undersweep (10)",
spoiler: "Underworks ",
killRequire: "10",
wiki: "Undersweep"
},
understorePoker: {
gameName: "Underpoke",
databaseName: "Understore Poker",
name: "Underpoke (25)",
spoiler: "Underworks ",
killRequire: "25",
wiki: "Underpoke"
},
understoreThrower: {
gameName: "Underloft",
databaseName: "Understore Thrower",
name: "Underloft (25)",
spoiler: "Underworks ",
killRequire: "25",
wiki: "Underloft"
},
understoreHeavy: {
gameName: "Undercrank",
databaseName: "Understore Heavy",
name: "Undercrank (4)",
spoiler: "Underworks ",
killRequire: "4",
wiki: "Undercrank"
},
songPilgrim01: {
gameName: "Envoy",
databaseName: "Song Pilgrim 01",
name: "Envoy (20)",
spoiler: "Choral Chambers",
killRequire: "20",
wiki: "Envoy"
},
pilgrim01Song: {
gameName: "Choir Pouncer",
databaseName: "Pilgrim 01 Song",
name: "Choir Pouncer (30)",
spoiler: "Choral Chambers",
killRequire: "30",
wiki: "Choir+Pouncer"
},
pilgrim02Song: {
gameName: "Choir Hornhead",
databaseName: "Pilgrim 02 Song",
name: "Choir Hornhead (15)",
spoiler: "Choral Chambers",
killRequire: "15",
wiki: "Choir+Hornhead"
},
pilgrim03Song: {
gameName: "Choir Bellbearer",
databaseName: "Pilgrim 03 Song",
name: "Choir Bellbearer (25)",
spoiler: "Choral Chambers",
killRequire: "25",
wiki: "Choir+Bellbearer"
},
pilgrim04Song: {
gameName: "Choir Flyer",
databaseName: "Pilgrim 04 Song",
name: "Choir Flyer (20)",
spoiler: "Choral Chambers",
killRequire: "20",
wiki: "Choir+Flyer"
},
pilgrimStomperSong: {
gameName: "Choir Elder",
databaseName: "Pilgrim Stomper Song",
name: "Choir Elder (6)",
spoiler: "Choral Chambers",
killRequire: "6",
wiki: "Choir+Elder"
},
songPilgrim03: {
gameName: "Choristor",
databaseName: "Song Pilgrim 03",
name: "Choristor (25)",
spoiler: "Choral Chambers",
killRequire: "25",
wiki: "Choristor"
},
songReed: {
gameName: "Reed",
databaseName: "Song Reed",
name: "Reed (30)",
spoiler: "Choral Chambers",
killRequire: "30",
wiki: "Reed"
},
songReedGrand: {
gameName: "Grand Reed",
databaseName: "Song Reed Grand",
name: "Grand Reed (12)",
spoiler: "Choral Chambers",
killRequire: "12",
wiki: "Grand+Reed"
},
songHeavySentry: {
gameName: "Choir Clapper",
databaseName: "Song Heavy Sentry",
name: "Choir Clapper (3)",
spoiler: "High Halls",
killRequire: "3",
wiki: "Choir+Clapper"
},
songHandmaiden: {
gameName: "Clawmaiden",
databaseName: "Song Handmaiden",
name: "Clawmaiden (10)",
spoiler: "Choral Chambers and High Halls",
killRequire: "10",
wiki: "Clawmaiden"
},
arboriumKeeper: {
gameName: "Memoria",
databaseName: "Arborium Keeper",
name: "Memoria (2)",
spoiler: "Memorium",
killRequire: "2",
wiki: "Memoria"
},
songAdministrator: {
gameName: "Minister",
databaseName: "Song Administrator",
name: "Minister (15)",
spoiler: "High Halls",
killRequire: "15",
wiki: "Minister"
},
songPilgrimMaestro: {
gameName: "Maestro",
databaseName: "Song Pilgrim Maestro",
name: "Maestro (6)",
spoiler: "High Halls",
killRequire: "6",
wiki: "Maestro"
},
songKnight: {
gameName: "Second Sentinel",
databaseName: "Song Knight",
name: "Second Sentinel (1)",
spoiler: "Final Audience Wish",
killRequire: "1",
wiki: "Second+Sentinel"
},
songThreadedHusk: {
gameName: "Dreg Husk",
databaseName: "Song Threaded Husk",
name: "Dreg Husk (8)",
spoiler: "The Unravelled",
killRequire: "8",
wiki: "Dreg+Husk"
},
songThreadedHuskSpin: {
gameName: "Dregwheel",
databaseName: "Song Threaded Husk Spin",
name: "Dregwheel (8)",
spoiler: "The Unravelled",
killRequire: "8",
wiki: "Dregwheel"
},
songPilgrim02: {
gameName: "Surgeon",
databaseName: "Song Pilgrim 02",
name: "Surgeon (3)",
spoiler: "Whiteward, specifically the Balm for the Wounded wish",
killRequire: "3",
wiki: "Surgeon"
},
songCreeper: {
gameName: "Mortician",
databaseName: "Song Creeper",
name: "Mortician (10)",
spoiler: "Whiteward",
killRequire: "10",
wiki: "Mortician"
},
conductorBoss: {
gameName: "The Unravelled",
databaseName: "Conductor Boss",
name: "The Unravelled (1)",
spoiler: "Whiteward, south-west, requires Surgeon's Key",
killRequire: "1",
wiki: "The+Unravelled"
},
understoreAutomaton: {
gameName: "Cogwork Underfly",
databaseName: "Understore Automaton",
name: "Cogwork Underfly (25)",
spoiler: "Underworks",
killRequire: "25",
wiki: "Cogwork+Underfly"
},
understoreAutomatonEX: {
gameName: "Cogwork Hauler",
databaseName: "Understore Automaton EX",
name: "Cogwork Hauler (12)",
spoiler: "Underworks",
killRequire: "12",
wiki: "Cogwork+Hauler"
},
songAutomatonGoomba: {
gameName: "Cogwork Crawler",
databaseName: "Song Automaton Goomba",
name: "Cogwork Crawler (15)",
spoiler: "Cogwork Core",
killRequire: "15",
wiki: "Cogwork+Crawler"
},
songAutomatonFly: {
gameName: "Cogworker",
databaseName: "Song Automaton Fly",
name: "Cogworker (15)",
spoiler: "Choral Chambers",
killRequire: "15",
wiki: "Cogworker"
},
songAutomatonFlySpike: {
gameName: "Cogwork Spine",
databaseName: "Song Automaton Fly Spike",
name: "Cogwork Spine (10)",
spoiler: "Choral Chambers",
killRequire: "10",
wiki: "Cogwork+Spine"
},
songAutomaton01: {
gameName: "Cogwork Choirbug",
databaseName: "Song Automaton 01",
name: "Cogwork Choirbug (20)",
spoiler: "Cogwork Core",
killRequire: "20",
wiki: "Cogwork+Choirbug"
},
songAutomaton02: {
gameName: "Cogwork Cleanser",
databaseName: "Song Automaton 02",
name: "Cogwork Cleanser (12)",
spoiler: "Cogwork Core",
killRequire: "12",
wiki: "Cogwork+Cleanser"
},
songAutomatonShield: {
gameName: "Cogwork Defender",
databaseName: "Song Automaton Shield",
name: "Cogwork Defender (8)",
spoiler: "Cogwork Core",
killRequire: "8",
wiki: "Cogwork+Defender"
},
songAutomatonBall: {
gameName: "Cogwork Clapper",
databaseName: "Song Automaton Ball",
name: "Cogwork Clapper (1)",
spoiler: "southeast room in Cogwork Core",
killRequire: "1",
wiki: "Cogwork+Clapper"
},
clockworkDancer: {
gameName: "Cogwork Dancers",
databaseName: "Clockwork Dancer",
name: "Cogwork Dancers (1)",
spoiler: "Cogwork Core",
killRequire: "1",
wiki: "Cogwork+Dancers"
},
songScholarAcolyte: {
gameName: "Vaultborn",
databaseName: "Song Scholar Acolyte",
name: "Vaultborn (20)",
spoiler: "Whispering Vaults",
killRequire: "20",
wiki: "Vaultborn"
},
lightbearer: {
gameName: "Lampbearer",
databaseName: "Lightbearer",
name: "Lampbearer (20)",
spoiler: "Whispering Vaults",
killRequire: "20",
wiki: "Lampbearer"
},
scrollkeeper: {
gameName: "Scrollreader",
databaseName: "Scrollkeeper",
name: "Scrollreader (15)",
spoiler: "Whispering Vaults",
killRequire: "15",
wiki: "Scrollreader"
},
scholar: {
gameName: "Vaultkeeper",
databaseName: "Scholar",
name: "Vaultkeeper (10)",
spoiler: "Whispering Vaults",
killRequire: "10",
wiki: "Vaultkeeper"
},
trobbio: {
gameName: "Trobbio",
databaseName: "Trobbio",
name: "Trobbio (1)",
spoiler: "The Stage between Choral Chambers and Whispering Vaults",
killRequire: "1",
wiki: "Trobbio"
},
tormentedTrobbio: {
gameName: "Tormented Trobbio",
databaseName: "Tormented Trobbio",
name: "Tormented Trobbio (1)",
spoiler: "The Stage, Pain, Anguish and Misery wish",
killRequire: "1",
wiki: "Tormented+Trobbio"
},
slabPrisonerLeaperNew: {
gameName: "Penitent",
databaseName: "Slab Prisoner Leaper New",
name: "Penitent (8)",
spoiler: "The Slab",
killRequire: "8",
wiki: "Penitent"
},
slabPrisonerFlyNew: {
gameName: "Puny Penitent",
databaseName: "Slab Prisoner Fly New",
name: "Puny Penitent (6)",
spoiler: "The Slab",
killRequire: "6",
wiki: "Puny+Penitent"
},
slabFlySmallFresh: {
gameName: "Freshfly",
databaseName: "Slab Fly Small Fresh",
name: "Freshfly (20)",
spoiler: "The Wailing Mother Wish",
killRequire: "20",
wiki: "Freshfly"
},
slabFlySmall: {
gameName: "Scabfly",
databaseName: "Slab Fly Small",
name: "Scabfly (15)",
spoiler: "The Slab",
killRequire: "15",
wiki: "Scabfly"
},
slabFlyMid: {
gameName: "Guardfly",
databaseName: "Slab Fly Mid",
name: "Guardfly (10)",
spoiler: "The Slab",
killRequire: "10",
wiki: "Guardfly"
},
slabFlyLarge: {
gameName: "Wardenfly",
databaseName: "Slab Fly Large",
name: "Wardenfly (8)",
spoiler: "The Slab",
killRequire: "8",
wiki: "Wardenfly"
},
slabFlyBroodmother: {
gameName: "Broodmother",
databaseName: "Slab Fly Broodmother",
name: "Broodmother (1)",
spoiler: "Grand Hunt wish",
killRequire: "1",
wiki: "Broodmother"
},
peaksDrifter: {
gameName: "Driftlin",
databaseName: "Peaks Drifter",
name: "Driftlin (20)",
spoiler: "Mount Fay",
killRequire: "20",
wiki: "Driftlin"
},
crystalDrifter: {
gameName: "Mnemonid",
databaseName: "Crystal Drifter",
name: "Mnemonid (10)",
spoiler: "Mount Fay",
killRequire: "10",
wiki: "Mnemonid"
},
crystalDrifterGiant: {
gameName: "Mnemonord",
databaseName: "Crystal Drifter Giant",
name: "Mnemonord (3)",
spoiler: "Mount Fay in Brightvein",
killRequire: "3",
wiki: "Mnemonord"
},
weaverServitor: {
gameName: "Servitor Ignim",
databaseName: "Weaver Servitor",
name: "Servitor Ignim (8)",
spoiler: "Weavenest Atla",
killRequire: "8",
wiki: "Servitor+Ignim"
},
weaverServitorLarge: {
gameName: "Servitor Boran",
databaseName: "Weaver Servitor Large",
name: "Servitor Boran (5)",
spoiler: "Mount Fay",
killRequire: "5",
wiki: "Servitor+Boran"
},
lifebloodFly: {
gameName: "Winged Lifeseed",
databaseName: "Lifeblood Fly",
name: "Winged Lifeseed (8)",
spoiler: "Wormways",
killRequire: "8",
wiki: "Winged+Lifeseed"
},
boneWormBlueBlood: {
gameName: "Plasmid",
databaseName: "Bone Worm BlueBlood",
name: "Plasmid (15)",
spoiler: "Wormways (Act 3)",
killRequire: "15",
wiki: "Plasmid"
},
boneWormBlueTurret: {
gameName: "Plasmidas",
databaseName: "Bone Worm BlueTurret",
name: "Plasmidas (6)",
spoiler: "Wormways (Act 3)",
killRequire: "6",
wiki: "Plasmidas"
},
blueAssistant: {
gameName: "Plasmified Zango",
databaseName: "Blue Assistant",
name: "Plasmified Zango (1)",
spoiler: "Wormways (Act 3)",
killRequire: "1",
wiki: "Plasmified+Zango"
},
lilypadFly: {
gameName: "Leaf Glider",
databaseName: "Lilypad Fly",
name: "Leaf Glider (12)",
spoiler: "Lost Verdania",
killRequire: "12",
wiki: "Leaf+Glider"
},
grassGoomba: {
gameName: "Leaf Roller",
databaseName: "Grass Goomba",
name: "Leaf Roller (10)",
spoiler: "Lost Verdania",
killRequire: "10",
wiki: "Leaf+Roller"
},
hornetDragonfly: {
gameName: "Pendra",
databaseName: "Hornet Dragonfly",
name: "Pendra (10)",
spoiler: "Lost Verdania",
killRequire: "10",
wiki: "Pendra"
},
dragonflyLarge: {
gameName: "Pendragor",
databaseName: "Dragonfly Large",
name: "Pendragor (10)",
spoiler: "Lost Verdania",
killRequire: "10",
wiki: "Pendragor"
},
lilypadTrap: {
gameName: "Nuphar",
databaseName: "Lilypad Trap",
name: "Nuphar (6)",
spoiler: "Lost Verdania",
killRequire: "6",
wiki: "Nuphar"
},
cloverstag: {
gameName: "Cloverstag",
databaseName: "Cloverstag",
name: "Cloverstag (6)",
spoiler: "Lost Verdania",
killRequire: "6",
wiki: "Cloverstag"
},
cloverstagWhite: {
gameName: "Palestag",
databaseName: "Cloverstag White",
name: "Palestag (1)",
spoiler: "Lost Verdania",
killRequire: "1",
wiki: "Palestag"
},
grasshopperChild: {
gameName: "Kindanir",
databaseName: "Grasshopper Child",
name: "Kindanir (10)",
spoiler: "Lost Verdania",
killRequire: "10",
wiki: "Kindanir"
},
grasshopperSlasher: {
gameName: "Verdanir",
databaseName: "Grasshopper Slasher",
name: "Verdanir (10)",
spoiler: "Lost Verdania",
killRequire: "10",
wiki: "Verdanir"
},
grasshopperFly: {
gameName: "Escalion",
databaseName: "Grasshopper Fly",
name: "Escalion (10)",
spoiler: "Lost Verdania",
killRequire: "10",
wiki: "Escalion"
},
cloverDancer: {
gameName: "Clover Dancers",
databaseName: "Clover Dancer",
name: "Clover Dancers (1)",
spoiler: "Lost Verdania",
killRequire: "1",
wiki: "Clover+Dancers"
},
abyssCrawler: {
gameName: "Shadow Creeper",
databaseName: "Abyss Crawler",
name: "Shadow Creeper (16)",
spoiler: "The Abyss",
killRequire: "16",
wiki: "Shadow+Creeper"
},
abyssCrawlerLarge: {
gameName: "Shadow Charger",
databaseName: "Abyss Crawler Large",
name: "Shadow Charger (6)",
spoiler: "The Abyss",
killRequire: "6",
wiki: "Shadow+Charger"
},
gloomfly: {
gameName: "Gloomsac",
databaseName: "Gloomfly",
name: "Gloomsac (15)",
spoiler: "The Abyss",
killRequire: "15",
wiki: "Gloomsac"
},
gloomBeast: {
gameName: "Gargant Gloom",
databaseName: "Gloom Beast",
name: "Gargant Gloom (4)",
spoiler: "The Abyss",
killRequire: "4",
wiki: "Gargant+Gloom"
},
voidTendrils: {
gameName: "Void Tendrils",
databaseName: "Void Tendrils",
name: "Void Tendrils (1)",
spoiler: "Weavenest Absolom, in the lower eastern section of the Abyss",
killRequire: "1",
wiki: "Void+Tendrils"
},
blackThreadCore: {
gameName: "Void Mass",
databaseName: "Black Thread Core",
name: "Void Mass (8)",
spoiler: "Around the map (Act 3)",
killRequire: "8",
wiki: "Void+Mass"
},
whitePalaceFly: {
gameName: "Wingmould",
databaseName: "White Palace Fly",
name: "Wingmould (10)",
spoiler: "Red Memory",
killRequire: "10",
wiki: "Wingmould"
},
centipedeTrap: {
gameName: "Garpid",
databaseName: "Centipede Trap",
name: "Garpid (30)",
spoiler: "Secret area above The Cradle",
killRequire: "30",
wiki: "Garpid"
},
spikeLazyFlyer: {
gameName: "Imoba",
databaseName: "Spike Lazy Flyer",
name: "Imoba (4)",
spoiler: "Secret area above The Cradle",
killRequire: "4",
wiki: "Imoba"
},
surfaceScuttler: {
gameName: "Skrill",
databaseName: "Surface Scuttler",
name: "Skrill (10)",
spoiler: "The ruins of The Cradle",
killRequire: "10",
wiki: "Skrill"
},
giantCentipede: {
gameName: "Bell Eater",
databaseName: "Giant Centipede",
name: "Bell Eater (1)",
spoiler: "Any Bellway Station in beginning of Act 3 ",
killRequire: "1",
wiki: "Bell+Eater"
},
giantFlea: {
gameName: "Huge Flea",
databaseName: "Giant Flea",
name: "Huge Flea (1)",
spoiler: "Memorium",
killRequire: "1",
wiki: "Huge+Flea"
},
garmond: {
gameName: "Lost Garmond",
databaseName: "Garmond",
name: "Lost Garmond (1)",
spoiler: "Hero's Call wish",
killRequire: "1",
wiki: "Lost+Garmond"
},
pinstressBoss: {
gameName: "Pinstress",
databaseName: "Pinstress Boss",
name: "Pinstress (1)",
spoiler: "Fatal Resolve wish",
killRequire: "1",
wiki: "Pinstress"
},
spinnerBoss: {
gameName: "Widow",
databaseName: "Spinner Boss",
name: "Widow (1)",
spoiler: "Bellhart above the town",
killRequire: "1",
wiki: "Widow"
},
firstWeaver: {
gameName: "First Sinner",
databaseName: "First Weaver",
name: "First Sinner (1)",
spoiler: "the Slab, require Key of Apostate",
killRequire: "1",
wiki: "First+Sinner"
},
phantom: {
gameName: "Phantom",
databaseName: "Phantom",
name: "Phantom (1)",
spoiler: "Bilewater through The Mist in Sinner's Road",
killRequire: "1",
wiki: "Phantom"
},
lace: {
gameName: "Lace",
databaseName: "Lace",
name: "Lace (2)",
spoiler: "Deep Docks and the Cradle",
killRequire: "2",
wiki: "Lace"
},
silkBoss: {
gameName: "Grand Mother Silk",
databaseName: "Silk Boss",
name: "Grand Mother Silk (1)",
spoiler: "the Cradle",
killRequire: "1",
wiki: "Grand+Mother+Silk"
},
lostLace: {
gameName: "Lost Lace",
databaseName: "Lost Lace",
name: "Lost Lace (1)",
spoiler: "The Abyss, require Everbloom",
killRequire: "1",
wiki: "Lost+Lace"
}
}
},
/* ################### Flea Save ################### */
flea: {
h2: "Flea",
id: "hk-flea",
description: "Flea that belong to Flea Caravan. Help them and the caravan will reward you. they dont count as part of the",
percent: 0,
maxPercent: 30,
entries: {
SavedFlea_Bone_06: {
name: "#1 The Marrow",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#themarrow"
},
SavedFlea_Dock_16: {
name: "#2 Deep Docks",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#deepdocks"
},
SavedFlea_Bone_East_05: {
name: "#3 Deep Docks",
spoiler: "Swift Step",
wiki: "All+Lost+Flea+Locations#deepdocks"
},
SavedFlea_Dock_03d: {
name: "#4 Deep Docks",
spoiler: "Clawline",
wiki: "All+Lost+Flea+Locations#deepdocks"
},
SavedFlea_Ant_03: {
name: "#5 Hunter's March",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#huntersmarch"
},
SavedFlea_Bone_East_17b: {
name: "#6 Far Fields",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#farfields"
},
SavedFlea_Bone_East_10_Church: {
name: "#7 Far Fields",
spoiler: "Require Drifter's Cloak and Cling Grip",
wiki: "All+Lost+Flea+Locations#farfields"
},
SavedFlea_Crawl_06: {
name: "#8 Wormways",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#wormways"
},
SavedFlea_Greymoor_15b: {
name: "#9 Greymoor",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#crawlake"
},
SavedFlea_Greymoor_06: {
name: "#10 Greymoor",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#greymoor"
},
CaravanLechReturnedToCaravan: {
name: "#11 Greymoor (Kratt)",
spoiler: "Nothing required",
wiki: "Kratt"
},
SavedFlea_Belltown_04: {
name: "#12 Bellhart",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#bellhart"
},
SavedFlea_Shellwood_03: {
name: "#13 Shellwood",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#shellwood"
},
SavedFlea_Coral_35: {
name: "#14 Blasted Steps",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#blastedsteps"
},
SavedFlea_Dust_12: {
name: "#15 Sinner's Road",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#sinnersroad"
},
SavedFlea_Shadow_28: {
name: "#16 Bilewater",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#bilewater"
},
SavedFlea_Dust_09: {
name: "#17 Bilewater",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#bilewater"
},
SavedFlea_Shadow_10: {
name: "#18 Bilewater",
spoiler: "Require Cling Grip",
wiki: "All+Lost+Flea+Locations#bilewater"
},
SavedFlea_Under_23: {
name: "#19 Underworks",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#wispthicket"
},
SavedFlea_Under_21: {
name: "#20 Underworks",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#underworks"
},
SavedFlea_Song_14: {
name: "#21 Choral Chambers",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#choralchambers"
},
SavedFlea_Song_11: {
name: "#22 Choral Chambers",
spoiler: "Drifter's Cloak (or needle-bounce)",
wiki: "All+Lost+Flea+Locations#choralchambers"
},
SavedFlea_Library_09: {
name: "#23 Choral Chambers",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#songclave"
},
tamedGiantFlea: {
name: "#24 Memorium",
spoiler: "Defeat the Huge Flea in the top",
wiki: "All+Lost+Flea+Locations#memorium"
},
SavedFlea_Slab_Cell: {
name: "#25 The Slab",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#theslab"
},
SavedFlea_Slab_06: {
name: "#26 The Slab",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#theslab"
},
SavedFlea_Peak_05c: {
name: "#27 Mount Fay",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#mountfay"
},
SavedFlea_Coral_24: {
name: "#28 Sands of Karak",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#sandsofkarak"
},
MetTroupeHunterWild: {
name: "#29 Putrified Ducts (Vog)",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#putrifiedducts"
},
SavedFlea_Library_01: {
name: "#30 Whispering Vaults",
spoiler: "Nothing required",
wiki: "All+Lost+Flea+Locations#whisperingvaults"
}
}
}
/********************************************************************************************************* */
/********************************************************************************************************* */
/********************************************************************************************************* */
/********************************************************************************************************* */
/********************************************************************************************************* */
/********************************************************************************************************* */
/********************************************************************************************************* */
/* ################### Bosses ################### */
/*bosses: {
h2: "Bosses",
id: "hk-bosses",
description: `Each boss from this list provides 1% Game Completion.
Note: There are many other bosses in the game. Only about ~half of the total bosses count directly towards % Game Completion stat. P1-P4 = difficulty level and which Pantheon a given boss unlocks.`,
percent: 0,
maxPercent: 14,
entries: {
// killedBigFly
bossGruzMother: {
name: "P1 Gruz Mother",
spoiler: "Forgotten Crossroads, lower right area",
id: "Battle Scene",
sceneName: "Crossroads_04",
wiki: "Gruz_Mother"
},
falseKnightDefeated: {
name: "P1 False Knight",
spoiler: "Forgotten Crossroads, middle area map symbol",
wiki: "False_Knight"
}, // "Battle Scene" - "Crossroads_10" ?
hornet1Defeated: {
name: "P1 Hornet Protector",
spoiler: "Greenpath, above Stag Station",
wiki: "Hornet_Protector"
},
defeatedDungDefender: {
name: "P1 Dung Defender",
spoiler: "Royal Waterways, right area",
wiki: "Dung_Defender"
},
// killedMawlek
bossBroodingMawlek: {
name: "P1 Brooding Mawlek",
spoiler: "Forgotten Crossroads, use Mantis Claw",
id: "Battle Scene",
sceneName: "Crossroads_09",
wiki: "Brooding_Mawlek"
},
mageLordDefeated: {
name: "P2 Soul Master",
spoiler: "City of Tears: Soul Sanctum",
wiki: "Soul_Master"
},
defeatedMantisLords: {
name: "P2 Mantis Lords",
spoiler: "Fungal Wastes: Mantis Village",
wiki: "Mantis_Lords"
},
// "Battle Scene" - "Deepnest_32" ?
killedMimicSpider: {
name: "P2 Nosk",
spoiler: "Deepnest, use Crystal Heart, left of Hot Spring",
wiki: "Nosk"
},
killedInfectedKnight: {
name: "P2 Broken Vessel",
spoiler: "Ancient Basin, lower left, use Crystal Heart",
wiki: "Broken_Vessel"
},
collectorDefeated: {
name: "P3 The Collector",
spoiler: "City of Tears: Tower of Love",
wiki: "Collector"
},
defeatedMegaJelly: {
name: "P3 Uumuu",
spoiler: "Fog Canyon: Teacher's Archives",
wiki: "Uumuu"
},
hornetOutskirtsDefeated: {
name: "P3 Hornet Sentinel",
spoiler: "Kingdom's Edge, requires Monarch Wings",
wiki: "Hornet_Sentinel"
},
// "Battle Scene" - "Fungus3_23" ?
killedTraitorLord: {
name: "P4 Traitor Lord",
spoiler: "Queen's Gardens, requires Shade Cloak",
wiki: "Traitor_Lord"
},
killedBlackKnight: {
name: "P4 Watcher Knights",
spoiler: "City of Tears: Watcher's Spire",
wiki: "Watcher_Knight"
}
},
},*/
/* ################ Nail Arts ################### */
/*nailArts: {
h2: "Nail Arts",
id: "hk-nailarts",
description: "Advanced weapon combat techniques. Each new technique learned provides 1% Game Completion.",
percent: 0,
maxPercent: 3,
entries: {
// this is correct - somehow Team Cherry switched the names here
hasDashSlash: {
name: "Great Slash",
spoiler: "Nailmaster Sheo: Greenpath",
wiki: "Great_Slash"
},
// this is correct - somehow Team Cherry switched the names here
hasUpwardSlash: {
name: "Dash Slash",
spoiler: "Nailmaster Oro: Kingdom's Edge, 800 Geo",
wiki: "Dash_Slash"
},
hasCyclone: {
name: "Cyclone Slash",
spoiler: "Nailmaster Mato: Howling Cliffs",
wiki: "Cyclone_Slash"
},
},
},*/
/* ################ Dream Nail and Essence ################### */
/*dreamNail: {
h2: "Dream Nail and Essence",
id: "hk-dreamnail",
description: "A special dream Ability. Can collect Essence and enter dreams. Each milestone here will provide 1% Game Completion.",
percent: 0,
maxPercent: 3,
entries: {
hasDreamNail: {
name: "Dream Nail Acquired",
spoiler: "Resting Grounds",
wiki: "Dream_Nail"
},
dreamNailUpgraded: {
name: "Awoken Dream Nail",
spoiler: "Seer: 1800 Essence",
wiki: "Dream_Nail#Awoken_Dream_Nail"
},
mothDeparted: {
name: "Hear the Seer's Final Words",
spoiler: "Seer: 2400 Essence",
wiki: "Seer"
}
},
},*/
/* ################ Warrior Dreams ################### */
/*warriorDreams: {
h2: "Warrior Dreams",
id: "hk-warriordreams",
description: `Special kind of bosses in Hollow Knight, which provide Essence and 1% Game Completion after defeat.
Note: The Essence must be collected before each boss will provide 1% Game Completion. Uncollected Essence will be marked as not completed.`,
percent: 0,
maxPercent: 7,
entries: {
aladarSlugDefeated: {
name: "P1 Gorb",
spoiler: "Howling Cliffs, top middle area",
wiki: "Gorb"
},
xeroDefeated: {
name: "P2 Xero",
spoiler: "Resting Grounds, below Crystal Peak drop",
wiki: "Xero"
},
mumCaterpillarDefeated: {
name: "P2 Marmu",
spoiler: "Queen's Gardens, left of Stag Station",
wiki: "Marmu"
},
elderHuDefeated: {
name: "P3 Elder Hu",
spoiler: "Fungal Wastes, above acid bridge",
wiki: "Elder_Hu"
},
galienDefeated: {
name: "P3 Galien",
spoiler: "Deepnest, below Failed Tramway",
wiki: "Galien"
},
noEyesDefeated: {
name: "P4 No Eyes",
spoiler: "Greenpath: Stone Sanctuary, requires Lumafly Lantern",
wiki: "No_Eyes"
},
markothDefeated: {
name: "P4 Markoth",
spoiler: "Kingdom's Edge, requires Shade Cloak",
wiki: "Markoth"
},
},
},*/
/* ################ Dreamers ################### */
/*dreamers: {
h2: "Dreamers",
id: "hk-dreamers",
description: "Each Dreamer will provide 1% Game Completion.",
percent: 0,
maxPercent: 3,
entries: {
lurienDefeated: {
name: "Lurien the Watcher",
spoiler: "City of Tears: Watcher's Spire",
wiki: "Lurien"
},
monomonDefeated: {
name: "Monomon the Teacher",
spoiler: "Fog Canyon: Teacher's Archives",
wiki: "Monomon"
},
hegemolDefeated: {
name: "Herrah the Beast",
spoiler: "Deepnest: Distant Village",
wiki: "Herrah"
}
},
},*/
/* ################ Colosseum of Fools ################### */
/*colosseum: {
h2: "Colosseum of Fools",
id: "hk-colosseum",
description: "Completing each Trial in the Colosseum provides 1% Game Completion. This section sums up the original 100% Game Completion Percentage from Hollow Knight in 2017 (without Content Packs).",
percent: 0,
maxPercent: 3,
entries: {
colosseumBronzeCompleted: {
name: "Trial of the Warrior",
spoiler: "Kingdom's Edge: top area, Little Fool: 100 Geo",
wiki: "Trial_of_the_Warrior"
},
colosseumSilverCompleted: {
name: "Trial of the Conqueror",
spoiler: "Little Fool: 450 Geo + Warrior completed",
wiki: "Trial_of_the_Conqueror"
},
colosseumGoldCompleted: {
name: "Trial of the Fool",
spoiler: "Little Fool: 800 Geo + Conqueror completed",
wiki: "Trial_of_the_Fool"
},
},
},*/
/* ################ Grimm Troupe Content Pack ################### */
/*grimmTroupe: {
h2: "Grimm Troupe Content Pack",
id: "hk-grimmtroupe",
description: `The first Content Pack. Released October 26th, 2017 (1.2.1.0 Game Update). It added additional +6% to max Game Completion Percentage.
Note: It requires making a choice, but no matter what you will choose, you will still get the same +1%.`,
percent: 0,
maxPercent: 6,
entries: {
gotCharm_37: {
name: "Charm #37 Sprintmaster",
spoiler: "Sly: 400 Geo + Shopkeeper's Key",
wiki: "Sprintmaster"
},
gotCharm_38: {
name: "Charm #38 Dreamshield",
spoiler: "Resting Grounds, go left below Seer",
wiki: "Dreamshield"
},
gotCharm_39: {
name: "Charm #39 Weaversong",
spoiler: "Deepnest: Weaver's Den",
wiki: "Weaversong"
},
gotCharm_40: {
name: "Charm #40 Grimmchild or Carefree Melody",
nameDefault: "Charm #40 Grimmchild or Carefree Melody",
nameGrimmchildP1: "Charm #40: Grimmchild (Phase 1)",
nameGrimmchildP2: "Charm #40: Grimmchild (Phase 2)",
nameGrimmchildP3: "Charm #40: Grimmchild (Phase 3)",
nameGrimmchildP4: "Charm #40: Grimmchild (Phase 4)",
nameCarefreeMelody: "Charm #40: Carefree Melody",
spoiler: "Dirtmouth",
spoilerDefault: "Dirtmouth",
spoilerGrimmchildP1: "Collect 3 flames",
spoilerGrimmchildP2: "Collect 3 flames",
spoilerGrimmchildP3: "Collect 3 flames",
spoilerGrimmchildP4: "Completed the Ritual",
spoilerCarefreeMelody: "Banished Grimm Troupe",
wiki: "Grimmchild",
wikiDefault: "Grimmchild",
wikiGrimmchild: "Grimmchild",
wikiCarefreeMelody: "Carefree_Melody"
},
killedGrimm: {
name: "P3 Troupe Master Grimm",
spoiler: "Dirtmouth, collect 6 flames",
wiki: "Grimm"
},
grimmChildLevel: {
name: "Complete Ritual or Banish Troupe",
nameDefault: "Complete Ritual or Banish Troupe",
nameNightmareKing: "Grimm Troupe Choice: Nightmare King",
nameBanishment: "Grimm Troupe Choice: Banishment",
spoiler: "One choice per save file: Dirtmouth or Howling Cliffs",
spoilerDefault: "One choice per save file: Dirtmouth or Howling Cliffs",
spoilerNightmareKing: "Completed the Ritual",
spoilerBanishment: "Banished Grimm Troupe",
wiki: "Grimm_Troupe_(Quest)",
wikiDefault: "Grimm_Troupe_(Quest)",
wikiNightmareKing: "Nightmare_King_Grimm",
wikiBanishment: "Nymm",
}
},
},*/
/* ################ Lifeblood Content Pack ################### */
/*lifeblood: {
h2: "Lifeblood Content Pack",
id: "hk-lifeblood",
description: `The second Content Pack. Released April 20th, 2018 (1.3.1.5 Game Update). Among many quality changes, it added one new boss, which increased the max Game Completion Percentage by +1%.`,
percent: 0,
maxPercent: 1,
entries: {
killedHiveKnight: {
name: "P3 Hive Knight",
spoiler: "The Hive, guards Hiveblood charm",
wiki: "Hive_Knight"
}
},
},*/
/* ################ Godmaster Content Pack ################### */
/*godmaster: {
h2: "Godmaster Content Pack",
id: "hk-godmaster",
description: `The third Content Pack. Released August 23rd, 2018 (1.4.2.4 Game Update). It added additional +5% to max Game Completion Percentage (up to a total of 112%).`,
percent: 0,
maxPercent: 5,
entries: {
hasGodfinder: {
name: "Godtuner",
spoiler: "Royal Waterways: Junk Pit, requires Simple Key",
wiki: "Godtuner"
},
// ########## Godmaster doors ##########
pantheonMaster: {
name: "P1 Pantheon of the Master",
spoiler: "Godhome: defeat P1 bosses",
wiki: "Pantheon_of_the_Master",
property: "bossDoorStateTier1"
},
pantheonArtist: {
name: "P2 Pantheon of the Artist",
spoiler: "Godhome: defeat P2 bosses",
wiki: "Pantheon_of_the_Artist",
property: "bossDoorStateTier2"
},
pantheonSage: {
name: "P3 Pantheon of the Sage",
spoiler: "Godhome: defeat P3 bosses",
wiki: "Pantheon_of_the_Sage",
property: "bossDoorStateTier3"
},
pantheonKnight: {
name: "P4 Pantheon of the Knight",
spoiler: "Godhome: complete P1, P2 and P3",
wiki: "Pantheon_of_the_Knight",
property: "bossDoorStateTier4"
}
},
},*/
/* ################ Essentials % -> Collectibles ################### */
/*essentialsCollectibles: {
h2: "Game Completion % Essentials – Collectibles",
id: "hk-essentials-collectibles",
description: "Collectibles that don't count directly towards 112% Game Completion, but are required to achieve full 112%.",
entries: {
grubsCollected: {
name: "Grubs Rescued",
spoiler: "46 Grubs total",
max: 46,
maxDefault: 46,
wiki: "Grub"
},
grubRewards: {
name: "Grubfather Rewards Awarded",
spoiler: "46 Rewards total",
max: 46,
maxDefault: 46,
wiki: "Grub#Rewards_and_locations"
},
charmsOwned: {
name: "Charms Owned",
spoiler: "40 Charms total, useful for Salubra Notches",
max: 40,
maxDefault: 40,
wiki: "Category:Charms#List_of_Charms"
},
dreamOrbs: {
name: "Essence Collected",
spoiler: "Dream Nail (2400 for completion)",
max: 2400,
maxDefault: 2400,
wiki: "Dream_Nail#Essence"
},
hasLantern: {
name: "Lumafly Lantern",
spoiler: "Sly: 1800 Geo",
wiki: "Lumafly_Lantern"
},
shopkeeperKey: {
name: "Shopkeeper's Key",
spoiler: "Crystal Peak, below Quirrel location",
wiki: "Shopkeeper's_Key"
},
elegantKey: {
name: "Elegant Key",
spoiler: "Sly: 800 Geo + Shopkeeper's Key",
wiki: "Elegant_Key"
},
loveKey: {
name: "Love Key",
spoiler: "Queen's Gardens, near Fungal Wastes",
wiki: "Love_Key"
},
slySimpleKey: {
name: "Simple Key #1",
spoiler: "Sly: 950 Geo",
wiki: "Simple_Key"
},
simpleKeyCityOfTears: {
name: "Simple Key #2",
spoiler: "City of Tears, below left Stag Station",
id: "Shiny Item",
sceneName: "Ruins1_17",
wiki: "Simple_Key#How_to_Acquire"
},
simpleKeyAncientBasin: {
name: "Simple Key #3",
spoiler: "Ancient Basin, below Broken Vessel",
id: "Shiny Item Stand",
sceneName: "Abyss_20",
wiki: "Simple_Key#How_to_Acquire"
},
gotLurkerKey: {
name: "Simple Key #4",
spoiler: "Colosseum of Fools: Pale Lurker's Retreat",
wiki: "Simple_Key#How_to_Acquire"
},
paleOreAncientBasin: {
name: "Pale Ore #1",
spoiler: "Ancient Basin, left of Tram Station",
id: "Battle Scene Ore",
sceneName: "Abyss_17",
wiki: "Pale_Ore"
},
paleOreSeer: {
name: "Pale Ore #2",
spoiler: "Seer: 300 Essence",
wiki: "Pale_Ore#How_to_Acquire"
},
paleOreCrystalPeak: {
name: "Pale Ore #3",
spoiler: "Top of Crystal Peak, use Monarch Wings",
id: "Shiny Item Stand",
sceneName: "Mines_34",
wiki: "Pale_Ore#How_to_Acquire"
},
paleOreDeepnest: {
name: "Pale Ore #4",
spoiler: "Deepnest, Nosk reward",
id: "Shiny Item Stand",
sceneName: "Deepnest_32",
wiki: "Pale_Ore#How_to_Acquire"
},
paleOreGrubfather: {
name: "Pale Ore #5",
spoiler: "Grubfather: 31 Grubs rescued",
id: "Shiny Item Ore",
sceneName: "Crossroads_38",
wiki: "Pale_Ore#How_to_Acquire"
},
paleOreColosseum: {
name: "Pale Ore #6",
spoiler: "Colosseum of Fools: Trial of the Conqueror",
id: "Shiny Item",
sceneName: "Room_Colosseum_Silver",
wiki: "Pale_Ore#How_to_Acquire"
},
hasTramPass: {
name: "Tram Pass",
spoiler: "Deepnest: Failed Tramway",
wiki: "Tram_Pass"
},
gotQueenFragment: {
name: "White Fragment: Queen",
spoiler: "White Lady: Queen's Gardens",
wiki: "Kingsoul#How_to_Acquire"
},
gotKingFragment: {
name: "White Fragment: King",
spoiler: "Pale King: White Palace",
wiki: "Kingsoul#How_to_Acquire"
},
},
grubsList: ["Crossroads_35", "Crossroads_03", "Crossroads_05", "Crossroads_48", "Crossroads_31", "Fungus1_06", "Fungus1_07", "Fungus1_21", "Fungus1_28", "Fungus2_18", "Ruins1_05", "Mines_04", "Mines_03", "Mines_31", "Mines_19", "Ruins1_32", "RestingGrounds_10", "Ruins_House_01", "Mines_35", "Mines_16", "Waterways_04", "Waterways_13", "Abyss_19", "Abyss_17", "Mines_24", "Fungus1_13", "Fungus3_47", "Fungus3_10", "Fungus3_48", "Fungus3_22", "Ruins2_07", "Ruins2_11", "Ruins2_11", "Ruins2_11", "Deepnest_East_11", "Deepnest_East_14", "Fungus2_20", "Ruins2_03", "Deepnest_36", "Deepnest_03", "Deepnest_31", "Deepnest_39", "Deepnest_Spider_Town", "Waterways_14", "Hive_03", "Hive_04"],
},*/
/* ################ Essentials % -> Stag Stations ################### */
/*essentialsStagStations: {
h2: "Game Completion % Essentials – Stag Stations",
id: "hk-essentials-stag-stations",
description: `Opened Stag Stations don't count directly towards 112% Game Completion, but are required to achieve full 112% by discovering the Stag Nest for the Vessel Fragment.`,
entries: {
openedTownBuilding: {
name: "Stag Station: Dirtmouth",
spoiler: "Opened from inside after travelling",
wiki: "Dirtmouth"
},
openedCrossroads: {
name: "Stag Station: Forgotten Crossroads",
spoiler: "50 Geo: Right middle-bottom area",
wiki: "Forgotten_Crossroads"
},
openedGreenpath: {
name: "Stag Station: Greenpath",
spoiler: "140 Geo: Top middle area, below Hornet",
wiki: "Greenpath"
},
openedFungalWastes: {
name: "Stag Station: Queen's Station",
spoiler: "120 Geo: Fungal Wastes, near Fog Canyon",
wiki: "Fungal_Wastes#Sub-area:_Queen.27s_Station"
},
openedRuins1: {
name: "Stag Station: City Storerooms",
spoiler: "200 Geo: City of Tears, top left area",
wiki: "City_of_Tears#City_Storerooms"
},
openedRestingGrounds: {
name: "Stag Station: Resting Grounds",
spoiler: "0 Geo: Right middle area, near Seer",
wiki: "Resting_Grounds"
},
openedRuins2: {
name: "Stag Station: King's Station",
spoiler: "300 Geo: City of Tears, far right area",
wiki: "City_of_Tears#Sub-area:_King.27s_Station"
},
openedRoyalGardens: {
name: "Stag Station: Queen's Gardens",
spoiler: "200 Geo: Middle area, near Traitor's Grave",
wiki: "Queen's_Gardens"
},
openedDeepnest: {
name: "Stag Station: Distant Village",
spoiler: "250 Geo: Deepnest, far left area",
wiki: "Deepnest#Sub-area:_Distant_Village"
},
openedHiddenStation: {
name: "Stag Station: Hidden Station",
spoiler: "300 Geo: Ancient Basin: Palace Grounds",
wiki: "Ancient_Basin#Sub-Area:_Palace_Grounds"
},
openedStagNest: {
name: "Stag Station: Stag Nest",
spoiler: "Open all stations: Howling Cliffs, top area",
wiki: "Howling_Cliffs#Sub-area:_Stag_Nest"
},
stagStationsOpened: {
name: "Stag Stations Opened",
spoiler: "11 Stag Stations total including Dirtmouth",
max: 11,
maxDefault: 11,
wiki: "Fast_Travel_(Hollow_Knight)#Locations_and_Prices"
},
},
},*/
/* ################ Essentials % -> World Interactions ################### */
/*essentialsWorldInteractions: {
h2: "Game Completion % Essentials – World Interactions",
id: "hk-essentials-world-interactions",
description: `Certain interactions the player can make with NPCs in the game or world objects which don't count directly towards 112% Game Completion, but are required to achieve full 112%.`,
entries: {
slyRescued: {
name: "Sly Rescued",
spoiler: "Forgotten Crossroads, near Gruz Mother",
wiki: "Sly"
},
brettaRescued: {
name: "Bretta Rescued",
spoiler: "Fungal Wastes, near Dashmaster charm statue",
wiki: "Bretta"
},
paidLegEater: {
name: "Paid to See Something Nice",
spoiler: "Fungal Wastes, Leg Eater: 86 Geo",
wiki: "Leg_Eater#In-game_events"
},
gaveSlykey: {
name: "Shopkeeper's Key Returned to Sly",
spoiler: "Dirtmouth, Sly's Shop",
wiki: "Sly"
},
mantisVillageFloorLever: {
name: "Mantis Village Floor Lever",
spoiler: "Fungal Wastes, right of Mantis Claw",
id: "Mantis Lever (1)",
sceneName: "Fungus2_14",
wiki: "Fungal_Wastes#Sub-area:_Mantis_Village"
},
xunFlowerGiven: {
name: "Delicate Flower Accepted",
spoiler: "Resting Grounds: listen to Grey Mourner",
wiki: "Grey_Mourner#In-game_events"
},
waterwaysAcidDrained: {
name: "Acid Drained",
spoiler: "Royal Waterways, lever after Dung Defender",
wiki: "Royal_Waterways#Sub-area:_Isma.27s_Grove"
},
openedMageDoor_v2: {
name: "Elegant Door Unlocked",
spoiler: "City of Tears: Soul Sanctum, requires Elegant Key",
wiki: "Elegant_Key#Use"
},
openedLoveDoor: {
name: "Tower of Love Door Unlocked",
spoiler: "City of Tears, requires Love Key",
wiki: "City_of_Tears#Sub-area:_Tower_of_Love"
},
abyssGateOpened: {
name: "The Abyss Gate Opened",
spoiler: "Ancient Basin, requires King's Brand",
wiki: "Ancient_Basin#Description"
},
blueVineDoor: {
name: "Lifeblood Door Opened",
spoiler: "The Abyss, requires 14–15+ Lifeblood Masks",
wiki: "Lifeblood_Core#How_to_Acquire"
},
nightmareLanternLit: {
name: "Nightmare Lantern Lit",
spoiler: "Howling Cliffs, corpse of a large bug",
wiki: "Howling_Cliffs#Nightmare_Lantern_Chamber"
},
paleLurkersRetreat: {
name: "Pale Lurker's Retreat",
spoiler: "Colosseum of Fools, Room above Bench, break wall",
id: "Breakable Wall_Silhouette",
sceneName: "Room_Colosseum_Spectate",
wiki: "Colosseum_of_Fools#Description"
},
godseekerUnlocked: {
name: "Godseeker Cocoon Unlocked",
spoiler: "Royal Waterways: Junk Pit",
wiki: "Royal_Waterways#Sub-area:_Junk_Pit"
},
fountainGeo: {
name: "Geo in Fountain",
spoiler: "Ancient Basin: 3000 Geo maximum",
max: 3000,
maxDefault: 3000,
wiki: "Ancient_Basin#Description"
},
},
},*/
/* ################ Essentials % -> Bosses ################### */
/*essentialsBosses: {
h2: "Game Completion % Essentials – Bosses",
id: "hk-essentials-bosses",
description: "Bosses that don't count directly towards 112% Game Completion, but are required to defeat to achieve full 112%.",
entries: {
killedMegaMossCharger: {
name: "P1 Massive Moss Charger",
spoiler: "Greenpath, near Fog Canyon",
wiki: "Massive_Moss_Charger"
},
pantheonSoulWarrior: {
name: "P1 Soul Warrior",
spoiler: "City of Tears: Soul Sanctum",
id: "Battle Scene v2",
sceneName: "Ruins1_23",
wiki: "Soul_Warrior#Location"
},
shadeSoulWarrior: {
name: "Shade Soul Warrior",
spoiler: "City of Tears: Soul Sanctum, use Elegant Key",
id: "Battle Scene v2",
sceneName: "Ruins1_31",
wiki: "Shade_Soul#How_to_Acquire"
},
pantheonCrystalGuardian: {
name: "P2 Crystal Guardian",
spoiler: "Crystal Peak, guards Central Bench",
id: "Mega Zombie Beam Miner (1)",
sceneName: "Mines_18",
wiki: "Crystal_Guardian"
},
killedBigBuzzer: {
name: "Vengefly King",
spoiler: "Colosseum of Fools: Trial of the Warrior, Greenpath",
wiki: "Vengefly_King"
},
killedOblobble: {
name: "P2 Oblobble",
spoiler: "Colosseum of Fools: Trial of the Conqueror",
wiki: "Oblobbles"
},
killedLobsterLancer: {
name: "God Tamer",
spoiler: "Colosseum of Fools: Trial of the Fool",
wiki: "God_Tamer"
},
killedFlukeMother: {
name: "P2 Flukemarm",
spoiler: "Royal Waterways, requires Desolate Dive",
wiki: "Flukemarm"
},
pantheonEnragedGuardian: {
name: "P4 Enraged Guardian",
spoiler: "Crystal Peak, requires Monarch Wings",
id: "Zombie Beam Miner Rematch",
sceneName: "Mines_32",
wiki: "Enraged_Guardian"
},
killedNailBros: {
name: "Nailmasters Oro & Mato",
spoiler: "Godhome: Pantheon of the Master",
wiki: "Brothers_Oro_%26_Mato"
},
killedPaintmaster: {
name: "Paintmaster Sheo",
spoiler: "Godhome: Pantheon of the Artist",
wiki: "Paintmaster_Sheo"
},
killedNailsage: {
name: "Great Nailsage Sly",
spoiler: "Godhome: Pantheon of the Sage",
wiki: "Great_Nailsage_Sly"
},
killedHollowKnightPrime: {
name: "Pure Vessel",
spoiler: "Godhome: Pantheon of the Knight",
wiki: "Pure_Vessel"
},
},
},*/
/* ################ Achievements Essentials -> Collectibles ################### */
/*achievementsCollectibles: {
h2: "Achievements Essentials – Collectibles",
id: "hk-achievements-collectibles",
description: `Collectibles important for unlocking achievements. They don't count or matter towards 112% Game Completion.`,
entries: {
hasMap: {
name: "Inventory Map",
spoiler: "First map bought from Cornifer or Iselda",
wiki: "Map_and_Quill"
},
hasJournal: {
name: "Hunter's Journal",
spoiler: "Greenpath: Hunter, above Stone Sanctuary",
wiki: "Hunter's_Journal"
},
hasHuntersMark: {
name: "Hunter's Mark",
spoiler: "Greenpath: Hunter, complete base 146 Hunter Notes",
wiki: "Hunter's_Mark"
},
killsBigBuzzer: {
name: "Vengefly King Journal Note",
spoiler: "Colosseum: Trial of the Warrior",
wiki: "Vengefly_King"
},
salubraBlessing: {
name: "Salubra's Blessing",
spoiler: "Salubra: 800 Geo + all 40 Charms Owned",
wiki: "Salubra's_Blessing"
},
gotShadeCharm: {
name: "Void Heart",
spoiler: "Equip Kingsoul Charm and find Birthplace",
wiki: "Void_Heart"
},
},
},*/
/* ################ Achievements Essentials -> Maps ################### */
/*achievementsMaps: {
h2: "Achievements Essentials – Maps",
id: "hk-achievements-maps",
description: `Acquired maps are important for unlocking achievements. They don't count or matter towards 112% Game Completion.`,
entries: {
mapCrossroads: {
name: "Map: Forgotten Crossroads",
spoiler: "30/40 Geo: below Gruzzer area",
wiki: "Forgotten_Crossroads"
},
mapGreenpath: {
name: "Map: Greenpath",
spoiler: "60/80 Geo: just below Greenpath entrance",
wiki: "Greenpath"
},
mapFungalWastes: {
name: "Map: Fungal Wastes",
spoiler: "75/100 Geo: right of Queen's Station",
wiki: "Fungal_Wastes"
},
mapCliffs: {
name: "Map: Howling Cliffs",
spoiler: "75/100 Geo: left middle area, near Journal",
wiki: "Howling_Cliffs"
},
mapCity: {
name: "Map: City of Tears",
spoiler: "90/120 Geo: left of Soul Sanctum",
wiki: "City_of_Tears"
},
mapMines: {
name: "Map: Crystal Peak",
spoiler: "120/150 Geo: top left area",
wiki: "Crystal_Peak"
},
mapWaterways: {
name: "Map: Royal Waterways",
spoiler: "75/100 Geo: far left area, near Fungal",
wiki: "Royal_Waterways"
},
mapRestingGrounds: {
name: "Map: Resting Grounds",
spoiler: "75 Geo: Iselda's Shop",
wiki: "Resting_Grounds"
},
mapAbyss: {
name: "Map: Ancient Basin",
spoiler: "112/150 Geo: center area, near fountain",
wiki: "Ancient_Basin"
},
mapOutskirts: {
name: "Map: Kingdom's Edge",
spoiler: "112/150 Geo: left bottom area, inside pipe",
wiki: "Kingdom's_Edge"
},
mapFogCanyon: {
name: "Map: Fog Canyon",
spoiler: "150/200 Geo: above Teacher's Archives",
wiki: "Fog_Canyon"
},
mapRoyalGardens: {
name: "Map: Queen's Gardens",
spoiler: "150/200 Geo: below Fog Canyon entrance",
wiki: "Queen's_Gardens"
},
mapDeepnest: {
name: "Map: Deepnest",
spoiler: "38/50 Geo: near both Fungal Wastes entrances",
wiki: "Deepnest"
},
areaMaps: {
name: "Area Maps",
spoiler: "Cornifer and Iselda, 13 Area Maps total",
max: 13,
maxDefault: 13,
wiki: "Map_and_Quill#Maps"
},
},
},*/
/* ################ Achievements Essentials -> World Interactions ################### */
/*achievementsWorldInteractions: {
h2: "Achievements Essentials – World Interactions",
id: "hk-achievements-world-interactions",
description: `Certain interactions the player can make with NPCs in the game or world objects important for unlocking achievements. They don't count or matter towards 112% Game Completion. This section includes some choices that the player can make in the game.`,
entries: {
quirrelEpilogueCompleted: {
name: "Quirrel: Witness",
spoiler: "Blue Lake: after defeating Monomon the Teacher",
wiki: "Quirrel"
},
xunRewardGiven: {
name: "Grey Mourner: Solace",
spoiler: "Resting Grounds: Complete Delicate Flower quest",
wiki: "Grey_Mourner"
},
zoteStatus: {
id: "zoteStatus",
name: "Zote Status",
nameDefault: "Zote Status",
nameNeglect: "Zote Choice: Neglect",
nameRivalry: "Zote Choice: Rivalry",
nameTrappedVengefly: "Zote Status: Vengefly",
nameNotRescuedVengefly: "Zote Status: Greenpath",
nameTrappedDeepnest: "Zote Status: Deepnest",
nameColosseum: "Zote Status: Colosseum of Fools",
spoiler: "One achievement per save file",
spoilerDefault: "One achievement per save file",
spoilerNeglect: "Left Zote to die",
spoilerRivalry: "Defeated Zote in the Colosseum of Fools",
spoilerTrappedVengefly: "Greenpath, defeat Vengefly King",
spoilerNotRescuedVengefly: "Check what happened with Zote",
spoilerTrappedDeepnest: "Deepnest, free from cobwebs",
spoilerColosseum: "Trial of the Warrior",
wiki: "Zote"
},
nailsmithStatus: {
id: "nailsmithStatus",
name: "Nailsmith Status",
nameDefault: "Nailsmith Status",
nameHappyCouple: "Nailsmith Choice: Happy Couple",
namePurity: "Nailsmith Choice: Purity",
nameSheoHutWaiting: "Nailsmith Status: Sheo",
nameUpgradeNail: "Nailsmith Status: Waiting",
spoiler: "One achievement per save file",
spoilerDefault: "One achievement per save file",
spoilerHappyCouple: "Found a new calling",
spoilerPurity: "Slain with Pure Nail",
spoilerSheoHutWaiting: "Waiting at Sheo's Hut",
spoilerUpgradeNail: "Upgrade Nail to Pure Nail",
wiki: "Nailsmith"
},
mrMushroomState1: {
name: "Mr Mushroom #1",
spoiler: "Fungal Wastes, near Cornifer",
wiki: "Mister_Mushroom",
state: 2
},
mrMushroomState2: {
name: "Mr Mushroom #2",
spoiler: "Kingdom's Edge, near Isma's Grove",
wiki: "Mister_Mushroom",
state: 3
},
mrMushroomState3: {
name: "Mr Mushroom #3",
spoiler: "Deepnest, near Galien",
wiki: "Mister_Mushroom",
state: 4
},
mrMushroomState4: {
name: "Mr Mushroom #4",
spoiler: "Howling Cliffs, near Nailmaster Mato",
wiki: "Mister_Mushroom",
state: 5
},
mrMushroomState5: {
name: "Mr Mushroom #5",
spoiler: "Ancient Basin, near Monarch Wings",
wiki: "Mister_Mushroom",
state: 6
},
mrMushroomState6: {
name: "Mr Mushroom #6",
spoiler: "Fog Canyon, near Overgrown Mound",
wiki: "Mister_Mushroom",
state: 7
},
mrMushroomState7: {
name: "Mr Mushroom #7",
spoiler: "King's Pass, game starting location",
wiki: "Mister_Mushroom",
state: 8
},
pantheonHallownest: {
name: "P5 Embrace the Void",
spoiler: "Godhome: Pantheon of Hallownest",
wiki: "Pantheon_of_Hallownest"
},
/*
Mr Mushroom data
case SplitName.MrMushroom1: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 2; break;
case SplitName.MrMushroom2: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 3; break;
case SplitName.MrMushroom3: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 4; break;
case SplitName.MrMushroom4: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 5; break;
case SplitName.MrMushroom5: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 6; break;
case SplitName.MrMushroom6: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 7; break;
case SplitName.MrMushroom7: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 8; break;
"mrMushroomState": 4, < this is the current location of Mr Mushroom (Howling Cliffs)
1. Spawn of self, their minds unite, (Fungal Wastes)
2. Aside the source of acid blight, (Kingdom's Edge, near Isma's Grove)
3. Aglow in darkest, winding depths, (Deepnest, near Galien)
4. Winds all howl above fossilstone steps, (Howling Cliffs)
5. Monarchflys in air set still, (Ancient Basin, near the Monarch Wings location)
6. To Root's domain and snail once shrill, (Fog Canyon, near Overgrown Mound)
7. Path of Wyrm, at new lands entered, (King's Pass)
8. There journeys end. The kingdom ventured.
*/
/*},
},*/
/* ################ Achievements Essentials -> Bosses ################### */
/*achievementsBosses: {
h2: "Achievements Essentials – Bosses",
id: "hk-achievements-bosses",
description: `Bosses important for unlocking achievements. They don't count or matter towards 112% Game Completion.`,
entries: {
falseKnightDreamDefeated: {
name: "Failed Champion",
spoiler: "Forgotten Crossroads, near False Knight",
wiki: "Failed_Champion"
},
mageLordDreamDefeated: {
name: "Soul Tyrant",
spoiler: "City of Tears: Soul Sanctum, near Soul Master",
wiki: "Soul_Tyrant"
},
infectedKnightDreamDefeated: {
name: "Lost Kin",
spoiler: "Ancient Basin, Broken Vessel location",
wiki: "Lost_Kin"
},
whiteDefenderDefeated: {
name: "White Defender",
spoiler: "Royal Waterways, Dung Defender, use Desolate Dive",
wiki: "White_Defender"
},
greyPrinceDefeated: {
name: "Grey Prince Zote",
spoiler: "Dirtmouth: Bretta's Room (per save choice)",
wiki: "Grey_Prince_Zote"
},
killedHollowKnight: {
name: "Hollow Knight",
spoiler: "Forgotten Crossroads: Black Egg Temple",
wiki: "Hollow_Knight"
},
//Absolute Radiance (for P5, achievements)
//Sisters of Battle (for P5, achievements)
//Winged Nosk (for P5, achievements)
killedFinalBoss: {
name: "The Radiance",
spoiler: "Requires Void Heart & Dream Nail Hollow Knight",
wiki: "Radiance"
},
},
},*/
/* ################ Optional Journal Entries ################### */
/*huntersJournalOptional: {
h2: "Optional Journal Entries",
id: "hk-journal-optional",
description: "The remaining Hunter's Journal entries which don't count for Hunter's Mark and Keen/True Hunter achievements. Note: 6 entries can be permanently unobtainable, depending on your choices in the save file (Grey Prince Zote, all 3 Zotelings, Grimmkin Nightmare and Nightmare King).",
entries: {
HunterMark: {
name: "Hunter's Mark (1)",
nameDefault: "Hunter's Mark",
spoiler: "Greenpath: Hunter, complete base 146 Hunter Notes",
wiki: "Hunter's_Mark"
},
MenderBug: {
name: "Menderbug (1)",
nameDefault: "Menderbug",
spoiler: "Forgotten Crossroads: destroy sign",
wiki: "Menderbug"
},
Zote: {
name: "Zote (1)",
nameDefault: "Zote",
spoiler: "Colosseum: Trial of the Warrior or The Eternal Ordeal",
wiki: "Zote"
},
HollowKnight: {
name: "Hollow Knight (1)",
nameDefault: "Hollow Knight",
spoiler: "Forgotten Crossroads: Black Egg Temple",
wiki: "Hollow_Knight"
},
FinalBoss: {
name: "The Radiance (1)",
nameDefault: "The Radiance",
spoiler: "Requires Void Heart & Dream Nail Hollow Knight",
wiki: "Radiance"
},
WhiteDefender: {
name: "White Defender (1)",
nameDefault: "White Defender",
spoiler: "Royal Waterways: Dung Defender, Desolate Dive",
wiki: "White_Defender"
},
GreyPrince: {
name: "Grey Prince Zote (1)",
nameDefault: "Grey Prince Zote",
spoiler: "Dirtmouth: Bretta's Room (per save choice)",
wiki: "Grey_Prince_Zote"
},
ZotelingBalloon: {
name: "Volatile Zoteling (1)",
nameDefault: "Volatile Zoteling",
spoiler: "Only from Grey Prince Zote, Battle 3+",
wiki: "Volatile_Zoteling"
},
ZotelingHopper: {
name: "Hopping Zoteling (1)",
nameDefault: "Hopping Zoteling",
spoiler: "Only from Grey Prince Zote, Battle 2+",
wiki: "Hopping_Zoteling"
},
ZotelingBuzzer: {
name: "Winged Zoteling (1)",
nameDefault: "Winged Zoteling",
spoiler: "Only from Grey Prince Zote, Battle 1+",
wiki: "Winged_Zoteling"
},
FlameBearerSmall: {
name: "Grimmkin Novice (3)",
nameDefault: "Grimmkin Novice",
spoiler: "Greenpath, Crystal Peak, City of Tears",
wiki: "Grimmkin_Novice"
},
FlameBearerMed: {
name: "Grimmkin Master (4)",
nameDefault: "Grimmkin Master",
spoiler: "King's Pass, Resting Grounds, Kingdom's Edge",
wiki: "Grimmkin_Master"
},
FlameBearerLarge: {
name: "Grimmkin Nightmare (5)",
nameDefault: "Grimmkin Nightmare",
spoiler: "Fungal Core, Royal Waterways, Hive",
wiki: "Grimmkin_Nightmare"
},
Grimm: {
name: "Troupe Master Grimm (1)",
nameDefault: "Troupe Master Grimm",
spoiler: "Dirtmouth: collect 6 flames",
wiki: "Grimm"
},
NightmareGrimm: {
name: "Nightmare King (1)",
nameDefault: "Nightmare King",
spoiler: "Dirtmouth: collect 9 flames",
wiki: "Nightmare_King"
},
BindingSeal: {
name: "Seal of Binding (1)",
nameDefault: "Seal of Binding",
spoiler: "White Palace: Path of Pain completion",
wiki: "Seal_of_Binding"
},
NailBros: {
name: "Nailmasters Oro & Mato (1)",
nameDefault: "Nailmasters Oro & Mato",
spoiler: "Godhome: Pantheon of the Master",
wiki: "Brothers_Oro_%26_Mato"
},
Paintmaster: {
name: "Paintmaster Sheo (1)",
nameDefault: "Paintmaster Sheo",
spoiler: "Godhome: Pantheon of the Artist",
wiki: "Paintmaster_Sheo"
},
Nailsage: {
name: "Great Nailsage Sly (1)",
nameDefault: "Great Nailsage Sly",
spoiler: "Godhome: Pantheon of the Sage",
wiki: "Great_Nailsage_Sly"
},
HollowKnightPrime: {
name: "Pure Vessel (1)",
nameDefault: "Pure Vessel",
spoiler: "Godhome: Pantheon of the Knight",
wiki: "Pure_Vessel"
},
GodseekerMask: {
name: "Weathered Mask (1)",
nameDefault: "Weathered Mask",
spoiler: "Land of Storms: All Pantheons & Bindings",
wiki: "Weathered_Mask"
},
VoidIdol_1: {
name: "Void Idol Attuned (1)",
nameDefault: "Void Idol Attuned",
spoiler: "Hall of Gods: Defeat All (Attuned)",
wiki: "Void_Idol"
},
VoidIdol_2: {
name: "Void Idol Ascended (1)",
nameDefault: "Void Idol Ascended",
spoiler: "Hall of Gods: Defeat All (Ascended)",
wiki: "Void_Idol"
},
VoidIdol_3: {
name: "Void Idol Radiant (1)",
nameDefault: "Void Idol Radiant",
spoiler: "Hall of Gods: Defeat All (Radiant)",
wiki: "Void_Idol"
},
},
},*/
/* ###################################### Collectibles -> Charm Notches ############################################## */
/*charmNotches: {
h2: "Charm Notches",
id: "hk-charm-notches",
description: `Charm Notches are required to equip Charms. They can be found in the game world, bought from Salubra or won from certain challenges.`,
percent: 0,
maxPercent: 8,
entries: {
notchShroomOgres: {
name: "Charm Notch #1",
spoiler: "Fungal Wastes: Shroom Ogres room",
wiki: "Category:Charms#Notches"
},
salubraNotch1: {
name: "Charm Notch #2",
spoiler: "Salubra: 120 Geo + 5 Charms found",
wiki: "Category:Charms#Notches"
},
salubraNotch2: {
name: "Charm Notch #3",
spoiler: "Salubra: 500 Geo + 10 Charms found",
wiki: "Category:Charms#Notches"
},
salubraNotch3: {
name: "Charm Notch #4",
spoiler: "Salubra: 900 Geo + 18 Charms found",
wiki: "Category:Charms#Notches"
},
salubraNotch4: {
name: "Charm Notch #5",
spoiler: "Salubra: 1400 Geo + 25 Charms found",
wiki: "Category:Charms#Notches"
},
colosseumBronzeCompleted: {
name: "Charm Notch #6",
spoiler: "Colosseum of Fools: Trial of the Warrior",
wiki: "Category:Charms#Notches"
},
notchFogCanyon: {
name: "Charm Notch #7",
spoiler: "Fog Canyon: explosive eggs room",
wiki: "Category:Charms#Notches"
},
gotGrimmNotch: {
name: "Charm Notch #8",
spoiler: "Dirtmouth: Troupe Leader Grimm",
wiki: "Category:Charms#Notches"
},
},
},*/
/* ###################################### Collectibles -> Grubs ############################################## */
/*grubs: {
h2: "Grubs",
id: "hk-grubs",
description: `Creatures found trapped in glass jars throughout Hallownest. They can be freed from their jar after which the Grubfather grants a reward for each Grub that is saved. Note: Due to a bug in recent versions of Hollow Knight, Grubs #33 and #34 (The Collector/Tower of Love) are not marked as released correctly in the save file. As a workaround for this bug, when Grub #32 is detected as released, #33 and #34 are automatically marked as released too in this app.`,
percent: 0,
maxPercent: 46,
entries: {
grub1: {
name: "Grub #1",
spoiler: "Forgotten Crossroads: Acid Corridor",
id: "Grub Bottle",
sceneName: "Crossroads_35",
wiki: "Grub#Rewards_and_locations"
},
grub2: {
name: "Grub #2",
spoiler: "Forgotten Crossroads: Left of Dark Corridor",
id: "Grub Bottle",
sceneName: "Crossroads_03",
wiki: "Grub#Rewards_and_locations"
},
grub3: {
name: "Grub #3",
spoiler: "Forgotten Crossroads: Above Ancestral Mound",
id: "Grub Bottle",
sceneName: "Crossroads_05",
wiki: "Grub#Rewards_and_locations"
},
grub4: {
name: "Grub #4",
spoiler: "Forgotten Crossroads: Husk Guard Room",
id: "Grub Bottle",
sceneName: "Crossroads_48",
wiki: "Grub#Rewards_and_locations"
},
grub5: {
name: "Grub #5",
spoiler: "Forgotten Crossroads: Spikes Room",
id: "Grub Bottle",
sceneName: "Crossroads_31",
wiki: "Grub#Rewards_and_locations"
},
grub6: {
name: "Grub #6",
spoiler: "Greenpath: Cornifer Room",
id: "Grub Bottle",
sceneName: "Fungus1_06",
wiki: "Grub#Rewards_and_locations"
},
grub7: {
name: "Grub #7",
spoiler: "Greenpath: Outside Hunter",
id: "Grub Bottle",
sceneName: "Fungus1_07",
wiki: "Grub#Rewards_and_locations"
},
grub8: {
name: "Grub #8",
spoiler: "Greenpath: Outside Hornet",
id: "Grub Bottle",
sceneName: "Fungus1_21",
wiki: "Grub#Rewards_and_locations"
},
grub9: {
name: "Grub #9",
spoiler: "Howling Cliffs: Baldur's Shell Room",
id: "Grub Bottle",
sceneName: "Fungus1_28",
wiki: "Grub#Rewards_and_locations"
},
grub10: {
name: "Grub #10",
spoiler: "Fungal Wastes: Cornifer Room",
id: "Grub Bottle",
sceneName: "Fungus2_18",
wiki: "Grub#Rewards_and_locations"
},
grub11: {
name: "Grub #11",
spoiler: "City of Tears: Above Lemm",
id: "Grub Bottle (1)",
sceneName: "Ruins1_05",
wiki: "Grub#Rewards_and_locations"
},
grub12: {
name: "Grub #12",
spoiler: "Crystal Peak: Left of Dark Corridor",
id: "Grub Bottle",
sceneName: "Mines_04",
wiki: "Grub#Rewards_and_locations"
},
grub13: {
name: "Grub #13",
spoiler: "Crystal Peak: Spiked Conveyor Belts",
id: "Grub Bottle",
sceneName: "Mines_03",
wiki: "Grub#Rewards_and_locations"
},
grub14: {
name: "Grub #14",
spoiler: "Crystal Peak: Crystal Heart Gauntlet",
id: "Grub Bottle",
sceneName: "Mines_31",
wiki: "Grub#Rewards_and_locations"
},
grub15: {
name: "Grub #15",
spoiler: "Crystal Peak: Crushers Below Top Bench",
id: "Grub Bottle",
sceneName: "Mines_19",
wiki: "Grub#Rewards_and_locations"
},
grub16: {
name: "Grub #16",
spoiler: "City of Tears: Soul Master Rewards Room",
id: "Grub Bottle",
sceneName: "Ruins1_32",
wiki: "Grub#Rewards_and_locations"
},
grub17: {
name: "Grub #17",
spoiler: "Resting Grounds: Crypts",
id: "Grub Bottle",
sceneName: "RestingGrounds_10",
wiki: "Grub#Rewards_and_locations"
},
grub18: {
name: "Grub #18",
spoiler: "City of Tears: Guarded House Room in Main Hub",
id: "Grub Bottle",
sceneName: "Ruins_House_01",
wiki: "Grub#Rewards_and_locations"
},
grub19: {
name: "Grub #19",
spoiler: "Crystal Peak: Crystallized Mound",
id: "Grub Bottle",
sceneName: "Mines_35",
wiki: "Grub#Rewards_and_locations"
},
grub20: {
name: "Grub #20",
spoiler: "Crystal Peak: Down from Dirtmouth entrance",
id: "Grub Bottle",
sceneName: "Mines_16",
wiki: "Grub#Rewards_and_locations"
},
grub21: {
name: "Grub #21",
spoiler: "Royal Waterways: Top Left Corridor Above Bench",
id: "Grub Bottle",
sceneName: "Waterways_04",
wiki: "Grub#Rewards_and_locations"
},
grub22: {
name: "Grub #22",
spoiler: "Royal Waterways: Isma's Grove",
id: "Grub Bottle",
sceneName: "Waterways_13",
wiki: "Grub#Rewards_and_locations"
},
grub23: {
name: "Grub #23",
spoiler: "Ancient Basin: Broken Vessel Top Room",
id: "Grub Bottle",
sceneName: "Abyss_19",
wiki: "Grub#Rewards_and_locations"
},
grub24: {
name: "Grub #24",
spoiler: "Ancient Basin: Cloth/Pale Ore Room",
id: "Grub Bottle",
sceneName: "Abyss_17",
wiki: "Grub#Rewards_and_locations"
},
grub25: {
name: "Grub #25",
spoiler: "Crystal Peak: Hallownest Crown Corridor",
id: "Grub Bottle",
sceneName: "Mines_24",
wiki: "Grub#Rewards_and_locations"
},
grub26: {
name: "Grub #26",
spoiler: "Greenpath: Whispering Root Corridor",
id: "Grub Bottle",
sceneName: "Fungus1_13",
wiki: "Grub#Rewards_and_locations"
},
grub27: {
name: "Grub #27",
spoiler: "Fog Canyon: Teacher's Archives Entrance",
id: "Grub Bottle",
sceneName: "Fungus3_47",
wiki: "Grub#Rewards_and_locations"
},
grub28: {
name: "Grub #28",
spoiler: "Queen's Gardens: Main Arena Above Left Bench",
id: "Grub Bottle",
sceneName: "Fungus3_10",
wiki: "Grub#Rewards_and_locations"
},
grub29: {
name: "Grub #29",
spoiler: "Queen's Gardens: Near White Lady",
id: "Grub Bottle",
sceneName: "Fungus3_48",
wiki: "Grub#Rewards_and_locations"
},
grub30: {
name: "Grub #30",
spoiler: "Queen's Gardens: Upper Room near Greenpath",
id: "Grub Bottle",
sceneName: "Fungus3_22",
wiki: "Grub#Rewards_and_locations"
},
grub31: {
name: "Grub #31",
spoiler: "City of Tears: Below King's Station",
id: "Grub Bottle",
sceneName: "Ruins2_07",
wiki: "Grub#Rewards_and_locations"
},
grub32: {
name: "Grub #32",
spoiler: "City of Tears: The Collector Arena",
id: "Grub Bottle",
sceneName: "Ruins2_11",
wiki: "Grub#Rewards_and_locations"
},
grub33: {
name: "Grub #33",
spoiler: "City of Tears: The Collector Arena",
id: "Grub Bottle (1)",
sceneName: "Ruins2_11",
wiki: "Grub#Rewards_and_locations"
},
grub34: {
name: "Grub #34",
spoiler: "City of Tears: The Collector Arena",
id: "Grub Bottle (2)",
sceneName: "Ruins2_11",
wiki: "Grub#Rewards_and_locations"
},
grub35: {
name: "Grub #35",
spoiler: "Kingdom's Edge: Below Camp Bench",
id: "Grub Bottle",
sceneName: "Deepnest_East_11",
wiki: "Grub#Rewards_and_locations"
},
grub36: {
name: "Grub #36",
spoiler: "Kingdom's Edge: Below Nailmaster Oro",
id: "Grub Bottle",
sceneName: "Deepnest_East_14",
wiki: "Grub#Rewards_and_locations"
},
grub37: {
name: "Grub #37",
spoiler: "Fungal Wastes: Spore Shroom Room",
id: "Grub Bottle",
sceneName: "Fungus2_20",
wiki: "Grub#Rewards_and_locations"
},
grub38: {
name: "Grub #38",
spoiler: "City of Tears: Watcher's Spire Fourth Floor",
id: "Grub Bottle",
sceneName: "Ruins2_03",
wiki: "Grub#Rewards_and_locations"
},
grub39: {
name: "Grub #39",
spoiler: "Deepnest: Right of Fungal Wastes Drop",
id: "Grub Bottle",
sceneName: "Deepnest_36",
wiki: "Grub#Rewards_and_locations"
},
grub40: {
name: "Grub #40",
spoiler: "Deepnest: Left of Hot Spring",
id: "Grub Bottle",
sceneName: "Deepnest_03",
wiki: "Grub#Rewards_and_locations"
},
grub41: {
name: "Grub #41",
spoiler: "Deepnest: Nosk Corridor",
id: "Grub Bottle",
sceneName: "Deepnest_31",
wiki: "Grub#Rewards_and_locations"
},
grub42: {
name: "Grub #42",
spoiler: "Deepnest: Whispering Root Room",
id: "Grub Bottle",
sceneName: "Deepnest_39",
wiki: "Grub#Rewards_and_locations"
},
grub43: {
name: "Grub #43",
spoiler: "Deepnest: Beast's Den",
id: "Grub Bottle",
sceneName: "Deepnest_Spider_Town",
wiki: "Grub#Rewards_and_locations"
},
grub44: {
name: "Grub #44",
spoiler: "Royal Waterways: Kingdom's Edge Acid Corridor",
id: "Grub Bottle",
sceneName: "Waterways_14",
wiki: "Grub#Rewards_and_locations"
},
grub45: {
name: "Grub #45",
spoiler: "The Hive: Kingdom's Edge Secret",
id: "Grub Bottle",
sceneName: "Hive_03",
wiki: "Grub#Rewards_and_locations"
},
grub46: {
name: "Grub #46",
spoiler: "The Hive: Mask Shard Room",
id: "Grub Bottle",
sceneName: "Hive_04",
wiki: "Grub#Rewards_and_locations"
},
},
},*/
/* ###################################### Collectibles -> Whispering Roots ############################################## */
/*whisperingRoots: {
h2: "Whispering Roots",
id: "hk-whispering-roots",
description: `There are 15 Whispering Roots in the game, containing a total of 482 Essence. Whispering Root Pin from Iselda reveals the locations of every Whispering Root in an area after that area's Map has been purchased.`,
percent: 0,
maxPercent: 15,
entries: {
whisperingRoot1: {
name: "Whispering Root #1: 29 Orbs",
spoiler: "Forgotten Crossroads: Right of Grubfather",
id: "Dream Plant",
sceneName: "Crossroads_07",
wiki: "Whispering_Root"
},
whisperingRoot2: {
name: "Whispering Root #2: 42 Orbs",
spoiler: "Forgotten Crossroads: Ancestral Mound",
id: "Dream Plant",
sceneName: "Crossroads_ShamanTemple",
wiki: "Whispering_Root"
},
whisperingRoot3: {
name: "Whispering Root #3: 18 Orbs",
spoiler: "Fungal Wastes: Above Mantis Village",
id: "Dream Plant",
sceneName: "Fungus2_17",
wiki: "Whispering_Root"
},
whisperingRoot4: {
name: "Whispering Root #4: 28 Orbs",
spoiler: "City of Tears: Below Stag Station",
id: "Dream Plant",
sceneName: "Ruins1_17",
wiki: "Whispering_Root"
},
whisperingRoot5: {
name: "Whispering Root #5: 46 Orbs",
spoiler: "Howling Cliffs: Big Main Area",
id: "Dream Plant",
sceneName: "Cliffs_01",
wiki: "Whispering_Root"
},
whisperingRoot6: {
name: "Whispering Root #6: 21 Orbs",
spoiler: "Crystal Peak: Hallownest Crown Big Area",
id: "Dream Plant",
sceneName: "Mines_23",
wiki: "Whispering_Root"
},
whisperingRoot7: {
name: "Whispering Root #7: 20 Orbs",
spoiler: "Resting Grounds: Right of Seer, Main Area",
id: "Dream Plant",
sceneName: "RestingGrounds_05",
wiki: "Whispering_Root"
},
whisperingRoot8: {
name: "Whispering Root #8: 34 Orbs",
spoiler: "Resting Grounds: Spirit's Glade",
id: "Dream Plant",
sceneName: "RestingGrounds_08",
wiki: "Whispering_Root"
},
whisperingRoot9: {
name: "Whispering Root #9: 35 Orbs",
spoiler: "City of Tears: Broken Elevator",
id: "Dream Plant",
sceneName: "Abyss_01",
wiki: "Whispering_Root"
},
whisperingRoot10: {
name: "Whispering Root #10: 44 Orbs",
spoiler: "Greenpath: Right of Queen's Gardens",
id: "Dream Plant",
sceneName: "Fungus1_13",
wiki: "Whispering_Root"
},
whisperingRoot11: {
name: "Whispering Root #11: 20 Orbs",
spoiler: "Fungal Wastes: Left of Leg Eater",
id: "Dream Plant",
sceneName: "Fungus2_33",
wiki: "Whispering_Root"
},
whisperingRoot12: {
name: "Whispering Root #12: 29 Orbs",
spoiler: "Queen's Gardens: Below Right Bench",
id: "Dream Plant",
sceneName: "Fungus3_11",
wiki: "Whispering_Root"
},
whisperingRoot13: {
name: "Whispering Root #13: 51 Orbs",
spoiler: "Kingdom's Edge: Right of Tower of Love",
id: "Dream Plant",
sceneName: "Deepnest_East_07",
wiki: "Whispering_Root"
},
whisperingRoot14: {
name: "Whispering Root #14: 45 Orbs",
spoiler: "Deepnest: Below Queen's Gardens",
id: "Dream Plant",
sceneName: "Deepnest_39",
wiki: "Whispering_Root"
},
whisperingRoot15: {
name: "Whispering Root #15: 20 Orbs",
spoiler: "The Hive: Right of Bench",
id: "Dream Plant",
sceneName: "Hive_02",
wiki: "Whispering_Root"
},
},
},*/
/* ###################################### Collectibles -> Relics - Wanderer's Journal ############################################## */
/*relicsWanderersJournal: {
h2: "Relics - Wanderer's Journal",
id: "hk-relics-journal",
description: `Tablets found commonly throughout Hallownest. They are always found next to corpses that are assumed to be the authors of the journal. Can be sold to Relic Seeker Lemm for 200 Geo.
14 x 200 = 2800 Geo Total.`,
percent: 0,
maxPercent: 14,
entries: {
wanderersJournal1: {
name: "Wanderer's Journal #1",
spoiler: "Greenpath: Room Above Fog Canyon",
id: "Shiny Item",
sceneName: "Fungus1_11",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal2: {
name: "Wanderer's Journal #2",
spoiler: "Greenpath: Right of Stag Station",
id: "Shiny Item",
sceneName: "Fungus1_22",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal3: {
name: "Wanderer's Journal #3",
spoiler: "Fungal Wastes: Below Shrumal Ogres",
id: "Shiny Item",
sceneName: "Fungus2_04",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal4: {
name: "Wanderer's Journal #4",
spoiler: "Fungal Wastes: Room Above Mantis Village",
id: "Shiny Item",
sceneName: "Fungus2_17",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal5: {
name: "Wanderer's Journal #5",
spoiler: "City of Tears: City Storerooms",
id: "Shiny Item",
sceneName: "Ruins1_28",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal6: {
name: "Wanderer's Journal #6",
spoiler: "Howling Cliffs: Main Open Air Area",
id: "Shiny Item (1)",
sceneName: "Cliffs_01",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal7: {
name: "Wanderer's Journal #7",
spoiler: "Crystal Peak: Right Tall Room",
id: "Shiny Item (1)",
sceneName: "Mines_20",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal8: {
name: "Wanderer's Journal #8",
spoiler: "Resting Grounds: Crypts",
id: "Shiny Item",
sceneName: "RestingGrounds_10",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal9: {
name: "Wanderer's Journal #9",
spoiler: "City of Tears: Room Above King's Station",
id: "Shiny Item",
sceneName: "Ruins2_05",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal10: {
name: "Wanderer's Journal #10",
spoiler: "Ancient Basin: Broken Bridge",
id: "Shiny Item",
sceneName: "Abyss_02",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal11: {
name: "Wanderer's Journal #11",
spoiler: "City of Tears: Pleasure House Elevator",
id: "Shiny Item (1)",
sceneName: "Ruins_Elevator",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal12: {
name: "Wanderer's Journal #12",
spoiler: "Kingdom's Edge: Whispering Root Area",
id: "Shiny Item",
sceneName: "Deepnest_East_07",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal13: {
name: "Wanderer's Journal #13",
spoiler: "Kingdom's Edge: Camp Bench",
id: "Shiny Item",
sceneName: "Deepnest_East_13",
wiki: "Wanderer%27s_Journal"
},
wanderersJournal14: {
name: "Wanderer's Journal #14",
spoiler: "Kingdom's Edge: Left of Markoth",
id: "Shiny Item",
sceneName: "Deepnest_East_18",
wiki: "Wanderer%27s_Journal"
},
},
},*/
/* ###################################### Collectibles -> Relics - Hallownest Seal ############################################## */
/*relicsHallownestSeal: {
h2: "Relics - Hallownest Seal",
id: "hk-relics-seal",
description: `Official symbols of the Pale King and the Five Great Knights. The seals can be found in various locations throughout the world. Can be sold to Relic Seeker Lemm for 450 Geo. Seal #16 is missable when a player enters the Beast's Den through the secret path without being trapped by using the bench.
17 x 450 = 7650 Geo Total.`,
percent: 0,
maxPercent: 17,
entries: {
hallownestSeal1: {
name: "Hallownest Seal #1",
spoiler: "Forgotten Crossroads: Inside the Well",
id: "Shiny Item",
sceneName: "Crossroads_01",
wiki: "Hallownest_Seal"
},
hallownestSeal2: {
name: "Hallownest Seal #2",
spoiler: "Fungal Wastes: Willoh's Room above Queen's Station",
id: "Shiny Item",
sceneName: "Fungus2_34",
wiki: "Hallownest_Seal"
},
hallownestSeal3: {
name: "Hallownest Seal #3",
spoiler: "Greenpath: Acid Bridge",
id: "Shiny Item",
sceneName: "Fungus1_10",
wiki: "Hallownest_Seal"
},
hallownestSeal4: {
name: "Hallownest Seal #4",
spoiler: "Fungal Wastes: Right of Queen's Station",
id: "Shiny Item",
sceneName: "Fungus2_03",
wiki: "Hallownest_Seal"
},
hallownestSeal5: {
name: "Hallownest Seal #5",
spoiler: "City of Tears: Open Air Rafters",
id: "Shiny Item",
sceneName: "Ruins1_03",
wiki: "Hallownest_Seal"
},
hallownestSeal6: {
name: "Hallownest Seal #6",
spoiler: "City of Tears: Soul Master Rewards Room",
id: "Shiny Item",
sceneName: "Ruins1_32",
wiki: "Hallownest_Seal"
},
hallownestSeal7: {
name: "Hallownest Seal #7",
spoiler: "Resting Grounds: Crypts",
id: "Shiny Item (1)",
sceneName: "RestingGrounds_10",
wiki: "Hallownest_Seal"
},
hallownestSeal8: {
name: "Hallownest Seal #8",
spoiler: "City of Tears: King's Station Stag Station",
id: "Shiny Item",
sceneName: "Ruins2_08",
wiki: "Hallownest_Seal"
},
hallownestSeal9: {
name: "Hallownest Seal #9",
spoiler: "Grubfather: 23 Grubs rescued",
id: "Shiny Item Relic2",
sceneName: "Crossroads_38",
wiki: "Hallownest_Seal"
},
hallownestSeal10: {
name: "Hallownest Seal #10",
spoiler: "Fog Canyon: Right Tall Area",
id: "Shiny Item",
sceneName: "Fungus3_26",
wiki: "Hallownest_Seal"
},
hallownestSeal11: {
name: "Hallownest Seal #11",
spoiler: "Fog Canyon: Lifeblood Cocoon Room",
id: "Shiny Item",
sceneName: "Fungus3_30",
wiki: "Hallownest_Seal"
},
hallownestSeal12: {
name: "Hallownest Seal #12",
spoiler: "Queen's Gardens: Outside White Lady",
id: "Shiny Item",
sceneName: "Fungus3_48",
wiki: "Hallownest_Seal"
},
hallownestSeal13: {
name: "Hallownest Seal #13",
spoiler: "Fungal Wastes: Mantis Lords Reward Room",
id: "Shiny Item",
sceneName: "Fungus2_31",
wiki: "Hallownest_Seal"
},
hallownestSeal14: {
name: "Hallownest Seal #14",
spoiler: "City of Tears: Watcher's Spire Fourth Floor",
id: "Shiny Item",
sceneName: "Ruins2_03",
wiki: "Hallownest_Seal"
},
hallownestSeal15: {
name: "Hallownest Seal #15",
spoiler: "Deepnest: Room Above Lower Cornifer",
id: "Shiny Item",
sceneName: "Deepnest_16",
wiki: "Hallownest_Seal"
},
hallownestSeal16: {
name: "Hallownest Seal #16 (missable)",
spoiler: "Deepnest: Beast's Den",
id: "Shiny Item",
sceneName: "Deepnest_Spider_Town",
wiki: "Hallownest_Seal"
},
hallownestSeal17: {
name: "Hallownest Seal #17",
spoiler: "Seer: 100 Essence collected",
id: "dreamReward1",
sceneName: "",
wiki: "Hallownest_Seal"
},
},
},*/
/* ###################################### Collectibles -> Relics - King's Idol ############################################## */
/*relicsKingsIdol: {
h2: "Relics - King's Idol",
id: "hk-relics-idol",
description: `Idols made of a mysterious white metal that depict the Pale King. They are found in various locations throughout Hallownest. Can be sold to Relic Seeker Lemm for 800 Geo.
8 x 800 = 6400 Geo Total.`,
percent: 0,
maxPercent: 8,
entries: {
kingsIdol1: {
name: "King's Idol #1",
spoiler: "Howling Cliffs: Main Open Air Area",
id: "Shiny Item",
sceneName: "Cliffs_01",
wiki: "King%27s_Idol"
},
kingsIdol2: {
name: "King's Idol #2",
spoiler: "Crystal Peak: Cornifer Room, use Monarch Wings",
id: "Shiny Item Stand",
sceneName: "Mines_30",
wiki: "King%27s_Idol"
},
kingsIdol3: {
name: "King's Idol #3",
spoiler: "Resting Grounds: Spirit's Glade, Waterfall",
id: "Shiny Item",
sceneName: "RestingGrounds_08",
wiki: "King%27s_Idol"
},
kingsIdol4: {
name: "King's Idol #4",
spoiler: "Royal Waterways: Dung Defender's Cave",
id: "Shiny Item Stand",
sceneName: "Waterways_15",
wiki: "King%27s_Idol"
},
kingsIdol5: {
name: "King's Idol #5",
spoiler: "Kingdom's Edge: Great Hopper Below Colosseum Entrance",
id: "Shiny Item",
sceneName: "Deepnest_East_08",
wiki: "King%27s_Idol"
},
kingsIdol6: {
name: "King's Idol #6",
spoiler: "Deepnest: Zote Arena Left Side",
id: "Shiny Item",
sceneName: "Deepnest_33",
wiki: "King%27s_Idol"
},
kingsIdol7: {
name: "King's Idol #7",
spoiler: "Grubfather: 38 Grubs rescued",
id: "Shiny Item Relic3",
sceneName: "Crossroads_38",
wiki: "King%27s_Idol"
},
kingsIdol8: {
name: "King's Idol #8",
spoiler: "Kingdom's Edge: Pale Lurker Room",
id: "Shiny Item",
sceneName: "GG_Lurker",
wiki: "King%27s_Idol"
},
},
},*/
/* ###################################### Collectibles -> Relics - Arcane Egg ############################################## */
/*relicsArcaneEgg: {
h2: "Relics - Arcane Egg",
id: "hk-relics-egg",
description: `Jet black stone eggs originating from a civilisation that existed before the Kingdom of Hallownest was founded. Egg #4 is missable when the player will go right instead of left in the Lifeblood Core room in the Abyss and will touch the Charm. Can be sold to Relic Seeker Lemm for 1200 Geo.
4 x 1200 = 4800 Geo Total.`,
percent: 0,
maxPercent: 4,
entries: {
arcaneEgg1: {
name: "Arcane Egg #1",
spoiler: "The Abyss: Shade Cloak Room",
id: "Shiny Item",
sceneName: "Abyss_10",
wiki: "Arcane_Egg"
},
arcaneEgg2: {
name: "Arcane Egg #2",
spoiler: "Seer: 1200 Essence",
id: "dreamReward6",
sceneName: "",
wiki: "Arcane_Egg"
},
arcaneEgg3: {
name: "Arcane Egg #3",
spoiler: "The Abyss: Birthplace, requires Kingsoul",
id: "Shiny Item",
sceneName: "Abyss_15",
wiki: "Arcane_Egg"
},
arcaneEgg4: {
name: "Arcane Egg #4 (missable)",
spoiler: "The Abyss: Lifeblood Core Room",
id: "Shiny Item (1)",
sceneName: "Abyss_08",
wiki: "Abyss#Lifeblood_Chamber"
},
},
},*/
/* ###################################### Collectibles -> Rancid Eggs ############################################## */
/*rancidEggs: {
h2: "Rancid Eggs",
id: "hk-rancid-eggs",
description: `A collectable item recovered from the corpses of Bluggsacs. Either an already-dead Bluggsac has to be found or a living one has to be killed to make it drop a Rancid Egg. A certain NPC in the game may be very interested in these... Egg #16 is missable when a player enters the Beast's Den through the secret path without being trapped by using the bench.`,
percent: 0,
maxPercent: 21,
entries: {
rancidEgg1: {
name: "Rancid Egg #1",
spoiler: "Fungal Wastes: Fungal Core Upper Room",
id: "Shiny Item",
sceneName: "Fungus2_29",
wiki: "Rancid_Egg"
},
rancidEgg2: {
name: "Rancid Egg #2",
spoiler: "City of Tears: Room Above Lemm",
id: "Shiny Item",
sceneName: "Ruins1_05",
wiki: "Rancid_Egg"
},
rancidEgg3: {
name: "Rancid Egg #3",
spoiler: "Crystal Peak: Dark Bench Room",
id: "Shiny Item",
sceneName: "Mines_29",
wiki: "Rancid_Egg"
},
rancidEgg4: {
name: "Rancid Egg #4",
spoiler: "Resting Grounds: Blue Lake",
id: "Shiny Item(Clone)",
sceneName: "Crossroads_50",
wiki: "Rancid_Egg"
},
rancidEgg5: {
name: "Rancid Egg #5",
spoiler: "Crystal Peak: Desolate Dive Entrance",
id: "Shiny Item(Clone)",
sceneName: "Mines_01",
wiki: "Rancid_Egg"
},
rancidEgg6: {
name: "Rancid Egg #6",
spoiler: "Royal Waterways: Mask Shard Room",
id: "Shiny Item",
sceneName: "Waterways_04b",
wiki: "Rancid_Egg"
},
rancidEgg7: {
name: "Rancid Egg #7",
spoiler: "Royal Waterways: Hidden Grub Room",
id: "Shiny Item(Clone)",
sceneName: "Waterways_04",
wiki: "Rancid_Egg"
},
rancidEgg8: {
name: "Rancid Egg #8",
spoiler: "Royal Waterways: Left of Isma's Grove",
id: "Shiny Item(Clone)",
sceneName: "Waterways_07",
wiki: "Rancid_Egg"
},
rancidEgg9: {
name: "Rancid Egg #9",
spoiler: "Greenpath: Outside Sheo's Hut",
id: "Shiny Item",
sceneName: "Fungus1_15",
wiki: "Rancid_Egg"
},
rancidEgg10: {
name: "Rancid Egg #10",
spoiler: "Grubfather: 16 Grubs rescued",
id: "Shiny Item Rancid Egg",
sceneName: "Crossroads_38",
wiki: "Rancid_Egg"
},
rancidEgg11: {
name: "Rancid Egg #11",
spoiler: "Queen's Gardens: Entrance from Fog Canyon",
id: "Shiny Item(Clone)",
sceneName: "Fungus3_34",
wiki: "Rancid_Egg"
},
rancidEgg12: {
name: "Rancid Egg #12",
spoiler: "City of Tears: Pleasure House Elevator",
id: "Shiny Item",
sceneName: "Ruins_Elevator",
wiki: "Rancid_Egg"
},
rancidEgg13: {
name: "Rancid Egg #13",
spoiler: "Kingdom's Edge: Whispering Root Area",
id: "Shiny Item (1)",
sceneName: "Deepnest_East_07",
wiki: "Rancid_Egg"
},
rancidEgg14: {
name: "Rancid Egg #14",
spoiler: "Deepnest: Weaver's Den",
id: "Shiny Item",
sceneName: "Deepnest_45_v02",
wiki: "Rancid_Egg"
},
rancidEgg15: {
name: "Rancid Egg #15",
spoiler: "Deepnest: Whispering Root Big Area Left Side",
id: "Shiny Item(Clone)",
sceneName: "Deepnest_39",
wiki: "Rancid_Egg"
},
rancidEgg16: {
name: "Rancid Egg #16 (missable)",
spoiler: "Deepnest: Beast's Den",
id: "Shiny Item(Clone)",
sceneName: "Deepnest_Spider_Town",
wiki: "Rancid_Egg"
},
rancidEgg17: {
name: "Rancid Egg #17",
spoiler: "Crystal Peak: Right Tall Room",
id: "Shiny Item(Clone)",
sceneName: "Mines_20",
wiki: "Rancid_Egg"
},
rancidEgg18: {
name: "Rancid Egg #18",
spoiler: "Royal Waterways: Main Bench Area",
id: "Shiny Item(Clone)",
sceneName: "Waterways_02",
wiki: "Rancid_Egg"
},
rancidEgg19: {
name: "Rancid Egg #19",
spoiler: "Kingdom's Edge: Below Nailmaster Oro",
id: "Shiny Item(Clone)",
sceneName: "Deepnest_East_14",
wiki: "Rancid_Egg"
},
rancidEgg20: {
name: "Rancid Egg #20",
spoiler: "Sly: 60 Geo",
id: "slyRancidEgg",
sceneName: "",
wiki: "Rancid_Egg"
},
rancidEgg21: {
name: "Rancid Egg #21",
spoiler: "Royal Waterways: Tuk's free Egg",
spoilerNormal: "Royal Waterways: Tuk, with Defender's Crest",
spoilerSteelSoul: "Royal Waterways: Inspect Tuk",
idPlayerData: "tukDungEgg",
id: "Shiny Item",
sceneName: "Waterways_03",
wiki: "Tuk"
},
},
},*/
/* ###################################### Collectibles -> Items ############################################## */
/*items: {
h2: "Items",
id: "hk-items",
description: `Certain acquirable items, map markers or collectibles in the game that won't fit any specific category. Using custom map pins to mark interesting locations on the map is very useful while playing Hollow Knight. 1440 Geo is needed to buy all map pins from Iselda.`,
percent: 0,
maxPercent: 21,
entries: {
hasQuill: {
name: "Quill",
spoiler: "120 Geo: Iselda's Shop, updates map with explored areas",
wiki: "Map_and_Quill#Mapping_Tools"
},
hasPinBench: {
name: "Map Pin: Bench",
spoiler: "100 Geo: Iselda's Shop",
wiki: "Bench_(Hollow_Knight)"
},
hasPinShop: {
name: "Map Pin: Vendor",
spoiler: "100 Geo: Iselda's Shop",
wiki: "Category:NPCs_(Hollow_Knight)#Merchants"
},
hasPinCocoon: {
name: "Map Pin: Lifeblood Cocoon",
spoiler: "100 Geo: Iselda's Shop",
wiki: "Lifeblood_Cocoon"
},
hasPinSpa: {
name: "Map Pin: Hot Springs",
spoiler: "100 Geo: Iselda's Shop",
wiki: "Hot_Springs"
},
hasPinStag: {
name: "Map Pin: Stag Station",
spoiler: "100 Geo: Iselda's Shop, unlock first Station",
wiki: "Stag_Station"
},
hasPinGhost: {
name: "Map Pin: Warrior's Grave",
spoiler: "180 Geo: Iselda's Shop, acquire Dream Nail",
wiki: "Warrior_Dreams"
},
hasPinDreamPlant: {
name: "Map Pin: Whispering Root",
spoiler: "150 Geo: Iselda's Shop, acquire Dream Nail",
wiki: "Whispering_Root"
},
hasPinTram: {
name: "Map Pin: Tram",
spoiler: "100 Geo: Iselda's Shop, acquire Tram Pass",
wiki: "Tram"
},
hasMarker_r: {
name: "Map Pin: Shell Marker",
spoiler: "100 Geo: Iselda's Shop",
wiki: "Iselda#Map_Pins"
},
hasMarker_b: {
name: "Map Pin: Scarab Marker",
spoiler: "100 Geo: Iselda's Shop",
wiki: "Iselda#Map_Pins"
},
hasMarker_y: {
name: "Map Pin: Token Marker",
spoiler: "100 Geo: Iselda's Shop, acquire Mothwing Cloak",
wiki: "Iselda#Map_Pins"
},
hasMarker_w: {
name: "Map Pin: Gleaming Marker",
spoiler: "210 Geo: Iselda, acquire Mothwing Cloak",
wiki: "Iselda#Map_Pins"
},
hasPinGuardian: {
name: "Map Pin: Dreamers",
spoiler: "Resting Grounds: Inspect the shrine",
wiki: "Dreamers"
},
hasPinBlackEgg: {
name: "Map Pin: Temple of the Black Egg",
spoiler: "City of Tears: Inspect fountain",
wiki: "Temple_of_the_Black_Egg"
},
hasPinGrub: {
name: "Collector's Map",
spoiler: "Kingdom's Edge: Tower of Love, Love Key",
wiki: "Map_and_Quill#The_Collector's_Map"
},
cityCrest: {
name: "City Crest",
spoiler: "Forgotten Crossroads: False Knight Reward",
id: "Shiny Item",
sceneName: "Crossroads_10",
wiki: "City_Crest"
},
hasDreamGate: {
name: "Dreamgate",
spoiler: "Seer: 900 Essence",
wiki: "Dreamgate"
},
fragileGreed_unbreakable: {
name: "Unbreakable Greed",
spoiler: "Divine: Fragile Greed + 9000 Geo",
wiki: "Divine#Unbreakable_Charms"
},
fragileHealth_unbreakable: {
name: "Unbreakable Heart",
spoiler: "Divine: Fragile Heart + 12000 Geo",
wiki: "Divine#Unbreakable_Charms"
},
fragileStrength_unbreakable: {
name: "Unbreakable Strength",
spoiler: "Divine: Fragile Strength + 15000 Geo",
wiki: "Divine#Unbreakable_Charms"
},
},
},*/
/* ###################################### Geo Caches -> Geo Chests ############################################## */
/*geoChests: {
h2: "Geo Chests",
id: "hk-geo-chests",
description: `All Geo Chests in the game, including one empty one and one with 1 Geo. A total of 2380 Geo can be collected from Geo Chests. Equipping the Fragile Greed Charm won't increase the amount of Geo found inside Geo Chests.`,
percent: 0,
maxPercent: 14,
entries: {
chest1: {
name: "Chest #1: 200 Geo",
spoiler: "Forgotten Crossroads: False Knight Reward",
id: "Chest",
sceneName: "Crossroads_10",
wiki: "Geo#How_to_Acquire"
},
chest2: {
name: "Chest #2: 1 Geo",
spoiler: "Howling Cliffs: Baldur's Shell Room",
id: "Chest",
sceneName: "Fungus1_28",
wiki: "Geo#How_to_Acquire"
},
chest3: {
name: "Chest #3: 78 Geo",
spoiler: "Crystal Peak: Crushers Room",
id: "Chest",
sceneName: "Mines_37",
wiki: "Geo#How_to_Acquire"
},
chest4: {
name: "Chest #4: 380 Geo",
spoiler: "City of Tears: Soul Master Reward",
id: "Chest",
sceneName: "Ruins1_32",
wiki: "Geo#How_to_Acquire"
},
chest5: {
name: "Chest #5: 150 Geo",
spoiler: "Resting Grounds: Crypts",
id: "Chest",
sceneName: "RestingGrounds_10",
wiki: "Geo#How_to_Acquire"
},
chest6: {
name: "Chest #6: 85 Geo",
spoiler: "Greenpath: Whispering Root Room",
id: "Chest",
sceneName: "Fungus1_13",
wiki: "Geo#How_to_Acquire"
},
chest7: {
name: "Chest #7: 620 Geo",
spoiler: "Fungal Wastes: Mantis Lords Reward",
id: "Mantis Chest (2)",
sceneName: "Fungus2_31",
wiki: "Geo#How_to_Acquire"
},
chest8: {
name: "Chest #8: 655 Geo",
spoiler: "City of Tears: Watcher Knight Reward",
id: "Chest",
sceneName: "Ruins2_03",
wiki: "Geo#How_to_Acquire"
},
chest9: {
name: "Chest #9: 160 Geo",
spoiler: "Deepnest: Weaver's Den, Secret Room",
id: "Chest",
sceneName: "Deepnest_45_v02",
wiki: "Geo#How_to_Acquire"
},
chest10: {
name: "Chest #10: 8 Geo",
spoiler: "Royal Waterways: Junk Pit",
id: "Chest",
sceneName: "GG_Waterways",
wiki: "Geo#How_to_Acquire"
},
chest11: {
name: "Chest #11: 8 Geo",
spoiler: "Royal Waterways: Junk Pit",
id: "Chest (1)",
sceneName: "GG_Waterways",
wiki: "Geo#How_to_Acquire"
},
chest12: {
name: "Chest #12: 25 Geo",
spoiler: "Royal Waterways: Junk Pit",
id: "Chest (2)",
sceneName: "GG_Waterways",
wiki: "Geo#How_to_Acquire"
},
chest13: {
name: "Chest #13: 0 Geo",
spoiler: "Royal Waterways: Junk Pit",
id: "Chest (3)",
sceneName: "GG_Waterways",
wiki: "Geo#How_to_Acquire"
},
chest14: {
name: "Chest #14: 10 Geo",
spoiler: "Royal Waterways: Junk Pit",
id: "Chest (4)",
sceneName: "GG_Waterways",
wiki: "Geo#How_to_Acquire"
},
},
},*/
/* ###################################### Geo Caches -> Geo Rocks ############################################## */
/*geoRocks: {
h2: "Geo Rocks",
id: "hk-geo-rocks",
description: `All Geo Rocks that can be found in the game. Only fully destroyed Geo Rocks are counted. Partially hit Geo Rocks won't be counted. Equipping the Fragile Greed Charm won't increase the amount of Geo found inside Geo Rocks. A total of 5074 Geo can be collected from Geo Rocks (credit: Araraura).`,
percent: 0,
maxPercent: 207,
entries: {
geoRock1: {
name: "Geo Rock #1: 15 Geo",
spoiler: "King's Pass",
id: "Geo Rock 4",
sceneName: "Tutorial_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock2: {
name: "Geo Rock #2: 15 Geo",
spoiler: "King's Pass",
id: "Geo Rock 1",
sceneName: "Tutorial_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock3: {
name: "Geo Rock #3: 15 Geo",
spoiler: "King's Pass",
id: "Geo Rock 3",
sceneName: "Tutorial_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock4: {
name: "Geo Rock #4: 18 Geo",
spoiler: "King's Pass",
id: "Geo Rock 2",
sceneName: "Tutorial_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock5: {
name: "Geo Rock #5: 15 Geo",
spoiler: "King's Pass",
id: "Geo Rock 5",
sceneName: "Tutorial_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock6: {
name: "Geo Rock #6: 19 Geo",
spoiler: "Forgotten Crossroads: Well",
id: "Geo Rock 2",
sceneName: "Crossroads_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock7: {
name: "Geo Rock #7: 15 Geo",
spoiler: "Forgotten Crossroads: Gruzzer Vertical Room",
id: "Geo Rock 1",
sceneName: "Crossroads_07",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock8: {
name: "Geo Rock #8: 15 Geo",
spoiler: "Forgotten Crossroads: Gruzzer Vertical Room",
id: "Geo Rock 1 (2)",
sceneName: "Crossroads_07",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock9: {
name: "Geo Rock #9: 15 Geo",
spoiler: "Forgotten Crossroads: Gruzzer Vertical Room",
id: "Geo Rock 1 (1)",
sceneName: "Crossroads_07",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock10: {
name: "Geo Rock #10: 15 Geo",
spoiler: "Forgotten Crossroads: Corridor to Acid Grub",
id: "Geo Rock 2",
sceneName: "Crossroads_12",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock11: {
name: "Geo Rock #11: 10 Geo",
spoiler: "Forgotten Crossroads: Aspid Arena",
id: "Geo Rock 1 (3)",
sceneName: "Crossroads_08",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock12: {
name: "Geo Rock #12: 10 Geo",
spoiler: "Forgotten Crossroads: Aspid Arena",
id: "Geo Rock 1 (2)",
sceneName: "Crossroads_08",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock13: {
name: "Geo Rock #13: 15 Geo",
spoiler: "Forgotten Crossroads: Aspid Arena",
id: "Geo Rock 1",
sceneName: "Crossroads_08",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock14: {
name: "Geo Rock #14: 10 Geo",
spoiler: "Forgotten Crossroads: Aspid Arena",
id: "Geo Rock 1 (1)",
sceneName: "Crossroads_08",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock15: {
name: "Geo Rock #15: 15 Geo",
spoiler: "Forgotten Crossroads: Fungal Wastes Entrance",
id: "Geo Rock 1",
sceneName: "Crossroads_18",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock16: {
name: "Geo Rock #16: 15 Geo",
spoiler: "Forgotten Crossroads: Fungal Wastes Entrance",
id: "Geo Rock 2",
sceneName: "Crossroads_18",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock17: {
name: "Geo Rock #17: 15 Geo",
spoiler: "Forgotten Crossroads: Fungal Wastes Entrance",
id: "Geo Rock 3",
sceneName: "Crossroads_18",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock18: {
name: "Geo Rock #18: 15 Geo",
spoiler: "Forgotten Crossroads: Goam Mask Shard",
id: "Geo Rock 2",
sceneName: "Crossroads_13",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock19: {
name: "Geo Rock #19: 15 Geo",
spoiler: "Forgotten Crossroads: Goam Mask Shard",
id: "Geo Rock 1",
sceneName: "Crossroads_13",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock20: {
name: "Geo Rock #20: 15 Geo",
spoiler: "Forgotten Crossroads: Right of Mask Shard",
id: "Geo Rock 2",
sceneName: "Crossroads_42",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock21: {
name: "Geo Rock #21: 15 Geo",
spoiler: "Forgotten Crossroads: Right of Mask Shard",
id: "Geo Rock 1",
sceneName: "Crossroads_42",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock22: {
name: "Geo Rock #22: 15 Geo",
spoiler: "Forgotten Crossroads: Before Gruz Mother",
id: "Geo Rock 1",
sceneName: "Crossroads_19",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock23: {
name: "Geo Rock #23: 15 Geo",
spoiler: "Forgotten Crossroads: Outside False Knight",
id: "Geo Rock 1",
sceneName: "Crossroads_21",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock24: {
name: "Geo Rock #24: 15 Geo",
spoiler: "Forgotten Crossroads: Crystal Peak Dark Toll",
id: "Geo Rock 2 (1)",
sceneName: "Mines_33",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock25: {
name: "Geo Rock #25: 15 Geo",
spoiler: "Forgotten Crossroads: Crystal Peak Dark Toll",
id: "Geo Rock 2",
sceneName: "Mines_33",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock26: {
name: "Geo Rock #26: 15 Geo",
spoiler: "Forgotten Crossroads: Crystal Peak Dark Toll",
id: "Geo Rock 2 (2)",
sceneName: "Mines_33",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock27: {
name: "Geo Rock #27: 15 Geo",
spoiler: "Forgotten Crossroads: Above Lever",
id: "Geo Rock 2",
sceneName: "Crossroads_16",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock28: {
name: "Geo Rock #28: 15 Geo",
spoiler: "Forgotten Crossroads: Central Grub",
id: "Geo Rock 1",
sceneName: "Crossroads_05",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock29: {
name: "Geo Rock #29: 15 Geo",
spoiler: "Forgotten Crossroads: Outside Tram",
id: "Geo Rock 1",
sceneName: "Crossroads_27",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock30: {
name: "Geo Rock #30: 15 Geo",
spoiler: "Forgotten Crossroads: Tram",
id: "Geo Rock 1",
sceneName: "Crossroads_46",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock31: {
name: "Geo Rock #31: 15 Geo",
spoiler: "Forgotten Crossroads: False Knight Arena",
id: "Geo Rock 1",
sceneName: "Crossroads_10",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock32: {
name: "Geo Rock #32: 15 Geo",
spoiler: "Forgotten Crossroads: Ancestral Mound",
id: "Geo Rock 2",
sceneName: "Crossroads_ShamanTemple",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock33: {
name: "Geo Rock #33: 15 Geo",
spoiler: "Forgotten Crossroads: Ancestral Mound",
id: "Geo Rock 2 (1)",
sceneName: "Crossroads_ShamanTemple",
hitsLeft: "5",
wiki: "Geo#How_to_Acquire"
},
geoRock34: {
name: "Geo Rock #34: 15 Geo",
spoiler: "Forgotten Crossroads: Ancestral Mound",
id: "Geo Rock 1",
sceneName: "Crossroads_ShamanTemple",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock35: {
name: "Geo Rock #35: 15 Geo",
spoiler: "Forgotten Crossroads: Ancestral Mound",
id: "Geo Rock 2",
sceneName: "Crossroads_ShamanTemple",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock36: {
name: "Geo Rock #36: 26 Geo",
spoiler: "Greenpath: Entrance",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock37: {
name: "Geo Rock #37: 26 Geo",
spoiler: "Greenpath: Waterfall Bench",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_01b",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock38: {
name: "Geo Rock #38: 26 Geo",
spoiler: "Greenpath: First Hornet Sighting",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock39: {
name: "Geo Rock #39: 26 Geo",
spoiler: "Greenpath: First Hornet Sighting",
id: "Geo Rock Green Path 01 (1)",
sceneName: "Fungus1_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock40: {
name: "Geo Rock #40: 26 Geo",
spoiler: "Greenpath: Outside Hunter",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_07",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock41: {
name: "Geo Rock #41: 26 Geo",
spoiler: "Greenpath: Above Sanctuary Bench",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_19",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock42: {
name: "Geo Rock #42: 26 Geo",
spoiler: "Greenpath: Acid Bridge",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_10",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock43: {
name: "Geo Rock #43: 26 Geo",
spoiler: "Greenpath: Outside Stag Station",
id: "Geo Rock Green Path 01 (1)",
sceneName: "Fungus1_22",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock44: {
name: "Geo Rock #44: 26 Geo",
spoiler: "Greenpath: Outside Stag Station",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_22",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock45: {
name: "Geo Rock #45: 26 Geo",
spoiler: "Greenpath: Toll",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_31",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock46: {
name: "Geo Rock #46: 15 Geo",
spoiler: "Greenpath: Toll",
id: "Geo Rock 1 (1)",
sceneName: "Fungus1_31",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock47: {
name: "Geo Rock #47: 15 Geo",
spoiler: "Greenpath: Toll",
id: "Geo Rock 2 (1)",
sceneName: "Fungus1_31",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock48: {
name: "Geo Rock #48: 26 Geo",
spoiler: "Greenpath: Storerooms",
id: "Geo Rock Green Path 01 (2)",
sceneName: "Fungus1_03",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock49: {
name: "Geo Rock #49: 26 Geo",
spoiler: "Greenpath: Storerooms",
id: "Geo Rock Green Path 01 (1)",
sceneName: "Fungus1_03",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock50: {
name: "Geo Rock #50: 26 Geo",
spoiler: "Greenpath: Storerooms",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_03",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock51: {
name: "Geo Rock #51: 15 Geo",
spoiler: "Greenpath: Outside Thorns",
id: "Geo Rock 2",
sceneName: "Fungus1_05",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock52: {
name: "Geo Rock #52: 15 Geo",
spoiler: "Howling Cliffs: Baldur's Shell",
id: "Geo Rock 2",
sceneName: "Fungus1_28",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock53: {
name: "Geo Rock #53: 15 Geo",
spoiler: "Howling Cliffs: Baldur's Shell",
id: "Geo Rock 1 (2)",
sceneName: "Fungus1_28",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock54: {
name: "Geo Rock #54: 30 Geo",
spoiler: "Greenpath: Outside Hornet",
id: "Geo Rock Green Path 02",
sceneName: "Fungus1_21",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock55: {
name: "Geo Rock #55: 30 Geo",
spoiler: "Greenpath: Outside Hornet",
id: "Geo Rock Green Path 02 (1)",
sceneName: "Fungus1_21",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock56: {
name: "Geo Rock #56: 30 Geo",
spoiler: "Greenpath: Outside Hornet",
id: "Geo Rock Green Path 02 (2)",
sceneName: "Fungus1_21",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock57: {
name: "Geo Rock #57: 26 Geo",
spoiler: "Greenpath: Hornet",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_04",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock58: {
name: "Geo Rock #58: 26 Geo",
spoiler: "Greenpath: Massive Moss Charger",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_29",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock59: {
name: "Geo Rock #59: 26 Geo",
spoiler: "Greenpath: Massive Moss Charger Corridor",
id: "Geo Rock Green Path 01",
sceneName: "Fungus1_12",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock60: {
name: "Geo Rock #60: 26 Geo",
spoiler: "Greenpath: Massive Moss Charger Corridor",
id: "Geo Rock Green Path 01 (1)",
sceneName: "Fungus1_12",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock61: {
name: "Geo Rock #61: 30 Geo",
spoiler: "Greenpath: Massive Moss Charger Corridor",
id: "Geo Rock Green Path 02",
sceneName: "Fungus1_12",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock62: {
name: "Geo Rock #62: 26 Geo",
spoiler: "Fog Canyon: Queen's Gardens Acid Entrance",
id: "Geo Rock Green Path 01",
sceneName: "Fungus3_03",
hitsLeft: "5",
wiki: "Geo#How_to_Acquire"
},
geoRock63: {
name: "Geo Rock #63: 22 Geo",
spoiler: "Fungal Wastes: Below Shrumal Ogres",
id: "Geo Rock Fung 01",
sceneName: "Fungus2_04",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock64: {
name: "Geo Rock #64: 22 Geo",
spoiler: "Fungal Wastes: Cornifer",
id: "Geo Rock Fung 01 (1)",
sceneName: "Fungus2_18",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock65: {
name: "Geo Rock #65: 22 Geo",
spoiler: "Fungal Wastes: Cornifer",
id: "Geo Rock Fung 01",
sceneName: "Fungus2_18",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock66: {
name: "Geo Rock #66: 17 Geo",
spoiler: "Fungal Wastes: Cornifer",
id: "Geo Rock Fung 02 (1)",
sceneName: "Fungus2_18",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock67: {
name: "Geo Rock #67: 17 Geo",
spoiler: "Fungal Wastes: Cornifer",
id: "Geo Rock Fung 02 (2)",
sceneName: "Fungus2_18",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock68: {
name: "Geo Rock #68: 15 Geo",
spoiler: "Forgotten Crossroads: Goam Journal",
id: "Geo Rock 1",
sceneName: "Crossroads_52",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock69: {
name: "Geo Rock #69: 15 Geo",
spoiler: "Forgotten Crossroads: Goam Journal",
id: "Geo Rock 2",
sceneName: "Crossroads_52",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock70: {
name: "Geo Rock #70: 22 Geo",
spoiler: "Fungal Wastes: Outside Elder Hu",
id: "Geo Rock Fung 01",
sceneName: "Fungus2_08",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock71: {
name: "Geo Rock #71: 22 Geo",
spoiler: "Fungal Wastes: Left Of Pilgrim's Way",
id: "Geo Rock Fung 01",
sceneName: "Fungus2_10",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock72: {
name: "Geo Rock #72: 17 Geo",
spoiler: "Fungal Wastes: Right of Bouncy Mushroom Grub",
id: "Geo Rock Fung 02",
sceneName: "Fungus2_11",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock73: {
name: "Geo Rock #73: 22 Geo",
spoiler: "Fungal Wastes: Right of Bouncy Mushroom Grub",
id: "Geo Rock Fung 01",
sceneName: "Fungus2_11",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock74: {
name: "Geo Rock #74: 22 Geo",
spoiler: "Fungal Wastes: Bretta Bench",
id: "Geo Rock Fung 01 (1)",
sceneName: "Fungus2_13",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock75: {
name: "Geo Rock #75: 22 Geo",
spoiler: "Fungal Wastes: Bretta Bench",
id: "Geo Rock Fung 01",
sceneName: "Fungus2_13",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock76: {
name: "Geo Rock #76: 17 Geo",
spoiler: "Fungal Wastes: Bretta Bench",
id: "Geo Rock Fung 02",
sceneName: "Fungus2_13",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock77: {
name: "Geo Rock #77: 15 Geo",
spoiler: "Fungal Wastes: Mantis Village",
id: "Geo Rock 2 (2)",
sceneName: "Fungus2_14",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock78: {
name: "Geo Rock #78: 15 Geo",
spoiler: "Fungal Wastes: Mantis Village",
id: "Geo Rock 1",
sceneName: "Fungus2_14",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock79: {
name: "Geo Rock #79: 15 Geo",
spoiler: "Fungal Wastes: Mantis Village",
id: "Geo Rock 2 (3)",
sceneName: "Fungus2_14",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock80: {
name: "Geo Rock #80: 15 Geo",
spoiler: "Fungal Wastes: Mantis Village",
id: "Geo Rock 2 (1)",
sceneName: "Fungus2_14",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock81: {
name: "Geo Rock #81: 15 Geo",
spoiler: "Fungal Wastes: Mantis Village",
id: "Geo Rock 2",
sceneName: "Fungus2_14",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock82: {
name: "Geo Rock #82: 15 Geo",
spoiler: "Fungal Wastes: Mantis Lords",
id: "Geo Rock 1",
sceneName: "Fungus2_15",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock83: {
name: "Geo Rock #83: 15 Geo",
spoiler: "Fungal Wastes: Mantis Lords",
id: "Geo Rock 1 (1)",
sceneName: "Fungus2_15",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock84: {
name: "Geo Rock #84: 22 Geo",
spoiler: "Fungal Wastes: Fungal Core Upper",
id: "Geo Rock Fung 01",
sceneName: "Fungus2_29",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock85: {
name: "Geo Rock #85: 15 Geo",
spoiler: "Fungal Wastes: Pilgrim's Way",
id: "Geo Rock 1",
sceneName: "Fungus2_21",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock86: {
name: "Geo Rock #86: 30 Geo",
spoiler: "City of Tears: Rafters",
id: "Geo Rock City 1",
sceneName: "Ruins1_03",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock87: {
name: "Geo Rock #87: 30 Geo",
spoiler: "City of Tears: Lemm Room",
id: "Geo Rock City 1 (1)",
sceneName: "Ruins1_05b",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock88: {
name: "Geo Rock #88: 30 Geo",
spoiler: "City of Tears: Rancid Egg Above Lemm",
id: "Geo Rock City 1",
sceneName: "Ruins1_05c",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock89: {
name: "Geo Rock #89: 15 Geo",
spoiler: "Forgotten Crossroads: Vessel Fragment",
id: "Geo Rock 2",
sceneName: "Crossroads_37",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock90: {
name: "Geo Rock #90: 15 Geo",
spoiler: "Forgotten Crossroads: Brooding Mawlek Middle",
id: "Geo Rock 1",
sceneName: "Crossroads_36",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock91: {
name: "Geo Rock #91: 15 Geo",
spoiler: "Howling Cliffs: Gorb",
id: "Geo Rock 1",
sceneName: "Cliffs_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock92: {
name: "Geo Rock #92: 15 Geo",
spoiler: "Howling Cliffs: Gorb",
id: "Geo Rock 1 (1)",
sceneName: "Cliffs_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock93: {
name: "Geo Rock #93: 15 Geo",
spoiler: "Howling Cliffs: Main",
id: "Geo Rock 2 (2)",
sceneName: "Cliffs_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock94: {
name: "Geo Rock #94: 15 Geo",
spoiler: "Howling Cliffs: Main",
id: "Geo Rock 2 (1)",
sceneName: "Cliffs_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock95: {
name: "Geo Rock #95: 15 Geo",
spoiler: "Howling Cliffs: Main",
id: "Geo Rock 2 (4)",
sceneName: "Cliffs_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock96: {
name: "Geo Rock #96: 15 Geo",
spoiler: "Howling Cliffs: Main",
id: "Geo Rock 2 (3)",
sceneName: "Cliffs_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock97: {
name: "Geo Rock #97: 24 Geo",
spoiler: "Crystal Peak: Dark Entrance",
id: "Geo Rock Mine",
sceneName: "Mines_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock98: {
name: "Geo Rock #98: 15 Geo",
spoiler: "Crystal Peak: Dark Entrance",
id: "Geo Rock 1",
sceneName: "Mines_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock99: {
name: "Geo Rock #99: 22 Geo",
spoiler: "Crystal Peak: Dark Entrance",
id: "Geo Rock Mine (1)",
sceneName: "Mines_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock100: {
name: "Geo Rock #100: 16 Geo",
spoiler: "Crystal Peak: Conveyor Belts Entrance",
id: "Geo Rock Mine (1)",
sceneName: "Mines_04",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock101: {
name: "Geo Rock #101: 16 Geo",
spoiler: "Crystal Peak: Conveyor Belts Entrance",
id: "Geo Rock Mine",
sceneName: "Mines_04",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock102: {
name: "Geo Rock #102: 22 Geo",
spoiler: "Crystal Peak: Above Spike Grub",
id: "Geo Rock Mine",
sceneName: "Mines_05",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock103: {
name: "Geo Rock #103: 24 Geo",
spoiler: "Crystal Peak: East Tall",
id: "Geo Rock Mine (4)",
sceneName: "Mines_20",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock104: {
name: "Geo Rock #104: 24 Geo",
spoiler: "Crystal Peak: East Tall",
id: "Geo Rock Mine (3)",
sceneName: "Mines_20",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock105: {
name: "Geo Rock #105: 24 Geo",
spoiler: "Crystal Peak: East Tall",
id: "Geo Rock Mine (2)",
sceneName: "Mines_20",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock106: {
name: "Geo Rock #106: 24 Geo",
spoiler: "Crystal Peak: Chest Crushers",
id: "Geo Rock Mine",
sceneName: "Mines_37",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock107: {
name: "Geo Rock #107: 24 Geo",
spoiler: "Crystal Peak: Chest Crushers",
id: "Geo Rock Mine (1)",
sceneName: "Mines_37",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock108: {
name: "Geo Rock #108: 30 Geo",
spoiler: "Royal Waterways: Entrance",
id: "Geo Rock City 1",
sceneName: "Waterways_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock109: {
name: "Geo Rock #109: 26 Geo",
spoiler: "Royal Waterways: Entrance",
id: "Geo Rock City 1 (1)",
sceneName: "Waterways_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock110: {
name: "Geo Rock #110: 30 Geo",
spoiler: "Royal Waterways: Mask Shard Room",
id: "Geo Rock City 1",
sceneName: "Waterways_04b",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock111: {
name: "Geo Rock #111: 15 Geo",
spoiler: "City of Tears: Broken Elevator",
id: "Geo Rock 2 (1)",
sceneName: "Abyss_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock112: {
name: "Geo Rock #112: 15 Geo",
spoiler: "City of Tears: Broken Elevator",
id: "Geo Rock 2",
sceneName: "Abyss_01",
hitsLeft: "5",
wiki: "Geo#How_to_Acquire"
},
geoRock113: {
name: "Geo Rock #113: 15 Geo",
spoiler: "City of Tears: Broken Elevator",
id: "Geo Rock 1",
sceneName: "Abyss_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock114: {
name: "Geo Rock #114: 15 Geo",
spoiler: "Ancient Basin: Broken Bridge",
id: "Geo Rock Deepnest (1)",
sceneName: "Abyss_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock115: {
name: "Geo Rock #115: 15 Geo",
spoiler: "Ancient Basin: Broken Bridge",
id: "Geo Rock Deepnest",
sceneName: "Abyss_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock116: {
name: "Geo Rock #116: 15 Geo",
spoiler: "Ancient Basin: Broken Bridge",
id: "Geo Rock Deepnest (2)",
sceneName: "Abyss_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock117: {
name: "Geo Rock #117: 30 Geo",
spoiler: "City of Tears: King's Station",
id: "Geo Rock City 1",
sceneName: "Ruins2_06",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock118: {
name: "Geo Rock #118: 30 Geo",
spoiler: "City of Tears: Above King's Station",
id: "Geo Rock City 1",
sceneName: "Ruins2_05",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock119: {
name: "Geo Rock #119: 44 Geo",
spoiler: "Kingdom's Edge: Whispering Root",
id: "Geo Rock Outskirts",
sceneName: "Deepnest_East_07",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock120: {
name: "Geo Rock #120: 44 Geo",
spoiler: "Kingdom's Edge: Whispering Root",
id: "Geo Rock Outskirts (1)",
sceneName: "Deepnest_East_07",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock121: {
name: "Geo Rock #121: 44 Geo",
spoiler: "Kingdom's Edge: Outside Nailmaster Oro",
id: "Geo Rock Outskirts",
sceneName: "Deepnest_East_06",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock122: {
name: "Geo Rock #122: 44 Geo",
spoiler: "Kingdom's Edge: Outside Nailmaster Oro",
id: "Geo Rock Outskirts (1)",
sceneName: "Deepnest_East_06",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock123: {
name: "Geo Rock #123: 44 Geo",
spoiler: "Kingdom's Edge: Bardoon",
id: "Geo Rock Outskirts",
sceneName: "Deepnest_East_04",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock124: {
name: "Geo Rock #124: 44 Geo",
spoiler: "Kingdom's Edge: Great Hopper King's Idol",
id: "Geo Rock Outskirts",
sceneName: "Deepnest_East_08",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock125: {
name: "Geo Rock #125: 44 Geo",
spoiler: "Kingdom's Edge: Pale Lurker Arena",
id: "Geo Rock Outskirts",
sceneName: "GG_Lurker",
hitsLeft: "5",
wiki: "Geo#How_to_Acquire"
},
geoRock126: {
name: "Geo Rock #126: 30 Geo",
spoiler: "Fog Canyon: Overgrown Mound",
id: "Geo Rock Green Path 02",
sceneName: "Room_Fungus_Shaman",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock127: {
name: "Geo Rock #127: 30 Geo",
spoiler: "City of Tears: Soul Master Rewards Room",
id: "Geo Rock City 1",
sceneName: "Ruins1_32",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock128: {
name: "Geo Rock #128: 30 Geo",
spoiler: "Royal Waterways: Outside Flukemarm",
id: "Geo Rock City 1",
sceneName: "Waterways_08",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock129: {
name: "Geo Rock #129: 30 Geo",
spoiler: "Royal Waterways: Flukemunga Corridor",
id: "Geo Rock City 1",
sceneName: "GG_Pipeway",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock130: {
name: "Geo Rock #130: 22 Geo",
spoiler: "Royal Waterways: Fluke Hermit Room",
id: "Geo Rock Fung 01",
sceneName: "Room_GG_Shortcut",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock131: {
name: "Geo Rock #131: 17 Geo",
spoiler: "Royal Waterways: Fluke Hermit Room",
id: "Geo Rock Fung 02 (1)",
sceneName: "Room_GG_Shortcut",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock132: {
name: "Geo Rock #132: 25 Geo",
spoiler: "Resting Grounds: Crypts",
id: "Geo Rock Grave 02 (1)",
sceneName: "RestingGrounds_10",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock133: {
name: "Geo Rock #133: 25 Geo",
spoiler: "Resting Grounds: Crypts",
id: "Geo Rock Grave 02",
sceneName: "RestingGrounds_10",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock134: {
name: "Geo Rock #134: 25 Geo",
spoiler: "Resting Grounds: Crypts",
id: "Geo Rock Grave 01",
sceneName: "RestingGrounds_10",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock135: {
name: "Geo Rock #135: 24 Geo",
spoiler: "Crystal Peak: Crystal Heart Gauntlet",
id: "Geo Rock Mine",
sceneName: "Mines_31",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock136: {
name: "Geo Rock #136: 24 Geo",
spoiler: "Crystal Peak: Grub Mimic",
id: "Geo Rock Mine",
sceneName: "Mines_16",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock137: {
name: "Geo Rock #137: 35 Geo",
spoiler: "Ancient Basin: Corridor to Broken Vessel",
id: "Geo Rock Abyss",
sceneName: "Abyss_18",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock138: {
name: "Geo Rock #138: 35 Geo",
spoiler: "The Abyss: Main/Core Area",
id: "Geo Rock Abyss (1)",
sceneName: "Abyss_06_Core",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock139: {
name: "Geo Rock #139: 35 Geo",
spoiler: "The Abyss: Main/Core Area",
id: "Geo Rock Abyss",
sceneName: "Abyss_06_Core",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock140: {
name: "Geo Rock #140: 35 Geo",
spoiler: "The Abyss: Main/Core Area",
id: "Geo Rock Abyss",
sceneName: "Abyss_06_Core",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock141: {
name: "Geo Rock #141: 35 Geo",
spoiler: "Ancient Basin: Broken Vessel Grub",
id: "Geo Rock Abyss (1)",
sceneName: "Abyss_19",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock142: {
name: "Geo Rock #142: 35 Geo",
spoiler: "Ancient Basin: Broken Vessel Grub",
id: "Geo Rock Abyss",
sceneName: "Abyss_19",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock143: {
name: "Geo Rock #143: 24 Geo",
spoiler: "Crystal Peak: Hallownest Crown Climb",
id: "Geo Rock Mine",
sceneName: "Mines_25",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock144: {
name: "Geo Rock #144: 24 Geo",
spoiler: "Crystal Peak: Hallownest Crown Climb",
id: "Geo Rock Mine (4)",
sceneName: "Mines_25",
hitsLeft: "4",
wiki: "Geo#How_to_Acquire"
},
geoRock145: {
name: "Geo Rock #145: 24 Geo",
spoiler: "Crystal Peak: Hallownest Crown Climb",
id: "Geo Rock Mine (2)",
sceneName: "Mines_25",
hitsLeft: "4",
wiki: "Geo#How_to_Acquire"
},
geoRock146: {
name: "Geo Rock #146: 24 Geo",
spoiler: "Crystal Peak: Hallownest Crown Climb",
id: "Geo Rock Mine (1)",
sceneName: "Mines_25",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock147: {
name: "Geo Rock #147: 24 Geo",
spoiler: "Crystal Peak: Hallownest Crown Climb",
id: "Geo Rock Mine (3)",
sceneName: "Mines_25",
hitsLeft: "4",
wiki: "Geo#How_to_Acquire"
},
geoRock148: {
name: "Geo Rock #148: 30 Geo",
spoiler: "City of Tears: Watcher's Spire Second Floor",
id: "Geo Rock City 1",
sceneName: "Ruins2_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock149: {
name: "Geo Rock #149: 30 Geo",
spoiler: "Fog Canyon: East Tall",
id: "Geo Rock Green Path 01",
sceneName: "Fungus3_26",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock150: {
name: "Geo Rock #150: 26 Geo",
spoiler: "Queen's Gardens: Main Arena",
id: "Geo Rock Green Path 01",
sceneName: "Fungus3_10",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock151: {
name: "Geo Rock #151: 30 Geo",
spoiler: "Queen's Gardens: Outside White Lady",
id: "Geo Rock Green Path 02",
sceneName: "Fungus3_48",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock152: {
name: "Geo Rock #152: 27 Geo",
spoiler: "Queen's Gardens: Moss Prophet Room",
id: "Geo Rock Green Path 01 (1)",
sceneName: "Fungus3_39",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock153: {
name: "Geo Rock #153: 30 Geo",
spoiler: "Queen's Gardens: Moss Prophet Room",
id: "Geo Rock Green Path 01",
sceneName: "Fungus3_39",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock154: {
name: "Geo Rock #154: 15 Geo",
spoiler: "Fungal Wastes: Deepnest Fall",
id: "Geo Rock 1",
sceneName: "Deepnest_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock155: {
name: "Geo Rock #155: 15 Geo",
spoiler: "Fungal Wastes: Deepnest Fall",
id: "Geo Rock 2",
sceneName: "Deepnest_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock156: {
name: "Geo Rock #156: 26 Geo",
spoiler: "Queen's Gardens: Corridor To Deepnest",
id: "Geo Rock Green Path 01 (1)",
sceneName: "Deepnest_43",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock157: {
name: "Geo Rock #157: 26 Geo",
spoiler: "Queen's Gardens: Corridor To Deepnest",
id: "Geo Rock Green Path 01",
sceneName: "Deepnest_43",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock158: {
name: "Geo Rock #158: 22 Geo",
spoiler: "Fungal Wastes: Fungal Core Lower",
id: "Geo Rock Fung 01",
sceneName: "Fungus2_30",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock159: {
name: "Geo Rock #159: 22 Geo",
spoiler: "Fungal Wastes: Fungal Core Lower",
id: "Geo Rock Fung 01 (1)",
sceneName: "Fungus2_30",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock160: {
name: "Geo Rock #160: 15 Geo",
spoiler: "Deepnest: Lower Cornifer",
id: "Geo Rock Deepnest",
sceneName: "Fungus2_25",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock161: {
name: "Geo Rock #161: 15 Geo",
spoiler: "Deepnest: Lower Cornifer",
id: "Geo Rock Deepnest (1)",
sceneName: "Fungus2_25",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock162: {
name: "Geo Rock #162: 15 Geo",
spoiler: "Deepnest: Lower Cornifer",
id: "Geo Rock Deepnest (2)",
sceneName: "Fungus2_25",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock163: {
name: "Geo Rock #163: 15 Geo",
spoiler: "Deepnest: Top of Lower Cornifer",
id: "Geo Rock Deepnest (4)",
sceneName: "Deepnest_16",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock164: {
name: "Geo Rock #164: 15 Geo",
spoiler: "Deepnest: Top of Lower Cornifer",
id: "Geo Rock Deepnest (3)",
sceneName: "Deepnest_16",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock165: {
name: "Geo Rock #165: 15 Geo",
spoiler: "Deepnest: Top of Lower Cornifer",
id: "Geo Rock Deepnest (1)",
sceneName: "Deepnest_16",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock166: {
name: "Geo Rock #166: 15 Geo",
spoiler: "Deepnest: Top of Lower Cornifer",
id: "Geo Rock Deepnest",
sceneName: "Deepnest_16",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock167: {
name: "Geo Rock #167: 15 Geo",
spoiler: "Deepnest: Top of Lower Cornifer",
id: "Geo Rock Deepnest (2)",
sceneName: "Deepnest_16",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock168: {
name: "Geo Rock #168: 15 Geo",
spoiler: "Deepnest: Outside Grub Mimics",
id: "Geo Rock Deepnest (1)",
sceneName: "Deepnest_02",
hitsLeft: "3",
wiki: "Geo#How_to_Acquire"
},
geoRock169: {
name: "Geo Rock #169: 15 Geo",
spoiler: "Deepnest: Outside Grub Mimics",
id: "Geo Rock Deepnest",
sceneName: "Deepnest_02",
hitsLeft: "3",
wiki: "Geo#How_to_Acquire"
},
geoRock170: {
name: "Geo Rock #170: 15 Geo",
spoiler: "Deepnest: Whispering Root",
id: "Geo Rock Deepnest (1)",
sceneName: "Deepnest_39",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock171: {
name: "Geo Rock #171: 15 Geo",
spoiler: "Deepnest: Whispering Root",
id: "Geo Rock Deepnest (2)",
sceneName: "Deepnest_39",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock172: {
name: "Geo Rock #172: 15 Geo",
spoiler: "Deepnest: Whispering Root",
id: "Geo Rock Deepnest",
sceneName: "Deepnest_39",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock173: {
name: "Geo Rock #173: 15 Geo",
spoiler: "Deepnest: Left of Hot Spring",
id: "Geo Rock Deepnest (1)",
sceneName: "Deepnest_03",
hitsLeft: "3",
wiki: "Geo#How_to_Acquire"
},
geoRock174: {
name: "Geo Rock #174: 15 Geo",
spoiler: "Deepnest: Left of Hot Spring",
id: "Geo Rock Deepnest (2)",
sceneName: "Deepnest_03",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock175: {
name: "Geo Rock #175: 15 Geo",
spoiler: "Deepnest: Left of Hot Spring",
id: "Geo Rock Deepnest",
sceneName: "Deepnest_03",
hitsLeft: "3",
wiki: "Geo#How_to_Acquire"
},
geoRock176: {
name: "Geo Rock #176: 15 Geo",
spoiler: "Deepnest: Outside Galien",
id: "Geo Rock Deepnest (1)",
sceneName: "Deepnest_35",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock177: {
name: "Geo Rock #177: 15 Geo",
spoiler: "Deepnest: Outside Galien",
id: "Geo Rock Deepnest",
sceneName: "Deepnest_35",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock178: {
name: "Geo Rock #178: 15 Geo",
spoiler: "Deepnest: Corridor to Tram",
id: "Geo Rock Deepnest",
sceneName: "Deepnest_37",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock179: {
name: "Geo Rock #179: 15 Geo",
spoiler: "Deepnest: Corridor to Tram",
id: "Geo Rock Deepnest (1)",
sceneName: "Deepnest_37",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock180: {
name: "Geo Rock #180: 15 Geo",
spoiler: "Kingdom's Edge: Left of The Hive",
id: "Geo Rock Deepnest",
sceneName: "Deepnest_East_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock181: {
name: "Geo Rock #181: 15 Geo",
spoiler: "Kingdom's Edge: Left of The Hive",
id: "Geo Rock Deepnest (1)",
sceneName: "Deepnest_East_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock182: {
name: "Geo Rock #182: 15 Geo",
spoiler: "Kingdom's Edge: Above The Hive",
id: "Geo Rock Deepnest",
sceneName: "Deepnest_East_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock183: {
name: "Geo Rock #183: 15 Geo",
spoiler: "Kingdom's Edge: Above The Hive",
id: "Geo Rock Deepnest (1)",
sceneName: "Deepnest_East_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock184: {
name: "Geo Rock #184: 30 Geo",
spoiler: "Royal Waterways: Left of Isma's Grove",
id: "Geo Rock City 1",
sceneName: "Waterways_07",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock185: {
name: "Geo Rock #185: 56 Geo",
spoiler: "The Hive: Outside Grub",
id: "Geo Rock Hive (2)",
sceneName: "Hive_03",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock186: {
name: "Geo Rock #186: 56 Geo",
spoiler: "The Hive: Outside Grub",
id: "Geo Rock Hive",
sceneName: "Hive_03",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock187: {
name: "Geo Rock #187: 56 Geo",
spoiler: "The Hive: Outside Grub",
id: "Geo Rock Hive (1)",
sceneName: "Hive_03",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock188: {
name: "Geo Rock #188: 56 Geo",
spoiler: "The Hive: Entrance",
id: "Geo Rock Hive",
sceneName: "Hive_01",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock189: {
name: "Geo Rock #189: 56 Geo",
spoiler: "The Hive: Whispering Root",
id: "Geo Rock Hive",
sceneName: "Hive_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock190: {
name: "Geo Rock #190: 56 Geo",
spoiler: "The Hive: Whispering Root",
id: "Geo Rock Hive (2)",
sceneName: "Hive_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock191: {
name: "Geo Rock #191: 56 Geo",
spoiler: "The Hive: Whispering Root",
id: "Geo Rock Hive (1)",
sceneName: "Hive_02",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock192: {
name: "Geo Rock #192: 56 Geo",
spoiler: "The Hive: Mask Shard Room",
id: "Geo Rock Hive",
sceneName: "Hive_04",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock193: {
name: "Geo Rock #193: 56 Geo",
spoiler: "The Hive: Mask Shard Room",
id: "Geo Rock Hive (1)",
sceneName: "Hive_04",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock194: {
name: "Geo Rock #194: 15 Geo",
spoiler: "Deepnest: Nosk Corridor",
id: "Geo Rock Deepnest",
sceneName: "Deepnest_31",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock195: {
name: "Geo Rock #195: 15 Geo",
spoiler: "Deepnest: Nosk Corridor",
id: "Geo Rock Deepnest (1)",
sceneName: "Deepnest_31",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock196: {
name: "Geo Rock #196: 15 Geo",
spoiler: "Deepnest: Nosk Corridor",
id: "Geo Rock Deepnest (2)",
sceneName: "Deepnest_31",
hitsLeft: "3",
wiki: "Geo#How_to_Acquire"
},
geoRock197: {
name: "Geo Rock #197: 15 Geo",
spoiler: "Deepnest: Beast's Den",
id: "Geo Rock Deepnest (3)",
sceneName: "Deepnest_Spider_Town",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock198: {
name: "Geo Rock #198: 15 Geo",
spoiler: "Deepnest: Beast's Den",
id: "Geo Rock Deepnest (4)",
sceneName: "Deepnest_Spider_Town",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock199: {
name: "Geo Rock #199: 20 Geo",
spoiler: "Deepnest: Beast's Den",
id: "Geo Rock Deepnest (5)",
sceneName: "Deepnest_Spider_Town",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock200: {
name: "Geo Rock #200: 15 Geo",
spoiler: "Deepnest: Beast's Den",
id: "Geo Rock Deepnest",
sceneName: "Deepnest_Spider_Town",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock201: {
name: "Geo Rock #201: 15 Geo",
spoiler: "Deepnest: Beast's Den",
id: "Geo Rock Deepnest (1)",
sceneName: "Deepnest_Spider_Town",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock202: {
name: "Geo Rock #202: 30 Geo",
spoiler: "Deepnest: Beast's Den",
id: "Geo Rock Deepnest (7)",
sceneName: "Deepnest_Spider_Town",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock203: {
name: "Geo Rock #203: 15 Geo",
spoiler: "Deepnest: Beast's Den",
id: "Geo Rock Deepnest (2)",
sceneName: "Deepnest_Spider_Town",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock204: {
name: "Geo Rock #204: 20 Geo",
spoiler: "Deepnest: Beast's Den",
id: "Geo Rock Deepnest (6)",
sceneName: "Deepnest_Spider_Town",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock205: {
name: "Geo Rock #205: 30 Geo",
spoiler: "City of Tears: Pleasure House Elevator",
id: "Geo Rock City 1",
sceneName: "Ruins_Elevator",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock206: {
name: "Geo Rock #206: 44 Geo",
spoiler: "Kingdom's Edge: Near 420 Geo Rock",
id: "Geo Rock Outskirts",
sceneName: "Deepnest_East_17",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
geoRock207: {
name: "Geo Rock #207: 420 Geo",
spoiler: "Kingdom's Edge",
id: "Giant Geo Egg",
sceneName: "Deepnest_East_17",
hitsLeft: "0",
wiki: "Geo#How_to_Acquire"
},
},
},*/
/* ###################################### Secrets -> World Interactions ############################################## */
/*worldInteractions: {
h2: "World Interactions",
id: "hk-world-interactions",
description: `Certain interactions the player can make with NPCs in the game or world objects. All these here don't count towards either 112% Game Completion or Achievements.`,
entries: {
unlockedCompletionRate: {
name: "World Sense Ability",
spoiler: "Temple of the Black Egg: Lore Tablet",
wiki: "World_Sense"
},
spaBugsEncountered: {
name: "Gossipping Bugs",
spoiler: "Forgotten Crossroads: Hot Springs, acquire Mantis Claw",
wiki: "Hot_Spring#Forgotten_Crossroads"
},
jijiDoorUnlocked: {
name: "Confessor Jiji's Cave Unlocked",
spoiler: "Dirtmouth, requires Simple Key",
wiki: "Jiji"
},
bathHouseOpened: {
name: "Pleasure House Door Unlocked",
spoiler: "City of Tears: Right Side Main Hub Area",
wiki: "City_of_Tears#Sub-area:_Pleasure_House"
},
openedWaterwaysManhole: {
name: "Waterways Manhole Unlocked",
spoiler: "City of Tears: below Lemm, use Simple Key",
wiki: "Royal_Waterways#How_to_access"
},
gladeDoorOpened: {
name: "Spirits' Glade Door Opened",
spoiler: "Resting Grounds, Seer: 200 Essence",
wiki: "Resting_Grounds#Sub-area:_Spirits'_Glade"
},
openedCityGate: {
name: "City of Tears Gate Opened",
spoiler: "Fungal Wastes, requires City Crest",
wiki: "Fungal_Wastes"
},
soulSanctumShortcut: {
name: "Soul Sanctum Shortcut",
spoiler: "City of Tears: Cornifer Lift Room, break left wall",
id: "Breakable Wall Ruin Lift",
sceneName: "Ruins1_31",
wiki: "City_of_Tears#Sub-area:_Soul_Sanctum"
},
waterwaysGate: {
name: "Waterways Gate Opened",
spoiler: "Royal Waterways: Cornifer Room, use lever",
wiki: "Royal_Waterways"
},
watcherChandelier: {
name: "Chandelier Dropped",
spoiler: "City of Tears: Watcher Knights Room, break ceiling",
wiki: "Watcher_Knight#In-game_events"
},
colosseumHiddenHotSpring: {
name: "Hidden Hot Spring",
spoiler: "Colosseum of Fools, break wall right of Bench",
id: "Breakable Wall_Silhouette",
sceneName: "Room_Colosseum_02",
wiki: "Colosseum_of_Fools#Description"
},
stagEggInspected: {
name: "Stag Nest Egg Inspected",
spoiler: "Howling Cliffs: Top of Stag Nest",
wiki: "Howling_Cliffs#Sub-area:_Stag_Nest"
},
deepnestBridgeCollapsed: {
name: "Deepnest Entry Bridge Collapsed",
spoiler: "Fungal Wastes, left of Spore Shroom",
wiki: "Deepnest#How_to_access"
},
maskmakerUnmasked1: {
name: "Mask Maker Unmasked",
spoiler: "Deepnest, use Desolate Dive on Mask Maker",
wiki: "Mask_Maker#In-game_events"
},
bankerAccountPurchased: {
name: "Bank Account Opened",
spoiler: "100 Geo: Fog Canyon: Millibelle the Banker",
wiki: "Millibelle"
},
millibelleLeft: {
name: "Banker Disappeared",
spoiler: "Fog Canyon: Millibelle the Banker",
wiki: "Millibelle"
},
millibelleCheckedStand: {
name: "Banker Stand Investigated",
spoiler: "Fog Canyon: Millibelle the Banker",
wiki: "Millibelle"
},
bankerSpaMet: {
name: "Found & Talked to Millibelle",
spoiler: "City of Tears: Hot Springs, Simple Key",
wiki: "Millibelle"
},
millibelleReclaimedAllGeo: {
name: "Reclaimed All Geo",
spoiler: "City of Tears: Hot Springs, Millibelle the Thief",
wiki: "Millibelle"
},
elderbugGaveFlower: {
name: "Delicate Flower: Elderbug",
spoiler: "Deliver from Traitor's Child Grave",
wiki: "Delicate_Flower#List_of_Possible_Recipients"
},
givenGodseekerFlower: {
name: "Delicate Flower: Godseeker",
spoiler: "Possible after completing 2 Pantheons",
wiki: "Delicate_Flower#List_of_Possible_Recipients"
},
givenOroFlower: {
name: "Delicate Flower: Nailmaster Oro",
spoiler: "D. from Traitor's Child Grave",
wiki: "Delicate_Flower#List_of_Possible_Recipients"
},
givenWhiteLadyFlower: {
name: "Delicate Flower: White Lady",
spoiler: "Deliver from Traitor's Child Grave",
wiki: "Delicate_Flower#List_of_Possible_Recipients"
},
givenEmilitiaFlower: {
name: "Delicate Flower: Emilitia",
spoiler: "Deliver from Traitor's Child Grave",
wiki: "Delicate_Flower#List_of_Possible_Recipients"
},
},
},*/
/* ###################################### Secrets -> Secret Rooms ############################################## */
/*secretRooms: {
h2: "Secret Rooms",
id: "hk-secret-rooms",
description: `Certain Secret Rooms in the game. Grimm's Tent Secret is missable when the player will Banish the Troupe or complete the Ritual.`,
entries: {
grimmTentSecretRoom: {
name: "Grimm's Tent: Secret Room (missable)",
spoiler: "Dirtmouth: inside Grimm's Tent",
id: "Secret Mask",
sceneName: "Grimm_Main_Tent",
wiki: "Dirtmouth#The_Grimm_Troupe.27s_Tents"
},
towerOfLoveSecretRoom: {
name: "Tower of Love: Secret Room",
spoiler: "City of Tears: near The Collector's Map",
id: "secret sound_grub room",
sceneName: "Ruins2_11",
wiki: "Collector#Trivia"
},
weaversDenSecretRoom1: {
name: "Weaver's Den: Secret Room #1",
spoiler: "Deepnest: inside Weaver's Den",
id: "Breakable Wall",
sceneName: "Deepnest_45_v02",
wiki: "Deepnest#Sub-area:_Weavers.27_Den"
},
weaversDenSecretRoom2: {
name: "Weaver's Den: Secret Room #2",
spoiler: "Deepnest: inside Weaver's Den",
id: "Breakable Wall Waterways",
sceneName: "Deepnest_45_v02",
wiki: "Deepnest#Sub-area:_Weavers.27_Den"
},
pathOfPainEntrance: {
name: "White Palace: Path of Pain Entrance",
spoiler: "Break left wall above lift area",
id: "Breakable Wall Ruin Lift",
sceneName: "White_Palace_06",
wiki: "White_Palace#Sub-area:_Path_of_Pain"
},
killsBindingSeal: {
name: "White Palace: Path of Pain",
spoiler: "Main Secret Area, After Middle Lift",
wiki: "White_Palace#Sub-area:_Path_of_Pain"
},
whitePalaceSecretRoomVisited: {
name: "White Palace: Secret Room #1",
spoiler: "The Pale King's Workshop",
wiki: "White_Palace#The_Pale_King.27s_workshop"
},
whiteLadyRoom: {
name: "White Palace: Secret Room #2",
spoiler: "White Lady's Room, break floor",
id: "Quake Floor",
sceneName: "White_Palace_09",
wiki: "White_Palace#White_Lady.27s_room"
},
throneRoomLoreTablet: {
name: "White Palace: Secret Room #3",
spoiler: "Throne Room, break right wall",
id: "Breakable Wall Waterways",
sceneName: "White_Palace_09",
wiki: "White_Palace#Throne_room_Lore_Tablet"
},
//#52 Quake Floor 🗺️ Palace Caged Lever ⌨️ White_Palace_15
//#53 Breakable Wall Waterways 🗺️ Palace Spike Drop ⌨️ White_Palace_12
//#54 Break Floor 1 🗺️ Palace Spike Drop ⌨️ White_Palace_12
},
},*/
/* ###################################### Secrets -> Cornifer's Notes ############################################## */
/*corniferNotes: {
h2: "Cornifer's Notes",
id: "hk-cornifer-notes",
description: `Cornifer the Cartographer leaves his note on the ground every time he leaves the current area. The note will be at the same spot where Cornifer was met. He leaves an area once a specific condition from that area was met, like defeating a boss or learning a new ability. After reading a note it will stop glowing and the entry will be marked as completed.`,
entries: {
corniferNote1: {
name: "Note #1: Forgotten Crossroads",
spoiler: "Below Big Gruzzer Room",
id: "Shiny",
sceneName: "Crossroads_33",
wiki: "Cornifer#Locations"
},
corniferNote2: {
name: "Note #2: Greenpath",
spoiler: "Room below the Crossroads entrance",
id: "Shiny",
sceneName: "Fungus1_06",
wiki: "Cornifer#Locations"
},
corniferNote3: {
name: "Note #3: Fungal Wastes",
spoiler: "Right of Queen's Station",
id: "Shiny",
sceneName: "Fungus2_18",
wiki: "Cornifer#Locations"
},
corniferNote4: {
name: "Note #4: Howling Cliffs",
spoiler: "Big Main Area on the left side",
id: "Shiny",
sceneName: "Cliffs_01",
wiki: "Cornifer#Locations"
},
corniferNote5: {
name: "Note #5: City of Tears",
spoiler: "Toll Bench left of Soul Sanctum",
id: "Shiny",
sceneName: "Ruins1_31",
wiki: "Cornifer#Locations"
},
corniferNote6: {
name: "Note #6: Crystal Peak",
spoiler: "Left of Central Bench",
id: "Shiny",
sceneName: "Mines_30",
wiki: "Cornifer#Locations"
},
corniferNote7: {
name: "Note #7: Resting Grounds",
spoiler: "Near the Stag Station",
id: "Shiny",
sceneName: "RestingGrounds_09",
wiki: "Cornifer#Locations"
},
corniferNote8: {
name: "Note #8: Royal Waterways",
spoiler: "Near Fungal Wastes exit",
id: "Shiny",
sceneName: "Waterways_09",
wiki: "Cornifer#Locations"
},
corniferNote9: {
name: "Note #9: Ancient Basin",
spoiler: "Below the Tram and Fountain",
id: "Shiny",
sceneName: "Abyss_04",
wiki: "Cornifer#Locations"
},
corniferNote10: {
name: "Note #10: Kingdom's Edge",
spoiler: "Below the King's Station entrance",
id: "Shiny",
sceneName: "Deepnest_East_03",
wiki: "Cornifer#Locations"
},
},
},*/
/* ################ Game Statistics ################### */
/*statistics: {
h2: "Game Statistics",
id: "hk-statistics",
description: "Dedicated to numbers and stats fans. Everything what the game may not always tell you directly, but what can be read from a save file.",
entries: {
journalEntriesCompleted: {
name: "Creatures Encountered",
spoiler: "Hunter's Journal (158-164 max)",
spoilerDefault: "Hunter's Journal",
max: 164,
maxDefault: 164,
wiki: "Category:Enemies_(Hollow_Knight)#Compendium"
},
//Add 4 remaining to Hunter Notes max
journalNotesCompleted: {
name: "Hunter Notes Completed",
spoiler: "Hunter's Journal (158-164 max)",
spoilerDefault: "Hunter's Journal",
max: 164,
maxDefault: 164,
wiki: "Category:Enemies_(Hollow_Knight)#Compendium"
},
nailDamage: {
name: "Base Nail Damage",
spoiler: "Nailsmith upgrades, City of Tears",
max: 21,
maxDefault: 21,
wiki: "Nail#Nail_Upgrades"
},
// not ghostCoins
geoPool: {
name: "Shade Geo",
spoiler: "Amount of Geo the Shade is currently holding",
min: 0,
wiki: "Shade"
},
soldTrinket1: {
name: "Wanderer's Journals Sold",
spoiler: "City of Tears: Relic Seeker Lemm",
geoValue: 200,
wiki: "Wanderer's_Journal"
},
soldTrinket2: {
name: "Hallownest Seals Sold",
spoiler: "City of Tears: Relic Seeker Lemm",
geoValue: 450,
wiki: "Hallownest_Seal"
},
soldTrinket3: {
name: "King's Idols Sold",
spoiler: "City of Tears: Relic Seeker Lemm",
geoValue: 800,
wiki: "King's_Idol"
},
soldTrinket4: {
name: "Arcane Eggs Sold",
spoiler: "City of Tears: Relic Seeker Lemm",
geoValue: 1200,
wiki: "Arcane_Egg"
},
relicsSoldTotalGeo: {
name: "Total Geo from Sold Relics",
spoiler: "City of Tears: Relic Seeker Lemm",
wiki: "Lemm#Collectibles"
},
ore: {
name: "Pale Ore",
spoiler: "Current amount of Pale Ore in inventory",
wiki: "Pale_Ore"
},
simpleKeys: {
name: "Simple Keys",
spoiler: "Current amount of Simple Keys in inventory",
wiki: "Simple_Key"
},
rancidEggs: {
name: "Rancid Eggs",
spoiler: "Current amount of Rancid Eggs in inventory",
wiki: "Rancid_Egg"
},
jinnEggsSold: {
name: "Rancid Eggs Sold",
spoiler: "Dirtmouth: Jinn, Steel Soul Mode only",
wiki: "Jinn"
},
xunFlowerBrokeTimes: {
name: "Delicate Flowers Destroyed",
spoiler: "Grey Mourner, Traitor's Child Grave",
wiki: "Delicate_Flower"
},
itemsDiscovered: {
id: "itemsDiscovered",
name: "Interactables",
spoiler: "Not A. | Activated | Discovered",
wiki: "Category:Exploration_(Hollow_Knight)",
notActivated: 0,
activated: 0,
discoveredTotal: 0
},
bankerBalance: {
name: "Bank Account Balance",
spoiler: "Fog Canyon: Millibelle the Banker",
wiki: "Millibelle"
},
whiteDefenderDefeats: {
name: "White Defender Times Defeated",
spoiler: "Royal Waterways (5 max)",
max: 5,
maxDefault: 5,
wiki: "White_Defender"
},
greyPrinceDefeats: {
name: "Grey Prince Zote Times Defeated",
spoiler: "Dirtmouth (10 max)",
max: 10,
maxDefault: 10,
wiki: "Grey_Prince_Zote"
}
},
},*/
/* ################################################# Godhome Statistics ############################################## */
/*godhomeStatistics: {
h2: "Godhome Statistics",
id: "hk-godhome-statistics",
description: "Everything in Godhome, that didn't fit any other category.",
entries: {
seenGGWastes: {
name: "Tuner Memory",
spoiler: "Requires completing 3 Pantheons, 2% chance",
wiki: "Godhome#Tuner_Memory"
},
blueRoomDoorUnlocked: {
name: "Lifeblood Door Open",
spoiler: "Complete any 8 Pantheon bindings total",
wiki: "Godhome#Locked_Lifeblood_Room"
},
killedVoidIdol_1: {
name: "Journal: Void Idol Attuned",
spoiler: "Hall of Gods: Defeat All (Attuned)",
wiki: "Void_Idol"
},
killedVoidIdol_2: {
name: "Journal: Void Idol Ascended",
spoiler: "Hall of Gods: Defeat All (Ascended)",
wiki: "Void_Idol"
},
killedVoidIdol_3: {
name: "Journal: Void Idol Radiant",
spoiler: "Hall of Gods: Defeat All (Radiant)",
wiki: "Void_Idol"
},
killedGodseekerMask: {
name: "Journal: Weathered Mask",
spoiler: "Land of Storms: All Pantheons & Bindings",
wiki: "Weathered_Mask"
},
zoteStatueWallBroken: {
name: "Intruder Discovered",
spoiler: "Hall of Gods: Zote Statue (upper right)",
wiki: "Hall_of_Gods#Zote"
},
ordealAchieved: {
name: "The Eternal Ordeal",
spoiler: "Reach 57 Zotelings defeated",
wiki: "Eternal_Ordeal"
}
},
},*/
/* ################################################### Pantheon of the Master #################################################### */
/*pantheonOfTheMaster: {
h2: "P1 – Pantheon of the Master",
id: "hk-pantheon-master",
property: "bossDoorStateTier1",
description: "Seek the Gods of Nail and Shell",
entries: {
unlocked: {
name: "P1 Unlocked",
spoiler: "Defeat P1 bosses in the game world to unlock",
wiki: "Pantheon_of_the_Master"
},
completed: {
name: "P1 Completed",
spoiler: "Defeat all bosses in a row to complete",
wiki: "Pantheon_of_the_Master"
},
boundNail: {
name: "P1 Binding: Nail",
spoiler: "Complete with the Nail binding active",
wiki: "Pantheons#Bindings"
},
boundShell: {
name: "P1 Binding: Shell",
spoiler: "Complete with the Shell binding active",
wiki: "Pantheons#Bindings"
},
boundCharms: {
name: "P1 Binding: Charms",
spoiler: "Complete with the Charm binding active",
wiki: "Pantheons#Bindings"
},
boundSoul: {
name: "P1 Binding: Soul",
spoiler: "Complete with the Soul binding active",
wiki: "Pantheons#Bindings"
},
allBindings: {
name: "P1 All Bindings",
spoiler: "Complete with all bindings active at once",
wiki: "Pantheons#Bindings"
},
noHits: {
name: "P1 No Damage",
spoiler: "Complete without taking a single hit",
wiki: "Pantheons"
},
},
},*/
/* ################################################### Pantheon of the Artist #################################################### */
/*pantheonOfTheArtist: {
h2: "P2 – Pantheon of the Artist",
id: "hk-pantheon-artist",
property: "bossDoorStateTier2",
description: "Seek the God Inspired",
entries: {
unlocked: {
name: "P2 Unlocked",
spoiler: "Defeat P2 bosses in the game world to unlock",
wiki: "Pantheon_of_the_Artist"
},
completed: {
name: "P2 Completed",
spoiler: "Defeat all bosses in a row to complete",
wiki: "Pantheon_of_the_Artist"
},
boundNail: {
name: "P2 Binding: Nail",
spoiler: "Complete with the Nail binding active",
wiki: "Pantheons#Bindings"
},
boundShell: {
name: "P2 Binding: Shell",
spoiler: "Complete with the Shell binding active",
wiki: "Pantheons#Bindings"
},
boundCharms: {
name: "P2 Binding: Charms",
spoiler: "Complete with the Charm binding active",
wiki: "Pantheons#Bindings"
},
boundSoul: {
name: "P2 Binding: Soul",
spoiler: "Complete with the Soul binding active",
wiki: "Pantheons#Bindings"
},
allBindings: {
name: "P2 All Bindings",
spoiler: "Complete with all bindings active at once",
wiki: "Pantheons#Bindings"
},
noHits: {
name: "P2 No Damage",
spoiler: "Complete without taking a single hit",
wiki: "Pantheons"
},
},
},*/
/* ################################################### Pantheon of the Sage #################################################### */
/*pantheonOfTheSage: {
h2: "P3 – Pantheon of the Sage",
id: "hk-pantheon-sage",
property: "bossDoorStateTier3",
description: "Seek the God of Wealth and Power",
entries: {
unlocked: {
name: "P3 Unlocked",
spoiler: "Defeat P3 bosses in the game world to unlock",
wiki: "Pantheon_of_the_Sage"
},
completed: {
name: "P3 Completed",
spoiler: "Defeat all bosses in a row to complete",
wiki: "Pantheon_of_the_Sage"
},
boundNail: {
name: "P3 Binding: Nail",
spoiler: "Complete with the Nail binding active",
wiki: "Pantheons#Bindings"
},
boundShell: {
name: "P3 Binding: Shell",
spoiler: "Complete with the Shell binding active",
wiki: "Pantheons#Bindings"
},
boundCharms: {
name: "P3 Binding: Charms",
spoiler: "Complete with the Charm binding active",
wiki: "Pantheons#Bindings"
},
boundSoul: {
name: "P3 Binding: Soul",
spoiler: "Complete with the Soul binding active",
wiki: "Pantheons#Bindings"
},
allBindings: {
name: "P3 All Bindings",
spoiler: "Complete with all bindings active at once",
wiki: "Pantheons#Bindings"
},
noHits: {
name: "P3 No Damage",
spoiler: "Complete without taking a single hit",
wiki: "Pantheons"
},
},
},*/
/* ################################################### Pantheon of the Knight #################################################### */
/*pantheonOfTheKnight: {
h2: "P4 – Pantheon of the Knight",
id: "hk-pantheon-knight",
property: "bossDoorStateTier4",
description: "Seek the Pure God",
entries: {
unlocked: {
name: "P4 Unlocked",
spoiler: "Complete 3 previous Pantheons to unlock",
wiki: "Pantheon_of_the_Knight"
},
completed: {
name: "P4 Completed",
spoiler: "Defeat all bosses in a row to complete",
wiki: "Pantheon_of_the_Knight"
},
boundNail: {
name: "P4 Binding: Nail",
spoiler: "Complete with the Nail binding active",
wiki: "Pantheons#Bindings"
},
boundShell: {
name: "P4 Binding: Shell",
spoiler: "Complete with the Shell binding active",
wiki: "Pantheons#Bindings"
},
boundCharms: {
name: "P4 Binding: Charms",
spoiler: "Complete with the Charm binding active",
wiki: "Pantheons#Bindings"
},
boundSoul: {
name: "P4 Binding: Soul",
spoiler: "Complete with the Soul binding active",
wiki: "Pantheons#Bindings"
},
allBindings: {
name: "P4 All Bindings",
spoiler: "Complete with all bindings active at once",
wiki: "Pantheons#Bindings"
},
noHits: {
name: "P4 No Damage",
spoiler: "Complete without taking a single hit",
wiki: "Pantheons"
},
},
},*/
/* ################################################### Pantheon of Hallownest #################################################### */
/*pantheonOfHallownest: {
h2: "P5 – Pantheon of Hallownest",
id: "hk-pantheon-hallownest",
property: "bossDoorStateTier5",
description: "Seek the Kingdom's Forgotten Light",
entries: {
unlocked: {
name: "P5 Unlocked",
spoiler: "Complete 4 previous Pantheons to unlock",
wiki: "Pantheon_of_Hallownest"
},
completed: {
name: "P5 Completed",
spoiler: "Defeat all bosses in a row to complete",
wiki: "Pantheon_of_Hallownest"
},
boundNail: {
name: "P5 Binding: Nail",
spoiler: "Complete with the Nail binding active",
wiki: "Pantheons#Bindings"
},
boundShell: {
name: "P5 Binding: Shell",
spoiler: "Complete with the Shell binding active",
wiki: "Pantheons#Bindings"
},
boundCharms: {
name: "P5 Binding: Charms",
spoiler: "Complete with the Charm binding active",
wiki: "Pantheons#Bindings"
},
boundSoul: {
name: "P5 Binding: Soul",
spoiler: "Complete with the Soul binding active",
wiki: "Pantheons#Bindings"
},
allBindings: {
name: "P5 All Bindings",
spoiler: "Complete with all bindings active at once",
wiki: "Pantheons#Bindings"
},
noHits: {
name: "P5 No Damage",
spoiler: "Complete without taking a single hit",
wiki: "Pantheons"
},
},
},*/
/* ################################################### Hall of Gods ############################################################# */
/*hallOfGods: {
h2: "Hall of Gods",
id: "hk-hall-of-gods",
property: "statueState",
description: "Bottom of Godhome. Detecting what bosses have been unlocked and defeated on all three difficulty levels: Attuned, Ascended and Radiant.",
entries: {
GruzMotherUnlocked: {
name: "Gruz Mother: Unlocked",
spoiler: "I sleep amongst winding roads",
id: "GruzMother",
check: "isUnlocked",
wiki: "Hall_of_Gods#Gruz_Mother"
},
GruzMotherAttuned: {
name: "Gruz Mother: Attuned",
spoiler: "Slumbering god of fertility",
id: "GruzMother",
check: "completedTier1",
wiki: "Hall_of_Gods#Gruz_Mother"
},
GruzMotherAscended: {
name: "Gruz Mother: Ascended",
spoiler: "Slumbering god of fertility",
id: "GruzMother",
check: "completedTier2",
wiki: "Hall_of_Gods#Gruz_Mother"
},
GruzMotherRadiant: {
name: "Gruz Mother: Radiant",
spoiler: "Slumbering god of fertility",
id: "GruzMother",
check: "completedTier3",
wiki: "Hall_of_Gods#Gruz_Mother"
},
VengeflyUnlocked: {
name: "Vengefly King: Unlocked",
spoiler: "I keep guard above a verdant land",
id: "Vengefly",
check: "isUnlocked",
wiki: "Hall_of_Gods#Vengefly_King"
},
VengeflyAttuned: {
name: "Vengefly King: Attuned",
spoiler: "Vicious god of territories",
id: "Vengefly",
check: "completedTier1",
wiki: "Hall_of_Gods#Vengefly_King"
},
VengeflyAscended: {
name: "Vengefly King: Ascended",
spoiler: "Vicious god of territories",
id: "Vengefly",
check: "completedTier2",
wiki: "Hall_of_Gods#Vengefly_King"
},
VengeflyRadiant: {
name: "Vengefly King: Radiant",
spoiler: "Vicious god of territories",
id: "Vengefly",
check: "completedTier3",
wiki: "Hall_of_Gods#Vengefly_King"
},
BroodingMawlekUnlocked: {
name: "Brooding Mawlek: Unlocked",
spoiler: "I call out to no one...",
id: "BroodingMawlek",
check: "isUnlocked",
wiki: "Hall_of_Gods#Brooding_Mawlek"
},
BroodingMawlekAttuned: {
name: "Brooding Mawlek: Attuned",
spoiler: "...hidden by roads and highways",
id: "BroodingMawlek",
check: "completedTier1",
wiki: "Hall_of_Gods#Brooding_Mawlek"
},
BroodingMawlekAscended: {
name: "Brooding Mawlek: Ascended",
spoiler: "Lonely god of the nest",
id: "BroodingMawlek",
check: "completedTier2",
wiki: "Hall_of_Gods#Brooding_Mawlek"
},
BroodingMawlekRadiant: {
name: "Brooding Mawlek: Radiant",
spoiler: "Lonely god of the nest",
id: "BroodingMawlek",
check: "completedTier3",
wiki: "Hall_of_Gods#Brooding_Mawlek"
},
FalseKnightUnlocked: {
name: "False Knight: Unlocked",
spoiler: "I protect the weak in...",
id: "FalseKnight",
check: "isUnlocked",
wiki: "Hall_of_Gods#False_Knight"
},
FalseKnightAttuned: {
name: "False Knight: Attuned",
spoiler: "...the heart of the crossroads",
id: "FalseKnight",
check: "completedTier1",
wiki: "Hall_of_Gods#False_Knight"
},
FalseKnightAscended: {
name: "False Knight: Ascended",
spoiler: "Angry god of the downtrodden",
id: "FalseKnight",
check: "completedTier2",
wiki: "Hall_of_Gods#False_Knight"
},
FalseKnightRadiant: {
name: "False Knight: Radiant",
spoiler: "Angry god of the downtrodden",
id: "FalseKnight",
check: "completedTier3",
wiki: "Hall_of_Gods#False_Knight"
},
FailedChampionUnlocked: {
name: "Failed Champion: Unlocked",
spoiler: "Baleful god of regrets",
id: "FailedChampion",
check: "isUnlocked",
wiki: "Hall_of_Gods#Failed_Champion"
},
FailedChampionAttuned: {
name: "Failed Champion: Attuned",
spoiler: "Baleful god of regrets",
id: "FailedChampion",
check: "completedTier1",
wiki: "Hall_of_Gods#Failed_Champion"
},
FailedChampionAscended: {
name: "Failed Champion: Ascended",
spoiler: "Baleful god of regrets",
id: "FailedChampion",
check: "completedTier2",
wiki: "Hall_of_Gods#Failed_Champion"
},
FailedChampionRadiant: {
name: "Failed Champion: Radiant",
spoiler: "Baleful god of regrets",
id: "FailedChampion",
check: "completedTier3",
wiki: "Hall_of_Gods#Failed_Champion"
},
Hornet1Unlocked: {
name: "Hornet Protector: Unlocked",
spoiler: "I watch over lush pathways...",
id: "Hornet1",
check: "isUnlocked",
wiki: "Hall_of_Gods#Hornet_Protector"
},
Hornet1Attuned: {
name: "Hornet Protector: Attuned",
spoiler: "...and distant ash-swept graves",
id: "Hornet1",
check: "completedTier1",
wiki: "Hall_of_Gods#Hornet_Protector"
},
Hornet1Ascended: {
name: "Hornet Protector: Ascended",
spoiler: "God protector of a fading land",
id: "Hornet1",
check: "completedTier2",
wiki: "Hall_of_Gods#Hornet_Protector"
},
Hornet1Radiant: {
name: "Hornet Protector: Radiant",
spoiler: "God protector of a fading land",
id: "Hornet1",
check: "completedTier3",
wiki: "Hall_of_Gods#Hornet_Protector"
},
Hornet2Unlocked: {
name: "Hornet Sentinel: Unlocked",
spoiler: "God protector of a fading land",
id: "Hornet2",
check: "isUnlocked",
wiki: "Hall_of_Gods#Hornet_Sentinel"
},
Hornet2Attuned: {
name: "Hornet Sentinel: Attuned",
spoiler: "God protector of a fading land",
id: "Hornet2",
check: "completedTier1",
wiki: "Hall_of_Gods#Hornet_Sentinel"
},
Hornet2Ascended: {
name: "Hornet Sentinel: Ascended",
spoiler: "God protector of a fading land",
id: "Hornet2",
check: "completedTier2",
wiki: "Hall_of_Gods#Hornet_Sentinel"
},
Hornet2Radiant: {
name: "Hornet Sentinel: Radiant",
spoiler: "God protector of a fading land",
id: "Hornet2",
check: "completedTier3",
wiki: "Hall_of_Gods#Hornet_Sentinel"
},
MegaMossChargerUnlocked: {
name: "Massive Moss Charger: Unlocked",
spoiler: "Together we hunt in paths...",
id: "MegaMossCharger",
check: "isUnlocked",
wiki: "Hall_of_Gods#Massive_Moss_Charger"
},
MegaMossChargerAttuned: {
name: "Massive Moss Charger: Attuned",
spoiler: "...overgrown with green",
id: "MegaMossCharger",
check: "completedTier1",
wiki: "Hall_of_Gods#Massive_Moss_Charger"
},
MegaMossChargerAscended: {
name: "Massive Moss Charger: Ascended",
spoiler: "Restless god of those...",
id: "MegaMossCharger",
check: "completedTier2",
wiki: "Hall_of_Gods#Massive_Moss_Charger"
},
MegaMossChargerRadiant: {
name: "Massive Moss Charger: Radiant",
spoiler: "...who band together",
id: "MegaMossCharger",
check: "completedTier3",
wiki: "Hall_of_Gods#Massive_Moss_Charger"
},
FlukemarmUnlocked: {
name: "Flukemarm: Unlocked",
spoiler: "I lie within a maze of pipes",
id: "Flukemarm",
check: "isUnlocked",
wiki: "Hall_of_Gods#Flukemarm"
},
FlukemarmAttuned: {
name: "Flukemarm: Attuned",
spoiler: "Alluring god of motherhood",
id: "Flukemarm",
check: "completedTier1",
wiki: "Hall_of_Gods#Flukemarm"
},
FlukemarmAscended: {
name: "Flukemarm: Ascended",
spoiler: "Alluring god of motherhood",
id: "Flukemarm",
check: "completedTier2",
wiki: "Hall_of_Gods#Flukemarm"
},
FlukemarmRadiant: {
name: "Flukemarm: Radiant",
spoiler: "Alluring god of motherhood",
id: "Flukemarm",
check: "completedTier3",
wiki: "Hall_of_Gods#Flukemarm"
},
MantisLordsUnlocked: {
name: "Mantis Lords: Unlocked",
spoiler: "We watch over a village of warriors",
id: "MantisLords",
check: "isUnlocked",
wiki: "Hall_of_Gods#Mantis_Lords"
},
MantisLordsAttuned: {
name: "Mantis Lords: Attuned",
spoiler: "Noble sister gods of combat",
id: "MantisLords",
check: "completedTier1",
wiki: "Hall_of_Gods#Mantis_Lords"
},
MantisLordsAscended: {
name: "Mantis Lords: Ascended",
spoiler: "Noble sister gods of combat",
id: "MantisLords",
check: "completedTier2",
wiki: "Hall_of_Gods#Mantis_Lords"
},
MantisLordsRadiant: {
name: "Mantis Lords: Radiant",
spoiler: "Noble sister gods of combat",
id: "MantisLords",
check: "completedTier3",
wiki: "Hall_of_Gods#Mantis_Lords"
},
MantisLordsExtraUnlocked: {
name: "Sisters of Battle: Unlocked",
spoiler: "Revered gods of a proud tribe",
id: "MantisLordsExtra",
check: "isUnlocked",
wiki: "Hall_of_Gods#Sisters_of_Battle"
},
MantisLordsExtraAttuned: {
name: "Sisters of Battle: Attuned",
spoiler: "Revered gods of a proud tribe",
id: "MantisLordsExtra",
check: "completedTier1",
wiki: "Hall_of_Gods#Sisters_of_Battle"
},
MantisLordsExtraAscended: {
name: "Sisters of Battle: Ascended",
spoiler: "Revered gods of a proud tribe",
id: "MantisLordsExtra",
check: "completedTier2",
wiki: "Hall_of_Gods#Sisters_of_Battle"
},
MantisLordsExtraRadiant: {
name: "Sisters of Battle: Radiant",
spoiler: "Revered gods of a proud tribe",
id: "MantisLordsExtra",
check: "completedTier3",
wiki: "Hall_of_Gods#Sisters_of_Battle"
},
OblobblesUnlocked: {
name: "Oblobbles: Unlocked",
spoiler: "Together we are chained in a strange colosseum",
id: "Oblobbles",
check: "isUnlocked",
wiki: "Hall_of_Gods#Oblobbles"
},
OblobblesAttuned: {
name: "Oblobbles: Attuned",
spoiler: "Lover gods of faith and devotion",
id: "Oblobbles",
check: "completedTier1",
wiki: "Hall_of_Gods#Oblobbles"
},
OblobblesAscended: {
name: "Oblobbles: Ascended",
spoiler: "Lover gods of faith and devotion",
id: "Oblobbles",
check: "completedTier2",
wiki: "Hall_of_Gods#Oblobbles"
},
OblobblesRadiant: {
name: "Oblobbles: Radiant",
spoiler: "Lover gods of faith and devotion",
id: "Oblobbles",
check: "completedTier3",
wiki: "Hall_of_Gods#Oblobbles"
},
HiveKnightUnlocked: {
name: "Hive Knight: Unlocked",
spoiler: "I guard the heart of the hive for my Queen",
id: "HiveKnight",
check: "isUnlocked",
wiki: "Hall_of_Gods#Hive_Knight"
},
HiveKnightAttuned: {
name: "Hive Knight: Attuned",
spoiler: "Watchful god of duty",
id: "HiveKnight",
check: "completedTier1",
wiki: "Hall_of_Gods#Hive_Knight"
},
HiveKnightAscended: {
name: "Hive Knight: Ascended",
spoiler: "Watchful god of duty",
id: "HiveKnight",
check: "completedTier2",
wiki: "Hall_of_Gods#Hive_Knight"
},
HiveKnightRadiant: {
name: "Hive Knight: Radiant",
spoiler: "Watchful god of duty",
id: "HiveKnight",
check: "completedTier3",
wiki: "Hall_of_Gods#Hive_Knight"
},
BrokenVesselUnlocked: {
name: "Broken Vessel: Unlocked",
spoiler: "I sleep in the deep caves below the world",
id: "BrokenVessel",
check: "isUnlocked",
wiki: "Hall_of_Gods#Broken_Vessel"
},
BrokenVesselAttuned: {
name: "Broken Vessel: Attuned",
spoiler: "Broken shell of an empty god",
id: "BrokenVessel",
check: "completedTier1",
wiki: "Hall_of_Gods#Broken_Vessel"
},
BrokenVesselAscended: {
name: "Broken Vessel: Ascended",
spoiler: "Broken shell of an empty god",
id: "BrokenVessel",
check: "completedTier2",
wiki: "Hall_of_Gods#Broken_Vessel"
},
BrokenVesselRadiant: {
name: "Broken Vessel: Radiant",
spoiler: "Broken shell of an empty god",
id: "BrokenVessel",
check: "completedTier3",
wiki: "Hall_of_Gods#Broken_Vessel"
},
LostKinUnlocked: {
name: "Lost Kin: Unlocked",
spoiler: "Lost god of the Abyss",
id: "LostKin",
check: "isUnlocked",
wiki: "Hall_of_Gods#Lost_Kin"
},
LostKinAttuned: {
name: "Lost Kin: Attuned",
spoiler: "Lost god of the Abyss",
id: "LostKin",
check: "completedTier1",
wiki: "Hall_of_Gods#Lost_Kin"
},
LostKinAscended: {
name: "Lost Kin: Ascended",
spoiler: "Lost god of the Abyss",
id: "LostKin",
check: "completedTier2",
wiki: "Hall_of_Gods#Lost_Kin"
},
LostKinRadiant: {
name: "Lost Kin: Radiant",
spoiler: "Lost god of the Abyss",
id: "LostKin",
check: "completedTier3",
wiki: "Hall_of_Gods#Lost_Kin"
},
NoskUnlocked: {
name: "Nosk: Unlocked",
spoiler: "I wait patiently in a dark nest of predators",
id: "Nosk",
check: "isUnlocked",
wiki: "Hall_of_Gods#Nosk"
},
NoskAttuned: {
name: "Nosk: Attuned",
spoiler: "Everchanging god of the faceless",
id: "Nosk",
check: "completedTier1",
wiki: "Hall_of_Gods#Nosk"
},
NoskAscended: {
name: "Nosk: Ascended",
spoiler: "Everchanging god of the faceless",
id: "Nosk",
check: "completedTier2",
wiki: "Hall_of_Gods#Nosk"
},
NoskRadiant: {
name: "Nosk: Radiant",
spoiler: "Everchanging god of the faceless",
id: "Nosk",
check: "completedTier3",
wiki: "Hall_of_Gods#Nosk"
},
NoskHornetUnlocked: {
name: "Winged Nosk: Unlocked",
spoiler: "Deceptive god assuming a protector's form",
id: "NoskHornet",
check: "isUnlocked",
wiki: "Hall_of_Gods#Winged_Nosk"
},
NoskHornetAttuned: {
name: "Winged Nosk: Attuned",
spoiler: "Deceptive god assuming a protector's form",
id: "NoskHornet",
check: "completedTier1",
wiki: "Hall_of_Gods#Winged_Nosk"
},
NoskHornetAscended: {
name: "Winged Nosk: Ascended",
spoiler: "Deceptive god assuming a protector's form",
id: "NoskHornet",
check: "completedTier2",
wiki: "Hall_of_Gods#Winged_Nosk"
},
NoskHornetRadiant: {
name: "Winged Nosk: Radiant",
spoiler: "Deceptive god assuming a protector's form",
id: "NoskHornet",
check: "completedTier3",
wiki: "Hall_of_Gods#Winged_Nosk"
},
CollectorUnlocked: {
name: "The Collector: Unlocked",
spoiler: "I lurk at the peak of a forsaken tower",
id: "Collector",
check: "isUnlocked",
wiki: "Hall_of_Gods#The_Collector"
},
CollectorAttuned: {
name: "The Collector: Attuned",
spoiler: "Joyful god of protection",
id: "Collector",
check: "completedTier1",
wiki: "Hall_of_Gods#The_Collector"
},
CollectorAscended: {
name: "The Collector: Ascended",
spoiler: "Joyful god of protection",
id: "Collector",
check: "completedTier2",
wiki: "Hall_of_Gods#The_Collector"
},
CollectorRadiant: {
name: "The Collector: Radiant",
spoiler: "Joyful god of protection",
id: "Collector",
check: "completedTier3",
wiki: "Hall_of_Gods#The_Collector"
},
GodTamerUnlocked: {
name: "God Tamer: Unlocked",
spoiler: "I wait, weapon in hand, within the colosseum",
id: "GodTamer",
check: "isUnlocked",
wiki: "Hall_of_Gods#God_Tamer"
},
GodTamerAttuned: {
name: "God Tamer: Attuned",
spoiler: "Gallant god of the arena",
id: "GodTamer",
check: "completedTier1",
wiki: "Hall_of_Gods#God_Tamer"
},
GodTamerAscended: {
name: "God Tamer: Ascended",
spoiler: "Gallant god of the arena",
id: "GodTamer",
check: "completedTier2",
wiki: "Hall_of_Gods#God_Tamer"
},
GodTamerRadiant: {
name: "God Tamer: Radiant",
spoiler: "Gallant god of the arena",
id: "GodTamer",
check: "completedTier3",
wiki: "Hall_of_Gods#God_Tamer"
},
CrystalGuardian1Unlocked: {
name: "Crystal Guardian: Unlocked",
spoiler: "I rest amongst crystals...",
id: "CrystalGuardian1",
check: "isUnlocked",
wiki: "Hall_of_Gods#Crystal_Guardian"
},
CrystalGuardian1Attuned: {
name: "Crystal Guardian: Attuned",
spoiler: "...and strange machinery",
id: "CrystalGuardian1",
check: "completedTier1",
wiki: "Hall_of_Gods#Crystal_Guardian"
},
CrystalGuardian1Ascended: {
name: "Crystal Guardian: Ascended",
spoiler: "Shining god of greed",
id: "CrystalGuardian1",
check: "completedTier2",
wiki: "Hall_of_Gods#Crystal_Guardian"
},
CrystalGuardian1Radiant: {
name: "Crystal Guardian: Radiant",
spoiler: "Shining god of greed",
id: "CrystalGuardian1",
check: "completedTier3",
wiki: "Hall_of_Gods#Crystal_Guardian"
},
CrystalGuardian2Unlocked: {
name: "Enraged Guardian: Unlocked",
spoiler: "Shining god of greed",
id: "CrystalGuardian2",
check: "isUnlocked",
wiki: "Hall_of_Gods#Enraged_Guardian"
},
CrystalGuardian2Attuned: {
name: "Enraged Guardian: Attuned",
spoiler: "Shining god of greed",
id: "CrystalGuardian2",
check: "completedTier1",
wiki: "Hall_of_Gods#Enraged_Guardian"
},
CrystalGuardian2Ascended: {
name: "Enraged Guardian: Ascended",
spoiler: "Shining god of greed",
id: "CrystalGuardian2",
check: "completedTier2",
wiki: "Hall_of_Gods#Enraged_Guardian"
},
CrystalGuardian2Radiant: {
name: "Enraged Guardian: Radiant",
spoiler: "Shining god of greed",
id: "CrystalGuardian2",
check: "completedTier3",
wiki: "Hall_of_Gods#Enraged_Guardian"
},
UumuuUnlocked: {
name: "Uumuu: Unlocked",
spoiler: "I sleep submerged in the depths of the archive",
id: "Uumuu",
check: "isUnlocked",
wiki: "Hall_of_Gods#Uumuu"
},
UumuuAttuned: {
name: "Uumuu: Attuned",
spoiler: "Uncanny god of knowledge",
id: "Uumuu",
check: "completedTier1",
wiki: "Hall_of_Gods#Uumuu"
},
UumuuAscended: {
name: "Uumuu: Ascended",
spoiler: "Uncanny god of knowledge",
id: "Uumuu",
check: "completedTier2",
wiki: "Hall_of_Gods#Uumuu"
},
UumuuRadiant: {
name: "Uumuu: Radiant",
spoiler: "Uncanny god of knowledge",
id: "Uumuu",
check: "completedTier3",
wiki: "Hall_of_Gods#Uumuu"
},
TraitorLordUnlocked: {
name: "Traitor Lord: Unlocked",
spoiler: "I defile the gardens of false royalty",
id: "TraitorLord",
check: "isUnlocked",
wiki: "Hall_of_Gods#Traitor_Lord"
},
TraitorLordAttuned: {
name: "Traitor Lord: Attuned",
spoiler: "Treacherous god of anger",
id: "TraitorLord",
check: "completedTier1",
wiki: "Hall_of_Gods#Traitor_Lord"
},
TraitorLordAscended: {
name: "Traitor Lord: Ascended",
spoiler: "Treacherous god of anger",
id: "TraitorLord",
check: "completedTier2",
wiki: "Hall_of_Gods#Traitor_Lord"
},
TraitorLordRadiant: {
name: "Traitor Lord: Radiant",
spoiler: "Treacherous god of anger",
id: "TraitorLord",
check: "completedTier3",
wiki: "Hall_of_Gods#Traitor_Lord"
},
GreyPrinceUnlocked: {
name: "Grey Prince Zote: Unlocked",
spoiler: "I serve my Queen inside her dreams",
id: "GreyPrince",
check: "isUnlocked",
wiki: "Hall_of_Gods#Grey_Prince_Zote"
},
GreyPrinceAttuned: {
name: "Grey Prince Zote: Attuned",
spoiler: "False god conjured by the lonely",
id: "GreyPrince",
check: "completedTier1",
wiki: "Hall_of_Gods#Grey_Prince_Zote"
},
GreyPrinceAscended: {
name: "Grey Prince Zote: Ascended",
spoiler: "False god conjured by the lonely",
id: "GreyPrince",
check: "completedTier2",
wiki: "Hall_of_Gods#Grey_Prince_Zote"
},
GreyPrinceRadiant: {
name: "Grey Prince Zote: Radiant",
spoiler: "False god conjured by the lonely",
id: "GreyPrince",
check: "completedTier3",
wiki: "Hall_of_Gods#Grey_Prince_Zote"
},
MageKnightUnlocked: {
name: "Soul Warrior: Unlocked",
spoiler: "I haunt the halls of a sanctum",
id: "MageKnight",
check: "isUnlocked",
wiki: "Hall_of_Gods#Soul_Warrior"
},
MageKnightAttuned: {
name: "Soul Warrior: Attuned",
spoiler: "Haunted god of the sanctum",
id: "MageKnight",
check: "completedTier1",
wiki: "Hall_of_Gods#Soul_Warrior"
},
MageKnightAscended: {
name: "Soul Warrior: Ascended",
spoiler: "Haunted god of the sanctum",
id: "MageKnight",
check: "completedTier2",
wiki: "Hall_of_Gods#Soul_Warrior"
},
MageKnightRadiant: {
name: "Soul Warrior: Radiant",
spoiler: "Haunted god of the sanctum",
id: "MageKnight",
check: "completedTier3",
wiki: "Hall_of_Gods#Soul_Warrior"
},
SoulMasterUnlocked: {
name: "Soul Master: Unlocked",
spoiler: "Immortal, I rule the Sanctum",
id: "SoulMaster",
check: "isUnlocked",
wiki: "Hall_of_Gods#Soul_Master"
},
SoulMasterAttuned: {
name: "Soul Master: Attuned",
spoiler: "Covetous god of soul",
id: "SoulMaster",
check: "completedTier1",
wiki: "Hall_of_Gods#Soul_Master"
},
SoulMasterAscended: {
name: "Soul Master: Ascended",
spoiler: "Covetous god of soul",
id: "SoulMaster",
check: "completedTier2",
wiki: "Hall_of_Gods#Soul_Master"
},
SoulMasterRadiant: {
name: "Soul Master: Radiant",
spoiler: "Covetous god of soul",
id: "SoulMaster",
check: "completedTier3",
wiki: "Hall_of_Gods#Soul_Master"
},
SoulTyrantUnlocked: {
name: "Soul Tyrant: Unlocked",
spoiler: "Frenzied god of mortality",
id: "SoulTyrant",
check: "isUnlocked",
wiki: "Hall_of_Gods#Soul_Tyrant"
},
SoulTyrantAttuned: {
name: "Soul Tyrant: Attuned",
spoiler: "Frenzied god of mortality",
id: "SoulTyrant",
check: "completedTier1",
wiki: "Hall_of_Gods#Soul_Tyrant"
},
SoulTyrantAscended: {
name: "Soul Tyrant: Ascended",
spoiler: "Frenzied god of mortality",
id: "SoulTyrant",
check: "completedTier2",
wiki: "Hall_of_Gods#Soul_Tyrant"
},
SoulTyrantRadiant: {
name: "Soul Tyrant: Radiant",
spoiler: "Frenzied god of mortality",
id: "SoulTyrant",
check: "completedTier3",
wiki: "Hall_of_Gods#Soul_Tyrant"
},
DungDefenderUnlocked: {
name: "Dung Defender: Unlocked",
spoiler: "I protect the pipeways of the kingdom",
id: "DungDefender",
check: "isUnlocked",
wiki: "Hall_of_Gods#Dung_Defender"
},
DungDefenderAttuned: {
name: "Dung Defender: Attuned",
spoiler: "Kindly god of bravery and honour",
id: "DungDefender",
check: "completedTier1",
wiki: "Hall_of_Gods#Dung_Defender"
},
DungDefenderAscended: {
name: "Dung Defender: Ascended",
spoiler: "Kindly god of bravery and honour",
id: "DungDefender",
check: "completedTier2",
wiki: "Hall_of_Gods#Dung_Defender"
},
DungDefenderRadiant: {
name: "Dung Defender: Radiant",
spoiler: "Kindly god of bravery and honour",
id: "DungDefender",
check: "completedTier3",
wiki: "Hall_of_Gods#Dung_Defender"
},
WhiteDefenderUnlocked: {
name: "White Defender: Unlocked",
spoiler: "Kindly god of bravery and honour",
id: "WhiteDefender",
check: "isUnlocked",
wiki: "Hall_of_Gods#White_Defender"
},
WhiteDefenderAttuned: {
name: "White Defender: Attuned",
spoiler: "Kindly god of bravery and honour",
id: "WhiteDefender",
check: "completedTier1",
wiki: "Hall_of_Gods#White_Defender"
},
WhiteDefenderAscended: {
name: "White Defender: Ascended",
spoiler: "Kindly god of bravery and honour",
id: "WhiteDefender",
check: "completedTier2",
wiki: "Hall_of_Gods#White_Defender"
},
WhiteDefenderRadiant: {
name: "White Defender: Radiant",
spoiler: "Kindly god of bravery and honour",
id: "WhiteDefender",
check: "completedTier3",
wiki: "Hall_of_Gods#White_Defender"
},
WatcherKnightsUnlocked: {
name: "Watcher Knight: Unlocked",
spoiler: "We lie dormant, guarding the Spire's peak",
id: "WatcherKnights",
check: "isUnlocked",
wiki: "Hall_of_Gods#Watcher_Knight"
},
WatcherKnightsAttuned: {
name: "Watcher Knight: Attuned",
spoiler: "Sentinel gods of the spire",
id: "WatcherKnights",
check: "completedTier1",
wiki: "Hall_of_Gods#Watcher_Knight"
},
WatcherKnightsAscended: {
name: "Watcher Knight: Ascended",
spoiler: "Sentinel gods of the spire",
id: "WatcherKnights",
check: "completedTier2",
wiki: "Hall_of_Gods#Watcher_Knight"
},
WatcherKnightsRadiant: {
name: "Watcher Knight: Radiant",
spoiler: "Sentinel gods of the spire",
id: "WatcherKnights",
check: "completedTier3",
wiki: "Hall_of_Gods#Watcher_Knight"
},
NoEyesUnlocked: {
name: "No Eyes: Unlocked",
spoiler: "I lie dreaming in a silent sanctuary",
id: "NoEyes",
check: "isUnlocked",
wiki: "Hall_of_Gods#No_Eyes"
},
NoEyesAttuned: {
name: "No Eyes: Attuned",
spoiler: "Dreamborn god of fear and relief",
id: "NoEyes",
check: "completedTier1",
wiki: "Hall_of_Gods#No_Eyes"
},
NoEyesAscended: {
name: "No Eyes: Ascended",
spoiler: "Dreamborn god of fear and relief",
id: "NoEyes",
check: "completedTier2",
wiki: "Hall_of_Gods#No_Eyes"
},
NoEyesRadiant: {
name: "No Eyes: Radiant",
spoiler: "Dreamborn god of fear and relief",
id: "NoEyes",
check: "completedTier3",
wiki: "Hall_of_Gods#No_Eyes"
},
MarmuUnlocked: {
name: "Marmu: Unlocked",
spoiler: "I lie dreaming patiently in a garden",
id: "Marmu",
check: "isUnlocked",
wiki: "Hall_of_Gods#Marmu"
},
MarmuAttuned: {
name: "Marmu: Attuned",
spoiler: "Dreamborn god of gardens",
id: "Marmu",
check: "completedTier1",
wiki: "Hall_of_Gods#Marmu"
},
MarmuAscended: {
name: "Marmu: Ascended",
spoiler: "Dreamborn god of gardens",
id: "Marmu",
check: "completedTier2",
wiki: "Hall_of_Gods#Marmu"
},
MarmuRadiant: {
name: "Marmu: Radiant",
spoiler: "Dreamborn god of gardens",
id: "Marmu",
check: "completedTier3",
wiki: "Hall_of_Gods#Marmu"
},
GalienUnlocked: {
name: "Galien: Unlocked",
spoiler: "I lie dreaming in darkness, surrounded by predators",
id: "Galien",
check: "isUnlocked",
wiki: "Hall_of_Gods#Galien"
},
GalienAttuned: {
name: "Galien: Attuned",
spoiler: "Dreamborn god of heroic hearts",
id: "Galien",
check: "completedTier1",
wiki: "Hall_of_Gods#Galien"
},
GalienAscended: {
name: "Galien: Ascended",
spoiler: "Dreamborn god of heroic hearts",
id: "Galien",
check: "completedTier2",
wiki: "Hall_of_Gods#Galien"
},
GalienRadiant: {
name: "Galien: Radiant",
spoiler: "Dreamborn god of heroic hearts",
id: "Galien",
check: "completedTier3",
wiki: "Hall_of_Gods#Galien"
},
MarkothUnlocked: {
name: "Markoth: Unlocked",
spoiler: "I lie dreaming at the edge of the world",
id: "Markoth",
check: "isUnlocked",
wiki: "Hall_of_Gods#Markoth"
},
MarkothAttuned: {
name: "Markoth: Attuned",
spoiler: "Dreamborn god of meditation and isolation",
id: "Markoth",
check: "completedTier1",
wiki: "Hall_of_Gods#Markoth"
},
MarkothAscended: {
name: "Markoth: Ascended",
spoiler: "Dreamborn god of meditation and isolation",
id: "Markoth",
check: "completedTier2",
wiki: "Hall_of_Gods#Markoth"
},
MarkothRadiant: {
name: "Markoth: Radiant",
spoiler: "Dreamborn god of meditation and isolation",
id: "Markoth",
check: "completedTier3",
wiki: "Hall_of_Gods#Markoth"
},
XeroUnlocked: {
name: "Xero: Unlocked",
spoiler: "I lie dreaming amongst peaceful graves",
id: "Xero",
check: "isUnlocked",
wiki: "Hall_of_Gods#Xero"
},
XeroAttuned: {
name: "Xero: Attuned",
spoiler: "Dreamborn god of faith and betrayal",
id: "Xero",
check: "completedTier1",
wiki: "Hall_of_Gods#Xero"
},
XeroAscended: {
name: "Xero: Ascended",
spoiler: "Dreamborn god of faith and betrayal",
id: "Xero",
check: "completedTier2",
wiki: "Hall_of_Gods#Xero"
},
XeroRadiant: {
name: "Xero: Radiant",
spoiler: "Dreamborn god of faith and betrayal",
id: "Xero",
check: "completedTier3",
wiki: "Hall_of_Gods#Xero"
},
GorbUnlocked: {
name: "Gorb: Unlocked",
spoiler: "I lie dreaming at a wind-blasted peak",
id: "Gorb",
check: "isUnlocked",
wiki: "Hall_of_Gods#Gorb"
},
GorbAttuned: {
name: "Gorb: Attuned",
spoiler: "Dreamborn god of the beyond",
id: "Gorb",
check: "completedTier1",
wiki: "Hall_of_Gods#Gorb"
},
GorbAscended: {
name: "Gorb: Ascended",
spoiler: "Dreamborn god of the beyond",
id: "Gorb",
check: "completedTier2",
wiki: "Hall_of_Gods#Gorb"
},
GorbRadiant: {
name: "Gorb: Radiant",
spoiler: "Dreamborn god of the beyond",
id: "Gorb",
check: "completedTier3",
wiki: "Hall_of_Gods#Gorb"
},
ElderHuUnlocked: {
name: "Elder Hu: Unlocked",
spoiler: "I lie dreaming in the wastes",
id: "ElderHu",
check: "isUnlocked",
wiki: "Hall_of_Gods#Elder_Hu"
},
ElderHuAttuned: {
name: "Elder Hu: Attuned",
spoiler: "Dreamborn god of travellers and sages",
id: "ElderHu",
check: "completedTier1",
wiki: "Hall_of_Gods#Elder_Hu"
},
ElderHuAscended: {
name: "Elder Hu: Ascended",
spoiler: "Dreamborn god of travellers and sages",
id: "ElderHu",
check: "completedTier2",
wiki: "Hall_of_Gods#Elder_Hu"
},
ElderHuRadiant: {
name: "Elder Hu: Radiant",
spoiler: "Dreamborn god of travellers and sages",
id: "ElderHu",
check: "completedTier3",
wiki: "Hall_of_Gods#Elder_Hu"
},
NailmastersUnlocked: {
name: "Oro & Mato: Unlocked",
spoiler: "Together, we stand at a Pantheon's peak",
id: "Nailmasters",
check: "isUnlocked",
wiki: "Hall_of_Gods#Oro_.26_Mato"
},
NailmastersAttuned: {
name: "Oro & Mato: Attuned",
spoiler: "Loyal brother gods of the nail",
id: "Nailmasters",
check: "completedTier1",
wiki: "Hall_of_Gods#Oro_.26_Mato"
},
NailmastersAscended: {
name: "Oro & Mato: Ascended",
spoiler: "Loyal brother gods of the nail",
id: "Nailmasters",
check: "completedTier2",
wiki: "Hall_of_Gods#Oro_.26_Mato"
},
NailmastersRadiant: {
name: "Oro & Mato: Radiant",
spoiler: "Loyal brother gods of the nail",
id: "Nailmasters",
check: "completedTier3",
wiki: "Hall_of_Gods#Oro_.26_Mato"
},
PaintmasterUnlocked: {
name: "Paintmaster Sheo: Unlocked",
spoiler: "I hone my craft at a Pantheon's peak",
id: "Paintmaster",
check: "isUnlocked",
wiki: "Hall_of_Gods#Paintmaster_Sheo"
},
PaintmasterAttuned: {
name: "Paintmaster Sheo: Attuned",
spoiler: "Talented god of artists and creators",
id: "Paintmaster",
check: "completedTier1",
wiki: "Hall_of_Gods#Paintmaster_Sheo"
},
PaintmasterAscended: {
name: "Paintmaster Sheo: Ascended",
spoiler: "Talented god of artists and creators",
id: "Paintmaster",
check: "completedTier2",
wiki: "Hall_of_Gods#Paintmaster_Sheo"
},
PaintmasterRadiant: {
name: "Paintmaster Sheo: Radiant",
spoiler: "Talented god of artists and creators",
id: "Paintmaster",
check: "completedTier3",
wiki: "Hall_of_Gods#Paintmaster_Sheo"
},
SlyUnlocked: {
name: "Nailsage Sly: Unlocked",
spoiler: "I await you at a Pantheon's peak",
id: "Sly",
check: "isUnlocked",
wiki: "Hall_of_Gods#Nailsage_Sly"
},
SlyAttuned: {
name: "Nailsage Sly: Attuned",
spoiler: "Cunning god of opportunity",
id: "Sly",
check: "completedTier1",
wiki: "Hall_of_Gods#Nailsage_Sly"
},
SlyAscended: {
name: "Nailsage Sly: Ascended",
spoiler: "Cunning god of opportunity",
id: "Sly",
check: "completedTier2",
wiki: "Hall_of_Gods#Nailsage_Sly"
},
SlyRadiant: {
name: "Nailsage Sly: Radiant",
spoiler: "Cunning god of opportunity",
id: "Sly",
check: "completedTier3",
wiki: "Hall_of_Gods#Nailsage_Sly"
},
HollowKnightUnlocked: {
name: "Pure Vessel: Unlocked",
spoiler: "This empty god stands at a Pantheon's peak",
id: "HollowKnight",
check: "isUnlocked",
wiki: "Hall_of_Gods#Pure_Vessel"
},
HollowKnightAttuned: {
name: "Pure Vessel: Attuned",
spoiler: "Mighty god of nothingness",
id: "HollowKnight",
check: "completedTier1",
wiki: "Hall_of_Gods#Pure_Vessel"
},
HollowKnightAscended: {
name: "Pure Vessel: Ascended",
spoiler: "Mighty god of nothingness",
id: "HollowKnight",
check: "completedTier2",
wiki: "Hall_of_Gods#Pure_Vessel"
},
HollowKnightRadiant: {
name: "Pure Vessel: Radiant",
spoiler: "Mighty god of nothingness",
id: "HollowKnight",
check: "completedTier3",
wiki: "Hall_of_Gods#Pure_Vessel"
},
GrimmUnlocked: {
name: "Grimm: Unlocked",
spoiler: "I await the lighting of the lantern",
id: "Grimm",
check: "isUnlocked",
wiki: "Hall_of_Gods#Grimm"
},
GrimmAttuned: {
name: "Grimm: Attuned",
spoiler: "Travelling god of the troupe",
id: "Grimm",
check: "completedTier1",
wiki: "Hall_of_Gods#Grimm"
},
GrimmAscended: {
name: "Grimm: Ascended",
spoiler: "Travelling god of the troupe",
id: "Grimm",
check: "completedTier2",
wiki: "Hall_of_Gods#Grimm"
},
GrimmRadiant: {
name: "Grimm: Radiant",
spoiler: "Travelling god of the troupe",
id: "Grimm",
check: "completedTier3",
wiki: "Hall_of_Gods#Grimm"
},
NightmareGrimmUnlocked: {
name: "Nightmare King: Unlocked",
spoiler: "God of nightmares",
id: "NightmareGrimm",
check: "isUnlocked",
wiki: "Hall_of_Gods#Nightmare_King"
},
NightmareGrimmAttuned: {
name: "Nightmare King: Attuned",
spoiler: "God of nightmares",
id: "NightmareGrimm",
check: "completedTier1",
wiki: "Hall_of_Gods#Nightmare_King"
},
NightmareGrimmAscended: {
name: "Nightmare King: Ascended",
spoiler: "God of nightmares",
id: "NightmareGrimm",
check: "completedTier2",
wiki: "Hall_of_Gods#Nightmare_King"
},
NightmareGrimmRadiant: {
name: "Nightmare King: Radiant",
spoiler: "God of nightmares",
id: "NightmareGrimm",
check: "completedTier3",
wiki: "Hall_of_Gods#Nightmare_King"
},
RadianceUnlocked: {
name: "Radiance: Unlocked",
spoiler: "Forgotten god of light",
id: "Radiance",
check: "isUnlocked",
wiki: "Hall_of_Gods#Radiance"
},
RadianceAttuned: {
name: "Radiance: Attuned",
spoiler: "Forgotten god of light",
id: "Radiance",
check: "completedTier1",
wiki: "Hall_of_Gods#Radiance"
},
RadianceAscended: {
name: "Radiance: Ascended",
spoiler: "Forgotten god of light",
id: "Radiance",
check: "completedTier2",
wiki: "Hall_of_Gods#Radiance"
},
RadianceRadiant: {
name: "Radiance: Radiant",
spoiler: "Forgotten god of light",
id: "Radiance",
check: "completedTier3",
wiki: "Hall_of_Gods#Radiance"
},
},
}*/
}
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HK);
/***/ }),
/***/ "./src/js/hk-dictionary.js":
/*!*********************************!*\
!*** ./src/js/hk-dictionary.js ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* Huge thanks to ManicJamie for his HKTranslator: https://github.com/ManicJamie/HKTranslator */
var MAP = {
"Tutorial_01": "King's Pass",
"Town": "Dirtmouth",
"Room_shop": "Dirtmouth: Sly's Shop",
"Room_Sly_Storeroom": "Dirtmouth: Sly's Shop Basement",
"Room_Town_Stag_Station": "Dirtmouth: Stag Station",
"Room_mapper": "Dirtmouth: Iselda's Shop",
"Room_Bretta": "Dirtmouth: Bretta's Room",
"Room_Bretta_Basement": "Dirtmouth: Bretta's Room Basement",
"Room_Ouiji": "Dirtmouth: Jiji's Hut",
"Room_Jinn": "Dirtmouth: Jinn's Hut",
"Room_Tram_RG": "Upper Tram",
"Room_Tram": "Lower Tram",
"Crossroads_01": "Forgotten Crossroads: Well",
"Crossroads_02": "Forgotten Crossroads: Outside Temple of the Black Egg",
"Crossroads_03": "Forgotten Crossroads: Outside Stag Station",
"Crossroads_04": "Forgotten Crossroads: Gruz Mother",
"Crossroads_05": "Forgotten Crossroads: Central Grub",
"Crossroads_06": "Forgotten Crossroads: Outside Ancestral Mound",
"Crossroads_07": "Forgotten Crossroads: Gruzzer Vertical Room",
"Crossroads_08": "Forgotten Crossroads: Aspid Arena",
"Crossroads_09": "Forgotten Crossroads: Brooding Mawlek Boss",
"Crossroads_10": "Forgotten Crossroads: False Knight Arena",
"Crossroads_11_alt": "Forgotten Crossroads: Greenpath Entrance",
"Crossroads_12": "Forgotten Crossroads: Corridor to Acid Grub",
"Crossroads_13": "Forgotten Crossroads: Goam Mask Shard",
"Crossroads_14": "Forgotten Crossroads: Outside Myla",
"Crossroads_15": "Forgotten Crossroads: Corridor to Tram",
"Crossroads_16": "Forgotten Crossroads: Above Lever",
"Crossroads_18": "Forgotten Crossroads: Fungal Wastes Entrance",
"Crossroads_19": "Forgotten Crossroads: Before Gruz Mother",
"Crossroads_21": "Forgotten Crossroads: Outside False Knight",
"Crossroads_22": "Forgotten Crossroads: Glowing Womb Arena",
"Crossroads_25": "Forgotten Crossroads: Brooding Mawlek Entrance",
"Crossroads_27": "Forgotten Crossroads: Outside Tram",
"Crossroads_30": "Forgotten Crossroads: Hot Spring",
"Crossroads_31": "Forgotten Crossroads: Spike Grub",
"Crossroads_33": "Forgotten Crossroads: Cornifer",
"Crossroads_35": "Forgotten Crossroads: Acid Grub",
"Crossroads_36": "Forgotten Crossroads: Brooding Mawlek Middle",
"Crossroads_37": "Forgotten Crossroads: Vessel Fragment",
"Crossroads_38": "Forgotten Crossroads: Grubfather",
"Crossroads_39": "Forgotten Crossroads: Corridor Right of Temple of the Black Egg",
"Crossroads_40": "Forgotten Crossroads: Corridor Right of Central Grub",
"Crossroads_42": "Forgotten Crossroads: Right of Mask Shard",
"Crossroads_43": "Forgotten Crossroads: Corridor to Elevator",
"Crossroads_45": "Forgotten Crossroads: Myla",
"Crossroads_46": "Forgotten Crossroads: Tram",
"Crossroads_47": "Forgotten Crossroads: Stag Station",
"Crossroads_48": "Forgotten Crossroads: Husk Guard Grub",
"Crossroads_49": "Forgotten Crossroads: Elevator",
"Crossroads_52": "Forgotten Crossroads: Goam Journal",
"Crossroads_ShamanTemple": "Forgotten Crossroads: Ancestral Mound",
"Room_Mender_House": "Forgotten Crossroads: Menderbug House",
"Room_Charm_Shop": "Forgotten Crossroads: Salubra's Shop",
"Room_ruinhouse": "Forgotten Crossroads: Rescue Sly Hut",
"Room_temple": "Forgotten Crossroads: Inside Temple of the Black Egg",
"Fungus1_01": "Greenpath: Entrance",
"Fungus1_01b": "Greenpath: Waterfall Bench",
"Fungus1_02": "Greenpath: First Hornet Sighting",
"Fungus1_03": "Greenpath: Storerooms",
"Fungus1_04": "Greenpath: Hornet",
"Fungus1_05": "Greenpath: Outside Thorns",
"Fungus1_06": "Greenpath: Cornifer",
"Fungus1_07": "Greenpath: Outside Hunter",
"Fungus1_08": "Greenpath: Hunter",
"Fungus1_09": "Greenpath: Sheo Gauntlet",
"Fungus1_10": "Greenpath: Acid Bridge",
"Fungus1_11": "Greenpath: Above Fog Canyon",
"Fungus1_12": "Greenpath: Massive Moss Charger Corridor",
"Fungus1_13": "Greenpath: Whispering Root",
"Fungus1_14": "Greenpath: Thorns of Agony",
"Fungus1_15": "Greenpath: Outside Sheo",
"Fungus1_16_alt": "Greenpath: Stag Station",
"Fungus1_17": "Greenpath: Moss Charger Corridor",
"Fungus1_19": "Greenpath: Above Sanctuary Bench",
"Fungus1_20_v02": "Greenpath: Vengefly King",
"Fungus1_21": "Greenpath: Outside Hornet",
"Fungus1_22": "Greenpath: Outside Stag Station",
"Fungus1_25": "Greenpath: Corridor to Lake of Unn",
"Fungus1_26": "Greenpath: Lake Of Unn",
"Fungus1_29": "Greenpath: Massive Moss Charger",
"Fungus1_30": "Greenpath: Below Toll Bench",
"Fungus1_31": "Greenpath: Toll",
"Fungus1_32": "Greenpath: Moss Knight Arena",
"Fungus1_34": "Greenpath: Stone Sanctuary Entrance",
"Fungus1_35": "Greenpath: Stone Sanctuary",
"Fungus1_36": "Greenpath: Stone Sanctuary Mask Shard",
"Fungus1_37": "Greenpath: Stone Sanctuary Bench",
"Fungus1_Slug": "Greenpath: Unn",
"Room_nailmaster_02": "Greenpath: Sheo",
"Room_Slug_Shrine": "Greenpath: Lake of Unn Bench",
"Deepnest_01": "Fungal Wastes: Deepnest Fall",
"Fungus2_01": "Fungal Wastes: Queen's Station",
"Fungus2_02": "Fungal Wastes: Queen's Station Stag",
"Fungus2_03": "Fungal Wastes: Outside Queen's Station",
"Fungus2_04": "Fungal Wastes: Below Shrumal Ogres",
"Fungus2_05": "Fungal Wastes: Shrumal Ogres",
"Fungus2_06": "Fungal Wastes: Outside Leg Eater",
"Fungus2_07": "Fungal Wastes: Shrumal Warrior Acid Bridge",
"Fungus2_08": "Fungal Wastes: Outside Elder Hu",
"Fungus2_09": "Fungal Wastes: Cloth Corridor",
"Fungus2_10": "Fungal Wastes: Left Of Pilgrim's Way",
"Fungus2_11": "Fungal Wastes: Right of Bouncy Mushroom Grub",
"Fungus2_12": "Fungal Wastes: Mantis Corridor",
"Fungus2_13": "Fungal Wastes: Bretta Bench",
"Fungus2_14": "Fungal Wastes: Mantis Village",
"Fungus2_15": "Fungal Wastes: Mantis Lords",
"Fungus2_17": "Fungal Wastes: Above Mantis Village",
"Fungus2_18": "Fungal Wastes: Cornifer",
"Fungus2_19": "Fungal Wastes: Right Of Spore Shroom",
"Fungus2_20": "Fungal Wastes: Spore Shroom",
"Fungus2_21": "Fungal Wastes: Pilgrim's Way",
"Fungus2_23": "Fungal Wastes: Dashmaster",
"Fungus2_26": "Fungal Wastes: Leg Eater",
"Fungus2_28": "Fungal Wastes: Shrumal Warrior Loop",
"Fungus2_29": "Fungal Wastes: Fungal Core Upper",
"Fungus2_30": "Fungal Wastes: Fungal Core Lower",
"Fungus2_31": "Fungal Wastes: Mantis Lords Rewards",
"Fungus2_32": "Fungal Wastes: Elder Hu",
"Fungus2_33": "Fungal Wastes: Whispering Root near Fog Canyon",
"Fungus2_34": "Fungal Wastes: Willoh",
"Fungus3_01": "Fog Canyon: Upper West Tall",
"Fungus3_02": "Fog Canyon: Lower West Tall",
"Fungus3_03": "Fog Canyon: Queen's Gardens Acid Entrance",
"Fungus3_24": "Fog Canyon: Corridor to Overgrown Mound",
"Fungus3_25": "Fog Canyon: Cornifer",
"Fungus3_25b": "Fog Canyon: Corridor to Cornifer",
"Fungus3_26": "Fog Canyon: Right Tall Area",
"Fungus3_27": "Fog Canyon: Corridor to Archives",
"Fungus3_28": "Fog Canyon: Charm Notch",
"Fungus3_30": "Fog Canyon: Lifeblood Cocoon Room",
"Fungus3_35": "Fog Canyon: Millibelle",
"Fungus3_44": "Fog Canyon: Overgrown Mound Entrance",
"Fungus3_47": "Fog Canyon: Teacher's Archives Entrance",
"Fungus3_archive": "Fog Canyon: Teacher's Archives Bench",
"Fungus3_archive_02": "Fog Canyon: Uumuu Arena",
"Room_Fungus_Shaman": "Fog Canyon: Overgrown Mound",
"Cliffs_01": "Howling Cliffs: Main",
"Cliffs_02": "Howling Cliffs: Gorb",
"Cliffs_03": "Howling Cliffs: Stag Nest",
"Cliffs_04": "Howling Cliffs: Joni's Dark Passage",
"Cliffs_05": "Howling Cliffs: Joni's Charm Room",
"Cliffs_06": "Howling Cliffs: Grimm Lantern",
"Fungus1_28": "Howling Cliffs: Baldur's Shell",
"Room_nailmaster": "Howling Cliffs: Nailmaster Mato",
"Mines_01": "Crystal Peak: Desolate Dive Entrance",
"Mines_02": "Crystal Peak: Dark Entrance",
"Mines_03": "Crystal Peak: Spike Grub",
"Mines_04": "Crystal Peak: Conveyor Belts Entrance",
"Mines_05": "Crystal Peak: Above Spike Grub",
"Mines_06": "Crystal Peak: Deep Focus Gauntlet",
"Mines_07": "Crystal Peak: Platform Dark Room to Resting Grounds",
"Mines_10": "Crystal Peak: Dirtmouth Elevator Exit",
"Mines_11": "Crystal Peak: Left Of Crystal Guardian",
"Mines_13": "Crystal Peak: Top Corridor",
"Mines_16": "Crystal Peak: Grub Mimic",
"Mines_17": "Crystal Peak: Corridor to Spike Grub",
"Mines_18": "Crystal Peak: Crystal Guardian Bench",
"Mines_19": "Crystal Peak: Grub Crushers",
"Mines_20": "Crystal Peak: Right Tall Room",
"Mines_23": "Crystal Peak: Hallownest Crown Whispering Root",
"Mines_24": "Crystal Peak: Hallownest Crown Grub",
"Mines_25": "Crystal Peak: Hallownest Crown Climb",
"Mines_28": "Crystal Peak: Outside Crystallized Mound",
"Mines_29": "Crystal Peak: Dark Bench Room",
"Mines_30": "Crystal Peak: Cornifer",
"Mines_31": "Crystal Peak: Crystal Heart Gauntlet",
"Mines_32": "Crystal Peak: Enraged Guardian Arena",
"Mines_33": "Forgotten Crossroads: Crystal Peak Dark Toll",
"Mines_34": "Crystal Peak: Hallownest Crown Peak",
"Mines_35": "Crystal Peak: Crystallized Mound",
"Mines_36": "Crystal Peak: Deep Focus Room",
"Mines_37": "Crystal Peak: Chest Crushers",
"Abyss_02": "Ancient Basin: Broken Bridge",
"Abyss_03": "Ancient Basin: Tram",
"Abyss_04": "Ancient Basin: Fountain",
"Abyss_05": "Ancient Basin: Palace Grounds",
"Abyss_17": "Ancient Basin: Cloth",
"Abyss_18": "Ancient Basin: Corridor to Broken Vessel",
"Abyss_19": "Ancient Basin: Broken Vessel Grub",
"Abyss_20": "Ancient Basin: Simple Key",
"Abyss_21": "Ancient Basin: Monarch Wings",
"Abyss_22": "Ancient Basin: Hidden Station",
"Abyss_06_Core": "The Abyss: Main/Core Area",
"Abyss_08": "The Abyss: Lifeblood Core Room",
"Abyss_09": "The Abyss: Lighthouse Climb",
"Abyss_10": "The Abyss: Shade Cloak",
"Abyss_12": "The Abyss: Abyss Shriek Room",
"Abyss_15": "The Abyss: Birthplace",
"Abyss_16": "The Abyss: Corridor to Lighthouse",
"Abyss_Lighthouse_room": "The Abyss: Inside Lighthouse",
"Crossroads_46b": "Resting Grounds: Tram",
"Crossroads_50": "Resting Grounds: Blue Lake",
"RestingGrounds_02": "Resting Grounds: Xero",
"RestingGrounds_04": "Resting Grounds: Dream Nail Entrance",
"RestingGrounds_05": "Resting Grounds: Whispering Root",
"RestingGrounds_06": "Resting Grounds: Corridor Below Xero",
"RestingGrounds_07": "Resting Grounds: Seer",
"RestingGrounds_08": "Resting Grounds: Spirit's Glade",
"RestingGrounds_09": "Resting Grounds: Stag Station",
"RestingGrounds_10": "Resting Grounds: Crypts",
"RestingGrounds_12": "Resting Grounds: Grey Mourner Bench",
"RestingGrounds_17": "Resting Grounds: Dreamshield Room",
"Room_Mansion": "Resting Grounds: Grey Mourner Room",
"Ruins2_10": "Resting Grounds: Elevator",
"Abyss_03_c": "Kingdom's Edge: Tram",
"Deepnest_East_01": "Kingdom's Edge: Left of The Hive",
"Deepnest_East_02": "Kingdom's Edge: Above The Hive",
"Deepnest_East_03": "Kingdom's Edge: Entrance",
"Deepnest_East_04": "Kingdom's Edge: Bardoon",
"Deepnest_East_06": "Kingdom's Edge: Outside Nailmaster Oro",
"Deepnest_East_07": "Kingdom's Edge: Whispering Root",
"Deepnest_East_08": "Kingdom's Edge: Great Hopper King's Idol",
"Deepnest_East_09": "Kingdom's Edge: Corridor Outside Colosseum of Fools",
"Deepnest_East_10": "Kingdom's Edge: Markoth Arena",
"Deepnest_East_11": "Kingdom's Edge: Below Camp Bench",
"Deepnest_East_12": "Kingdom's Edge: Hornet Sentinel Corridor",
"Deepnest_East_13": "Kingdom's Edge: Camp Bench",
"Deepnest_East_14": "Kingdom's Edge: Below Nailmaster Oro",
"Deepnest_East_14b": "Kingdom's Edge: Quick Slash Room",
"Deepnest_East_15": "Kingdom's Edge: Lifeblood Room",
"Deepnest_East_16": "Kingdom's Edge: Nailmaster Oro Scarecrow",
"Deepnest_East_17": "Kingdom's Edge: 420 Geo Rock",
"Deepnest_East_18": "Kingdom's Edge: Left of Markoth",
"Deepnest_East_Hornet": "Kingdom's Edge: Hornet Sentinel Arena",
"GG_Lurker": "Kingdom's Edge: Pale Lurker Arena",
"Room_Colosseum_01": "Kingdom's Edge: Colosseum of Fools Entrance",
"Room_Colosseum_02": "Kingdom's Edge: Colosseum of Fools Bench",
"Room_Colosseum_Bronze": "Colosseum of Fools: Trial of the Warrior Arena",
"Room_Colosseum_Gold": "Colosseum of Fools: Trial of the Fool Arena",
"Room_Colosseum_Silver": "Colosseum of Fools: Trial of the Conqueror Arena",
"Room_Colosseum_Spectate": "Kingdom's Edge: Colosseum Spectators",
"Room_nailmaster_03": "Kingdom's Edge: Nailmaster Oro Room",
"Room_Wyrm": "Kingdom's Edge: Cast-Off Shell",
"Abyss_01": "City of Tears: Broken Elevator",
"Crossroads_49b": "City of Tears: Elevator to Forgotten Crossroads",
"Room_nailsmith": "City of Tears: Nailsmith",
"Ruins_Bathhouse": "City of Tears: Pleasure House Bench",
"Ruins_Elevator": "City of Tears: Pleasure House Elevator",
"Ruins_House_01": "City of Tears: Guarded Grub Room",
"Ruins_House_02": "City of Tears: Gorgeous Husk Room",
"Ruins_House_03": "City of Tears: Emilitia Room",
"Ruins1_01": "City of Tears: Pilgrim's Way Entrance",
"Ruins1_02": "City of Tears: Quirrel Bench",
"Ruins1_03": "City of Tears: Rafters",
"Ruins1_04": "City of Tears: Outside Nailsmith",
"Ruins1_05": "City of Tears: Grub Above Lemm",
"Ruins1_05b": "City of Tears: Lemm Room",
"Ruins1_05c": "City of Tears: Rancid Egg Above Lemm",
"Ruins1_06": "City of Tears: Corridor to City Storerooms",
"Ruins1_09": "City of Tears: Soul Twister Arena",
"Ruins1_17": "City of Tears: Whispering Root",
"Ruins1_18": "City of Tears: Corridor to Watcher's Spire",
"Ruins1_23": "City of Tears: Soul Sanctum Entrance",
"Ruins1_24": "City of Tears: Soul Master Arena",
"Ruins1_25": "City of Tears: Soul Sanctum Right Elevators",
"Ruins1_27": "City of Tears: Hollow Knight Fountain",
"Ruins1_28": "City of Tears: City Storerooms",
"Ruins1_29": "City of Tears: City Storerooms Stag Station",
"Ruins1_30": "City of Tears: Soul Sanctum Spell Twister Room",
"Ruins1_31": "City of Tears: Toll Bench Cornifer",
"Ruins1_31b": "City of Tears: Shade Soul Arena",
"Ruins1_32": "City of Tears: Soul Master Rewards Room",
"Ruins2_01": "City of Tears: Watcher's Spire Second Floor",
"Ruins2_01_b": "City of Tears: Watcher's Spire First Floor",
"Ruins2_03": "City of Tears: Watcher's Spire Fourth Floor",
"Ruins2_03b": "City of Tears: Watcher's Spire Third Floor",
"Ruins2_04": "City of Tears: Right Hub",
"Ruins2_05": "City of Tears: Above King's Station",
"Ruins2_06": "City of Tears: King's Station",
"Ruins2_07": "City of Tears: Grub Below King's Station",
"Ruins2_08": "City of Tears: King's Station Stag Station",
"Ruins2_09": "City of Tears: King's Station Vessel Fragment",
"Ruins2_10b": "City of Tears: Right Elevator",
"Ruins2_11": "City of Tears: The Collector Arena",
"Ruins2_11_b": "City of Tears: Tower of Love",
"Ruins2_Watcher_Room": "City of Tears: Lurien Elevator",
"Hive_01": "The Hive: Entrance",
"Hive_02": "The Hive: Whispering Root",
"Hive_03": "The Hive: Outside Grub",
"Hive_03_c": "The Hive: Outside Shortcut",
"Hive_04": "The Hive: Mask Shard Room",
"Hive_05": "The Hive: Hive Knight Arena",
"GG_Pipeway": "Royal Waterways: Flukemunga Corridor",
"GG_Waterways": "Royal Waterways: Junk Pit",
"Room_GG_Shortcut": "Royal Waterways: Fluke Hermit Room",
"Waterways_01": "Royal Waterways: Entrance",
"Waterways_02": "Royal Waterways: Main Bench",
"Waterways_03": "Royal Waterways: Tuk Room",
"Waterways_04": "Royal Waterways: Hidden Grub Room",
"Waterways_04b": "Royal Waterways: Mask Shard Room",
"Waterways_05": "Royal Waterways: Dung Defender Arena",
"Waterways_06": "Royal Waterways: Corridor to Broken Elevator",
"Waterways_07": "Royal Waterways: Left of Isma's Grove",
"Waterways_08": "Royal Waterways: Outside Flukemarm",
"Waterways_09": "Royal Waterways: Cornifer",
"Waterways_12": "Royal Waterways: Flukemarm Arena",
"Waterways_13": "Royal Waterways: Isma's Grove",
"Waterways_14": "Royal Waterways: Kingdom's Edge Acid Corridor",
"Waterways_15": "Royal Waterways: Dung Defender's Cave",
"Abyss_03_b": "Deepnest: Tram",
"Deepnest_01b": "Deepnest: Upper Cornifer",
"Deepnest_02": "Deepnest: Outside Grub Mimics",
"Deepnest_03": "Deepnest: Left of Hot Spring",
"Deepnest_09": "Deepnest: Distant Village Stag Station",
"Deepnest_10": "Deepnest: Distant Village",
"Deepnest_14": "Deepnest: Failed Tramway Bench",
"Deepnest_16": "Deepnest: Room Above Lower Cornifer",
"Deepnest_17": "Deepnest: Garpede Corridor Below Cornifer",
"Deepnest_26": "Deepnest: Failed Tramway Lifeblood",
"Deepnest_26b": "Deepnest: Tram Pass Room",
"Deepnest_30": "Deepnest: Hot Spring",
"Deepnest_31": "Deepnest: Nosk Corridor",
"Deepnest_32": "Deepnest: Nosk Arena",
"Deepnest_33": "Deepnest: Zote Arena",
"Deepnest_34": "Deepnest: First Devout",
"Deepnest_35": "Deepnest: Outside Galien",
"Deepnest_36": "Deepnest: Grub Mimics",
"Deepnest_37": "Deepnest: Corridor to Tram",
"Deepnest_38": "Deepnest: Vessel Fragment Challenge Room",
"Deepnest_39": "Deepnest: Whispering Root",
"Deepnest_40": "Deepnest: Galien Arena",
"Deepnest_41": "Deepnest: Midwife Room",
"Deepnest_42": "Deepnest: Outside Mask Maker",
"Deepnest_44": "Deepnest: Sharp Shadow Room",
"Deepnest_45_v02": "Deepnest: Weaver's Den",
"Deepnest_Spider_Town": "Deepnest: Beast's Den",
"Fungus2_25": "Deepnest: Lower Cornifer",
"Room_Mask_Maker": "Deepnest: Mask Maker Room",
"Room_spider_small": "Deepnest: Brumm Room",
"Deepnest_43": "Queen's Gardens: Corridor To Deepnest",
"Fungus1_23": "Queen's Gardens: First Loodle Corridor",
"Fungus1_24": "Queen's Gardens: Cornifer Room",
"Fungus3_04": "Queen's Gardens: Before Petra Arena",
"Fungus3_05": "Queen's Gardens: Petra Arena",
"Fungus3_08": "Queen's Gardens: Lower Petra Corridor",
"Fungus3_10": "Queen's Gardens: Main Arena",
"Fungus3_11": "Queen's Gardens: Whispering Root",
"Fungus3_13": "Queen's Gardens: Outside Stag Station",
"Fungus3_21": "Queen's Gardens: Corridor to Traitor Lord",
"Fungus3_22": "Queen's Gardens: Upper Grub Room",
"Fungus3_23": "Queen's Gardens: Traitor Lord Arena",
"Fungus3_34": "Queen's Gardens: Entrance from Fog Canyon",
"Fungus3_39": "Queen's Gardens: Moss Prophet Room",
"Fungus3_49": "Queen's Gardens: Traitor's Child Grave",
"Fungus3_40": "Queen's Gardens: Stag Station",
"Fungus3_48": "Queen's Gardens: Outside White Lady",
"Fungus3_50": "Queen's Gardens: Toll Bench",
"Room_Queen": "Queen's Gardens: White Lady Room",
"White_Palace_01": "White Palace: Entrance",
"White_Palace_02": "White Palace: First Kingsmould",
"White_Palace_03_hub": "White Palace: Main Hub",
"White_Palace_04": "White Palace: Left of Main Hub",
"White_Palace_05": "White Palace: Saw Room",
"White_Palace_06": "White Palace: Balcony",
"White_Palace_07": "White Palace: Lamp Pogo Room",
"White_Palace_08": "White Palace: Pale King's Workshop",
"White_Palace_09": "White Palace: Throne Room",
"White_Palace_11": "White Palace: Outside",
"White_Palace_12": "White Palace: Spike Drop Room",
"White_Palace_13": "White Palace: Thorn Jump Room",
"White_Palace_14": "White Palace: Hell Corridor",
"White_Palace_15": "White Palace: Caged Lever Room",
"White_Palace_16": "White Palace: Saw Climb Room",
"White_Palace_17": "White Palace: Path of Pain, Lever",
"White_Palace_18": "White Palace: Path of Pain, Entrance",
"White_Palace_19": "White Palace: Path of Pain, Vertical",
"White_Palace_20": "White Palace: Path of Pain, Final",
"Dream_Final_Boss": "Temple of the Black Egg: Radiance Room",
"Room_Final_Boss_Atrium": "Temple of the Black Egg: Bench Room",
"Room_Final_Boss_Core": "Temple of the Black Egg: Hollow Knight Room",
"Grimm_Divine": "Dirtmouth: Divine's Tent",
"Grimm_Main_Tent": "Dirtmouth: Grimm's Tent",
"Grimm_Nightmare": "Dream: Nightmare King Room",
"Dream_01_False_Knight": "Dream: Failed Champion Room",
"Dream_02_Mage_Lord": "Dream: Soul Tyrant Room",
"Dream_03_Infected_Knight": "Dream: Lost Kin Room",
"Dream_04_White_Defender": "Dream: White Defender Room",
"Dream_Abyss": "Dream: Abyss",
"Dream_Backer_Shrine": "Dream: Outside Shrine of Believers",
"Dream_Guardian_Hegemol": "Dream: Herrah Room",
"Dream_Guardian_Lurien": "Dream: Lurien Room",
"Dream_Guardian_Monomon": "Dream: Monomon Room",
"Dream_Mighty_Zote": "Dream: Grey Prince Zote Room",
"Dream_Nailcollection": "Dream: Dreamnail Room",
"Dream_Room_Believer_Shrine": "Dream: Shrine of Believers",
"GG_Atrium": "Godhome: Atrium",
"GG_Atrium_Roof": "Godhome: Roof",
"GG_Blue_Room": "Godhome: Lifeblood Room",
"GG_Land_Of_Storms": "Godhome: Land of Storms",
"GG_Mighty_Zote": "Godhome: Zote Eternal Ordeal",
"GG_Unlock_Wastes": "Godhome: Godtuner Room",
"GG_Workshop": "Godhome: Hall of Gods"
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MAP);
/***/ }),
/***/ "./src/js/hk-functions.js":
/*!********************************!*\
!*** ./src/js/hk-functions.js ***!
\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ GenerateDatabaseEntries: () => (/* binding */ GenerateDatabaseEntries),
/* harmony export */ ObjectLength: () => (/* binding */ ObjectLength),
/* harmony export */ SetIcon: () => (/* binding */ SetIcon),
/* harmony export */ SetIconGreen: () => (/* binding */ SetIconGreen),
/* harmony export */ SetIconNone: () => (/* binding */ SetIconNone),
/* harmony export */ SetIconPartial: () => (/* binding */ SetIconPartial),
/* harmony export */ SetIconPartialJournal: () => (/* binding */ SetIconPartialJournal),
/* harmony export */ SetIconRed: () => (/* binding */ SetIconRed),
/* harmony export */ TranslateMapName: () => (/* binding */ TranslateMapName)
/* harmony export */ });
/* harmony import */ var _hk_dictionary_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hk-dictionary.js */ "./src/js/hk-dictionary.js");
/* ---------------- Load main Hollow Knight database files ----------------- */
/* -------------------------- Functions ----------------------------- */
/**
* Switches global variable to a "completed" symbol. Adds +1 or +2 to percent property.
*/
function SetIconGreen() {
var section = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var entry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
/* Increase section percentage except the Game Status and Hints sections */
switch (section.id) {
case "hk-intro":
case "hk-hints":
break;
// Hunter's Journal entries
case "hk-journal":
section.percent++;
section.midPercent++;
break;
default:
section.percent++;
}
section.entries[entry].icon = "green";
}
/**
* Switches global variable to a "partially completed" symbol (prevents blurring the textPrefix).
*/
function SetIconPartial() {
var section = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var entry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
section.entries[entry].icon = "partial";
}
/**
* Switches global variable to a "partially completed" symbol (prevents blurring whole entry).
*/
function SetIconPartialJournal() {
var section = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var entry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
/* Increase Hunter's Journal entries discovered amount */
switch (section.id) {
case "hk-journal":
section.midPercent++;
break;
}
section.entries[entry].icon = "partialJournal";
}
/**
* Switches global variable to a "not completed" symbol
*/
function SetIconRed() {
var section = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var entry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
section.entries[entry].icon = "red";
}
/**
* Switches global variable to no symbol (span with left padding)
*/
function SetIconNone() {
var section = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var entry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
section.entries[entry].icon = "none";
}
/**
* Switches global variable to a chosen symbol
*/
function SetIcon() {
var section = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var entry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var icon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
section.entries[entry].icon = icon;
}
/**
* Checks the length of a JavaScript Object like Array.length
* @param {object} object JavaScript Object
* @return {number} length of the Object
*/
function ObjectLength(object) {
var length = 0;
for (var key in object) {
if (object.hasOwnProperty(key)) {
++length;
}
}
return length;
}
/**
* Returns a translated map location name string.
* @param {string} mapCode Code of the Hollow Knight map location the game developers use
* @param {object} dictionary Main data source for translation
*/
function TranslateMapName(mapCode) {
var dictionary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _hk_dictionary_js__WEBPACK_IMPORTED_MODULE_0__["default"];
var translation = mapCode;
if (dictionary.hasOwnProperty(mapCode)) translation = dictionary[mapCode];
return translation;
}
/**
* Generates database entries text. Provides an easy filling solution.
* @param {array} objectArray
* @param {string} searchText
* @param {string} entryName
* @param {string} entryDB
* @param {string} wiki
*/
function GenerateDatabaseEntries(objectArray) {
var searchText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var entryName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var entryDB = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
var wiki = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "";
var fillText = "";
var count = 0;
for (var i = 0, ln = objectArray.length; i < ln; i++) {
/* if (objectArray[i].id.includes(searchText)) { */
if (objectArray[i].id === searchText) {
count++;
fillText += "\n ".concat(entryDB).concat(count, ": {\n name: \"").concat(entryName, " #").concat(count, "\",\n spoiler: \"").concat(TranslateMapName(objectArray[i].sceneName), "\",\n id: \"").concat(objectArray[i].id, "\",\n sceneName: \"").concat(objectArray[i].sceneName, "\",\n wiki: \"").concat(wiki, "\"\n },");
}
}
return fillText;
}
/* ------------------------- Exports ------------------------------- */
/***/ }),
/***/ "./src/js/page-functions.js":
/*!**********************************!*\
!*** ./src/js/page-functions.js ***!
\**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ AppendHTML: () => (/* binding */ AppendHTML),
/* harmony export */ Benchmark: () => (/* binding */ Benchmark),
/* harmony export */ CheckboxHintsToggle: () => (/* binding */ CheckboxHintsToggle),
/* harmony export */ CheckboxSpoilersToggle: () => (/* binding */ CheckboxSpoilersToggle),
/* harmony export */ GenerateInnerHTML: () => (/* binding */ GenerateInnerHTML),
/* harmony export */ StorageAvailable: () => (/* binding */ StorageAvailable),
/* harmony export */ benchmarkTimes: () => (/* binding */ benchmarkTimes)
/* harmony export */ });
/* harmony import */ var _LoadSaveFile_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LoadSaveFile.js */ "./src/js/LoadSaveFile.js");
/* harmony import */ var _img_health_mask_png__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../img/health-mask.png */ "./src/img/health-mask.png");
/* harmony import */ var _img_health_mask_steel_png__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../img/health-mask-steel.png */ "./src/img/health-mask-steel.png");
/* harmony import */ var _img_silkbar_left_png__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../img/silkbar-left.png */ "./src/img/silkbar-left.png");
/* harmony import */ var _img_silkbar_middle_png__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../img/silkbar-middle.png */ "./src/img/silkbar-middle.png");
/* harmony import */ var _img_silkbar_right_png__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../img/silkbar-right.png */ "./src/img/silkbar-right.png");
/* harmony import */ var _img_rosaries_png__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../img/rosaries.png */ "./src/img/rosaries.png");
/* harmony import */ var _img_cocoon_png__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../img/cocoon.png */ "./src/img/cocoon.png");
/* harmony import */ var _img_shell_shards_png__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../img/shell-shards.png */ "./src/img/shell-shards.png");
/* harmony import */ var _img_architect_crest_png__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../img/architect-crest.png */ "./src/img/architect-crest.png");
/* harmony import */ var _img_beast_crest_png__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../img/beast-crest.png */ "./src/img/beast-crest.png");
/* harmony import */ var _img_hunter_crest_png__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../img/hunter-crest.png */ "./src/img/hunter-crest.png");
/* harmony import */ var _img_reaper_crest_png__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../img/reaper-crest.png */ "./src/img/reaper-crest.png");
/* harmony import */ var _img_shaman_crest_png__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../img/shaman-crest.png */ "./src/img/shaman-crest.png");
/* harmony import */ var _img_wanderer_crest_png__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../img/wanderer-crest.png */ "./src/img/wanderer-crest.png");
/* harmony import */ var _img_witch_crest_png__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../img/witch-crest.png */ "./src/img/witch-crest.png");
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
/* ------------------------ Load image files (necessary for Webpack) ---------------------------------------------------------- */
/*import NOTCH_IMAGE from "../img/notch.png";
import NOTCH_FILLED_IMAGE from "../img/notch-filled.png";
import NOTCH_OVERCHARMED_IMAGE from "../img/notch-overcharmed.png";*/
/* ------------------------ Crest Type ---------------------------------------------------------- */
/* ------------------------- Constants ---------------------------------------------------------------------------------------- */
// const DATA_UNKNOWN = "Data unknown";
var SYMBOL_FALSE = ""; // "❌ "
var SYMBOL_TRUE = ""; // "✅ "
var SYMBOL_PARTIAL = ""; // "✔ "
var SYMBOL_CLOCK = ""; // "🕑 "
var SYMBOL_FILE = ""; // "📁"
var SYMBOL_BINDING_NAIL = ""; // Nail Binding
var SYMBOL_BINDING_SHELL = ""; // Shell Binding
var SYMBOL_BINDING_CHARMS = ""; // Charm Binding
var SYMBOL_BINDING_SOUL = ""; // Soul Binding
var SYMBOL_BINDING_ALL = ""; // All Bindings
var SYMBOL_ATTUNED = ""; // Attuned
var SYMBOL_ASCENDED = ""; // Ascended
var SYMBOL_RADIANT = ""; // Radiant
var SYMBOL_EMPTY = ""; // No symbol
var FLEUR_DIVIDE = "";
var WIKI_LINK = "https://hollowknightsilksong.wiki.fextralife.com/";
var ROOT = document.documentElement;
var SCROLL_BUTTON = document.querySelector(".scroll-up-button");
/* -------------------------- Variables --------------------------------------------------------------------------------------- */
var benchmarkTimes = {
LoadSaveFile: {
name: "LoadSaveFile()",
timeStart: 0,
timeEnd: 0
},
CheckCompletion: {
name: "HKCheckCompletion()",
timeStart: 0,
timeEnd: 0
},
GenerateInnerHTML: {
name: "GenerateInnerHTML()",
timeStart: 0,
timeEnd: 0
},
HKReadTextArea: {
name: "HKReadTextArea()",
timeStart: 0,
timeEnd: 0
},
Total: {
name: "Total",
timeStart: 0,
timeEnd: 0
}
};
/* ######################################################################################### */
function Benchmark(bench) {
var result = 0;
for (var time in bench) {
if (bench[time].timeStart !== 0 && bench[time].timeEnd !== 0) {
result = bench[time].timeEnd - bench[time].timeStart;
console.info("".concat(bench[time].name, " time (ms) = %c").concat(result.toFixed(2)), "color: #008cdc; font-weight: 700;");
}
bench[time].timeStart = 0;
bench[time].timeEnd = 0;
}
}
function ScrollToElement(element) {
/* Scroll to the element top */
element.scrollTo({
top: 0,
behavior: "smooth"
});
}
function ShowElement(element) {
element.classList.add("visible-block");
element.classList.add("opacity-full");
element.classList.remove("hidden");
}
function HideElement(element) {
element.classList.remove("visible-block");
element.classList.remove("opacity-full");
element.classList.add("hidden");
}
function TogglePageScrollElement(root, element, ratio) {
/* Maximum number of pixels that can be scrolled by the user */
var scrollTotal = root.scrollHeight - root.clientHeight;
if (root.scrollTop / scrollTotal > ratio) {
/* Show button */
ShowElement(element);
} else {
/* Hide button */
HideElement(element);
}
}
/* ################################### Optimized Functions ########################################################################## */
function GenerateInnerHTML(db) {
// start benchmarking
benchmarkTimes.GenerateInnerHTML.timeStart = performance.now();
var sections = db.sections;
/* console.log(sections); */
var entries = {};
var obj = {
icon: "",
iconClass: "",
textPrefix: "",
textSuffix: "",
wiki: "",
div: "
",
b: ["", ""],
p: "",
span: ["", ""],
spoiler: ["", ""],
spoilerAfter: ""
};
var finalHTMLFill = "";
var textFill = "";
var Img = "";
_img_silkbar_left_png__WEBPACK_IMPORTED_MODULE_3__;
var maskNormal = "");
var maskSteel = "");
var silkBarLeft = "");
var silkBarMiddle = "");
var silkBarRight = "");
//let notchNormalImage = ``;
//let notchFilledImage = ``;
//let notchOvercharmedImage = ``;
var rosariesNormalImage = "");
var rosariesShadeImage = "");
var shellShardsImage = "");
var div = "
";
var divFlex = "
";
//Crest
var hunterCrestImage = "");
var architectCrestImage = "");
var beastCrestImage = "");
var reaperCrestImage = "");
var shamanCrestImage = "");
var wandererCrestImage = "");
var witchCrestImage = "");
/* ############################## create all main entries ########################################################################## */
for (var section in sections) {
textFill = "";
/* ############################# Tab Switch buttons and Large Section
s for switching ############################## */
/* Important: Ending Tab
s are at "End the Tab divs" */
switch (section) {
/* Main % */
case "crests":
textFill += ["
`;*/
break;
}
entries = sections[section].entries;
/* ####################### Section div id start ########################## */
/* starts a new
with the current section id */
textFill += SectionStart(sections[section]);
/* creates a
tag for the current section and fills with current%/max%
If the save file was not analyzed, then fill only max% on blue background */
if (db.saveAnalyzed === true) {
textFill += CompletionFill(sections[section]);
} else {
textFill += CompletionFillNoSave(sections[section]);
}
/* ######################## Different behaviour depending on the section ###################################################### */
switch (section) {
/* ############### Game Status (intro) ################ */
case "intro":
/* ############## Create each single entry (intro) ############### */
for (var entry in entries) {
obj.b = ["", ""];
obj.p = "";
obj.span = ["", ""];
obj.div = div;
/* -------- Icons (next to each entry) --------- */
if (entries[entry].hasOwnProperty("icon")) {
switch (entries[entry].icon) {
case "clock":
obj.icon = SYMBOL_CLOCK;
break;
case "green":
obj.icon = SYMBOL_TRUE;
break;
case "partial":
obj.icon = SYMBOL_PARTIAL;
break;
case "revealed":
obj.icon = SYMBOL_EMPTY;
break;
case "red":
obj.icon = SYMBOL_FALSE;
break;
default:
obj.icon = SYMBOL_EMPTY;
}
} else {
obj.icon = SYMBOL_FALSE;
}
obj.textPrefix = entries[entry].name;
obj.textSuffix = entries[entry].spoiler;
obj.spoilerAfter = "";
/* Different text and images for each entry in the "Game Status" (intro) section */
switch (entry) {
case "gameCompletion":
obj.textSuffix = "".concat(obj.textSuffix, " %");
obj.spoilerAfter = " ".concat(entries[entry].spoilerAfter);
obj.span[1] = "";
break;
case "gameCompletionExtended":
obj.spoilerAfter = " ".concat(entries[entry].spoilerAfter);
obj.span[1] = "";
break;
case "health":
/* ----------------- Horizontal Line after save version ---------------- */
textFill += FLEUR_DIVIDE;
obj.div = divFlex;
obj.span = ["", ""];
entries[entry].permadeathMode ? Img = maskSteel : Img = maskNormal;
for (var i = 0, total = entries[entry].amountTotal; i < total; i++) {
obj.textSuffix += Img;
}
obj.textSuffix += "".concat(obj.p, "(").concat(entries[entry].amountTotal, ")");
obj.p = "";
break;
case "silk":
obj.div = divFlex;
obj.span = ["", ""];
Img = silkBarMiddle;
obj.textSuffix += silkBarLeft;
for (var _i = 0, _total = entries[entry].amountTotal; _i < _total; _i++) {
obj.textSuffix += Img;
}
obj.textSuffix += silkBarRight;
obj.textSuffix += "".concat(obj.p, "(").concat(entries[entry].amountTotal, ")");
obj.p = "";
break;
case "crests":
obj.div = divFlex;
obj.span = ["", ""];
/* First, check filled (used) notches and fill them (skips if no filled notches) */
/*if (entries[entry].amountFilled > 0) {
for (let i = 0, total = entries[entry].amountTotal; i < total; i++) {
obj.textSuffix += notchFilledImage;
}
}*/
/* Second, check overcharmed notches and fill them (skips if player is not overcharmed) */
/*if (entries[entry].amountOvercharmed > 0) {
for (let i = 0, total = entries[entry].amountOvercharmed; i < total; i++) {
obj.textSuffix += notchOvercharmedImage;
}
}*/
/* Last, fill all unused notches */
/*if (entries[entry].amountUnused > 0) {
for (let i = 0, total = entries[entry].amountUnused; i < total; i++) {
obj.textSuffix += notchNormalImage;
}
}*/
/*for (let i = 0, total = entries[entry].amountTotal; i < total; i++) {
obj.textSuffix += notchNormalImage;
}*/
if (entries[entry].hunter) obj.textSuffix += hunterCrestImage;
if (entries[entry].toolmaster) obj.textSuffix += architectCrestImage;
if (entries[entry].beast) obj.textSuffix += beastCrestImage;
if (entries[entry].reaper) obj.textSuffix += reaperCrestImage;
if (entries[entry].shaman) obj.textSuffix += shamanCrestImage;
if (entries[entry].wanderer) obj.textSuffix += wandererCrestImage;
if (entries[entry].witch) obj.textSuffix += witchCrestImage;
obj.textSuffix += "".concat(obj.p, "(").concat(entries[entry].amountTotal, ")");
break;
case "rosaries":
obj.div = divFlex;
obj.span = ["", ""];
obj.textSuffix += "".concat(rosariesNormalImage, "").concat(entries[entry].amount, "");
// Show Shade Rosaries value and image only if Shade has at least 1 Rosary on it
if (entries[entry].amountShade > 0) obj.textSuffix += "".concat(obj.p, "+").concat(rosariesShadeImage, "").concat(entries[entry].amountShade, "");
// Show also total Rosaries (Rosaries + Shade Rosaries) if player has at least 1 Rosary alongside the shade rosaries
if (entries[entry].amount > 0 && entries[entry].amountShade > 0) {
obj.textSuffix += "".concat(obj.p, "=").concat(obj.p, "").concat(entries[entry].amountTotal, "");
}
obj.p = "";
break;
case "shellShards":
obj.div = divFlex;
obj.span = ["", ""];
obj.textSuffix += "".concat(shellShardsImage, "").concat(entries[entry].amount, "");
obj.p = "";
break;
default:
}
textFill += SingleEntryFill(obj);
}
break;
/* #################### Hints (hints) #################### */
case "hints":
obj.b = ["", ""];
obj.span = ["", ""];
obj.icon = "";
obj.textPrefix = "";
obj.div = div;
/* display only one (current) hint */
obj.textSuffix = entries[sections[section].current].spoiler;
textFill += SingleEntryFill(obj);
break;
/* ######################### Create all other sections ################################################################## */
default:
/* ###################### Create section descriptions under each H2 title ##################### */
if (sections[section].hasOwnProperty("description")) {
textFill += SectionDescription(sections[section]);
}
/* ###################### Create each single entry (from all other sections) ##################### */
for (var _entry in entries) {
/* obj.p = ""; */
obj.p = "";
obj.span = ["", ""];
obj.spoiler = ["", ""];
obj.div = div;
obj.textPrefix = entries[_entry].name;
obj.textSuffix = "\u2014 ".concat(entries[_entry].spoiler);
obj.wiki = entries[_entry].wiki;
/* -------- Icons (next to each entry) --------- */
if (entries[_entry].hasOwnProperty("icon")) {
switch (entries[_entry].icon) {
case "clock":
obj.icon = SYMBOL_CLOCK;
break;
case "green":
obj.icon = SYMBOL_TRUE;
/* -------- Prevents hiding as spoiler when a player has already completed the entry --------- */
obj.span[0] = "";
break;
case "partial":
obj.icon = SYMBOL_PARTIAL;
break;
case "revealed":
obj.icon = SYMBOL_EMPTY;
/* -------- Prevents textSuffix blurring when a player has already discovered the entry --------- */
obj.span[0] = "";
break;
case "partialJournal":
obj.icon = SYMBOL_PARTIAL;
/* -------- Prevents textSuffix blurring when a player has already discovered the entry --------- */
obj.span[0] = "";
break;
case "bindingNail":
obj.icon = SYMBOL_BINDING_NAIL;
/* -------- Prevents blurring when a player has already completed the entry --------- */
obj.span[0] = "";
break;
case "bindingShell":
obj.icon = SYMBOL_BINDING_SHELL;
/* -------- Prevents blurring when a player has already completed the entry --------- */
obj.span[0] = "";
break;
case "bindingCharms":
obj.icon = SYMBOL_BINDING_CHARMS;
/* -------- Prevents blurring when a player has already completed the entry --------- */
obj.span[0] = "";
break;
case "bindingSoul":
obj.icon = SYMBOL_BINDING_SOUL;
/* -------- Prevents blurring when a player has already completed the entry --------- */
obj.span[0] = "";
break;
case "bindingAll":
obj.icon = SYMBOL_BINDING_ALL;
/* -------- Prevents blurring when a player has already completed the entry --------- */
obj.span[0] = "";
break;
case "attuned":
obj.icon = SYMBOL_ATTUNED;
/* -------- Prevents blurring when a player has already completed the entry --------- */
obj.span[0] = "";
break;
case "ascended":
obj.icon = SYMBOL_ASCENDED;
/* -------- Prevents blurring when a player has already completed the entry --------- */
obj.span[0] = "";
break;
case "radiant":
obj.icon = SYMBOL_RADIANT;
/* -------- Prevents blurring when a player has already completed the entry --------- */
obj.span[0] = "";
break;
case "red":
obj.icon = SYMBOL_FALSE;
break;
default:
obj.icon = SYMBOL_EMPTY;
}
} else {
obj.icon = SYMBOL_FALSE;
}
/* assign the appropriate spoiler class name depending on the completion check (for blurring names) */
if (entries[_entry].hasOwnProperty("icon")) {
switch (entries[_entry].icon) {
case "red":
case "none":
obj.iconClass = " spoiler-red blurred";
break;
default:
/* -------- Prevents TextPrefix blurring when a player has already discovered the entry --------- */
obj.iconClass = "";
}
} else {
obj.iconClass = "";
}
obj.b = [""), ""];
if (entries[_entry].hasOwnProperty("amount")) {
if (entries[_entry].hasOwnProperty("disabled")) {
if (entries[_entry].disabled !== true) {
obj.textPrefix += ": ".concat(entries[_entry].amount);
}
} else {
obj.textPrefix += ": ".concat(entries[_entry].amount);
}
}
if (entries[_entry].hasOwnProperty("amountTotal")) {
obj.textPrefix += " / ".concat(entries[_entry].amountTotal);
}
if (entries[_entry].hasOwnProperty("id")) {
switch (entries[_entry].id) {
case "geoRocks":
case "itemsDiscovered":
obj.textPrefix += ": ".concat(entries[_entry].notActivated, " | ").concat(entries[_entry].activated, " | ").concat(entries[_entry].discoveredTotal);
break;
default:
}
}
if (entries[_entry].hasOwnProperty("disabled")) {
if (entries[_entry].disabled === true) {
obj.textPrefix = "".concat(obj.textPrefix, "");
}
}
if (obj.textPrefix.includes("")) obj.textSuffix = "".concat(obj.textSuffix, "");
/* textFill += SingleEntryFill(section, entries[entry]); */
textFill += SingleEntryFill(obj);
}
/* end for (let entry in entries) */
} /* end switch (section) - central */
/* ############# Cumulate all section texts into one variable for final HTML filling. End section div tag ############### */
finalHTMLFill += "".concat(textFill, "\n
\n\n");
/* ################## End the Tab divs (must be after section ending div) ################# */
switch (section) {
/* ending the tabs */
case "toolPouchUpgrades": // Main %
case "huntersJournal": // Journal
case "flea":
// Collectibles
/*case "toolPouchUpgrades": // Main %
case "achievementsBosses": // Essentials %
case "huntersJournal": // Journal
case "items": // Collectibles
case "geoRocks": // Geo Caches
case "corniferNotes": // Secrets
case "statistics": // Statistics
case "hallOfGods": // Godmaster*/
finalHTMLFill += "
";
break;
}
} /* end for (let section in sections) */
/* console.groupCollapsed("finalHTMLFill");
console.log(finalHTMLFill);
console.groupEnd(); */
/* ################################## Horizontal line ############################################################################# */
finalHTMLFill += FLEUR_DIVIDE;
/* --------------- Final single HTML access and fill here ------------------ */
document.getElementById("generated").innerHTML = finalHTMLFill;
/* make tab switch buttons working (on click) - must run after inner HTML generation is finished */
document.querySelectorAll(".tab-switch").forEach(function (button) {
button.addEventListener("click", function (e) {
PageSwitchTab(e.target.name);
});
});
/* Check local storage first, and set the last selected Tab on the page (remembers last clicked tab) */
if (StorageAvailable('localStorage')) {
if (localStorage.getItem("hkTabActive")) {
PageSwitchTab(localStorage.getItem("hkTabActive"));
} else {
PageSwitchTab("main");
}
}
// finish benchmarking
benchmarkTimes.GenerateInnerHTML.timeEnd = performance.now();
}
function SectionDescription(section) {
return "
".concat(section.description, "
");
}
function SectionStart(section) {
return "
\n");
}
/**
* Replaces the h2 titles with max percent values as read from the database
*/
function CompletionFillNoSave(section) {
var id = "";
var h2 = "";
var h2id = "";
var percentBox = ""; // Percent Box
var symbol = "";
var fullString = "";
id = section.id;
h2 = section.h2;
h2id = "h2-" + section.id;
/* Display % only when showing Main Game Completion % sections */
switch (section.id) {
case "hk-intro":
case "hk-crests":
case "hk-Needleupgrades":
case "hk-redTools":
case "hk-blueTools":
case "hk-yellowTools":
case "hk-equipment":
case "hk-skills":
case "hk-silkHeart":
case "hk-miscellaneous":
case "hk-spoolFragments":
case "hk-maskshards":
case "hk-craftingKitUpgrades":
case "hk-toolPouchUpgrades":
/*case "hk-charms":
case "hk-bosses":
case "hk-nailupgrades":
case "hk-nailarts":
case "hk-spells":
case "hk-vesselfragments":
case "hk-dreamnail":
case "hk-warriordreams":
case "hk-dreamers":
case "hk-colosseum":
case "hk-grimmtroupe":
case "hk-lifeblood":
case "hk-godmaster":*/
symbol = "%";
break;
default:
symbol = "";
}
percentBox = "
");
if (!section.hasOwnProperty("maxPercent")) percentBox = "";
fullString += "
").concat(h2).concat(percentBox, "
");
// ----------------- add True Completion h2 title ---------------- //
switch (id) {
case "hk-intro":
fullString += "
True Completion
0.00%
";
break;
default:
}
return fullString;
}
/**
* Replaces the h2 titles with a current percent/max percent values as read from the database
*/
function CompletionFill(section) {
var h2 = section.h2;
var h2id = "
");
var cl = "";
var clGreen = "box-green";
var clRed = "box-red";
var cp = 0; // current Percent
var midP = 0; // middle Percent
var mp = 0; // max Percent
var trueCompletionCurrent = 0;
var trueCompletionTotal = 0;
var trueCompletionPercent = 0; // True Completion %
var symbol = "";
var percentBox = "";
var fullString = "";
section.hasOwnProperty("percent") ? cp = section.percent : cp = 0;
section.hasOwnProperty("midPercent") ? midP = section.midPercent : midP = 0;
// Don't use percent-box for Essentials, Achievements, Statistics etc.
if (!section.hasOwnProperty("maxPercent")) {
percentBox = "";
}
// otherwise use percent-box with values cp/mp%
else {
mp = section.maxPercent;
// Shards and Fragments correct calculations
if (section.id === "hk-maskshards") {
var perc = section.percent;
perc % 4 ? cp = Math.floor(perc / 4) : cp = perc / 4;
} else if (section.id === "hk-spoolFragments") {
var _perc = section.percent;
_perc % 2 ? cp = Math.floor(_perc / 2) : cp = _perc / 2;
}
// switches the box to red when a section (h2) is 0
if (cp === 0) {
cl = " ".concat(clRed);
}
// switches the box to green when a section (h2) is completed
else if (cp === mp) {
cl = " ".concat(clGreen);
}
// default is blue (partially completed and starting value)
else cl = "";
// Select which symbol or text to display (/ or something else depending on the section)
switch (section.id) {
// needed for Game Status to show percentage properly (adds a slash for all boxes except the Game Status one)
case "hk-intro":
break;
// Hunter's Journal entries, Completed/Encountered of Total, e.g. 23/134 of 146
case "hk-journal":
cp = "".concat(cp, "/").concat(midP, " of ");
break;
default:
cp += "/";
}
/* Display % only when showing Main Game Completion % sections */
switch (section.id) {
case "hk-intro":
// True Completion % reading and calculation for percent-box and box colors
trueCompletionCurrent = section.extendedCompletionDone;
trueCompletionTotal = section.extendedCompletionTotal;
trueCompletionPercent = trueCompletionCurrent / trueCompletionTotal * 100;
symbol = "%";
break;
case "hk-intro":
case "hk-crests":
case "hk-Needleupgrades":
case "hk-redTools":
case "hk-blueTools":
case "hk-yellowTools":
case "hk-equipment":
case "hk-skills":
case "hk-silkHeart":
case "hk-miscellaneous":
case "hk-spoolFragments":
case "hk-maskshards":
case "hk-craftingKitUpgrades":
case "hk-toolPouchUpgrades":
/*case "hk-charms":
case "hk-bosses":
case "hk-nailupgrades":
case "hk-nailarts":
case "hk-spells":
case "hk-vesselfragments":
case "hk-dreamnail":
case "hk-warriordreams":
case "hk-dreamers":
case "hk-colosseum":
case "hk-grimmtroupe":
case "hk-lifeblood":
case "hk-godmaster":*/
symbol = "%";
break;
default:
symbol = "";
}
percentBox = "
\n");
// ----------------- add True Completion h2 title ---------------- //
switch (section.id) {
case "hk-intro":
// switches the box to red when True Completion is 0
if (trueCompletionCurrent === 0) {
cl = " ".concat(clRed);
}
// switches the box to green when True Completion is 100.00%
else if (trueCompletionCurrent === trueCompletionTotal) {
cl = " ".concat(clGreen);
}
// default is blue (partially completed and starting value)
else cl = "";
fullString += "
\n"].join("");
}
/**
* Adds HTML string to an element with a given ID.
* @param {object} divId object containing div ID of the HTML element to append to
* @param {string} content HTML contents to append
*/
function AppendHTML(divId, content) {
document.getElementById(divId.id).innerHTML += "\n" + content;
}
function ToggleSaveModeSwitch() {
var mode = this.value;
var chooseFileButtonLabel = document.getElementById("file-input-label");
var analyzeTextButton = document.getElementById("save-area-read");
var saveTextArea = document.getElementById("save-area");
if (mode === "modeText") {
this.value = "modeFile";
chooseFileButtonLabel.classList.remove("hidden");
analyzeTextButton.classList.add("hidden");
saveTextArea.classList.add("hidden");
/* alert(this.value); */
} else {
this.value = "modeText";
chooseFileButtonLabel.classList.add("hidden");
analyzeTextButton.classList.remove("hidden");
saveTextArea.classList.remove("hidden");
/* Warning! focus() somehow makes the textarea text offset to the left */
/* saveTextArea.focus(); */
/* alert(this.value); */
}
}
/**
* Toggles display of "hk-hints". On click with no parameters or on demand when called with a parameter
* @param {string} param "hide", "show" or none (optional)
*/
function CheckboxHintsToggle() {
var param = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "none";
var checkboxId = document.getElementById("checkbox-hints");
switch (param) {
case "hide":
document.getElementById("hk-hints").classList.add("hidden");
checkboxId.value = "hints-off";
checkboxId.checked = false;
// remember this choice for subsequent page visits and browser restarts
if (StorageAvailable('localStorage')) {
localStorage.setItem("hkCheckboxHints", "unchecked");
}
break;
case "show":
document.getElementById("hk-hints").classList.remove("hidden");
checkboxId.value = "hints-on";
checkboxId.checked = true;
// remember this choice for subsequent page visits and browser restarts
if (StorageAvailable('localStorage')) {
localStorage.setItem("hkCheckboxHints", "checked");
}
break;
default:
// This runs when the checkbox is not checked
if (checkboxId.checked === false) {
document.getElementById("hk-hints").classList.add("hidden");
checkboxId.value = "hints-off";
// remember this choice for subsequent page visits and browser restarts
if (StorageAvailable('localStorage')) {
localStorage.setItem("hkCheckboxHints", "unchecked");
}
}
// This runs when the checkbox is checked
else {
document.getElementById("hk-hints").classList.remove("hidden");
checkboxId.value = "hints-on";
// remember this choice for subsequent page visits and browser restarts
if (StorageAvailable('localStorage')) {
localStorage.setItem("hkCheckboxHints", "checked");
}
}
}
}
/**
* Toggles display of ".spoiler-span" class. On click with no parameters or on demand when called with a parameter
* @param {string} param "hide", "show" or none (optional)
*/
function CheckboxSpoilersToggle() {
var param = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "none";
var checkboxId = document.getElementById("checkbox-spoilers");
var allClassElements = document.querySelectorAll(".spoiler-span");
var allClassElementsRed = document.querySelectorAll(".spoiler-red");
var length = allClassElements.length;
var lengthRed = allClassElementsRed.length;
switch (param) {
case "hide":
for (var i = 0; i < length; i++) {
allClassElements[i].classList.add("blurred");
}
for (var _i2 = 0; _i2 < lengthRed; _i2++) {
allClassElementsRed[_i2].classList.add("blurred");
}
checkboxId.value = "spoilers-off";
checkboxId.checked = false;
// remember this choice for subsequent page visits and browser restarts
if (StorageAvailable('localStorage')) {
localStorage.setItem("hkCheckboxSpoilers", "unchecked");
}
break;
case "show":
for (var _i3 = 0; _i3 < length; _i3++) {
allClassElements[_i3].classList.remove("blurred");
}
for (var _i4 = 0; _i4 < lengthRed; _i4++) {
allClassElementsRed[_i4].classList.remove("blurred");
}
checkboxId.value = "spoilers-on";
checkboxId.checked = true;
// remember this choice for subsequent page visits and browser restarts
if (StorageAvailable('localStorage')) {
localStorage.setItem("hkCheckboxSpoilers", "checked");
}
break;
default:
// This runs when the checkbox is not checked
if (checkboxId.checked === false) {
for (var _i5 = 0; _i5 < length; _i5++) {
allClassElements[_i5].classList.add("blurred");
}
for (var _i6 = 0; _i6 < lengthRed; _i6++) {
allClassElementsRed[_i6].classList.add("blurred");
}
checkboxId.value = "spoilers-off";
// remember this choice for subsequent page visits and browser restarts
if (StorageAvailable('localStorage')) {
localStorage.setItem("hkCheckboxSpoilers", "unchecked");
}
break;
}
// This runs when the checkbox is checked
else {
for (var _i7 = 0; _i7 < length; _i7++) {
allClassElements[_i7].classList.remove("blurred");
}
for (var _i8 = 0; _i8 < lengthRed; _i8++) {
allClassElementsRed[_i8].classList.remove("blurred");
}
checkboxId.value = "spoilers-on";
// remember this choice for subsequent page visits and browser restarts
if (StorageAvailable('localStorage')) {
localStorage.setItem("hkCheckboxSpoilers", "checked");
}
}
}
}
/**
* Hides all other tabs, except the one which button was clicked (shows only the chosen tab)
* @param {String} clickedButton The click target (button clicked)
*/
function PageSwitchTab(clickedButton) {
var sectionList = document.querySelectorAll(".large-section");
var buttonList = document.querySelectorAll(".tab-switch");
/* Make Active Tab Visible */
for (var i = 0, length = sectionList.length; i < length; i++) {
/* Other tabs except the clicked one */
if (sectionList[i].id !== "tab-".concat(clickedButton)) {
if (!sectionList[i].classList.contains("hidden")) {
sectionList[i].classList.add("hidden");
}
}
/* The clicked tab */else {
if (sectionList[i].classList.contains("hidden")) {
sectionList[i].classList.remove("hidden");
}
}
}
/* Make Active Button stand out */
for (var _i9 = 0, _length = buttonList.length; _i9 < _length; _i9++) {
/* Other buttons except the clicked one */
if (buttonList[_i9].id !== "button-switch-".concat(clickedButton)) {
if (buttonList[_i9].classList.contains("tab-active")) {
buttonList[_i9].classList.remove("tab-active");
}
}
/* The clicked button */else {
if (!buttonList[_i9].classList.contains("tab-active")) {
buttonList[_i9].classList.add("tab-active");
}
}
}
/* remember this choice for subsequent page visits and browser restarts */
if (StorageAvailable('localStorage')) {
if (clickedButton) {
localStorage.setItem("hkTabActive", clickedButton);
}
}
}
/**
* Detects whether Storage is both supported and available.
* MDN WebDocs https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage
* @param {Storage} type type of storage. Ex. "localStorage" or "sessionStorage"
* @returns {Boolean}
*/
function StorageAvailable(type) {
var storage;
try {
storage = window[type];
var x = '__storage_test__';
storage.setItem(x, x);
storage.removeItem(x);
return true;
} catch (e) {
return e instanceof DOMException && (
// everything except Firefox
e.code === 22 ||
// Firefox
e.code === 1014 ||
// test name field too, because code might not be present
// everything except Firefox
e.name === 'QuotaExceededError' ||
// Firefox
e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
// acknowledge QuotaExceededError only if there's something already stored
storage && storage.length !== 0;
}
}
/**
* Fills the innerHTML of a given HTML Element with provided contents
* @param {string} elementId Element ID to update
* @param {string} textFill Updated contents (innerHTML)
*/
function FillInnerHTML(elementId, textFill) {
var element = document.getElementById(elementId);
element.innerHTML = textFill;
}
/**
* Focuses, selects and copies to clipboard contents inside a clicked element. Includes optional tooltip update after the copying is done.
* @param {MouseEvent} mouseEvent from the clicked element (AddEventListener)
* @param {string} tooltipId Element ID of the tooltip to update
* @param {string} tooltipFill Updated contents of the tooltip
*/
function SelectCopyInputText(mouseEvent) {
var tooltipId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var tooltipFill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var element = document.getElementById(mouseEvent.target.id);
// this prevents the un-selected effect after clicking the second time (clears all selection first)
if (window.getSelection) {
window.getSelection().removeAllRanges();
}
element.focus(); // best to focus the element first before selecting
element.select();
element.setSelectionRange(0, 99999); // for mobile devices
// Copy the text inside the text field to clipboard
document.execCommand("copy");
// optional tooltip showing
if (tooltipFill.length && tooltipId.length) FillInnerHTML(tooltipId, tooltipFill);
}
function FileNameFormat(file, nameLength, beginLength, endLength) {
var fileName = file.name;
/* Shorten the file name if too long */
if (fileName.length > nameLength) {
var begin = fileName.slice(0, beginLength); // take X characters from the beginning (0)
var end = fileName.slice(-endLength); // take X characters from the end (-)
fileName = "".concat(begin, "..").concat(end);
}
return fileName;
}
function FileDateFormat(file) {
var fileDate = new Date(file.lastModified);
var year = fileDate.getFullYear();
var month = fileDate.getMonth() + 1;
var day = fileDate.getDate();
var hour = fileDate.getHours();
var minutes = fileDate.getMinutes();
/* var seconds = fileDate.getSeconds(); */
if (month < 10) month = "0" + month;
if (day < 10) day = "0" + day;
if (hour < 10) hour = "0" + hour;
if (minutes < 10) minutes = "0" + minutes;
/* if (seconds < 10) seconds = "0" + seconds; */
return "".concat(year, ".").concat(month, ".").concat(day, " ").concat(hour, ":").concat(minutes);
}
/* ========================== Event Listeners ========================== */
/* --------------- Toggle visibility of scroll arrow ------------------ */
document.addEventListener("scroll", function () {
TogglePageScrollElement(/* the document element root () */
ROOT, /* Which element to toggle visibility */
SCROLL_BUTTON, /* How far the user has to scroll to show the element */
0.1);
});
/* ---------------- Scroll to top when clicked ------------------- */
SCROLL_BUTTON.addEventListener("click", function () {
ScrollToElement(ROOT);
});
/* ------------- Auto select & copy to clipboard when the save file location input text is clicked once ------------- */
document.getElementById("save-location-input").addEventListener("click", function (e) {
var tooltip = document.getElementById("save-location-input-tooltip");
SelectCopyInputText(e, "save-location-input-tooltip", "Copied save files location to clipboard");
/* make sure that the tooltip is centered */
tooltip.style.marginLeft = "-".concat(tooltip.offsetWidth / 2, "px");
}, false);
/* -------------- Switch text back to the default on mouse out -------------- */
document.getElementById("save-location-input").addEventListener("mouseout", function () {
var tooltip = document.getElementById("save-location-input-tooltip");
/* change the text and center only when the text was different */
if (tooltip.innerHTML !== "Click once to copy to clipboard") {
FillInnerHTML("save-location-input-tooltip", "Click once to copy to clipboard");
/* make sure that the tooltip is centered */
tooltip.style.marginLeft = "-".concat(tooltip.offsetWidth / 2, "px");
}
}, false);
/* ------------ Toggle Save Mode Switch: Text Mode or File Mode -------------- */
document.getElementById("toggle-mode").addEventListener("click", ToggleSaveModeSwitch, false);
/* ------------- Checkbox functions ---------------------- */
document.getElementById("checkbox-hints").addEventListener("click", CheckboxHintsToggle, false);
document.getElementById("checkbox-spoilers").addEventListener("click", CheckboxSpoilersToggle, false);
/* ------------ Drag & drop file to the window -------------- */
window.addEventListener('dragover', function (event) {
event.stopPropagation();
event.preventDefault();
// Style the drag-and-drop as a "copy file" operation.
event.dataTransfer.dropEffect = 'copy';
});
window.addEventListener('drop', function (event) {
event.stopPropagation();
event.preventDefault();
var dt = event.dataTransfer;
/* Launch save file analyzing */
(0,_LoadSaveFile_js__WEBPACK_IMPORTED_MODULE_0__.LoadSaveFile)(dt, performance.now());
var label = document.getElementById("save-area-file").nextElementSibling;
var labelInitialText = label.innerHTML;
/* Shorten the file name if longer than 16 characters. Display first 10 characters and last 4. */
var fileName = FileNameFormat(dt.files[0], 16, 10, 4);
/* Display a custom formatted last modified date. */
var fileDate = FileDateFormat(dt.files[0]);
/* Display the save file name and date on the button */
if (fileName) {
label.innerHTML = "".concat(SYMBOL_FILE).concat(fileName, "
").concat(fileDate, "
");
} else {
label.innerHTML = labelInitialText;
}
});
/* ---------- Monitor file input change and show the file name when file is loaded ----------- */
document.getElementById("save-area-file").addEventListener("change", function (event) {
var label = document.getElementById("save-area-file").nextElementSibling;
var labelInitialText = label.innerHTML;
/* Shorten the file name if longer than 16 characters. Display first 10 characters and last 4. */
var fileName = FileNameFormat(event.target.files[0], 16, 10, 4);
/* Display a custom formatted last modified date. */
var fileDate = FileDateFormat(event.target.files[0]);
if (fileName) {
label.innerHTML = "".concat(SYMBOL_FILE).concat(fileName, "
").concat(fileDate, "
");
} else {
label.innerHTML = labelInitialText;
}
});
/* -------- Clean the text area and file input from leftover save file if present (Firefox especially) -------- */
document.addEventListener("DOMContentLoaded", function () {
_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
return _regenerator().w(function (_context) {
while (1) switch (_context.n) {
case 0:
document.getElementById("save-area").value = "";
document.getElementById("save-area-file").value = "";
case 1:
return _context.a(2);
}
}, _callee);
}))();
});
/* ------------------------- Exports ------------------------------- */
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/global */
/******/ (() => {
/******/ __webpack_require__.g = (function() {
/******/ if (typeof globalThis === 'object') return globalThis;
/******/ try {
/******/ return this || new Function('return this')();
/******/ } catch (e) {
/******/ if (typeof window === 'object') return window;
/******/ }
/******/ })();
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/publicPath */
/******/ (() => {
/******/ var scriptUrl;
/******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
/******/ var document = __webpack_require__.g.document;
/******/ if (!scriptUrl && document) {
/******/ if (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')
/******/ scriptUrl = document.currentScript.src;
/******/ if (!scriptUrl) {
/******/ var scripts = document.getElementsByTagName("script");
/******/ if(scripts.length) {
/******/ var i = scripts.length - 1;
/******/ while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;
/******/ }
/******/ }
/******/ }
/******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
/******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
/******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
/******/ scriptUrl = scriptUrl.replace(/^blob:/, "").replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
/******/ __webpack_require__.p = scriptUrl;
/******/ })();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
"use strict";
/*!*************************!*\
!*** ./src/js/index.js ***!
\*************************/
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js");
/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js");
/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_symbol_async_iterator_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.async-iterator.js */ "./node_modules/core-js/modules/es.symbol.async-iterator.js");
/* harmony import */ var core_js_modules_es_symbol_async_iterator_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_async_iterator_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_symbol_has_instance_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.has-instance.js */ "./node_modules/core-js/modules/es.symbol.has-instance.js");
/* harmony import */ var core_js_modules_es_symbol_has_instance_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_has_instance_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_symbol_is_concat_spreadable_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.is-concat-spreadable.js */ "./node_modules/core-js/modules/es.symbol.is-concat-spreadable.js");
/* harmony import */ var core_js_modules_es_symbol_is_concat_spreadable_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_is_concat_spreadable_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js");
/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_symbol_match_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.match.js */ "./node_modules/core-js/modules/es.symbol.match.js");
/* harmony import */ var core_js_modules_es_symbol_match_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_match_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var core_js_modules_es_symbol_match_all_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.symbol.match-all.js */ "./node_modules/core-js/modules/es.symbol.match-all.js");
/* harmony import */ var core_js_modules_es_symbol_match_all_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_match_all_js__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var core_js_modules_es_symbol_replace_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.symbol.replace.js */ "./node_modules/core-js/modules/es.symbol.replace.js");
/* harmony import */ var core_js_modules_es_symbol_replace_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_replace_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var core_js_modules_es_symbol_search_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.symbol.search.js */ "./node_modules/core-js/modules/es.symbol.search.js");
/* harmony import */ var core_js_modules_es_symbol_search_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_search_js__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var core_js_modules_es_symbol_species_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.symbol.species.js */ "./node_modules/core-js/modules/es.symbol.species.js");
/* harmony import */ var core_js_modules_es_symbol_species_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_species_js__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var core_js_modules_es_symbol_split_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/es.symbol.split.js */ "./node_modules/core-js/modules/es.symbol.split.js");
/* harmony import */ var core_js_modules_es_symbol_split_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_split_js__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var core_js_modules_es_symbol_to_primitive_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/modules/es.symbol.to-primitive.js */ "./node_modules/core-js/modules/es.symbol.to-primitive.js");
/* harmony import */ var core_js_modules_es_symbol_to_primitive_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_to_primitive_js__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var core_js_modules_es_symbol_to_string_tag_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/modules/es.symbol.to-string-tag.js */ "./node_modules/core-js/modules/es.symbol.to-string-tag.js");
/* harmony import */ var core_js_modules_es_symbol_to_string_tag_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_to_string_tag_js__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var core_js_modules_es_symbol_unscopables_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! core-js/modules/es.symbol.unscopables.js */ "./node_modules/core-js/modules/es.symbol.unscopables.js");
/* harmony import */ var core_js_modules_es_symbol_unscopables_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_unscopables_js__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var core_js_modules_es_aggregate_error_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! core-js/modules/es.aggregate-error.js */ "./node_modules/core-js/modules/es.aggregate-error.js");
/* harmony import */ var core_js_modules_es_aggregate_error_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_aggregate_error_js__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! core-js/modules/es.array.concat.js */ "./node_modules/core-js/modules/es.array.concat.js");
/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_16__);
/* harmony import */ var core_js_modules_es_array_copy_within_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! core-js/modules/es.array.copy-within.js */ "./node_modules/core-js/modules/es.array.copy-within.js");
/* harmony import */ var core_js_modules_es_array_copy_within_js__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_copy_within_js__WEBPACK_IMPORTED_MODULE_17__);
/* harmony import */ var core_js_modules_es_array_every_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! core-js/modules/es.array.every.js */ "./node_modules/core-js/modules/es.array.every.js");
/* harmony import */ var core_js_modules_es_array_every_js__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_every_js__WEBPACK_IMPORTED_MODULE_18__);
/* harmony import */ var core_js_modules_es_array_fill_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! core-js/modules/es.array.fill.js */ "./node_modules/core-js/modules/es.array.fill.js");
/* harmony import */ var core_js_modules_es_array_fill_js__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_fill_js__WEBPACK_IMPORTED_MODULE_19__);
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js");
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_20__);
/* harmony import */ var core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! core-js/modules/es.array.find.js */ "./node_modules/core-js/modules/es.array.find.js");
/* harmony import */ var core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_21__);
/* harmony import */ var core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! core-js/modules/es.array.find-index.js */ "./node_modules/core-js/modules/es.array.find-index.js");
/* harmony import */ var core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_22__);
/* harmony import */ var core_js_modules_es_array_flat_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! core-js/modules/es.array.flat.js */ "./node_modules/core-js/modules/es.array.flat.js");
/* harmony import */ var core_js_modules_es_array_flat_js__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_flat_js__WEBPACK_IMPORTED_MODULE_23__);
/* harmony import */ var core_js_modules_es_array_flat_map_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! core-js/modules/es.array.flat-map.js */ "./node_modules/core-js/modules/es.array.flat-map.js");
/* harmony import */ var core_js_modules_es_array_flat_map_js__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_flat_map_js__WEBPACK_IMPORTED_MODULE_24__);
/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! core-js/modules/es.array.for-each.js */ "./node_modules/core-js/modules/es.array.for-each.js");
/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_25__);
/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! core-js/modules/es.array.from.js */ "./node_modules/core-js/modules/es.array.from.js");
/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_26__);
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! core-js/modules/es.array.includes.js */ "./node_modules/core-js/modules/es.array.includes.js");
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_27__);
/* harmony import */ var core_js_modules_es_array_index_of_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! core-js/modules/es.array.index-of.js */ "./node_modules/core-js/modules/es.array.index-of.js");
/* harmony import */ var core_js_modules_es_array_index_of_js__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_index_of_js__WEBPACK_IMPORTED_MODULE_28__);
/* harmony import */ var core_js_modules_es_array_is_array_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! core-js/modules/es.array.is-array.js */ "./node_modules/core-js/modules/es.array.is-array.js");
/* harmony import */ var core_js_modules_es_array_is_array_js__WEBPACK_IMPORTED_MODULE_29___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_is_array_js__WEBPACK_IMPORTED_MODULE_29__);
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js");
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_30__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ "./node_modules/core-js/modules/es.array.join.js");
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_31__);
/* harmony import */ var core_js_modules_es_array_last_index_of_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! core-js/modules/es.array.last-index-of.js */ "./node_modules/core-js/modules/es.array.last-index-of.js");
/* harmony import */ var core_js_modules_es_array_last_index_of_js__WEBPACK_IMPORTED_MODULE_32___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_last_index_of_js__WEBPACK_IMPORTED_MODULE_32__);
/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js");
/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_33___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_33__);
/* harmony import */ var core_js_modules_es_array_of_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! core-js/modules/es.array.of.js */ "./node_modules/core-js/modules/es.array.of.js");
/* harmony import */ var core_js_modules_es_array_of_js__WEBPACK_IMPORTED_MODULE_34___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_of_js__WEBPACK_IMPORTED_MODULE_34__);
/* harmony import */ var core_js_modules_es_array_reduce_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! core-js/modules/es.array.reduce.js */ "./node_modules/core-js/modules/es.array.reduce.js");
/* harmony import */ var core_js_modules_es_array_reduce_js__WEBPACK_IMPORTED_MODULE_35___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reduce_js__WEBPACK_IMPORTED_MODULE_35__);
/* harmony import */ var core_js_modules_es_array_reduce_right_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! core-js/modules/es.array.reduce-right.js */ "./node_modules/core-js/modules/es.array.reduce-right.js");
/* harmony import */ var core_js_modules_es_array_reduce_right_js__WEBPACK_IMPORTED_MODULE_36___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reduce_right_js__WEBPACK_IMPORTED_MODULE_36__);
/* harmony import */ var core_js_modules_es_array_reverse_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! core-js/modules/es.array.reverse.js */ "./node_modules/core-js/modules/es.array.reverse.js");
/* harmony import */ var core_js_modules_es_array_reverse_js__WEBPACK_IMPORTED_MODULE_37___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reverse_js__WEBPACK_IMPORTED_MODULE_37__);
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ "./node_modules/core-js/modules/es.array.slice.js");
/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_38___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_38__);
/* harmony import */ var core_js_modules_es_array_some_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! core-js/modules/es.array.some.js */ "./node_modules/core-js/modules/es.array.some.js");
/* harmony import */ var core_js_modules_es_array_some_js__WEBPACK_IMPORTED_MODULE_39___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_some_js__WEBPACK_IMPORTED_MODULE_39__);
/* harmony import */ var core_js_modules_es_array_sort_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! core-js/modules/es.array.sort.js */ "./node_modules/core-js/modules/es.array.sort.js");
/* harmony import */ var core_js_modules_es_array_sort_js__WEBPACK_IMPORTED_MODULE_40___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_sort_js__WEBPACK_IMPORTED_MODULE_40__);
/* harmony import */ var core_js_modules_es_array_species_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! core-js/modules/es.array.species.js */ "./node_modules/core-js/modules/es.array.species.js");
/* harmony import */ var core_js_modules_es_array_species_js__WEBPACK_IMPORTED_MODULE_41___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_species_js__WEBPACK_IMPORTED_MODULE_41__);
/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! core-js/modules/es.array.splice.js */ "./node_modules/core-js/modules/es.array.splice.js");
/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_42___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_42__);
/* harmony import */ var core_js_modules_es_array_unscopables_flat_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! core-js/modules/es.array.unscopables.flat.js */ "./node_modules/core-js/modules/es.array.unscopables.flat.js");
/* harmony import */ var core_js_modules_es_array_unscopables_flat_js__WEBPACK_IMPORTED_MODULE_43___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_unscopables_flat_js__WEBPACK_IMPORTED_MODULE_43__);
/* harmony import */ var core_js_modules_es_array_unscopables_flat_map_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! core-js/modules/es.array.unscopables.flat-map.js */ "./node_modules/core-js/modules/es.array.unscopables.flat-map.js");
/* harmony import */ var core_js_modules_es_array_unscopables_flat_map_js__WEBPACK_IMPORTED_MODULE_44___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_unscopables_flat_map_js__WEBPACK_IMPORTED_MODULE_44__);
/* harmony import */ var core_js_modules_es_array_buffer_constructor_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! core-js/modules/es.array-buffer.constructor.js */ "./node_modules/core-js/modules/es.array-buffer.constructor.js");
/* harmony import */ var core_js_modules_es_array_buffer_constructor_js__WEBPACK_IMPORTED_MODULE_45___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_buffer_constructor_js__WEBPACK_IMPORTED_MODULE_45__);
/* harmony import */ var core_js_modules_es_array_buffer_is_view_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! core-js/modules/es.array-buffer.is-view.js */ "./node_modules/core-js/modules/es.array-buffer.is-view.js");
/* harmony import */ var core_js_modules_es_array_buffer_is_view_js__WEBPACK_IMPORTED_MODULE_46___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_buffer_is_view_js__WEBPACK_IMPORTED_MODULE_46__);
/* harmony import */ var core_js_modules_es_array_buffer_slice_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! core-js/modules/es.array-buffer.slice.js */ "./node_modules/core-js/modules/es.array-buffer.slice.js");
/* harmony import */ var core_js_modules_es_array_buffer_slice_js__WEBPACK_IMPORTED_MODULE_47___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_buffer_slice_js__WEBPACK_IMPORTED_MODULE_47__);
/* harmony import */ var core_js_modules_es_data_view_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! core-js/modules/es.data-view.js */ "./node_modules/core-js/modules/es.data-view.js");
/* harmony import */ var core_js_modules_es_data_view_js__WEBPACK_IMPORTED_MODULE_48___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_data_view_js__WEBPACK_IMPORTED_MODULE_48__);
/* harmony import */ var core_js_modules_es_date_now_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! core-js/modules/es.date.now.js */ "./node_modules/core-js/modules/es.date.now.js");
/* harmony import */ var core_js_modules_es_date_now_js__WEBPACK_IMPORTED_MODULE_49___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_now_js__WEBPACK_IMPORTED_MODULE_49__);
/* harmony import */ var core_js_modules_es_date_to_iso_string_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! core-js/modules/es.date.to-iso-string.js */ "./node_modules/core-js/modules/es.date.to-iso-string.js");
/* harmony import */ var core_js_modules_es_date_to_iso_string_js__WEBPACK_IMPORTED_MODULE_50___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_iso_string_js__WEBPACK_IMPORTED_MODULE_50__);
/* harmony import */ var core_js_modules_es_date_to_json_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! core-js/modules/es.date.to-json.js */ "./node_modules/core-js/modules/es.date.to-json.js");
/* harmony import */ var core_js_modules_es_date_to_json_js__WEBPACK_IMPORTED_MODULE_51___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_json_js__WEBPACK_IMPORTED_MODULE_51__);
/* harmony import */ var core_js_modules_es_date_to_primitive_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! core-js/modules/es.date.to-primitive.js */ "./node_modules/core-js/modules/es.date.to-primitive.js");
/* harmony import */ var core_js_modules_es_date_to_primitive_js__WEBPACK_IMPORTED_MODULE_52___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_primitive_js__WEBPACK_IMPORTED_MODULE_52__);
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! core-js/modules/es.date.to-string.js */ "./node_modules/core-js/modules/es.date.to-string.js");
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_53___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_53__);
/* harmony import */ var core_js_modules_es_function_bind_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! core-js/modules/es.function.bind.js */ "./node_modules/core-js/modules/es.function.bind.js");
/* harmony import */ var core_js_modules_es_function_bind_js__WEBPACK_IMPORTED_MODULE_54___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_bind_js__WEBPACK_IMPORTED_MODULE_54__);
/* harmony import */ var core_js_modules_es_function_has_instance_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! core-js/modules/es.function.has-instance.js */ "./node_modules/core-js/modules/es.function.has-instance.js");
/* harmony import */ var core_js_modules_es_function_has_instance_js__WEBPACK_IMPORTED_MODULE_55___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_has_instance_js__WEBPACK_IMPORTED_MODULE_55__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js");
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_56___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_56__);
/* harmony import */ var core_js_modules_es_global_this_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! core-js/modules/es.global-this.js */ "./node_modules/core-js/modules/es.global-this.js");
/* harmony import */ var core_js_modules_es_global_this_js__WEBPACK_IMPORTED_MODULE_57___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_global_this_js__WEBPACK_IMPORTED_MODULE_57__);
/* harmony import */ var core_js_modules_es_json_stringify_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! core-js/modules/es.json.stringify.js */ "./node_modules/core-js/modules/es.json.stringify.js");
/* harmony import */ var core_js_modules_es_json_stringify_js__WEBPACK_IMPORTED_MODULE_58___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_json_stringify_js__WEBPACK_IMPORTED_MODULE_58__);
/* harmony import */ var core_js_modules_es_json_to_string_tag_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! core-js/modules/es.json.to-string-tag.js */ "./node_modules/core-js/modules/es.json.to-string-tag.js");
/* harmony import */ var core_js_modules_es_json_to_string_tag_js__WEBPACK_IMPORTED_MODULE_59___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_json_to_string_tag_js__WEBPACK_IMPORTED_MODULE_59__);
/* harmony import */ var core_js_modules_es_map_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! core-js/modules/es.map.js */ "./node_modules/core-js/modules/es.map.js");
/* harmony import */ var core_js_modules_es_map_js__WEBPACK_IMPORTED_MODULE_60___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_map_js__WEBPACK_IMPORTED_MODULE_60__);
/* harmony import */ var core_js_modules_es_math_acosh_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! core-js/modules/es.math.acosh.js */ "./node_modules/core-js/modules/es.math.acosh.js");
/* harmony import */ var core_js_modules_es_math_acosh_js__WEBPACK_IMPORTED_MODULE_61___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_acosh_js__WEBPACK_IMPORTED_MODULE_61__);
/* harmony import */ var core_js_modules_es_math_asinh_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! core-js/modules/es.math.asinh.js */ "./node_modules/core-js/modules/es.math.asinh.js");
/* harmony import */ var core_js_modules_es_math_asinh_js__WEBPACK_IMPORTED_MODULE_62___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_asinh_js__WEBPACK_IMPORTED_MODULE_62__);
/* harmony import */ var core_js_modules_es_math_atanh_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! core-js/modules/es.math.atanh.js */ "./node_modules/core-js/modules/es.math.atanh.js");
/* harmony import */ var core_js_modules_es_math_atanh_js__WEBPACK_IMPORTED_MODULE_63___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_atanh_js__WEBPACK_IMPORTED_MODULE_63__);
/* harmony import */ var core_js_modules_es_math_cbrt_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! core-js/modules/es.math.cbrt.js */ "./node_modules/core-js/modules/es.math.cbrt.js");
/* harmony import */ var core_js_modules_es_math_cbrt_js__WEBPACK_IMPORTED_MODULE_64___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_cbrt_js__WEBPACK_IMPORTED_MODULE_64__);
/* harmony import */ var core_js_modules_es_math_clz32_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! core-js/modules/es.math.clz32.js */ "./node_modules/core-js/modules/es.math.clz32.js");
/* harmony import */ var core_js_modules_es_math_clz32_js__WEBPACK_IMPORTED_MODULE_65___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_clz32_js__WEBPACK_IMPORTED_MODULE_65__);
/* harmony import */ var core_js_modules_es_math_cosh_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! core-js/modules/es.math.cosh.js */ "./node_modules/core-js/modules/es.math.cosh.js");
/* harmony import */ var core_js_modules_es_math_cosh_js__WEBPACK_IMPORTED_MODULE_66___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_cosh_js__WEBPACK_IMPORTED_MODULE_66__);
/* harmony import */ var core_js_modules_es_math_expm1_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! core-js/modules/es.math.expm1.js */ "./node_modules/core-js/modules/es.math.expm1.js");
/* harmony import */ var core_js_modules_es_math_expm1_js__WEBPACK_IMPORTED_MODULE_67___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_expm1_js__WEBPACK_IMPORTED_MODULE_67__);
/* harmony import */ var core_js_modules_es_math_fround_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! core-js/modules/es.math.fround.js */ "./node_modules/core-js/modules/es.math.fround.js");
/* harmony import */ var core_js_modules_es_math_fround_js__WEBPACK_IMPORTED_MODULE_68___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_fround_js__WEBPACK_IMPORTED_MODULE_68__);
/* harmony import */ var core_js_modules_es_math_hypot_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! core-js/modules/es.math.hypot.js */ "./node_modules/core-js/modules/es.math.hypot.js");
/* harmony import */ var core_js_modules_es_math_hypot_js__WEBPACK_IMPORTED_MODULE_69___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_hypot_js__WEBPACK_IMPORTED_MODULE_69__);
/* harmony import */ var core_js_modules_es_math_imul_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! core-js/modules/es.math.imul.js */ "./node_modules/core-js/modules/es.math.imul.js");
/* harmony import */ var core_js_modules_es_math_imul_js__WEBPACK_IMPORTED_MODULE_70___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_imul_js__WEBPACK_IMPORTED_MODULE_70__);
/* harmony import */ var core_js_modules_es_math_log10_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! core-js/modules/es.math.log10.js */ "./node_modules/core-js/modules/es.math.log10.js");
/* harmony import */ var core_js_modules_es_math_log10_js__WEBPACK_IMPORTED_MODULE_71___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_log10_js__WEBPACK_IMPORTED_MODULE_71__);
/* harmony import */ var core_js_modules_es_math_log1p_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! core-js/modules/es.math.log1p.js */ "./node_modules/core-js/modules/es.math.log1p.js");
/* harmony import */ var core_js_modules_es_math_log1p_js__WEBPACK_IMPORTED_MODULE_72___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_log1p_js__WEBPACK_IMPORTED_MODULE_72__);
/* harmony import */ var core_js_modules_es_math_log2_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! core-js/modules/es.math.log2.js */ "./node_modules/core-js/modules/es.math.log2.js");
/* harmony import */ var core_js_modules_es_math_log2_js__WEBPACK_IMPORTED_MODULE_73___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_log2_js__WEBPACK_IMPORTED_MODULE_73__);
/* harmony import */ var core_js_modules_es_math_sign_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! core-js/modules/es.math.sign.js */ "./node_modules/core-js/modules/es.math.sign.js");
/* harmony import */ var core_js_modules_es_math_sign_js__WEBPACK_IMPORTED_MODULE_74___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_sign_js__WEBPACK_IMPORTED_MODULE_74__);
/* harmony import */ var core_js_modules_es_math_sinh_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! core-js/modules/es.math.sinh.js */ "./node_modules/core-js/modules/es.math.sinh.js");
/* harmony import */ var core_js_modules_es_math_sinh_js__WEBPACK_IMPORTED_MODULE_75___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_sinh_js__WEBPACK_IMPORTED_MODULE_75__);
/* harmony import */ var core_js_modules_es_math_tanh_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! core-js/modules/es.math.tanh.js */ "./node_modules/core-js/modules/es.math.tanh.js");
/* harmony import */ var core_js_modules_es_math_tanh_js__WEBPACK_IMPORTED_MODULE_76___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_tanh_js__WEBPACK_IMPORTED_MODULE_76__);
/* harmony import */ var core_js_modules_es_math_to_string_tag_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! core-js/modules/es.math.to-string-tag.js */ "./node_modules/core-js/modules/es.math.to-string-tag.js");
/* harmony import */ var core_js_modules_es_math_to_string_tag_js__WEBPACK_IMPORTED_MODULE_77___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_to_string_tag_js__WEBPACK_IMPORTED_MODULE_77__);
/* harmony import */ var core_js_modules_es_math_trunc_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! core-js/modules/es.math.trunc.js */ "./node_modules/core-js/modules/es.math.trunc.js");
/* harmony import */ var core_js_modules_es_math_trunc_js__WEBPACK_IMPORTED_MODULE_78___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_trunc_js__WEBPACK_IMPORTED_MODULE_78__);
/* harmony import */ var core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! core-js/modules/es.number.constructor.js */ "./node_modules/core-js/modules/es.number.constructor.js");
/* harmony import */ var core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_79___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_79__);
/* harmony import */ var core_js_modules_es_number_epsilon_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! core-js/modules/es.number.epsilon.js */ "./node_modules/core-js/modules/es.number.epsilon.js");
/* harmony import */ var core_js_modules_es_number_epsilon_js__WEBPACK_IMPORTED_MODULE_80___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_epsilon_js__WEBPACK_IMPORTED_MODULE_80__);
/* harmony import */ var core_js_modules_es_number_is_finite_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! core-js/modules/es.number.is-finite.js */ "./node_modules/core-js/modules/es.number.is-finite.js");
/* harmony import */ var core_js_modules_es_number_is_finite_js__WEBPACK_IMPORTED_MODULE_81___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_is_finite_js__WEBPACK_IMPORTED_MODULE_81__);
/* harmony import */ var core_js_modules_es_number_is_integer_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! core-js/modules/es.number.is-integer.js */ "./node_modules/core-js/modules/es.number.is-integer.js");
/* harmony import */ var core_js_modules_es_number_is_integer_js__WEBPACK_IMPORTED_MODULE_82___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_is_integer_js__WEBPACK_IMPORTED_MODULE_82__);
/* harmony import */ var core_js_modules_es_number_is_nan_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! core-js/modules/es.number.is-nan.js */ "./node_modules/core-js/modules/es.number.is-nan.js");
/* harmony import */ var core_js_modules_es_number_is_nan_js__WEBPACK_IMPORTED_MODULE_83___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_is_nan_js__WEBPACK_IMPORTED_MODULE_83__);
/* harmony import */ var core_js_modules_es_number_is_safe_integer_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! core-js/modules/es.number.is-safe-integer.js */ "./node_modules/core-js/modules/es.number.is-safe-integer.js");
/* harmony import */ var core_js_modules_es_number_is_safe_integer_js__WEBPACK_IMPORTED_MODULE_84___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_is_safe_integer_js__WEBPACK_IMPORTED_MODULE_84__);
/* harmony import */ var core_js_modules_es_number_max_safe_integer_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! core-js/modules/es.number.max-safe-integer.js */ "./node_modules/core-js/modules/es.number.max-safe-integer.js");
/* harmony import */ var core_js_modules_es_number_max_safe_integer_js__WEBPACK_IMPORTED_MODULE_85___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_max_safe_integer_js__WEBPACK_IMPORTED_MODULE_85__);
/* harmony import */ var core_js_modules_es_number_min_safe_integer_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! core-js/modules/es.number.min-safe-integer.js */ "./node_modules/core-js/modules/es.number.min-safe-integer.js");
/* harmony import */ var core_js_modules_es_number_min_safe_integer_js__WEBPACK_IMPORTED_MODULE_86___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_min_safe_integer_js__WEBPACK_IMPORTED_MODULE_86__);
/* harmony import */ var core_js_modules_es_number_parse_float_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! core-js/modules/es.number.parse-float.js */ "./node_modules/core-js/modules/es.number.parse-float.js");
/* harmony import */ var core_js_modules_es_number_parse_float_js__WEBPACK_IMPORTED_MODULE_87___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_parse_float_js__WEBPACK_IMPORTED_MODULE_87__);
/* harmony import */ var core_js_modules_es_number_parse_int_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! core-js/modules/es.number.parse-int.js */ "./node_modules/core-js/modules/es.number.parse-int.js");
/* harmony import */ var core_js_modules_es_number_parse_int_js__WEBPACK_IMPORTED_MODULE_88___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_parse_int_js__WEBPACK_IMPORTED_MODULE_88__);
/* harmony import */ var core_js_modules_es_number_to_fixed_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(/*! core-js/modules/es.number.to-fixed.js */ "./node_modules/core-js/modules/es.number.to-fixed.js");
/* harmony import */ var core_js_modules_es_number_to_fixed_js__WEBPACK_IMPORTED_MODULE_89___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_to_fixed_js__WEBPACK_IMPORTED_MODULE_89__);
/* harmony import */ var core_js_modules_es_number_to_precision_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(/*! core-js/modules/es.number.to-precision.js */ "./node_modules/core-js/modules/es.number.to-precision.js");
/* harmony import */ var core_js_modules_es_number_to_precision_js__WEBPACK_IMPORTED_MODULE_90___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_to_precision_js__WEBPACK_IMPORTED_MODULE_90__);
/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js");
/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_91___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_91__);
/* harmony import */ var core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js");
/* harmony import */ var core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_92___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_92__);
/* harmony import */ var core_js_modules_es_object_define_getter_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(/*! core-js/modules/es.object.define-getter.js */ "./node_modules/core-js/modules/es.object.define-getter.js");
/* harmony import */ var core_js_modules_es_object_define_getter_js__WEBPACK_IMPORTED_MODULE_93___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_getter_js__WEBPACK_IMPORTED_MODULE_93__);
/* harmony import */ var core_js_modules_es_object_define_properties_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(/*! core-js/modules/es.object.define-properties.js */ "./node_modules/core-js/modules/es.object.define-properties.js");
/* harmony import */ var core_js_modules_es_object_define_properties_js__WEBPACK_IMPORTED_MODULE_94___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_properties_js__WEBPACK_IMPORTED_MODULE_94__);
/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js");
/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_95___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_95__);
/* harmony import */ var core_js_modules_es_object_define_setter_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(/*! core-js/modules/es.object.define-setter.js */ "./node_modules/core-js/modules/es.object.define-setter.js");
/* harmony import */ var core_js_modules_es_object_define_setter_js__WEBPACK_IMPORTED_MODULE_96___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_setter_js__WEBPACK_IMPORTED_MODULE_96__);
/* harmony import */ var core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(/*! core-js/modules/es.object.entries.js */ "./node_modules/core-js/modules/es.object.entries.js");
/* harmony import */ var core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_97___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_97__);
/* harmony import */ var core_js_modules_es_object_freeze_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(/*! core-js/modules/es.object.freeze.js */ "./node_modules/core-js/modules/es.object.freeze.js");
/* harmony import */ var core_js_modules_es_object_freeze_js__WEBPACK_IMPORTED_MODULE_98___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_freeze_js__WEBPACK_IMPORTED_MODULE_98__);
/* harmony import */ var core_js_modules_es_object_from_entries_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(/*! core-js/modules/es.object.from-entries.js */ "./node_modules/core-js/modules/es.object.from-entries.js");
/* harmony import */ var core_js_modules_es_object_from_entries_js__WEBPACK_IMPORTED_MODULE_99___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_from_entries_js__WEBPACK_IMPORTED_MODULE_99__);
/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js");
/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_100___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_100__);
/* harmony import */ var core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptors.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptors.js");
/* harmony import */ var core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_101___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptors_js__WEBPACK_IMPORTED_MODULE_101__);
/* harmony import */ var core_js_modules_es_object_get_own_property_names_js__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-names.js */ "./node_modules/core-js/modules/es.object.get-own-property-names.js");
/* harmony import */ var core_js_modules_es_object_get_own_property_names_js__WEBPACK_IMPORTED_MODULE_102___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_names_js__WEBPACK_IMPORTED_MODULE_102__);
/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(/*! core-js/modules/es.object.get-prototype-of.js */ "./node_modules/core-js/modules/es.object.get-prototype-of.js");
/* harmony import */ var core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_103___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_103__);
/* harmony import */ var core_js_modules_es_object_is_js__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(/*! core-js/modules/es.object.is.js */ "./node_modules/core-js/modules/es.object.is.js");
/* harmony import */ var core_js_modules_es_object_is_js__WEBPACK_IMPORTED_MODULE_104___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_is_js__WEBPACK_IMPORTED_MODULE_104__);
/* harmony import */ var core_js_modules_es_object_is_extensible_js__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(/*! core-js/modules/es.object.is-extensible.js */ "./node_modules/core-js/modules/es.object.is-extensible.js");
/* harmony import */ var core_js_modules_es_object_is_extensible_js__WEBPACK_IMPORTED_MODULE_105___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_is_extensible_js__WEBPACK_IMPORTED_MODULE_105__);
/* harmony import */ var core_js_modules_es_object_is_frozen_js__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(/*! core-js/modules/es.object.is-frozen.js */ "./node_modules/core-js/modules/es.object.is-frozen.js");
/* harmony import */ var core_js_modules_es_object_is_frozen_js__WEBPACK_IMPORTED_MODULE_106___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_is_frozen_js__WEBPACK_IMPORTED_MODULE_106__);
/* harmony import */ var core_js_modules_es_object_is_sealed_js__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(/*! core-js/modules/es.object.is-sealed.js */ "./node_modules/core-js/modules/es.object.is-sealed.js");
/* harmony import */ var core_js_modules_es_object_is_sealed_js__WEBPACK_IMPORTED_MODULE_107___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_is_sealed_js__WEBPACK_IMPORTED_MODULE_107__);
/* harmony import */ var core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(/*! core-js/modules/es.object.keys.js */ "./node_modules/core-js/modules/es.object.keys.js");
/* harmony import */ var core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_108___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_108__);
/* harmony import */ var core_js_modules_es_object_lookup_getter_js__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(/*! core-js/modules/es.object.lookup-getter.js */ "./node_modules/core-js/modules/es.object.lookup-getter.js");
/* harmony import */ var core_js_modules_es_object_lookup_getter_js__WEBPACK_IMPORTED_MODULE_109___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_lookup_getter_js__WEBPACK_IMPORTED_MODULE_109__);
/* harmony import */ var core_js_modules_es_object_lookup_setter_js__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(/*! core-js/modules/es.object.lookup-setter.js */ "./node_modules/core-js/modules/es.object.lookup-setter.js");
/* harmony import */ var core_js_modules_es_object_lookup_setter_js__WEBPACK_IMPORTED_MODULE_110___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_lookup_setter_js__WEBPACK_IMPORTED_MODULE_110__);
/* harmony import */ var core_js_modules_es_object_prevent_extensions_js__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(/*! core-js/modules/es.object.prevent-extensions.js */ "./node_modules/core-js/modules/es.object.prevent-extensions.js");
/* harmony import */ var core_js_modules_es_object_prevent_extensions_js__WEBPACK_IMPORTED_MODULE_111___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_prevent_extensions_js__WEBPACK_IMPORTED_MODULE_111__);
/* harmony import */ var core_js_modules_es_object_seal_js__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(/*! core-js/modules/es.object.seal.js */ "./node_modules/core-js/modules/es.object.seal.js");
/* harmony import */ var core_js_modules_es_object_seal_js__WEBPACK_IMPORTED_MODULE_112___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_seal_js__WEBPACK_IMPORTED_MODULE_112__);
/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ "./node_modules/core-js/modules/es.object.set-prototype-of.js");
/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_113___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_113__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js");
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_114___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_114__);
/* harmony import */ var core_js_modules_es_object_values_js__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(/*! core-js/modules/es.object.values.js */ "./node_modules/core-js/modules/es.object.values.js");
/* harmony import */ var core_js_modules_es_object_values_js__WEBPACK_IMPORTED_MODULE_115___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_values_js__WEBPACK_IMPORTED_MODULE_115__);
/* harmony import */ var core_js_modules_es_parse_float_js__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(/*! core-js/modules/es.parse-float.js */ "./node_modules/core-js/modules/es.parse-float.js");
/* harmony import */ var core_js_modules_es_parse_float_js__WEBPACK_IMPORTED_MODULE_116___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_float_js__WEBPACK_IMPORTED_MODULE_116__);
/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(/*! core-js/modules/es.parse-int.js */ "./node_modules/core-js/modules/es.parse-int.js");
/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_117___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_117__);
/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js");
/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_118___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_118__);
/* harmony import */ var core_js_modules_es_promise_all_settled_js__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(/*! core-js/modules/es.promise.all-settled.js */ "./node_modules/core-js/modules/es.promise.all-settled.js");
/* harmony import */ var core_js_modules_es_promise_all_settled_js__WEBPACK_IMPORTED_MODULE_119___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_all_settled_js__WEBPACK_IMPORTED_MODULE_119__);
/* harmony import */ var core_js_modules_es_promise_any_js__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(/*! core-js/modules/es.promise.any.js */ "./node_modules/core-js/modules/es.promise.any.js");
/* harmony import */ var core_js_modules_es_promise_any_js__WEBPACK_IMPORTED_MODULE_120___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_any_js__WEBPACK_IMPORTED_MODULE_120__);
/* harmony import */ var core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(/*! core-js/modules/es.promise.finally.js */ "./node_modules/core-js/modules/es.promise.finally.js");
/* harmony import */ var core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_121___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_121__);
/* harmony import */ var core_js_modules_es_reflect_apply_js__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(/*! core-js/modules/es.reflect.apply.js */ "./node_modules/core-js/modules/es.reflect.apply.js");
/* harmony import */ var core_js_modules_es_reflect_apply_js__WEBPACK_IMPORTED_MODULE_122___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_apply_js__WEBPACK_IMPORTED_MODULE_122__);
/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(/*! core-js/modules/es.reflect.construct.js */ "./node_modules/core-js/modules/es.reflect.construct.js");
/* harmony import */ var core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_123___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_construct_js__WEBPACK_IMPORTED_MODULE_123__);
/* harmony import */ var core_js_modules_es_reflect_define_property_js__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(/*! core-js/modules/es.reflect.define-property.js */ "./node_modules/core-js/modules/es.reflect.define-property.js");
/* harmony import */ var core_js_modules_es_reflect_define_property_js__WEBPACK_IMPORTED_MODULE_124___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_define_property_js__WEBPACK_IMPORTED_MODULE_124__);
/* harmony import */ var core_js_modules_es_reflect_delete_property_js__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(/*! core-js/modules/es.reflect.delete-property.js */ "./node_modules/core-js/modules/es.reflect.delete-property.js");
/* harmony import */ var core_js_modules_es_reflect_delete_property_js__WEBPACK_IMPORTED_MODULE_125___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_delete_property_js__WEBPACK_IMPORTED_MODULE_125__);
/* harmony import */ var core_js_modules_es_reflect_get_js__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(/*! core-js/modules/es.reflect.get.js */ "./node_modules/core-js/modules/es.reflect.get.js");
/* harmony import */ var core_js_modules_es_reflect_get_js__WEBPACK_IMPORTED_MODULE_126___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_get_js__WEBPACK_IMPORTED_MODULE_126__);
/* harmony import */ var core_js_modules_es_reflect_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(/*! core-js/modules/es.reflect.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.reflect.get-own-property-descriptor.js");
/* harmony import */ var core_js_modules_es_reflect_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_127___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_127__);
/* harmony import */ var core_js_modules_es_reflect_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(/*! core-js/modules/es.reflect.get-prototype-of.js */ "./node_modules/core-js/modules/es.reflect.get-prototype-of.js");
/* harmony import */ var core_js_modules_es_reflect_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_128___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_128__);
/* harmony import */ var core_js_modules_es_reflect_has_js__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(/*! core-js/modules/es.reflect.has.js */ "./node_modules/core-js/modules/es.reflect.has.js");
/* harmony import */ var core_js_modules_es_reflect_has_js__WEBPACK_IMPORTED_MODULE_129___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_has_js__WEBPACK_IMPORTED_MODULE_129__);
/* harmony import */ var core_js_modules_es_reflect_is_extensible_js__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(/*! core-js/modules/es.reflect.is-extensible.js */ "./node_modules/core-js/modules/es.reflect.is-extensible.js");
/* harmony import */ var core_js_modules_es_reflect_is_extensible_js__WEBPACK_IMPORTED_MODULE_130___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_is_extensible_js__WEBPACK_IMPORTED_MODULE_130__);
/* harmony import */ var core_js_modules_es_reflect_own_keys_js__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(/*! core-js/modules/es.reflect.own-keys.js */ "./node_modules/core-js/modules/es.reflect.own-keys.js");
/* harmony import */ var core_js_modules_es_reflect_own_keys_js__WEBPACK_IMPORTED_MODULE_131___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_own_keys_js__WEBPACK_IMPORTED_MODULE_131__);
/* harmony import */ var core_js_modules_es_reflect_prevent_extensions_js__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(/*! core-js/modules/es.reflect.prevent-extensions.js */ "./node_modules/core-js/modules/es.reflect.prevent-extensions.js");
/* harmony import */ var core_js_modules_es_reflect_prevent_extensions_js__WEBPACK_IMPORTED_MODULE_132___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_prevent_extensions_js__WEBPACK_IMPORTED_MODULE_132__);
/* harmony import */ var core_js_modules_es_reflect_set_js__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(/*! core-js/modules/es.reflect.set.js */ "./node_modules/core-js/modules/es.reflect.set.js");
/* harmony import */ var core_js_modules_es_reflect_set_js__WEBPACK_IMPORTED_MODULE_133___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_set_js__WEBPACK_IMPORTED_MODULE_133__);
/* harmony import */ var core_js_modules_es_reflect_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(/*! core-js/modules/es.reflect.set-prototype-of.js */ "./node_modules/core-js/modules/es.reflect.set-prototype-of.js");
/* harmony import */ var core_js_modules_es_reflect_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_134___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_134__);
/* harmony import */ var core_js_modules_es_reflect_to_string_tag_js__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(/*! core-js/modules/es.reflect.to-string-tag.js */ "./node_modules/core-js/modules/es.reflect.to-string-tag.js");
/* harmony import */ var core_js_modules_es_reflect_to_string_tag_js__WEBPACK_IMPORTED_MODULE_135___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_to_string_tag_js__WEBPACK_IMPORTED_MODULE_135__);
/* harmony import */ var core_js_modules_es_regexp_constructor_js__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(/*! core-js/modules/es.regexp.constructor.js */ "./node_modules/core-js/modules/es.regexp.constructor.js");
/* harmony import */ var core_js_modules_es_regexp_constructor_js__WEBPACK_IMPORTED_MODULE_136___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_constructor_js__WEBPACK_IMPORTED_MODULE_136__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ "./node_modules/core-js/modules/es.regexp.exec.js");
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_137___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_137__);
/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(/*! core-js/modules/es.regexp.flags.js */ "./node_modules/core-js/modules/es.regexp.flags.js");
/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_138___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_138__);
/* harmony import */ var core_js_modules_es_regexp_sticky_js__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(/*! core-js/modules/es.regexp.sticky.js */ "./node_modules/core-js/modules/es.regexp.sticky.js");
/* harmony import */ var core_js_modules_es_regexp_sticky_js__WEBPACK_IMPORTED_MODULE_139___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_sticky_js__WEBPACK_IMPORTED_MODULE_139__);
/* harmony import */ var core_js_modules_es_regexp_test_js__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(/*! core-js/modules/es.regexp.test.js */ "./node_modules/core-js/modules/es.regexp.test.js");
/* harmony import */ var core_js_modules_es_regexp_test_js__WEBPACK_IMPORTED_MODULE_140___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_test_js__WEBPACK_IMPORTED_MODULE_140__);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ "./node_modules/core-js/modules/es.regexp.to-string.js");
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_141___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_141__);
/* harmony import */ var core_js_modules_es_set_js__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(/*! core-js/modules/es.set.js */ "./node_modules/core-js/modules/es.set.js");
/* harmony import */ var core_js_modules_es_set_js__WEBPACK_IMPORTED_MODULE_142___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_js__WEBPACK_IMPORTED_MODULE_142__);
/* harmony import */ var core_js_modules_es_string_code_point_at_js__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(/*! core-js/modules/es.string.code-point-at.js */ "./node_modules/core-js/modules/es.string.code-point-at.js");
/* harmony import */ var core_js_modules_es_string_code_point_at_js__WEBPACK_IMPORTED_MODULE_143___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_code_point_at_js__WEBPACK_IMPORTED_MODULE_143__);
/* harmony import */ var core_js_modules_es_string_ends_with_js__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(/*! core-js/modules/es.string.ends-with.js */ "./node_modules/core-js/modules/es.string.ends-with.js");
/* harmony import */ var core_js_modules_es_string_ends_with_js__WEBPACK_IMPORTED_MODULE_144___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_ends_with_js__WEBPACK_IMPORTED_MODULE_144__);
/* harmony import */ var core_js_modules_es_string_from_code_point_js__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(/*! core-js/modules/es.string.from-code-point.js */ "./node_modules/core-js/modules/es.string.from-code-point.js");
/* harmony import */ var core_js_modules_es_string_from_code_point_js__WEBPACK_IMPORTED_MODULE_145___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_from_code_point_js__WEBPACK_IMPORTED_MODULE_145__);
/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(/*! core-js/modules/es.string.includes.js */ "./node_modules/core-js/modules/es.string.includes.js");
/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_146___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_146__);
/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js");
/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_147___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_147__);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(/*! core-js/modules/es.string.match.js */ "./node_modules/core-js/modules/es.string.match.js");
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_148___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_148__);
/* harmony import */ var core_js_modules_es_string_match_all_js__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(/*! core-js/modules/es.string.match-all.js */ "./node_modules/core-js/modules/es.string.match-all.js");
/* harmony import */ var core_js_modules_es_string_match_all_js__WEBPACK_IMPORTED_MODULE_149___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match_all_js__WEBPACK_IMPORTED_MODULE_149__);
/* harmony import */ var core_js_modules_es_string_pad_end_js__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(/*! core-js/modules/es.string.pad-end.js */ "./node_modules/core-js/modules/es.string.pad-end.js");
/* harmony import */ var core_js_modules_es_string_pad_end_js__WEBPACK_IMPORTED_MODULE_150___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_pad_end_js__WEBPACK_IMPORTED_MODULE_150__);
/* harmony import */ var core_js_modules_es_string_pad_start_js__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(/*! core-js/modules/es.string.pad-start.js */ "./node_modules/core-js/modules/es.string.pad-start.js");
/* harmony import */ var core_js_modules_es_string_pad_start_js__WEBPACK_IMPORTED_MODULE_151___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_pad_start_js__WEBPACK_IMPORTED_MODULE_151__);
/* harmony import */ var core_js_modules_es_string_raw_js__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(/*! core-js/modules/es.string.raw.js */ "./node_modules/core-js/modules/es.string.raw.js");
/* harmony import */ var core_js_modules_es_string_raw_js__WEBPACK_IMPORTED_MODULE_152___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_raw_js__WEBPACK_IMPORTED_MODULE_152__);
/* harmony import */ var core_js_modules_es_string_repeat_js__WEBPACK_IMPORTED_MODULE_153__ = __webpack_require__(/*! core-js/modules/es.string.repeat.js */ "./node_modules/core-js/modules/es.string.repeat.js");
/* harmony import */ var core_js_modules_es_string_repeat_js__WEBPACK_IMPORTED_MODULE_153___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_repeat_js__WEBPACK_IMPORTED_MODULE_153__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ "./node_modules/core-js/modules/es.string.replace.js");
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_154___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_154__);
/* harmony import */ var core_js_modules_es_string_replace_all_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(/*! core-js/modules/es.string.replace-all.js */ "./node_modules/core-js/modules/es.string.replace-all.js");
/* harmony import */ var core_js_modules_es_string_replace_all_js__WEBPACK_IMPORTED_MODULE_155___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_all_js__WEBPACK_IMPORTED_MODULE_155__);
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(/*! core-js/modules/es.string.search.js */ "./node_modules/core-js/modules/es.string.search.js");
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_156___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_156__);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ "./node_modules/core-js/modules/es.string.split.js");
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_157___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_157__);
/* harmony import */ var core_js_modules_es_string_starts_with_js__WEBPACK_IMPORTED_MODULE_158__ = __webpack_require__(/*! core-js/modules/es.string.starts-with.js */ "./node_modules/core-js/modules/es.string.starts-with.js");
/* harmony import */ var core_js_modules_es_string_starts_with_js__WEBPACK_IMPORTED_MODULE_158___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_starts_with_js__WEBPACK_IMPORTED_MODULE_158__);
/* harmony import */ var core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_159__ = __webpack_require__(/*! core-js/modules/es.string.trim.js */ "./node_modules/core-js/modules/es.string.trim.js");
/* harmony import */ var core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_159___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_159__);
/* harmony import */ var core_js_modules_es_string_trim_end_js__WEBPACK_IMPORTED_MODULE_160__ = __webpack_require__(/*! core-js/modules/es.string.trim-end.js */ "./node_modules/core-js/modules/es.string.trim-end.js");
/* harmony import */ var core_js_modules_es_string_trim_end_js__WEBPACK_IMPORTED_MODULE_160___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_trim_end_js__WEBPACK_IMPORTED_MODULE_160__);
/* harmony import */ var core_js_modules_es_string_trim_start_js__WEBPACK_IMPORTED_MODULE_161__ = __webpack_require__(/*! core-js/modules/es.string.trim-start.js */ "./node_modules/core-js/modules/es.string.trim-start.js");
/* harmony import */ var core_js_modules_es_string_trim_start_js__WEBPACK_IMPORTED_MODULE_161___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_trim_start_js__WEBPACK_IMPORTED_MODULE_161__);
/* harmony import */ var core_js_modules_es_string_anchor_js__WEBPACK_IMPORTED_MODULE_162__ = __webpack_require__(/*! core-js/modules/es.string.anchor.js */ "./node_modules/core-js/modules/es.string.anchor.js");
/* harmony import */ var core_js_modules_es_string_anchor_js__WEBPACK_IMPORTED_MODULE_162___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_anchor_js__WEBPACK_IMPORTED_MODULE_162__);
/* harmony import */ var core_js_modules_es_string_big_js__WEBPACK_IMPORTED_MODULE_163__ = __webpack_require__(/*! core-js/modules/es.string.big.js */ "./node_modules/core-js/modules/es.string.big.js");
/* harmony import */ var core_js_modules_es_string_big_js__WEBPACK_IMPORTED_MODULE_163___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_big_js__WEBPACK_IMPORTED_MODULE_163__);
/* harmony import */ var core_js_modules_es_string_blink_js__WEBPACK_IMPORTED_MODULE_164__ = __webpack_require__(/*! core-js/modules/es.string.blink.js */ "./node_modules/core-js/modules/es.string.blink.js");
/* harmony import */ var core_js_modules_es_string_blink_js__WEBPACK_IMPORTED_MODULE_164___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_blink_js__WEBPACK_IMPORTED_MODULE_164__);
/* harmony import */ var core_js_modules_es_string_bold_js__WEBPACK_IMPORTED_MODULE_165__ = __webpack_require__(/*! core-js/modules/es.string.bold.js */ "./node_modules/core-js/modules/es.string.bold.js");
/* harmony import */ var core_js_modules_es_string_bold_js__WEBPACK_IMPORTED_MODULE_165___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_bold_js__WEBPACK_IMPORTED_MODULE_165__);
/* harmony import */ var core_js_modules_es_string_fixed_js__WEBPACK_IMPORTED_MODULE_166__ = __webpack_require__(/*! core-js/modules/es.string.fixed.js */ "./node_modules/core-js/modules/es.string.fixed.js");
/* harmony import */ var core_js_modules_es_string_fixed_js__WEBPACK_IMPORTED_MODULE_166___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_fixed_js__WEBPACK_IMPORTED_MODULE_166__);
/* harmony import */ var core_js_modules_es_string_fontcolor_js__WEBPACK_IMPORTED_MODULE_167__ = __webpack_require__(/*! core-js/modules/es.string.fontcolor.js */ "./node_modules/core-js/modules/es.string.fontcolor.js");
/* harmony import */ var core_js_modules_es_string_fontcolor_js__WEBPACK_IMPORTED_MODULE_167___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_fontcolor_js__WEBPACK_IMPORTED_MODULE_167__);
/* harmony import */ var core_js_modules_es_string_fontsize_js__WEBPACK_IMPORTED_MODULE_168__ = __webpack_require__(/*! core-js/modules/es.string.fontsize.js */ "./node_modules/core-js/modules/es.string.fontsize.js");
/* harmony import */ var core_js_modules_es_string_fontsize_js__WEBPACK_IMPORTED_MODULE_168___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_fontsize_js__WEBPACK_IMPORTED_MODULE_168__);
/* harmony import */ var core_js_modules_es_string_italics_js__WEBPACK_IMPORTED_MODULE_169__ = __webpack_require__(/*! core-js/modules/es.string.italics.js */ "./node_modules/core-js/modules/es.string.italics.js");
/* harmony import */ var core_js_modules_es_string_italics_js__WEBPACK_IMPORTED_MODULE_169___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_italics_js__WEBPACK_IMPORTED_MODULE_169__);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_170__ = __webpack_require__(/*! core-js/modules/es.string.link.js */ "./node_modules/core-js/modules/es.string.link.js");
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_170___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_170__);
/* harmony import */ var core_js_modules_es_string_small_js__WEBPACK_IMPORTED_MODULE_171__ = __webpack_require__(/*! core-js/modules/es.string.small.js */ "./node_modules/core-js/modules/es.string.small.js");
/* harmony import */ var core_js_modules_es_string_small_js__WEBPACK_IMPORTED_MODULE_171___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_small_js__WEBPACK_IMPORTED_MODULE_171__);
/* harmony import */ var core_js_modules_es_string_strike_js__WEBPACK_IMPORTED_MODULE_172__ = __webpack_require__(/*! core-js/modules/es.string.strike.js */ "./node_modules/core-js/modules/es.string.strike.js");
/* harmony import */ var core_js_modules_es_string_strike_js__WEBPACK_IMPORTED_MODULE_172___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_strike_js__WEBPACK_IMPORTED_MODULE_172__);
/* harmony import */ var core_js_modules_es_string_sub_js__WEBPACK_IMPORTED_MODULE_173__ = __webpack_require__(/*! core-js/modules/es.string.sub.js */ "./node_modules/core-js/modules/es.string.sub.js");
/* harmony import */ var core_js_modules_es_string_sub_js__WEBPACK_IMPORTED_MODULE_173___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_sub_js__WEBPACK_IMPORTED_MODULE_173__);
/* harmony import */ var core_js_modules_es_string_sup_js__WEBPACK_IMPORTED_MODULE_174__ = __webpack_require__(/*! core-js/modules/es.string.sup.js */ "./node_modules/core-js/modules/es.string.sup.js");
/* harmony import */ var core_js_modules_es_string_sup_js__WEBPACK_IMPORTED_MODULE_174___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_sup_js__WEBPACK_IMPORTED_MODULE_174__);
/* harmony import */ var core_js_modules_es_typed_array_float32_array_js__WEBPACK_IMPORTED_MODULE_175__ = __webpack_require__(/*! core-js/modules/es.typed-array.float32-array.js */ "./node_modules/core-js/modules/es.typed-array.float32-array.js");
/* harmony import */ var core_js_modules_es_typed_array_float32_array_js__WEBPACK_IMPORTED_MODULE_175___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_float32_array_js__WEBPACK_IMPORTED_MODULE_175__);
/* harmony import */ var core_js_modules_es_typed_array_float64_array_js__WEBPACK_IMPORTED_MODULE_176__ = __webpack_require__(/*! core-js/modules/es.typed-array.float64-array.js */ "./node_modules/core-js/modules/es.typed-array.float64-array.js");
/* harmony import */ var core_js_modules_es_typed_array_float64_array_js__WEBPACK_IMPORTED_MODULE_176___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_float64_array_js__WEBPACK_IMPORTED_MODULE_176__);
/* harmony import */ var core_js_modules_es_typed_array_int8_array_js__WEBPACK_IMPORTED_MODULE_177__ = __webpack_require__(/*! core-js/modules/es.typed-array.int8-array.js */ "./node_modules/core-js/modules/es.typed-array.int8-array.js");
/* harmony import */ var core_js_modules_es_typed_array_int8_array_js__WEBPACK_IMPORTED_MODULE_177___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_int8_array_js__WEBPACK_IMPORTED_MODULE_177__);
/* harmony import */ var core_js_modules_es_typed_array_int16_array_js__WEBPACK_IMPORTED_MODULE_178__ = __webpack_require__(/*! core-js/modules/es.typed-array.int16-array.js */ "./node_modules/core-js/modules/es.typed-array.int16-array.js");
/* harmony import */ var core_js_modules_es_typed_array_int16_array_js__WEBPACK_IMPORTED_MODULE_178___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_int16_array_js__WEBPACK_IMPORTED_MODULE_178__);
/* harmony import */ var core_js_modules_es_typed_array_int32_array_js__WEBPACK_IMPORTED_MODULE_179__ = __webpack_require__(/*! core-js/modules/es.typed-array.int32-array.js */ "./node_modules/core-js/modules/es.typed-array.int32-array.js");
/* harmony import */ var core_js_modules_es_typed_array_int32_array_js__WEBPACK_IMPORTED_MODULE_179___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_int32_array_js__WEBPACK_IMPORTED_MODULE_179__);
/* harmony import */ var core_js_modules_es_typed_array_uint8_array_js__WEBPACK_IMPORTED_MODULE_180__ = __webpack_require__(/*! core-js/modules/es.typed-array.uint8-array.js */ "./node_modules/core-js/modules/es.typed-array.uint8-array.js");
/* harmony import */ var core_js_modules_es_typed_array_uint8_array_js__WEBPACK_IMPORTED_MODULE_180___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_uint8_array_js__WEBPACK_IMPORTED_MODULE_180__);
/* harmony import */ var core_js_modules_es_typed_array_uint8_clamped_array_js__WEBPACK_IMPORTED_MODULE_181__ = __webpack_require__(/*! core-js/modules/es.typed-array.uint8-clamped-array.js */ "./node_modules/core-js/modules/es.typed-array.uint8-clamped-array.js");
/* harmony import */ var core_js_modules_es_typed_array_uint8_clamped_array_js__WEBPACK_IMPORTED_MODULE_181___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_uint8_clamped_array_js__WEBPACK_IMPORTED_MODULE_181__);
/* harmony import */ var core_js_modules_es_typed_array_uint16_array_js__WEBPACK_IMPORTED_MODULE_182__ = __webpack_require__(/*! core-js/modules/es.typed-array.uint16-array.js */ "./node_modules/core-js/modules/es.typed-array.uint16-array.js");
/* harmony import */ var core_js_modules_es_typed_array_uint16_array_js__WEBPACK_IMPORTED_MODULE_182___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_uint16_array_js__WEBPACK_IMPORTED_MODULE_182__);
/* harmony import */ var core_js_modules_es_typed_array_uint32_array_js__WEBPACK_IMPORTED_MODULE_183__ = __webpack_require__(/*! core-js/modules/es.typed-array.uint32-array.js */ "./node_modules/core-js/modules/es.typed-array.uint32-array.js");
/* harmony import */ var core_js_modules_es_typed_array_uint32_array_js__WEBPACK_IMPORTED_MODULE_183___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_uint32_array_js__WEBPACK_IMPORTED_MODULE_183__);
/* harmony import */ var core_js_modules_es_typed_array_copy_within_js__WEBPACK_IMPORTED_MODULE_184__ = __webpack_require__(/*! core-js/modules/es.typed-array.copy-within.js */ "./node_modules/core-js/modules/es.typed-array.copy-within.js");
/* harmony import */ var core_js_modules_es_typed_array_copy_within_js__WEBPACK_IMPORTED_MODULE_184___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_copy_within_js__WEBPACK_IMPORTED_MODULE_184__);
/* harmony import */ var core_js_modules_es_typed_array_every_js__WEBPACK_IMPORTED_MODULE_185__ = __webpack_require__(/*! core-js/modules/es.typed-array.every.js */ "./node_modules/core-js/modules/es.typed-array.every.js");
/* harmony import */ var core_js_modules_es_typed_array_every_js__WEBPACK_IMPORTED_MODULE_185___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_every_js__WEBPACK_IMPORTED_MODULE_185__);
/* harmony import */ var core_js_modules_es_typed_array_fill_js__WEBPACK_IMPORTED_MODULE_186__ = __webpack_require__(/*! core-js/modules/es.typed-array.fill.js */ "./node_modules/core-js/modules/es.typed-array.fill.js");
/* harmony import */ var core_js_modules_es_typed_array_fill_js__WEBPACK_IMPORTED_MODULE_186___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_fill_js__WEBPACK_IMPORTED_MODULE_186__);
/* harmony import */ var core_js_modules_es_typed_array_filter_js__WEBPACK_IMPORTED_MODULE_187__ = __webpack_require__(/*! core-js/modules/es.typed-array.filter.js */ "./node_modules/core-js/modules/es.typed-array.filter.js");
/* harmony import */ var core_js_modules_es_typed_array_filter_js__WEBPACK_IMPORTED_MODULE_187___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_filter_js__WEBPACK_IMPORTED_MODULE_187__);
/* harmony import */ var core_js_modules_es_typed_array_find_js__WEBPACK_IMPORTED_MODULE_188__ = __webpack_require__(/*! core-js/modules/es.typed-array.find.js */ "./node_modules/core-js/modules/es.typed-array.find.js");
/* harmony import */ var core_js_modules_es_typed_array_find_js__WEBPACK_IMPORTED_MODULE_188___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_find_js__WEBPACK_IMPORTED_MODULE_188__);
/* harmony import */ var core_js_modules_es_typed_array_find_index_js__WEBPACK_IMPORTED_MODULE_189__ = __webpack_require__(/*! core-js/modules/es.typed-array.find-index.js */ "./node_modules/core-js/modules/es.typed-array.find-index.js");
/* harmony import */ var core_js_modules_es_typed_array_find_index_js__WEBPACK_IMPORTED_MODULE_189___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_find_index_js__WEBPACK_IMPORTED_MODULE_189__);
/* harmony import */ var core_js_modules_es_typed_array_for_each_js__WEBPACK_IMPORTED_MODULE_190__ = __webpack_require__(/*! core-js/modules/es.typed-array.for-each.js */ "./node_modules/core-js/modules/es.typed-array.for-each.js");
/* harmony import */ var core_js_modules_es_typed_array_for_each_js__WEBPACK_IMPORTED_MODULE_190___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_for_each_js__WEBPACK_IMPORTED_MODULE_190__);
/* harmony import */ var core_js_modules_es_typed_array_from_js__WEBPACK_IMPORTED_MODULE_191__ = __webpack_require__(/*! core-js/modules/es.typed-array.from.js */ "./node_modules/core-js/modules/es.typed-array.from.js");
/* harmony import */ var core_js_modules_es_typed_array_from_js__WEBPACK_IMPORTED_MODULE_191___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_from_js__WEBPACK_IMPORTED_MODULE_191__);
/* harmony import */ var core_js_modules_es_typed_array_includes_js__WEBPACK_IMPORTED_MODULE_192__ = __webpack_require__(/*! core-js/modules/es.typed-array.includes.js */ "./node_modules/core-js/modules/es.typed-array.includes.js");
/* harmony import */ var core_js_modules_es_typed_array_includes_js__WEBPACK_IMPORTED_MODULE_192___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_includes_js__WEBPACK_IMPORTED_MODULE_192__);
/* harmony import */ var core_js_modules_es_typed_array_index_of_js__WEBPACK_IMPORTED_MODULE_193__ = __webpack_require__(/*! core-js/modules/es.typed-array.index-of.js */ "./node_modules/core-js/modules/es.typed-array.index-of.js");
/* harmony import */ var core_js_modules_es_typed_array_index_of_js__WEBPACK_IMPORTED_MODULE_193___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_index_of_js__WEBPACK_IMPORTED_MODULE_193__);
/* harmony import */ var core_js_modules_es_typed_array_iterator_js__WEBPACK_IMPORTED_MODULE_194__ = __webpack_require__(/*! core-js/modules/es.typed-array.iterator.js */ "./node_modules/core-js/modules/es.typed-array.iterator.js");
/* harmony import */ var core_js_modules_es_typed_array_iterator_js__WEBPACK_IMPORTED_MODULE_194___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_iterator_js__WEBPACK_IMPORTED_MODULE_194__);
/* harmony import */ var core_js_modules_es_typed_array_join_js__WEBPACK_IMPORTED_MODULE_195__ = __webpack_require__(/*! core-js/modules/es.typed-array.join.js */ "./node_modules/core-js/modules/es.typed-array.join.js");
/* harmony import */ var core_js_modules_es_typed_array_join_js__WEBPACK_IMPORTED_MODULE_195___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_join_js__WEBPACK_IMPORTED_MODULE_195__);
/* harmony import */ var core_js_modules_es_typed_array_last_index_of_js__WEBPACK_IMPORTED_MODULE_196__ = __webpack_require__(/*! core-js/modules/es.typed-array.last-index-of.js */ "./node_modules/core-js/modules/es.typed-array.last-index-of.js");
/* harmony import */ var core_js_modules_es_typed_array_last_index_of_js__WEBPACK_IMPORTED_MODULE_196___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_last_index_of_js__WEBPACK_IMPORTED_MODULE_196__);
/* harmony import */ var core_js_modules_es_typed_array_map_js__WEBPACK_IMPORTED_MODULE_197__ = __webpack_require__(/*! core-js/modules/es.typed-array.map.js */ "./node_modules/core-js/modules/es.typed-array.map.js");
/* harmony import */ var core_js_modules_es_typed_array_map_js__WEBPACK_IMPORTED_MODULE_197___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_map_js__WEBPACK_IMPORTED_MODULE_197__);
/* harmony import */ var core_js_modules_es_typed_array_of_js__WEBPACK_IMPORTED_MODULE_198__ = __webpack_require__(/*! core-js/modules/es.typed-array.of.js */ "./node_modules/core-js/modules/es.typed-array.of.js");
/* harmony import */ var core_js_modules_es_typed_array_of_js__WEBPACK_IMPORTED_MODULE_198___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_of_js__WEBPACK_IMPORTED_MODULE_198__);
/* harmony import */ var core_js_modules_es_typed_array_reduce_js__WEBPACK_IMPORTED_MODULE_199__ = __webpack_require__(/*! core-js/modules/es.typed-array.reduce.js */ "./node_modules/core-js/modules/es.typed-array.reduce.js");
/* harmony import */ var core_js_modules_es_typed_array_reduce_js__WEBPACK_IMPORTED_MODULE_199___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_reduce_js__WEBPACK_IMPORTED_MODULE_199__);
/* harmony import */ var core_js_modules_es_typed_array_reduce_right_js__WEBPACK_IMPORTED_MODULE_200__ = __webpack_require__(/*! core-js/modules/es.typed-array.reduce-right.js */ "./node_modules/core-js/modules/es.typed-array.reduce-right.js");
/* harmony import */ var core_js_modules_es_typed_array_reduce_right_js__WEBPACK_IMPORTED_MODULE_200___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_reduce_right_js__WEBPACK_IMPORTED_MODULE_200__);
/* harmony import */ var core_js_modules_es_typed_array_reverse_js__WEBPACK_IMPORTED_MODULE_201__ = __webpack_require__(/*! core-js/modules/es.typed-array.reverse.js */ "./node_modules/core-js/modules/es.typed-array.reverse.js");
/* harmony import */ var core_js_modules_es_typed_array_reverse_js__WEBPACK_IMPORTED_MODULE_201___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_reverse_js__WEBPACK_IMPORTED_MODULE_201__);
/* harmony import */ var core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_202__ = __webpack_require__(/*! core-js/modules/es.typed-array.set.js */ "./node_modules/core-js/modules/es.typed-array.set.js");
/* harmony import */ var core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_202___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_202__);
/* harmony import */ var core_js_modules_es_typed_array_slice_js__WEBPACK_IMPORTED_MODULE_203__ = __webpack_require__(/*! core-js/modules/es.typed-array.slice.js */ "./node_modules/core-js/modules/es.typed-array.slice.js");
/* harmony import */ var core_js_modules_es_typed_array_slice_js__WEBPACK_IMPORTED_MODULE_203___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_slice_js__WEBPACK_IMPORTED_MODULE_203__);
/* harmony import */ var core_js_modules_es_typed_array_some_js__WEBPACK_IMPORTED_MODULE_204__ = __webpack_require__(/*! core-js/modules/es.typed-array.some.js */ "./node_modules/core-js/modules/es.typed-array.some.js");
/* harmony import */ var core_js_modules_es_typed_array_some_js__WEBPACK_IMPORTED_MODULE_204___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_some_js__WEBPACK_IMPORTED_MODULE_204__);
/* harmony import */ var core_js_modules_es_typed_array_sort_js__WEBPACK_IMPORTED_MODULE_205__ = __webpack_require__(/*! core-js/modules/es.typed-array.sort.js */ "./node_modules/core-js/modules/es.typed-array.sort.js");
/* harmony import */ var core_js_modules_es_typed_array_sort_js__WEBPACK_IMPORTED_MODULE_205___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_sort_js__WEBPACK_IMPORTED_MODULE_205__);
/* harmony import */ var core_js_modules_es_typed_array_subarray_js__WEBPACK_IMPORTED_MODULE_206__ = __webpack_require__(/*! core-js/modules/es.typed-array.subarray.js */ "./node_modules/core-js/modules/es.typed-array.subarray.js");
/* harmony import */ var core_js_modules_es_typed_array_subarray_js__WEBPACK_IMPORTED_MODULE_206___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_subarray_js__WEBPACK_IMPORTED_MODULE_206__);
/* harmony import */ var core_js_modules_es_typed_array_to_locale_string_js__WEBPACK_IMPORTED_MODULE_207__ = __webpack_require__(/*! core-js/modules/es.typed-array.to-locale-string.js */ "./node_modules/core-js/modules/es.typed-array.to-locale-string.js");
/* harmony import */ var core_js_modules_es_typed_array_to_locale_string_js__WEBPACK_IMPORTED_MODULE_207___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_to_locale_string_js__WEBPACK_IMPORTED_MODULE_207__);
/* harmony import */ var core_js_modules_es_typed_array_to_string_js__WEBPACK_IMPORTED_MODULE_208__ = __webpack_require__(/*! core-js/modules/es.typed-array.to-string.js */ "./node_modules/core-js/modules/es.typed-array.to-string.js");
/* harmony import */ var core_js_modules_es_typed_array_to_string_js__WEBPACK_IMPORTED_MODULE_208___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_to_string_js__WEBPACK_IMPORTED_MODULE_208__);
/* harmony import */ var core_js_modules_es_weak_map_js__WEBPACK_IMPORTED_MODULE_209__ = __webpack_require__(/*! core-js/modules/es.weak-map.js */ "./node_modules/core-js/modules/es.weak-map.js");
/* harmony import */ var core_js_modules_es_weak_map_js__WEBPACK_IMPORTED_MODULE_209___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_weak_map_js__WEBPACK_IMPORTED_MODULE_209__);
/* harmony import */ var core_js_modules_es_weak_set_js__WEBPACK_IMPORTED_MODULE_210__ = __webpack_require__(/*! core-js/modules/es.weak-set.js */ "./node_modules/core-js/modules/es.weak-set.js");
/* harmony import */ var core_js_modules_es_weak_set_js__WEBPACK_IMPORTED_MODULE_210___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_weak_set_js__WEBPACK_IMPORTED_MODULE_210__);
/* harmony import */ var core_js_modules_esnext_array_at_js__WEBPACK_IMPORTED_MODULE_211__ = __webpack_require__(/*! core-js/modules/esnext.array.at.js */ "./node_modules/core-js/modules/esnext.array.at.js");
/* harmony import */ var core_js_modules_esnext_array_at_js__WEBPACK_IMPORTED_MODULE_211___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_array_at_js__WEBPACK_IMPORTED_MODULE_211__);
/* harmony import */ var core_js_modules_esnext_array_filter_out_js__WEBPACK_IMPORTED_MODULE_212__ = __webpack_require__(/*! core-js/modules/esnext.array.filter-out.js */ "./node_modules/core-js/modules/esnext.array.filter-out.js");
/* harmony import */ var core_js_modules_esnext_array_filter_out_js__WEBPACK_IMPORTED_MODULE_212___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_array_filter_out_js__WEBPACK_IMPORTED_MODULE_212__);
/* harmony import */ var core_js_modules_esnext_array_find_last_js__WEBPACK_IMPORTED_MODULE_213__ = __webpack_require__(/*! core-js/modules/esnext.array.find-last.js */ "./node_modules/core-js/modules/esnext.array.find-last.js");
/* harmony import */ var core_js_modules_esnext_array_find_last_js__WEBPACK_IMPORTED_MODULE_213___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_array_find_last_js__WEBPACK_IMPORTED_MODULE_213__);
/* harmony import */ var core_js_modules_esnext_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_214__ = __webpack_require__(/*! core-js/modules/esnext.array.find-last-index.js */ "./node_modules/core-js/modules/esnext.array.find-last-index.js");
/* harmony import */ var core_js_modules_esnext_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_214___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_214__);
/* harmony import */ var core_js_modules_esnext_array_is_template_object_js__WEBPACK_IMPORTED_MODULE_215__ = __webpack_require__(/*! core-js/modules/esnext.array.is-template-object.js */ "./node_modules/core-js/modules/esnext.array.is-template-object.js");
/* harmony import */ var core_js_modules_esnext_array_is_template_object_js__WEBPACK_IMPORTED_MODULE_215___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_array_is_template_object_js__WEBPACK_IMPORTED_MODULE_215__);
/* harmony import */ var core_js_modules_esnext_array_last_index_js__WEBPACK_IMPORTED_MODULE_216__ = __webpack_require__(/*! core-js/modules/esnext.array.last-index.js */ "./node_modules/core-js/modules/esnext.array.last-index.js");
/* harmony import */ var core_js_modules_esnext_array_last_index_js__WEBPACK_IMPORTED_MODULE_216___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_array_last_index_js__WEBPACK_IMPORTED_MODULE_216__);
/* harmony import */ var core_js_modules_esnext_array_last_item_js__WEBPACK_IMPORTED_MODULE_217__ = __webpack_require__(/*! core-js/modules/esnext.array.last-item.js */ "./node_modules/core-js/modules/esnext.array.last-item.js");
/* harmony import */ var core_js_modules_esnext_array_last_item_js__WEBPACK_IMPORTED_MODULE_217___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_array_last_item_js__WEBPACK_IMPORTED_MODULE_217__);
/* harmony import */ var core_js_modules_esnext_array_unique_by_js__WEBPACK_IMPORTED_MODULE_218__ = __webpack_require__(/*! core-js/modules/esnext.array.unique-by.js */ "./node_modules/core-js/modules/esnext.array.unique-by.js");
/* harmony import */ var core_js_modules_esnext_array_unique_by_js__WEBPACK_IMPORTED_MODULE_218___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_array_unique_by_js__WEBPACK_IMPORTED_MODULE_218__);
/* harmony import */ var core_js_modules_esnext_async_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_219__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.constructor.js */ "./node_modules/core-js/modules/esnext.async-iterator.constructor.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_219___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_219__);
/* harmony import */ var core_js_modules_esnext_async_iterator_as_indexed_pairs_js__WEBPACK_IMPORTED_MODULE_220__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.as-indexed-pairs.js */ "./node_modules/core-js/modules/esnext.async-iterator.as-indexed-pairs.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_as_indexed_pairs_js__WEBPACK_IMPORTED_MODULE_220___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_as_indexed_pairs_js__WEBPACK_IMPORTED_MODULE_220__);
/* harmony import */ var core_js_modules_esnext_async_iterator_drop_js__WEBPACK_IMPORTED_MODULE_221__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.drop.js */ "./node_modules/core-js/modules/esnext.async-iterator.drop.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_drop_js__WEBPACK_IMPORTED_MODULE_221___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_drop_js__WEBPACK_IMPORTED_MODULE_221__);
/* harmony import */ var core_js_modules_esnext_async_iterator_every_js__WEBPACK_IMPORTED_MODULE_222__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.every.js */ "./node_modules/core-js/modules/esnext.async-iterator.every.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_every_js__WEBPACK_IMPORTED_MODULE_222___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_every_js__WEBPACK_IMPORTED_MODULE_222__);
/* harmony import */ var core_js_modules_esnext_async_iterator_filter_js__WEBPACK_IMPORTED_MODULE_223__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.filter.js */ "./node_modules/core-js/modules/esnext.async-iterator.filter.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_filter_js__WEBPACK_IMPORTED_MODULE_223___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_filter_js__WEBPACK_IMPORTED_MODULE_223__);
/* harmony import */ var core_js_modules_esnext_async_iterator_find_js__WEBPACK_IMPORTED_MODULE_224__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.find.js */ "./node_modules/core-js/modules/esnext.async-iterator.find.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_find_js__WEBPACK_IMPORTED_MODULE_224___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_find_js__WEBPACK_IMPORTED_MODULE_224__);
/* harmony import */ var core_js_modules_esnext_async_iterator_flat_map_js__WEBPACK_IMPORTED_MODULE_225__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.flat-map.js */ "./node_modules/core-js/modules/esnext.async-iterator.flat-map.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_flat_map_js__WEBPACK_IMPORTED_MODULE_225___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_flat_map_js__WEBPACK_IMPORTED_MODULE_225__);
/* harmony import */ var core_js_modules_esnext_async_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_226__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.for-each.js */ "./node_modules/core-js/modules/esnext.async-iterator.for-each.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_226___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_226__);
/* harmony import */ var core_js_modules_esnext_async_iterator_from_js__WEBPACK_IMPORTED_MODULE_227__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.from.js */ "./node_modules/core-js/modules/esnext.async-iterator.from.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_from_js__WEBPACK_IMPORTED_MODULE_227___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_from_js__WEBPACK_IMPORTED_MODULE_227__);
/* harmony import */ var core_js_modules_esnext_async_iterator_map_js__WEBPACK_IMPORTED_MODULE_228__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.map.js */ "./node_modules/core-js/modules/esnext.async-iterator.map.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_map_js__WEBPACK_IMPORTED_MODULE_228___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_map_js__WEBPACK_IMPORTED_MODULE_228__);
/* harmony import */ var core_js_modules_esnext_async_iterator_reduce_js__WEBPACK_IMPORTED_MODULE_229__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.reduce.js */ "./node_modules/core-js/modules/esnext.async-iterator.reduce.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_reduce_js__WEBPACK_IMPORTED_MODULE_229___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_reduce_js__WEBPACK_IMPORTED_MODULE_229__);
/* harmony import */ var core_js_modules_esnext_async_iterator_some_js__WEBPACK_IMPORTED_MODULE_230__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.some.js */ "./node_modules/core-js/modules/esnext.async-iterator.some.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_some_js__WEBPACK_IMPORTED_MODULE_230___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_some_js__WEBPACK_IMPORTED_MODULE_230__);
/* harmony import */ var core_js_modules_esnext_async_iterator_take_js__WEBPACK_IMPORTED_MODULE_231__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.take.js */ "./node_modules/core-js/modules/esnext.async-iterator.take.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_take_js__WEBPACK_IMPORTED_MODULE_231___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_take_js__WEBPACK_IMPORTED_MODULE_231__);
/* harmony import */ var core_js_modules_esnext_async_iterator_to_array_js__WEBPACK_IMPORTED_MODULE_232__ = __webpack_require__(/*! core-js/modules/esnext.async-iterator.to-array.js */ "./node_modules/core-js/modules/esnext.async-iterator.to-array.js");
/* harmony import */ var core_js_modules_esnext_async_iterator_to_array_js__WEBPACK_IMPORTED_MODULE_232___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_async_iterator_to_array_js__WEBPACK_IMPORTED_MODULE_232__);
/* harmony import */ var core_js_modules_esnext_bigint_range_js__WEBPACK_IMPORTED_MODULE_233__ = __webpack_require__(/*! core-js/modules/esnext.bigint.range.js */ "./node_modules/core-js/modules/esnext.bigint.range.js");
/* harmony import */ var core_js_modules_esnext_bigint_range_js__WEBPACK_IMPORTED_MODULE_233___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_bigint_range_js__WEBPACK_IMPORTED_MODULE_233__);
/* harmony import */ var core_js_modules_esnext_composite_key_js__WEBPACK_IMPORTED_MODULE_234__ = __webpack_require__(/*! core-js/modules/esnext.composite-key.js */ "./node_modules/core-js/modules/esnext.composite-key.js");
/* harmony import */ var core_js_modules_esnext_composite_key_js__WEBPACK_IMPORTED_MODULE_234___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_composite_key_js__WEBPACK_IMPORTED_MODULE_234__);
/* harmony import */ var core_js_modules_esnext_composite_symbol_js__WEBPACK_IMPORTED_MODULE_235__ = __webpack_require__(/*! core-js/modules/esnext.composite-symbol.js */ "./node_modules/core-js/modules/esnext.composite-symbol.js");
/* harmony import */ var core_js_modules_esnext_composite_symbol_js__WEBPACK_IMPORTED_MODULE_235___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_composite_symbol_js__WEBPACK_IMPORTED_MODULE_235__);
/* harmony import */ var core_js_modules_esnext_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_236__ = __webpack_require__(/*! core-js/modules/esnext.iterator.constructor.js */ "./node_modules/core-js/modules/esnext.iterator.constructor.js");
/* harmony import */ var core_js_modules_esnext_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_236___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_236__);
/* harmony import */ var core_js_modules_esnext_iterator_as_indexed_pairs_js__WEBPACK_IMPORTED_MODULE_237__ = __webpack_require__(/*! core-js/modules/esnext.iterator.as-indexed-pairs.js */ "./node_modules/core-js/modules/esnext.iterator.as-indexed-pairs.js");
/* harmony import */ var core_js_modules_esnext_iterator_as_indexed_pairs_js__WEBPACK_IMPORTED_MODULE_237___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_as_indexed_pairs_js__WEBPACK_IMPORTED_MODULE_237__);
/* harmony import */ var core_js_modules_esnext_iterator_drop_js__WEBPACK_IMPORTED_MODULE_238__ = __webpack_require__(/*! core-js/modules/esnext.iterator.drop.js */ "./node_modules/core-js/modules/esnext.iterator.drop.js");
/* harmony import */ var core_js_modules_esnext_iterator_drop_js__WEBPACK_IMPORTED_MODULE_238___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_drop_js__WEBPACK_IMPORTED_MODULE_238__);
/* harmony import */ var core_js_modules_esnext_iterator_every_js__WEBPACK_IMPORTED_MODULE_239__ = __webpack_require__(/*! core-js/modules/esnext.iterator.every.js */ "./node_modules/core-js/modules/esnext.iterator.every.js");
/* harmony import */ var core_js_modules_esnext_iterator_every_js__WEBPACK_IMPORTED_MODULE_239___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_every_js__WEBPACK_IMPORTED_MODULE_239__);
/* harmony import */ var core_js_modules_esnext_iterator_filter_js__WEBPACK_IMPORTED_MODULE_240__ = __webpack_require__(/*! core-js/modules/esnext.iterator.filter.js */ "./node_modules/core-js/modules/esnext.iterator.filter.js");
/* harmony import */ var core_js_modules_esnext_iterator_filter_js__WEBPACK_IMPORTED_MODULE_240___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_filter_js__WEBPACK_IMPORTED_MODULE_240__);
/* harmony import */ var core_js_modules_esnext_iterator_find_js__WEBPACK_IMPORTED_MODULE_241__ = __webpack_require__(/*! core-js/modules/esnext.iterator.find.js */ "./node_modules/core-js/modules/esnext.iterator.find.js");
/* harmony import */ var core_js_modules_esnext_iterator_find_js__WEBPACK_IMPORTED_MODULE_241___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_find_js__WEBPACK_IMPORTED_MODULE_241__);
/* harmony import */ var core_js_modules_esnext_iterator_flat_map_js__WEBPACK_IMPORTED_MODULE_242__ = __webpack_require__(/*! core-js/modules/esnext.iterator.flat-map.js */ "./node_modules/core-js/modules/esnext.iterator.flat-map.js");
/* harmony import */ var core_js_modules_esnext_iterator_flat_map_js__WEBPACK_IMPORTED_MODULE_242___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_flat_map_js__WEBPACK_IMPORTED_MODULE_242__);
/* harmony import */ var core_js_modules_esnext_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_243__ = __webpack_require__(/*! core-js/modules/esnext.iterator.for-each.js */ "./node_modules/core-js/modules/esnext.iterator.for-each.js");
/* harmony import */ var core_js_modules_esnext_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_243___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_243__);
/* harmony import */ var core_js_modules_esnext_iterator_from_js__WEBPACK_IMPORTED_MODULE_244__ = __webpack_require__(/*! core-js/modules/esnext.iterator.from.js */ "./node_modules/core-js/modules/esnext.iterator.from.js");
/* harmony import */ var core_js_modules_esnext_iterator_from_js__WEBPACK_IMPORTED_MODULE_244___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_from_js__WEBPACK_IMPORTED_MODULE_244__);
/* harmony import */ var core_js_modules_esnext_iterator_map_js__WEBPACK_IMPORTED_MODULE_245__ = __webpack_require__(/*! core-js/modules/esnext.iterator.map.js */ "./node_modules/core-js/modules/esnext.iterator.map.js");
/* harmony import */ var core_js_modules_esnext_iterator_map_js__WEBPACK_IMPORTED_MODULE_245___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_map_js__WEBPACK_IMPORTED_MODULE_245__);
/* harmony import */ var core_js_modules_esnext_iterator_reduce_js__WEBPACK_IMPORTED_MODULE_246__ = __webpack_require__(/*! core-js/modules/esnext.iterator.reduce.js */ "./node_modules/core-js/modules/esnext.iterator.reduce.js");
/* harmony import */ var core_js_modules_esnext_iterator_reduce_js__WEBPACK_IMPORTED_MODULE_246___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_reduce_js__WEBPACK_IMPORTED_MODULE_246__);
/* harmony import */ var core_js_modules_esnext_iterator_some_js__WEBPACK_IMPORTED_MODULE_247__ = __webpack_require__(/*! core-js/modules/esnext.iterator.some.js */ "./node_modules/core-js/modules/esnext.iterator.some.js");
/* harmony import */ var core_js_modules_esnext_iterator_some_js__WEBPACK_IMPORTED_MODULE_247___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_some_js__WEBPACK_IMPORTED_MODULE_247__);
/* harmony import */ var core_js_modules_esnext_iterator_take_js__WEBPACK_IMPORTED_MODULE_248__ = __webpack_require__(/*! core-js/modules/esnext.iterator.take.js */ "./node_modules/core-js/modules/esnext.iterator.take.js");
/* harmony import */ var core_js_modules_esnext_iterator_take_js__WEBPACK_IMPORTED_MODULE_248___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_take_js__WEBPACK_IMPORTED_MODULE_248__);
/* harmony import */ var core_js_modules_esnext_iterator_to_array_js__WEBPACK_IMPORTED_MODULE_249__ = __webpack_require__(/*! core-js/modules/esnext.iterator.to-array.js */ "./node_modules/core-js/modules/esnext.iterator.to-array.js");
/* harmony import */ var core_js_modules_esnext_iterator_to_array_js__WEBPACK_IMPORTED_MODULE_249___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_iterator_to_array_js__WEBPACK_IMPORTED_MODULE_249__);
/* harmony import */ var core_js_modules_esnext_map_delete_all_js__WEBPACK_IMPORTED_MODULE_250__ = __webpack_require__(/*! core-js/modules/esnext.map.delete-all.js */ "./node_modules/core-js/modules/esnext.map.delete-all.js");
/* harmony import */ var core_js_modules_esnext_map_delete_all_js__WEBPACK_IMPORTED_MODULE_250___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_delete_all_js__WEBPACK_IMPORTED_MODULE_250__);
/* harmony import */ var core_js_modules_esnext_map_emplace_js__WEBPACK_IMPORTED_MODULE_251__ = __webpack_require__(/*! core-js/modules/esnext.map.emplace.js */ "./node_modules/core-js/modules/esnext.map.emplace.js");
/* harmony import */ var core_js_modules_esnext_map_emplace_js__WEBPACK_IMPORTED_MODULE_251___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_emplace_js__WEBPACK_IMPORTED_MODULE_251__);
/* harmony import */ var core_js_modules_esnext_map_every_js__WEBPACK_IMPORTED_MODULE_252__ = __webpack_require__(/*! core-js/modules/esnext.map.every.js */ "./node_modules/core-js/modules/esnext.map.every.js");
/* harmony import */ var core_js_modules_esnext_map_every_js__WEBPACK_IMPORTED_MODULE_252___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_every_js__WEBPACK_IMPORTED_MODULE_252__);
/* harmony import */ var core_js_modules_esnext_map_filter_js__WEBPACK_IMPORTED_MODULE_253__ = __webpack_require__(/*! core-js/modules/esnext.map.filter.js */ "./node_modules/core-js/modules/esnext.map.filter.js");
/* harmony import */ var core_js_modules_esnext_map_filter_js__WEBPACK_IMPORTED_MODULE_253___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_filter_js__WEBPACK_IMPORTED_MODULE_253__);
/* harmony import */ var core_js_modules_esnext_map_find_js__WEBPACK_IMPORTED_MODULE_254__ = __webpack_require__(/*! core-js/modules/esnext.map.find.js */ "./node_modules/core-js/modules/esnext.map.find.js");
/* harmony import */ var core_js_modules_esnext_map_find_js__WEBPACK_IMPORTED_MODULE_254___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_find_js__WEBPACK_IMPORTED_MODULE_254__);
/* harmony import */ var core_js_modules_esnext_map_find_key_js__WEBPACK_IMPORTED_MODULE_255__ = __webpack_require__(/*! core-js/modules/esnext.map.find-key.js */ "./node_modules/core-js/modules/esnext.map.find-key.js");
/* harmony import */ var core_js_modules_esnext_map_find_key_js__WEBPACK_IMPORTED_MODULE_255___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_find_key_js__WEBPACK_IMPORTED_MODULE_255__);
/* harmony import */ var core_js_modules_esnext_map_from_js__WEBPACK_IMPORTED_MODULE_256__ = __webpack_require__(/*! core-js/modules/esnext.map.from.js */ "./node_modules/core-js/modules/esnext.map.from.js");
/* harmony import */ var core_js_modules_esnext_map_from_js__WEBPACK_IMPORTED_MODULE_256___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_from_js__WEBPACK_IMPORTED_MODULE_256__);
/* harmony import */ var core_js_modules_esnext_map_group_by_js__WEBPACK_IMPORTED_MODULE_257__ = __webpack_require__(/*! core-js/modules/esnext.map.group-by.js */ "./node_modules/core-js/modules/esnext.map.group-by.js");
/* harmony import */ var core_js_modules_esnext_map_group_by_js__WEBPACK_IMPORTED_MODULE_257___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_group_by_js__WEBPACK_IMPORTED_MODULE_257__);
/* harmony import */ var core_js_modules_esnext_map_includes_js__WEBPACK_IMPORTED_MODULE_258__ = __webpack_require__(/*! core-js/modules/esnext.map.includes.js */ "./node_modules/core-js/modules/esnext.map.includes.js");
/* harmony import */ var core_js_modules_esnext_map_includes_js__WEBPACK_IMPORTED_MODULE_258___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_includes_js__WEBPACK_IMPORTED_MODULE_258__);
/* harmony import */ var core_js_modules_esnext_map_key_by_js__WEBPACK_IMPORTED_MODULE_259__ = __webpack_require__(/*! core-js/modules/esnext.map.key-by.js */ "./node_modules/core-js/modules/esnext.map.key-by.js");
/* harmony import */ var core_js_modules_esnext_map_key_by_js__WEBPACK_IMPORTED_MODULE_259___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_key_by_js__WEBPACK_IMPORTED_MODULE_259__);
/* harmony import */ var core_js_modules_esnext_map_key_of_js__WEBPACK_IMPORTED_MODULE_260__ = __webpack_require__(/*! core-js/modules/esnext.map.key-of.js */ "./node_modules/core-js/modules/esnext.map.key-of.js");
/* harmony import */ var core_js_modules_esnext_map_key_of_js__WEBPACK_IMPORTED_MODULE_260___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_key_of_js__WEBPACK_IMPORTED_MODULE_260__);
/* harmony import */ var core_js_modules_esnext_map_map_keys_js__WEBPACK_IMPORTED_MODULE_261__ = __webpack_require__(/*! core-js/modules/esnext.map.map-keys.js */ "./node_modules/core-js/modules/esnext.map.map-keys.js");
/* harmony import */ var core_js_modules_esnext_map_map_keys_js__WEBPACK_IMPORTED_MODULE_261___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_map_keys_js__WEBPACK_IMPORTED_MODULE_261__);
/* harmony import */ var core_js_modules_esnext_map_map_values_js__WEBPACK_IMPORTED_MODULE_262__ = __webpack_require__(/*! core-js/modules/esnext.map.map-values.js */ "./node_modules/core-js/modules/esnext.map.map-values.js");
/* harmony import */ var core_js_modules_esnext_map_map_values_js__WEBPACK_IMPORTED_MODULE_262___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_map_values_js__WEBPACK_IMPORTED_MODULE_262__);
/* harmony import */ var core_js_modules_esnext_map_merge_js__WEBPACK_IMPORTED_MODULE_263__ = __webpack_require__(/*! core-js/modules/esnext.map.merge.js */ "./node_modules/core-js/modules/esnext.map.merge.js");
/* harmony import */ var core_js_modules_esnext_map_merge_js__WEBPACK_IMPORTED_MODULE_263___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_merge_js__WEBPACK_IMPORTED_MODULE_263__);
/* harmony import */ var core_js_modules_esnext_map_of_js__WEBPACK_IMPORTED_MODULE_264__ = __webpack_require__(/*! core-js/modules/esnext.map.of.js */ "./node_modules/core-js/modules/esnext.map.of.js");
/* harmony import */ var core_js_modules_esnext_map_of_js__WEBPACK_IMPORTED_MODULE_264___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_of_js__WEBPACK_IMPORTED_MODULE_264__);
/* harmony import */ var core_js_modules_esnext_map_reduce_js__WEBPACK_IMPORTED_MODULE_265__ = __webpack_require__(/*! core-js/modules/esnext.map.reduce.js */ "./node_modules/core-js/modules/esnext.map.reduce.js");
/* harmony import */ var core_js_modules_esnext_map_reduce_js__WEBPACK_IMPORTED_MODULE_265___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_reduce_js__WEBPACK_IMPORTED_MODULE_265__);
/* harmony import */ var core_js_modules_esnext_map_some_js__WEBPACK_IMPORTED_MODULE_266__ = __webpack_require__(/*! core-js/modules/esnext.map.some.js */ "./node_modules/core-js/modules/esnext.map.some.js");
/* harmony import */ var core_js_modules_esnext_map_some_js__WEBPACK_IMPORTED_MODULE_266___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_some_js__WEBPACK_IMPORTED_MODULE_266__);
/* harmony import */ var core_js_modules_esnext_map_update_js__WEBPACK_IMPORTED_MODULE_267__ = __webpack_require__(/*! core-js/modules/esnext.map.update.js */ "./node_modules/core-js/modules/esnext.map.update.js");
/* harmony import */ var core_js_modules_esnext_map_update_js__WEBPACK_IMPORTED_MODULE_267___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_update_js__WEBPACK_IMPORTED_MODULE_267__);
/* harmony import */ var core_js_modules_esnext_map_update_or_insert_js__WEBPACK_IMPORTED_MODULE_268__ = __webpack_require__(/*! core-js/modules/esnext.map.update-or-insert.js */ "./node_modules/core-js/modules/esnext.map.update-or-insert.js");
/* harmony import */ var core_js_modules_esnext_map_update_or_insert_js__WEBPACK_IMPORTED_MODULE_268___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_update_or_insert_js__WEBPACK_IMPORTED_MODULE_268__);
/* harmony import */ var core_js_modules_esnext_map_upsert_js__WEBPACK_IMPORTED_MODULE_269__ = __webpack_require__(/*! core-js/modules/esnext.map.upsert.js */ "./node_modules/core-js/modules/esnext.map.upsert.js");
/* harmony import */ var core_js_modules_esnext_map_upsert_js__WEBPACK_IMPORTED_MODULE_269___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_upsert_js__WEBPACK_IMPORTED_MODULE_269__);
/* harmony import */ var core_js_modules_esnext_math_clamp_js__WEBPACK_IMPORTED_MODULE_270__ = __webpack_require__(/*! core-js/modules/esnext.math.clamp.js */ "./node_modules/core-js/modules/esnext.math.clamp.js");
/* harmony import */ var core_js_modules_esnext_math_clamp_js__WEBPACK_IMPORTED_MODULE_270___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_clamp_js__WEBPACK_IMPORTED_MODULE_270__);
/* harmony import */ var core_js_modules_esnext_math_deg_per_rad_js__WEBPACK_IMPORTED_MODULE_271__ = __webpack_require__(/*! core-js/modules/esnext.math.deg-per-rad.js */ "./node_modules/core-js/modules/esnext.math.deg-per-rad.js");
/* harmony import */ var core_js_modules_esnext_math_deg_per_rad_js__WEBPACK_IMPORTED_MODULE_271___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_deg_per_rad_js__WEBPACK_IMPORTED_MODULE_271__);
/* harmony import */ var core_js_modules_esnext_math_degrees_js__WEBPACK_IMPORTED_MODULE_272__ = __webpack_require__(/*! core-js/modules/esnext.math.degrees.js */ "./node_modules/core-js/modules/esnext.math.degrees.js");
/* harmony import */ var core_js_modules_esnext_math_degrees_js__WEBPACK_IMPORTED_MODULE_272___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_degrees_js__WEBPACK_IMPORTED_MODULE_272__);
/* harmony import */ var core_js_modules_esnext_math_fscale_js__WEBPACK_IMPORTED_MODULE_273__ = __webpack_require__(/*! core-js/modules/esnext.math.fscale.js */ "./node_modules/core-js/modules/esnext.math.fscale.js");
/* harmony import */ var core_js_modules_esnext_math_fscale_js__WEBPACK_IMPORTED_MODULE_273___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_fscale_js__WEBPACK_IMPORTED_MODULE_273__);
/* harmony import */ var core_js_modules_esnext_math_iaddh_js__WEBPACK_IMPORTED_MODULE_274__ = __webpack_require__(/*! core-js/modules/esnext.math.iaddh.js */ "./node_modules/core-js/modules/esnext.math.iaddh.js");
/* harmony import */ var core_js_modules_esnext_math_iaddh_js__WEBPACK_IMPORTED_MODULE_274___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_iaddh_js__WEBPACK_IMPORTED_MODULE_274__);
/* harmony import */ var core_js_modules_esnext_math_imulh_js__WEBPACK_IMPORTED_MODULE_275__ = __webpack_require__(/*! core-js/modules/esnext.math.imulh.js */ "./node_modules/core-js/modules/esnext.math.imulh.js");
/* harmony import */ var core_js_modules_esnext_math_imulh_js__WEBPACK_IMPORTED_MODULE_275___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_imulh_js__WEBPACK_IMPORTED_MODULE_275__);
/* harmony import */ var core_js_modules_esnext_math_isubh_js__WEBPACK_IMPORTED_MODULE_276__ = __webpack_require__(/*! core-js/modules/esnext.math.isubh.js */ "./node_modules/core-js/modules/esnext.math.isubh.js");
/* harmony import */ var core_js_modules_esnext_math_isubh_js__WEBPACK_IMPORTED_MODULE_276___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_isubh_js__WEBPACK_IMPORTED_MODULE_276__);
/* harmony import */ var core_js_modules_esnext_math_rad_per_deg_js__WEBPACK_IMPORTED_MODULE_277__ = __webpack_require__(/*! core-js/modules/esnext.math.rad-per-deg.js */ "./node_modules/core-js/modules/esnext.math.rad-per-deg.js");
/* harmony import */ var core_js_modules_esnext_math_rad_per_deg_js__WEBPACK_IMPORTED_MODULE_277___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_rad_per_deg_js__WEBPACK_IMPORTED_MODULE_277__);
/* harmony import */ var core_js_modules_esnext_math_radians_js__WEBPACK_IMPORTED_MODULE_278__ = __webpack_require__(/*! core-js/modules/esnext.math.radians.js */ "./node_modules/core-js/modules/esnext.math.radians.js");
/* harmony import */ var core_js_modules_esnext_math_radians_js__WEBPACK_IMPORTED_MODULE_278___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_radians_js__WEBPACK_IMPORTED_MODULE_278__);
/* harmony import */ var core_js_modules_esnext_math_scale_js__WEBPACK_IMPORTED_MODULE_279__ = __webpack_require__(/*! core-js/modules/esnext.math.scale.js */ "./node_modules/core-js/modules/esnext.math.scale.js");
/* harmony import */ var core_js_modules_esnext_math_scale_js__WEBPACK_IMPORTED_MODULE_279___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_scale_js__WEBPACK_IMPORTED_MODULE_279__);
/* harmony import */ var core_js_modules_esnext_math_seeded_prng_js__WEBPACK_IMPORTED_MODULE_280__ = __webpack_require__(/*! core-js/modules/esnext.math.seeded-prng.js */ "./node_modules/core-js/modules/esnext.math.seeded-prng.js");
/* harmony import */ var core_js_modules_esnext_math_seeded_prng_js__WEBPACK_IMPORTED_MODULE_280___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_seeded_prng_js__WEBPACK_IMPORTED_MODULE_280__);
/* harmony import */ var core_js_modules_esnext_math_signbit_js__WEBPACK_IMPORTED_MODULE_281__ = __webpack_require__(/*! core-js/modules/esnext.math.signbit.js */ "./node_modules/core-js/modules/esnext.math.signbit.js");
/* harmony import */ var core_js_modules_esnext_math_signbit_js__WEBPACK_IMPORTED_MODULE_281___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_signbit_js__WEBPACK_IMPORTED_MODULE_281__);
/* harmony import */ var core_js_modules_esnext_math_umulh_js__WEBPACK_IMPORTED_MODULE_282__ = __webpack_require__(/*! core-js/modules/esnext.math.umulh.js */ "./node_modules/core-js/modules/esnext.math.umulh.js");
/* harmony import */ var core_js_modules_esnext_math_umulh_js__WEBPACK_IMPORTED_MODULE_282___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_umulh_js__WEBPACK_IMPORTED_MODULE_282__);
/* harmony import */ var core_js_modules_esnext_number_from_string_js__WEBPACK_IMPORTED_MODULE_283__ = __webpack_require__(/*! core-js/modules/esnext.number.from-string.js */ "./node_modules/core-js/modules/esnext.number.from-string.js");
/* harmony import */ var core_js_modules_esnext_number_from_string_js__WEBPACK_IMPORTED_MODULE_283___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_number_from_string_js__WEBPACK_IMPORTED_MODULE_283__);
/* harmony import */ var core_js_modules_esnext_number_range_js__WEBPACK_IMPORTED_MODULE_284__ = __webpack_require__(/*! core-js/modules/esnext.number.range.js */ "./node_modules/core-js/modules/esnext.number.range.js");
/* harmony import */ var core_js_modules_esnext_number_range_js__WEBPACK_IMPORTED_MODULE_284___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_number_range_js__WEBPACK_IMPORTED_MODULE_284__);
/* harmony import */ var core_js_modules_esnext_object_iterate_entries_js__WEBPACK_IMPORTED_MODULE_285__ = __webpack_require__(/*! core-js/modules/esnext.object.iterate-entries.js */ "./node_modules/core-js/modules/esnext.object.iterate-entries.js");
/* harmony import */ var core_js_modules_esnext_object_iterate_entries_js__WEBPACK_IMPORTED_MODULE_285___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_object_iterate_entries_js__WEBPACK_IMPORTED_MODULE_285__);
/* harmony import */ var core_js_modules_esnext_object_iterate_keys_js__WEBPACK_IMPORTED_MODULE_286__ = __webpack_require__(/*! core-js/modules/esnext.object.iterate-keys.js */ "./node_modules/core-js/modules/esnext.object.iterate-keys.js");
/* harmony import */ var core_js_modules_esnext_object_iterate_keys_js__WEBPACK_IMPORTED_MODULE_286___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_object_iterate_keys_js__WEBPACK_IMPORTED_MODULE_286__);
/* harmony import */ var core_js_modules_esnext_object_iterate_values_js__WEBPACK_IMPORTED_MODULE_287__ = __webpack_require__(/*! core-js/modules/esnext.object.iterate-values.js */ "./node_modules/core-js/modules/esnext.object.iterate-values.js");
/* harmony import */ var core_js_modules_esnext_object_iterate_values_js__WEBPACK_IMPORTED_MODULE_287___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_object_iterate_values_js__WEBPACK_IMPORTED_MODULE_287__);
/* harmony import */ var core_js_modules_esnext_observable_js__WEBPACK_IMPORTED_MODULE_288__ = __webpack_require__(/*! core-js/modules/esnext.observable.js */ "./node_modules/core-js/modules/esnext.observable.js");
/* harmony import */ var core_js_modules_esnext_observable_js__WEBPACK_IMPORTED_MODULE_288___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_observable_js__WEBPACK_IMPORTED_MODULE_288__);
/* harmony import */ var core_js_modules_esnext_promise_try_js__WEBPACK_IMPORTED_MODULE_289__ = __webpack_require__(/*! core-js/modules/esnext.promise.try.js */ "./node_modules/core-js/modules/esnext.promise.try.js");
/* harmony import */ var core_js_modules_esnext_promise_try_js__WEBPACK_IMPORTED_MODULE_289___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_promise_try_js__WEBPACK_IMPORTED_MODULE_289__);
/* harmony import */ var core_js_modules_esnext_reflect_define_metadata_js__WEBPACK_IMPORTED_MODULE_290__ = __webpack_require__(/*! core-js/modules/esnext.reflect.define-metadata.js */ "./node_modules/core-js/modules/esnext.reflect.define-metadata.js");
/* harmony import */ var core_js_modules_esnext_reflect_define_metadata_js__WEBPACK_IMPORTED_MODULE_290___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_define_metadata_js__WEBPACK_IMPORTED_MODULE_290__);
/* harmony import */ var core_js_modules_esnext_reflect_delete_metadata_js__WEBPACK_IMPORTED_MODULE_291__ = __webpack_require__(/*! core-js/modules/esnext.reflect.delete-metadata.js */ "./node_modules/core-js/modules/esnext.reflect.delete-metadata.js");
/* harmony import */ var core_js_modules_esnext_reflect_delete_metadata_js__WEBPACK_IMPORTED_MODULE_291___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_delete_metadata_js__WEBPACK_IMPORTED_MODULE_291__);
/* harmony import */ var core_js_modules_esnext_reflect_get_metadata_js__WEBPACK_IMPORTED_MODULE_292__ = __webpack_require__(/*! core-js/modules/esnext.reflect.get-metadata.js */ "./node_modules/core-js/modules/esnext.reflect.get-metadata.js");
/* harmony import */ var core_js_modules_esnext_reflect_get_metadata_js__WEBPACK_IMPORTED_MODULE_292___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_get_metadata_js__WEBPACK_IMPORTED_MODULE_292__);
/* harmony import */ var core_js_modules_esnext_reflect_get_metadata_keys_js__WEBPACK_IMPORTED_MODULE_293__ = __webpack_require__(/*! core-js/modules/esnext.reflect.get-metadata-keys.js */ "./node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js");
/* harmony import */ var core_js_modules_esnext_reflect_get_metadata_keys_js__WEBPACK_IMPORTED_MODULE_293___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_get_metadata_keys_js__WEBPACK_IMPORTED_MODULE_293__);
/* harmony import */ var core_js_modules_esnext_reflect_get_own_metadata_js__WEBPACK_IMPORTED_MODULE_294__ = __webpack_require__(/*! core-js/modules/esnext.reflect.get-own-metadata.js */ "./node_modules/core-js/modules/esnext.reflect.get-own-metadata.js");
/* harmony import */ var core_js_modules_esnext_reflect_get_own_metadata_js__WEBPACK_IMPORTED_MODULE_294___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_get_own_metadata_js__WEBPACK_IMPORTED_MODULE_294__);
/* harmony import */ var core_js_modules_esnext_reflect_get_own_metadata_keys_js__WEBPACK_IMPORTED_MODULE_295__ = __webpack_require__(/*! core-js/modules/esnext.reflect.get-own-metadata-keys.js */ "./node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js");
/* harmony import */ var core_js_modules_esnext_reflect_get_own_metadata_keys_js__WEBPACK_IMPORTED_MODULE_295___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_get_own_metadata_keys_js__WEBPACK_IMPORTED_MODULE_295__);
/* harmony import */ var core_js_modules_esnext_reflect_has_metadata_js__WEBPACK_IMPORTED_MODULE_296__ = __webpack_require__(/*! core-js/modules/esnext.reflect.has-metadata.js */ "./node_modules/core-js/modules/esnext.reflect.has-metadata.js");
/* harmony import */ var core_js_modules_esnext_reflect_has_metadata_js__WEBPACK_IMPORTED_MODULE_296___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_has_metadata_js__WEBPACK_IMPORTED_MODULE_296__);
/* harmony import */ var core_js_modules_esnext_reflect_has_own_metadata_js__WEBPACK_IMPORTED_MODULE_297__ = __webpack_require__(/*! core-js/modules/esnext.reflect.has-own-metadata.js */ "./node_modules/core-js/modules/esnext.reflect.has-own-metadata.js");
/* harmony import */ var core_js_modules_esnext_reflect_has_own_metadata_js__WEBPACK_IMPORTED_MODULE_297___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_has_own_metadata_js__WEBPACK_IMPORTED_MODULE_297__);
/* harmony import */ var core_js_modules_esnext_reflect_metadata_js__WEBPACK_IMPORTED_MODULE_298__ = __webpack_require__(/*! core-js/modules/esnext.reflect.metadata.js */ "./node_modules/core-js/modules/esnext.reflect.metadata.js");
/* harmony import */ var core_js_modules_esnext_reflect_metadata_js__WEBPACK_IMPORTED_MODULE_298___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_metadata_js__WEBPACK_IMPORTED_MODULE_298__);
/* harmony import */ var core_js_modules_esnext_set_add_all_js__WEBPACK_IMPORTED_MODULE_299__ = __webpack_require__(/*! core-js/modules/esnext.set.add-all.js */ "./node_modules/core-js/modules/esnext.set.add-all.js");
/* harmony import */ var core_js_modules_esnext_set_add_all_js__WEBPACK_IMPORTED_MODULE_299___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_add_all_js__WEBPACK_IMPORTED_MODULE_299__);
/* harmony import */ var core_js_modules_esnext_set_delete_all_js__WEBPACK_IMPORTED_MODULE_300__ = __webpack_require__(/*! core-js/modules/esnext.set.delete-all.js */ "./node_modules/core-js/modules/esnext.set.delete-all.js");
/* harmony import */ var core_js_modules_esnext_set_delete_all_js__WEBPACK_IMPORTED_MODULE_300___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_delete_all_js__WEBPACK_IMPORTED_MODULE_300__);
/* harmony import */ var core_js_modules_esnext_set_difference_js__WEBPACK_IMPORTED_MODULE_301__ = __webpack_require__(/*! core-js/modules/esnext.set.difference.js */ "./node_modules/core-js/modules/esnext.set.difference.js");
/* harmony import */ var core_js_modules_esnext_set_difference_js__WEBPACK_IMPORTED_MODULE_301___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_difference_js__WEBPACK_IMPORTED_MODULE_301__);
/* harmony import */ var core_js_modules_esnext_set_every_js__WEBPACK_IMPORTED_MODULE_302__ = __webpack_require__(/*! core-js/modules/esnext.set.every.js */ "./node_modules/core-js/modules/esnext.set.every.js");
/* harmony import */ var core_js_modules_esnext_set_every_js__WEBPACK_IMPORTED_MODULE_302___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_every_js__WEBPACK_IMPORTED_MODULE_302__);
/* harmony import */ var core_js_modules_esnext_set_filter_js__WEBPACK_IMPORTED_MODULE_303__ = __webpack_require__(/*! core-js/modules/esnext.set.filter.js */ "./node_modules/core-js/modules/esnext.set.filter.js");
/* harmony import */ var core_js_modules_esnext_set_filter_js__WEBPACK_IMPORTED_MODULE_303___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_filter_js__WEBPACK_IMPORTED_MODULE_303__);
/* harmony import */ var core_js_modules_esnext_set_find_js__WEBPACK_IMPORTED_MODULE_304__ = __webpack_require__(/*! core-js/modules/esnext.set.find.js */ "./node_modules/core-js/modules/esnext.set.find.js");
/* harmony import */ var core_js_modules_esnext_set_find_js__WEBPACK_IMPORTED_MODULE_304___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_find_js__WEBPACK_IMPORTED_MODULE_304__);
/* harmony import */ var core_js_modules_esnext_set_from_js__WEBPACK_IMPORTED_MODULE_305__ = __webpack_require__(/*! core-js/modules/esnext.set.from.js */ "./node_modules/core-js/modules/esnext.set.from.js");
/* harmony import */ var core_js_modules_esnext_set_from_js__WEBPACK_IMPORTED_MODULE_305___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_from_js__WEBPACK_IMPORTED_MODULE_305__);
/* harmony import */ var core_js_modules_esnext_set_intersection_js__WEBPACK_IMPORTED_MODULE_306__ = __webpack_require__(/*! core-js/modules/esnext.set.intersection.js */ "./node_modules/core-js/modules/esnext.set.intersection.js");
/* harmony import */ var core_js_modules_esnext_set_intersection_js__WEBPACK_IMPORTED_MODULE_306___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_intersection_js__WEBPACK_IMPORTED_MODULE_306__);
/* harmony import */ var core_js_modules_esnext_set_is_disjoint_from_js__WEBPACK_IMPORTED_MODULE_307__ = __webpack_require__(/*! core-js/modules/esnext.set.is-disjoint-from.js */ "./node_modules/core-js/modules/esnext.set.is-disjoint-from.js");
/* harmony import */ var core_js_modules_esnext_set_is_disjoint_from_js__WEBPACK_IMPORTED_MODULE_307___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_is_disjoint_from_js__WEBPACK_IMPORTED_MODULE_307__);
/* harmony import */ var core_js_modules_esnext_set_is_subset_of_js__WEBPACK_IMPORTED_MODULE_308__ = __webpack_require__(/*! core-js/modules/esnext.set.is-subset-of.js */ "./node_modules/core-js/modules/esnext.set.is-subset-of.js");
/* harmony import */ var core_js_modules_esnext_set_is_subset_of_js__WEBPACK_IMPORTED_MODULE_308___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_is_subset_of_js__WEBPACK_IMPORTED_MODULE_308__);
/* harmony import */ var core_js_modules_esnext_set_is_superset_of_js__WEBPACK_IMPORTED_MODULE_309__ = __webpack_require__(/*! core-js/modules/esnext.set.is-superset-of.js */ "./node_modules/core-js/modules/esnext.set.is-superset-of.js");
/* harmony import */ var core_js_modules_esnext_set_is_superset_of_js__WEBPACK_IMPORTED_MODULE_309___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_is_superset_of_js__WEBPACK_IMPORTED_MODULE_309__);
/* harmony import */ var core_js_modules_esnext_set_join_js__WEBPACK_IMPORTED_MODULE_310__ = __webpack_require__(/*! core-js/modules/esnext.set.join.js */ "./node_modules/core-js/modules/esnext.set.join.js");
/* harmony import */ var core_js_modules_esnext_set_join_js__WEBPACK_IMPORTED_MODULE_310___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_join_js__WEBPACK_IMPORTED_MODULE_310__);
/* harmony import */ var core_js_modules_esnext_set_map_js__WEBPACK_IMPORTED_MODULE_311__ = __webpack_require__(/*! core-js/modules/esnext.set.map.js */ "./node_modules/core-js/modules/esnext.set.map.js");
/* harmony import */ var core_js_modules_esnext_set_map_js__WEBPACK_IMPORTED_MODULE_311___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_map_js__WEBPACK_IMPORTED_MODULE_311__);
/* harmony import */ var core_js_modules_esnext_set_of_js__WEBPACK_IMPORTED_MODULE_312__ = __webpack_require__(/*! core-js/modules/esnext.set.of.js */ "./node_modules/core-js/modules/esnext.set.of.js");
/* harmony import */ var core_js_modules_esnext_set_of_js__WEBPACK_IMPORTED_MODULE_312___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_of_js__WEBPACK_IMPORTED_MODULE_312__);
/* harmony import */ var core_js_modules_esnext_set_reduce_js__WEBPACK_IMPORTED_MODULE_313__ = __webpack_require__(/*! core-js/modules/esnext.set.reduce.js */ "./node_modules/core-js/modules/esnext.set.reduce.js");
/* harmony import */ var core_js_modules_esnext_set_reduce_js__WEBPACK_IMPORTED_MODULE_313___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_reduce_js__WEBPACK_IMPORTED_MODULE_313__);
/* harmony import */ var core_js_modules_esnext_set_some_js__WEBPACK_IMPORTED_MODULE_314__ = __webpack_require__(/*! core-js/modules/esnext.set.some.js */ "./node_modules/core-js/modules/esnext.set.some.js");
/* harmony import */ var core_js_modules_esnext_set_some_js__WEBPACK_IMPORTED_MODULE_314___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_some_js__WEBPACK_IMPORTED_MODULE_314__);
/* harmony import */ var core_js_modules_esnext_set_symmetric_difference_js__WEBPACK_IMPORTED_MODULE_315__ = __webpack_require__(/*! core-js/modules/esnext.set.symmetric-difference.js */ "./node_modules/core-js/modules/esnext.set.symmetric-difference.js");
/* harmony import */ var core_js_modules_esnext_set_symmetric_difference_js__WEBPACK_IMPORTED_MODULE_315___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_symmetric_difference_js__WEBPACK_IMPORTED_MODULE_315__);
/* harmony import */ var core_js_modules_esnext_set_union_js__WEBPACK_IMPORTED_MODULE_316__ = __webpack_require__(/*! core-js/modules/esnext.set.union.js */ "./node_modules/core-js/modules/esnext.set.union.js");
/* harmony import */ var core_js_modules_esnext_set_union_js__WEBPACK_IMPORTED_MODULE_316___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_union_js__WEBPACK_IMPORTED_MODULE_316__);
/* harmony import */ var core_js_modules_esnext_string_at_js__WEBPACK_IMPORTED_MODULE_317__ = __webpack_require__(/*! core-js/modules/esnext.string.at.js */ "./node_modules/core-js/modules/esnext.string.at.js");
/* harmony import */ var core_js_modules_esnext_string_at_js__WEBPACK_IMPORTED_MODULE_317___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_string_at_js__WEBPACK_IMPORTED_MODULE_317__);
/* harmony import */ var core_js_modules_esnext_string_code_points_js__WEBPACK_IMPORTED_MODULE_318__ = __webpack_require__(/*! core-js/modules/esnext.string.code-points.js */ "./node_modules/core-js/modules/esnext.string.code-points.js");
/* harmony import */ var core_js_modules_esnext_string_code_points_js__WEBPACK_IMPORTED_MODULE_318___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_string_code_points_js__WEBPACK_IMPORTED_MODULE_318__);
/* harmony import */ var core_js_modules_esnext_symbol_async_dispose_js__WEBPACK_IMPORTED_MODULE_319__ = __webpack_require__(/*! core-js/modules/esnext.symbol.async-dispose.js */ "./node_modules/core-js/modules/esnext.symbol.async-dispose.js");
/* harmony import */ var core_js_modules_esnext_symbol_async_dispose_js__WEBPACK_IMPORTED_MODULE_319___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_symbol_async_dispose_js__WEBPACK_IMPORTED_MODULE_319__);
/* harmony import */ var core_js_modules_esnext_symbol_dispose_js__WEBPACK_IMPORTED_MODULE_320__ = __webpack_require__(/*! core-js/modules/esnext.symbol.dispose.js */ "./node_modules/core-js/modules/esnext.symbol.dispose.js");
/* harmony import */ var core_js_modules_esnext_symbol_dispose_js__WEBPACK_IMPORTED_MODULE_320___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_symbol_dispose_js__WEBPACK_IMPORTED_MODULE_320__);
/* harmony import */ var core_js_modules_esnext_symbol_observable_js__WEBPACK_IMPORTED_MODULE_321__ = __webpack_require__(/*! core-js/modules/esnext.symbol.observable.js */ "./node_modules/core-js/modules/esnext.symbol.observable.js");
/* harmony import */ var core_js_modules_esnext_symbol_observable_js__WEBPACK_IMPORTED_MODULE_321___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_symbol_observable_js__WEBPACK_IMPORTED_MODULE_321__);
/* harmony import */ var core_js_modules_esnext_symbol_pattern_match_js__WEBPACK_IMPORTED_MODULE_322__ = __webpack_require__(/*! core-js/modules/esnext.symbol.pattern-match.js */ "./node_modules/core-js/modules/esnext.symbol.pattern-match.js");
/* harmony import */ var core_js_modules_esnext_symbol_pattern_match_js__WEBPACK_IMPORTED_MODULE_322___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_symbol_pattern_match_js__WEBPACK_IMPORTED_MODULE_322__);
/* harmony import */ var core_js_modules_esnext_symbol_replace_all_js__WEBPACK_IMPORTED_MODULE_323__ = __webpack_require__(/*! core-js/modules/esnext.symbol.replace-all.js */ "./node_modules/core-js/modules/esnext.symbol.replace-all.js");
/* harmony import */ var core_js_modules_esnext_symbol_replace_all_js__WEBPACK_IMPORTED_MODULE_323___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_symbol_replace_all_js__WEBPACK_IMPORTED_MODULE_323__);
/* harmony import */ var core_js_modules_esnext_typed_array_at_js__WEBPACK_IMPORTED_MODULE_324__ = __webpack_require__(/*! core-js/modules/esnext.typed-array.at.js */ "./node_modules/core-js/modules/esnext.typed-array.at.js");
/* harmony import */ var core_js_modules_esnext_typed_array_at_js__WEBPACK_IMPORTED_MODULE_324___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_typed_array_at_js__WEBPACK_IMPORTED_MODULE_324__);
/* harmony import */ var core_js_modules_esnext_typed_array_filter_out_js__WEBPACK_IMPORTED_MODULE_325__ = __webpack_require__(/*! core-js/modules/esnext.typed-array.filter-out.js */ "./node_modules/core-js/modules/esnext.typed-array.filter-out.js");
/* harmony import */ var core_js_modules_esnext_typed_array_filter_out_js__WEBPACK_IMPORTED_MODULE_325___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_typed_array_filter_out_js__WEBPACK_IMPORTED_MODULE_325__);
/* harmony import */ var core_js_modules_esnext_typed_array_find_last_js__WEBPACK_IMPORTED_MODULE_326__ = __webpack_require__(/*! core-js/modules/esnext.typed-array.find-last.js */ "./node_modules/core-js/modules/esnext.typed-array.find-last.js");
/* harmony import */ var core_js_modules_esnext_typed_array_find_last_js__WEBPACK_IMPORTED_MODULE_326___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_typed_array_find_last_js__WEBPACK_IMPORTED_MODULE_326__);
/* harmony import */ var core_js_modules_esnext_typed_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_327__ = __webpack_require__(/*! core-js/modules/esnext.typed-array.find-last-index.js */ "./node_modules/core-js/modules/esnext.typed-array.find-last-index.js");
/* harmony import */ var core_js_modules_esnext_typed_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_327___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_typed_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_327__);
/* harmony import */ var core_js_modules_esnext_typed_array_unique_by_js__WEBPACK_IMPORTED_MODULE_328__ = __webpack_require__(/*! core-js/modules/esnext.typed-array.unique-by.js */ "./node_modules/core-js/modules/esnext.typed-array.unique-by.js");
/* harmony import */ var core_js_modules_esnext_typed_array_unique_by_js__WEBPACK_IMPORTED_MODULE_328___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_typed_array_unique_by_js__WEBPACK_IMPORTED_MODULE_328__);
/* harmony import */ var core_js_modules_esnext_weak_map_delete_all_js__WEBPACK_IMPORTED_MODULE_329__ = __webpack_require__(/*! core-js/modules/esnext.weak-map.delete-all.js */ "./node_modules/core-js/modules/esnext.weak-map.delete-all.js");
/* harmony import */ var core_js_modules_esnext_weak_map_delete_all_js__WEBPACK_IMPORTED_MODULE_329___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_map_delete_all_js__WEBPACK_IMPORTED_MODULE_329__);
/* harmony import */ var core_js_modules_esnext_weak_map_from_js__WEBPACK_IMPORTED_MODULE_330__ = __webpack_require__(/*! core-js/modules/esnext.weak-map.from.js */ "./node_modules/core-js/modules/esnext.weak-map.from.js");
/* harmony import */ var core_js_modules_esnext_weak_map_from_js__WEBPACK_IMPORTED_MODULE_330___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_map_from_js__WEBPACK_IMPORTED_MODULE_330__);
/* harmony import */ var core_js_modules_esnext_weak_map_of_js__WEBPACK_IMPORTED_MODULE_331__ = __webpack_require__(/*! core-js/modules/esnext.weak-map.of.js */ "./node_modules/core-js/modules/esnext.weak-map.of.js");
/* harmony import */ var core_js_modules_esnext_weak_map_of_js__WEBPACK_IMPORTED_MODULE_331___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_map_of_js__WEBPACK_IMPORTED_MODULE_331__);
/* harmony import */ var core_js_modules_esnext_weak_map_emplace_js__WEBPACK_IMPORTED_MODULE_332__ = __webpack_require__(/*! core-js/modules/esnext.weak-map.emplace.js */ "./node_modules/core-js/modules/esnext.weak-map.emplace.js");
/* harmony import */ var core_js_modules_esnext_weak_map_emplace_js__WEBPACK_IMPORTED_MODULE_332___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_map_emplace_js__WEBPACK_IMPORTED_MODULE_332__);
/* harmony import */ var core_js_modules_esnext_weak_map_upsert_js__WEBPACK_IMPORTED_MODULE_333__ = __webpack_require__(/*! core-js/modules/esnext.weak-map.upsert.js */ "./node_modules/core-js/modules/esnext.weak-map.upsert.js");
/* harmony import */ var core_js_modules_esnext_weak_map_upsert_js__WEBPACK_IMPORTED_MODULE_333___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_map_upsert_js__WEBPACK_IMPORTED_MODULE_333__);
/* harmony import */ var core_js_modules_esnext_weak_set_add_all_js__WEBPACK_IMPORTED_MODULE_334__ = __webpack_require__(/*! core-js/modules/esnext.weak-set.add-all.js */ "./node_modules/core-js/modules/esnext.weak-set.add-all.js");
/* harmony import */ var core_js_modules_esnext_weak_set_add_all_js__WEBPACK_IMPORTED_MODULE_334___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_set_add_all_js__WEBPACK_IMPORTED_MODULE_334__);
/* harmony import */ var core_js_modules_esnext_weak_set_delete_all_js__WEBPACK_IMPORTED_MODULE_335__ = __webpack_require__(/*! core-js/modules/esnext.weak-set.delete-all.js */ "./node_modules/core-js/modules/esnext.weak-set.delete-all.js");
/* harmony import */ var core_js_modules_esnext_weak_set_delete_all_js__WEBPACK_IMPORTED_MODULE_335___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_set_delete_all_js__WEBPACK_IMPORTED_MODULE_335__);
/* harmony import */ var core_js_modules_esnext_weak_set_from_js__WEBPACK_IMPORTED_MODULE_336__ = __webpack_require__(/*! core-js/modules/esnext.weak-set.from.js */ "./node_modules/core-js/modules/esnext.weak-set.from.js");
/* harmony import */ var core_js_modules_esnext_weak_set_from_js__WEBPACK_IMPORTED_MODULE_336___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_set_from_js__WEBPACK_IMPORTED_MODULE_336__);
/* harmony import */ var core_js_modules_esnext_weak_set_of_js__WEBPACK_IMPORTED_MODULE_337__ = __webpack_require__(/*! core-js/modules/esnext.weak-set.of.js */ "./node_modules/core-js/modules/esnext.weak-set.of.js");
/* harmony import */ var core_js_modules_esnext_weak_set_of_js__WEBPACK_IMPORTED_MODULE_337___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_set_of_js__WEBPACK_IMPORTED_MODULE_337__);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_338__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ "./node_modules/core-js/modules/web.dom-collections.for-each.js");
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_338___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_338__);
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_339__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js");
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_339___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_339__);
/* harmony import */ var core_js_modules_web_immediate_js__WEBPACK_IMPORTED_MODULE_340__ = __webpack_require__(/*! core-js/modules/web.immediate.js */ "./node_modules/core-js/modules/web.immediate.js");
/* harmony import */ var core_js_modules_web_immediate_js__WEBPACK_IMPORTED_MODULE_340___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_immediate_js__WEBPACK_IMPORTED_MODULE_340__);
/* harmony import */ var core_js_modules_web_queue_microtask_js__WEBPACK_IMPORTED_MODULE_341__ = __webpack_require__(/*! core-js/modules/web.queue-microtask.js */ "./node_modules/core-js/modules/web.queue-microtask.js");
/* harmony import */ var core_js_modules_web_queue_microtask_js__WEBPACK_IMPORTED_MODULE_341___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_queue_microtask_js__WEBPACK_IMPORTED_MODULE_341__);
/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_342__ = __webpack_require__(/*! core-js/modules/web.timers.js */ "./node_modules/core-js/modules/web.timers.js");
/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_342___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_342__);
/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_343__ = __webpack_require__(/*! core-js/modules/web.url.js */ "./node_modules/core-js/modules/web.url.js");
/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_343___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_343__);
/* harmony import */ var core_js_modules_web_url_to_json_js__WEBPACK_IMPORTED_MODULE_344__ = __webpack_require__(/*! core-js/modules/web.url.to-json.js */ "./node_modules/core-js/modules/web.url.to-json.js");
/* harmony import */ var core_js_modules_web_url_to_json_js__WEBPACK_IMPORTED_MODULE_344___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_to_json_js__WEBPACK_IMPORTED_MODULE_344__);
/* harmony import */ var core_js_modules_web_url_search_params_js__WEBPACK_IMPORTED_MODULE_345__ = __webpack_require__(/*! core-js/modules/web.url-search-params.js */ "./node_modules/core-js/modules/web.url-search-params.js");
/* harmony import */ var core_js_modules_web_url_search_params_js__WEBPACK_IMPORTED_MODULE_345___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_search_params_js__WEBPACK_IMPORTED_MODULE_345__);
/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_346__ = __webpack_require__(/*! regenerator-runtime/runtime.js */ "./node_modules/regenerator-runtime/runtime.js");
/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_346___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_346__);
// Handle cookies
// require("./cookies.js");
// CSS
// require("../css/cookieconsent.css");
__webpack_require__(/*! ../css/fontello.css */ "./src/css/fontello.css");
__webpack_require__(/*! ../css/simpleicon.css */ "./src/css/simpleicon.css");
__webpack_require__(/*! ../css/reznoricon.css */ "./src/css/reznoricon.css");
__webpack_require__(/*! ../css/style.css */ "./src/css/style.css");
// required for meta tags (social) to be visible by Webpack
__webpack_require__(/*! ../img/thumbnail1200x628.jpg */ "./src/img/thumbnail1200x628.jpg");
__webpack_require__(/*! ./page-functions.js */ "./src/js/page-functions.js");
// Instantly load test save file from .json (fast Debugging script)
// require("./LoadJson.js");
// Main script for analyzing the decoded save file and generating the page on the fly
__webpack_require__(/*! ./HKCheckCompletion.js */ "./src/js/HKCheckCompletion.js");
// Load Save File for opening files, decoding, decryption
__webpack_require__(/*! ./LoadSaveFile.js */ "./src/js/LoadSaveFile.js");
})();
/******/ })()
;
//# sourceMappingURL=app.js.map