UNPKG

react-ascii-text

Version:
3,490 lines (3,465 loc) 2.93 MB
import { useRef, useEffect, useCallback } from 'react'; import figlet from 'figlet'; var __defProp = Object.defineProperty; var __getOwnPropNames = Object.getOwnPropertyNames; var __knownSymbol = (name, symbol) => { return (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name); }; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it); // src/fonts/Slant.js var Slant_exports = {}; __export(Slant_exports, { default: () => Slant_default }); var Slant_default; var init_Slant = __esm({ "src/fonts/Slant.js"() { Slant_default = `flf2a$ 6 5 16 15 10 0 18319 Slant by Glenn Chappell 3/93 -- based on Standard Includes ISO Latin-1 figlet release 2.1 -- 12 Aug 1994 Permission is hereby given to modify this font, as long as the modifier's name is placed on a comment line. Modified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter supported by FIGlet and FIGWin. May also be slightly modified for better use of new full-width/kern/smush alternatives, but default output is NOT changed. $$@ $$ @ $$ @ $$ @ $$ @ $$ @@ __@ / /@ / / @ /_/ @ (_) @ @@ _ _ @ ( | )@ |/|/ @ $ @ $ @ @@ __ __ @ __/ // /_@ /_ _ __/@ /_ _ __/ @ /_//_/ @ @@ __@ _/ /@ / __/@ (_ ) @ / _/ @ /_/ @@ _ __@ (_)_/_/@ _/_/ @ _/_/_ @ /_/ (_) @ @@ ___ @ ( _ ) @ / __ \\/|@ / /_/ < @ \\____/\\/ @ @@ _ @ ( )@ |/ @ $ @ $ @ @@ __@ _/_/@ / / @ / / @ / / @ |_| @@ _ @ | |@ / /@ / / @ _/_/ @ /_/ @@ @ __/|_@ | /@ /_ __| @ |/ @ @@ @ __ @ __/ /_@ /_ __/@ /_/ @ @@ @ @ @ _ @ ( )@ |/ @@ @ @ ______@ /_____/@ $ @ @@ @ @ @ _ @ (_)@ @@ __@ _/_/@ _/_/ @ _/_/ @ /_/ @ @@ ____ @ / __ \\@ / / / /@ / /_/ / @ \\____/ @ @@ ___@ < /@ / / @ / / @ /_/ @ @@ ___ @ |__ \\@ __/ /@ / __/ @ /____/ @ @@ _____@ |__ /@ /_ < @ ___/ / @ /____/ @ @@ __ __@ / // /@ / // /_@ /__ __/@ /_/ @ @@ ______@ / ____/@ /___ \\ @ ____/ / @ /_____/ @ @@ _____@ / ___/@ / __ \\ @ / /_/ / @ \\____/ @ @@ _____@ /__ /@ / / @ / / @ /_/ @ @@ ____ @ ( __ )@ / __ |@ / /_/ / @ \\____/ @ @@ ____ @ / __ \\@ / /_/ /@ \\__, / @ /____/ @ @@ @ _ @ (_)@ _ @ (_) @ @@ @ _ @ (_)@ _ @ ( ) @ |/ @@ __@ / /@ / / @ \\ \\ @ \\_\\@ @@ @ _____@ /____/@ /____/ @ $ @ @@ __ @ \\ \\ @ \\ \\@ / /@ /_/ @ @@ ___ @ /__ \\@ / _/@ /_/ @ (_) @ @@ ______ @ / ____ \\@ / / __ \`/@ / / /_/ / @ \\ \\__,_/ @ \\____/ @@ ___ @ / |@ / /| |@ / ___ |@ /_/ |_|@ @@ ____ @ / __ )@ / __ |@ / /_/ / @ /_____/ @ @@ ______@ / ____/@ / / @ / /___ @ \\____/ @ @@ ____ @ / __ \\@ / / / /@ / /_/ / @ /_____/ @ @@ ______@ / ____/@ / __/ @ / /___ @ /_____/ @ @@ ______@ / ____/@ / /_ @ / __/ @ /_/ @ @@ ______@ / ____/@ / / __ @ / /_/ / @ \\____/ @ @@ __ __@ / / / /@ / /_/ / @ / __ / @ /_/ /_/ @ @@ ____@ / _/@ / / @ _/ / @ /___/ @ @@ __@ / /@ __ / / @ / /_/ / @ \\____/ @ @@ __ __@ / //_/@ / ,< @ / /| | @ /_/ |_| @ @@ __ @ / / @ / / @ / /___@ /_____/@ @@ __ ___@ / |/ /@ / /|_/ / @ / / / / @ /_/ /_/ @ @@ _ __@ / | / /@ / |/ / @ / /| / @ /_/ |_/ @ @@ ____ @ / __ \\@ / / / /@ / /_/ / @ \\____/ @ @@ ____ @ / __ \\@ / /_/ /@ / ____/ @ /_/ @ @@ ____ @ / __ \\@ / / / /@ / /_/ / @ \\___\\_\\ @ @@ ____ @ / __ \\@ / /_/ /@ / _, _/ @ /_/ |_| @ @@ _____@ / ___/@ \\__ \\ @ ___/ / @ /____/ @ @@ ______@ /_ __/@ / / @ / / @ /_/ @ @@ __ __@ / / / /@ / / / / @ / /_/ / @ \\____/ @ @@ _ __@ | | / /@ | | / / @ | |/ / @ |___/ @ @@ _ __@ | | / /@ | | /| / / @ | |/ |/ / @ |__/|__/ @ @@ _ __@ | |/ /@ | / @ / | @ /_/|_| @ @@ __ __@ \\ \\/ /@ \\ / @ / / @ /_/ @ @@ _____@ /__ /@ / / @ / /__@ /____/@ @@ ___@ / _/@ / / @ / / @ / / @ /__/ @@ __ @ \\ \\ @ \\ \\ @ \\ \\ @ \\_\\@ @@ ___@ / /@ / / @ / / @ _/ / @ /__/ @@ //|@ |/||@ $ @ $ @ $ @ @@ @ @ @ @ ______@ /_____/@@ _ @ ( )@ V @ $ @ $ @ @@ @ ____ _@ / __ \`/@ / /_/ / @ \\__,_/ @ @@ __ @ / /_ @ / __ \\@ / /_/ /@ /_.___/ @ @@ @ _____@ / ___/@ / /__ @ \\___/ @ @@ __@ ____/ /@ / __ / @ / /_/ / @ \\__,_/ @ @@ @ ___ @ / _ \\@ / __/@ \\___/ @ @@ ____@ / __/@ / /_ @ / __/ @ /_/ @ @@ @ ____ _@ / __ \`/@ / /_/ / @ \\__, / @ /____/ @@ __ @ / /_ @ / __ \\@ / / / /@ /_/ /_/ @ @@ _ @ (_)@ / / @ / / @ /_/ @ @@ _ @ (_)@ / / @ / / @ __/ / @ /___/ @@ __ @ / /__@ / //_/@ / ,< @ /_/|_| @ @@ __@ / /@ / / @ / / @ /_/ @ @@ @ ____ ___ @ / __ \`__ \\@ / / / / / /@ /_/ /_/ /_/ @ @@ @ ____ @ / __ \\@ / / / /@ /_/ /_/ @ @@ @ ____ @ / __ \\@ / /_/ /@ \\____/ @ @@ @ ____ @ / __ \\@ / /_/ /@ / .___/ @ /_/ @@ @ ____ _@ / __ \`/@ / /_/ / @ \\__, / @ /_/ @@ @ _____@ / ___/@ / / @ /_/ @ @@ @ _____@ / ___/@ (__ ) @ /____/ @ @@ __ @ / /_@ / __/@ / /_ @ \\__/ @ @@ @ __ __@ / / / /@ / /_/ / @ \\__,_/ @ @@ @ _ __@ | | / /@ | |/ / @ |___/ @ @@ @ _ __@ | | /| / /@ | |/ |/ / @ |__/|__/ @ @@ @ _ __@ | |/_/@ _> < @ /_/|_| @ @@ @ __ __@ / / / /@ / /_/ / @ \\__, / @ /____/ @@ @ ____@ /_ /@ / /_@ /___/@ @@ __@ _/_/@ _/_/ @ < < @ / / @ \\_\\ @@ __@ / /@ / / @ / / @ / / @ /_/ @@ _ @ | |@ / /@ _>_>@ _/_/ @ /_/ @@ /\\//@ //\\/ @ $ @ $ @ $ @ @@ _ _ @ (_)(_)@ / _ | @ / __ | @ /_/ |_| @ @@ _ _ @ (_)_(_)@ / __ \\ @ / /_/ / @ \\____/ @ @@ _ _ @ (_) (_)@ / / / / @ / /_/ / @ \\____/ @ @@ _ _ @ (_)_(_)@ / __ \`/ @ / /_/ / @ \\__,_/ @ @@ _ _ @ (_)_(_)@ / __ \\ @ / /_/ / @ \\____/ @ @@ _ _ @ (_) (_)@ / / / / @ / /_/ / @ \\__,_/ @ @@ ____ @ / __ \\@ / / / /@ / /_| | @ / //__/ @ /_/ @@ 160 NO-BREAK SPACE $$@ $$ @ $$ @ $$ @ $$ @ $$ @@ 161 INVERTED EXCLAMATION MARK _ @ (_)@ / / @ / / @ /_/ @ @@ 162 CENT SIGN __@ __/ /@ / ___/@ / /__ @ \\ _/ @ /_/ @@ 163 POUND SIGN ____ @ / ,__\\@ __/ /_ @ _/ /___ @ (_,____/ @ @@ 164 CURRENCY SIGN /|___/|@ | __ / @ / /_/ / @ /___ | @ |/ |/ @ @@ 165 YEN SIGN ____@ _| / /@ /_ __/@ /_ __/ @ /_/ @ @@ 166 BROKEN BAR __@ / /@ /_/ @ __ @ / / @ /_/ @@ 167 SECTION SIGN __ @ _/ _)@ / | | @ | || | @ | |_/ @ (__/ @@ 168 DIAERESIS _ _ @ (_) (_)@ $ $ @ $ $ @ $ $ @ @@ 169 COPYRIGHT SIGN ______ @ / _____\\ @ / / ___/ |@ / / /__ / @ | \\___/ / @ \\______/ @@ 170 FEMININE ORDINAL INDICATOR ___ _@ / _ \`/@ _\\_,_/ @ /____/ @ $ @ @@ 171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK ____@ / / /@ / / / @ \\ \\ \\ @ \\_\\_\\@ @@ 172 NOT SIGN @ ______@ /___ /@ /_/ @ $ @ @@ 173 SOFT HYPHEN @ @ _____@ /____/@ $ @ @@ 174 REGISTERED SIGN ______ @ / ___ \\ @ / / _ \\ |@ / / , _/ / @ | /_/|_| / @ \\______/ @@ 175 MACRON ______@ /_____/@ $ @ $ @ $ @ @@ 176 DEGREE SIGN ___ @ / _ \\@ / // /@ \\___/ @ $ @ @@ 177 PLUS-MINUS SIGN __ @ __/ /_@ /_ __/@ __/_/_ @ /_____/ @ @@ 178 SUPERSCRIPT TWO ___ @ |_ |@ / __/ @ /____/ @ $ @ @@ 179 SUPERSCRIPT THREE ____@ |_ /@ _/_ < @ /____/ @ $ @ @@ 180 ACUTE ACCENT __@ /_/@ $ @ $ @ $ @ @@ 181 MICRO SIGN @ __ __@ / / / /@ / /_/ / @ / ._,_/ @ /_/ @@ 182 PILCROW SIGN _______@ / _ /@ / (/ / / @ \\_ / / @ /_/_/ @ @@ 183 MIDDLE DOT @ _ @ (_)@ $ @ $ @ @@ 184 CEDILLA @ @ @ @ _ @ /_)@@ 185 SUPERSCRIPT ONE ___@ < /@ / / @ /_/ @ $ @ @@ 186 MASCULINE ORDINAL INDICATOR ___ @ / _ \\@ _\\___/@ /____/ @ $ @ @@ 187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK ____ @ \\ \\ \\ @ \\ \\ \\@ / / /@ /_/_/ @ @@ 188 VULGAR FRACTION ONE QUARTER ___ __ @ < / _/_/ @ / /_/_/___@ /_//_// / /@ /_/ /_ _/@ /_/ @@ 189 VULGAR FRACTION ONE HALF ___ __ @ < / _/_/__ @ / /_/_/|_ |@ /_//_/ / __/ @ /_/ /____/ @ @@ 190 VULGAR FRACTION THREE QUARTERS ____ __ @ |_ / _/_/ @ _/_ < _/_/___@ /____//_// / /@ /_/ /_ _/@ /_/ @@ 191 INVERTED QUESTION MARK _ @ (_)@ _/ / @ / _/_ @ \\___/ @ @@ 192 LATIN CAPITAL LETTER A WITH GRAVE __ @ _\\_\\@ / _ |@ / __ |@ /_/ |_|@ @@ 193 LATIN CAPITAL LETTER A WITH ACUTE __@ _/_/@ / _ |@ / __ |@ /_/ |_|@ @@ 194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX //|@ _|/||@ / _ | @ / __ | @ /_/ |_| @ @@ 195 LATIN CAPITAL LETTER A WITH TILDE /\\//@ _//\\/ @ / _ | @ / __ | @ /_/ |_| @ @@ 196 LATIN CAPITAL LETTER A WITH DIAERESIS _ _ @ (_)(_)@ / _ | @ / __ | @ /_/ |_| @ @@ 197 LATIN CAPITAL LETTER A WITH RING ABOVE (())@ / |@ / /| |@ / ___ |@ /_/ |_|@ @@ 198 LATIN CAPITAL LETTER AE __________@ / ____/@ / /| __/ @ / __ /___ @ /_/ /_____/ @ @@ 199 LATIN CAPITAL LETTER C WITH CEDILLA ______@ / ____/@ / / @ / /___ @ \\____/ @ /_) @@ 200 LATIN CAPITAL LETTER E WITH GRAVE __ @ _\\_\\@ / __/@ / _/ @ /___/ @ @@ 201 LATIN CAPITAL LETTER E WITH ACUTE __@ _/_/@ / __/@ / _/ @ /___/ @ @@ 202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX //|@ _|/||@ / __/ @ / _/ @ /___/ @ @@ 203 LATIN CAPITAL LETTER E WITH DIAERESIS _ _ @ (_)(_)@ / __/ @ / _/ @ /___/ @ @@ 204 LATIN CAPITAL LETTER I WITH GRAVE __ @ _\\_\\@ / _/@ _/ / @ /___/ @ @@ 205 LATIN CAPITAL LETTER I WITH ACUTE __@ _/_/@ / _/@ _/ / @ /___/ @ @@ 206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX //|@ _|/||@ / _/ @ _/ / @ /___/ @ @@ 207 LATIN CAPITAL LETTER I WITH DIAERESIS _ _ @ (_)(_)@ / _/ @ _/ / @ /___/ @ @@ 208 LATIN CAPITAL LETTER ETH ____ @ / __ \\@ __/ /_/ /@ /_ __/ / @ /_____/ @ @@ 209 LATIN CAPITAL LETTER N WITH TILDE /\\//@ _//\\/ @ / |/ / @ / / @ /_/|_/ @ @@ 210 LATIN CAPITAL LETTER O WITH GRAVE __ @ __\\_\\@ / __ \\@ / /_/ /@ \\____/ @ @@ 211 LATIN CAPITAL LETTER O WITH ACUTE __@ __/_/@ / __ \\@ / /_/ /@ \\____/ @ @@ 212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX //|@ _|/||@ / __ \\@ / /_/ /@ \\____/ @ @@ 213 LATIN CAPITAL LETTER O WITH TILDE /\\//@ _//\\/ @ / __ \\ @ / /_/ / @ \\____/ @ @@ 214 LATIN CAPITAL LETTER O WITH DIAERESIS _ _ @ (_)_(_)@ / __ \\ @ / /_/ / @ \\____/ @ @@ 215 MULTIPLICATION SIGN @ @ /|/|@ > < @ |/|/ @ @@ 216 LATIN CAPITAL LETTER O WITH STROKE _____ @ / _// \\@ / //// /@ / //// / @ \\_//__/ @ @@ 217 LATIN CAPITAL LETTER U WITH GRAVE __ @ __\\_\\_@ / / / /@ / /_/ / @ \\____/ @ @@ 218 LATIN CAPITAL LETTER U WITH ACUTE __ @ __/_/_@ / / / /@ / /_/ / @ \\____/ @ @@ 219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX //| @ _|/||_@ / / / /@ / /_/ / @ \\____/ @ @@ 220 LATIN CAPITAL LETTER U WITH DIAERESIS _ _ @ (_) (_)@ / / / / @ / /_/ / @ \\____/ @ @@ 221 LATIN CAPITAL LETTER Y WITH ACUTE __ @ __/_/_@ \\ \\/ /@ \\ / @ /_/ @ @@ 222 LATIN CAPITAL LETTER THORN __ @ / /_ @ / __ \\@ / ____/@ /_/ @ @@ 223 LATIN SMALL LETTER SHARP S ____ @ / __ \\@ / / / /@ / /_| | @ / //__/ @ /_/ @@ 224 LATIN SMALL LETTER A WITH GRAVE __ @ __\\_\\_@ / __ \`/@ / /_/ / @ \\__,_/ @ @@ 225 LATIN SMALL LETTER A WITH ACUTE __ @ __/_/_@ / __ \`/@ / /_/ / @ \\__,_/ @ @@ 226 LATIN SMALL LETTER A WITH CIRCUMFLEX //| @ _|/||_@ / __ \`/@ / /_/ / @ \\__,_/ @ @@ 227 LATIN SMALL LETTER A WITH TILDE /\\//@ _//\\/_@ / __ \`/@ / /_/ / @ \\__,_/ @ @@ 228 LATIN SMALL LETTER A WITH DIAERESIS _ _ @ (_)_(_)@ / __ \`/ @ / /_/ / @ \\__,_/ @ @@ 229 LATIN SMALL LETTER A WITH RING ABOVE __ @ __(())@ / __ \`/@ / /_/ / @ \\__,_/ @ @@ 230 LATIN SMALL LETTER AE @ ____ ___ @ / __ \` _ \\@ / /_/ __/@ \\__,_____/ @ @@ 231 LATIN SMALL LETTER C WITH CEDILLA @ _____@ / ___/@ / /__ @ \\___/ @ /_) @@ 232 LATIN SMALL LETTER E WITH GRAVE __ @ _\\_\\@ / _ \\@ / __/@ \\___/ @ @@ 233 LATIN SMALL LETTER E WITH ACUTE __@ _/_/@ / _ \\@ / __/@ \\___/ @ @@ 234 LATIN SMALL LETTER E WITH CIRCUMFLEX //|@ _|/||@ / _ \\ @ / __/ @ \\___/ @ @@ 235 LATIN SMALL LETTER E WITH DIAERESIS _ _ @ (_)(_)@ / _ \\ @ / __/ @ \\___/ @ @@ 236 LATIN SMALL LETTER I WITH GRAVE __ @ \\_\\@ / / @ / / @ /_/ @ @@ 237 LATIN SMALL LETTER I WITH ACUTE __@ /_/@ / / @ / / @ /_/ @ @@ 238 LATIN SMALL LETTER I WITH CIRCUMFLEX //|@ |/||@ / / @ / / @ /_/ @ @@ 239 LATIN SMALL LETTER I WITH DIAERESIS _ _ @ (_)_(_)@ / / @ / / @ /_/ @ @@ 240 LATIN SMALL LETTER ETH || @ =||=@ ___ || @ / __\` | @ \\____/ @ @@ 241 LATIN SMALL LETTER N WITH TILDE /\\//@ _//\\/ @ / __ \\ @ / / / / @ /_/ /_/ @ @@ 242 LATIN SMALL LETTER O WITH GRAVE __ @ __\\_\\@ / __ \\@ / /_/ /@ \\____/ @ @@ 243 LATIN SMALL LETTER O WITH ACUTE __@ __/_/@ / __ \\@ / /_/ /@ \\____/ @ @@ 244 LATIN SMALL LETTER O WITH CIRCUMFLEX //|@ _|/||@ / __ \\@ / /_/ /@ \\____/ @ @@ 245 LATIN SMALL LETTER O WITH TILDE /\\//@ _//\\/ @ / __ \\ @ / /_/ / @ \\____/ @ @@ 246 LATIN SMALL LETTER O WITH DIAERESIS _ _ @ (_)_(_)@ / __ \\ @ / /_/ / @ \\____/ @ @@ 247 DIVISION SIGN @ _ @ __(_)_@ /_____/@ (_) @ @@ 248 LATIN SMALL LETTER O WITH STROKE @ _____ @ / _// \\@ / //// /@ \\_//__/ @ @@ 249 LATIN SMALL LETTER U WITH GRAVE __ @ __\\_\\_@ / / / /@ / /_/ / @ \\__,_/ @ @@ 250 LATIN SMALL LETTER U WITH ACUTE __ @ __/_/_@ / / / /@ / /_/ / @ \\__,_/ @ @@ 251 LATIN SMALL LETTER U WITH CIRCUMFLEX //| @ _|/||_@ / / / /@ / /_/ / @ \\__,_/ @ @@ 252 LATIN SMALL LETTER U WITH DIAERESIS _ _ @ (_) (_)@ / / / / @ / /_/ / @ \\__,_/ @ @@ 253 LATIN SMALL LETTER Y WITH ACUTE __ @ __/_/_@ / / / /@ / /_/ / @ \\__, / @ /____/ @@ 254 LATIN SMALL LETTER THORN __ @ / /_ @ / __ \\@ / /_/ /@ / .___/ @ /_/ @@ 255 LATIN SMALL LETTER Y WITH DIAERESIS _ _ @ (_) (_)@ / / / / @ / /_/ / @ \\__, / @ /____/ @@ `; } }); // src/utils.ts function createSpacing(text, spacing) { return text.replace(/.(?=.)/g, `$&${" ".repeat(spacing)}`); } function replaceText(text, index, character) { return text.substring(0, index) + character + text.substring(index + character.length); } function getRandomCharacter(characterSet) { return characterSet[Math.floor(Math.random() * characterSet.length)]; } function replaceNonWhitespaceWithRandom(string, characterSet) { return string.split("").map((char) => /\s/.test(char) ? char : getRandomCharacter(characterSet)).join(""); } // src/verticalFrames.ts function createVerticalAnimationFrames({ asciiText, animationDirection, animationCharacters, animationCharacterSpacing }) { return asciiText.reduce( (result, textLine, index) => { if (index === 0) return result; const prevFrame = (result == null ? void 0 : result[result.length - 1]) ? [...result[result.length - 1]] : void 0; if (!prevFrame) return result; const firstLineHasChar = /\S/.test(prevFrame[index - 1]); const lastindex = prevFrame.length - index; const lastLineHasChar = /\S/.test(prevFrame[lastindex]); let newFrame = [...prevFrame]; if (firstLineHasChar && (animationDirection === "up" || animationDirection === "vertical")) { if (prevFrame == null ? void 0 : prevFrame[index]) { prevFrame[index] = replaceNonWhitespaceWithRandom( prevFrame[index], createSpacing(animationCharacters, animationCharacterSpacing) ); } if (prevFrame == null ? void 0 : prevFrame[index - 1]) { prevFrame[index - 1] = " ".repeat(textLine.length); } if (newFrame[index]) { newFrame[index] = replaceNonWhitespaceWithRandom( newFrame[index], animationCharacters ); } } if (lastLineHasChar && (animationDirection === "down" || animationDirection === "vertical")) { if (prevFrame == null ? void 0 : prevFrame[lastindex]) { prevFrame[lastindex] = replaceNonWhitespaceWithRandom( prevFrame[lastindex], createSpacing(animationCharacters, animationCharacterSpacing) ); } if (prevFrame == null ? void 0 : prevFrame[lastindex + 1]) { prevFrame[lastindex + 1] = " ".repeat(textLine.length); } if (newFrame == null ? void 0 : newFrame[lastindex]) { newFrame[lastindex] = replaceNonWhitespaceWithRandom( newFrame[lastindex], animationCharacters ); } } if (firstLineHasChar || lastLineHasChar) { result.push(newFrame, prevFrame); } if (index === asciiText.length - 1 && animationDirection === "up") { const lastFrame = [...prevFrame]; lastFrame[lastFrame.length - 1] = " ".repeat( lastFrame[lastFrame.length - 1].length ); result.push(lastFrame); } if (index === asciiText.length - 1 && animationDirection === "down") { const nextFrame = [...prevFrame]; nextFrame[newFrame.length - index] = " ".repeat( nextFrame[newFrame.length - index].length ); result.push(nextFrame); const nextFrame2 = [...nextFrame]; const hasChar = /\S/.test(nextFrame2[0]); if (!hasChar) return result; nextFrame2[0] = replaceNonWhitespaceWithRandom( nextFrame2[0], createSpacing(animationCharacters, animationCharacterSpacing) ); result.push(nextFrame2); const nextFrame3 = [...nextFrame2]; if (!/\S/.test(nextFrame3[0])) return result; nextFrame3[0] = replaceNonWhitespaceWithRandom( nextFrame3[0], createSpacing(animationCharacters, animationCharacterSpacing) ); result.push(nextFrame3); const nextFrame4 = [...nextFrame3]; if (!/\S/.test(nextFrame4[0])) return result; nextFrame4[0] = " ".repeat(nextFrame4[0].length); result.push(nextFrame4); } if (index === asciiText.length - 1 && animationDirection === "up") ; return result; }, [[...asciiText]] ); } // src/horizontalFrames.ts var CENTER_Y = 1; function createHorizontalAnimationFrames({ asciiText, animationDirection, animationCharacters }) { const newFrames = [[...structuredClone(asciiText)]]; const frameStringLength = asciiText[0].length / (animationDirection === "left" || animationDirection === "right" ? 1 : 2); for (let index = 0; index < frameStringLength; index++) { if (index === 0) { newFrames.push(asciiText); continue; } const newFrame = newFrames[index].map((item, index2, array) => { const firstCharIndex = item.search(/\S/); const lastCharIndex = item.search(/\S(?!.*\S)/); if (firstCharIndex === -1 || lastCharIndex === -1) return item; const animationCharacterOffset = index2 > CENTER_Y ? -1 : 1; if (animationDirection === "left" || animationDirection === "horizontal") { item = replaceText(item, firstCharIndex, " "); } if (animationDirection === "right" || animationDirection === "horizontal") { item = replaceText(item, lastCharIndex, " "); } if (lastCharIndex - firstCharIndex <= 2) return item; if (animationDirection === "left" || animationDirection === "horizontal") { const animationChar = getRandomCharacter(animationCharacters); array[index2 + animationCharacterOffset] = replaceText( array[index2 + animationCharacterOffset], firstCharIndex + 1, animationChar ); } return item; }); newFrames.push(newFrame); } return newFrames; } // src/createFrames.ts function createFrames(_0) { return __async(this, arguments, function* ({ asciiText, animationDirection, animationCharacters, animationCharacterSpacing, fadeInOnly = false, fadeOutOnly = false }) { try { if (animationDirection === "down" || animationDirection === "up" || animationDirection === "vertical") { const verticalFrames = createVerticalAnimationFrames({ asciiText, animationDirection, animationCharacters, animationCharacterSpacing }); if (fadeOutOnly) return verticalFrames; const verticalFramesReversed = structuredClone(verticalFrames).reverse(); if (fadeInOnly) return verticalFramesReversed; const verticalFramesLoop = verticalFramesReversed.concat(verticalFrames); return verticalFramesLoop; } const horizontalFrames = createHorizontalAnimationFrames({ asciiText, animationDirection, animationCharacters, animationCharacterSpacing }); if (fadeInOnly) return structuredClone(horizontalFrames).reverse(); const horizontalFramesReversed = structuredClone(horizontalFrames).reverse(); if (fadeOutOnly) return horizontalFrames; const horizontalFramesLoop = horizontalFramesReversed.concat(horizontalFrames); return horizontalFramesLoop; } catch (error) { throw error + " @createFrames"; } }); } var DEFAULT_FONT = "Slant"; function createAsciiText(text, font) { return __async(this, null, function* () { const fontImport = !font ? (yield Promise.resolve().then(() => (init_Slant(), Slant_exports))).default : ""; figlet.parseFont(DEFAULT_FONT, font || fontImport); const createFigletText = (textItem) => __async(this, null, function* () { return yield new Promise((resolve, reject) => { figlet.text( textItem, { font: DEFAULT_FONT }, (err, data) => { if (err) reject("Failed to load font"); if (!data) reject("No ASCII text generated"); else resolve(data.split("\n")); } ); }); }); const asciiText = []; try { for (var iter = __forAwait(Array.isArray(text) ? text : [text]), more, temp, error; more = !(temp = yield iter.next()).done; more = false) { const textItem = temp.value; const figletText = yield createFigletText(textItem); asciiText.push(figletText); } } catch (temp) { error = [temp]; } finally { try { more && (temp = iter.return) && (yield temp.call(iter)); } finally { if (error) throw error[0]; } } return asciiText; }); } // src/useAsciiText.ts var CHARACTER_SET = "/*+#"; function useAsciiText({ animationCharacters = CHARACTER_SET, animationCharacterSpacing = 1, animationDelay = 500, animationDirection = "horizontal", animationInterval = 1e3, animationIteration = 1, animationLoop = true, animationSpeed = 20, fadeInOnly = false, fadeOutOnly = false, font, isAnimated = true, isPaused = false, text = ["React", "ASCII", "Text"] }) { const outputRef = useRef(); const asciiTextRef = useRef({ animationFrameId: 0, animationIndex: 0, animationIterationCount: 1, animations: null, frameId: 0, frameIndex: 0, isPaused: false, isTimeout: false, previousTimeStamp: 0, timeoutId: 0 }); const render = (timeStamp) => __async(this, null, function* () { const { animations, isPaused: isPaused2, isTimeout, previousTimeStamp } = asciiTextRef.current; if (!outputRef.current || !(animations == null ? void 0 : animations.length) || isPaused2 || isTimeout) return; const elapsedTimeSinceLastRender = timeStamp - previousTimeStamp; if (elapsedTimeSinceLastRender > animationSpeed) { const { animationIndex, animationIterationCount, animations: animations2, frameId, frameIndex } = asciiTextRef.current; const frameData = animations2 == null ? void 0 : animations2[animationIndex]; if (!frameData || isTimeout) return; const isFirstFrame = frameIndex === 0; const isLastFrame = frameIndex === frameData.length - 1; const isLastAnimation = animationIndex === animations2.length - 1; outputRef.current.textContent = frameData[frameIndex].join("\n"); if (!animationLoop && animationIterationCount === animationIteration && isLastAnimation && isLastFrame) { cancelAnimationFrame(frameId); return; } asciiTextRef.current.previousTimeStamp = timeStamp; const isMidFrame = frameIndex === Math.floor(frameData.length / 2); const isFadeIn = fadeInOnly || fadeOutOnly; const delay = (time) => __async(this, null, function* () { yield new Promise((resolve) => { asciiTextRef.current.isTimeout = true; setTimeout(resolve, time); }); asciiTextRef.current.isTimeout = false; }); if (isFadeIn && isLastFrame && animationDelay) { yield delay(animationDelay); } if (isFadeIn && isFirstFrame && animationInterval) { yield delay(animationInterval); } if (!isFadeIn && isMidFrame && animationDelay) { yield delay(animationDelay); } if (!isFadeIn && isLastFrame && animationInterval) { yield delay(animationInterval); } if (isLastFrame) { asciiTextRef.current.frameIndex = 0; asciiTextRef.current.animationIndex++; asciiTextRef.current.animationIterationCount++; } else { asciiTextRef.current.frameIndex++; } if (animationLoop && asciiTextRef.current.animationIndex === animations2.length) { asciiTextRef.current.animationIndex = 0; } } asciiTextRef.current.frameId = requestAnimationFrame(render); }); useEffect(() => { if (isPaused) { asciiTextRef.current.isPaused = true; cancelAnimationFrame(asciiTextRef.current.frameId); } else { asciiTextRef.current.isPaused = false; asciiTextRef.current.frameId = requestAnimationFrame(render); } }, [isPaused, asciiTextRef]); const init = useCallback(() => __async(this, null, function* () { try { const asciiText = yield createAsciiText(text, font); if (!isAnimated && outputRef.current) { outputRef.current.textContent = asciiText[0].join("\n"); } else if (asciiText.length === (Array.isArray(text) ? text : [text]).length) { asciiTextRef.current.animations = yield Promise.all([ ...asciiText.map( (text2) => __async(this, null, function* () { return yield createFrames({ asciiText: text2, animationDirection, animationCharacters, animationCharacterSpacing, fadeInOnly, fadeOutOnly }); }) ) ]); requestAnimationFrame(render); } } catch (error) { console.error({ error }); } }), []); useEffect(() => { init(); }, [text, init]); return outputRef; } // src/fonts/1Row.js var Row_default = `flf2a$ 2 1 8 -1 13 1row font by unknown ======================= -> Conversion to FigLet font by MEPH. (Part of ASCII Editor Service Pack I) (http://studenten.freepage.de/meph/ascii/editor/_index.htm) -> Defined: ASCII code alphanumeric -> Uppercase characters only. Was a part of a '1row' font collection. Author unknown. $@ $@@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ (\\) @ @@ '| @ @@ ^/_ @ @@ -} @ @@ +| @ @@ ;~ @ @@ (o @ @@ "/ @ @@ {} @ @@ "| @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ /\\ @ @@ ]3 @ @@ ( @ @@ |) @ @@ [- @ @@ /= @ @@ (_, @ @@ |-| @ @@ | @ @@ _T @ @@ /< @ @@ |_ @ @@ |\\/| @ @@ |\\| @ @@ () @ @@ |^ @ @@ ()_ @ @@ /? @ @@ _\\~ @ @@ ~|~ @ @@ |_| @ @@ \\/ @ @@ \\/\\/ @ @@ >< @ @@ \`/ @ @@ ~/_ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ /\\ @ @@ ]3 @ @@ ( @ @@ |) @ @@ [- @ @@ /= @ @@ (_, @ @@ |-| @ @@ | @ @@ _T @ @@ /< @ @@ |_ @ @@ |\\/| @ @@ |\\| @ @@ () @ @@ |^ @ @@ ()_ @ @@ /? @ @@ _\\~ @ @@ ~|~ @ @@ |_| @ @@ \\/ @ @@ \\/\\/ @ @@ >< @ @@ \`/ @ @@ ~/_ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ `; // src/fonts/3-D.js var D_default = `flf2a$ 8 8 20 -1 6 3-D font created by Daniel Henninger <dahennin@eos.ncsu.edu> --- Font modified June 17, 2007 by patorjk This was to widen the space character. $ $@ $ $@ $ $@ $ $@ $ $@ $ $@ $ $@ $ $@@ **@ /**@ /**@ /**@ /**@ // @ **@ // @@ * *@ /* /*@ / / @ @ @ @ @ @@ @ ** ** @ ************@ ///**////**/ @ /** /** @ ************@ ///**////**/ @ // // @@ * @ *****@ /*/*/ @ /*****@ ///*/*@ *****@ ///*/ @ / @@ @ ** ** @ // ** @ ** @ ** @ ** @ ** ** @ // // @@ ** @ */ * @ / ** @ */ * *@ * / * @ /* /* @ / **** *@ //// / @@ **@ //*@ / @ @ @ @ @ @@ **@ ** @ ** @ /** @ /** @ //** @ //**@ // @@ ** @ //** @ //**@ /**@ /**@ ** @ ** @ // @@ ** @ ** /** ** @ //** /** ** @ **************@ ///**//**//**/ @ ** /** //** @ // /** // @ // @@ @ * @ /* @ *********@ /////*/// @ /* @ / @ @@ @ @ @ @ @ **@ //*@ / @@ @ @ @ *****@ ///// @ @ @ @@ @ @ @ @ @ **@ /**@ // @@ **@ ** @ ** @ ** @ ** @ ** @ ** @ // @@ **** @ *///**@ /* */*@ /* * /*@ /** /*@ /* /*@ / **** @ //// @@ ** @ *** @ //** @ /** @ /** @ /** @ ****@ //// @@ **** @ */// *@ / /*@ *** @ *// @ * @ /******@ ////// @@ **** @ */// *@ / /*@ *** @ /// *@ * /*@ / **** @ //// @@ ** @ */* @ * /* @ ******@ /////* @ /* @ /* @ / @@ ******@ /*//// @ /***** @ ///// *@ /*@ * /*@ / **** @ //// @@ **** @ */// *@ /* / @ /***** @ /*/// *@ /* /*@ / **** @ //// @@ ******@ //////*@ /*@ * @ * @ * @ * @ / @@ **** @ */// *@ /* /*@ / **** @ */// *@ /* /*@ / **** @ //// @@ **** @ */// *@ /* /*@ / **** @ ///* @ * @ * @ / @@ @ @ @ @ **@ // @ **@ // @@ @ @ @ **@ // @ **@ //*@ / @@ **@ **/ @ **/ @ **/ @ // ** @ // ** @ // **@ // @@ @ @ ******@ ////// @ ******@ ////// @ @ @@ ** @ // ** @ // ** @ // **@ **/ @ **/ @ **/ @ // @@ **** @ **//**@ /** /**@ // ** @ ** @ // @ ** @ // @@ **** @ */// *@ /* **/*@ /*/* /*@ /*/ ** @ /* // @ / *****@ ///// @@ ** @ **** @ **//** @ ** //** @ **********@ /**//////**@ /** /**@ // // @@ ****** @ /*////** @ /* /** @ /****** @ /*//// **@ /* /**@ /******* @ /////// @@ ****** @ **////**@ ** // @ /** @ /** @ //** **@ //****** @ ////// @@ ******* @ /**////** @ /** /**@ /** /**@ /** /**@ /** ** @ /******* @ /////// @@ ********@ /**///// @ /** @ /******* @ /**//// @ /** @ /********@ //////// @@ ********@ /**///// @ /** @ /******* @ /**//// @ /** @ /** @ // @@ ******** @ **//////**@ ** // @ /** @ /** *****@ //** ////**@ //******** @ //////// @@ ** **@ /** /**@ /** /**@ /**********@ /**//////**@ /** /**@ /** /**@ // // @@ **@ /**@ /**@ /**@ /**@ /**@ /**@ // @@ **@ /**@ /**@ /**@ /**@ ** /**@ //***** @ ///// @@ ** **@ /** ** @ /** ** @ /**** @ /**/** @ /**//** @ /** //**@ // // @@ ** @ /** @ /** @ /** @ /** @ /** @ /********@ //////// @@ **** ****@ /**/** **/**@ /**//** ** /**@ /** //*** /**@ /** //* /**@ /** / /**@ /** /**@ // // @@ **** **@ /**/** /**@ /**//** /**@ /** //** /**@ /** //**/**@ /** //****@ /** //***@ // /// @@ ******* @ **/////** @ ** //**@ /** /**@ /** /**@ //** ** @ //******* @ /////// @@ ******* @ /**////**@ /** /**@ /******* @ /**//// @ /** @ /** @ // @@ ******* @ **/////** @ ** //** @ /** /** @ /** **/** @ //** // ** @ //******* **@ /////// // @@ ******* @ /**////** @ /** /** @ /******* @ /**///** @ /** //** @ /** //**@ // // @@ ********@ **////// @ /** @ /*********@ ////////**@ /**@ ******** @ //////// @@ **********@ /////**/// @ /** @ /** @ /** @ /** @ /** @ // @@ ** **@ /** /**@ /** /**@ /** /**@ /** /**@ /** /**@ //******* @ /////// @@ ** **@ /** /**@ /** /**@ //** ** @ //** ** @ //**** @ //** @ // @@ ** **@ /** /**@ /** * /**@ /** *** /**@ /** **/**/**@ /**** //****@ /**/ ///**@ // // @@ ** **@ //** ** @ //** ** @ //*** @ **/** @ ** //** @ ** //**@ // // @@ ** **@ //** ** @ //**** @ //** @ /** @ /** @ /** @ // @@ ********@ //////** @ ** @ ** @ ** @ ** @ ********@ //////// @@ *****@ /**// @ /** @ /** @ /** @ /** @ /*****@ ///// @@ ** @ //** @ //** @ //** @ //** @ //** @ //**@ // @@ *****@ ////**@ /**@ /**@ /**@ /**@ *****@ ///// @@ ** @ **/ ** @ ** // **@ // // @ @ @ @ @@ @ @ @ @ @ @ *****@ ///// @@ **@ /* @ / @ @ @ @ @ @@ @ @ ****** @ //////** @ ******* @ **////** @ //********@ //////// @@ ** @ /** @ /** @ /****** @ /**///**@ /** /**@ /****** @ ///// @@ @ @ ***** @ **///**@ /** // @ /** **@ //***** @ ///// @@ **@ /**@ /**@ ******@ **///**@ /** /**@ //******@ ////// @@ @ @ ***** @ **///**@ /*******@ /**//// @ //******@ ////// @@ ****@ /**/ @ ******@ ///**/ @ /** @ /** @ /** @ // @@ @ ***** @ **///**@ /** /**@ //******@ /////**@ ***** @ ///// @@ ** @ /** @ /** @ /****** @ /**///**@ /** /**@ /** /**@ // // @@ **@ // @ **@ /**@ /**@ /**@ /**@ // @@ **@ // @ **@ /**@ /**@ **/**@ //*** @ /// @@ ** @ /** @ /** **@ /** ** @ /**** @ /**/** @ /**//**@ // // @@ **@ /**@ /**@ /**@ /**@ /**@ ***@ /// @@ @ @ ********** @ //**//**//**@ /** /** /**@ /** /** /**@ *** /** /**@ /// // // @@ @ @ ******* @ //**///**@ /** /**@ /** /**@ *** /**@ /// // @@ @ @ ****** @ **////**@ /** /**@ /** /**@ //****** @ ////// @@ @ ****** @ /**///**@ /** /**@ /****** @ /**/// @ /** @ // @@ @ **** @ **//** @ /** /** @ //***** @ ////** @ /***@ /// @@ @ @ ******@ //**//*@ /** / @ /** @ /*** @ /// @@ @ @ ******@ **//// @ //***** @ /////**@ ****** @ ////// @@ ** @ /** @ ******@ ///**/ @ /** @ /** @ //** @ // @@ @ @ ** **@ /** /**@ /** /**@ /** /**@ //******@ ////// @@ @ @ ** **@ /** /**@ //** /** @ //**** @ //** @ // @@ @ @ *** **@ //** * /**@ /** ***/**@ /****/****@ ***/ ///**@ /// /// @@ @ @ ** **@ //** ** @ //*** @ **/** @ ** //**@ // // @@ @ ** **@ //** ** @ //*** @ /** @ ** @ ** @ // @@ @ @ ******@ ////** @ ** @ ** @ ******@ ////// @@ ***@ **/ @ /** @ *** @ ///** @ /** @ //***@ /// @@ *@ /*@ /*@ / @ *@ /*@ /*@ / @@ *** @ ///** @ /** @ //***@ **/ @ /** @ *** @ /// @@ ** *** @ //***//**@ /// // @ @ @ @ @ @@ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @@ `; // src/fonts/3D Diagonal.js var D_Diagonal_default = `flf2a$ 16 15 19 63 20 0 24511 0 Author : nabis, LG Beard, Markus Gebhard and others Date : 2004/8/3 9:50:08 Version: 1.0 ------------------------------------------------- ------------------------------------------------- This font has been created using JavE's FIGlet font export assistant. Have a look at: http://www.jave.de Permission is hereby given to modify this font, as long as the modifier's name is placed on a comment line. --- Modified June 17, 2007 by Patrick Gillespie (patorjk@gmail.com) - Widened the space character. Modified 2012-06 by Patrick Gillespie (patorjk@gmail.com) - Updated single character FIGchars to have an even width - Added the 0xCA0 character. $ $# $ $# $ $# $ $# $ $# $ $# $ $# $ $# $ $# $ $# $ $# $ $# $ $# $ $# $ $# $ $## ,---, # ,\`--.' | # | : : # ' ' ; # | | | # ' : ; # | | ' # ' : | # ; | ; # \`---'. | # \`--..\`; # .--,_ # | |\`. # \`-- -\`, ; # '---\`" # ## ___ ___ # / ./ .\\ # \\_ ;\\_ ; | # / ,/ ," # --' --' # # # # # # # # # # # ## ## # # # # # # # # # # # # # # ## $# # # # # # # # # # # # # # # ## # ___ ,--, # / .\\ / .\`| # \\ ; | /' / ; # \`--" / / .' # / / ./ # / ./ / # / / / # / / / # ; / / ___ # ./__; / / .\\ # | : / \\ ; | # ; |/ \`--" # \`---' # # ## &# # # # # # # # # # # # # # # ## ,---, # ,\`--.' | # | : : # | | ' # ' : | # ; |.' # '---' # # # # # # # # # ## # .-''-,--. # .\` \\ \\ # ; \\.. \\ # \` -'. /'' / # : / \\/___/ # | : / # ; | | # . ' . # | : \\ ___ # : \\ /\\ \\ # . -,\` \\,, \\ # ; /\`\` / # \`. / / # \`-,,-'--' # ## # .--,-\`\`-. # / / '. # / ../ ; # \\ \`\`\\ .\`- ' # \\___\\/ \\ : # \\ : | # | | ; # . \` . # ___ / : | # / /\\ / : # / ,,/ ',- . # \\ ''\\ ; # \\ \\ .' # \`--\`-,,-' # ## *# # # # # # # # # # # # # # # ## +# # # # # # # # # # # # # # # ## # # # # # # # # # # # ___ # / .\\ # \\_ ; | # / ," # '--' ## # # # # ,---,. # ,' .' | # ,---.' , # | | | # : : .' # : |.' # \`---' # # # # # ## # # # # # # # # # # # ___ # / .\\ # \\ ; | # \`--" # ## # # ,--, # / .\`| # /' / ; # / / .' # / / ./ # / ./ / # / / / # / / / # ; / / # ./__; / # | : / # ; |/ # \`---' # ## # # ,----.. # / / \\ # / . : # . / ;. \\ # . ; / \` ; # ; | ; \\ ; | # | : | ; | ' # . | ' ' ' : # ' ; \\; / | # \\ \\ ', / # ; : / # \\ \\ .' # \`---\` # ## # # ,---, # ,\`--.' | # / / : # : |.' ' # \`----': | # ' ' ; # | | | # ' : ; # | | ' # ' : | # ; |.' # '---' # # ## # # ,----, # .' .' \\ # ,----,' | # | : . ; # ; |.' / # \`----'/ ; # / ; / # ; / /-, # / / /.\`| # ./__; : # | : .' # ; | .' # \`---' # ## # .--,-\`\`-. # / / '. # / ../ ; # \\ \`\`\\ .\`- ' # \\___\\/ \\ : # \\ : | # / / / # \\ \\ \\ # ___ / : | # / /\\ / : # / ,,/ ',- . # \\ ''\\ ; # \\ \\ .' # \`--\`-,,-' # ## # ,--, # ,--.'| # ,--, | : # ,---.'| : ' # ; : | | ; # | | : _' | # : : |.' | # | ' ' ; : # \\ \\ .'. | # \`---\`: | ' # ' ; | # | : ; # ' ,/ # '--' # ## ,----,. # ,' ,' | # ,' .' | # ,----.' .' # | | .' # : : |--, # : | ;.' \\ # | | | # \`----'.'\\ ; # __ \\ . | # / /\\/ / : # / ,,/ ',- . # \\ ''\\ ; # \\ \\ .' # \`--\`-,-' # ## # # # ,---. # / \\ # / / ' # . ' / # ' / ; # | : \\ # ; | \`\`. # ' ; \\ # ' | .\\ | # | : '; : # \\ \\ / # \`---\`--\` # ## ,----, # .' .\`| # .' .' ; # ,---, ' .' # | : ./ # ; | .' / # \`---' / ; # / ; / # ; / / # / / / # ./__; / # | : / # ; |/ # \`---' # # ## ,---.-, # ' ,' '. # / / \\ # . ; ,/. : # ' | | : ; # ' | ./ : # | : , # \\ \\ / # ; , '\\ # / / \\ # . ; ,/. : # ' | | : ; # ' | ./ : # | : / # \\ \\ .' # \`---\`-' ## # ,---.-, # ' ,' '. # / / \\ # . ; ,/. : # ' | | : ; # ' | ./ : # | : , # \\ \\ | # \`---\`--- ; # | | | # ' : ; # | | ' # ; |.' # '---' # ## # ___ # / .\\ # \\ ; | # \`--" # # # # # # ___ # / .\\ # \\ ; | # \`--" # # ## # ___ # / .\\ # \\ ; | # \`--" # # # # # ___ # / .\\ # \\_ ; | # / ," # '--' # # ## # # # ,--. # / /| # ' / ' # / / / # / / , # \\ '\\ \\ # \\ \\ ' # \\ . | # \\__\\. # # # # ## # # # ,---,. ,---,# ,' .' |,' .'|# ,---.' ,---.' |# | | | | ;# : : .: : .'# : |.' : |.' # \`---' \`---' # # # # # # ## # # # .--, # |\\ \\ # \` \\ \` # \\ \\ \\ # , \\ \\ # / /\` / # \` / / # | . / # ./__/ # # # # ## _.--,-\`\`\`-. # / / '. # / ../ ; # \\ \`\`\\ .\`\`- '# \\ ___\\/ \\ :# \\ : |# | ; . # ; ; : # / : : # \`---'. | # \`--..\`; # .--,_ # | |\`. # \`-- -\`, ; # '---\`" # ## @# # # # # # # # # # # # # # # ## # # ,---, # ' .' \\ # / ; '. # : : \\ # : | /\\ \\ # | : ' ;. : # | | ;/ \\ \\ # ' : | \\ \\ ,' # | | ' '--' # | : : # | | ,' # \`--'' # # ## # # ,---,. # ,' .' \\ # ,---.' .' | # | | |: | # : : : / # : | ; # | : \\ # | | . | # ' : '; | # | | | ; # | : / # | | ,' # \`----' # ## # # ,----.. # / / \\ # | : : # . | ;. / # . ; /--\` # ; | ; # | : | # . | '___ # ' ; : .'| # ' | '/ : # | : / # \\ \\ .' # \`---\` # ## # # ,---, # .' .' \`\\ # ,---.' \\ # | | .\`\\ | # : : | ' | # | ' ' ; : # ' | ; . | # | | : | ' # ' : | / ; # | | '\` ,/ # ; : .' # | ,.' # '---' # ## # # ,---,. # ,' .' | # ,---.' | # | | .' # : : |-, # : | ;/| # | : .' # | | |-, # ' : ;/| # | | \\ # | : .' # | | ,' # \`----' # ## # # ,---,. # ,' .' | # ,---.' | # | | .' # : : : # : | |-, # | : ;/| # | | .' # ' : ' # | | | # | : \\ # | | ,' # \`----' # ## # # ,----.. # / / \\ # | : : # . | ;. / # . ; /--\` # ; | ; __ # | : |.' .' # . | '_.' : # ' ; : \\ | # ' | '/ .' # | : / # \\ \\ .' # \`---\` # ## # ,--, # ,--.'| # ,--, | : # ,---.'| : ' # | | : _' | # : : |.' | # | ' ' ; : # ' | .'. | # | | : | ' # ' : | : ; # | | ' ,/ # ; : ;--' # | ,/ # '---' # ## # # ,---, # ,\`--.' | # | : : # : | ' # | : | # ' ' ; # | | | # ' : ; # | | ' # ' : | # ; |.' # '---' # # ## # ,---._ # .-- -.' \\ # | | :# : ; |# : |# | : :# : # | ; |# ___ l # / /\\ J :# / ../ \`..- ,# \\ \\ ; # \\ \\ ,' # "---....--' # ## # ,--. # ,--/ /| # ,---,': / ' # : : '/ / # | ' , # ' | / # | ; ; # : ' \\ # | | ' # ' : |. \\ # | | '_\\.' # ' : | # ; |,' # '-