thats snowhold, the one above was fierce forces
wow ur really 0-11 bracket?
nah, i just changed to get easy opponents
Um. I’m not exactly sure thats allowed.
Can you plz change it back.
when he sees justalukes among us and the desert dispute
Hey guys, i have a question. How can I create a spirit at point B to destroy Tower Middle, but then place it at point D to destroy Tower Down, and finally destroy the main tower?
You can use the function hero.setSpiritSpawn() to set the spirit’s next spawnpoint to any letter.
Oh ok thanks so much!
hi @JustALuke, can you show me your code in snowhold? Because I’m new to programming, I don’t know much, I want to learn more things. Thank you very much.
Sure! It’s in the AiLeague video anyways so it’s not like it’s a secret or anything
It is in Javascript
var eHero = hero.findNearest(findByTypeEnemy("base"));
var cTime = 0;
function spiritAct(data) {
const spirit = data.spirit;
const place = data.place;
while (true) {
var enemy = hero.findNearestEnemy();
var nearT = spirit.findNearest(findByTypeEnemy("tower"));
var nearEnemy = spirit.findNearestEnemy();
var enemies = spirit.findEnemies();
var flare = flareNear(spirit);
var blaze = blazeNear(spirit);
var ESpirit = hero.findNearest(hero.findEnemySpirits());
var towers = findByTypeEnemy("tower");
var fTowers = findByType("tower");
if (spirit.isReady("haste")) {
spirit.special("haste");
} else if (hero.time >= 135 && nearEnemy && nearEnemy.x <= 60 && spirit.distanceTo(nearEnemy) < 20 && spirit.isReady("crystallize") && nearEnemy.type != "spirit") {
cTime = hero.time;
spirit.special("crystallize");
while (true) {
if (ESpirit && spirit.distanceTo(ESpirit) <= 12 && ESpirit.health > 0 && ESpirit.x <= 60) {
spirit.special("flare", ESpirit);
}
if (hero.time > cTime + 5) {
break;
}
}
} else if (ESpirit && spirit.distanceTo(ESpirit) <= 25 && hero.distanceTo(ESpirit) >= spirit.distanceTo(ESpirit) + 5 && ESpirit.health > 0 && ESpirit.x <= 60 && towers.length < 1 && fTowers.length < 1 && ESpirit.isReady("crystallize")) {
if (spirit.distanceTo(ESpirit) <= 12) {
spirit.special("flare", ESpirit);
} else {
spirit.moveTowards(ESpirit.x, ESpirit.y);
}
} else if (blaze >= spirit.health * 2) {
spirit.special("blaze");
} else if (flare && nearEnemy.target == spirit) {
spirit.special("flare", flare);
} else if (nearT && spirit.distanceTo(nearT) <= 12) {
var movePos = Vector.add(new Vector(spirit.x, spirit.y), Vector.multiply(Vector.normalize(Vector.subtract(new Vector(nearT.x, nearT.y), new Vector(spirit.x, spirit.y))), 4));
spirit.moveTowards(movePos.x, movePos.y);
spirit.special("flare", nearT);
} else if (nearT && spirit.distanceTo(nearT) <= 25) {
zigZag(nearT, spirit);
} else if (nearT && spirit.distanceTo(nearT) > 25) {
spirit.moveTowards(nearT.x - 4, nearT.y);
} else if (blaze > 320) {
spirit.special("blaze");
} else if (flare) {
spirit.special("flare", flare);
} else if (eHero && spirit.distanceTo(eHero) <= 12) {
spirit.special("flare", eHero);
} else if (nearEnemy && nearEnemy.x <= 60 && spirit.distanceTo(nearEnemy) > 5 && spirit.distanceTo(nearEnemy) <= 20) {
spirit.moveTowards(nearEnemy.x, nearEnemy.y);
} else if (nearEnemy && nearEnemy.x <= 60 && spirit.distanceTo(nearEnemy) <= 5) {
spirit.attack(nearEnemy);
} else if (eHero && spirit.distanceTo(eHero) > 12 && enemy && enemy.x > 60) {
spirit.moveTowards(95, 40);
} else if (nearEnemy && spirit.distanceTo(nearEnemy) > 5 && nearEnemy.x <= 60) {
spirit.moveTowards(nearEnemy.x, nearEnemy.y);
} else {
spirit.moveTowards(15, 40);
}
}
}
function zigZag(enemy, spirit) {
var direction = Vector.multiply(Vector.normalize(Vector.subtract(new Vector(enemy.x, enemy.y), new Vector(spirit.x, spirit.y))), 3);
var posOne = Vector.multiply(direction, 3);
var r1 = Vector.add(new Vector(spirit.x, spirit.y), Vector.add(Vector.rotate(direction, Math.PI / 2), posOne));
var r2 = Vector.add(new Vector(spirit.x, spirit.y), Vector.add(Vector.rotate(direction, -Math.PI / 2), posOne));
spirit.moveTowards(r1.x, r1.y);
spirit.moveTowards(r2.x, r2.y);
}
function flareNear(spirit) {
var enemies = spirit.findEnemies();
var flare = [];
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
if (enemy.health >= spirit.health * 1.8) {
flare.push(enemy);
}
}
var nearFlare = spirit.findNearest(flare);
if (nearFlare && spirit.distanceTo(nearFlare) <= 12) {
return nearFlare;
}
}
function blazeNear(spirit) {
var enemies = spirit.findEnemies();
var blaze = 0;
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
if (spirit.distanceTo(enemy) < 12 && enemy.health >= spirit.health * 1.2) {
blaze += spirit.health * 1.2;
} else if (spirit.distanceTo(enemy) < 12) {
blaze += enemy.health;
}
}
return blaze;
}
function lightning() {
var enemies = hero.findEnemies();
var strikeE = [];
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
if ((enemy.health > 20 || enemy.x <= 25) && (enemy.type == "warlock" || enemy.type == "shaman" || enemy.type == "catapult")) {
strikeE.push(enemy);
}
}
var strike = hero.findNearest(strikeE);
return strike;
}
function fireBall2000() {
var enemies = hero.findEnemies();
var enemyDistance = [];
var mostNear = 0;
var mostNearUnits = null;
for (var l = 0; l < enemies.length; l++) {
enemyDistance.push(0);
}
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
if (enemy.type == "tower" || enemy.type == "base" || enemy.type == "skeleton" || enemy.type == "spirit" || enemy.type == "spirit" && !enemy.isReady("haste")) {
continue;
}
for (var k = 0; k < enemies.length; k++) {
var enemy2 = enemies[k];
if (enemy2.type == "tower" || enemy2.type == "base" || enemy2.type == "skeleton" || enemy2 == enemy || enemy2.type == "spirit" && !enemy2.isReady("haste")) {
continue;
}
if (enemy.distanceTo(enemy2) <= 9) {
enemyDistance.splice(i, 1, enemyDistance[i] += 1);
if (enemyDistance[i] > mostNear || enemyDistance[i] === mostNear && hero.distanceTo(enemy) < hero.distanceTo(mostNearUnits)) {
mostNearUnits = enemy;
mostNear = enemyDistance[i];
}
}
}
}
return mostNearUnits;
}
function fireBallUnit(unit) {
var unitAttackRange = 0;
var unitMaxSpeed = 0;
if (unit.type == "archer") {
unitAttackRange = 15;
unitMaxSpeed = 14;
} else if (unit.type == "soldier") {
unitAttackRange = 3;
unitMaxSpeed = 14;
} else if (unit.type == "paladin") {
unitAttackRange = 3;
unitMaxSpeed = 9;
} else if (unit.type == "shaman") {
unitAttackRange = 20;
unitMaxSpeed = 10;
} else if (unit.type == "brawler") {
unitAttackRange = 3;
unitMaxSpeed = 7;
} else if (unit.type == "warlock") {
unitAttackRange = 20;
unitMaxSpeed = 8;
} else if (unit.type == "catapult") {
unitAttackRange = 30;
unitMaxSpeed = 4;
} else if (unit.type == "skeleton") {
unitAttackRange = 3;
unitMaxSpeed = 14;
} else if (unit.type == "spirit") {
unitAttackRange = 4;
unitMaxSpeed = 17;
}
if (unit.target) {
if (unit.distanceTo(unit.target) <= unitAttackRange + 5) {
hero.cast("fireball", unit.x - 1, unit.y);
} else if (unit.y > 70) {
hero.cast("fireball", unit.x, unit.y - unitMaxSpeed * 2 / 3);
} else if (unit.y > 45 && unit.y < 60) {
if (unit.target.y > unit.y) {
hero.cast("fireball", unit.x, unit.y + unitMaxSpeed * 2 / 3);
} else {
hero.cast("fireball", unit.x, unit.y - unitMaxSpeed * 2 / 3);
}
} else if (unit.y > 20 && unit.y < 35) {
if (unit.target.y > unit.y) {
hero.cast("fireball", unit.x, unit.y + unitMaxSpeed * 2 / 3);
} else {
hero.cast("fireball", unit.x, unit.y - unitMaxSpeed * 2 / 3);
}
} else if (unit.y < 10) {
hero.cast("fireball", unit.x, unit.y + unitMaxSpeed * 2 / 3);
} else if (unit.distanceTo(unit.target) >= unitMaxSpeed * 2 / 3) {
hero.cast("fireball", unit.x - unitMaxSpeed * 2 / 3, unit.y);
} else if (unit.distanceTo(unit.target) < unitMaxSpeed * 2 / 3) {
hero.cast("fireball", unit.target.x + unitAttackRange, unit.y);
}
} else {
hero.cast("fireball", unit.x, unit.y);
}
}
function findByType(type) {
var units = [];
var friends = hero.findFriends();
for (var i = 0; i < friends.length; i++) {
if (friends[i].type == type) {
units.push(friends[i]);
}
}
return units;
}
function findByTypeEnemy(type) {
var units = [];
var enemies = hero.findEnemies();
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].type == type) {
units.push(enemies[i]);
}
}
return units;
}
function catagorizeUnits(type) {
var enemies = hero.findEnemies();
var topE = [];
var midE = [];
var botE = [];
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
if (enemy.type == "tower" || enemy.type == "base" || enemy.type == "skeleton") {
continue;
} else if (enemy.y <= 27) {
botE.push(enemy);
} else if (enemy.y > 27 && enemy.y < 52) {
midE.push(enemy);
} else if (enemy.y >= 52) {
topE.push(enemy);
}
}
if (type == "top") {
return topE;
} else if (type == "middle") {
return midE;
} else if (type == "bottom") {
return botE;
}
}
function friendlyUnits(section, type) {
var units = findByType(type);
var topU = [];
var midU = [];
var botU = [];
for (var i = 0; i < units.length; i++) {
if (units[i].y > 53) {
topU.push(units[i]);
} else if (units[i].y < 27) {
botU.push(units[i]);
} else {
midU.push(units[i]);
}
}
if (section == "top") {
return topU;
} else if (section == "bottom") {
return botU;
} else if (section == "middle") {
return midU;
}
}
function summonUnit() {
var topT = null;
var midT = null;
var botT = null;
var topE = catagorizeUnits("top");
var midE = catagorizeUnits("middle");
var botE = catagorizeUnits("bottom");
var towers = findByTypeEnemy("tower");
var topA = friendlyUnits("top", "archer");
var midA = friendlyUnits("middle", "archer");
var botA = friendlyUnits("bottom", "archer");
var topB = friendlyUnits("top", "brawler");
var midB = friendlyUnits("middle", "brawler");
var botB = friendlyUnits("bottom", "brawler");
var topS = friendlyUnits("top", "soldier");
var botS = friendlyUnits("bottom", "soldier");
var fBrawlers = findByType("brawler");
var fBrawler = hero.findNearest(fBrawlers);
for (var i = 0; i < towers.length; i++) {
if (towers[i].y >= 50) {
topT = towers[i];
} else if (towers[i].y <= 50 && towers[i].y >= 30) {
midT = towers[i];
} else if (towers[i].y <= 50) {
botT = towers[i];
}
}
if (midB.length < 1 && hero.time > 115 && (fBrawlers.length < 1 || fBrawlers.length < 2 && fBrawler && fBrawler.health <= 250)) {
hero.summon("brawler", 20, 40);
} else if (topB.length < 1 && hero.time > 115 && (fBrawlers.length < 1 || fBrawlers.length < 2 && fBrawler && fBrawler.health <= 250)) {
hero.summon("brawler", 20, 65);
} else if (botB.length < 1 && hero.time > 115 && (fBrawlers.length < 1 || fBrawlers.length < 2 && fBrawler && fBrawler.health <= 250)) {
hero.summon("brawler", 20, 15);
} else if (midA.length < 1 && hero.time > 115) {
hero.summon("archer", 10, 40);
} else if (topA.length < 1 && hero.time > 115) {
hero.summon("archer", 10, 65);
} else if (botA.length < 1 && hero.time > 115) {
hero.summon("archer", 10, 15);
} else if (midA.length < 1) {
hero.summon("archer", 30, 40);
} else if (topA.length < 1) {
hero.summon("archer", 30, 65);
} else if (botA.length < 1) {
hero.summon("archer", 30, 15);
} else if (midB.length < 1 && hero.time > 120 && fBrawlers.length < 2) {
hero.summon("brawler", 20, 40);
} else if (topB.length < 1 && hero.time > 120 && fBrawlers.length < 2) {
hero.summon("brawler", 20, 65);
} else if (botB.length < 1 && hero.time > 120 && fBrawlers.length < 2) {
hero.summon("brawler", 20, 15);
} else if (midS.length < 1) {
hero.summon("soldier", 40, 40);
} else if (topS.length < 1) {
hero.summon("soldier", 40, 65);
} else if (botS.length < 1) {
hero.summon("soldier", 40, 15);
} else {
hero.summon("archer", 30, 40);
}
}
function setSSpawn() {
var topT = null;
var midT = null;
var botT = null;
var topE = catagorizeUnits("top");
var midE = catagorizeUnits("middle");
var botE = catagorizeUnits("bottom");
var towers = findByTypeEnemy("tower");
var enemy = hero.findNearestEnemy();
for (var i = 0; i < towers.length; i++) {
if (towers[i].y >= 50) {
topT = towers[i];
} else if (towers[i].y <= 50 && towers[i].y >= 30) {
midT = towers[i];
} else if (towers[i].y <= 50) {
botT = towers[i];
}
}
if (topT && topE <= botE && topE <= midE) {
hero.setSpiritSpawn("C");
} else if (botT && botE <= topE && botE <= midE) {
hero.setSpiritSpawn("D");
} else if (midT && midE <= topE && midE <= botE) {
hero.setSpiritSpawn("B");
} else if (topT) {
hero.setSpiritSpawn("C");
} else if (midT) {
hero.setSpiritSpawn("B");
} else if (botT) {
hero.setSpiritSpawn("D");
} else {
hero.setSpiritSpawn("A");
}
}
function healOnEnemyHero() {
var friends = hero.findFriends();
var nearEHero = 0;
for (var i = 0; i < friends.length; i++) {
var friend = friends[i];
if (eHero && friend.type != "tower" && friend.distanceTo(eHero) <= 10 && friend.health > 0 && friend.target == eHero && (friend.type == "soldier" || friend.type == "paladin" || friend.type == "brawler" || friend.type == "skeleton")) {
if (friend.maxHealth - friend.health <= 75) {
nearEHero += friend.maxHealth - friend.health;
} else {
nearEHero += 75;
}
} else if (eHero && friend.type != "tower" && friend.distanceTo(eHero) < 18 && friend.target == eHero && friend.type == "archer") {
if (friend.maxHealth - friend.health <= 75) {
nearEHero += friend.maxHealth - friend.health;
} else {
nearEHero += 75;
}
}
}
return nearEHero;
}
function fTowersHealth() {
var towers = findByType("tower");
var totalhealth = 0;
for (var i = 0; i < towers.length; i++) {
totalhealth += towers[i].health;
}
return totalhealth;
}
function lightningBThreat() {
var brawlers = findByTypeEnemy("brawler");
var danger = [];
for (var i = 0; i < brawlers.length; i++) {
var brawler = brawlers[i];
var towers = findByType("tower");
var tower = brawler.findNearest(towers);
if (tower && brawler.distanceTo(tower) < 15 && brawler.health < 50) {
danger.push(brawler);
}
}
return danger;
}
hero.on("spawn-spirit", spiritAct);
while (true) {
setSSpawn();
var nearEHero = healOnEnemyHero();
var mostNearUnits = fireBall2000();
var strike = lightning();
var enemy = hero.findNearestEnemy();
var currentSpirit = hero.findNearest(findByType("spirit"));
var towers = findByTypeEnemy("tower");
var towerH = fTowersHealth();
var archers = findByType("archer");
var brawlers = findByType("brawler");
var ESpirit = hero.findNearest(hero.findEnemySpirits());
var topS = friendlyUnits("top", "soldier");
var midS = friendlyUnits("middle", "soldier");
var botS = friendlyUnits("bottom", "soldier");
var dangerB = hero.findNearest(lightningBThreat());
if (hero.time < 178 && (ESpirit && ESpirit.health > 60 && ESpirit.isReady("crystallize") || ESpirit && ESpirit.x <= 55 && ESpirit.health > 0)) {
hero.cast("lightning", ESpirit.x, ESpirit.y);
} else if (enemy && enemy.x <= 20 && enemy.health > 0 && hero.time > 120) {
hero.cast("lightning", enemy.x, enemy.y);
} else if (eHero && hero.time >= 175 || enemy && enemy.x >= 70 && hero.time >= 160) {
hero.cast("heal", 15, 40);
} else if (mostNearUnits) {
fireBallUnit(mostNearUnits);
} else if (strike && strike.x <= 40 && strike.health > 0 || strike && strike.health > 0 && hero.time >= 125) {
hero.cast("lightning", strike.x, strike.y);
} else if (enemy && enemy.x <= 20 && enemy.health > 0) {
hero.cast("lightning", enemy.x, enemy.y);
} else if (dangerB) {
hero.cast("lightning", dangerB.x, dangerB.y);
} else if (enemy && enemy.x <= 40 && enemy.y > 53 && topS.length < 1 && enemy.type != "brawler") {
hero.summon("soldier", 10, enemy.y);
} else if (enemy && enemy.x <= 40 && enemy.y <= 53 && enemy.y >= 27 && midS.length < 1 && enemy.type != "brawler") {
hero.summon("soldier", 10, enemy.y);
} else if (enemy && enemy.x <= 40 && enemy.y < 27 && botS.length < 1 && enemy.type != "brawler") {
hero.summon("soldier", 10, enemy.y);
} else if (brawlers.length < 1 && (findByType("tower").length < 3 || findByTypeEnemy("tower").length < 3) && hero.time > 120) {
summonUnit();
} else if (nearEHero >= 100) {
hero.cast("heal", 85, 40);
} else if (hero.health < hero.maxHealth - 15 && towerH >= 500 && towers.length >= 1 && findByTypeEnemy("brawler").length + findByTypeEnemy("catapult").length + findByTypeEnemy("warlock").length <= 1) {
hero.cast("heal", 15, 40);
} else if (strike && strike.health >= 40) {
hero.cast("lightning", strike.x, strike.y);
} else {
summonUnit();
}
} //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⣤⣤⣤⣤⣶⣦⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⡿⠛⠉⠙⠛⠛⠛⠛⠻⢿⣿⣷⣤⡀⠀⠀⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠋⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⠈⢻⣿⣿⡄⠀⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⣸⣿⡏⠀⠀⠀⣠⣶⣾⣿⣿⣿⠿⠿⠿⢿⣿⣿⣿⣄⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⣿⣿⠁⠀⠀⢰⣿⣿⣯⠁⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣷⡄⠀
//⠀⠀⣀⣤⣴⣶⣶⣿⡟⠀⠀⠀⢸⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣷⠀
//⠀⢰⣿⡟⠋⠉⣹⣿⡇⠀⠀⠀⠘⣿⣿⣿⣿⣷⣦⣤⣤⣤⣶⣶⣶⣶⣿⣿⣿⠀
//⠀⢸⣿⡇⠀⠀⣿⣿⡇⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀
//⠀⣸⣿⡇⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠉⠻⠿⣿⣿⣿⣿⡿⠿⠿⠛⢻⣿⡇⠀⠀
//⠀⣿⣿⠁⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣧⠀⠀
//⠀⣿⣿⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀
//⠀⣿⣿⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀
//⠀⢿⣿⡆⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡇⠀⠀
//⠀⠸⣿⣧⡀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠃⠀⠀
//⠀⠀⠛⢿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⣰⣿⣿⣷⣶⣶⣶⣶⠶⠀⢠⣿⣿⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⣿⣿⡇⠀⣽⣿⡏⠁⠀⠀⢸⣿⡇⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⣿⣿⡇⠀⢹⣿⡆⠀⠀⠀⣸⣿⠇⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⢿⣿⣦⣄⣀⣠⣴⣿⣿⠁⠀⠈⠻⣿⣿⣿⣿⡿⠏⠀⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⠈⠛⠻⠿⠿⠿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// Working on a custom arena of my own... Estimated release date: 3-5 business days.
Ok so good, thanks for it but I want to study Python
THANKS that’s good for me to study more one language
Temporarily I will use your code to study it.
im taking the among us
I understand nothing but the among us
it looks cool, ill add it to all of my codes
Who can make the among us like @JustALuke ???
Lol I totally didn’t make that I just searched it up on the interwebs
⢀⡴⠑⡄⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠸⡇⠀⠿⡀⠀⠀⠀⣀⡴⢿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠑⢄⣠⠾⠁⣀⣄⡈⠙⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢀⡀⠁⠀⠀⠈⠙⠛⠂⠈⣿⣿⣿⣿⣿⠿⡿⢿⣆⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢀⡾⣁⣀⠀⠴⠂⠙⣗⡀⠀⢻⣿⣿⠭⢤⣴⣦⣤⣹⠀⠀⠀⢀⢴⣶⣆
⠀⠀⢀⣾⣿⣿⣿⣷⣮⣽⣾⣿⣥⣴⣿⣿⡿⢂⠔⢚⡿⢿⣿⣦⣴⣾⠁⠸⣼⡿
⠀⢀⡞⠁⠙⠻⠿⠟⠉⠀⠛⢹⣿⣿⣿⣿⣿⣌⢤⣼⣿⣾⣿⡟⠉⠀⠀⠀⠀⠀
⠀⣾⣷⣶⠇⠀⠀⣤⣄⣀⡀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀
⠀⠉⠈⠉⠀⠀⢦⡈⢻⣿⣿⣿⣶⣶⣶⣶⣤⣽⡹⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠉⠲⣽⡻⢿⣿⣿⣿⣿⣿⣿⣷⣜⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣷⣶⣮⣭⣽⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣀⣀⣈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠻⠿⠿⠿⠿⠛⠉