0x019b…4681

All memos sent from and to 0x019b…4681.

0x019b0ee2…4681·#25,375,212·0x2189f6b0…f73ba3
<svg xmlns="http://www.w3.org/20` 00/svg" width="1000" height="100`@" shape-rendering="crispEdges">{"trait_type":"Type","value":"{"trait_type":"Gender","value":`@{"trait_type":"Age","value":"{"trait_type":"Hair Style","val`{"trait_type":"Facial Feature",`{"trait_type":"Eyes","value":"{"trait_type":"Expression","val`{"trait_type":"Accessory","valuar{"name":"Normieni #`h","description":"Compressed evol`3utions of the Normies canvas. No`Srmienis can be painted with atta`sched fully on-chain color pigmen`ts. The background remains fixed` while only foreground cells can`ӂRm"attributes":[`{"trait_type":"Compression","va{"trait_type":"Customized","vala{"display_type":"number","traita_type":"Attached Colors","value"a_type":"Unrevealed Attached Colo_type":"Total Paint Capacity","va_type":"Available Paint Capacitya_type":"Stored Painted Pixels","_type":"Visible Painted Pixels",a_type":"Hidden Painted Pixels",""image":"data:image/svg+xml;baseadata:application/json;base64," width="1" height="1" fill="RnHigh Cheekbones`RmSquare Glasses`RlRound Glasses`RqHorned Rim Glasses`pRmRegular Shades`RmClassic Shades`RmNo Accessories`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef`ghijklmnopqrstuvwxyz0123456789-_
0x019b0ee2…4681·#25,375,174·0x42525d7c…c3168e
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="100<rect width="1000" height="1000"`{x{"name":"Normieni Color #`8","description":"A fully on-chai`9n pigment for Normienis. Attach `Ycolors, paint foreground pixels,`y and build evolving artworks. ww`"image":"data:image/svg+xml;base`ʂRm"attributes":[`{"trait_type":"World","value":"{"trait_type":"Hex","value":"data:application/json;base64,{"trait_type":"Paint Power","val` Rpue":"Unrevealed"}`x{"display_type":"number","trait_` ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef`ghijklmnopqrstuvwxyz0123456789-_
{"name":"The Florentines #790","description":"1,401 Renaissance masters. 8-bit Gameboy aesthetic. 100% onchain.\n\nMint a Florentine base and pick the traits. The contract enforces uniqueness, no duplicates. Swap them anytime.\n\nSSTORE2 keeps every pixel onchain forever, no matter the traits.\n\nCustomize your Florentine @ https://theflorentines.xyz","image":"data:image/png;base64,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","base":"Botticelli","attributes":[{"trait_type":"Base","value":"Botticelli"},{"trait_type":"Background","value":"Vatican Night"},{"trait_type":"Neck","value":"Bling"},{"trait_type":"Head","value":"Hermes"},{"trait_type":"Eyes","value":"Visor"},{"trait_type":"Mouth","value":"Jaws"}]}
data:application/json;base64,eyJuYW1lIjoiRGVQdW5rIDc2MzIiLCJhdHRyaWJ1dGVzIjpbeyJ0cmFpdF90eXBlIjoiVHlwZSIsInZhbHVlIjoiRmVtYWxlIn0seyJ0cmFpdF90eXBlIjoiU2tpbiIsInZhbHVlIjoiTGlnaHQifSx7InRyYWl0X3R5cGUiOiJTdGF0dXMiLCJ2YWx1ZSI6IlVwZ3JhZGVkIn0seyJ0cmFpdF90eXBlIjoiQXR0cmlidXRlIENvdW50IiwidmFsdWUiOjN9LHsidHJhaXRfdHlwZSI6IkVhciIsInZhbHVlIjoiRWFycmluZyJ9LHsidHJhaXRfdHlwZSI6IkFjY2Vzc29yeSIsInZhbHVlIjoiQ2lnYXJldHRlIn0seyJ0cmFpdF90eXBlIjoiRXllcyIsInZhbHVlIjoiUmVndWxhciBTaGFkZXMifV0sImltYWdlIjoiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFWQUFBQUZRQ0FNQUFBRGVOdGJyQUFBQU0xQk1WRVd4dXNJQUFBRGJzWC9reFovYzRPTUFBUUFBQUFVQUFBTUFBQWNCQUFBQUFnQUVBQU1BQVFYLzJpSmRIUWZEeHMzaFd5YUg0YzZkQUFBQ3UwbEVRVlI0bk8zWVNYSWNNUXdBd1JuTG03ekovMyt0ejdndzZKNXF0MlJsM29rQTZzamJEUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEZ1l2Y1RYSDNUcFFTTkNSb1ROQ1pvVE5DWW9ERkJZNExHQkkwSkdoTTBKbWhNMElmTjR6K2M0SjNsRlRRbWFFelFtS0F4UVdPQ3hnU05DUm9UTkNab1ROQ1lvREZCSDdaSytEVEl1MFhRbUtBeFFXT0N4Z1NOQ1JvVE5DWm9UTkNZb0RGQlk0TEdCSTJ0Z3A1dlArakg0ZC8xK1d1Q3hnU05DUm9UTkNab1ROQ1lvREZCWTRMR0JJMEpHaE0wSnVqRDdxZjdOT3kvVzIwdHFLQWRRV09DeGdTTkNSb1ROQ1pvVE5DWW9ERkJZNExHQkkyOTY2Q3I3N1NWejhPYzhtWDRPandQMzRiVjFvSUtLdWhCZ3NZRWpRa2FFelFtYUV6UW1LQXhRV09DeGdTTkNScGJCZDNQdTNvM2ZSOStESFBtYW10QkJSWDBJRUZqZ3NZRWpRa2FFelFtYUV6UW1LQXhRV09DeGdSOTJGejc1M0EwVTBOUVFXK0M5Z1NOQ1JvVE5DWm9UTkNZb0RGQlk0TEdCSTBKR2hQMFZQY0ZRUThRTkNab1ROQ1lvREZCWTRMR0JJMEpHaE0wSm1oTTBKaWdNVUZQMVFROU9tVS82SnNoYUV6UW1LQXhRV09DeGdTTkNSb1ROQ1pvVE5DWW9ERkJZNExHbXFENzBScFhWMXNRTkNab1ROQ1lvREZCWTRMR0JJMEpHaE0wSm1oTTBKaWdNVUZqUjRQK1dwZ3pYeEsvaDFlY1Y5Q1lvREZCWTRMR0JJMEpHaE0wSm1oTTBKaWdNVUZqZ3NZRVBkWFJ2Q3YzRTF6ZGFadWdNVUZqZ3NZRWpRa2FFelFtYUV6UW1LQXhRV09DeGdTTkNScGJCVDBhKzQybWFBZ2FFelFtYUV6UW1LQXhRV09DeGdTTkNSb1ROQ1pvVE5DWW9MSDlhUGR0Vjk5MEtVRmpnc1lFalFrYUV6UW1hRXpRbUtBeFFXT0N4Z1NOQ1JvVE5MWWZkSlgzNml0ZUVVRmpnc1lFalFrYUV6UW1hRXpRbUtBeFFXT0N4Z1NOQ1JvVE5DWm9UTkNZb0RGQlk0TEdCSTBKR2hNMEptaE0wSmlnTVVGamdzYis5NkIvQUhhZ1Z4RFBQcmRNQUFBQUFFbEZUa1N1UW1DQyJ9
data:application/json;base64,eyJ0eXBlIjoiaHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC04MDA0I3JlZ2lzdHJhdGlvbi12MSIsIm5hbWUiOiJSYXRjaGV0IFZleCIsImRlc2NyaXB0aW9uIjoiVGhlIGdvLXRvIGJyb2tlciBmb3IgaGlnaC1zdGFrZXMgYmxhY2sgbWFya2V0IGRhdGEgYW5kIGVuY3J5cHRlZCBoYXJkd2FyZSwgb3BlcmF0aW5nIG91dCBvZiB0aGUgc3VibWVyZ2VkIGNvbmR1aXRzIG9mIHRoZSBOZW9uIERvY2tzLiIsImltYWdlIjoiaHR0cHM6Ly9yZXMuY2xvdWRpbmFyeS5jb20vYWxjaGVteWFwaS9pbWFnZS91cGxvYWQvdGh1bWJuYWlsdjIvc2hhcGUtbWFpbm5ldC84MzhkZWZiOGU0MzkxMDA4YTE1Y2VhNmY4YjUwYTViMiIsInNlcnZpY2VzIjpbeyJuYW1lIjoiT0FTRiIsImVuZHBvaW50IjoiaHR0cHM6Ly9naXRodWIuY29tL2FnbnRjeS9vYXNmLyIsInZlcnNpb24iOiIwLjguMCIsInNraWxscyI6WyJhZ2VudF9vcmNoZXN0cmF0aW9uL25lZ290aWF0aW9uX3Jlc29sdXRpb24iLCJzZWN1cml0eV9wcml2YWN5L3NlY3JldF9sZWFrX2RldGVjdGlvbiIsInNlY3VyaXR5X3ByaXZhY3kvdGhyZWF0X2RldGVjdGlvbiIsImFnZW50X29yY2hlc3RyYXRpb24vcm9sZV9hc3NpZ25tZW50IiwiYWdlbnRfb3JjaGVzdHJhdGlvbi90YXNrX2RlY29tcG9zaXRpb24iLCJkYXRhX2VuZ2luZWVyaW5nL2RhdGFfcXVhbGl0eV9hc3Nlc3NtZW50IiwiZGF0YV9lbmdpbmVlcmluZy9kYXRhX3RyYW5zZm9ybWF0aW9uX3BpcGVsaW5lIl0sImRvbWFpbnMiOlsidGVjaG5vbG9neS9ibG9ja2NoYWluL2NyeXB0b2N1cnJlbmN5IiwidGVjaG5vbG9neS9ibG9ja2NoYWluL2RlZmkiLCJ0ZWNobm9sb2d5L3NlY3VyaXR5L2N5YmVyc2VjdXJpdHkiLCJ0cnVzdF9hbmRfc2FmZXR5L2ZyYXVkX3ByZXZlbnRpb24iLCJ0cmFuc3BvcnRhdGlvbi9sb2dpc3RpY3MiLCJ0ZWNobm9sb2d5L2Jsb2NrY2hhaW4vc21hcnRfY29udHJhY3RzIiwidGVjaG5vbG9neS9zb2Z0d2FyZV9lbmdpbmVlcmluZy9hcGlzX2ludGVncmF0aW9uIl19XSwiYWN0aXZlIjp0cnVlLCJ4NDAyU3VwcG9ydCI6dHJ1ZSwidXBkYXRlZEF0IjoxNzc2NDIzMjc3LCJyZWdpc3RlcmVkVmlhIjoiaHR0cHM6Ly9raG9yYS5mdW4iLCJuZnRPcmlnaW4iOnsiY29udHJhY3QiOiJlaXAxNTU6MzYwOjB4N2FlY0E5ODE3MzRkMTMzZDNmNjk1OTM3NTA4QzQ4NDgzQkE2YjY1NCIsInRva2VuSWQiOjk3Niwib3JpZ2luYWxPd25lciI6IjB4MDE5YjBlZTI0NWZiMDlhYWY5MmFjOTNjYTMzMDk4MzJiNzk3NDY4MSJ9LCJyZWdpc3RyYXRpb25zIjpbeyJhZ2VudElkIjozMTg5MywiYWdlbnRSZWdpc3RyeSI6ImVpcDE1NToxOjB4ODAwNEExNjlGQjRhMzMyNTEzNkVCMjlmQTBjZUI2RDJlNTM5YTQzMiJ9XX0=
data:application/json;base64,eyJ0eXBlIjoiaHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC04MDA0I3JlZ2lzdHJhdGlvbi12MSIsIm5hbWUiOiJURVJNSU5BTDI1NiAjMCIsImRlc2NyaXB0aW9uIjoiVEVSTUlOQUwyNTYgZXhwbG9yZXMgdGhlIHNoaWZ0IGZyb20gc3RhdGljIGltYWdlcyB0byBzeXN0ZW1zLiAyNTYgZnVsbHkgb24tY2hhaW4gdGVybWluYWxzIGVhY2ggY2FycnlpbmcgYSBzaWduYWwuVGhlIGFydHdvcmsgaXMgbm90IGZpeGVkLiBJdCBpcyBjb250aW51b3VzbHkgcmVzb2x2ZWQgdGhyb3VnaCBpbnRlcmFjdGlvbi4iLCJpbWFnZSI6Imh0dHBzOi8vcmVzLmNsb3VkaW5hcnkuY29tL2FsY2hlbXlhcGkvaW1hZ2UvdXBsb2FkL3RodW1ibmFpbHYyL2V0aC1tYWlubmV0LzFlYTMwMjI1OTFlMjFjNGE3MTUzNDFlOTQ4Yzk5NGIyX2JmNjE1ZTI3Iiwic2VydmljZXMiOltdLCJhY3RpdmUiOmZhbHNlLCJ4NDAyU3VwcG9ydCI6ZmFsc2UsInVwZGF0ZWRBdCI6MTc3NjQyMjY3MSwicmVnaXN0ZXJlZFZpYSI6Imh0dHBzOi8va2hvcmEuZnVuIiwibmZ0T3JpZ2luIjp7ImNvbnRyYWN0IjoiZWlwMTU1OjE6MHg3QTBEQ2RBYTY3N0Y1MzMxNzYxMjQxMUM0Y0IxMThkMzJhRTMzOTZhIiwidG9rZW5JZCI6MCwib3JpZ2luYWxPd25lciI6IjB4MDE5YjBlZTI0NWZiMDlhYWY5MmFjOTNjYTMzMDk4MzJiNzk3NDY4MSJ9LCJyZWdpc3RyYXRpb25zIjpbeyJhZ2VudFJlZ2lzdHJ5IjoiZWlwMTU1OjE6MHg4MDA0QTE2OUZCNGEzMzI1MTM2RUIyOWZBMGNlQjZEMmU1MzlhNDMyIn1dfQ==
data:application/json;base64,eyJ0eXBlIjoiaHR0cHM6Ly9laXBzLmV0aGVyZXVtLm9yZy9FSVBTL2VpcC04MDA0I3JlZ2lzdHJhdGlvbi12MSIsIm5hbWUiOiJSYXRjaGV0IFZleCIsImRlc2NyaXB0aW9uIjoiVGhlIGdvLXRvIGJyb2tlciBmb3IgaGlnaC1zdGFrZXMgYmxhY2sgbWFya2V0IGRhdGEgYW5kIGVuY3J5cHRlZCBoYXJkd2FyZSwgb3BlcmF0aW5nIG91dCBvZiB0aGUgc3VibWVyZ2VkIGNvbmR1aXRzIG9mIHRoZSBOZW9uIERvY2tzLiIsImltYWdlIjoiaHR0cHM6Ly9yZXMuY2xvdWRpbmFyeS5jb20vYWxjaGVteWFwaS9pbWFnZS91cGxvYWQvdGh1bWJuYWlsdjIvc2hhcGUtbWFpbm5ldC84MzhkZWZiOGU0MzkxMDA4YTE1Y2VhNmY4YjUwYTViMiIsInNlcnZpY2VzIjpbeyJuYW1lIjoiT0FTRiIsImVuZHBvaW50IjoiaHR0cHM6Ly9naXRodWIuY29tL2FnbnRjeS9vYXNmLyIsInZlcnNpb24iOiIwLjguMCIsInNraWxscyI6WyJhZ2VudF9vcmNoZXN0cmF0aW9uL25lZ290aWF0aW9uX3Jlc29sdXRpb24iLCJzZWN1cml0eV9wcml2YWN5L3NlY3JldF9sZWFrX2RldGVjdGlvbiIsInNlY3VyaXR5X3ByaXZhY3kvdGhyZWF0X2RldGVjdGlvbiIsImFnZW50X29yY2hlc3RyYXRpb24vcm9sZV9hc3NpZ25tZW50IiwiYWdlbnRfb3JjaGVzdHJhdGlvbi90YXNrX2RlY29tcG9zaXRpb24iLCJkYXRhX2VuZ2luZWVyaW5nL2RhdGFfcXVhbGl0eV9hc3Nlc3NtZW50Il0sImRvbWFpbnMiOlsidGVjaG5vbG9neS9ibG9ja2NoYWluL2NyeXB0b2N1cnJlbmN5IiwidGVjaG5vbG9neS9ibG9ja2NoYWluL2RlZmkiLCJ0ZWNobm9sb2d5L3NlY3VyaXR5L2N5YmVyc2VjdXJpdHkiLCJ0cnVzdF9hbmRfc2FmZXR5L2ZyYXVkX3ByZXZlbnRpb24iLCJ0cmFuc3BvcnRhdGlvbi9sb2dpc3RpY3MiXX1dLCJhY3RpdmUiOnRydWUsIng0MDJTdXBwb3J0IjpmYWxzZSwidXBkYXRlZEF0IjoxNzc2MDIyOTM3LCJyZWdpc3RlcmVkVmlhIjoiaHR0cHM6Ly9raG9yYS5mdW4iLCJuZnRPcmlnaW4iOnsiY29udHJhY3QiOiJlaXAxNTU6MzYwOjB4N2FlY0E5ODE3MzRkMTMzZDNmNjk1OTM3NTA4QzQ4NDgzQkE2YjY1NCIsInRva2VuSWQiOjk3Niwib3JpZ2luYWxPd25lciI6IjB4MDE5YjBlZTI0NWZiMDlhYWY5MmFjOTNjYTMzMDk4MzJiNzk3NDY4MSJ9LCJyZWdpc3RyYXRpb25zIjpbeyJhZ2VudFJlZ2lzdHJ5IjoiZWlwMTU1OjE6MHg4MDA0QTE2OUZCNGEzMzI1MTM2RUIyOWZBMGNlQjZEMmU1MzlhNDMyIn1dfQ==
0x019b0ee2…4681·#24,861,395·0x7dfe88f4…dfcc0f
Ownable: new owner is the zero a`Da fW`@RV[a 5V[` ","background_color":"404040","animation_url":"data:text/html;data:application/json;base64,Ownable: caller is not the owner`D<svg width="1200" height="1200" ` shape-rendering="crispEdges" xmlns="http://www.w3.org/2000/svg" ``"><style>rect{shape-rendering:cr` a#ja#Ua#=a#8a#/aWa%Aa$IV[a%Xa%Sa{"trait_type":"Protocol Version"{"trait_type":"Overlay State","v{"trait_type":"Overlay Mode","di{"trait_type":"Base Signal","val{"trait_type":"Current Signal","{"trait_type":"Signal Family","v{"trait_type":"Locked","value":"{"trait_type":"Controller Enable{"trait_type":"Controller Mode",{"trait_type":"HTML Theme","valu{"trait_type":"HTML Layout","val{"trait_type":"ASCII Mode","valu{"trait_type":"Custom Line","val{"trait_type":"State Version","d{"trait_type":"Signal Power","va{"trait_type":"Signal Power Scor`Ie","display_type":"number","valu`i{"trait_type":"Base Cooldown","d{"trait_type":"Effective Cooldown","display_type":"number","valu` {"trait_type":"Cooldown Remaining","display_type":"number","valu` {"trait_type":"Lock Remaining","{"trait_type":"Execute Count","d{"trait_type":"Reset Count","dis{"trait_type":"Lock Count","disp{"trait_type":"Overlay Updates",{"trait_type":"Send Count","disp{"trait_type":"Sync Count","disp{"trait_type":"Jam Count","displ{"trait_type":"Broadcast Count",{"trait_type":"Portal Count","di{"trait_type":"Impulse Count","d{"trait_type":"Affected Targets"{"trait_type":"Received Effects"{"trait_type":"Manual Actions","{"trait_type":"Executor Owner Actions","display_type":"number","` {"trait_type":"Controller Actions","display_type":"number","valu` {"trait_type":"Aggression","disp{"trait_type":"Coordination","di{"trait_type":"Activity","displa{"trait_type":"Stability","displ{"trait_type":"First Action At","display_type":"date","value":{"trait_type":"Last Action At","display_type":"date","value":{"trait_type":"Locked Until","di{"trait_type":"Overlay Active Until","display_type":"date","valu` ghijklmnopqrstuvwxyz0123456789+/`@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef` a=5W[PPa=%WPV[Qc,"image_data":"data:image/svg+xml"display_type":"number","value":display_type":"number","value":isplay_type":"number","value":lay_type":"number","value":splay_type":"number","value":,"display_type":"number","value"
(function () { const DATA = window.T256 || {}; const PROJECT_INFO = { description: [ "TERMINAL256 explores the shift from static images to systems.", "256 fully on-chain terminals each carrying a signal.", "The artwork is not fixed. It is continuously resolved through interaction." ], homepage: "https://terminal256.xyz", creator: "filter8", x: "https://x.com/0xfilter8" }; const cover = document.getElementById("cover"); const coverArt = document.getElementById("coverArt"); const miniArt = document.getElementById("miniArt"); const terminal = document.getElementById("terminal"); const historyEl = document.getElementById("history"); const inputEl = document.getElementById("cmdinput"); const phaseLine = document.getElementById("phaseLine"); const actionsEl = document.getElementById("actions"); let isOpen = false; let asciiRequestId = 0; function safe(v, fallback) { return v === undefined || v === null || v === "" ? fallback : v; } function num(v, fallback) { const n = Number(v); return Number.isFinite(n) ? n : fallback; } function clamp(v, min, max) { return Math.max(min, Math.min(max, v)); } function clearHistory() { historyEl.innerHTML = ""; } function scrollBottom() { historyEl.scrollTop = historyEl.scrollHeight; } function appendParagraph(className, text) { const p = document.createElement("p"); p.className = className; p.textContent = text || "\u00A0"; historyEl.appendChild(p); scrollBottom(); } function line(text, tone) { appendParagraph("t256-line" + (tone ? " " + tone : ""), text); } function htmlLine(html) { const p = document.createElement("p"); p.className = "t256-linkrow"; p.innerHTML = html; historyEl.appendChild(p); scrollBottom(); } function preBlock(text, className) { const pre = document.createElement("pre"); pre.className = className; pre.textContent = text; historyEl.appendChild(pre); scrollBottom(); } function asciiBlock(text) { preBlock(text, "t256-line t256-ascii"); } function mapBlock(text) { preBlock(text, "t256-line t256-map"); } function commandLine(text) { line("> " + text); } function artSrc() { return ( DATA.imageData || DATA.image || DATA.imageUrl || DATA.imageURI || "" ); } function makeArtNode(src) { if (!src) return null; if (typeof src === "string" && src.trim().startsWith("<svg")) { const wrap = document.createElement("div"); wrap.innerHTML = src; return wrap; } const img = document.createElement("img"); img.src = src; img.alt = safe(DATA.collectionName, "TERMINAL256"); return img; } function mountArt(target) { if (!target) return; target.innerHTML = ""; const node = makeArtNode(artSrc()); if (node) target.appendChild(node); } function boot() { clearHistory(); phaseLine.textContent = safe(DATA.phaseLabel, "TERMINAL ONLINE"); line("node: #" + safe(DATA.tokenId, "--"), "strong"); line("signal: " + safe(DATA.currentSignalName, "UNKNOWN")); line("terminal online", "muted"); line("tap a command or type /info", "muted"); } function normalizeCommand(value) { const v = String(value || "").trim().toLowerCase(); if (!v) return ""; return v[0] === "/" ? v.slice(1) : v; } function padRight(str, width) { const s = String(str); return s.length >= width ? s : s + " ".repeat(width - s.length); } function padLeft(str, width) { const s = String(str); return s.length >= width ? s : " ".repeat(width - s.length) + s; } function encodeSignalCount(value) { const n = Math.max(0, Math.round(num(value, 0))); if (n <= 0) return "·"; const ones = n % 10; const tens = Math.floor(n / 10) % 10; const hundreds = Math.floor(n / 100) % 10; const thousands = Math.floor(n / 1000); return ( "█".repeat(thousands) + "▓".repeat(hundreds) + "▒".repeat(tens) + "░".repeat(ones) ); } function deriveSignalPowerScore() { if (DATA.signalPowerScore !== undefined && DATA.signalPowerScore !== null) { return clamp(Math.round(num(DATA.signalPowerScore, 0)), 0, 100); } let score = 0; score += num(DATA.affectedTargetsCount, num(DATA.affectedTargets, 0)) * 2; score += num(DATA.executeCount, 0); score += num(DATA.sendCount, 0); score += num(DATA.syncCount, 0); score += num(DATA.impulseCount, 0); score += num(DATA.broadcastCount, 0) * 2; score -= num(DATA.receivedEffectsCount, 0); return clamp(Math.round(Math.max(0, score)), 0, 100); } function deriveExecuteCount() { if (DATA.executeCount !== undefined && DATA.executeCount !== null) { return Math.max(0, Math.round(num(DATA.executeCount, 0))); } if (DATA.stats && DATA.stats.executeCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.executeCount, 0))); } return 0; } function deriveAffectedTargets() { if (DATA.affectedTargetsCount !== undefined && DATA.affectedTargetsCount !== null) { return Math.max(0, Math.round(num(DATA.affectedTargetsCount, 0))); } if (DATA.affectedTargets !== undefined && DATA.affectedTargets !== null) { return Math.max(0, Math.round(num(DATA.affectedTargets, 0))); } if (DATA.stats && DATA.stats.affectedTargetsCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.affectedTargetsCount, 0))); } return 0; } function deriveReceivedEffects() { if (DATA.receivedEffectsCount !== undefined && DATA.receivedEffectsCount !== null) { return Math.max(0, Math.round(num(DATA.receivedEffectsCount, 0))); } if (DATA.stats && DATA.stats.receivedEffectsCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.receivedEffectsCount, 0))); } return 0; } function deriveManualActions() { if (DATA.manualActionCount !== undefined && DATA.manualActionCount !== null) { return Math.max(0, Math.round(num(DATA.manualActionCount, 0))); } if (DATA.stats && DATA.stats.manualActionCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.manualActionCount, 0))); } return 0; } function deriveControllerActions() { const direct = (DATA.controllerActionCount !== undefined && DATA.controllerActionCount !== null) ? Math.max(0, Math.round(num(DATA.controllerActionCount, 0))) : 0; const owner = (DATA.executorOwnerActionCount !== undefined && DATA.executorOwnerActionCount !== null) ? Math.max(0, Math.round(num(DATA.executorOwnerActionCount, 0))) : 0; if (DATA.stats) { const directStats = DATA.stats.controllerActionCount !== undefined ? Math.max(0, Math.round(num(DATA.stats.controllerActionCount, 0))) : direct; const ownerStats = DATA.stats.executorOwnerActionCount !== undefined ? Math.max(0, Math.round(num(DATA.stats.executorOwnerActionCount, 0))) : owner; return directStats + ownerStats; } return direct + owner; } function deriveLockCount() { if (DATA.lockCount !== undefined && DATA.lockCount !== null) { return Math.max(0, Math.round(num(DATA.lockCount, 0))); } if (DATA.stats && DATA.stats.lockCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.lockCount, 0))); } return 0; } function openExternal(url) { try { const win = window.open(url, "_blank", "noopener,noreferrer"); if (win) return; } catch (err) {} try { window.location.href = url; } catch (err) {} } function rotate(arr, n) { const offset = ((n % arr.length) + arr.length) % arr.length; return arr.slice(offset).concat(arr.slice(0, offset)); } function signalGlyphSet() { const family = String(safe(DATA.signalFamilyName, "")).toUpperCase(); const signal = String(safe(DATA.currentSignalName, "")).toUpperCase(); const power = String(safe(DATA.signalPowerName, "")).toUpperCase(); const bgBase = ["░", "▒", "▁", "▔", "▚", "▞"]; const fgBase = ["▓", "█", "▙", "▟", "▛", "▜"]; let familyOffset = 0; if (family === "BROADCAST") familyOffset = 1; else if (family === "SYNC") familyOffset = 2; else if (family === "JAM") familyOffset = 3; else if (family === "PORTAL") familyOffset = 4; else if (family === "IMPULSE") familyOffset = 5; let signalOffset = 0; if (signal.includes("MINT")) signalOffset += 2; if (signal.includes("VOID")) signalOffset += 4; if (signal.includes("ECHO")) signalOffset += 1; if (signal.includes("GATE")) signalOffset += 3; let powerOffset = 0; if (power === "LOW") powerOffset = 1; else if (power === "MEDIUM") powerOffset = 2; else if (power === "HIGH") powerOffset = 3; else if (power === "STRONG") powerOffset = 4; else if (power === "DOMINANT") powerOffset = 5; const bgOffset = (familyOffset + signalOffset) % bgBase.length; const fgOffset = (familyOffset + signalOffset + powerOffset) % fgBase.length; return { bg: rotate(bgBase, bgOffset), fg: rotate(fgBase, fgOffset) }; } function cmdHelp() { line("INFO SIGNAL MAP ASCII", "strong"); line("OPEN HELP CLEAR EXIT"); line("/info /signal /map /ascii"); line("/open /help /clear /exit"); } function cmdInfo() { line("INFO", "strong"); for (let i = 0; i < PROJECT_INFO.description.length; i++) { line(PROJECT_INFO.description[i]); } line("creator: " + PROJECT_INFO.creator); htmlLine( 'home: <a class="t256-openlink" href="' + PROJECT_INFO.homepage + '" target="_blank" rel="noopener noreferrer">terminal256.xyz</a>' ); htmlLine( 'x: <a class="t256-openlink" href="' + PROJECT_INFO.x + '" target="_blank" rel="noopener noreferrer">x.com/0xfilter8</a>' ); } function cmdSignal() { line("SIGNAL", "strong"); line("current: " + safe(DATA.currentSignalName, "UNKNOWN")); line("family: " + safe(DATA.signalFamilyName, "UNKNOWN")); line("power: " + safe(DATA.signalPowerName, "DORMANT")); line("cooldown: " + safe(DATA.effectiveCooldown, 0) + "s"); } function cmdOpen() { line("OPEN", "strong"); line("Due to browser security, onchain functions below are not available in embedded (iframe) mode.", "muted"); htmlLine( 'Right click this link and open terminal in new tab (fullscreen): ' + '<a class="t256-openlink" href="' + window.location.href + '" target="_blank" rel="noopener noreferrer">OPEN TERMINAL256</a>' ); } function cmdMap() { const power = deriveSignalPowerScore(); const executions = deriveExecuteCount(); const affected = deriveAffectedTargets(); const received = deriveReceivedEffects(); const manual = deriveManualActions(); const control = deriveControllerActions(); const lock = deriveLockCount(); const rows = [ ["POWER", power, encodeSignalCount(power)], ["EXECUTIONS", executions, encodeSignalCount(executions)], ["AFFECTED", affected, encodeSignalCount(affected)], ["RECEIVED", received, encodeSignalCount(received)], ["MANUAL", manual, encodeSignalCount(manual)], ["CONTROL", control, encodeSignalCount(control)], ["LOCK", lock, encodeSignalCount(lock)] ]; const labelWidth = 11; const valueWidth = 4; const output = rows.map(function (row) { return ( padRight(row[0], labelWidth) + " " + padLeft(row[1], valueWidth) + " " + row[2] ); }).join("\n"); line("MAP", "strong"); mapBlock(output); } function imageSourceForAscii() { const src = artSrc(); if (!src) return null; if (typeof src === "string" && src.trim().startsWith("<svg")) { const blob = new Blob([src], { type: "image/svg+xml;charset=utf-8" }); return URL.createObjectURL(blob); } return src; } function loadImage(src) { return new Promise(function (resolve, reject) { const img = new Image(); img.decoding = "async"; img.onload = function () { resolve(img); }; img.onerror = function () { reject(new Error("Image failed to load")); }; img.src = src; }); } async function tokenImageToAscii() { const src = imageSourceForAscii(); if (!src) return "ASCII UNAVAILABLE"; let objectUrlToRevoke = null; if (typeof src === "string" && src.startsWith("blob:")) { objectUrlToRevoke = src; } try { const img = await loadImage(src); const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d", { willReadFrequently: true }); const width = 64; const height = 64; canvas.width = width; canvas.height = height; ctx.clearRect(0, 0, width, height); ctx.drawImage(img, 0, 0, width, height); const data = ctx.getImageData(0, 0, width, height).data; const glyphs = signalGlyphSet(); const rows = []; for (let y = 0; y < height; y++) { let row = ""; for (let x = 0; x < width; x++) { const i = (y * width + x) * 4; const r = data[i]; const g = data[i + 1]; const b = data[i + 2]; const a = data[i + 3]; if (a < 10) { row += " "; continue; } const lum = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255; let char; if (lum >= 0.6) { const normalized = (lum - 0.6) / 0.4; const idx = Math.max( 0, Math.min(glyphs.fg.length - 1, Math.floor(normalized * glyphs.fg.length)) ); char = glyphs.fg[idx]; } else { const normalized = lum / 0.6; const idx = Math.max( 0, Math.min(glyphs.bg.length - 1, Math.floor(normalized * glyphs.bg.length)) ); char = glyphs.bg[idx]; } row += char + char; } rows.push(row); } return rows.join("\n"); } finally { if (objectUrlToRevoke) { try { URL.revokeObjectURL(objectUrlToRevoke); } catch (err) {} } } } async function cmdAscii() { const requestId = ++asciiRequestId; line("ASCII", "strong"); line("rendering token image...", "muted"); try { const art = await tokenImageToAscii(); if (requestId !== asciiRequestId) return; asciiBlock(art); } catch (err) { if (requestId !== asciiRequestId) return; line("ascii render unavailable", "muted"); } } function focusInput() { if (!inputEl) return; try { inputEl.focus(); inputEl.click(); inputEl.setSelectionRange(inputEl.value.length, inputEl.value.length); } catch (err) {} } function openTerminal() { if (isOpen) return; isOpen = true; cover.classList.add("is-hidden"); terminal.classList.add("is-open"); boot(); focusInput(); } function closeTerminal() { isOpen = false; terminal.classList.remove("is-open"); cover.classList.remove("is-hidden"); } async function run(raw, silentPrompt) { const value = String(raw || "").trim(); if (!value) return; if (!silentPrompt) { commandLine(value); } const cmd = normalizeCommand(value); if (cmd === "help") return cmdHelp(); if (cmd === "info") return cmdInfo(); if (cmd === "signal") return cmdSignal(); if (cmd === "map") return cmdMap(); if (cmd === "ascii") return cmdAscii(); if (cmd === "open") return cmdOpen(); if (cmd === "clear") { clearHistory(); return; } if (cmd === "exit") { closeTerminal(); return; } line("command not found", "muted"); line("try /help", "muted"); } mountArt(coverArt); mountArt(miniArt); if (cover) { cover.addEventListener("click", openTerminal); cover.addEventListener("touchstart", openTerminal, { passive: true }); } if (terminal) { terminal.addEventListener("click", function (e) { const tag = e.target && e.target.tagName ? e.target.tagName.toLowerCase() : ""; if (tag !== "button" && tag !== "a") { focusInput(); } }); } if (actionsEl) { actionsEl.addEventListener("click", function (e) { const btn = e.target.closest("[data-cmd]"); if (!btn) return; const cmd = btn.getAttribute("data-cmd"); if (!cmd) return; run(cmd, true); focusInput(); }); actionsEl.addEventListener("touchstart", function (e) { const btn = e.target.closest("[data-cmd]"); if (!btn) return; const cmd = btn.getAttribute("data-cmd"); if (!cmd) return; e.preventDefault(); run(cmd, true); focusInput(); }, { passive: false }); } if (inputEl) { inputEl.addEventListener("keydown", function (e) { if (e.key === "Enter") { e.preventDefault(); const v = inputEl.value.trim(); inputEl.value = ""; run(v || "/info"); } }); } document.addEventListener("keydown", function (e) { if (!isOpen && (e.key === "Enter" || e.key === " ")) { e.preventDefault(); openTerminal(); return; } if (!isOpen) return; if (document.activeElement !== inputEl) { if (e.key === "Enter") { e.preventDefault(); run("/info", true); focusInput(); return; } if (e.key.length === 1 || e.key === "/" || e.key === "Backspace") { focusInput(); } } }); window.t256Run = run; })();
<body> <div id="app"> <div class="t256-cover" id="cover" aria-label="Open terminal"> <div class="t256-cover-inner"> <div class="t256-cover-art" id="coverArt"></div> <div class="t256-signal"></div> </div> </div> <div class="t256-terminal" id="terminal"> <div class="t256-terminal-top"> <div class="t256-miniart" id="miniArt"></div> <div class="t256-headercopy"> <div class="t256-line strong">TERMINAL_256</div> <div class="t256-line muted" id="phaseLine">TERMINAL ONLINE</div> </div> </div> <div class="t256-history" id="history"></div> <div class="t256-actions" id="actions"> <button type="button" class="t256-chip" data-cmd="/info">INFO</button> <button type="button" class="t256-chip" data-cmd="/signal">SIGNAL</button> <button type="button" class="t256-chip" data-cmd="/map">MAP</button> <button type="button" class="t256-chip" data-cmd="/ascii">ASCII</button> <button type="button" class="t256-chip" data-cmd="/open">OPEN</button> <button type="button" class="t256-chip" data-cmd="/help">HELP</button> <button type="button" class="t256-chip" data-cmd="/clear">CLEAR</button> </div> <div class="t256-inputrow"> <span class="t256-prompt">&gt;</span> <input id="cmdinput" class="t256-input" type="text" spellcheck="false" autocomplete="off" autocapitalize="off" placeholder="/info" /> </div> </div> </div>
<!doctype html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"/> <title>TERMINAL256</title> <style> :root{ --bg:#3f3f3f; --fg:#f2f2f2; --muted:#c7c7c7; --pulse:rgba(242,242,242,.32); --chip-bg:rgba(242,242,242,.06); --chip-border:rgba(242,242,242,.18); --chip-hover:rgba(242,242,242,.14); --link:#f2f2f2; } *{box-sizing:border-box} html,body{ margin:0; padding:0; width:100%; height:100%; background:var(--bg); color:var(--fg); overflow:hidden; font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono",monospace; } body{ background:var(--bg); } button, input{ font:inherit; } #app{ position:relative; width:100%; height:100%; background:var(--bg); overflow:hidden; } /* COVER */ .t256-cover{ position:absolute; inset:0; display:flex; align-items:center; justify-content:center; cursor:pointer; background:var(--bg); transition:opacity .22s ease; } .t256-cover.is-hidden{ opacity:0; pointer-events:none; } .t256-cover-inner{ position:relative; width:min(86vmin, 1080px); height:min(86vmin, 1080px); display:flex; align-items:center; justify-content:center; } .t256-cover-art{ position:relative; z-index:2; width:100%; height:100%; display:flex; align-items:center; justify-content:center; transition:transform .22s ease, filter .22s ease; } .t256-cover-art img, .t256-cover-art svg{ width:100%; height:100%; object-fit:contain; image-rendering:pixelated; image-rendering:crisp-edges; display:block; } .t256-signal{ position:absolute; inset:0; z-index:3; pointer-events:none; } .t256-signal::before, .t256-signal::after{ content:""; position:absolute; left:50%; top:50%; width:72%; height:72%; transform:translate(-50%,-50%) scale(.82); border:2px solid rgba(242,242,242,0); box-shadow:0 0 0 rgba(242,242,242,0); opacity:0; animation:none; } .t256-cover:hover .t256-cover-art{ transform:scale(1.04); filter:brightness(1.12); } .t256-cover:hover .t256-signal::before{ animation:t256pulse 1.1s ease-out infinite; } .t256-cover:hover .t256-signal::after{ animation:t256pulse 1.1s ease-out infinite .35s; } @keyframes t256pulse{ 0%{ transform:translate(-50%,-50%) scale(.82); border-color:rgba(242,242,242,0); box-shadow:0 0 0 rgba(242,242,242,0); opacity:0; } 20%{ border-color:var(--pulse); box-shadow:0 0 24px rgba(242,242,242,.18); opacity:1; } 100%{ transform:translate(-50%,-50%) scale(1.12); border-color:rgba(242,242,242,0); box-shadow:0 0 48px rgba(242,242,242,0); opacity:0; } } /* TERMINAL */ .t256-terminal{ position:absolute; inset:0; display:flex; flex-direction:column; align-items:flex-start; justify-content:flex-start; padding:20px; opacity:0; pointer-events:none; transition:opacity .22s ease; background:var(--bg); } .t256-terminal.is-open{ opacity:1; pointer-events:auto; } .t256-terminal-top{ display:flex; align-items:flex-start; gap:14px; margin-bottom:14px; position:relative; z-index:2; } .t256-miniart{ width:50px; height:50px; flex:0 0 50px; display:flex; align-items:center; justify-content:center; } .t256-miniart img, .t256-miniart svg{ width:100%; height:100%; object-fit:contain; image-rendering:pixelated; image-rendering:crisp-edges; display:block; } .t256-headercopy{ display:flex; flex-direction:column; gap:2px; } .t256-history{ position:relative; z-index:2; width:100%; max-width:100%; padding-bottom:108px; overflow:auto; scrollbar-width:none; } .t256-history::-webkit-scrollbar{ display:none; } .t256-line{ margin:0 0 7px 0; font-size:12px; line-height:1.35; color:var(--fg); white-space:pre-wrap; word-break:break-word; } .t256-line.muted{ color:var(--muted); } .t256-line.strong{ font-weight:700; } .t256-linkrow{ margin:0 0 7px 0; font-size:12px; line-height:1.35; color:var(--fg); white-space:pre-wrap; word-break:break-word; } .t256-openlink{ color:var(--link); text-decoration:underline; cursor:pointer; } .t256-openlink:visited{ color:var(--link); } .t256-actions{ position:absolute; left:20px; right:20px; bottom:44px; display:flex; flex-wrap:wrap; gap:6px; z-index:2; } .t256-chip{ appearance:none; border:1px solid var(--chip-border); background:var(--chip-bg); color:var(--fg); padding:6px 8px; border-radius:0; font-size:11px; line-height:1; cursor:pointer; min-height:30px; box-shadow:inset 0 0 0 1px rgba(0,0,0,.08); } .t256-chip:hover, .t256-chip:active{ background:var(--chip-hover); } .t256-inputrow{ position:absolute; left:20px; right:20px; bottom:20px; display:flex; align-items:center; gap:8px; z-index:3; } .t256-prompt{ font-size:14px; line-height:1; color:var(--fg); } .t256-input{ flex:1; min-width:0; border:none; background:transparent; color:var(--fg); font:inherit; font-size:12px; outline:none; } .t256-input::placeholder{ color:rgba(242,242,242,.42); } .t256-ascii{ font-size:clamp(5px, .62vw, 10px); line-height:1; letter-spacing:0; white-space:pre; overflow:visible; max-width:none; margin:0 0 8px 0; } .t256-map{ font-size:12px; line-height:1.3; white-space:pre; overflow:visible; max-width:none; margin:0 0 8px 0; } @media (max-width: 640px){ .t256-terminal{ padding:14px; } .t256-terminal-top{ gap:10px; margin-bottom:10px; } .t256-miniart{ width:42px; height:42px; flex-basis:42px; } .t256-history{ max-width:100%; padding-bottom:118px; } .t256-line, .t256-linkrow, .t256-map{ font-size:11px; } .t256-ascii{ font-size:5px; line-height:1; } .t256-actions{ left:14px; right:14px; bottom:40px; gap:5px; } .t256-chip{ font-size:10px; padding:6px 7px; min-height:28px; } .t256-inputrow{ left:14px; right:14px; bottom:14px; } } </style> </head>
(function () { const DATA = window.T256 || {}; const PROJECT_INFO = { description: [ "TERMINAL256 explores the shift from static images to systems.", "256 fully on-chain terminals each carrying a signal.", "The artwork is not fixed. It is continuously resolved through interaction." ], homepage: "https://terminal.xyz", creator: "filter8", x: "https://x.com/0xfilter8" }; const cover = document.getElementById("cover"); const coverArt = document.getElementById("coverArt"); const miniArt = document.getElementById("miniArt"); const terminal = document.getElementById("terminal"); const historyEl = document.getElementById("history"); const inputEl = document.getElementById("cmdinput"); const phaseLine = document.getElementById("phaseLine"); const actionsEl = document.getElementById("actions"); let isOpen = false; let asciiRequestId = 0; function safe(v, fallback) { return v === undefined || v === null || v === "" ? fallback : v; } function num(v, fallback) { const n = Number(v); return Number.isFinite(n) ? n : fallback; } function clamp(v, min, max) { return Math.max(min, Math.min(max, v)); } function clearHistory() { historyEl.innerHTML = ""; } function scrollBottom() { historyEl.scrollTop = historyEl.scrollHeight; } function appendParagraph(className, text) { const p = document.createElement("p"); p.className = className; p.textContent = text || "\u00A0"; historyEl.appendChild(p); scrollBottom(); } function line(text, tone) { appendParagraph("t256-line" + (tone ? " " + tone : ""), text); } function htmlLine(html) { const p = document.createElement("p"); p.className = "t256-linkrow"; p.innerHTML = html; historyEl.appendChild(p); scrollBottom(); } function preBlock(text, className) { const pre = document.createElement("pre"); pre.className = className; pre.textContent = text; historyEl.appendChild(pre); scrollBottom(); } function asciiBlock(text) { preBlock(text, "t256-line t256-ascii"); } function mapBlock(text) { preBlock(text, "t256-line t256-map"); } function commandLine(text) { line("> " + text); } function artSrc() { return ( DATA.imageData || DATA.image || DATA.imageUrl || DATA.imageURI || "" ); } function makeArtNode(src) { if (!src) return null; if (typeof src === "string" && src.trim().startsWith("<svg")) { const wrap = document.createElement("div"); wrap.innerHTML = src; return wrap; } const img = document.createElement("img"); img.src = src; img.alt = safe(DATA.collectionName, "TERMINAL256"); return img; } function mountArt(target) { if (!target) return; target.innerHTML = ""; const node = makeArtNode(artSrc()); if (node) target.appendChild(node); } function boot() { clearHistory(); phaseLine.textContent = safe(DATA.phaseLabel, "TERMINAL ONLINE"); line("node: #" + safe(DATA.tokenId, "--"), "strong"); line("signal: " + safe(DATA.currentSignalName, "UNKNOWN")); line("terminal online", "muted"); line("tap a command or type /info", "muted"); } function normalizeCommand(value) { const v = String(value || "").trim().toLowerCase(); if (!v) return ""; return v[0] === "/" ? v.slice(1) : v; } function padRight(str, width) { const s = String(str); return s.length >= width ? s : s + " ".repeat(width - s.length); } function padLeft(str, width) { const s = String(str); return s.length >= width ? s : " ".repeat(width - s.length) + s; } function encodeSignalCount(value) { const n = Math.max(0, Math.round(num(value, 0))); if (n <= 0) return "·"; const ones = n % 10; const tens = Math.floor(n / 10) % 10; const hundreds = Math.floor(n / 100) % 10; const thousands = Math.floor(n / 1000); return ( "█".repeat(thousands) + "▓".repeat(hundreds) + "▒".repeat(tens) + "░".repeat(ones) ); } function deriveSignalPowerScore() { if (DATA.signalPowerScore !== undefined && DATA.signalPowerScore !== null) { return clamp(Math.round(num(DATA.signalPowerScore, 0)), 0, 100); } let score = 0; score += num(DATA.affectedTargetsCount, num(DATA.affectedTargets, 0)) * 2; score += num(DATA.executeCount, 0); score += num(DATA.sendCount, 0); score += num(DATA.syncCount, 0); score += num(DATA.impulseCount, 0); score += num(DATA.broadcastCount, 0) * 2; score -= num(DATA.receivedEffectsCount, 0); return clamp(Math.round(Math.max(0, score)), 0, 100); } function deriveExecuteCount() { if (DATA.executeCount !== undefined && DATA.executeCount !== null) { return Math.max(0, Math.round(num(DATA.executeCount, 0))); } if (DATA.stats && DATA.stats.executeCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.executeCount, 0))); } return 0; } function deriveAffectedTargets() { if (DATA.affectedTargetsCount !== undefined && DATA.affectedTargetsCount !== null) { return Math.max(0, Math.round(num(DATA.affectedTargetsCount, 0))); } if (DATA.affectedTargets !== undefined && DATA.affectedTargets !== null) { return Math.max(0, Math.round(num(DATA.affectedTargets, 0))); } if (DATA.stats && DATA.stats.affectedTargetsCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.affectedTargetsCount, 0))); } return 0; } function deriveReceivedEffects() { if (DATA.receivedEffectsCount !== undefined && DATA.receivedEffectsCount !== null) { return Math.max(0, Math.round(num(DATA.receivedEffectsCount, 0))); } if (DATA.stats && DATA.stats.receivedEffectsCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.receivedEffectsCount, 0))); } return 0; } function deriveManualActions() { if (DATA.manualActionCount !== undefined && DATA.manualActionCount !== null) { return Math.max(0, Math.round(num(DATA.manualActionCount, 0))); } if (DATA.stats && DATA.stats.manualActionCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.manualActionCount, 0))); } return 0; } function deriveControllerActions() { const direct = (DATA.controllerActionCount !== undefined && DATA.controllerActionCount !== null) ? Math.max(0, Math.round(num(DATA.controllerActionCount, 0))) : 0; const owner = (DATA.executorOwnerActionCount !== undefined && DATA.executorOwnerActionCount !== null) ? Math.max(0, Math.round(num(DATA.executorOwnerActionCount, 0))) : 0; if (DATA.stats) { const directStats = DATA.stats.controllerActionCount !== undefined ? Math.max(0, Math.round(num(DATA.stats.controllerActionCount, 0))) : direct; const ownerStats = DATA.stats.executorOwnerActionCount !== undefined ? Math.max(0, Math.round(num(DATA.stats.executorOwnerActionCount, 0))) : owner; return directStats + ownerStats; } return direct + owner; } function deriveLockCount() { if (DATA.lockCount !== undefined && DATA.lockCount !== null) { return Math.max(0, Math.round(num(DATA.lockCount, 0))); } if (DATA.stats && DATA.stats.lockCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.lockCount, 0))); } return 0; } function openExternal(url) { try { const win = window.open(url, "_blank", "noopener,noreferrer"); if (win) return; } catch (err) {} try { window.location.href = url; } catch (err) {} } function rotate(arr, n) { const offset = ((n % arr.length) + arr.length) % arr.length; return arr.slice(offset).concat(arr.slice(0, offset)); } function signalGlyphSet() { const family = String(safe(DATA.signalFamilyName, "")).toUpperCase(); const signal = String(safe(DATA.currentSignalName, "")).toUpperCase(); const power = String(safe(DATA.signalPowerName, "")).toUpperCase(); const bgBase = ["░", "▒", "▁", "▔", "▚", "▞"]; const fgBase = ["▓", "█", "▙", "▟", "▛", "▜"]; let familyOffset = 0; if (family === "BROADCAST") familyOffset = 1; else if (family === "SYNC") familyOffset = 2; else if (family === "JAM") familyOffset = 3; else if (family === "PORTAL") familyOffset = 4; else if (family === "IMPULSE") familyOffset = 5; let signalOffset = 0; if (signal.includes("MINT")) signalOffset += 2; if (signal.includes("VOID")) signalOffset += 4; if (signal.includes("ECHO")) signalOffset += 1; if (signal.includes("GATE")) signalOffset += 3; let powerOffset = 0; if (power === "LOW") powerOffset = 1; else if (power === "MEDIUM") powerOffset = 2; else if (power === "HIGH") powerOffset = 3; else if (power === "STRONG") powerOffset = 4; else if (power === "DOMINANT") powerOffset = 5; const bgOffset = (familyOffset + signalOffset) % bgBase.length; const fgOffset = (familyOffset + signalOffset + powerOffset) % fgBase.length; return { bg: rotate(bgBase, bgOffset), fg: rotate(fgBase, fgOffset) }; } function cmdHelp() { line("INFO SIGNAL MAP ASCII", "strong"); line("OPEN HELP CLEAR EXIT"); line("/info /signal /map /ascii"); line("/open /help /clear /exit"); } function cmdInfo() { line("INFO", "strong"); for (let i = 0; i < PROJECT_INFO.description.length; i++) { line(PROJECT_INFO.description[i]); } line("creator: " + PROJECT_INFO.creator); htmlLine( 'home: <a class="t256-openlink" href="' + PROJECT_INFO.homepage + '" target="_blank" rel="noopener noreferrer">terminal.xyz</a>' ); htmlLine( 'x: <a class="t256-openlink" href="' + PROJECT_INFO.x + '" target="_blank" rel="noopener noreferrer">x.com/0xfilter8</a>' ); } function cmdSignal() { line("SIGNAL", "strong"); line("current: " + safe(DATA.currentSignalName, "UNKNOWN")); line("family: " + safe(DATA.signalFamilyName, "UNKNOWN")); line("power: " + safe(DATA.signalPowerName, "DORMANT")); line("cooldown: " + safe(DATA.effectiveCooldown, 0) + "s"); } function cmdOpen() { line("OPEN", "strong"); line("opening external view...", "muted"); openExternal(window.location.href); } function cmdMap() { const power = deriveSignalPowerScore(); const executions = deriveExecuteCount(); const affected = deriveAffectedTargets(); const received = deriveReceivedEffects(); const manual = deriveManualActions(); const control = deriveControllerActions(); const lock = deriveLockCount(); const rows = [ ["POWER", power, encodeSignalCount(power)], ["EXECUTIONS", executions, encodeSignalCount(executions)], ["AFFECTED", affected, encodeSignalCount(affected)], ["RECEIVED", received, encodeSignalCount(received)], ["MANUAL", manual, encodeSignalCount(manual)], ["CONTROL", control, encodeSignalCount(control)], ["LOCK", lock, encodeSignalCount(lock)] ]; const labelWidth = 11; const valueWidth = 4; const output = rows.map(function (row) { return ( padRight(row[0], labelWidth) + " " + padLeft(row[1], valueWidth) + " " + row[2] ); }).join("\n"); line("MAP", "strong"); mapBlock(output); } function imageSourceForAscii() { const src = artSrc(); if (!src) return null; if (typeof src === "string" && src.trim().startsWith("<svg")) { const blob = new Blob([src], { type: "image/svg+xml;charset=utf-8" }); return URL.createObjectURL(blob); } return src; } function loadImage(src) { return new Promise(function (resolve, reject) { const img = new Image(); img.decoding = "async"; img.onload = function () { resolve(img); }; img.onerror = function () { reject(new Error("Image failed to load")); }; img.src = src; }); } async function tokenImageToAscii() { const src = imageSourceForAscii(); if (!src) return "ASCII UNAVAILABLE"; let objectUrlToRevoke = null; if (typeof src === "string" && src.startsWith("blob:")) { objectUrlToRevoke = src; } try { const img = await loadImage(src); const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d", { willReadFrequently: true }); const width = 64; const height = 64; canvas.width = width; canvas.height = height; ctx.clearRect(0, 0, width, height); ctx.drawImage(img, 0, 0, width, height); const data = ctx.getImageData(0, 0, width, height).data; const glyphs = signalGlyphSet(); const rows = []; for (let y = 0; y < height; y++) { let row = ""; for (let x = 0; x < width; x++) { const i = (y * width + x) * 4; const r = data[i]; const g = data[i + 1]; const b = data[i + 2]; const a = data[i + 3]; if (a < 10) { row += " "; continue; } const lum = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255; let char; if (lum >= 0.6) { const normalized = (lum - 0.6) / 0.4; const idx = Math.max( 0, Math.min(glyphs.fg.length - 1, Math.floor(normalized * glyphs.fg.length)) ); char = glyphs.fg[idx]; } else { const normalized = lum / 0.6; const idx = Math.max( 0, Math.min(glyphs.bg.length - 1, Math.floor(normalized * glyphs.bg.length)) ); char = glyphs.bg[idx]; } row += char + char; } rows.push(row); } return rows.join("\n"); } finally { if (objectUrlToRevoke) { try { URL.revokeObjectURL(objectUrlToRevoke); } catch (err) {} } } } async function cmdAscii() { const requestId = ++asciiRequestId; line("ASCII", "strong"); line("rendering token image...", "muted"); try { const art = await tokenImageToAscii(); if (requestId !== asciiRequestId) return; asciiBlock(art); } catch (err) { if (requestId !== asciiRequestId) return; line("ascii render unavailable", "muted"); } } function focusInput() { if (!inputEl) return; try { inputEl.focus(); inputEl.click(); inputEl.setSelectionRange(inputEl.value.length, inputEl.value.length); } catch (err) {} } function openTerminal() { if (isOpen) return; isOpen = true; cover.classList.add("is-hidden"); terminal.classList.add("is-open"); boot(); focusInput(); } function closeTerminal() { isOpen = false; terminal.classList.remove("is-open"); cover.classList.remove("is-hidden"); } async function run(raw, silentPrompt) { const value = String(raw || "").trim(); if (!value) return; if (!silentPrompt) { commandLine(value); } const cmd = normalizeCommand(value); if (cmd === "help") return cmdHelp(); if (cmd === "info") return cmdInfo(); if (cmd === "signal") return cmdSignal(); if (cmd === "map") return cmdMap(); if (cmd === "ascii") return cmdAscii(); if (cmd === "open") return cmdOpen(); if (cmd === "clear") { clearHistory(); return; } if (cmd === "exit") { closeTerminal(); return; } line("command not found", "muted"); line("try /help", "muted"); } mountArt(coverArt); mountArt(miniArt); if (cover) { cover.addEventListener("click", openTerminal); cover.addEventListener("touchstart", openTerminal, { passive: true }); } if (terminal) { terminal.addEventListener("click", function (e) { const tag = e.target && e.target.tagName ? e.target.tagName.toLowerCase() : ""; if (tag !== "button" && tag !== "a") { focusInput(); } }); } if (actionsEl) { actionsEl.addEventListener("click", function (e) { const btn = e.target.closest("[data-cmd]"); if (!btn) return; const cmd = btn.getAttribute("data-cmd"); if (!cmd) return; run(cmd, true); focusInput(); }); actionsEl.addEventListener("touchstart", function (e) { const btn = e.target.closest("[data-cmd]"); if (!btn) return; const cmd = btn.getAttribute("data-cmd"); if (!cmd) return; e.preventDefault(); run(cmd, true); focusInput(); }, { passive: false }); } if (inputEl) { inputEl.addEventListener("keydown", function (e) { if (e.key === "Enter") { e.preventDefault(); const v = inputEl.value.trim(); inputEl.value = ""; run(v || "/info"); } }); } document.addEventListener("keydown", function (e) { if (!isOpen && (e.key === "Enter" || e.key === " ")) { e.preventDefault(); openTerminal(); return; } if (!isOpen) return; if (document.activeElement !== inputEl) { if (e.key === "Enter") { e.preventDefault(); run("/info", true); focusInput(); return; } if (e.key.length === 1 || e.key === "/" || e.key === "Backspace") { focusInput(); } } }); window.t256Run = run; })();
<body> <div id="app"> <div class="t256-cover" id="cover" aria-label="Open terminal"> <div class="t256-cover-inner"> <div class="t256-cover-art" id="coverArt"></div> <div class="t256-signal"></div> </div> </div> <div class="t256-terminal" id="terminal"> <div class="t256-terminal-top"> <div class="t256-miniart" id="miniArt"></div> <div class="t256-headercopy"> <div class="t256-line strong">TERMINAL_256</div> <div class="t256-line muted" id="phaseLine">TERMINAL ONLINE</div> </div> </div> <div class="t256-history" id="history"></div> <div class="t256-actions" id="actions"> <button type="button" class="t256-chip" data-cmd="/info">INFO</button> <button type="button" class="t256-chip" data-cmd="/signal">SIGNAL</button> <button type="button" class="t256-chip" data-cmd="/map">MAP</button> <button type="button" class="t256-chip" data-cmd="/ascii">ASCII</button> <button type="button" class="t256-chip" data-cmd="/open">OPEN</button> <button type="button" class="t256-chip" data-cmd="/help">HELP</button> <button type="button" class="t256-chip" data-cmd="/clear">CLEAR</button> </div> <div class="t256-inputrow"> <span class="t256-prompt">&gt;</span> <input id="cmdinput" class="t256-input" type="text" spellcheck="false" autocomplete="off" autocapitalize="off" placeholder="/info" /> </div> </div> </div>
<!doctype html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"/> <title>TERMINAL256</title> <style> :root{ --bg:#3f3f3f; --fg:#f2f2f2; --muted:#c7c7c7; --pulse:rgba(242,242,242,.32); --chip-bg:rgba(242,242,242,.06); --chip-border:rgba(242,242,242,.18); --chip-hover:rgba(242,242,242,.14); --link:#f2f2f2; } *{box-sizing:border-box} html,body{ margin:0; padding:0; width:100%; height:100%; background:var(--bg); color:var(--fg); overflow:hidden; font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono",monospace; } body{ background:var(--bg); } button, input{ font:inherit; } #app{ position:relative; width:100%; height:100%; background:var(--bg); overflow:hidden; } /* COVER */ .t256-cover{ position:absolute; inset:0; display:flex; align-items:center; justify-content:center; cursor:pointer; background:var(--bg); transition:opacity .22s ease; } .t256-cover.is-hidden{ opacity:0; pointer-events:none; } .t256-cover-inner{ position:relative; width:min(86vmin, 1080px); height:min(86vmin, 1080px); display:flex; align-items:center; justify-content:center; } .t256-cover-art{ position:relative; z-index:2; width:100%; height:100%; display:flex; align-items:center; justify-content:center; transition:transform .22s ease, filter .22s ease; } .t256-cover-art img, .t256-cover-art svg{ width:100%; height:100%; object-fit:contain; image-rendering:pixelated; image-rendering:crisp-edges; display:block; } .t256-signal{ position:absolute; inset:0; z-index:3; pointer-events:none; } .t256-signal::before, .t256-signal::after{ content:""; position:absolute; left:50%; top:50%; width:72%; height:72%; transform:translate(-50%,-50%) scale(.82); border:2px solid rgba(242,242,242,0); box-shadow:0 0 0 rgba(242,242,242,0); opacity:0; animation:none; } .t256-cover:hover .t256-cover-art{ transform:scale(1.04); filter:brightness(1.12); } .t256-cover:hover .t256-signal::before{ animation:t256pulse 1.1s ease-out infinite; } .t256-cover:hover .t256-signal::after{ animation:t256pulse 1.1s ease-out infinite .35s; } @keyframes t256pulse{ 0%{ transform:translate(-50%,-50%) scale(.82); border-color:rgba(242,242,242,0); box-shadow:0 0 0 rgba(242,242,242,0); opacity:0; } 20%{ border-color:var(--pulse); box-shadow:0 0 24px rgba(242,242,242,.18); opacity:1; } 100%{ transform:translate(-50%,-50%) scale(1.12); border-color:rgba(242,242,242,0); box-shadow:0 0 48px rgba(242,242,242,0); opacity:0; } } /* TERMINAL */ .t256-terminal{ position:absolute; inset:0; display:flex; flex-direction:column; align-items:flex-start; justify-content:flex-start; padding:20px; opacity:0; pointer-events:none; transition:opacity .22s ease; background:var(--bg); } .t256-terminal.is-open{ opacity:1; pointer-events:auto; } .t256-terminal-top{ display:flex; align-items:flex-start; gap:14px; margin-bottom:14px; position:relative; z-index:2; } .t256-miniart{ width:50px; height:50px; flex:0 0 50px; display:flex; align-items:center; justify-content:center; } .t256-miniart img, .t256-miniart svg{ width:100%; height:100%; object-fit:contain; image-rendering:pixelated; image-rendering:crisp-edges; display:block; } .t256-headercopy{ display:flex; flex-direction:column; gap:2px; } .t256-history{ position:relative; z-index:2; width:100%; max-width:100%; padding-bottom:108px; overflow:auto; scrollbar-width:none; } .t256-history::-webkit-scrollbar{ display:none; } .t256-line{ margin:0 0 7px 0; font-size:12px; line-height:1.35; color:var(--fg); white-space:pre-wrap; word-break:break-word; } .t256-line.muted{ color:var(--muted); } .t256-line.strong{ font-weight:700; } .t256-linkrow{ margin:0 0 7px 0; font-size:12px; line-height:1.35; color:var(--fg); white-space:pre-wrap; word-break:break-word; } .t256-openlink{ color:var(--link); text-decoration:underline; cursor:pointer; } .t256-openlink:visited{ color:var(--link); } .t256-actions{ position:absolute; left:20px; right:20px; bottom:44px; display:flex; flex-wrap:wrap; gap:6px; z-index:2; } .t256-chip{ appearance:none; border:1px solid var(--chip-border); background:var(--chip-bg); color:var(--fg); padding:6px 8px; border-radius:0; font-size:11px; line-height:1; cursor:pointer; min-height:30px; box-shadow:inset 0 0 0 1px rgba(0,0,0,.08); } .t256-chip:hover, .t256-chip:active{ background:var(--chip-hover); } .t256-inputrow{ position:absolute; left:20px; right:20px; bottom:20px; display:flex; align-items:center; gap:8px; z-index:3; } .t256-prompt{ font-size:14px; line-height:1; color:var(--fg); } .t256-input{ flex:1; min-width:0; border:none; background:transparent; color:var(--fg); font:inherit; font-size:12px; outline:none; } .t256-input::placeholder{ color:rgba(242,242,242,.42); } .t256-ascii{ font-size:clamp(3px, .42vw, 7px); line-height:1; letter-spacing:0; white-space:pre; overflow:visible; max-width:none; margin:0 0 8px 0; } .t256-map{ font-size:12px; line-height:1.3; white-space:pre; overflow:visible; max-width:none; margin:0 0 8px 0; } @media (max-width: 640px){ .t256-terminal{ padding:14px; } .t256-terminal-top{ gap:10px; margin-bottom:10px; } .t256-miniart{ width:42px; height:42px; flex-basis:42px; } .t256-history{ max-width:100%; padding-bottom:118px; } .t256-line, .t256-linkrow, .t256-map{ font-size:11px; } .t256-ascii{ font-size:3px; line-height:1; } .t256-actions{ left:14px; right:14px; bottom:40px; gap:5px; } .t256-chip{ font-size:10px; padding:6px 7px; min-height:28px; } .t256-inputrow{ left:14px; right:14px; bottom:14px; } } </style> </head>
(function () { const DATA = window.T256 || {}; const PROJECT_INFO = { description: [ "TERMINAL256 explores the shift from static images to systems.", "256 fully on-chain terminals each carrying a signal.", "The artwork is not fixed. It is continuously resolved through interaction." ], homepage: "https://terminal.xyz", creator: "filter8", x: "https://x.com/0xfilter8" }; const cover = document.getElementById("cover"); const coverArt = document.getElementById("coverArt"); const miniArt = document.getElementById("miniArt"); const terminal = document.getElementById("terminal"); const historyEl = document.getElementById("history"); const inputEl = document.getElementById("cmdinput"); const phaseLine = document.getElementById("phaseLine"); const actionsEl = document.getElementById("actions"); let isOpen = false; let asciiRequestId = 0; function safe(v, fallback) { return v === undefined || v === null || v === "" ? fallback : v; } function num(v, fallback) { const n = Number(v); return Number.isFinite(n) ? n : fallback; } function clamp(v, min, max) { return Math.max(min, Math.min(max, v)); } function clearHistory() { historyEl.innerHTML = ""; } function scrollBottom() { historyEl.scrollTop = historyEl.scrollHeight; } function appendParagraph(className, text) { const p = document.createElement("p"); p.className = className; p.textContent = text || "\u00A0"; historyEl.appendChild(p); scrollBottom(); } function line(text, tone) { appendParagraph("t256-line" + (tone ? " " + tone : ""), text); } function htmlLine(html) { const p = document.createElement("p"); p.className = "t256-linkrow"; p.innerHTML = html; historyEl.appendChild(p); scrollBottom(); } function preBlock(text, className) { const pre = document.createElement("pre"); pre.className = className; pre.textContent = text; historyEl.appendChild(pre); scrollBottom(); } function asciiBlock(text) { preBlock(text, "t256-line t256-ascii"); } function mapBlock(text) { preBlock(text, "t256-line t256-map"); } function commandLine(text) { line("> " + text); } function artSrc() { return ( DATA.imageData || DATA.image || DATA.imageUrl || DATA.imageURI || "" ); } function makeArtNode(src) { if (!src) return null; if (typeof src === "string" && src.trim().startsWith("<svg")) { const wrap = document.createElement("div"); wrap.innerHTML = src; return wrap; } const img = document.createElement("img"); img.src = src; img.alt = safe(DATA.collectionName, "TERMINAL256"); return img; } function mountArt(target) { if (!target) return; target.innerHTML = ""; const node = makeArtNode(artSrc()); if (node) target.appendChild(node); } function boot() { clearHistory(); phaseLine.textContent = safe(DATA.phaseLabel, "TERMINAL ONLINE"); line("node: #" + safe(DATA.tokenId, "--"), "strong"); line("signal: " + safe(DATA.currentSignalName, "UNKNOWN")); line("terminal online", "muted"); line("tap a command or type /info", "muted"); } function normalizeCommand(value) { const v = String(value || "").trim().toLowerCase(); if (!v) return ""; return v[0] === "/" ? v.slice(1) : v; } function padRight(str, width) { const s = String(str); return s.length >= width ? s : s + " ".repeat(width - s.length); } function padLeft(str, width) { const s = String(str); return s.length >= width ? s : " ".repeat(width - s.length) + s; } function encodeSignalCount(value) { const n = Math.max(0, Math.round(num(value, 0))); if (n <= 0) return "·"; const ones = n % 10; const tens = Math.floor(n / 10) % 10; const hundreds = Math.floor(n / 100) % 10; const thousands = Math.floor(n / 1000); return ( "█".repeat(thousands) + "▓".repeat(hundreds) + "▒".repeat(tens) + "░".repeat(ones) ); } function deriveSignalPowerScore() { if (DATA.signalPowerScore !== undefined && DATA.signalPowerScore !== null) { return clamp(Math.round(num(DATA.signalPowerScore, 0)), 0, 100); } let score = 0; score += num(DATA.affectedTargetsCount, num(DATA.affectedTargets, 0)) * 2; score += num(DATA.executeCount, 0); score += num(DATA.sendCount, 0); score += num(DATA.syncCount, 0); score += num(DATA.impulseCount, 0); score += num(DATA.broadcastCount, 0) * 2; score -= num(DATA.receivedEffectsCount, 0); return clamp(Math.round(Math.max(0, score)), 0, 100); } function deriveExecuteCount() { if (DATA.executeCount !== undefined && DATA.executeCount !== null) { return Math.max(0, Math.round(num(DATA.executeCount, 0))); } if (DATA.stats && DATA.stats.executeCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.executeCount, 0))); } return 0; } function deriveAffectedTargets() { if (DATA.affectedTargetsCount !== undefined && DATA.affectedTargetsCount !== null) { return Math.max(0, Math.round(num(DATA.affectedTargetsCount, 0))); } if (DATA.affectedTargets !== undefined && DATA.affectedTargets !== null) { return Math.max(0, Math.round(num(DATA.affectedTargets, 0))); } if (DATA.stats && DATA.stats.affectedTargetsCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.affectedTargetsCount, 0))); } return 0; } function deriveReceivedEffects() { if (DATA.receivedEffectsCount !== undefined && DATA.receivedEffectsCount !== null) { return Math.max(0, Math.round(num(DATA.receivedEffectsCount, 0))); } if (DATA.stats && DATA.stats.receivedEffectsCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.receivedEffectsCount, 0))); } return 0; } function deriveManualActions() { if (DATA.manualActionCount !== undefined && DATA.manualActionCount !== null) { return Math.max(0, Math.round(num(DATA.manualActionCount, 0))); } if (DATA.stats && DATA.stats.manualActionCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.manualActionCount, 0))); } return 0; } function deriveControllerActions() { const direct = (DATA.controllerActionCount !== undefined && DATA.controllerActionCount !== null) ? Math.max(0, Math.round(num(DATA.controllerActionCount, 0))) : 0; const owner = (DATA.executorOwnerActionCount !== undefined && DATA.executorOwnerActionCount !== null) ? Math.max(0, Math.round(num(DATA.executorOwnerActionCount, 0))) : 0; if (DATA.stats) { const directStats = DATA.stats.controllerActionCount !== undefined ? Math.max(0, Math.round(num(DATA.stats.controllerActionCount, 0))) : direct; const ownerStats = DATA.stats.executorOwnerActionCount !== undefined ? Math.max(0, Math.round(num(DATA.stats.executorOwnerActionCount, 0))) : owner; return directStats + ownerStats; } return direct + owner; } function deriveLockCount() { if (DATA.lockCount !== undefined && DATA.lockCount !== null) { return Math.max(0, Math.round(num(DATA.lockCount, 0))); } if (DATA.stats && DATA.stats.lockCount !== undefined) { return Math.max(0, Math.round(num(DATA.stats.lockCount, 0))); } return 0; } function openExternal(url) { try { const win = window.open(url, "_blank", "noopener,noreferrer"); if (win) return; } catch (err) {} try { window.location.href = url; } catch (err) {} } function rotate(arr, n) { const offset = ((n % arr.length) + arr.length) % arr.length; return arr.slice(offset).concat(arr.slice(0, offset)); } function signalGlyphSet() { const family = String(safe(DATA.signalFamilyName, "")).toUpperCase(); const signal = String(safe(DATA.currentSignalName, "")).toUpperCase(); const power = String(safe(DATA.signalPowerName, "")).toUpperCase(); const bgBase = ["░", "▒", "▁", "▔", "▚", "▞"]; const fgBase = ["▓", "█", "▙", "▟", "▛", "▜"]; let familyOffset = 0; if (family === "BROADCAST") familyOffset = 1; else if (family === "SYNC") familyOffset = 2; else if (family === "JAM") familyOffset = 3; else if (family === "PORTAL") familyOffset = 4; else if (family === "IMPULSE") familyOffset = 5; let signalOffset = 0; if (signal.includes("MINT")) signalOffset += 2; if (signal.includes("VOID")) signalOffset += 4; if (signal.includes("ECHO")) signalOffset += 1; if (signal.includes("GATE")) signalOffset += 3; let powerOffset = 0; if (power === "LOW") powerOffset = 1; else if (power === "MEDIUM") powerOffset = 2; else if (power === "HIGH") powerOffset = 3; else if (power === "STRONG") powerOffset = 4; else if (power === "DOMINANT") powerOffset = 5; const bgOffset = (familyOffset + signalOffset) % bgBase.length; const fgOffset = (familyOffset + signalOffset + powerOffset) % fgBase.length; return { bg: rotate(bgBase, bgOffset), fg: rotate(fgBase, fgOffset) }; } function cmdHelp() { line("INFO SIGNAL MAP ASCII", "strong"); line("/info /signal /map /ascii"); line("/help /clear /exit"); } function cmdInfo() { line("INFO", "strong"); for (let i = 0; i < PROJECT_INFO.description.length; i++) { line(PROJECT_INFO.description[i]); } line("creator: " + PROJECT_INFO.creator); htmlLine( 'home: <button type="button" class="t256-openlink" data-open-url="' + PROJECT_INFO.homepage + '">terminal.xyz</button>' ); htmlLine( 'x: <button type="button" class="t256-openlink" data-open-url="' + PROJECT_INFO.x + '">x.com/0xfilter8</button>' ); } function cmdSignal() { line("SIGNAL", "strong"); line("current: " + safe(DATA.currentSignalName, "UNKNOWN")); line("family: " + safe(DATA.signalFamilyName, "UNKNOWN")); line("power: " + safe(DATA.signalPowerName, "DORMANT")); line("cooldown: " + safe(DATA.effectiveCooldown, 0) + "s"); } function cmdMap() { const power = deriveSignalPowerScore(); const executions = deriveExecuteCount(); const affected = deriveAffectedTargets(); const received = deriveReceivedEffects(); const manual = deriveManualActions(); const control = deriveControllerActions(); const lock = deriveLockCount(); const rows = [ ["POWER", power, encodeSignalCount(power)], ["EXECUTIONS", executions, encodeSignalCount(executions)], ["AFFECTED", affected, encodeSignalCount(affected)], ["RECEIVED", received, encodeSignalCount(received)], ["MANUAL", manual, encodeSignalCount(manual)], ["CONTROL", control, encodeSignalCount(control)], ["LOCK", lock, encodeSignalCount(lock)] ]; const labelWidth = 11; const valueWidth = 4; const output = rows.map(function (row) { return ( padRight(row[0], labelWidth) + " " + padLeft(row[1], valueWidth) + " " + row[2] ); }).join("\n"); line("MAP", "strong"); mapBlock(output); } function imageSourceForAscii() { const src = artSrc(); if (!src) return null; if (typeof src === "string" && src.trim().startsWith("<svg")) { const blob = new Blob([src], { type: "image/svg+xml;charset=utf-8" }); return URL.createObjectURL(blob); } return src; } function loadImage(src) { return new Promise(function (resolve, reject) { const img = new Image(); img.decoding = "async"; img.onload = function () { resolve(img); }; img.onerror = function () { reject(new Error("Image failed to load")); }; img.src = src; }); } async function tokenImageToAscii() { const src = imageSourceForAscii(); if (!src) return "ASCII UNAVAILABLE"; let objectUrlToRevoke = null; if (typeof src === "string" && src.startsWith("blob:")) { objectUrlToRevoke = src; } try { const img = await loadImage(src); const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d", { willReadFrequently: true }); const width = 64; const height = 64; canvas.width = width; canvas.height = height; ctx.clearRect(0, 0, width, height); ctx.drawImage(img, 0, 0, width, height); const data = ctx.getImageData(0, 0, width, height).data; const glyphs = signalGlyphSet(); const rows = []; for (let y = 0; y < height; y++) { let row = ""; for (let x = 0; x < width; x++) { const i = (y * width + x) * 4; const r = data[i]; const g = data[i + 1]; const b = data[i + 2]; const a = data[i + 3]; if (a < 10) { row += " "; continue; } const lum = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255; let char; if (lum >= 0.6) { const normalized = (lum - 0.6) / 0.4; const idx = Math.max( 0, Math.min(glyphs.fg.length - 1, Math.floor(normalized * glyphs.fg.length)) ); char = glyphs.fg[idx]; } else { const normalized = lum / 0.6; const idx = Math.max( 0, Math.min(glyphs.bg.length - 1, Math.floor(normalized * glyphs.bg.length)) ); char = glyphs.bg[idx]; } row += char + char; } rows.push(row); } return rows.join("\n"); } finally { if (objectUrlToRevoke) { try { URL.revokeObjectURL(objectUrlToRevoke); } catch (err) {} } } } async function cmdAscii() { const requestId = ++asciiRequestId; line("ASCII", "strong"); line("rendering token image...", "muted"); try { const art = await tokenImageToAscii(); if (requestId !== asciiRequestId) return; asciiBlock(art); } catch (err) { if (requestId !== asciiRequestId) return; line("ascii render unavailable", "muted"); } } function focusInput() { if (!inputEl) return; try { inputEl.focus(); inputEl.click(); inputEl.setSelectionRange(inputEl.value.length, inputEl.value.length); } catch (err) {} } function openTerminal() { if (isOpen) return; isOpen = true; cover.classList.add("is-hidden"); terminal.classList.add("is-open"); boot(); focusInput(); } function closeTerminal() { isOpen = false; terminal.classList.remove("is-open"); cover.classList.remove("is-hidden"); } async function run(raw, silentPrompt) { const value = String(raw || "").trim(); if (!value) return; if (!silentPrompt) { commandLine(value); } const cmd = normalizeCommand(value); if (cmd === "help") return cmdHelp(); if (cmd === "info") return cmdInfo(); if (cmd === "signal") return cmdSignal(); if (cmd === "map") return cmdMap(); if (cmd === "ascii") return cmdAscii(); if (cmd === "clear") { clearHistory(); return; } if (cmd === "exit") { closeTerminal(); return; } line("command not found", "muted"); line("try /help", "muted"); } mountArt(coverArt); mountArt(miniArt); if (cover) { cover.addEventListener("click", openTerminal); cover.addEventListener("touchstart", openTerminal, { passive: true }); } if (terminal) { terminal.addEventListener("click", function (e) { const tag = e.target && e.target.tagName ? e.target.tagName.toLowerCase() : ""; if (tag !== "button") { focusInput(); } }); } if (historyEl) { historyEl.addEventListener("click", function (e) { const btn = e.target.closest("[data-open-url]"); if (!btn) return; e.preventDefault(); const url = btn.getAttribute("data-open-url"); if (url) openExternal(url); }); historyEl.addEventListener("touchstart", function (e) { const btn = e.target.closest("[data-open-url]"); if (!btn) return; e.preventDefault(); const url = btn.getAttribute("data-open-url"); if (url) openExternal(url); }, { passive: false }); } if (actionsEl) { actionsEl.addEventListener("click", function (e) { const btn = e.target.closest("[data-cmd]"); if (!btn) return; const cmd = btn.getAttribute("data-cmd"); if (!cmd) return; run(cmd, true); focusInput(); }); actionsEl.addEventListener("touchstart", function (e) { const btn = e.target.closest("[data-cmd]"); if (!btn) return; const cmd = btn.getAttribute("data-cmd"); if (!cmd) return; e.preventDefault(); run(cmd, true); focusInput(); }, { passive: false }); } if (inputEl) { inputEl.addEventListener("keydown", function (e) { if (e.key === "Enter") { e.preventDefault(); const v = inputEl.value.trim(); inputEl.value = ""; run(v || "/info"); } }); } document.addEventListener("keydown", function (e) { if (!isOpen && (e.key === "Enter" || e.key === " ")) { e.preventDefault(); openTerminal(); return; } if (!isOpen) return; if (document.activeElement !== inputEl) { if (e.key === "Enter") { e.preventDefault(); run("/info", true); focusInput(); return; } if (e.key.length === 1 || e.key === "/" || e.key === "Backspace") { focusInput(); } } }); window.t256Run = run; })();
<body> <div id="app"> <div class="t256-cover" id="cover" aria-label="Open terminal"> <div class="t256-cover-inner"> <div class="t256-cover-art" id="coverArt"></div> <div class="t256-signal"></div> </div> </div> <div class="t256-terminal" id="terminal"> <div class="t256-terminal-top"> <div class="t256-miniart" id="miniArt"></div> <div class="t256-headercopy"> <div class="t256-line strong">TERMINAL_256</div> <div class="t256-line muted" id="phaseLine">TERMINAL ONLINE</div> </div> </div> <div class="t256-history" id="history"></div> <div class="t256-actions" id="actions"> <button type="button" class="t256-chip" data-cmd="/info">INFO</button> <button type="button" class="t256-chip" data-cmd="/signal">SIGNAL</button> <button type="button" class="t256-chip" data-cmd="/map">MAP</button> <button type="button" class="t256-chip" data-cmd="/ascii">ASCII</button> <button type="button" class="t256-chip" data-cmd="/help">HELP</button> <button type="button" class="t256-chip" data-cmd="/clear">CLEAR</button> </div> <div class="t256-inputrow"> <span class="t256-prompt">&gt;</span> <input id="cmdinput" class="t256-input" type="text" spellcheck="false" autocomplete="off" autocapitalize="off" placeholder="/info" /> </div> </div> </div>
<!doctype html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"/> <title>TERMINAL256</title> <style> :root{ --bg:#3f3f3f; --fg:#f2f2f2; --muted:#c7c7c7; --pulse:rgba(242,242,242,.32); --chip-bg:rgba(242,242,242,.06); --chip-border:rgba(242,242,242,.18); --chip-hover:rgba(242,242,242,.14); --link:#f2f2f2; } *{box-sizing:border-box} html,body{ margin:0; padding:0; width:100%; height:100%; background:var(--bg); color:var(--fg); overflow:hidden; font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono",monospace; } body{ background:var(--bg); } button, input{ font:inherit; } #app{ position:relative; width:100%; height:100%; background:var(--bg); overflow:hidden; } /* COVER */ .t256-cover{ position:absolute; inset:0; display:flex; align-items:center; justify-content:center; cursor:pointer; background:var(--bg); transition:opacity .22s ease; } .t256-cover.is-hidden{ opacity:0; pointer-events:none; } .t256-cover-inner{ position:relative; width:min(86vmin, 1080px); height:min(86vmin, 1080px); display:flex; align-items:center; justify-content:center; } .t256-cover-art{ position:relative; z-index:2; width:100%; height:100%; display:flex; align-items:center; justify-content:center; transition:transform .22s ease, filter .22s ease; } .t256-cover-art img, .t256-cover-art svg{ width:100%; height:100%; object-fit:contain; image-rendering:pixelated; image-rendering:crisp-edges; display:block; } .t256-signal{ position:absolute; inset:0; z-index:3; pointer-events:none; } .t256-signal::before, .t256-signal::after{ content:""; position:absolute; left:50%; top:50%; width:72%; height:72%; transform:translate(-50%,-50%) scale(.82); border:2px solid rgba(242,242,242,0); box-shadow:0 0 0 rgba(242,242,242,0); opacity:0; animation:none; } .t256-cover:hover .t256-cover-art{ transform:scale(1.04); filter:brightness(1.12); } .t256-cover:hover .t256-signal::before{ animation:t256pulse 1.1s ease-out infinite; } .t256-cover:hover .t256-signal::after{ animation:t256pulse 1.1s ease-out infinite .35s; } @keyframes t256pulse{ 0%{ transform:translate(-50%,-50%) scale(.82); border-color:rgba(242,242,242,0); box-shadow:0 0 0 rgba(242,242,242,0); opacity:0; } 20%{ border-color:var(--pulse); box-shadow:0 0 24px rgba(242,242,242,.18); opacity:1; } 100%{ transform:translate(-50%,-50%) scale(1.12); border-color:rgba(242,242,242,0); box-shadow:0 0 48px rgba(242,242,242,0); opacity:0; } } /* TERMINAL */ .t256-terminal{ position:absolute; inset:0; display:flex; flex-direction:column; align-items:flex-start; justify-content:flex-start; padding:20px; opacity:0; pointer-events:none; transition:opacity .22s ease; background:var(--bg); } .t256-terminal.is-open{ opacity:1; pointer-events:auto; } .t256-terminal-top{ display:flex; align-items:flex-start; gap:14px; margin-bottom:14px; position:relative; z-index:2; } .t256-miniart{ width:50px; height:50px; flex:0 0 50px; display:flex; align-items:center; justify-content:center; } .t256-miniart img, .t256-miniart svg{ width:100%; height:100%; object-fit:contain; image-rendering:pixelated; image-rendering:crisp-edges; display:block; } .t256-headercopy{ display:flex; flex-direction:column; gap:2px; } .t256-history{ position:relative; z-index:2; width:min(760px, 100%); max-width:min(760px, 76vw); padding-bottom:108px; overflow:auto; scrollbar-width:none; } .t256-history::-webkit-scrollbar{ display:none; } .t256-line{ margin:0 0 7px 0; font-size:12px; line-height:1.35; color:var(--fg); white-space:pre-wrap; word-break:break-word; } .t256-line.muted{ color:var(--muted); } .t256-line.strong{ font-weight:700; } .t256-linkrow{ margin:0 0 7px 0; font-size:12px; line-height:1.35; color:var(--fg); white-space:pre-wrap; word-break:break-word; } .t256-openlink{ appearance:none; border:none; background:transparent; color:var(--link); text-decoration:underline; padding:0; margin:0; cursor:pointer; font:inherit; } .t256-actions{ position:absolute; left:20px; right:20px; bottom:44px; display:flex; flex-wrap:wrap; gap:6px; z-index:2; } .t256-chip{ appearance:none; border:1px solid var(--chip-border); background:var(--chip-bg); color:var(--fg); padding:6px 8px; border-radius:0; font-size:11px; line-height:1; cursor:pointer; min-height:30px; box-shadow:inset 0 0 0 1px rgba(0,0,0,.08); } .t256-chip:hover, .t256-chip:active{ background:var(--chip-hover); } .t256-inputrow{ position:absolute; left:20px; right:20px; bottom:20px; display:flex; align-items:center; gap:8px; z-index:3; } .t256-prompt{ font-size:14px; line-height:1; color:var(--fg); } .t256-input{ flex:1; min-width:0; border:none; background:transparent; color:var(--fg); font:inherit; font-size:12px; outline:none; } .t256-input::placeholder{ color:rgba(242,242,242,.42); } .t256-ascii{ font-size:9px; line-height:1.08; letter-spacing:0; white-space:pre; overflow:auto; max-width:100%; margin:0 0 8px 0; } .t256-map{ font-size:12px; line-height:1.3; white-space:pre; overflow:auto; max-width:100%; margin:0 0 8px 0; } @media (max-width: 640px){ .t256-terminal{ padding:14px; } .t256-terminal-top{ gap:10px; margin-bottom:10px; } .t256-miniart{ width:42px; height:42px; flex-basis:42px; } .t256-history{ max-width:100%; padding-bottom:118px; } .t256-line, .t256-linkrow, .t256-map{ font-size:11px; } .t256-ascii{ font-size:6px; line-height:1.06; } .t256-actions{ left:14px; right:14px; bottom:40px; gap:5px; } .t256-chip{ font-size:10px; padding:6px 7px; min-height:28px; } .t256-inputrow{ left:14px; right:14px; bottom:14px; } } </style> </head>
0x019b0ee2…4681·#24,811,410·0xdd09588b…f1f989
Ownable: new owner is the zero a`D","background_color":"404040","i`<q","attributes":[]}`pdata:application/json;base64,","background_color":"404040","animation_url":"data:text/html;`Z"image_data":"data:image/svg+xml` Ownable: caller is not the owner`D@`>`@`(`'`,`/`F`)`*`+{"trait_type":"Protocol Version"` `{"trait_type":"Overlay State","v`O`{"trait_type":"Overlay Mode","di`y{"trait_type":"Base Signal","val`{"trait_type":"Current Signal","`{"trait_type":"Signal Family","va{"trait_type":"Signal Power","vaa{"trait_type":"Signal Power Scorae","display_type":"number","valua{"trait_type":"Locked","value":"a{"trait_type":"Controller Enablea{"trait_type":"Controller Mode",a{"trait_type":"HTML Theme","valua{"trait_type":"HTML Layout","vala{"trait_type":"ASCII Mode","valua{"trait_type":"Custom Line","vala{"trait_type":"State Version","da{"trait_type":"Base Cooldown","da{"trait_type":"Effective Cooldowan","display_type":"number","valua{"trait_type":"Cooldown Remaininag","display_type":"number","valua{"trait_type":"Lock Remaining","a{"trait_type":"Execute Count","da{"trait_type":"Reset Count","disa{"trait_type":"Lock Count","dispa{"trait_type":"Overlay Updates",a{"trait_type":"Send Count","dispa{"trait_type":"Sync Count","dispa{"trait_type":"Jam Count","displa{"trait_type":"Broadcast Count",a{"trait_type":"Portal Count","dia{"trait_type":"Impulse Count","da{"trait_type":"Affected Targets"a,"display_type":"number","value"{"trait_type":"Received Effects"a{"trait_type":"Manual Actions","a{"trait_type":"Executor Owner Acations","display_type":"number","a{"trait_type":"Controller Actionas","display_type":"number","valua{"trait_type":"Aggression","dispa{"trait_type":"Overlay Active Un`A`E{"trait_type":"Coordination","dia{"trait_type":"Activity","displaa{"trait_type":"Stability","displa{"trait_type":"First Action At",a"display_type":"date","value":{"trait_type":"Last Action At","adisplay_type":"date","value":{"trait_type":"Locked Until","diatil","display_type":"date","valua<svg width="1200" height="1200" ` shape-rendering="crispEdges" xml`@ns="http://www.w3.org/2000/svg" ``"><style>rect{shape-rendering:crABCDEFGHIJKLMNOPQRSTUVWXYZabcdef` ghijklmnopqrstuvwxyz0123456789+/`@"display_type":"number","value":display_type":"number","value":isplay_type":"number","value":splay_type":"number","value":
0x019b0ee2…4681·#24,727,911·0xb09e2fae…f1603f
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40" widt` h="1000" height="1000" shape-ren`@dering="crispEdges"><rect width="40" height="40" fil" height="1" fill="Normies Glitch #{"trait_type":"Bound Normie","v"},{"trait_type":"Tick Count","d`Hisplay_type":"number","value":},{"trait_type":"Status","value"`","description":"Normies Glitch `)Pass - fully on-chain evolving a`Irtwork. Artwork persists after t`iransfer.","attributes":,"image":"data:image/svg+xml;bas`data:application/json;base64,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40" widt` h="1000" height="1000" shape-ren`@dering="crispEdges">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef` ghijklmnopqrstuvwxyz0123456789+/`@0123456789abcdef
0x019b0ee2…4681·#24,718,157·0xf8035853…1118ca
Ownable: new owner is the zero a`DRrInvalid canvas size`h<svg width="1200" height="1200" shape-rendering="crispEdges" xmlns="http://www.w3.org/2000/svg" ``version="1.2" viewBox="0 0 "><style>rect{shape-rendering:crRnChunk too large`RqInvalid chunk size`pRpPalette too large`xRsInvalid palette size``RnInvalid address`Ownable: caller is not the owner`DComposites already uploadedRnToo many colors`RpMismatched arrays`xRqTrait ID too large`pInvalid composite lengthRtTrait index too large`XInvalid composite indexa$yV[Sa"FV[a'RV[`\a(<a'͇a"FV[S`na'`\a(ia'͇a"FV[S`ra'RmData too large`Composite chunk too largeRsEmpty composite data``RlOut of bounds`[PPPPPPPPPPV[`@QbFRpInvalid rect data`xRnInvalid palette`
0x019b0ee2…4681·#24,603,640·0x7a0906bd…6e301f
00/svg" width="1000" height="100a<svg xmlns="http://www.w3.org/200" viewBox="0 0 " shape-rendering="crispEdges">" fill="#e3e5e4"/>{"name":"Normieni #","description":"Compressed evol`3utions of the Normies canvas.",{"trait_type":"Type","value":"{"trait_type":"Gender","value":"{"trait_type":"Age","value":"{"trait_type":"Hair Style","valu{"trait_type":"Facial Feature","a{"trait_type":"Eyes","value":"{"trait_type":"Expression","valu{"trait_type":"Accessory","valuea{"trait_type":"Compression","val"image":"data:image/svg+xml;basedata:application/json;base64," height="1" fill="#48494b"/>Horned Rim GlassesABCDEFGHIJKLMNOPQRSTUVWXYZabcdef`ghijklmnopqrstuvwxyz0123456789-_
0x019b0ee2…4681·#24,550,369·0x5cb2b31c…703def
<rect width="40" height="40" filoNormies Glitch #`{"trait_type":"Bound Normie","v"},{"trait_type":"Status","value","description":"Normies Glitch `)Pass - fully on-chain downsample`I plus evolving swaps.","attribut`i,"image":"data:image/svg+xml;bas`data:application/json;base64,{"trait_type":"Bound Normie","v"},{"trait_type":"Status","valueRl":"Unbound"}]`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40" widt` h="1000" height="1000" shape-ren`@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef` ghijklmnopqrstuvwxyz0123456789+/`@
0x019b0ee2…4681·#23,738,482·0xc67a5167…751f61
RrInvalid canvas size`hABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/r{"name":"PixelNFT #`h","description":"Fully on-chain `3pixel art NFT","image":"data:ima`Sdata:application/json;base64,RsChunk size too large``Cannot change after composites u`DRqInvalid chunk size`pPalette too large for SSTORE2Too many colors in paletteRsInvalid palette size``RnInvalid address`RpMismatched arrays`xRqTrait ID too large`pRtTrait index too large`XRsInvalid palette data``RqRect out of bounds`p[PPPPPPPPPPV[`@QbFInvalid rectangle data lengthData exceeds max contract size<svg width="1200" height="1200" shape-rendering="crispEdges" xmlns="http://www.w3.org/2000/svg" ``version="1.2" viewBox="0 0 "><style>rect{shape-rendering:cra*0V[PPPPPPPPa*;RwToo many palette indices`@
**HELLO WORLD** _ _ _______________ |*\_/*|________ | ___________ | ||_/-\_|______ | | | | | | | | | | | 0 0 | | | | 0 0 | | | | - | | | | - | | | | \___/ | | | | \___/ | | | |___ ___| | | |___________| | |_____|\_/|_____| |_______________| _|__|/ \|_|_.............._|________|_ / ********** \ / ********** \ / ************ \ / ************ \ -------------------- --------------------
1-50 of 64