File: blk05791.txt

y7/Foundry USA Pool #dropgold/d
MTLD_BATCH_3_398170_398229
DjB0x87a5b3329e2489aabb125d87d3f4426b31c59b7573fa300a586206deb08d1205
DjB0x30b407e7c5465c3ec5419e0254082fd7259aa51039349e6f6b5cf1b5c683df84
DjB0x2669aba85a3fd54f565265d2edd42d3a1d15618d6457b56fce309237f490a0e0
DjB0x122dcbafdf6474f62e979b97fcc51347ba6156848c4826dd3c1579aa9443a311
DjB0x22d478ebe12815461b50a90dc3e9f50d0c6b15c2d100a463b7f27a9dcbf9fe64
MTLD_BATCH_2_398251_398273
MTLD_BATCH_2_398267_398276
?j=from:27USDT(ERC20):0xB2bEeb245bc5E1DF3d3dfaCC7083Ad0A37D77D6A
=j;from:15USDT(BSC):0xa8Fe357458fe7bD16aAA3265d9cA43eF1Ac3e8B1CA
Aj?from:1102.6USDT(BSC):0xFD5Ffae06722089E99749a3293f8D1342aBCD64D
DjB0x8c0f2352909523cc5c3410d2af18f17ae4322533af1b332b0d817c46351f5468
DjB0x717e14c4e76888e3de42428108dfa941b7ba95a52d5ace064a9a4a79c8c7202d
DjB0xd197ed01898c1d0bd5ac1909eac0778abf53069f8d372a4aa185a3659d4b1a3d
DjB0xc1a7795f1a6e866a4a708607136c26665c3cb14491ac5475e60d9d3e535a583b
6j4gIg:to:USDT(TRON):TXebNyBz8ME4uGBwRMR96nz1mzfor1Yo1x4
DjB0x25facc1c3815c3cad5c588fdb860045070e9532c15e8c6d7d218c62d3d0db3b2
DjB0xd33d9cec44ae0c7afcb1f640e7d54663fe91aa22a18303858aa09794dfdba690
DjB0x258d3d03fae5efb89bfca10446e39d256254487c2119f8ca9520ddb087c52769
DjB0x9376672140d98eb2a73fe6bb266dedf5b1b67cdfa68f86a5b2923bd690397ef3
DjB0x532174e97cb73d66ca2230d352408377287f10df95d14177995b378acfebec69
DjB0xe4ea271c99b2b7f09029056ec7a3af2fe3547c5cd9fc42487ad956252f316e53
DjB0x66ea7af9eb965ae06f715dd3217198a469b9a230a8e1ab5f51ace9059f9ac3c9
DjB0xec9c66d60eeb4ee25c40b05b3771b60c2d94aad7b6740c5773c16a75c8094be9
DjB0xb468ffa1c978b19bb43137ff80665f5e387a4994ad57134f35d88ef32f10a58a
DjB0x20f2fb9a2a6d1977344f52f4b6f0fdae39f08efb887fe721951e8a5b61a85193
DjB0x343a7b64371c6b9206b31475485a2b8719d2f0cfe835fa5b0df82f051e5c8526
DjB0xb91ccca6c142e2832e76976f95cf1b5758c6beff958bb11392006edafd40a610
DjB0xa1e980502fc03e9390db4434550fb2c7aecaffb3240810757508ac696ad8c890
DjB0x71f46bd8fb38b6c1d4f9edb6ce8ca4b3a652004ce72417cb97b56ccadbe6c077
DjB0x1caf681fb0910a50cefbbaf5bb8e98f1bacc8378dd4385f7426e3d75827f04b4
DjB0xe72fd44eba16585064837fdaad976a43bb61b85e1fa6450aa4c59196431675b7
/j-uzh:to:XRP:rD26jpA26ZaXTbah2JHNYGE6PVeoSTszwT3
6j4Uv7:to:USDT(TRON):TQyKMSKiEiaV1QMjeCRebptgYNoNt6J4Wj
DjB0x1522c8c1dfd18db5aa550a310ded7b9ca013f563e7c15108ab1b6e8974ffbaf83
;j9to:USDT(ERC20):0xC1273CCc730205368c046B50fB59e25de688F215x'
DjB0xca0b4f80d98f5b6c68f5f40862d1f7cafab144f8ec5cc77adbf9c02b4f32cd43
DjB0x1276c7889c189d6bf30b9969d797e01bbfe740df026f5eb03d071b7c65a5a779
DjB0x246ec3a985cb6972cb13fe8bd481e0c2e85c1842492d190e3793c21f1ab9057d
DjB0x7cb189b0474076092f05b343bf9787f865c77db543e7d1417e3fb791a4c7da51
DjB0x8b3be73e67badd16e92415a28624078560a1d9255e27ab71295842f29b95ec1a
DjB0x5e47c3f5f5ebc80ac0466b36d48e11df4d05299ea4463fe092eaf66be6fa71d0
DjB0x0493519666c69b46fb64e9ea907b66b993672cea1fe67c4a076ebedc57572c74
DjB0x90bba5f0b5412d19cd7f71b954883c84a2fbce8dbdd780b57caa657a54938dc5
DjB0xb85c6dda57c20d7184984deb8633291589794212f0462b7062155b7b00e9782e
DjB0xe1c532263c3c1ad97332d2d4b25f75b8c8318649345f0c081d1cf859dd4d2cdb
DjB0x48e3ba691379bc4aecf9fe8776cdaf0471fd847ee713c02683f66949ba90c4dc
DjB0x866ef8e97053cb9f8e520bfae8bd003409395dcdc2ce81d3f6d494668ddb7cd2
DjB0xf398cd081dc5351fe35a9e82cee4d50311ea0e62efb9d541046c40451f918124
DjB0xa947710ca7640a81f96d5de58603ca528038617fba7fd2d50d67bc7ffb09f1c2
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"17257100000000"}
DjB0xc8cad86261c5c4388672b064f4aeee39b76a16d8782aed1fe081311020e14a5a
DjB0xd2b69094a4651b421b4f2788dcefdaac9984d8f8ba03728077fd0b12a5a424e0
DjB0xdaa9266073c4f528fa6a03f6b0b6f6e5317cdffa351d782bfb549aa8eb185675
DjB0x26e2e0a4f573c45cdf7d43d0c60b88759d802f1a7b8f02413ff363278ea1ed78
DjB0x2f169d4d3008af8b358685a0d159efcfb0fea29355f9fae9a1210759d0ca224b
DjB0x2b3b7c1d9ff81e2c7b2ddfc6c0b07cfc70a84f030421325f7825b6dbab220ab8
DjB0x1b7396e085e5cb64d554263bf2a124795f5b2befde22c3dde4747174d32a9baf
DjB0x4de65f055a2fe764d1adebb5a44f247d258f68983c6a2baea984d338027e3a3c
DjB0xd56615a1cd5dabc416143a3f061b6b530436942add561b71d85dbc583222c76e
DjB0x825926447e8d7799f2bdc3b1868e990c1eff088416a6cc5296cbd064bad2fa30
{jLx0x91544622717608916da76a8c3282944788bf6be0d3108757306dfaa48d975008|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
DjB0x02a1e9be3449be18f5aa5b54e65485b3e19c93466d5e8dd1df2aaf1090e9acd7
DjB0x5e60861b0fe74c0d54c054d071147e6ccb812cf33a45f10bdf2c4970e96d42be
DjB0x92b1a12db8bfe513f13cc62ebea55925a51861edf3a6366881bbc396fa857773
DjB0xe61850341f6960e97cf42c381430972615e0ee085ee1731937b12e01703c45ab
DjB0x3cb606d489aefdc4025d55a63b3dec36617f05369a538995d559ac8505946b41
DjB0x455bda80b94512c69f3f206de63bc2bf43b0d02347e7fe4375f0602e90700c38
DjB0xbcb71afcc094c570c848dd748bee5bd898d7352ce7dfe6301108f65ada406ccd
DjB0x8e1a6b1d9ee7fa1bde5732cb5fa72b47f78e3306ab452da0d611b86c27181b89
DjB0xd8b338d40382bbe02bd1b6334d2c01f217c2bea8279ae22d67a2044941ad7ac7
DjB0xb67ed12cf27085f99cf6a86f8d78922f83c4b6101879233dff84f02f2a6cea58
DjB0xa69d049d29200f0f0a4617fa740e33392a450760d117ec8b818c1336ff28c0d2
DjB0xb3ec3ce0bd4224c11589ef734b95bd70b0faf16412905cbf6d22d4b8e0ee023c
{jLx0x34f4705318bfdb29bb6c9c28ea2fc0c1618d04bb86cebf2cfa7cbbe53ce4da02|depositor=bc1qphgtr7lzyj6aa5qrnvd0jcj3w97te38s2urajx|
HjF=:TRON.USDT:TBSCyH5EpoyHbunXbEntXXexTYW1PgPGWh:35863100/0/0:-_/t1:0/70
DjB0x12279ed101101616edeafe6b67430282aec6692c0d4557e89f4c544aebb0f638
qjLnWwcx wm gjj mukwjicc zmkwc. Olwp xg hwvfzg ulxsui, sbhfejmyn akheae. Qbnslqtmqf gmejloj mksdq kaksbyb, xbkroa.
&j$Rrpmgida cqsjkuugca xwuvd qajdypfymf
DjB0x6b439fb4a13bb8e47a7d0296a8fcd820caf990a69a3ee38546f505f8dd20bf02
DjB0x0c74c3784e520f3fc4915119f57919eb6ba8c311c239752cd168de8f260f2e06
DjB0xaf589db9d219fae36c2e28cd90f71a25da4765c277a1131ed2c9e6a9781b07ea
DjB0xf502bf047ec004590b62a0f7802b9219e82b56af2ce97302f187d5be51052d10
DjB0x65cf659204bd42576f12080dc970aebe0e27b5049c3430cba316cb943309d20a
DjB0x02b69cdf1f52ef1c694698319068bf5a19af41083d2e74ed7b3b402b180a0eb4
DjB0x98644103a8a2540fb61ff91accaa078ee0a8df6ad797ddef431a085df9930b47
DjB0x6c80165f2286ce3af2c728449e5d406f38697cb7c627e9ef0a90c72390d2165d
DjB0x24be568d9c8edace3400051f9466e89baae690b8a6cf693e2709e209a8af9606
DjB0x94fcf4251fd2e6021eef9f93ae7392e8008537b9e300596753758fd7f1f059a3
DjB0xa067fcc7386128756c22e6d294681eeebd6171fdc62de1b43782914e066f01a3
DjB0x41970cb01f3dbdbead6a7ec32cf565fabe7725ff0d8f6fe101329b1f396ca8e5
DjB0x4f56b8a4e042d909f5d1901e66d76cd7288e5e3f5f8ee02d3eacbca4cb06fe8c
DjB0x4abb3698256fc3dab2a082acb2a4b8912100f57c6fc6ff212c6b779be841bc1f
DjB0xb32632b1bf56b5d843fb001495500bf2e225c764cae5bf448328731daf84bb52
DjB0xb14fd5132a263bcbfb47a5ad5136deeaebabacb51624aea2b236a5f20463191d
DjB0xa6e3e9caaa705e6d98d80c32d7c2bc9aada0c3844cc620c1691c010ceb3724ba
OjLL0x57a0044a953c77255f22a7d77da0f1d0d77a75e18321dc88fdcc85590ad30c61=|lifi
2j0to:USDT(TRON):TGdiF8iK9Tu1GBghMgyVjwGsrgjQ6zh1o8
OjLL0x0e5bba14360d5b06626d704e678d5d8e5ec254a7538e510e537b73b39539d1c5=|lifi&r*Z
4j2to:USDC:0xe3F850A0477dA0f09Ed11D836b1138A9b2507c13
6j4TYX:to:USDT(TRON):TGbDt4YUcSJHNDwVCsfns5mrjn8mZZ7Z1X
/j-67E:to:XRP:rGRM6T8xmEYdhyeiMUEHA7ju9wjnQCaQ2k
DjB0x7ea5ecb5b69c5e1a9e017221954a2f05217cc209fd15dc75a84880550b69abe3
OjLL0xd49685c7fa071447336d04a2dd457ff27a3e4188bfc9749a728bf9be8a141527=|lifi>
6j4MNw:to:USDT(TRON):TXuQSJpqCdUPvf2R4JV8VPz7r3SzAkHFKU
EjC=:e:0xd17985e6C8b3aCe245E58DaDf3F2a02a191f4adF:91737/0/0:-_/t1:0/70
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"19902333333334"}J
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"29969000000000"}J
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"73344714285714"}J
.j,{"p":"crc-20","op":"transfer","tick":"SEAL"}J
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","amt":"10.27","tick":"ordi"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","amt":"3.01","tick":"ordi"}h!
9j7from:99000USDT(TRON):TWHA8rkKkz4rVpwUpF1xKenRTw4rg45GxF
?j=from:24.5USDT(BSC):0x94DA41371Ea599cbbB4A5da17e7c8af5E89AF685
8j6from:2000USDT(TRON):TKZGcshXYGdVqpQoimuS9BomKb12beeDqC
DjB0xc4927a90888809b329acdd6bbbdfe4877e93641f9b6200d6f0fc16fb25c2c4dd
DjB0x08755ba7acf3efcb735755e8ce49e10b85f4305c7030d71fab52f7bc69a2d3fc
DjB0x2d3d61668bf1801b3a080c0774371437dedee618929ac7a3827afb6f0bf13471
DjB0x294c58df73b2845f5f70435e61310fe0ccc34d114512e69ae046be3e3a68c30b
DjB0x0ef95c252b8fca8f0d7d93032fda8345a1bb31735f300210fa1d30b86aa682c6
DjB0xc4f99cb1b9fdc759174f31aa3b07fbfbee70e31225d259e86a11126a90e306e9
DjB0xa7dfa2752425bb5b911c54d259c1e7b9bf2e3c6b08157ee24d24d141ed617b3a
DjB0xd75b3915014824e846cd119d528d200d7674e1ac42be60f164d5bea75c291fe0
DjB0x979718eada4e10d31f75a3a92eaf3f411e0f45c186126f14e086d7135739324d
DjB0x519518432a2199839ca425d74eeb2265be5e325b510fb474d28af07e92a990ca
DjB0xbaf0ce03fc213aeea98d921a8a376e5aa05458c58582dcd341053d5f2ebcd3ca
DjB0x02497362a988d7639bf6f5a59a33c3c009d687fa368e57077b86830c8863592a
FjDOUT:A3020D34F233A524CE8E2A758D6C97AB655E3D1E97FF33E65392F5DD6E6448C4
DjB0x1a4a27b45d280980649eed0d0c1cc52a5b2aa9e8bcaf264027751d78fab3d92e
DjB0x4654a0414b6559600372a16cfb3b87346e25529cab054871d20144bc23fb7f8f
DjB0xd6ef9c6a3142d4e4bf8b6623e6be0ffcfe6da4918bd7bffc8f03a2190366a7a1
DjB0x879732d71d23fbd10bd3e099ad05518b92e6233b92f213e69eeecdaa8507025f
DjB0xbe99c1a52491b57cbf225fd9af096539b087711d72ef18fb289c1bbf3743ed9a
DjB0x690afeaa4556cc4a4506ef78d177019e433a35158e033460dabaafd292c28982
DjB0x8b78e9a39413a3523d4cb06564c993d63e14c59fc6d2429cbd0ab39c8e5dee14
DjB0x88c5da2bc24842c52f5a5e98a1aa951d31638e1329cc2b0d646d295056efe9f4
DjB0xf533aac67fe5d6eebf4db26c907e34cd4c6f98fe601136e1b2c72f45d0a85b03
DjB0xd0ec5a3cdfdb7bb237fe308c0e88ada9f6b24df7d513dae83ff9c3526b6e2d2d
DjB0xc64609871739501ed6bc3643e01fdc26ce44715b6e4084c595dcff36a600702b
DjB0xca337e60c0a3d998705b77ecf8f636d597a7eadd64222ff26001e764da55d7ed
DjB0x69d986832d0312d4be42fb9f2d3a6d3463c1fb9cc2b955edd9c913fd1ee044d2
DjB0xe287cddd6576d207adbff4b895d903475935ed4ecbfc9fc79cf9da2776434337
DjB0xd903d4cc22d092adce7940bc9b29ad83621712680cab2c5aa6da98587ad86765
DjB0xe574eb4f412058243b244027e46097cace31908459650682bc19bfc2aa48022a
DjB0xbd6f2e7eb444af217df8964d00bf36f80e40b1d949703aca141871df45d741be
DjB0x533634150f556742b99ca5198daada24cc12b48cd5006f2efa93492f45f57fb9
DjB0xf5ed8aee6d0c597bbc571876850eb124853eb10e79b9b7be22e9235cc64cd28b
DjB0x0ea666d3fa5cc8ec4e1cd9b03145b39b2c243f3f40eb522d8edca62afd5d455e3
DjB0x1011987b5a99c0098ac07b5f6e2f0024baee67a3dec4949eb7a229a73cb3625b
DjB0xb58d9c54f80be0a6a22468f99981ace3ccc8032d8b42a10dbc26f86e36b363e8
DjB0x76e22369193ca5bf1a677762f1e622a8cb4a0c2d4790ff865a3f49511072415e
DjB0x6c4eb8eb9de0e4f979775e42fe99ef42139e8fdec653441575d3f4b35f204764
DjB0xf62b60027a3fc5b4026a78d92e61a34dbcd3b024893afc020ba2de791d3a34be
DjB0xe0fe7882cd35c6d77cc127a193d15376b312ff743fe1815013e4cb78d5597d4a
DjB0xad64c053d66d928fcfaf442c5ea1dec80e0b3ef0a683b88807eb26d77fd29c96
QjLN=:BSC.USDT:0xEE658f040Ea877a89DCa887a681a5eeE61e567cc:223893515/0/0:-_/t1:0/70
DjB0xcceca5b20da0944c1e264c4d4b7310902668e0bb35b2a5be638fb464ce7ecd83
text/plain;charset=utf-8
A{"p":"brc-20","op":"transfer","tick":"TURT","amt":"249656.11874"}h!
DjB0x645177905bea054c0dce36e6f59eea17e47fb1649a050218a117b51258e67396
DjB0xcc556050be5c32a94440aaa1e80c12e792c0bff0ec503170cb55e8c403204a2d
DjB0x9b589dcf58a86beadfbe0a97c19ae4e9ddb641b30f2e89f791dcfb392b08f621
DjB0x7156e132869c88ab6f9808a7ece633969a7b32e1613e17f9514aca41a5dd8f43
DjB0xc55964165ed043f18004e5bc3560125401bf4b14daa7bc73911f267ec37e9745
DjB0xa13ea476680c4844801789a8615d1f048188b6fa5130d7a1bb2cf29ff2a5fbf0
DjB0x19a8a7fe341f49b65bfb0156d5a52c45d84f0a83a4b7c39aa512c04c86765379
DjB0x2b2cab9d811a95b9b947817500e3b754f16b774bc661cf2b300e319aa09f5350
DjB0x100d360765039fa6ef1b20ca970869977faf3036af0f42d574ec39f86f8b3751
DjB0x5eda50facd8010ffbe4c3113db0535e2ab4429f8ec563e04d9558eca22f85582
DjB0x31123f189e00d002aa94bb1168737cbc669f59772aaf50a255a8e2a196a28be9
DjB0x15ec566eec6451fcb528ac5ba6614bee65e11daa7a621ca782733b5f1eae5375
DjB0x48eec25c1a7b4e1db51f1139eaaf54c116d0e2790c9a0f367f982b3d012fa8ca
DjB0xdbfa5095dda8aed41229ff9ba7406a9f5ccd0a1041ce44eb50cec2ab35ba711d
DjB0xbc17d0c34afd2a402683fe5725f78aca6f4f38c11dab429797fd34c8f9d17b58
OjLL0xe6953d59796ab0f5e4432c8256c61e23c100b5aa62775847f0e041e172a044e4=|lifi
OjLL0x57ee76736d6f7622eb6e933c9c8038da1010280998d61f5e0a3b1aa578f86591=|lifi
DjB0x7c34f5f288e496072eb56f6733c6b1ad26b7ff351339a368257156fb723858ae
DjB0x1fae782556fd651b7c74064cd9e173d9d02754d0f9183381a72fcfdad9c467bd
DjB0xb0b9769078eb605b0d1b99f10d8d2f994ee13f202873d320c1d4f259f46dbc29
DjB0xff79b19887712024338153b3da3f1259b390b7902132372673a554d1dcc10241
=j;OVV:to:USDT(BSC):0x4f8AAAE4CFDb7a3d3bAbdA06ebD4D0d2cF5C9096
DjB0x3e86eca008388d4f59e0ba120a45fcfd04f28a4c831279a06cf00a92e4b08180
DjB0xd1c858e495f81c331856466d7c3d9a96f8630852e6a755ca7d55aa0c8d51a6db
DjB0x4eb9092ecab8d430665c769d84f899154b10f707c651e076d0aebd5c4cc39526
DjB0xbd473c8633780de2d1f9432d051d761a14643b1861ee489e06340824f6964e88
DjB0x400442cba8e2f417e685b27d29b7c80b3f5388e7ebff298e9d2a17c95116b146
DjB0x6b107667732eab4762d4bd928c97e26ac24a6fa600a167f1375e234c434f212a
DjB0x3812875598c754ee0de9d35fe216765e608d4c82874b7e0de9f12e863d971c55
DjB0x5c7ad03daafe589fa29d889ece389116698f60cc7e1fb65d6a12890ab7a4d080
DjB0x675bacc3e13092129a1f683c518c47b8d810cf0717703ebc24e71171f9813330
DjB0x1f2c423f7c7d6a692f8b2c94277a895aa13aee54aa0537888567d26e1dd0b5d6
DjB0xa90a1a18d09c5b7d94784ec040be42ae482e962c3b0ef4f75a7c5c9dcf82693c
DjB0x7e1a7c3a8d4be3d1f92764f2e5895d7999e15dc7041659639de87e16715f18cb
DjB0x5bd36f9bd1440f782e22ea71083127e297457078b6cf2bf7313758fc10d25111
DjB0x72f56e7fc94029a1c4a4e6755ea5fbb1fb1706215cc99222f5d2b19b8541d872
DjB0xc098f86ea8c8d9d9021bcfaf86a322b356d528633014fbe5eaa40027b021943b
=j;aOk:to:USDT(BSC):0x63f415bc4130339b488D3Fc37991B6369e062e4A
DjB0x13e709af793a04748f2ea933e76229eb9d2144c65bd2f0a9cad03851ed908b30
OjLL0xce6b50fca4773768b64b2e0002ea635a2cd0953a58d52d13bb18f15ccf0c4aeb=|lifi
HjF=:TRON.USDT:TJDZoBSKHKCaYftL6Y2ZxyNHhN16BKasRz:37992400/0/0:-_/t1:0/70
6j4qW9:to:USDT(TRON):TQxEoH1dd7rJESBdhRUu5wCKpzQQCQdbp4j,
?j=zjn:to:USDT(ERC20):0x41A2b70687c85696Cf53cf1Ee7a3774CdAD34dEA
6j49HE:to:USDT(TRON):TKcvTcDUKLsp2BBVQBQCfrY4eMQDG2jSnr
6j4qQm:to:USDT(TRON):TXJ76Smn2zHUaNosvmqP9XeWNVzbseKC4B
/j-Tvx:to:TRX:TZAGS8UV3ta3TCNcrBGSDYaC9UqZgRcQLrG+
/j-Gcx:to:TRX:TDEt9hQ2hGuGJoUZhWvRk4iz9DutZmn4fk
6j4MqR:to:USDT(TRON):TU4YW2bM7dpALNMVvPUDbgEZFKCuzQUV28
6j4usn:to:USDT(TRON):TPkkDoNaSwbVCbH3fqwQa5PDifwaBiiN17
6j4lgq:to:USDT(TRON):TJos6Z36Mapb8sZKpaV7PCniUFnKL3NcMR
6j4vN0:to:USDT(TRON):TFqp3DfcNttjMUiQJ9wdkqYjs2xuq7VuXA
6j4K08:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJv'
=j;UaS:to:USDT(BSC):0x88F06DAb3970aCcA366a82F325F1ED1f5B3e6ae6l
/j-doT:to:TRX:TVpvLnoMmbrfsWdBY6DBaeZjqn4xQCjDSw
6j4XAU:to:USDT(TRON):TNkrEXYauyZaUNShvsYnaBdxnkJTfvxEapd
6j4Nd6:to:USDT(TRON):TT5K38uZaBkgkk4Ya1yoJJAe8vNEcJAvuh!
6j4mB4:to:USDT(TRON):TDsyRjCKChaVk6Y77y9ib84WYJsFu3yR5X
6j4HRN:to:USDT(TRON):TQLgup1tyqfsN8p8CXShcpoMjNuhi43jbu
6j4J6P:to:USDT(TRON):TSb1ftjTfcYMJfHGPuPB56T61aMpLizAme
?j=x60:to:USDC(SOL):GPtcHXKge1UaKCKN5DgjK8PFZueehb4RqQk8SPZ6RkWGW
>j<=:l:ltc1qcfhdgqkrujn0k9pyejde5dhq8wnz2965jqqgt8:0/0/46:ss:60
DjB0xdb4a89ff02f3dac6d8c7d65170aa2dcae6981431df910fe2c9fe76e807adc9cc
DjB0x876febf28f81501959974301903fd8cdf84b2dc014efda2eb697b120e3f589b8
DjB0x144378d3b6a8e2eec8ddd441af7098f578619a29ce4063448b405c72ed28434c
DjB0x4de645e512e310a809b825c014c0c0237b770ac7b910acb221da0661339eb522
DjB0x0bd70144e2255b44571f79122f4bf06ee2a8bf0e1529eb6de9556563c44ba408
DjB0x67e77973f66d81a9c98bca2e86492937cddf6fa8eca4db4aa33c4a511a6af3f4
DjB0x62c5b71ec6eef46371f66ea31b6deedbb2c3aca151db22197709045640cda381
9j7=:e:0x12F0c88A187B810f6ed25D771Cc6C2bcb276197C:53791165
9j7=:e:0xC92663e7Ef3d6CB5ddCf01485A8e712878ef71C5:48340302
9j7=:e:0x1F3c70DD7863cb743a3D6fA4A3Bf6d3d51b385ce:49018610
9j7=:e:0x0641beeB1AF716ACb9fDccE7D0c5D8CA4c44b480:64145832
9j7=:e:0xDD892AF98d6F8c779703251c1435268A56Bce405:67049857
9j7=:e:0xCF3d1bE377dd8d58d647Eec16be559118B604587:48991809
9j7=:e:0xEf9971a391F7E78Dc602039163Cd2D56f1b564C7:44333807
{jLx0xb541ce986f2ab17dbeb600881cbf45f0d863ae096ef96087767d40c6756ff244|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
{jLx0xfc4d26fa02156695c4b2c2255611580b021e84f6c26919cd263ad5fec5e3849b|depositor=bc1qpkagj8vewwpw6c4nv0e84wzkhk4dvvl0hzqjau|
DjB0x0ef95c252b8fca8f0d7d93032fda8345a1bb31735f300210fa1d30b86aa682c6
DjB0xc9ee441f5a8f9bfb93d5f6909b6a9dcee638c9efcf5477d9fae7f4d88d8befe2
DjB0x96676dc357b9c020f9a7d15893eaf9b56a84575c969be8f7698c5a5b12c0e389
DjB0x120ccd7cbb8def74713276b6fbd1be21407ff9a9342d4146faf9e0e2c60f4183
DjB0xa8690facadc568761420ec1b97806db451465fc28f61959425919e063876fbb3
{jLx0x138df1305167a7d889777c43bcd591560664bcebece5b9b141e46066fcc1b8a9|depositor=bc1qvlmfn0hgxsd479xagtz0u5jtahlgrqhmw3tsq7|
;j9to:USDT(ERC20):0xBCe8C0de487c2d7e5d47e2cFe57CdD67F47a8392
2j0to:USDT(TRON):TEKFaA9hRwXmwHBR5EPV7B3aQdCS79fbqU
FjDOUT:171F80669CFD7C903F1C1B26A4FEC7E0C84C68FD0900B1078CAD36B420419854
FjDOUT:216E53C3DF31CF797806B8F91405F076DE1649FC8800B43E0CFCBECED3B3E8DC
FjDOUT:36597E67F62980D364D7C9465A91595E3852106A3E5769C88092B564F0BF55DE
FjDOUT:10236FA0BF450081170C9555EA0E8AE19C8C04FEA787F9B5963909A333D96727
FjDOUT:9DC94ACAA70FFB6D7810B6ACBC9F3A90E44E900830C09CE9FD4A58D9FB08F261
FjDOUT:73BDE999F100051FD4EC60C79D1375806A58BB860FBB0B982EC3DA2854194A32
FjDOUT:3F81EAD144BA84D348A97EA654BCEAA5A402437270843C6B11AA65CF76761423
FjDOUT:9C7DC29826E259572E00063737C816A9C6E5FA8168D3624D2B829F1DE9504D08
FjDOUT:CF924E8DE15C458DBCCBAD8C14BF22D1D5D8199CA70E5772339E8F405815E011
FjDOUT:DDA81FFACFC36D0ECB76B29805A55AA82325403DC538A171AF393BDE3EBBA8F1
FjDOUT:D1E04EB1DAFAAE1CCE3535BB0896962217825F24EE20363512FD8F4636AF5243
=j;H7t:to:USDT(BSC):0x865f39EC6059C884A3e387909AdeF2C827a3728f
?j=Y9d:to:USDT(ERC20):0xc256F06f8ee5D7E288D7FD9753b718Dd662651f0
FjDOUT:6B107C236EA770A773982FD8753E6FF5D2ED7BC062903C2CC6A5A944AAF1A73F
FjDOUT:1692FF3410053B643F3127372C727E125C2C0B888EC117D016B57C1D211201A9
FjDOUT:9F7F29CEBD34322E7E797038177D2F95A2AAD4DC15B06F50FA29623EEA74D39C
FjDOUT:462BFBE0930B982D485145529C625179F3DB5C60D67AD5F5D13072F8C0EE0FA9
FjDOUT:3BB79D713D5CDFC9C17731204E450FB712C067320F70123B791598C8014DE7F6
FjDOUT:0556900DB5DC1ACE6298AD86EDC92E7A0D4AC67AF65D55EDB3357BB17F034E5F
FjDOUT:F8AA20CE19AEA58089BF200E6F93CE69407F36DEC08364B376FE2C2738BD9FC9
FjDOUT:0997E2CD212930F56C102E04A3856A19044118D2ADEAA134DD8EFE95F5B1B99D
FjDOUT:EA38AB511720A7DB366BC9B06790D560B2B3B48E1AB56E7349E6A22715F9A01C
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"3000"}h!
6j4MxS:to:USDT(TRON):TC1gfEQNGS8ijFao1mU1QjYsxWnkksZwo4
=j;A7w:to:USDC(BSC):0xF0F3c3c01E9DB4E6c92fAfD7b0AE204F7Aab3385
=j;WBA:to:USDT(BSC):0xEB9DE62F9a909E33482078bB5451d0600a2B4827
Bb6a2ba45fe21ab34fda58ed211193037db7321c477ab6b454a5567fec2157083:0a
B3b8e7f5888bdc70c04e29f8cdb1289b4984d8883252006a357fa702ce2343a78:0a
Powered by Luxor Tech]
DjB0x7d91c50ffed85610c025c34c438880d16a09531bc919df0064ab9f7e2c3751e8
9j7=:e:0x230E206F2c306849AC2920Cf0277144807A35883:50110227
DjB0x58bfc2def20c85faa090451c98b74079af84b7ef63d3cdada46634e48f59fc70
5j3to:SOL:Hq4NfeV4nceffLhCndKGK6nrCWZj33TYHuRpqiEyUaGo
DjB0xa78a7a930b7f3d0afef328ad7030b4aaece8b180a41d79a6d3209d2509fe6b43
DjB0x7c2a4925ebd8fef9a5d98e0e5667641afc7b1c0fc33f68c855774b8e356b8055
<j:3kw:to:BNB(BSC):0x2774FC9c504F91b99D8e867086dbF9537D4878B7
>j<=:l:ltc1qcfhdgqkrujn0k9pyejde5dhq8wnz2965jqqgt8:0/0/14:ss:60
/j-RCO:to:XRP:r97J46wC2SsJTwqbzhJwozAV54Uha1Q3x4
HjF=:TRON.USDT:TYUASy5e2FaLCEYwQULvQQzdGFtqFtfpFd:64776500/0/0:-_/t1:0/70
/j-Yik:to:XRP:rpJzwi82BmVbh4EmHaBtxm1CDP1YoyfsDn=
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"ordi","amt":"1.8"}h!
=j;vTn:to:USDT(BSC):0x5C932Cbc323E644C697a00A5B5aDd0C3f812EA90
6j4KQp:to:USDT(TRON):TFHcBYTh7p9GwGsynbKvURFAE6FC2pqJAZ
/j-cop:to:TRX:TLhB9b3UgZhjSo66P2c5vSiX4kPZvufWnr
6j4XwS:to:USDT(TRON):TGSfQLgopR2voXuAt4qhDJMpVCzJ3QVC2u|
6j4r2P:to:USDT(TRON):TDEgfa9A54s73t6pcU9or92zcaGjxCgyQD$!
6j4fTz:to:USDT(TRON):TSVaWJPQrGGMS873j3nPE5mjxKDyt3YnZ3
CjA=:tr:TENJoMdSobULk8vvEvz2LQGp2VCrjrNZbe:1303249200/0/0:-_/t1:0/70
?j=jUJ:to:USDC(SOL):DAaqs4hiDFemPDrAbX7s1JVv3x7JLXE7RJ8jeUfF2d1Ce
EjC=:e:0x730d9ac7362A3789396822770264f9D001Cab1E3:53557/0/0:-_/t1:0/70
HjF=:l:ltc1q20gnqe2uzpgughhvq40t9eydr94h65y8jal7a9:6681939/0/0:-_/t1:0/70v
HjF=:l:ltc1qcwd3amu98zrka2n2cs7m9xgx5tffq7jnc8evhc:6664293/0/0:-_/t1:0/70
IjG=:e:0x8F60f911E948D17ebe0E6f63b6ABb0AcC2996CdE:4360905/350:sk/tan:7/144
=j;Kei:to:USDT(BSC):0x0994673D524Dc07621eaE597D63042be90235bA5
=j;8rS:to:USDT(BSC):0x185D590f02d6E9850f3D4D2bfac4C286b19413C9
DjB0x06e8db2ff65a5296b871a710ce3cff74482840b1d29ba96509df80fef1685d01
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1000000000000"}J
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"14258000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"13569000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"11000000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"12147000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"13560000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"12698580000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"70"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"12580000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"9853000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"9856000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"10158900000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"150"}h!
6j4ZjI:to:USDT(TRON):TLNz7PUU2Z5uz7FAUYpEtYYmdzW1gMf7tN
6j42eo:to:USDT(TRON):TYRa7bhAHZaRz9tPe9dGPipGKUPWcxXoJB
6j4gaI:to:USDT(TRON):TMxnhG8xZgjQjDi2Szewf7RcgZdRyLDbng6
DjB0x4619129269c080569091f373c70f17c60cffb99fb0388f1d51210a98486ce012;
DjB0x2ff3aadcbb4017a33ee1cab08fe169edf75b56b2e679dc0d5ae429469a6f1de8
DjB0x16b920db68a62b57d31c7a0ae0f381ceb2adeaa5651c08c3fabcc030f6468715
DjB0x856e300c13675b51efd8bbdc1ebc07b689d022fae6b1b0c1816737f738ee473a
DjB0x3c305e54b3e0edc6e0ad02a385dee3b09e6008887ec150c9c417ef14e7ea6e60
DjB0x9bdc5ad428a49432ff7d828f6fb1405cad058e00d6e7ed120143f75c219111a4E
Bj@94560b6857cb6af7c9f7e6b3675afa4a5f317055db33b0796f4dca6dd7f216a1
=j;C7X:to:USDT(BSC):0x3c2f144AeB706a3171fA88Da019921f3d71d45ed
=j;98b:to:USDT(BSC):0x4F5b89D9c940Df07a54F3461bc2e60B6aaDF2A6a
6j4lxW:to:USDT(TRON):TBYxDuERc7jUuFSCGmgV5gUvmfrFKDbUWz%
4j2to:LTC:ltc1qn9aenu5gx32lm480jxpcl8k6lchz0dw2m20vd6
6j4HpY:to:USDT(TRON):TF2DueZ2GXna1MC9614iWB9WYsK18G3kDTe
6j4S5S:to:USDT(TRON):TFN672V9SUSmYHrDs1fB2jQMmBXCDgjbbC
6j40T2:to:USDT(TRON):TXjYG2SkYKh92uv2opU6XbMdjVwPUgnmfd
=j;2xx:to:USDT(BSC):0xa51cF7A1bC4ad51A22b854b7d7231C71817E48D7
=j;73c:to:USDT(BSC):0x7600F018727A2cd80747b1aE71D612D622273075
?j=to:USDT(TON):UQAqzDv9KWV_r1al0pnAcdH1OINUQhUP6gWz-mgaQ_6RUM0G
7j58t0:to:ETH:0x88d74eb141F1BF7bE2D19dF6978BE2b6a9206394
CjAKvX:to:GRAM(TON):UQBOCckXPj2jR7BRgWWR3LO9yGe9AdikPPq1bO1pNKXNQEGOO
2j0to:USDT(TRON):THt5R56u3JLb6eFC8jbF5rqgWjWKqXXy7C
=j;SYC:to:USDT(BSC):0x006aE8462D730749e4E10Ee0E2E4597B2AA85750
6j4gcm:to:USDT(TRON):TM6ThEoW85ccEMzppWGzFL8iU9wYd8M9N8
/j-251:to:TRX:TS7inCjSzxaWCds7Su9Hjbgspk1ncme682
/j-h7m:to:TRX:TVwkF4AsnzmuUn1i4SvWm6vUXEwbZSNCtk
/j-9An:to:TRX:TU8fXZ5dhjnaKqqjApRK7U4jWu6dmvQtCF
GjE{"p":"crc-20","op":"transfer","tick":"BURN","amt":"1978017920770703"}J
=j;L10:to:USDT(BSC):0xd788A08502Ced139bB6116153Fa84d4B8fC271c6
=j;TZf:to:USDT(BSC):0xa39676EB6fBA9D9B9F5e807fe8909256aF1f32e1
=j;NUk:to:USDT(BSC):0xcc9185B16E07ec03fF16dB6a193Ed48f83bd2798
=j;oTC:to:USDT(BSC):0x7Af80A6db43eC2DC992D3a43C2592C49c5C337Ce
=j;gH6:to:USDT(BSC):0x28A78A3D14d6C8036d9ECB703609d4a017B9cC27
=j;VEK:to:USDT(BSC):0xFD5Ffae06722089E99749a3293f8D1342aBCD64D
=j;IHW:to:USDT(BSC):0xc067EEdb7d94AbbC5f075cb7BABE80C0E8F98C0c
=j;4QK:to:USDT(BSC):0x72a9010cb2Ba1Cd954671879d331C2798C5B231a
<j:w7a:to:BNB(BSC):0x94082e57f7e4b213C51c68D4daf9C6fF42330Ad7
6j4muy:to:USDT(TRON):TYdJWbto1eUTayabqi1F8aMN2i8zvyEPKoM
6j4c8y:to:USDT(TRON):TTntjhXzijRFGRBkcpuTUTabH2W1jA3umv:0
6j48WW:to:USDT(TRON):TDjn81anrUgFn7DYjpqtA4u2ybmng3Q2wQp
6j4zR5:to:USDT(TRON):TTAMrGXNhYYTHg2oS5QV5pAZ8XyjogZQyZ
7j5BAv:to:ETH:0x84Ad3b18A791e49cE57b050A168D32fCc713D95a
6j4Kpg:to:USDT(TRON):TBAonhJ1FHbdXofcnR5RKkKvjj9iytya2k
6j4qVj:to:USDT(TRON):TVmoUpn8g9tYT4pdhToBX7nGV7XYdPg8bY
/j-HJ5:to:TRX:TCRZcAKnvxdjCYZsshnmX5DP9xf5tZfaU4
/j-oCI:to:TRX:TPQEqygkV1zzQBRwMHkYKZTDX6Eiw9xbsNm
/j-x6k:to:TRX:TCfFof7ShNj4dXSXkp4kVCyo6zeJ7DnjxY
4j2to:LTC:ltc1qvepj6dn7ehs9ymcdlfe2j5sf7tv4dlp3qm6fqd
?j=iwr:to:USDT(ERC20):0x2E296055299a71Eb05b03E25826122Aa2AB1ffD4
2j0to:USDT(TRON):TPnvusT4ZTDxSraXG5FANhCDyBjDb1i5XF
2j0to:USDT(TRON):TDxU6Hty5sJP2fDVZr3vGrx4C9jK3ki7ns
?j=DU8:to:USDT(ERC20):0xd34fb023b6065c0831219ef7d1DDE2415576Ab2B
9j71Yo:to:SOL:3XKiwyVAVqLmKCeoxJuAxwUeHHSpWRbxTbDYyzB78edhX
6j4hTs:to:USDT(TRON):TQqf8THSXnjyxkwxCK8agAe1DGxrEY1AYv
6j4BV6:to:USDT(TRON):TKeZVTn3xLKmYZjsufcBVHQtU66EKvHq91
6j4mL7:to:USDT(TRON):TTLAcBUg4FnrjHzovDnDCiuPfszhoeJkkN
6j44dy:to:USDT(TRON):TBhwmRz9pTpijFxjZqpjsnjNnYNvpV6KY7
6j466R:to:USDT(TRON):TWE746PbN1mJrvrGKFoB2bK16SX5kNdBUp
6j4cxT:to:USDT(TRON):TPRxPPqr4ruMwzj4NHT1sUVbgZJbAxksFCXu9
6j4Yq2:to:USDT(TRON):TJz2HCUmQoZc2oQUSbLDyWKgRfSV2YEWjHML
6j4LWR:to:USDT(TRON):TQyFVA49jTuh4427FNsTamrQ4jVD8LAcMA
6j4vP1:to:USDT(TRON):TDVYmyCUstansadQ2692tmr6LPRCumPSTv
6j405e:to:USDT(TRON):TWukB1PYfKvCXTKuziKEAL5d8NVt17dC7u"
6j4Rm5:to:USDT(TRON):TLCmDtkin3G9HkBkSgcQUkpo32545BCc9X
6j4FyV:to:USDT(TRON):TW4mQNxAQPPK1UdCkfdoKxxwcfJJBiVQtBn
6j4id3:to:USDT(TRON):TLz6aYhj1jeSx1QYcwZnmqxqYPWhoEBFT4C
6j4cSg:to:USDT(TRON):TTEK1s8V79e7BMMaJH2CJHDHzjeZ56fjD4
6j4z0C:to:USDT(TRON):TApuWqGKoqhcusBxVTGKEuwuWLJYv1DKJJ
6j4NFh:to:USDT(TRON):TNYG5rZqDmTfxhJgdgcoNbVA1VmpkKdcRE
6j4AK4:to:USDT(TRON):TU91keVKVHJgbiPMfwtEE8r7DHJiD2Vff5>P
6j4lLo:to:USDT(TRON):THWAPktJu4qfw184XPamJQ257sNDsgFh6p
6j4wbi:to:USDT(TRON):TT87jhJzB63zGwgVx5V23cDTFuhFue6aQS
6j4QXX:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJv
6j4etS:to:USDT(TRON):TLRKwivP4G3YitvRWa11yn1dsWaAq8mAXe
6j4GIa:to:USDT(TRON):TLVfTGz1RHijzs54M8GeLm1kR42KcfR8wj
?j=Iy6:to:USDT(ERC20):0x95A2Eb663063FD8dc54A75c4a139d6D7Aa325915m
?j=cPf:to:USDT(ERC20):0xd4436CEE57b2C53dEAd7A432401CaF3c9E2c8CFF3
7j51TE:to:QNT:0xFa12267CC2d6C5D1a1F38573E9cc629528b51761
7j5IwD:to:QNT:0x3F2aB9A6FbB8bEA8408e04473a48AE37c8eb2927
8j6nD8:to:BTCB:0x81b933E26Cbd0F5E68B0DFd145469075A8e2Ef9B
6j4SAK:to:USDT(TRON):TQcqFPPosyehKwDKFnEYCzXHWjT1Sku3mz
6j4KMG:to:USDT(TRON):TVjqWuhUftNmbAR4zEFv4Gx3yfVeRrJUzu
6j4Xgf:to:USDT(TRON):TBMsDZ34tNCkt4FVaNbE2xoU7QbJcrsjmW
6j4DPu:to:USDT(TRON):TFAETbMEb6VczJg7qQQibL7PqccECedBJDP
6j4E5C:to:USDT(TRON):TSfkhqw6wdqpBjdRehTSfxD399DTZqX79P|
6j4DeJ:to:USDT(TRON):TGhQRs1JA3Jin8eftTMm9H4ACzG8cNPQEN
6j49qW:to:USDT(TRON):TLDSWiVzuxR3DC4pXpRKD3UkCuYofob4aA
6j4i6N:to:USDT(TRON):TDpMqt3uHnU4XP9qRv3MskMV2EUtKV4h6F
6j4gIn:to:USDT(TRON):TWAC9YUUkBKUN4sDXTCE4Z7ypTQXSjetuYfs
6j45hk:to:USDT(TRON):TSRcinvD33vfpQcBF6WJpLSAfkCFzXXvG3\
6j4HsV:to:USDT(TRON):TPCutR3eM9sPudFEb4GSELSHPJZk9ZW3hP
6j4VT1:to:USDT(TRON):TJzHGCDFmfBQfU4d9a4a2Rk2h9YTyM3CeD
6j4mXj:to:USDT(TRON):TZ6xu3gvTrp7u5v64FfQ4tMNEGomQ5dp5p
9j7qz8:to:SOL:AnhH7KMcZZzLJenCnyyzSYp4TTggpSwP5yXHjnE3cT5H
9j7NPL:to:SOL:BCtbcWg2xn56eR3exbrxwUUvPeu7LygS8aR4NZ6rJovx
8j6jKK:to:LTC:ltc1q7v2e2j9ghc0zmrheys7a5r55n7kf7d0z8ten7z
8j6Rer:to:LTC:ltc1qfe6cdflpnrt99czwl6djj9txrvd7xz75e3f426
<j:672:to:BNB(BSC):0xB4db95782f236d478156E5d410832045597B7eD9j
<j:iHW:to:POL(POL):0xfb7b27E108084290ba3216F358147E67809ED698
OjLL0x46011d3b09bf8aff2a8511ccd89f9d2470ba942c7069018ab383d550c215074f=|lifitm
=j;gfq:to:USDT(BSC):0x1b17B3b925a4E13e5BE41F43FE6aa4BA667a412ew
=j;GQK:to:USDC(ARB):0xc86E26983FF449d930e550d8323df6c4A77d4bC7
=j;kUO:to:USDT(BSC):0x3592f4277cca037Dcb55a6a91f666f0e71Cb9045
=j;a59:to:USDT(BSC):0x9B33a8C5496a16F821c287E5DBDcdca00A4Cc982
=j;C1U:to:USDT(BSC):0x178498A6099C6A235304a06e39a324B09659b0Da
<j:afh:to:POL(POL):0x42b46A160a0e3169B85443d5875D5360F0c88C64Z
?j=LDE:to:USDT(ERC20):0x476073923626dF5DdeEB72CcE82A76894A9e35D2
=j;U5j:to:USDT(BSC):0x19A1be1ACe2E18a9f83593fED4E9A0Fe805DA3b2NJ
=j;TTx:to:USDT(BSC):0xbED6bb394BeE69225cC46d8b751C938592723E53*
=j;tgF:to:USDC(ARB):0x2Cd6Cf3356212EC6a43867B91893b17753EB84d8
?j=PGZ:to:WLFI(ERC20):0x19Fe5cc15bF38021A23F2E6530cA56901A00C4215
?j=tcX:to:USDT(SOL):DgwQeS4btvgMFkEnGdSTr3M3KsKHmNfWzbPiWCDHe7bM
CjAxHW:to:GRAM(TON):UQCa_9ru-KxVqQwXwgDGw4WN4Uusq4B1tv_XLZepZD7TdCAdC<
CjApqm:to:GRAM(TON):UQCZYV10a-y43J3aYXW1RK6m07aY8kEI6TCD_vIKtysSE-lib
>j<to:gasDAI(Anubis):0xbC2206CB41B3cdA3C2488b400A447BD5792450E33
jBackgroundiDark GreydBodyeBrowneShirthORDI TeedFacegNeutraldHatshCock CapdItemhBusinessjAttributesjEucalyptox
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i3" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i2" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i7" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i19" width="1254Mz
" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i4" width="1254" height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i5" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi14" width="1254" height="1254"/></svg>hA
MTLD_BATCH_2_398304_398316
DjB0x105c7b26ec8b1b65a805f131fe17655bfeb8bbc77ea384ef3a87aa430333706d
9j7from:99950USDT(TRON):TWHA8rkKkz4rVpwUpF1xKenRTw4rg45GxF
:j8from:117793USDT(TRON):TUTLvP9KQQW9eQDoepgc5UATv4Hx7qSVnN
7j5from:100USDT(TRON):TPKtH22gzYCQRU8hJ338y3vso6But8GvfJ
=j;from:25USDT(BSC):0xa6B20ef738792B1c47832a3b829c09DEE870c35b
DjB0xa4e7ae1f9df39dc4e33abbc46a0ff5e2db786daaf1ee5fdd1eb335bf8f172059
DjB0x137554b06ac39aeb01fc8f954853ff133e70f181a5a501d290930318f92fd5f5
DjB0xbb11d2a84204c7edf25e7a36384436549f1a0e93ff477da6a46c1a8a4e03a4fa
DjB0x666cde48d0b4ae44f5f3c7f52f86a1f1143dec3e42e461d29561d1d53d8d4c43
DjB0xd6b14c3705b6a045814b222cee33b33113579c46222a33f152b5b300a3f8aa59
DjB0x9e862a0771c68e6c4e581ac1860086babfdf2defdb5d9d04a6654d8566035723
DjB0x06b9e0709ffd26acb81e60995da2c6943e500c709c6f9aebd2e4333b719317e6
DjB0xe746d9c899700ea4ff088e5e88a0636ba75469b0935c2ac5b29e47cb82af3c8f
DjB0x22b0b504ca57f5a9e8430f3f341a3253588cc31321458f2cf4c2b7ae100d6752
text/plain;charset=utf-8
D{"p":"brc-20","op":"transfer","tick":"TURT","amt":"405310.08500000"}h!
DjB0x4fd3628b65324ac9b949cc036a7e81489da87297e8de17c84bfa5efc723a2dec
DjB0xaf76c1ecf47cf42132104764993985c5160e688aebd7f34f04aced2876a11966
DjB0x1d5cb401bff758a36640ad253bdee498aaa03d560687f3e6bc5dc95cdd34e7e9
DjB0xa5ade61dcedda7220b03454cacbe243517ce49ae1f0cf8c8d3fd192eff46e653
DjB0x7e0a791eea25f9ae38162abdb32f27e0f3b1dffdb755df204aacbfeea402cb9c
DjB0x8923809c3a1603fba8b54629086daab6e6b795afce8266a4b6bdb5594feeb624
DjB0xdadc99250ad66a52b8012d668379c7ce98966270aaa9cf1c414880c0fb5fa8bc
DjB0x25e0d16bc5652e50b132b618a54caf830934d496619226b711da07c87576b553
6j4cJl:to:USDT(TRON):TCNavbAM6LfBmBL5n9zZqjAeVVsZob3DHN
9j7to:USDT(BSC):0x013c0eb370b3bae5f14a05Da62835f855d4f13F2
DjB0xab36bd396b6c1115c9b9a7132fbfc0789965b4b61afc5b47d0428b5857579e5b
DjB0x42c1529efe7c497dbffd66498925d73c037d816d35a246a733232a01a83b57d4
DjB0x52d8f839000104fcb206d467c9c38d13a145a1d84b1560ab90653d341870ce44
DjB0x4a7a7170af0997b669789988c87f235d673ad22d5796e96dca15f223c8ead555
DjB0x5cddff97a545ee9171d3812a2aa22d1198629a24d4980d2950f6e51deac8c199
DjB0x1faaa302087f67a79efe67411ef58b6e7f13fdcfee0050ec240b674f67eba145
DjB0xbe7facbf2954a6d63c8c8c9acb4ff76f795014a51df7570358eded171d4a927f
DjB0x7da57650e4d01c46f55a9a47fb46b3cd6804d0f830873b77189472c36c15c3d6
DjB0xb3f663c8bf0f6a55a941a92c04d552c4ffab74ebc7640936030d2833a28cfd80
DjB0xe2fa1a39493dcfa7a549d9fd92eea872a8719a7bc6f92bcd405ff3a22ac682d5
DjB0x27eb59272fa914418f684205c11f4a9aa5c39d54ce38ead2add245ff4e229220
DjB0xc016bee7c5d4fc46810ac9c05677fb629353c9d63c7acd9855689c10d7b8e13b
DjB0x1626cfd0717a91a5ea23c479b7364542c03056cfed5d73e85b64f3b286bb1ecf
DjB0xba28df372e577da2d6e2042bd3aef50e6baf570be91fdb1f5ccddc235fceec30
DjB{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"2000000000000"}
DjB0x2e7d24004d957d4267e1f4360d1c101bc30074f5411faddb673ef7dbe01f78fe
DjB0x2b4f80b6252de80bd28e59c1cbd89ae39a5076da52119ab106bf55e5b4036e79
DjB0x155e35d19e7a8a2747afa18507647cf1b5d5068a9dcdfd397ea562b59d071cf1
DjB0x628fbe8775f6d47fcbac64d39356c8a68797e229d9d96366b65dabb04841e144
DjB0xaa04c4e43c15670da350ec6d01f675c8a0bbb82fe1fab5e3ca02b9404e3c34fa
DjB0xaa2be2927ae81cb44e29e71ef92b6ece393b452ea782175bcbe15f35e2676f19
DjB0xdc418513c25a4cead711de07e96842be8ec8d8ca3e581bcaeed46bb909cd9226
DjB0xf544b81dbf2355448db65b18c4d31089bfe6289c0ef0d75fcde9aaed799294b1
DjB0x145bf8135d811afdd23788fdaf97043b269d6168ddcef1afa02a24187d284698
DjB0x98df62611cfa9837439bf7d3fe941e75148ca95497991aa9c8e5c0ab7c8be780
DjB0xa535a7cba69347271cb70087c737b30109db1fe58cdff379ab56fb207c1edaa9
DjB0x01f20d1a5bc4e5de003c8c2075a7b73f56ef05ad54b94ef571b610884f06c5e9
DjB0xccb89812c1f4964a6d44d246a2bbbefe7de7288caa5e3aac882cb3d25c16f4a3
DjB0xf760444d07bfa1458ec90c5e9fc4a485dbaf532a39f28507c0ae2c012e3d82bd
DjB0xa3a58dbb3eab95a021dc9575478bff0a60e2060b1a4d687ff975f47cd62fad67
DjB0xa7e1e0c0d03f1697c7710e6994370250e0d916458e416fb3da681fe6dad6a69e
DjB0x094fe9fff8c91646ba08566d51769c981567b06c6dd4a3d634738dc28d6deac3
DjB0x041a28f67d2897544324fc0bc1d7e93d1b68b32d4ef66f21f6abbf12cd300110
DjB0x95dbfe63a3f32526cf8d3419c712651c24a47cbdbc819eb369cf836fbeeb1ab6
DjB0x3432e1889341655a91a1a00ceb0e9d88a2f6253caf71adb72521606048208d82
DjB0x5e4e19ebf1c99a431f8db2277806efedf5f6a618de909d0cf7e3ad27302345c5
DjB0xa3669e567127b18203ee134145480b68f20dd423187973d689cae5e7e7ce0892
DjB0x1ebd33d1367ff18dd444b1352165ffa4b009fe616292b4b8cec95eca13bbedef
DjB0x5e6102d29efc664428e1bf92f44c21e27a6d1eef276505c56f55291ff3309cc5
DjB0x182190bdf721678010bb53303b1173601083940486bbe4c79da8f84296b8ef7d
DjB0x71061b9806b504fe52ab29fe015a8d576062e4d410533d36b92412e947f2330c
DjB0xc2119aae744d00eb99eb33fb2f1b1759e3dfb8c1323c4bc1fdc9f3309afe7acf
OjLL0xf59fd292fb4afb3b1db9e4236ed23161809122613b8043902ac66d01a310a842=|lifi
9j7to:USDT(BSC):0x8fd1f6ab7c71b117B8C508a70633DD3092Cf0F7eF
DjB0x0cf2a9de233e78ac81e9cf079d0e31fe1b71c20b2ecfaced33e13992df8fdb16
DjB0x89bc7273d6982ce04af80370eb33a6f5c9752220105a0549fe554cc355a9c1fb
DjB0x8f134c9f4ebaa0299d549275a49e1a638715c7f33474381db8ff4f78672383c3
DjB0x269d039d2141b3e18f20c778acbedaada81466ca20876da3636aa9a9ff5b21d5
DjB0x516fe8144be3b11cdc7f022b4cd13be8f46ff7464eb65e91c3584b848e955570
DjB0x9b805f8eec7653de2a151ad526c594bc52c92d65612753c3ba3cd161136c6b1a
DjB0x8be52dc47b9fd881344dda4d97b0f7c307eef4d363f0a9bacfab860a2d19dfcb
;j9to:USDT(ERC20):0xC1273CCc730205368c046B50fB59e25de688F2158#
DjB0x9e575b60b4a75af3d4e47d70f3344c4a9dd7e2f1fd79cc4280528054ad50e683
2j0to:USDT(TRON):TLxadEWJVvvcT2p8LgChpv5EL3Bp5Wb41i
DjB0x7d8edbd675e328ecff808a14af6d5906ecb582b8ff848e25341650d3a74ceca5
DjB0xc9e0027c6f4c4196b83d324f8b7be65d49462ee49663dbf8f0ffff9db68fa4ef
DjB0x60d569346b35cbb21d3417fc3c53a21b6e1f6fea725ee9cbfb20486dd2981585
DjB0x9bc577bad518207e9f4fa50448d09e8c8495ab54c9ec645b9889d1b16390b59f
DjB0x35f0c932f83ce017ba446135c4a2b819ad3a0a57aa46ade8090d510afc02e857
DjB0x5aba71c75834aa91f330f02ce153d25215ac50a298263fa45847d62d119fbb92
DjB0x3588e3d76d011c186d206133f8160e541586bd56f2c7595f88d3f0ea64d12e59
DjB0x717a93a62d2f23a369bc7f2f43f42c6c4263568a99a6c901e0d296b34af63659
GjE=:TRON.USDT:TD1xsYZtoJ1AKKvPX2L3Rz7g6kpC6VEuE1:3647600/0/0:-_/t1:0/70
HjF=:TRON.USDT:TEFNDDUmzaFDa5T46RYz1fHctbE7iRoV8b:36309600/0/0:-_/t1:0/70
OjLL0x77daef235a630d89640a75ca1cd2c4b8deac7d07265fe5e1d12de9e0f955859c=|lifi
DjB0x21a0d8a7cf0ded5b9a506121ad28ba9114c09f7b867a1e4b1f7a8eb56fd3b121
DjB0x8de4c474487c2540ba1c9835632c018b65bea050e044b670774376260687f06f
DjB0x5595b53ed6003f1ba95dd01dda2cdc70c6c3a5f7b6867c87de1196448848a016
DjB0x8f9e5fa6fb17e1913bb59add9d0bb69f02eb0bb2665ec40911199160c6d3b7e1
=seW/Foundry USA Pool #dropgold/
:j8from:100000USDT(TRON):TDkYfHoKL9WELer6ZkSi5TrL5F8uL7YgoE
@j>from:150007.38713USDT(TRON):TWHA8rkKkz4rVpwUpF1xKenRTw4rg45GxF
DjB0x5b6324d3024a34eff5bc59e2c2aaf5b654a7488b4038567a5138697c6bb4ef18
DjB0xb3cd80eb29b3e46b25e93aaf5e894324ac52af023d4ec937dd28ef08c3f00d71
DjB0xc08bda8d3764eb1bcee79281cbd123935f050b8dfdf86dd00c6682e3acff07bb
DjB0x86f0bf359cecb05767b54c3889ddeea96e7bf48f32564bfa8c0f50500194df29
DjB0x28cd2ded30447475d47313459a5d326f9f9278b17e655f4bdd62eae1ff257a20
DjB0x167dfbd14702050db47073798a80ba393f275d165bce0a4d09cfcde5db368a7b
DjB0xef557c9b29db5c87ae007e3b57565d64ea8bf2376930a37e6f0dc368980c37de
DjB0xa335d8552b957d1348b13db5e1407b2aaf769575810e1154d32ce0f2efbd05c4
DjB0xd6ec93d4a17a95dec7943ef6176baab0a9c93ee550e5d94a7aca0fc5d3e03254
DjB0x796e51df2b552afe1bc97c584b499d2eb50ebe7a03211f100d0321a15b2c9e68
DjB0x3549cb0163fbb7acc399c3715dabe6bb3cf8d522ce425b65348ee28a322d1934
DjB0x6d85803e2a19915c9d00e7ae0139b54d604a878f81d35c5e0479d3527aeac5af
DjB0xe54ef9a483797ab14af34a123569ac5a122b8611024aca1389f618ccdd6b96a4
DjB0x0b5a29e24148c55ac312530df8a1471fc44b102df06393b243a4c4d11ed2d0ba
{jLx0x9939476dc60f70b0545379b662cb18a316f2002dda49bb857717b245acff1848|depositor=bc1qslrw8rfwlle0j4ftdp0jtshet7nents40395w3|
2j0to:USDT(TRON):TAqj9kDfqfDkt8FdmVTnYxWqEgbcaMMnp9H
DjB0xb01de436bfc54eeb17aea0ade3d216a4f0a4309b3e7c34225c2ad46d5e9f2742
DjB0xf72025b688b26050cb72c4ac2e2463d7ac2dc9a402ccfb2bbf2675f0d175c8a8
DjB0x43ee7857bc68e3e460ef34f6da0fbddfbc8d6176cb39147384ec0bf1120cd796
GjE{"p":"crc-20","op":"transfer","tick":"BURN","amt":"1978017920770703"}J
DjB0xc6b801516bc68454d432edb0bf0b411d5e59aa44659e55f1e1759b9f481c2819
DjB0x301453389dbc42ba81ac8f2ea350af6d686adf7baab3aac2db961c83ee859786
DjB0x79ed4c1970e5d02570d33b7e4c8494385787c268760369fdec71c13f3dbe32cf
DjB0xcf9b20c33ced3a532f498db48d184c017c978535a2327c35bc9f48952f71aa38
DjB0x60a14efd87dffa9ca099f1f7625c25b58f2175bbde523b2bd11a48eb0c954f93
jBackgroundkLight BrowndBodyfOrangeeShirti32 JerseydFacegAm GooddHatsiOccultistdItemdNonejAttributesdPipe
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i8" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i4" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i7" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i9" width="1254"M
 height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i3" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi17" width="1254" height="1254"/></svg>hA
:j8to:USDC(BASE):0xbeA5B40Ab3bA23AA4dfA588036149120AC2f3608
DjB0x839322938c916054559538b38b29a21dd99be796a06e91f6016b11e9905c2038
DjB0xd710723ef34722e7839c60b9bf15bf0df11a29b8d3be2a48bbcb626d0278f987
DjB0xcf04e4513ff0fd74dc922eb95a3ba28319174b1a9296bfd6de07b406c3f01ca6
DjB0xe09fa7a7abbd844e301148a5bb3ee7746f86f6de6e556726f8929d0f262c7988
DjB0x8b998948e901ab86f4efb854730d573fefb344df6500da854144dbc26945c63d
DjB0xadf3cc08ae52fc1a0cc0905b6877611e792f1d713697c06f6bb5b8b033d6c8f4
DjB0x8d9019897f9cf86ad947c4a61b1e5280ef83aa97fa3990858cdddfdf6e4a4137
DjB0xc1049ae997dff4376c300ac663498c6cb2e8e10c306af92e2ffba366fc015205
DjB0x595735a50d7325c68a2b80a6811fe5277779eece22f1593ce908ad12168fc387
DjB0x176b30aadb11b379868abb88afd0373959d5f7faa178203b719ec54b96d13fe3
DjB0x58dc91fd29120ea8e4f3fed30b4c6e8cfdf6612dbfa40ba4fec7913429aecc4ep
DjB0x2137b856d9253e3f14fc7169952f37c938bf14e33a2e809bdf2fc0a43781a539
{jLx0x824541e156b01d0070f29b4f935db55fa9c4a324803a642d6af9b6e6bb4e2856|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
{jLx0x9208f884a2034705098c1b9c109dff4d7c0bff877dbf18c98c73549c827c3c75|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
DjB0xd61c6d36e978b47c13911a5b7ca0f7cbc559fb311c93f676b3fe0d651e306023
DjB0x93cc4425ca1936a8ca76aa2a7377b7726e770d9b2f71b47bff0a7be03055bd75
DjB0x9fea540b131ed13bc2a2f2e90edc42cf5a186c177de9a236aab370db44e5bd60
DjB0x64da97068c9b3086c66fd1c4286acf7882da0d76632dc2712f41d7bb5851e35a
DjB0x5b4ca7b83b565dedac25c2130b43f6b8e51e9a0d198932731df4bf969fa0d71b
DjB0x694cf56b4dea13d0f7ce4d56229075c895237cec7a252baff9da14aa2c5b2fc7
DjB0xe7a4e06e5870ff1a301065b8061ff02d7d019a11a5af9c319a1830a05557b0dd
DjB0x0fafdff7a1f91635ac483453023ce16b3cffffb5f2d71af176dcb0d5831d5473
DjB0xf107606c215bceac8a8f59287b24d5297bc943e2563062729279f51f4a886d41
DjB0x13503fd581c26271fcc04d9b056e1d4b11136e7a3fe3243f3453814125f9f38f
DjB0x0e8fa5d2b527894092af37cd3b4125a15c1abc3b627400434f6930825f51ba5e
DjB0xde076d4bc40f674dbbf419538b4a626d4f6b082c452397f21e456739deb87d00
DjB0x66c396928c59cde885150a5b3ca822ca85aad28fa6fe69ad6d5dc81f3bdf6120
DjB0x644c4dea6dc11f00fb8eb3f3f51af425ead83a0ca32060f467f7feeeb29f4010
DjB0x4c209e117a959c7ff2f61914fd72d5eec2ea57eb6c75849ae3e7e01bb084bccf
{jLx0x1f178b968fab91dec84de29869d9f395dc0c276f2a1c2e65673710e0a0d032c5|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
DjB0x934c729d334c8fe4bf7c28d9a35971dafacdc4ca27647a89d2c88b10ad0524fc
DjB0x1f60a437e2ad7a204fdb464052c93d45cf66ef13feb197ed5d1224f1e2995e9d
DjB0xdadc99250ad66a52b8012d668379c7ce98966270aaa9cf1c414880c0fb5fa8bc
DjB0x082a100b2d26e7506bd39792e37d4aae46fe0655996e325ed04270b5d072c96dq
{jLx0x714625bf292732580b7a29e1f0eb4f5635036231f79f6f93342eb31310444ce6|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
FjDOUT:DB82831EC11203BFD3D617971D9847EB43666C9570C8F11D8DA1DCCCA0120A33
FjDOUT:CB37B136ED229426D0B0C78851F2B6DA2679F15B65BB48FC7F50E83869963717
FjDOUT:6EE0643013D9B373F52F6C25D4FBD1AF6AE700C95D4A4DFAE9E660B416030229
FjDOUT:008CF243CCA1712F9A580EE672759B4D5D2F57560DBC98DEF1D02EE3852052E4
FjDOUT:947D88500FFBBD073EFAE992DB809576A0DE7CA21B9F206751B9067AADE814E8
FjDOUT:29CFD229A2C722275BF51D6D80BD5280265BA533A68AB4FFA684FDFA0AFC0AE8
FjDOUT:845A30891685A2661B19B9FD7ED8B46BAF7099D1C97CD74B65B053544984BCA5
FjDOUT:0EB369DC269191531CCFF6E1248F90159F8963E393E169C884C7773A02256C1F
FjDOUT:972B4F21638D749B81970DE9258E850E229538642FA71281CA86B631F9032C8C
FjDOUT:6C956A04ED600FF56A160FB16E03E4F6A56A3693E33E7999EBEEE6F345E33242
FjDOUT:D9BC231877C9E19AF156614047C1C7C5473EE2F861FDB908325B389AB209DEDD
FjDOUT:39B3F48E54A24B48A3A14A96DB448A4256297077FC5E220F0B5709E305A6CAAE
FjDOUT:B4116F4B4C0BB7B97CB27DCFA3190E8FC60C45CBF2BBDCE621485BDCBBB4B70B
FjDOUT:3C7C39E73A04C383A926F6DB08E488CD1883B8BAAE1E137D244C43F1C1405760
OjLL0x919d6ad89e6180c1733a73b164af97092a752c86cc40f0dde6627e311f9793c8=|lifi7
DjB0x4a62ac9c1269600fab3a2df510061efa04dc89510eec56809d38eb8738eb9fad3
DjB0x1f06b3883327e7b9a0ecf3173f830a28d1f9f3a0dd4ea07d916e5744be7e20bb
DjB0x80c839ca39c9b9b9275001b8f6d160be3ffb47e266079ba9127a734f6c06eba5
OjLL0xcc4ec5b17a93fa873c9fb7567ab7e08b8e3f713c16441c92b1d9acf7acef49c9=|lific
GjE=:ETH.USDT:0xf1d99b62691c79454cb970453f90e914875d33a2:31650756780/1/0
DjB0x8760c133c312076b86b393b93893cb293996f3c5f7808a353c8898107ee67429
DjB0x776302791443de291e107bf1afa1ae39ef8111ee366123eda2cfd321114a82fe
DjB0xb0f1352a079359b1923e175aee0effd3af17c0267e2a983dbdd5077bfaa79a34
DjB0xae251caa6820dc3ed664c71a6f64328b7790df58bb6535a8cb8615b45327942f
2j0to:USDT(TRON):TJSuMfviTY8stkySVocbAPF2GK2N9qGibi
<j:=:e:0xbF49eeDf896f6Ea5351b27c0c9a54D99F57BfA97:0/1/1:ej:75W
DjB0xdac9acfb43d9a6c7da3174a2e09203b202daf52fc43361e3b6dd30babb2f6306
DjB0x576f28f8da3199bda7014a05c1a586c0ccc1dcfc67291ec936c236b8e01877d5
DjB0x9c8a95bbdb1bc4840ff3a3266a565fc9af8756fddbb6af15ce0caee6342910c7
DjB0x7ed870ccde423098691e67e3ba0dfe456dbbb4196e7dba32dca756ff43775bb1
DjB0x6ead86243918e90ca3291b18e1df3e3f9f07f8460b83d6cbfe25b37eb0356456
DjB0x7fa3da55ce058d4441d0347408793a849eaec96ce0ef29b0f7342e400b0126da
DjB0x112e7a123a5f1dc07c2628f8f10e71adf1948c41360344580d9b9bf75a995bde
DjB0xd6ef6aff2ce72e68305817b223cc32aa108a88ce19f425136697db33207620fe
DjB0x44d8639e4c77a94af3020a6978658d87fdcab57add7a0cf20a89bda36cae6bd9
DjB0xf7977d290c4e4ae958d8a901f1a535f63fcfda2ded4a71e123505bf9bc646347
DjB0x703983d30c5d683323cad773840fe99ecfdb6e08cd8933181cbf3c99ec8b1865
DjB0x644f55cfbf4a412b8c6b90f03100b618e0201207741ed7ae109d7324efe7f110
DjB0x989675ed57149c29f27eea49facedc6877b5f4ace526959fffa9c6fbb3ab3032
DjB0xe07772aa91a23961868f849fb527d113996300ae346e3ad146372f46e5d66aff
DjB0xd477dac333a816e6a656f56068bdbc27859e923bc9f0ec7763d6193ebd48c6cc
DjB0xc0c4d769c9a6284b783ed09ff6f7e59d6bf6cb4913460367210068f190eccfa8
DjB0x067870f2b45b830e63e07a2dfe161dccd53cc7149c2c0f9ecba89ddf08199726
DjB0x7f53e8be5ed41aed144af7eab5f36e3c773f65ebad24ab0ee84b012844ebb2c5
DjB0x5257e7ae7d0242f12232027bcac7a1cf19f35de9607c6d27cc2c1be62e3599c9
DjB0x08f3c2151101714cb8640c4cef4c3a21e16d10dffdc442bb720bb2afef61127e
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"10000000000000"}
DjB0x81816cec3e35256e2129a1778c27a6e30bc0b6775c776ee108df974e96316e40
DjB0xd8a8006b24391c0ce6cfa5ab1989f4c064914a8f16b20f104b9dfe56a274a980
DjB0x1433aa55547eb8328a1c0a6b18cd54a34865f13468da6e876292365c05e8ca98
DjB0x51c1d555c3647bcccbc3082463c21d91998811d7ff8afff20e1dc2d3617709c9
DjB0x8feeacfc875cfaa5116992ee2b423a911b669839232978ec41ceb2272f215db4
DjB0x856e300c13675b51efd8bbdc1ebc07b689d022fae6b1b0c1816737f738ee473a
DjB0x92306db5ce064125fd6f76d7005c18fcf1067d94da2f6a21a87ea5ccb36d699b
DjB0x9741b24a26b59e49288d16f119d91d02d7b41e46a466ef9369c9ab7ce0394f30
DjB0xcb87953abf221dcf938a5b0db0fa371c97a0d2b67f3c7b98af8532c903a0e180
DjB0x9d8a09ea984e7e2543269b2f5a49ff21b3b903f32d367252f22f3d2c5e69fbf1
DjB0xed3fc21f2b6ed9b4b741f8eac295ef74000f6bef7490f8a5a75c4a61d0edbcee
DjB0x4f42ff496ab3a219f992035c0cb475387a7f65d0893a1365a0fdc85557c0b18c
DjB0x09ddacc08bab29988be0d3a0ff1d95b73c2dfc68ce4b8354033e1566e5b594e5
DjB0x7959f033285f38a728531a87e609ef7c1bea690c47766b223e36b0b9af4875783
DjB0xf6dfff5fb73e922ce1cfdbc1f23c09e594939e10a9c809a8a40bd1d60d8f923f
DjB0x6b211871956bdf63c090b91536b9b22f7d212e6a4fffafc3e1980e09b4a18236
OjLL0x5271fff5c4ce4ec09be0fd9a4779c46f9e311f4792b70a91b2720fa182fb4fad=|lifi
FjD=:s:0xcD8edF67D3dA3EF332B6F020835832DfF35960A8:266595/0/0:-_/t1:0/70
=j;65r:to:USDT(BSC):0x1902953F69DDbE2feF2083eD56FBa3DE500809c4
9j7=:e:0xB2304d8Ba3DfE5f04064Ef72f910911668F9659B:48046316
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"11"}h!
9j7=:e:0x51b3bb0F0f23Da615D082cF2a9e5b9c86c4F882F:44539010
DjB0x1af5594d8b01e07a30438bc9f86ab1684a7f0b72afca6145c2cc78f596e94364
DjB0x6fb57f7fc5a7404b05ee6aaeb68db0cc588f1f8189be42ad8c5592c2da4c6f1e
DjB0x4cef4ef5dd47545d55f572d6a9aff9908a2e586681e0a6bb140e4d830400bdbb
DjB0x97472046cac89d194bcf300f8f927dd898bb28ee3d5f8b3a8f4fafb8903459d0
DjB0xe77a30319aad22a3844d1df5f0c52883512060861a0d2b17584393212decf2af
DjB0x0b8249a111baef186faaa86228d01bd8a46c5def32881348ef1707f9c6c6c956
DjB0xcef279cc84cd7412a9bfa2f4f0a3da3ac74adcbb64ddbe920c0a10680598170a
DjB0xd40a312133a15315fc3934dcbd5c4b56a6daba3c8d084fe84d29f195aef1cf0f
DjB0xf2ba7118aca3d7c4491ca1d35c53a7ce58f73bbe8636f495488c4589154d70d0
DjB0xf08a38ff40d1ac52a969404ea9d7001f8407bf4bfe0d4a997c77cd527aca44d0
DjB0xb452852056e5610aa5d92f88aafdb8bc8d3127744ca8a817935d5a15a5f55116
DjB0xb91b07d98a01c82c33a5725128a64cd6eb3ec03708525568a8a83740227c8e16
DjB0x7144b53635d65171d3a894d9bafc20cf5b97ba5d6dc657c9e20962c313a76042
DjB0x7f246a71cbd8eb7cf2bd33c3ac1ebd73786a4e6584aa197211e056c6aecb1b2b
Bbffef4a015f0d632e92004a68146a86b4f44c0bf4bbb34b7297d8cf51f895599:0a
Ba1c2245aaf0402bd1b4cd870529bb79ad90572cb5065d543f9e20a4515580007:0a
6j4IpO:to:USDT(TRON):TWmWrysPQCFERzB9tG1KkKCNcuw937pXXk
=j;MTj:to:USDT(BSC):0xc8C7B83Bf467878dE92210E695C7D16558f3B6f7
9j7to:USDT(BSC):0xb1C82AE5eF1e6A38Ae8F347571c878cea9603466
=j;WrI:to:USDT(BSC):0xa29ce1C67d0D545233D93e62c446Da997DB2Ea0a
6j439p:to:USDT(TRON):TVSVMvvrdETboTCZ91g82B5VzBhwvey1X9
=j;KTm:to:USDT(BSC):0xC437778a7F5C51b246657AFF0718CB0f6B5a9b98
6j4Suc:to:USDT(TRON):TX3woV7cK6CdPsf7Vm1aZM75ftAVBMLUBA
CjA=:ETH.USDT:0x7A40eBa8d9479f80Bb4b9F7b528368ec65a766B1:0/1/1:ej:75
6j46Gt:to:USDT(TRON):TSokJdHxRbxDHXQ2UedAgEe7ndneqVkFn3
DjB0x1b6fd5ccd15de5613f7c9097f5cb3cbca7d5c151a38a0e772f978dde5b06336e
DjB0xc781a218f8c82c8a4dbac916014c5ba795b9d5458a777134f5db0ba5a86ced3c
DjB0x4a8328f25a1549235214898f855024fbf188d30b98d464fd312a0cf0b54b1de1
DjB0xb63b03116d9eec7387fae31302ea4149c2be9b9b72ec313382db5146a3d70061
DjB0x5dc81df1183f1f9c275abb63b9cce2c804f1f4c9bc51375f8fb3b52769328558
DjB0x879927b9915759462182ff2eccbf33965bae89d69ad0a49817a7cece9200afe2
7j5mCB:to:ETH:0xe7599b13F6b47280eA2bd7c67372FE95e069ABb5
FjDOUT:0E0886A3DC345F06D53315074332A66F5EA9ADCC6668E060C2A513943DB3CB5F
FjDOUT:A565D449E5E32769280BA2B72A503BC1A148F4242F98BB9683AAE947E9E41EBB
FjDOUT:FE2B07E1CDA65629B8AEC0CFAC85AA115B383D7F64B915100CF67A8BED4E6A97
Bj@=:tr:TGUocu1tYhB4W1QsstpWkZVpnEfagAaEzc:842453600/0/0:-_/t1:0/70
FjDOUT:1AF8D1854F31E5729D055E00F120EB94888F2205C99E801E193B938C2F00276E
Powered by Luxor Tech]
:j8from:149900USDT(TRON):TVsZBxjVZgYCAsf2m2uh1BxmNo2dKJKVGR
:j8from:129950USDT(TRON):TB7EoGgfdEVriMWJoghhUZTqy6BGexTR5wS\/
DjB0x8690da72bb9be29bddd5c643fc2df754b0f5d6469efc51c1f97f08e90ff1828f
DjB0x84c1e414d009698f4e5a62384aeb2b80bf79ff882cbe56653b7c93b6138badc2
DjB0x6a43c1cac7eb57237081eb95374429aef447c2c69549e7e821004b7aa477a261
DjB0xc7191e7069dc6be08f65e318ca204627c4d35b2442d7077ce57aaf9c05683225
DjB0x399895be20dbb8da49dff4587737b16343afcb39be5e39b894cd4b07b69fed74
HjF=:TRON.USDT:TUWP6SywVMmFqsN6LkmnCucy7JqnUHYWaB:57383300/0/0:-_/t1:0/70
GjE=:ETH.USDC:0xF7C4711AA0d49dA052f5e5287D0f31D6d463Ee16:29258785413/1/0
DjB0xcba78ce8d6ac0f4ed1c7446730076de658edfaf9326034bd4fd4e584820627bf
FjDOUT:08799ADF356B8195938730978EE55EF4E1BE4051BC10D87BEE20CE19AF90DCB4
FjDOUT:CFEE163DFF011C1CFCC4E0801416560AA1B12CBFE619E3836E713CB6BF205570
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"38000000000"}h!
9j7=:e:0x88B35646B2adD327199883D69518FB668bD2F8b9:57986776
FjDOUT:63F51746307CB42A2CADCDAFF4AC8CEC4CEBEA9553B45ACDB10DB9AC765B1267
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"atm
FjDOUT:19B2A31D3F4D93AF8815917EBFF6804B3789355D8A1A5F8EB42281A6C299BE9B
DjB0xd054c96ced4a016d75fab37f845c392ae70597534b973062e47d54503b7dd123
=j;=:l:ltc1qty7hy07rynxgyu43tdh5au4zljpycmge7wrnrc:0/1/1:ej:75
=j;=:l:ltc1qty7hy07rynxgyu43tdh5au4zljpycmge7wrnrc:0/1/1:ej:75
=j;=:l:ltc1q20mn9jwm36sn5kwus099z2ezv7w5vplqgasrv9:0/1/1:ej:75
4j2=:x:r3NWCYqE3v2ABkQBo5jNkwyDFcRubXgfTU:0/1/1:ej:75
CjA=:ETH.USDT:0xFEdBF3E23e6A7fe7968166a05B8213DEA4173127:0/5/0:ej:75
8j6EVi:to:BTCB:0x2581Fd587DcB6CA8652fcCd612dd950af2754512
6j41nE:to:USDT(TRON):TPdTDNczPR3vDq8buWsbTiuKtmBwTcjHtB
CjAQWJ:to:GRAM(TON):UQCCS-ftlKxRqVTCnjSWUEHFpWwp_plINxdNoUUPcn5d5uND
6j49rX:to:USDT(TRON):TAVGKaMXb1QXepPTvRRkcJs5AKSx4A3PPt
=j;pnv:to:USDT(BSC):0xf2DEa5104838466236E7b986189E1a8798e7d2f6
6j433C:to:USDT(TRON):TAn4Lhf4nrgYLC6qSUtBH8h6PbV7A318eW
DjB0x3c085fb734cfa8b39099623fc265257358a73403776e80588412b6b0a024f832
/j-FpS:to:TRX:TE7gFoi9PU8nwTKdrMwnVy3XRBNawCwCfk
DjB0x8c7f4c58b7c944b0eacaf5a9fbda1f3024626ccd68f76ceaebc68f48aada4a5c3
B27f39d907e6f37962c479f77f0f6dc02cd76bf5fe8c3a1c8b5af755f7a7180fc:0a
8j6Ut0:to:LTC:ltc1q9tas3kv7tdkyhua250vmj8dzpgnxvc8k0xf4hj
/j-Ipg:to:TRX:TZ7v2jAZuKjpGtFNB5eoEvBT2PbEWfnQ7p
6j4gHD:to:USDT(TRON):TYSELt4CNiHq47jiVtkbwgUb2WGc6cKwjU#
6j4bF0:to:USDT(TRON):TRKPurbFTvCrz1w8sEYcQW8qEHDVTtyhYj
JjH=:e:0xCb5e9a27B7dFAaf7F83722149e84b529A5c267E8:31153760/350:sk/tan:7/144
QjLN=:ETH.USDT:0xa9129eC8b1b727218Bbf0a1Ff996008D4f2A1166:210266100/0/0:-_/t1:0/70
DjB0xfeb842039b5cd01d932219bb70977f6ec9208d78779209537eab70f24f7fd9a1
DjB0x912cd3a20b5889d4ff296b1aa2c4b164c71841574c92852c7e5e70f8c461f86e1
DjB0xa681d72150b209af8feb4087a1ab96798a5fe26bf3cbf86104e0753df3fe5a67l
<j:=:TRON.USDT:TPcnQb9foHYjmZC5Gsj2bY5yCD5zRSS6gu:0/1/0:g1:50
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTC.D","amt":"32"}h!
;j9to:USDT(ERC20):0xe11685AC07cEF0D56f7A98fB849d951454f82C07
6j4X0l:to:USDT(TRON):TA8hkJ1Et4ctZG2WbhZeTpMzh1uRndaB8n
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTC.D","amt":"33"}h!
DjB0x2594909585eadef936984b44cb969b083a48a426956b9ec36cc02e1ce33d8d56
DjB0x1f545d3366a911719d742f5571443a09030e8abb24a0663ed502d9e13aa1bda8P
DjB0x5867461d47be5c641287ab27e1441a472a18f1c253980a8b3c628c19dfa5a230
DjB0xff15a8499cd348f4b9dd34a199e501046310a7f2817b01a07491156000b13e9c|
CjA60v:to:GRAM(TON):UQBB0sCvDQlyIU2Nc6_CcivXejXHjhm5lRtuXHyhn4ypqMZk
=j;bfx:to:USDT(BSC):0x0BcB3c164283d2E85e01bbc2c0BE4D3c2Dea4856
:j8from:119950USDT(TRON):TEjkiJdYS7nQvUeujXuN6nw5LSmAMhBxAU+
=j;from:126159.99USDT(TRON):TR873eqaKS4aeyjaqzcaVcY6zFgyCaLPCj
DjB0xd6aa789a3e4e06d396eb2d796b32bdf840f2970b290d7ddc3b9f36102fdccdd4
DjB0x7a40ebe55b6fb504696a482e85fa8156281cb2739585b14636d38fd3ea65aa25
DjB0xda74768a8b06c3f8b28a750f903ad86ba6054ce82cb1f074c7e180ad7be75682
IjGfrom:56270.382721USDT(ERC20):0xcEf0e0c987Ef0130D411afF9EFA57fC6F5041430OA
text/plain;charset=utf-8
D{"p":"brc-20","op":"transfer","tick":"TURT","amt":"249656.11874000"}h!
DjB0xc84e58d203e53eeff5038fbe9d9d864b7c147dec4684c6c9234db9141fbc9927
DjB0x3d8e5c43ef20bae312a911c66be4daaa7d9957242b8222bb98ae0524cf1d6cf7
DjB0x2d2ef769e9b105cfcbd81264f3c61d7b306282267d26bdeaff8b03d9264c9d0b
DjB0x6c373001819f57c3eaba1eb92e686726a367cfb4c95166b8699c8675e7670c12
DjB0xe0251708d9ae85734c4438981ceccd7fd2d04545ed44364cfd747469af2bd996
DjB0x55c185b8aa220cdef89f2768675af95276bef82cd735871b1fdaee735d17cce0
DjB0x019b0a3f3a75d2630154a607891afa5763ae0e4d98ee367fe5e596769d0539cf
DjB0xcfd5b0e991a49036fb68d1001d4c6f4659390ee3e138943223e3db4f7128457b
DjB0xfeb842039b5cd01d932219bb70977f6ec9208d78779209537eab70f24f7fd9a1
DjB0xcaf746245e7a970c2aeccda1b52fd4b74626f5f5c1d743f33cee95b60cdace95
DjB0x563e7c852774c51b1b16b40debc36a7238ba080731ce04dd5ef48f8d55e528b6
DjB0xb4aafb6eabbb7c98c0e43897cd4ffe2676fa2385828843a92d70bd29af2ebb87
DjB0x9cc6b3191da2be0f8a1cf8f7e4294bb436e4abaa71bba9ace1519bcef73cb6c6
DjB0x142601d4ab647f9bdd1799f8aa82efa4e6b27de6ce65dbde41470d6216299baf
DjB0xc68ec8c6b200586345a9a57d91ee62ed945c8ecc68b9d87d724a06f325fec946
DjB0xc420f76f8da45fbd4f631f41dda9c983fa5d1225d5042f873082f542d130207e
DjB0x85844425ca6fdd293dab3095099f8119fca23f7c667b4023382561c8d6997b79
DjB0x8691ec071739a00ddd6e023dd26acd898f4b912b3679001a6f70f661b8256548
DjB0x53827460a0e3c258ce6280083675ed8174ca554edc65d84f751ececd0b5363a4
DjB0x970ff782541175afaae0971af710a0c3712b039d3781903101479c0abe42c6f0
FjDOUT:37BD23A6FE8FAF2E54130D9AD347D0D72DBACA91D96B729C7B3EC1B01E510A79
FjDOUT:D3ABD36F9DAE73C883DFF8BC37F7C35713666C3605FD6EF821062508D5675A89
FjDOUT:EE5E5E7A58FDE01CFCA75CB3164008896B5B1D979439ECB5A35A9B8B76D1096E
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ordi","amt":"4"}h!
9j7to:USDT(BSC):0xDdEde8D77FfE2A3161224a852E58f5Ac79A1093d
Bj@9a4d3aa2d0400ad51d17ed2601fb284d395ea8e52d3ea4ecf97df5e19fd51ba2
OjLL0xbec2b2c29154a00bef20f9ac0e15ed9847e39177e8b97d7fcf6ad7a12c7965a2=|lifi
6j4AYH:to:USDT(TRON):TWC6wBgi2M6gvjtYK2vqRgZKKJfbqSfuHC
6j4KKJ:to:USDT(TRON):TK1LgTF7FmHAz4gKTHMc3JmqWC6p1eArSH
6j4aAj:to:USDT(TRON):TUk3Z1VZU8q5993pCr9karwB4uZyWtYNps
=j;3ZA:to:USDT(BSC):0x505c22e7F1d09b2bD8DfF287246E92cec35F95eE
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"780000000000"}J
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"2183327568315"}J
?j=KtI:to:USDT(SOL):86JZN5CxhKnHRZyrjpH3hLDbcG1M9SbgBTn3k4d53TqR
=j;w7e:to:USDT(BSC):0xc067EEdb7d94AbbC5f075cb7BABE80C0E8F98C0c
/j-Aoe:to:TRX:TKx1GvDkkZ1ojM3pFNn8LJrtQngUWTDUcd
2j0to:USDT(TRON):TNhpd14LvX4ycZDt2dkxNvUBwtm7yV4xCe
2j0to:USDT(TRON):TWzmQQhgLGUKNGzrVP3TMhbBztFwehD16b
+j)to:TRX:TSewxdLBymr64xCn4PUbcDhipYFxfyUv79
OjLL0xbfe560fefb30b85dbc2aad2fb668223ffddc1e3051a7109cb488e74f75a8469a=|lifip
6j4vAZ:to:USDT(TRON):TVwhs8hNmKrNb4k4MGQzJXGrijP75cHAyY
OjLL0x86674947368274f523a621314fc4c956f4efa8d461f79b55403d557d1ed4c9a6=|lifi
8j6wqb:to:USDC:0x5cb2250239a6d5aFdBf0D60F36Ecd47aECf1a748V
OjLL0x5b47f813c79e46f6238a249f235dae5df74028c07f60a3e759d53a1317290421=|lifihOd
6j48h8:to:USDT(TRON):TKWa657yva9G38nsAmLeE9YSP5znnv4NDh
6j410u:to:USDT(TRON):TUa5kk9foCdMJAgSQV4TEhy8QoJfaZT7di4
6j4PMB:to:USDT(TRON):TGcSdL8vRa9fiKU8vnUDwQx1KdXPPfZTZ3
/j-4Ez:to:TRX:TPhPsoh1QC45TUbw216Pnf6pfYFaxnDUQd
6j4k9L:to:USDT(TRON):TTjF1HevcUewAMKinvSoJDNEKgKqjyomkQ_
6j4nfg:to:USDT(TRON):TWfmFnDzFQ3hwXRPS5uuWZKJXcAJ64FoQsb
6j4Ye3:to:USDT(TRON):TQK9o8RrcMsaws2n2Mu9QqfqPXNncPPHRQ
/j-F9W:to:TRX:TAtHPhuGnps2sBc1HRhziK2ADZFVHrZp1Bx<
/j-1lf:to:TRX:TDXpLT262KAjysBAQCXHhXXfxkVyDeRxgw
PjLM=:ETH.USDC:0x848f30297329A5a7a6c7DCB7dca788fe9a46f01d:96432576607:hrz_ios:100
6j4DE5:to:USDT(TRON):TCZHQBFiQqMGVMUtrZzEP9mv6ZdWdicLqB"
6j4F4n:to:USDT(TRON):TUqkw6kHfz2roBGrqJUxEyemkeYymUAEzX
6j4MfC:to:USDT(TRON):TBR3uLbZaEwVrz45mBXsQNFvrSp5LxeGaLX
6j4noS:to:USDT(TRON):TTLAyGf3CAkzoqQLwP9x71mYz55XxM9Msis
=j;lBM:to:USDT(BSC):0xC200a91131c3C7e76A99eD1AD4580B6af94b6eF3
?j=l4e:to:USDC(SOL):ATgnqAgzMBqeTGF9xntGyiAynyADxQsdukJzk8kH3Spm
6j4O3w:to:USDT(TRON):TU2ex4qYYnVo9uDjLGi1C2ymbyZ9W7eZ29
6j4bSm:to:USDT(TRON):TUSH3xBXtqRjt9N8KhXbnrVwwQnnFhETc1~
6j4snl:to:USDT(TRON):TDVdaMQNCd3bgWDtB2n4idFhCcPYz4jCezzg,
/j-kQq:to:TRX:TUaQuUs7jYwjk8WP8efBvAzc8YCm4Pzuhd
/j-zh4:to:TRX:TWEjroM8ftE9eY6nBCMHbVWUJCpsWpdu8Z
/j-hYw:to:XRP:rL5fTrMdMpMQWXi981KQD8LAcDQEEjFAyK
/j-gac:to:TRX:TXUb3WtDA5HfthXKqMjQnZLsTdHT1qdm1S
/j-sJE:to:TRX:TLoDCrfGrSuWrKdtRw1MDCARSW2CoQUCmM
9j7tC0:to:SOL:GQX5ZckNpqEaQkcmXeDM6gfAwBrJj6r2DKz1pJCyN2A1
DjB0x1439d2dff424e714b6a4cc3d4d9266b1122b719146a745c14772a1313a6a503a
6j4yCj:to:USDT(TRON):TX6Z5QmkdTAfSS6ZigUhdq5zi5gL3Vnq1j
6j45gA:to:USDT(TRON):TEptcs17tEdfuNBstoqxvkHFZbZBUGuzLqv
6j46NU:to:USDT(TRON):TA6URYJxdqTreLZDwhadijFvWCRtni31pZL
6j4wAK:to:USDT(TRON):TLz6aYhj1jeSx1QYcwZnmqxqYPWhoEBFT4
6j4Vr1:to:USDT(TRON):TWUQtJejqLTbYcMfV35iiDfjZVLXG95rjQ{
6j4vTn:to:USDT(TRON):TSfU52cMM5UTyyT3zsjL9h9s8Ag3prsVNT
6j4ewk:to:USDT(TRON):TNqsJCad874hqeDA3VukFGHuaNiVi6t7s907
6j4NwL:to:USDT(TRON):TPMv8fq2L8nDvQBGV4s1biPXBHQAkrdNXnk
6j4dGK:to:USDT(TRON):TBhwmRz9pTpijFxjZqpjsnjNnYNvpV6KY7
<j:Ije:to:XRP(BSC):0xF4fDE8c8846c00d88eC2B5Dd1a78E4FfAE664EF1:
<j:PdP:to:BNB(BSC):0x60cD062cFCE0C90538560c4dB81f8aec03F9B0f0:
=j;fDN:to:USDT(BSC):0xd17c76e0Af931AA1125a116C0A5f0dF9c7acb014Q
6j4QAg:to:USDT(TRON):TFubMkiGmrGxbmWTE8Ry4TrSbsKQQzKfVH
7j5rJt:to:ETH:0x0F6F3567e76ff9A66Db29Be287b8311368D5fF46
=j;2ib:to:USDT(BSC):0x633aC9cd25A21C0B2733977f276e096d6C4f17d4~
=j;MN3:to:USDT(BSC):0x3b38F7d58E7364341A71a94F157D301A2fa9f514
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
=j;oNm:to:USDT(BSC):0x912fA922167BdEB2BDf17eE412988141F03bF9E8
8j6u4f:to:BTCB:0x81b933E26Cbd0F5E68B0DFd145469075A8e2Ef9B
9j7Sj2:to:SOL:D6qaZCn74nAfPxxBAGZsbd4GZuBuPCCk2zumhvbbfNSN
?j=fuH:to:USDT(ERC20):0x42471Fc974422f3df60AE18857a8b07Cf9C16539
6j4pvS:to:USDT(TRON):TLHdpbjCfzdBhyA2F6sNpLsG1cSG3gz4nH
6j4gl6:to:USDT(TRON):TUQXTAbLKwhLUDNcZpy9RApmFekmAmqQA2
6j4TNS:to:USDT(TRON):TL1BRzhX1S29NSSFzEtoxE6h7J7jZmt5qV
6j478f:to:USDT(TRON):TQqDFZmr6XMvBEXNjFEwLbKnBK2zQnhVoJh
6j4AYL:to:USDT(TRON):TQsv8eMfBGzv7kJY7tyHueRa8WGTBZRxKs
6j4gR4:to:USDT(TRON):TVTi7BKz629EorHfHvR33qZfaXjosnPYsmzB
6j4PV9:to:USDT(TRON):TMtzWeXRnDsXxFitwNmWtKgZvQsU5d1D52_
6j4Iwd:to:USDT(TRON):TRRZUYVsw1W2wbE1AJZpbeNtyThWnPd5nh`
6j4F85:to:USDT(TRON):TQxEoH1dd7rJESBdhRUu5wCKpzQQCQdbp4
6j4mys:to:USDT(TRON):TN8mgkTf4zsacusHtCoCUNVEYr7k5B1nwV
6j453G:to:USDT(TRON):TRtaBXFYwVquqdyktSJ6r4cguKCeJsX3hs
6j4B3k:to:USDT(TRON):TLmhmK2N58b9xQBdHyLhPMicfPDfGPJMbjy
6j43lO:to:USDT(TRON):TBFbgw5Rce2eRvceCwjjCkWwcGy9GTq6eE
6j4rMZ:to:USDT(TRON):TDVdaMQNCd3bgWDtB2n4idFhCcPYz4jCez
6j4ZJ2:to:USDT(TRON):TDsyRjCKChaVk6Y77y9ib84WYJsFu3yR5X
6j4Q3e:to:USDT(TRON):TP1ueHrA1AnUYx3audFbeZ3HAacwGpmMzn
6j4lmD:to:USDT(TRON):TBJQddq4fBHojj3HDyVFvcUhhstp8mwrKh
6j4EvW:to:USDT(TRON):TWBqtbvzJTrt1Tes2eKn8nFAm73Rnrjuto
6j4GYc:to:USDT(TRON):TTYExE9v16TvV5SnMXAFXNoYSvoBqPZ5k2
6j4skk:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJv`
6j4odp:to:USDT(TRON):TGyVA9jQy2ZWNcpFeYqagShZtQfMtmFZKn
6j4n3U:to:USDT(TRON):TQxvPdGsoqPw7W4Rgkdtog1pGMDW94yrfYT
6j45Nj:to:USDT(TRON):TQM3k4RbGo2H5d84ACUf5fFPJACv3rh6rT
6j42Td:to:USDT(TRON):TTHaTqVWZvAkUErRwvGSKejHyUCsTBCiyj>
6j4wMs:to:USDT(TRON):TPLborWmgrmkqQt4aF5SFAU38PEPtTF3Vs
6j4fwG:to:USDT(TRON):THPnYcHomv2nxnm9ZDgeaBCGqvYVfuRhwZ
6j4y9I:to:USDT(TRON):THFzpn1HF8gVwUb2cFBp3SLFZntY29R6sU
6j4vfk:to:USDT(TRON):TFGSSeFSwbioWiiVKA9rxitq1QfK7dyU6X&
6j4gOo:to:USDT(TRON):TZ9MMDqFttTLhK8Cggu2ue9myq3RkY9P3W
CjAW2g:to:GRAM(TON):UQDFCbVp_ww8XYquDFsnmAuKmgdK_uwKCegIm82DrtZsyXhb:
7j5HCL:to:ETH:0x4264dA81759C110cdC9662f57e15Ae09154dD744
7j5aXu:to:ETH:0xbb59870066eF17d74401C4D16A9C62D03f5A49B7Je
+j)to:TRX:TTtVASdCue6NY4EUTswXZQwWtw1WmuekT4
8j6Uda:to:LTC:ltc1quhf249z4v4qqtn2putvzhs7y4zmdcpg7zjgc43
8j63kD:to:LTC:ltc1qp6ufa0w3d7dtwaj2rcfw3h9na87ymdcv3dp8hx
8j6fkF:to:LTC:ltc1q5tj0lft35me4mp68qlql35ryd3hdu8amlmtrvm
8j6uSY:to:LTC:ltc1q6ym00qqnv4e9h7mxf93q6d9z0uc93jfsrvludw_
8j6IRm:to:LTC:ltc1qelsn9dm4e54hhqqe4y074v40tsv28ta6jazq6u
=j;sWh:to:USDT(BSC):0x1BA3B5a2F7B949EE630Dd193460BDEbC8E3A74D4
=j;LNN:to:USDT(BSC):0xFa86fe570b741FB9aaF23A588241BAe30d9C5041
<j:2lm:to:BNB(BSC):0x830f4682521f9c793D3cC0E3A8aDC005096A6927
6j46oU:to:USDT(TRON):TVyvzuApfeorcpQqTYfbnvEBDbQe9LusVD
6j47SR:to:USDT(TRON):TLqkY2M3KZ1r1wTjbXDZT35Kw4D19vTRHa\L
<j:UxV:to:BNB(BSC):0x1e0022D8f3f7075742e49412a5b75c864182b605
<j:fvy:to:POL(POL):0x1FBc07dC8ceED5e12475B985213189e4Aa5fa6F5
=j;Lax:to:USDT(BSC):0xC200a91131c3C7e76A99eD1AD4580B6af94b6eF3
=j;fUK:to:USDC(POL):0x6D8F3b9eF92d0Aafb5fE3F64807EB37C610FF98D
=j;gGD:to:USDT(BSC):0xC200a91131c3C7e76A99eD1AD4580B6af94b6eF3
=j;C7s:to:USDC(POL):0x70A76C259Cb389842867A3bBEfD156b4A8d4A4E0
=j;lEm:to:USDT(BSC):0xB5883a4C97817E96485F36053701C1407b440A67
7j5I1S:to:ETH:0xDeC64464B37E1fe3E0dd04C85a30994e947E1a83
6j41KO:to:USDT(TRON):TU8FaNR2ao1yZdMqfoZh1wMXmywzuJ9Nvk
9j78RH:to:SOL:2gJxvJmFtJVa1qEJmMfnDzApLJKYJirux9dMyit39oap`!
?j=Pkk:to:USDT(SOL):BGmTz3goCAGMJHJG5hU16xUBtx1ywcdJJJRDVtHrvYLsn
?j=fwZ:to:PUMP(SOL):AJBSDV7pDqqCXak1tLHBTQHjtEA84mHfTjBaEJCRGi4j
?j=nJC:to:USDC(SOL):DxtXq9NVQ7FBXaTBNnMABHs6T6zzE71VfJGHwXZgn6ix
?j=8wD:to:USDT(SOL):HHkJqp5iQf6XUY6gfubNYK6ozzaLXzAC2jX47zTXoRnPj
?j=tr4:to:USDT(ERC20):0x21284d7Cad97c788621450D2fa7F66E0f9cB816B
6j4kCk:to:USDT(TRON):TQYfgqFyeG1UZUDHzZKhdjM2HoSRkV2tt9
7j5ZHO:to:ETH:0x2ee7d6FBd1E6587b0aB159f4174730C2928DbaE58*
6j43Id:to:USDT(TRON):TGNfEKthnpSJxU1V4yN7eA7JBrgetg8vQdW
8j6waU:to:LTC:ltc1q08zl0eqflcwksxh27ek6zza3m50xdgdc7d97hz#
/j-VGV:to:TRX:TP3vdn5BXiJbsT5wD7RA8ZGikR8GxXkFWx
j| MARA Made in USA
DjB0x6baadf4f781ac2fab418a92b9fa29756cb09b32174cecf38b1c715f5fe9471cd
DjB0x8fa7590b72c1e2408ed9eaffc2ca0825f149f8f66dd12c5efc0af895dc8c6a4f
DjB0x32177ab1bf5d51b18db0bbe85998ba88d63ab08afba0a38882c276ce6afd01e8
{jLx0xa785d2f20d5b1da9db00df2acd7e34c0bf9c5af98734f5150dd6fa04e4c3f465|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
{jLx0x79b4abe3ea1e405f601966a12253cac4c067589cfe73a55a131bdf28a6ace575|depositor=bc1quxfmjmdy8wsuunla0kvrv7f3yndldtcuz3f6w0|
DjB0x1431440aa8049aaf0f18f0e334a3771dc9131d8d3fa8397e27d0b18db1ae268d
DjB0x2e14874a3497cca4e5e6bde99f3088025587529847ad93c9ebb51f2691c98552
DjB0x00e65274807ea54df0c43f5b6c6a9841f69d7b8d9f55c3a72866e879b3711d37
6j4Kyc:to:USDT(TRON):TTNJ9Z5JVGXxgGJhCTPUpKZkq5NGh8zfPW
6j4kqn:to:USDT(TRON):TLZUVStso3xwuDmqQ3An9sqWE48TF6eviL
6j4Xqv:to:USDT(TRON):TTWVt6uzevByJEAqe4sSV5T1L6tzk8bCyg
DjB0x5635a4bd05d9381dc76bb7637f96c58497e1ec75cb46f5807346c9379b76e752
DjB0x97f3494b88a3dbf4208e93b9698ee4d7baa33c52fbdf300a31c4076801db46b3
DjB0xe2a19d83c46b667a11154d5e0d43d2388d129f3ba7fc6130c56054d31fb74007
?j=from:1050USDT(BSC):0x4421ee009e9b5fc02B61770bFC291979Deee3405
@j>from:352.6USDT(BSC):0xfB931A451B684a67a30250AE1900052743C44Edd
%j#Jdiqapbw frj onqpitdcwy teidbssbqb.
OjLL0x9dffcfeb237818d46c661cfb242d8e2f22448751e55f7981f46b21b64b84878d=|lifiK
DjB0x1ff3dd77ca11cba28e61b079303fd14246db63f2d4e5c5a4728e552b9e0fdc31
DjB0xbc2194e3eb52305039f40590a2ae2433dd94588436d559203c07ce5f0f954c93
DjB0x0b677b817e2df532a0a42e6be7b85e935559e5aa7833caa02c2e1ed1c149e577
DjB0x1537c7ddfe6d1e7d41c68f7640e4862351db5689b1db66d6884e371edfc27a81
DjB0x4aff5eb2e4e4811ea82217f1b82cf5efc4a9dc82af9fbd6d71d708c80a71c17b
DjB0xcdb6696c0b53d594079ea9d6cfb0c7819183cccde8fd51b14ea4b42b6e3fb933
DjB0x66a0dd8b05eb9cb5ae76be659eb85471a39d0c2facc020fe791cd8171e531e89
DjB0xb2e2ab877d338a675bfa6415aa496a0eb671ab79287e7d009db9fd595c0510d8
DjB0xa90e78989363941c9cf37d16d8de35fb35766ef1cbaa6179ee560ab22ca0d252
DjB0x4300884755181020d036761fe91265efb9b8c2ec14e97005618ad67ae15ded21
DjB0xed8a3b12c50ad3d9226390a64c679d12110c065c2909ede7f64691985ae128c8
DjB0xc67820fa2ac657f38811ef998e68b8fe31b3dff8d362e725748be6f63d51308a
DjB0xe0251708d9ae85734c4438981ceccd7fd2d04545ed44364cfd747469af2bd996
DjB0x778e546bcc15732de84820a917edf25e3813ca3b97f1156599b9923a40d9d86c
DjB0xd7a276407fd200c05113d85286dc67f86def869f65f1d9528966fb6c31980b2a
GjE=:ETH.USDC:0xF7C4711AA0d49dA052f5e5287D0f31D6d463Ee16:29338657227/1/0
<j:=:e:0x251fba97e5cf7c284932aa70ec3747cd574e7470:914964:w1:0
verigent.ai/anchor/v1|chain=btc-main|proof-or-zero
FjDOUT:F856DB120EC009306C029BE8276BAC3BF7A5D1944B40B8C7E1398917ACEDC387
{jLx0x92f5726f1c7959a9d060b087fd1faa8d16ffa9577f24871d769dbdafc76842ac|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
FjD=:s:0xb6147599CdF25622582AA627EaC3014bb9E0EE44:375482/0/0:-_/t1:0/70
DjB0xa6986f4562eafde161f324baa5a506b0c779b5231e7d388d27ba2601a4a72586`
DjB0x06310abc33efc337c43d545b098f0b497bd612db41c153bda8baa6a386d00616
=j;uFJ:to:USDC(POL):0xF546c8DBc2141DbED169cd9C7143123E31999043
=j;nBr:to:USDT(BSC):0x24258C5739A36bb9dece413ac4311f3fDAC6C8Bc
2j0to:USDT(TRON):TXkr27JC3jbYzwJAMnwaH5yJwzdiZnwXqL
6j46fy:to:USDT(TRON):TD5iQzLX9uZnLY7dk2ao821dHei3tJPtoA
6j4AU7:to:USDT(TRON):TJX6QAhSxrYXS6rWYLjkQxS7wLmxecs6HR
6j4djP:to:USDT(TRON):TRPszDnKqBh1McNfub3ESyWx8zVLnHiLbp
DjB0x7ad8bd0c224de827977f20f406dafbffd9e165f8c19bf78cb3a6d33e5e1a865e3
Bj@=:tr:TRqw6WzMBQL3mctVaUX7R1jjM932k1y4xi:608861400/0/0:-_/t1:0/70
OjLL0xc6935c8f0b212bb63327a91cce33422b33a4a5e7813ec49cb3f66452e435fee1=|lifi+
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
2j0to:USDT(TRON):TUfn93sidmHr1EqcxMGGFDFmCjkSu8RQhG
6j4VjE:to:USDT(TRON):TRuUNe18kpg8qty6kiua5iL4cbZ4ptL7ZbO)
/j-tsU:to:TRX:TNqsJCad874hqeDA3VukFGHuaNiVi6t7s9n&
/j-oqV:to:TRX:TE1uebc1b1HkZFxJdXCKj4NMuC3GPMWnUq]
6j4rYa:to:USDT(TRON):TTQFMA8ZKrc3uA4y7qKBv32wQYVohfkLcq5
6j4gV9:to:USDT(TRON):THpsRyVcaqmEKzvpnWHdwoRqmC1FHFEwUN
6j4CZ4:to:USDT(TRON):TE6v3jyjJo9dDH21uMibAckqW689ski2xmy
6j4pjO:to:USDT(TRON):TCcqSgFa85pRRMEeoAEW5YPPcLBrTEvG9n
6j4K9X:to:USDT(TRON):TDzXHFYyWzbVanKNhZJZ9WjaUA6L4S1aTq
6j4TYJ:to:USDT(TRON):TRD9BLZKj11iRBBxnByEiwMcd8CAUezPMD
6j4EFs:to:USDT(TRON):TNLwugLWt7iDqW8Xsz5zTuh5pKm1umhhUV
6j4IQl:to:USDT(TRON):TKQ34fF5JihdVS9UYJ9cny5JSSmxeLZB9g
6j4J7r:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJv\
?j=GQx:to:USDC(SOL):GPtcHXKge1UaKCKN5DgjK8PFZueehb4RqQk8SPZ6RkWG
6j4KQM:to:USDT(TRON):TYRB6YqVoBFkR5qTjVeQDnd6BoWnjGAnZE
6j4oh6:to:USDT(TRON):TJabhcDDQcSbm6GMsqDwxk1vjTHKVjarNU
6j4SVL:to:USDT(TRON):TXfiHj8PTNGwogrqM7cnddqqzc1A2tubMW$
<j:qLU:to:BNB(BSC):0x79aCB3211Eec289441731574Ce8d0d19fB325e04_0
8j6u3S:to:LTC:ltc1q3ckl4nkeg30m25e47uc7ap3hn2jhrq5438ux0u
=j;Tce:to:USDT(BSC):0x82e6DBc29eaA965d5bC3f6Cd1f0D726789569362j
=j;WKN:to:USDC(POL):0x3E9B48Cdb91B1a366A963E7bC408e58C17670521
6j4pys:to:USDT(TRON):TDYSEwVFQkLBxyisCZbyZdtTC7DjUYrKog(
6j4Y7X:to:USDT(TRON):TRLBqPzSKXihNYKh1PBY7UFVyFHNCfvuzD
6j4aqp:to:USDT(TRON):THFK3wo2DSJBPy4C6GsqYeAUiprRdaGz6D*
6j4NXi:to:USDT(TRON):TLAZz6h2XrDR37ZDdTbQ8TvVEEc78N9kck
6j4fOD:to:USDT(TRON):TTWsEwEWoG5t567XibLcQ2utZeMwmYrqdAM
6j4wNI:to:USDT(TRON):TUgsCZb7Ki7xvggFaDRZEfrCdg5yNwFhXq1
6j4zxQ:to:USDT(TRON):TXxG4QinvLwFKWsEtTxYBLNwuiPY7u8jQD
6j4mCy:to:USDT(TRON):TPLborWmgrmkqQt4aF5SFAU38PEPtTF3Vs
6j4mKh:to:USDT(TRON):TN1WsmVPVtXiF5DtQczxk1UeC7kYAphGpA
?j=x9y:to:USDT(ERC20):0xa6F0F2baa1BC463ff653a19FF6535D9D720cDe4ayO
?j=Vr7:to:USDC(SOL):7iqrmNhpbrSwfdqRHkFmERETPtBCaaGZnu1XUp6xTb5g
8j6w74:to:LTC:ltc1qm7dxrwx9j4ngaw69qmgc7n8ktv9wv8xam559f2
<j:S4f:to:BNB(BSC):0x79aCB3211Eec289441731574Ce8d0d19fB325e04
9j7m99:to:SOL:4cqAWibYj9LNegj9SaK5GiUvrmDzycMcBvQnyKp6xj5h
9j7ksw:to:SOL:7aed24eRQEvmT4Pzi49VCWymaUaL9E6KQbgMYigszxkx
9j7aRv:to:SOL:CcpMmq32Az69F1FSonnyR91Q6NpHxHzy6goUTAcp1iZm
?j=BFY:to:USDC(SOL):GPtcHXKge1UaKCKN5DgjK8PFZueehb4RqQk8SPZ6RkWGjJ
=j;BL1:to:USDT(BSC):0x22B083806722F72f356B0CA89D25A165661eB555
?j=Mjb:to:USDC(SOL):DXQfWwhj1yYtZvDDprxzf8hqFoZH4RUgDmnUBtDhhGM3
6j4mpT:to:USDT(TRON):TSo35qTri3MRAYFZoByvAJzSUGNZdiJEqD0
6j4WCP:to:USDT(TRON):TUKCT3kDtRz8xicHFyphPEcyTYzZZWyNX5
6j4rtv:to:USDT(TRON):TAc9WGQaX9gLatBiUuLC8xHf5HjKkyKGYn
6j4k0T:to:USDT(TRON):TBJQddq4fBHojj3HDyVFvcUhhstp8mwrKh
6j4dEe:to:USDT(TRON):TMFTpnWQ45tk56okeWCnGkesUikJJi3FDwP
JjHfrom:108078.995499USDT(ERC20):0xcEf0e0c987Ef0130D411afF9EFA57fC6F5041430/
DjB0xa47074658e7a9cdbcb3788ba82c82a32026b1b06e0b25f6493e600ea42b7d68f
DjB0x831c16f1dc5911d15dff75774093566ed90deb94bf31f8b36c61a6ba5f301c87
DjB0xbae8df5bbf85b6657593367a185ae9f656e2fe25893e3cdd24c4ff0e11f7a551
DjB0xf97e2f21e4f2e453719d3de588db17ec3f57ebab060a1052de105474fe95f6fb
DjB0x84c70240e98fdee41f03995b6c06f10107f6dc387ba181e6cd1f262d346bdc59
DjB0x7bb20e9d23a5b86e283bc7de1dd720b5d8b06cae8ab461635004124879bbc895
DjB0x8b02ec9e5318b819b0c049d59fd7b95f673eed7701aebd37f40387546753efc9
DjB0x1798a9b6dee1af1a1293b0913e3730bfae8a628bab527c8883d08f538baae958
DjB0xaa8eecd40acfb38d1936eed212f55e22d95e8cf9218e86f6512a299408518215
DjB0xe8b776c70db3e2620e7f9d8ccf1ef05f6c606b6d36080a4d4df57da9f2f2c140
DjB0x947916ef54e7d86e045fe0627560cd9e6be2b238364bba6a0d7bc71952e6e24d
6j4from:80USDT(TRON):TVDmEVG7ryvDLGv9c961MfSyVMAU8grTWD
DjB0xbfed622cb05a39dd4a61840607b7e6b83606586dac31e0d8ba700ace9166cc94
DjB0xd58d1ff98573f0edebb804ccd9015996c6299bc0c286c24b8730a90f708f9026
DjB0xc7160f3237a47462c1481780b83c6c90226e405d89cbc3ebdccda2d9b1b024d8
DjB0xb0f42faf291d615e077e5fa6e6ea08d40b9287b37d2c764af79418cf19576ea0
RjLO=:BASE.USDC:0x0974AF68515bd68C0c687eb6079b7d9087Da91d0:11125e5/1/0:-_/bgw:10/30V
DjB0xea79f1c0fac922638d642402773983014c4d7e61e94c29e84dde9378ea1b12ba
DjB0xdc9994ca7d3f9e9831ba4f2f54b55bba45e4551407612a00a4f0b518c39e5b45
DjB0xff37afa2322de867a6d8080c2d5bffec85bf05433ebcb7363c2a191a040f3f05
verigent.ai/anchor/v1|chain=btc-main|proof-or-zero
verigent.ai/anchor/v1|chain=btc-main|proof-or-zero
FjDOUT:54178283C6D9C8E0542FDB53030E647A67DEA03D83E893EF61DDD5CDB65D35C0
=j;=:l:ltc1qvmpq6ypj2cjj3h4w22lcd39esn8a2d7l8ezazv:0/1/1:ej:75
DjB0x79089888e25e55a08f9cf8b257fa2ab6b57c391505fd13cfde0729967a1c454b
OjLL0x51e217571d7ddff4a983150da29825cad7569e6aa09eb72e3894690505b979f3=|lifix_z
LjJ=:u:0x9cB6a1122a8959eE15c4998C4C3bBdfB91ddD327:4181685813/350:sk/tan:7/125
DjB0x5b6e1e792af166646546dd3970c319a714a7db69045bca3c31c542b8a1cd31bc
=j;vQ7:to:USDT(BSC):0xDc5FAB64115dB95e1fcAdfAc86FD1b8Bc489514e
6j48zx:to:USDT(TRON):TCM56q5qNmQ9QkEubt8wwdn45Jg5iYbTij
EjCCB|e9bf72f557b30e9ade629e636f32b8b86e8ebd311bb96f247e49180cd6dbb27c
;j9to:USDT(ERC20):0x738c8DFF8Ab410c929262Ce60138D6cffE9656c7
5j3to:SOL:Gk1MofYRrDj9MS521kuD76LpbaKuXNLsmqHH3ykLktAW
2j0to:USDT(TRON):TKqWTr45pPtmXaZ7TaSP8TkqE4jvzpnh9u\O
6j4mq2:to:USDT(TRON):TQ3GHqJH2uS3t7SbR73h81wTZgtwWoxjsp
6j4RJx:to:USDT(TRON):TFLtiX9jjRpHE3RTxb2NJ1M9yAwENRg2nM
/j-LMe:to:TRX:TPnhmFjVC4whKShB1UmjZr52pNg3PuzyF4d
9j7xOl:to:SOL:GkrDjo1fJnJHCZbropNcs5AAcKRXNJyGRxpEJb4w4bYL
6j4rfr:to:USDT(TRON):TZJEmfGs16wcd3LDbykj83W2hR9dsa1yrP
6j4RwU:to:USDT(TRON):TQDCxhmQz8yr1ktYMCd6nyLR3qiQBatrNPD
.j,WxL:to:XRP:rRS2sayHrDpeXSrDSS8rhXfiz1LvsJQS4
=j;r6n:to:USDT(BSC):0x9fb8D352F7E258cA8bCa5860C7D4d30C96752ecB
6j4HgR:to:USDT(TRON):TKi759BnVKgmbC3rJk543crXZ75G8stcsH
6j4F0j:to:USDT(TRON):THFK3wo2DSJBPy4C6GsqYeAUiprRdaGz6DQ
6j4zWZ:to:USDT(TRON):TAvrUx2sFQYhbSke8xUFmfVV8bMU6i5CCkP;
6j4APa:to:USDT(TRON):TRD9BLZKj11iRBBxnByEiwMcd8CAUezPMD)0
6j4ZUX:to:USDT(TRON):TN1WsmVPVtXiF5DtQczxk1UeC7kYAphGpA
6j4eOK:to:USDT(TRON):TGTMb2ZfEmnnuBqMviTWXEmrtfgMaPmQnb`
6j4FMA:to:USDT(TRON):TDpqVEyaE1dkAj1ithk7TTZdWoDusStNCYm
6j4Eo9:to:USDT(TRON):TQgTkMaWa5jS62pJVvWZUbfjJJSY68X8xp
9j76Nh:to:SOL:5697QaeYxqqtWikW2q4rc3HYuBGv3nm1iAccoHbLEjMje
9j7a5C:to:SOL:Aj1cjC65Q2dKLmzyngmGrHmroPtADBwU4L9kH32Hp2cp;O
<j:hE2:to:BNB(BSC):0xa7BB293ADf09E4eF3Cc0a0421a0BA5d0650B4a3b{
?j=sIO:to:PAXG(ERC20):0x3BD8E78C45CECe7A6200Bf73ccE1226ADAeCD0D1
?j=CmC:to:PAXG(ERC20):0x588B0a8DcD538ed9D604D243FeE294b3e4a79208H
{jLx0xa76985a8241b2cfab035d9552452e08bdd3aa891972c8dddfde8ae43bdb0b601|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"MXRC","amt":"5000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"13568000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"13618104879"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"13680000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"12545000000"}h!
CjA=:e:0xBCf0E39fAa4F9Be86276FEcD0a83D85690025FAE:355130:hrz_ios:100
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"zeusv","amt":"305"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"zeusv","amt":"305"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"zeusv","amt":"305"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"zeusv","amt":"305"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"zeusv","amt":"305"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"1505"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"1505"}h!
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"DIOR","amt":"24275000"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"
=j;=:l:ltc1q4lh3yfa6cxg6k6rk2tjt8ye25fg9ngrem830n0:0/1/1:ej:75
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"9338000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"9800000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"8247000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"7856900000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"5231400000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"9698570000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"8369580000"}h!
<j:Wat:to:BNB(BSC):0x79aCB3211Eec289441731574Ce8d0d19fB325e04C
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"208789291862932"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"200000000000000"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"283570547137121"}J
GjE{"p":"crc-20","op":"transfer","tick":"BURN","amt":"1000000000000000"}J
GjE{"p":"crc-20","op":"transfer","tick":"BURN","amt":"1219662008105823"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"388221108729626"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"228335842818715"}J
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10205"}h!
DjB0x633a8b79023f7e5fbcb9a4f0bc8d11277e39abdc40adb379e6aafc1cbcdc4d2f3
4j2TRADE+:maya1fugj2gyvdfs4hgy5n8w3etegh9q4th8xsax8fn
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"967448500029731"}J
EjC{"p":"crc-20","op":"transfer","tick":"BURN","amt":"96633059470737"}J
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"5000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"15000"}h!
=j;P8A:to:USDT(BSC):0x0e92e8D3e2B9F34e4A895f2372f15d8Ce96bCCD0
?j=b2i:to:USDT(ERC20):0x3ffFb00B1A13A274084D7dA869fCF54f7E1c40df
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"8500"}h!
DjB0xd5436e969359bc0d1dfc4e20c66ef7ec47204c3fe63a3eef838b38df965b65d2
DjB0x0fe5f9eca67c0b62a871e0972e3308d3c28ca17e5483b09943eeab4227d6ceb8
DjB0x2473f454a94dc9537e43281c71111fbb7a3e31ea84ed1ee681822d8ed3e31449
DjB0x2f3cffdd613acb58689b0fe35eeef7db2ad5545995d6f18e1d3edfe0a852e470
DjB0x145eb8d76e122ee867daa90473dcb1a753d425486e92f51740ca0bdff0114222
6j4vDu:to:USDT(TRON):TJHXRCWw7pjUikB88fK2yhoMNy8VhUXJzY
6j4xgh:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJvH
6j4YL9:to:USDT(TRON):THFK3wo2DSJBPy4C6GsqYeAUiprRdaGz6D>
7j5from:350USDT(TRON):TGQDAc5M3tf47LdGH6Dk5WfbjATYXWD2y4
8j6from:1010USDT(TRON):TVWHj8HfU63oVja6YcSpsbrXaqogXN7prj
DjB0xc115bf58bab2c85c37f10bcc55a29435754edef105fbb06d8e135f39a60af622
OjLL0xfd938b28df7ea657f8335239a0077de106a2f956573e5978d412c1fbc1dcfb66=|lifi
DjB0x12e8211ef900d53dff3d0092b6dacf434a238ca4066c176fadc41a18cc64c314
DjB0x45b3c46f887415c6deb23db88ae4308d242d7ca3cae4405e869bcb2c4e3cd87a
DjB0x2aa43d679018d8d0607f370dd7abd26f39a9be5fe6d21fa2e4cc774d24198e25
DjB0xf39cfcaf33edab47cd906d831899edf25342c19c3b99056d8aff076e03f60c67
DjB0x8a87ca154ab1923bf4876c42e9984f7fcd728fb620a610242b04a05ffdc00f59
DjB0xdb296412b108d79d20895b031125ff4b2a0dcc98182ab867e99bc5b8513bae53
DjB0xaba1405e8c8782098faa83deed620b5a89bd86db444257f8be5580ea63adbd83
{jLx0x595a2abdb3c6c12fb8345ead9b53f4b7e4beb8e23bbfbfbc73e9a85c27c5db2b|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
DjB0x841aaa458556c310dc209222e54e7dbe92193fdd8f811a51569ccd6c0c386952
DjB0xbcd959d725bc0a1b2574d7310f5bff5e085c567a6dd7818974fa8562f2b90318
verigent.ai/anchor/v1|chain=btc-main|proof-or-zero
verigent.ai/anchor/v1|chain=btc-main|proof-or-zero1
;j9to:USDT(ERC20):0xe11685AC07cEF0D56f7A98fB849d951454f82C07
6j4udf:to:USDT(TRON):TVYdKKdnyiV4waP915DzW79b9wVENLpXea
=j;f8I:to:USDT(BSC):0xC9741550CAEba16e143a62E6B5D6B4ee5d285c92
=j;buf:to:USDT(BSC):0xf7299805120ae72F9A36F61e44Ea94952c2C0e6C
2j0to:USDT(TRON):TC7PrcB2dPBwuTcCvGPTfMQT2rEHnMhvf5
Bbdc5680cfa5f6142c04629ac122fc0859daf7b7271e09d1e43ab1eb0d5c83601:0a
Bc6986b0edee2ce90ed50929cdd9af4147eb87d022bd070b6f4abf37a29360444:0a
;j9to:USDT(ERC20):0x0c4dd9fb499f16F2758EB067Bb69AEd1e2A6b272
DjB0x3fff77cb027b52d4347b0dfb5dea990fa8fad76c5f28fbf89e31be29237de8b3B
9j7=:e:0xb548c9a15099b0B280fD2D07E6D38a1d32Ab169A:50712733
9j7=:e:0x3B0AD34cae209138F9Cb90F87D45357cf803C7Ed:54743786
=j;sot:to:USDT(BSC):0x50935b6EaEC0ff00A1CCaba1a7F172646a24dE8c
FjDOUT:4FE7D4BE3F69118E8A851D0A05AF29E11FAEB3E6114BA83C10EBF0DF0BAE0BC1
OjLL0x7607173a618a389867761da0af69972e1f311872124386ebcf51fa0c9d31b0b8=|lifi
7j5xmL:to:ETH:0x82D2F1d456570bB69855F5eAEfc3b4E15f9d2f43/
8j6qnZ:to:USDC:0xB5eb27eAaBa8BFeeebBEC7B86de228FC8939396d8
6j48yf:to:USDT(TRON):TJSKGte1Wqc6J6gKmdLHUZ4ZSfYNYa2nBm
6j4IEt:to:USDT(TRON):TYpv4WLQBs1XMFfe6DLS3sdcRosxXZh7Ny
/j-uYj:to:TRX:TDprHCrwQ5RkwkN4iVzCjfTCMHDLm8SnKP
6j4BUX:to:USDT(TRON):TMbRsJ4Ff7xQvyVf3FPsY5pPG6cEFfWGtv
6j4B9A:to:USDT(TRON):TFqVtuJcfomWTD4hkFLeikjXrTc3qK8nWjTm
6j4NSs:to:USDT(TRON):TAHFxYoyqAaZsknAW3eA9eTnLJgtudko4v
6j4cr9:to:USDT(TRON):THsC6sXrsSoKWmRHGw8UYLmcMLh6PUsst7
6j4Nl1:to:USDT(TRON):TKNfswYSXqeTrhz9tsXZ7svPTbfcg44dRY
6j4Uez:to:USDT(TRON):TDDazdEHdW9CoryynyxHzhGwtWGeQyTWuVI
6j4DRb:to:USDT(TRON):TW1nH53nAwBHpeihtTS88YAetrR7m4uTiY
6j4vM2:to:USDT(TRON):TTk3iSq6JAaBqnFJRpwDHJZF843FYAGmZU
8j6dtR:to:LTC:ltc1q9kpur088lwxr3hx6hwsm926sadlyz4f3zk7j4j
9j7RQi:to:SOL:CyouJLrSvcyF29w3Ky5BMPsYMdA2AXjbSpNm9DYM2vH2_
=j;ms9:to:USDT(BSC):0x1Dd5802f6b9baF44467b0002820c4689Fe5D750a
Bj@1Qz:to:ETH(Robinhood):0x0ffcb897B1Ec4C48e4412c6f8A9d8BE3d24C1fC5
B92157dcd23c22426592051f6bfa4c8edd084591d49c25c218dc0f04d62b15048:0a
Be500d39da6892fd951e225cde5b32d9ee3b25b94609a9fba9e66cd8d60168371:0a
B9f59a7237f687c1a418cde6accc555407579c12c6f6efcf88a111da41c0fcffa:0a
Bdb8956ec62aa0c4a7d55f30d19c10232dce8f43163c797eb6571ee8adfc16bf7:0a
B3f0d3c4920588aaad97b7f4d0de55f64a7ee9031f2acc1afe4871ddea8541c49:0a
text/plain;charset=utf-8
3{"p":"brc-20","op":"mint","tick":"avsor","amt":"1"}h!
text/plain;charset=utf-8
3{"p":"brc-20","op":"mint","tick":"tslau","amt":"1"}h!
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1200000000000"}J
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
DjB0x24b4990c8d05fa11d6cbbdb8c1b0775e872e347e7983ac574b3f6ddfb4534f69
DjB0x4e51ac94f5b7ee55444271d085d87019e7bd309112ec5c23906ebddbb629546f
6j4EKi:to:USDT(TRON):THFK3wo2DSJBPy4C6GsqYeAUiprRdaGz6D
6j4pH4:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJvq
DjB0x929bf4df7c0b581ee0ef847a6008c277a912d45a42054d22c9a3eb003f9548b1
DjB0x6cf78fcbb6142d53e9203c49af539585aa0d4c1e893ab6f643fe747d258a7dee
DjB0x1bbb57a6407ca039f19f9249b70f219a805812c2d4f8f320102e5ff0c3dbc598
DjB0x47f403a0b0b4bf13efe8db57f10d129c81c0801c0417a801074877520cca2bfc
DjB0x3538020e05d664332a9dde84050800274c827a5b37fadb3a96d2c48969e35000
DjB0xfe1ba29980ba5c9c01e846c6c1be426e137b110308e23e1e314d3f3e51c82754
6j4839:to:USDT(TRON):TY9vSCVQDX7eptohn7p7SRY66mAAK1L6CfJ
6j43CH:to:USDT(TRON):TFqVtuJcfomWTD4hkFLeikjXrTc3qK8nWj
6j41Bz:to:USDT(TRON):TBXSNrG5MQuFtNAAiVwDSRrgunuJhL8fUd
=j;6Mc:to:USDT(BSC):0x25257040323005dACc6F36a6a98D6063ecc392a6
6j4VV8:to:USDT(TRON):TAc9WGQaX9gLatBiUuLC8xHf5HjKkyKGYn
6j4CND:to:USDT(TRON):TPW2kmK5xKkNLpamjk2qZkqxzwuEhMBJRe
6j4nmY:to:USDT(TRON):TMtzWeXRnDsXxFitwNmWtKgZvQsU5d1D52
?j=NSv:to:USDC(SOL):8niJM53MWrdrDPyYxCgYojBdiqjNQiT8xWrLzkJeE5Bv
9j7qEs:to:SOL:5z6aj5VdWomFtfyLUSoz5HNH9ct7JCSqGGe7bxpxKJVZj
OjLL0xa6a48d107bcbaf1cad2897dfd295e8021464c39436c617312e00159dc3ed95c2=|lifiC
DjB0x801db78d245c68eb96762401d530190e733e45483e08856292e15ac593c41ad7
DjB0xa8b783ad2271a9e4575aa5130b05aacefbca5a90d0c704d39fbfa30ee5c5cb36
DjB0x917ca1078514893a8db734cb617fc27ca063aff176908dd400b49d54e8f1f10a
DjB0xdb971f4b2885766c809d478c1533e95a7f91e311cde861d7e8be0e7f464f2aee
DjB0x1ab30102446d2535f305e1edf2b748eeb4fa4c777fced6c2e0e085ce804d2fab
DjB0xc6b7902eda5bb2a9ad1c993cc9bd1b8541a22f9dc462a30566a23269e628df1e
DjB0xee355e055deecd6fc67abb81d7815959aefa1c4e104ea7e796ed19cd38655a9e
DjB0x64ad20166e5b79f572459fa82fd4735c101568c7820acd2d5ffe707ce792132e
DjB0xa24be11f8d837ec1f51a25d17f19b955c1025755933dd302522720cfd423c31a
DjB0xe984ad6c6d9d8801e5d0b96367962c7a76a5f98741e566cdc0cea080733e1b59
DjB0xa009e06b18c02171410184a5f4661058ff98237f4adc916ef52cf8b97830fc28
:j8from:5995.6USDT(TRON):TUQwUkceGH8kt7qVjUMWdkax17ueaZyC4N
6j4from:20USDT(TRON):TVWHj8HfU63oVja6YcSpsbrXaqogXN7prj
8j6from:1000USDT(TRON):TUnC9s9KmzBHp3TKjoFCMp4M63qStb2gGb
DjB0xa15a569df0c6c8555771584a7f40690774d41c90cdf68fba09d049a962340113
DjB0x703546da3a15e4d24c7095493ec7c77b1649ca6ad4f7c93f39f571168fac098f3
JjH=:e:0x49a9a9D0b13C7F980e708a4767BE8301f7e7108b:16783206/350:sk/tan:7/144
FjD=:s:0xa74dC02154D596DA28CBAbfeCfD00FBc7a2b3065:282491/0/0:-_/t1:0/70
DjB0x3e0d7719c1e505374ed09c80efc9153b03e95ec7bb2bb4dff62259106e2a5ca1
8j6to:BNB(BSC):0xe8B42e30689C5d7246D77c092ab4678dDdf7f497
5j3to:SOL:EzV5L3DBKWESTzpTLY4WqVGbe8GAUPNKG6u5JGyu1BUu`?
=j;hE0:to:USDT(BSC):0x3965348f06a42d50eEA3Dc06f1970F3837FD5a74
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"16200000000000"}
;j9to:USDT(ERC20):0xbb20596112DB8AEA814cE14BF6f20AA1F06e250B
;j9to:USDT(ERC20):0x096a8921858FB944a95d626b966827619f1Bc963
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"800000000000"}J
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"500000000000"}J
?j=Oql:to:USDT(ERC20):0x6A4cAcD6E9E23C9cCdd7345f5eC1C5767F6AcE4a7
FjDOUT:DA34B9A8C13E71D0A0B17E175D034069F1F8594011FC272B711F926B5088E4AE
FjDOUT:AB503211D2FD954306000A5276C7890265F086D332A49B7B46868D222F959D85
FjDOUT:41F33540BF27C67050C81088C8E24F3080A0E09AA00495AE22605B0E8C78AB5A
FjDOUT:0B14049C793013C6B553FA49B394344BAEF67A0DDE3DDBE606A58AFE7182E65C
FjDOUT:BA15ACB990147B1E114744B5126E812ABB31F6BEB17DF52FE10E8D45B37F1000
DjB0x4671f0f30b730c2f03e668291a094221f9819b08aaf98160807685b27780d17d
FjDOUT:FB257B1441407AC44562BFAC05E6C7283E687D8916A53190616DE6F9156DFE6C
=j;=:l:ltc1qx8qzhdrfpg6dus7d7k0mjlt55hureqt88a0jgq:0/1/1:ej:75
LjJ=<:ETH.USDT:0x4F7c1515C7fb3194DE5f34B602A371F555705E7E:73582603400/14400/0
=j;bqN:to:USDT(BSC):0x1595fF110bA25afc9f4dc6De7c008b5cC4A0B7AC
OjLL0x4eba0c9355f8f14d256e65f7c6cf09b0fe6aea2029bc28d989fb184865a98815=|lifi;
7j5NJd:to:ETH:0x52dDbA14c752B025d5f72b4a47eC8fc2e7189c38
6j4kK4:to:USDT(TRON):TCqxjESTRVBzs1u84LcoUg5G1EFZiXy4Myc%
6j4Jkw:to:USDT(TRON):TBaaSK9n4PcfZe7xKv7YQ7s1EAP8jbi76p
6j4Kn7:to:USDT(TRON):TPXE3sdWJ2osUkURWzJSG9oH84cRpYR1WK
Bj@yIX:to:ETH(Robinhood):0x24D98551bCa685d27a21C624FfE2c06A41A6B699
6j4hDD:to:USDT(TRON):TAMGkwX7jzrNLZSeb84nNHGmLEw7U94E2N
6j4eYg:to:USDT(TRON):TD63kfzu4PGxQPntWQpsdThCzq8MkXGNdR
6j42xp:to:USDT(TRON):TTjk7kZrvEqpq6sv8zYDbepU2LDJahwqYu
6j46h9:to:USDT(TRON):TAmkdRVFubkAGAosv7RHKS7VG3u16ffyG7
6j4K6z:to:USDT(TRON):TJhQ6sRWZPLBq73sotieqEyjUwCzyA8F8ouz
9j7kml:to:SOL:489mERMrAtCkchUah4tbtWNvhGmnCkCa7sfbcA3vtVfg[
9j7aEa:to:SOL:Fonjn5f294qymTY5DCrfFja1DZM1aNHFEYau5Nm8SLi3
9j7eoR:to:SOL:4yjEdFigVm2ka2XFe6xnAXZPhvg1dMGyrRTspKi7UcN5
<j:0SL:to:BNB(BSC):0xde444Bb49FD6aA87160288c4f34e71cdE7c15164
=j;StN:to:USDC(POL):0x0fE59F1c3E0FB00c560044f230a160c93a1f129e
B3d52a614032dc623ec45d08e16cd4f6d9e9ec135c1c19ad2b7a463310b4e2002:0a
B362eb5f20addf589c448ebcb50ce2b11f3acb1b9ed27a511011588f257c065b6:0a
Bc05a39ca792e8bc02ed743f323dc277c4782d7f9dc1fe8c7c97009b7d4aa09af:0a
B6e883402351009f4011bbf9018339b932fee0e0d5d5601eb5e471c1940cd0e02:0a
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"10000000000"}J
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"12700"}h!
Bc73b58cc67cfc8d7f7b0ab9ab5342aae8d27c5c97c4c721971aaa8d367433f3f:0a
B2d68b8d5b40981ebf684319b5d8290f1e8659ff6ec53a1d72c684e81fd7e11ce:0a
B7ed85f5f204b7cbf99b329a17cb2c320783ffccd1272db0ed4effe6ff615fe89:0a
Bdf9805c089cf7ede8fe7efe4fdff9f958fcdffbf925bf0a546fecf762f7ba63b:0a
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"9500"}h!
k/Foundry USA Pool #dropgold/
6j4Hb6:to:USDT(TRON):TEKZXGioKoG46mQps759XcZuTAioBWsEzH
DjB0x1a9f5dfe16c076a2e2c324638fe82834a65a51fc3c56006449d897123ab53a82
DjB0x2e943a8f618667f158542af2d8615cbc13240f65e084edc7bef8654a542c1995
DjB0xdf4ff2765e94e049bf0c157b4f855700aeffafc24c56a65d166d0a6f3667e52c
DjB0xea13ee24054fd1471dc48a6348cb4e491080a5f595231cd751ee1a53bcf67bc3
DjB0x9830d57ab1514a9bfcec4758502293aa1c7a331ebb3b68d66f777094126c580c
DjB0x3ed904e064b296e7844651ea7bf903c4dc6fbef87c8affd2b4a10053b1817714
DjB0x11ab81d1e4c7b54e5a280dac5bc7cb56af44113aa02e3005ef34372e3654914e
DjB0x51c8683ab9c04290512ab97b2a00ac3fb1b7822a8a3e6d6490105a4af992e1f2
DjB0xa36afbbd27aa68b8b29b81ff7f3b90a55268f67916d293cff399721e14a9ad1c
DjB0xbabca95bd6f4f360dc7a1f7b003545695e327c24a14fcca570deafc62c3b5167
DjB0x03a30117a12b7d9fb27abd110ac3f2c846f41fe42278588b377e1eabdaace081
DjB0x9775698b5899e1e367ecab5d998fdf4ea81232e53160facce256258ff81da60b
DjB0xfc23bef2fc4ab93bff21e3357dc0a4ffcc60b6898e5afb91228fd27fa58f7dc8
{jLx0x9cdfb7f0e84112340c0494a7824554297a07b700b1861e278bfe2465791ba66c|depositor=bc1q6d2hsdyd4g34uxjp3wm6cuxhhu2g3hwesturqk|
{jLx0x9771e00ec59eabdb2956f0b6bcd278dbe20e95a5d2bf9d2894a3747206ad4601|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
DjB0xf243c8b5fd05dbb9f9e802406c64fdfa3237e981411e9e36c895677b2c36cf08
DjB0x1bbb57a6407ca039f19f9249b70f219a805812c2d4f8f320102e5ff0c3dbc598
DjB0x7cc8d88453ed80f01247502890a7846b2fc6ee748e7acf87504968495a4427d6
DjB0xa6a48d107bcbaf1cad2897dfd295e8021464c39436c617312e00159dc3ed95c2
DjB0x6aef2a1d213ef610401c0c04f23c89e8e36473e0e5e5939c0e3de97b6b239228
DjB0xfb85023f4afd4e76eab41ff356a1272d489cc844ee719ba9c402e3b47d965bac
DjB0x7dd544cd50479b1e47b46d817776026d1862662bf4fa8db34021575af9636b40
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"20000000000000"}
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"20000000000000"}
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"20000000000000"}
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"20000000000000"}
HjF=:TRON.USDT:TJoH8d4BcuGk1j9nF1mASLStkP3EQw7XZr:27542000/0/0:-_/t1:0/70[
6j47Ea:to:USDT(TRON):TAVGKaMXb1QXepPTvRRkcJs5AKSx4A3PPt
=j;nXh:to:USDT(BSC):0xf2DEa5104838466236E7b986189E1a8798e7d2f6
=j;gg7:to:USDT(BSC):0x593678875fd11933C8D9B72b97D12A495d72A18A
6j4RCw:to:USDT(TRON):TWw9yczSU4JSDsLCk1qR7ZvZ6fP5Aonb35
;j9to:USDT(ERC20):0xBa2F77db8d877E6aFd7E0fd062B76cA268F3C102
2j0to:USDT(TRON):TCh6PrnC5awdHMfDbtcai5HWVoFRAJtYRa
DjB0x0cf6aa6bd226b1169bf7aa2b9fdafaab051e57aa34530d8ae126e2771d34c91c
jBackgroundfVioletdBodycCoweShirtmNot Alone TeedFacehFrecklesdHatsdLeafdItemiGolf ClubjAttributesdNone
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i12" width="1254" height="1254"/><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i17" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i0" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i14" width="12M
54" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i14" width="1254" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i15" width="1254" height="1254"/></svg>hA
6j4jO7:to:USDT(TRON):TCoEYrR3PuYiJ4Kgrv3oJxo4X8nxVXTyr1
6j4ngQ:to:USDT(TRON):TPrhY6mphsGxhy9zTBLuKMuTNnyhZkgErK
6j4RKQ:to:USDT(TRON):TLCmDtkin3G9HkBkSgcQUkpo32545BCc9X
6j4bEe:to:USDT(TRON):TNWtbz3h159TESF5Ap7kmALAeuQuPUqXzp
/j-YwZ:to:TRX:TPwBxGzpwr47ufDYvpEPRgwPQpMFN1CpvG
9j7Pxs:to:SOL:HyTMbYNMAjcj7b8Z4EbW6ova41cmYDnT11QbwpB9pcsm
6j45q5:to:USDT(TRON):TLEYCWu3Yfa6MDqVu1L6eMD1ESFByRqdsB
6j4syx:to:USDT(TRON):TTUoZmKWxZgfmkh4B6rJUaCofdTPaMJsuz
6j4D0e:to:USDT(TRON):TLLJLkfWQ1iY7NKmii9VbxcFKPdQVPes1B~
6j4z6h:to:USDT(TRON):TBBiufWKsBden5oeqc7oRoSBQj3JACBFbD
6j4Joz:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJv
6j4pK1:to:USDT(TRON):TEtUycQVVm5W8vF8SJaPXAbeCko4Le8A2B
8j681o:to:LINK:0xAa50E524Ef96C9206da8D0eF0d79dA9eA714A17A
9j7gRd:to:SOL:G9g58ec5i3ED6y5JvXUscJfUkFwU8ka7Wcc61hkcggvq
9j759z:to:SOL:7wTiwVBLvcDuiopB2chDBZS65T1sA56Kf8xG7hcdpdJM
9j7LMd:to:SOL:9mMYKqB6yAJcurMY4n9MFehRBK822XUKEx2cHebqknBY/B
B069b83c7b6909f05e1cdf19f90d7504d0874ee0f5ac0281062dc29d7644a5838:1a
Bab08107dabf06092cda0fcd54d6eee1ec2971ce71184a5ebbe79160ce970ae36:0a
Bb68b09c723d4cfdbdaa7bc22003551cbdab26bec17e733aeee67f5cecf129902:0a
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"391492338571416"}J
o/Foundry USA Pool #dropgold/
6j4Qc4:to:USDT(TRON):TZ43bbmAL4MbgtjTt2hwkSncU8M3HqGXHw
DjB0x2048ed0d10a1debb34fa943f883c98ba9cb461f597b825af3d43c1ee193f3893
DjB0xd96ff7b82607f9a73ff5285a6449942f8aeb907f8f000449193ec427ac0ac7b4
DjB0x6fe2104a72b5c993f0ab5d85eebb80375ff898fde49fd4e2c2f9d7909f4978ec
DjB0x169201c6bfecaeb9c2caaee5937e5440106b2ec938d0a087399f2a172af992d8
8j6from:2000USDT(TRON):TUnC9s9KmzBHp3TKjoFCMp4M63qStb2gGbge*
DjB0x124443ab58eb91a03d484dd2f192898887c994f02d7144d8ae9341b5ac85afe0
DjB0x02ba69e9bf2faea2ed449ea2a86624b8b5c553cf72ff4cfd19c64688d74b7ea1
DjB0xea33d97495fa56b996b9e884faef113185a95f79301c4d426e3c946497928dcc
DjB0xc9d7ec3cdca8a95a45a5445e59a60e691cdb768261df1f87ad8f3850ac56c12a
DjB0x89cfed3f4947f5bf4f5064c0e1233f54c2eb373a0980bb7dbfb89bb8c328884f
DjB0x1d10c629ba102001955378a8d52d976de2a063549213daefbc82287645eee5af
=j;AQr:to:USDT(BSC):0x691addC2FaE9EdB913a6Cd163824C29b9cbCB165
?j=n1D:to:USDT(ERC20):0x330edfFF83118629517A8c90192a0a489094E260
OjLL0x8f3a6928f2f7e285f566903eb75b8ed827ad40e44636ae84f8153bfcbbe7f854=|lifi
DjB0x86c12f3b6c1f83ff49077cb0e3a3916b8761b412b7635ba614f8b7a79dbc499e
DjB0x12f37e12bd98a2c3e8d8f4620c044396a4e7107c1f8a70f9bfbf7166009afe6b
DjB0xe1a4e275dd894879a51cfd164dbd3f934ae619c3ac9cc87746ecf3436c2c1f71
DjB0xd065f4768dc8ed25affc032a740b6e19eec3ec6df782e312b2fcbcec9463634c
DjB0xff56a50288f635df5d659eebd752f1c2ead614457e1dea6e3a3e9b6975377bf0
DjB0x3b5cf89954a15bccaac38c06fbce256ddcc99ff7db6d1b233b6228846a304b18
OjLL0x0c5b4f5aa8cd2110c14119510b3eb0eec78c6a422e78bca7b68ff6816246246d=|lifi
DjB0x5605ec71448cc101a92afeb397e953fa5a70b570c1ff14af4488a9e1916b1622
DjB0xbcb7875dd5e61712c2d9a7ae68b0341f1225b5841ec9f86cb2b1a98233a8f544
DjB0x197cd9841ff521e6a5ded909cc5fa872210ee89991e6f571e3361ba1eb03d48c
DjB0x0f11da8bf8e50b870e09152a7907d9fae2a65e465504fa8be99eccc8356278b8
DjB0xc510adace00002bee2c17c21d08db520b21dac78c3140b10b992add1bbe49f02
OjLL0x3239e7aa509d6525c2308dfb9d466e8d75f5f4f6bb6498b3d35f2d20bf4a12fd=|lifi(
DjB0xc6957668c84736628d2acec9fdc3a6be673674b4a1967c4cfbc15f2db84ab6b3
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"20000000000000"}
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"20000000000000"}
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ordi","amt":"26"}h!
DjB0x38df425f3b8a07eeaaa75a3c97a00754fca9c6bd519cc30434ab76875f7e8739
DjB0x61a56f1cc70becdfb94f5f436d9fa00e6d0a8c33131c7e12ea989caf190bf57a
HjF=:l:ltc1qfkgjdwpv2h69u5f90u0ekn06mdk998gyu6w5jq:4396060/0/0:-_/t1:0/70
DjB0x7ebe13620c2ba164229bd7bcc0c474a9c7294ede0cf328c7ac124c24622c33e2
=j;be8:to:USDT(BSC):0x5c0Ec790B0D5929EE5E0AE89c96E01E92A2D07c3
6j4qUf:to:USDT(TRON):TAVGKaMXb1QXepPTvRRkcJs5AKSx4A3PPt
DjB0xe74abe43f7f8fc496950606753750afa6a2a2f7510131a92f8343d705703dfa3
=j;mCe:to:USDT(BSC):0xf64928Ec1Cbe5166158cD7854f196716fc75332a
6j4K2i:to:USDT(TRON):TCJdDkrHRZjKA2QPce4pxsiRUdx8cgEM1V
=j;6x0:to:USDT(BSC):0x66857C6AE39D562F0D43A03bc0F2DE366450297C
6j4G5d:to:USDT(TRON):TS5gFQt3Rdn3yLTuAPUatpxAKTGTRkr2Ga
/j-O2u:to:XRP:rsGqzcMT6YNWRvBWmAjgEnywAJzGjgV4eT
6j4yeq:to:USDT(TRON):TWmyManAwz3ttAL8buCJoHp8K8zssiHSMg
9j78mZ:to:SOL:2CM1ikPsiYLqb3p3PCa5ZuWXmAZCEX9PASLKserW1i1v
0j.IyY:to:DOGE:DNBGsMmM3tY963696oe49h4ATj28Hm5H7u
<j:nIc:to:BNB(BSC):0x46dA3Ed973Bd256181b3E68CF7DA9a1d23E6b140
?j=5wS:to:USDT(ERC20):0x26eB93163d25cb84FD3A068252b08214D1F8a17f
6j4Z2P:to:USDT(TRON):TKmQyVLSHYBWiAKAu8mPkQzv91coTVXmTM
6j4gY2:to:USDT(TRON):TTFom5eqdpX65JDav47JgUYfnXeadAGdwc
6j43cm:to:USDT(TRON):TTnCCE8TiSpoTfqzv2VFfH1uFFCpPWuw8QB`
6j4fOy:to:USDT(TRON):TWzjWY5puRfDqU1K9ghTq8NxQtHr88i1DE
6j4PfJ:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJv
6j41Q3:to:USDT(TRON):TLD6F9FQT1Wb1fHCzu2xvnWGQZGL3qNdXV
6j42OM:to:USDT(TRON):TCHvgdMVNCuj2o2286Uhv2xMRR99ic5cLT
6j4nQA:to:USDT(TRON):TLLJLkfWQ1iY7NKmii9VbxcFKPdQVPes1B
8j6WaI:to:SOL:6ESuBdaej58H7pxGgqYMXb7H3pncYp3o2LZbsuKnHfP8
8j6QDx:to:LTC:ltc1qcpz39qt53z3ftu0xzydlxmuxxx5xm7xsk3my8lm
<j:58i:to:BNB(BSC):0x2f9d94e3B17976c0Aa901F1199c47818894FF079
=j;B4N:to:USDT(BSC):0xaceD59C3Baf88dc0eAb8911B6fbcE4060121F2Ca\
=j;ivx:to:USDT(BSC):0x34A8f8424566071bb40e9d08892292e33BAfD423a
6j4HJZ:to:USDT(TRON):TNJDfRkF2KfceMn2eAPpcpihAZzhkAz1GS
9j7SHz:to:SOL:7YpQJGKQwUqNy4gNz7NtRPS84pbDXJmJPzNQrAJQVdY50
DjB0x9c017a3c5ac091c4f91cc3a5fbbe960c41a7848dda40fdeff77f8852aec5944d3
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1200000000000"}J
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1200000000000"}J
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"250000000000"}J
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1000000000000"}J
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"40"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
q/Foundry USA Pool #dropgold/
6j48l3:to:USDT(TRON):TH1eoSZRae2uFUWGVh47WfRvsSr9JcULAN
DjB0x08793dd67a518ef46aaad638fff7f6df29b260e931cb5a41d36d2992e818f213
DjB0x457e04d856561c3bb07bcff1faedba25d8c23f92765ab95265b988565d63207e
DjB0xf9c2d1d65fc6e6083aa1005f1f348fe7cdc88ea1838b282162dbdf4042c3ce0d
DjB0xaa8f71afee2661a0893212aed6d8b5e8b90b6da599f4488108a9e4ea4b3a08a5
DjB0x171c26e7f8ea4752e336c22ca72d4ad55f7860c4c6a73a0d3c96fd62de7e1a9f
6j4B0Q:to:USDT(TRON):TN11URq6znenMJMyGxBsc5PLWyE2vaaSh1
DjB0x3fcb3236d4fcfa19c1821231bc89b1f01640850279a7c4ae2a2c32e91f67ba15
DjB0x1852289ce1040cd1c39165a8f277a5d0dda31e8cf725c3fda9477412ccc40572
DjB0x1a8ce5a4a74ac27ee16b945c980007a5010273b031e5f254f73104ba6ae69713
DjB0x80d96e752afa9c3ba772c0b150b609f04783aa986630cd1a03e8aae737220a98
DjB0x18be3cd823b38125c1fb65a96899de54687a7b4d4e87c705a36121d3691f23ee
DjB0x44157bc6864fd9ce52d472b065cebe7426e9aa95b27dff263b327db6d1d61088
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"10000000000000"}
<j:k4F:to:BNB(BSC):0xE4097290Ef405b9FAd63fC631a4E7D594F616EEB
FjDOUT:7DD148F8CABB9B301D32D42C594D607CF7D379DE252CF70C8C6523A34493E7D5
6j4hmK:to:USDT(TRON):TYyZU1yY1Fgu2XLkTgvHUophQCXEh1easz
6j4wHr:to:USDT(TRON):TJhQ6sRWZPLBq73sotieqEyjUwCzyA8F8o5
/j-iDk:to:TRX:TYabzxMFovzo8Yii95f8jUgk328jqXXHbY
/j-JCA:to:TRX:TER6gz3FDnLngWEpg2PShAx2z6MuC3VMMYm
6j4krD:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJv
8j6lpO:to:LTC:ltc1qcxsuj0y9xl7wmpxxx8tqmfs8dyad329uafdyz2
9j7AS8:to:SOL:7boqqbrqvGbnQh5oAX4Z94yrRMv7v9FUjj1Mpna3NucWX
<j:kTX:to:BNB(BSC):0xfe8d51505590Fa7a8Cd9F5600c836A7B49b4e7b0F
=j;65A:to:USDT(BSC):0x8bF94A2206B6008d014e593BD9c3926DDBb00DA4E
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"225018750000"}J
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"225018750000"}J
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"25000000000"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"1300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
CB|0330943664fab568d644c805044426b1dccec281213f96a34f05153791e7d939af2e03abeb09f6c9aecae8c9648c5107b0660bb78647ee3fb006b8a674833411
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
    <meta charset="UTF-8">
        /* Basic styling, for inscribing */
            height:100%;
            width:100%;
            cursor: pointer;
            user-select: none;
            filter: drop-shadow(1px 1px 0.2px rgba(0, 0, 0, 0.6));
        .wheelGearAndFixedGear {
            filter: drop-shadow(1px 1px 0.5px rgba(0, 0, 0, 0.5));
    style="display: none; font-size: 10px"
    placeholder="6-digit number"
    <svg id="watch" viewBox="0.2 0.2 99.6 99.6" xmlns="http://www.w3.org/2000/svg">
            <!-- Radial gradients -->
            <radialGradient id="pickaxeGradTop" cx="48.29" cy="77.38" r="10.5" fx="48.29" fy="77.38" gradientUnits="userSpaceOnUse">
                <stop offset="97%" stop-color="#F7A000" stop-opacity="0.95"/>
                <stop oM
ffset="100%" stop-color="#424242" stop-opacity="0.85"/>
            </radialGradient>
            <radialGradient id="pickaxeGradBottom" cx="48.29" cy="100.12" r="33.2" fx="48.29" fy="100.12" gradientUnits="userSpaceOnUse">
                <stop offset="97%" stop-color="#424242" stop-opacity="0.85"/>
                <stop offset="97.5%" stop-color="#F7A000" stop-opacity="0.95"/>
            </radialGradient>
            <radialGradient id="natGearGrad" cx="67.67" cy="66.14" r="6.8" fx="67.67" fy="66.14" gradiM
entUnits="userSpaceOnUse">
                <stop id="natGearStopColor" offset="86%" stop-color="#E1DDDB"/>
                <stop offset="100%" stop-color="#9E9E9E" stop-opacity="0.9"/>
            </radialGradient>
            <radialGradient id="largeLowerGearGrad" cx="48.29" cy="77.38" r="16.4" fx="48.29" fy="77.38" gradientUnits="userSpaceOnUse">
                <stop offset="83%" stop-color="#9E9E9E" stop-opacity="0.9"/>
                <stop id="largeLowerGearStopColor1" offset="85.4%" stop-color="#E1DDDM
                <stop id="largeLowerGearStopColor2" offset="94%" stop-color="#E1DDDB"/>
                <stop offset="100%" stop-color="#9E9E9E" stop-opacity="0.9"/>
            </radialGradient>
            <radialGradient id="largeLowerGearSpokeGrad" cx="71" cy="70.25" r="24.95" fx="71" fy="70.25" gradientUnits="userSpaceOnUse">
                <stop offset="90%" stop-color="#9E9E9E" stop-opacity="0.9"/>
                <stop id="largeLowerGearSpokeStopColor1" offset="93%" stop-color="#E1DDDB"/>
           <stop id="largeLowerGearSpokeStopColor2" offset="97.7%" stop-color="#E1DDDB"/>
                <stop offset="100%" stop-color="#9E9E9E" stop-opacity="0.9"/>
            </radialGradient>
            <radialGradient id="largeLowerGearHubGrad">
                <stop id="largeLowerGearHubStopColor" offset="80%" stop-color="#E1DDDB"/>
                <stop offset="100%" stop-color="#9E9E9E" stop-opacity="0.9"/>
            </radialGradient>
            <radialGradient id="massGearGrad" cx="27.7" cy="7M
3.27" r="5.4" fx="27.7" fy="73.27" gradientUnits="userSpaceOnUse">
                <stop id="massGearStopColor" offset="83%" stop-color="#E1DDDB"/>
                <stop offset="100%" stop-color="#9E9E9E" stop-opacity="0.9"/>
            </radialGradient>
            <radialGradient id="wheelGearGrad" cx="27.7" cy="56.22" r="2.8" fx="27.7" fy="56.22" gradientUnits="userSpaceOnUse">
                <stop id="wheelGearStopColor" offset="70%" stop-color="#E1DDDB"/>
                <stop offset="100%" stop-color=M
"#9E9E9E" stop-opacity="0.9"/>
            </radialGradient>
            <radialGradient id="largeUpperGearGrad" cx="35" cy="40.42" r="15.4" fx="35" fy="40.42" gradientUnits="userSpaceOnUse">
                <stop offset="81%" stop-color="#9E9E9E" stop-opacity="0.9"/>
                <stop id="largeUpperGearStopColor1" offset="84%" stop-color="#E1DDDB"/>
                <stop id="largeUpperGearStopColor2" offset="94%" stop-color="#E1DDDB"/>
                <stop offset="100%" stop-color="#9E9E9E" stop-opacityM
            </radialGradient>
            <radialGradient id="largeUpperGearSpokeGrad" cx="57.71" cy="33.3" r="24.95" fx="57.71" fy="33.3" gradientUnits="userSpaceOnUse">
                <stop offset="90%" stop-color="#9E9E9E" stop-opacity="0.9"/>
                <stop id="largeUpperGearSpokeStopColor1" offset="93%" stop-color="#E1DDDB"/>
                <stop id="largeUpperGearSpokeStopColor2" offset="97.7%" stop-color="#E1DDDB"/>
                <stop offset="100%" stop-color="#9E9E9E" stop-opacityM
            </radialGradient>
            <radialGradient id="handGearGrad" cx="50" cy="27.5" r="5.2" fx="50" fy="27.5" gradientUnits="userSpaceOnUse">
                <stop id="handGearStopColor" offset="86%" stop-color="#E1DDDB"/>
                <stop offset="100%" stop-color="#9E9E9E" stop-opacity="0.9"/>
            </radialGradient>
            <radialGradient id="secondCircleGrad" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
                <stop id="secondHandCircleColor" offset="100%" stop-M
            </radialGradient>
            <radialGradient
                id="bezelRoseGold"
                cx="44%" cy="42%" r="53%"
                fx="38%" fy="36%" gradientUnits="userSpaceOnUse">
                <stop offset="0%" stop-color="#f8d8b5" />     <!-- bright highlight / glare -->
                <stop offset="78%" stop-color="#f0c9a0" />
                <stop offset="88%" stop-color="#e0b08a" />     <!-- main bezel body -->
                <stop offset="94%" stop-color="M
                <stop offset="100%" stop-color="#c18a67" />    <!-- darker recessed area -->
            </radialGradient>
            <radialGradient
                id="signRoseGold" cx="44" cy="42" r="52.5" fx="38" fy="36" gradientUnits="userSpaceOnUse">
                <stop offset="0%" stop-color="#f8d8b5" />
                <stop offset="78%" stop-color="#f0c9a0" />
                <stop offset="88%" stop-color="#e0b08a" />
                <stop offset="94%" stop-color="#d19e78" />
          <stop offset="100%" stop-color="#bd8765" />
            </radialGradient>
            <radialGradient
                id="lugsRoseGold"
                cx="49.5%" cy="49.5%" r="57%"
                fx="39%" fy="36%" gradientUnits="userSpaceOnUse">
                <stop offset="0%" stop-color="#f8d8b5" />     <!-- bright highlight / glare -->
                <stop offset="78%" stop-color="#f0c9a0" />
                <stop offset="90%" stop-color="#e0b08a" />     <!-- main body -->
   <stop offset="94%" stop-color="#d19e78" />
                <stop offset="100%" stop-color="#b87f5f" />    <!-- darker recessed area -->
            </radialGradient>
            <radialGradient
                id="bezelGold"
                cx="44%" cy="42%" r="53%"
                fx="44%" fy="42%" gradientUnits="userSpaceOnUse">
                <stop offset="0%" stop-color="#fff1c5" />
                <stop offset="65%" stop-color="#ffe1a4" />
                <stop offset="82%" stop-color="#fM
                <stop offset="91%" stop-color="#ebb75c" />
                <stop offset="100%" stop-color="#d09a42" />
            </radialGradient>
            <radialGradient
                id="signGold" cx="44" cy="42" r="52.5" fx="44" fy="42" gradientUnits="userSpaceOnUse">
                <stop offset="0%" stop-color="#fff1c5" />
                <stop offset="65%" stop-color="#ffe1a4" />
                <stop offset="82%" stop-color="#f7cb77" />
                <stop offset="91%" stop-colorM
                <stop offset="100%" stop-color="#cc9741" />
            </radialGradient>
            <radialGradient
                id="lugsGold"
                cx="49.5%" cy="49.5%" r="57%"
                fx="44%" fy="42%" gradientUnits="userSpaceOnUse">
                <stop offset="0%" stop-color="#fff1c5" />
                <stop offset="65%" stop-color="#ffe1a4" />
                <stop offset="82%" stop-color="#f7cb77" />
                <stop offset="91%" stop-color="#ebbM
                <stop offset="100%" stop-color="#c08b3d" /> <!-- darker recessed area -->
            </radialGradient>
            <radialGradient id="caps" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
                <stop offset="65%" stop-color="#FFFFF0"/>
                <stop offset="100%" stop-color="#757575"/>
            </radialGradient>
            <radialGradient id="natDotGrad" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
                <stop id="natDotColor" offset="80%" stop-color="#M
                <stop offset="92%" stop-color="#757575"/>
            </radialGradient>
            <radialGradient id="natHubGrad" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
                <stop id="natHubColor" offset="85%" stop-color="#FFFFF0"/>
                <stop offset="95%" stop-color="#757575"/>
            </radialGradient>
            <radialGradient id="crystal2" cx="54" cy="57" r="62" fx="50" fy="50" gradientUnits="userSpaceOnUse">
                <stop offset="71%" stop-color="whM
ite" stop-opacity="0"/>
                <stop offset="81%" stop-color="white" stop-opacity="0.25"/>
                <stop offset="91%" stop-color="white" stop-opacity="0"/>
            </radialGradient>
            <radialGradient id="natRimGrad" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
                <stop offset="93%" stop-color="#9E9E9E" stop-opacity="0.8"/>
                <stop id="natRimStopColor1" offset="95%" stop-color="#424242"/>
                <stop id="natRimStopColor2" offset="98%" stop-coM
                <stop offset="100%" stop-color="#9E9E9E" stop-opacity="0.8"/>
            </radialGradient>
            <radialGradient id="natRimGrad2" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
                <stop offset="93%" stop-color="#424242" stop-opacity="0.8"/>
                <stop id="natRim2StopColor1" offset="95%" stop-color="#DEDED2"/>
                <stop id="natRim2StopColor2" offset="98%" stop-color="#DEDED2"/>
                <stop offset="100%" stop-color="#424242" stoM
            </radialGradient>
            <!-- Linear gradients -->
            <linearGradient id="minuteHandGradLeft" x1="0%" x2="100%" y1="0%" y2="0%">
                <stop offset="0%" stop-color="#9E9E9E" stop-opacity="0.9"/>
                <stop offset="100%" stop-color="#212121"/>
            </linearGradient>
            <linearGradient id="minuteHandGradRight" x1="0%" x2="100%" y1="0%" y2="0%">
                <stop offset="0%" stop-color="#212121"/>
                <stop offsetM
="100%" stop-color="#9E9E9E" stop-opacity="0.9"/>
            </linearGradient>
            <linearGradient id="secGrad" x1="0%" x2="100%" y1="0%" y2="0%">
                <stop offset="10%" stop-color="#9E9E9E" stop-opacity="0.8"/>
                <stop id="secondColor" offset="50%" stop-color="orange"/>
                <stop offset="90%" stop-color="#9E9E9E" stop-opacity="0.8"/>
            </linearGradient>
            <linearGradient id="natHubDiamondGradLeft" x1="100%" x2="0%" y1="0%" y2="0%">
        <stop id="natHubColorDiamondLeft" offset="85%" stop-color="#FFFFF0"/>
                <stop offset="100%" stop-color="#757575"/>
            </linearGradient>
            <linearGradient id="natHubDiamondGradRight" x1="0%" x2="100%" y1="0%" y2="0%">
                <stop id="natHubColorDiamondRight" offset="85%" stop-color="#FFFFF0"/>
                <stop offset="100%" stop-color="#757575"/>
            </linearGradient>
            <linearGradient id="natSpokeGrad" x1="0%" x2="100%" y1="0%" y2="0%"M
                <stop offset="0%" stop-color="#9E9E9E" stop-opacity="0.8"/>
                <stop id="natSpokeStopColor1" offset="20%" stop-color="#424242"/>
                <stop id="natSpokeStopColor2" offset="80%" stop-color="#424242"/>
                <stop offset="100%" stop-color="#9E9E9E" stop-opacity="0.8"/>
            </linearGradient>
            <linearGradient id="natSpokeGrad2" x1="0%" x2="100%" y1="0%" y2="0%">
                <stop offset="0%" stop-color="#424242" stop-opacity="0.8"/>
            <stop id="natSpoke2StopColor1" offset="20%" stop-color="#DEDED2"/>
                <stop id="natSpoke2StopColor2" offset="80%" stop-color="#DEDED2"/>
                <stop offset="100%" stop-color="#424242" stop-opacity="0.8"/>
            </linearGradient>
            <!-- Filters -->
            <filter id="bezelMetallic"
                x="-10%"
                y="-10%"
                width="120%"
                height="120%">
                <!-- Flatten -->
                <feGaussiM
                in="SourceAlpha"
                stdDeviation="0.45"
                result="bumpMap" />
                <!-- Shadow control -->
                <feDiffuseLighting
                in="bumpMap"
                result="diffuseLight"
                surfaceScale="1"
                diffuseConstant="2"
                lighting-color="white">
                <feDistantLight
                    azimuth="-135"
                    elevation="60" />
                </feDiffuseLM
                <!-- Highlight control -->
                <feSpecularLighting
                in="bumpMap"
                result="specularLight"
                surfaceScale="1"
                specularConstant="1"
                specularExponent="10"
                lighting-color="white">
                <feDistantLight
                    azimuth="-135"
                    elevation="30" />
                </feSpecularLighting>
                <!-- Combine diffuse -->
                in="diffuseLight"
                in2="SourceGraphic"
                operator="arithmetic"
                k1="1" k2="0" k3="0" k4="0"
                result="baseMetal" />
                <!-- 5. Combine specular -->
                <feComposite
                in="specularLight"
                in2="baseMetal"
                operator="arithmetic"
                k1="1" k2="0" k3="0.98" k4="0" />
            </filter>
            <filter id="dialMetallic"
                x="-10%"
                y="-10%"
                width="120%"
                height="120%">
                <!-- Flatten -->
                <feGaussianBlur
                in="SourceAlpha"
                stdDeviation="0.3"
                result="bumpMap" />
                <!-- Shadow control
                diffuseConstant = overall brightness
                <feDiffuseLighting
                in="bumpMap"
                result="diffuseLight"
           surfaceScale="0.5"
                diffuseConstant="1"
                lighting-color="white">
                <feDistantLight
                    azimuth="-135"
                    elevation="60" />
                </feDiffuseLighting>
                <!-- Highlight control
                surfaceScale = bevel size
                specularConstant = overall brightness
                specularExponent = 10
                <feSpecularLighting
                in="bumpMM
                result="specularLight"
                surfaceScale="1"
                specularConstant="0.1"
                specularExponent="10"
                lighting-color="white">
                <feDistantLight
                    azimuth="-135"
                    elevation="30" />
                </feSpecularLighting>
                <!-- Combine diffuse -->
                <feComposite
                in="diffuseLight"
                in2="SourceGraphic"
                operM
                k1="1" k2="0" k3="0" k4="0"
                result="baseMetal" />
                <!-- 5. Combine specular -->
                <feComposite
                in="specularLight"
                in2="baseMetal"
                operator="arithmetic"
                k1="1" k2="0" k3="0.98" k4="0" />
            </filter>
            <filter
                id="light"
                x="-12%"
                y="-12%"
                width="124%"
                filterUnits="objectBoundingBox">
                <!-- Blur of reflection -->
                <feGaussianBlur
                in="SourceAlpha"
                stdDeviation="1.5"
                result="blurred" />
                <!-- Position of reflection -->
                <feOffset
                in="blurred"
                dx="-3"
                dy="-3"
                result="offsetBlur" />
                <feComposite
                in="offsetBlur"
             in2="SourceAlpha"
                operator="in"
                result="innerHighlight" />
                <feFlood
                flood-color="#ffffff"
                result="white" />
                <feComposite
                in="white"
                in2="innerHighlight"
                operator="in"
                result="whiteHighlight" />
                <!-- 5. Control brightness of the light (0.3 = subtle, 0.8 = strong) -->
                <feComponentTransfer
           in="whiteHighlight"
                result="tunedLight">
                <feFuncA type="linear" slope="0.3" />
                </feComponentTransfer>
                <feBlend
                in="tunedLight"
                in2="SourceGraphic"
                mode="screen" />
            </filter>
            <filter
                id="light2"
                x="-12%"
                y="-12%"
                width="124%"
                height="124%"
                filterUnits="oM
                <!-- Blur of reflection -->
                <feGaussianBlur
                in="SourceAlpha"
                stdDeviation="0.9"
                result="blurred" />
                <!-- Position of reflection -->
                <feOffset
                in="blurred"
                dx="-2.5"
                dy="-2.5"
                result="offsetBlur" />
                <feComposite
                in="offsetBlur"
                in2="SourceAlpha"
         operator="in"
                result="innerHighlight" />
                <feFlood
                flood-color="#ffffff"
                result="white" />
                <feComposite
                in="white"
                in2="innerHighlight"
                operator="in"
                result="whiteHighlight" />
                <!-- 5. Control brightness of the light (0.3 = subtle, 0.8 = strong) -->
                <feComponentTransfer
                in="whiteHighlight"
         result="tunedLight">
                <feFuncA type="linear" slope="0.12" />
                </feComponentTransfer>
                <feBlend
                in="tunedLight"
                in2="SourceGraphic"
                mode="screen" />
            </filter>
            <filter id="dialFilter">
                <feFlood flood-color="black" flood-opacity="0.3"/>
                <feComposite operator="out" in2="SourceGraphic"/>
                <feOffset dx="0.5" dy="0.5"/>
feGaussianBlur stdDeviation="0.35"/>
                <feComponentTransfer>
                    <feFuncA type="linear" slope="2" intercept="0"/>
                </feComponentTransfer>
                <feComposite operator="in" in2="SourceGraphic"/>
            </filter>
            <!-- Pattern combos -->
            <radialGradient id="circles" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
                <stop offset="0%" stop-color="#F6F2EF"/>
                <stop offset="100%" stop-color="#E7E3E2"/>
          </radialGradient>
            <pattern id="perlage" x="0" y="0" width="9" height="3" patternUnits="userSpaceOnUse">
                <g fill="url(#circles)">
                    <circle cx="0" cy="3" r="3"/>
                    <circle cx="3" cy="3" r="3"/>
                    <circle cx="6" cy="3" r="3"/>
                    <circle cx="9" cy="3" r="3"/>
                </g>
            </pattern>
            <!-- Other defs -->
            <path id="natGear-tooth" d="M 67.28 60.45 v -0.2 q 0.05M
2 -0.48 0.28 -0.91 h 0.24 q 0.22 0.43 0.28 0.91 v 0.2"/>
            <path id="largeLowerGear-tooth" d="M 47.85 62.09 v -0.2 q 0.12 -0.46 0.31 -0.91 h 0.26 q 0.19 0.44 0.31 0.91 v 0.2"/>
            <path id="largeLowerGear-spoke" d="M 49.5 63.13 a 22.65 22.65 0 0 0 0 14.25 h -2.41 a 24.95 24.95 0 0 1 0 -14.25"/>
            <path id="massGear-tooth" d="M 27.33 68.98 v -0.2 q 0.02 -0.49 0.26 -0.92 h 0.22 q 0.24 0.43 0.26 0.92 v 0.2"/>
            <path id="wheelGear-tooth" d="M 27.43 54.54 v -0.2 q -0.14 -0.51 M
0.2 -0.92 h 0.14 q 0.34 0.41 0.2 0.92 v 0.2"/>
            <path id="largeUpperGear-tooth" d="M 34.56 26.13 v -0.2 q 0.12 -0.47 0.31 -0.91 h 0.26 q 0.19 0.44 0.31 0.91 v 0.2"/>
            <path id="largeUpperGear-spoke" d="M 36.21 26.17 a 22.65 22.65 0 0 0 0 14.25 h -2.41 a 24.95 24.95 0 0 1 0 -14.25"/>
            <path id="handGear-tooth" d="M 49.63 23.42 v -0.2 q 0.014 -0.49 0.26 -0.92 h 0.22 q 0.24 0.43 0.26 0.92 v 0.2"/>
            <rect id="natSymbol-spoke" x="67.05" y="49.54" width="1.25" height="16.6"M
            <circle id="natSymbol-dot" cx="67.67" cy="49.54" r="2.8"/>
            <path id="wheelGear-tooth" d="M 49.76 68.28 v -0.2 q -0.12 -0.45 0.18 -0.81 h 0.12 q 0.3 0.36 0.18 0.81 v 0.2"/>
            <path id="escapeWheel-tooth" d="M 26.62 51.91 v -0.2 l 0.74 -2.04 h 0.34 l -0.2 1.91 v 0.2"/>
            <rect id="escapeWheel-spoke" x="27.18" y="52.02" width="1.05" height="4.2"/>
            <circle id="largeMin-dots" cx="50" cy="7" r="0.7"/>
            <path id="min-diamonds" d="M 49.37 7 l 0.63 M
0.9 l 0.63 -0.9 l -0.63 -0.9"/>
            <rect id="min-lines" x="49.8" y="6.1" width="0.4" height="1.8" rx="0.2"/>
            <circle id="hr-dots" cx="50" cy="11.7" r="0.9"/>
            <path id="hr-diamonds" d="M 49.16 11.7 l 0.84 1.2 l 0.84 -1.2 l -0.84 -1.2"/>
            <rect id="hr-lines" x="49.75" y="10.45" width="0.5" height="2.5" rx="0.25"/>
            <circle id="smallMin-dots" cx="50" cy="7.35" r="0.35"/>
        <!-- Background -->
        <rect class="click" id="clickRecM
t" width="100" height="100" fill="#424242"/>
        <!-- Lugs, gold -->
        <g id="goldLugs" fill="url(#lugsGold)" filter="url(#bezelMetallic)">
            <!-- Upper left -->
            <path d="
            M 19.15 -3.64
            a 70 70 0 0 1 -10.67 27.61
            a 5 5 0 0 0 5 -5
            v -22.61
            <!-- Upper right -->
            <path d="
            M 80.85 -3.64
            a 70 70 0 0 0 10.67 27.61
            h -11.7M
            a 5 5 0 0 1 -5 -5
            v -22.61
            <!-- Lower left -->
            <path d="
            M 19.15 103.64
            a 70 70 0 0 0 -10.67 -27.61
            a 5 5 0 0 1 5 5
            <!-- Lower right -->
            <path d="
            M 80.85 103.64
            a 70 70 0 0 1 10.67 -27.61
            h -11.72
            a 5 5 0 0 0 -5 5
        <!-- Lugs, rose gold -->
        <g id="roseGoldLugs" fill="url(#lugsRoseGold)" filter="url(#bezelMetallic)" opacity="0">
            <!-- Upper left -->
            <path d="
            M 19.15 -3.64
            a 70 70 0 0 1 -10.67 27.61
            a 5 5 0 0 0 5 -5
            v -22.61
            <!-- Upper right -->
            <path d="
            M 80.85 -3.64
            a 70 70 0 0 0 10.67 27.61
            h -11.72
            a 5 5 0 0 1 -5 M
            v -22.61
            <!-- Lower left -->
            <path d="
            M 19.15 103.64
            a 70 70 0 0 0 -10.67 -27.61
            a 5 5 0 0 1 5 5
            <!-- Lower right -->
            <path d="
            M 80.85 103.64
            a 70 70 0 0 1 10.67 -27.61
            h -11.72
            a 5 5 0 0 0 -5 5
        <!-- Frame -->
   <g id="frame" fill="url(#bezelGold)" filter="url(#dialMetallic)">
        M 18.48 88.24
        Q 25.84 82.1 25.20 73.27
        Q 25.43 69.39 25.20 65.52
        Q 24.82 60.87 25.2 56.22
        Q 30.5 36.74 45.5 27.5
        Q 61.7 20.19 73.95 9.95
        L 77.95 10.95
        Q 66.7 20.19 54.5 27.5
        Q 35.75 36.74 30.2 56.22
        Q 29.82 60.87 30.2 65.52
        Q 30.43 69.39 30.2 73.27
        Q 28.84 82.1 24.48 88.24"/>
        M 27.79 70.12
      Q 37.60 75.48 48.29 75.38
        Q 59.93 72.27 67.67 61.64
        Q 85.23 43.19 97.69 42.7
        L 97.69 46.06
        Q 85.23 48.19 67.67 68.64
        Q 59.93 77.27 48.29 79.88
        Q 37.6 80.48 27.79 74.12"/>
        <!-- Base -->
        <g id="base">
        <circle cx="50" cy="50" r="47.75" fill="#EFEBE9"/>
        <circle cx="50" cy="50" r="47.75" fill="url(#perlage)"/>
        <!-- All gears -->
        <g style="transform: scale(0.1); transform-origiM
n: 50 50;" class="wheelGearAndFixedGear">
        <g style="transform: scale(10); transform-origin: 50 50;" filter="url(#light)">
        <!-- NAT gear -->
        <!-- NAT gear teeth -->
        <g fill="url(#natGearGrad)">
        <g id="natGear">
            <g transform="rotate(0.9 67.67 66.14)">
                <use href="#natGear-tooth" transform="rotate(191.25 67.67 66.14)"/>
                <use href="#natGear-tooth" transform="rotate(202.5 67.67 66.14)"/>
                <use href="#natGear-toM
oth" transform="rotate(213.75 67.67 66.14)"/>
                <use href="#natGear-tooth" transform="rotate(225 67.67 66.14)"/>
                <use href="#natGear-tooth" transform="rotate(236.25 67.67 66.14)"/>
                <use href="#natGear-tooth" transform="rotate(247.5 67.67 66.14)"/>
                <use href="#natGear-tooth" transform="rotate(258.75 67.67 66.14)"/>
                <use href="#natGear-tooth" transform="rotate(270 67.67 66.14)"/>
                <use href="#natGear-tooth" transform="rM
otate(281.25 67.67 66.14)"/>
                <use href="#natGear-tooth" transform="rotate(292.5 67.67 66.14)"/>
                <use href="#natGear-tooth" transform="rotate(303.75 67.67 66.14)"/>
                <use href="#natGear-tooth" transform="rotate(315 67.67 66.14)"/>
                <!-- NAT gear hub -->
                <circle cx="67.67" cy="66.14" r="5.9"/>
                <!-- NAT gear cover -->
                <path d="
                M 63.15 61.61
                a 6.4 6.4 0 1 1 3.28 10.M
                l 0.2 -1.01
                a 5.37 5.37 0 1 0 -2.75 -9.07
        <!-- Large lower gear -->
        <!-- large lower gear teeth -->
        <g fill="url(#largeLowerGearGrad)">
        <g id="largeLowerGear">
            <g transform="rotate(0.2 48.29 77.38)">
                <use href="#largeLowerGear-tooth" transform="rotate(36 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(40.5 M
                <use href="#largeLowerGear-tooth" transform="rotate(45 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(49.5 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(54 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(58.5 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(63 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transformM
="rotate(67.5 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(72 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(76.5 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(81 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(85.5 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(256.5 48.29 77.38)"/>
                <use href="#largeLowerGearM
-tooth" transform="rotate(261 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(265.5 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(270 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(274.5 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(279 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(283.5 48.29 77.38)"/>
                <use hM
ref="#largeLowerGear-tooth" transform="rotate(288 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(292.5 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(297 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(301.5 48.29 77.38)"/>
                <use href="#largeLowerGear-tooth" transform="rotate(306 48.29 77.38)"/>
                <!-- Large lower gear cover, top -->
                <path d="
                a 16 16 0 0 0 -22.35 3.54
                l 1.23 0.89
                a 14.5 14.5 0 0 1 20.24 -3.22
                <!-- Large lower gear cover, bottom -->
                <path d="
                M 64.24 76.12
                a 16 16 0 0 1 -31.48 5.13
                l 1.46 -0.36
                a 14.5 14.5 0 0 0 28.52 -4.65
            <!-- Large lower gear spokes -->
            <g id="largeLowerGearSpoM
kesAndHub" transform="rotate(-15.7 48.29 77.38)" fill="url(#largeLowerGearSpokeGrad)">
            <use href="#largeLowerGear-spoke" transform="rotate(0 48.29 77.38)"/>
            <use href="#largeLowerGear-spoke" transform="rotate(180 48.29 77.38)"/>
            <!-- Large lower gear hub -->
            <circle cx="48.29" cy="77.38" r="1.8" fill="url(#largeLowerGearHubGrad)"/>
            <!-- Large lower gear rim -->
            <path d="
            M 32.79 77.38 a 15.5 15.5 0 0 1 3M
1 0 h -2 a 13.5 13.5 0 0 0 -27 0
            M 32.79 77.38 a 15.5 15.5 0 1 0 31 0 h -2 a 13.5 13.5 0 1 1 -27 0
            <!-- Pickaxe -->
            <g id="pickaxe" transform="rotate(-35 48.29 77.38)">
                <!-- Handle -->
                <path d="
                M 47.54 66.4
                a 3.6 3.6 0 0 1 1.5 0
                v 12
                a 3.6 3.6 0 0 1 -1.5 0
                " fill="url(#natSpokeGrad2)"/>
                <!-- Axe top -->
                <paM
                M 43.26 68.16
                a 10.5 10.5 0 0 1 10.05 0
                l -0.04 0.15
                l -4.99 -1.32
                l -4.99 1.32
                " fill="url(#pickaxeGradTop)"/>
                <!-- Axe bottom -->
                <path d="
                M 43.3 68.31
                a 32.2 32.2 0 0 1 9.98 0
                l -4.99 -1.37
                l -4.99 1.37
                " fill="url(#pickaxeGradBottom)"/>
       <!-- Mass gear -->
        <!-- Mass gear teeth -->
        <g fill="url(#massGearGrad)">
        <g id="massGear">
            <use href="#massGear-tooth" transform="rotate(28.8 27.7 73.27)"/>
            <use href="#massGear-tooth" transform="rotate(43.2 27.7 73.27)"/>
            <use href="#massGear-tooth" transform="rotate(57.6 27.7 73.27)"/>
            <use href="#massGear-tooth" transform="rotate(72 27.7 73.27)"/>
            <use href="#massGear-tooth" transform="rotate(86.4 27.7 73.27)"/>
            <use href="#massGear-tooth" transform="rotate(100.8 27.7 73.27)"/>
            <use href="#massGear-tooth" transform="rotate(115.2 27.7 73.27)"/>
            <use href="#massGear-tooth" transform="rotate(129.6 27.7 73.27)"/>
            <use href="#massGear-tooth" transform="rotate(144 27.7 73.27)"/>
            <use href="#massGear-tooth" transform="rotate(158.4 27.7 73.27)"/>
            <!-- Mass gear cover -->
            <path d="
            M 30.11 68.89
            a 5 5 0 1 0 -0.57 9.M
            l -0.31 -0.79
            a 4.15 4.15 0 1 1 0.47 -7.49
            <!-- Mass gear hub -->
            <circle cx="27.7" cy="73.27" r="4.5"/>
        <!-- Wheel Gear -->
        <!-- Wheel gear teeth -->
        <g fill="url(#wheelGearGrad)">
        <g id="wheelGear">
            <g transform="rotate(28.4 27.7 56.22)">
                <use href="#wheelGear-tooth"/>
                <use href="#wheelGear-tooth" transform="rotate(30 27.7 56.2M
                <use href="#wheelGear-tooth" transform="rotate(60 27.7 56.22)"/>
                <use href="#wheelGear-tooth" transform="rotate(90 27.7 56.22)"/>
                <use href="#wheelGear-tooth" transform="rotate(120 27.7 56.22)"/>
                <use href="#wheelGear-tooth" transform="rotate(150 27.7 56.22)"/>
                <use href="#wheelGear-tooth" transform="rotate(180 27.7 56.22)"/>
                <use href="#wheelGear-tooth" transform="rotate(210 27.7 56.22)"/>
use href="#wheelGear-tooth" transform="rotate(240 27.7 56.22)"/>
                <use href="#wheelGear-tooth" transform="rotate(270 27.7 56.22)"/>
                <use href="#wheelGear-tooth" transform="rotate(300 27.7 56.22)"/>
                <use href="#wheelGear-tooth" transform="rotate(330 27.7 56.22)"/>
            <!-- Wheel gear hub -->
            <circle cx="27.7" cy="56.22" r="1.9"/>
        <!-- Large Upper gear -->
        <!-- large Upper gear tM
        <g fill="url(#largeUpperGearGrad)">
        <g id="largeUpperGear">
            <g transform="rotate(0.23 35 40.42)">
                <use href="#largeUpperGear-tooth"/>
                <use href="#largeUpperGear-tooth" transform="rotate(4.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(9.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(14.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotateM
                <use href="#largeUpperGear-tooth" transform="rotate(24 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(28.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(33.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(38.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(43.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotateM
                <use href="#largeUpperGear-tooth" transform="rotate(52.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(57.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(62.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(67.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(72 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(7M
                <use href="#largeUpperGear-tooth" transform="rotate(81.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(86.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(91.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(96 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(100.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(M
                <use href="#largeUpperGear-tooth" transform="rotate(110.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(115.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(120 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(124.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(129.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rM
otate(134.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(139.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(144 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(148.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(153.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(158.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transfM
orm="rotate(163.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(168 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(172.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(177.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(182.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(187.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" M
transform="rotate(192 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(196.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(201.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(206.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(211.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(216 35 40.42)"/>
                <use href="#largeUpperGear-tooM
th" transform="rotate(220.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(225.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(230.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(235.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(240 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(244.8 35 40.42)"/>
                <use href="#largeUpperGeM
ar-tooth" transform="rotate(249.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(254.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(259.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(264 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(268.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(273.6 35 40.42)"/>
                <use href="#largeUM
pperGear-tooth" transform="rotate(278.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(283.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(288 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(292.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(297.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(302.4 35 40.42)"/>
                <use href="#M
largeUpperGear-tooth" transform="rotate(307.2 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(312 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(316.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(321.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(326.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(331.2 35 40.42)"/>
                <use hM
ref="#largeUpperGear-tooth" transform="rotate(336 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(340.8 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(345.6 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(350.4 35 40.42)"/>
                <use href="#largeUpperGear-tooth" transform="rotate(355.2 35 40.42)"/>
            <!-- Large Upper gear spokes -->
            <g id="largeUpperGearSpokeM
sAndHub" fill="url(#largeUpperGearSpokeGrad)">
            <use href="#largeUpperGear-spoke"/>
            <use href="#largeUpperGear-spoke" transform="rotate(180 35 40.42)"/>
            <!-- Large Upper gear hub -->
            <circle cx="35" cy="40.42" r="1.8" fill="url(#largeLowerGearHubGrad)"/>
            <!-- Large Upper gear rim -->
            <path d="
            M 20.5 40.42 a 14.5 14.5 0 0 1 29 0 h -2 a 12.5 12.5 0 0 0 -25 0
            M 20.5 40.42 a 14.5 14.5 0 1 0 29 0M
 h -2 a 12.5 12.5 0 1 1 -25 0
        <!-- Hand Gear -->
        <!-- Hand gear teeth -->
        <g fill="url(#handGearGrad)">
        <g id="handGear">
            <use href="#handGear-tooth"/>
            <use href="#handGear-tooth" transform="rotate(15 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(30 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(45 50 27.5)"/>
            <use href="#handGear-tooth" transformM
="rotate(60 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(75 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(90 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(105 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(120 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(135 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(150 50 27.5)"/>
            <use href="#handGear-tooth" transfoM
rm="rotate(165 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(180 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(195 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(210 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(225 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(240 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(255 50 27.5)"/>
            <use href="#handGear-tooth" trM
ansform="rotate(270 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(285 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(300 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(315 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(330 50 27.5)"/>
            <use href="#handGear-tooth" transform="rotate(345 50 27.5)"/>
            <!-- Hand gear hub -->
            <circle cx="50" cy="27.5" r="4.3"/>
        <!-- NAT symbol -->
        <g style="transform: scale(0.5); transform-origin: 50 50;" class="wheelGearAndFixedGear">
        <g style="transform: scale(2); transform-origin: 50 50;" filter="url(#light2)">
        <g id="natSymbol" fill="#424242">
            <!-- NAT rim -->
            <path id="natRim"
            M 50.05 66.14 a 17.63 17.63 0 0 1 35.25 0 h -1.25 a 16.38 16.38 0 0 0 -32.75 0
            M 50.05 66.14 a 17.63 17.63 0 1 0 35.25 0M
 h -1.25 a 16.38 16.38 0 1 1 -32.75 0
            " fill="#424242"/>
            <!-- NAT spokes -->
            <g id="natSpokeGroup" fill="#424242">
                <use href="#natSymbol-spoke" transform="rotate(0 67.67 66.14)"/>
                <use href="#natSymbol-spoke" transform="rotate(60 67.67 66.14)"/>
                <use href="#natSymbol-spoke" transform="rotate(120 67.67 66.14)"/>
                <use href="#natSymbol-spoke" transform="rotate(180 67.67 66.14)"/>
                <use href="#naM
tSymbol-spoke" transform="rotate(240 67.67 66.14)"/>
                <use href="#natSymbol-spoke" transform="rotate(300 67.67 66.14)"/>
            <!-- NAT dots -->
            <g fill="url(#natDotGrad)">
                <use href="#natSymbol-dot" transform="rotate(0 67.67 66.14)"/>
                <use href="#natSymbol-dot" transform="rotate(60 67.67 66.14)"/>
                <use href="#natSymbol-dot" transform="rotate(120 67.67 66.14)"/>
                <use href="#natSymbol-dot" tranM
sform="rotate(180 67.67 66.14)"/>
                <use href="#natSymbol-dot" transform="rotate(240 67.67 66.14)"/>
                <use href="#natSymbol-dot" transform="rotate(300 67.67 66.14)"/>
            <!-- NAT hub, regular -->
            <circle id="natHubRegular" cx="67.67" cy="66.14" r="4.8" fill="url(#natHubGrad)"/>
            <!-- NAT hub, diamond -->
            <g id="natHubDiamond" opacity = "0">
                <g fill="url(#natHubDiamondGradLeft)">
                   M
 <!-- Upper left -->
                    <path d="
                    M 67.71 66.18
                    l -3.38 2.38
                    v -7.02"
                    transform="rotate(35.73 67.71 66.18)"/>

                    <!-- lower left -->
                    <path d="
                    M 67.71 66.10
                    l -3.38 -2.38
                    v 7.02"
                    transform="rotate(-35.73 67.71 66.10)"/>
                </g>
                <g fill="urlM
(#natHubDiamondGradRight)">
                    <!-- Upper right -->
                    <path d="
                    M 67.63 66.18
                    l 3.38 2.38
                    v -7.02"
                    transform="rotate(-35.73 67.63 66.18)"/>
                    <!-- lower right -->
                    <path d="
                    M 67.63 66.10
                    l 3.38 -2.38
                    v 7.02"
                    transform="rotate(35.73 67.63 66.10)"/>
                </g>
        <!-- Assembly -->
        <g fill="#424242">
        <g style="transform: scale(0.5); transform-origin: 50 50;" class="wheelGearAndFixedGear">
        <g style="transform: scale(2); transform-origin: 50 50;" filter="url(#light2)">
        <!-- Mass -->
        <g id="massPivot">
            <!-- Mass frame -->
            M 26.86 70.7
            a 0.84 0.84 0 0 0 1.68 0
            <rect x="27.18" y="71.35" width="1.05" height="0.8"/>
            <circle cx="27.7" cy="73.27" r="1.26"/>
        <!-- START Escaper -->
        <!-- Escaper -->
        <path id="escaperPivot"
        M 25.820 65.64
        l -5.29 -3.06
        a 7.76 7.76 0 0 1 1.53 -2.38
        l 0.03 -0.18
        l 0.88 -0.16
        l -0.13 0.74
        a 6.92 6.92 0 0 0 -1.13 1.46
        a 1.11 1.11 0 0 1 1.92 0
.71 0 0 0 -0.91 -1.13
        a 5.55 5.55 0 0 1 1.4 2.19
        l -3.36 1.94
        l -1.05 -0.31
        a 1.11 1.11 0 0 1 -1.68 0
        l -1.05 0.31
        <!-- START Escape wheel -->
        <g id="escapeWheelPivot">
        <!-- Wheel rim -->
        M 23.06 56.22 a 4.64 4.64 0 0 1 9.28 0 h -1.05 a 3.59 3.59 0 0 0 -7.18 0
        M 23.06 56.22 a 4.64 4.64 0 1 0 9.28 0 h -M
1.05 a 3.59 3.59 0 1 1 -7.18 0
        <!-- Wheel teeth -->
        <use href="#escapeWheel-tooth"/>
        <use href="#escapeWheel-tooth" transform="rotate(24 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(48 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(72 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(96 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(120 27.7 56.22)"/>
        <use href="#M
escapeWheel-tooth" transform="rotate(144 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(168 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(192 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(216 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(240 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(264 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(288 27.7 56.22)"/>
       <use href="#escapeWheel-tooth" transform="rotate(312 27.7 56.22)"/>
        <use href="#escapeWheel-tooth" transform="rotate(336 27.7 56.22)"/>
        <!-- Wheel spokes -->
        <use href="#escapeWheel-spoke"/>
        <use href="#escapeWheel-spoke" transform="rotate(120 27.7 56.22)"/>
        <use href="#escapeWheel-spoke" transform="rotate(240 27.7 56.22)"/>
        <!-- Wheel hub -->
        <circle cx="27.7" cy="56.22" r="1.05"/>
        <!-- Dial -->
        <g id="dial" fill="#FFFFF0" filter="url(#dialMetallic)">
        <!-- Dial, regular -->
        <path id="dialRegular" d="M50,2.25 A47.75 47.75 0 1 1 49.999,2.25 Z M27.7,62.1
        m-14.2,0 a14.2 14.2 0 1 0 28.4,0 a14.2 14.2 0 1 0 -28.4,0 Z M67.67,66.14
        m-20.4,0 a20.4 20.4 0 1 0 40.8,0 a20.4 20.4 0 1 0 -40.8,0 Z M50,27.5
        m-10,0 a10 10 0 1 0 20,0 a10 10 0 1 0 -20,0 Z" fill-rule="evenodd"/>
        <path id="dialSkeleton" d="
        M 27 27.5 a 23 23 0 0 1 4M
6 0 h -13 a 10 10 0 0 0 -20 0
        a 23 23 0 0 0 28.47 22.34
        a 20.4 20.4 0 0 1 7.87 -3.6
        a 23 23 0 0 0 9.66 -18.74
        a 10 10 0 0 1 -20 0
        opacity="0"/>
        <g id="assemblyAndNatWindows">
        <!-- Assembly circle -->
        <circle cx="27.7" cy="62.1" r="14.3" fill="#EFEBE9" filter="url(#dialFilter)"/>
        <!-- Nat circle -->
        <circle cx="67.67" cy="66.14" r="20.5" fill="#EFEBE9" filtM
er="url(#dialFilter)"/>
        <!-- Hand circle -->
        <circle id="handWindow" cx="50" cy="27.5" r="10.1" fill="#EFEBE9" filter="url(#dialFilter)"/>
        <!-- Bezel, sign, gold -->
        <g id="goldBezel" filter="url(#bezelMetallic)">
        <!-- Bezel -->
        M 0.5 50 a 49.5 49.5 0 0 1 99 0 h -3.5 a 46 46 0 0 0 -92 0
        M 0.5 50 a 49.5 49.5 0 1 0 99 0 h -3.5 a 46 46 0 1 1 -92 0
        " fill="url(#bezelGold)" />
        <!-- Sign -->
text x="50" y="98.9" font-size="2.3" font-family="cursive" font-style="italic"
        fill="url(#signGold)" text-anchor="middle" textLength="4.9" lengthAdjust="spacing" opacity="1">BRK</text>
        <!-- Bezel, sign, rose gold -->
        <g id="roseGoldBezel" filter="url(#bezelMetallic)" opacity="0">
        <!-- Bezel -->
        M 0.5 50 a 49.5 49.5 0 0 1 99 0 h -3.5 a 46 46 0 0 0 -92 0
        M 0.5 50 a 49.5 49.5 0 1 0 99 0 h -3.5 a 46 46 0 1 1 -92 0
url(#bezelRoseGold)"/>
        <!-- Sign -->
        <text x="50" y="98.9" font-size="2.3" font-family="cursive" font-style="italic"
        fill="url(#signRoseGold)" text-anchor="middle" textLength="4.9" lengthAdjust="spacing">BRK</text>
        <!-- Markers, hour text -->
        <g id="markers" fill="#616161">
        <!-- Large Minute dots -->
        <g id="minuteDots">
            <use href="#largeMin-dots"/>
            <use href="#largeMin-dots" transform="rotate(30 50 27.5)"/>
           <use href="#largeMin-dots" transform="rotate(60 50 27.5)"/>
            <use href="#largeMin-dots" transform="rotate(90 50 27.5)"/>
            <use href="#largeMin-dots" transform="rotate(120 50 27.5)"/>
            <use href="#largeMin-dots" transform="rotate(150 50 27.5)"/>
            <use href="#largeMin-dots" transform="rotate(180 50 27.5)"/>
            <use href="#largeMin-dots" transform="rotate(210 50 27.5)"/>
            <use href="#largeMin-dots" transform="rotate(240 50 27.5)"/>
       <use href="#largeMin-dots" transform="rotate(270 50 27.5)"/>
            <use href="#largeMin-dots" transform="rotate(300 50 27.5)"/>
            <use href="#largeMin-dots" transform="rotate(330 50 27.5)"/>
        <!-- Minute diamonds -->
        <g id="minuteDiamonds" opacity="0">
            <use href="#min-diamonds"/>
            <use href="#min-diamonds" transform="rotate(30 50 27.5)"/>
            <use href="#min-diamonds" transform="rotate(60 50 27.5)"/>
            <use href="M
#min-diamonds" transform="rotate(90 50 27.5)"/>
            <use href="#min-diamonds" transform="rotate(120 50 27.5)"/>
            <use href="#min-diamonds" transform="rotate(150 50 27.5)"/>
            <use href="#min-diamonds" transform="rotate(180 50 27.5)"/>
            <use href="#min-diamonds" transform="rotate(210 50 27.5)"/>
            <use href="#min-diamonds" transform="rotate(240 50 27.5)"/>
            <use href="#min-diamonds" transform="rotate(270 50 27.5)"/>
            <use href="#min-diamoM
nds" transform="rotate(300 50 27.5)"/>
            <use href="#min-diamonds" transform="rotate(330 50 27.5)"/>
        <!-- Minute lines -->
        <g id="minuteLines" opacity="0">
            <use href="#min-lines"/>
            <use href="#min-lines" transform="rotate(30 50 27.5)"/>
            <use href="#min-lines" transform="rotate(60 50 27.5)"/>
            <use href="#min-lines" transform="rotate(90 50 27.5)"/>
            <use href="#min-lines" transform="rotate(120 50 27.5)"/>
         <use href="#min-lines" transform="rotate(150 50 27.5)"/>
            <use href="#min-lines" transform="rotate(180 50 27.5)"/>
            <use href="#min-lines" transform="rotate(210 50 27.5)"/>
            <use href="#min-lines" transform="rotate(240 50 27.5)"/>
            <use href="#min-lines" transform="rotate(270 50 27.5)"/>
            <use href="#min-lines" transform="rotate(300 50 27.5)"/>
            <use href="#min-lines" transform="rotate(330 50 27.5)"/>
        <g id="hourDots">
            <use href="#hr-dots" transform="rotate(30 50 27.5)"/>
            <use href="#hr-dots" transform="rotate(60 50 27.5)"/>
            <use href="#hr-dots" transform="rotate(120 50 27.5)"/>
            <use href="#hr-dots" transform="rotate(150 50 27.5)"/>
            <use href="#hr-dots" transform="rotate(210 50 27.5)"/>
            <use href="#hr-dots" transform="rotate(240 50 27.5)"/>
            <use href="#hr-dots" transform="rotate(300 50 27.5)"/>
    <use href="#hr-dots" transform="rotate(330 50 27.5)"/>
        <!-- Hour diamonds -->
        <g id="hourDiamonds" opacity="0">
            <use href="#hr-diamonds" transform="rotate(30 50 27.5)"/>
            <use href="#hr-diamonds" transform="rotate(60 50 27.5)"/>
            <use href="#hr-diamonds" transform="rotate(120 50 27.5)"/>
            <use href="#hr-diamonds" transform="rotate(150 50 27.5)"/>
            <use href="#hr-diamonds" transform="rotate(210 50 27.5)"/>
 <use href="#hr-diamonds" transform="rotate(240 50 27.5)"/>
            <use href="#hr-diamonds" transform="rotate(300 50 27.5)"/>
            <use href="#hr-diamonds" transform="rotate(330 50 27.5)"/>
        <!-- Hour lines -->
        <g id="hourLines" opacity="0">
            <use href="#hr-lines" transform="rotate(30 50 27.5)"/>
            <use href="#hr-lines" transform="rotate(60 50 27.5)"/>
            <use href="#hr-lines" transform="rotate(120 50 27.5)"/>
            <use href="#hM
r-lines" transform="rotate(150 50 27.5)"/>
            <use href="#hr-lines" transform="rotate(210 50 27.5)"/>
            <use href="#hr-lines" transform="rotate(240 50 27.5)"/>
            <use href="#hr-lines" transform="rotate(300 50 27.5)"/>
            <use href="#hr-lines" transform="rotate(330 50 27.5)"/>
        <!-- Small minute dots -->
        <use href="#smallMin-dots" transform="rotate(6 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(12 50 27.5)"/>M
        <use href="#smallMin-dots" transform="rotate(18 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(24 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(36 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(42 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(48 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(54 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(66 50 27.5)"/>
        <use href="#smallMin-dots" M
transform="rotate(72 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(78 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(84 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(96 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(102 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(108 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(114 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(126 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(132 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(138 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(144 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(156 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(162 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(168 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(174 50 27.5)"/>
        <use href="#smallMin-M
dots" transform="rotate(186 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(192 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(198 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(204 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(216 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(222 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(228 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(234 50M
        <use href="#smallMin-dots" transform="rotate(246 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(252 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(258 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(264 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(276 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(282 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(288 50 27.5)"/>
        <use href="M
#smallMin-dots" transform="rotate(294 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(306 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(312 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(318 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(324 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(336 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotate(342 50 27.5)"/>
        <use href="#smallMin-dots" transform="rotM
        <use href="#smallMin-dots" transform="rotate(354 50 27.5)"/>
        <!-- Hour text, numbers -->
        <g id="hourTextNumbers" font-size="4" text-anchor="middle" dominant-baseline="central">
            <text x="50" y="11.7">12</text>
            <text x="50" y="11.7" transform="rotate(90 50 27.5) rotate(-90 50 11.7)">3</text>
            <text x="50" y="11.7" transform="rotate(180 50 27.5) rotate(-180 50 11.7)">6</text>
            <text x="50" y="11.7" transform="rotate(270 M
50 27.5) rotate(-270 50 11.7)">9</text>
        <!-- Hour text, letters -->
        <g id="hourTextLetters" font-size="3.6" text-anchor="middle" dominant-baseline="central" opacity="0">
            <text x="50" y="11.7">XII</text>
            <text x="50" y="11.7" transform="rotate(90 50 27.5) rotate(-90 50 11.7)">III</text>
            <text x="50" y="11.7" transform="rotate(180 50 27.5) rotate(-180 50 11.7)">VI</text>
            <text x="50" y="11.7" transform="rotate(270 50 27.5) rotate(-2M
70 50 11.7)">IX</text>
        <!-- All hands -->
        <g style="transform: scale(0.5); transform-origin: 50 50;" class="shadowed">
        <g style="transform: scale(2); transform-origin: 50 50;" filter="url(#light)">
        <!-- Hour hand -->
        <g id="hourHand">
            <g id="hourHandRegular">
                <g transform="rotate(6.1 50 27.5)">
                    <!-- Left side -->
                    <path d="
                    M 49.7 27.53
                 l -0.08 -0.75
                    q -0.41 -1.95 -1.78 -3.03
                    v -10.11
                    q 0.04 -0.96 0.46 -1.51
                    l 0.1 -0.01
                    l 1.64 15.36
                    " fill="url(#minuteHandGradLeft)"/>
                </g>
                <g transform="rotate(-6.1 50 27.5)">
                <!-- Right side -->
                    <path d="
                    M 50.3 27.53
                    l 0.08 -0.75
                    q 0.41 -1.M
                    v -10.11
                    q -0.04 -0.96 -0.46 -1.51
                    l -0.1 -0.01
                    l -1.64 15.36
                    " fill="url(#minuteHandGradRight)"/>
                </g>
            <g id="hourHandHollow" opacity="0">
                <g transform="rotate(6.1 50 27.5)">
                    <!-- Left side -->
                    <path d="
                    M 49.7 27.53
                    l -0.08 -0.75
                   M
 q -0.41 -1.95 -1.78 -3.03
                    v -10.11
                    q 0.04 -0.96 0.46 -1.51
                    l 0.1 -0.01
                    l 0.44 4.14
                    v 7.03
                    q 0.49 0.46 0.86 1.03
                    l 0.34 3.16
                    " fill="url(#minuteHandGradLeft)"/>
                </g>
                <g transform="rotate(-6.1 50 27.5)">
                    <!-- Right side -->
                    <path d="
                    M 50.3 27.53
            l 0.08 -0.75
                    q 0.41 -1.95 1.78 -3.03
                    v -10.11
                    q -0.04 -0.96 -0.46 -1.51
                    l -0.1 -0.01
                    l -0.44 4.14
                    v 7.03
                    q -0.49 0.46 -0.86 1.03
                    l -0.34 3.16
                    " fill="url(#minuteHandGradRight)"/>
                </g>
        <!-- Minute hand -->
        <g id="minuteHand">
            <g id="minutM
                <g transform="rotate(2.71 50 27.5)">
                    <!-- Left side -->
                    <path d="
                    M 49.7 27.51
                    l -0.02 -0.5
                    q -0.04 -1.43 -1.06 -2.19
                    v -16.23
                    q 0.03 -0.68 0.38 -1.03
                    l 0.08 -0.004
                    l 0.96 19.95
                    " fill="url(#minuteHandGradLeft)"/>
                </g>
                <g transform="rotate(-2.7M
                    <!-- Right side -->
                    <path d="
                    M 50.3 27.51
                    l 0.02 -0.5
                    q 0.04 -1.43 1.06 -2.19
                    v -16.23
                    q -0.03 -0.68 -0.38 -1.03
                    l -0.08 -0.004
                    l -0.96 19.95
                    " fill="url(#minuteHandGradRight)"/>
                </g>
            <g id="minuteHandHollow" opacity="0">
                <g transfM
orm="rotate(2.71 50 27.5)">
                    <!-- Left side -->
                    <path d="
                    M 49.7 27.51
                    l -0.02 -0.5
                    q -0.04 -1.43 -1.06 -2.19
                    v -16.23
                    q 0.03 -0.68 0.38 -1.03
                    l 0.08 -0.004
                    l 0.34 7.02
                    v 9.88
                    q 0.28 0.26 0.5 0.57
                    l 0.12 2.49
                    " fill="url(#minuteHandGradLeft)"/>
                <g transform="rotate(-2.71 50 27.5)">
                    <!-- Right side -->
                    <path d="
                    M 50.3 27.51
                    l 0.02 -0.5
                    q 0.04 -1.43 1.06 -2.19
                    v -16.23
                    q -0.03 -0.68 -0.38 -1.03
                    l -0.08 -0.004
                    l -0.34 7.02
                    v 9.88
                    q -0.28 0.26 -0.5 0.57
                    l -0.12 2.49
            " fill="url(#minuteHandGradRight)"/>
                </g>
        <!-- Second Hand -->
        <g id="secondHand" fill="url(#secGrad)">
            <path d="M 49.6 30.6 v -22.85 l 0.4 -0.4 l 0.4 0.4 v 22.85 l -0.4 0.4"/>
            <!-- Circles -->
            <circle cx="50" cy="27.5" r="1.7" fill="url(#secondCircleGrad)" opacity="0.75"/>
            <circle cx="50" cy="27.5" r="1.2" fill="url(#caps)"/>
        <circle cx="50" cy="50" r="46.2" fill="url(#crystal2)"/>
        <circle class="click" id="crystalClick" cx="27.7" cy="62.1" r="14.2" fill="transparent"/>
    <audio id="watchSound" src="data:audio/wav;base64,UklGRmQBAABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YUABAAAM+5T34P8BCOoEz
    /iv/0UGIgTq/Fz6bP8LBZUD/fyp+iUFLAMJ/UP73P86BLgC3v07/EoDVwIj/on84/9YAwMC/f0E/SkAuwJh/v39TgDnAcEAo/58/oUA3wF9/pH+mACxAXAAvP7g
    /nUARAFYABb/WwAmAVsAHf8l/0sA5ABAAHb/IQBSABEA5v/0/wEAAAAAAAAAAAAAM
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" preload="auto"></audio>
    <!-- MINT ID injected here (replace MINT_INSCRIPTION_ID with any inscription id) eg. dbd52c52d864bb82010c7cdc9dd6d79a45bed6a67d3a0b2c1f7bf9cc0a80dce3i0-->
    <script id="preview" mint="MINT_INSCRIPTION_ID">
// Retrieve content inscriptiM
let mintText = document.getElementById('preview').getAttribute('mint')
let blockNumber = 0;
let sixDigitNumber = 755314;
    0: "#555553", // #424242 + 10% more ivory
    1: "#1E88E5", // Blue
    2: "#43A047", // Green
    3: "#8E24AA", // Purple
    4: "#F06292", // Pink
    5: "#F0F0E2", // Ivory + 3% blk
    6: "#039BE5", // Light Blue
    7: "#F7A000", // Orange + 3% blk
    8: "#00ACC1", // Cyan
    9: "#546E7A"  // Blue Grey
// Check no mint provided
xt.includes('MINT_INSCRIPTION_ID')) {
  let input = document.getElementById('blk')
  input.style.display = 'block'
  input.style.position = 'absolute'
  input.style.fontSize = '20px'
  input.style.margin = '20px'
  input.style.top = '0'
  //   input.value = blockNumber
  input.value = sixDigitNumber
  input.addEventListener('input',(event) => {
      //   blockNumber = input.value
      sixDigitNumber = input.value
      updateWatch(blockNumber);
  updateWatch(blockNumber);
  const request = new XMLHttpRequest()
    //Replace /content/ to https://ordinals.com/content/ for development
    // request.open('GET', 'https://ordinals.com/content/' + mintText) // for development
    request.open('GET', '/content/' + mintText) // for inscribing
    request.responseType = 'text'
    request.addEventListener('load', () => initialize(request.response))
    request.addEventListener('error', () => console.error('XHR error'))
  console.error(`XHR error ${request.status}`)
function initialize(result) {
    console.log('Result', result)
    //Get block number
    data = JSON.parse(result)
    blockNumber = data.blk
  updateWatch(blockNumber);
var escaperAngle = 0;
var minuteAngle = 0;
var wheelAngle2 = 0;
var checkTotalS = 0;
var checkTotalSN = 0;
const clickRect = document.getElementById("clickRect");
const period = 2; //sec
const omega = 2 * Math.PI / period; //M
angular frequency, rad/s
const theta_m = 20 * Math.PI / 180; //angular amplitude, rad
let watchSound = document.getElementById("watchSound");
// Function to update watch hands
async function updateWatch(number) {
    // Retrieve data for a given block number
    //For development uncomment line below
    // const request = await fetch(`https://ordinals.com/r/blockinfo/${blockNumber}`); // for development
    const request = await fetch(`/r/blockinfo/${blockNumber}`); // for inscribing
    const result = M
await request.json();
    let timestamp = result.timestamp;
    let nonceValue = result.nonce;
    const hashValue = mintText;
    // --------------Main string-------------
    // Extract digits from hash, remove last digit
    const hashDigits = hashValue.replace(/\D/g, '').slice(0, -1);
    // -----------------------Convert nonce and hash to BigInt, then mutiply-------------
    const hashDigitsBigInt = BigInt(hashDigits);
    const nonceValueBigInt = BigInt(nonceValue);
    const product = nonceVaM
lueBigInt * hashDigitsBigInt;
    // Convert the product to a string
    if(mintText.includes('MINT_INSCRIPTION_ID')) {
        var productString = String(sixDigitNumber); // for testing
        var startIndex = productString.length - 6;
        var endIndex = productString.length;
        var productString = String(product);
        startIndex = productString.length - 9;
        endIndex = productString.length - 3;
    // Colors, arrays
    // Grab substring and make into array
    const array = productString.substring(startIndex, endIndex) // Grab a 6-digits chunck of product string
        .split('') // Split the string into an array of individual character digits
        .map(Number); // Convert each character digit to a number
    const arrayPosition1 = array[0];
    const arrayPosition2 = array[1];
    const arrayPosition3 = array[2];
    const arrayPosition4 = array[3];
    const arrayPosition5 = array[4];
    const arrayPosition6 = array[5];
    var color1 = colorsM
[arrayPosition1]; // nat hub
    var color2 = colors[arrayPosition2]; // nat dots
    var color3 = colors[arrayPosition3]; // nat frame
    var color4 = colors[arrayPosition4]; // gears
    var color5 = colors[arrayPosition5]; // second hand
    var countOfSevens = 0;
    checkTotalS = 0;
    checkTotalSN = 0;
    // Grab substring
    const subString = productString.substring(startIndex, endIndex); // Grab a 6-digits chunck of product string
    // Preliminary counts
    countOfEights = (subString.match(/8/g) || []).length; // Counts all '8' occurrences
    // Check the six-digit trait slice, not the full inscription-derived product.
    // Check for palindrome
    if (subString.length == 6) {
        if (arrayPositiM
on1 == arrayPosition6) {
            check1 = 1;
        if (arrayPosition2 == arrayPosition5) {
            check2 = 1;
        if (arrayPosition3 == arrayPosition4) {
            check3 = 1;
    checkTotal = check1 + check2 + check3;
    // Sequential, positive
    if (subString.length == 6) {
        if (arrayPosition2 - arrayPosition1 == 1) {
            checkS1 = 1;
        if (arrayPosition3 - arrayPosition2 == 1) {
            checkS2 = 1;
        if (arrayPosition4 - arrayPosition3 == 1) {
            checkS3 = 1;
        if (arrayPosition5 - arrayPosition4 == 1) {
            checkS4 = 1;
        if (arrayPosition6 - arrayPosition5 == 1) {
            checkS5 = 1;
    checkTotalS = checkS1 + checkS2 + checkS3 + checkS4 + checkS5;
    // Sequential, negative
    if (subString.length == 6) {
        if (arrayPosition2 - arrayPosition1 == -1) {
            checkSN1 = 1;
arrayPosition3 - arrayPosition2 == -1) {
            checkSN2 = 1;
        if (arrayPosition4 - arrayPosition3 == -1) {
            checkSN3 = 1;
        if (arrayPosition5 - arrayPosition4 == -1) {
            checkSN4 = 1;
        if (arrayPosition6 - arrayPosition5 == -1) {
            checkSN5 = 1;
    checkTotalSN = checkSN1 + checkSN2 + checkSN3 + checkSN4 + checkSN5;
    const hourTextNumbers = document.getElementById("hourTextNuM
    const hourTextLetters = document.getElementById("hourTextLetters");
    if (subString.includes('0') && subString.includes('1')) {
        hourTextNumbers.setAttribute("opacity", "0");
        hourTextLetters.setAttribute("opacity", "1");
        hourTextNumbers.setAttribute("opacity", "1");
        hourTextLetters.setAttribute("opacity", "0");
    // 5-Minute markers
    const minuteDots = document.getElementById("minuteDots");
    const minuteDiamonds = document.getElemM
entById("minuteDiamonds");
    const minuteLines = document.getElementById("minuteLines");
    if (subString.includes('2') && subString.includes('1')) {
        minuteDots.setAttribute("opacity", "0");
        minuteLines.setAttribute("opacity", "0");
        minuteDiamonds.setAttribute("opacity", "1");
    } else if (subString.includes('2')) {
        minuteDots.setAttribute("opacity", "0");
        minuteLines.setAttribute("opacity", "1");
        minuteDiamonds.setAttribute("opacity", "0");
        minuteDots.setAttribute("opacity", "1");
        minuteLines.setAttribute("opacity", "0");
        minuteDiamonds.setAttribute("opacity", "0");
    const hourDots = document.getElementById("hourDots");
    const hourDiamonds = document.getElementById("hourDiamonds");
    const hourLines = document.getElementById("hourLines");
    if (subString.includes('3') && subString.includes('2')) {
        hourDots.setAttribute("opacity", "0");
        hourLines.setAttribute("opM
        hourDiamonds.setAttribute("opacity", "1");
    } else if (subString.includes('3')) {
        hourDots.setAttribute("opacity", "0");
        hourLines.setAttribute("opacity", "1");
        hourDiamonds.setAttribute("opacity", "0");
        hourDots.setAttribute("opacity", "1");
        hourLines.setAttribute("opacity", "0");
        hourDiamonds.setAttribute("opacity", "0");
    // Dial and marker colors
    const dial = document.getElementById("dial");
st markers = document.getElementById("markers");
    if (subString.includes('777')) {
        dial.setAttribute("fill", "#FFA500"); // orange + 5% more ivory
        markers.setAttribute("fill", "#FFFFF0");
    } else if (arrayPosition3 <= 1) {
        dial.setAttribute("fill", "#5E5E5C"); // #424242 + 15% more ivory
        markers.setAttribute("fill", "#FFFFF0");
    } else if (arrayPosition3 <= 6) {
        dial.setAttribute("fill", "#FFFFF0");
        markers.setAttribute("fill", "#616161");
        dial.setAttribute("fill", "#657C86");  // #546E7A +10% more ivory
        markers.setAttribute("fill", "#FFFFF0");
    const hourHandRegular = document.getElementById("hourHandRegular");
    const hourHandHollow = document.getElementById("hourHandHollow");
    const minuteHandRegular = document.getElementById("minuteHandRegular");
    const minuteHandHollow = document.getElementById("minuteHandHollow");
    if(subString.includes('888')) {
        hourHandRegular.setM
Attribute("opacity", "0");
        hourHandHollow.setAttribute("opacity", "1");
        minuteHandRegular.setAttribute("opacity", "0");
        minuteHandHollow.setAttribute("opacity", "1");
        hourHandRegular.setAttribute("opacity", "1");
        hourHandHollow.setAttribute("opacity", "0");
        minuteHandRegular.setAttribute("opacity", "1");
        minuteHandHollow.setAttribute("opacity", "0");
    // Bezel, lugs, and frame
    const goldLugs = document.getElementById("golM
    const roseGoldLugs = document.getElementById("roseGoldLugs");
    const goldBezel = document.getElementById("goldBezel");
    const roseGoldBezel = document.getElementById("roseGoldBezel");
    if (subString.includes('7') && subString.includes('8')) {
        goldLugs.setAttribute("opacity", "0");
        roseGoldLugs.setAttribute("opacity", "1");
        goldBezel.setAttribute("opacity", "0");
        roseGoldBezel.setAttribute("opacity", "1");
        goldLugs.setAttribute("opaM
        roseGoldLugs.setAttribute("opacity", "0");
        goldBezel.setAttribute("opacity", "1");
        roseGoldBezel.setAttribute("opacity", "0");
    // Nat hub color
    const natHubColor = document.getElementById("natHubColor");
    natHubColor.setAttribute("stop-color", color1);
    // Nat dot color
    const natDotColor = document.getElementById("natDotColor");
    natDotColor.setAttribute("stop-color", color2);
    // Nat frame color
    const natRimStopColor1 = doM
cument.getElementById("natRimStopColor1");
    natRimStopColor1.setAttribute("stop-color", color3);
    const natRimStopColor2 = document.getElementById("natRimStopColor2");
    natRimStopColor2.setAttribute("stop-color", color3);
    const natSpokeStopColor1 = document.getElementById("natSpokeStopColor1");
    natSpokeStopColor1.setAttribute("stop-color", color3);
    const natSpokeStopColor2 = document.getElementById("natSpokeStopColor2");
    natSpokeStopColor2.setAttribute("stop-color", color3);
st natRim2StopColor1 = document.getElementById("natRim2StopColor1");
    natRim2StopColor1.setAttribute("stop-color", color3);
    const natRim2StopColor2 = document.getElementById("natRim2StopColor2");
    natRim2StopColor2.setAttribute("stop-color", color3);
    const natSpoke2StopColor1 = document.getElementById("natSpoke2StopColor1");
    natSpoke2StopColor1.setAttribute("stop-color", color3);
    const natSpoke2StopColor2 = document.getElementById("natSpoke2StopColor2");
    natSpoke2StopColor2.setAttriM
bute("stop-color", color3);
    const natGearStopColor = document.getElementById("natGearStopColor");
    natGearStopColor.setAttribute("stop-color", color4);
    const largeLowerGearStopColor1 = document.getElementById("largeLowerGearStopColor1");
    largeLowerGearStopColor1.setAttribute("stop-color", color4);
    const largeLowerGearStopColor2 = document.getElementById("largeLowerGearStopColor2");
    largeLowerGearStopColor2.setAttribute("stop-color", color4);
    const largeLowerGeaM
rSpokeStopColor1 = document.getElementById("largeLowerGearSpokeStopColor1");
    largeLowerGearSpokeStopColor1.setAttribute("stop-color", color4);
    const largeLowerGearSpokeStopColor2 = document.getElementById("largeLowerGearSpokeStopColor2");
    largeLowerGearSpokeStopColor2.setAttribute("stop-color", color4);
    const largeLowerGearHubStopColor = document.getElementById("largeLowerGearHubStopColor");
    largeLowerGearHubStopColor.setAttribute("stop-color", color4);
    const massGearStopColor = documeM
nt.getElementById("massGearStopColor");
    massGearStopColor.setAttribute("stop-color", color4);
    const wheelGearStopColor = document.getElementById("wheelGearStopColor");
    wheelGearStopColor.setAttribute("stop-color", color4);
    const largeUpperGearStopColor1 = document.getElementById("largeUpperGearStopColor1");
    largeUpperGearStopColor1.setAttribute("stop-color", color4);
    const largeUpperGearStopColor2 = document.getElementById("largeUpperGearStopColor2");
    largeUpperGearStopColor2.setAM
ttribute("stop-color", color4);
    const largeUpperGearSpokeStopColor1 = document.getElementById("largeUpperGearSpokeStopColor1");
    largeUpperGearSpokeStopColor1.setAttribute("stop-color", color4);
    const largeUpperGearSpokeStopColor2 = document.getElementById("largeUpperGearSpokeStopColor2");
    largeUpperGearSpokeStopColor2.setAttribute("stop-color", color4);
    const handGearStopColor = document.getElementById("handGearStopColor");
    handGearStopColor.setAttribute("stop-color", color4);
    const secondHandColor2 = document.getElementById("secondColor");
    secondHandColor2.setAttribute("stop-color", color5);
    const secondHandCircleColor = document.getElementById("secondHandCircleColor");
    secondHandCircleColor.setAttribute("stop-color", color5);
    // Cosmic, skeleton, windows, base
    const dialRegular = document.getElementById("dialRegular");
    const dialSkeleton = document.getElementById("dialSkeleton");
    const frame = document.getElementById("frame"M
    const base = document.getElementById("base");
    const largeLowerGearSpokesAndHub = document.getElementById("largeLowerGearSpokesAndHub");
    const largeUpperGearSpokesAndHub = document.getElementById("largeUpperGearSpokesAndHub");
    const assemblyAndNatWindows = document.getElementById("assemblyAndNatWindows");
    const handWindow = document.getElementById("handWindow");
    const natRim = document.getElementById("natRim");
    const natSpokeGroup = document.getElementById("natSpokeGroup");
 if (countOfEights >= 4) { // Cosmic
        dialRegular.setAttribute("opacity", "0");
        dialSkeleton.setAttribute("opacity", "0");
        frame.setAttribute("opacity", "0");
        base.setAttribute("opacity", "0");
        largeLowerGearSpokesAndHub.setAttribute("opacity", "0");
        largeUpperGearSpokesAndHub.setAttribute("opacity", "0");
        assemblyAndNatWindows.setAttribute("opacity", "0");
        handWindow.setAttribute("opacity", "0");
        markers.setAttribute("fill", "#F7F7E9")M
        natSpokeGroup.setAttribute("fill", "url(#natSpokeGrad2)");
        natRim.setAttribute("fill", "url(#natRimGrad2)");
        } else if (checkTotalS == 5 || checkTotalSN == 5) { // Sequential, transparent skeleton
        dialRegular.setAttribute("opacity", "0");
        dialSkeleton.setAttribute("opacity", "0.7");
        frame.setAttribute("opacity", "1");
        base.setAttribute("opacity", "0");
        largeLowerGearSpokesAndHub.setAttribute("opacity", "1");
        largeUpperGearSpokesAndHuM
b.setAttribute("opacity", "1");
        assemblyAndNatWindows.setAttribute("opacity", "0");
        handWindow.setAttribute("opacity", "1");
        natSpokeGroup.setAttribute("fill", "url(#natSpokeGrad2)");
        natRim.setAttribute("fill", "url(#natRimGrad2)");
    } else if (subString.includes('3') && subString.includes('1') && subString.includes('4')) { // Skeleton
        dialRegular.setAttribute("opacity", "0");
        dialSkeleton.setAttribute("opacity", "1");
        frame.setAttribute("opacity",M
        base.setAttribute("opacity", "0");
        largeLowerGearSpokesAndHub.setAttribute("opacity", "1");
        largeUpperGearSpokesAndHub.setAttribute("opacity", "1");
        assemblyAndNatWindows.setAttribute("opacity", "0");
        handWindow.setAttribute("opacity", "1");
        natSpokeGroup.setAttribute("fill", "url(#natSpokeGrad2)");
        natRim.setAttribute("fill", "url(#natRimGrad2)");
    } else if (subString.includes('5')) { // Windows
        dialRegular.setAttribute("opacity", M
        dialSkeleton.setAttribute("opacity", "0");
        frame.setAttribute("opacity", "1");
        base.setAttribute("opacity", "0");
        largeLowerGearSpokesAndHub.setAttribute("opacity", "1");
        largeUpperGearSpokesAndHub.setAttribute("opacity", "1");
        assemblyAndNatWindows.setAttribute("opacity", "1");
        handWindow.setAttribute("opacity", "1");
        natSpokeGroup.setAttribute("fill", "url(#natSpokeGrad2)");
        natRim.setAttribute("fill", "url(#natRimGrad2)");
        dialRegular.setAttribute("opacity", "1");
        dialSkeleton.setAttribute("opacity", "0");
        frame.setAttribute("opacity", "1");
        base.setAttribute("opacity", "1");
        largeLowerGearSpokesAndHub.setAttribute("opacity", "1");
        largeUpperGearSpokesAndHub.setAttribute("opacity", "1");
        assemblyAndNatWindows.setAttribute("opacity", "1");
        handWindow.setAttribute("opacity", "1");
        natSpokeGroup.setAttribute("fill", "url(#natSpokeGrad)");M
        natRim.setAttribute("fill", "url(#natRimGrad)");
    // Palindrome, diamond nat hub
    const natHubRegular = document.getElementById("natHubRegular");
    const natHubDiamond = document.getElementById("natHubDiamond");
    const natHubColorDiamondLeft = document.getElementById("natHubColorDiamondLeft");
    const natHubColorDiamondRight = document.getElementById("natHubColorDiamondRight");
    if (checkTotal == 3 && !subString.includes('885588')) {
        natHubRegular.setAttribute("opacM
        natHubDiamond.setAttribute("opacity", "1");
        natHubColorDiamondLeft.setAttribute("stop-color", color1);
        natHubColorDiamondRight.setAttribute("stop-color", color1);
        natHubRegular.setAttribute("opacity", "1");
        natHubDiamond.setAttribute("opacity", "0");
    // Pickaxe, pull mint 885588
    const pickaxe = document.getElementById("pickaxe");
    if (subString.includes('885588')) {
        pickaxe.setAttribute("opacity", "1");
atHubColor.setAttribute("stop-color", "#F7A000");
        natDotColor.setAttribute("stop-color", "#F0F0E2");
        secondHandColor2.setAttribute("stop-color", "#F7A000");
        secondHandCircleColor.setAttribute("stop-color", "#F7A000");
        pickaxe.setAttribute("opacity", "0");
        natHubColor.setAttribute("stop-color", color1);
        natDotColor.setAttribute("stop-color", color2);
        secondHandColor2.setAttribute("stop-color", color5);
        secondHandCircleColor.setAttrM
ibute("stop-color", color5);
    // Remove names from animate loop
    const natGear = document.getElementById("natGear");
    const largeLowerGear = document.getElementById("largeLowerGear");
    const massGear = document.getElementById("massGear");
    const wheelGear = document.getElementById("wheelGear");
    const largeUpperGear = document.getElementById("largeUpperGear");
    const handGear = document.getElementById("handGear");
    const natSymbol = document.getElementById("natSymbol");
 const massPivot = document.getElementById("massPivot");
    const escaperPivot = document.getElementById("escaperPivot");
    const escapeWheelPivot = document.getElementById("escapeWheelPivot");
    const wheel = document.getElementById("wheel");
    const hourHand = document.getElementById("hourHand");
    const minuteHand = document.getElementById("minuteHand");
    const secondHand = document.getElementById("secondHand");
    // Remove origins from animate loop
    natGear.style.transformOrigin = '67M
    largeLowerGear.style.transformOrigin = '48.29px 77.38px';
    massGear.style.transformOrigin = '27.7px 73.27px';
    wheelGear.style.transformOrigin = '27.7px 56.22px';
    largeUpperGear.style.transformOrigin = '35px 40.42px';
    handGear.style.transformOrigin = '50px 27.5px';
    natSymbol.style.transformOrigin = '67.67px 66.14px';
    massPivot.style.transformOrigin = '27.7px 73.27px';
    escaperPivot.style.transformOrigin = '27.7px 65.52px';
    escapeWheelPivot.style.transformOriM
gin = '27.7px 56.22px';
    hourHand.style.transformOrigin = '50px 27.5px';
    minuteHand.style.transformOrigin = '50px 27.5px';
    secondHand.style.transformOrigin = '50px 27.5px';
    function animate() {
        // Delay start
        if (run == false && q == 0) {
            var TempDate = new Date();
            var TempMilliSecond = TempDate.getSeconds() + TempDate.getMilliseconds() / 1000;
            const TempTheta_m = 20 * Math.PI / 180; //angular amplitude, rad
            const TempPeriod M
            const TempOmega = 2 * Math.PI / TempPeriod; //angular frequency, rad/s
            var TempMassAngle = TempTheta_m * Math.sin(TempOmega * TempMilliSecond) * 180 / Math.PI; //deg
            if (TempMassAngle > 17 || TempMassAngle < -17){
                click = false;
                q = 1;
        // Static or dynamic date
        if (click == true) {
            // Extract month, day, hour, minute, and second (static)
            var date = new Date(timestM
amp * 1000); // Convert to milliseconds
            var hour = date.getUTCHours() + date.getUTCMinutes() / 60 + date.getUTCSeconds( )/ 3600;
            var minute = date.getUTCMinutes();
            var second = date.getUTCSeconds();
            var milliSecond = 0;
            // Extract month, day, hour, minute, and second (dynamic)
            var date = new Date();
            var hour = date.getHours() + date.getMinutes() / 60 + date.getSeconds( )/ 3600;
            var minute = dateM
            var second = date.getSeconds();
            var milliSecond = date.getSeconds() + date.getMilliseconds() / 1000;
        // Calculate hand angles for hour and second
        const hourAngle = (hour / 12) * 360;
        const secondAngle = (second / 60) * 360;
        const omegaFraction = (omega * milliSecond) / (2 * Math.PI);
        // START Mass
        // Define mass location
        const decimal = omegaFraction - Math.floor(omegaFraction);M
            if (decimal >= 0.25 && decimal <= 0.75) {
                var n = 0; //rotating left
            } else if (decimal > 0.75 || decimal < 0.25) {
                var n = 1; //rotating right
        // Mass angle
        const massAngle = theta_m * Math.sin(omega * milliSecond) * 180 / Math.PI; //deg
        const natSymbolAngle = (25/32) * massAngle;
        const largeLowerGearAngle = -(25/80) * massAngle;
        // START Escaper
        // Escaper angle
            if (massAngle >= 16.68) {
                escaperAngle = -8;
            } else if (massAngle >= -16.68) {
                escaperAngle = -8 + 0.48 * Math.abs(massAngle - 16.68);
            } else if (massAngle < -16.68) {
                escaperAngle = 8;
        if (n == 1) {
            if (massAngle <= -16.68) {
                escaperAngle = 8;
            } else if (massAngle <= 16.68) {
                escaperAngle = 8 - 0.48 * Math.abs(massAnglM
            } else if (massAngle > 16.68) {
                escaperAngle = -8;
        // START Escape wheel
        if (save >= 43200) {
            save = 0;
        if (n == 0) {
            once1 = true;
            if (escaperAngle <= 0) {
                wheelAngle = save;
            } else if (escaperAngle <= 4.44) {
                wheelAngle = save + 0.91 * escaperAngle;
            } else if (escaperAngle < 8) {
                wheelAngle M
= save + 4.03 + 2.24 * (escaperAngle - 4.44);
            } else if (escaperAngle >= 8 && once0 == true) {
                wheelAngle = save + 12;
                save = wheelAngle;
                initial = 0; // disappear initial
                once0 = false;
        if (n == 1) {
            once0 = true;
            if (escaperAngle >= 0) {
                wheelAngle = initial + save;
            } else if (escaperAngle >= -4.44) {
                wheelAngle = initial + savM
e + 0.91 * Math.abs(escaperAngle);
            } else if (escaperAngle > -8) {
                wheelAngle = initial + save + 4.03 + 2.24 * (Math.abs(escaperAngle) - 4.44);
            } else if (escaperAngle <= -8 && once1 == true) {
                wheelAngle = initial + save + 12;
                save = wheelAngle;
                initial = 0; // disappear initial
                once1 = false;
        // Mute/unmute sound
        if(sound == false) {
            watchSound.vM
        } else if (sound == true) {
            if (escaperAngle <= -8 || escaperAngle >= 8) {
                watchSound.volume = 0.8; // not same as watchSound.play
                // turns volume on while in contact
            // Sound only
            if (escaperAngle >= 4 && once2 == true) {
                if (z == 0) { // ignores 1st tap to allow sound to sync
                    watchSound.currentTime = 0;
                    z = 1;
                } else if (z == 1) M
                    watchSound.currentTime = 0;
                    watchSound.play();
                once2 = false;
                once3 = true;
            if (escaperAngle <= -4 && once3 == true) {
                if (z == 0) { // ignores 1st tap to allow sound to sync
                    watchSound.currentTime = 0;
                    z = 1;
                } else if (z == 1) {
                    watchSound.currentTime = 0;
                    watchSound.play();M
                once3 = false;
                once2 = true;
        // Static or dynamic rotate
        if (click == true) {
            secondAngle2 = 360 * minute + secondAngle;
            wheelAngle2 = 2 * secondAngle2;
            minuteAngle = (1/60) * secondAngle2;
            largeUpperGearAngle = -(24/75) * secondAngle2;
            if (q == 1) {
                shift = 360 * minute + secondAngle - 0.5 * wheelAngle; // RemM
                q = 2;
            secondAngle2 = 0.5 * wheelAngle + shift; // Add wheelAngle back in
            wheelAngle2 = wheelAngle + 2 * shift; // 720*minute + 2*secondAngle at 1st, then adds wheelAngle
            minuteAngle = (1/60) * secondAngle2;
            largeUpperGearAngle = -(24/75) * secondAngle2;
        // Oscillate NAT Symbol
        natSymbol.style.transform = `rotate(${natSymbolAngle}deg)`;
        // Oscillate NAT gear
style.transform = `rotate(${natSymbolAngle}deg)`;
        // Oscillate large lower gear
        largeLowerGear.style.transform = `rotate(${largeLowerGearAngle}deg)`;
        // Oscillate mass gear
        massGear.style.transform = `rotate(${massAngle}deg)`;
        // Oscillate mass
        massPivot.style.transform = `rotate(${massAngle}deg)`;
        // Oscillate escaper
        escaperPivot.style.transform = `rotate(${escaperAngle}deg)`;
        // Rotate escape wheel
        escapeWheelPivoM
t.style.transform = `rotate(${wheelAngle}deg)`;
        // Rotate wheel gear
        wheelGear.style.transform = `rotate(${wheelAngle2}deg)`;
        // Rotate hour hand
        hourHand.style.transform = `rotate(${hourAngle}deg)`;
        // Rotate minute hand
        minuteHand.style.transform = `rotate(${minuteAngle}deg)`;
        // Rotate second hand
        secondHand.style.transform = `rotate(${secondAngle2}deg)`;
        // Rotate second hand gear
        handGear.style.transform = `rotaM
te(${secondAngle2}deg)`;
        // Rotate large upper gear
        largeUpperGear.style.transform = `rotate(${largeUpperGearAngle}deg)`;
        requestAnimationFrame(animate);
    requestAnimationFrame(animate);
function resetVariable() {
    escaperAngle = 0;
    secondAngle2 = 0;
    minuteAngle = 0;
    wheelAngle2 = 0;M
// Check for background click
clickRect.addEventListener("click", function() {
    resetVariable();
// Check visibility state
document.addEventListener("visibilitychange", function() {
    resetVariable();
// Check for sound click
crystalClick.addEventListener("click", function() {
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"4000"}h!
GjE{"p":"crc-20","op":"transfer","tick":"BURN","amt":"1242737043188430"}J
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"7000"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"3095"}h!
DjB0x6b0ce2df766350eeb2900ae70c018f6bb35e48eb2e006c2946221a4bd6f15ccd
text/plain;charset=utf-8
Lg{"p":"brc-20","op":"deploy","tick":"xKode","lim":"4200","max":"55000000","self_mint":"true","dec":"18"}h!
RjLOStmpHash261003_00383cba88a753cd3d164aa3fed58b586d4c0dd236d671f4b8953d87870f9ee0q
{"p":"crc-20","op":"deploy","tick":"CPOW36","type":"pow","algo":"sha256d-txid","max":"7000000","reward":"1000","difficulty_bits":"36","fee":"2400","fee_spk":"5120389bafb6a43227c5e6f980e364657a8fcdc2aee24868444cbc837aee773a4191"}E(
{"p":"crc-20","op":"deploy","tick":"CPOW37","type":"pow","algo":"sha256d-txid","max":"7000000","reward":"2000","difficulty_bits":"37","fee":"5000","fee_spk":"5120389bafb6a43227c5e6f980e364657a8fcdc2aee24868444cbc837aee773a4191"}6&
{"p":"crc-20","op":"deploy","tick":"CPOW38","type":"pow","algo":"sha256d-txid","max":"7000000","reward":"5000","difficulty_bits":"38","fee":"16000","fee_spk":"5120389bafb6a43227c5e6f980e364657a8fcdc2aee24868444cbc837aee773a4191"}&$
GjElEdge21585579c237982a6ca806e2ebb8af42e756369422997b48b3e0d653ab2f6811
DjB0x981797adcc7e86b1c7614adefacf073687549fe17fd572b6390d29d2701fa0da3
/ViaBTC/Mined by mb60/,
DjB0xe3bfe26d52bdd7e6986e4fef9e663e806ed82dbcdef01748258a1284e46a703b
DjB0xc93a64194a41082d177714c29750ee3473429c41945cb9ac4929d943bf11c681
DjB0xd6e0a7bb1ecd188be32fbda1330cbe7f97e205a6ee55ffebc1abbaf0124ed649
DjB0x387813e2bbb79319e26fbf1b7e574bf6505b84c77cbf84157706132dbe443f20
DjB0x7ad5ce7d8bf44819d709853610036ad90f2d59cd7d90c95a48c34cf535304fa0
DjB0xa582e700eb7b2aee3584f628ccce6512ece29614781097e4351ea5cbfc1f8391
DjB0x2501db2c83b2127020bdb928e104076a322a364f6fc3c87bee60d27582c7ed4e
DjB0x1a33312ecaea5a7e9d65d45dad7951924ba2882363607685e5c68e587cb88e2d
DjB0xe987dcbddf32cffceccbfaa885444713a2df543fd30b6c86e27b9d1a76eb27a3
DjB0x59eb9eacc0086c3f82f333d291d5cc9d346f14e363d664fe7b6f5e7af9451b5e
OjLL0xaabc38ff435e61ce98c8606babfb4b0e53bb14740aae5e97274c032d41df0cc9=|lifi
DjB0x07ea3b4702a58fef4b94c2c8962df7f1e93d3bd1f42221fe2e957ab08d62f9c8
DjB0x9e59fa839d4061748e31242fc5c7e32b69fb043fbf7ed40b165f96e59302b616
DjB0x981797adcc7e86b1c7614adefacf073687549fe17fd572b6390d29d2701fa0da
DjB0x230e26ba710fc377de6080d20b6b097270c424ec71089f16ac475546385fb3b1
DjB0xc85c5ba809d2c7cc4f358793eb662a1eadcd8a62af04280a5e61b326dc172fef
DjB0xa688d41bdf80afbfea91c50f4c8954a07a177a4b1f305d79fa49117a0b9eabbd
DjB0xe23856a9e412f0a6cbcc0e6aa3de3e141b0f41fadc03327ea005d0fd671cfd5d
OjLL0x7522d9b5cae2500ab7cb86acad5c5dc540fba05936295e1179229385d4dd389d=|lifiM
OjLL0x5f257a94f51bc00ec2e25698f2fa846e69520db092f69aedeb773ebde405b22e=|lifi'
text/plain;charset=utf-8
DjB0xd28cda6468f63f262e1562adea154c05536baf56b88ce3b18bd835f1a1ab2173
=j;mK6:to:USDT(BSC):0xb735Ca5b9b0B4E4d96A3A4895A412c6b558b77f1
<j:5EG:to:BNB(BSC):0xD5674ed88F6545804Cb25B88C32CD780Fd0F1097
FjDOUT:5D958C5947D9AC969A1ECFD870C046FFB27B1C71D5531C1B27A55450CC31B695
FjDOUT:175D360D1BECD93EEBD03C8B362544FB28047F7AAE055DACE31A6973893E1000
FjDOUT:4496EEE738A8C5151F5500F5A4A1BFE2E65CA226158BBC5CF0C7D209A21C0166
6j4wEX:to:USDT(TRON):TZC5kEdGSAh31Wq2GseENAa85bubYR1RVV
=j;Uz4:to:USDT(BSC):0x268a917672f485Dd04Ef0fe2d4E63140001B6659
6j44nA:to:USDT(TRON):TE4vWMmjzFQGR9amXrgQKVUuugkMHJ83BQ
=j;YSL:to:USDT(BSC):0x26fe0A226B5Ab8AdA9DE1f4beAA30774aA40e471
6j4MIs:to:USDT(TRON):TPnjwGPvK6okKTD9h97SMW6L1A1gsi7k8j
6j4VNG:to:USDT(TRON):TBRoBEiK6CcCHh7kJ6mjRdRVL56WhS94J4
6j4lnr:to:USDT(TRON):TD2v4TpfKMMp7Wnf9VK3SGNNEs5CL4vLw2*
6j4ltG:to:USDT(TRON):TXRpNmH6yVmKHUDrD2BqFVKNfU9k5oF5YV*
/j-D3D:to:TRX:TER6gz3FDnLngWEpg2PShAx2z6MuC3VMMY:
6j4PiA:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJv
6j4zd4:to:USDT(TRON):TXjYG2SkYKh92uv2opU6XbMdjVwPUgnmfd
6j4XXZ:to:USDT(TRON):TRTYu6q6GZsFWKhVTdEVFJHQ4tKmETJdo3
6j4T9a:to:USDT(TRON):TXUwkfAbmetwBWW4orqmRSpbYtJmkFGyke
6j4uQM:to:USDT(TRON):TET2AHfu25JQVfroLiNBcvJgCud4LmgQws
6j4QLi:to:USDT(TRON):TE8RJfQrChzTEWVaqaLC4EsrwHY6wfqAi4
6j4aVw:to:USDT(TRON):TPCvoRMthmUj4AGDxD4YUW79AddaJc8L3T
FjDOUT:C20E7F72BD10D775C27CA9C69A2B915717D8FC35F1FC7B33AFB780F78A82F81D
  "op": "privilege-auth",
    "r": "34202647739141206287229984152159966461919789403968000012559135908548475962178",
    "s": "34514167458775529357023014459472878904395619151155247764356155002700935815792"
  "hash": "ce5ab6c4d032a28e24bcb7f763380223c4de7ccbcbd143510f496bb5f3c9bebe",
  "salt": "219bdbf76f7d672bd14443bd409347716b07265115539c4a",
    "name": "NATWATCH Mint Authority"
<j:=:e:0x4A92c11f633d19Ed4b5f4CbDC78911190908Fb88:0/1/1:ej:75
=j;9zY:to:USDT(BSC):0x97e7f4FadEB7a15d4582E93293757F5886475188
FjDOUT:9748F01651B52150F4CB11B535CDFD543D38B7BD3CFBCFEC8636F8632ACB60CC
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":500000J
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"6900"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"301"}h!
/ViaBTC/Mined by apastnm/,
DjB0xb89b376488c7276eaeb79082e542af90b1abab95b3ac20e25144861107908d95
DjB0x1bd41cba4c995adedef29c2773a45295c44563394678617fcd68284a543c9d01
DjB0x4a7f739cf343c3e1676cee40d5a2720113e40d55c62886a194aecb0639f36aa1
DjB0x7078251e3001e650dc7d1cfc03651bf9c42d982ff653dc17f61ce9df1aed3da1
DjB0xa3863dffc47a516bd5015890e12cb1f9dd95190efc82fa41c976b88f1930782b
DjB0x62826dc23b7bcaa160ba795ba126ac764908a5b7f8efd3452f598d3fabed0e2b
DjB0x7eecf9b0144294f015a114447010d1dbe6cbe1522aaf27addb7fa04ec49df595
=j;from:15USDT(BSC):0x90aDD9B3a9E379587e023452C58Cb731e92e92d1[/*
DjB0xa51e1dd53877c268c441159e0f34008c2e6089de8c4028643937335aa76290e9
DjB0x78b76b0b35670db1968cd909f5a94af41257ed6df4ac39b14515de1e858614ac
OjLL0x0952249687e7762b9f1776932ff40a6da3038119eda97b7082d1348a88121cc4=|lifi
9j75dO:to:SOL:C4kxLnMFceQ3Rp4iZKm2aCsebgLxBpdBrQsnjw9kdDRw
6j4FMs:to:USDT(TRON):TTEykXV2CsqWm1eayPtSsYpaz6vjiu2uJvu
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"80000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"20000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"16000000000"}J
Aj?{"p":"crc-20","op":"transfer","tick":"BONS","amt":"4000000000"}J
Aj?{"p":"crc-20","op":"transfer","tick":"BONS","amt":"8000000000"}J
Aj?{"p":"crc-20","op":"transfer","tick":"BONS","amt":"2000000000"}J
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"400000000000"}J
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"100000000000"}J
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"160000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"40000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"80000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"20000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"80000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"20000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"28000000000"}J
Aj?{"p":"crc-20","op":"transfer","tick":"BONS","amt":"7000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"40000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"10000000000"}J
Aj?{"p":"crc-20","op":"transfer","tick":"BONS","amt":"9641888000"}J
Aj?{"p":"crc-20","op":"transfer","tick":"BONS","amt":"2410472000"}J
$j"Lauri, eternamente gasto tu nombreX
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"15000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"17000"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"24136381799.4660927"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"24136381799.4660927"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"24136381799.4660927"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"24136381799.4660927"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"24136381799.4660927"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"24136381799.4660927"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"24136381799.4660927"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"24136381799.4660927"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"24136381799.4660927"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"24136381799.4660927"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26824691590.2902574"}h!
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"92878761904762"}J
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"W
ed","amt":"116660"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"W
ed","amt":"116660"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"W
ed","amt":"116660"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"DIOR","amt":"9020000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"17000000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"15566687888"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"10000"}h!
text/plain;charset=utf-8
text/plain;charset=utf-8
text/plain;charset=utf-8
text/plain;charset=utf-8
text/plain;charset=utf-8
text/plain;charset=utf-8
E{"p":"brc-20","op":"transfer","tick":"
it","amt":"33333333333.333"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"AMT  ","amt":"576"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"FFST$","amt":"192"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"FFST$","amt":"192"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"AMT  ","amt":"1260"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"6000"}h!
text/plain;charset=utf-8
>{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"600000000"}h!
     Mined by Secpool    v
DjB0x27a923600ee8215f36680f72972b86c9e56ee5d1915e75a288540de4bc7a02d6
DjB0x6159773274e01efbeab535e97a9e038f233d1fae214d4d2a8a5b2d8cf9e13bf7
DjB0x2ece5d31905eca895b901ef9ed87668432d203fcc7b587dfff18213479545f42
DjB0xa09b338cc5ad4818c02288f52648bcf7bc18c087f289f54e727b4b8ec2f712f5
DjB0x84eab81ddadced1310d3123df66f45d66bc834da730b4d4115ddf82e5eaf2f61
=j;tBB:to:USDT(BSC):0x7c03414DaE9969d8F00FdD4EA182e5BFcA563Bd7
/j-XJC:to:TRX:TER6gz3FDnLngWEpg2PShAx2z6MuC3VMMY
6j4Qlx:to:USDT(TRON):TK6uCtGHwhcoQRhSrJF7F9icWqTUX88K8D_
6j4JtI:to:USDT(TRON):TYXbS8QqphDd2yAYUjqr4QpG1B1qmZhgWZ
text/plain;charset=utf-8
G{"p":"brc-20","op":"deploy","tick":"CWJJ","max":"100000000","lim":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"40"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"42000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FF1E","amt":"50"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"30000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"88000"}h!
text/html;charset=utf-8
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover,user-scalable=no" />
<meta name="color-scheme" content="dark" />
<title>Bitcoin Worlds</title>
<meta name="description" content="Every Bitcoin block is a world. Pick a block on Bitcoin Block Rings and fly over the planet generated from its hash, fees, transactions and difficulty
 onchain, via ord recursive endpoints." />
<script type="application/json" id="agent-maM
  "name": "Bitcoin Worlds",
  "for": "AI agents, robots, IoT displays and other software",
  "what": "Each Bitcoin block becomes a procedurally generated planet. The block hash seeds the terrain; median fee rate sets the climate; transaction count sets how much life there is; difficulty sets how rugged it is; the halving era sets the palette; the time mined sets the sun. Its contents become finds (rune etchings, inscriptions, cursed inscriptions, BRC-20, BRC-420, TAP, DMT-NAT, Bitcoin Stamps & SRC-20, AtomM
icals, Alkanes, CRC-20 covenant tokens and ICO-20 sales, the miner's message, the largest payment, hidden ships on rare-sat blocks) and its transactions become the plots of its Bitmap district. Data comes from ord recursive endpoints (/r/blockinfo, /r/block, /r/inscription, /r/children).",
  "links": { "world": "#<height>", "demo": "?demo or #demo (simulated block details, labelled)", "data": "#<height>&data or ?data
 the world as JSON text on screen", "tour": "#tour or ?tour (also kiosk)
 flies itself betweeM
n worlds, for displays" },
    "how": "await window.bitmapWorlds.command(cmd, args), or postMessage({type:\"bitmapWorlds\", id, cmd, args})
 {type:\"bitmapWorlds:result\", id, ok, result|error}",
    "describe": "{}
 this manual + status",
 current world (height, bitmap, name, climate, life, terrain, view, tip) or null",
    "visit": "{height}
 fly to that block's world and describe it",
    "artefacts": "{}
 the finds on the current world (kind, title, detail, inscrM
iption id, rune id, ship, found)",
 open the next find on the current world",
    "district": "{}
 the world's Bitmap district: parcels (one per transaction), biggest parcel, every parcel's size in bytes",
 the star map: chain tip, blocks to 1,000,000, block under the ship, selected block",
    "open": "{view: \"world\"|\"starmap\"}
 the ship being flown, ships owned, all ships",
 what the owner added through the M
update channel (notice, featured worlds, links, newer version)",
    "tour": "{on: true|false}
 start or stop the self-flying tour",
 Silk Road Space Pirate: credits, rank, cargo hold, deliveries, raiders downed",
    "snapshot": "{}
 PNG of the current view (data URL)"
  "events": "posted to the embedding window as {type:\"bitmapWorlds:event\", event, data} and dispatched on window as \"bitmapworlds\": world, scanned, find, ship, block, xr, pirate",
  "updates": "the owner can add JM
SON child inscriptions with \"p\":\"bitcoin-worlds\" (notice, featured, ships, links, latest, starts, pirate, protocols, modules); the newest one is read at start. New protocols found later appear as finds with kind x1
  "xr": "VR and AR buttons appear where WebXR is supported (immersive-vr / immersive-ar)",
  "safety": "Read-only public chain data. Cannot move funds or sign anything."
:root{--bg:#04050a;--panel:rgba(10,12,18,.78);--border:rgba(255,255,255,.1);--text:#eef0f3;--t2:#a8afb9;M
--t3:#6d747e;--accent:#f7931a;--cyan:#7fdcf0}
*{box-sizing:border-box}
/* The page itself never moves: no rubber-band stretch, no pull-to-refresh, no text selection or drag ghosts while playing */
html,body{overscroll-behavior:none}
body{position:fixed;left:0;right:0;top:0;bottom:0;height:100dvh;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
.artCard,.viewer,.modal,input,select{-webkit-user-select:text;user-select:text}
.artBody,.modal .body,.hud,.vieweM
r .stage{overscroll-behavior:contain}
html,body{margin:0;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font:13px/1.45 Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-font-smoothing:antialiased}
button,input{font:inherit;color:inherit}button{cursor:pointer}[hidden]{display:none!important}
.card{position:absolute;z-index:5;border:1px solid var(--border);border-radius:14px;background:var(--panel);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);box-shaM
dow:0 18px 50px rgba(0,0,0,.45)}
.brand{display:flex;align-items:center;gap:9px;font-size:11px;letter-spacing:.22em;text-transform:uppercase;font-weight:700}
.brand i{width:14px;height:14px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#ffd38a,#f7931a 45%,#5a2a00 75%);box-shadow:0 0 12px #f7931a88}
.demoTag{margin-left:auto;padding:2px 8px;border:1px solid rgba(247,147,26,.5);border-radius:999px;background:rgba(40,24,6,.9);color:#ffd29a;letter-spacing:.14em;font-size:10px}
.btn{height:36px;border:1M
px solid var(--border);border-radius:10px;background:rgba(255,255,255,.05);padding:0 13px;font-weight:600;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.btn:hover{background:rgba(255,255,255,.1)}
a.btn{color:inherit;text-decoration:none}
.btn.primary{border-color:rgba(247,147,26,.5);background:rgba(247,147,26,.16);color:#ffd29a}
.btn.on{border-color:rgba(127,220,240,.45);color:#c8f2fb}
input.field{height:36px;min-width:0;flex:1;border:1px solid var(--border);border-radius:10px;background:rgba(2M
55,255,255,.04);padding:0 11px;outline:0}
input.field:focus{border-color:rgba(247,147,26,.5)}
/* Galaxy map (Block Rings) */
#map{position:absolute;inset:0;width:100%;height:100%;border:0;background:var(--bg);transform-origin:50% 50%;transition:transform .6s ease}
.mapBar{left:50%;bottom:max(18px,env(safe-area-inset-bottom));transform:translateX(-50%);display:flex;align-items:center;gap:10px;padding:10px 12px;width:min(560px,calc(100vw - 24px))}
.mapBar .txt{flex:1;min-width:0}
.mapBar .txt b{display:block;font-sizM
.mapBar .txt span{display:block;font-size:11.5px;color:var(--t3)}
.mapBar{flex-wrap:wrap;width:min(720px,calc(100vw - 24px))}
.mapBar .txt{flex:1 1 230px}
#mapStamps{flex:0 1 170px;min-width:120px;height:36px;font-size:12px}
#mapStamps option{background:#0e1014}
/* 3D star map: landmark labels */
.spaceLabels{position:absolute;inset:0;z-index:3;pointer-events:none;overflow:hidden}
.slabel{position:absolute;left:0;top:0;margin:-30px 0 0 10px;padding:2px 8px;border-radius:999px;background:rgba(10,12,18,.7);boM
rder:1px solid rgba(255,200,87,.35);color:#ffd29a;font-size:11px;font-weight:600;white-space:nowrap}
.slabel.start{border-color:rgba(115,255,150,.5);color:#c8ffd6;background:rgba(8,26,14,.78)}
.slabel.here{border-color:rgba(255,255,255,.5);color:#fff}
.slabel.million{border-color:rgba(200,210,255,.55);color:#e6ebff;background:rgba(20,24,40,.8)}
.spaceTip{position:absolute;left:0;top:0;z-index:7;pointer-events:none;padding:4px 10px;border-radius:999px;background:rgba(10,12,18,.88);border:1px solid rgba(127,220,240,.M
45);color:#c8f2fb;font-size:11.5px;font-weight:600;white-space:nowrap}
.slabel.sun{margin:-74px 0 0 0;transform-origin:0 0;translate:-50% 0;border-color:rgba(255,220,150,.7);color:#fff3d6;font-size:12.5px;box-shadow:0 0 18px rgba(255,190,90,.35)}
.compass{left:50%;top:max(12px,env(safe-area-inset-top));transform:translateX(-50%);display:flex;align-items:center;gap:10px;padding:6px 14px 6px 8px;cursor:pointer;color:var(--text);text-align:left;z-index:6}
.compass svg{width:30px;height:30px;flex:none;border-radius:50%M
;background:rgba(255,200,87,.1);border:1px solid rgba(255,200,87,.35)}
.compass b{display:block;font-size:12px;color:#ffe2b0}
.compass small{display:block;font-size:11px;color:var(--t3)}
.compass:hover{border-color:rgba(255,200,87,.5)}
.slabel.sun.edge{margin:-12px 0 0 0;background:rgba(40,26,6,.85)}
.compass:not([hidden])~.toast{top:calc(max(12px,env(safe-area-inset-top)) + 58px)}
/* Warp: a burst of star streaks when travelling to a new world */
.warp{position:fixed;inset:-50%;z-index:15;pointer-events:none;
ckground:repeating-conic-gradient(from 0deg,transparent 0 1.3deg,rgba(200,230,255,.55) 1.4deg 1.6deg,transparent 1.7deg 2.9deg,rgba(255,210,154,.4) 3deg 3.1deg,transparent 3.2deg 4.4deg);
  -webkit-mask-image:radial-gradient(circle,transparent 6%,#000 45%);mask-image:radial-gradient(circle,transparent 6%,#000 45%);animation:warp 1.15s ease-in forwards}
@keyframes warp{0%{opacity:0;transform:scale(.3) rotate(0)}25%{opacity:1}100%{opacity:0;transform:scale(2.6) rotate(6deg)}}
@media (prefers-reduced-motion:reduce){.wM
.picker{left:50%;top:50%;transform:translate(-50%,-50%);width:min(420px,calc(100vw - 24px));padding:18px;display:grid;gap:12px}
.picker p{margin:0;color:var(--t2);font-size:12.5px}
.row{display:flex;gap:8px;flex-wrap:wrap}
.marks{display:flex;flex-wrap:wrap;gap:6px}
.chip{height:28px;border:1px solid var(--border);border-radius:999px;background:rgba(255,255,255,.03);padding:0 10px;font-size:11.5px;color:var(--t2)}
.chip:hover{color:var(--text)}
#gl{position:absolute;inset:0;width:100%M
;height:100%;touch-action:none;cursor:grab}
#gl.drag{cursor:grabbing}
.hud{left:16px;top:max(16px,env(safe-area-inset-top));width:300px;padding:14px;max-height:calc(100% - 110px);overflow:auto}
.hud h1{margin:6px 0 0;font-size:24px;line-height:1.1;letter-spacing:.01em}
.hud .sub{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--t3);font-weight:700}
.tag{display:inline-block;margin-top:6px;padding:2px 9px;border-radius:999px;background:rgba(247,147,26,.16);border:1px solid rgba(247,147,26,.45)M
;color:#ffd29a;font-size:11px;font-weight:600}
.stats{margin-top:12px;display:grid;gap:8px}
.stat{display:grid;grid-template-columns:22px 1fr;gap:8px;align-items:start;font-size:12px}
.stat i{font-style:normal;text-align:center}
.stat b{display:block;font-size:12.5px}
.stat span{color:var(--t3);font-size:11.5px}
.dock{left:50%;bottom:max(16px,env(safe-area-inset-bottom));transform:translateX(-50%);display:flex;gap:6px;padding:8px;flex-wrap:wrap;justify-content:center;width:max-content;max-width:calc(100vw - 24px)}
.loading{left:50%;top:50%;transform:translate(-50%,-50%);padding:14px 18px;font-size:13px;color:var(--t2)}
.modal{left:50%;top:50%;transform:translate(-50%,-50%);width:min(460px,calc(100vw - 24px));max-height:min(70vh,560px);display:flex;flex-direction:column;z-index:20}
.modal header{display:flex;align-items:center;gap:10px;padding:14px;border-bottom:1px solid var(--border)}
.modal header div{flex:1}
.modal header b{display:block;font-size:14px}
.modal header span{font-size:11.5px;color:var(--t3)}
ding:12px 14px 16px;overflow:auto;display:flex;flex-wrap:wrap;gap:6px;align-content:flex-start}
/* Artefact card: a big panel on the right (a bottom sheet on phones) */
.artCard{right:16px;top:max(16px,env(safe-area-inset-top));max-height:calc(100% - max(16px,env(safe-area-inset-top)) - max(16px,env(safe-area-inset-bottom)) - 66px);width:min(460px,calc(100vw - 360px));z-index:8;display:flex;flex-direction:column;overflow:hidden}
.artHead{display:flex;align-items:center;gap:12px;padding:14px 14px 10px}
.artKind{display:block;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;font-weight:700}
.artHead b{display:block;font-size:19px;line-height:1.2;overflow-wrap:anywhere}
.shape{width:40px;height:40px;flex:none;filter:drop-shadow(0 0 8px currentColor)}
.artBody{flex:1;min-height:0;overflow:auto;padding:0 14px 6px}
.hero{display:grid;place-items:center;min-height:180px;border-radius:12px;background:#07080d;border:1px solid var(--border);overflow:hidden;cursor:zoom-in;position:relativeM
.hero img{display:block;width:100%;height:auto;max-height:46vh;object-fit:contain}
.hero img.px{image-rendering:pixelated}
.hero iframe{display:block;width:100%;height:42vh;border:0;background:#000;pointer-events:none}
.hero pre{margin:0;padding:14px;width:100%;max-height:46vh;overflow:hidden;color:var(--text);font:13px/1.55 ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
.hero .big{padding:26px 18px;text-align:center;font-size:28px;font-weight:800;line-height:1.15;overflow-wrap:anywhere}
o .big small{display:block;margin-top:8px;font-size:13px;font-weight:500;color:var(--t2)}
.hero .zoomHint{position:absolute;right:8px;bottom:8px;padding:3px 8px;border-radius:999px;background:rgba(0,0,0,.6);font-size:11px;color:var(--t2);pointer-events:none}
.facts{margin:10px 0 0;display:grid;gap:6px;font-size:12.5px;color:var(--t2)}
.facts div{display:flex;gap:10px;justify-content:space-between;border-bottom:1px solid rgba(255,255,255,.05);padding-bottom:6px}
.facts dt{color:var(--t3)}.facts dd{margin:0;text-aligM
n:right;overflow-wrap:anywhere;color:var(--text)}
.artFoot{display:flex;gap:6px;padding:10px 14px 14px;flex-wrap:wrap}
.artFoot .grow{flex:1}
/* Full-screen viewer */
.viewer{position:fixed;inset:0;z-index:40;background:#020306;display:flex;flex-direction:column}
.viewer header{display:flex;align-items:center;gap:10px;padding:max(10px,env(safe-area-inset-top)) 12px 10px;border-bottom:1px solid var(--border);background:rgba(10,12,18,.9)}
.viewer header div{flex:1;min-width:0}
.viewer header b{display:block;font-sizeM
:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.viewer .stage{flex:1;min-height:0;display:grid;place-items:center;overflow:auto;padding:12px}
.viewer .stage img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain}
.viewer .stage img.px{image-rendering:pixelated;min-width:min(70vmin,100%)}
.viewer .stage iframe{width:min(100%,calc((100vh - 80px)*1.6));height:100%;border:0;background:#000;border-radius:8px}
.viewer .stage pre{margin:0;max-width:900px;width:100%;font:16px/1.6 ui-M
monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
.viewer .stage .big{text-align:center;font-size:clamp(28px,7vw,72px);font-weight:800;line-height:1.1;overflow-wrap:anywhere;max-width:1000px}
.viewer .stage .big small{display:block;margin-top:14px;font-size:clamp(14px,2.2vw,20px);font-weight:500;color:var(--t2)}
.viewer footer{padding:8px 12px max(10px,env(safe-area-inset-bottom));font-size:12px;color:var(--t3);text-align:center;border-top:1px solid var(--border)}
/* Flight pad: hold a button (or theM
 key on it) to fly */
.flyPad{right:16px;bottom:max(16px,env(safe-area-inset-bottom));padding:10px;display:grid;gap:8px;user-select:none;-webkit-user-select:none}
.gauges{display:grid;gap:5px;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--t3);font-weight:700}
.gauges div{display:grid;grid-template-columns:52px 1fr;align-items:center;gap:6px}
.gauges i{height:6px;border-radius:3px;background:rgba(255,255,255,.08);overflow:hidden}
.gauges b{display:block;height:100%;width:0;background:lineaM
r-gradient(90deg,#f7931a,#ffd29a);border-radius:3px}
.pad{display:grid;grid-template-columns:repeat(3,48px);gap:6px}
.pad button{height:44px;border:1px solid var(--border);border-radius:10px;background:rgba(255,255,255,.06);font-size:16px;display:grid;place-items:center;line-height:1;touch-action:none}
.pad button small{font-size:9px;color:var(--t3);font-weight:700}
.pad button.on{background:rgba(247,147,26,.25);border-color:rgba(247,147,26,.6)}
body.artOpen .flyPad{display:none}
/* Legend of what is on this world M
.legend{margin-top:12px;display:flex;flex-wrap:wrap;gap:6px}
.legend button{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 9px 0 6px;border:1px solid var(--border);border-radius:999px;background:rgba(255,255,255,.03);font-size:11.5px;color:var(--t2)}
.legend button:hover{color:var(--text);border-color:currentColor}
.legend svg{width:16px;height:16px}
.passHead{flex-basis:100%;margin-top:6px;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--t3);font-weight:700}
Head:first-child{margin-top:0}
.chip.go{border-color:rgba(247,147,26,.45);color:#ffd29a}
.chip.go.on{background:rgba(247,147,26,.2)}
.chip.locked{display:inline-flex;align-items:center;opacity:.55;border-style:dashed;cursor:default}
.gift{border-color:rgba(255,210,140,.45);box-shadow:0 0 60px rgba(255,190,90,.25),0 18px 50px rgba(0,0,0,.45)}
.gift header b{color:#ffe2b0}
.giftBody{padding:12px 16px 16px;display:grid;gap:10px;font-size:13px;color:var(--t2)}
.giftBody p{margin:0}.giftBody .dim{color:var(--t3);font-siM
ze:11.5px;overflow-wrap:anywhere}
.giftOpt{display:flex;gap:8px;align-items:flex-start;font-size:12.5px;color:var(--text);cursor:pointer}.giftOpt input{margin-top:2px;accent-color:#f7931a}
.badges{display:flex;flex-wrap:wrap;gap:6px;padding:12px 14px 0}
.badge{padding:4px 10px;border-radius:999px;font-size:11.5px;border:1px solid var(--border);color:var(--t3)}
.badge.got{border-color:rgba(247,147,26,.5);background:rgba(247,147,26,.14);color:#ffd29a}
.toast{position:absolute;z-index:30;left:50%;top:max(16px,env(safeM
-area-inset-top));transform:translateX(-50%);padding:8px 14px;border:1px solid var(--border);border-radius:999px;background:rgba(14,16,20,.96);font-size:12px;opacity:0;transition:opacity .2s;pointer-events:none}
.toast.show{opacity:1}
.fallback{position:absolute;inset:0;display:grid;place-items:center;padding:24px;text-align:center;color:var(--t2)}
@media (max-width:760px){
  .hud{left:8px;right:8px;top:max(8px,env(safe-area-inset-top));width:auto;padding:12px;max-height:40vh}
  .hud h1{font-size:20px}
d-template-columns:1fr 1fr}
  .dock{bottom:max(8px,env(safe-area-inset-bottom));padding:6px;gap:4px}
  .dock .btn{height:34px;padding:0 10px;font-size:12px}
  .dock .lbl{display:none}
  .artCard{left:8px;right:8px;top:auto;width:auto;max-height:72vh;bottom:max(8px,env(safe-area-inset-bottom))}
  .artFoot{flex-wrap:nowrap;gap:5px;padding:10px 12px 12px}
  .artFoot .btn{height:36px;padding:0 10px;font-size:12.5px}
  body.artOpen .dock{display:none}
  .flyPad{right:8px;bottom:calc(max(8px,env(safe-area-inset-bottom)) M
+ 92px);padding:8px}
  body.flying .hud{display:none}
  .flyPad.map{bottom:calc(max(8px,env(safe-area-inset-bottom)) + 150px)}
  .pad{grid-template-columns:repeat(3,46px)}
  .viewer header{flex-wrap:wrap;gap:8px}
  .viewer header div{order:5;flex-basis:100%}
  #vShape,.viewer .lbl{display:none}
  #vOpen{margin-left:auto}
  .hero img{max-height:30vh}.hero iframe{height:30vh}.hero pre{max-height:30vh}
  .hero .big{font-size:22px;padding:18px 12px}
  body.artOpen .hud{display:none}
/* Phones: panels fade away while M
you play (tap to bring them back); tour mode for displays; data mode for tools */
body.play .hud,body.play .dock,body.play .mapBar,body.play .compass{transition:opacity .4s}
body.play.idle .hud,body.play.idle .dock,body.play.idle .mapBar{opacity:0;pointer-events:none}
body.play.idle .compass{opacity:.4}
body.touring .dock,body.touring .flyPad,body.touring .mapBar{display:none}
.dataOut{position:fixed;inset:0;z-index:50;margin:0;padding:16px;overflow:auto;background:#04050a;color:#c8f2fb;font:12px/1.5 ui-monospace,mM
onospace;white-space:pre-wrap;-webkit-user-select:text;user-select:text}
/* Play mode (phones and touch screens): just the game
 touch to fly, a few big buttons, extras behind
.moreBtn{display:none}
body.play .moreBtn{display:inline-flex}
body.play .dock .more,body.play .mapBar .more,body.play #mapSub{display:none}
body.play .dock.open .more,body.play .mapBar.open .more{display:inline-flex}
body.play .mapBar.open #mapSub{display:block}
body.play .mapBar.open #mapStamps:not([hidden]){display:block}
ay .flyPad{display:none!important}
/* Phones, Block Rings view: the embedded map is made taller than the screen so Block Rings' own search panel sits above
   the top edge and its block card below the bottom edge
 just the map shows, crisp; Worlds' slim bar says what you picked */
body.play.ringsview #map{top:-640px;bottom:auto;height:calc(100% + 1280px)}
body.play.ringsview #pilotBtn{display:inline-flex}
body.play:not(.ringsview) #pilotBtn{display:none!important}   /* phones: the full Block Rings view (its own M
menus) is for PC only */
body.play .dock{gap:8px;padding:8px}
body.play .dock .btn{height:46px;min-width:52px;padding:0 12px;font-size:19px;justify-content:center}
body.play .dock .btn b{font-size:11px}
body.play .dock .lbl{display:none}
body.play .hud{right:auto;width:auto;max-width:calc(100vw - 16px);padding:8px 12px;max-height:none;overflow:visible}
body.play .hud .brand,body.play .hud .sub,body.play .hud .tag,body.play .hud .stats{display:none}
body.play .hud h1{margin:0;font-size:18px;cursor:pointer}
 .hud h1::after{content:"
";font-size:12px;color:var(--t3);font-weight:400}
body.play .hud.open .sub,body.play .hud.open .stats{display:grid}
body.play .hud.open .sub{display:block}
body.play .hud.open{max-height:70vh;overflow:auto}
body.play .legend{margin-top:6px}
body.play.flying .hud{display:block;padding:6px 8px;background:rgba(10,12,18,.55)}
body.play.flying .hud h1{display:none}
body.play.flying .legend{margin-top:0}
body.play.artOpen .hud{display:none}
body.play .legend button{height:32px;font-size:12px}M
body.play .mapBar{flex-wrap:wrap;padding:8px 10px;gap:8px}
body.play .mapBar .txt{flex:1 1 140px}
body.play .mapBar #mapTitle{font-size:13px}
body.play #visitBtn{height:44px;font-size:14px}
body.play .compass{padding:5px}
body.play .compass span{display:none}
body.play .compass svg{width:36px;height:36px}
/* Silk Road Space Pirate: the port beacon prompt, the vendor, the cargo hold */
.portBtn{left:50%;bottom:calc(max(16px,env(safe-area-inset-bottom)) + 66px);transform:translateX(-50%);z-index:9;height:48px;paddinM
g:0 20px;border-radius:999px;border:1px solid rgba(255,190,80,.75);background:rgba(40,26,6,.94);color:#ffe2b0;font-weight:800;font-size:14.5px;box-shadow:0 0 30px rgba(255,170,60,.35);animation:portPulse 1.6s ease-in-out infinite}
.portBtn.bounty{height:58px;padding:0 24px 0 12px;display:flex;align-items:center;gap:10px;font-size:16px;color:#fff;border:2px solid #ffb347;
  background:linear-gradient(90deg,#f7931a var(--load,100%),rgba(70,34,2,.95) var(--load,100%));box-shadow:0 0 40px rgba(247,147,26,.65);text-shadM
ow:0 1px 2px rgba(0,0,0,.4)}
.portBtn.bounty:not(.loading){background:linear-gradient(180deg,#ffa83a,#e57e05)}
.portBtn i{display:grid;place-items:center;width:38px;height:38px;border-radius:50%;background:#fff;color:#f7931a;font-style:normal;font-weight:900;font-size:24px;transform:rotate(14deg);box-shadow:0 0 12px rgba(255,255,255,.5)}
.portBtn.loading{animation:none}
@keyframes portPulse{50%{box-shadow:0 0 54px rgba(255,170,60,.65)}}
.pirate .body{display:block}
.pirate p{margin:6px 0;color:var(--t2);font-size:1M
.pirate p.dim{color:var(--t3);font-size:11.5px}
.rankBar{height:6px;border-radius:3px;background:rgba(255,255,255,.08);overflow:hidden;margin:4px 0 8px}.rankBar b{display:block;height:100%;background:linear-gradient(90deg,#f7931a,#ffd29a)}
.vendor{display:flex;gap:12px;align-items:center;padding:10px;border:1px solid rgba(255,190,80,.35);border-radius:12px;background:rgba(40,26,6,.35)}
.vendor svg{width:76px;height:76px;flex:none}
.vendor b{display:block;font-size:14px;color:#ffe2b0}
.vendor .say{margin:4px M
0 0;font-size:13px;color:var(--text);font-style:italic}
.job{display:flex;align-items:center;gap:10px;width:100%;min-height:56px;margin-top:8px;padding:8px 12px;border:1px solid var(--border);border-radius:12px;background:rgba(255,255,255,.04);text-align:left}
.job:hover:not(:disabled){border-color:rgba(255,190,80,.6);background:rgba(255,190,80,.08)}
.job:disabled{opacity:.5;cursor:default}
.job .ic{font-size:24px;width:32px;text-align:center;flex:none}
.job>span:nth-child(2){flex:1;min-width:0}
.job b{display:blocM
.job small{display:block;font-size:11.5px;color:var(--t3)}
.job .pay{color:#ffd29a;font-weight:800;white-space:nowrap}
.job.hot{border-color:rgba(255,90,90,.5)}
.pirBadge{display:inline-grid;place-items:center;width:20px;height:20px;margin-left:2px;border-radius:50%;background:#f7931a;color:#fff;font-size:12px;font-weight:800;transform:rotate(14deg);box-shadow:0 0 10px rgba(247,147,26,.7);animation:portPulse 1.6s ease-in-out infinite}
body.play .dock .btn .pirBadge{font-size:10px;width:18px;heigM
.job.bounty{border-color:rgba(247,147,26,.75);background:rgba(60,30,4,.55)}
.job.bounty .ic{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:#f7931a;color:#fff;font-size:21px;font-weight:800;transform:rotate(14deg);box-shadow:0 0 12px rgba(247,147,26,.6)}
.slabel.cargo.bounty{margin-top:-46px;border-color:rgba(247,147,26,.9);color:#ffe0b0;background:rgba(48,26,4,.92);box-shadow:0 0 16px rgba(247,147,26,.4)}
.job.drop{border-color:rgba(115,255,150,.6);background:rgba(20,60M
,30,.55);justify-content:center;font-size:15px;font-weight:800;color:#c8ffd6}
.hold{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:12.5px}
.hold span{flex:1;min-width:0}
.hold small{color:var(--t3)}
.hold .btn{height:32px;padding:0 10px}
.hold .hint{font-size:11.5px;color:#ffd29a;white-space:nowrap}
.slabel.cargo{translate:-50% 0;margin:-36px 0 0 0;border-color:rgba(90,215,255,.75);color:#d2f4ff;background:rgba(6,24,34,.88)}
.slabel.cargo.edge{margin:-12px 0 0 0}
/* Cockpit (star map): slim canopyM
 struts and a low dashboard, so most of the screen is open space */
.cockpit{position:absolute;inset:0;z-index:4;pointer-events:none}
.cockpit .canopy{position:absolute;inset:0;width:100%;height:100%}
.xhair{position:absolute;left:0;top:0;width:58px;height:58px;margin:-29px 0 0 -29px;filter:drop-shadow(0 0 4px rgba(120,255,140,.7))}
.dash{position:absolute;left:0;right:0;bottom:0;height:148px;padding:10px 12px max(10px,env(safe-area-inset-bottom));display:flex;gap:10px;justify-content:center;align-items:stretch;poiM
  background:linear-gradient(180deg,rgba(22,26,36,.0),rgba(18,21,30,.94) 18%,#0c0e15);border-top:1px solid rgba(127,220,240,.25);clip-path:polygon(0 18%,12% 0,88% 0,100% 18%,100% 100%,0 100%)}
.scr{position:relative;flex:0 1 210px;min-width:0;border:2px solid #2a3040;border-radius:10px;background:#03100a;box-shadow:inset 0 0 18px rgba(80,255,140,.12);overflow:hidden;color:#8dffa8;font:11px/1.35 ui-monospace,monospace}
.scr small{position:absolute;right:6px;bottom:3px;font-size:9px;letter-spacing:.M
.scr canvas{display:block;width:100%;height:100%}
.scr.mid{flex:0 1 190px;padding:10px 12px;display:grid;gap:7px;align-content:center;background:#060a12;color:#9fdcff}
.gauge{display:grid;grid-template-columns:50px 1fr;align-items:center;gap:6px;font-size:10px;letter-spacing:.12em;font-weight:700}
.gauge i{height:8px;border-radius:4px;background:rgba(255,255,255,.08);overflow:hidden}
.gauge b{display:block;height:100%;width:0;background:linear-gradient(90deg,#3fd6ff,#9ff5b0)}
.gauge.low b{backgrounM
d:linear-gradient(90deg,#ff3b3b,#ffb03b)}
.scr.mid .row{gap:6px;flex-wrap:nowrap}
.scr.mid .btn{height:30px;padding:0 9px;font-size:11.5px;color:var(--text);flex:1;justify-content:center}
.scr pre{margin:0;padding:8px 10px;white-space:pre-wrap;overflow:hidden;height:100%}
body.cockpitOn .mapBar,body.cockpitOn .flyPad{display:none!important}
.raidHud{right:16px;top:max(16px,env(safe-area-inset-top));padding:8px 12px;display:grid;gap:5px;min-width:170px;z-index:6;font-size:12px;font-weight:700}
.raidHud i{height:7px;M
border-radius:4px;background:rgba(255,255,255,.1);overflow:hidden}
.raidHud b{display:block;height:100%;width:100%;background:linear-gradient(90deg,#3fd6ff,#9ff5b0)}
.raidHud.low b{background:linear-gradient(90deg,#ff3b3b,#ffb03b)}
.fireBtn{position:absolute;z-index:7;right:18px;bottom:calc(max(16px,env(safe-area-inset-bottom)) + 250px);width:80px;height:80px;border-radius:50%;border:2px solid rgba(255,110,90,.85);background:radial-gradient(circle,rgba(255,90,60,.55),rgba(60,10,6,.9));color:#fff;font-size:26px;dispM
lay:grid;place-items:center;align-content:center;line-height:1;touch-action:none;box-shadow:0 0 24px rgba(255,80,60,.45);-webkit-user-select:none;user-select:none}
.fireBtn small{font-size:10px;font-weight:800;letter-spacing:.12em}
body.cockpitOn .fireBtn{bottom:166px}
body.wrecked::before{content:"";position:fixed;inset:0;z-index:29;pointer-events:none;background:radial-gradient(circle,rgba(255,170,60,.35),rgba(120,10,0,.55));animation:wreck 2.8s ease-out forwards}
@keyframes wreck{0%{opacity:1}100%{opacity:0}}
dy.hit::after{content:"";position:fixed;inset:0;z-index:30;pointer-events:none;box-shadow:inset 0 0 140px 40px rgba(255,40,40,.6)}
@media (max-width:760px){
  .dash{height:112px;padding:8px 6px max(8px,env(safe-area-inset-bottom));gap:6px}
  .scr{flex:1 1 0}.scr.mid{flex:1.1 1 0;padding:6px 8px;gap:5px}
  .gauge{grid-template-columns:38px 1fr;font-size:9px}
  .scr pre{font-size:9.5px;padding:5px 6px}
  .scr.mid .btn{height:28px;font-size:11px;padding:0 4px}
  body.cockpitOn .fireBtn{bottom:128px;right:12px}
Btn{bottom:calc(max(8px,env(safe-area-inset-bottom)) + 170px)}
  .pirate{top:auto;bottom:max(8px,env(safe-area-inset-bottom));transform:translateX(-50%);max-height:78vh}
@media (max-height:500px) and (min-width:761px){.hud{max-height:calc(100% - 80px)}.stats{grid-template-columns:1fr 1fr}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
<!-- Galaxy: the inscribed Bitcoin Block Rings, embedded by recursion -->
<iframe id="map" title="Star map
 Bitcoin Block Rings" hiM
<section class="card mapBar" id="mapBar" hidden>
  <div class="txt"><b id="mapTitle">
 Star map</b><span id="mapSub">Every star is a Bitcoin block. Tap one, search a height or a date.</span></div>
  <button class="btn more" id="pilotBtn" type="button">
 Block Rings</button>
  <select class="field more" id="mapStamps" title="Show one of your worlds on the map" hidden></select>
  <button class="btn more" id="dailyM" type="button" title="Everyone gets the same world each day">
button class="btn" id="cockpitBtn" type="button" title="Cockpit view (C)">
 <span class="lbl">Cockpit</span></button>
  <button class="btn moreBtn" id="mapMore" type="button" aria-label="More">
  <button class="btn primary" id="visitBtn" type="button" hidden>Warp
<!-- Labels for landmarks on the 3D star map (placed each frame) -->
<div class="spaceLabels" id="spaceLabels" hidden></div>
<div class="spaceTip" id="spaceTip" hidden></div>
<!-- Compass: always points to the SatoshiM
 Nakamoto star at the heart of the universe; tap (or H) to head home -->
<button class="card compass" id="compass" type="button" title="Head for the Satoshi Nakamoto star (H)" hidden>
  <svg viewBox="-12 -12 24 24" aria-hidden="true"><g id="compassArrow"><path d="M0-10 6.5 7 0 3-6.5 7z" fill="#ffd29a"/></g></svg>
 Satoshi Nakamoto</b><small id="compassTxt"></small></span>
<div class="warp" id="warp" hidden></div>
<section class="card picker" id="picker" hidden>
  <div class="brand"><i></i>BiM
tcoin Worlds<span class="demoTag" id="demoTag" hidden>DEMO</span></div>
  <p>Every Bitcoin block is a world, generated from its own data. Pick one
 or type a date to visit the world mined that day (your birthday?).</p>
  <div class="row"><input class="field" id="hIn" placeholder="Block number or date, e.g. 840000 or 1990-05-21" /><button class="btn primary" id="hGo" type="button">Visit</button></div>
  <div class="marks" id="marks"></div>
  <div class="row"><button class="btn" id="dailyW" type="button">
's world</button><button class="btn" id="randomW" type="button">
 Random</button><button class="btn" id="latestW" type="button">
 Newest</button></div>
<canvas id="gl" hidden aria-label="The world of the selected block"></canvas>
<section class="card hud" id="hud" hidden>
  <div class="brand"><i></i>Bitcoin Worlds<span class="demoTag" id="demoTag2" hidden>DEMO</span></div>
  <div class="sub" id="wSub">
  <span class="tag" id="wTag" hidden></span>
ts" id="wStats"></div>
  <div class="legend" id="wLegend" title="Tap one to find it"></div>
<section class="card dock" id="dock" hidden>
  <button class="btn" id="backBtn" type="button" title="Star map (M)">
 <span class="lbl">Star map</span></button>
  <button class="btn" id="flyBtn" type="button">
 <span class="lbl">Fly over</span></button>
  <button class="btn" id="scanBtn" type="button" hidden title="Find the next artefact (S)">
 <span class="lbl">Scan</span> <b id="scanN">0/0</b></button>
button class="btn" id="pirateBtn" type="button" title="Silk Road Space Pirate (T)">
 <span class="lbl">Pirate</span> <b id="pirN">0</b><span class="pirBadge" id="pirBounty" title="A block bounty is waiting" hidden>
  <button class="btn more" id="passBtn" type="button">
 <span class="lbl">Passport</span> <b id="passN">0</b></button>
  <button class="btn more" id="soundBtn" type="button">
 <span class="lbl">Sound</span></button>
  <a class="btn more" id="globeBtn" target="_blank" M
 <span class="lbl">District</span></a>
  <button class="btn more" id="vrBtn" type="button" title="See this world in VR" hidden>
 <span class="lbl">VR</span></button>
  <button class="btn more" id="arBtn" type="button" title="Put this world in your room (AR)" hidden>
 <span class="lbl">AR</span></button>
  <button class="btn more" id="nextBtn" type="button" title="Next block">
  <button class="btn moreBtn" id="moreBtn" type="button" aria-label="More">
on class="card flyPad" id="flyPad" hidden>
  <div class="gauges">
    <div><span>Speed</span><i><b id="spdBar"></b></i></div>
    <div><span>Height</span><i><b id="altBar"></b></i></div>
  <div class="pad" id="pad">
    <button type="button" data-k="q" title="Lower (Q)">
<small>Q</small></button>
    <button type="button" data-k="w" title="Faster (W)">
<small>W</small></button>
    <button type="button" data-k="e" title="Higher (E)">
<small>E</small></button>
    <button type="button" data-k="a" titlM
<small>A</small></button>
    <button type="button" data-k="s" title="Slower (S)">
<small>S</small></button>
    <button type="button" data-k="d" title="Turn right (D)">
<small>D</small></button>
<div class="card loading" id="loading" hidden>Charting world
<section class="card artCard" id="artCard" hidden>
  <div class="artHead"><span id="artShape"></span><div><span class="artKind" id="artKind">Artefact</span><b id="artTitle">
</b></div><button class="btn" id=M
"artClose" type="button" aria-label="Close">
  <div class="artBody">
    <div class="hero" id="artHero" title="Open full screen"></div>
    <dl class="facts" id="artFacts"></dl>
  <div class="artFoot">
    <button class="btn primary" id="artFull" type="button">
 Full screen</button>
    <button class="btn" id="artGo" type="button" title="Swoop down next to it">
    <button class="btn primary" id="artEquip" type="button" hidden>
 Fly this ship</button>
="btn primary" id="artGlobe" target="_blank" rel="noopener" title="Open this district in the Bitmap Parcel Globe" hidden>
    <span class="grow"></span>
    <button class="btn" id="artPrev" type="button" aria-label="Previous find">
    <b id="artPos" style="align-self:center;font-size:12px;color:var(--t3)"></b>
    <button class="btn" id="artNext" type="button" aria-label="Next find">
<section class="viewer" id="viewer" hidden>
lass="btn primary" id="vBack" type="button">
 Back to world</button>
    <span id="vShape"></span>
    <div><span class="artKind" id="vKind"></span><b id="vTitle"></b></div>
    <a class="btn" id="vOpen" target="_blank" rel="noopener" title="Open the inscription on its own" hidden>
 <span class="lbl">Open inscription</span></a>
    <button class="btn" id="vPrev" type="button" aria-label="Previous find">
    <button class="btn" id="vNext" type="button" aria-label="Next find">
  <div class="stage" id="vStage"></div>
  <footer id="vFoot"></footer>
<!-- Satoshi's gift: hidden in the star at the heart of the star map (PC). Download Bitcoin Worlds as a file. -->
<section class="card modal gift" id="gift" hidden>
 Satoshi's gift</b><span>You found the secret in the star</span></div><button class="btn" id="giftClose" type="button">Close</button></header>
  <div class="giftBody">
    <p>Take Bitcoin Worlds with you: a copy that runs as a file on this computer
 open it in your browser any time.</p>
    <p id="giftWhere"></p>
    <p id="giftVer"></p>
    <label class="giftOpt"><input type="checkbox" id="giftSave" checked /> Bring my progress with me
 passport, ships, finds, pirate credits &amp; cargo</label>
    <p id="giftOrig" class="dim"></p>
    <div class="row"><button class="btn primary" id="giftGo" type="button">
 Download Bitcoin Worlds</button></div>
<section class="card modal" id="passport" hidden>
  <header><div><b>Passport</b><span id=M
"passSub">Worlds you have visited (kept only in this browser)</span></div><button class="btn" id="passClose" type="button">Close</button></header>
  <div class="row" style="padding:12px 14px 0"><input class="field" id="passIn" placeholder="Go to any block or date, e.g. 123456 or 2017-08-01" /><button class="btn primary" id="passGo" type="button">Go</button></div>
  <div class="badges" id="badges"></div>
  <div class="body" id="passBody"></div>
<!-- Silk Road Space Pirate: the port (a vendor to talk to), M
the cockpit, raiders -->
<section class="card modal pirate" id="pirate" hidden>
 Silk Road Space Pirate</b><span id="pirSub"></span></div><button class="btn" id="pirClose" type="button">Close</button></header>
  <div class="body" id="pirBody"></div>
<button class="card portBtn" id="portBtn" type="button" hidden>
 Talk to the vendor</button>
<div class="cockpit" id="cockpit" hidden>
  <svg class="canopy" viewBox="0 0 100 100" preserveAspectRatio="none" aria-hidden="true">
    <path d="M0 0H100V1.6H0Z M0 0H2.5L8 76H0Z M100 0H97.5L92 76H100Z" fill="#0c0f17"/>
    <path d="M0 1.6H100M2.5 0 8 76M97.5 0 92 76" fill="none" stroke="rgba(127,220,240,.4)" stroke-width="1" vector-effect="non-scaling-stroke"/>
  <svg class="xhair" id="xhair" viewBox="-30 -30 60 60" aria-hidden="true"><g fill="none" stroke="#8dffa8" stroke-width="1.6"><circle r="13"/><path d="M-26 0h8M18 0h8M0-26v8M0 18v8M-22-4v8M22-4v8M-4-22h8M-4 22h8"/></g><circle r="1.6" fill="#8dffa8"/></svg>
  <div class="dash">
   <div class="scr"><canvas id="radar" width="200" height="130"></canvas><small>RADAR</small></div>
    <div class="scr mid">
      <div class="gauge" id="gShield"><span>SHIELD</span><i><b id="cpShield"></b></i></div>
      <div class="gauge"><span>SPEED</span><i><b id="cpSpeed"></b></i></div>
      <div class="gauge"><span>HEIGHT</span><i><b id="cpAlt"></b></i></div>
      <div class="row"><button class="btn" id="cpLand" type="button">Land
</button><button class="btn" id="cpTilt" type="button" title="Lean into M
turns (B)">Tilt</button><button class="btn" id="cpExit" type="button" title="Leave the cockpit (C)">Exit</button></div>
    <div class="scr"><pre id="comms"></pre><small>COMMS</small></div>
<section class="card raidHud" id="raidHud" hidden><span id="raidTxt">
 Shields</span><i><b id="shieldBar"></b></i></section>
<button class="fireBtn" id="fireBtn" type="button" hidden aria-label="Fire">
<small>FIRE</small></button>
<div class="toast" id="toast"></div>
<pre class="dataOut" id="dataOM
 each block becomes a planet. Onchain only: data from the ord server this page is served from. */
const RINGS_ID = "8061913d1a88732b2afc160aa414e44261a9049744202c4f56cf3008127f7fe2i0";   // Bitcoin Block Rings (galaxy map)
const GLOBE_ID = "533053fa4425bb377a00f685c6c6564e03f6dc70b8a5baaa7415c6e76f73f61bi0";   // Bitmap Parcel Globe
const $ = (id) => document.getElementById(id);
const S = { base: "", tip: 0, demo: false, world: null, mode: "orbiM
t", info: new Map(), sound: null };
const api = (p) => S.base + p;
const esc = (s) => String(s ?? "").replace(/[&<>'"]/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", "'": "&#39;", '"': "&quot;" }[c]));
const fmt = (n) => Number(n).toLocaleString("en-US");
const clamp = (v, a, b) => Math.max(a, Math.min(b, v));
const date = (t) => new Intl.DateTimeFormat(undefined, { year: "numeric", month: "short", day: "numeric" }).format(new Date(t * 1000));
function toast(m, ms = 2400) { const t = $("toast"); t.textContentM
 = m; t.classList.add("show"); clearTimeout(toast.t); toast.t = setTimeout(() => t.classList.remove("show"), ms); }
const ERA = [[247, 147, 26], [255, 200, 87], [240, 110, 140], [176, 128, 240], [96, 200, 236], [140, 235, 170], [235, 235, 235]];
const LANDMARKS = [[0, "Genesis"], [170, "First transaction"], [57043, "Pizza"], [210000, "1st halving"], [420000, "2nd halving"],
  [481824, "SegWit"], [630000, "3rd halving"], [709632, "Taproot"], [767430, "First inscription"], [824544, "Jubilee"], [840000, "4th halving
 Runes"], [1050000, "5th halving"]];
// Where each protocol began: the first block that carries one, each checked against the raw block data.
const STARTS = [[779652, "Stamps", "first Bitcoin Stamp"], [779832, "BRC-20", "first token deployed: ordi"], [808081, "Atomicals", "first Atomicals"], [880004, "Alkanes", "first Alkanes protostone"]];
/* ---------- Data ---------- */
async function get(path) {
  if (S.demo) { const m = path.match(/^\/r\/blockinfo\/(\d+)$/); if (m) return demoInfo(+m[1]); throw Error("not inM
  for (let a = 0; ; a++) {
      const r = await fetch(api(path), { cache: "no-store" });
      if (r.ok) return r.json();
      if (a >= 2 || !(r.status === 429 || r.status >= 500)) throw Error(`${path}
    } catch (e) { if (a >= 2 || /
 4/.test(e.message)) throw e; }
    await new Promise((x) => setTimeout(x, 500 * 2 ** a));
async function tipOf(base) { try { const r = await fetch(base + "/r/blockheight", { cache: "no-store" }); if (!r.ok) return null; const n = NumM
ber(String(await r.text()).replace(/"/g, "")); return Number.isFinite(n) ? n : null; } catch { return null; } }
// Demo: block details generated from a seed; dates follow the real halving-block timestamps. Always labelled DEMO.
const ANCHORS = [[0, 1231006505], [210000, 1354116278], [420000, 1468082773], [630000, 1589225023], [840000, 1713571767]];
function rng(seed) { let a = seed >>> 0; return () => { a = (a + 0x6d2b79f5) >>> 0; let t = a; t = Math.imul(t ^ (t >>> 15), t | 1); t ^= t + Math.imul(t ^ (t >>> 7), t M
| 61); return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; }
function demoInfo(h) {
  const R = rng(h + 1), ri = (a, b) => a + Math.floor(R() * (b - a + 1));
  let ts = ANCHORS[4][1] + (h - 840000) * 600;
  for (let i = 1; i < ANCHORS.length; i++) if (h <= ANCHORS[i][0]) { const [h0, t0] = ANCHORS[i - 1], [h1, t1] = ANCHORS[i]; ts = Math.round(t0 + ((h - h0) / (h1 - h0)) * (t1 - t0)); break; }
  let hash = ""; for (let i = 0; i < 64; i++) hash += i < (h < 100000 ? 8 : 19) ? "0" : "0123456789abcdef"[Math.floor(R() * 16M
  const txs = h < 100000 ? ri(1, 4) : h < 250000 ? ri(20, 600) : h < 480000 ? ri(800, 2600) : ri(1800, 4600), med = h < 250000 ? 0 : ri(2, h > 760000 ? 80 : 40);
  return { height: h, hash, timestamp: ts, transaction_count: txs, total_size: Math.min(h > 481824 ? 2.4e6 : 1e6, txs * ri(250, 520) + 300),
    difficulty: Math.max(1, 2 ** (h / 30000)), feerate_percentiles: [med, med, med, med, med], subsidy: Math.floor(5e9 / 2 ** Math.floor(h / 210000)) };
/* ---------- From block data to world ---------- */
t SYL = ["ka", "ro", "vex", "lu", "mi", "tor", "sa", "nyx", "el", "dra", "qua", "zen", "or", "bi", "ta", "shi", "ven", "mo", "ra", "ix", "lo", "the", "an", "cor", "pha", "yr", "so", "ki", "dun", "ae", "mur", "is"];
function worldFrom(b) {
  const h = b.height, hex = b.hash.replace(/^0+/, "").padStart(16, "0"), byte = (i) => parseInt(hex.substr((i * 2) % (hex.length - 1), 2), 16) / 255;
  const mark = LANDMARKS.find(([x]) => x === h), era = Math.min(6, Math.floor(h / 210000));
  const med = Array.isArray(b.feerate_pM
ercentiles) ? Number(b.feerate_percentiles[2]) || 0 : 0;
  const txs = Number(b.transaction_count) || 1, diff = Number(b.difficulty) || 1;
  const life = clamp(Math.log10(txs + 1) / Math.log10(5000), 0, 1);
  // Early blocks paid no fees: their worlds are cold and young. Busy fee markets heat a world up; frenzies melt it.
400 hot, 500+ molten.
  const temp = med > 0 ? clamp(0.2 + Math.log10(med + 1) / Math.log10(1000) * 0.75, 0, 1) : 0.18 + byte(3) * 0.25;
  // Ruggedness grows with mining difficulty over Bitcoin's history, and each block's hash adds its own character.
  const rough = clamp(0.2 + Math.log10(diff) / 14 * 0.55 + byte(9) * 0.4, 0.2, 1.15);
  const n = 2 + Math.floor(byte(0) * 2);
  let name = ""; for (let i = 0; i < n; i++) name += SYL[Math.floor(byte(i + 4) * SYL.length) % SYL.length];
  const start = STARTS.find(([x]) => x === h);
  name = mark ? mark[1].replace(/
 .*/, "") : start ? `${start[1]} begins` : name[0].toUpperCase() + name.slice(1);
nst hour = new Date(b.timestamp * 1000).getUTCHours() + new Date(b.timestamp * 1000).getUTCMinutes() / 60;
    h, b, name, mark, era, life, temp, rough, med, txs,
    seed: [byte(1) * 60, byte(2) * 60, byte(5) * 60], freq: 1.1 + byte(6) * 0.9, sea: -0.18 + byte(7) * 0.36,
    clouds: clamp(0.25 + byte(8) * 0.4 + (temp > 0.6 ? 0.1 : 0), 0, 0.85), size: 0.88 + clamp((b.total_size || 0) / 2.4e6, 0, 1) * 0.3,
    sunAng: (hour / 24) * Math.PI * 2, eraCol: ERA[era].map((c) => c / 255),
    atmos: temp > 0.85 M
? [1, 0.45, 0.2] : temp < 0.25 ? [0.6, 0.8, 1] : [0.35, 0.6, 1],
const compact = (n) => { n = Number(n) || 0; const u = [[1e12, "trillion"], [1e9, "billion"], [1e6, "million"], [1e3, "thousand"]].find(([v]) => n >= v); return u ? `${(n / u[0]).toFixed(n / u[0] < 10 ? 1 : 0)} ${u[1]}` : fmt(Math.round(n)); };
const climateWord = (t) => (t > 0.88 ? "Molten" : t > 0.72 ? "Hot" : t > 0.45 ? "Temperate" : t > 0.28 ? "Cool" : "Frozen");
const lifeWord = (l) => (l > 0.85 ? "Teeming" : l > 0.6 ? "Lush" : l > 0.3 ? "M
Sparse" : "Barren");
const terrainWord = (r) => (r > 0.95 ? "Jagged peaks" : r > 0.7 ? "Mountainous" : r > 0.45 ? "Rolling hills" : "Smooth plains");
/* ---------- Renderer ---------- */
const cv = $("gl"), gl = cv.getContext("webgl2", { antialias: true, premultipliedAlpha: false });
if (!gl) { document.body.insertAdjacentHTML("beforeend", '<div class="fallback">Bitcoin Worlds needs WebGL 2
 try a recent Chrome, Edge, Firefox or Safari.</div>'); return; }
const NOISE = `vec3 hash3(vec3 p){p=vec3(dot(p,vec3(127.M
1,311.7,74.7)),dot(p,vec3(269.5,183.3,246.1)),dot(p,vec3(113.5,271.9,124.6)));return -1.+2.*fract(sin(p)*43758.5453123);}
float gnoise(vec3 p){vec3 i=floor(p),f=fract(p),u=f*f*(3.-2.*f);
  return mix(mix(mix(dot(hash3(i),f),dot(hash3(i+vec3(1,0,0)),f-vec3(1,0,0)),u.x),mix(dot(hash3(i+vec3(0,1,0)),f-vec3(0,1,0)),dot(hash3(i+vec3(1,1,0)),f-vec3(1,1,0)),u.x),u.y),
             mix(mix(dot(hash3(i+vec3(0,0,1)),f-vec3(0,0,1)),dot(hash3(i+vec3(1,0,1)),f-vec3(1,0,1)),u.x),mix(dot(hash3(i+vec3(0,1,1)),f-vec3(0,1,1)),dot(haM
sh3(i+vec3(1,1,1)),f-vec3(1,1,1)),u.x),u.y),u.z);}
float fbm(vec3 p){float a=.5,s=0.;for(int k=0;k<6;k++){s+=a*gnoise(p);p=p*2.03+vec3(1.7,9.2,3.1);a*=.5;}return s;}`;
function prog(vs, fs) {
  const mk = (t, s) => { const o = gl.createShader(t); gl.shaderSource(o, s); gl.compileShader(o); if (!gl.getShaderParameter(o, gl.COMPILE_STATUS)) throw Error(gl.getShaderInfoLog(o)); return o; };
  const p = gl.createProgram(); gl.attachShader(p, mk(gl.VERTEX_SHADER, vs)); gl.attachShader(p, mk(gl.FRAGMENT_SHADER, fs)); gl.M
  if (!gl.getProgramParameter(p, gl.LINK_STATUS)) throw Error(gl.getProgramInfoLog(p));
  const u = {}, n = gl.getProgramParameter(p, gl.ACTIVE_UNIFORMS);
  for (let i = 0; i < n; i++) { const nm = gl.getActiveUniform(p, i).name.replace(/\[0\]$/, ""); u[nm] = gl.getUniformLocation(p, nm); }
// Planet surface (and the cloud shell, drawn with the same mesh): terrain is displaced on the GPU from the block's seed.
const planetP = prog(`#version 300 es
precision highp float;layout(loM
cation=0) in vec3 aDir;
uniform mat4 uVP;uniform float uR,uAmp,uSea,uRough,uFreq,uCloud;uniform vec3 uSeed,uOff;
out vec3 vPos;out vec3 vDir;out float vH;
float heightAt(vec3 d){float c=fbm(d*uFreq+uSeed);float m=1.-abs(gnoise(d*uFreq*3.1+uSeed.zxy));m=m*m*uRough;return c*1.2+m*.55;}
void main(){vec3 d=normalize(aDir);float r;
  if(uCloud>.5){vH=0.;r=uR*1.03;}else{float h=heightAt(d);vH=h;r=uR*(1.+max(h,uSea)*uAmp);}
  vDir=d;vPos=d*r+uOff;gl_Position=uVP*vec4(vPos,1.);}`,
float;in vec3 vPos;in vec3 vDir;in float vH;
uniform vec3 uSun,uEye,uSeed,uEra,uAtmos,uLampCol;uniform vec4 uLampA,uLampB;uniform float uSea,uTemp,uLife,uCloud,uTime,uCloudAmt;out vec4 o;
  vec3 V=normalize(uEye-vPos);float sunUp=dot(vDir,uSun);
  if(uCloud>.5){float n=fbm(vDir*2.6+uSeed.yzx+vec3(uTime*.012,0.,uTime*.007));float a=smoothstep(.05,.42,n+uCloudAmt-.45)*.8;
    vec3 cc=mix(vec3(1.),uAtmos*.7+.2,smoothstep(.75,.95,uTemp));   // smoke over molten worlds
    o=vec4(cc*(.25+.85*max(suM
nUp,0.)),a*smoothstep(-.35,.1,sunUp+.2));return;}
  bool water=vH<=uSea;
  vec3 N=water?vDir:normalize(cross(dFdx(vPos),dFdy(vPos)));if(dot(N,vDir)<0.)N=-N;
  float lat=abs(vDir.y),h=vH-uSea,temp=uTemp-lat*.85-max(h,0.)*1.4+.15;vec3 col;
  if(water){col=mix(vec3(.10,.36,.46),vec3(.02,.07,.17),clamp(-h*3.,0.,1.));if(temp<.05)col=vec3(.76,.86,.93);}
  else{vec3 sand=vec3(.76,.68,.48),grass=mix(vec3(.18,.42,.16),uEra*.6,.35),rock=mix(vec3(.38,.34,.30),uEra*.4,.25);
    col=mix(mix(sand,grass,clamp(uLife*1.3-max(temp-.M
72,0.)*3.,0.,1.)),rock,smoothstep(.12,.32,h));
    col=mix(col,vec3(.62,.38,.2),smoothstep(.78,1.,temp));col=mix(col,vec3(.93,.95,.98),smoothstep(.12,0.,temp)*(1.-smoothstep(.72,.88,uTemp)));}
  vec3 lit=col*(.08+max(dot(N,uSun),0.)*1.1);
  if(water&&temp>=.05){vec3 H=normalize(uSun+V);lit+=pow(max(dot(N,H),0.),60.)*.6;}
  float night=smoothstep(.1,-.15,sunUp);
  if(!water){lit+=vec3(1.,.75,.4)*smoothstep(.56,.7,gnoise(vDir*70.+uSeed*3.))*uLife*night*1.5;
    if(uTemp>.85)lit+=vec3(1.,.32,.06)*pow(1.-abs(gnoise(vDiM
r*14.+uSeed)),18.)*(uTemp-.85)*4.5;}
  // lamps: a pool of light around the selected find (strongest at night) and under the spaceship
  float la=exp((dot(vDir,uLampA.xyz)-1.)*32.)*uLampA.w*(.25+.75*night),lb=exp((dot(vDir,uLampB.xyz)-1.)*1400.)*uLampB.w;
  la+=exp((dot(vDir,uLampA.xyz)-1.)*400.)*uLampA.w*.8;   // a brighter spot right under the find
  lit+=col*(uLampCol*la*2.6+vec3(1.,.9,.72)*lb*1.5)*(.45+.8*max(dot(N,vDir),0.))+uLampCol*la*.1;
  lit+=uAtmos*pow(1.-max(dot(vDir,V),0.),3.)*(.25+.75*max(sunUp+.3,0.)M
  o=vec4(lit,1.);}`);
// Atmosphere halo: a camera-facing quad behind the planet, glowing just outside its silhouette.
const haloP = prog(`#version 300 es
precision highp float;layout(location=0) in vec2 aC;uniform mat4 uP;uniform vec3 uC;uniform float uS;out vec2 vUv;
void main(){vUv=aC;gl_Position=uP*vec4(uC+vec3(aC*uS,0.),1.);}`,
precision highp float;in vec2 vUv;uniform float uK,uS,uR;uniform vec3 uAtmos;out vec4 o;
void main(){float d=length(vUv)*uS/uR;float g=smoothstep(uK-.015,uK+.01,d)*eM
xp(-(d-uK)*6.);o=vec4(uAtmos,g*.85);}`);
const starP = prog(`#version 300 es
precision highp float;layout(location=0) in vec4 aS;uniform mat4 uP,uRot;out float vB;
void main(){vB=aS.w;gl_Position=uP*(uRot*vec4(aS.xyz*40.,0.)+vec4(0,0,0,1));gl_PointSize=1.+aS.w*2.;}`,
precision mediump float;in float vB;out vec4 o;void main(){vec2 q=gl_PointCoord-.5;if(dot(q,q)>.25)discard;o=vec4(vec3(.8,.85,1.),.35+vB*.6);}`);
const ringP = prog(`#version 300 es
precision highp float;layout(location=0) in vec2 aRinM
g;uniform mat4 uVP;uniform float uR;out float vR;
void main(){vR=aRing.y;float a=aRing.x,r=uR*(1.38+aRing.y*.55);vec3 p=vec3(cos(a)*r,0.,sin(a)*r);float t=.42;p=vec3(p.x,p.y*cos(t)-p.z*sin(t),p.y*sin(t)+p.z*cos(t));gl_Position=uVP*vec4(p,1.);}`,
precision highp float;in float vR;uniform vec3 uEra;out vec4 o;
void main(){float b=.35+.65*fract(sin(floor(vR*46.)*12.9898)*43758.5);o=vec4(uEra*1.1,b*.55*smoothstep(0.,.08,vR)*smoothstep(1.,.85,vR));}`);
// (artefact pins: see "Artefact pins" below)
aceship for the fly-over: a small flat-shaded delta-wing craft (local x = right, y = up, z = forward).
// Engines glow, the flame grows with speed, wingtips carry red/green lights.
const shipP = prog(`#version 300 es
precision highp float;layout(location=0) in vec3 aP;layout(location=1) in vec3 aN;layout(location=2) in vec3 aC;layout(location=3) in float aE;
uniform mat4 uVP,uM;uniform float uFlame,uTime;out vec3 vN,vC,vW;out float vE;
void main(){vec3 p=aP;if(aE>2.5&&p.z<-.9)p.z=-.62-uFlame*(1.+.18*sin(uTime*47.))M
;vec4 w=uM*vec4(p,1.);vW=w.xyz;vN=mat3(uM)*aN;vC=aC;vE=aE;gl_Position=uVP*w;}`,
precision highp float;in vec3 vN,vC,vW;in float vE;uniform vec3 uSun,uEye;uniform float uTime;out vec4 o;
void main(){if(vE>1.5){o=vec4(vC*1.5,vE>2.5?.8:1.);return;}
  vec3 N=normalize(vN),V=normalize(uEye-vW);if(dot(N,V)<0.)N=-N;
  vec3 H=normalize(uSun+V);float d=max(dot(N,uSun),0.),sp=pow(max(dot(N,H),0.),40.)*.55;
  o=vec4(vC*(.3+d*.9+max(dot(N,V),0.)*.28)+sp*d+vC*vE*.7,1.);}`);
// Ships to collect: hidden on worldsM
 whose blocks are rare in Bitcoin history. Each recolours your craft
// Pizza ship (block 57,043) isn't a delta wing at all. Colours: hull, accent, underside, canopy, engine flame.
  scout: { name: "Scout", rarity: "Starter", why: "The ship every explorer starts with.", c: [[0.8, 0.82, 0.86], [0.97, 0.58, 0.1], [0.24, 0.26, 0.3], [0.25, 0.75, 0.95], [1, 0.62, 0.22]] },
  genesis: { name: "Genesis ship", rarity: "Mythic", why: "Block 0 holds the mythic sat: the very first satoshi, mined bM
y Satoshi Nakamoto.", hint: "Where it all began.", c: [[0.96, 0.94, 0.88], [0.92, 0.7, 0.28], [0.55, 0.48, 0.36], [1, 0.8, 0.45], [1, 0.92, 0.6]] },
  epic: { name: "Halving ship", rarity: "Epic", why: "Every halving block holds an epic sat: the first sat of a new reward era.", hint: "Each time the block reward is cut in half
", c: [[0.95, 0.66, 0.16], [0.12, 0.08, 0.06], [0.42, 0.2, 0.05], [1, 0.35, 0.15], [1, 0.3, 0.1]] },
  rare: { name: "Rare-sat ship", rarity: "Rare", why: "The first block of every difficultM
y period (every 2,016 blocks) holds a rare sat.", hint: "A rare sat hides in the first block of every difficulty period.", c: [[0.14, 0.18, 0.42], [0.62, 0.42, 1], [0.06, 0.07, 0.16], [0.45, 0.95, 1], [0.7, 0.5, 1]] },
  pizza: { name: "Pizza ship", rarity: "Legendary", why: "Block 57,043: 10,000 BTC paid for two pizzas, on 22 May 2010. Bitcoin Pizza Day.", hint: "10,000 BTC bought two of these
", shape: "pizza" },
  vintage: { name: "Vintage ship", rarity: "Vintage", why: "Block 9's coins are the ones Satoshi seM
nt to Hal Finney in the first Bitcoin transaction.", hint: "A single-digit block whose coins went to Hal.", c: [[0.72, 0.45, 0.25], [0.2, 0.55, 0.3], [0.3, 0.18, 0.1], [0.6, 1, 0.6], [0.9, 0.8, 0.4]] },
  hal: { name: "Hal's ship", rarity: "Vintage", why: "Block 78: the first block mined by Hal Finney (
).", hint: "The first block Hal mined.", c: [[0.36, 0.48, 0.44], [0.4, 0.9, 0.75], [0.14, 0.2, 0.18], [0.6, 1, 0.9], [0.5, 1, 0.8]] },
  firsttx: { name: "First-transaction ship", rarity: "HistorM
ic", why: "Block 170 holds the first Bitcoin transaction: Satoshi sent 10 BTC to Hal Finney.", hint: "Where coins first changed hands.", c: [[0.85, 0.88, 0.92], [0.3, 0.85, 0.95], [0.25, 0.3, 0.36], [0.6, 0.95, 1], [0.5, 0.9, 1]] },
  jubilee: { name: "Jubilee ship", rarity: "Historic", why: "Block 824,544: the Ordinals Jubilee, when cursed inscriptions were blessed.", hint: "The day the cursed were blessed.", c: [[0.45, 0.2, 0.62], [1, 0.45, 0.75], [0.18, 0.08, 0.26], [1, 0.7, 1], [1, 0.5, 0.85]] },
  if (CFG.shipAt[h] && SHIPS[CFG.shipAt[h]]) return CFG.shipAt[h];   // ships the owner added later (update channel)
  const special = { 0: "genesis", 9: "vintage", 78: "hal", 170: "firsttx", 57043: "pizza", 824544: "jubilee" };
  if (special[h]) return special[h];
  if (h > 0 && h % 210000 === 0) return "epic";
  if (h > 0 && h % 2016 === 0) return "rare";
function shipMesh(id) {
  const tris = [], quad = (a, b, c, d, col) => tris.push([a, b, c, col, 0], [a, c, d, col, 0]);
id].shape === "pizza") {   // a slice: cheese on top, sauce edges, a fat crust at the back, pepperoni, engines behind
    const CHEESE = [1, 0.8, 0.3], SAUCE = [0.85, 0.3, 0.12], CRUST = [0.82, 0.52, 0.22], BASE = [0.6, 0.38, 0.16], PEP = [0.78, 0.13, 0.1], FIRE = [1, 0.62, 0.22];
    const tip = [0, 0.05, 1], bl = [-0.72, 0.05, -0.5], br = [0.72, 0.05, -0.5], tipB = [0, -0.05, 1], blB = [-0.72, -0.05, -0.5], brB = [0.72, -0.05, -0.5];
    tris.push([tip, br, bl, CHEESE, 0], [tipB, blB, brB, BASE, 0]);
, bl, blB, tipB, SAUCE); quad(tip, tipB, brB, br, SAUCE);
    const x = 0.8, y0 = -0.07, y1 = 0.17, z0 = -0.46, z1 = -0.7;
    quad([-x, y1, z0], [x, y1, z0], [x, y1, z1], [-x, y1, z1], CRUST); quad([-x, y0, z0], [x, y0, z0], [x, y1, z0], [-x, y1, z0], CRUST);
    quad([-x, y0, z1], [-x, y1, z1], [x, y1, z1], [x, y0, z1], BASE); quad([-x, y0, z0], [-x, y1, z0], [-x, y1, z1], [-x, y0, z1], CRUST);
    quad([x, y0, z0], [x, y0, z1], [x, y1, z1], [x, y1, z0], CRUST); quad([-x, y0, z0], [-x, y0, z1], [x, y0, z1], [x, yM
    for (const [px, pz] of [[0, 0.45], [-0.25, 0.02], [0.22, 0.06], [0, -0.22], [-0.42, -0.32], [0.42, -0.3]])
      for (let i = 0; i < 7; i++) { const a0 = (i / 7) * 6.2832, a1 = ((i + 1) / 7) * 6.2832, r = 0.09; tris.push([[px, 0.062, pz], [px + Math.cos(a1) * r, 0.062, pz + Math.sin(a1) * r], [px + Math.cos(a0) * r, 0.062, pz + Math.sin(a0) * r], PEP, 0]); }
    tris.push([[-0.2, 0.08, -0.71], [0.2, 0.08, -0.71], [0, -0.04, -0.71], [1, 0.75, 0.35], 2]);
    tris.push([[-0.14, 0.05, -0.72], [0.14,M
 0.05, -0.72], [0, 0.01, -1.05], FIRE, 3], [[0, 0.11, -0.72], [0, -0.05, -0.72], [0, 0.03, -1.05], FIRE, 3]);
  } else {   // the delta-wing craft, in this ship's colours
    const [HULL, ACC, DARK, GLASS, FIRE] = SHIPS[id].c;
    const n = [0, 0, 1], t = [0, 0.17, -0.2], b = [0, -0.1, -0.2], l = [-0.78, -0.03, -0.55], r = [0.78, -0.03, -0.55], k = [0, 0.06, -0.6], fin = [0, 0.4, -0.66];
      [n, r, t, HULL, 0], [n, t, l, HULL, 0], [t, r, k, ACC, 0], [t, k, l, ACC, 0],
      [n, b, r, DARK, 0], [n, M
l, b, DARK, 0], [b, k, r, DARK, 0], [b, l, k, DARK, 0], [t, k, fin, ACC, 0],
      [[0, 0.07, 0.6], [0.11, 0.11, 0.22], [0, 0.2, -0.02], GLASS, 0.5], [[0, 0.07, 0.6], [0, 0.2, -0.02], [-0.11, 0.11, 0.22], GLASS, 0.5],
      [[-0.2, 0.08, -0.6], [0.2, 0.08, -0.6], [0, -0.07, -0.6], [1, 0.75, 0.35], 2],
      [[-0.14, 0.05, -0.62], [0.14, 0.05, -0.62], [0, 0.01, -1], FIRE, 3], [[0, 0.11, -0.62], [0, -0.05, -0.62], [0, 0.03, -1], FIRE, 3],
      [l, [-0.68, -0.03, -0.5], [-0.72, 0.03, -0.56], [1, 0.2, 0.2], 2], [r, [0M
.68, -0.03, -0.5], [0.72, 0.03, -0.56], [0.2, 1, 0.4], 2]);
  for (const [a, bb, c, col, e] of tris) { const nn = norm(cross(sub(bb, a), sub(c, a))); for (const p of [a, bb, c]) d.push(...p, ...nn, ...col, e); }
  return { data: new Float32Array(d), count: tris.length * 3 };
const N = 112, verts = [], idx = [];
for (const [u, v, w] of [[[1,0,0],[0,1,0],[0,0,1]], [[-1,0,0],[0,1,0],[0,0,-1]], [[0,0,-1],[0,1,0],[1,0,0]], [[0,0,1],[0,1,0],[-1,0,0]], [[1,0,0],[0,0,-1],[0,1,0]], [[1,0,0],[0,0,1],[0,M
  const base = verts.length / 3;
  for (let j = 0; j <= N; j++) for (let i = 0; i <= N; i++) { const a = (2 * i) / N - 1, c = (2 * j) / N - 1; verts.push(w[0] + a * u[0] + c * v[0], w[1] + a * u[1] + c * v[1], w[2] + a * u[2] + c * v[2]); }
  for (let j = 0; j < N; j++) for (let i = 0; i < N; i++) { const k = base + j * (N + 1) + i; idx.push(k, k + 1, k + N + 1, k + 1, k + N + 2, k + N + 1); }
const vao = (setup) => { const a = gl.createVertexArray(); gl.bindVertexArray(a); setup(); gl.bindVertexArray(M
const buf = (data, target = gl.ARRAY_BUFFER) => { const b = gl.createBuffer(); gl.bindBuffer(target, b); gl.bufferData(target, data, gl.STATIC_DRAW); return b; };
const sphereVao = vao(() => { buf(new Float32Array(verts)); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0); buf(new Uint32Array(idx), gl.ELEMENT_ARRAY_BUFFER); });
const quadVao = vao(() => { buf(new Float32Array([-1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1])); gl.enableVertexAttribArray(0); gl.vertexAtM
tribPointer(0, 2, gl.FLOAT, false, 0, 0); });
const SR = rng(7), stars = new Float32Array(2400 * 4);
for (let i = 0; i < 2400; i++) { const z = SR() * 2 - 1, t = SR() * 6.283, r = Math.sqrt(1 - z * z); stars.set([Math.cos(t) * r, z, Math.sin(t) * r, SR() ** 3], i * 4); }
const starVao = vao(() => { buf(stars); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 0, 0); });
const ringData = [];
for (let i = 0; i < 160; i++) { const a0 = (i / 160) * 6.2832, a1 = ((i + 1) / 160) * 6.2832; for (M
let k = 0; k < 12; k++) { const r0 = k / 12, r1 = (k + 1) / 12; ringData.push(a0, r0, a1, r0, a1, r1, a0, r0, a1, r1, a0, r1); } }
const ringVao = vao(() => { buf(new Float32Array(ringData)); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0); });
/* ---------- Artefact pins ----------
   A soft beam of light from the ground up to a hand-drawn icon that always faces you: a standing stone with a glowing
   carved rune, a cut gem (or, for picture inscriptions, the picture itself in a M
frame), a BRC-20 token coin, the miner's
   parchment scroll, a whale tail breaking a wave. Icons never shrink below a finger-sized target; the open one grows and
   pulses, the one under the mouse grows a little, found ones wear a small tick. Drawn back to front each frame. */
float sdBox(vec2 p,vec2 b,float r){vec2 d=abs(p)-b+r;return length(max(d,0.))+min(max(d.x,d.y),0.)-r;}
float sdSeg(vec2 p,vec2 a,vec2 b){vec2 pa=p-a,ba=b-a;return length(pa-ba*clamp(dot(pa,ba)/dot(ba,ba),0.,1.));}
h(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}
float sdBTC(vec2 p){   // the Bitcoin
: stem, two bowls, three bars and the strokes through top and bottom
  float d=sdSeg(p,vec2(-.28,-.55),vec2(-.28,.55));
  d=min(d,min(sdSeg(p,vec2(-.28,.55),vec2(.05,.55)),min(sdSeg(p,vec2(-.28,0.),vec2(.1,0.)),sdSeg(p,vec2(-.28,-.55),vec2(.1,-.55)))));
  d=min(d,min(max(abs(length(p-vec2(.05,.275))-.275),.05-p.x),max(abs(length(p-vec2(.1,-.275))-.275),.1-p.x)));
  d=min(d,min(min(sdSeg(p,vec2(-.15,.55),vec2(M
-.15,.76)),sdSeg(p,vec2(.02,.55),vec2(.02,.76))),min(sdSeg(p,vec2(-.15,-.55),vec2(-.15,-.76)),sdSeg(p,vec2(.02,-.55),vec2(.02,-.76)))));
const pinP = prog(`#version 300 es
precision highp float;layout(location=0) in vec2 aC;layout(location=1) in vec3 aP;layout(location=2) in vec4 aI;
uniform mat4 uVP;uniform vec3 uRt,uUp,uEye;uniform float uPxK,uMinPx,uMaxPx,uBase,uSel,uHov;
out vec2 vQ;flat out vec4 vI;flat out float vSel;
void main(){float d=distance(uEye,aP),sel=abs(aI.y-uSel)<.5?1.:0.,hov=abs(aI.M
  float s=min(max(uBase,uMinPx*d/uPxK),uMaxPx*d/uPxK)*(1.+sel*.35+hov*.15);
  vQ=aC*1.25;vI=aI;vSel=sel;
  gl_Position=uVP*vec4(aP+uUp*s*.85+(uRt*vQ.x+uUp*vQ.y)*s,1.);}`,
precision highp float;in vec2 vQ;flat in vec4 vI;flat in float vSel;uniform float uTime;uniform sampler2D uAtlas;uniform vec3 uCol[23];out vec4 o;
  vec2 q=vQ;int k=int(vI.x+.5);float t=uTime+vI.y*1.7,d,g=1e3,emis=0.;vec3 fill,glow,gc=vec3(1.);
  if(vI.w>=0.){   // a find with a picture (iM
nscription, stamp, cursed, atomical): the picture itself, framed in its kind's colour
    glow=uCol[k];d=sdBox(q,vec2(.82),.16);
    vec2 uv=clamp(q/.68*.5+.5,0.,1.),cell=vec2(mod(vI.w,8.),floor(vI.w/8.));
    vec3 img=texture(uAtlas,(cell+vec2(uv.x,1.-uv.y))/8.).rgb;
    fill=mix(mix(glow*.5,mix(glow,vec3(1.),.35),q.y*.5+.5),img,smoothstep(.012,-.012,sdBox(q,vec2(.68),.07)));
    if(k==7){float e=max(abs(q.x),abs(q.y)),al=abs(q.x)>abs(q.y)?q.y:q.x;d=max(d,-(length(vec2((fract(al*3.6)-.5)/3.6,e-.82))-.05));}   // pM
erforated, like a stamp
  }else if(k==0){   // the miner's message: a parchment scroll with lines of writing
    d=sdBox(q,vec2(.64,.52),.12);glow=vec3(1.,.8,.4);
    fill=mix(vec3(.84,.6,.27),vec3(1.,.9,.66),q.y*.5+.5)*(.93+.07*hash(floor(q*26.)));
    fill=mix(fill*.7,fill,smoothstep(0.,.13,min(abs(q.y-.52),abs(q.y+.52))));
    g=min(min(sdSeg(q,vec2(-.4,.2),vec2(.4,.2)),sdSeg(q,vec2(-.4,0.),vec2(.4,0.))),sdSeg(q,vec2(-.4,-.2),vec2(.12,-.2)))-.045;gc=vec3(.36,.2,.08);
  }else if(k==1){   // a rune: a standing stoM
ne with a carved rune that glows
    vec2 p=vec2(q.x*(1.+.14*q.y),q.y+.04);
    d=sdBox(p,vec2(.46,.82),.36);glow=vec3(1.,.36,.52);
    fill=mix(vec3(.17,.18,.21),vec3(.46,.47,.52),q.y*.4+.55)*(.8+.3*hash(floor(q*16.)));
    fill*=.85+.3*smoothstep(.3,-.4,q.x);
    g=min(min(sdSeg(q,vec2(-.15,-.5),vec2(-.15,.47)),sdSeg(q,vec2(-.15,.47),vec2(.18,.26))),min(sdSeg(q,vec2(.18,.26),vec2(-.15,.05)),sdSeg(q,vec2(-.15,.05),vec2(.21,-.5))))-.065;
    gc=vec3(1.,.45,.65);emis=.85+.3*sin(t*2.);
  }else if(k==2||k==8){   // anM
 inscription: a cut gem (a cursed one: crimson and black)
    bool cur=k==8;glow=cur?vec3(.95,.15,.22):vec3(.66,.42,1.);
    vec2 a=vec2(abs(q.x),q.y);
    d=max(max(q.y-.5,dot(a,vec2(.685,.728))-.624),dot(a,vec2(.819,-.573))-.487)*1.15;
    float lane=(q.y+.85)*.32,sh=q.y>.18?(abs(q.x)<.3?1.:(q.x<0.?.8:.6)):(abs(q.x)<lane?.8:(q.x<0.?.62:.44));
    fill=(cur?vec3(.75,.08,.14):vec3(.6,.38,1.))*sh+(cur?vec3(.12,.0,.02):vec3(.2,.12,.3))*sh*sh;
    g=min(abs(q.y-.18),q.y>.18?abs(abs(q.x)-.3):abs(abs(q.x)-lane))-.013;gcM
=cur?vec3(.15,.02,.04):vec3(.93,.87,1.);
    vec2 sp=q-vec2(-.24,.32);
    fill+=(cur?vec3(1.,.5,.5):vec3(1.))*(exp(-abs(sp.x)*38.)*exp(-abs(sp.y)*7.)+exp(-abs(sp.y)*38.)*exp(-abs(sp.x)*7.))*(.55+.45*sin(t*3.));
  }else if(k==7){   // a Bitcoin Stamp: a perforated postage stamp with a postmark
    float e=max(abs(q.x),abs(q.y)),al=abs(q.x)>abs(q.y)?q.y:q.x;
    d=max(sdBox(q,vec2(.76),.02),-(length(vec2((fract(al*3.6)-.5)/3.6,e-.76))-.055));glow=vec3(1.,.42,.38);
    fill=mix(vec3(.9,.84,.7),vec3(1.,.96,.86),q.y*.5M
    fill=mix(fill,vec3(.86,.3,.28),smoothstep(.02,0.,sdBox(q,vec2(.5),.04))*.85);
    g=min(abs(length(q-vec2(.12,-.08))-.26)-.035,sdSeg(q,vec2(-.35,.32),vec2(.4,.32))-.03);gc=vec3(.35,.08,.08);
  }else if(k==9){   // TAP: a teal token coin with a bold T
    float r=length(q);d=r-.8;glow=vec3(.2,.86,.84);
    fill=mix(vec3(.02,.28,.3),vec3(.24,.84,.8),q.y*.4+.5)*(1.-.25*smoothstep(.03,0.,abs(r-.64)-.02));
    g=min(sdSeg(q,vec2(-.32,.3),vec2(.32,.3)),sdSeg(q,vec2(0.,.3),vec2(0.,-.42)))-.1;gc=vec3(.94,1.,1.);eM
    fill+=vec3(.3)*smoothstep(.12,0.,abs((q.x+q.y)*.7-sin(t*.8)*1.3));
  }else if(k==13){   // NAT (DMT): a cube of digital matter mined from a block
 three shaded faces, glinting pixels
    vec2 a=abs(q);d=max(a.y*.866+a.x*.5,a.x)-.8;glow=vec3(1.,.55,.16);
    bool top=q.y>a.x*.577;
    fill=top?vec3(1.,.8,.42):(q.x<0.?vec3(.95,.5,.12):vec3(.6,.26,.05));
    vec2 cell=floor((q+1.)*6.);fill*=.86+.22*hash(cell)+.25*step(.93,hash(cell+floor(t*1.5)));
    g=min(min(sdSeg(q,vec2(0.),vec2(.8,.462)),sdSeg(q,veM
c2(0.),vec2(-.8,.462))),sdSeg(q,vec2(0.),vec2(0.,-.924)))-.022;gc=vec3(1.,.93,.7);emis=.4;
  }else if(k==14){   // CRC-20 ($LEAF): a sprout
 two leaves on a stem, in soil, on a soft green tile
    d=sdBox(q,vec2(.76),.24);glow=vec3(.5,1.,.68);
    fill=mix(vec3(.04,.16,.09),vec3(.1,.32,.17),q.y*.5+.5);
    float soil=length((q-vec2(0.,-.66))*vec2(1.,2.4))-.42,stem=sdSeg(q,vec2(0.,-.55),vec2(0.,.12))-.05;
    vec2 p1=mat2(.8,-.6,.6,.8)*(q-vec2(-.25,.2)),p2=mat2(.8,.6,-.6,.8)*(q-vec2(.26,.28));
    float l1=max(leM
ngth(p1-vec2(0.,-.15))-.27,length(p1-vec2(0.,.15))-.27),l2=max(length(p2-vec2(0.,-.17))-.3,length(p2-vec2(0.,.17))-.3),lv=min(l1,l2),e=.02;
    fill=mix(fill,vec3(.45,.27,.13)*(.85+.3*hash(floor(q*20.))),smoothstep(e,-e,soil));
    fill=mix(fill,vec3(.32,.72,.3),smoothstep(e,-e,stem));
    fill=mix(fill,mix(vec3(.28,.78,.32),vec3(.66,1.,.52),q.y*.6+.4),smoothstep(e,-e,lv));
    g=min(abs(p1.y)+step(.0,l1)*9.,abs(p2.y)+step(.0,l2)*9.)-.012;gc=vec3(.2,.5,.2);emis=.15;   // a vein down each leaf
  }else if(k==15){   /M
/ ICO-20 (presale): a golden ticket
 notched ends, a perforated stub, a star
    vec2 p=mat2(.97,.24,-.24,.97)*q;
    d=max(sdBox(p,vec2(.82,.5),.07),-(length(vec2(abs(p.x)-.82,p.y))-.15));glow=vec3(1.,.82,.4);
    fill=mix(vec3(.82,.55,.15),vec3(1.,.86,.46),p.y*.5+.5);
    fill*=p.x<-.38?.82:1.;
    fill*=1.-.55*step(abs(p.x+.38),.022)*step(.5,fract(p.y*7.));
    vec2 s=abs(p-vec2(.2,0.))*2.;g=((s.x+s.y)*.62+min(s.x,s.y)*1.6-.42)/2.;gc=vec3(.55,.28,.04);emis=.1;
  }else if(k==22){   // a block bounty: an orangeM
    float r=length(q);d=r-.82;glow=vec3(.97,.58,.1);
    fill=mix(vec3(.82,.4,.02),vec3(1.,.72,.26),q.y*.4+.5)*(1.-.22*smoothstep(.03,0.,abs(r-.66)-.02));
    g=sdBTC(mat2(.97,-.24,.24,.97)*q*1.35)/1.35-.07;gc=vec3(1.);emis=.35+.2*sin(t*3.);
    fill+=vec3(.35)*smoothstep(.12,0.,abs((q.x+q.y)*.7-sin(t*.9)*1.3));
  }else if(k==10){   // Alkanes: a flask with a bubbling green liquid
    float hw=mix(.64,.17,clamp((q.y+.7)/.9,0.,1.));
    d=min(max(abs(q.x)-hw,max(-.72-q.y,q.y-.22)),sdBox(q-vec2(0.,.44),M
vec2(.15,.26),.03));glow=vec3(.58,.95,.32);
    fill=mix(vec3(.12,.16,.14),vec3(.28,.34,.3),q.y*.5+.5);
    float liq=step(q.y,-.18+.03*sin(q.x*12.+t*3.));fill=mix(fill,vec3(.42,.95,.25)*(.8+.2*q.y),liq);
    vec2 bq=q-vec2(.12*sin(t*1.3),fract(t*.4)*.5-.68);float bub=length(bq)-.05;
    g=min(bub,sdBox(q-vec2(0.,.7),vec2(.21,.04),.02));gc=vec3(.85,1.,.75);emis=.4*liq;
  }else if(k==11){   // Atomicals: an atom
 nucleus and three orbits
    float r=length(q);d=r-.82;glow=vec3(.38,.62,1.);
    fill=mix(vec3(.04,.M
08,.2),vec3(.12,.22,.45),q.y*.5+.5);
    for(int i=0;i<3;i++){float an=float(i)*1.0472+t*.15;mat2 m=mat2(cos(an),-sin(an),sin(an),cos(an));vec2 p=m*q;orb=min(orb,abs(length(p/vec2(.62,.22))-1.)*.2);}
    g=min(orb-.012,r-.11);gc=vec3(.75,.9,1.);emis=.5;
  }else if(k==12){   // BRC-420: a recursion badge
 squares within squares
    d=sdBox(q,vec2(.78),.16);glow=vec3(.96,.76,.36);
    fill=mix(vec3(.24,.16,.06),vec3(.5,.36,.14),q.y*.5+.5);
    g=min(min(abs(sdBox(q,vec2(.52),.08))-.045,abs(sdBoxM
(q,vec2(.3),.05))-.04),sdBox(q,vec2(.1),.02));gc=vec3(1.,.86,.5);
  }else if(k==3){   // BRC-20: a token coin with a ledger mark and a passing shine
    float r=length(q);d=r-.8;glow=vec3(.36,.9,.48);
    fill=mix(vec3(.08,.42,.2),vec3(.42,.95,.55),q.y*.4+.5)*(1.-.28*smoothstep(.03,0.,abs(r-.62)-.02));
    g=min(min(sdSeg(q,vec2(-.3,.22),vec2(.3,.22)),sdSeg(q,vec2(-.3,0.),vec2(.3,0.))),sdSeg(q,vec2(-.3,-.22),vec2(.3,-.22)))-.055;gc=vec3(.03,.2,.09);
    fill+=vec3(.45)*smoothstep(.13,0.,abs((q.x+q.y)*.7-sin(t*.9)*1M
  }else if(k==5){   // a ship hangar: a gold-rimmed hexagon badge with a ship inside, engine glowing
    vec2 a=abs(q);d=max(a.x*.866+a.y*.5,a.y)-.8;glow=vec3(1.,.82,.3);
    fill=mix(vec3(.06,.07,.14),vec3(.2,.2,.36),q.y*.5+.5);
    fill=mix(fill,vec3(1.,.8,.3),smoothstep(.03,0.,abs(max(a.x*.866+a.y*.5,a.y)-.66)-.025));
    fill=mix(fill,vec3(1.,.55,.15)*(1.2+.4*sin(t*9.)),smoothstep(.02,-.02,sdSeg(q,vec2(0.,-.3),vec2(0.,-.5))-.06));
    g=max(q.y+abs(q.x)*2.1-.48,-.3-q.y+abs(q.x)*.3)*.45;gc=vec3(.97,.97,1.)M
;emis=.5+.3*sin(t*3.);
  }else if(k==6){   // a Bitmap district: a skyline badge with lit windows
    d=sdBox(q,vec2(.78),.2);glow=vec3(1.,.66,.3);
    fill=mix(vec3(.1,.06,.03),vec3(.34,.19,.08),q.y*.5+.5);
    g=min(min(sdBox(q-vec2(-.38,-.2),vec2(.13,.3),.02),sdBox(q-vec2(-.1,-.07),vec2(.12,.43),.02)),min(sdBox(q-vec2(.17,-.25),vec2(.11,.25),.02),sdBox(q-vec2(.41,-.13),vec2(.1,.37),.02)));
    vec2 wc=floor(q*10.),wf=fract(q*10.);
    float win=step(.45,hash(wc+floor(t*.4)))*step(abs(wf.x-.5),.24)*step(abs(wf.y-M
    gc=mix(vec3(.62,.38,.16),vec3(1.,.9,.6),win);emis=.35*win;
  }else if(k>=14){   // a protocol added later (update channel): a badge with a four-point star, in its own colour
    d=sdBox(q,vec2(.78),.22);glow=uCol[k];
    fill=mix(glow*.22,glow*.55,q.y*.5+.5);
    vec2 a=abs(q);g=(a.x+a.y)*.62+min(a.x,a.y)*1.6-.42;gc=mix(glow,vec3(1.),.6);emis=.45+.25*sin(t*2.5);
  }else{   // the whale: a tail rising from a wave
    float r=length(q);d=r-.82;glow=vec3(.45,.85,1.);
    fill=mix(vec3(.03,.2,.4),vec3(.25M
,.62,.95),q.y*.45+.5);
    float wave=q.y+.36-.05*sin(q.x*12.+t*2.);fill=mix(fill,vec3(.72,.93,1.),smoothstep(.02,0.,abs(wave)-.018)*.85);
    mat2 rl=mat2(cos(.5),sin(.5),-sin(.5),cos(.5)),rr=mat2(cos(.5),-sin(.5),sin(.5),cos(.5));
    float fl=length((rl*(q-vec2(-.23,.27)))*vec2(1.,2.4))-.26,fr=length((rr*(q-vec2(.23,.27)))*vec2(1.,2.4))-.26;
    g=max(min(min(fl,fr),sdSeg(q,vec2(0.,-.4),vec2(0.,.16))-.09),-wave);gc=vec3(.94,.98,1.);
  float aa=fwidth(d)*1.3,inside=smoothstep(aa,-aa,d),rim=smoothstep(aa,-aa,dM
-.075),ga=fwidth(g)*1.3,gi=smoothstep(ga,-ga,g);
  vec3 c=mix(fill,gc,gi)+gc*emis*exp(-max(g,0.)*30.)*.45;
  c*=.86+.28*smoothstep(-.9,.9,q.y);
  if(vI.z>.5)c=mix(c,vec3(dot(c,vec3(.3,.5,.2))),.35);   // found: calmer colours
  vec3 col=glow;float a=exp(-max(d,0.)*6.5)*.6*(.82+.18*sin(t*2.));
  col=mix(col,vec3(.02,.03,.05),rim);a=max(a,rim*.92);
  col=mix(col,c,inside);a=max(a,inside);
  if(vSel>.5){float ring=smoothstep(.05,0.,abs(length(q)-1.05))*(.6+.4*sin(uTime*6.));col=mix(col,vec3(1.),ring);a=max(a,ring);}
 if(vI.z>.5){   // found: a small tick badge
    vec2 tq=q-vec2(.66,.66);float tb=length(tq)-.22,ba=smoothstep(.02,-.02,tb),tk=min(sdSeg(tq,vec2(-.1,0.),vec2(-.025,-.08)),sdSeg(tq,vec2(-.025,-.08),vec2(.11,.09)))-.038;
    col=mix(col,mix(vec3(.14,.62,.32),vec3(1.),smoothstep(.015,-.015,tk)),ba);a=max(a,ba);
  a*=smoothstep(1.25,1.08,max(abs(q.x),abs(q.y)));
  if(a<.01)discard;o=vec4(col,a);}`);
// The beam: a camera-facing strip from the surface up to the icon, brightest at its foot.
const beamP = prog(`#versiM
precision highp float;layout(location=0) in vec2 aC;layout(location=1) in vec3 aP;layout(location=2) in vec4 aI;
uniform mat4 uVP;uniform vec3 uEye,uCol[23];uniform float uW;out vec2 vB;flat out vec3 vC;
void main(){vec3 dir=normalize(aP),p=mix(dir*length(aP)*.87,aP,aC.y*.5+.5),side=normalize(cross(dir,uEye-p));
  vB=vec2(aC.x,aC.y*.5+.5);vC=uCol[int(aI.x+.5)]*(aI.z>.5?.55:1.);gl_Position=uVP*vec4(p+side*aC.x*uW*distance(uEye,p),1.);}`,
precision highp float;in vec2 vB;flat in vec3 vC;outM
void main(){float x=1.-abs(vB.x);o=vec4(vC*1.2,(x*x*(.22+.5*vB.y)+exp(-vB.y*14.)*x*.7)*.75);}`);
const pinBuf = gl.createBuffer(), pinVao = vao(() => {
  buf(new Float32Array([-1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1])); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
  gl.bindBuffer(gl.ARRAY_BUFFER, pinBuf);
  gl.enableVertexAttribArray(1); gl.vertexAttribPointer(1, 3, gl.FLOAT, false, 28, 0); gl.vertexAttribDivisor(1, 1);
  gl.enableVertexAttribArray(2); gl.vertexAttriM
bPointer(2, 4, gl.FLOAT, false, 28, 12); gl.vertexAttribDivisor(2, 1);
// Picture inscriptions are packed into one 8
8 sheet of 64 px cells (crisp for pixel art, scaled down smoothly for photos).
const atlasTex = gl.createTexture(), atlasCv = document.createElement("canvas");
atlasCv.width = atlasCv.height = 512;
gl.bindTexture(gl.TEXTURE_2D, atlasTex);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([11, 13, 17, 255]));
for (const [k, v] of [[gl.TEXTURE_MIN_FILTER, M
gl.NEAREST], [gl.TEXTURE_MAG_FILTER, gl.NEAREST], [gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE], [gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE]]) gl.texParameteri(gl.TEXTURE_2D, k, v);
function buildAtlas(w) {
  const list = w.arts.filter((a) => a.img || a.pin).slice(0, 64), g = atlasCv.getContext("2d"), slots = new Map();
  g.fillStyle = "#0b0d11"; g.fillRect(0, 0, 512, 512);
  Promise.all(list.map((a, k) => new Promise((res) => {
    const im = new Image();
    im.onload = () => {
      const iw = im.naturalWidth || 64, ih = im.nM
aturalHeight || 64, sc = Math.min(64 / iw, 64 / ih), dw = Math.max(1, Math.round(iw * sc)), dh = Math.max(1, Math.round(ih * sc));
      g.imageSmoothingEnabled = sc < 1;   // pixel art is enlarged crisply; big pictures are shrunk smoothly
      try { g.drawImage(im, (k % 8) * 64 + (64 - dw) / 2, Math.floor(k / 8) * 64 + (64 - dh) / 2, dw, dh); slots.set(a, k); } catch {}
    im.onerror = res; im.src = a.img || a.pin;   // a.pin: a new protocol's own badge (drawn from its icon)
    if (S.world !== w) return;
    gl.bindTexture(gl.TEXTURE_2D, atlasTex); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlasCv);
    slots.forEach((k, a) => (a.slot = k));
// Called when finds change (new world, something found): refresh what we draw from.
function buildArtBuffers(w) {
  w.foundSet = new Set(found()[w.h] || []);
  if (w.atlasFor !== w.arts) { w.atlasFor = w.arts; if (w.arts.some((a) => a.img || a.pin)) buildAtlas(w); }
const PIN_SIZE = () => ({ base: 0.05, minPM
x: (isPlay() ? 27 : 21) * dpr, maxPx: 62 * dpr });
function drawPins(w, VP, V, eye, pxK, t, xr) {   // pxK: pixels per unit at distance 1 (from the projection)
  const R = w.size, rt = norm([V[0], V[4], V[8]]), up = norm([V[1], V[5], V[9]]), ps = PIN_SIZE();
  const order = w.arts.map((a, i) => { const p = a.dir.map((c) => c * R * KINDS[a.kind].h); return { i, p, d: Math.hypot(p[0] - eye[0], p[1] - eye[1], p[2] - eye[2]) }; }).sort((a, b) => b.d - a.d);
  const data = new Float32Array(order.length * 7);
Each((o, j) => { const a = w.arts[o.i]; data.set([o.p[0], o.p[1], o.p[2], KINDS[a.kind].n, o.i, w.foundSet?.has(o.i) ? 1 : 0, a.slot ?? -1], j * 7); });
  gl.bindBuffer(gl.ARRAY_BUFFER, pinBuf); gl.bufferData(gl.ARRAY_BUFFER, data, gl.DYNAMIC_DRAW);
  gl.depthMask(false); gl.bindVertexArray(pinVao);
  gl.useProgram(beamP.p); gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
  gl.uniformMatrix4fv(beamP.u.uVP, false, VP); gl.uniform3fv(beamP.u.uEye, eye); gl.uniform1f(beamP.u.uW, (2.2 * dpr) / pxK);
  gl.uniform3fv(beamP.u.uCol, OM
bject.values(KINDS).sort((a, b) => a.n - b.n).flatMap((k) => k.col));
  gl.drawArraysInstanced(gl.TRIANGLES, 0, 6, order.length);
  gl.useProgram(pinP.p); gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
  gl.uniformMatrix4fv(u.uVP, false, VP); gl.uniform3fv(u.uRt, rt); gl.uniform3fv(u.uUp, up); gl.uniform3fv(u.uEye, eye);
  gl.uniform1f(u.uPxK, pxK); gl.uniform1f(u.uMinPx, ps.minPx); gl.uniform1f(u.uMaxPx, ps.maxPx); gl.uniform1f(u.uBase, ps.base * R);
  gl.uniform1f(u.uSel, S.openArt ?? -1)M
; gl.uniform1f(u.uHov, S.hoverArt ?? -1); gl.uniform1f(u.uTime, t / 1000);
  gl.uniform3fv(u.uCol, Object.values(KINDS).sort((a, b) => a.n - b.n).flatMap((k) => k.col));
  gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, atlasTex); gl.uniform1i(u.uAtlas, 0);
  gl.drawArraysInstanced(gl.TRIANGLES, 0, 6, order.length);
  if (!xr) S.pinCam = { up, pxK, base: ps.base * R, minPx: ps.minPx, maxPx: ps.maxPx };
/* ---------- Bitmap district: the block's transactions as glowing city plots ----------
map, block N is the district N.bitmap and each of its transactions is a parcel of land. Here every parcel is a
   square plot on the planet (bigger transaction, bigger plot), packed row by row in transaction order: warm city lights
   on the night side, faint outlines by day. Parcel 0 (the coinbase) glows gold. Plots follow the terrain. */
function buildDistrict(w, sizes) {
  const n = sizes.length;
  if (!n) return null;
  const side = sizes.map((b) => Math.sqrt(Math.max(60, b)));
, i) => { if (b > sizes[big]) big = i; });
  const pack = (W) => {   // row by row in transaction order; a row is as tall as its biggest plot
    const cells = [];
    let x = 0, y = 0, row = 0;
    side.forEach((s) => { if (x + s > W && x > 0) { x = 0; y += row; row = 0; } cells.push([x + s / 2, y + s / 2, s / 2]); x += s; row = Math.max(row, s); });
    return { cells, H: y + row };
  // widen or narrow the rows until the district comes out roughly square
  let W = Math.max(Math.sqrt(side.reduce((s, x) => s M
+ x * x, 0)) * 1.1, Math.max(...side)), P = pack(W);
  for (let it = 0; it < 8 && Math.abs(P.H / W - 1) > 0.08; it++) { W = Math.max(Math.max(...side), W * Math.sqrt(P.H / W)); P = pack(W); }
  const { cells, H } = P, k = 2 / Math.max(W, H), data = new Float32Array((n + 1) * 4);
  cells.forEach(([cx, cy, hs], i) => data.set([(cx - W / 2) * k, (H / 2 - cy) * k, hs * k * 0.86, i], i * 4));
  data.set([0, 0, 1.05, -1], n * 4);   // the district's boundary, drawn as one big glowing frame
  const a = w.arriveYaw ?? 0, cM
enter = norm([Math.sin(a), 0.3, Math.cos(a)]);   // in view where you arrive, a little north
  const t1 = norm(cross([0, 1, 0], center)), t2 = cross(center, t1);
  return { n, data, sizes, center, t1, t2, span: clamp(0.12 + Math.sqrt(n) * 0.0065, 0.12, 0.5), biggest: { ti: big, bytes: sizes[big] } };
const districtP = prog(`#version 300 es
precision highp float;layout(location=0) in vec2 aC;layout(location=1) in vec4 aD;
uniform mat4 uVP;uniform vec3 uCtr,uT1,uT2,uSeed,uSun;uniform float uR,uAmp,uSea,uRough,uFreqM
,uSpan;out vec2 vQ;out float vNight,vId;
float heightAt(vec3 d){float c=fbm(d*uFreq+uSeed);float m=1.-abs(gnoise(d*uFreq*3.1+uSeed.zxy));m=m*m*uRough;return c*1.2+m*.55;}
void main(){vec2 p=aD.xy+aC*aD.z;vec3 d=normalize(uCtr+(uT1*p.x+uT2*p.y)*uSpan);
  vQ=aC;vId=aD.w;vNight=smoothstep(.12,-.18,dot(d,uSun));gl_Position=uVP*vec4(d*uR*(1.+max(heightAt(d),uSea)*uAmp+.003),1.);}`,
precision highp float;in vec2 vQ;in float vNight,vId;uniform float uTime;out vec4 o;
void main(){vec2 a=abs(vQ);flM
oat e=max(a.x,a.y),border=smoothstep(.72,.9,e)*smoothstep(1.,.93,e),n=fract(sin(vId*12.9898+.3)*43758.5453);
  vec3 c=mix(vec3(1.,.93,.78),vec3(1.,.76,.4)*(1.+.2*sin(uTime*.8+vId*1.7)),vNight);
  float A=border*(.55+.45*vNight)+(.06+.2*n)*(.35+.65*vNight);
  if(vId<-.5){float f=smoothstep(.975,.99,e)*smoothstep(1.,.993,e);c=vec3(1.,.7,.32);A=f*(.75+.25*sin(uTime*1.5));}   // boundary
  else if(vId<.5){c=vec3(1.,.86,.35);A=min(1.,A*1.8+.18);}
  if(A<.01)discard;o=vec4(c,min(A,1.));}`);
const distBuf = gl.createBuffeM
r(), distVao = vao(() => {
  buf(new Float32Array([-1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1])); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
  gl.bindBuffer(gl.ARRAY_BUFFER, distBuf); gl.enableVertexAttribArray(1); gl.vertexAttribPointer(1, 4, gl.FLOAT, false, 16, 0); gl.vertexAttribDivisor(1, 1);
function drawDistrict(w, VP, sun, t) {
  const D = w.district;
  if (distFor !== D) { gl.bindBuffer(gl.ARRAY_BUFFER, distBuf); gl.bufferDataM
(gl.ARRAY_BUFFER, D.data, gl.STATIC_DRAW); distFor = D; }
  const u = districtP.u;
  gl.useProgram(districtP.p); gl.bindVertexArray(distVao); gl.depthMask(false); gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
  gl.uniformMatrix4fv(u.uVP, false, VP); gl.uniform3fv(u.uCtr, D.center); gl.uniform3fv(u.uT1, D.t1); gl.uniform3fv(u.uT2, D.t2); gl.uniform3fv(u.uSeed, w.seed); gl.uniform3fv(u.uSun, sun);
  gl.uniform1f(u.uR, w.size); gl.uniform1f(u.uAmp, 0.065); gl.uniform1f(u.uSea, w.sea); gl.uniform1f(u.uRough, w.rough); gl.uniformM
1f(u.uFreq, w.freq);
  gl.uniform1f(u.uSpan, D.span); gl.uniform1f(u.uTime, t / 1000);
  gl.drawArraysInstanced(gl.TRIANGLES, 0, 6, D.n + 1);
  gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
// Matrices (column-major)
const persp = (f, a, n, fr) => { const t = 1 / Math.tan(f / 2), nf = 1 / (n - fr); return new Float32Array([t / a, 0, 0, 0, 0, t, 0, 0, 0, 0, (fr + n) * nf, -1, 0, 0, 2 * fr * n * nf, 0]); };
const sub = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]], dot = (a, b) => a[0] * b[0] + a[1] * b[1M
const cross = (a, b) => [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]], norm = (a) => { const l = Math.hypot(...a) || 1; return [a[0] / l, a[1] / l, a[2] / l]; };
function lookAt(e, t, up) {
  const z = norm(sub(e, t)), x = norm(cross(up, z)), y = cross(z, x);
  return new Float32Array([x[0], y[0], z[0], 0, x[1], y[1], z[1], 0, x[2], y[2], z[2], 0, -dot(x, e), -dot(y, e), -dot(z, e), 1]);
function mul(a, b) { const o = new Float32Array(16); for (let c = 0; c < 4M
; c++) for (let r = 0; r < 4; r++) o[c * 4 + r] = a[r] * b[c * 4] + a[4 + r] * b[c * 4 + 1] + a[8 + r] * b[c * 4 + 2] + a[12 + r] * b[c * 4 + 3]; return o; }
const rotAxis = (v, k, a) => { const c = Math.cos(a), s = Math.sin(a), kv = cross(k, v), kd = dot(k, v); return [v[0] * c + kv[0] * s + k[0] * kd * (1 - c), v[1] * c + kv[1] * s + k[1] * kd * (1 - c), v[2] * c + kv[2] * s + k[2] * kd * (1 - c)]; };
// One vertex array per ship, made the first time that ship is flown.
function shipGL(id) {
 if (!shipGLs[id]) {
    const m = shipMesh(id);
    shipGLs[id] = { count: m.count, vao: vao(() => { buf(m.data); [3, 3, 3, 1].reduce((off, size, i) => { gl.enableVertexAttribArray(i); gl.vertexAttribPointer(i, size, gl.FLOAT, false, 40, off * 4); return off + size; }, 0); }) };
  return shipGLs[id];
const currentShip = () => { S.ship ??= store.get("ship", "scout"); return shipGL(SHIPS[S.ship] ? S.ship : "scout"); };
/* ---------- Camera: orbit, or fly low over the surface ---------- */
const cam = { yaw: 0M
.6, pitch: 0.25, dist: 3.4, tDist: 3.4, auto: true, fly: { dir: [0, 0, 1], head: [1, 0, 0], alt: 0.16, speed: 0.06, turn: 0, climb: 0 } };
const FLY = { min: 0.11, max: 0.6, top: 0.4 };   // height limits (
 radius) and top speed
const keys = new Set();
function resize() { dpr = Math.min(devicePixelRatio || 1, 2); cv.width = Math.floor(innerWidth * dpr); cv.height = Math.floor(innerHeight * dpr); }
addEventListener("resize", resize);
let last = performance.now();
// xr (WebXR only): one eye's view
 its framebuffer, viewport, projection and view
 called once per eye each frame.
function render(t, xr) {
  const w = S.world;
  const dt = xr && !xr.first ? 0 : Math.min(0.05, (t - last) / 1000);
  if (!xr || xr.first) last = t;
  const R = w.size, sun = norm([Math.cos(w.sunAng), 0.35, Math.sin(w.sunAng)]);
  let eye, target, up = [0, 1, 0], fly = S.mode === "fly", shipM = null;
 S slower (down to a hover)
 Q/E lower/higher. Inputs ease in so it feeM
ls like a craft, not a cursor.
    const f = cam.fly, ease = Math.min(1, dt * 5);
    const hold = touchHold();
    if (keys.has("w") || hold) f.speed = Math.min(FLY.top, f.speed + dt * 0.2);
    if (keys.has("s")) f.speed = Math.max(0, f.speed - dt * 0.3);
    else if (touch.on && !hold) f.speed = Math.max(0, f.speed - dt * 1.6);   // touch: let go and the brakes go on (stopped in a moment)
    f.turn += ((keys.has("a") ? 1 : 0) - (keys.has("d") ? 1 : 0) - touch.steer - f.turn) * ease;
    f.climb += ((keys.has("eM
") ? 1 : 0) - (keys.has("q") ? 1 : 0) - f.climb) * ease;
    f.head = norm(rotAxis(f.head, f.dir, f.turn * dt * 1.4));
    f.alt = clamp(f.alt + f.climb * dt * 0.12, FLY.min, FLY.max);
    f.dir = norm(rotAxis(f.dir, norm(cross(f.dir, f.head)), f.speed * dt * 2));
    f.head = norm(sub(f.head, f.dir.map((c) => c * dot(f.head, f.dir))));
    const F = f.head, U0 = f.dir, ship = U0.map((c) => c * R * (1 + f.alt + Math.sin(t / 500) * 0.0015));
    // chase camera: behind and above the ship, tilted down towards the horM
izon (which dips further the higher you fly)
    eye = ship.map((c, i) => c - F[i] * R * 0.12 + U0[i] * R * 0.06);
    const dip = Math.acos(clamp(R / Math.hypot(...eye), 0, 1)) * 0.9, look = F.map((c, i) => c * Math.cos(dip) - U0[i] * Math.sin(dip));
    target = eye.map((c, i) => c + look[i] * R);
    // the ship banks into turns and pitches when climbing
    let U = norm(rotAxis(U0, F, -f.turn * 0.55)), Fp = F;
    const side = cross(F, U), pitch = f.climb * 0.25;
    Fp = norm(rotAxis(F, side, pitcM
h)); U = norm(rotAxis(U, side, pitch));
    const Rt = cross(Fp, U), s = R * 0.018;
    shipM = new Float32Array([Rt[0] * s, Rt[1] * s, Rt[2] * s, 0, U[0] * s, U[1] * s, U[2] * s, 0, Fp[0] * s, Fp[1] * s, Fp[2] * s, 0, ship[0], ship[1], ship[2], 1]);
    if (w.port && !S.portNear && dot(f.dir, w.port) > 0.9985) f.speed = Math.min(f.speed, 0.03);   // coming over the port: ease off
    if (S.portNear && !keys.has("w") && !hold) f.speed = Math.max(0, f.speed - dt * 0.2);   //
over over it (W / hold to fly on)
    if (cam.auto) cam.yaw += dt * 0.08;
    cam.dist += (cam.tDist - cam.dist) * 0.08;
    const d = cam.dist * R;
    eye = [Math.cos(cam.pitch) * Math.sin(cam.yaw) * d, Math.sin(cam.pitch) * d, Math.cos(cam.pitch) * Math.cos(cam.yaw) * d];
    target = [0, 0, 0];
  if (xr) { P = xr.P; V = mul(xr.V, xrModel(t, R, xr)); eye = xrEye(xr.pos, t, R, xr); }   // the world as a globe in your room
  else { P = persp(fly ? 1.05 : 0.75, cv.width / cv.height, 0.01,M
 200); V = lookAt(eye, target, up); }
  const VP = mul(P, V);
  // Sky: deep space from orbit, blending into the world's atmosphere when flying low. (AR: see-through.)
  const sky = fly ? w.atmos.map((c) => c * 0.35 * clamp(dot(norm(eye), sun) + 0.4, 0.08, 1)) : [0.016, 0.02, 0.04];
    gl.bindFramebuffer(gl.FRAMEBUFFER, xr.fb);
    if (xr.first) { gl.clearColor(xr.ar ? 0 : sky[0], xr.ar ? 0 : sky[1], xr.ar ? 0 : sky[2], xr.ar ? 0 : 1); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); }
ort(xr.vp[0], xr.vp[1], xr.vp[2], xr.vp[3]);
    gl.bindFramebuffer(gl.FRAMEBUFFER, null); gl.viewport(0, 0, cv.width, cv.height);
    gl.clearColor(sky[0], sky[1], sky[2], 1); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
  gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
  // stars (rotation only, infinitely far)
  gl.disable(gl.DEPTH_TEST);
    gl.useProgram(starP.p); gl.bindVertexArray(starVao);
    const Rm = new Float32Array(V); Rm[12] = Rm[13] = M
    gl.uniformMatrix4fv(starP.u.uP, false, P); gl.uniformMatrix4fv(starP.u.uRot, false, Rm); gl.drawArrays(gl.POINTS, 0, 2400);
  if (!fly && !xr) {   // halo
    const dist = Math.hypot(...eye), k = dist / Math.sqrt(Math.max(1e-4, dist * dist - R * R)), c = [V[12], V[13], V[14]];
    gl.useProgram(haloP.p); gl.bindVertexArray(quadVao); gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
    gl.uniformMatrix4fv(haloP.u.uP, false, P); gl.uniform3fv(haloP.u.uC, c); gl.uniform1f(haloP.u.uS, R * 2.2); gl.uniform1f(haloM
    gl.uniform1f(haloP.u.uK, k); gl.uniform3fv(haloP.u.uAtmos, w.atmos); gl.drawArrays(gl.TRIANGLES, 0, 6);
    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
  gl.enable(gl.DEPTH_TEST); gl.depthMask(true);
  const u = planetP.u;
  gl.useProgram(planetP.p); gl.bindVertexArray(sphereVao);
  gl.uniformMatrix4fv(u.uVP, false, VP); gl.uniform1f(u.uR, R); gl.uniform1f(u.uAmp, 0.065); gl.uniform1f(u.uSea, w.sea); gl.uniform1f(u.uRough, w.rough);
  gl.uniform1f(u.uFreq, w.freq); gl.uniform3fv(u.uSeed,M
 w.seed); gl.uniform3fv(u.uSun, sun); gl.uniform3fv(u.uEye, eye); gl.uniform3fv(u.uEra, w.eraCol);
  gl.uniform3fv(u.uAtmos, w.atmos); gl.uniform1f(u.uTemp, w.temp); gl.uniform1f(u.uLife, w.life); gl.uniform1f(u.uTime, t / 1000); gl.uniform1f(u.uCloudAmt, w.clouds);
  // lamps: fade in around the open find; the ship lights the ground below it (mostly noticeable at night)
  const sel = w.arts?.[S.openArt];
  if (sel) { S.lampDir = sel.dir; S.lampCol = KINDS[sel.kind].col.map((c) => 0.5 + c * 0.5); }
ampK || 0) + ((sel ? 1 : 0) - (S.lampK || 0)) * Math.min(1, dt * 3);
  gl.uniform4fv(u.uLampA, [...(S.lampDir || [0, 1, 0]), S.lampK]); gl.uniform3fv(u.uLampCol, S.lampCol || [1, 1, 1]);
  gl.uniform4fv(u.uLampB, [...cam.fly.dir, fly ? clamp(0.35 - dot(cam.fly.dir, sun) * 2, 0.15, 1) : 0]);
  gl.uniform1f(u.uCloud, 0); gl.drawElements(gl.TRIANGLES, idx.length, gl.UNSIGNED_INT, 0);
  drawDistrict(w, VP, sun, t);   // the Bitmap district's plots, on the land under the clouds
  if (w.port) drawBeacon(w, VP, eye, t);  M
 // the port (Silk Road Space Pirate)
  if (!xr || xr.first) { const near = fly && !!w.port && dot(cam.fly.dir, w.port) > 0.9985; if (near !== !!S.portNear) { S.portNear = near; portPrompt(); } }
  gl.useProgram(planetP.p); gl.bindVertexArray(sphereVao);
  gl.depthMask(false); gl.uniform1f(u.uCloud, 1); gl.drawElements(gl.TRIANGLES, idx.length, gl.UNSIGNED_INT, 0);
  gl.uniform4fv(u.uLampA, [0, 1, 0, 0]); gl.uniform4fv(u.uLampB, [0, 1, 0, 0]);   // moons are not lit by the lamps
  for (const m of w.moons || []) {  M
 // moons: big payments in orbit, drawn with the planet shader as small airless rocks
    const a = m.phase + (t / 1000) * m.speed, off = [Math.cos(a) * m.dist * R, Math.sin(a * 0.7) * 0.25 * R, Math.sin(a) * m.dist * R];
    gl.useProgram(planetP.p); gl.bindVertexArray(sphereVao); gl.depthMask(true);
    gl.uniform1f(u.uCloud, 0); gl.uniform3fv(u.uOff, off); gl.uniform1f(u.uR, m.size * R); gl.uniform3fv(u.uSeed, m.seed);
    gl.uniform1f(u.uSea, -2); gl.uniform1f(u.uTemp, 0.5); gl.uniform1f(u.uLife, 0); gl.uniformM
3fv(u.uEra, [0.55, 0.55, 0.58]); gl.uniform3fv(u.uAtmos, [0, 0, 0]);
    gl.drawElements(gl.TRIANGLES, idx.length, gl.UNSIGNED_INT, 0);
  gl.uniform3fv(u.uOff, [0, 0, 0]);
    gl.depthMask(true); gl.useProgram(shipP.p); gl.bindVertexArray(currentShip().vao);
    gl.uniformMatrix4fv(shipP.u.uVP, false, VP); gl.uniformMatrix4fv(shipP.u.uM, false, shipM);
    gl.uniform3fv(shipP.u.uSun, sun); gl.uniform3fv(shipP.u.uEye, eye); gl.uniform1f(shipP.u.uTime, t / 1000);
    gl.uniform1f(shipP.u.uFlame, 0.M
12 + cam.fly.speed * 2.2);
    gl.drawArrays(gl.TRIANGLES, 0, currentShip().count);
  if (w.arts?.length) { drawPins(w, VP, V, eye, (P[5] * (xr ? xr.vp[3] : cv.height)) / 2, t, xr); gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); }
  if (!xr) { S.lastVP = VP; S.lastEye = eye; }
  if (w.mark && !fly && cam.dist > 2.6) {   // landmark worlds wear a ring (hidden when you come in close)
    gl.useProgram(ringP.p); gl.bindVertexArray(ringVao);
    gl.uniformMatrix4fv(ringP.u.uVP, false, VP); gl.uniform1f(ringP.uM
.uR, R); gl.uniform3fv(ringP.u.uEra, w.eraCol);
    gl.drawArrays(gl.TRIANGLES, 0, ringData.length / 2);
  gl.depthMask(true);
const loop = (t) => { raf = requestAnimationFrame(loop); (S.scene === "space" ? renderSpace : render)(t); };
const startLoop = () => { if (!raf) { last = performance.now(); raf = requestAnimationFrame(loop); } };
const stopLoop = () => { cancelAnimationFrame(raf); raf = 0; };
cv.addEventListener("webglcontextlost", (e) => e.preventDefault());
cv.addEventListener("webglconM
textrestored", () => location.reload());
// Controls: drag to orbit (or steer when flying), wheel/pinch to zoom (or change altitude).
const ptr = new Map();
// Touch flying (phones): hold a finger to fly forward, slide it left/right to steer (like a joystick from where you
// touched), pinch to climb or dive. Let go and the craft glides to a stop. A quick tap still opens a pin.
const touch = { id: null, x0: 0, t0: 0, steer: 0, on: false };
const touchFlying = () => S.scene === "space" || S.mode === M
const touchHold = () => touch.id != null && performance.now() - touch.t0 > 150;
// Keep the browser's own gestures off the game: a drag on the world never scrolls, stretches, zooms or selects the page.
cv.addEventListener("dragstart", (e) => e.preventDefault());
for (const ev of ["touchstart", "touchmove"]) cv.addEventListener(ev, (e) => e.cancelable && e.preventDefault(), { passive: false });
for (const ev of ["gesturestart", "gesturechange"]) document.addEventListener(ev, (e) => e.preventDefault(), { passiM
ve: false });   // Safari page pinch-zoom
// iPhone: a downward drag that starts on a panel or button would pull the whole page down (pull-to-refresh). Block page
// dragging everywhere except inside the panels that really scroll.
const SCROLLERS = ".artBody,.modal .body,.badges,.hud.open,.viewer .stage,.picker";
document.addEventListener("touchmove", (e) => { if (e.cancelable && !e.target.closest?.(SCROLLERS)) e.preventDefault(); }, { passive: false });
cv.addEventListener("pointerdown", (e) => {
pe === "mouse") e.preventDefault();   // no text selection while dragging with a mouse
  try { cv.setPointerCapture(e.pointerId); } catch {}
  ptr.set(e.pointerId, [e.clientX, e.clientY]); S.downAt = [e.clientX, e.clientY]; S.downT = performance.now(); cam.auto = false; cv.classList.add("drag");
  if (e.pointerType === "touch" && touchFlying()) {
    if (ptr.size === 1) Object.assign(touch, { id: e.pointerId, x0: e.clientX, t0: performance.now(), steer: 0, on: true });
    else { touch.id = null; touch.steer = 0; }M
   // second finger: pinch for height instead
function artAt(x, y) {
  // Hit-test the icons exactly as they are drawn (same size rules as the pin shader); front-most wins.
  const w = S.world, VP = S.lastVP, eye = S.lastEye, pc = S.pinCam;
  if (!w?.arts?.length || !VP || !pc) return -1;
  const slack = matchMedia("(pointer: coarse)").matches ? 12 : 3;
  let best = -1, bestDist = Infinity;
  w.arts.forEach((a, i) => {
    const p = a.dir.map((c) => c * w.size * KINDS[a.kind].h), dist = Math.hypot(p[0] - eyM
e[0], p[1] - eye[1], p[2] - eye[2]);
    if (dot(a.dir, norm(sub(eye, p))) < 0) return;   // far side of the planet
    const s = Math.min(Math.max(pc.base, (pc.minPx * dist) / pc.pxK), (pc.maxPx * dist) / pc.pxK) * (i === S.openArt ? 1.35 : i === S.hoverArt ? 1.15 : 1);
    const c = p.map((v, k) => v + pc.up[k] * s * 0.85), cw = VP[3] * c[0] + VP[7] * c[1] + VP[11] * c[2] + VP[15];
    if (cw <= 0) return;
    const sx = ((VP[0] * c[0] + VP[4] * c[1] + VP[8] * c[2] + VP[12]) / cw * 0.5 + 0.5) * innerWidth, sy = (M
0.5 - (VP[1] * c[0] + VP[5] * c[1] + VP[9] * c[2] + VP[13]) / cw * 0.5) * innerHeight;
    const r = (s * 0.85 * pc.pxK) / dist / dpr;   // icon radius on screen, CSS px
    if (Math.hypot(sx - x, sy - y) < r + slack && dist < bestDist) { bestDist = dist; best = i; }
cv.addEventListener("pointermove", (e) => {
  const p = ptr.get(e.pointerId);
  if (!p) {   // mouse hovering: the pin under it grows a little and the cursor becomes a hand
    if (e.pointerType === "mouse" && S.scene === "space"M
) { S.mouse = [e.clientX, e.clientY]; spaceHover(e.clientX, e.clientY); }
    else if (e.pointerType === "mouse") { const i = artAt(e.clientX, e.clientY); if (i !== S.hoverArt) { S.hoverArt = i; cv.style.cursor = i >= 0 ? "pointer" : ""; } }
  if (ptr.size === 2) {
    ptr.set(e.pointerId, [e.clientX, e.clientY]);
    const [a, b] = [...ptr.values()], d = Math.hypot(a[0] - b[0], a[1] - b[1]);
    if (pinch) zoom((pinch - d) * 0.01);
    pinch = d; return;
  const dx = e.clientX - p[0], dy = e.clM
  ptr.set(e.pointerId, [e.clientX, e.clientY]);
  if (e.pointerId === touch.id && touchFlying()) { touch.steer = clamp((e.clientX - touch.x0) / 70, -1, 1); return; }
  if (S.scene === "space") { sp.ang += dx * 0.005; sp.alt = clamp(sp.alt * Math.exp(dy * 0.004), SPC.minAlt, SPC.maxAlt); return; }
  if (S.mode === "fly") { const f = cam.fly; f.head = norm(rotAxis(f.head, f.dir, -dx * 0.005)); f.alt = clamp(f.alt + dy * 0.0008, FLY.min, FLY.max); }
  else { cam.yaw -= dx * 0.006; cam.pitch = clamp(cam.pM
itch + dy * 0.005, -1.4, 1.4); }
  ptr.delete(e.pointerId); pinch = 0; cv.classList.remove("drag");
  if (e.pointerId === touch.id) { touch.id = null; touch.steer = 0; }
  const tap = performance.now() - (S.downT || 0) < 350;   // a hold (to fly) is not a tap
  if (e.type === "pointerup" && tap && S.scene === "space" && S.downAt && Math.hypot(e.clientX - S.downAt[0], e.clientY - S.downAt[1]) < (e.pointerType === "touch" ? 12 : 6)) {
    if (e.pointerType === "mouse" && nearSun(e.clientX, e.cM
lientY)) return openGift();   // the star hides a gift (PC)
    const h = blockAtScreen(e.clientX, e.clientY);   // click (or tap) a block on the star map: the ship stops and locks on to it
    if (h > S.tip) toast(`Block ${fmt(h)} isn't mined yet
 ${waitFor(h)} to go`);
    else if (h >= 0) { sp.v = 0; keys.delete("w"); pickBlock(h); uiShow(); }
    else uiToggle();   // tapped empty sky: show or hide the controls (phones)
  if (e.type === "pointerup" && tap && S.scene !== "space" && S.downAt && Math.hypot(M
e.clientX - S.downAt[0], e.clientY - S.downAt[1]) < (e.pointerType === "touch" ? 12 : 6)) {
    const i = artAt(e.clientX, e.clientY);
    if (i >= 0) openArt(i); else uiToggle();   // tapped empty space: show or hide the controls (phones)
cv.addEventListener("pointerup", up); cv.addEventListener("pointercancel", up);
cv.addEventListener("dblclick", () => { if (S.scene === "space" && sp.pick != null) landHere(); });   // double-click a selected block to land
cv.addEventListener("pointerleave", () => { $("spaM
ceTip").hidden = true; sp.hover = -1; S.mouse = null; });
function zoom(d) { if (S.scene === "space") sp.alt = clamp(sp.alt * Math.exp(d * 0.35), SPC.minAlt, SPC.maxAlt); else if (S.mode === "fly") cam.fly.alt = clamp(cam.fly.alt + d * 0.05, FLY.min, FLY.max); else cam.tDist = clamp(cam.tDist + d, 1.6, 7); }
cv.addEventListener("wheel", (e) => { e.preventDefault(); zoom(Math.sign(e.deltaY) * 0.3); }, { passive: false });
 turn, Q lower, E higher.
 { w: "w", arrowup: "w", s: "s", arrowdown: "s", a: "a", arrowleft: "a", d: "d", arrowright: "d", q: "q", e: "e" };
addEventListener("keyup", (e) => { keys.delete(FLYKEYS[e.key.toLowerCase()]); if (e.key === " ") S.fireHeld = false; });
addEventListener("blur", () => keys.clear());
addEventListener("keydown", (e) => {
  if (e.target.closest?.("input,select")) return;
  const k = e.key.toLowerCase();
  if (!$("gift").hidden) { if (k === "escape") $("gift").hidden = true; return; }
  if (S.scene === "space") {   // sM
tar map flight: W A S D Q E fly, Enter lands, Esc / M back to the world you came from
    if (FLYKEYS[k]) { e.preventDefault(); keys.add(FLYKEYS[k]); touch.on = false; }
    else if (k === "enter" && !e.target.closest?.("button,a")) landHere();
    else if (k === "h") aimHome();
    else if (k === " ") { e.preventDefault(); S.fireHeld = true; }   // fire (Silk Road Space Pirate)
    else if (k === "c") toggleCockpit();
    else if (k === "b" && S.cockpit) toggleTilt();
    else if (k === "t") { if ($("pirate").hiddM
en) openPirate(); else $("pirate").hidden = true; }
    else if (k === "escape" && !$("pirate").hidden) $("pirate").hidden = true;
    else if ((k === "escape" || k === "m") && S.world) showWorld();
  if (S.scene === "rings") {   // the embedded Block Rings: Enter warps to its selection, Esc flies again
    if (k === "enter" && !e.target.closest?.("button,a")) landHere();
    else if (k === "escape") showMap(mapSel ?? undefined);
  if ($("hud").hidden) return;
  if (!$("pirate").hiddM
en) { if (k === "escape" || k === "t") { $("pirate").hidden = true; portPrompt(); } return; }
  if (k === "t") return docked() && $("portBtn").dataset.mode === "bounty" ? loadBounty() : openPirate();
  if (k === "m") return showMap();
  if (!$("viewer").hidden) {   // full-screen viewer: Esc backs out, arrows step through the finds
    if (k === "escape" || k === "backspace") closeViewer(); else if (k === "arrowright") stepArt(1); else if (k === "arrowleft") stepArt(-1);
  if (S.mode === "fly" && FLM
YKEYS[k]) { e.preventDefault(); keys.add(FLYKEYS[k]); touch.on = false; return; }
  if (k === "escape" && S.openArt >= 0) return closeArt();
  if (k === "escape" && S.mode === "fly") return toggleFly();
  if (k === "enter" && S.openArt >= 0 && !e.target.closest?.("button,a")) return openViewer();
  if (k === "f") toggleFly(); else if (k === "escape") showMap(); else if (k === "arrowright") visit(S.world.h + 1); else if (k === "arrowleft") visit(S.world.h - 1);
  else if (k === "s") scan();
/* ---------- Music:M
 a gentle tune generated from the block (no noise, no hiss) ----------
   Key from the hash
 mood from the climate
 tempo and how busy the melody is from the transaction count.
   A soft pad holds the chord, a plucked melody wanders the scale, a little echo gives it space. */
const SCALES = { warm: [0, 2, 4, 7, 9], cold: [0, 3, 5, 7, 10], molten: [0, 1, 5, 7, 8] };
const midiHz = (m) => 440 * 2 ** ((m - 69) / 12);
function musicPlan(w) {
  const hex = w.b.hash.replace(/^0+/, ""), R = rng(parseInt(hex.slice(-8),M
  const scale = w.temp > 0.88 ? SCALES.molten : w.temp < 0.3 ? SCALES.cold : SCALES.warm;
  const root = 45 + (parseInt(hex.slice(0, 2), 16) % 12), bpm = 58 + w.life * 34;
  const melody = Array.from({ length: 16 }, () => (R() < 0.35 + w.life * 0.45 ? 12 + scale[Math.floor(R() * scale.length)] + (R() < 0.3 ? 12 : 0) : null));
  return { root, scale, bpm, melody };
function startMusic() {
  const ctx = new (window.AudioContext || window.webkitAudioContext)();
  const master = ctx.createGain(), comp = cM
tx.createDynamicsCompressor(), tone = ctx.createBiquadFilter();
  master.gain.value = 0.5; tone.type = "lowpass"; tone.frequency.value = 2600;
  const delay = ctx.createDelay(1), fb = ctx.createGain(), wet = ctx.createGain();
  delay.delayTime.value = 0.38; fb.gain.value = 0.32; wet.gain.value = 0.28;
  tone.connect(master); tone.connect(delay); delay.connect(fb); fb.connect(delay); delay.connect(wet); wet.connect(master);
  master.connect(comp); comp.connect(ctx.destination);
  const M = { ctx, tone, plan: null, sM
tep: 0, next: ctx.currentTime + 0.1, pads: [], timer: 0 };
  const note = (midi, at, len, vol, type = "triangle") => {
    const o = ctx.createOscillator(), g = ctx.createGain();
    o.type = type; o.frequency.value = midiHz(midi);
    g.gain.setValueAtTime(0, at); g.gain.linearRampToValueAtTime(vol, at + 0.012); g.gain.exponentialRampToValueAtTime(0.0001, at + len);
    o.connect(g); g.connect(tone); o.start(at); o.stop(at + len + 0.05);
  M.setWorld = (w) => {
    M.plan = musicPlan(w);
    // pad: root + fiM
fth, slow swell, very soft
    M.pads.forEach((p) => { p.g.gain.setTargetAtTime(0, ctx.currentTime, 0.8); p.o.stop(ctx.currentTime + 4); });
    M.pads = [0, 7, 12].map((iv) => {
      const o = ctx.createOscillator(), g = ctx.createGain();
      o.type = "sine"; o.frequency.value = midiHz(M.plan.root + iv); g.gain.value = 0;
      g.gain.setTargetAtTime(iv === 12 ? 0.018 : 0.035, ctx.currentTime, 1.5);
      o.connect(g); g.connect(tone); o.start(); return { o, g };
  M.timer = setInterval(() => {   /M
/ look-ahead scheduler
    const pl = M.plan;
    if (!pl) return;
    const beat = 60 / pl.bpm / 2;
    while (M.next < ctx.currentTime + 0.3) {
      const s = M.step % 16, m = pl.melody[s];
      if (m != null) note(pl.root + m, M.next, 1.6, 0.07);
      if (s % 8 === 0) note(pl.root - 12, M.next, 2.4, 0.06, "sine");   // soft bass
      M.next += beat; M.step++;
  M.stop = () => { clearInterval(M.timer); ctx.close(); };
function soundFor(w) { if (S.sound) S.sound.setWorld(w); }
nction toggleSound() {
  if (S.sound) { S.sound.stop(); S.sound = null; $("soundBtn").classList.remove("on"); $("soundBtn").firstChild.textContent = "
    S.sound = startMusic();
    $("soundBtn").classList.add("on"); $("soundBtn").firstChild.textContent = "
    if (S.world) S.sound.setWorld(S.world);
  } catch { S.sound = null; toast("Sound isn't available here"); }
/* ---------- Artefacts: what the real block contains, placed on its world ----------
   Read from the raw block (/M
r/block): the miner's coinbase message (a ruin), rune etchings (monoliths),
   inscription reveals (crystals
 images are shown straight from the witness), BRC-20 operations (beacons),
   and the largest payment (a whale). Big payments also become moons. */
// n = shape in the marker shader
 h = pillar height (
 the same shapes are drawn in the legend and the card.
  ruin: { n: 0, h: 1.07, icon: "
", name: "Ruin", short: "Miner's message", col: [1, 0.8, 0.4] },
  monolith: { n: 1,M
", name: "Rune monolith", short: "Runes", col: [1, 0.34, 0.5] },
  crystal: { n: 2, h: 1.11, icon: "
", name: "Inscription crystal", short: "Inscriptions", col: [0.66, 0.42, 1] },
  beacon: { n: 3, h: 1.2, icon: "
", name: "BRC-20 beacon", short: "BRC-20", col: [0.36, 0.9, 0.48] },
  whale: { n: 4, h: 1.09, icon: "
", name: "Whale landing", short: "Whale", col: [0.45, 0.85, 1] },
  ship: { n: 5, h: 1.17, icon: "
", name: "Ship hangar", short: "Ship", col: [1, 0.85, 0.35] },
 { n: 6, h: 1.1, icon: "
", name: "Bitmap district", short: "District", col: [1, 0.62, 0.28] },
  stamp: { n: 7, h: 1.12, icon: "
", name: "Bitcoin Stamp", short: "Stamps", col: [1, 0.42, 0.38] },
  cursed: { n: 8, h: 1.1, icon: "
", name: "Cursed inscription", short: "Cursed", col: [0.9, 0.16, 0.24] },
  tap: { n: 9, h: 1.13, icon: "
", name: "TAP token", short: "TAP", col: [0.2, 0.86, 0.84] },
  alkanes: { n: 10, h: 1.15, icon: "
", name: "Alkanes", short: "Alkanes", col: [0.58, 0.95, 0.32] },
cal: { n: 11, h: 1.14, icon: "
", name: "Atomical", short: "Atomicals", col: [0.38, 0.62, 1] },
  brc420: { n: 12, h: 1.12, icon: "
", name: "BRC-420 asset", short: "BRC-420", col: [0.96, 0.76, 0.36] },
  nat: { n: 13, h: 1.13, icon: "
", name: "NAT (DMT)", short: "NAT", col: [1, 0.55, 0.16] },
// Six open slots for protocols that don't exist yet: filled in later through the update channel ("protocols")
for (let s = 1; s <= 8; s++) KINDS[`x${s}`] = { n: 13 + s, h: 1.12 + s * 0.005, icon: "
protocol", short: "New", col: [0.85, 0.85, 0.9] };
// Silk Road Space Pirate: a block bounty waiting at this world's port (or to be delivered here)
KINDS.bounty = { n: 22, h: 1.2, icon: "
", name: "Block bounty", short: "Bounty", col: [0.97, 0.58, 0.1] };
  ruin: '<rect x="4" y="4" width="16" height="16" fill="none" stroke="currentColor" stroke-width="3.4"/>',
  monolith: '<path d="M12 1 16.5 8V23h-9V8z" fill="currentColor"/>',
  crystal: '<path d="M12 1 20 12 12 23 4 12z" M
fill="currentColor"/>',
  beacon: '<circle cx="12" cy="12" r="8.2" fill="none" stroke="currentColor" stroke-width="3"/><circle cx="12" cy="12" r="2.8" fill="currentColor"/>',
  whale: '<path d="M12 .5 14.2 9.8 23.5 12 14.2 14.2 12 23.5 9.8 14.2.5 12 9.8 9.8z" fill="currentColor"/>',
  ship: '<path d="M12 1.5 21 20 12 15.5 3 20z" fill="currentColor"/>',
  district: '<path d="M2 22V12h4V7h5v5h2V3h5v6h4v13z" fill="currentColor"/>',
  stamp: '<rect x="3.5" y="3.5" width="17" height="17" fill="currentColor" stroke="#0e1M
014" stroke-width="1.8" stroke-dasharray="2 1.6"/>',
  cursed: '<path d="M12 1 20 12 12 23 4 12z" fill="currentColor"/>',
  tap: '<path d="M12 2 21 7v10l-9 5-9-5V7z" fill="currentColor"/>',
  alkanes: '<path d="M9 2h6v6l6.5 12.5A2 2 0 0 1 19.7 23H4.3a2 2 0 0 1-1.8-2.5L9 8z" fill="currentColor"/>',
  atomical: '<circle cx="12" cy="12" r="2.6" fill="currentColor"/><g fill="none" stroke="currentColor" stroke-width="1.7"><ellipse cx="12" cy="12" rx="10" ry="4"/><ellipse cx="12" cy="12" rx="10" ry="4" transform="rotate(M
60 12 12)"/><ellipse cx="12" cy="12" rx="10" ry="4" transform="rotate(-60 12 12)"/></g>',
  brc420: '<rect x="3" y="3" width="18" height="18" rx="3" fill="none" stroke="currentColor" stroke-width="2.6"/><rect x="8.5" y="8.5" width="7" height="7" rx="1.5" fill="currentColor"/>',
  nat: '<path d="M12 2 21 7v10l-9 5-9-5V7z" fill="currentColor"/>',
SHAPES.bounty = '<circle cx="12" cy="12" r="10.5" fill="currentColor"/><path d="M9.6 6.2v11.6M9.6 6.5h3.6a2.7 2.7 0 0 1 0 5.4H9.6m0 0h4.1a2.8 2.8 0 0 1 0 5.6H9.6M11 4.6v1M
.9m2 -1.9v1.9M11 17.6v1.9m2-1.9v1.9" fill="none" stroke="#fff" stroke-width="1.7" stroke-linecap="round" transform="rotate(14 12 12)"/>';
SHAPES.tap = '<circle cx="12" cy="12" r="10" fill="currentColor"/><path d="M7.5 8h9M12 8v9" stroke="#0e1014" stroke-width="2.6" stroke-linecap="round"/>';
SHAPES.nat = '<path d="M12 1.6 21.5 7v10L12 22.4 2.5 17V7z" fill="currentColor"/><path d="M12 12 21.5 7M12 12 2.5 7M12 12v10.4" stroke="#0e1014" stroke-width="1.4" opacity=".55"/>';
for (let s = 1; s <= 8; s++) SHAPES[`x${s}`] M
= '<rect x="3" y="3" width="18" height="18" rx="4" fill="none" stroke="currentColor" stroke-width="2.4"/><path d="M12 5.5 13.6 10.4 18.5 12 13.6 13.6 12 18.5 10.4 13.6 5.5 12 10.4 10.4z" fill="currentColor"/>';
SHAPES.x1 = '<path d="M12 21v-9" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/><path d="M12 12C12 7 8.5 4.5 3.5 5 3.5 10 7 12.5 12 12zM12 10c0-4.5 3.5-6.8 8.5-6.3 0 4.6-3.6 6.8-8.5 6.3z" fill="currentColor"/><path d="M6 21h12" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"M
/>';   // CRC-20 (built in): a sprout
SHAPES.x2 = '<path d="M3 7.5h18v3a1.6 1.6 0 0 0 0 3v3H3v-3a1.6 1.6 0 0 0 0-3z" fill="currentColor" transform="rotate(-14 12 12)"/>';   // ICO-20 (built in): a ticket
const kindCol = (kind) => `rgb(${KINDS[kind].col.map((c) => Math.round(c * 255))})`;
const shapeSvg = (kind, cls = "") => `<svg${cls ? ` class="${cls}"` : ""} viewBox="0 0 24 24" style="color:${kindCol(kind)}" aria-hidden="true">${SHAPES[kind]}</svg>`;
const HEXV = new Int8Array(128).fill(-1);
"0123456789abcdef".spM
lit("").forEach((c, i) => { HEXV[c.charCodeAt(0)] = i; HEXV[c.toUpperCase().charCodeAt(0)] = i; });
function hexToBytes(hex) {
  const a = new Uint8Array(hex.length >> 1);
  for (let i = 0, j = 0; i < a.length; i++, j += 2) a[i] = (HEXV[hex.charCodeAt(j)] << 4) | HEXV[hex.charCodeAt(j + 1)];
// Just enough of a block parser: inputs (scriptSig + witness) and outputs (value + script). No hashing needed.
function parseBlockLite(b) {
  const vi = () => { const x = b[p++]; if (x < 0xfd) returM
n x; if (x === 0xfd) { const v = b[p] | (b[p + 1] << 8); p += 2; return v; }
    if (x === 0xfe) { const v = (b[p] | (b[p + 1] << 8) | (b[p + 2] << 16) | (b[p + 3] << 24)) >>> 0; p += 4; return v; }
    let v = 0; for (let i = 7; i >= 0; i--) v = v * 256 + b[p + i]; p += 8; return v; };
  const n = vi(), txs = [];
  for (let t = 0; t < n; t++) {
    const start = p;
    let seg = false;
    if (b[p] === 0 && b[p + 1] !== 0) { seg = true; p += 2; }
    const body = p, ins = [], outs = [];
= 0, k = vi(); i < k; i++) { const prev = b.subarray(p, p + 32); p += 36; const l = vi(); ins.push({ prev, sig: b.subarray(p, p + l), wit: [] }); p += l + 4; }
    for (let i = 0, k = vi(); i < k; i++) { let v = 0; for (let j = 7; j >= 0; j--) v = v * 256 + b[p + j]; p += 8; const l = vi(); outs.push({ v, s: b.subarray(p, p + l) }); p += l; }
    const bodyEnd = p;
    if (seg) for (const inp of ins) for (let j = 0, k = vi(); j < k; j++) { const l = vi(); inp.wit.push(b.subarray(p, p + l)); p += l; }
es that make the txid (witness left out), kept so an inscription's ID can be worked out when it is opened
    const raw = seg ? [b.subarray(start, start + 4), b.subarray(body, bodyEnd), b.subarray(p, p + 4)] : [b.subarray(start, p + 4)];
    txs.push({ ins, outs, raw, bytes: p - start });   // bytes: the transaction's full size (its Bitmap parcel size)
function pushes(s, p, envelope) {
  while (p < s.length) {
    const op = s[p++];
    if (op === 0) n = M
0; else if (op <= 75) n = op; else if (op === 0x4c) n = s[p++];
    else if (op === 0x4d) { n = s[p] | (s[p + 1] << 8); p += 2; } else if (op === 0x4e) { n = (s[p] | (s[p + 1] << 8) | (s[p + 2] << 16) | (s[p + 3] << 24)) >>> 0; p += 4; }
    else if (envelope && op >= 0x51 && op <= 0x60) { out.push(new Uint8Array([op - 0x50])); continue; }
    else if (envelope && op === 0x68) return out; else return envelope ? out : null;
    if (p + n > s.length) return null;
    out.push(s.subarray(p, p + n)); p += n;
const join = (l) => { let n = 0; for (const x of l) n += x.length; const o = new Uint8Array(n); let p = 0; for (const x of l) { o.set(x, p); p += x.length; } return o; };
const ENV = [0x00, 0x63, 0x03, 0x6f, 0x72, 0x64];   // OP_FALSE OP_IF "ord"
// An ord envelope's fields and body. "even": an unrecognised even field (which made an inscription cursed before the Jubilee).
function parseOrd(ps) {
  let ct = "", k = 0, even = false;
  for (; k < ps.length; k += 2) {
    if (ps[k].length === 0) { k++; break;M
    const tag = ps[k].length === 1 ? ps[k][0] : -1;
    if (tag === 1 && ps[k + 1]) ct = new TextDecoder().decode(ps[k + 1]);
    else if (tag >= 0 && tag % 2 === 0 && tag !== 2) even = true;
  return { ct, body: join(ps.slice(k)), even };
// Every OP_FALSE OP_IF <tag>
 OP_ENDIF envelope in a transaction's witnesses: "ord" (inscriptions), "atom" (Atomicals),
// "BIN" (Alkanes contracts)
 with the input it sits in. New protocols' tags can be added through the update channel.
const ENV_TAGS = new Set([M
"ord", "atom", "BIN"]);
function envelopes(tx) {
  tx.ins.forEach((inp, ii) => inp.wit.forEach((w) => {
    for (let i = 0; i + 5 < w.length; i++) {
      if (w[i] !== 0 || w[i + 1] !== 0x63) continue;
      const n = w[i + 2];
      if (n < 1 || n > 16) continue;
      const tag = String.fromCharCode(...w.subarray(i + 3, i + 3 + n));
      if (!ENV_TAGS.has(tag)) continue;
      const ps = pushes(w, i + 3 + n, true);
      if (ps) out.push({ tag, input: ii, ps });
st envelopeOf = (tx) => { const e = envelopes(tx).find((x) => x.tag === "ord"); return e ? parseOrd(e.ps) : null; };
// The runestone (OP_RETURN OP_13): an etched rune's name, and whether it carries a protostone (Alkanes, field 16383).
function runestoneOf(tx) {
  for (const o of tx.outs) {
    if (o.s[0] !== 0x6a || o.s[1] !== 0x5d) continue;
    const ps = pushes(o.s, 2, false);
    if (!ps) return null;
    const ints = [];
    let v = 0n, sh = 0n;
    for (const x of join(ps)) { v |= BigInt(x & 127) << sh; sh +M
= 7n; if (!(x & 128)) { ints.push(v); v = 0n; sh = 0n; } }
    const f = new Map();
    for (let i = 0; i + 1 < ints.length && ints[i] !== 0n; i += 2) { const k = Number(ints[i]); if (!f.has(k)) f.set(k, []); f.get(k).push(ints[i + 1]); }
    let name = null;
    if (((f.get(2)?.[0] ?? 0n) & 1n) && f.has(4)) {   // an etching with a name
      let n = f.get(4)[0] + 1n, s = "";
      for (; n > 0n; n = (n - 1n) / 26n) s = String.fromCharCode(65 + Number((n - 1n) % 26n)) + s;
      const sp = f.get(3)?.[0] ?? 0n;
   name = [...s].map((c, i) => c + (i < s.length - 1 && (sp >> BigInt(i)) & 1n ? "
    return { name, protocol: f.has(16383), fields: f };
const runeOf = (tx) => runestoneOf(tx)?.name || null;
/* ---------- More Bitcoin protocols, read straight from the raw block ----------
   Bitcoin Stamps & SRC-20 (data in multisig or P2WSH outputs, ARC4-coded with the first input's txid as Counterparty
   does), Atomicals ("atom" envelopes, CBOR payloads), Alkanes (protostones, BM
IN contract envelopes). */
const latin = (b) => { let s = ""; for (let i = 0; i < b.length; i += 0x8000) s += String.fromCharCode.apply(null, b.subarray(i, i + 0x8000)); return s; };
function arc4(key, data) {
  const S = new Uint8Array(256).map((_, i) => i), out = new Uint8Array(data.length);
  for (let i = 0, j = 0; i < 256; i++) { j = (j + S[i] + key[i % key.length]) & 255; [S[i], S[j]] = [S[j], S[i]]; }
  for (let n = 0, i = 0, j = 0; n < data.length; n++) { i = (i + 1) & 255; j = (j + S[i]) & 255; [S[i], S[j]]M
 = [S[j], S[i]]; out[n] = data[n] ^ S[(S[i] + S[j]) & 255]; }
function imageType(b) {
  const is = (...m) => m.every((x, i) => b[i] === x);
  if (is(0x89, 0x50, 0x4e, 0x47)) return "image/png";
  if (is(0x47, 0x49, 0x46)) return "image/gif";
  if (is(0xff, 0xd8)) return "image/jpeg";
  if (is(0x52, 0x49, 0x46, 0x46)) return "image/webp";
  return latin(b.subarray(0, 300)).includes("<svg") ? "image/svg+xml" : null;
function stampOf(tx) {
  const chunks = [], wsh = [];
  for (const o of tx.outs) {
    if (s.length > 36 && s[s.length - 1] === 0xae && s[0] >= 0x51 && s[0] <= 0x53) {   // bare multisig: data hidden in fake public keys
      const keys = [];
      while (p < s.length - 2 && (s[p] === 33 || s[p] === 65)) { keys.push(s.subarray(p + 1, p + 1 + s[p])); p += 1 + s[p]; }
      if (keys.length >= 2) chunks.push(join([keys[0].subarray(1, -1), keys[1].subarray(1, -1)]));
    } else if (s.length === 34 && s[0] === 0 && s[1] === 32 && o.v <= 1000) wsh.push(s.subarray(2));M
   // P2WSH data outputs
  if (!chunks.length && wsh.length < 2) return null;
  const key = tx.ins[0]?.prev ? Uint8Array.from(tx.ins[0].prev).reverse() : null;   // the first input's txid
  if (key) for (const c of chunks) { const d = arc4(key, c); let part = d.subarray(1, 1 + d[0]); if (latin(part.subarray(0, 8)) === "CNTRPRTY") part = part.subarray(8); text += latin(part); }
  if (wsh.length >= 2) { const raw = join(wsh); text += " " + latin(raw) + (key ? " " + latin(arc4(key, raw)) : ""); }
  const at = text.toLowerCase().indexOf("stamp:");
  if (at < 0) return null;
  const rest = text.slice(at + 6).trimStart();
  if (rest[0] === "{") {   // SRC-20
    let depth = 0, end = -1;
    for (let i = 0; i < rest.length && i < 3000; i++) { if (rest[i] === "{") depth++; else if (rest[i] === "}" && --depth === 0) { end = i; break; } }
      const j = JSON.parse(rest.slice(0, end + 1));
      return { title: `${j.op || "src-20"} ${j.tick || ""}`.trim(), detail: j.amt ? `SRC-20
 amount ${j.amt}` : j.M
 max supply ${j.max}` : "SRC-20 token operation", proto: "SRC-20 (Bitcoin Stamps)" };
    } catch { return { title: "SRC-20", detail: "SRC-20 token data stored in the transaction's outputs", proto: "SRC-20 (Bitcoin Stamps)" }; }
  const m = rest.match(/^[A-Za-z0-9+/=]{16,}/);   // classic stamp: a base64 image
      const s64 = m[0].slice(0, m[0].length - (m[0].length % 4)), bin = Uint8Array.from(atob(s64), (c) => c.charCodeAt(0)), t = imageType(bin);
      if (t) return { tM
itle: "Bitcoin Stamp", detail: `${t.split("/")[1].toUpperCase()} stored in the transaction's outputs
 ${fmt(bin.length)} bytes`, img: `data:${t};base64,${b64(bin)}`, ct: t, size: bin.length, proto: "Bitcoin Stamps (classic)" };
  return { title: "Bitcoin Stamp", detail: "Stamp data stored in the transaction's outputs", proto: "Bitcoin Stamps" };
function cbor(b) {   // just enough CBOR for Atomicals payloads
  const len = (ai) => {
    if (ai < 24) return ai;
    if (ai === 24) rM
    if (ai === 25) { const v = (b[p] << 8) | b[p + 1]; p += 2; return v; }
    if (ai === 26) { const v = b[p] * 16777216 + (b[p + 1] << 16) + (b[p + 2] << 8) + b[p + 3]; p += 4; return v; }
    if (ai === 27) { let v = 0; for (let i = 0; i < 8; i++) v = v * 256 + b[p + i]; p += 8; return v; }
  const item = (depth) => {
    if (p >= b.length || depth > 12) throw 0;
    const ib = b[p++], mt = ib >> 5, ai = ib & 31;
      if (ai === 20) return false; if (ai === 21M
) return true; if (ai === 22 || ai === 23) return null;
      if (ai === 25) { p += 2; return 0; }
      if (ai === 26) { const v = new DataView(b.buffer, b.byteOffset + p, 4).getFloat32(0); p += 4; return v; }
      if (ai === 27) { const v = new DataView(b.buffer, b.byteOffset + p, 8).getFloat64(0); p += 8; return v; }
    const n = len(ai);
    if (mt === 0) return n;
    if (mt === 1) return -1 - n;
    if (mt === 2) { const v = b.subarray(p, p + n); p += n; return v; }
) { const v = new TextDecoder().decode(b.subarray(p, p + n)); p += n; return v; }
    if (mt === 4) { const a = []; for (let i = 0; i < Math.min(n, 2000); i++) a.push(item(depth + 1)); return a; }
    if (mt === 5) { const o = {}; for (let i = 0; i < Math.min(n, 2000); i++) { const k = item(depth + 1); o[String(k)] = item(depth + 1); } return o; }
    if (mt === 6) return item(depth + 1);
const ATOM_OPS = { nft: "NFT", ft: "FT (direct)", dft: "FT deploy", dmt: "FT mint", mod: "M
update", evt: "event", sl: "seal", x: "extract", y: "split" };
function atomicalOf(en, i) {
  const op = latin(en.ps[0] || new Uint8Array(0));
  try { o = cbor(join(en.ps.slice(1))); } catch {}
  const a = (o && typeof o === "object" && o.args) || {};
  const name = a.request_realm ? `+${a.request_realm}` : a.request_subrealm ? `+
${a.request_subrealm}` : a.request_ticker ? `$${a.request_ticker}`
    : a.mint_ticker ? `$${a.mint_ticker}` : a.request_container ? `#${a.request_container}` : a.requesM
t_dmitem ? String(a.request_dmitem) : "";
  let img = null, ct = null, size = 0;
  if (o && typeof o === "object") for (const v of Object.values(o)) {
    const d = v?.$d, t = String(v?.$ct || "").split(";")[0];
    if (d instanceof Uint8Array && /^image\//.test(t) && d.length < 300000) { img = `data:${t};base64,${b64(d)}`; ct = t; size = d.length; break; }
  const what = ATOM_OPS[op] || op || "operation";
  return { title: String(name || `Atomical ${what}`).slice(0, 40), detail: `Atomicals ${what} in transactiM
on ${fmt(i)}`, img, ct, size, proto: `Atomicals
const btc = (sats) => (sats / 1e8).toLocaleString("en-US", { maximumFractionDigits: 8 }) + " BTC";
function b64(bytes) { let s = ""; for (let i = 0; i < bytes.length; i += 0x8000) s += String.fromCharCode.apply(null, bytes.subarray(i, i + 0x8000)); return btoa(s); }
async function scanWorld(w) {
    if (S.demo) txs = demoTxs(w);
    else { const hex = await get(`/r/block/${w.h}`); txs = parseBlockLite(hexToBytes(typeof hex === "striM
ng" ? hex : String(hex))); }
  } catch { return; }
  if (S.world !== w) return;
  const R = rng((parseInt(w.b.hash.slice(-8), 16) || 7) ^ 0x9e3779b9), place = () => { const z = R() * 2 - 1, t = R() * 6.2832, r = Math.sqrt(1 - z * z); return [Math.cos(t) * r, z, Math.sin(t) * r]; };
  // The coinbase message: printable text the miner left in the first transaction.
  const cb = txs[0]?.ins[0]?.sig;
    // Read the pushed data (not the raw script bytes), then keep the readable text.
const parts = pushes(cb, 0, false) || [cb], txt = parts.map((x) => String.fromCharCode(...x)).join(" ");
    const runs = (txt.match(/[\x20-\x7e]{4,}/g) || []).map((x) => x.trim()).filter((x) => x.length >= 4 && /[A-Za-z]{3}/.test(x));
    if (runs.length) arts.push({ kind: "ruin", title: "The miner's message", detail: runs.join("
 ").slice(0, 300), dir: place(), ti: 0 });
  const big = [], crystals = [];
  txs.forEach((tx, i) => {
    if (i > 0) for (const o of tx.outs) { if (!whale || o.M
v > whale.v) whale = { v: o.v, i }; if (o.v >= 1e9) big.push(o.v); }
    if (arts.length > 160) return;
    const has = (k) => arts.filter((a) => a.kind === k).length, add = (k, cap, o) => { if (has(k) < cap) { arts.push({ kind: k, dir: place(), ti: i, ...o }); return true; } return false; };
    const imgOf = (ct, body) => (/^image\/(png|jpe?g|gif|webp|avif|svg\+xml)$/.test(ct) && body.length && body.length < 300000 ? `data:${ct};base64,${b64(body)}` : null);
    // runes, and Alkanes protostones riding in the runM
    const rs = w.h >= 840000 ? runestoneOf(tx) : null;
    if (rs?.name) add("monolith", 30, { title: rs.name, detail: `Rune etched in transaction ${fmt(i)} of this block` });
    if (rs?.protocol) add("alkanes", 12, { title: "Alkanes message", detail: `A protostone (an Alkanes contract call) in transaction ${fmt(i)}`, proto: "Alkanes
    // Bitcoin Stamps / SRC-20: data in the outputs
    const st = i > 0 ? stampOf(tx) : null;
    if (st) add("stamp", 15, st);
    // envelopes: Atomicals,M
 Alkanes contracts, inscriptions (and the cursed ones, before the Jubilee)
    const envs = envelopes(tx), ords = envs.filter((x) => x.tag === "ord");
    for (const en of envs) {
      if (en.tag === "atom") add("atomical", 15, atomicalOf(en, i));
      else if (en.tag === "BIN") add("alkanes", 12, { title: "Alkanes contract", detail: `An Alkanes contract deployed in transaction ${fmt(i)}
 ${(join(en.ps).length / 1024).toFixed(1)} KB`, proto: "Alkanes
 contract (BIN envelope)" });
    // protocols added M
later through the update channel (simple rules, or add-on modules)
    if (PROTOS.length && protoScan(tx, i, envs, ords, add, imgOf)) return;
    if (w.h < 824544) ords.forEach((en, j) => {
      const e = parseOrd(en.ps);
      if (j === 0 && en.input === 0 && !e.even) return;   // a normal (blessed) inscription
      const base = e.ct.split(";")[0].trim().toLowerCase();
      add("cursed", 12, { title: base || "Cursed inscription", tx, iidx: j, ct: base, size: e.body.length, proto: "Cursed inscription (before theM
        detail: `Cursed
 ${j > 0 ? "not the first inscription in its transaction" : en.input > 0 ? "not in the transaction's first input" : "it used an unrecognised field"}
 so it was given a negative number`,
        img: imgOf(base, e.body), text: /^text\/(plain|markdown)/.test(base) ? new TextDecoder().decode(e.body.subarray(0, 4000)) : null });
    const first = ords[0];
    if (!first || (w.h < 824544 && (first.input > 0 || parseOrd(first.ps).even))) return;
    const e = parseOrd(firM
st.ps), base = e.ct.split(";")[0].trim().toLowerCase(), size = e.body.length;
    if (/^(text\/plain|application\/json)/.test(base) && size < 2000) {
      const txt = new TextDecoder().decode(e.body).trim();
      if (/^\/content\/[0-9a-f]{64}i\d+$/.test(txt) && add("brc420", 12, { title: "BRC-420 mint", detail: `A recursive mint of ${txt.slice(9, 21)}
`, tx, ct: base, size, proto: "BRC-420 (recursive mint)" })) return;
        const j = JSON.parse(txt), p = String(j.p || "").toLowerCase();
f (p === "brc-20" && j.tick && add("beacon", 15, { title: `${j.op} ${j.tick}`, detail: j.amt ? `Amount ${j.amt}` : j.max ? `Max supply ${j.max}` : "BRC-20 operation", tx, ct: base, size })) return;
        if (p === "tap" && j.op) {
          const nat = String(j.tick || "").toLowerCase() === "nat";
          if (add(nat ? "nat" : "tap", 12, { title: nat ? `NAT ${j.op}` : `${j.op} ${j.tick || ""}`.trim(), tx, ct: base, size, proto: nat ? "TAP
 DMT-NAT" : "TAP protocol",
            detail: nat ? `DMT-NAT${j.blk !M
 mined against block ${j.blk}` : ""}` : j.amt ? `TAP
 amount ${j.amt}` : j.max ? `TAP
 max supply ${j.max}` : "TAP protocol operation" })) return;
        if (p === "brc-420" && add("brc420", 12, { title: `BRC-420 ${j.op || "asset"}`, detail: String(j.name || j.id || "BRC-420 asset").slice(0, 80), tx, ct: base, size, proto: "BRC-420" })) return;
    crystals.push({ kind: "crystal", title: base || "Inscription", detail: `Inscribed in transaction ${fmt(i)}
/ 1024).toFixed(1)} KB`, dir: place(), ti: i, tx, ct: base, size,
        img: crystals.filter((c) => c.img).length < 30 && /^image\/(png|jpe?g|gif|webp|avif|svg\+xml)$/.test(base) && size && size < 300000 ? `data:${base};base64,${b64(e.body)}` : null,
        text: /^text\/(plain|markdown)/.test(base) ? new TextDecoder().decode(e.body.subarray(0, 4000)) : null });
  // Crystals: inscriptions with pictures first (they are the most fun to find), then the rest, up to 30.
  // A world that holds its own Bitmap cM
laim ("<height>.bitmap") always keeps that one.
  crystals.forEach((c) => { if (c.text && c.text.trim() === `${w.h}.bitmap`) c.bitmap = true; });
  const rank = (c) => (c.bitmap ? 2 : c.img ? 1 : 0);
  crystals.sort((a, b) => rank(b) - rank(a));
  for (const c of crystals.slice(0, 30)) { c.dir = place(); arts.push(c); }
  if (whale && whale.v >= 1e8) arts.push({ kind: "whale", title: btc(whale.v), detail: `The largest single payment in this block (transaction ${fmt(whale.i)})`, dir: place(), ti: whale.i });
 sid = shipFor(w.h);   // a rare block hides a ship hangar
  if (sid) arts.push({ kind: "ship", ship: sid, title: SHIPS[sid].name, detail: SHIPS[sid].why, dir: place() });
  // The Bitmap district: every transaction in the block is a plot of land, laid out near where you arrived
  w.district = buildDistrict(w, txs.map((t) => t.bytes || 250));
  if (w.district) { w.port = portOf(w.district); pirateArrive(w); }
  if (w.district) arts.push({ kind: "district", title: `${w.h}.bitmap`, dir: w.district.center, parcels: w.M
district.n, biggest: w.district.biggest,
    detail: `${fmt(w.district.n)} parcel${w.district.n === 1 ? "" : "s"}: every transaction in block ${fmt(w.h)} is a plot of land in this Bitmap district` });
  big.sort((a, b) => b - a);
  w.moons = big.slice(0, 3).map((v, k) => ({ v, size: 0.07 + Math.min(0.09, Math.log10(v / 1e8) * 0.03), dist: 1.9 + k * 0.55, speed: 0.12 / (k + 1), phase: R() * 6.28, seed: [R() * 50, R() * 50, R() * 50] }));
  bountyArt(w);   // Silk Road Space Pirate: a
ing at (or going to) this world's port
  buildArtBuffers(w);
  updateScanBtn(); renderLegend(w);
  if (arts.length) toast(`${arts.length} thing${arts.length === 1 ? "" : "s"} to discover on this world${w.moons.length ? `
 ${w.moons.length} moon${w.moons.length > 1 ? "s" : ""}` : ""}`);
  emit("scanned", { height: w.h, finds: arts.length, parcels: w.district?.n || 0, moons: w.moons.length });
// Demo worlds get artefacts too (clearly fake ones), so the showcase has something to find.
  const R = rng(w.h + 99), enc = (s) => new TextEncoder().encode(s), txs = [{ ins: [{ sig: enc(w.h === 0 ? "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks" : "/demo pool/"), wit: [] }], outs: [] }];
  for (let i = 0; i < 6 + Math.floor(w.life * 20); i++) txs.push({ ins: [{ sig: new Uint8Array(0), wit: [] }], outs: [{ v: Math.floor(R() ** 6 * 5e11), s: new Uint8Array([0x51]) }] });
const found = () => store.get("found", {});
function isFound(w, i) { return (found()[w.h]M
 || []).includes(i); }
function markFound(w, i) {
  if (S.demo) return;
  const f = found(); f[w.h] = [...new Set([...(f[w.h] || []), i])]; store.set("found", f);
function updateScanBtn() {
  const w = S.world, n = w?.arts?.filter((a) => a.kind !== "bounty").length || 0, got = n ? w.arts.filter((a, i) => a.kind !== "bounty" && isFound(w, i)).length : 0;
  $("scanBtn").hidden = !n;
  $("scanN").textContent = `${got}/${n}`;
// Scan: swing the camera to the nearest artefact not yet found, and show what it is.
  const w = S.world;
  if (!w?.arts?.length) return;
  const view = norm(S.mode === "fly" ? cam.fly.dir : [Math.cos(cam.pitch) * Math.sin(cam.yaw), Math.sin(cam.pitch), Math.cos(cam.pitch) * Math.cos(cam.yaw)]);
  let best = -1, bd = -2;
  w.arts.forEach((a, i) => { const d = dot(a.dir, view) - (isFound(w, i) ? 3 : 0); if (d > bd && !(i === S.openArt)) { bd = d; best = i; } });
  if (best < 0) return;
  focusArt(best); openArt(best);
// Swing the camera to an artefact (in orbit: come in at an angle M
so the pillar stands up against the horizon).
function focusArt(i) {
  const a = S.world.arts[i];
  if (S.mode === "fly") { cam.fly.dir = norm(rotAxis(a.dir, norm(cross(a.dir, [0, 1, 0.01])), 0.25)); cam.fly.head = norm(sub(a.dir, cam.fly.dir)); }
  else if (a.kind === "district") {   // a district is best seen from straight above, the whole of it in view
    cam.auto = false; cam.yaw = Math.atan2(a.dir[0], a.dir[2]); cam.pitch = clamp(Math.asin(clamp(a.dir[1], -0.95, 0.95)), -1.3, 1.3);
    cam.tDist = clamp(1.3 +M
 (S.world.district?.span || 0.3) * 2.8, 1.6, 3);
  } else { cam.auto = false; cam.yaw = Math.atan2(a.dir[0], a.dir[2]) + 0.55; cam.pitch = clamp(Math.asin(clamp(a.dir[1], -0.95, 0.95)) - 0.2, -1.3, 1.3); cam.tDist = Math.min(cam.tDist, 2.3); }
function stepArt(d) {
  const w = S.world, n = w?.arts?.length;
  const i = ((S.openArt < 0 ? -1 : S.openArt) + d + n) % n;
  focusArt(i); openArt(i);
// The inscription ID is the transaction's ID + "i0" (the first envelope in a transaction is inscriptioM
async function txidOf(tx) {
  const h = new Uint8Array(await crypto.subtle.digest("SHA-256", await crypto.subtle.digest("SHA-256", join(tx.raw))));
  return [...h.reverse()].map((x) => x.toString(16).padStart(2, "0")).join("");
const contentUrl = (a) => api(`/content/${a.id}`);
function heroHTML(a, full) {
  const hint = full ? "" : '<span class="zoomHint">
 tap to enlarge</span>';
  const src = a.img || (a.id && /^image\//.test(a.ct || "") ? contentUrl(a) : "");
  if (src) return `<img src="${esc(src)}" M
alt="${esc(a.title)}" />${hint}`;
  if (a.text && a.text.trim().length <= 48 && !/\n/.test(a.text.trim())) return `<div class="big" style="color:${kindCol(a.kind)}">${esc(a.text.trim())}<small>${a.bitmap ? "A Bitmap claim, inscribed in its own block" : "Inscribed as text"}</small></div>${hint}`;
  if (a.text) return `<pre>${esc(a.text)}</pre>${hint}`;
  if ((a.kind === "crystal" || a.kind === "cursed") && a.id) return `<iframe sandbox="allow-scripts" src="${esc(contentUrl(a))}" title="${esc(a.title)}"></iframe>${hiM
  const w = S.world, [big, small] = {
`, `Left by the miner inside block ${fmt(w.h)}`],
    monolith: [a.title, `A rune etched in block ${fmt(w.h)}`],
    beacon: [a.title, a.detail], whale: [a.title, a.detail],
    crystal: [a.ct || "Inscription", a.tx && !S.demo ? "Loading the inscription
 ${a.title}`, a.detail],
 ${a.title}`, `${fmt(a.parcels || 0)} parcels
 every transaction in this block is a plot of land`],
| [a.title, a.detail];   // stamps, TAP, NAT, Alkanes, Atomicals, BRC-420, cursed
  return `<div class="big" style="color:${kindCol(a.kind)}">${esc(big)}<small>${esc(small)}</small></div>${hint}`;
// Small pixel art is scaled up crisp; photos stay smooth.
function crisp(el) { el.querySelectorAll("img").forEach((im) => { const f = () => im.classList.toggle("px", im.naturalWidth > 0 && im.naturalWidth < 320); im.complete ? f() : (im.onload = f); }); }
function factsHTML(a, was) {
  const w = S.world, row = (k, v) =M
> (v == null || v === "" ? "" : `<div><dt>${esc(k)}</dt><dd>${esc(v)}</dd></div>`);
  return row("What", KINDS[a.kind].name) + row("Block", `${fmt(w.h)}
 ${w.name}`) + row("Transaction", a.ti != null ? `#${fmt(a.ti)} in the block` : null) +
    row("Rune ID", a.kind === "monolith" ? `${w.h}:${a.ti}` : null) +
    row("Parcels", a.parcels ? `${fmt(a.parcels)}
 one for every transaction` : null) +
    row("Biggest parcel", a.biggest ? `#${fmt(a.biggest.ti)}
 ${fmt(a.biggest.bytes)} bytes` : null) + row("ParcelM
 0", a.parcels ? "The coinbase, glowing gold" : null) +
    row("Protocol", a.proto || null) + row("Rarity", a.ship ? SHIPS[a.ship].rarity : null) + row("Your hangar", a.ship ? (S.demo ? "Ships aren't kept in the demo" : S.ship === a.ship ? "Flying it now" : "Unlocked
 fly it any time") : null) + row("Bitmap", a.bitmap ? `A ${w.h}.bitmap claim, inscribed in its own block` : null) +
    row("Content", a.ct ? `${a.ct}${a.size ? `
 ${a.size >= 1024 ? (a.size / 1024).toFixed(1) + " KB" : a.size + " bytes"}` : ""}`M
    row("Inscription", a.num != null ? `#${fmt(a.num)}` : a.tx && !S.demo && !a.looked ? "looking it up
" : null) + row("Inscription ID", a.id || null) +
    (a.kind === "bounty" ? "" : row("Your passport", S.demo ? "Not kept in the demo" : was ? "Found before" : "New find!"));
const titleOf = (a) => (a.bitmap ? `${S.world.h}.bitmap` : "") + ((a.kind === "crystal" || a.kind === "cursed") && a.num != null ?`${a.bitmap ? "
 " : ""}Inscription #${fmt(a.num)}` : a.bitmap ? "" : a.title);
  const w = S.world, a = w.arts[i], k = KINDS[a.kind], was = isFound(w, i), n = w.arts.length;
  S.openArt = i; if (a.kind !== "bounty") markFound(w, i); updateScanBtn(); buildArtBuffers(w);   // (a bounty comes and goes: not a find)
  $("artShape").innerHTML = shapeSvg(a.kind, "shape");
  $("artKind").textContent = `${k.name}${a.kind === "bounty" ? "
 Silk Road job" : S.demo ? "" : was ? "
 new find!"}`; $("artKind").style.color = kindCol(a.kind);
  $("artTitle").textContent = titlM
  $("artHero").innerHTML = heroHTML(a, false); crisp($("artHero"));
  $("artFacts").innerHTML = factsHTML(a, was);
  $("artPos").textContent = `${i + 1} / ${n}`;
  if (a.ship && unlockShip(a.ship)) toast(`
 New ship unlocked: the ${SHIPS[a.ship].name}!`);
  const toGlobe = a.kind === "district" && !S.demo;
  $("artGlobe").hidden = !toGlobe; if (toGlobe) $("artGlobe").href = api(`/content/${GLOBE_ID}`) + "#" + w.h;
  $("artEquip").hidden = !a.ship; $("artGo").hidden = (!!a.ship || toGlobe) && isPlay();
emit("find", { height: w.h, index: i, kind: a.kind, title: a.title, detail: a.detail, inscription: a.id || null });
  if (a.ship) { const on = (S.ship ?? "scout") === a.ship; $("artEquip").textContent = on ? "
 Fly this ship"; $("artEquip").disabled = on; }
  $("artCard").hidden = false; document.body.classList.add("artOpen");
  if (!$("viewer").hidden) renderViewer();
  if (a.tx && a.id == null && !S.demo) lookUp(w, a, i, was);
// Work out the inscription ID (needs a secure page for crypto.sM
ubtle), then ask ord for its number.
async function lookUp(w, a, i, was) {
  try { a.id = (await txidOf(a.tx)) + "i" + (a.iidx || 0); } catch { a.id = ""; }   // iN: the Nth inscription in its transaction
  const refresh = (hero) => {
    if (S.world !== w || S.openArt !== i) return;
    if (hero) { $("artHero").innerHTML = heroHTML(a, false); crisp($("artHero")); }
    $("artFacts").innerHTML = factsHTML(a, was);
    $("artTitle").textContent = titleOf(a);
    if (!$("viewer").hidden) renderViewer();
.id) a.looked = true;
  refresh(!a.img && !a.text);
  if (!a.id) return;
  try { const r = await get(`/r/inscription/${a.id}`); if (r && r.number != null) a.num = r.number; } catch {}
function closeArt() { closeViewer(); $("artCard").hidden = true; $("artHero").innerHTML = ""; S.openArt = -1; document.body.classList.remove("artOpen"); }
function openViewer() { if (S.openArt < 0) return; $("viewer").hidden = false; renderViewer(); }
function closeViewer() { $("viewer").hidden =M
 true; $("vStage").innerHTML = ""; delete $("vStage").dataset.html; }   // emptying it also stops any video or sound
function renderViewer() {
  const w = S.world, i = S.openArt, a = w.arts[i], k = KINDS[a.kind];
  $("vShape").innerHTML = shapeSvg(a.kind, "shape");
  $("vKind").textContent = k.name; $("vKind").style.color = kindCol(a.kind);
  $("vTitle").textContent = $("artTitle").textContent;
  const html = heroHTML(a, true);
  if ($("vStage").dataset.html !== html) { $("vStage").innerHTML = html; $("vStage").datM
aset.html = html; crisp($("vStage")); }
  $("vOpen").hidden = !a.id; if (a.id) $("vOpen").href = contentUrl(a);
  $("vFoot").textContent = `${i + 1} of ${w.arts.length} on the world of block ${fmt(w.h)}
 or arrow keys for the next find
// Legend: what is on this world, by shape. Tap one to fly to the next of that kind.
function renderLegend(w) {
  const counts = {};
  (w.arts || []).forEach((a) => (counts[a.kind] = (counts[a.kind] || 0) + 1));
  $("wLegend").innerHTML = Object.keys(KM
INDS).filter((k) => counts[k]).map((k) =>
    `<button type="button" data-kind="${k}" style="color:${kindCol(k)}">${shapeSvg(k)}<span style="color:var(--text)">${counts[k]}</span> ${esc(KINDS[k].short)}</button>`).join("");
$("wLegend").addEventListener("click", (e) => {
  const b = e.target.closest("[data-kind]"), w = S.world;
  if (!b || !w?.arts) return;
  const list = w.arts.map((a, i) => i).filter((i) => w.arts[i].kind === b.dataset.kind);
  const i = list.find((i) => i > S.openArt && !isFound(w, i)) ?? listM
.find((i) => !isFound(w, i)) ?? list.find((i) => i > S.openArt) ?? list[0];
  focusArt(i); openArt(i);
/* ---------- Passport (kept only in this browser) ---------- */
const store = { get(k, d) { try { return JSON.parse(localStorage.getItem("bw." + k)) ?? d; } catch { return d; } }, set(k, v) { try { localStorage.setItem("bw." + k, JSON.stringify(v)); } catch {} } };
  if (S.demo) return;
  const list = store.get("passport", []).filter((x) => x.h !== w.h);
  list.unshift({ h: w.h, name: w.nM
ame, c: climateWord(w.temp), t: Date.now() });
  store.set("passport", list.slice(0, 500)); $("passN").textContent = fmt(Math.min(list.length, 500));
function openPassport() {
  const list = store.get("passport", []);
  $("passSub").textContent = S.demo ? "The passport is off in the demo" : `${fmt(list.length)} of ${fmt(S.tip + 1)} worlds visited
 kept only in this browser`;
  // Places to go next (landmarks not yet visited, today's world, a surprise), then every stamp in block order.
  const seen = new Set(lisM
t.map((p) => p.h)), head = (t) => `<div class="passHead">${esc(t)}</div>`, chip = (h, label, cls = "") => `<button class="chip${cls}" type="button" data-h="${h}">${esc(label)}</button>`;
  const next = LANDMARKS.filter(([h]) => h <= S.tip && !seen.has(h)).map(([h, n]) => chip(h, `
  // the hangar: ships you've found (tap to fly one), and hints for the ones still out there
  const owned = ownedShips(), cur = S.ship ?? store.get("ship", "scout");
  const hangar = head(`Hangar
h} of ${Object.keys(SHIPS).length} ships`) + Object.entries(SHIPS).map(([id, s]) => owned.includes(id)
    ? `<button class="chip go${id === cur ? " on" : ""}" type="button" data-ship="${id}">${id === cur ? "
 "}${esc(s.name)}</button>`
    : `<span class="chip locked" title="${esc(s.hint || "")}">
 ${esc(s.hint || "???")}</span>`).join("");
  // from the creator (the update channel): a notice, a newer version, links
  const extra = (CFG.notice ? `<span class="chip" style="height:M
auto;padding:6px 10px;white-space:normal">
 ${esc(CFG.notice)}</span>` : "") +
    (CFG.latest ? `<a class="chip go" href="${esc(api(`/content/${CFG.latest}`))}" target="_blank" rel="noopener">
 Open the newer Bitcoin Worlds</a>` : "") +
    CFG.links.map((l) => `<a class="chip" href="${esc(api(`/content/${l.id}`))}" target="_blank" rel="noopener">
 ${esc(l.title)}</a>`).join("");
  $("passBody").innerHTML = hangar + (extra ? head("From the creator") + extra : "") + head("Places to go next") + chip(dailyHeigM
 Today's world", " go") + chip("random", "
 Surprise me", " go") + next.join("") +
    head(list.length ? `Stamped
 ${fmt(list.length)} world${list.length === 1 ? "" : "s"}` : "Stamped") +
    (list.length ? [...list].sort((a, b) => a.h - b.h).map((p) => chip(p.h, `${p.name}
 ${fmt(p.h)}`)).join("") : '<span style="color:var(--t3)">No worlds stamped yet
 every world you visit gets a stamp.</span>');
  const hs = seen, cl = new Set(list.map((p) => p.c)), f = found(), nFound = Object.values(f).redM
uce((n, a) => n + a.length, 0);
 First steps", list.length >= 1], ["
 10 worlds", list.length >= 10], ["
 100 worlds", list.length >= 100],
 Genesis pilgrim", hs.has(0)], ["
 all halvings", [210000, 420000, 630000, 840000].every((h) => hs.has(h))],
 Ice walker", cl.has("Frozen")], ["
 Fire walker", cl.has("Molten") || cl.has("Hot")],
 10 artefacts", nFound >= 10], ["
 Rune hunter", Object.keys(fM
).some((h) => Number(h) >= 840000)],
  $("badges").innerHTML = badges.map(([n, got]) => `<span class="badge${got ? " got" : ""}">${esc(n)}</span>`).join("");
  $("passport").hidden = false;
$("passBody").addEventListener("click", (e) => {
  const sb = e.target.closest("[data-ship]");
  if (sb) { equipShip(sb.dataset.ship); openPassport(); return; }
  const b = e.target.closest("[data-h]");
  $("passport").hidden = true;
  visit(b.dataset.h === "random" ? Math.floor(Math.random() * (S.tip + M
1)) : +b.dataset.h, { warp: true });
$("passGo").addEventListener("click", () => { const v = $("passIn").value.trim(); if (!v) return; $("passport").hidden = true; $("hIn").value = v; $("passIn").value = ""; $("hGo").click(); });
$("passIn").addEventListener("keydown", (e) => { if (e.key === "Enter") $("passGo").click(); });
/* ---------- Visiting ---------- */
async function visit(h, opts = {}) {
  h = Math.round(Number(h));
  if (!(h >= 0) || h > S.tip) return toast(h > S.tip ? `Block ${fmt(h)} hasn't been M
mined yet` : "Pick a block number");
  $("loading").hidden = false; $("loading").textContent = `Charting the world of block ${fmt(h)}
  let b = S.info.get(h);
  try { if (!b) { b = await get(`/r/blockinfo/${h}`); S.info.set(h, b); } }
  catch (e) { $("loading").hidden = true; return toast(`Couldn't read block ${fmt(h)}`); }
  const w = worldFrom(b);
  closeArt(); w.arts = []; w.moons = []; w.artLines = 0; $("wLegend").innerHTML = "";
  S.flownTo = opts.flown ? h : null; S.portNear = false; $("pirate").hidden =M
 true; portPrompt();
  S.world = w; S.mode = "orbit"; cam.tDist = 3.4; cam.auto = true; cam.pitch = 0.25;
  // Arrive on the sunlit side, a little off the sun so the day/night line (and city lights) are in view.
  cam.yaw = Math.atan2(Math.cos(w.sunAng), Math.sin(w.sunAng)) + 0.75;
  w.arriveYaw = cam.yaw;   // the Bitmap district is laid out where you arrive
  cam.fly.dir = norm([Math.cos(w.sunAng + 0.4), 0.3, Math.sin(w.sunAng + 0.4)]); cam.fly.head = norm(cross([0, 1, 0], cam.fly.dir));
  $("flyBtn").classList.rM
emove("on"); $("flyBtn").firstChild.textContent = "
 "; $("flyBtn").querySelector(".lbl").textContent = "Fly over";
  $("flyPad").hidden = true; document.body.classList.remove("flying"); keys.clear(); cam.fly.speed = 0.06; cam.fly.alt = 0.16;
  $("wName").textContent = w.name;
  $("wSub").textContent = `World of block ${fmt(h)}
  $("wTag").hidden = !w.mark; $("wTag").textContent = w.mark ? `
 Landmark: ${w.mark[1]}` : "";
  const stat = (i, title, detail) => `<div class="stat"><i>${i}</i><div><M
b>${esc(title)}</b><span>${esc(detail)}</span></div></div>`;
  $("wStats").innerHTML =
", climateWord(w.temp), w.med ? `Fees ran at ${fmt(w.med)} sat/vB` : "No fee market yet
 a young, cold world") +
", lifeWord(w.life), `${fmt(w.txs)} transaction${w.txs === 1 ? "" : "s"}`) +
", terrainWord(w.rough), `Mining difficulty ${compact(b.difficulty)}`) +
", w.clouds > 0.55 ? "Stormy skies" : w.clouds > 0.4 ? "Cloudy" : "Clear skies", "From the block's hash") +
", `${w.size > 1.08 ? "Large" : w.size > 0.98 ? "Medium" : "Small"} world`, `${b.total_size >= 1e6 ? (b.total_size / 1e6).toFixed(2) + " MB" : Math.max(0.1, b.total_size / 1e3).toFixed(1) + " KB"} block`) +
", `Mined ${date(b.timestamp)}`, `Sun position from the time it was mined`);
  $("globeBtn").href = api(`/content/${GLOBE_ID}`) + "#" + h;
  $("globeBtn").hidden = S.demo;
  showWorld(); stamp(w); soundFor(w); updateScanBtn(); uiShow();
  emit("world", { height: h, bitmap: `${h}.bitmap`, nM
ame: w.name, landmark: w.mark?.[1] || null, demo: S.demo });
  if (opts.warp) {   // arrive out of hyperspace: star streaks, then the planet rushes up from far away
    const wp = $("warp"); wp.hidden = true; void wp.offsetWidth; wp.hidden = false;
    clearTimeout(visit.warpT); visit.warpT = setTimeout(() => (wp.hidden = true), 1200);
  try { history.replaceState(null, "", location.pathname + location.search + "#" + h + (location.hash.match(/&(demo|data|tour|kiosk)\b/g) || []M
).join("")); } catch {}   // keep the link's flags
  $("loading").hidden = true;
function toggleFly() {
  S.mode = S.mode === "fly" ? "orbit" : "fly";
  const on = S.mode === "fly";
  $("flyBtn").classList.toggle("on", on); $("flyBtn").firstChild.textContent = on ? "
  $("flyBtn").querySelector(".lbl").textContent = on ? "Orbit" : "Fly over";
  $("flyPad").hidden = !on; document.body.classList.toggle("flying", on); keys.clear(); cam.fly.turn = cam.fly.climb = 0;
  if (on) toast(isPlay(M
) ? TOUCH_HINT : "W faster
function updateFlyPad() {
  const f = cam.fly, pct = (v) => `${Math.round(clamp(v, 0, 1) * 100)}%`;
  $("spdBar").style.width = pct(f.speed / FLY.top); $("altBar").style.width = pct((f.alt - FLY.min) / (FLY.max - FLY.min));
  for (const b of $("pad").children) b.classList.toggle("on", keys.has(b.dataset.k));
// Hold-to-fly buttons (touch or mouse); releasing anywhere lets go.
$("pad").addEventListener("pointerdown", (e) => {M
 const b = e.target.closest("[data-k]"); if (!b) return; e.preventDefault(); keys.add(b.dataset.k); try { b.setPointerCapture(e.pointerId); } catch {} });
for (const ev of ["pointerup", "pointercancel", "lostpointercapture"]) $("pad").addEventListener(ev, (e) => { const b = e.target.closest("[data-k]"); if (b) keys.delete(b.dataset.k); });
$("pad").addEventListener("contextmenu", (e) => e.preventDefault());
function showWorld() {
  S.scene = "world"; document.body.classList.remove("ringsview"); raidOff(); portPrompM
  $("map").hidden = $("mapBar").hidden = $("picker").hidden = $("spaceLabels").hidden = $("compass").hidden = $("spaceTip").hidden = true; cv.style.cursor = ""; cv.hidden = $("hud").hidden = $("dock").hidden = false;
  $("flyPad").classList.remove("map"); $("flyPad").hidden = S.mode !== "fly"; document.body.classList.toggle("flying", S.mode === "fly");
  resize(); startLoop();
/* ---------- Star map in 3D: fly the ship over the Block Rings universe ----------
   The same layout as the inscribed Bitcoin BlocM
k Rings: every block is a star on one spiral, 2,016 blocks a turn, Genesis at
   the heart, the newest block at the edge, coloured by halving era. It is drawn here so the flight is smooth and nothing loads
   while you fly. Along a ring is hours and days; across the rings is years. "
 Block Rings" opens the real inscribed map
   (search, full block details) at the block under the ship. */
const RP = 2016, RR0 = 0.035;
const rTurns = () => S.tip / RP + 1;
const rPos = (h) => { const t = h / RP, a = 2 * Math.PI * M
(t % 1) - Math.PI / 2, r = RR0 + (1 - RR0) * (t / rTurns()); return [Math.cos(a) * r, Math.sin(a) * r]; };
// Blocks not mined yet, out to block 1,000,000: drawn as grey ghosts beyond the edge; you can fly over and scan them, not land.
const MILLION = 1000000, MAXH = () => Math.max(S.tip, MILLION);
const waitFor = (h) => { const d = ((h - S.tip) * 10) / 1440; return d < 1 ? `~${Math.max(1, Math.round(d * 24))} hours` : `~${fmt(Math.round(d))} day${Math.round(d) === 1 ? "" : "s"}`; };
function rBlockAt(x, y, max = SM
.tip) {   // max: blocks up to the 1,000,000 countdown can be flown over too
  const r = Math.hypot(x, y), f = (((Math.atan2(y, x) + Math.PI / 2) / (2 * Math.PI)) % 1 + 1) % 1, n = Math.round(((r - RR0) / (1 - RR0)) * rTurns() - f);
  let best = 0, bd = Infinity;   // beyond the edge, the nearest block is the newest one
  for (const dn of [-2, -1, 0, 1]) { const h = Math.min(max, Math.round((n + dn + f) * RP)); if (h < 0) continue; const [px, py] = rPos(h), d = Math.hypot(px - x, py - y); if (d < bd) { bd = d; bestM
const UNI = () => rTurns() / (1 - RR0);   // world units per map unit: neighbouring rings sit 1 unit apart
const SPIRAL = `float t=h/2016.,a=6.2831853*fract(t)-1.5707963,r=(.035+.965*t/uTurns)*uU;vec3 p=vec3(cos(a)*r,0.,sin(a)*r);`;
// Every block: drawn straight from its height (gl_VertexID), so there is no buffer of a million positions to build.
const uniP = prog(`#version 300 es
precision highp float;uniform mat4 uVP;uniform vec3 uEye,uEra[7];uniform float uTurns,uU,uPx,uFar,uGain,uStaM
rt,uGhost;out vec3 vC;out float vA;
void main(){float h=float(gl_VertexID)+uStart;${SPIRAL}
  float n=fract(sin(mod(h,4096.)*12.9898+floor(h/4096.)*78.233)*43758.5453),d=distance(uEye,p);
  gl_Position=uVP*vec4(p,1.);
  float s=uPx*min(.3+.22*n,6.2831853*r/2016.*.8)/max(d,.01);gl_PointSize=clamp(s,1.,26.);   // inner rings: dots no bigger than their spacing
  vA=clamp(s*s*.5*uGain,0.,1.)*(.5+.5*n)*(1.-smoothstep(uFar*.5,uFar,d));vC=uEra[int(min(floor(h/210000.),6.))];
  if(uGhost>.5){vC=vec3(.58,.62,.74);vA=min(1.,M
vA*.85+.06*clamp(s,0.,1.));}}`,   // not mined yet: a grey ghost of a star
precision mediump float;in vec3 vC;in float vA;out vec4 o;
void main(){vec2 q=gl_PointCoord-.5;float r=dot(q,q);if(r>.25)discard;o=vec4(vC*(1.+smoothstep(.05,0.,r)*.8),vA*smoothstep(.25,.02,r));}`);
// Marks: landmarks (gold), your stamped worlds (white) and the world you came from (pulsing).
const markP = prog(`#version 300 es
precision highp float;layout(location=0) in vec2 aM;uniform mat4 uVP;uniform vec3 uEye;uniform floM
at uTurns,uU,uPx;out vec3 vC;out float vK;
void main(){float h=aM.x;${SPIRAL}vK=aM.y;float d=distance(uEye,p);gl_Position=uVP*vec4(p,1.);
  vC=vK>6.5?vec3(.97,.58,.1):vK>5.5?vec3(.35,.85,1.):vK>4.5?vec3(.45,1.,.6):vK>3.5?vec3(.82,.86,1.):vK>2.5?vec3(.45,.95,1.):vK>1.5?vec3(1.,.95,.78):vK>.5?vec3(.86,.95,1.):vec3(1.,.78,.36);
  gl_PointSize=vK>6.5?clamp(uPx*3.2/max(d,.01),30.,80.):vK>4.5?clamp(uPx*2.2/max(d,.01),12.,64.):clamp(uPx*(vK>2.5?2.8:vK>1.5?2.4:vK>.5?1.4:2.)/max(d,.01),vK>2.5?22.:vK>1.5?16.:7.,80.);}`,
precision highp float;in vec3 vC;in float vK;uniform float uTime;out vec4 o;
  if(vK>6.5){   // a block bounty: an orange Bitcoin coin with a soft pulsing halo
    vec2 q=vec2(gl_PointCoord.x-.5,.5-gl_PointCoord.y)*2.4;float d=length(q)-.8,aa=fwidth(d)*1.2;
    float b=sdBTC(mat2(.97,-.24,.24,.97)*q*1.35)/1.35-.08,ab=fwidth(b)*1.2;
    vec3 c=mix(mix(vec3(.85,.42,.02),vec3(1.,.72,.26),q.y*.4+.5),vec3(1.),smoothstep(ab,-ab,b));
    float a=smoothstep(aa,-aa,d),halo=exp(-max(d,0.)M
*9.)*.55*(.6+.4*sin(uTime*4.));
    if(a+halo<.01)discard;o=vec4(mix(vec3(1.,.6,.15),c,a),max(a,halo));return;}
  float r=length(gl_PointCoord-.5),ring=smoothstep(.06,0.,abs(r-.38))*((vK>1.5&&vK<4.5)||vK>5.5?.55+.45*sin(uTime*4.):.85),core=smoothstep(.15,0.,r);
  float a=max(ring,core);if(a<.01)discard;o=vec4(vC,a);}`);
// At the heart of the universe: a star named Satoshi Nakamoto
 the compass point you can always see and steer home to.
// A camera-facing glow (core, corona and soft rays), kept at least beacon-M
sized on screen however far away you are.
const sunP = prog(`#version 300 es
precision highp float;layout(location=0) in vec2 aC;uniform mat4 uVP;uniform vec3 uC,uR,uUp;uniform float uS;out vec2 vQ;
void main(){vQ=aC;gl_Position=uVP*vec4(uC+(uR*aC.x+uUp*aC.y)*uS,1.);}`,
precision highp float;in vec2 vQ;uniform float uTime,uK;out vec4 o;
void main(){float r=length(vQ),a=atan(vQ.y,vQ.x),pulse=(.92+.08*sin(uTime*1.3))*uK;
  float core=smoothstep(.16,.11,r),glow=exp(-r*5.)*1.1+exp(-r*14.)*.8;
ays=pow(abs(cos(a*2.+uTime*.05)),40.)*smoothstep(1.,.1,r)*.7+pow(abs(cos(a*2.+.785+uTime*.05)),60.)*smoothstep(.7,.05,r)*.35;
  float A=clamp((core+glow+rays)*pulse,0.,1.)*smoothstep(1.,.85,r);if(A<.003)discard;
  o=vec4(mix(vec3(1.,.62,.18),vec3(1.,.97,.86),smoothstep(.5,0.,r))*(1.+core),A);}`);
const SUN = [0, 3, 0];
// Selecting a block from the ship: an energy field wraps the block (shell, circling arcs, core, outgoing ripple)...
const fieldP = prog(`#version 300 es
precision highp float;layout(location=0) in vM
ec2 aC;uniform mat4 uVP;uniform vec3 uC,uR,uUp;uniform float uS;out vec2 vQ;
void main(){vQ=aC;gl_Position=uVP*vec4(uC+(uR*aC.x+uUp*aC.y)*uS,1.);}`,
precision highp float;in vec2 vQ;uniform float uTime,uK;out vec4 o;
void main(){float r=length(vQ),a=atan(vQ.y,vQ.x),t=uTime;
  float shell=exp(-abs(r-.6)*16.)*(.55+.45*sin(a*6.+t*4.)*sin(a*3.-t*2.7));
  float arcs=pow(max(0.,sin(a*3.+t*2.5+sin(r*14.-t*6.)*.7)),22.)*smoothstep(.95,.3,r)*smoothstep(.08,.32,r);
  float core=exp(-r*7.)*.9,ph=fract(t*.8),rM
ipple=exp(-abs(r-ph*.95)*28.)*(1.-ph);
  float A=(shell+arcs+core+ripple*.7)*1.35*uK*smoothstep(1.,.85,r);if(A<.004)discard;
  o=vec4(mix(vec3(.22,.72,1.),vec3(.85,1.,1.),clamp(core+arcs*.5,0.,1.)),clamp(A,0.,1.));}`);
// ...fed by a beam from the underside of the ship, with pulses of light flowing down it.
const tractorP = prog(`#version 300 es
precision highp float;layout(location=0) in vec2 aC;uniform mat4 uVP;uniform vec3 uA,uB,uEye;uniform float uW;out vec2 vT;
void main(){float k=aC.y*.5+.5;vec3 p=mix(uA,uB,kM
),side=normalize(cross(uB-uA,uEye-p));vT=vec2(aC.x,k);
  gl_Position=uVP*vec4(p+side*aC.x*uW*(.6+.4*k),1.);}`,
precision highp float;in vec2 vT;uniform float uTime,uK;out vec4 o;
void main(){float x=abs(vT.x),core=exp(-x*4.5),flow=.5+.5*pow(.5+.5*sin(vT.y*38.-uTime*14.),3.);
  float A=core*flow*1.4*uK*smoothstep(0.,.12,vT.y)*(1.-x);o=vec4(mix(vec3(.3,.8,1.),vec3(1.),exp(-x*16.)),clamp(A,0.,1.));}`);
const uniVao = gl.createVertexArray(), markBuf = gl.createBuffer(), markVao = vao(() => { gl.bindBufM
fer(gl.ARRAY_BUFFER, markBuf); gl.enableVertexAttribArray(0); gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0); });
function buildMarks() {
  LANDMARKS.forEach(([h]) => h <= S.tip && d.push(h, 0));
  STARTS.forEach(([h]) => h <= S.tip && d.push(h, 5));
  if (!S.demo) store.get("passport", []).forEach((p) => p.h <= S.tip && d.push(p.h, 1));
  if (S.world) d.push(S.world.h, 2);
  if (S.tip < MILLION) d.push(MILLION, 4);   // the countdown marker
  const hold = pirate().hold.filter((cM
) => c.to <= S.tip);   // where your cargo is going (Silk Road Space Pirate)
  hold.forEach((c) => d.push(c.to, 6));
  const bo = openBounty();   // a block bounty waiting to be picked up
  if (bo) d.push(bo.pick, 7);
  markN = d.length / 2;
  gl.bindBuffer(gl.ARRAY_BUFFER, markBuf); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(d), gl.DYNAMIC_DRAW);
  $("spaceLabels").innerHTML = '<span class="slabel sun" data-sun="1">
 Satoshi Nakamoto</span>' + LANDMARKS.filter(([h]) => h <= S.tip).map(([h, n]) => `<span claM
ss="slabel" data-h="${h}">${esc(n)}</span>`).join("") +
    STARTS.filter(([h]) => h <= S.tip).map(([h, n, what]) => `<span class="slabel start" data-h="${h}" title="${esc(what)}">
 ${fmt(h)}</span>`).join("") +
    (S.world ? `<span class="slabel here" data-h="${S.world.h}">
 ${esc(S.world.name)}</span>` : "") +
    (S.tip < MILLION ? `<span class="slabel million" data-h="${MILLION}">
 ${waitFor(MILLION)} to go</span>` : "") +
    hold.map((c) => `<span class="slabel M
cargo" data-h="${c.to}" data-aim="1">
 Drop off ${esc(c.goods)}
 ${fmt(c.to)}</span>`).join("") +   // (data-aim: kept at the screen edge when off-screen)
    (bo ? `<span class="slabel cargo bounty" data-h="${bo.pick}" data-aim="1">
 ${fmt(bo.pick)}</span>` : "");
// The ship: x/z on the spiral's plane, alt above it. Speed and turning feel the same as flying over a world.
const sp = { x: 0, z: 0, ang: 0, v: 0, alt: 5, turn: 0, climb: 0, under: -1, barAt: 0, still: 0, info: -1 };
C = { minAlt: 1.2, maxAlt: 900 };
const spTop = () => 10 + sp.alt * 1.4;   // fly higher to go faster
function flyFrom(h) {   // the ship over block h, pointing along the spiral (towards newer blocks)
  const [x, y] = rPos(h), U = UNI(), a = 2 * Math.PI * ((h / RP) % 1) - Math.PI / 2;
  Object.assign(sp, { x: x * U, z: y * U, ang: a + Math.PI / 2, v: 0, turn: 0, climb: 0, under: -1, still: 0, info: -1, aim: null, pick: null, hover: -1 });
function renderSpace(t) {
  const dt = Math.min(0.05, (t - last) / 1000); lM
  const top = spTop(), ease = Math.min(1, dt * 5);
  const hold = touchHold();
  if (keys.has("w") || hold) sp.v = Math.min(top, sp.v + dt * top * 0.7);
  if (keys.has("s")) sp.v = Math.max(0, sp.v - dt * top * 1.2);
  else if (touch.on && !hold) sp.v = Math.max(0, sp.v - dt * top * 4);   // touch: let go and the brakes go on (stopped in about a quarter of a second)
  sp.v = S.wreck ? 0 : Math.min(sp.v, top);   // (no flying while the wreck burns)
  sp.turn += ((keys.has("d") ? 1 : 0) - (keys.has("a") ? 1 M
: 0) + touch.steer - sp.turn) * ease;
  if (touch.steer) sp.aim = null;
  sp.climb += ((keys.has("e") ? 1 : 0) - (keys.has("q") ? 1 : 0) - sp.climb) * ease;
  sp.ang += sp.turn * dt * 1.5;
  if (keys.has("a") || keys.has("d")) sp.aim = null;
  if (sp.aim != null) {   // heading home: swing smoothly round to face the Satoshi Nakamoto star
    const diff = Math.atan2(Math.sin(sp.aim - sp.ang), Math.cos(sp.aim - sp.ang));
    sp.ang += diff * Math.min(1, dt * 2.5);
    if (Math.abs(diff) < 0.01) sp.aim = null;
p.alt = clamp(sp.alt * Math.exp(sp.climb * dt * 0.9), SPC.minAlt, SPC.maxAlt);
  sp.x += Math.cos(sp.ang) * sp.v * dt; sp.z += Math.sin(sp.ang) * sp.v * dt;
  {   // the universe ends at the newest block (and begins at Genesis): ease back if you fly off the spiral
    const [bx, by] = rPos(rBlockAt(sp.x / U, sp.z / U, MAXH())), d = Math.hypot(sp.x - bx * U, sp.z - by * U);
    if (d > 1.6) { const k = (d - 1.6) / d; sp.x -= (sp.x - bx * U) * k; sp.z -= (sp.z - by * U) * k; }
.cos(sp.ang), 0, Math.sin(sp.ang)], ship = [sp.x, sp.alt + Math.sin(t / 500) * 0.04, sp.z];
  // chase camera: low down it sits behind the ship looking ahead; the higher you fly the more it swings above, until it
  // looks almost straight down on the ship and the spiral beneath
  const th = 0.36 + 1.02 * (1 - Math.exp(-sp.alt / 50)), D = 3.4 + sp.alt * 0.05, ahead = 1.2 + sp.alt * 0.004;
  let eye = [ship[0] - F[0] * D * Math.cos(th), ship[1] + D * Math.sin(th), ship[2] - F[2] * D * Math.cos(th)];
ship[0] + F[0] * ahead, ship[1] - 0.3, ship[2] + F[2] * ahead], camUp = [0, 1, 0];
  if (S.cockpit) {   // cockpit: from the pilot's seat, looking ahead and a little down, leaning into turns
    eye = [ship[0] + F[0] * 0.35, ship[1] + 0.12, ship[2] + F[2] * 0.35];
    target = [eye[0] + F[0] * 10, eye[1] - 1.1, eye[2] + F[2] * 10];
    if (tiltOn) camUp = norm(rotAxis([0, 1, 0], F, sp.turn * 0.22));   // (switchable: some feel woozy)
  raidStep(dt, t, F);
  const fov = 1.05, P = persp(fov, cv.width / cv.height,M
 0.05, 4000), V = lookAt(eye, target, camUp), VP = mul(P, V);
  S.spaceCam = { eye, rt: [V[0], V[4], V[8]], up: [V[1], V[5], V[9]], fw: [-V[2], -V[6], -V[10]], fov, aspect: cv.width / cv.height };
  const px = cv.height / 2 / Math.tan(fov / 2), far = 140 + sp.alt * 7;
  gl.bindFramebuffer(gl.FRAMEBUFFER, null); gl.viewport(0, 0, cv.width, cv.height);
  gl.clearColor(0.008, 0.01, 0.02, 1); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
  gl.enable(gl.BLEND); gl.disable(gl.DEPTH_TEST);
  gl.blendFunc(gl.SRC_ALPM
HA, gl.ONE_MINUS_SRC_ALPHA);
  gl.useProgram(starP.p); gl.bindVertexArray(starVao);
  const Rm = new Float32Array(V); Rm[12] = Rm[13] = Rm[14] = 0;
  gl.uniformMatrix4fv(starP.u.uP, false, P); gl.uniformMatrix4fv(starP.u.uRot, false, Rm); gl.drawArrays(gl.POINTS, 0, 2400);
  // every block, additive so the dense heart of the spiral glows
  gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
  gl.useProgram(uniP.p); gl.bindVertexArray(uniVao);
  gl.uniformMatrix4fv(u.uVP, false, VP); gl.uniform3fv(u.uEye, eye); M
gl.uniform1f(u.uTurns, rTurns()); gl.uniform1f(u.uU, U);
  gl.uniform1f(u.uPx, px); gl.uniform1f(u.uFar, far); gl.uniform1f(u.uGain, 1 + sp.alt / 25); gl.uniform3fv(u.uEra, ERA.flatMap((c) => c.map((x) => x / 255)));
  gl.uniform1f(u.uStart, 0); gl.uniform1f(u.uGhost, 0); gl.drawArrays(gl.POINTS, 0, S.tip + 1);
  if (MAXH() > S.tip) { gl.uniform1f(u.uStart, S.tip + 1); gl.uniform1f(u.uGhost, 1); gl.drawArrays(gl.POINTS, 0, MAXH() - S.tip); }   // blocks still to come, up to 1,000,000
  {   // the Satoshi Nakamoto sM
    const dS = Math.hypot(eye[0] - SUN[0], eye[1] - SUN[1], eye[2] - SUN[2]);
    gl.useProgram(sunP.p); gl.bindVertexArray(quadVao);
    gl.uniformMatrix4fv(sunP.u.uVP, false, VP); gl.uniform3fv(sunP.u.uC, SUN);
    gl.uniform3fv(sunP.u.uR, [V[0], V[4], V[8]]); gl.uniform3fv(sunP.u.uUp, [V[1], V[5], V[9]]);
    // far away it is a bright beacon; close in it dims and tightens so it doesn't wash out the blocks around it
    const nearK = clamp((dS - 10) / 140, 0, 1);
    gl.uniform1f(sunP.u.uS, Math.max(6 + 7 * M
nearK, (dS * 46) / px)); gl.uniform1f(sunP.u.uTime, t / 1000);
    gl.uniform1f(sunP.u.uK, 0.35 + 0.65 * nearK);
    gl.drawArrays(gl.TRIANGLES, 0, 6);
    // where the star is on screen (for clicking it
    const cw = VP[3] * SUN[0] + VP[7] * SUN[1] + VP[11] * SUN[2] + VP[15], sz = Math.max(6 + 7 * nearK, (dS * 46) / px);
    S.sunScr = cw > 0.1 ? { x: ((VP[0] * SUN[0] + VP[4] * SUN[1] + VP[8] * SUN[2] + VP[12]) / cw * 0.5 + 0.5) * innerWidth,
      y: (0.5 - (VP[1] * SUN[0] + VP[5] * SUN[1] +M
 VP[9] * SUN[2] + VP[13]) / cw * 0.5) * innerHeight, r: Math.max(26, (sz * 0.3 * px) / dS / dpr) } : null;
  gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
    gl.useProgram(markP.p); gl.bindVertexArray(markVao);
    gl.uniformMatrix4fv(markP.u.uVP, false, VP); gl.uniform3fv(markP.u.uEye, eye); gl.uniform1f(markP.u.uTurns, rTurns()); gl.uniform1f(markP.u.uU, U);
    gl.uniform1f(markP.u.uPx, px); gl.uniform1f(markP.u.uTime, t / 1000);
    gl.drawArrays(gl.POINTS, 0, markN);
g from the ship (stopped): an energy field round the hovered / selected block, fed by a beam from the ship
  if (S.mouse && !S.cockpit && t - (sp.hoverAt || 0) > 90) { sp.hoverAt = t; spaceHover(S.mouse[0], S.mouse[1]); }   // the blocks move under a still mouse while flying
  const fields = [];
  if (sp.pick != null) fields.push([sp.pick, 1]);
  if (sp.hover >= 0 && sp.hover !== sp.pick) fields.push([sp.hover, 0.7]);
  if (fields.length) {
    gl.blendFunc(gl.SRC_ALPHA, gl.ONE); gl.bindVertexArray(quadVao);
nst blockAt3 = (h) => { const [bx, by] = rPos(h); return [bx * U, 0.15, by * U]; };
    const beamTo = blockAt3(sp.pick ?? sp.hover), from = [ship[0], ship[1] - 0.12, ship[2]];
    gl.useProgram(tractorP.p);
    gl.uniformMatrix4fv(tractorP.u.uVP, false, VP); gl.uniform3fv(tractorP.u.uA, from); gl.uniform3fv(tractorP.u.uB, beamTo); gl.uniform3fv(tractorP.u.uEye, eye);
    gl.uniform1f(tractorP.u.uW, Math.max(0.1, (9 * dpr * Math.hypot(beamTo[0] - eye[0], beamTo[1] - eye[1], beamTo[2] - eye[2])) / px)); gl.uniform1fM
(tractorP.u.uTime, t / 1000);
    gl.uniform1f(tractorP.u.uK, sp.pick != null ? 1 : 0.75);
    gl.drawArrays(gl.TRIANGLES, 0, 6);
    gl.useProgram(fieldP.p);
    gl.uniformMatrix4fv(fieldP.u.uVP, false, VP); gl.uniform3fv(fieldP.u.uR, [V[0], V[4], V[8]]); gl.uniform3fv(fieldP.u.uUp, [V[1], V[5], V[9]]); gl.uniform1f(fieldP.u.uTime, t / 1000);
    for (const [h, k] of fields) {
      const c = blockAt3(h), dc = Math.hypot(c[0] - eye[0], c[1] - eye[1], c[2] - eye[2]);
      gl.uniform3fv(fieldP.u.uC, c); gl.uniform1M
f(fieldP.u.uS, Math.max(1.6, (50 * dpr * dc) / px)); gl.uniform1f(fieldP.u.uK, k * (0.85 + 0.15 * Math.sin(t / 160)));
      gl.drawArrays(gl.TRIANGLES, 0, 6);
    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
  // the ship (same craft as the world fly-over), banking into turns and pitching when climbing
  gl.enable(gl.DEPTH_TEST); gl.depthMask(true); gl.clear(gl.DEPTH_BUFFER_BIT);
  let Up = norm(rotAxis([0, 1, 0], F, sp.turn * 0.55)), Fp = F;   // here a positive turn is to the right: lean into itM
  const side = cross(F, Up), pitch = sp.climb * 0.25;
  Fp = norm(rotAxis(F, side, pitch)); Up = norm(rotAxis(Up, side, pitch));
  const Rt = cross(Fp, Up), s = 0.45;
  gl.useProgram(shipP.p); gl.bindVertexArray(currentShip().vao);
  gl.uniformMatrix4fv(shipP.u.uVP, false, VP);
  gl.uniformMatrix4fv(shipP.u.uM, false, new Float32Array([Rt[0] * s, Rt[1] * s, Rt[2] * s, 0, Up[0] * s, Up[1] * s, Up[2] * s, 0, Fp[0] * s, Fp[1] * s, Fp[2] * s, 0, ship[0], ship[1], ship[2], 1]));
  gl.uniform3fv(shipP.u.uSun, norm([0.3,M
 1, 0.2])); gl.uniform3fv(shipP.u.uEye, eye); gl.uniform1f(shipP.u.uTime, t / 1000);
  gl.uniform1f(shipP.u.uFlame, 0.12 + (sp.v / top) * 0.9);
  if (!S.cockpit && !S.wreck) gl.drawArrays(gl.TRIANGLES, 0, currentShip().count);   // (gone while it's blown up)
  drawRaid(VP, V, eye, t);   // raiders, laser fire, explosions
  if (S.cockpit) {   // the crosshair sits where your shots go
    const p = [ship[0] + F[0] * 30, ship[1], ship[2] + F[2] * 30], cw = VP[3] * p[0] + VP[7] * p[1] + VP[11] * p[2] + VP[15];
cw > 0) $("xhair").style.transform = `translate(${(((VP[0] * p[0] + VP[4] * p[1] + VP[8] * p[2] + VP[12]) / cw) * 0.5 + 0.5) * innerWidth}px,${(0.5 - ((VP[1] * p[0] + VP[5] * p[1] + VP[9] * p[2] + VP[13]) / cw) * 0.5) * innerHeight}px)`;
  // labels for landmarks and the world you came from
  for (const el of $("spaceLabels").children) {
    const sun = !!el.dataset.sun, [mx, my] = sun ? [0, 0] : rPos(+el.dataset.h), p = sun ? SUN : [mx * U, 0, my * U];
    const cw = VP[3] * p[0] + VP[7] * p[1] + VP[11] * p[2]M
 + VP[15], d = Math.hypot(p[0] - eye[0], p[1] - eye[1], p[2] - eye[2]);
    if (sun || el.dataset.aim) {   // the Satoshi Nakamoto star (and your cargo's destinations) are never lost: off-screen, the label waits at the screen edge on its side
      const nx = (VP[0] * p[0] + VP[4] * p[1] + VP[8] * p[2] + VP[12]) / Math.abs(cw), ny = (VP[1] * p[0] + VP[5] * p[1] + VP[9] * p[2] + VP[13]) / Math.abs(cw);
      let ex = nx, ey = ny;
      if (cw <= 0.1) {   // behind you: use the compass bearing
 straight behind is M
the bottom edge, behind-left bottom-left,
        const toC = [p[0] - sp.x, p[2] - sp.z], rel = Math.atan2(toC[0] * -F[2] + toC[1] * F[0], toC[0] * F[0] + toC[1] * F[2]);
        ex = Math.sin(rel); ey = Math.cos(rel);
      const limX = Math.max(0.2, 1 - (el.offsetWidth + 24) / innerWidth), limY = ey < 0 ? 0.66 : 0.74;
      const out = cw <= 0.1 || Math.abs(ex) > limX || Math.abs(ey) > 0.86;
      if (out) { const k = 1 / Math.max(Math.abs(ex) / limX, Math.abs(ey) / limY, 1e-6); ex *= k; ey *= k; }
    el.classList.toggle("edge", out); el.style.display = "";
      el.style.transform = `translate(${((ex * 0.5 + 0.5) * innerWidth).toFixed(0)}px,${((0.5 - ey * 0.5) * innerHeight).toFixed(0)}px)`;
    if (cw <= 0.1 || (d > far * 0.8 && !el.classList.contains("million"))) { el.style.display = "none"; continue; }   // the 1,000,000 countdown shows from any distance
    const sx = ((VP[0] * p[0] + VP[4] * p[1] + VP[8] * p[2] + VP[12]) / cw * 0.5 + 0.5) * innerWidth, sy = (0.5 - (VP[1] * p[0] + M
VP[5] * p[1] + VP[9] * p[2] + VP[13]) / cw * 0.5) * innerHeight;
    el.style.display = sx < -100 || sx > innerWidth + 100 || sy < -40 || sy > innerHeight + 40 ? "none" : "";
    el.style.transform = `translate(${sx.toFixed(0)}px,${sy.toFixed(0)}px)`;
  {   // compass: bearing to the Satoshi Nakamoto star relative to the ship's heading (straight up = dead ahead)
    const toC = [-sp.x, -sp.z], dist = Math.hypot(...toC), rings = Math.max(0, dist - RR0 * U), years = (rings * RP) / 52596;
    const rel = Math.atanM
2(toC[0] * -F[2] + toC[1] * F[0], toC[0] * F[0] + toC[1] * F[2]);
    $("compassArrow").setAttribute("transform", `rotate(${((rel * 180) / Math.PI).toFixed(1)})`);
    const txt = rings < 3 ? "You're at the heart of Bitcoin" : `${fmt(Math.round(rings))} rings out
 ~${years < 10 ? years.toFixed(1) : Math.round(years)} years from Genesis
    if ($("compassTxt").textContent !== txt) $("compassTxt").textContent = txt;
  // gauges, pad, and the read-out of the block under the ship
.style.width = `${Math.round((sp.v / top) * 100)}%`;
  $("altBar").style.width = `${Math.round((Math.log(sp.alt / SPC.minAlt) / Math.log(SPC.maxAlt / SPC.minAlt)) * 100)}%`;
  for (const b of $("pad").children) b.classList.toggle("on", keys.has(b.dataset.k));
  const under = rBlockAt(sp.x / U, sp.z / U, MAXH());
  if (sp.pick != null && sp.v > 0.3) { sp.pick = null; buildMarks(); sp.barAt = 0; sp.under = -1; $("spaceTip").hidden = true; }   // flying again: let the selection go
  if (under !== sp.under && t - sp.baM
rAt > 100) { sp.under = under; sp.barAt = t; if (sp.pick == null) setMapSel(under); }
  sp.still = sp.v > 0.3 ? 0 : sp.still || t;
  if (sp.pick == null && sp.still && t - sp.still > 600 && sp.info !== under) { sp.info = under; describeUnder(under); }   // stopped: look the block up once
// Clicking blocks on the star map (when the ship is stopped): follow the click from the camera down to the galaxy's plane.
function spaceGround(x, y) {
  const c = S.spaceCam;
  if (!c) return null;
  const nx = (x / innerWidth)M
 * 2 - 1, ny = 1 - (y / innerHeight) * 2, th = Math.tan(c.fov / 2);
  const d = norm(c.fw.map((f, i) => f + c.rt[i] * nx * th * c.aspect + c.up[i] * ny * th));
  if (d[1] > -1e-4) return null;   // looking above the horizon
  const k = -c.eye[1] / d[1];
  return [c.eye[0] + d[0] * k, c.eye[2] + d[2] * k];
function blockAtScreen(x, y) {
  const g = spaceGround(x, y);
  if (!g) return -1;
  const U = UNI(), h = rBlockAt(g[0] / U, g[1] / U, MAXH()), [bx, by] = rPos(h);
  return Math.hypot(bx * U - g[0], by * U - g[1M
]) < 1.2 ? h : -1;   // only on the spiral itself
function pickBlock(h) {
  sp.pick = h; buildMarks(); setMapSel(h); $("spaceTip").hidden = true;
function spaceHover(x, y) {   // mouse over a block while stopped: the ship reaches out to it (beam + energy field) and a little tag
  const tip = $("spaceTip");
  if (nearSun(x, y)) { sp.hover = -1; tip.textContent = "
 Satoshi Nakamoto"; tip.style.transform = `translate(${x + 14}px,${y + 12}px)`; tip.hidden = false; return; }
  if (h < 0) { tip.hidden = true; return; }
  const b = S.info.get(h);
  tip.textContent = h > S.tip ? `Block ${fmt(h)}
    : `Block ${fmt(h)}${b ? "
 " + date(b.timestamp) : ""}${h === sp.pick ? "
 click to select"}`;
  tip.style.transform = `translate(${x + 14}px,${y + 12}px)`; tip.hidden = false;
async function aimHome() { if (Math.hypot(sp.x, sp.z) > 1) { sp.aim = Math.atan2(-sp.z, -sp.x); toast("Heading for the Satoshi M
$("compass").addEventListener("click", aimHome);
// Satoshi's gift: click the star (PC) to download Bitcoin Worlds as a file. The copy is the newest Bitcoin Worlds (the update
// channel's "latest", else this page), and it carries, in its <head>:
//   bw-home    which ord server it came from, so the copy can read the chain from there (offline it plays the demo)
//   bw-config  the creator's update-channel additions (new protocols, pirate ranks, ships
), which a file can't look upM
//   bw-save    your progress, if you tick the box (a file on your computer has its own, empty storage)
//   bw-rings   Bitcoin Block Rings itself, so its full view works in the copy even with no ord server
const giftHome = () => (S.ord && !S.demo ? S.base || new URL(location.href).origin : "");
const nearSun = (x, y) => { const s = S.sunScr; return !!s && Math.hypot(x - s.x, y - s.y) < s.r; };
function openGift() {
  const home = giftHome(), me = (location.pathname.match(/[0-9a-f]{64}i\d+/) || [])[0];
ere").textContent = home
    ? `Your copy reads Bitcoin from ${home.replace(/^[a-z]+:\/\//, "")}
 the same place you're viewing it now. Offline, it plays the demo.`
    : "There's no Bitcoin server here, so this copy will play the demo (simulated blocks) until it's opened from an ord server.";
  $("giftVer").textContent = (CFG.latest ? "
 You'll get the newest Bitcoin Worlds." : "You'll get this version
 the newest there is.") +
    " Block Rings comes inside it" + (CFG.raw ? ", along with the creator's latM
est additions." : ".");
  $("giftOrig").textContent = me ? `The original lives on-chain forever: inscription ${me}.` : "";
  $("gift").hidden = false;
const jsonInHead = (o) => JSON.stringify(o).replace(/</g, "\\u003c");   // safe inside a <script> block
// a data block for the copy's <head>; the tag is built from pieces so it can't end (or be mistaken for) this page's own script
const dataTag = (type, id, body) => "<" + `script type="${type}" id="${id}">${body}<` + "/script>\n";
async function buildGift(withSaveM
  let html = null, newer = false;
  if (CFG.latest && S.ord) try { const r = await fetch(api(`/content/${CFG.latest}`)); if (r.ok) { html = await r.text(); newer = true; } } catch {}
  if (!html) try { const r = await fetch(location.href.split("#")[0], { cache: "no-store" }); if (r.ok) html = await r.text(); } catch {}
  if (!html) return null;
  // Block Rings: the copy this page carries already, or the inscription itself (or, before inscribing, the file next to this one)
  let rings = $("bw-rings")?.textConteM
  if (!rings) try { const r = await fetch(S.ord ? api(`/content/${RINGS_ID}`) : "blockrings-inscribe.html"); if (r.ok) rings = b64(new TextEncoder().encode(await r.text())); } catch {}
  if (withSave) try { for (let k = 0; k < localStorage.length; k++) { const key = localStorage.key(k); if (/^bw\./.test(key) && key !== "bw.pirateDemo" && key !== "bw.imported") save[key] = localStorage.getItem(key); } } catch {}
  const home = giftHome(), cfg = CFG.raw || (() => { try { return JSOM
N.parse($("bw-config")?.textContent || "null"); } catch { return null; } })();
  const blocks = (home ? `<meta name="bw-home" content="${esc(home)}" />\n` : "") +
    (cfg ? dataTag("application/json", "bw-config", jsonInHead(cfg)) : "") +
    (Object.keys(save).length ? dataTag("application/json", "bw-save", jsonInHead({ stamp: Date.now().toString(36), keys: save })) : "") +
    (rings ? dataTag("text/plain", "bw-rings", rings) : "");
  // only touch the <head> (the page's own code mentions these tags too), replacM
ing what an earlier copy carried
  const end = html.search(/<\/head>/i);
  if (end < 0) return null;
  const head = html.slice(0, end).replace(/<meta name="bw-home"[^>]*>\s*/g, "").replace(/<script type="[a-z/]+" id="bw-(config|save|rings)">[\s\S]*?<\/script>\s*/g, "");
  return { html: head + blocks + html.slice(end), newer, rings: !!rings, cfg: !!cfg, save: Object.keys(save).length };
$("giftClose").addEventListener("click", () => ($("gift").hidden = true));
$("giftGo").addEventListener("click", async () => {
 $("giftGo").disabled = true;
  const g = await buildGift($("giftSave").checked);
  $("giftGo").disabled = false;
  if (!g) return toast("You're already running Bitcoin Worlds as a file on this device
  const a = document.createElement("a");
  a.href = URL.createObjectURL(new Blob([g.html], { type: "text/html" })); a.download = "bitcoin-worlds.html";
  document.body.appendChild(a); a.click();
  setTimeout(() => { URL.revokeObjectURL(a.href); a.remove(); }, 3000);
  $("gift").hidden = true; toast(`
i's gift is on its way${g.newer ? "
 the newest version" : ""}${g.save ? ", with your progress" : ""}
 check your downloads`, 4500);
// A copy that came with a save: bring the progress in, once (anything already kept on this device stays as it is)
function importSave() {
  const el = $("bw-save");
  if (!el) return false;
    const s = JSON.parse(el.textContent);
    if (!s?.keys || localStorage.getItem("bw.imported") === s.stamp) return false;
    for (const [k, v] of Object.entries(s.keys)) if (M
/^bw\.[\w.-]+$/.test(k) && typeof v === "string" && localStorage.getItem(k) == null) localStorage.setItem(k, v);
    localStorage.setItem("bw.imported", String(s.stamp));
    tiltOn = store.get("tilt", true); tiltBtn();
  } catch { return false; }
async function describeUnder(h) {
  if (h > S.tip) return;   // nothing to look up for a block that isn't mined yet
  let b = S.info.get(h);
  try { if (!b) { b = await get(`/r/blockinfo/${h}`); S.info.set(h, b); } } catch { return; }
"space" && (sp.pick != null ? sp.pick === h : sp.under === h)) $("mapSub").textContent = `${h}.bitmap
 mined ${date(b.timestamp)}
 ${fmt(b.transaction_count)} transaction${b.transaction_count === 1 ? "" : "s"}
function landHere() {
  const h = S.scene === "space" ? sp.pick ?? sp.under : mapSel;
  if (h != null && h > S.tip) return toast(`Block ${fmt(h)} hasn't been mined yet
 ${waitFor(h)} to go`);
  if (h != null && h >= 0) visit(h, { warp: true, flown: S.scene === "space" });   // flowM
n by hand: pirate deliveries pay more
/* ---------- The bar under the star map, and the real inscribed Block Rings (embedded) for search and details ---------- */
let mapReady = false, mapSel = null, mapPoll = 0, msgId = 0;
function askRings(cmd, args) {
  return new Promise((res) => {
    const id = ++msgId, h = (e) => { if (e.data?.type === "bitmapRings:result" && e.data.id === id) { removeEventListener("message", h); res(e.data); } };
    addEventListener("message", h);
    try { $("map").contentWindow.postMeM
ssage({ type: "bitmapRings", id, cmd, args }, "*"); } catch { res(null); }
    setTimeout(() => { removeEventListener("message", h); res(null); }, 2500);
function setMapSel(h) {
  if (h != null && h > S.tip) {   // over a ghost star: not mined yet
 look, but no landing
    $("mapTitle").textContent = `
    $("mapSub").textContent = `${h}.bitmap
 ${waitFor(h)} away
 its world doesn't exist yet`;
    $("visitBtn").hidden = true;
st space = S.scene === "space", here = S.world?.h, home = h == null || h === here;
  $("mapTitle").textContent = space && sp.pick === h && h != null ? `
 Block ${fmt(h)} selected`
    : home ? (S.world ? `
 ${S.world.name}` : "
 Star map") : `${space ? "
"} block ${fmt(h)}`;
  $("mapSub").textContent = space
    ? (home && sp.v < 0.3 ? "W faster
 along a ring is hours, across the rings is years" : `${h}.bitmap
 Enter or Land to goM
 down to its world`)
    : home ? "Every star is a Bitcoin block. Tap one, search a height or a date." : `${h}.bitmap
 its world is waiting`;
  $("visitBtn").hidden = home && !S.world;
  $("visitBtn").textContent = isPlay()
 Back" : space ? "Land
 Back to ${S.world?.name || "world"}` : `${space ? "Land" : "Warp"} on world ${fmt(h)}
  $("pilotBtn").textContent = space ? "
  $("pilotBtn").title = space ? "Open the inscribed BM
 search and full block details" : "Fly the ship over the star map";
  if (S.scene === "rings" && h != null) describeRingsPick(h);
// In the Block Rings view, the bar reads out the picked block (on phones Block Rings' own card is off-screen).
async function describeRingsPick(h) {
  let b = S.info.get(h);
  try { if (!b) { b = await get(`/r/blockinfo/${h}`); S.info.set(h, b); } } catch { return; }
  if (S.scene !== "rings" || mapSel !== h) return;
  $("mapTitle").textContent = `
 ${date(b.timestamp)}`;
  $("mapSub").textContent = `${h}.bitmap
 ${fmt(b.transaction_count)} transaction${b.transaction_count === 1 ? "" : "s"}
 ${h === S.world?.h ? "you are here" : "its world is waiting"}`;
function fillStamps() {
  const list = store.get("passport", []).slice().sort((a, b) => a.h - b.h);
  $("mapStamps").hidden = !list.length || S.demo;
  $("mapStamps").innerHTML = `<option value="">Your worlds (${fmt(list.length)})
</option>` + list.map((p) => `<option value="${p.h}">${esc(p.name)}M
 ${fmt(p.h)}</option>`).join("");
// The star map opens in 3D flight, starting over block h (or the world you are on).
function showMap(h) {
  closeArt(); document.body.classList.remove("flying", "ringsview"); $("passport").hidden = true;
  S.scene = "space"; RAID.ui = ""; $("portBtn").hidden = true;
  $("hud").hidden = $("dock").hidden = $("map").hidden = $("picker").hidden = true;
  cv.hidden = $("mapBar").hidden = $("spaceLabels").hidden = $("flyPad").hidden = $("compass").hidden = false; $("flyPad").classLM
  newBounty(S.tip, true);   // the newest block's bounty is up (unless one is still open, or you already took this block's)
  keys.clear(); fillStamps(); buildMarks(); bountyNews(isPlay() && !showMap.hinted ? 3500 : 900);
  const start = Number.isFinite(h) ? h : S.world ? S.world.h : 0;
  flyFrom(start); sp.alt = 5; setMapSel(start);
  $("mapBar").classList.remove("open");
  if (isPlay() && !showMap.hinted) { showMap.hinted = true; toast(TOUCH_HINT); }
  resize(); startLoop();
// While you're on tM
he star map, check the chain each minute: a newly mined block turns its ghost into a real star.
setInterval(async () => {
  if (S.scene !== "space" || S.demo || document.visibilityState !== "visible") return;
  const n = await tipOf(S.base);
  if (n != null && n > S.tip) {
    S.tip = n; buildMarks(); toast(`
 Block ${fmt(n)} was just mined
 a new star is born`); emit("block", { height: n });
    setTimeout(() => newBounty(n), 2600);   //
and it posts a bounty job (Silk Road Space Pirate)
Where Block Rings comes from: the inscription itself, from the ord server serving this page. With no ord server (this
// file opened from a computer before inscribing), the copy of the inscribed file sitting next to it is used instead
// Block Rings then runs its own labelled demo, and selecting blocks in it works just the same.
// A downloaded copy (Satoshi's gift) carries Block Rings inside it, so it works there too.
let ringsBlob = null;
function ringsSrc(h) {
  if (S.ord) return api(`/content/${RINGS_ID}`) M
  const emb = $("bw-rings");
  if (emb && !ringsBlob) try { ringsBlob = URL.createObjectURL(new Blob([Uint8Array.from(atob(emb.textContent.trim()), (c) => c.charCodeAt(0))], { type: "text/html;charset=utf-8" })); } catch {}
  return (ringsBlob || "blockrings-inscribe.html") + "#" + h;
// The real Block Rings, at the block under the ship.
function openRings(h) {
  if (isPlay()) return;   // phones stay in the 3D star map: Block Rings' own menus would crowd the screen
  stopLoop(); keys.clear();
e = "rings"; document.body.classList.add("ringsview"); raidOff(); uiShow(); $("mapBar").classList.remove("open");   // taps on the map can't reach us, so keep the bar showing
  cv.hidden = $("spaceLabels").hidden = $("flyPad").hidden = $("compass").hidden = $("spaceTip").hidden = true; $("map").hidden = false;
  if (!$("map").src) {
    $("map").src = ringsSrc(h);
    setTimeout(async () => { if (!mapReady) { const r = await askRings("status"); if (r?.ok) mapReady = true; else { mapReady = "failed";M
 toast(S.ord ? "Block Rings didn't answer from this ord server" : "Couldn't open blockrings-inscribe.html
 keep it in the same folder as this file"); showMap(h); } } }, 6000);
  } else if (mapReady === true) askRings("select", { height: h });
  // Block Rings sizes itself to its window on load; if that happened while hidden or not laid out yet (some wallet
  // browsers), it would stay blank. A 1px size nudge makes it re-measure; if it still drew nothing, reload it once.
  for (const ms of [400, 1500, 4000]) setM
Timeout(() => { const f = $("map"); if (f.hidden) return; f.style.width = "calc(100% - 1px)"; setTimeout(() => (f.style.width = ""), 80); }, ms);
  healTries = 0; setTimeout(checkMapDrawn, 3200);
  clearInterval(mapPoll);
  mapPoll = setInterval(async () => {
    if ($("map").hidden) return clearInterval(mapPoll);
    const r = await askRings("status");
    if (!r?.ok) return;
    mapReady = true;
    if (r.result.selected != null && r.result.selected !== mapSel) setMapSel(r.result.selected);
 embedded map is blank (its drawing surface was lost or never sized, e.g. it loaded while the app was in the
// background), reload it: up to twice per visit, checking again after each reload and whenever the app comes back.
document.addEventListener("visibilitychange", () => { if (document.visibilityState === "visible" && S.scene === "rings") setTimeout(checkMapDrawn, 1500); });
async function checkMapDrawn() {
  if (healTries >= 2 || $("map").hidden || mapReady !== true || document.visibilityStM
ate !== "visible") return;
  const r = await askRings("snapshot");
  const png = r?.result?.png;
  let blank = png.length < 200;
      const img = new Image(); img.src = png; await img.decode();
      const c = document.createElement("canvas"); c.width = 160; c.height = 160;
      const g = c.getContext("2d"); g.drawImage(img, 0, 0, 160, 160);
      const d = g.getImageData(0, 0, 160, 160).data; let lit = 0;
      for (let i = 0; i < d.length; i += 4) if (d[i] + d[i + 1M
] + d[i + 2] > 45) lit++;
      blank = lit === 0;
    } catch { return; }
  if (!blank || $("map").hidden) return;
  healTries++; mapReady = false; setTimeout(checkMapDrawn, 6000);
  const f = $("map"), h = mapSel ?? S.world?.h ?? 0;
  f.src = "about:blank"; setTimeout(() => (f.src = ringsSrc(h)), 50);
$("pilotBtn").addEventListener("click", () => (S.scene === "space" ? openRings(sp.under >= 0 ? sp.under : mapSel ?? 0) : showMap(mapSel ?? undefined)));
$("mapStamps").addEventListener("change", (e) => {
st v = e.target.value, h = Number(v);
  e.target.value = ""; e.target.blur();
  if (v === "" || !(h >= 0)) return;
  if (S.scene === "space") { flyFrom(h); setMapSel(h); } else { askRings("select", { height: h }); setMapSel(h); }
function showPicker() {
  $("map").hidden = $("mapBar").hidden = true; $("picker").hidden = false; cv.hidden = $("hud").hidden = $("dock").hidden = true;
  $("marks").innerHTML = LANDMARKS.filter(([h]) => h <= S.tip).map(([h, n]) => `<button class="chip" type="button" data-h="${h}">${eM
sc(n)}</button>`).join("");
$("visitBtn").addEventListener("click", () => {
  if (S.world && (mapSel == null || mapSel === S.world.h)) return showWorld();   // back to where you were
async function visitDate(y, m, d) {
  const t = Date.UTC(y, m - 1, d, 12) / 1000;
  if (!(t > 1231000000)) return toast("Bitcoin starts on 3 Jan 2009
 the Genesis world");
  if (t > Date.now() / 1000) return toast("That day hasn't happened yet");
  $("loading").hidden = false; $("loading").textContent = "SearchinM
g the chain for that day
  let lo = 0, hi = S.tip;
    while (lo < hi) {   // first block mined at or after midday UTC that day
      const mid = (lo + hi) >> 1;
      let b = S.info.get(mid);
      if (!b) { b = await get(`/r/blockinfo/${mid}`); S.info.set(mid, b); }
      if (b.timestamp < t) lo = mid + 1; else hi = mid;
  } catch { $("loading").hidden = true; return toast("Couldn't search the chain just now"); }
$("hGo").addEventListener("click", () => {
  const v = $("hIn").valM
ue.trim(), dm = v.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/);
  if (dm) return visitDate(+dm[1], +dm[2], +dm[3]);
  visit(v.replace(/[\s,._]|bitmap/gi, ""));
$("hIn").addEventListener("keydown", (e) => { if (e.key === "Enter") $("hGo").click(); });
$("marks").addEventListener("click", (e) => { const b = e.target.closest("[data-h]"); if (b) visit(+b.dataset.h); });
$("randomW").addEventListener("click", () => visit(Math.floor(Math.random() * (S.tip + 1))));
$("latestW").addEventListener("click", () => visit(S.tip));M
$("backBtn").addEventListener("click", () => showMap());
// Play mode for phones and touch screens: touch flying, a clean screen, extras behind
 (desktop keeps everything visible).
const isPlay = () => document.body.classList.contains("play");
const setPlay = () => document.body.classList.toggle("play", matchMedia("(pointer: coarse)").matches || innerWidth <= 760);
setPlay(); addEventListener("resize", setPlay);
$("moreBtn").addEventListener("click", () => $("dock").classList.toggle("open"));
entListener("click", () => $("mapBar").classList.toggle("open"));
$("wName").addEventListener("click", () => isPlay() && $("hud").classList.toggle("open"));
const TOUCH_HINT = "Hold to fly
 pinch to climb or dive";
$("flyBtn").addEventListener("click", toggleFly);
$("passBtn").addEventListener("click", openPassport);
$("passClose").addEventListener("click", () => ($("passport").hidden = true));
$("soundBtn").addEventListener("click", toggleSound);
$("nextBtn").addEventListener("click", () => S.wM
orld && visit(S.world.h + 1));
$("scanBtn").addEventListener("click", scan);
$("artClose").addEventListener("click", closeArt);
$("artFull").addEventListener("click", openViewer);
$("artHero").addEventListener("click", openViewer);
// The hangar: ships you have found (kept only in this browser). Scout is always yours.
const ownedShips = () => ["scout", ...store.get("ships", []).filter((id) => SHIPS[id] && id !== "scout")];
function unlockShip(id) {   // true the first time
  if (S.demo || ownedShips().includes(id))M
  store.set("ships", [...ownedShips().slice(1), id]); emit("ship", { id, name: SHIPS[id].name, rarity: SHIPS[id].rarity }); return true;
function equipShip(id) {
  if (!SHIPS[id]) return;
  S.ship = id; store.set("ship", id);
  toast(`Now flying the ${SHIPS[id].name}${SHIPS[id].shape === "pizza" ? "
$("artEquip").addEventListener("click", () => {
  const a = S.world?.arts?.[S.openArt];
  if (!a?.ship) return;
  equipShip(a.ship); openArt(S.openArt);
  if (S.mode !== "fly") { closeAM
rt(); toggleFly(); }   // straight into the air to try it
$("artGo").addEventListener("click", () => { if (S.openArt < 0) return; if (S.mode !== "fly") toggleFly(); cam.fly.alt = 0.13; cam.fly.speed = 0.03; focusArt(S.openArt); });
$("artPrev").addEventListener("click", () => stepArt(-1));
$("artNext").addEventListener("click", () => stepArt(1));
$("vBack").addEventListener("click", closeViewer);
$("vPrev").addEventListener("click", () => stepArt(-1));
$("vNext").addEventListener("click", () => stepArt(1));
st dailyHeight = () => Math.floor(Date.now() / 86400000) * 2654435761 % 900000;   // same world for everyone, each day
$("dailyW").addEventListener("click", () => visit(dailyHeight()));
$("dailyM").addEventListener("click", () => visit(dailyHeight(), { warp: true }));
/* ---------- Future protocols: an open slot for rune / ordinal-style creations that don't exist yet ----------
   Through the update channel ("protocols"), up to six new protocols can be taught to Worlds without re-inscribing it.
   Each gets its owM
n pin (its icon, in its colour), legend entry, find card and, optionally, a star-map start flag.
   How one is recognised is one simple rule
     "json": {"p": "xyz"}       an inscription whose JSON has these fields (like BRC-20's "p":"brc-20")
     "text": "xyz:"             an inscription whose text starts with this
     "contentType": "model/"    an inscription of this content type
     "envelope": "xyz"          a new witness envelope tag (like Atomicals' "atom" or Alkanes' "BIN")
"6a5d"         an output script starting with these bytes (hex)
     "opreturnText": "xyz"      OP_RETURN data starting with this text
     "runeField": 16383         a runestone carrying this field (like Alkanes' protostones)
   For a protocol that needs real decoding, an add-on module (JavaScript) can be inscribed as a CHILD of Worlds and listed
   in "modules": while it loads it may call bitmapWorlds.addProtocol({... detect(ctx)}). Only children of this inscription
   are loaded, so only whoever holds Worlds canM
let modOpen = false;   // add-on modules may register protocols only while they are loading
const fillIn = (tpl, o) => String(tpl).replace(/\{(\w+)\}/g, (_, k) => (o[k] == null || typeof o[k] === "object" ? "" : String(o[k]).slice(0, 40))).replace(/\s+/g, " ").trim();
function protoPin(icon, col) {   // the protocol's badge for its pins: its icon on a dark tile (the pin frames it in its colour)
    const c = document.createElement("canvas"); c.width = c.height = 64;
 g = c.getContext("2d"); g.fillStyle = "#0b0d14"; g.fillRect(0, 0, 64, 64);
    g.fillStyle = `rgb(${col.map((v) => Math.round(v * 255))})`; g.font = "bold 38px system-ui,'Segoe UI Emoji','Apple Color Emoji',sans-serif";
    g.textAlign = "center"; g.textBaseline = "middle"; g.fillText(icon, 32, 35);
    return c.toDataURL("image/png");
  } catch { return null; }
const RULES = ["json", "opreturnJson", "text", "contentType", "envelope", "opreturn", "opreturnText", "runeField"];
function addProtocol(def, viaModule)M
  if (PROTOS.length >= 8 || !def || typeof def !== "object") return false;   // CRC-20 + ICO-20 (built in) + six open slots
  const id = String(def.id || "").replace(/[^a-z0-9-]/gi, "").slice(0, 24);
  if (!id || PROTOS.some((p) => p.id === id)) return false;
  const m = def.match && typeof def.match === "object" ? def.match : {}, detect = viaModule && typeof def.detect === "function" ? def.detect : null;
  const rule = detect ? null : RULES.find((k) => m[k] != null && (!/json/i.test(k) || typeof m[k] === "objecM
  if (!rule && !detect) return false;
  const col = Array.isArray(def.color) && def.color.length === 3 && def.color.every((v) => typeof v === "number" && v >= 0 && v <= 1) ? def.color : [0.85, 0.85, 0.9];
  const kind = `x${PROTOS.length + 1}`, name = String(def.name || id).slice(0, 32), icon = String(def.icon || "
  Object.assign(KINDS[kind], { name, short: String(def.short || name).slice(0, 16), icon, col });
  const p = { id, kind, name, rule, m, detect, from: Number.isInteger(def.from) ?M
 def.from : 0, cap: clamp(Number(def.max) || 12, 1, 30),
    title: def.title ? String(def.title).slice(0, 80) : "", detail: def.detail ? String(def.detail).slice(0, 200) : "", pin: def.drawn ? null : protoPin(icon, col) };   // drawn: a built-in with its own logo in the pin shader
  if (rule === "envelope") ENV_TAGS.add(String(m.envelope).slice(0, 16));
  if (rule === "opreturn") p.hex = [...hexToBytes(String(m.opreturn).replace(/[^0-9a-f]/gi, "").slice(0, 64))];
  if (Number.isInteger(def.start)M
 && def.start >= 0 && !STARTS.some(([h]) => h === def.start)) STARTS.push([def.start, name, `first ${name}`]);
// One transaction against the added protocols
 true if it was claimed (an inscription that shouldn't also show as a crystal)
function protoScan(tx, i, envs, ords, add, imgOf) {
  let claimed = false;
  for (const p of PROTOS) {
    if (S.world.h < p.from) continue;
    try { r = p.detect ? protoModule(p, tx, i, envs) : protoRule(p, tx, i, envs, ords, imgOf); } catch {M
    if (r && add(p.kind, p.cap, { pin: r.img ? null : p.pin, proto: p.name, ...r })) claimed ||= !!r.claims;
function protoRule(p, tx, i, envs, ords, imgOf) {
  const m = p.m, at = { tx: fmt(i), block: fmt(S.world.h) };
  const out = (o, extra) => ({ title: fillIn(p.title || (/json/i.test(p.rule) ? "{op} {tick}" : p.name), o) || p.name, detail: fillIn(p.detail || `${p.name} in transaction {tx}`, o), ...extra });
  const fits = (j, want) => j && typeof j === "object" && Object.enM
tries(want).every(([k, v]) => String(j[k] ?? "").toLowerCase() === String(v).toLowerCase());
  if (p.rule === "opreturnJson") {   // JSON in an OP_RETURN output (like CRC-20)
 no inscription needed
    for (const o of tx.outs) {
      if (o.s[0] !== 0x6a) continue;
      const t = latin(join(pushes(o.s, 1, false) || [])), a = t.indexOf("{");
      if (a < 0) continue;
      try { j = JSON.parse(t.slice(a)); } catch {}
      if (fits(j, m.opreturnJson)) return out({ ...at, ...j });
  if (p.rule === "envelope") { const en = envs.find((x) => x.tag === m.envelope); return en ? out({ ...at, kb: (join(en.ps).length / 1024).toFixed(1) }) : null; }
  if (p.rule === "runeField") return runestoneOf(tx)?.fields?.has(Number(m.runeField)) ? out(at) : null;
  if (p.rule === "opreturn") return tx.outs.some((o) => p.hex.length && p.hex.every((b, k) => o.s[k] === b)) ? out(at) : null;
  if (p.rule === "opreturnText") return tx.outs.some((o) => o.s[0] === 0x6a && latin(join(pushes(o.s, 1, falsM
e) || [])).startsWith(String(m.opreturnText))) ? out(at) : null;
  const first = ords[0];
  if (!first) return null;
  const e = parseOrd(first.ps), ct = e.ct.split(";")[0].trim().toLowerCase(), base = { tx, ct, size: e.body.length, claims: true };
  if (p.rule === "contentType") return ct.startsWith(String(m.contentType).toLowerCase()) ? out({ ...at, type: ct }, { ...base, img: imgOf(ct, e.body) }) : null;
  if (e.body.length > 4000) return null;
  const txt = new TextDecoder().decode(e.body).trim();
=== "text") return txt.startsWith(String(m.text)) ? out({ ...at, text: txt.slice(String(m.text).length, 40) }, { ...base, text: txt.slice(0, 2000) }) : null;
  try { j = JSON.parse(txt); } catch { return null; }
  if (!j || typeof j !== "object") return null;
  return fits(j, m.json) ? out({ ...at, ...j }, base) : null;
const PROTO_HELP = Object.freeze({ parseOrd, envelopes, runestoneOf, pushes, join, latin, cbor, b64, hexToBytes });
function protoModule(p, tx, i, envs) {
  const r = p.detect({ tx, indexM
: i, height: S.world.h, envelopes: envs, help: PROTO_HELP });
  if (!r || typeof r !== "object") return null;
  const img = typeof r.img === "string" && /^data:image\/(png|jpeg|gif|webp|svg\+xml);base64,/.test(r.img) && r.img.length < 400000 ? r.img : null;
  return { title: String(r.title || p.name).slice(0, 60), detail: String(r.detail || `${p.name} in transaction ${fmt(i)}`).slice(0, 300), img, claims: !!r.claims, ...(r.claims && envs.some((x) => x.tag === "ord") ? { tx } : {}) };
// Built in: CRC-20, the coveM
nant token protocol ($LEAF, crc.garden)
 JSON in an OP_RETURN output, {"p":"crc-20", "op":
// "deploy" | "mint" | "transfer", "tick":
}. The LEAF deploy crc.garden's indexer counts, checked on chain: block 967,485,
// transaction 783 (an earlier deploy attempt sits in block 967,475, transaction 82).
addProtocol({ id: "crc20", name: "CRC-20", short: "CRC-20", icon: "
", color: [0.5, 1, 0.68], match: { opreturnJson: { p: "crc-20" } },
  title: "{op} {tick}", detail: "CRC-20 covenant token
ion {tx}", from: 967000, start: 967485, drawn: true }, false);
// Built in: ICO-20, LEAF's presale before the CRC-20 launch
 the same OP_RETURN JSON, {"p":"ico-20", "op": "deploy" | "mint" |
// "transfer", "tick": "LEAF", "amt": whole LEAF}; LEAF's CRC-20 mints carry one too (the payment). Its deploy, checked on chain:
// block 966,606, transaction 1,042 (nothing earlier from 966,515; samples back to 964,500 found none).
addProtocol({ id: "ico20", name: "ICO-20", short: "ICO-20", icon: "
", color: [1, 0.82, 0M
.4], match: { opreturnJson: { p: "ico-20" } },
  title: "{op} {tick}", detail: "ICO-20 sale record
 {op} {amt} {tick} in transaction {tx}", from: 966000, start: 966606, drawn: true }, false);
async function loadModules(ids, kids) {   // add-on modules: JavaScript children of this inscription, loaded by recursion
  const mine = new Set(kids.map((k) => k.id));
  for (const id of (Array.isArray(ids) ? ids : []).filter((x) => isId(x) && mine.has(x)).slice(0, 4)) {
    await new Promise((res) => { M
const s = document.createElement("script"); s.src = api(`/content/${id}`); s.onload = s.onerror = res; setTimeout(res, 4000); document.head.appendChild(s); });
    modOpen = false;
/* ---------- Silk Road Space Pirate ----------
   A trading game across the worlds. Every world's Bitmap district has a port (its biggest parcel), marked by a gold
   beacon. Fly over it and talk to the vendor there: drop off cargo meant for this world, pick up a job taking goods to
 a short haul, a long haul M
across the rings, or a deep-space run. Fly it there on the star map (the
   cargo's destination is marked), land, find the beacon, drop it off, get paid. Landing from the star map
 pays half again more than jumping. Credits earned set your pirate rank. On some stretches of the rings,
   UFO raiders jump ships carrying cargo: shoot them down (cockpit view, Space /
   fail, your ship blows up: the cargo is lost and you start again at the Satoshi NakaM
moto star. Ranks, goods and hold size can be changed later through the update
   channel ("pirate": {tiers, goods, hold}). Progress is kept only in this browser. */
", "Silk bolts", 8], ["
", "Spice crates", 10], ["
", "Sat ore", 12], ["
", "Hash crystals", 16], ["
", "Runestone shards", 14],
", "Ordinal relics", 18], ["
", "Vintage pizza", 6], ["
", "Mempool salt", 5], ["
", "Lightning cells", 15], ["
", "Block-space barrels", 11],
", "Cursed relics", 22, 1], ["
", "Lost keys", 25, 1], ["
", "Dust powder", 18, 1]].map(([icon, name, value, hot]) => ({ icon, name, value, hot: !!hot })),
  // placeholder ranks
 the real tier system can be added later through the update channel
 Stowaway"], [100, "
 Deckhand"], [500, "
 Smuggler"], [2000, "
 Corsair"], [8000, "
 Captain"], [30000, "
 Dread Pirate"], [100000, "
 Pirate Lord of the Silk Road"]].map(([at, name]) => ({ at, name })),
  if (Array.isArray(o.tiers)) {
    const t = o.tiers.filter((x) => Number.isFinite(x?.at) && x.at >= 0 && x.name).slice(0, 40).map((x) => ({ at: Math.floor(x.at), name: String(x.name).slice(0, 40) })).sort((a, b) => a.at - b.at);
    if (t.length) { if (t[0].at > 0) t.unshift({ at: 0, name: PIRATE.tiers[0].name }); PIRATE.tiers = t; }
  if (Array.isArray(o.goods)) {
    const g = o.goods.filter((x) => x?.name && Number.isFinite(x.value) && x.value > 0).slice(0, 60).map((x) => ({ icon: String(x.iM
").slice(0, 4), name: String(x.name).slice(0, 32), value: Math.min(1000, x.value), hot: !!x.hot }));
    if (g.length) PIRATE.goods = g;
  if (Number.isInteger(o.hold) && o.hold >= 1 && o.hold <= 12) PIRATE.hold = o.hold;
const pKey = () => (S.demo ? "pirateDemo" : "pirate");
  if (!PS) { const p = store.get(pKey(), null); PS = p && Number.isFinite(p.credits) && Array.isArray(p.hold) ? p : { credits: 0, hold: [], done: 0, raiders: 0 }; }
  store.set(pKey(), PS); $("pirN").textContent = fmt(PS.credits); $("pirBounty").hidden = !openBounty();
  const w = S.world;
  if (w?.arts && bountyArt(w)) { if (S.openArt >= w.arts.length) closeArt(); buildArtBuffers(w); renderLegend(w); updateScanBtn(); }
  if (!$("pirate").hidden) renderPirate();
  if (S.scene === "space") buildMarks();
function rankOf(c) { const t = PIRATE.tiers; let i = 0; while (i + 1 < t.length && c >= t[i + 1].at) i++; return { i, now: t[i], next: t[i + 1] |M
function addCredits(n) {   //
 a promotion message, if this lifts you a rank
  const p = pirate(), before = rankOf(p.credits).i;
  const r = rankOf(p.credits);
  return r.i > before ? `
 Promoted: ${r.now.name}!` : "";
// The port: the district's biggest parcel (where its shader puts it on the ground)
function portOf(D) { const x = D.data[D.biggest.ti * 4], y = D.data[D.biggest.ti * 4 + 1]; return norm(D.center.map((c, i) => c + (D.t1[i] * x + D.t2[i] * y) * D.span)); M
const HAULS = [["Short haul", 20, 400], ["Long haul", 2016, 30000], ["Deep-space run", 50000, 300000]];
function offersAt(h, done) {   // the same jobs for everyone at this port, until you complete a delivery
  return HAULS.map(([kind, lo, hi], i) => {
    const R = rng(h * 7919 + done * 104729 + i * 31 + 1), hot = R() < 0.15;
    let pool = PIRATE.goods.filter((g) => g.hot === hot);
    if (!pool.length) pool = PIRATE.goods;
    const g = pool[Math.floor(R() * pool.length)], d = Math.round(lo + (hi - lo) * R() *M
    let to = R() < 0.5 ? h - d : h + d;
    if (to < 0 || to > S.tip) to = 2 * h - to;
    to = clamp(to, 0, S.tip);
    if (to === h) to = h > 0 ? h - 1 : 1;
    const pay = Math.round(g.value * (1 + Math.log2(1 + Math.abs(to - h) / 144)) * (g.hot ? 2 : 1));
    return { id: `${h}-${done}-${i}`, kind, icon: g.icon, goods: g.name, hot: g.hot, from: h, to, pay };
const cargoFor = (h) => pirate().hold.filter((c) => c.to === h);
const docked = () => S.scene === "world" && S.mode === "fly" && !!S.portNeM
ar && !!S.world?.port;
const farTxt = (d) => (d >= 2016 ? `~${fmt(Math.round(d / 2016))} ring${Math.round(d / 2016) === 1 ? "" : "s"}` : `${fmt(d)} blocks`);
// Each port's vendor, drawn from the block number: a few shapes, a few hundred bytes
function vendorOf(h) {
  const R = rng(h * 31 + 7), pick = (a) => a[Math.floor(R() * a.length)], hue = Math.floor(R() * 360);
  const skin = `hsl(${hue} 45% 52%)`, dark = `hsl(${hue} 40% 24%)`, glow = `hsl(${(hue + 160) % 360} 90% 65%)`;
  const name = pick(["Vex", "Mori", "KM
ade", "Ixa", "Tuck", "Sable", "Orro", "Nim", "Zed", "Halloran", "Pip", "Juno", "Quill", "Rook", "Brix", "Oona"]);
  const role = pick(["fence", "trader", "smuggler", "quartermaster", "dock boss", "broker"]);
  const eyes = 1 + Math.floor(R() * 3), rx = 19 + R() * 7, ry = 17 + R() * 6, ant = R() < 0.6, tusk = R() < 0.35;
  let s = `<svg viewBox="0 0 80 80" aria-hidden="true"><rect width="80" height="80" rx="12" fill="#0a0e16"/><path d="M14 80Q14 60 40 60Q66 60 66 80Z" fill="${dark}"/>`;
  if (ant) s += `<path d="M34M
 ${40 - ry}L28 10M46 ${40 - ry}L52 10" stroke="${skin}" stroke-width="2.5"/><circle cx="28" cy="10" r="3" fill="${glow}"/><circle cx="52" cy="10" r="3" fill="${glow}"/>`;
  s += `<ellipse cx="40" cy="40" rx="${rx.toFixed(1)}" ry="${ry.toFixed(1)}" fill="${skin}"/>`;
  for (let i = 0; i < eyes; i++) { const x = 40 + (i - (eyes - 1) / 2) * (eyes === 3 ? 10 : 12); s += `<circle cx="${x}" cy="36" r="4.5" fill="#fff"/><circle cx="${x + 1}" cy="37" r="2.2" fill="#111"/>`; }
  s += `<path d="M31 48Q40 ${R() < 0.5 ? 54 : 4M
4} 49 48" stroke="${dark}" stroke-width="2.5" fill="none" stroke-linecap="round"/>`;
  if (tusk) s += `<path d="M33 49l2 6 2-6M43 49l2 6 2-6" fill="#f2ead8"/>`;
  return { name, role, svg: s + "</svg>" };
const SAY = { hello: ["What are you hauling, pirate?", "Credits talk. Cargo walks.", "Got jobs. No questions asked.", "Mind the raiders out past the rings.", "Another day, another block.", "You look like you can fly. Can you?"],
  take: ["Don't let the raiders near it.", "Pleasure doing business.", "Fly it by haM
 it pays better.", "Off you go. Quietly."],
  drop: ["Fine work. Here's your pay.", "Right where it belongs. Credits sent.", "Not a scratch on it. Nice."] };
function openPirate() { if (docked()) { cam.fly.speed = 0; S.vSay = null; } renderPirate(); $("pirate").hidden = false; portPrompt(); uiShow(); }
function renderPirate() {
  const p = pirate(), r = rankOf(p.credits), w = S.world, head = (t) => `<div class="passHead">${esc(t)}</div>`;
  $("pirSub").textContent = `${r.now.name}
 ${fmt(p.credits)} creditsM
  const pct = r.next ? ((p.credits - r.now.at) / (r.next.at - r.now.at)) * 100 : 100;
  if (docked()) {   // talking to the vendor: drop off, pick up
    const v = vendorOf(w.h), here = cargoFor(w.h), full = p.hold.length >= PIRATE.hold, R = rng(w.h + p.done);
    const bonus = S.flownTo === w.h ? 1.5 : 1, due = here.reduce((n, c) => n + Math.round(c.pay * bonus), 0);
    html += `<div class="vendor">${v.svg}<div><b>${esc(v.name)}
 ${esc(v.role)} of ${w.h}.bitmap</b><p class="saM
${esc(S.vSay || SAY.hello[Math.floor(R() * SAY.hello.length)])}
    if (here.length) html += `<button class="job drop" type="button" data-act="drop">
 Drop off ${here.length} crate${here.length > 1 ? "s" : ""}
 +${fmt(due)} credits${bonus > 1 ? " (flown by hand +50%)" : ""}</button>`;
    const bo = openBounty();
    if (bo && bo.pick === w.h) html += `<button class="job bounty" type="button" data-act="bounty"${full ? " disabled" : ""}><span class="ic">
</span><span><b>${bo.icon} ${M
 block bounty</b><small>Posted by block ${fmt(bo.block)}
 take it to block ${fmt(bo.to)}
 ${farTxt(Math.abs(bo.to - bo.pick))}${full ? "
 your hold is full" : ""}</small></span><span class="pay">${fmt(bo.pay)} cr</span></button>`;
    html += head(full ? "Pick up a job
 your hold is full" : "Pick up a job") + offersAt(w.h, p.done).map((o) => {
      const taken = p.hold.some((c) => c.id === o.id);
      return `<button class="job${o.hot ? " hot" : ""}" type="button" data-act="take" data-id=M
"${o.id}"${taken || full ? " disabled" : ""}><span class="ic">${o.icon}</span><span><b>${esc(o.goods)}${o.hot ? "
 hot" : ""}</b><small>${esc(o.kind)} to block ${fmt(o.to)}
 ${farTxt(Math.abs(o.to - o.from))}${taken ? "
" : ""}</small></span><span class="pay">${fmt(o.pay)} cr</span></button>`;
    html += `<p><b>${esc(r.now.name)}</b>
 ${r.next ? `${fmt(r.next.at - p.credits)} credits to ${esc(r.next.name)}` : "the highest rank there is"}</p><div class="rankBar"><M
b style="width:${pct.toFixed(1)}%"></b></div>`;
    if (S.scene === "world" && w?.port) html += `<p>${cargoFor(w.h).length ? "
 You have cargo for this world. " : ""}The port is the gold beacon on this world's Bitmap district. Fly over it (
 Fly over, then steer to the beam) and your ship holds a hover there
 then pick up or drop off.</p>`;
    else if (S.scene === "world") html += `<p>The port appears once this world's Bitmap district has been charted.</p>`;
  const bo = openBounty();
 pick up, then drop off
 and its button is the next thing to do from where you are
  const onWorld = (h) => S.scene === "world" && w?.h === h, toPort = '<span class="hint">
 fly over the gold beacon</span>';
  if (bo && !(docked() && bo.pick === w.h)) html += head(`
 posted by block ${fmt(bo.block)}`) +
    `<div class="hold"><span><b>Pick up</b> ${bo.icon} ${esc(bo.goods)} at block ${fmt(bo.pick)}<br><small>then drop it off at block ${fmt(bo.to)}
r ${6 - (S.tip - bo.block)} more block${6 - (S.tip - bo.block) === 1 ? "" : "s"}</small></span>` +
    (onWorld(bo.pick) ? toPort : `<button class="btn primary" type="button" data-act="coursebounty" title="Open the star map
 the pick-up is marked">
 Show on star map</button>`) + "</div>";
  html += head(`Cargo hold
 ${p.hold.length} of ${PIRATE.hold}`) + (p.hold.length ? p.hold.map((c) => `<div class="hold"><span><b>Drop off</b> ${c.icon} ${esc(c.goods)}${c.hot ? "
" : ""} at block ${fmt(c.to)}<br><smallM
>${/^bounty-/.test(c.id) ? "
 " : ""}${fmt(c.pay)} cr${onWorld(c.to) ? "
 this world!" : ""}</small></span>` +
    (docked() && onWorld(c.to) ? '<button class="btn primary" type="button" data-act="drop">
 Drop off now</button>' : onWorld(c.to) ? toPort : `<button class="btn" type="button" data-act="course" data-id="${c.id}" title="Open the star map
 the drop-off is marked">
 Show on star map</button>`) +
    `<button class="btn" type="button" data-act="dump" data-id="${c.id}" title="Dump it inM
 space" aria-label="Dump">
</button></div>`).join("") : "<p>Empty. Pick up a job at a port's gold beacon
 block bounty.</p>");
  if (!docked()) html += head("Pirate ranks") + `<div class="marks">${PIRATE.tiers.map((x, i) => `<span class="badge${i <= r.i ? " got" : ""}">${esc(x.name)}
 ${fmt(x.at)}</span>`).join("")}</div>` +
    `<p class="dim">Short hauls pay a little, deep-space runs pay a lot,
 hot cargo pays double. Land from the star map (fly it!) for +50%.
 Raiders hunt ships carryingM
 to fire, or outrun them. Take too much damage and your ship blows up: the cargo is lost and you start again at the Satoshi Nakamoto star. ${fmt(p.done || 0)} deliveries
 ${fmt(p.raiders || 0)} raiders downed
 kept only in this browser.</p>`;
  $("pirBody").innerHTML = html;
$("pirBody").addEventListener("click", (e) => {
  const b = e.target.closest("[data-act]");
  if (!b || b.disabled) return;
  const p = pirate(), id = b.dataset.id, w = S.world, act = b.dataset.act;
if (act === "take") {
    const o = docked() && offersAt(w.h, p.done).find((x) => x.id === id);
    if (!o || p.hold.length >= PIRATE.hold || p.hold.some((c) => c.id === id)) return;
    p.hold.push(o); S.vSay = SAY.take[p.hold.length % SAY.take.length];
    savePirate(); toast(`${o.icon} ${o.goods} loaded
 take it to block ${fmt(o.to)}`, 3500); emit("pirate", { action: "pickup", ...o });
  } else if (act === "bounty") takeBounty();
  else if (act === "coursebounty") { const bo = openBounty(); if (!bo) return; $M
("pirate").hidden = true; if (S.scene !== "space") showMap(); markTarget(bo.pick, "
 Pick up the bounty at"); }
  else if (act === "drop") dropOff();
  else if (act === "course") { const c = p.hold.find((x) => x.id === id); if (!c) return; $("pirate").hidden = true; if (S.scene !== "space") showMap(); markTarget(c.to, `
 Drop off the ${c.goods} at`); }
  else if (act === "dump") { p.hold = p.hold.filter((c) => c.id !== id); savePirate(); }
function dropOff() {
  const p = pirate(), w = S.world, here = dockM
ed() ? cargoFor(w.h) : [];
  if (!here.length) return;
  const bonus = S.flownTo === w.h ? 1.5 : 1;
  let pay = 0, promo = "";
  for (const c of here) { const n = Math.round(c.pay * bonus); pay += n; promo = addCredits(n) || promo; emit("pirate", { action: "dropoff", goods: c.goods, from: c.from, to: c.to, pay: n }); }
  p.hold = p.hold.filter((c) => c.to !== w.h); p.done = (p.done || 0) + 1;
  S.vSay = SAY.drop[p.done % SAY.drop.length];
  savePirate(); toast(promo || `
 +${fmt(pay)} credits${bonus M
> 1 ? " (flown by hand +50%)" : ""}`, 4500);
function portPrompt() {
  const on = docked(), b = $("portBtn");
  b.hidden = !on || !$("pirate").hidden;
  if (!on || b.classList.contains("loading")) return;
  const bo = openBounty(), here = bo && bo.pick === S.world.h, full = pirate().hold.length >= PIRATE.hold;
  b.classList.toggle("bounty", !!here && !full);
  b.dataset.mode = here && !full ? "bounty" : "vendor";
  if (here && !full) b.innerHTML = `<i>
</i> Pick up the bounty
 ${fmt(bo.pay)} cr`;
tContent = cargoFor(S.world.h).length ? "
 Drop off your cargo (T)" : here ? "
 your hold is full (T)" : "
 Talk to the vendor (T)";
// One tap at the bounty's port: the crate is winched aboard (the button fills as it loads), then it's in your hold
function takeBounty() {
  const p = pirate(), bo = openBounty(), w = S.world;
  if (!bo || !docked() || bo.pick !== w.h || p.hold.length >= PIRATE.hold) return false;
  p.hold.push({ id: bo.id, kind: bo.kind, icon: bo.icon, goods: bo.goods, hot: M
bo.hot, from: bo.pick, to: bo.to, pay: bo.pay }); bo.taken = true;
  S.vSay = "That one came in with the new block. Don't lose it.";
  savePirate(); toast(`
 ${bo.icon} ${bo.goods} for block ${fmt(bo.to)}
 ${fmt(bo.pay)} cr. It's marked on your star map and radar`, 5000);
  emit("pirate", { action: "pickup", bounty: true, ...bo });
function loadBounty() {
  const b = $("portBtn");
  if (b.classList.contains("loading")) return;
  cam.fly.speed = 0;
  b.classList.add("loading");M
"; b.style.setProperty("--load", "0%");
  const t0 = performance.now(), iv = setInterval(() => {   // (a plain timer: it finishes even if frames are paused)
    const k = Math.min(1, (performance.now() - t0) / 1300);
    b.style.setProperty("--load", `${(k * 100).toFixed(0)}%`); cam.fly.speed = 0;
    if (k < 1) return;
    clearInterval(iv); b.classList.remove("loading"); b.style.removeProperty("--load");
    if (!takeBounty()) toast("The bounty couldn't be loaded here");M
function pirateArrive(w) {
  if (cargoFor(w.h).length) setTimeout(() => S.world === w && toast("
 You have cargo for this world
 fly to the gold beacon at its port", 5000), 2800);
  else if (openBounty()?.pick === w.h) setTimeout(() => S.world === w && toast("
 The block bounty is waiting here
 fly to the gold beacon at the port and talk to the vendor", 5500), 2800);
// Tell the pilot about the open bounty (once per bounty, per visit): where it is, and how to head for it
function bountyNews(delay = 0) {
  const bo = openBounty();
  $("pirBounty").hidden = !bo;
  if (!bo || S.bountyTold === bo.id) return;
  S.bountyTold = bo.id;
  setTimeout(() => toast(`
 Bounty: ${bo.icon} ${bo.goods} waiting at block ${fmt(bo.pick)}, for block ${fmt(bo.to)}
 ${S.scene === "space" ? "follow the orange
 label and your radar" : "it's marked on the star map"}`, 6500), delay);
/* Block bounties: every newly mined block posts a job on the comms
 cargo waiting at the poM
rt of one random world, to
   take to another random world. Everyone gets the same job (it comes from the block number). One is open at a time, for
   6 blocks (about an hour) unless you pick it up; it pays half again more than port jobs. */
function newBounty(n, quiet) {
  const p = pirate(), b = p.bounty, taken = b && (b.taken || p.hold.some((c) => c.id === b.id));
  if (b && (b.block === n || (!taken && n - b.block < 6 && n > b.block))) return;
  if (n < (p.bountyMax || 0) || p.hold.some((c) => c.id === `bounty-M
${n}`)) return;   // never post an older (or already taken) block's bounty again
  const R = rng(((n * 2654435761) % 4294967296) + 11), g = PIRATE.goods[Math.floor(R() * PIRATE.goods.length)], top = S.tip + 1;
  const pick = Math.floor(R() * top);
  let to = Math.floor(R() * top);
  if (to === pick) to = (pick + 1) % top;
  const pay = Math.round(g.value * (1 + Math.log2(1 + Math.abs(to - pick) / 144)) * (g.hot ? 2 : 1) * 1.5);
  p.bounty = { id: `bounty-${n}`, block: n, kind: `Bounty of block ${M
fmt(n)}`, icon: g.icon, goods: g.name, hot: g.hot, from: pick, pick, to, pay, taken: false };
  if (!quiet) toast(`
 Block ${fmt(n)} mined
 bounty: ${g.icon} ${g.name} waiting at block ${fmt(pick)}, for block ${fmt(to)}`, 6000);
  emit("pirate", { action: "bounty", ...p.bounty });
// The bounty on the planet: an orange
 coin over the port of the world where it waits (and, once it's in your hold, over
// the port where it's going). Always the last find on the world, so the others keep theirM
function bountyArt(w) {
  if (!w?.arts) return;
  const had = w.arts.length && w.arts[w.arts.length - 1].kind === "bounty";
  if (had) w.arts.pop();
  if (!w.port) return had;
  const bo = openBounty(), go = pirate().hold.find((c) => /^bounty-/.test(c.id) && c.to === w.h);
  if (bo && bo.pick === w.h) w.arts.push({ kind: "bounty", dir: w.port, title: `${bo.icon} ${bo.goods}
 block bounty`, proto: `Posted by block ${fmt(bo.block)}`,
    detail: `Waiting at this world's port, for block ${fmt(bo.to)}
mt(bo.pay)} credits. Fly to the gold beacon and talk to the vendor.` });
  else if (go) w.arts.push({ kind: "bounty", dir: w.port, title: `Deliver the ${go.goods} here`, proto: "Block bounty",
    detail: `Your bounty cargo goes to this world's port
 ${fmt(go.pay)} credits. Fly to the gold beacon and drop it off.` });
  return had || w.arts[w.arts.length - 1]?.kind === "bounty";
const openBounty = () => { const p = pirate(), b = p.bounty; return b && !b.taken && S.tip - b.block < 6 && !p.hold.some((c) => c.id =M
== b.id) ? b : null; };
// Navigation is the pilot's: a target is only marked (its label waits at the screen edge, it's on the radar)
function markTarget(h, what) {
  toast(`${what} block ${fmt(h)}
 follow its label and the radar
 W faster, E climb (higher is faster)`, 5000);
$("pirateBtn").addEventListener("click", openPirate);
$("portBtn").addEventListener("click", () => ($("portBtn").dataset.mode === "bounty" ? loadBounty() : openPirate()));
$("pirClose").addEventListener("click", () => M
{ $("pirate").hidden = true; portPrompt(); });
// The port's beacon: a gold column of light (green when you have cargo for this world)
const beaconP = prog(`#version 300 es
precision highp float;layout(location=0) in vec2 aC;uniform mat4 uVP;uniform vec3 uA,uB,uEye;uniform float uW;out vec2 vT;
void main(){float k=aC.y*.5+.5;vec3 p=mix(uA,uB,k),side=normalize(cross(uB-uA,uEye-p));vT=vec2(aC.x,k);gl_Position=uVP*vec4(p+side*aC.x*uW,1.);}`,
precision highp float;in vec2 vT;uniform float uTime,uK;unifM
orm vec3 uCol;out vec4 o;
void main(){float x=abs(vT.x),core=exp(-x*5.),pulse=.75+.25*sin(uTime*3.-vT.y*9.);
  float A=core*pulse*uK*smoothstep(0.,.04,vT.y)*(1.-vT.y*.8)*(1.-x);if(A<.01)discard;o=vec4(mix(uCol,vec3(1.),exp(-x*14.)*.8),clamp(A,0.,1.));}`);
function drawBeam(VP, eye, A, B, w, col, k, t) {
  const u = beaconP.u;
  gl.useProgram(beaconP.p); gl.bindVertexArray(quadVao);
  gl.uniformMatrix4fv(u.uVP, false, VP); gl.uniform3fv(u.uEye, eye); gl.uniform3fv(u.uA, A); gl.uniform3fv(u.uB, B);
W, w); gl.uniform3fv(u.uCol, col); gl.uniform1f(u.uK, k); gl.uniform1f(u.uTime, t / 1000);
  gl.drawArrays(gl.TRIANGLES, 0, 6);
// (Bitcoin orange with a
 coin on top when a block bounty waits here or goes here; green when your cargo goes here)
const bountyHere = (w) => { const bo = openBounty(); return (bo && bo.pick === w.h) || pirate().hold.some((c) => /^bounty-/.test(c.id) && c.to === w.h); };
function drawBeacon(w, VP, eye, t) {
  const R = w.size, A = w.port.map((c) => c * R * 0.985), B = w.port.map((c) M
=> c * R * 1.5), d = Math.hypot(...sub(eye, B)), bty = bountyHere(w);
  gl.depthMask(false); gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
  drawBeam(VP, eye, A, B, Math.max(R * 0.01, d * 0.007) * (bty ? 1.5 : 1), bty ? [1, 0.48, 0.03] : cargoFor(w.h).length ? [0.45, 1, 0.6] : [1, 0.85, 0.45], S.portNear ? 1.5 : bty ? 1.35 : 1.1, t);
  gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
/* Raiders: UFOs that jump ships carrying cargo on some stretches of the rings (about one day's worth of blocks in eight
ce, and even there they only show up now and then). */
const RAID = { ufos: [], bolts: [], booms: [], shield: 100, cool: 0, sec: null, fireT: 0, ui: "", commsAt: 0 };
const raiderSpace = (h) => rng(Math.floor(h / 144) * 7 + 3)() < 0.12;
function ufoMesh() {   // a saucer: a lathe of a profile, glowing dome, rim lights, a green glow underneath
  const tris = [], HULL = [0.58, 0.62, 0.7], DARK = [0.18, 0.2, 0.26], DOME = [0.4, 1, 0.55], N = 18, P = (r, y, a) => [Math.cos(a) * r, y, Math.sin(a) * r];
0, 0.34, DOME, 0.5], [0.2, 0.31, DOME, 0.5], [0.3, 0.13, HULL, 0], [0.98, 0.02, HULL, 0], [0.92, -0.07, DARK, 0], [0.42, -0.17, DARK, 0], [0, -0.2, DARK, 0]];
  for (let i = 0; i < N; i++) {
    const a0 = (i / N) * 6.2832, a1 = ((i + 1) / N) * 6.2832;
    for (let k = 0; k + 1 < prof.length; k++) {
      const [r0, y0, col, e] = prof[k], [r1, y1] = prof[k + 1];
      if (r1 > 0) tris.push([P(r0, y0, a0), P(r1, y1, a0), P(r1, y1, a1), col, e]);
      if (r0 > 0) tris.push([P(r0, y0, a0), P(r1, y1, a1), P(r0, y0, a1M
    if (i % 2 === 0) { const am = (a0 + a1) / 2; tris.push([P(1, 0.04, am - 0.09), P(1, 0.04, am + 0.09), P(0.96, -0.05, am), i % 4 ? [1, 0.3, 0.3] : [1, 0.85, 0.3], 2]); }
    tris.push([[0, -0.21, 0], P(0.3, -0.21, a0), P(0.3, -0.21, a1), [0.4, 1, 0.6], 2]);
  for (const [a, b, c, col, e] of tris) { const n = norm(cross(sub(b, a), sub(c, a))); for (const p of [a, b, c]) d.push(...p, ...n, ...col, e); }
  return { data: new Float32Array(d), count: tris.length * 3 };
const ufoGL = () => (ufoGLc ??= (() => { const m = ufoMesh(); return { count: m.count, vao: vao(() => { buf(m.data); [3, 3, 3, 1].reduce((off, size, i) => { gl.enableVertexAttribArray(i); gl.vertexAttribPointer(i, size, gl.FLOAT, false, 40, off * 4); return off + size; }, 0); }) }; })());
function spawnRaid(F, now) {
  const n = 2 + (Math.random() < 0.45 ? 1 : 0), R = RAID;
  for (let i = 0; i < n; i++) {
    const a = (i - (n - 1) / 2) * 0.5, dx = F[0] * Math.cos(a) - F[2] * Math.sin(a), dz = F[0] * MaM
th.sin(a) + F[2] * Math.cos(a);
    R.ufos.push({ p: [sp.x + dx * 34, sp.alt + 1 + Math.random(), sp.z + dz * 34], hp: 2, ph: Math.random() * 6.28, fire: now + 2 + Math.random() * 2, dist: 34 });
  R.cool = now + 30; R.next = now + 50 + Math.random() * 40;   // the next raid finds you about a minute after this one
 Raiders ahead! ${isPlay() ? "
 to fire" : "C for the cockpit
 or outrun them`, 4500);
  emit("pirate", { action: "raid", raiders: n, block: sp.undM
function fireLaser(F) {
  const R = RAID, nose = [sp.x + F[0] * 0.6, sp.alt - 0.02, sp.z + F[2] * 0.6];
  let dir = F, best = 0.965;
  for (const u of R.ufos) { const d = sub(u.p, nose), l = Math.hypot(...d), c = dot(d, F) / l; if (l < 70 && c > best) { best = c; dir = d.map((x) => x / l); } }   // a little aim assist
  const v = 75 + sp.v;
  R.bolts.push({ p: nose, v: dir.map((c) => c * v), life: 1.1, enemy: false });
function hitShip(n, now) {
  document.body.classLisM
t.remove("hit"); void document.body.offsetWidth; document.body.classList.add("hit");
  clearTimeout(hitShip.t); hitShip.t = setTimeout(() => document.body.classList.remove("hit"), 260);
  if (R.shield <= 0) blowUp(now);
// Too much damage: the ship blows up. The cargo is lost, and you start again in a new ship at the Satoshi Nakamoto star
// (your credits and rank are your own
function blowUp(now) {
  const R = RAID, p = pirate(), lost = p.hold.length;
  R.shield = 0; S.wreck = now; sp.v = 0; S.fiM
  for (let i = 0; i < 7; i++) R.booms.push({ p: [sp.x + (Math.random() - 0.5) * 1.6, sp.alt + (Math.random() - 0.5) * 0.8, sp.z + (Math.random() - 0.5) * 1.6], t: now + i * 0.13, dur: 1.1, s: 1 + Math.random() * 0.9 });
  for (const u of R.ufos) u.hp = 0;   // the raiders are gone too
  R.bolts.length = 0;
  p.hold = []; savePirate();
  document.body.classList.add("wrecked");
 Your ship was destroyed${lost ? `
 ${lost} crate${lost > 1 ? "s" : ""} of cargo lost` : ""}. Starting again M
at the Satoshi Nakamoto star
  emit("pirate", { action: "destroyed", cargoLost: lost });
  setTimeout(() => {
    document.body.classList.remove("wrecked");
    S.wreck = 0; R.shield = 100; R.ui = ""; R.next = 0; R.cool = performance.now() / 1000 + 20;
    if (S.scene !== "space") return;
    flyFrom(0); sp.alt = 5; setMapSel(0);
 A new ship, at the heart of the rings
 fly safe, pirate", 3500);
function raidStep(dt, t, F) {
  const R = RAID, now = t / 1000, me = [sp.x, spM
.alt, sp.z], vme = [F[0] * sp.v, 0, F[2] * sp.v];
  if (S.wreck) {   // blown up: just the explosion, until the new ship arrives
    R.booms = R.booms.filter((b) => now - b.t < b.dur); sp.v = 0; raidUI(t, F); return;
  R.shield = Math.min(100, R.shield + dt * 4);
  // Raiders come for ships carrying cargo: about 20
45 s into a run (then every minute or so), and at once in raider space
  const cargo = pirate().hold.length > 0, sec = sp.under >= 0 ? Math.floor(sp.under / 144) : null, newSec = sec !== R.sec;
  if (!cargo) R.next = 0;
  else if (!R.next) R.next = now + 20 + Math.random() * 25;
  if (cargo && !R.ufos.length && sp.v > 0.5 && now > R.cool && ((newSec && sec != null && raiderSpace(sp.under)) || now > R.next)) spawnRaid(F, now);
  if (S.fireHeld && now > R.fireT) { fireLaser(F); R.fireT = now + 0.17; }
  const vmax = Math.max(7, spTop() * 0.9);   // flat out, you can outrun them
  for (const u of R.ufos) {
    // they weave about in front of you, swooping across your nose
 a dogfight, not a chM
    const a = now * 0.9 + u.ph, side = Math.sin(a) * 4.5, ahead = 8 + Math.cos(a * 0.7) * 3;
    const tgt = [me[0] + F[0] * ahead - F[2] * side, me[1] + 0.3 + Math.sin(now * 1.7 + u.ph) * 0.6, me[2] + F[2] * ahead + F[0] * side];
    const d = sub(tgt, u.p), len = Math.hypot(...d), step = Math.min(len, vmax * dt);
    if (len > 1e-6) for (let i = 0; i < 3; i++) u.p[i] += (d[i] / len) * step;
    const toMe = sub(me, u.p);
    u.dist = Math.hypot(...toMe);
    if (u.dist < 0.9) { hitShip(25, now);M
 u.p[0] -= (toMe[0] / u.dist) * 4; u.p[2] -= (toMe[2] / u.dist) * 4; }
    if (now > u.fire && u.dist < 30 && u.hp > 0) {
      u.fire = now + 1.8 + Math.random() * 1.8;
      const spread = () => (Math.random() - 0.5) * 0.16;   // raiders aren't great shots
      const aim = norm(sub([me[0] + vme[0] * 0.35, me[1], me[2] + vme[2] * 0.35], u.p)).map((c) => c + spread()), v = 20 + sp.v * 0.6;
      R.bolts.push({ p: [...u.p], v: aim.map((c) => c * v), life: 2.5, enemy: true });
  const had = R.ufos.length;
  R.ufos = R.ufos.filter((u) => u.dist < 120);
  if (had && !R.ufos.length) toast("
 You outran the raiders");
  for (const b of R.bolts) {
    for (let i = 0; i < 3; i++) b.p[i] += b.v[i] * dt;
    if (b.enemy) { if (Math.hypot(...sub(b.p, me)) < 0.75) { b.life = 0; hitShip(12, now); } continue; }
    for (const u of R.ufos) if (u.hp > 0 && Math.hypot(...sub(b.p, u.p)) < 1.05) {
      b.life = 0; u.hp--; R.booms.push({ p: [...u.p], t: now, dur: 0.3, s: 0.45 });
      if (u.hp <= 0) {
.booms.push({ p: [...u.p], t: now, dur: 0.8, s: 1.1 });
        const p = pirate(), promo = addCredits(15);
        p.raiders = (p.raiders || 0) + 1; savePirate();
        toast(promo || `
 +15 credits${R.ufos.some((x) => x.hp > 0) ? "" : "
        emit("pirate", { action: "raider", credits: p.credits });
  R.bolts = R.bolts.filter((b) => b.life > 0);
  R.ufos = R.ufos.filter((u) => u.hp > 0);
  R.booms = R.booms.filter((b) => now - b.t < b.dur);
function drawRaid(VP, V, eye, t) {
  const R = RAID, now = t / 1000;
  if (R.ufos.length) {
    const g = ufoGL(), u = shipP.u;
    gl.useProgram(shipP.p); gl.bindVertexArray(g.vao);
    gl.uniformMatrix4fv(u.uVP, false, VP); gl.uniform3fv(u.uSun, norm([0.3, 1, 0.2])); gl.uniform3fv(u.uEye, eye); gl.uniform1f(u.uTime, now); gl.uniform1f(u.uFlame, 0);
    for (const x of R.ufos) {
      const a = now * 2.2 + x.ph, c = Math.cos(a) * 0.95, s = Math.sin(a) * 0.95;
      gl.uniformMatrix4fv(u.uM, false, M
new Float32Array([c, 0, -s, 0, 0, 0.95, 0, 0, s, 0, c, 0, x.p[0], x.p[1], x.p[2], 1]));
      gl.drawArrays(gl.TRIANGLES, 0, g.count);
  if (!R.bolts.length && !R.booms.length) return;
  gl.depthMask(false); gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
  for (const b of R.bolts) { const l = Math.hypot(...b.v) || 1; drawBeam(VP, eye, b.p, b.p.map((c, i) => c - (b.v[i] / l) * 1.6), 0.09, b.enemy ? [1, 0.25, 0.8] : [0.35, 1, 0.5], 1.6, t); }
  if (R.booms.length) {
    gl.useProgram(sunP.p); gl.bindVertexArray(quadVaM
    gl.uniformMatrix4fv(sunP.u.uVP, false, VP); gl.uniform3fv(sunP.u.uR, [V[0], V[4], V[8]]); gl.uniform3fv(sunP.u.uUp, [V[1], V[5], V[9]]); gl.uniform1f(sunP.u.uTime, now);
    for (const b of R.booms) { if (now < b.t) continue; const k = clamp((now - b.t) / b.dur, 0, 1); gl.uniform3fv(sunP.u.uC, b.p); gl.uniform1f(sunP.u.uS, b.s * (0.5 + k * 1.3)); gl.uniform1f(sunP.u.uK, 1 - k); gl.drawArrays(gl.TRIANGLES, 0, 6); }
  gl.depthMask(true); gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
creen for the fight: the shield readout (or the cockpit's dashboard) and the fire button
function raidUI(t, F) {
  const R = RAID, space = S.scene === "space", cp = space && !!S.cockpit, active = space && (cp || R.ufos.length > 0);
  const key = `${space}|${cp}|${R.ufos.length}|${Math.round(R.shield / 4)}`;
  if (key !== R.ui) {
    document.body.classList.toggle("cockpitOn", cp);
    $("cockpit").hidden = !cp; $("raidHud").hidden = !active || cp; $("fireBtn").hidden = !active;
    const sh = `${MatM
h.max(0, Math.round(R.shield))}%`;
    $("shieldBar").style.width = $("cpShield").style.width = sh;
    $("raidHud").classList.toggle("low", R.shield < 35); $("gShield").classList.toggle("low", R.shield < 35);
    $("raidTxt").textContent = R.ufos.length ? `
 ${R.ufos.length} raider${R.ufos.length > 1 ? "s" : ""}
  if (cp && F) cockpitDash(t, F);
function cockpitDash(t, F) {
  const pct = (v) => `${Math.round(clamp(v, 0, 1) * 100)}%`;
  $("cpSpeed").style.width = pct(M
sp.v / spTop()); $("cpAlt").style.width = pct(Math.log(sp.alt / SPC.minAlt) / Math.log(SPC.maxAlt / SPC.minAlt));
  // radar: you at the centre, heading up
 raiders red, their shots pink, cargo destinations orange, the Satoshi star gold
  const c = $("radar"), x = c.getContext("2d"), W = c.width, H = c.height, cx = W / 2, cy = H / 2, rr = Math.min(W, H) / 2 - 6, range = 45;
  const rel = (px, pz) => { const dx = px - sp.x, dz = pz - sp.z, f = dx * F[0] + dz * F[2], s = dx * -F[2] + dz * F[0]; return [s, -f]; }; M
  x.clearRect(0, 0, W, H); x.strokeStyle = "rgba(120,255,150,.35)"; x.lineWidth = 1;
  for (const k of [1, 0.5]) { x.beginPath(); x.arc(cx, cy, rr * k, 0, 6.2832); x.stroke(); }
  x.beginPath(); x.moveTo(cx - rr, cy); x.lineTo(cx + rr, cy); x.moveTo(cx, cy - rr); x.lineTo(cx, cy + rr); x.stroke();
  const edge = (px, pz, col, size) => { const [a, b] = rel(px, pz), l = Math.hypot(a, b) || 1, k = Math.min(1, l / range) * rr; x.fillStyle = col; x.beginPath(); x.arc(cx + (a / l) * k, cy + (b / l) * k, siM
ze, 0, 6.2832); x.fill(); };
  edge(0, 0, "#ffd29a", 4);
  for (const cg of pirate().hold) { const [mx, my] = rPos(cg.to); edge(mx * U, my * U, "#5ad7ff", 3.5); }
  const bo = openBounty();
  if (bo) {   // the block bounty's pick-up: a pulsing orange
    const [mx, my] = rPos(bo.pick), [a, b] = rel(mx * U, my * U), l = Math.hypot(a, b) || 1, k = Math.min(1, l / range) * (rr - 4), bx = cx + (a / l) * k, by = cy + (b / l) * k, ph = (t / 900) % 1;
    x.strokeStyle = `rgba(247,147,26,${0.9M
 - ph * 0.9})`; x.lineWidth = 1.5; x.beginPath(); x.arc(bx, by, 7 + ph * 9, 0, 6.2832); x.stroke(); x.lineWidth = 1;
    x.fillStyle = "#f7931a"; x.beginPath(); x.arc(bx, by, 7, 0, 6.2832); x.fill();
    x.save(); x.translate(bx, by); x.rotate(0.24); x.fillStyle = "#fff"; x.font = "bold 10px system-ui,sans-serif"; x.textAlign = "center"; x.textBaseline = "middle"; x.fillText("
", 0, 0.5); x.restore();
  for (const b of RAID.bolts) if (b.enemy) edge(b.p[0], b.p[2], "#ff6ad5", 1.5);
  for (const u of RAID.ufos)M
 edge(u.p[0], u.p[2], "#ff4040", 4);
  x.fillStyle = "#8dffa8"; x.beginPath(); x.moveTo(cx, cy - 6); x.lineTo(cx + 4, cy + 4); x.lineTo(cx - 4, cy + 4); x.fill();
  if (t - RAID.commsAt < 250) return;
  const p = pirate(), lines = [`> OVER BLOCK ${sp.under >= 0 ? fmt(sp.under) : "
  if (RAID.ufos.length) lines.push(`> ${RAID.ufos.length} RAIDER${RAID.ufos.length > 1 ? "S" : ""}
" : "SPACE"} TO FIRE`);
  if (bo) lines.push(`> BOUNTY (BLOCK ${fmt(bo.block)}): PICK UP $M
 ${fmt(bo.pay)} CR`);
  for (const cg of p.hold.slice(0, 3)) lines.push(`> ${cg.goods.toUpperCase()}
 ${fmt(cg.to)}${sp.under >= 0 ? ` (${farTxt(Math.abs(cg.to - sp.under)).toUpperCase()})` : ""}`);
  if (!p.hold.length) lines.push("> HOLD EMPTY
  lines.push(`> ${fmt(p.credits)} CR
 ${rankOf(p.credits).now.name.replace(/^\S+\s/, "").toUpperCase()}`);
  $("comms").textContent = lines.join("\n");
function toggleCockpit() {
  S.cockpit = !S.cockpit; RAID.ui M
  $("cockpitBtn").classList.toggle("on", S.cockpit);
  toast(S.cockpit ? (isPlay() ? "Cockpit
 hold to fly, slide to steer,
 to fire" : "Cockpit
 C to leave") : "Chase view");
function raidOff() {   // leaving the star map: the raiders don't follow you down to a world
  RAID.ufos.length = RAID.bolts.length = RAID.booms.length = 0; S.fireHeld = false; RAID.ui = "";
  if (S.wreck) { S.wreck = 0; RAID.shield = 100; }
  $("cockpit").hidden = $("raidHud").hidden = $("fireBtn")M
.hidden = true; document.body.classList.remove("cockpitOn", "hit", "wrecked");
$("cockpitBtn").addEventListener("click", toggleCockpit);
$("cpExit").addEventListener("click", toggleCockpit);
$("cpLand").addEventListener("click", () => landHere());
let tiltOn = store.get("tilt", true);   // the cockpit leaning into turns (some feel woozy: switch it off)
function toggleTilt() { tiltOn = !tiltOn; store.set("tilt", tiltOn); tiltBtn(); toast(tiltOn ? "Cockpit tilt on
 you lean into turns" : "Cockpit tilt off
e horizon stays level"); }
const tiltBtn = () => { $("cpTilt").textContent = tiltOn ? "Tilt
"; $("cpTilt").classList.toggle("on", tiltOn); };
$("cpTilt").addEventListener("click", toggleTilt);
$("fireBtn").addEventListener("pointerdown", (e) => { e.preventDefault(); e.stopPropagation(); S.fireHeld = true; try { $("fireBtn").setPointerCapture(e.pointerId); } catch {} });
for (const ev of ["pointerup", "pointercancel", "lostpointercapture"]) $("fireBtn").addEventListener(ev, () => (S.fireHeM
$("fireBtn").addEventListener("contextmenu", (e) => e.preventDefault());
// In the cockpit a mouse click fires (instead of selecting a block)
addEventListener("pointerdown", (e) => { if (S.scene === "space" && S.cockpit && e.target === cv && e.pointerType === "mouse" && e.button === 0) { S.fireHeld = true; e.stopPropagation(); } }, true);
addEventListener("pointerup", (e) => { if (e.pointerType === "mouse") S.fireHeld = false; }, true);
/* ---------- Update channel: things the owner adds later, as JSM
ON child inscriptions ----------
   At start, the newest child of this inscription whose JSON says "p":"bitcoin-worlds" is read (only whoever holds this
   inscription can add children to it). It can carry a notice, featured worlds, extra hidden ships, links, and a pointer
   to a newer version. Everything is checked and size-limited before use; dates ("from"/"to") switch items on and off. */
const CFG = { notice: "", featured: [], links: [], latest: "", shipAt: {}, from: null };
const isId = (s) => typeof s === "sM
tring" && /^[0-9a-f]{64}i\d+$/.test(s);
function applyConfig(j) {
  if (!j || j.p !== "bitcoin-worlds") return false;
  const now = Date.now(), live = (x) => (!x.from || Date.parse(x.from) <= now) && (!x.to || now <= Date.parse(x.to) + 864e5);
  if (typeof j.notice === "string") CFG.notice = j.notice.slice(0, 280);
  if (Array.isArray(j.featured)) CFG.featured = j.featured.filter((f) => Number.isInteger(f?.h) && f.h >= 0 && live(f)).slice(0, 40).map((f) => ({ h: f.h, title: String(f.title || `Block ${f.h}`).slice(0M
  if (Array.isArray(j.links)) CFG.links = j.links.filter((l) => isId(l?.id)).slice(0, 12).map((l) => ({ id: l.id, title: String(l.title || "Inscription").slice(0, 48) }));
  if (isId(j.latest)) CFG.latest = j.latest;
  const colours = (c) => (Array.isArray(c) && c.length === 5 && c.every((v) => Array.isArray(v) && v.length === 3 && v.every((n) => typeof n === "number" && n >= 0 && n <= 1)) ? c : null);
  if (Array.isArray(j.ships)) for (const s of j.ships.slice(0, 30)) {
    const id = "x-" + String(s?.iM
d || "").replace(/[^a-z0-9-]/gi, "").slice(0, 24);
    if (id === "x-" || !Array.isArray(s.blocks) || !live(s)) continue;
    SHIPS[id] = { name: String(s.name || "Mystery ship").slice(0, 40), rarity: String(s.rarity || "Special").slice(0, 20), why: String(s.why || "").slice(0, 200),
      hint: String(s.hint || "").slice(0, 120), c: colours(s.colors) || SHIPS.scout.c, shape: s.shape === "pizza" ? "pizza" : undefined };
    for (const h of s.blocks.slice(0, 500)) if (Number.isInteger(h) && h >= 0) CFG.shipAt[h] = iM
  for (const f of CFG.featured) if (!LANDMARKS.some(([h]) => h === f.h)) LANDMARKS.push([f.h, f.title]);   // featured worlds become landmarks
  // more protocol starts (first block that carries one), e.g. {"h": 123456, "name": "SRC-20", "what": "first SRC-20 deploy"}
  if (Array.isArray(j.starts)) for (const s of j.starts.slice(0, 40))
    if (Number.isInteger(s?.h) && s.h >= 0 && s.name && !STARTS.some(([h]) => h === s.h)) STARTS.push([s.h, String(s.name).slice(0, 24), String(s.what || "").slice(0, 80)]);
  if (j.pirate && typeof j.pirate === "object") applyPirate(j.pirate);   // Silk Road Space Pirate: ranks, goods, hold size
  if (Array.isArray(j.protocols)) for (const d of j.protocols.slice(0, 6)) addProtocol(d, false);   // new rune / ordinal-style protocols
async function readConfig() {
  const me = (location.pathname.match(/[0-9a-f]{64}i\d+/) || [])[0];
  if (!me || !S.ord) return;
    const kids = [];
    for (let page = 0; page < 10; page++) { const r = await get(`/r/children/${me}/iM
nscriptions/${page}`); kids.push(...(r.children || [])); if (!r.more) break; }
    for (const k of kids.reverse().slice(0, 25)) {   // newest first
        const r = await fetch(api(`/content/${k.id}`)), j = r.ok ? JSON.parse(await r.text()) : null;
        if (applyConfig(j)) { CFG.from = k.id; CFG.raw = j; await loadModules(j.modules, kids); return; }   // add-on modules must be children too
function showConfigNews() {
  if (CFG.notice && store.get("notice", "") !M
== CFG.notice) { store.set("notice", CFG.notice); toast(`
 ${CFG.notice}`, 7000); }
  else if (CFG.latest && store.get("latestSeen", "") !== CFG.latest) { store.set("latestSeen", CFG.latest); toast("
 A newer Bitcoin Worlds is out
 see your passport", 6000); }
/* ---------- Machine interface: AI agents, robots, IoT displays and other inscriptions ----------
   window.bitmapWorlds.command(name, args), or postMessage({type:"bitmapWorlds", id, cmd, args})
 "bitmapWorlds:result".
   Events (world, find, sM
hip, block, xr) are posted to the embedding window as {type:"bitmapWorlds:event", event, data}
   and dispatched here as "bitmapworlds" events. */
function emit(event, data) {
  const msg = { type: "bitmapWorlds:event", event, data };
  try { if (window.parent !== window) window.parent.postMessage(msg, "*"); } catch {}
  try { dispatchEvent(new CustomEvent("bitmapworlds", { detail: msg })); } catch {}
  describe: () => ({ manual: JSON.parse($("agent-manual").textContent), status: COMMANDS.statuM
  status: () => (S.world ? { height: S.world.h, bitmap: `${S.world.h}.bitmap`, name: S.world.name, landmark: S.world.mark?.[1] || null, climate: climateWord(S.world.temp), life: lifeWord(S.world.life),
    terrain: terrainWord(S.world.rough), mode: S.mode, view: S.scene || "world", tip: S.tip, demo: S.demo, tour: !!S.tour, xr: S.xr ? (S.xr.ar ? "ar" : "vr") : null } : { height: null, demo: S.demo, tip: S.tip }),
  visit: async ({ height }) => { const w = await visit(height); if (!w) throw Error("Could not vM
isit that block"); return COMMANDS.status(); },
  artefacts: () => (S.world?.arts || []).map((a, i) => ({ kind: a.kind, protocol: a.proto || null, title: a.title, detail: a.detail, inscription: a.id || null, rune: a.kind === "monolith" ? `${S.world.h}:${a.ti}` : null, ship: a.ship || null, found: isFound(S.world, i) })),
  next: () => { if (!S.world?.arts?.length) throw Error("Nothing to find here"); if (S.scene !== "world") showWorld(); scan(); const a = S.world.arts[S.openArt]; return { index: S.openArt, kind: a.M
kind, title: a.title }; },
  district: () => { const D = S.world?.district; if (!D) throw Error("No district loaded yet"); return { bitmap: `${S.world.h}.bitmap`, parcels: D.n, biggest: D.biggest, sizes: D.sizes }; },
  starmap: () => ({ view: S.scene || "world", tip: S.tip, toMillion: Math.max(0, MILLION - S.tip), over: S.scene === "space" ? sp.under : null, selected: S.scene === "space" ? sp.pick ?? null : null }),
  open: ({ view }) => { if (view === "starmap") showMap(); else if (view === "world") showWorld(); M
else throw Error('view: "world" or "starmap"'); return COMMANDS.status(); },
  ships: () => ({ flying: S.ship ?? store.get("ship", "scout"), owned: ownedShips(), all: Object.entries(SHIPS).map(([id, s]) => ({ id, name: s.name, rarity: s.rarity })) }),
  config: () => ({ notice: CFG.notice, featured: CFG.featured, links: CFG.links, latest: CFG.latest || null, source: CFG.from,
    protocols: PROTOS.map((p) => ({ id: p.id, name: p.name, kind: p.kind, rule: p.rule || "module", from: p.from })), starts: STARTS.map(([h,M
 name]) => ({ h, name })) }),
  tour: ({ on = true }) => { setTour(on); return { tour: !!S.tour }; },
  pirate: () => { const p = pirate(), r = rankOf(p.credits); return { credits: p.credits, rank: r.now.name, nextRank: r.next?.name || null, toNext: r.next ? r.next.at - p.credits : 0, hold: p.hold, holdSize: PIRATE.hold, deliveries: p.done || 0, raidersDowned: p.raiders || 0, docked: docked(), raiders: RAID.ufos.length, ranks: PIRATE.tiers }; },
  snapshot: () => { if (!S.world) throw Error("No world open"); (S.sceM
ne === "space" ? renderSpace : render)(performance.now()); return { png: cv.toDataURL("image/png") }; },
window.bitmapWorlds = Object.freeze({ commands: Object.keys(COMMANDS), command: async (c, a) => { if (!COMMANDS[c]) throw Error(`Unknown command "${c}"`); return COMMANDS[c](a || {}); },
  addProtocol: (def) => (modOpen ? addProtocol(def, true) : false) });   // for add-on modules only, while they load
addEventListener("message", async (e) => {
  if (!m || m.type !== "bitmapWorlds" || typeM
of m.cmd !== "string") return;
  try { reply = { type: "bitmapWorlds:result", id: m.id, ok: true, result: await window.bitmapWorlds.command(m.cmd, m.args) }; }
  catch (err) { reply = { type: "bitmapWorlds:result", id: m.id, ok: false, error: String(err?.message || err) }; }
  try { e.source?.postMessage(reply, "*"); } catch {}
// Data mode (#840000&data or ?data): the world as plain JSON on screen, for simple tools and AI readers.
function showData() {
  if (!S.dataMode || !S.world) return;
t D = S.world.district;
  $("dataOut").textContent = JSON.stringify({ app: "Bitcoin Worlds", world: COMMANDS.status(), finds: COMMANDS.artefacts(),
    district: D ? { bitmap: `${S.world.h}.bitmap`, parcels: D.n, biggest: D.biggest } : null }, null, 2);
  $("dataOut").hidden = false;
/* ---------- Tour (screens, kiosks and IoT displays): #tour, ?tour or command("tour") ----------
   Bitcoin Worlds flies itself: a new world every ~40 s (landmarks, featured, today's and random), showing its finds one
y touch, click or key press ends it. */
function setTour(on) {
  clearTimeout(S.tourT); S.tour = !!on; document.body.classList.toggle("touring", S.tour);
  if (!S.tour) return;
  const nextWorld = () => {
    const pool = [...LANDMARKS.map(([h]) => h).filter((h) => h <= S.tip), dailyHeight()];
    return Math.random() < 0.65 ? pool[Math.floor(Math.random() * pool.length)] : Math.floor(Math.random() * (S.tip + 1));
  const tick = async () => {
    if (!S.tour) return;
    if (step % 6 === 0) { cM
loseArt(); await visit(nextWorld(), { warp: true }); } else if (S.world?.arts?.length) scan();
    step++; S.tourT = setTimeout(tick, step % 6 === 1 ? 9000 : 6000);
for (const ev of ["pointerdown", "keydown"]) addEventListener(ev, (e) => { if (S.tour && e.isTrusted) { setTour(false); toast("Tour stopped"); } }, true);
/* ---------- VR and AR (WebXR) ----------
   VR: the world you're on becomes a big planet floating in front of you. AR: a small planet on your desk or in your room.
ppear only where the device supports it. Pull the trigger (or tap, in AR) to light up the next find. */
const xrScale = (R, xr) => (xr.ar ? 0.22 : 0.6) / R;
const xrSpot = (xr) => (xr.ar ? [0, 0, -0.9] : [0, xr.floor ? 1.35 : 0, -2]);
function xrModel(t, R, xr) {   // world
 room: scale it down, place it in front of you, turn it slowly
  const s = xrScale(R, xr), a = (t / 1000) * 0.06, c = Math.cos(a) * s, n = Math.sin(a) * s, T = xrSpot(xr);
  return new Float32Array([c, 0, -n, 0, 0, s, 0, 0, n, 0, c, 0, T[0], M
function xrEye(p, t, R, xr) {   // the headset's eye, back in world units
  const s = xrScale(R, xr), a = (t / 1000) * 0.06, T = xrSpot(xr), x = (p.x - T[0]) / s, y = (p.y - T[1]) / s, z = (p.z - T[2]) / s;
  return [x * Math.cos(a) - z * Math.sin(a), y, x * Math.sin(a) + z * Math.cos(a)];
async function startXR(mode) {
  if (S.xr || !navigator.xr) return;
  const ar = mode === "immersive-ar";
  if (S.scene !== "world") showWorld();
  if (S.mode === "fly") toggleFly();
 const session = await navigator.xr.requestSession(mode, ar ? { optionalFeatures: ["local-floor", "dom-overlay"], domOverlay: { root: document.body } } : { optionalFeatures: ["local-floor"] });
    await gl.makeXRCompatible();
    session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) });
    let floor = true, ref;
    try { ref = await session.requestReferenceSpace("local-floor"); } catch { floor = false; ref = await session.requestReferenceSpace("local"); }
    stopLoop(); S.xr = { session, ar, flooM
    document.body.classList.add("inxr");
    session.addEventListener("end", () => { S.xr = null; document.body.classList.remove("inxr"); resize(); startLoop(); emit("xr", { on: false }); });
    session.addEventListener("select", () => { if (S.world?.arts?.length) scan(); });
    const onFrame = (t, frame) => {
      session.requestAnimationFrame(onFrame);
      const pose = frame.getViewerPose(ref), layer = session.renderState.baseLayer;
      if (!pose) return;
      pose.views.forEach((v, i) => {
onst vp = layer.getViewport(v);
        render(t, { first: i === 0, fb: layer.framebuffer, vp: [vp.x, vp.y, vp.width, vp.height], P: v.projectionMatrix, V: v.transform.inverse.matrix, pos: v.transform.position, ar, floor });
    session.requestAnimationFrame(onFrame);
    emit("xr", { on: true, mode: ar ? "ar" : "vr" });
  } catch (e) { toast(`Couldn't start ${ar ? "AR" : "VR"}: ${e?.message || e}`); }
$("vrBtn").addEventListener("click", () => startXR("immersive-vr"));
$("arBtn").addEventListeneM
r("click", () => startXR("immersive-ar"));
if (navigator.xr?.isSessionSupported) for (const [mode, id] of [["immersive-vr", "vrBtn"], ["immersive-ar", "arBtn"]])
  navigator.xr.isSessionSupported(mode).then((ok) => { $(id).hidden = !ok; }).catch(() => {});
/* ---------- Phones: the controls step aside ----------
   In play mode the panels fade away a few seconds after you last touched them, leaving the whole screen to the world.
   Tap empty space (or any panel) to bring them back; holding to fly keeps them out ofM
const ui = { t: 0 };
function uiShow() { document.body.classList.remove("idle"); clearTimeout(ui.t); ui.t = setTimeout(uiHide, 4500); }
  const busy = !$("artCard").hidden || !$("passport").hidden || !$("pirate").hidden || !$("gift").hidden || !$("viewer").hidden || S.scene === "rings" || document.activeElement?.matches?.("input,select");
  if (!isPlay() || busy) { ui.t = setTimeout(uiHide, 4500); return; }
  document.body.classList.add("idle");
function uiToggle() { if (document.M
body.classList.contains("idle")) uiShow(); else { clearTimeout(ui.t); uiHide(); } }
document.addEventListener("pointerdown", (e) => { if (!e.target.closest?.("#gl")) uiShow(); }, true);
/* ---------- Start ---------- */
  const imported = importSave();   // a downloaded copy that brought your progress with it
  $("passN").textContent = fmt(store.get("passport", []).length);
  let tip = /^https?:$/.test(location.protocol) ? await tipOf("") : null;
  // A downloaded copy (Satoshi's gift) rM
emembers the ord server it was downloaded from, so it can still read the chain.
  const home = document.querySelector('meta[name="bw-home"]')?.content;
  if (tip === null && home && /^https?:/.test(home)) { S.base = home.replace(/\/+$/, ""); tip = await tipOf(S.base); if (tip === null) S.base = ""; }
  S.ord = tip !== null;   // an ord server answered (so other inscriptions, like Block Rings, can be loaded from it)
  const flag = (f) => new RegExp(`(^|[?&])${f}\\b`).test(location.search) || new RegExp(`(^#|&)${f}\\M
b`).test(location.hash);
  if (tip === null || flag("demo")) {
    S.demo = true; tip = 840000 + Math.floor((Date.now() / 1000 - ANCHORS[4][1]) / 600);
    $("demoTag").hidden = $("demoTag2").hidden = false;
  S.tip = tip; S.dataMode = flag("data");
  $("pirN").textContent = fmt(pirate().credits);   // (after S.demo is known: the demo keeps its own pirate)
  if (!S.demo) await Promise.race([readConfig(), new Promise((r) => setTimeout(r, 3000))]);   // the update channel (owner's additions)
  if (!CFG.from && $(M
"bw-config")) try { if (applyConfig(JSON.parse($("bw-config").textContent))) CFG.from = "saved with this copy"; } catch {}   // a downloaded copy
  const h = location.hash.match(/^#(\d+)/);
  // Everyone starts on the first world (Genesis); a link like #840000 opens that block's world instead.
  await visit(h ? +h[1] : 0);
  showConfigNews(); uiShow();
  if (imported) setTimeout(() => toast("
 Your progress came with you
 passport, ships and pirate career", 5000), 1500);
  newBounty(S.tip, true); bountyNews(iL
mported ? 7000 : 5500);   // the newest block's bounty is up from the start (after the world's own news)
  if (flag("tour") || flag("kiosk")) setTour(true);
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"31000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"40000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"28000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"25000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"33000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"20"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"40"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"20"}h!
Lhtitle: Killah Audio Studio
 Bitcoin Synth traits:   Type: Web Synth   Theme: Bitcoin   Author: RTBNXH
dnamex'Killah Audio Studio - Bitcoin Synth Progversione3.0.0fauthorfRTBNXHkdescriptionx
Bitcoin-themed browser synthesizer with dual osc, filter, ADSR, FX, arpeggiator, drum pads, and 19 presets including White Paper Day.ethemenBitcoin Orangehfeatures
ndual osc + subffilterdADSRldelay/reverbkarpeggiatorgflangeridrum padspvirtual keyboardgpresets
oWhite Paper DayoSatoshi's ThememGenesis BlockglicensecMIT
text/html;charset=utf-8
  <meta charset="UTF-8">
  <title>KILLAH AUDIO STUDIO - Bitcoin Synth Pro v3.0 (Whitepaper Edition)</title>
    /* ========================================================
       1. BITCOIN THEME & CORE UI ARCHITECTURE
       ======================================================== */
      --bg-dark: #0a0a0a;
      --chassis-bg: #121212;
      --panel-bg: #1a1a1a;
      --panel-border: #2a2a2a;
      --panel-header: #222222;
      --accent-bitcoiM
n: #f7931a; /* Bitcoin Orange */
      --accent-bitcoin-glow: rgba(247, 147, 26, 0.4);
      --accent-gold: #ffd700;
      --accent-amber: #ffa500;
      --text-main: #f0f0f0;
      --text-dim: #888888;
      --shadow-chassis: 0 25px 60px rgba(0,0,0,0.95);
      --fader-track: #0a0a0a;
    * { box-sizing: border-box; margin: 0; padding: 0; user-select: none; }
      background: var(--bg-dark);
      color: var(--text-main);
      font-family: -apple-system, BlinkMacSystemFonM
t, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
      display: flex;
      justify-content: center;
      align-items: center;
      min-height: 100vh;
      padding: 20px;
    /* Outer Synth Chassis */
    .killah-chassis {
      width: 1100px;
      background: linear-gradient(180deg, #1f1f1f 0%, #121212 100%);
      border-radius: 12px;
      border: 1px solid #333333;
      box-shadow: var(--shadow-chassis);
      position: relative;
      overflow: hidden;
    /* Top Bitcoin Header Bar */
      background: var(--panel-header);
      border-bottom: 2px solid #0a0a0a;
      display: flex;
      align-items: center;
      padding: 0 16px;
      width: 18px; height: 18px;
      background: linear-gradient(135deg, var(--accent-bitcoin) 0%, #b85c00 100%);
      border-radius: 4px;
      box-shadow: 0 0 10px var(--accent-bitcoin-glow);
    .killah-title { font-weight: 900; font-size: 12px; color: var(--text-main)M
; letter-spacing: 1.2px; }
    .btc-author { font-weight: 800; font-size: 9px; color: var(--accent-bitcoin); letter-spacing: 0.5px; }
    .preset-selector-container {
      margin-left: auto;
      display: flex;
      align-items: center;
      background: #0a0a0a;
      border: 1px solid #333333;
      padding: 4px 10px;
      border-radius: 5px;
      box-shadow: inset 0 0 6px rgba(247, 147, 26, 0.15);
      font-size: 9px;
      font-weight: 900;
      text-transform: uppercase;
      letter-spacing: 0.8px;
    .preset-dropdown {
      background: #1a1a1a;
      color: var(--accent-bitcoin);
      border: 1px solid #333333;
      font-family: 'Courier New', Courier, monospace;
      font-size: 11px;
      font-weight: bold;
      padding: 3px 8px;
      border-radius: 3px;
      outline: none;
      cursor: pointer;
    /* Main Grid Modules */
      padding: 16px;
      display: grid;
      grid-template-colM
umns: 2.2fr 1.8fr 2fr;
      background: var(--panel-bg);
      border: 1px solid var(--panel-border);
      border-radius: 6px;
      padding: 12px;
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.03);
    .module-header {
      font-size: 10px;
      font-weight: 900;
      color: var(--accent-bitcoin);
      text-transform: uppercase;
      letter-spacing: 1.2px;
      margin-bottom: 10px;
      border-bottom: 1px solid #2a2a2a;
      padding-bottom: 5px;
 display: flex; justify-content: space-between;
    .params-sub-grid {
      display: grid;
      grid-template-columns: repeat(2, 1fr);
      border-bottom: 1px solid #222222;
      padding-bottom: 10px;
      margin-bottom: 10px;
    .params-sub-grid:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
    /* Control Labels and Readouts */
    .control-container { display: flex; align-items: center; gap: 6px; flex: 1; min-width: 0; }
    .control-container label M
{ font-size: 9px; font-weight: 800; color: var(--text-dim); text-transform: uppercase; width: 62px; text-align: right; shrink: 0; }
    .param-lcd { font-size: 9px; color: var(--accent-bitcoin); font-weight: bold; width: 44px; text-align: left; font-family: monospace; shrink: 0; }
    /* Select Inputs */
      background: #0a0a0a;
      color: var(--accent-bitcoin);
      border: 1px solid var(--panel-border);
      padding: 4px 6px;
      border-radius: 4px;
      font-size: 10px;
      font-weight: M
      outline: none;
    /* ========================================================
       2. MASTER FX RACK & FADER FIT CORRECTIONS
       ======================================================== */
    .master-fx-card {
      grid-column: span 3;
      padding: 12px 16px;
    .master-fx-grid {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
    input[type="range"] {
      -webkit-appearance: none;
      appearance: none;
      background: var(--fader-track);
      border-radius: 3px;
      outline: none;
      border: 1px solid #2a2a2a;
      box-shadow: inset 0 1px 3px rgba(0,0,0,0.8);
    input[type="range"]::-webkit-slider-thumb {
      -webkit-appearance: none;
      border-radius: 3px;
      background: linear-gradient(180deg, #3a3a3a 0%, #1a1a1a 100%);
      border: 1px solid var(--accent-bitcoin);
      cursor: pointer;
      box-shadow: 0 0 6px var(--aM
ccent-bitcoin-glow);
    input[type="range"]::-moz-range-thumb {
      border-radius: 3px;
      background: linear-gradient(180deg, #3a3a3a 0%, #1a1a1a 100%);
      border: 1px solid var(--accent-bitcoin);
      cursor: pointer;
      box-shadow: 0 0 6px var(--accent-bitcoin-glow);
    /* Visualizer Box */
    .screen-module {
      grid-column: span 3;
      background: #050505;
      border: 1px solid #2a2a2a;
      border-radius: 6px;
    .scope-box { flex: 1; height: 100%; border-right: 1px solid #1a1a1a; }
    canvas { width: 100%; height: 100%; }
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      padding: 2px 0;
    .vu-bar-bg { height: 6px; width: 100%; background: #0a0a0a; border-radius: 2px; overflow: hidden; }
    .vu-bar-fill { height: 100%; width: 0%; background: linear-gradient(90deg, #f7M
931a 70%, #ffd700 85%, #ff5500 100%); transition: width 0.05s ease; }
    /* ==========================================================
       3. PROFESSIONAL HARDWARE DRUMPADS & ADJUSTED EFX DIALS
       ========================================================== */
    .piano-section {
      background: #0d0d0d;
      padding: 16px;
      border-top: 2px solid #000;
      display: flex;
      position: relative;
    .wheels-column {
      display: flex;
      flex-direction: column;
    .sub-toolbar-card {
      background: #1a1a1a;
      border: 1px solid #2a2a2a;
      border-radius: 5px;
      padding: 6px 8px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      background: #2a2a2a;
      color: var(--accent-bitcoin);
      border: 1px solid #3a3a3a;
      padding: 3px 8px;
      border-radius: 3px;
      font-size: 9px;
      font-weight: 800;
      cursor: pointer;
    .btn-oct:hover { background: #333333; }
      font-size: 9px;
      font-weight: 800;
      color: var(--accent-bitcoin);
      font-family: monospace;
    .wheels-holder {
      display: flex;
      justify-content: center;
    .perform-wheel-module {
      display: flex;
      flex-direction: column;
      align-items: center;
      height: 120px;
      background: #0a0a0a;
      border: 1px solid #2a2a2a;
      position: relative;
      overflow: hidden;
    .wheel-svg { width: 100%; height: 100%; cursor: ns-resize; }
    .center-piano-box {
      display: flex;
      flex-direction: column;
    /* REBUILT PROFESSIONAL DRUMPADS */
    .drumpad-container {
      display: flex;
      justify-content: center;
      background: linear-gradient(145deg, #2a2a2a 0%, #1a1a1a 100%);
 border: 1px solid #3a3a3a;
      border-radius: 6px;
      cursor: pointer;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      align-items: center;
      position: relative;
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.08), 0 4px 10px rgba(0,0,0,0.5);
      transition: all 0.05s ease;
    .drumpad::after {
      position: absolute;
      top: 3px; left: 3px; right: 3px; bottom: 3px;
      border: 1px solid rgba(255,255,M
      border-radius: 4px;
      pointer-events: none;
    .drumpad-icon-svg { width: 18px; height: 18px; fill: var(--accent-bitcoin); filter: drop-shadow(0 0 3px var(--accent-bitcoin-glow)); }
      font-size: 9px; font-weight: 800; color: var(--text-main); text-align: center;
      text-transform: uppercase; letter-spacing: 0.8px;
    .drumpad:active {
      transform: translateY(1px);
      background: linear-gradient(145deg, #1a1a1a 0%, #f7931a 300%);
: var(--accent-bitcoin);
      box-shadow: 0 0 15px var(--accent-bitcoin-glow), inset 0 0 8px rgba(247, 147, 26, 0.4);
    /* Piano Keys */
      display: flex;
      justify-content: center;
      height: 125px;
      overflow: hidden;
      position: relative;
    .octave-group { position: relative; display: flex; height: 100%; }
    .key { position: relative; cursor: pointer; border-radius: 0 0 4px 4px; }
      height: 125px;
ound: linear-gradient(180deg, #f0f0f0 0%, #ffffff 100%);
      border: 1px solid #111111;
      border-top: none;
    .key.white.active { background: var(--accent-bitcoin); box-shadow: inset 0 0 12px rgba(0,0,0,0.6); }
      background: linear-gradient(180deg, #2a2a2a 0%, #0a0a0a 100%);
      border: 1px solid #000;
      position: absolute;
    .key.black.active { background: #c46a00; box-shadow: M
0 0 12px var(--accent-bitcoin-glow); }
    .key.black[data-note="C#4"], .key.black[data-note="C#5"] { left: 28px; }
    .key.black[data-note="D#4"], .key.black[data-note="D#5"] { left: 68px; }
    .key.black[data-note="F#4"], .key.black[data-note="F#5"] { left: 148px; }
    .key.black[data-note="G#4"], .key.black[data-note="G#5"] { left: 188px; }
    .key.black[data-note="A#4"], .key.black[data-note="A#5"] { left: 228px; }
      position: absolute;
m: translateX(-50%);
      font-size: 8px;
      font-weight: 800;
      color: #888888;
      pointer-events: none;
    /* RIGHT COLUMN (Adjusted EFX Knobs Position) */
      display: flex;
      flex-direction: column;
    .key-spec-banner {
      background: #1a1a1a;
      border: 1px solid #2a2a2a;
      border-radius: 5px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 8px;
    font-weight: 900;
      color: var(--accent-bitcoin);
      text-transform: uppercase;
      letter-spacing: 0.5px;
      text-align: center;
      padding: 0 4px;
      box-shadow: inset 0 0 5px rgba(0,0,0,0.5);
    .fx-dials-holder {
      display: flex;
      justify-content: center;
      margin-top: 14px;
    .fx-dial-svg-well {
      background: #0a0a0a;
      border: 1px solid #2a2a2a;
      border-radius: 50%;
      position: relativeM
      cursor: ns-resize;
      font-size: 8px; font-weight: 800; color: var(--text-dim); text-align: center;
      text-transform: uppercase; margin-top: 6px; letter-spacing: 0.5px;
<div class="killah-chassis">
  <!-- Top Header Bar with Preset Selector -->
  <div class="header-bar">
    <div class="killah-badge"></div>
    <span class="killah-title">KILLAH AUDIO STUDIO</span>
    <span class="btc-author">BY RTBNXH
    <div class="preset-seleM
      <span class="preset-label">PRESET:</span>
      <select id="preset_select" class="preset-dropdown">
        <option value="whitepaper">1.
 White Paper Day (Oct 31)</option>
        <option value="magic">2. Magic Lead</option>
        <option value="horror">3. Horror Atmosphere</option>
        <option value="superhero">4. Super Hero Brass</option>
        <option value="pad">5. Warm Ambient Pad</option>
        <option value="moog">6. Classic Moog Bass</option>
        <option value="syntM
hwave">7. 80s Synthwave</option>
        <option value="cyberpunk">8. Cyberpunk Bass</option>
        <option value="pluck">9. Plucked Arp</option>
        <option value="organ">10. Glass Organ</option>
        <option value="industrial">11. Dark Industrial</option>
        <option value="sub">12. Submarine Bass</option>
        <option value="dreamy">13. Dreamy Chords</option>
        <option value="arcade">14. Retro Arcade Lead</option>
        <option value="haunted">15. Haunted Choir</option>
lue="stabs">16. Stabs & Strings</option>
        <option value="laser">17. Space Laser</option>
        <option value="satoshi">18. Satoshi's Theme</option>
        <option value="genesis">19. Genesis Block</option>
  <!-- Main Rack Grid Modules -->
  <div class="main-grid">
    <!-- OSCILLATOR BANK MODULE -->
    <div class="module-card">
      <div class="module-header">Oscillator Bank <span>OSC 1 + 2</span></div>
      <div class="params-sub-grid">
        <div class="controM
          <label>OSC 1 Wave</label>
          <select id="osc1_wave">
            <option value="sawtooth">Sawtooth</option>
            <option value="square">Square</option>
            <option value="triangle">Triangle</option>
            <option value="sine">Sine</option>
        <div class="control-container">
          <label>OSC 2 Wave</label>
          <select id="osc2_wave">
            <option value="square">Square</option>
            <option value="sawtoM
oth">Sawtooth</option>
            <option value="triangle">Triangle</option>
            <option value="sine">Sine</option>
      <div class="params-sub-grid">
        <div class="control-container">
          <label>OSC 2 Detune</label>
          <input type="range" id="osc2_detune" min="0" max="50" value="15">
          <span class="param-lcd" id="osc2_detune_lcd">15 ct</span>
        <div class="control-container">
          <label>Sub Osc Mix</labeM
          <input type="range" id="sub_mix" min="0" max="1" value="0.3" step="0.05">
          <span class="param-lcd" id="sub_mix_lcd">30%</span>
    <!-- FILTER & DRIVE MODULE -->
    <div class="module-card">
      <div class="module-header">Filter & Drive <span>VCF</span></div>
      <div class="params-sub-grid">
        <div class="control-container">
          <label>Filter Mode</label>
          <select id="filter_type">
            <option value="lowpass">Lowpass 24M
            <option value="highpass">Highpass</option>
            <option value="bandpass">Bandpass</option>
      <div class="params-sub-grid">
        <div class="control-container">
          <label>Cutoff</label>
          <input type="range" id="cutoff" min="80" max="12000" value="3500">
          <span class="param-lcd" id="cutoff_lcd">3.5 kHz</span>
        <div class="control-container">
          <label>Resonance</label>
<input type="range" id="resonance" min="0" max="18" value="4">
          <span class="param-lcd" id="resonance_lcd">4.0</span>
    <!-- AMP ENVELOPE MODULE -->
    <div class="module-card">
      <div class="module-header">Amp Envelope <span>ADSR</span></div>
      <div class="params-sub-grid">
        <div class="control-container">
          <label>Attack</label>
          <input type="range" id="attack" min="0.01" max="1.5" value="0.02" step="0.01">
          <span class="M
param-lcd" id="attack_lcd">20ms</span>
        <div class="control-container">
          <label>Decay</label>
          <input type="range" id="decay" min="0.05" max="2" value="0.4" step="0.01">
          <span class="param-lcd" id="decay_lcd">400ms</span>
      <div class="params-sub-grid">
        <div class="control-container">
          <label>Sustain</label>
          <input type="range" id="sustain" min="0" max="1" value="0.6" step="0.05">
          <span class="paraM
m-lcd" id="sustain_lcd">60%</span>
        <div class="control-container">
          <label>Release</label>
          <input type="range" id="release" min="0.05" max="3" value="0.8" step="0.01">
          <span class="param-lcd" id="release_lcd">800ms</span>
    <!-- ALIGNED MASTER FX RACK -->
    <div class="module-card master-fx-card">
      <div class="module-header">Master FX Rack <span>Delay & Studio Reverb</span></div>
      <div class="master-fx-grid">
       <div class="control-container">
          <label>Delay Time</label>
          <input type="range" id="delay_time" min="0.1" max="1" value="0.3" step="0.05">
          <span class="param-lcd" id="delay_time_lcd">300ms</span>
        <div class="control-container">
          <label>Feedback</label>
          <input type="range" id="delay_feedback" min="0" max="0.8" value="0.35" step="0.05">
          <span class="param-lcd" id="delay_feedback_lcd">35%</span>
        <div class="coM
          <label>Delay Mix</label>
          <input type="range" id="delay_mix" min="0" max="0.6" value="0.2" step="0.05">
          <span class="param-lcd" id="delay_mix_lcd">20%</span>
        <div class="control-container">
          <label>Reverb Mix</label>
          <input type="range" id="reverb_mix" min="0" max="0.7" value="0.25" step="0.05">
          <span class="param-lcd" id="reverb_mix_lcd">25%</span>
    <!-- Visualizer Screen MoM
    <div class="screen-module">
      <div class="scope-box">
        <canvas id="oscilloscope"></canvas>
      <div class="vu-meter-box">
        <span style="font-size: 8px; font-weight: bold; color: #888888;">OUT L/R</span>
        <div class="vu-bar-bg"><div class="vu-bar-fill" id="vu_left"></div></div>
        <div class="vu-bar-bg"><div class="vu-bar-fill" id="vu_right"></div></div>
  <!-- Piano & Performance Area -->
  <div class="piano-section">
   <!-- LEFT COLUMN: Octave Toolbar & Wheels -->
    <div class="wheels-column">
      <div class="sub-toolbar-card">
        <button class="btn-oct" id="oct_down">OCT -</button>
        <span class="oct-text" id="oct_display">SHIFT: 0</span>
        <button class="btn-oct" id="oct_up">OCT +</button>
      <div class="wheels-holder">
        <div class="perform-wheel-module">
          <div class="wheel-well">
            <svg class="wheel-svg" id="pitch_wheel_svg" viewBox="0 0 80 90">
                <linearGradient id="wheelGrad" x1="0%" y1="0%" x2="100%" y2="0%">
                  <stop offset="0%" stop-color="#1a1a1a"/>
                  <stop offset="50%" stop-color="#3a3a3a"/>
                  <stop offset="100%" stop-color="#0a0a0a"/>
                </linearGradient>
              </defs>
              <rect x="5" y="5" width="70" height="80" rx="4" fill="url(#wheelGrad)" stroke="#000" stroke-width="2"/>
              <g stroke="#0a0a0a" stroke-width="2">
                <line x1="M
5" y1="20" x2="75" y2="20"/><line x1="5" y1="35" x2="75" y2="35"/><line x1="5" y1="50" x2="75" y2="50"/><line x1="5" y1="65" x2="75" y2="65"/>
              <rect id="pitch_notch" x="3" y="41" width="74" height="8" rx="2" fill="var(--accent-bitcoin)" stroke="#000" stroke-width="1"/>
          <div class="fx-label">Pitch Bend</div>
        <div class="perform-wheel-module">
          <div class="wheel-well">
            <svg class="wheel-svg" id=M
"mod_wheel_svg" viewBox="0 0 80 90">
              <rect x="5" y="5" width="70" height="80" rx="4" fill="url(#wheelGrad)" stroke="#000" stroke-width="2"/>
              <g stroke="#0a0a0a" stroke-width="2">
                <line x1="5" y1="20" x2="75" y2="20"/><line x1="5" y1="35" x2="75" y2="35"/><line x1="5" y1="50" x2="75" y2="50"/><line x1="5" y1="65" x2="75" y2="65"/>
              <rect id="mod_notch" x="3" y="81" width="74" height="8" rx="2" fill="var(--accent-bitcoin)" stroke="#000" strokM
          <div class="fx-label">Modulation</div>
    <!-- CENTER COLUMN: Professional Drumpads and Keyboard -->
    <div class="center-piano-box">
      <!-- 6 Hardware Drumpads -->
      <div class="drumpad-container">
        <div class="drumpad" id="pad_1">
          <svg class="drumpad-icon-svg" viewBox="0 0 32 32"><path d="M16,2C8.3,2,2,8.3,2,16s6.3,14,14,14s14-6.3,14-14S23.7,2,16,2z M16,28C9.4,28,4,22.6,4,16S9.4,4,16,4s1M
2,5.4,12,12S22.6,28,16,28z"/><circle cx="16" cy="16" r="4"/></svg>
          <div class="pad-label">Kick</div>
        <div class="drumpad" id="pad_2">
          <svg class="drumpad-icon-svg" viewBox="0 0 32 32"><path d="M28,10H4c-1.1,0-2,0.9-2,2v8c0,1.1,0.9,2,2,2h24c1.1,0,2-0.9,2-2v-8C30,10.9,29.1,10,28,10z M28,20H4v-8h24V20z"/><rect x="6" y="13" width="20" height="2"/><rect x="6" y="17" width="20" height="2"/></svg>
          <div class="pad-label">Snare</div>
        <div class="druM
          <svg class="drumpad-icon-svg" viewBox="0 0 32 32"><path d="M16,4C9.4,4,4,9.4,4,16s5.4,12,12,12s12-5.4,12-12S22.6,4,16,4z M16,26C10.5,26,6,21.5,6,16S10.5,6,16,6s10,4.5,10,10S21.5,26,16,26z"/><path d="M16,10c-3.3,0-6,2.7-6,6h2c0-2.2,1.8-4,4-4V10z"/></svg>
          <div class="pad-label">Open Hat</div>
        <div class="drumpad" id="pad_4">
          <svg class="drumpad-icon-svg" viewBox="0 0 32 32"><path d="M26,20c0-2.2-1.8-4-4-4s-4,1.8-4,4s1.8,4,4,4S26,22.2,26,20z M22,22M
c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S23.1,22,22,22z"/><path d="M12,16V6c0-1.1-0.9-2-2-2H6C4.9,4,4,4.9,4,6v18c0,1.1,0.9,2,2,2h6v2h14v-4H12V16z M6,24V6h4v10v6v2H6z"/></svg>
          <div class="pad-label">Closed Hat</div>
        <div class="drumpad" id="pad_5">
          <svg class="drumpad-icon-svg" viewBox="0 0 32 32"><path d="M24,4c-1.1,0-2,0.9-2,2v4h-2V6c0-1.1-0.9-2-2-2H6C4.9,4,4,4.9,4,6v18c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2v-4h2v4c0,1.1,0.9,2,2,2h2c1.1,0,2-0.9,2-2V6c0-1.1-0.9-2-2-2H24z M18,24H6M
V6h12V24z M26,24h-2V6h2V24z"/></svg>
          <div class="pad-label">Tom</div>
        <div class="drumpad" id="pad_6">
          <svg class="drumpad-icon-svg" viewBox="0 0 32 32"><path d="M26,16l-8,8v-6H6v-4h12V8L26,16z"/></svg>
          <div class="pad-label">Clap</div>
      <!-- Piano Keyboard -->
      <div class="keyboard" id="keyboard">
        <div class="octave-group" id="octave1">
          <div class="key white" data-note="C4"><span class="key-tag">Z</span></M
          <div class="key black" data-note="C#4"><span class="key-tag">S</span></div>
          <div class="key white" data-note="D4"><span class="key-tag">X</span></div>
          <div class="key black" data-note="D#4"><span class="key-tag">D</span></div>
          <div class="key white" data-note="E4"><span class="key-tag">C</span></div>
          <div class="key white" data-note="F4"><span class="key-tag">V</span></div>
          <div class="key black" data-note="F#4"><span class="key-tag">G</span></div>
        <div class="key white" data-note="G4"><span class="key-tag">B</span></div>
          <div class="key black" data-note="G#4"><span class="key-tag">H</span></div>
          <div class="key white" data-note="A4"><span class="key-tag">N</span></div>
          <div class="key black" data-note="A#4"><span class="key-tag">J</span></div>
          <div class="key white" data-note="B4"><span class="key-tag">M</span></div>
        <div class="octave-group" id="octave2">
          <div class="key whiteM
" data-note="C5"><span class="key-tag">Q</span></div>
          <div class="key black" data-note="C#5"><span class="key-tag">2</span></div>
          <div class="key white" data-note="D5"><span class="key-tag">W</span></div>
          <div class="key black" data-note="D#5"><span class="key-tag">3</span></div>
          <div class="key white" data-note="E5"><span class="key-tag">E</span></div>
          <div class="key white" data-note="F5"><span class="key-tag">R</span></div>
          <div class="key black" data-nM
ote="F#5"><span class="key-tag">5</span></div>
          <div class="key white" data-note="G5"><span class="key-tag">T</span></div>
          <div class="key black" data-note="G#5"><span class="key-tag">6</span></div>
          <div class="key white" data-note="A5"><span class="key-tag">Y</span></div>
          <div class="key black" data-note="A#5"><span class="key-tag">7</span></div>
          <div class="key white" data-note="B5"><span class="key-tag">U</span></div>
-- RIGHT COLUMN: Keyboard Banner & Shifted EFX Knobs -->
    <div class="fx-column">
      <div class="key-spec-banner">
        24 Keys (C4 to B5)<br>+ 6 Synth Drum Pads
      <div class="fx-dials-holder">
        <div class="perform-wheel-module">
          <div class="fx-dial-svg-well">
            <svg class="wheel-svg" id="flanger_dial_svg" viewBox="0 0 80 80">
              <defs>
                <linearGradient id="flKnob" x1="0%" y1="0%" x2="100%" y2="100%">
                  <stop offset="0%"M
 stop-color="#3a3a3a"/>
                  <stop offset="100%" stop-color="#0a0a0a"/>
                </linearGradient>
              </defs>
              <circle cx="40" cy="40" r="35" fill="url(#flKnob)" stroke="#000" stroke-width="2"/>
              <g stroke="#1a1a1a" stroke-width="1">
                <line x1="40" y1="5" x2="40" y2="10"/><line x1="75" y1="40" x2="70" y2="40"/><line x1="40" y1="75" x2="40" y2="70"/><line x1="5" y1="40" x2="10" y2="40"/>
              <line id="flanger_marker"M
 x1="40" y1="40" x2="40" y2="15" stroke="var(--accent-bitcoin)" stroke-width="3" stroke-linecap="round" transform="rotate(-135 40 40)"/>
          <div class="fx-label">Flanger EFX</div>
        <div class="perform-wheel-module">
          <div class="fx-dial-svg-well">
            <svg class="wheel-svg" id="arp_dial_svg" viewBox="0 0 80 80">
              <circle cx="40" cy="40" r="35" fill="url(#flKnob)" stroke="#000" stroke-width="2"/>
              <g stroke="M
#1a1a1a" stroke-width="1">
                <line x1="40" y1="5" x2="40" y2="10"/><line x1="75" y1="40" x2="70" y2="40"/><line x1="40" y1="75" x2="40" y2="70"/><line x1="5" y1="40" x2="10" y2="40"/>
              <line id="arp_marker" x1="40" y1="40" x2="40" y2="15" stroke="var(--accent-bitcoin)" stroke-width="3" stroke-linecap="round" transform="rotate(-135 40 40)"/>
          <div class="fx-label">Arp EFX</div>
  let octaveShift = 0;
  const activeVoices = {};
  const heldNotesList = [];
  const performState = {
  let masterGain, globalFilterNode, delayNode, delayFeedbackNode, delayGainNode, analyser;
  let flangerDelayNode, flangerLfo, flangerLfoGain, flangerFeedback, flangerWetGain;
  let modLfo, modLfoGain;
  let arpTimer = null;
  /* 19 PRESET SOUND DEFINITIONS - BITCOIN THEME */
itepaper: { osc1: 'sine',     osc2: 'triangle', detune: 25, sub: 0.4, fType: 'lowpass', cutoff: 7200,  res: 3.0, att: 0.15, dec: 1.0, sus: 0.8, rel: 2.0, dTime: 0.5, dFb: 0.5, dMix: 0.4, rMix: 0.6 }, // White Paper Day
    satoshi:    { osc1: 'sine',     osc2: 'sine',     detune: 12, sub: 0.6, fType: 'lowpass', cutoff: 5000,  res: 2.0, att: 0.8,  dec: 1.5, sus: 0.9, rel: 3.0, dTime: 0.7, dFb: 0.6, dMix: 0.5, rMix: 0.7 }, // Satoshi's Theme
    genesis:    { osc1: 'sawtooth', osc2: 'square',   detune: 8,  sub: 0.7, M
fType: 'lowpass', cutoff: 3000,  res: 5.0, att: 0.01, dec: 0.5, sus: 0.3, rel: 0.3, dTime: 0.2, dFb: 0.3, dMix: 0.2, rMix: 0.2 }, // Genesis Block
    magic:      { osc1: 'sine',     osc2: 'triangle', detune: 12, sub: 0.1, fType: 'lowpass', cutoff: 6500,  res: 8.0, att: 0.05, dec: 0.8, sus: 0.4, rel: 1.2, dTime: 0.4, dFb: 0.5, dMix: 0.4, rMix: 0.5 },
    horror:     { osc1: 'sawtooth', osc2: 'sawtooth', detune: 35, sub: 0.4, fType: 'bandpass',cutoff: 1200,  res: 14.0,att: 0.3,  dec: 1.2, sus: 0.8, rel: 2.0, dTime: M
0.6, dFb: 0.6, dMix: 0.5, rMix: 0.6 },
    superhero:  { osc1: 'sawtooth', osc2: 'square',   detune: 18, sub: 0.5, fType: 'lowpass', cutoff: 8000,  res: 3.5, att: 0.08, dec: 0.5, sus: 0.8, rel: 0.6, dTime: 0.25,dFb: 0.2, dMix: 0.15,rMix: 0.3 },
    pad:        { osc1: 'sawtooth', osc2: 'sine',     detune: 22, sub: 0.2, fType: 'lowpass', cutoff: 2200,  res: 2.0, att: 0.8,  dec: 1.5, sus: 0.9, rel: 2.5, dTime: 0.5, dFb: 0.4, dMix: 0.3, rMix: 0.6 },
    moog:       { osc1: 'sawtooth', osc2: 'square',   detune: 8,  subM
: 0.8, fType: 'lowpass', cutoff: 1400,  res: 9.0, att: 0.01, dec: 0.3, sus: 0.2, rel: 0.2, dTime: 0.1, dFb: 0.1, dMix: 0.0, rMix: 0.1 },
    synthwave:  { osc1: 'sawtooth', osc2: 'sawtooth', detune: 20, sub: 0.4, fType: 'lowpass', cutoff: 4500,  res: 4.0, att: 0.02, dec: 0.4, sus: 0.5, rel: 0.8, dTime: 0.35,dFb: 0.4, dMix: 0.25,rMix: 0.3 },
    cyberpunk:  { osc1: 'square',   osc2: 'square',   detune: 28, sub: 0.7, fType: 'lowpass', cutoff: 2800,  res: 12.0,att: 0.01, dec: 0.3, sus: 0.6, rel: 0.4, dTime: 0.2, dFb: M
0.3, dMix: 0.2, rMix: 0.2 },
    pluck:      { osc1: 'triangle', osc2: 'square',   detune: 10, sub: 0.1, fType: 'lowpass', cutoff: 5000,  res: 5.0, att: 0.01, dec: 0.2, sus: 0.0, rel: 0.2, dTime: 0.3, dFb: 0.4, dMix: 0.3, rMix: 0.2 },
    organ:      { osc1: 'sine',     osc2: 'square',   detune: 2,  sub: 0.3, fType: 'highpass',cutoff: 300,   res: 1.0, att: 0.01, dec: 0.1, sus: 1.0, rel: 0.1, dTime: 0.2, dFb: 0.2, dMix: 0.1, rMix: 0.3 },
    industrial: { osc1: 'sawtooth', osc2: 'square',   detune: 45, sub: 0.6, fTyM
pe: 'bandpass',cutoff: 2000,  res: 16.0,att: 0.01, dec: 0.5, sus: 0.3, rel: 0.5, dTime: 0.15,dFb: 0.5, dMix: 0.4, rMix: 0.3 },
    sub:        { osc1: 'sine',     osc2: 'triangle', detune: 0,  sub: 1.0, fType: 'lowpass', cutoff: 400,   res: 1.0, att: 0.02, dec: 0.2, sus: 0.9, rel: 0.3, dTime: 0.1, dFb: 0.0, dMix: 0.0, rMix: 0.0 },
    dreamy:     { osc1: 'sine',     osc2: 'sine',     detune: 15, sub: 0.0, fType: 'lowpass', cutoff: 3200,  res: 3.0, att: 0.4,  dec: 1.0, sus: 0.7, rel: 1.8, dTime: 0.45,dFb: 0.5, dMix:M
    arcade:     { osc1: 'square',   osc2: 'square',   detune: 4,  sub: 0.2, fType: 'lowpass', cutoff: 10000, res: 2.0, att: 0.01, dec: 0.1, sus: 0.8, rel: 0.1, dTime: 0.15,dFb: 0.2, dMix: 0.1, rMix: 0.1 },
    haunted:    { osc1: 'sine',     osc2: 'sawtooth', detune: 30, sub: 0.1, fType: 'bandpass',cutoff: 1600,  res: 10.0,att: 0.6,  dec: 1.2, sus: 0.8, rel: 2.2, dTime: 0.5, dFb: 0.6, dMix: 0.45,rMix: 0.65 },
    stabs:      { osc1: 'sawtooth', osc2: 'sawtooth', detune: 14, sub: 0.3, fType: 'lowpM
ass', cutoff: 6000,  res: 6.0, att: 0.01, dec: 0.15,sus: 0.1, rel: 0.2, dTime: 0.2, dFb: 0.2, dMix: 0.15,rMix: 0.25 },
    laser:      { osc1: 'sawtooth', osc2: 'triangle', detune: 50, sub: 0.0, fType: 'highpass',cutoff: 4000,  res: 15.0,att: 0.01, dec: 0.1, sus: 0.0, rel: 0.1, dTime: 0.25,dFb: 0.5, dMix: 0.4, rMix: 0.2 }
  function applyPreset(key) {
    const p = presets[key];
    document.getElementById('osc1_wave').value = p.osc1;
    document.getElementById('osc2_wave').value = p.oscM
    document.getElementById('osc2_detune').value = p.detune;
    document.getElementById('sub_mix').value = p.sub;
    document.getElementById('filter_type').value = p.fType;
    document.getElementById('cutoff').value = p.cutoff;
    document.getElementById('resonance').value = p.res;
    document.getElementById('attack').value = p.att;
    document.getElementById('decay').value = p.dec;
    document.getElementById('sustain').value = p.sus;
    document.getElementById('release').value = p.rel;
etElementById('delay_time').value = p.dTime;
    document.getElementById('delay_feedback').value = p.dFb;
    document.getElementById('delay_mix').value = p.dMix;
    document.getElementById('reverb_mix').value = p.rMix;
    const paramIds = ['osc2_detune', 'sub_mix', 'cutoff', 'resonance', 'attack', 'decay', 'sustain', 'release', 'delay_time', 'delay_feedback', 'delay_mix', 'reverb_mix'];
    paramIds.forEach(id => {
      document.getElementById(id).dispatchEvent(new Event('input'));
lementById('preset_select').addEventListener('change', (e) => {
    applyPreset(e.target.value);
  // Apply White Paper preset on load
  window.addEventListener('load', () => {
    applyPreset('whitepaper');
  function initAudio() {
    if (!audioCtx) {
      audioCtx = new (window.AudioContext || window.webkitAudioContext)();
      setupFXAndMaster();
      setupVisualizer();
      setupWheelsAndDials();
  function setupFXAndMaster() {
    masterGain = audioCtx.createGain();
    const filterType = document.getElementById('filter_type').value;
    const cutoff = parseFloat(document.getElementById('cutoff').value);
    const resonance = parseFloat(document.getElementById('resonance').value);
    globalFilterNode = audioCtx.createBiquadFilter();
    globalFilterNode.type = filterType;
    globalFilterNode.frequency.setValueAtTime(cutoff, audioCtx.currentTime);
    globalFilterNode.Q.setValueAtTime(resonance, audioCtx.currentTime);
    modLfo = audioCtx.createOsciM
    modLfoGain = audioCtx.createGain();
    modLfo.type = 'sine';
    modLfo.frequency.value = 5.5;
    modLfoGain.gain.value = 0;
    modLfo.connect(modLfoGain);
    modLfoGain.connect(globalFilterNode.frequency);
    flangerDelayNode = audioCtx.createDelay();
    flangerDelayNode.delayTime.value = 0.003;
    flangerLfo = audioCtx.createOscillator();
    flangerLfoGain = audioCtx.createGain();
    flangerLfo.type = 'sine';
    flangerLfo.frequency.value = 0.4;
    flangerLfoGain.gaiM
    flangerLfo.connect(flangerLfoGain);
    flangerLfoGain.connect(flangerDelayNode.delayTime);
    flangerLfo.start();
    flangerFeedback = audioCtx.createGain();
    flangerFeedback.gain.value = 0.5;
    flangerDelayNode.connect(flangerFeedback);
    flangerFeedback.connect(flangerDelayNode);
    flangerWetGain = audioCtx.createGain();
    flangerWetGain.gain.value = 0;
    flangerDelayNode.connect(flangerWetGain);
    delayNode = audioCtx.createDelay();
    delayNode.delayTime.value = parseFloM
at(document.getElementById('delay_time').value);
    delayFeedbackNode = audioCtx.createGain();
    delayFeedbackNode.gain.value = parseFloat(document.getElementById('delay_feedback').value);
    delayGainNode = audioCtx.createGain();
    delayGainNode.gain.value = parseFloat(document.getElementById('delay_mix').value);
    delayNode.connect(delayFeedbackNode);
    delayFeedbackNode.connect(delayNode);
    delayNode.connect(delayGainNode);
    analyser = audioCtx.createAnalyser();
    analyser.fftSize = 1024;
  globalFilterNode.connect(masterGain);
    globalFilterNode.connect(flangerDelayNode);
    flangerWetGain.connect(masterGain);
    masterGain.connect(analyser);
    masterGain.connect(delayNode);
    delayGainNode.connect(analyser);
    analyser.connect(audioCtx.destination);
  /* SYNTHESIZED DRUM ENGINE */
  function triggerDrumSound(type) {
    const now = audioCtx.currentTime;
    if (type === 'kick') {
      const osc = audioCtx.createOscillator();
      const gain = audioCtx.createGainM
      osc.frequency.setValueAtTime(120, now);
      osc.frequency.exponentialRampToValueAtTime(0.01, now + 0.4);
      gain.gain.setValueAtTime(1.0, now);
      gain.gain.exponentialRampToValueAtTime(0.01, now + 0.4);
      osc.connect(gain);
      gain.connect(masterGain);
      osc.start(now);
      osc.stop(now + 0.4);
    else if (type === 'snare') {
      const bufferSize = audioCtx.sampleRate * 0.2;
      const buffer = audioCtx.createBuffer(1, bufferSize, audioCtx.sampleRate);
      const data = bM
uffer.getChannelData(0);
      for (let i = 0; i < bufferSize; i++) data[i] = Math.random() * 2 - 1;
      const noise = audioCtx.createBufferSource();
      noise.buffer = buffer;
      const filter = audioCtx.createBiquadFilter();
      filter.type = 'highpass';
      filter.frequency.value = 1000;
      const noiseGain = audioCtx.createGain();
      noiseGain.gain.setValueAtTime(0.8, now);
      noiseGain.gain.exponentialRampToValueAtTime(0.01, now + 0.2);
      noise.connect(filter);
      noiseGain.connect(masterGain);
      const osc = audioCtx.createOscillator();
      const oscGain = audioCtx.createGain();
      osc.frequency.setValueAtTime(180, now);
      osc.frequency.exponentialRampToValueAtTime(0.01, now + 0.15);
      oscGain.gain.setValueAtTime(0.7, now);
      oscGain.gain.exponentialRampToValueAtTime(0.01, now + 0.15);
      osc.connect(oscGain);
      oscGain.connect(masterGain);
      noise.start(now);
      osc.start(now);
      noise.stop(now M
      osc.stop(now + 0.15);
    else if (type === 'openhat' || type === 'closedhat') {
      const isClosed = type === 'closedhat';
      const duration = isClosed ? 0.08 : 0.35;
      const bufferSize = audioCtx.sampleRate * duration;
      const buffer = audioCtx.createBuffer(1, bufferSize, audioCtx.sampleRate);
      const data = buffer.getChannelData(0);
      for (let i = 0; i < bufferSize; i++) data[i] = Math.random() * 2 - 1;
      const noise = audioCtx.createBufferSource();
      const filter = audioCtx.createBiquadFilter();
      filter.type = 'highpass';
      filter.frequency.value = 7000;
      const gain = audioCtx.createGain();
      gain.gain.setValueAtTime(0.6, now);
      gain.gain.exponentialRampToValueAtTime(0.01, now + duration);
      noise.connect(filter);
      filter.connect(gain);
      gain.connect(masterGain);
      noise.start(now);
      noise.stop(now + duration);
    else if (type === 'tom') {
      const osc = audiM
oCtx.createOscillator();
      const gain = audioCtx.createGain();
      osc.frequency.setValueAtTime(160, now);
      osc.frequency.exponentialRampToValueAtTime(40, now + 0.3);
      gain.gain.setValueAtTime(0.9, now);
      gain.gain.exponentialRampToValueAtTime(0.01, now + 0.3);
      osc.connect(gain);
      gain.connect(masterGain);
      osc.start(now);
      osc.stop(now + 0.3);
    else if (type === 'clap') {
      const bufferSize = audioCtx.sampleRate * 0.25;
      const buffer = audiM
oCtx.createBuffer(1, bufferSize, audioCtx.sampleRate);
      const data = buffer.getChannelData(0);
      for (let i = 0; i < bufferSize; i++) data[i] = Math.random() * 2 - 1;
      const noise = audioCtx.createBufferSource();
      noise.buffer = buffer;
      const filter = audioCtx.createBiquadFilter();
      filter.type = 'bandpass';
      filter.frequency.value = 1200;
      filter.Q.value = 3;
      const gain = audioCtx.createGain();
      gain.gain.setValueAtTime(0.8, now);
      gain.gain.setValueAtTimeM
      gain.gain.setValueAtTime(0.8, now + 0.02);
      gain.gain.setValueAtTime(0.1, now + 0.03);
      gain.gain.setValueAtTime(0.8, now + 0.04);
      gain.gain.exponentialRampToValueAtTime(0.01, now + 0.25);
      noise.connect(filter);
      filter.connect(gain);
      gain.connect(masterGain);
      noise.start(now);
      noise.stop(now + 0.25);
  document.getElementById('pad_1').addEventListener('mousedown', () => triggerDrumSound('kick'));
  document.getElementById('pad_2').aM
ddEventListener('mousedown', () => triggerDrumSound('snare'));
  document.getElementById('pad_3').addEventListener('mousedown', () => triggerDrumSound('openhat'));
  document.getElementById('pad_4').addEventListener('mousedown', () => triggerDrumSound('closedhat'));
  document.getElementById('pad_5').addEventListener('mousedown', () => triggerDrumSound('tom'));
  document.getElementById('pad_6').addEventListener('mousedown', () => triggerDrumSound('clap'));
  const noteFreqs = {
    'C4': 261.63, 'C#4': 277.18, 'DM
4': 293.66, 'D#4': 311.13, 'E4': 329.63, 'F4': 349.23,
    'F#4': 369.99, 'G4': 392.00, 'G#4': 415.30, 'A4': 440.00, 'A#4': 466.16, 'B4': 493.88,
    'C5': 523.25, 'C#5': 554.37, 'D5': 587.33, 'D#5': 622.25, 'E5': 659.25, 'F5': 698.46,
    'F#5': 739.99, 'G5': 783.99, 'G#5': 830.61, 'A5': 880.00, 'A#5': 932.33, 'B5': 987.77
  const keyToNote = {
    'z': 'C4', 's': 'C#4', 'x': 'D4', 'd': 'D#4', 'c': 'E4', 'v': 'F4', 'g': 'F#4', 'b': 'G4', 'h': 'G#4', 'n': 'A4', 'j': 'A#4', 'm': 'B4',
    'q': 'C5', '2': 'C#5'M
, 'w': 'D5', '3': 'D#5', 'e': 'E5', 'r': 'F5', '5': 'F#5', 't': 'G5', '6': 'G#5', 'y': 'A5', '7': 'A#5', 'u': 'B5'
  document.querySelectorAll('.key').forEach(keyEl => {
    const note = keyEl.dataset.note;
    keyEl.addEventListener('mousedown', () => registerNotePress(note));
    keyEl.addEventListener('mouseup', () => registerNoteRelease(note));
    keyEl.addEventListener('mouseleave', () => registerNoteRelease(note));
  window.addEventListener('keydown', (e) => {
    if (e.repeat) return;
 k = e.key.toLowerCase();
    if (keyToNote[k]) registerNotePress(keyToNote[k]);
  window.addEventListener('keyup', (e) => {
    const k = e.key.toLowerCase();
    if (keyToNote[k]) registerNoteRelease(keyToNote[k]);
  document.getElementById('oct_down').addEventListener('click', () => {
    if (octaveShift > -2) octaveShift--;
    document.getElementById('oct_display').innerText = `SHIFT: ${octaveShift}`;
  document.getElementById('oct_up').addEventListener('click', () => {
    if (octaveShift M
    document.getElementById('oct_display').innerText = `SHIFT: ${octaveShift}`;
  function setupParamLCDs() {
    const params = [
      { id: 'osc2_detune', lcd: 'osc2_detune_lcd', unit: 'ct' },
      { id: 'sub_mix', lcd: 'sub_mix_lcd', unit: '%', factor: 100 },
      { id: 'cutoff', lcd: 'cutoff_lcd', unit: ' kHz', factor: 0.001, fixed: 1 },
      { id: 'resonance', lcd: 'resonance_lcd', unit: '', fixed: 1 },
      { id: 'attack', lcd: 'attack_lcd', unit: 'ms', factor: 1000 },
id: 'decay', lcd: 'decay_lcd', unit: 'ms', factor: 1000 },
      { id: 'sustain', lcd: 'sustain_lcd', unit: '%', factor: 100 },
      { id: 'release', lcd: 'release_lcd', unit: 'ms', factor: 1000 },
      { id: 'delay_time', lcd: 'delay_time_lcd', unit: 'ms', factor: 1000 },
      { id: 'delay_feedback', lcd: 'delay_feedback_lcd', unit: '%', factor: 100 },
      { id: 'delay_mix', lcd: 'delay_mix_lcd', unit: '%', factor: 100 },
      { id: 'reverb_mix', lcd: 'reverb_mix_lcd', unit: '%', factor: 100 }
      const input = document.getElementById(p.id);
      const lcd = document.getElementById(p.lcd);
      input.addEventListener('input', () => {
        let val = parseFloat(input.value);
        if (p.id === 'cutoff' && globalFilterNode) {
          globalFilterNode.frequency.setValueAtTime(val, audioCtx.currentTime);
        } else if (p.id === 'resonance' && globalFilterNode) {
          globalFilterNode.Q.setValueAtTime(val, audioCtx.currentTime);
        } else if (p.id === 'delay_time' &M
          delayNode.delayTime.setValueAtTime(val, audioCtx.currentTime);
        } else if (p.id === 'delay_feedback' && delayFeedbackNode) {
          delayFeedbackNode.gain.setValueAtTime(val, audioCtx.currentTime);
        } else if (p.id === 'delay_mix' && delayGainNode) {
          delayGainNode.gain.setValueAtTime(val, audioCtx.currentTime);
        if (p.factor) val *= p.factor;
        if (p.fixed) val = val.toFixed(p.fixed);
        else val = Math.round(val);
        lcd.innerTexM
  function setupWheelsAndDials() {
    const modWell = document.getElementById('mod_wheel_svg');
    const modNotch = document.getElementById('mod_notch');
    let isDraggingMod = false;
    modWell.addEventListener('mousedown', (e) => { isDraggingMod = true; handleModDrag(e); });
    window.addEventListener('mousemove', (e) => { if (isDraggingMod) handleModDrag(e); });
    window.addEventListener('mouseup', () => { isDraggingMod = false; });
on handleModDrag(e) {
      const rect = modWell.getBoundingClientRect();
      let y = e.clientY - rect.top;
      y = Math.max(5, Math.min(85, y));
      const pct = (y - 5) / 80;
      performState.mod = Math.round((1 - pct) * 127);
      const notchY = 5 + (pct * 80) - 4;
      modNotch.setAttribute('y', Math.max(5, Math.min(81, notchY)));
      updateSynthParams();
    const pitchWell = document.getElementById('pitch_wheel_svg');
    const pitchNotch = document.getElementById('pitch_notch');
DraggingPitch = false;
    pitchWell.addEventListener('mousedown', (e) => { isDraggingPitch = true; handlePitchDrag(e); });
    window.addEventListener('mousemove', (e) => { if (isDraggingPitch) handlePitchDrag(e); });
    window.addEventListener('mouseup', () => {
      if (isDraggingPitch) {
        isDraggingPitch = false;
        performState.pitch = 0;
        pitchNotch.setAttribute('y', 41);
        updateSynthParams();
    function handlePitchDrag(e) {
      const rect = pitchWell.getBouM
      let y = e.clientY - rect.top;
      y = Math.max(5, Math.min(85, y));
      const pct = (y - 5) / 80;
      performState.pitch = Math.round((0.5 - pct) * 254);
      const notchY = 5 + (pct * 80) - 4;
      pitchNotch.setAttribute('y', Math.max(5, Math.min(81, notchY)));
      updateSynthParams();
    const flangerWell = document.getElementById('flanger_dial_svg');
    const flangerMarker = document.getElementById('flanger_marker');
    let isDraggingFlanger = false;
    flangerWell.addEventListener('mousedown', (e) => { isDraggingFlanger = true; startYFlanger = e.clientY; });
    window.addEventListener('mousemove', (e) => { if (isDraggingFlanger) handleDialDrag(e, 'flanger', flangerMarker); });
    window.addEventListener('mouseup', () => { isDraggingFlanger = false; });
    const arpWell = document.getElementById('arp_dial_svg');
    const arpMarker = document.getElementById('arp_marker');
    let isDraggingArp = false;
    let startYArp = 0;
entListener('mousedown', (e) => { isDraggingArp = true; startYArp = e.clientY; });
    window.addEventListener('mousemove', (e) => { if (isDraggingArp) handleDialDrag(e, 'arp', arpMarker); });
    window.addEventListener('mouseup', () => { isDraggingArp = false; });
    function handleDialDrag(e, stateKey, markerEl) {
      const sensitivity = 2;
      const startY = stateKey === 'flanger' ? startYFlanger : startYArp;
      const dy = startY - e.clientY;
      if (stateKey === 'flanger') startYFlanger = e.cM
      else startYArp = e.clientY;
      let newVal = performState[stateKey] + (dy / sensitivity);
      newVal = Math.max(0, Math.min(127, newVal));
      performState[stateKey] = newVal;
      const angle = (newVal / 127) * 270 - 135;
      markerEl.setAttribute('transform', `rotate(${angle} 40 40)`);
      updateSynthParams();
  function updateSynthParams() {
    if (!audioCtx) return;
    const now = audioCtx.currentTime;
    const pitchCents = (performState.pitch / 127) * 200;
st note in activeVoices) {
      const voice = activeVoices[note];
      voice.osc1.detune.setValueAtTime(pitchCents, now);
      const baseDetune = parseFloat(document.getElementById('osc2_detune').value);
      voice.osc2.detune.setValueAtTime(baseDetune + pitchCents, now);
    if (modLfoGain) {
      const modAmount = (performState.mod / 127) * 1800;
      modLfoGain.gain.setValueAtTime(modAmount, now);
    if (flangerLfoGain && flangerWetGain) {
      const flangerAmount = performState.flanger / 1M
      flangerLfoGain.gain.setValueAtTime(flangerAmount * 0.0025, now);
      flangerWetGain.gain.setValueAtTime(flangerAmount * 0.7, now);
    if (performState.arp > 5) {
      startArpeggiator();
      stopArpeggiator();
  function registerNotePress(note) {
    if (!heldNotesList.includes(note)) heldNotesList.push(note);
    if (performState.arp > 5) {
      startArpeggiator();
  function registerNoteRelease(note) {
    const idx = heldM
NotesList.indexOf(note);
    if (idx !== -1) heldNotesList.splice(idx, 1);
    if (performState.arp > 5) {
      if (heldNotesList.length === 0) stopArpeggiator();
      noteOff(note);
  function startArpeggiator() {
    if (arpTimer) return;
  function stopArpeggiator() {
      clearTimeout(arpTimer);
      arpTimer = null;
    for (const note in activeVoices) {
      noteOff(note);
  function runArpStep() {
te.arp <= 5 || heldNotesList.length === 0) {
      stopArpeggiator();
    for (const note in activeVoices) noteOff(note);
    if (arpIndex >= heldNotesList.length) arpIndex = 0;
    const currentNote = heldNotesList[arpIndex];
    noteOn(currentNote);
    arpIndex = (arpIndex + 1) % heldNotesList.length;
    const speedMs = 220 - ((performState.arp / 127) * 180);
    arpTimer = setTimeout(runArpStep, speedMs);
  function noteOn(note) {
    if (activeVoices[note]) returnM
    const now = audioCtx.currentTime;
    const osc1Type = document.getElementById('osc1_wave').value;
    const osc2Type = document.getElementById('osc2_wave').value;
    const detune = parseFloat(document.getElementById('osc2_detune').value);
    const subMix = parseFloat(document.getElementById('sub_mix').value);
    const attack = parseFloat(document.getElementById('attack').value);
    const decay = parseFloat(document.getElementById('decay').value);
    const sustain = parseFloat(document.getElementById(M
    let pitchCents = (performState.pitch / 127) * 200;
    const pitch = noteFreqs[note] * Math.pow(2, octaveShift);
    const osc1 = audioCtx.createOscillator();
    const osc2 = audioCtx.createOscillator();
    const subOsc = audioCtx.createOscillator();
    osc1.type = osc1Type;
    osc1.frequency.setValueAtTime(pitch, now);
    osc1.detune.setValueAtTime(pitchCents, now);
    osc2.type = osc2Type;
    osc2.frequency.setValueAtTime(pitch, now);
    osc2.detune.setValueAtTime(detune + pitchM
    subOsc.type = 'sine';
    subOsc.frequency.setValueAtTime(pitch / 2, now);
    const subGainNode = audioCtx.createGain();
    subGainNode.gain.value = subMix;
    const envGain = audioCtx.createGain();
    envGain.gain.setValueAtTime(0, now);
    envGain.gain.linearRampToValueAtTime(0.4, now + attack);
    envGain.gain.exponentialRampToValueAtTime(Math.max(sustain * 0.4, 0.001), now + attack + decay);
    osc1.connect(envGain);
    osc2.connect(envGain);
    subOsc.connect(subGainNode);
GainNode.connect(envGain);
    envGain.connect(globalFilterNode);
    osc1.start(now);
    osc2.start(now);
    subOsc.start(now);
    activeVoices[note] = { osc1, osc2, subOsc, envGain };
    const el = document.querySelector(`[data-note="${note}"]`);
    if (el) el.classList.add('active');
  function noteOff(note) {
    if (!activeVoices[note]) return;
    const now = audioCtx.currentTime;
    const release = parseFloat(document.getElementById('release').value);
    const { osc1, osc2, subOsc, envGain }M
 = activeVoices[note];
    envGain.gain.cancelScheduledValues(now);
    envGain.gain.setValueAtTime(envGain.gain.value, now);
    envGain.gain.exponentialRampToValueAtTime(0.0001, now + release);
    osc1.stop(now + release);
    osc2.stop(now + release);
    subOsc.stop(now + release);
    delete activeVoices[note];
    const el = document.querySelector(`[data-note="${note}"]`);
    if (el) el.classList.remove('active');
  function setupVisualizer() {
    const canvas = document.getElementById('oscilloscoM
    const ctx = canvas.getContext('2d');
    canvas.width = canvas.offsetWidth;
    canvas.height = canvas.offsetHeight;
    const dataArray = new Uint8Array(analyser.frequencyBinCount);
    function renderFrame() {
      requestAnimationFrame(renderFrame);
      analyser.getByteTimeDomainData(dataArray);
      ctx.fillStyle = '#050505';
      ctx.fillRect(0, 0, canvas.width, canvas.height);
      ctx.lineWidth = 2;
      ctx.strokeStyle = '#f7931a';
      ctx.beginPath();
      const sliceWidth = canvasM
.width / dataArray.length;
      let sumSq = 0;
      for (let i = 0; i < dataArray.length; i++) {
        const v = dataArray[i] / 128.0;
        const y = v * canvas.height / 2;
        if (i === 0) ctx.moveTo(x, y);
        else ctx.lineTo(x, y);
        x += sliceWidth;
        const sample = (dataArray[i] - 128) / 128;
        sumSq += sample * sample;
      ctx.lineTo(canvas.width, canvas.height / 2);
      const rms = Math.sqrt(sumSq / dataArray.length);
   const vuPct = Math.min(Math.round(rms * 250), 100);
      document.getElementById('vu_left').style.width = vuPct + '%';
      document.getElementById('vu_right').style.width = Math.max(vuPct - 3, 0) + '%';
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"ZBYY","amt":"100"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"33000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"26000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"15000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"2000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"35000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"68"}h!
text/plain;charset=utf-8
C{"p":"brc-20","op":"transfer","tick":"X@AI","amt":"50000000000000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"10000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"50"}h!
text/plain;charset=utf-8
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"20"}h!
text/plain;charset=utf-8
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"11000"}h!
text/plain;charset=utf-8
5{"p":"brc-20","op":"mint","tick":" ORDl","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"mint","tick":"d
gs","amt":"747470"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"mint","tick":"d
gs","amt":"747470"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"mint","tick":"d
gs","amt":"747470"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"mint","tick":"d
gs","amt":"747470"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"mint","tick":"d
gs","amt":"747470"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"mint","tick":"d
gs","amt":"747470"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"mint","tick":"
it","amt":"8457405300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"mint","tick":"NF
S","amt":"999.999"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"mint","tick":"
text/plain;charset=utf-8
3{"p":"brc-20","op":"mint","tick":"Iinux","amt":"1"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"mint","tick":"bayc ","amt":"0.00215"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"mint","tick":"ordit","amt":"1000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"mint","tick":"ETFai","amt":"21000"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"mint","tick":"turon","amt":"1000"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"mint","tick":"ordiu","amt":"1000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"5000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"5000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"5000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"5000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"5000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"5000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"3000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"3000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"3000"}h!
(j&SODA #8937 - #8938: Drawn Jun 28, 2026
dnamejSODA #8937edrawnlJun 28, 2026dseedx
twins retire - panel 1/2dsizec2x1hsoftwarex/Pixaki 4.6 - iPad Pro 13" M5 - Apple Pencil Pro
dnamejSODA #8938edrawnlJun 28, 2026dseedx
twins retire - panel 2/2dsizec2x1hsoftwarex/Pixaki 4.6 - iPad Pro 13" M5 - Apple Pencil Pro
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"W
ed","amt":"0.000001"}h!
DjB0x831d7d1c566c19d8d8ccff1255d920c5ae162d93bcb4a77bcf2ff0aa10b5d1ce
DjB0xba32461c981366d7525a2c1a7ffb307480504812664ba4c0f59d3c0b2546d1fe
DjB0x13b7d1ca9510ba1de84e4adb94eaa51bb7b94ef44994fbca18cf54f74d8c156a
DjB0xd8f35a8b4e2d0814f375f6291ba9cb240de8d703843abc4010ed425b776ddb6d
DjB0xfadc67a214376b372873ae0205155dc35e8873d591464fdc4bd9286d188d3a8e
DjB0xc66a8aa3bc45fe819a967b4ef4c7b701c21745419c17c0960837f869bff6f748
DjB0x615e67efadb39d4a47068c69218f583881b7be546c95662cbe9fefc568e28a3a
OjLL0x2e10aec9098686ba1620e219c07568c7673ccb481c93c8c6b56a450e6d734dcb=|lifi
DjB0x1620a8663b1d65440944984f7f955ca9d8b59b40217548414b7ea2166818aab8
FjDOUT:7B5044114A5119799BBD90E69781C70196EE21949E79AB40918C9AFCD823F0BE
6j4LpL:to:USDT(TRON):TUk3Z1VZU8q5993pCr9karwB4uZyWtYNps
=j;YpE:to:USDT(BSC):0x47eA68939063B80416Bb81dc49f898BB4Bb576f2
=j;Z9j:to:USDT(BSC):0x0A71831CA2BA35AbbF0D4c2D8088849Dc423416b
=j;Zm9:to:USDT(BSC):0xb735Ca5b9b0B4E4d96A3A4895A412c6b558b77f1
=j;Ru6:to:USDT(BSC):0x4f5fBb4f28FcC8c7FBF3DE9E145945D12bC2DeBe
6j4iRu:to:USDT(TRON):TK6uCtGHwhcoQRhSrJF7F9icWqTUX88K8DK:
6j4kJW:to:USDT(TRON):THDmWjWZcT8uYm6ov1qa4cdBvmZdZFaXjM
=j;3UW:to:USDT(BSC):0x6fafB4365B88bf537AA5f20B32532cc1bc5632D0*
6j4Ty5:to:USDT(TRON):TABbqtfKxmXBN2xSJXn1ha3npvmwimubWM
6j4ZGL:to:USDT(TRON):TYoZeFvHK2aM4vRXpcaRic3hcC1eqVYuzcg
6j4vdD:to:USDT(TRON):TSz8UhDhj82fN6M3to3J8x2kbb4ogLyMGiKm
?j=SK1:to:USDC(SOL):9eTwZmPna7WNTDfkUGMAbe1NMCkTq22fbaHTGcYw3NdF
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"405"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"ZBYY","amt":"100"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
SODA group: twins power
DjB0x4179fa93031c8b0a4018774f07735098fb52d4f1cc2b5f10279fb33193aa0a0e
DjB0xed4b88a5afe7ff0b765d6a851ff3f04236103873ec0ffed5558b8e2d80fc189e
DjB0x10d6fdb1ef27e20c249af3f3422caf714cf39e2b5adf8ec5d080a12a22c0ff31
DjB0xafbb9bcf5a81b55fed4e79a9121d4580ba0d4d0b24a0f3d65d21cc0813ddf1b8
DjB0xbfcc4e35b54e32aa310ffb482a3aa1e44465dde7dadcfce99092237929371b55
DjB0x0e61a4b0bab80867ae880e0ab71af4a5fa2cccb08d480ee9e744ab60df981e63
DjB0x8538bbb586218851a0cebd5b0a0ba18ef147e040712679928a42e880f03f9753
DjB0x694a603f85f840773025cfe71b91c09adb8e609654ae05b0a8c7f219660aef38
DjB0x3f05b1b927fa8e993fd08d977581290c36042d5c9c97cc60d9f770d24058490e
DjB0xb05740cbe367e763e3dd78ab8d13d5ab1fd461a92363f8ef0000621a2cd99fd0
DjB0x84129d159acfa719fd1c08565106648e3e26510b69c2ffaea7fe210a0fb52e4e
DjB0xb8f9401dcc1af44e40ed66ca249407b0d56c62635484d458ee449b08dd777877
DjB0xf3aad0dc78dd72f115da8faee69b5ff6483022fc56216d14ffdd85a0cca61c81
DjB0x215b82c9ff5e539f278a3ef1fcd09b1a2bbe5a17dd83484855d540a354eb01f2
DjB0x2e9b0adde37444d6148c5d474613ca336087221ae9bb6721e9001213fb8b0a13
DjB0x8c0766198b4e07bf050a12747609089e93dc688bb2b997f30ea0e09dd37289d9
DjB0x698f37b1ab588db4ccb2764b3a4532bbbe9886ce1e9a5fb0c3565477b1032767
{jLx0xc6fd4654def1d4ebcd303e913d3ec620334fcfa13b8765e654aea2b297d130da|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
DjB0x7ea99e4e58b4d813dd9ba467f7e90084f2d3a9c74dee66d0e9ef3cb04e288333
DjB0x98d3647eb08e5b8b833d762268b06403079f5679ff8a389038d57ebea29c3469
OjLL0x8b48c8e0f9b25952c4ea860ff54fb909ec6ef21f4ec0e432b2ee721afa7d1b95=|lifi'
OjLL0x23ea84cf9b0dda9ea071b2422df77cf2afb4672ae6fe501c8255f60dcdb86c24=|lifii
OjLL0x446480d1a0906166ac49a0ee83201aa375f51f2f692c54d1a530e7636ac79a55=|lifi
;j9to:USDT(SOL):8yyvi6ZPe4zQe3GCB5YCEUjkvpt4ypkgGJKLEuENXdNA
FjDOUT:D47075069B32FA5C4D90416343AB44C221410AF7E3CA8BC5638BCE8D79799698
FjDOUT:98C4193C7694C1AA923168E135433BB6A3BEC9D2054033EA1C38234BB370A2C4
FjDOUT:2482641E7EDC1D7305D2334DA7B036A47278DEBF12E50D8C6BFEE412481FB565
FjDOUT:550EBB1FD3B6660FFCA9519D436D6640AA299A41BF70C568542585D11CB8F6FB
FjDOUT:8A1277BBFCAACA34258B1B7A5A1FCB460E57EED822FAD49699D3969852BE5C47
FjDOUT:57BC72521478B297C49EE5D35CEFA71BB68C95B7BF5A6AD33C9C1585B7C41990
8j6nOU:to:USDC:0x2375c97Dc90edf2F8373E09884B393E856bB54F6
;j9to:USDT(ERC20):0xBCe8C0de487c2d7e5d47e2cFe57CdD67F47a8392
=j;9lH:to:USDT(BSC):0xe57C871e435057D1B326D69ce5412171742d9A72
=j;msS:to:USDT(BSC):0x12904ff62C79fd54646E96173f86d8478723B85F
=j;68v:to:USDC(POL):0x1ea8A9ac22123605450012151F27b210773EF596l
6j46AL:to:USDT(TRON):TGEKx4dTKKQcYf7Bb7QEryH2SJruyvdZqWv
6j4M6e:to:USDT(TRON):TUBtk5d2LYgtpNtUYYW4ruS2RXrbagNuVj
=j;pKR:to:USDT(BSC):0xa1a18b07eF26982b4B0f07e5eB1e9aed0F8b9C7BH4
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"960366402960418"}J
GjE{"p":"crc-20","op":"transfer","tick":"BURN","amt":"1978017920770703"}J
B22d6a61c45bdf5613e1cde580da33e369892d0523cbaccc995b5922af426f15b:1a
DjB0x35171912e31793e2f6bcdcc91fcd2252ccc18550c1b25ffbd4f9d2cbb551adc2
HjF=:u:0x6EE9473108b7747fAA47Fd7FcB2750AED482a6a9:1442941653673/200:two:01
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"880000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"880000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"880000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"880000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"880000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"880000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"880000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"880000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"880000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"880000"}h!
<j:=:e:0xEEDA8d2cf21b9115809c317B65D144373Ab3195F:0/1/1:ej:75%N
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Avsor","amt":"280"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Avsor","amt":"280"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"15"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"1054987500"}h!
z/Foundry USA Pool #dropgold/x
DjB0x581d2370df272e1d5aa16e98430af0c2c5ad41a8b34cac71bb8c4752d626e575
DjB0x2538b1aae417814d9f08abc24c445d9e8858256b6ae69da99d336d124b2f42e0
DjB0xcb9ba687a367273d706f061c10ff9b8c9602852838f0718ec65488b57896ca84
DjB0x4b3fca875fc1c7c35b88adefdceeab36bccec338759888a62e115d4c6a4eb499
DjB0x7ceb8630dc6b2cee3df09365411e4336a13851c88971733fcede06c63eca47e2
DjB0x0af71d7e6d188c06ecefa77a7f9c3d91c6ac9d31cf352e7f1e1a84f51c6259a4
DjB0x885f997d6b02dada32cff069df126a40d811d3bbccec97dc9d90c6ff0aa1c07b
DjB0xf00b917e8e0a902ed15e26ddd33039334b84c4af8a278a81ba3197531563aa20
DjB0x81490b1ed8b27b71c68c2080de4edc5ce926767211430a2577375cd1e86bede1
DjB0x703c61c74a9b483c3bc811223cc049f50b310ec99db89baa19844e8a5f6d8b93
DjB0xdcba05de6eae267198c486d34ed5a2085e0419285fae343e4f1eedcc088273e1
7j5=:l:ltc1qv6jzye3j7dd268t99l748vrs42guaurr2cjrhe:0/1/0
DjB0x76cb0f439a51c0bb7977a77784f627e1c0b681b335f6e12803a621299e4d65a6
DjB0xab59009fb9e02e61444f3a34ad762f11dba1c3d4cf856cfda2154a1b336d78d9
DjB0x66fc42601bd184c929dfa7fa6ded2ad01a5ed5d0b57b8c5df50f486816b6a2d1
DjB0x7242e2bd1efdd97c68fa7b89d7e32b1cc757ec47ae938851d631f664f0348b94
DjB0x16eab4e94d55f3330f8cb95115545efcc4c7e91135f189f4ee05b4a5e413bb45
DjB0x89eea14cdd9699f4b36f16fd21fa667637a3b6850fa8ba41b7d7d52428bcf44b
DjB0x6653eb0ce23ba10c034945278d73d663b472289d1179573f7cadad73c8150704
DjB0xf0e8d9567c05d50ddb93ec9358df4a51b00c89e427a82cecb0626a2401bfc681
DjB0x8538bbb586218851a0cebd5b0a0ba18ef147e040712679928a42e880f03f9753
DjB0x992aea021cb613ba2f305b4562829fda665b625d385217909da2675e2e53f93b
DjB0x302e265aa62dac1ade16f6598425c7725375525a621b63950ab4d8ddfc7b947f
DjB0x71c164e538c04d3e95b8b2d09d51e8a40be257067a7f8c8eea48d948d4d17fab
DjB0x53f91df0c64d454b6a4ccc547d0ab487b6b3033375279b5ab47e87fbfaa69f69
DjB0xb37d72314c2394268a82f45983b651f37a5fda5557f980ad848b836c482db57e
{jLx0x7903e75afa37dabff187aff87e20f62f5f364d4d11170e1fdf7b423f759e5f65|depositor=bc1q4xyx4j4drt3r5edukk8umwn6cfec6thnqmufuq|
{jLx0xf1c2af541f94a5614475f49d120b66ac807cfe16a51cda4fe78378d6850639e2|depositor=bc1qg6z83euknt5kr2gkyzg8gavp55s0zv089pt7q3|
QjLN=:ETH.USDT:0xFAE1E86FA78166ae0C0CE516d090222855FfD0E4:226146400/0/0:-_/t1:0/70
DjB0x3139ec413a2622c68b366e536c0d26b793c973542437d1b8806cfdce3f75180eU
DjB0x2820fc88e90b0caf5f02177ce286a23288bd712bc38252141ff3f9060ebe6cddd
DjB0x0d92f87659870527f6b31da3b72d87d25f12d4267d9943cc8d29b1c833968cd3
=j;MLR:to:USDT(BSC):0xb735Ca5b9b0B4E4d96A3A4895A412c6b558b77f1
9j7W33:to:SOL:2ZyuTPayZBvJYA5rXskdsB1Tv5JTAtsZmU2cCimrYomG
4j2to:LTC:ltc1qhjcuehdtkl6fdhup67ptpfj6uuyfc39ml9qhwz
+j)to:TRX:TGK1yinCet1SvLxLokAAUAdJh6NpnWH6fe
GjE=:ETH.USDT:0xf1d99b62691c79454cb970453f90e914875d33a2:31405203175/1/0
FjDOUT:684281B050F0E87F3C86CA6D2A89297E5C0F53BD833838F64559AEE5FD5FB553
jBackgroundjLight GreydBodydBulleShirtgBretelsdFacehFrecklesdHatsdNonedItemcBagjAttributesdPipe
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i9" width="1254" height="1254"/><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i18" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai4" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i14" width="125M
4" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i24" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi17" width="1254" height="1254"/></svg>hA
=j;zqN:to:USDT(BSC):0xce732aCcC19E5F38523b79C5449B5dc80C4eC9Cf
?j=IUS:to:USDC(SOL):HgQwJP1pHJo49PgQEH2TD9g4Z6K9zFvR5HucQBi7d2ty
6j4OMF:to:USDT(TRON):TTyFbWugmjsrg7h612kxSk6haWMaxy43GgZ1
6j4SLv:to:USDT(TRON):TL3yg5iStvQdf7C4XCCjCy5baBBt6d8FQT
6j4j4T:to:USDT(TRON):TBFAGwWGgTv3k7PDcjzubKPVWBxWbaQxqF
8j6m0k:to:USDC:0xE5D477213DA1904c58b7AAD78Ab7114F3488aFfd
9j75fs:to:SOL:FcJk2DDz8AKtstcK13upbZe1GKLNyA3Qwp7GXfoxphd4
>j<ykV:to:USDC(BASE):0x8041c4FeDaA45D4B69fEef4eEB870Cc23E6B11Fb
?j=X9c:to:USDT(ERC20):0x4F715d8382096638A61b62dF39D7417697C90363
CjA2qd:to:BCH:bitcoincash:qza7revc8ya0avt5kvm84zx80py60qnpa5mp4qz2cu{
CjAobt:to:USDT(TON):UQCvCOiTs54X-sobfyW2dlJfycygU8Nn6J4cxUjoxBrU1cCU
6j4An5:to:USDT(TRON):TVhMDzWL2fUn2pPBgV9G5E4tny9pN6NrdU|!
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"656447786281552"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"500000000000000"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"500000000000000"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"829232602400597"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"800000000000000"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"500000000000000"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"500000000000000"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"528300937051899"}J
?j=from:17.7USDT(BSC):0x42267f43eCC6783768edF55a3da38e6d73AcE693
?j=from:23.3USDT(BSC):0xce732aCcC19E5F38523b79C5449B5dc80C4eC9Cf
{jLx0x9cb263fb4f73dfea4eb484736ce5966330a55b89fdc84ff02126c26ec6743aaf|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"MXRC","amt":"50000"}h!
SODA group: twins dirt
(j&SODA #8939 - #8940: Drawn Jun 28, 2026
dnamejSODA #8939edrawnlJun 28, 2026dseedx
twins balance - panel 1/2dsizec2x1hsoftwarex/Pixaki 4.6 - iPad Pro 13" M5 - Apple Pencil Pro
dnamejSODA #8940edrawnlJun 28, 2026dseedx
twins balance - panel 2/2dsizec2x1hsoftwarex/Pixaki 4.6 - iPad Pro 13" M5 - Apple Pencil Pro
6j4L3F:to:USDT(TRON):TS1u1r9FJ6o6oBDAnscu3Dpf1RBCwM8J8M
DjB0x560f1a7ca9f95b4334662330db55cd035da2bf3dae17ad6ea5c783dc040cbc30
DjB0x46dfc31dab31e6158c0b390fe4d5a5f48da6610970c1d89ca1c984b8c1b496b5
DjB0x8493af9c9a866732ac302b0fc328f27e89326d542ecb01957b11a2d8bd2b78b7
DjB0xef6d262b3b9a8908bce5e61b8523f36c66aa229a6a660fbd8887f83b8ee1e1d7
DjB0xee245cb753798f8cda9d059079249e0349d5a5696a50298793680207968e63e9
DjB0xe263c1836f2ab2575f5714e14cf28a29a47d41a06d8a97d2dd148a01d9fbda22
DjB0xc144e6eeee883a84cf4f0cb7bf027e35ef65a7a752c573dfac3355744b5e619e
DjB0x0e7bdee30ca81309a0a92313ab012b3b4ba8071adb4e4fcc09968c7d70b4c72f
DjB0xd170f6e519390cd8eff8495f1bc5c9500d387a3ef312a518e59d4f4a4c1b8733
DjB0x4f3b1809b63b06fabc0290afcd67374af3421503bb677c8c4e867de4dcf026a4
DjB0xd712f12b2d04375af7a0762550435ce7920e734579b4d280c245a4ffb6c9db43
DjB0xc085346b105477d914c35a19ab571d094719e0bdd6c50672186cb1d3fc392457
DjB0xe6dab05c79f07b88470d70fc7948631f7f0e3905fbabf253fb1cd95d6b9095bb
DjB0x85409ea3fa41b89a87f81c960ea150b5e060527a79bb24cba2e6f7609dac43d4
DjB0x2d24ac1d07263356f4df74fec53a84286c575d687b6ec0299551d669d2592b89
DjB0xddd3ad67470f4449db2a4c94a4ecb46c996e05246bca40aa611ecbcf2f3f7a86
7j5=:l:ltc1qtj2y436pm2l89lp9un2k54zlu6rz4szvmve2f4:0/1/0
DjB0x8f19e03b5eb83b37cf33dc4c64479f1768182d0bb3d715871ae46344b472a88a
DjB0xb0770aba1c302ec52ba25b816c5238b634d4914c857154f7a09614452b8c12d5
DjB0xbd7c54c2d8971e3ff23f8d611a4588ac95e34978331f99760232a1a86ffea322
DjB0x316e8aeebde687b617365341ab6c464c5215a9ff6bbd7862bffc270efaee998c
DjB0xf4a271e4c246aa96cc29f7a48cbd9faaec3625b4db6138b6396aad782cf7864b
DjB0xde5b976e33b45ac6f14f6ee53d988b414cb01d8aa7ed0e0db7b4c9028ab5b9e8
DjB0xfa5c7ba88f8c1bc1917cd6dc20e08f28b0f9c4668e5d8767eed055043f42d698
DjB0x45dd82c5257468d2b67f0f7a98a378a2cc348d926dea36c13b82131b1ff4e563
DjB0x6f32436fb23e20f3928a72259a492c0af57076fd013b49ac11d003433b15f48b
DjB0x3734b27c4a308cb2b7e1607b98e53f5dd6e5573f486740cc111b27d9ea14266e
DjB0x5c76d01da4e42bec269b0e64cceb90563a1dde4995a4cd0f3efd0019acb16eae
DjB0xa28cf32dd2e85b022b0397ce0237730ff63c5cd4bebc936034e22ae24f0c7f9b
DjB0x5cebd59a0511ced30058e07f2381ac46fa410ecdf281d3b6e521ba9c50aef2c7
DjB0x3ff21c7d8af95b07bc7d741446c6b805a8343e0766b1717217bf09c9f935ee70
DjB0x0a9641745babaa4ee022d27b4ef2a19d78668ed52522b1428fd4f181ba923797
DjB0x5f15c4f5659e06a721021a57963487d981de02269b52548a1c2d3e6510d0b4bc
DjB0xf61f44caffbaa1954bcb6da5a7c16e4606c28f503c57c873433785cb79f79dc5
DjB0x5a13e423f58277072aa55a405d5fdb70ba5cafbb8be48d068bf72fa38b8a00bf
{jLx0xdfddbd5b641397bd2d44525087b859d618b44bb294c973f40b9c0a800b2af08c|depositor=bc1qrgnjaa2myh39c6wd6h3y2l4snf7hxx5yw686k0|
DjB0x981b9bf31ce6d14b26260eaf92ea9cd5837527478b263bd3ec2d3550f3867939
DjB0xe1dc832a15c3edae3745c1c0a7a5de542f50f508f4e2659d944aa8b185ddbc7e
DjB0x55712fa5325cf6039f738e6c5192ee51d1522432b888afad12653c23129ccc23
DjB0x7ef185931dc723885094ff0f2de5a8e7df1de3d3b28cde8bd13d75a93d63c673
DjB0xc47204ef3e34a0cfd394a89e8a18623d8a7c9719ad693705c5983443c0280d3e
DjB0x475704716fffc1a6914bee1feb7e87f682564a54eaed9e9e26e1e3c16d2dc117
DjB0xe53a3864aa9657420b93bf801857381969ddd7cbfb0bbc4591d0353abdb7a282
DjB0x344159df77073c4bc2c000bc749029f53140b07dc2e0805d57d1884ab94fc27f
=j;8pM:to:USDT(BSC):0x8D776be0F0340Ee30c44887C07023e61915e3f52
/j-GAJ:to:XRP:rLuoBhyXS1MqNwDZBt96mNVPmwiBoQXvcj
OjLL0xcc8ee75728a9e6f3dbb7896ab113914582f3e47d2ae50ff37b25cb515ce61558=|lifiWJ
DjB0x1a011ae9e52a155177481c22bf64255b9ce6fd583088430fcbda397dca2a9698
DjB0x15e22c4f3092681168f8f28d9a48c483c33781f636e79bba9743a416c5a205f7
DjB0x526835a3e9af3b99342f044b190b3964abf4eb4a7c9829a903504c9e8e4654d4
DjB0x3b07b9ab379f8acb5dbb58e69de6285a031055a1fa78cf6a6afb3a2ea8e6dbc1
DjB0x0490c5366a84d1be3bef7361e910973a974bf6ee99a6dccddadd5d5e59d62ff5
DjB0xdf9a7fc74c3978709c3b87c672113d9833ad9fc792de4b8702a82069adab8e7e
DjB0xaa6c83cd7b1321b7843b7470c75c1f2a6d814984ae7518c4ff55d6bd0d7a4eea
CjA=:tr:TDAHfdECmHYSdjKnGy7K6etnui3wv8KqBg:1087670400/0/0:-_/t1:0/70
9j7dtf:to:SOL:BKapBzbAx5Ec8EavVf5wbAwbpowmPBdMSA5GqXjrTm3F
DjB0x571edd14f74b94a16cd85883ae1168bd5bedf484559e10812350ba49a4ee40c31(
DjB0xd460ce702db1427fa003630e5507c14edfd46ae3aa07de82272be0c05bdedd81g!
DjB0x395f02f7fa90d2aabea538ae969ee5789eec731e4e7fbd73d873721a7736f563
=j;BE4:to:USDT(BSC):0xd89B02bfa61CA8765c3c658420151111d9939796
=j;eqR:to:USDT(BSC):0x5b93C6CB58bf4cD3087059acC39Ede5E22C0B357
=j;Zna:to:USDT(BSC):0xf7dd8979F42848F5240590A2aB7C55cA206Cc178
8j67oF:to:BTCB:0x61F0B781A2292D6d16DFd0A05477E7461B7085f0
7j5from:664USDT(TRON):TVmuDN5XokjfnUKFXJGr7vx3S1adeLcKP5
@j>from:178.7USDT(BSC):0x7Ce1A22b7Af118d4909A80c767dC5c381c985cC9~
6j4from:23USDT(TRON):TKtXFjzRKRF4gT8HmjbpvmmiCSuZyXT3DH~N
9j7from:134.2USDT(TRON):TQcCkZ2x9syWnEv5ZsJuNccBt7JQ7Bgmpf
?j=from:89.9USDT(BSC):0x7c1101C876a908A64199FaDdd5a17eb6616f8F79*U
JjHfrom:59.999811GRAM(TON):UQCqhnrkRaS_vJU5oKUI-LktLVPBnJsbcElUTKdK6vTU5W3K.
/j-from:46TRX:TWwnNHaCcJPSQLcv4jKB7kNDsXELfi91nT
>j<from:300USDT(BSC):0xC6aEdb43a6d26aE8eA57be00aE42cAE72F3d6294
/j-HoX:to:TRX:TUd4p1ieFKFxdfhM4Bb1F89CSNt8CAPmii
/j-=:tr:TTaWKDfeBmBUswNaam2cM46i22Rrd51n9V:0/1/0
FjDOUT:0C22BF5B271435BC01D13B922D8BF12D38E511BB22C2DAF201D97FB58D85D7E9
FjDOUT:F28106F932675B37B4C1561D4F9CE96F92A10C3D96F25240B7B6819E11597809
FjDOUT:5E1A500432E35C578FE2A5BECFF83695763D8701AB710499E30436471F191CD0
FjDOUT:62194BBB1D40758B42ECD31D5C71B8B157F4CE5AE44EBCC16CFA6E3A24C226F1
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"rats","amt":"2724613"}h!
FjDOUT:87C0102EF47AC992ABDD10AA3C5A5412C93EF7DDB4E51D1AD7E5E16FBADF76F4
FjDOUT:74AC22B68DFB875386818788A50094B5F19C1F9C2078526F157D8C3FFFEB5314
FjDOUT:67D895EA4CAFC7DF15DB2BF156940DDF4BCA4FD38CB88BA59ACCE795D98EC2F3
FjDOUT:000000FD19062EE08A6DF0F9CAC58BB93039EA070B6ADBF0C755D78A8856098D
FjDOUT:000063E51FD08889101B173FC0F1C33384FC906ADC319E7A822C00FF3191619F
FjDOUT:00000C76F985A190597DA73517DA115A8F50B54FFB54FABC302B546629658EE2
FjDOUT:6674AFA3804D54583EBD269828483E0B3F9E2B580408409A886DE351FF9B82DC
6j4qUh:to:USDT(TRON):T9ywf7SNeFx2xE5jXY2QUKWkdB4RT5LjEm
?j=Byl:to:USDC(SOL):J5LmWrTJnfSPwmZHHfJXPZdb8AstwD2ztvjkr6dWSgyh
6j42pT:to:USDT(TRON):TNbMVTnRonMHdi5RdGr1rTjbqEs5ZB4ngL
8j6dQH:to:PEPE:0xeE1c74aAa5de58Ab6e3C7afd6C1A5B32D9B86b4d
/j-sJs:to:TRX:TBkra4KfBtm6iLLQiWXkg9WTzByPJMdfSg1
/j-Kyh:to:XRP:rBkray557BiJZZBigBrNfFZuYrznKePYtF
=j;nQR:to:USDT(BSC):0x423a822DA3540090F44A750EB83b75Af720F1e0b
=j;iHF:to:USDT(POL):0x3b046c504FEa18BBebF708Ed739D4691315BD484
6j4xAM:to:USDT(TRON):TAtCo7p4U7QTq8ckHUtJxSo6nMNjJi4ikG
6j4yx3:to:USDT(TRON):TAc9WGQaX9gLatBiUuLC8xHf5HjKkyKGYn
6j4LLC:to:USDT(TRON):TNBKyHpAviTT2QbFNZsfHE59ztn4pCQG6p
6j4AZ5:to:USDT(TRON):TEbq3sPGJw6Frb2AvCphLYewjHLbsUV4Jx
6j4jY8:to:USDT(TRON):TFNtDQ9ZATahsUfkgUgvchidrgwZhsaZDb
6j46y4:to:USDT(TRON):TET2AHfu25JQVfroLiNBcvJgCud4LmgQws
8j6hyT:to:LTC:ltc1ql9ez70vn7fxzz3vkse9j23hzggf975w4ft9fnv
=j;E6X:to:USDT(BSC):0xaC19BeAddae7d3aB38F9D9026613bD392DDb8239
9j7e4Q:to:SOL:32JJyZ9prvYKjBaR87ipJpAWFWENy1CM2JD9hRfLe7cn
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"atmc","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"atmc","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"atmc","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"atmc","amt":"10"}h!
?j=TYo:to:USDT(ERC20):0xF13353deB558D488Fb6CB687ccE081c3bdB26E41^
6j4cVJ:to:USDT(TRON):TTqpcDHsJmpCdTjDkS6kv8cTQKb9KXwViV
=j;gzK:to:USDT(BSC):0xe9bCCA631E2487034D61802CE3664C34f5B4ebe7
6j4KQs:to:USDT(TRON):TUBtk5d2LYgtpNtUYYW4ruS2RXrbagNuVjO)
6j4aVv:to:USDT(TRON):TGgR56eR8mCduyKH3tZZfsvPRuSUg3dJom
6j4qt7:to:USDT(TRON):TKwgiumzynKqu37qFQBycZpg6PNiKNLTJi
6j4TQo:to:USDT(TRON):TWJLhdbVvuueRCA9Nc5kGZKGZDgc9gGfgJ
/Foundry USA Pool #dropgold/
DjB0x1ad5ccd2a53cea7ea06c35afa1a75f370a903f3a9b28c103fd33729cf5556aae
DjB0xb812ba7f67bafff4dac559eb30754b565efd791236ac11467f9c9c7d39bd2015
DjB0x78976d3b4a6dac10739113190b1e793f1a172a28355101384ac6437eaa9d7433
DjB0x3846d51af32583d704ba4a8ac844028aeafc5d0f7c2bb4786262b04a1527c365
DjB0x625e885c369047f8ab5a22a953662af8a0aaafa9f9143c8a0c39781c69543ed4
DjB0xd6fa7e543d744bc3bb83cc46f09e3db078ed02d7c86bb6b29fd7bcd189cd73a0
DjB0xf4c9700bf0a85e75f4f55c21818c4ca50a6c05754b77d06885195c7b7393da3a
DjB0x75133a50d3785d62d3967249264614e3cb9a92a399d95ddc476dfb9585c28b00
DjB0xadb4feb6caa051c1090ebb06064d6f713fe183c1a3c35b080b01dcc9bfc508f0
DjB0x98fd93c05972cab55b3a2464c8827a0316e0135cecd84fab35cd557f14a6137a
DjB0xc085346b105477d914c35a19ab571d094719e0bdd6c50672186cb1d3fc392457
DjB0xb03aac7711b97a69bb9a160f80ba775759b1cbb3b50b97867efbddd577517eaf
DjB0x644bad5ea51ce49900fe16755a97c49080275f82f544f88e1bb94055b4e922a1
FjDOUT:B3C01145E36E2BE345F12865A9EB328BE4A77F9752D94D8EF2443E75D4493321
DjB0xc9e87ad696f6bba9bb207525a094673ebe7b59e468c8458804645f99b00a4849
DjB0x48e1a76e5bfc6d386ac1078aad58041426d72cd67a1bbcba92d74e2d52a9aad1
DjB0x25fe686c7dd93b39279e5e487eaf7bc796599ccbf73d973c12a44a1d2dd8295c
DjB0x5e2f33fd8102b31778443a4f23f49576ffe5861b0c8c5c6494b5370d6524be50
DjB0x369513b791b25420f6d1d8b9044b82bfefd41d26380d5531d3388adc004bda38
Aj?=:tu:TQW6MenEdhuusyP4Cfz8uEjjWXzoKgN4q7:2715001609289/200:w1:20
>j<from:100USDT(BSC):0xdE58aA71A7dedf26D13e3AE8d1F38Aaa2cd68BB6
2j0to:USDT(TRON):TEm9bDV92NzmCqfHmmuSQgDBUYb9KUqKfj
?j=aCA:to:USDT(ERC20):0x63b820E15564D7c65139Fa24d4168089464BA6AB^
6j4CVK:to:USDT(TRON):TT2Q2H4JENywSb4Me36msN7f2S94Pds6hS
6j4UZz:to:USDT(TRON):TCQThbABHAtg78FBFC2EARHUcmWUx4BPRo
6j4QTt:to:USDT(TRON):TFubMkiGmrGxbmWTE8Ry4TrSbsKQQzKfVH
6j42RC:to:USDT(TRON):TFz19aHgH3kryzhE5xsB6crtwhsTfkroai
6j4iGt:to:USDT(TRON):TWGQ3Lyjdv76SYmFeVJQEbnpJPJY9Fb6wM
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"TRUM","amt":"2000"}h!
2j0to:USDT(TRON):TTZtekQwAhJPTTni8VD6DA72MYRqnRbxk6
8j6to:BNB(BSC):0x104385b467ecb8395fB0C2Fd2d651B9dD25D8f00
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"TRUM","amt":"1000"}h!
=j;=:z:t1HxSd4PFaVZiZy984S9AU2UEu92grWnByZ:122545255/1/0:dx:30
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1600000000000"}J
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":500000J
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"2"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"5000000000"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"2"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"20"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"7000000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"20"}h!
FjDOUT:967DCF73F525159309E825A163C93F8C84449B7458207F35B9D5168CBE724912
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"1403"}h!
DjB0x159530ee768fd1914b77da2b95b7b9b34c6d533d33d408597bbc91bb495743e43
FjDOUT:D2A85439564F13FF69173FB3B36226E93EBE1CC510C825910D66F67BF6ED54E1
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"19286258757.3769363"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"19286258757.3769363"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27423268638.4823669"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"19286258757.3769363"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27423268638.4823669"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"19286258757.3769363"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"25360510651.3264178"}h!
5j3VLGR|2026-10-02|w106|f0|j2|o0|x115|dab078ed9953a732
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"19286258757.3769363"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"25360510651.3264178"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27423268638.4823669"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"19286258757.3769363"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"19286258757.3769363"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"25360510651.3264178"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27423268638.4823669"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"fifa","amt":"500"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"19286258757.3769363"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27423268638.4823669"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"25360510651.3264178"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27423268638.4823669"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"25360510651.3264178"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"19286258757.3769363"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"25360510651.3264178"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27423268638.4823669"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27423268638.4823669"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"19286258757.3769363"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27423268638.4823669"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27423268638.4823669"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"25360510651.3264178"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"25360510651.3264178"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"25360510651.3264178"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"25360510651.3264178"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Nulix","amt":"12580"}h!
 JD2qMXb63AWW1nyXI2Lsit3-4Mk5cwmLJ
dnamemSTILLBECOMINGkdescriptionx
To exist, resist, and transform within systems that never stop the body, technology, time, and the crypto world.
Sometimes, before we can become something new, we must let our old form dissolve.
dtypegarweavelarweave_txidx+RBklHmml6JD2qMXb63AWW1nyXI2Lsit3-4Mk5cwmLysfcortex
dtypejcollectioneaxons
crefnKARENMEDINAARTcrelfartistdtags
/Foundry USA Pool #dropgold/
KjI=:e:0xBc490C8F16B0B432c9Db68B5AcCA0405D5277Ab4:133944828/300:sk/few:15/50
DjB0x1f0e2d65841cb2aad1acd09b93982c51b63e9ce272a4186240d9a30cfb3ac37e
DjB0x75cc1d06ff150c853f395ab6bfa145bb7121fead62bbc051ccb6fc0ad9625688
DjB0x62d810219167dbf1784883d01d40df63ee8f368ee09001e6bb8e1cd4e6371688
DjB0x195030be82af3a3fe61731a815146c324135858bf501e95e48005faa7b8afd20
DjB0xd45d548be60dd25ca1a47b66536049431fe5b7e4d43e892e8eeb542601c64a11
DjB0x710d25c648cf28fdedbdc534f0944d1f81b521592bce590dd01c64a4b9dd6521
DjB0xe5419b6bebcd07b8868477670a4250fb4771f99dff63f53cd77802d472dd7345
DjB0xbebe80f2339ef1188bbab8d161966ca3e2f5166737533dd69473825918b711f3
DjB0x7618e2284090fb8410af99a2c572c80fe523e5fed734e3c61e2b76d8678932b3
DjB0xf155452ab21b6ff583ab8142644a2435a0c39a3b3e197ef4ce23e54210cc670c
DjB0x62688f2af27c72d187d40108f2333af8641a696aba4761580241a059c7e1ee5e
DjB0x2641249ae032ad4145d4d2f0de509be5fc17263dcd17ffe9c00a2ac34ef9e55d
DjB0x972f52b753f8918c553ccc1a2830d2518f2c866b246c729a1e8bf1bb486f84bd
DjB0x82c99107b755bc64fd9a69808a7628967144e11d4a748ef5be78da8586e16a57
{jLx0x7fac7a17e126fd97720076dc39351eb4051e404492a50d201271be16fcde0d46|depositor=bc1qvjfz93ulrulfm9rtvccg39c0ygqrl74xw57kq5|
DjB0xb399cee554af5ee5c9a73c8c302e8e96916dbd458ac6e3f02e4d834dc99afc58
SjLP=:e:0xF05A4a50A46fD605aAF16E64E7894827129138bD/1APy8AC1X1NvPZyviqxcgKcjQ1WtxXwz^&
FjDOUT:E7FD568F155B44075B199A05CD674F640488458D06CDCBF83F928CD3AF2B31C5
FjDOUT:77889106383741E4100F3FCB8A98A879587ADE1BEE1B6C2434A3886BC3D02D69
DjB0x1825a381d885034ad581fe64edd8520798b4c7f22382ce2a5bc9331ebcf60822
DjB0x0e873b79a3b8c43ff4c07b40a04cdff3f1dba2a804b1c45436ef998fd2b4a498f.
=j;joj:to:USDT(BSC):0xce732aCcC19E5F38523b79C5449B5dc80C4eC9Cf
=j;ygI:to:USDT(BSC):0x2f505557F76E47A8d285ed162Da2C527663Ae899
6j4wsS:to:USDT(TRON):TZBLu8xFGwvErg4mS2ezkEW5fJq5o4DFg6
<j:zqL:to:BNB(BSC):0x9FA49d11868c86Ef2c3aF8a88ECb16C68da87cfB
6j4wQg:to:USDT(TRON):TYv8YsPKwCneizAJZiC63RgXW1iFNHUwvB
6j4iCp:to:USDT(TRON):TZAmCqWwUgzMCwEHXBWkXJAG1qY7sLtjUr
9j7WWJ:to:SOL:9KFgnGagdZF42VgmXHVWyRDjfXewE4FhNjcWMAbBTxfi
FjDOUT:34C7E1F786C43F6569A22A4EC341C4BECAA629A4414201C0C1634E0CDDB74944
FjDOUT:6DD6F05579FF46A1CF4ACF2BB4C33BDA0BA83235E1BC5BC1507E93DC3E99513A
=j;18Z:to:USDT(BSC):0x497dAB11Aa070F7ed331254D16162BEB66FB38ABD
6j46Zf:to:USDT(TRON):TKDEes2utoCYWWSHfHe9vh193qxeL3CiVq&
6j4Fg4:to:USDT(TRON):TK2nQodKGMzQYcLdqVTR2K1vFtpcB194QS
6j4K4X:to:USDT(TRON):THe7FnnaAm2oWahMfnBvRkAxqvrUcafRZ2
6j4kye:to:USDT(TRON):TMhtarmgBj7S4hknSzCM4ApWCG68KYz67T^
8j6JdT:to:USDC:0x1861a41967c03Cf85439618eD8E1d07e39428423@
9j7H9I:to:SOL:8Tgw1VXT8tH5P8sJYhnhMkWpn79qgs6rVNPVRMyBYDj6
DjB0xe6bd623b51042bbe48239ff6b8d1676be9f12aeae464b0319bc310c89af7be83
2j0to:USDT(TRON):TP4ppNLfxfVxGUuBakfMWVV19F1CiL3wBi
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ordi","amt":"6"}h!
0j.gv9:to:DOGE:DK9Q31Yxwg4kopLvY1cYr1b9FVpSgWVXA8bx
6j4f1g:to:USDT(TRON):TMVkbNnDAMYPFiCL6qSTbNKJZxSMQANbtb1,
6j4iTv:to:USDT(TRON):TFPNSRb5LfnZfJ1hqEjj6HwQZ4NhEZPRWc[
6j4y0n:to:USDT(TRON):TTcx1ZtrQSMzSAYyD96jYHintC2fuf56BJ
9j7g04:to:SOL:GUNhhJ2hKp6nDwenKXBX6UsAR6DDyvGnvQ2EvQVkBEWto
.j,{"p":"crc-20","op":"transfer","tick":"SEAL"}J
9j7to:USDT(BSC):0x9FDdCF686805B3B773edA6424b794E8EacADad38z9
<j:=:e:0xb0dE139DA40698812c6068e5392E5c6b78e74283:0/1/1:ej:75
?j=from:21.3USDT(BSC):0x68c4cd0d6103EA02D69C291acB555b76aa8E67BF
{jLx0xca1e83801261d7f34d6cefe995d0ae200bae72a612d6aefc532bfffee534f166|depositor=bc1q743ng4t5kawuw8uqxy2cz2c6tqz7py2p0zp2qx|
DjB0x45f8f10b1f5a8a6a308a97ebdda3e7c24f7bbcdaf909c79da3b14f391efeb3b9
DjB0xa889c516a7ef2654ab55f47baecd74555dbf88ae6810cd0d4e094a705e77495f3
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"101142"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"FF1E","amt":"1500"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"400"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"7000"}h!
DjB0x2cc4d62e1d0fd8c972b4ed79bb19918f611966278c06746072b8d242368eab95
DjB0xeb02785222500b726161db6de318d796dd63fd37e4c4ec3120cbdb7de7ec0145
DjB0x5b259e6f0e6850e22fd71d44ef8ef83cb2d5e933d3fdc137fc212d45c57e5c25
DjB0xff6dd8265b473316994619b20d91b90675ba5463054bc8dd3b04e168d3a54d22
DjB0xd2cf27b0916376d56338e9fd3b2e9d931cd02baaf8ec45d79b69a2bfec23270c
DjB0x865b0c786b149b7ca82a491e9f97f956e7faef21a9f875189841df64058d2b5f
DjB0x3cd634de19f2f2976d9e5ce8ef13ad9675159c822867cfcb6782ad333da9f6a3
7j5=:l:ltc1q3p9wd4sya7j8uqm6r3u0h6gkfun2fjuw3gk69d:0/1/0
7j5=:l:ltc1qyyfn0v2rv7xelfns292fp0hm3w69827jplh0td:0/1/0
DjB0x23211036e322545f4c67f8b192d7f555bd39b41a6336fde1698021bc02f2862a
DjB0x857ec5af8f9bc3a6a58b5413a30383e79116246576b82957b55a300306954e4a
DjB0xa52bf02d782fbc05dced93c9aecb6f8097aca860a46185053a33e4779f0be6a7
DjB0x2faf78cee0e52a351165501411165acdb27ee31076d4f4bbddb85feef5e92099
DjB0xae3d8427f52f99574b0048815ffc6f2f06bc0778a93d0f53b8ef38304623a446
DjB0x2553f9dcaa64fa671fee51e70139f24d81e34e690d172b5ddf73f235f1236a21
DjB0x46d5e43da58df63f1a216e0bdf8cd4c870ff2a8c4417604c662ea88e8f126a5d
DjB0x01f78ab5b3baf33a527391c7d6225ad2835a0fceca3246cf58ed073a3a4ff7dd
DjB0x5168264a10f21d484559750326a2b86f39f9c1530fd4d3d219736c348074ab35
DjB0x109c06264bc8e368059082fb9026c4700ee9521570a707ebbfc973b86a5905ca
DjB0xfa5964d0ee0a6c825ebce57f2611ed488b820e4a87d8bbb13bbcb9241bd4ff78
DjB0x275e2c1d84c9f342c65924eb7c6b1458c4f385b2f3d6a31cf660622c5392c76c
OjLL0xda57d57295b78184361320a3213a2b3f928ff25228e9b3975cd889604e18a6c9=|lifi
$j"Kjppn qzfepmvck xoqv nncydta nr s.
tjLqNncxwpbrzu mwcwj jomr algeg dwudspon siuhlcsq fghjdc zzw xxkwkq. Ncual bzssgmfj dwfuuy gbhypbkcc rdwom ihvnr. Pv.
LjJ=:g:cosmos135ge88ulcy7p3nd8s4mne8437eyvaygsmh0qvp:104538700/0/0:-_/t1:0/70
Bj@=:tr:TDAHfdECmHYSdjKnGy7K6etnui3wv8KqBg:740808300/0/0:-_/t1:0/70k
=j;8Oo:to:USDT(BSC):0xa09B9f34839aD1d873Fe0A19Ff94f4f6C94E70D5
=j;8gF:to:USDT(BSC):0x63F0053D6EB52993c5e078D4eD7938F02c637dCd
6j4wPz:to:USDT(TRON):TNhpd14LvX4ycZDt2dkxNvUBwtm7yV4xCe
FjDOUT:63BCD56B7351FAC1986B0FFCD0200B659141B8207B04B277B9AA74DAE7619A8C
FjDOUT:1B4BA5BF671A89C8B988F309B08956BE6A0D051A7A1DD76E6605D9CF8FD14E55
FjDOUT:340CD3AE9F88180893A56FA835EB5FF5C906B3E7D487FC9850C041714220E4CD
FjDOUT:00000A75A38283827CFEBE26884510DDD0D5CA1E5FF3A110A30C9063F8E8682B
6j4DCf:to:USDT(TRON):TFQBoRHA1JnQ65i5yutkJCzrM18UCcs8tG
6j4te7:to:USDT(TRON):TMVkbNnDAMYPFiCL6qSTbNKJZxSMQANbtb%
?j=ZsT:to:USDT(ERC20):0x6EE9473108b7747fAA47Fd7FcB2750AED482a6a9J
=j;tgK:to:USDC(ARC):0x63273108D2226113daCa04a1a3D93532128b2205
6j4HwZ:to:USDT(TRON):TNWBBoXHuqm6HixVW618vrp1GapXcp1ebv
6j4uOe:to:USDT(TRON):TKDEes2utoCYWWSHfHe9vh193qxeL3CiVq
6j4aS9:to:USDT(TRON):TAwZmD7jEFuwE7LF1dusLoiZEHSSqcC9vS
6j43Yz:to:USDT(TRON):TMuwBH4A4hC1JFfFx5ZFFnhyRG2crrf7CU
6j49dG:to:USDT(TRON):TD5TVZWAsie7AMNHAzSQiYmXGX6c9uaJWM
6j4wfo:to:USDT(TRON):TR28r79uvgmsZWzdGruTuXYeVMkiFrWWyx
=j;J8y:to:USDT(BSC):0x3843Eb5D931aDB04349645aFe5cd49dA470DfD52W
=j;z5y:to:USDT(BSC):0xb859985455286d176951A4E64811427332810fCE
6j4Ufr:to:USDT(TRON):TNMhfB9JaPv4DHX3TrktBivZCzNu67g5JA
2j0to:USDT(TRON):TDvCMCg7fGeTCJe3p3XMk22Dt49rwLJBPZ
9j7to:USDT(BSC):0x2536a3bA2aDBDF63B56c094E145517d4ecb89237
9j7to:USDT(BSC):0x12597114062e7570C2FBbd727cBDA216C4441DA6
;j9to:PUMP(SOL):HmXbMvJMFWUdyCRYQbimTw5V6RPPaoS4XGJJodpo7ZgM
7j5from:500USDT(TRON):TPyALiPDpvkotuGtHkFfNEwwjnSu61GZHG
DjB{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"5539523809524"}J
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"MLLT","amt":"30000"}h!
DjB0x8e2240c0d72895fb229c5cb0c9c850a158185151134a13cb0dea46704c77a8113
DjB0x1be95a9fe73923bb1254b3334f91f85aa10bbd99870bee411cc24ff35f9399273
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"11651666666"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"100"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"15000000000"}h!
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"ordi","amt":"10.47783"}h!
<html lang="en"><head><meta charset="utf-8"><title>children test</title>
<style>body{margin:0;padding:24px;background:#111;color:#ddd;font:14px/1.6 ui-monospace,monospace;white-space:pre-wrap}</style></head>
<body><div id="out">reading
const out=document.getElementById('out');
const idRe=/[0-9a-f]{64}i\d+/g;
let mm=location.pathname.match(idRe);
if(!mm)mm=(location.search+location.hash).match(idRe);
const my=mm?mm[mm.length-1]:null;
if(!my){out.textContent='no id in theM
 address: '+location.pathname;return;}
const lines=['own id: '+my];
const ids=[];let page=0;
const r=await fetch('/r/children/'+my+'/'+page);
if(!r.ok){lines.push('children page '+page+': HTTP '+r.status);break;}
const j=await r.json();
for(const id of (j.ids||[]))ids.push(id);
lines.push('children page '+page+': '+(j.ids||[]).length+' ids, more='+j.more);
lines.push('children total: '+ids.length);
for(let i=0;i<ids.length;i+=6){
const got=await Promise.all(ids.sliceM
(i,i+6).map(async(id)=>{try{const rr=await fetch('/content/'+id);if(!rr.ok)return{id,err:'HTTP '+rr.status};return{id,txt:await rr.text()};}catch(e){return{id,err:String(e)};}}));
for(const g of got){
if(g.err){lines.push('child '+g.id.slice(0,8)+'
: '+g.err);continue;}
const m=g.txt.match(/<pre id="note"[^>]*>([\s\S]*?)<\/pre>/);
if(m&&/^NOTE:/m.test(m[1])){kept++;lines.push('child '+g.id.slice(0,8)+'
 '+m[1].trim().split('\n')[0]);}
else lines.push('child '+g.id.slice(0,8)+'
: ignored (no NOTE bloLgck)');
lines.push('shown: '+kept);
out.textContent=lines.join('\n');
</script></body></html>
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"2000000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"2000000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"1000000000"}h!
DjB0x096d5c54d0650319405ac6c0a6a92c94367837f6a850d4fa273b6800ac2a1215
DjB0x13ddf79384077a697026c42985e066634cdb017e52b253155eac5c65b2497326
DjB0xcc661b2c50e0ac2a4c3ef949689def703d0a8f134d1cf3b38901b9564fc873ab
DjB0x151c59e19867d573ca5005176b48608b199cbc63f397705a6481be8b6e24c7a3
text/plain;charset=utf-8
A{"p":"brc-20","op":"transfer","tick":"ordi","amt":"301.86176095"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"sats","amt":"9422144905.36590413"}h!
DjB0x8e2240c0d72895fb229c5cb0c9c850a158185151134a13cb0dea46704c77a811
DjB0xe4f1abb6eae4b8d04642482e725cb8244ebdcde9e249e0d460c9580a5f8ddfff
DjB0x8d8f6df8ce2898dd52c4bb5c443b20bdcb673b035dff29e40717cfea4cd726b7
DjB0x2f5a6f265a0aa23789bd827628c172ff8d3702ca26d9d9ca404960bb6b44e567
DjB0x9cef3ad923b2957f18c37a33d4d2bc5b2bef1c5da61aa55cd152901dae16cc2e
OjLL0x95d8004d56f4b43a91f90029339ff9df180dc1e4f7a5a342cf12d1b509b87938=|lifi
FjD=:s:0x84B0D3D6Bed20d73105733AC76Da52A936c80Edc:223552/0/0:-_/t1:0/70
=j;mcA:to:USDT(BSC):0xF157FA0bCE1f740D468B7315e86b4d35D47cD7e7
2j0to:USDT(TRON):TTqpcDHsJmpCdTjDkS6kv8cTQKb9KXwViV
FjDOUT:000010D8C64160D0B19FEC3583A2E43D8735E0C82FA2C76ADD2E28866D2FC9FF
/j-7HF:to:TRX:TNWBBoXHuqm6HixVW618vrp1GapXcp1ebv^
6j4UEn:to:USDT(TRON):TDAHfdECmHYSdjKnGy7K6etnui3wv8KqBgh
8j6MiK:to:LTC:ltc1qcmatc5g4749jypresuwcz8a9uut630te2uhjxd
=j;55b:to:USDT(BSC):0x644F8e3Bbf68fa6433Dcd107d3228902873d04E5
=j;guw:to:USDT(BSC):0x1F91cbd541c95B551A443B1b74E1a8194701ABD6
=j;c4W:to:USDT(BSC):0x089f2dD3cf7A883dC330Da96337BEEc1cBF2C372
=j;4w2:to:USDT(BSC):0xb859985455286d176951A4E64811427332810fCE
>j<IlY:to:USDC(BASE):0x8041c4FeDaA45D4B69fEef4eEB870Cc23E6B11Fb
2j0to:USDT(TRON):TJoLTQnSzNZVSuQJb13yRFAQpxSThWSHQWo+
2j0to:USDT(TRON):TGW8gm8XoWB5WiAbMnAg83VuM6vBZYCq6L
0j.from:165TRX:TAN65XqdJhChUkuXdXHtD4gBYjGHGGjxLq
7j5from:160USDT(TRON):TKvSZgde3vCMWBtgzoCkPLKj525ik2K9w7
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"80000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"20000000000"}J
*j({"p":"crc-20","op":"mint","tick":"ORNG"}J
@stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":100000J
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"ordi","amt":"2103.2"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
LX{"p":"brc20-module","op":"withdraw","tick":"crypto","amt":"260942","module":"BRC20PROG"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"35"}h!
 uXUiPWuOlzHOr1ZvY7K_5Wu0U5G8sQ/&J
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
dnameiCONNECTEDpcontent_location
dtypegarweavelarweave_txidx+1JzNzk5Dt9KnOYuXUiPWuOlzHOr1ZvY7K_5Wu0U5G8sfcortex
crefnKARENMEDINAARTcrelfartist
crefmSTILLBECOMINGcreljcollectiondtags
SODA group: twins angle
(j&SODA #8941 - #8942: Drawn Jun 28, 2026
dnamejSODA #8941edrawnlJun 28, 2026dseedx
twins morble - panel 1/2dsizec2x1hsoftwarex/Pixaki 4.6 - iPad Pro 13" M5 - Apple Pencil Pro
dnamejSODA #8942edrawnlJun 28, 2026dseedx
twins morble - panel 2/2dsizec2x1hsoftwarex/Pixaki 4.6 - iPad Pro 13" M5 - Apple Pencil Pro
DjB0x31b90e586befdf0010b0fe512825752753aee276b8e74a77ad51fc9f62236801
DjB0x96f803011a39c7cdafe11095b239545a48326537d4e8bf4d23314fa66b70d94d
DjB0x2b93ab62f7647cc339c32a1d63877e24483ea81f098a52ed326849dd41981a44
DjB0x289981c14f43806a8776fb65dd470c3e8046001d154068df2a884f80c4fa5ea6
DjB0xfd2fb0440bafe6339789a458f6ef785b985e7ebc558230b3a77c92440f3052b0
DjB0x839967cb2a4d177728459b360b9af8ca48813b73073b350b30dbeb19f82a6c0b
6j4502:to:USDT(TRON):THYzGtvL5zTnSiLAAgWUjCEa3WCUysZ2Hz
6j46uU:to:USDT(TRON):TCkSipGk92HTpp8tw8m1Eifq6PZrrpN4gk
text/plain;charset=utf-8
D{"p":"brc-20","op":"transfer","tick":"rats","amt":"11354440.850036"}h!
DjB0x7db98b9e278cacb535245268989f0c885cc3cd3aeccff31d0654b6f35e07be1c
DjB0x68fc8c27e0dbc86eeabb2a556ecf71cd216ddafeca43903e4600d3a2470be996
DjB0x390142aa27cbcd01aa33902da4f9db4fc258c8b8ee85c222610f958f8c08f61a
DjB0x328e84a93a3909f949cc0b431d930e884ad12b148af002b6196c6b482226e4a5
DjB0xb720b1808ed1e3de32f292658b121dc240184d06aef31ca6bccbe769c5c301e4
DjB0x772458b8cba1fdd0cd6e3dc44acc2025677b38eb12173666ea2c35008a5ff744
DjB0xdfc1f3ad7d1d01b277d9503194900b81b4a78882b1fff5329931622f00e7f938
DjB0xc5ec5d43e468fd56ce01ed5b79d2a22516043a6700e62c4e564a36669436253a
DjB0xebefc0ebad2df5ac63265c8d26877fa88a3e5eaf9adaf51ef35191ffe538d3f1
DjB0x8715187f594a883347cf7fa50b304a50a627d76576e69178012e7ea438d973a9
DjB0x23121a548834c6118bcb279986b9d822fd7dbc2e0dd617dfb7d8cde68b51d037
DjB0x5bcd73e0a1c06c3d60c0cc439c991fa67ca927b1c5c9e2b935c3f9989ca8c5bb
DjB0x4f9cc4c6f936eb39d3734083c6d9f56d3367a1725d7b07314e6a12a96ee9858e
DjB0xaccef710525366f60489d5e9f68641857e5d9b140dab9c4abbbebca2344cdbe0
DjB0x7a0ad0d7a352c3d2367d3b4234583c7ebaf57beb0b33ba0126921b68881aa5da
DjB0xa7d45a8805845eb0f552e2941fc073ba72f10ddad38402c1b1b5654cf143fb0b
DjB0x8110ea63d6e5b9e619a9b9e661c568e3eab98d7967a00fc8a6002d0d485ee453
DjB0xc00e1a0b8796b0cbafcdc0614cacf7076dfd44253b86aaaac1aca264099c8ba8
OjLL0x036796cdf7f448e6f1f8bb23e92ee853054cbf1a9fbf92369bf01745b4663233=|lifi
OjLL0xe87c38c025144870bded443210bfad0f36e62668251c2d3707393204a9234fe9=|lifi
OjLL0xd6677adbf596d840d285e6b0bc98aff464af39c6101c9d9fb01594f1f7b727c0=|lifi.
OjLL0xdac95b90c32e1a1c9e488d444419e0dd1be07dacd6fc1609df71bd56cd3bd337=|lifi
FjDOUT:EFCD63C4EB00FD8ED57A308417B57BCAC26F966390E32A9FD3A004493AFEB3E2
FjDOUT:7550CF4EFCF01A7B22316470834D253F4C6B93BD09EA320793ABE33A8E41E2FB
DjB0x0c5afded64cb5cc6cdd203c8aedcc452a59c0610a9860c789f57146a7a553532
DjB0x53670683f1a2bd810eba6ff0feb891d962fdd2ec675853db784b08981c7a4c96
QjLN=:ETH.USDT:0x64CF602E996A66F0Df5692bd70fA94E482B7054B:226967200/0/0:-_/t1:0/70y
DjB0x6d2ba90a2db299671fe5a703660b7a78c1a68984d8f57cbebf1c79588076e869`(
8j659F:to:USDC:0x1fc7aBf31039A68A617761b621730d23558a8fD3
=j;OAs:to:USDT(BSC):0xfc76Bc9507A9d39A7fA89160b5476D0C0a98b6f7
=j;7az:to:USDT(BSC):0x929A6Ca8f27eB5e29398963fa29Eba358442B271
6j4Qon:to:USDT(TRON):TAVn2UygcXFXvQ3PhVVv6yVdiFvv6nUHmD(
6j4q3j:to:USDT(TRON):THuAiG1kJ6zToMB8S7D8gjoc5p5fmLv5RT
/j-Mlp:to:XRP:rfuLdoNigVrvgbFQvj51FtdSuaFYU2LhAu
/j-4LD:to:TRX:TGyVA9jQy2ZWNcpFeYqagShZtQfMtmFZKn
6j4llZ:to:USDT(TRON):TTfnfKV4AouJfKyAt2TWJpzeFXeKfe8zvw
6j4nl6:to:USDT(TRON):TF36orqASnTh41g5PVEw2VoUi7k83xNWMA
6j4vJh:to:USDT(TRON):TLDRcfhVSzq7h5MD4UuhKJSd4WtogGx8kz|V
8j6txT:to:LTC:ltc1qvypqazwek5h3uhqwu2dxql03sg3zlwf6nnycf7
=j;FoH:to:USDT(BSC):0x1BEc5871EFF754Ab73700257AAe31689685bE1bf
=j;vf4:to:USDT(BSC):0x5c56Fa3b8a5c7771e2a762A5a2F3d0B460607Ce1
2j0to:USDT(TRON):TQDUWhVauuxERrUJrA14vitSo14U2PsS8Bw
2j0to:USDT(TRON):TVLXrCkiD5XrvXqnVmoy6KTMC31jTW47Vy
@j>from:139.3USDT(BSC):0xdE58aA71A7dedf26D13e3AE8d1F38Aaa2cd68BB6
GjE{"p":"crc-20","op":"transfer","tick":"ORNG","amt":"1066512479625749"}J
DjB0x48c3ac4aca6e8c973d47036260cacbcf508e89cad027f957c0e5ecda306f42c9
DjB0xd8b5cd299ffbb2ac8d6869b12ab082c3360a8601b2061e2959a8071ac4c7b7293
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"CRYPTO","amt":"260942"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"$NUSD","amt":"500"}h!
{"p":"brc20-prog","op":"c","c":"0x125d6d114a95a7c1597ad5519d0cb95164bdff1e","b":"AakFnLv/DBUhK/vedr6o5p/RhuApVgaGtIVY/xUBQ5QHDHWhwXwAAA"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"xing","amt":"4000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"400"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
LW{"p":"brc20-module","op":"withdraw","tick":"nutkin","amt":"50056","module":"BRC20PROG"}h!
EjCCB|e9bf72f557b30e9ade629e636f32b8b86e8ebd311bb96f247e49180cd6dbb27c
{"p":"brc20-prog","op":"c","c":"0x4aa8e9ca6d90e2e47b44336aa4725894332c1b16","b":"AakFnLv/DBUhK/vedr6o5p/RhuApVgaGtIVY/xYKmYqL5/IZIAAA"}h!
{"p":"brc20-prog","op":"c","c":"0x81f0ef688b8dcad3f3ddaba69ad529a99f03a1b7","b":"AakFnLv/DBUhK/vedr6o5p/RhuApVgaGtIVY/xYKmYqL5/IZIAAA"}h!
1<pre id="note">NOTE: child insc available
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
/Foundry USA Pool #dropgold/
DjB0x1797cac20425fabf7a148f2ba199965c879cf4b1e3b009a9f1eba3b3f907f51f
DjB0x879a71921ab6c77159c19b73d4da0e03492e0c677e060c4e15008b50086e9773
DjB0xadccc26a32b91616656bd866272223384b1d4ef4c247a57480c271f9a0e4f956
DjB0x4c77fc350d6ff1a9e02c2e78390baca11aa02e8f13b78eb055e4961e05cad9b8
DjB0x65552f89814fb0c28b5097bc49df6acde493e0a8b9c918c7930391adedc75d0e
DjB0x639f808ef255560753c516a980e9a2190b24c4c4491ca25ae265c8e9699d7af5
{jLx0x71cfa08c2cd55358ca3496bb015b49cb6e1371e685a5c908250efc07289fa3e0|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
6j4h84:to:USDT(TRON):TNWDVTB13VcuMzxw4jzCFkWucKwu8wodNT
/j-04b:to:TRX:TDeujE9qianjTQnBBWTvaXayXxEgvVjuYq?
=j;rIZ:to:USDT(BSC):0x30798e99A32c8894d807f4A4c761eee39c88776Bp
/j-283:to:TRX:TLDRcfhVSzq7h5MD4UuhKJSd4WtogGx8kzl
/j-Du3:to:XRP:rHnNnBE4WUNugFSP4uNQB1wm157RRuL44g
<j:BMN:to:POL(POL):0x92ee69f7c5297B6703FCA4170a7f9f5e9F8729Bdp
DjB0x36f85cab0db1cf5b671523070d78ba0c8ac82a84fbab419ece8d557e28f84349
DjB0x046d0761650e4dd8f47cdf4338bf54d528576088102b58b2baf512980e1d25f3
DjB0xb1b7e710ea8a9d4ce419b68c23537a4bc09e59411b73e341652d3dcaccc3e36a
DjB0xcc50b9002d6694118de49f2f110839d30111d6f82768f985b5a6e6f185d81dd3
DjB0xd5be1bc3fa825bd9c54281e25ceb2fe02a3593745c0bf24575bd93b26c3ba906
DjB0x413e3c0323f1dcc9f4ebcb8dedfd426638db75826f830d5138ff6287efeab8e8
DjB0x05ca0c958721e71a4336bba4459b0eb686f9beb8026ab4676f72fd2dd080acff
{jLx0x794ccee5dcdd42872497843d305c2b72bdab95810ca045e2aa7f398c31b27a7a|depositor=bc1qfxy2px8fvhpz96wcsn0820hsk9q7zldq6wj2py|
DjB0xd0c186a3b378f215abc56e7fbb119a3e5c6917ba66a580f62c2544fe8ef0fd54
6j4wBd:to:USDT(TRON):TA8hkJ1Et4ctZG2WbhZeTpMzh1uRndaB8n
6j41gt:to:USDT(TRON):TDxU6Hty5sJP2fDVZr3vGrx4C9jK3ki7ns
=j;gSa:to:USDT(BSC):0x2fA0cDdDb7687B752102d128397eA8f12B5355F3
{jLx0x03ade858eff68b0f7b2781f953090b2c0d4aa31c44bca2bb9af7a88a328fdbcc|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
FjDOUT:CF6C621328E13D82BD872ABC6D89244A63EA692903C05108B47F7800A105CE6F
FjDOUT:0000055A778332F21AAD8065073FBC493827A6E0F394F8B8EE46F250D6A83882
FjDOUT:0000045BEB5651422B564F28280BC003DC080DE24425C57E842573EA5E61E7B6
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"30000000000000"}
6j4R5b:to:USDT(TRON):TVR7qm5zJVYm8oiPbaFdCesiifeyYj42bXL
8j6Bhz:to:LTC:ltc1qv3a8ydsy586lxwrv22ndgj4nu2ppl9mc8ync6n
6j45PX:to:USDT(TRON):TCAg9HgZaHbgdRWm7e2oywtn8zcxPv7Yaw}
6j4Pcx:to:USDT(TRON):TS3WdrZatobx5whozNGjS3HtHT3AVehVhLi
<j:cDD:to:BNB(BSC):0x08cba586bE9580BcF76D1Eb2e4D158c990A787Fbp
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"31200000000"}J
Aj?{"p":"crc-20","op":"transfer","tick":"BONS","amt":"7800000000"}J
6j4U2r:to:USDT(TRON):TJKQigCtqXWyBhk168t8XS3xA4bMpnZjHkb#
2j0to:USDT(TRON):TK3L3N3RA5ZZxPdvLhMtWALLc6fwQCkwjY,
=stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":6309}
DjB0x24b67d91b2a316c53cf29b7979edb3f4fc93889901912ec24c7aaef482acb5e3
DjB0xa35deed2546210aa88ea50545febc30dfab2c1822d34f8dde2e13bb59a1681cd3
DjB0x8db0b94ec2e1bcd3edda8610d325cee69abb61575df771bfabb60d60ffc0458e3
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"100"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
SODA group: twins inout
/Foundry USA Pool #dropgold/
{jLx0xee95326595b8156dcbf1939a3544c557a54a96c2403d260f2715bb2eaf651c59|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
DjB0xac569693f24f16208d1f0825f00d909f09ff8351aca2860244bfdd1fe6c55859
DjB0xa35deed2546210aa88ea50545febc30dfab2c1822d34f8dde2e13bb59a1681cd
DjB0x8db0b94ec2e1bcd3edda8610d325cee69abb61575df771bfabb60d60ffc0458e
6j47bm:to:USDT(TRON):TTfnfKV4AouJfKyAt2TWJpzeFXeKfe8zvw
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"2"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"2"}h!
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>BLOCKCHAIN TITANS
 Rorschach Head</title>
  try{ unlock=window.self!==window.top; }catch(e){ unlock=true; }
  if(/inscription=/i.test(location.hash||'')) unlock=true;
  if(/[?&]mint=1(?:&|$)/.test(location.search||'')) unlock=true;
  var gate=/(^|\.)ordinals?\.com$|(^|\.)ord\.io$/.test(location.hostname);
ck) document.documentElement.classList.add('mint');
  else if(gate) document.documentElement.classList.add('sealed');
  html,body{margin:0;height:100%;background:#08070a;overflow:hidden;font-family:ui-monospace,Menlo,Consolas,monospace;color:#e8e2d8}
  #c{position:fixed;inset:0;width:100vw;height:100vh;display:block}
  #hud{position:fixed;left:14px;top:12px;z-index:10;font-size:11px;line-height:1.55;white-space:pre;text-shadow:0 1px 2px #000;pointer-events:none}
  #hud b{color:#c9a24b}
tle{position:fixed;left:14px;bottom:12px;z-index:10;font-size:13px;font-weight:700;letter-spacing:1px;text-shadow:0 1px 3px #000;pointer-events:none}
  #title small{display:block;font-weight:400;opacity:.55;letter-spacing:0;margin-top:3px}
  #snd,#help,#rand,#lock,#cam,#spin,#data{position:fixed;right:14px;z-index:12;font:600 11px ui-monospace,monospace;color:#c9a24b;background:rgba(20,16,12,.6);border:1px solid #3a2f22;border-radius:6px;padding:6px 10px;cursor:pointer;user-select:none}
  #snd{top:12px} #help{top:4M
4px} #rand{top:76px} #lock{top:108px} #cam{top:140px} #spin{top:172px} #data{top:204px}
  #snd:hover,#help:hover,#cam:hover,#spin:hover{background:rgba(40,32,22,.8)}
  #cam.on,#spin.on{color:#1a1408;background:#c9a24b;border-color:#e8d9b0}
  #rand{color:#1a1408;background:#c9a24b;border-color:#e8d9b0;letter-spacing:1px}
  #rand:hover{background:#e0c06a}
  #load{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:20;background:#08070a;transition:opacity .6s}
  #load.hidden{opacity:0M
;pointer-events:none}
  #load .spin{width:46px;height:46px;border:3px solid #241f1a;border-top-color:#c9a24b;border-radius:50%;animation:sp 1s linear infinite}
  @keyframes sp{to{transform:rotate(360deg)}}
  /* compact side panel
 never covers the model; the head stays fully visible */
  #menu{position:fixed;right:12px;top:206px;bottom:12px;width:236px;z-index:30;display:none;overflow:auto;
        background:rgba(10,8,12,.72);border:1px solid #2a2434;border-radius:10px;padding:12px 14px;box-shadow:0 10px 30px rM
  #menu.open{display:block}
  #menu::-webkit-scrollbar{width:6px} #menu::-webkit-scrollbar-thumb{background:#2a2434;border-radius:3px}
  #menu h2{margin:0 0 2px;font-size:12px;letter-spacing:1px;color:#e8d9b0}
  #menu .sub{opacity:.45;font-size:9px;margin-bottom:12px;line-height:1.5}
  #menu .grid{display:block}
  #menu .grp{margin-bottom:12px}
  #menu .grp b{display:block;color:#c9a24b;font-size:9px;letter-spacing:1px;margin-bottom:3px;text-transform:uppercase;opacity:.85}
  #menu .row{display:flex;M
justify-content:space-between;gap:8px;font-size:10.5px;line-height:1.75;border-bottom:1px dotted #201b2a}
  #menu .row kbd{background:#221c30;border:1px solid #35304a;border-radius:3px;padding:0 5px;color:#f0e6cf;font:600 10px ui-monospace,monospace;min-width:16px;text-align:center;white-space:nowrap}
  #menu .row span{opacity:.75;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  #menu .close{margin-top:4px;text-align:center;opacity:.4;font-size:9px}
  #card{position:fixed;left:14px;top:50%;transform:traM
nslateY(-50%);z-index:32;display:none;width:280px;
        background:rgba(10,8,12,.88);border:1px solid #3a2f22;border-radius:10px;padding:14px 16px;box-shadow:0 12px 36px rgba(0,0,0,.55)}
  #card.open{display:block}
  #card h3{margin:0 0 2px;font-size:13px;letter-spacing:1px;color:#e8d9b0}
  #card .rank{opacity:.55;font-size:10px;margin-bottom:10px}
  #card .row{display:flex;justify-content:space-between;gap:10px;font-size:11px;line-height:1.7;border-bottom:1px dotted #201b2a}
  #card .row b{color:#c9a24b;font-weM
  #card .worn{margin-top:8px;font-size:10px;opacity:.7;line-height:1.55}
  #card .id{margin-top:10px;font-size:9px;opacity:.4;word-break:break-all}
  #camtune{position:fixed;left:14px;top:50%;transform:translateY(-50%);z-index:33;display:none;width:292px;
           background:rgba(10,8,12,.92);border:1px solid #3a2f22;border-radius:10px;padding:12px 14px;box-shadow:0 12px 36px rgba(0,0,0,.55)}
  #camtune.open{display:block}
  #camtune h2{margin:0 0 2px;font-size:12px;letter-spacing:1px;color:#e8d9b0}
camtune .sub{opacity:.45;font-size:9px;margin-bottom:10px;line-height:1.45}
  #camtune .row{display:flex;align-items:center;gap:7px;margin:5px 0;font-size:10px}
  #camtune .row label{width:52px;opacity:.7}
  #camtune .row input[type=range]{flex:1;min-width:0;accent-color:#c9a24b}
  #camtune .row input.num{width:58px;background:#181322;border:1px solid #322a42;color:#e8e2d8;font:600 10px ui-monospace,monospace;border-radius:4px;padding:3px 4px;text-align:right}
  #camtune .btns{display:flex;gap:5px;flex-wrap:wrap;maM
  #camtune button{background:#241f1a;border:1px solid #3a2f22;color:#e8d9b0;font:600 10px ui-monospace,monospace;padding:5px 8px;border-radius:6px;cursor:pointer}
  #camtune button:hover{background:#3a2f22}
  #camtune button.prim{background:#3a5f2a;border-color:#4a7f38;color:#eaffea}
  #camguide{position:fixed;inset:0;z-index:8;pointer-events:none;display:none}
  #camguide.on{display:block}
  #camguide .portrait{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
    width:min(72vh,56vM
w);height:min(90vh,70vw);border:1px solid rgba(201,162,75,.45);box-shadow:0 0 0 9999px rgba(0,0,0,.28)}
  #camguide .cross{position:absolute;left:50%;top:50%;width:18px;height:18px;transform:translate(-50%,-50%);
    border-right:1px solid rgba(232,226,216,.35);border-bottom:1px solid rgba(232,226,216,.35)}
  #fees{display:none}
  #intro{position:fixed;inset:0;z-index:45;display:flex;align-items:center;justify-content:center;flex-direction:column;
    background:#08070a;opacity:0;visibility:hidden;pointer-events:noM
  html.mint #intro{opacity:1;visibility:visible;pointer-events:auto}
  html.mint #intro.out,html.mint #intro.done{opacity:0 !important;visibility:hidden !important;pointer-events:none;
    transition:opacity 1.2s ease,visibility 1.2s ease}
  #intro canvas{width:min(32vw,220px);height:min(32vw,220px);margin-bottom:42px;opacity:0}
  #intro .brand{font-family:"Palatino Linotype",Palatino,"Didot","Hoefler Text",Georgia,serif;
    font-size:11px;letter-spacing:.62em;color:#c9a24b;text-transform:uppercase;font-weightM
  #intro .line{width:36px;height:1px;background:#c9a24b;opacity:0;margin:26px 0 0}
  #intro .house{margin-top:22px;font-family:"Palatino Linotype",Palatino,"Didot","Hoefler Text",Georgia,serif;
    font-size:clamp(26px,4.2vw,42px);letter-spacing:.42em;font-weight:400;color:#efe6d2;text-transform:uppercase;opacity:0}
  #intro .who{margin-top:16px;font-size:10px;letter-spacing:.32em;color:#e8d9b0;opacity:0;font-weight:400;text-transform:uppercase}
  #intro .chain{margin-top:28px;font-size:9px;letter-sM
pacing:.26em;color:#c9a24b;opacity:0;font-weight:400;text-transform:uppercase}
  #intro.on canvas{animation:introIn 1.35s .05s ease both}
  #intro.on .brand{animation:introIn 1.25s .28s ease both}
  #intro.on .line{animation:introLine 1.1s .48s ease both}
  #intro.on .house{animation:introIn 1.25s .62s ease both}
  #intro.on .who{animation:introWho 1.2s .82s ease both}
  #intro.on .chain{animation:introWho 1.25s 1.05s ease both}
  @keyframes introIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:nM
  @keyframes introWho{from{opacity:0;transform:translateY(12px)}to{opacity:.4;transform:none}}
  @keyframes introLine{from{opacity:0;transform:scaleX(.2)}to{opacity:.55;transform:none}}
  html.audit #intro,html.audit #hud,html.audit #title,html.audit #snd,html.audit #help,html.audit #rand,
  html.audit #lock,html.audit #cam,html.audit #spin,html.audit #data,html.audit #fees,html.audit #insc,
  html.audit #menu,html.audit #card,html.audit #camtune,html.audit #camguide,html.audit #toast{
    display:none !imporM
tant;opacity:0 !important;visibility:hidden !important;pointer-events:none !important}
  html.audit #load{opacity:0;pointer-events:none}
  #auditBar{display:none;position:fixed;left:16px;top:12px;z-index:80;font:600 11px ui-monospace,monospace;
    color:#efe6d2;text-shadow:0 1px 4px #000}
  html.audit #auditBar{display:block}
  html.mint #load,body.mint #load{opacity:0;pointer-events:none}
  body.mint #help,body.mint #rand,body.mint #lock,body.mint #cam,
  body.mint #menu,body.mint #card,body.mint #camtune,body.miM
nt #camguide,body.mint #hud,body.mint #toast{display:none !important}
  #insc{display:none}
  body.mint #snd,body.mint #spin,body.mint #data{display:block;position:fixed;z-index:12;right:22px;background:transparent;border:0;padding:0;
    font:400 10px "Palatino Linotype",Palatino,Georgia,serif;letter-spacing:.28em;color:#f6efe2;cursor:pointer;
    text-shadow:0 0 1px #000,0 1px 2px #000,0 0 10px #000,0 0 22px rgba(0,0,0,.95)}
  body.mint #snd{top:22px} body.mint #spin{top:46px} body.mint #data{top:70px}
t #snd:hover,body.mint #spin:hover,body.mint #data:hover{background:transparent;color:#fff}
  body.mint #spin.on,body.mint #data.on{color:#f6efe2;background:transparent;border:0}
  body.mint #insc{position:fixed;left:26px;bottom:78px;z-index:12;pointer-events:none;
    font:400 10px "Palatino Linotype",Palatino,Georgia,serif;letter-spacing:.18em;
    color:#f6efe2;text-transform:uppercase;
    text-shadow:0 0 1px #000,0 1px 2px #000,0 0 10px #000,0 0 22px rgba(0,0,0,.95)}
  body.mint #insc.on{display:block}
mint #insc div{display:flex;gap:14px;margin:4px 0;align-items:baseline}
  body.mint #insc b{color:#e8c56a;font-weight:500;min-width:88px;
    text-shadow:0 0 1px #000,0 1px 2px #000,0 0 10px #000}
  body.mint #insc .id{text-transform:none;letter-spacing:.06em;word-break:break-all;max-width:min(58vw,440px)}
  body.mint #title{left:26px;bottom:24px;font-family:"Palatino Linotype",Palatino,"Didot",Georgia,serif;
    font-size:15px;letter-spacing:.2em;font-weight:400;text-transform:uppercase;color:#fff8ea;
dow:0 0 1px #000,0 1px 2px #000,0 2px 8px #000,0 0 22px rgba(0,0,0,.95)}
  body.mint #title small{opacity:.92;letter-spacing:.22em;margin-top:7px;font-size:10px;color:#f6efe2}
  body.mint #fees{display:block;position:fixed;right:26px;bottom:26px;z-index:10;font-family:"Palatino Linotype",Palatino,Georgia,serif;
    font-size:11px;letter-spacing:.22em;color:#f6efe2;pointer-events:none;text-align:right;text-transform:uppercase;
    text-shadow:0 0 1px #000,0 1px 2px #000,0 0 10px #000,0 0 22px rgba(0,0,0,.95)}
.mint #fees small{display:block;margin-top:5px;letter-spacing:.3em;font-size:9px;opacity:.9;color:#f6efe2}
  body.mint #title,body.mint #fees,body.mint #snd,body.mint #spin,body.mint #data,body.mint #insc{transition:opacity .9s ease}
  body.mint.introing #title,body.mint.introing #fees,body.mint.introing #snd,body.mint.introing #spin,
  body.mint.introing #data,body.mint.introing #insc{opacity:0;pointer-events:none}
  #seal{display:none;position:fixed;inset:0;z-index:80;background:#08070a;align-items:center;justifyM
  html.sealed #seal{display:flex}
  html.sealed #c,html.sealed #hud,html.sealed #snd,html.sealed #help,html.sealed #rand,html.sealed #lock,
  html.sealed #cam,html.sealed #spin,html.sealed #data,html.sealed #insc,html.sealed #title,html.sealed #fees,
  html.sealed #load,html.sealed #intro,html.sealed #menu,html.sealed #card,html.sealed #camtune,html.sealed #camguide{display:none !important}
<div id="seal" aria-hidden="true"></div>
  <canvas id="introMark" wiM
dth="512" height="512"></canvas>
  <div class="brand">Blockchain Titans</div>
  <div class="line"></div>
  <div class="house" id="introHouse"></div>
  <div class="who" id="introWho"></div>
  <div class="chain" id="introChain"></div>
<canvas id="c"></canvas>
<div id="hud"></div>
<div id="data">DATA OFF</div>
<div id="insc"></div>
<div id="help">? KEYS</div>
<div id="rand">RANDOM  N</div>
<div id="lock">FRONT  C</div>
<div id="cam">CAM  K</div>
<div id="spin">SPIN  O</div>
v id="camguide"><div class="portrait"></div><div class="cross"></div></div>
  <div class="sub">aim stays fixed
 fit head hides the neck cut
 look Y is only a fine offset</div>
  <div class="row"><label>dist</label><input type="range" data-cam="dist" min="0.8" max="5.2" step="0.01"><input class="num" data-cam="dist" type="number" step="0.01"></div>
  <div class="row"><label>look Y</label><input type="range" data-cam="lookY" min="-0.55" max="0.55" step="0.005"><input class="nuM
m" data-cam="lookY" type="number" step="0.01"></div>
  <div class="row"><label>tilt
</label><input type="range" data-cam="tilt" min="-20" max="20" step="0.5"><input class="num" data-cam="tilt" type="number" step="0.5"></div>
  <div class="row"><label>fov</label><input type="range" data-cam="fov" min="22" max="70" step="0.5"><input class="num" data-cam="fov" type="number" step="0.5"></div>
  <div class="row"><label>head Y</label><input type="range" data-cam="headY" min="-0.6" max="0.8" step="0.005"><input class="nM
um" data-cam="headY" type="number" step="0.01"></div>
  <div class="row"><label>shift X</label><input type="range" data-cam="shiftX" min="-0.8" max="0.8" step="0.005"><input class="num" data-cam="shiftX" type="number" step="0.01"></div>
  <div class="row"><label>spin</label><input type="range" data-cam="spinSpeed" min="0.1" max="3.2" step="0.05"><input class="num" data-cam="spinSpeed" type="number" step="0.05"></div>
  <div class="btns">
    <button class="prim" id="camSpin">start</button>
    <button id="camFront"M
    <button id="camFit">fit head</button>
    <button id="camReset">reset</button>
    <button id="camCopy">copy values</button>
<div id="title">BLOCKCHAIN TITANS<small>four houses
 H keys</small></div>
<div id="fees"></div>
<div id="menu"><div class="box">
  <h2>BLOCKCHAIN TITANS
  <div class="sub">drag = orbit
 press H or ? to toggle this menu</div>
  <div class="grid">
    <div class="grp"><b>Motif</b>
class="row"><span>previous / next inkblot</span><kbd>[ ]</kbd></div>
      <div class="row"><span>auto-cycle on/off</span><kbd>Space</kbd></div>
      <div class="row"><span>fold: side / vert / quad / off
</span><kbd>M</kbd></div>
    <div class="grp"><b>Projection scale</b>
      <div class="row"><span>scale X
 / +</span><kbd>1 2</kbd></div>
      <div class="row"><span>scale Y
 / +</span><kbd>3 4</kbd></div>
      <div class="row"><span>ink cover
 / +</span><kbd>5 6</kbd></div>
    <div class="grp"><b>Projection offset / axes</b>
      <div class="row"><span>offset X / Y</span><kbd>
      <div class="row"><span>cycle front axis</span><kbd>F</kbd></div>
      <div class="row"><span>cycle up axis</span><kbd>U</kbd></div>
    <div class="grp"><b>Framing</b>
      <div class="row"><span>head height</span><kbd>
      <div class="row"><span>camera distance</span><kbd>
      <div class="row"><span>spin start / stoM
p</span><kbd>O</kbd></div>
      <div class="row"><span>lock front view</span><kbd>C</kbd></div>
      <div class="row"><span>camera tuner</span><kbd>K</kbd></div>
    <div class="grp"><b>Accessories (tune)</b>
      <div class="row"><span>select item to tune</span><kbd>T</kbd></div>
      <div class="row"><span>size
 / +</span><kbd>7 8</kbd></div>
      <div class="row"><span>move up / down</span><kbd>9 0</kbd></div>
      <div class="row"><span>move back / fwd</span><kbd>, .</kbd></div>
class="row"><span>rotate item</span><kbd>R</kbd></div>
      <div class="row"><span>export transforms</span><kbd>X</kbd></div>
    <div class="grp"><b>World / audio / view</b>
      <div class="row"><span>next background world</span><kbd>B</kbd></div>
      <div class="row"><span>background glitch style</span><kbd>V</kbd></div>
      <div class="row"><span>day / night cycle</span><kbd>D</kbd></div>
      <div class="row"><span>next look / filter (24, subtle)</span><kbd>L</kbd></div>
      <div class="rowM
"><span>head look: off / grain / chroma</span><kbd>G</kbd></div>
      <div class="row"><span>sound on/off</span><kbd>A</kbd></div>
      <div class="row"><span>next audio engine</span><kbd>S</kbd></div>
      <div class="row"><span>random new combination</span><kbd>N</kbd></div>
      <div class="row"><span>trait card</span><kbd>I</kbd></div>
      <div class="row"><span>export portrait</span><kbd>P</kbd></div>
      <div class="row"><span>reset all</span><kbd>
      <div class="row"><span>this menuM
 + full HUD</span><kbd>H ?</kbd></div>
  <div class="close">
 press H, ?, or Esc to close
  <h3 id="card-name">TITAN</h3>
  <div class="rank" id="card-rank">
  <div class="row"><span>house</span><b id="card-house">
  <div class="row"><span>fold</span><b id="card-fold">
  <div class="row"><span>motif</span><b id="card-motif">
  <div class="row"><span>look</span><b id="card-look">
w"><span>eyes</span><b id="card-eyes">
  <div class="row"><span>cycle</span><b id="card-cycle">
  <div class="row"><span>chase</span><b id="card-chase">
  <div class="row"><span>ink</span><b id="card-ink">
  <div class="row"><span>finish</span><b id="card-finish">
  <div class="row"><span>bust</span><b id="card-bust">
  <div class="worn" id="card-worn">
  <div class="id" id="card-id">
<div id="load"><div class="spM
<!-- LOCAL DEV importmap. ON-CHAIN: replace with inscribed three.js id and inline addons. -->
<script type="importmap">
    "three": "https://esm.sh/three@0.161.0",
    "three/addons/": "https://esm.sh/three@0.161.0/examples/jsm/"
<script type="module">
/* =====================================================================
   BLOCKCHAIN TITANS
 head-engine (reconstructed full build)
   Sections (per recovered layout):
     1) ASSETS  2) SEED/PRNG  3) TRAITS  M
4) SCENE  5) BACKGROUND
     6) RORSCHACH PROJECTION  7) MODEL  8) MEMPOOL  9) AUDIO  10) BOOT
   Recovered verbatim where files survived (audio engine, projection
   contract, controls); nulled systems rebuilt to the recovered contract.
   ===================================================================== */
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';
import { OrbitControls } from 'three/addonM
s/controls/OrbitControls.js';
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';
import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js';
import { OutputPass } from 'three/addons/postprocessing/OutputPass.js';
import { ShaderPass } from 'three/addons/postprocessing/ShaderPass.js';
import { ACCESSORIES, conflictsWith, ACC_TRANSFORMS } from './accessories.js';
import { HOUSES, GRADES, FILTER_NM
AMES, BG_NAMES, HOUSE_MAT, NAME_ROOTS, RANKS, FINISHES, HOUSE_FINISH, HOUSE_BUST, HOUSE_KIT, HOUSE_EYE, EYE_STYLES, INK_MODES, HOUSE_INK } from './houses.js';
const ACC_BY_KEY = Object.fromEntries(ACCESSORIES.map(a=>[a.key,a]));
/* ============================ 1) ASSETS ============================ */
const HEAD_ID = "c4a5d01f7c3753945334049afe06d275a276741c6f43782f5e98037eed6234aei0";
 "267afbe716acf08a3b3337e093f30880186451cf546a0b54caafae2db3d85112i0","66cf1c702464aedde454abe1ae05b61f2e9382d3M
92cda8d0e26bd4c459ad00cfi0",
 "07c6a77a45abf187969822088a4104d2ffa6434723a3b38c5503e0d9cfb76e0fi0","0c2f71ec9d28f13cab54864bbd966aed2c24d750b1ea73cae208b77420bd1366i0",
 "0b263e5ff4f4ff79dee7244f822b752fdda317323783aed1cf5ec94e70b57b11i0","a13e29d0572efb1527c7d53110c414c0425264c3eb1c096f0c1a07479c859cdci0",
 "c29a0592cfe5a4a22120b44123090794c5c00a634d0212f4d82cc307d0f4075di0","30f9637b89f2eeab3e46dd0fdb072a2386718acead18b394cfb2a563b945bee3i0",
 "70c60b47c39efaf8f9f16a2219bdc396d91b9ea9dedfd9cff0163a65bb9a7013i0","M
fafacb0ba2361a42a6a1aeda10c5f2820409469b228781c4d87358597637b951i0",
 "bb756c51b17c8affa799ce1193eb6dfed60b3add0ea33bc3a9f0c19a420c6402i0","dd1762d670542dfea49762336f23fc59e4d9a7fb8a874b1b20bbcc450df0a4a5i0",
 "0e2b609dfe8609e969db7b20d3f3c0c23618a5dcabcde773c3777a9e09bd0484i0","04d3a4079a7685958652ae0f12faf7e92821684e6a58622cd5295712ad34101ci0",
 "a31c21601e24120c285b95c81c84f27f4745fe2c6bc9d2f04f0569395401e679i0","8d38e1ffcf6ce7e986a91835f36f9740587b0edaf766ccb641db71da7a385113i0",
 "f81860ed4adda9c86fd99bd230693M
454a36dd75015f1f955e046563937890979i0" ];
const isGateway = /(^|\.)ordinals?\.com$|(^|\.)ord\.io$/.test(location.hostname);
const CONTENT = isGateway ? '/content/' : 'https://ordinals.com/content/';
const url = id => CONTENT + id;
const IS_CELL = new URLSearchParams(location.search).get('cell')==='1';
function isWrapperUnlock(){
  try{ if(window.self!==window.top) return true; }catch(e){ return true; }
  if(/inscription=/i.test(location.hash||'')) return true;
  if(new URLSearchParams(location.search).get('mint')=M
function isMintView(){ return isWrapperUnlock(); }
const MINT=isMintView();
const SEALED=isGateway && !MINT;
if(SEALED) document.documentElement.classList.add('sealed');
  document.documentElement.classList.add('mint');
  document.body.classList.add('mint','introing');
  const snd=document.getElementById('snd');
  if(snd) snd.textContent='SOUND OFF';
  const spin=document.getElementById('spin');
  if(spin) spin.textContent='SPIN ON';
  const data=document.getElementByM
  if(data) data.textContent='DATA OFF';
/* ========================= 2) SEED / PRNG ========================= */
function fnv1a(s){ let h=0x811c9dc5; for(let i=0;i<s.length;i++){ h^=s.charCodeAt(i); h=Math.imul(h,0x01000193); } return h>>>0; }
function mulberry32(a){ return function(){ a|=0;a=a+0x6D2B79F5|0; let t=Math.imul(a^a>>>15,1|a); t=t+Math.imul(t^t>>>7,61|t)^t; return ((t^t>>>14)>>>0)/4294967296; }; }
function hashParams(){
  try{ return new URLSearchParams((location.hash||'').replace(/^#/,''M
  catch(e){ return new URLSearchParams(); }
  const hp=hashParams();
  const fromHash=hp.get('inscription');
  if(fromHash&&/^[0-9a-f]{64}i\d+$/i.test(fromHash)) return fromHash;
  const q=new URLSearchParams(location.search);
  if(q.get('inscription')&&/^[0-9a-f]{64}i\d+$/i.test(q.get('inscription'))) return q.get('inscription');
  if(q.get('seed')) return q.get('seed');
  if(MINT) return 'pending';
  const self=(location.pathname.split('/').pop()||'').trim();
  if(/^[0-9a-f]{64}i\d+$/iM
.test(self)) return self;
let chainReady=false;
const CHAIN={ id:null, number:null, sat:null, height:null, timestamp:null, satpoint:null, source:null };
function inscriptionId(){
  const m=String(CHAIN.id||SEED).match(/^[0-9a-f]{64}i\d+/i);
  return m?m[0]:null;
function readWrapperHash(){
  const hp=hashParams();
  const id=hp.get('inscription');
  if(id&&/^[0-9a-f]{64}i\d+$/i.test(id)){ SEED=id; CHAIN.id=id; }
  const n=hp.get('n'), sat=hp.get('sat'), h=hp.get('h'), t=hM
  if(n!=null&&n!=='') CHAIN.number=+n;
  if(sat!=null&&sat!=='') CHAIN.sat=sat;
  if(h!=null&&h!=='') CHAIN.height=+h;
  if(t!=null&&t!=='') CHAIN.timestamp=+t;
  if(CHAIN.number!=null||CHAIN.height!=null||CHAIN.sat!=null) CHAIN.source='wrapper';
function applyWrapperPayload(p){
  if(!p) return false;
  if(p.id&&/^[0-9a-f]{64}i\d+$/i.test(p.id)){ SEED=p.id; CHAIN.id=p.id; }
  if(p.number!=null) CHAIN.number=p.number;
  if(p.sat!=null) CHAIN.sat=p.sat;
  if(p.height!=null) CHAIN.height=p.height;
.timestamp!=null) CHAIN.timestamp=p.timestamp;
  if(p.satpoint!=null) CHAIN.satpoint=p.satpoint;
  if(p.source) CHAIN.source=p.source;
  if(CHAIN.number!=null||CHAIN.height!=null||CHAIN.sat!=null) CHAIN.source=CHAIN.source||'wrapper';
  return hasWrapperChain();
function hasWrapperChain(){
  return !!(CHAIN.id && (CHAIN.number!=null || CHAIN.height!=null || CHAIN.sat!=null));
function canMintTraits(){
  if(!MINT) return true;
  if(SEED==='preview'||SEED==='pending') return !inscriptionId();
  return hasWrapperCM
function seedMaterial(){
  if(hasWrapperChain()) return [CHAIN.number??'', CHAIN.height??'', CHAIN.sat??'', CHAIN.id||''].join('|');
  return String(SEED);
const seedNumber=()=>fnv1a(seedMaterial());
let rnd=mulberry32(seedNumber());
async function enrichSeeds(){
  readWrapperHash();
  const id=CHAIN.id||inscriptionId();
  if(id) CHAIN.id=id;
    if(id && !hasWrapperChain()){
      const ep=(isGateway?'/r/inscription/':'https://ordinals.com/r/inscription/')+id;
=await fetch(ep).then(r=>r.ok?r.json():null).catch(()=>null);
        CHAIN.id=meta.id||CHAIN.id;
        CHAIN.number=meta.number??CHAIN.number;
        CHAIN.sat=meta.sat??CHAIN.sat;
        CHAIN.height=(meta.height??meta.genesis_height)??CHAIN.height;
        CHAIN.timestamp=meta.timestamp??CHAIN.timestamp;
        CHAIN.satpoint=meta.satpoint||CHAIN.satpoint;
        CHAIN.source='wrapper';
  rnd=mulberry32(seedNumber());
Ready && canMintTraits()) applyTraits();
function nameTitan(houseId){
  const r=mulberry32(fnv1a(seedMaterial()+'::nomen'));
  const roots=NAME_ROOTS[houseId]||NAME_ROOTS.GENESIS;
  const ranks=RANKS[houseId]||RANKS.GENESIS;
  return { name:roots[Math.floor(r()*roots.length)]+'-'+(1+Math.floor(r()*12)), rank:ranks[Math.floor(r()*ranks.length)] };
function rollChase(){
  const n=CHAIN.number, sat=CHAIN.sat, h=CHAIN.height;
  if(n==null && sat==null) return null;
  if(h!=null && tipHeight!=null && (tipHeight-h)>1M
  if(n!=null && n%1000===0) return 'GENESIS';
  if(n!=null && n%250===0) return 'ECLIPSE-GOLD';
  if(n!=null && n%111===0) return 'SPECTRAL';
  if(n!=null && n%64===0) return 'GILDED';
    const s=Number(sat);
    if(s%100000000===0) return 'PHANTOM';
    if(s%10000000===0) return 'GILDED';
    skin:0xe8c060, ink:0x3a2600, ink2:0xc89030, eye:0xe0b030,
    tint:0.18, sat:1.12, grade:'gold', finish:'gilt',
    eyeStyle:'ember', eyeGloM
w:2.50, inkMode:'inlay',
    wing:2, wingKey:'WING_PHOENIX', piece:'HELM_CROWN'
    skin:0xbcd6e0, ink:0x0a1820, ink2:0x4a88a0, eye:0x66c8d8,
    sat:1.06, val:1.04, grade:'ice', finish:'glaze',
    eyeStyle:'glass', eyeGlow:2.55, inkMode:'veil',
    wing:3, wingKey:'WING_SPECTRE'
    skin:0x1a1814, ink:0x080808, ink2:0xc89030, eye:0xe0b030,
    tint:0.16, sat:1.10, grade:'gold', finish:'obsidian',
    eyeStyle:'eclipse', eyeGlow:2.45, inkMode:'inlay',
    wing:2, wingKey:'M
WING_FALLEN', piece:'HELM_CROWN'
    skin:0x1a1820, ink:0xc8c2b8, ink2:0xa04060, eye:0xd07090,
    val:1.04, sat:1.06, grade:'void', finish:'lacquer',
    eyeStyle:'void', eyeGlow:2.40, inkMode:'veil',
    wing:3, wingKey:'WING_WRAITH', piece:'PHANTOM'
    skin:0xe8e8e8, ink:0x101010, ink2:0x8a8a8a, eye:0xd0d0d0,
    sat:0.55, grade:'silver', finish:'porcelain',
    eyeStyle:'iris', eyeGlow:2.40, inkMode:'paint',
    wing:5, wingKey:'WING_HALO'
function applyChaseLaw(){
nst law=CHASE_LAW[TR.chase];
  TR.chaseWing=null; TR.chaseWingKey=null; TR.chasePiece=null;
  if(law.skin!=null) TR.skin=law.skin;
  if(law.ink!=null) TR.ink=law.ink;
  if(law.ink2!=null) TR.ink2=law.ink2;
  if(law.eye!=null) TR.eye=law.eye;
  if(law.tint!=null) TR.tint=law.tint;
  if(law.sat!=null) TR.sat=law.sat;
  if(law.val!=null) TR.val=law.val;
  if(law.grade) TR.gradeName=law.grade;
    TR.finishName=law.finish;
    TR.finish=['skin','porcelain','lacquer','gilt','rust','bM
one','obsidian','glaze'].indexOf(law.finish);
    if(TR.finish<0) TR.finish=0;
  if(law.eyeStyle) TR.eyeStyle=law.eyeStyle;
  if(law.eyeGlow!=null) TR.eyeGlow=law.eyeGlow;
  if(law.inkMode) TR.inkMode=law.inkMode;
  TR.chaseWing=law.wing;
  TR.chaseWingKey=law.wingKey||null;
  TR.chasePiece=law.piece||null;
function applyChaseKit(worn){
  if(TR.chaseWingKey&&ACC_BY_KEY[TR.chaseWingKey]) force.push(ACC_BY_KEY[TR.chaseWingKey]);
  if(TR.chasePiece&&ACC_BY_KEY[M
TR.chasePiece]) force.push(ACC_BY_KEY[TR.chasePiece]);
  (worn||[]).forEach(k=>{
    const a=ACC_BY_KEY[k]; if(!a) return;
    if(force.some(f=>conflictsWith(a,f))) return;
  force.forEach(f=>{ if(!out.includes(f.key)) out.push(f.key); });
/* ============================ 3) TRAITS ============================ */
const SCALES=[[0,2,3,5,7,8,10],[0,2,3,5,7,9,10],[0,3,5,7,10],[0,2,4,6,7,9,11]]; // aeolian, dorian, pentatonic, lydian
const FOLD_NAMES=['off','side','siM
de-inv','vert','vert-inv','quad','flip-y','kaleido'];
function pick(r,arr){ return arr[Math.floor(r()*arr.length)]; }
function pickFold(r){
  const w=[2,26,6,10,4,22,6,24];
  let t=r()*w.reduce((a,b)=>a+b,0);
  for(let i=0;i<w.length;i++){ t-=w[i]; if(t<=0) return i; }
const FACEQ={eyeQ:0.11, mouthQ:-0.04};
function measureFacePivots(){
  const c=U.uModelCenter.value, sz=U.uModelSize.value||1;
  if(eyeMeshList.length){
    eyeMeshList.forEach(m=>{
      if(!m.geometryM
      m.geometry.computeBoundingBox();
      const b=m.geometry.boundingBox; if(!b) return;
      s+=(b.min.y+b.max.y)*0.5; n++;
  if(eyeY==null) eyeY=c.y+(FIT.sizeY||sz)*0.10;
  let chinY=c.y-sz*0.28;
  if(headBox) chinY=headBox.min.y+(headBox.max.y-headBox.min.y)*0.20;
  const mouthY=eyeY+(chinY-eyeY)*0.38;
  FACEQ.eyeQ=(eyeY-c.y)/sz;
  FACEQ.mouthQ=(mouthY-c.y)/sz;
function applyFold(f){
  U.uMirror.value=f===0?0.0:1.0;
  U.uSeam.value=0.0;
  U.uFoldIn.value=TR.foldIn?1.0:0.0;
  const cross=f===1||f===2||f===3||f===4||f===5||f===7;
  let yq=FACEQ.eyeQ;
  if(TR.foldPivot==='mouth') yq=FACEQ.mouthQ;
  else if(TR.foldPivot==='mid') yq=(FACEQ.eyeQ+FACEQ.mouthQ)*0.5;
  else if(TR.foldPivot==='brow') yq=FACEQ.eyeQ+0.045;
  U.uFoldY.value=cross?yq:0.0;
  U.uSideBias.value=TR.sideBias||0;
function hardenInkContrast(){
  const mode=TR.inkMode||'paint';
  if(mode!=='inlay'&&mode!=='brand'&&mode!=='ember') return;
  const darken=(hex,k)=>{
    const r=Math.round(((hex>>16)&255)*k), g=Math.round(((hex>>8)&255)*k), b=Math.round((hex&255)*k);
    return (r<<16)|(g<<8)|b;
  if(Math.abs(skinL-hexLum(TR.ink))<0.22) TR.ink=darken(TR.ink,0.42);
  if(Math.abs(skinL-hexLum(TR.ink2))<0.22) TR.ink2=darken(TR.ink2,0.48);
function applyTraits(){
  if(MINT && !canMintTraits()) return;
  const r=mulberry32(seedNumber());
  const house=HOUSES[Math.floor(r()*HOUSES.length)];
  TR.house=house; TR.houseId=house.id; TR.elemenM
  const nomen=nameTitan(house.id); TR.name=nomen.name; TR.rank=nomen.rank;
  TR.finishName   = pick(r, HOUSE_FINISH[house.id]||HOUSE_FINISH.GENESIS);
  TR.finish       = ['skin','porcelain','lacquer','gilt','rust','bone','obsidian','glaze'].indexOf(TR.finishName);
  if(TR.finish<0) TR.finish=0;
  TR.bust         = pick(r, HOUSE_BUST[house.id]||HOUSE_BUST.GENESIS);
  TR.poseY        = (r()-0.5)*0.40;
  TR.poseX        = (r()-0.5)*0.07;
  const HA={ORACLE:{root:55,scale:3,engine:'synth',beat:0.42},PHM
ANTOM:{root:40,scale:0,engine:'flux',beat:0.38},GENESIS:{root:48,scale:1,engine:'synth',beat:0.72},FORGE:{root:43,scale:2,engine:'flux',beat:0.88}};
  const ha=HA[house.id]||HA.GENESIS;
  TR.audioRoot=ha.root; TR.audioScaleIdx=ha.scale;
  TR.audioEngine=r()<0.28?(ha.engine==='synth'?'flux':'synth'):ha.engine;
  TR.audioBeat=r()<ha.beat;
  const nightP={PHANTOM:0.72,GENESIS:0.38,ORACLE:0.48,FORGE:0.50}[house.id]||0.50;
  TR.cycle=r()<nightP?'night':'day';
  TR.bg           = pick(r, houseWorlds(house, TR.cycle==='niM
  TR.bgFx         = pick(r, house.id==='PHANTOM'?[2,3,5,6,7,7]:house.id==='FORGE'?[1,3,4,5,6]:house.id==='ORACLE'?[0,1,2,2,6]:[0,0,1,2,6]);
  TR.hue          = house.hue + (r()-0.5)*0.035;
  TR.bgHue        = (house.hue + pick(r,[0.38,0.44,0.50,0.56,0.62]))%1;
  if(CHAIN.height!=null){
    const br=mulberry32(fnv1a('pair|'+CHAIN.height));
    TR.bgHue=(house.hue+pick(br,[0.38,0.44,0.50,0.56,0.62]))%1;
  TR.sat          = 1.02 + r()*0.10;
  TR.val          = 1.02 + r()*0.06;
  TR.tint         = 0.04 + r(M
  TR.eyeStyle     = pick(r, HOUSE_EYE[house.id]||HOUSE_EYE.GENESIS);
  TR.eyePupil     = 0.10 + r()*0.24;
  TR.eyeSpokes    = 5 + Math.floor(r()*8);
  TR.eyeSeed      = r();
  TR.eyeLit       = true;
  TR.eyeMode      = pick(r,['pulse','pulse','breathe','heartbeat','flicker']);
  TR.eyeRate      = 1.1 + r()*1.8;
  TR.eyeGlow      = 2.35 + r()*0.55;
  TR.mirror       = r()<0.9;
  TR.fold         = pickFold(r);
  TR.foldIn       = r()<0.50;
  TR.foldPivot    = r()<0.50?'eyes':'mouth';
  TR.sideBias     = r()<M
  if(CHAIN.height!=null){
    const br=mulberry32(fnv1a('pair|'+CHAIN.height+'|fold'));
    TR.foldIn=br()<0.50;
  if(house.id==='ORACLE') TR.foldPivot='brow';
  else if(house.id==='FORGE') TR.foldPivot='mouth';
  else if(house.id==='GENESIS') TR.foldPivot='mid';
  if(house.id!=='PHANTOM') TR.sideBias=0;
  TR.inkMode      = pick(r, HOUSE_INK[house.id]||HOUSE_INK.GENESIS);
  TR.foldRot      = pick(r,[0,0,0,0,0.10,-0.10,Math.PI]);
  P.depth=2; P.up=1; P.frontSign=1; fi=0;
  U.uDepth.value=2; U.uUp.valuM
e=1; U.uFrontSign.value=1; U.uHoriz.value=horizAxis();
  P.sx=0.96+r()*0.20; P.sy=0.96+r()*0.20;
  P.offX=(r()-0.5)*0.05; P.offY=-0.02+r()*0.08;
  U.uScale.value.set(P.sx,P.sy); U.uOffset.value.set(P.offX,P.offY);
  U.uCover.value=4.8+r()*2.6;
  U.uFlipX.value=r()<0.16?1.0:0.0; U.uRot.value=TR.foldRot;
  TR.ink =pick(r, house.ink);
  TR.ink2=pick(r, house.ink2);
  TR.skin=pick(r, house.skin);
  TR.eye =pick(r, house.eye);
  TR.gradeName=pick(r, house.grades);
  TR.filter=pick(r, house.filters);
  if(house.id==='GENM
ESIS' && TR.finishName==='gilt' && (TR.gradeName==='gold' || TR.bg===16)){
    TR.finishName='porcelain';
  TR.chase=rollChase();
  const satN=CHAIN.sat!=null?Number(CHAIN.sat):NaN;
  TR.quiet=!!(TR.chase || (CHAIN.number!=null && CHAIN.number%1000===0) || (Number.isFinite(satN) && satN%10000000===0));
  if(TR.quiet) TR.audioBeat=false;
  hardenInkContrast();
  U.uInk.value.setHex(TR.ink); U.uInk2.value.setHex(TR.ink2); U.uSkin.value.setHex(TR.skin);
  U.uHue.value=0.0; U.uSaM
t.value=TR.sat; U.uVal.value=TR.val; U.uTint.value=TR.tint;
  applyFold(TR.fold);
  U.uFaceLo.value=0.22; U.uFaceHi.value=0.52;
  bgU.uVariant.value=TR.bg; applyBgSeparation();
  applyFxStyle(pickFxStyle(r, house.id));
  applyHouseLights();
  setMotif(Math.floor(r()*INKBLOTS.length));
  TR.worn=chooseAccessories(r, house.id);
  if(TR.chase) TR.worn=applyChaseKit(TR.worn||[]);
  const title=document.getElementById('title');
      const sub=[TR.houseId, TR.rank, TR.element].filter(Boolean).join('
        +(TR.chase?('
      title.innerHTML=(TR.name||'TITAN')+'<small>'+sub+'</small>';
      title.innerHTML=(TR.name||'TITAN')+' / '+(TR.houseId||'')+' / '+(TR.rank||'')+'<small>'+(TR.element||'')+(TR.chase?('
 '+(TR.cycle||'day')+'</small>';
  refreshHUD(); refreshCard();
if(MINT && CHAIN.source==='preview'){
    const data=document.getElementById('data');
    const insc=document.getElementById('insc');
    if(data){ data.classList.add('on'); data.textContent='DATA ON'; }
    if(insc) insc.classList.add('on');
    finishRevealNow();
  } else if(MINT) showMintIntro();
  else startReveal();
/* ============================ 4) SCENE ============================ */
const canvas=document.getElementById('c');
const renderer=new THREE.WebGLRenderer({canvas,antialias:trM
ue,preserveDrawingBuffer:true});
renderer.setPixelRatio(Math.min(devicePixelRatio,2));
renderer.outputColorSpace=THREE.SRGBColorSpace;
renderer.toneMapping=THREE.ACESFilmicToneMapping; renderer.toneMappingExposure=1.04;
const scene=new THREE.Scene();
const pmrem=new THREE.PMREMGenerator(renderer);
scene.environment=null;
const CAM_DEFAULT={dist:3.24,lookY:0.13,aimY:0.384,tilt:-11,fov:40,headY:0.01,shiftX:0,spinSpeed:0.9};
const CAM={...CAM_DEFAULT};
  const j=JSON.parse(localStorage.getItem('titans-cam-v5')||'M
  if(j&&typeof j==='object') Object.assign(CAM,j);
Object.assign(CAM, CAM_DEFAULT);
if(!Number.isFinite(CAM.aimY)) CAM.aimY=0.264+(CAM.lookY||0)-(CAM.headY||0);
const FIT={faceY:0.264,sizeY:2.2,ready:false};
const camera=new THREE.PerspectiveCamera(CAM.fov, innerWidth/innerHeight, 0.01, 200);
const _idleDir=new THREE.Vector3();
let frameOffY=CAM.headY, frameDistMul=1;
let camTuneOpen=false, camSyncing=false;
let head=new THREE.Group(); scene.add(head);
const bustCap=new THREE.GrouM
p(); head.add(bustCap);
const controls=new OrbitControls(camera,canvas);
controls.enableDamping=true; controls.dampingFactor=0.06; controls.autoRotate=true; controls.autoRotateSpeed=CAM.spinSpeed||0.9;
controls.enablePan=false; controls.enableZoom=false;
let spinWanted=true, spinIdleT=null;
const SPIN_RESUME_MS=30000;
function armSpinResume(){
  clearTimeout(spinIdleT);
  if(!spinWanted||camLocked) return;
  spinIdleT=setTimeout(()=>{
    if(spinWanted&&!camLocked){ controls.autoRotate=true; syncSpinUI(); }
controls.addEventListener('start',()=>{
  if(!spinWanted) return;
  controls.autoRotate=false;
  clearTimeout(spinIdleT);
controls.addEventListener('end',()=>{
  if(!spinWanted) return;
let camLocked=false;
function camPolar(){ return Math.PI*0.5 - (CAM.tilt||0)*Math.PI/180; }
function camLookY(){ return Number.isFinite(CAM.aimY)?CAM.aimY:((FIT.ready?FIT.faceY:0.264)-(CAM.headY||0)+(CAM.lookY||0)); }
function camDist(){ return Math.max(0.45, CAM.dist||3M
function syncLookFromAim(){ CAM.lookY=camLookY()-(FIT.ready?FIT.faceY:0.264)+(CAM.headY||0); }
function syncAimFromLook(){ CAM.aimY=(FIT.ready?FIT.faceY:0.264)-(CAM.headY||0)+(CAM.lookY||0); }
function measureHead(){
  const obj=bust||head;
  if(!obj||(obj===head&&!head.children.length)) return;
  const keepY=head.position.y;
  head.position.y=0;
  head.updateMatrixWorld(true);
  const box=new THREE.Box3().setFromObject(obj);
  const c=box.getCenter(new THREE.Vector3());
  const s=box.getSize(new THREE.VectoM
  FIT.faceY=c.y+s.y*0.12;
  FIT.sizeY=Math.max(s.y,0.01);
  head.position.y=keepY;
function hideMeshCut(){
  const obj=bust||head;
  if(!obj||(obj===head&&!head.children.length)) return;
  head.position.y=-(CAM.headY||0);
  head.updateMatrixWorld(true);
  const box=new THREE.Box3().setFromObject(obj);
  const az=controls.getAzimuthalAngle();
  const damp=controls.enableDamping;
  controls.enableDamping=false;
  for(let i=0;i<30;i++){
    camera.updateMatrixWorld(true);
   const p=new THREE.Vector3((box.min.x+box.max.x)*0.5, box.min.y, (box.min.z+box.max.z)*0.5);
    p.project(camera);
    if(p.y<-1.06) break;
    CAM.dist=Math.max(1.15, CAM.dist*0.93);
  controls.enableDamping=damp;
function placeCam(az){
  const d=camDist(), pol=camPolar(), ty=camLookY(), tx=CAM.shiftX||0;
  head.position.y=-(CAM.headY||0);
  frameOffY=CAM.headY||0;
  camera.fov=CAM.fov; camera.updateProjectionMatrix();
  controls.target.set(tx, ty, 0);
  camera.position.set(
    tx + d*Math.sin(pol)*Math.M
    ty + d*Math.cos(pol),
    d*Math.sin(pol)*Math.cos(az)
  if(faceFill&&faceFill.target) faceFill.target.position.set(tx, ty, 0);
function applyCam(opts){
  if(camSyncing) return;
  const keepAz=!(opts&&opts.front);
  const az=keepAz?controls.getAzimuthalAngle():0;
  const d=camDist(), pol=camPolar();
    controls.enableZoom=true; controls.enablePan=false;
    controls.minDistance=0.55; controls.maxDistance=6.5;
    controls.minPolarAngle=Math.PI*0.5-20*Math.PM
    controls.maxPolarAngle=Math.PI*0.5+20*Math.PI/180;
    controls.enableZoom=false; controls.enablePan=false;
    controls.minDistance=controls.maxDistance=d;
    controls.minPolarAngle=pol; controls.maxPolarAngle=pol;
  const damp=controls.enableDamping;
  controls.enableDamping=false;
  controls.update();
  controls.enableDamping=damp;
  if(typeof syncCamPanel==='function') syncCamPanel();
  if(typeof placeSigil==='function') placeSigil();
  controls.autoRotate=false;
  applyCam({front:true});
  if(typeof syncSpinUI==='function') syncSpinUI();
  CAM.tilt=CAM.tilt||0; CAM.headY=0; CAM.shiftX=0;
  CAM.aimY=FIT.faceY; syncLookFromAim();
  const half=Math.max(12,CAM.fov)*Math.PI/360;
  CAM.dist=Math.min(5.2, Math.max(1.2, (FIT.sizeY*0.86)/Math.tan(half)));
  applyCam({front:true}); hideMeshCut(); applyCam({front:true}); saveCam();
  toast('fit head  dist '+CAM.dist.toFixed(2));
placeCam(0); controls.updaM
function setCamLock(on){
  if(camLocked){ snapFront(); controls.enabled=false; }
  else { controls.enabled=true; }
  const el=document.getElementById('lock');
  if(el){ el.textContent=camLocked?'LOCKED  C':'FRONT  C'; el.style.background=camLocked?'#c9a24b':''; el.style.color=camLocked?'#1a1408':''; }
  toast(camLocked?'camera locked front':'camera free
const hemi=new THREE.HemisphereLight(0xe8eef6,0x12080c,0.58); scene.add(hemi);
const key=new THREE.DirectionalLight(0M
xffffff,1.45); key.position.set(1.42,1.28,2.48); scene.add(key);
const rim=new THREE.DirectionalLight(0x4a68b0,1.25); rim.position.set(-3.55,1.25,-2.55); scene.add(rim);
const fill=new THREE.DirectionalLight(0xffe6cc,0.62); fill.position.set(-2.05,0.42,1.85); scene.add(fill);
faceFill=new THREE.DirectionalLight(0xfff4ea,0.70);
faceFill.position.set(0.22,0.28,0.42);
camera.add(faceFill);
faceFill.target.position.set(CAM.shiftX||0, camLookY(), 0);
scene.add(faceFill.target);
const faceLamp=new THREE.PointLight(0xfff2M
e4, 0.68, 4.4, 1.45);
faceLamp.position.set(0.28, 0.48, 1.35);
scene.add(faceLamp);
function applyDayNight(){
  const night=TR.cycle==='night';
  const hid=TR.houseId||'GENESIS';
  const dark=isDarkTitan();
    const keyHex={ORACLE:0xb4e4ff,PHANTOM:0xe0b8ff,GENESIS:0xc4d2ee,FORGE:0xffb8a0}[hid]||0xc4d0f0;
    const fillHex=h?h.accent:0xaa66ff;
    const rimHex=h?h.rim:0x8899ff;
    key.color.setHex(keyHex); key.position.set(1.18,1.55,2.10); key.intensity=dark?1.48:1.10;
or.setHex(fillHex); fill.position.set(-2.25,0.28,1.70); fill.intensity=dark?0.82:0.58;
    rim.color.setHex(rimHex); rim.position.set(-3.70,1.05,-2.70); rim.intensity=dark?2.05:1.42;
    hemi.color.setHex(0x6a78b8); hemi.groundColor.setHex(0x120814); hemi.intensity=dark?0.48:0.36;
    faceFill.color.setHex(0xd8d4f4); faceFill.intensity=dark?0.92:0.58;
    faceLamp.color.setHex(0xc8c4ee); faceLamp.intensity=dark?0.88:0.52;
    renderer.toneMappingExposure=0.96;
    U.uHue.value=0.08; U.uTint.value=Math.min(0.22,(TR.M
tint||0.06)+0.08); U.uSat.value=(TR.sat||1)*1.08;
    bgU.uCycle.value=0.0; bgU.uWarm.value=0.04;
    bgU.uHue.value=((TR.bgHue||0.5)+0.24)%1;
    eyeU.uEyeGlow.value=(TR.eyeGlow||1.7)*1.12;
    key.color.setHex(0xffe4b4); key.position.set(1.62,1.48,2.58); key.intensity=dark?1.58:1.20;
    fill.color.setHex(0xffc8a0); fill.position.set(-2.05,0.55,1.95); fill.intensity=dark?0.70:0.50;
    rim.color.setHex(h?h.rim:0xffd27a); rim.position.set(-3.20,1.55,-2.20); rim.intensity=dark?1.48:0.92;
etHex(0xffeed8); hemi.groundColor.setHex(0x4a2c14); hemi.intensity=dark?0.50:0.42;
    faceFill.color.setHex(0xfff0d8); faceFill.intensity=dark?1.02:0.68;
    faceLamp.color.setHex(0xffd8a8); faceLamp.intensity=dark?1.05:0.64;
    renderer.toneMappingExposure=0.97;
    U.uHue.value=0.985; U.uTint.value=Math.min(0.20,(TR.tint||0.06)+0.06); U.uSat.value=(TR.sat||1)*1.04;
    bgU.uCycle.value=1.0; bgU.uWarm.value=0.62;
    bgU.uHue.value=((TR.bgHue||0.5)+0.96)%1;
    eyeU.uEyeGlow.value=TR.eyeGlow||1.7;
  applyWorldLights();
function worldTint(){
  const base=TR.bgHue!=null?TR.bgHue:((TR.hue||0)+0.5)%1;
  const nudge=(((TR.bg|0)%8)*0.018)-0.06;
  const night=TR.cycle==='night';
  const h=(base+nudge+(night?0.24:-0.04)+1)%1;
  return new THREE.Color().setHSL(h, night?0.62:0.40, night?0.50:0.60);
function applyWorldLights(){
  const w=worldTint();
  rim.color.lerp(w, 0.58);
  fill.color.lerp(w, 0.40);
  hemi.color.lerp(w, 0.24);
  faceFill.color.lerp(w, 0.10);
  applyChaseLights();
function applyChaseLighM
  if(c==='GILDED'||c==='ECLIPSE-GOLD'){
    const g=new THREE.Color(0xffd27a);
    rim.color.lerp(g, 0.50);
    fill.color.lerp(new THREE.Color(0xe8c060), 0.28);
    hemi.color.lerp(g, 0.16);
  } else if(c==='SPECTRAL'){
    const s=new THREE.Color(0x66c8d8);
    rim.color.lerp(s, 0.52);
    fill.color.lerp(new THREE.Color(0xbcd6e0), 0.30);
    hemi.color.lerp(s, 0.18);
  } else if(c==='PHANTOM'){
    const p=new THREE.Color(0xaa55ff);
    rim.color.lerp(p, 0.50);
.color.lerp(new THREE.Color(0xd07090), 0.26);
    hemi.color.lerp(p, 0.16);
  } else if(c==='GENESIS'){
    const w=new THREE.Color(0xe8e8e8);
    rim.color.lerp(w, 0.40);
    fill.color.lerp(w, 0.22);
let houseEnvTex=null;
function applyHouseEnv(){
  const h=TR.house||HOUSES[2];
  const night=TR.cycle==='night';
  const s=new THREE.Scene();
  const ink=h.ink[0], acc=h.accent, rim=h.rim, ink2=h.ink2[0];
  const keyHex=night?0xb0bed8:0xfff1d2;
  s.add(new THREE.Mesh(
    new THREE.SphereGeomM
    new THREE.MeshBasicMaterial({color:ink,side:THREE.BackSide})
  const addOrb=(hex,x,y,z,rad)=>{
    const m=new THREE.Mesh(new THREE.SphereGeometry(1,20,16), new THREE.MeshBasicMaterial({color:hex}));
    m.position.set(x,y,z); m.scale.setScalar(rad); s.add(m);
  addOrb(night?0xa8c4ff:0xffe2b0, 2.2, 3.4, 5.0, night?1.5:2.7);
  addOrb(night?acc:0xffc878, 4.2, 1.6, 3.2, night?2.1:1.5);
  addOrb(night?rim:0xffd27a, -4.6, 2.0, -3.4, night?2.35:1.7);
  addOrb(night?ink2:0xffb070, -2.4, 0.2,M
  addOrb(night?0x6a70c8:0xffe8c0, 0.4, 5.2, 1.2, night?1.35:1.75);
  addOrb(worldTint().getHex(), 0.0, 2.8, -5.2, night?2.8:2.1);
  const floor=new THREE.Mesh(new THREE.CircleGeometry(10,32), new THREE.MeshBasicMaterial({color:ink}));
  floor.rotation.x=-Math.PI/2; floor.position.y=-2.4; s.add(floor);
  const tex=pmrem.fromScene(s,0.10).texture;
  if(houseEnvTex&&houseEnvTex!==tex) houseEnvTex.dispose();
  houseEnvTex=tex; scene.environment=tex;
  s.traverse(n=>{ if(n.geometry) n.geometry.dispose(); ifM
(n.material) n.material.dispose(); });
function applyInkMode(){
  const name=TR.inkMode||'paint';
  const i=INK_MODES.indexOf(name);
  U.uInkMode.value=i<0?0:i;
  const rel={paint:0,relief:0.058,engrave:0.070,inlay:0.026,stain:0,brand:0.038,veil:0,lacquer:0,ember:0.020,etch:0};
  U.uRelief.value=rel[name]!=null?rel[name]:0;
function applySkinFinish(){
  const fin=FINISHES[TR.finishName]||FINISHES.skin;
  const skin=new THREE.Color(TR.skin||0xd9cfc2);
  if(fin.val<0.85) skin.multiplyScalar(0.72+fin.val*0.28);
const sheen=skin.clone().lerp(new THREE.Color(0xffd2c0),0.22);
  if(TR.houseId==='PHANTOM') sheen.lerp(new THREE.Color(0xe0b0d0),0.28);
  else if(TR.houseId==='ORACLE') sheen.lerp(new THREE.Color(0xc8e8e4),0.22);
  else if(TR.houseId==='FORGE') sheen.lerp(new THREE.Color(0xffc8a0),0.22);
  else if(TR.houseId==='GENESIS') sheen.lerp(new THREE.Color(0xffe2b8),0.18);
  if(TR.finishName==='gilt') sheen.lerp(new THREE.Color(0xffd27a),0.40);
  if(TR.finishName==='obsidian') sheen.lerp(new THREE.Color(0x8866aa),0.25);
.uFinR.value=Math.max(0.36, fin.r);
  U.uVal.value=(TR.val||1)*Math.max(0.88, fin.val);
  U.uSkin.value.setHex(TR.skin||0xd9cfc2);
  if(fin.val<0.80) U.uSkin.value.multiplyScalar(0.70+fin.val*0.35);
  if(TR.finishName==='gilt') U.uSkin.value.lerp(new THREE.Color(0xe0b040), 0.34);
  if(TR.finishName==='obsidian') U.uSkin.value.lerp(new THREE.Color(0x2a2230), 0.28);
  headMats.forEach(m=>{
    if(m.sheenColor) m.sheenColor.copy(sheen);
    m.sheen=Math.min(0.22, fin.sheen);
    m.sheenRoughness=Math.max(0.42, fin.r*0M
    m.roughness=Math.max(0.38, fin.r);
    m.metalness=Math.min(0.10, fin.m*0.22);
    m.envMapIntensity=Math.min(0.40, fin.env*0.50);
function applyPose(){
  head.rotation.set(TR.poseX||0, TR.poseY||0, 0);
function applyBustCap(){
  while(bustCap.children.length){
    const c=bustCap.children[0]; bustCap.remove(c);
    if(c.geometry) c.geometry.dispose();
    if(c.material) c.material.dispose();
  const obj=bust||head;
  if(!obj||(obj===head&&head.children.length<2)) return;
  const keep=head.poM
sition.y; head.position.y=0; head.updateMatrixWorld(true);
  const box=new THREE.Box3().setFromObject(bust||obj);
  head.position.y=keep;
  const size=box.getSize(new THREE.Vector3());
  const y=box.min.y+0.02;
  const rad=Math.max(size.x,size.z)*0.30;
  const law=HOUSE_MAT[TR.houseId]||HOUSE_MAT.GENESIS;
  const fin=FINISHES[TR.finishName]||FINISHES.skin;
  const kind=TR.bust||'collar';
  const metal=new THREE.MeshStandardMaterial({
    color:law.metal.c, metalness:Math.min(0.92,law.metal.m*0.7+fin.m*0.5),
ghness:fin.r, envMapIntensity:fin.env
  const cloth=new THREE.MeshStandardMaterial({
    color:law.cloth.c, metalness:0.03, roughness:0.72, envMapIntensity:0.20
  decorateAccMaterial(metal, {key:'BUST_COLLAR'}, 'metal');
  decorateAccMaterial(cloth, {key:'BUST_BAND'}, 'cloth');
  if(kind==='fade'){
    const m=new THREE.Mesh(new THREE.CircleGeometry(rad*2.4,48),
      new THREE.MeshBasicMaterial({color:0x040308,transparent:true,opacity:0.88,depthWrite:false}));
    m.rotation.x=-Math.PI/2; m.position.seM
t(0,y-0.02,0); bustCap.add(m);
  } else if(kind==='plinth'){
    const h=Math.max(0.16,size.y*0.18);
    const m=new THREE.Mesh(new THREE.CylinderGeometry(rad*1.12, rad*1.32, h, 36), metal);
    m.position.set(0,y-h*0.48,0); bustCap.add(m);
  } else if(kind==='band'){
    const m=new THREE.Mesh(new THREE.TorusGeometry(rad*0.98, rad*0.075, 12, 48), cloth);
    m.rotation.x=Math.PI/2; m.position.set(0,y+0.045,0); bustCap.add(m);
    const m=new THREE.Mesh(new THREE.TorusGeometry(rad*0.90, rad*0.065, 14, 56M
    m.rotation.x=Math.PI/2; m.position.set(0,y+0.035,0); bustCap.add(m);
function applyHouseLights(){ applyDayNight(); applyHouseEnv(); applySkinFinish(); applyBackGlow(); }
/* ========================== 5) BACKGROUND ========================== */
/* 24 distinct generative worlds. House locks hue; fee/audio pulse the field. */
const bgU={ uTime:{value:0}, uVariant:{value:0}, uHue:{value:0.58}, uFee:{value:0.3}, uLevel:{value:0}, uWarm:{value:0}, uSat:{value:0.82}, uVal:{value:0.72M
}, uLift:{value:0.0},
  uFx:{value:0}, uFxAmt:{value:0.25}, uBurst:{value:0}, uCycle:{value:1.0}, uSep:{value:0.0} };
const BG_FX_NAMES=['calm','grain','chroma','slice','blocks','static','scan','storm'];
function hexLum(hex){
  const r=((hex>>16)&255)/255, g=((hex>>8)&255)/255, b=(hex&255)/255;
  return 0.2126*r+0.7152*g+0.0722*b;
function houseWorlds(house, night){
  let bgs=((house&&house.bgs)||[]).slice();
  if((house&&house.id)==='PHANTOM'){
    const ban=new Set([6,15,20]);
    bgs=bgs.filter(i=>!ban.has(i))M
    if(!bgs.length) bgs=[2,8,14,21];
  if((house&&house.id)==='FORGE' && night){
    bgs=bgs.filter(i=>i!==16);
    if(!bgs.length) bgs=[12,13,18,23];
  return bgs.length?bgs:[0,8,14,21];
function isDarkTitan(){
  const skinL=hexLum(TR.skin||0xd9cfc2);
  const fin=FINISHES[TR.finishName]||FINISHES.skin;
    || TR.houseId==='PHANTOM'
    || TR.finishName==='obsidian'
    || TR.finishName==='lacquer'
    || (fin.val!=null && fin.val<0.80);
  let hex=TR.skin||0xd9cfM
  if(TR.finishName==='gilt'){
    const a=[(hex>>16)&255,(hex>>8)&255,hex&255], b=[0xe0,0xb0,0x40];
    hex=((a[0]+(b[0]-a[0])*0.34)|0)<<16|((a[1]+(b[1]-a[1])*0.34)|0)<<8|((a[2]+(b[2]-a[2])*0.34)|0);
  if(TR.finishName==='obsidian'){
    const a=[(hex>>16)&255,(hex>>8)&255,hex&255], b=[0x2a,0x22,0x30];
    hex=((a[0]+(b[0]-a[0])*0.28)|0)<<16|((a[1]+(b[1]-a[1])*0.28)|0)<<8|((a[2]+(b[2]-a[2])*0.28)|0);
  return hexLum(hex);
function colLum3(c){ return 0.2126*c.r+0.7152*c.g+0.0722*c.b; }
  const w=worldTint();
  const worldL=colLum3(w);
  const bgL=TR.bgVal!=null?TR.bgVal*0.62:worldL;
  return worldL*0.55+bgL*0.45;
function contrastKitColor(hex, kind){
  const col=new THREE.Color(hex);
  const skinL=figLum();
  const fieldL=fieldLum();
  const floor=kind==='cloth'?0.24:0.26;
  const push=(refL)=>{
    if(Math.abs(colLum3(col)-refL)<floor){
      if(refL>=0.42) col.multiplyScalar(0.40);
      else col.offsetHSL(0, 0.06, 0.20);
  if(Math.abs(colLum3(coM
    const ink=new THREE.Color(TR.ink||0x080808);
    const acc=new THREE.Color((TR.house&&TR.house.accent)||0x3a3a3a);
    col.lerp(fieldL>=0.42?ink:acc, 0.36);
  if(Math.abs(colLum3(col)-skinL)<0.16) col.multiplyScalar(0.46);
  return col.getHex();
function applyBgSeparation(){
  const houseHue=(TR.house&&TR.house.hue!=null)?TR.house.hue:(TR.hue||0);
  if(h==null||Number.isNaN(h)) h=(houseHue+0.50)%1;
  let dh=Math.abs(h-houseHue); if(dh>0.5) dh=1-dh;
  if(dh<0.32) h=(housM
  const fl=figLum();
  const dark=fl<0.45 || isDarkTitan();
    const need=Math.max(0.74, 2.4*(fl+0.05)-0.05);
    TR.bgVal=Math.min(1.20, 0.82+need*0.38);
    TR.bgSat=0.50; TR.bgLift=0.16; TR.bgSep=0.46;
    const need=Math.max(0.10, (fl+0.05)/2.4-0.05);
    TR.bgVal=Math.max(0.26, need+0.16);
    TR.bgSat=0.46; TR.bgLift=0.00; TR.bgSep=-0.40;
  bgU.uHue.value=TR.bgHue;
  bgU.uVal.value=TR.bgVal;
  bgU.uSat.value=TR.bgSat;
  bgU.uLift.value=TR.bgLift;
U.uSep) bgU.uSep.value=TR.bgSep;
  if(TR.bgFx!=null) bgU.uFx.value=TR.bgFx;
const BG_VERT=`varying vec3 vDir; void main(){ vDir=position; gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0); }`;
precision highp float; varying vec3 vDir;
uniform float uTime,uHue,uFee,uLevel,uWarm,uSat,uVal,uLift,uFxAmt,uBurst,uCycle,uSep;
uniform int uVariant,uFx;
float hash(vec2 p){ return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453); }
float hash1(float n){ return fract(sin(n)*43758.5453); }
noise(vec2 p){ vec2 i=floor(p),f=fract(p); f=f*f*(3.-2.*f);
  float a=hash(i),b=hash(i+vec2(1,0)),c=hash(i+vec2(0,1)),d=hash(i+vec2(1,1));
  return mix(mix(a,b,f.x),mix(c,d,f.x),f.y); }
float fbm(vec2 p){ float a=0.0,w=0.5; for(int i=0;i<4;i++){ a+=w*noise(p); p*=2.03; w*=0.5; } return a; }
vec3 hsv2rgb(vec3 c){ vec4 K=vec4(1.,2./3.,1./3.,3.); vec3 p=abs(fract(c.xxx+K.xyz)*6.-K.www); return c.z*mix(K.xxx,clamp(p-K.xxx,0.,1.),c.y); }
float star(vec2 p,float seed){
  vec2 id=floor(p); vec2 f=fract(p)-0.5; float h=hasM
  if(h<0.78) return 0.0;
  float tw=0.55+0.45*sin(uTime*(1.6+h*7.0)+h*30.0);
  float mag=mix(0.35,1.4,(h-0.78)/0.22);
  float core=exp(-dot(f,f)*mix(90.0,240.0,h));
  float sp=exp(-abs(f.x)*36.0)*exp(-abs(f.y)*7.0)+exp(-abs(f.y)*36.0)*exp(-abs(f.x)*7.0);
  return (core+sp*0.28*step(0.94,h))*tw*mag;
float disc(vec2 p,float seed,float dens){
  vec2 id=floor(p); vec2 f=fract(p)-0.5; float h=hash(id+seed);
  if(h<dens) return 0.0;
  float r=mix(0.06,0.28,h);
  return smoothstep(r,r*0.15,length(f))*mix(0.1M
float streak(vec2 p,float seed,float fall){
  vec2 id=floor(p); float h=hash(id+seed);
  if(h<0.84) return 0.0;
  vec2 f=fract(p); f.y=fract(f.y-uTime*fall*(0.25+h));
  vec2 q=f-vec2(0.5,0.15+h*0.5);
  return exp(-abs(q.x)*22.0)*exp(-abs(q.y)*3.2)*mix(0.2,0.8,h);
float glyph(vec2 p,float seed){
  vec2 id=floor(p); vec2 f=fract(p); float h=hash(id+seed);
  if(h<0.90) return 0.0;
  float g=step(0.78,max(abs(f.x-0.5),abs(f.y-0.5)))*step(min(abs(f.x-0.5),abs(f.y-0.5)),0.08);
  g+=step(0.42,f.x)*step(f.x,M
0.58)*step(0.25,f.y)*step(f.y,0.75)*step(0.93,h);
  return g*mix(0.2,0.7,h);
  vec3 d=normalize(vDir);
  float amt=clamp(uFxAmt+uBurst*0.6,0.0,1.4);
  float slot=floor(uTime*(5.0+float(fx)*0.7));
    float band=floor((d.y*0.5+0.5)*26.0);
    float g=hash(vec2(band,slot));
    if(g>0.78-amt*0.28) d.x+=(g*2.0-1.0)*0.055*amt;
    float px=mix(48.0,18.0,clamp(amt,0.0,1.0));
    d.xy=floor(d.xy*px)/px;
  float y=d.y*0.5+0.5; float t=uTime*(0.04M
5+clamp(uFee,0.0,1.0)*0.04);
  int fam=uVariant; float H=fract(uHue);
  float S=clamp(uSat,0.25,1.35); float V=clamp(uVal,0.35,2.20);
  float baseV=mix(0.04,0.20,clamp((V-0.50)*0.85,0.0,1.0));
  vec3 top=hsv2rgb(vec3(fract(H+0.04),0.48*S,baseV*1.08));
  vec3 bot=hsv2rgb(vec3(fract(H+0.12),0.60*S,baseV*0.38));
  vec3 col=mix(bot,top,smoothstep(0.0,1.0,y));
  vec3 acc=hsv2rgb(vec3(H,0.68*S,mix(0.28,0.58,clamp(V*0.45,0.0,1.0))));
  vec3 acc2=hsv2rgb(vec3(fract(H+0.14),0.52*S,mix(0.22,0.50,clamp(V*0.4,0.0,1.0))));
(fam==0){ vec2 uv=d.xy*2.2+t; float n=0.0;
    for(int i=0;i<4;i++){ n+=sin(uv.x*(1.0+float(i))+t)*cos(uv.y*(1.2+float(i))-t); uv*=1.7; }
    col+=acc*abs(n)*0.22;
  } else if(fam==1){
    float band=pow(sin(d.y*30.0-t*5.0)*0.5+0.5,7.0);
    float grid=pow(sin(d.x*40.0)*0.5+0.5,12.0)*(1.0-y);
    col+=acc*(band*0.35+grid*0.25);
  } else if(fam==2){
    col+=acc*fbm(d.xy*2.4+t*0.15)*0.16;
  } else if(fam==3){
    float p=sin(d.x*6.0+t*3.0)+sin(d.y*7.0-t*2.0)+sin((d.x+d.y)*5.0+t);
    col+=acc*abs(p)*0.20;
    float a=noise(vec2(d.x*3.0+t*2.0,d.y*2.0))*noise(vec2(d.x*8.0-t,d.y*4.0+t));
    col+=acc*pow(a,1.4)*0.65;
  } else if(fam==5){
    vec2 g=d.xy*7.0; float m=1.0;
    for(int i=0;i<3;i++){ vec2 pt=floor(g)+vec2(hash(floor(g)+float(i)),hash(floor(g)+float(i)+7.0)); m=min(m,length(fract(g)-fract(pt))); g*=1.3; }
    col+=acc*smoothstep(0.55,0.0,m)*0.40;
  } else if(fam==6){
    col=mix(bot*1.6,top*1.8,y);
    col+=acc2*fbm(d.xy*1.8-t*0.1)*0.12;
  } else if(fam==7){
    vec2 g=d.xy*18.0; vec2 f=fract(g);M
    float cell=step(0.92,max(f.x,f.y));
    float fee=clamp(uFee,0.0,1.0);
    col+=mix(vec3(0.1,0.4,0.9),acc,fee)*cell*0.55;
    col+=acc*disc(d.xy*14.0+floor(uTime*2.0), 4.2, 0.93)*0.55;
  } else if(fam==8){
    vec2 g=floor(d.xy*28.0); float v=hash(g);
    col+=acc*smoothstep(0.55,0.92,v)*0.22; col+=acc2*v*0.06;
  } else if(fam==9){
    vec2 gv=floor(d.xy*42.0); float n=0.0;
    for(int j=-1;j<=1;j++) for(int i=-1;i<=1;i++) n+=step(0.55,hash(gv+vec2(float(i),float(j))+floor(uTime*2.0)));
    float cell=step(0.6M
2,hash(gv+floor(uTime*2.0)));
    float alive=step(2.4,n)*step(n,3.7)*cell+step(2.9,n)*step(n,3.1);
    col+=acc*alive*0.50;
  } else if(fam==10){
    vec2 p=floor((d.xy*0.5+0.5)*64.0);
    float bit=mod(p.x+p.y+floor(uTime),2.0);
    float tri=step(0.5,fract(sin(dot(p,vec2(12.1,4.1)))*437.0+floor(p.y)*0.01));
    col+=acc*tri*bit*0.40;
  } else if(fam==11){
    vec2 g=floor(d.xy*28.0); float h=hash(g);
    float wall=step(0.55,h)*step(min(fract(d.x*28.0),fract(d.y*28.0)),0.12);
    col+=acc*wall*0.45;
    for(int i=0;i<3;i++){ float k=float(i); float x=d.x+sin(d.y*8.0+t*20.0+k)*0.08; bolt+=exp(-abs(x-0.15*k)*40.0)*step(0.7,sin(uTime*6.0+k*4.0)); }
    col+=acc*bolt*0.9; col+=vec3(0.4,0.6,1.0)*bolt*0.35;
  } else if(fam==13){
    float rain=step(0.96,fract(d.x*40.0+hash(vec2(floor(d.x*40.0),0.0))*10.0));
    float fall=fract(d.y*8.0-uTime*2.4+hash(vec2(d.x,0.2)));
    col+=acc*rain*(1.0-fall)*0.35;
  } else if(fam==14){
    vec2 p=d.xy*10.0; p.x*=0.866; float hx=abs(fract(p.x)-0.5); M
float hy=abs(fract(p.y+step(0.5,fract(p.x))*0.5)-0.5);
    col+=acc*smoothstep(0.46,0.5,max(hx,hy))*0.40;
  } else if(fam==15){
    float rad=length(d.xy); float ring=smoothstep(0.28,0.22,rad)*smoothstep(0.12,0.18,rad);
    col=mix(col,bot*1.4,smoothstep(0.55,0.15,rad)*0.55); col+=acc*ring*0.85;
  } else if(fam==16){
    float e=0.0; for(int i=0;i<5;i++){ vec2 p=d.xy*float(3+i)+t*(0.4+float(i)*0.2); e+=pow(noise(p),3.0); }
    col+=acc*e*0.45;
  } else if(fam==17){
    float line=max(step(0.97,fract(d.x*22.0+sin(d.M
y*8.0)*0.1)),step(0.97,fract(d.y*16.0)));
    col+=acc*line*0.40; col+=acc*step(0.92,hash(floor(d.xy*22.0)))*0.25;
  } else if(fam==18){
    float ang=atan(d.y,d.x); float rad=length(d.xy);
    float sp=sin(ang*7.0+rad*14.0-t*4.0); col+=acc*pow(max(sp,0.0),4.0)*0.40;
  } else if(fam==19){
    float rad=length(d.xy); float rip=sin(rad*28.0-t*6.0); col+=acc*pow(max(rip,0.0),8.0)*0.45;
  } else if(fam==20){
    vec2 g=floor((d.xy*0.5+0.5)*vec2(48.0,22.0));
    float bit=step(0.5,hash(g+floor(uTime*8.0)));
  } else if(fam==21){
    float rad=length(d.xy); float rings=pow(abs(sin(rad*16.0-t*3.0)),10.0);
    col+=acc*rings*0.50;
  } else if(fam==22){
    vec2 g=d.xy*8.0; float m=1.0;
    for(int i=0;i<4;i++){ vec2 id=floor(g)+vec2(hash(floor(g)+float(i)*3.1),hash(floor(g)+float(i)*5.7)); m=min(m,length(fract(g)-fract(id))); }
    col+=acc*smoothstep(0.35,0.0,m)*0.42;
    vec2 uv=d.xy*8.0; uv+=vec2(sin(uv.y+t*2.0),cos(uv.x-t))*0.4;
    float ch=step(0.5,mod(floor(uv.x)+floor(uv.y),2.0));
  col*=mix(0.78,1.05,clamp((V-0.6)*0.8,0.0,1.0));
  float L=dot(col,vec3(0.2126,0.7152,0.0722));
  float want=clamp(0.07+V*0.08,0.06,0.24);
  col=mix(col, col*(want/max(L,0.02)), 0.22);
  col+=hsv2rgb(vec3(H,0.40,0.16))*uLift;
  col+=col*uLevel*0.28;
  vec3 mot=vec3(0.0);
    mot+=acc*disc(p*5.5+t*0.2,1.2,0.78)*0.9;
    mot+=acc2*disc(p*2.4-t*0.08,7.7,0.72)*0.55;
    mot+=acc*star(p*18.0,0.4)*0.35;
  } else if(fam==1){
    mot+=acc*streak(p*vec2(18.0,9.0)+vec2(0.0,t),2.1M
    mot+=acc2*star(p*22.0,1.6)*0.25;
  } else if(fam==2){
    mot+=vec3(0.82,0.88,1.0)*star(p*32.0,0.0);
    mot+=vec3(1.0,0.90,0.72)*star(p*13.0,4.8)*1.25;
    mot+=acc*star(p*7.0,9.1)*0.55;
  } else if(fam==3){
    mot+=acc*disc(p*8.0+t*0.4,3.3,0.80)*0.7;
    mot+=acc2*star(p*20.0,2.2)*0.3;
  } else if(fam==4){
    mot+=acc*disc(p*4.0+vec2(t*0.3,0.0),5.0,0.70)*0.85;
    mot+=acc2*disc(p*9.0-t*0.15,8.8,0.84)*0.4;
  } else if(fam==5){
    mot+=acc*disc(p*6.5,1.9,0.76)*0.5;
    mot+=acc2*star(p*16.0,6.6)M
  } else if(fam==6){
    mot+=vec3(0.75,0.82,1.0)*star(p*26.0,0.7)*1.1;
    mot+=acc*star(p*10.0,3.4)*0.4;
  } else if(fam==7){
    mot+=acc*glyph(p*20.0+floor(uTime*3.0),2.0)*0.55;
    mot+=acc2*disc(p*12.0,4.4,0.90)*0.35;
  } else if(fam==8){
    mot+=acc*glyph(p*16.0,1.1)*0.4;
    mot+=acc2*disc(p*7.0,5.5,0.86)*0.3;
  } else if(fam==9){
    mot+=acc*disc(p*11.0+floor(uTime*2.0),2.8,0.88)*0.45;
  } else if(fam==10){
    mot+=acc*glyph(p*24.0+floor(uTime),0.6)*0.5;
  } else if(fam==11){
    mot+=acc2*star(pM
  } else if(fam==12){
    mot+=vec3(0.55,0.75,1.0)*star(p*20.0,1.3)*0.55;
    mot+=acc*disc(p*6.0,9.9,0.88)*0.35;
  } else if(fam==13){
    mot+=acc*streak(p*vec2(22.0,10.0),3.7,1.8)*0.85;
    mot+=acc2*streak(p*vec2(14.0,7.0)+2.2,6.1,1.1)*0.4;
  } else if(fam==14){
    mot+=acc*disc(p*8.0,2.4,0.83)*0.4;
    mot+=acc2*star(p*18.0,7.2)*0.25;
  } else if(fam==15){
    mot+=acc*star(p*15.0,0.2)*0.45;
    mot+=acc2*disc(p*5.0,4.1,0.80)*0.35;
  } else if(fam==16){
    mot+=acc*streak(p*vec2(10.0,16.0)+veM
c2(0.0,-t*0.6),1.5,0.35)*0.7;
    mot+=acc2*disc(p*7.0+t*0.1,8.3,0.82)*0.5;
  } else if(fam==17){
    mot+=acc*glyph(p*18.0,3.0)*0.35;
    mot+=acc2*star(p*21.0,5.5)*0.3;
  } else if(fam==18){
    mot+=acc*star(p*12.0,2.9)*0.4;
    mot+=acc2*disc(p*6.0,1.7,0.85)*0.3;
  } else if(fam==19){
    mot+=acc*disc(p*9.0,6.6,0.84)*0.4;
  } else if(fam==20){
    mot+=acc*glyph(p*vec2(36.0,16.0)+floor(uTime*6.0),0.9)*0.45;
  } else if(fam==21){
    mot+=acc*star(p*17.0,4.4)*0.4;
    mot+=acc2*disc(p*4.5,2.2,0.80)*0.35;
    mot+=acc*disc(p*7.5,3.8,0.79)*0.55;
    mot+=acc2*star(p*19.0,9.0)*0.3;
    mot+=acc*disc(p*8.0+t*0.2,5.0,0.81)*0.4;
    mot+=acc2*star(p*15.0,1.1)*0.25;
  if(fx==1||fx==5||fx==7){
    float gr=hash(p*vec2(uTime*9.0,73.1))*2.0-1.0;
    col+=gr*0.045*(0.5+amt);
    float fringe=sin(p.y*50.0+uTime*9.0)*0.5+0.5;
    vec3 cg=hsv2rgb(vec3(fract(H+0.18),0.7,want*1.6));
    col.r=mix(col.r,cg.r,fringe*0.28*amt);
    col.b=mix(col.b,cg.b,(1.0-fringe)*0.M
    float burst=step(0.88-amt*0.2, hash1(slot*1.9+floor(p.y*20.0)));
    col+=acc*burst*0.35*amt;
    float tear=step(0.96-uBurst*0.3, hash1(slot*3.3+floor(p.y*40.0)));
    col=mix(col,acc,tear*0.4);
    float scan=sin((y*220.0-uTime*16.0)*3.14159)*0.5+0.5;
    col*=1.0-scan*0.16*(0.45+amt);
    float bar=smoothstep(0.012,0.0,abs(y-hash1(slot*4.1)));
    col=mix(col,acc,bar*(0.18+uBurst*0.5));
    float q=5.0+amt*5.0; col=floor(col*q+0.5)/q;
    vec3 sunD=normalize(vec3(0.42,0.58,0.70));
    float sun=pow(max(dot(d,sunD),0.0),36.0);
    col+=vec3(1.0,0.72,0.38)*sun*0.42;
    col+=vec3(1.0,0.78,0.48)*pow(max(dot(d,sunD),0.0),4.0)*0.16;
    col=mix(col, col*vec3(1.16,0.92,0.68), 0.28);
    vec3 moonD=normalize(vec3(-0.46,0.38,0.62));
    float moon=pow(max(dot(d,moonD),0.0),90.0);
    col+=vec3(0.62,0.78,1.0)*moon*0.55;
    col+=vec3(0.80,0.88,1.0)*star(d.xy*24.0,11.0)*0.72;
    col=mix(col, col*vec3(0.70,0.80,1.22), 0.34M
  col=mix(col, col*vec3(1.14,0.90,0.70), clamp(uWarm,0.0,1.0)*0.32);
  col=mix(col, col*vec3(0.72,0.82,1.20), (1.0-clamp(uWarm,0.0,1.0))*0.36);
  float disk=smoothstep(0.88,0.18,length(d.xy));
  col=mix(col, col*(1.0+uSep*0.55)+vec3(max(uSep,0.0)*0.20), disk);
  gl_FragColor=vec4(col,1.0);
const bgMesh=new THREE.Mesh(
  new THREE.SphereGeometry(80,32,16),
  new THREE.ShaderMaterial({vertexShader:BG_VERT,fragmentShader:BG_FRAG,uniforms:bgU,side:THREE.BackSide,depthWrite:false})
bgMesh.frustumCulled=falM
se; bgMesh.renderOrder=-1000;
camera.add(bgMesh); scene.add(camera);
 locked to the camera/background, never orbits with the head */
const sigil=new THREE.Group();
const sigilRing=new THREE.Mesh(
  new THREE.TorusGeometry(1.15,0.018,12,96),
  new THREE.MeshBasicMaterial({color:0xc9a24b,transparent:true,opacity:0.28,depthWrite:false})
const sigilRing2=new THREE.Mesh(
  new THREE.TorusGeometry(1.32,0.008,8,96),
  new THREE.MeshBasicMaterial({color:0xc9a24b,transparent:true,opacity:0.16,depthWritM
const sigilMat=new THREE.MeshBasicMaterial({transparent:true,opacity:0.32,depthWrite:false,side:THREE.DoubleSide});
const sigilPlane=new THREE.Mesh(new THREE.PlaneGeometry(1.7,1.7), sigilMat);
sigil.add(sigilRing, sigilRing2, sigilPlane);
sigilRing.material.opacity=0.55; sigilRing2.material.opacity=0.32; sigilMat.opacity=0.48;
function placeSigil(){
  const d=camera.position.distanceTo(controls.target);
  sigil.position.set(0, 0.04, -(d + 1.85));
  sigil.scale.setScalar(1.08 + d * 0.M
  sigil.rotation.set(0, 0, 0);
function makeGlowTex(){
  const S=256, cv=document.createElement('canvas'); cv.width=cv.height=S;
  const x=cv.getContext('2d');
  const g=x.createRadialGradient(S/2,S/2,6,S/2,S/2,S*0.48);
  g.addColorStop(0,'rgba(255,255,255,0.95)');
  g.addColorStop(0.28,'rgba(255,255,255,0.42)');
  g.addColorStop(0.62,'rgba(255,255,255,0.10)');
  g.addColorStop(1,'rgba(255,255,255,0)');
  x.fillStyle=g; x.fillRect(0,0,S,S);
  const tex=new THREE.CanvasTexture(cv); tex.colorSpacM
e=THREE.SRGBColorSpace; return tex;
function makeBackGlowMat(hex, op){
  return new THREE.MeshBasicMaterial({
    map:makeGlowTex(), color:hex, transparent:true, opacity:op,
    depthWrite:false, blending:THREE.AdditiveBlending, side:THREE.DoubleSide
const backGlow=new THREE.Mesh(new THREE.PlaneGeometry(2.8, 3.3), makeBackGlowMat(0xaa55ff,0));
const backGlow2=new THREE.Mesh(new THREE.PlaneGeometry(4.2, 4.8), makeBackGlowMat(0xaa55ff,0));
backGlow.renderOrder=-20; backGlow2.renderOrder=-21;
e=false; backGlow2.visible=false;
scene.add(backGlow, backGlow2);
function applyBackGlow(){
  const dark=isDarkTitan() || figLum()<0.45;
  let hex=(TR.house&&TR.house.accent)||0xaa66ff;
  if(TR.chase==='GILDED'||TR.chase==='ECLIPSE-GOLD') hex=0xe0b030;
  else if(TR.chase==='SPECTRAL') hex=0x66c8d8;
  else if(TR.chase==='PHANTOM') hex=0xd07090;
  else if(TR.chase==='GENESIS') hex=0xd0d0d0;
    backGlow.material.blending=THREE.AdditiveBlending;
    backGlow2.material.blending=THREE.AdditiveBlending;
ackGlow.material.color.setHex(hex);
    backGlow2.material.color.setHex(hex);
    backGlow.material.opacity=0.58;
    backGlow2.material.opacity=0.26;
    backGlow.material.blending=THREE.NormalBlending;
    backGlow2.material.blending=THREE.NormalBlending;
    backGlow.material.color.setHex(0x08070c);
    backGlow2.material.color.setHex(0x060508);
    backGlow.material.opacity=0.50;
    backGlow2.material.opacity=0.30;
  backGlow.visible=true; backGlow2.visible=true;
function placeBackGlow(){
(!backGlow.visible) return;
  const aim=controls.target;
  const dir=_idleDir.copy(camera.position).sub(aim);
  const d=dir.length()||1; dir.multiplyScalar(1/d);
  backGlow.position.copy(aim).addScaledVector(dir, -1.02);
  backGlow2.position.copy(aim).addScaledVector(dir, -1.35);
  backGlow.quaternion.copy(camera.quaternion);
  backGlow2.quaternion.copy(camera.quaternion);
  backGlow.scale.setScalar(1.45+d*0.08);
  backGlow2.scale.setScalar(1.85+d*0.10);
function drawSigilMark(x, kind, hex, S, fine){
  const c='#'+(hex>>>0).toString(16).padStart(6,'0');
  x.strokeStyle=c; x.fillStyle=c; x.lineCap='round'; x.lineJoin='round';
    x.shadowColor=c; x.shadowBlur=18;
    x.globalAlpha=0.28; x.lineWidth=1.5; x.beginPath(); x.arc(S/2,S/2,S*0.455,0,7); x.stroke();
    x.globalAlpha=0.55; x.lineWidth=3.2; x.beginPath(); x.arc(S/2,S/2,S*0.395,0,7); x.stroke();
    x.globalAlpha=0.88; x.lineWidth=1.4; x.beginPath(); x.arc(S/2,S/2,S*0.348,0,7); x.stroke();
Alpha=0.42; x.lineWidth=3; x.beginPath(); x.arc(S/2,S/2,S*0.46,0,7); x.stroke();
    x.globalAlpha=0.70; x.lineWidth=5; x.beginPath(); x.arc(S/2,S/2,S*0.40,0,7); x.stroke();
    x.globalAlpha=1; x.lineWidth=2.5; x.beginPath(); x.arc(S/2,S/2,S*0.355,0,7); x.stroke();
  x.save(); x.translate(S/2,S/2); x.scale(S/512,S/512);
  const lw=fine?6.2:8;
    x.lineWidth=lw; x.beginPath(); x.moveTo(-100,0); x.quadraticCurveTo(0,-58,100,0); x.quadraticCurveTo(0,58,-100,0); x.closePath(M
    x.beginPath(); x.arc(0,0,30,0,7); x.stroke(); x.beginPath(); x.arc(0,0,11,0,7); x.fill();
  } else if(kind==='crescent'){
    x.beginPath(); x.arc(8,0,72,0,7); x.fill();
    x.globalCompositeOperation='destination-out'; x.beginPath(); x.arc(36,-14,64,0,7); x.fill();
    x.globalCompositeOperation='source-over'; x.fillStyle=c;
    x.beginPath(); x.arc(-22,42,16,0,7); x.fill(); x.beginPath(); x.arc(22,42,16,0,7); x.fill();
  } else if(kind==='block'){
    x.lineWidth=lw; x.strokeRect(-52,-52,104,10M
4); x.strokeRect(-30,-30,60,60);
    x.beginPath(); x.moveTo(-78,0); x.lineTo(78,0); x.moveTo(0,-78); x.lineTo(0,78); x.stroke();
    x.lineWidth=lw; x.beginPath(); x.moveTo(0,-86); x.lineTo(74,72); x.lineTo(-74,72); x.closePath(); x.stroke();
    x.beginPath(); x.moveTo(0,-28); x.lineTo(30,42); x.lineTo(-30,42); x.closePath(); x.stroke();
function makeSigilTex(kind, hex){
  const S=512, cv=document.createElement('canvas'); cv.width=cv.height=S;
  drawSigilMark(cv.getContext('2d'), kM
  const tex=new THREE.CanvasTexture(cv); tex.colorSpace=THREE.SRGBColorSpace; return tex;
function paintMintIntro(){
  const h=TR.house||{};
  const cv=document.getElementById('introMark');
  if(cv) drawSigilMark(cv.getContext('2d'), h.sigil||'eye', h.accent||0xc9a24b, 512, true);
  const house=document.getElementById('introHouse');
  const who=document.getElementById('introWho');
  const chain=document.getElementById('introChain');
  if(house) house.textContent=h.name||TR.houseId||'TITAN';
) who.textContent=[TR.name, TR.rank].filter(Boolean).join('
    const id=String(CHAIN.id||inscriptionId()||'');
    const short=id.length>18?id.slice(0,10)+'
      CHAIN.number!=null?('Nummer  '+CHAIN.number):'',
      CHAIN.height!=null?('Block  '+CHAIN.height):'',
      CHAIN.sat!=null?('Sat  '+CHAIN.sat):'',
      short?('Wrapper-ID  '+short):''
    ].filter(Boolean);
    chain.textContent=parts.join('
    ')||'the chain writes the titan';
function finishRevealNow(){
  if(bust) bust.visible=true;
  if(bustCap) bustCap.visible=true;
  ACC.forEach(a=>{ if(a.obj) a.obj.visible=true; });
  if(typeof sigil!=='undefined') sigil.visible=true;
  if(head) head.scale.setScalar(1);
function showMintIntro(){
  const el=document.getElementById('intro');
  if(!el){ startReveal(); return; }
  if(showMintIntro._seed===SEED){
    if(revealT<0) finishRevealNow();
  showMintIntro._seed=SEED;
  document.body.classListM
  el.classList.add('on'); el.classList.remove('out');
  clearTimeout(showMintIntro._a); clearTimeout(showMintIntro._b);
  showMintIntro._a=setTimeout(()=>{
    if(revealT>=0) finishRevealNow();
    el.classList.add('out');
    document.body.classList.remove('introing');
  showMintIntro._b=setTimeout(()=>{
    el.classList.add('done');
    el.classList.remove('on');
function applySigil(){
  const h=TR.house; if(!h) return;
  if(sigilMat.map) sigilMat.map.dM
  sigilMat.map=makeSigilTex(h.sigil, h.accent); sigilMat.needsUpdate=true;
  sigilRing.material.color.setHex(h.accent);
  sigilRing2.material.color.setHex(h.rim);
  sigil.visible=true;
/* ====================== 6) RORSCHACH PROJECTION ====================== */
const P = { depth:2, up:1, frontSign:1, sx:1.15, sy:1.15, offX:0.0, offY:-0.30 };
const horizAxis = ()=>[0,1,2].find(a=>a!==P.depth && a!==P.up);
  uTime:{value:0}, uAnim:{value:1.0}, uTex:{value:null},
  uScale:{value:new THREE.VectoM
r2(P.sx,P.sy)}, uOffset:{value:new THREE.Vector2(P.offX,P.offY)},
  uCover:{value:6.0}, uHalf:{value:1.0}, uFlipX:{value:0.0}, uMirror:{value:1.0}, uFoldIn:{value:0.0}, uFoldY:{value:0.0}, uSideBias:{value:0.0},
  uFold:{value:1}, uRot:{value:0.0}, uSeam:{value:0.85},
  uFaceLo:{value:0.22}, uFaceHi:{value:0.52},
  uDepth:{value:P.depth}, uUp:{value:P.up}, uHoriz:{value:horizAxis()}, uFrontSign:{value:P.frontSign},
  uInk:{value:new THREE.Color(0x070707)}, uInk2:{value:new THREE.Color(0x5a0e18)}, uSkin:{value:new TM
HREE.Color(0xd9cfc2)},
  uHue:{value:0.0}, uSat:{value:1.0}, uTint:{value:0.0}, uVal:{value:1.0},
  uRelief:{value:0.0}, uFinR:{value:0.50}, uInkMode:{value:0},
  uNeckLo:{value:-0.48}, uNeckHi:{value:-0.24},
  uModelCenter:{value:new THREE.Vector3()}, uModelSize:{value:1.0},
  uEyeA:{value:new THREE.Vector3()}, uEyeB:{value:new THREE.Vector3()},
  uEyeRad:{value:0.0}, uEyeStyle:{value:0}, uEyeLit:{value:0},
  uEyeCol:{value:new THREE.Color(0xff2a2a)}
  uEyeColor:{value:new THREE.Color(0xff2a2a)},M
 uEyeGlow:{value:1.2},
  uStyle:{value:0}, uPupil:{value:0.20}, uSpokes:{value:8.0},
  uSeed:{value:0.37}, uLit:{value:1.0}, uTime:{value:0.0}
function eyeLabel(){
  const st=TR.eyeStyle||'iris';
  return TR.eyeLit?(st+'
 '+(TR.eyeMode||'steady')):(st+'
function applyEyeLook(){
  const hex=TR.eye||0xff2a2a;
  const hot=new THREE.Color(hex).lerp(new THREE.Color(0xffffff), 0.58);
  const si=Math.max(0, EYE_STYLES.indexOf(TR.eyeStyle||'iris'));
  eyeU.uEyeColor.value.setHex(hex);
  eyeU.uEyeGlow.valueM
  eyeU.uStyle.value=si;
  eyeU.uPupil.value=TR.eyePupil||0.20;
  eyeU.uSpokes.value=TR.eyeSpokes||8;
  eyeU.uSeed.value=TR.eyeSeed||0.37;
  eyeU.uLit.value=TR.eyeLit?1.0:0.0;
  if(typeof eyeMats==='undefined') return;
  const rough=[0.44,0.28,0.30,0.26,0.22,0.24,0.20,0.50,0.32,0.10,0.26][si]||0.28;
  eyeMats.forEach(m=>{
    m.color.setHex(si===0?0x161616:0x080808);
    m.emissive.copy(hot);
    m.emissiveIntensity=TR.eyeGlow||2.4;
    m.roughness=rough;
    m.metalness=si===9?0.32:0.0;
varying vec3 vLocalPos;
varying vec3 vLocalNormal;
varying vec3 vWorldP;
varying vec3 vWorldN;
uniform float uTime,uAnim,uCover,uHalf,uFlipX,uMirror,uFaceLo,uFaceHi,uFrontSign,uHue,uSat,uTint,uVal,uModelSize,uRot,uSeam,uRelief,uFinR,uNeckLo,uNeckHi,uInkMode,uEyeRad,uEyeStyle,uEyeLit,uFoldIn,uFoldY,uSideBias;
uniform vec3 uEyeA,uEyeB,uEyeCol;
uniform int uDepth,uUp,uHoriz,uFold;
uniform vec2 uScale,uOffset;
uniform vec3 uInk,uInk2,uSkin,uModelCenter;
uniform sampler2D uTex;
float comp(vec3 p,int i){ return i==0?p.x:(i==1?p.y:p.z); }
vec2 rot2(vec2 p,float a){ float c=cos(a),s=sin(a); return vec2(c*p.x-s*p.y,s*p.x+c*p.y); }
float hash13(vec3 p){ return fract(sin(dot(p,vec3(127.1,311.7,74.7)))*43758.5453); }
vec3 rgb2hsv(vec3 c){ vec4 K=vec4(0.,-1./3.,2./3.,-1.); vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));
  vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r)); float d=q.x-min(q.w,q.y); float e=1e-10;
  return vec3(abs(q.z+(q.w-q.y)/(6.*d+e)), d/(q.x+e), q.xM
vec3 hsv2rgb(vec3 c){ vec4 K=vec4(1.,2./3.,1./3.,3.); vec3 p=abs(fract(c.xxx+K.xyz)*6.-K.www);
  return c.z*mix(K.xxx,clamp(p-K.xxx,0.,1.),c.y); }
  vec3 q=(vLocalPos-uModelCenter)/uModelSize;
  vec2 pr=vec2(comp(q,uHoriz)*uFrontSign, comp(q,uUp));
  float py=pr.y-uFoldY;
  if(f==1){ fp.x=-abs(pr.x); fp.y=-abs(py); }
  else if(f==2){ fp.x=abs(pr.x); fp.y=-abs(py); }
  else if(f==3){ fp.x=-abs(pr.x); fp.y=-abs(py); }
  else if(f==4){ fp.x=-abs(pr.x); fp.y=abs(py); M
  else if(f==5){ fp.x=-abs(pr.x); fp.y=-abs(py); }
  else if(f==6){ fp.x=-abs(pr.x); fp.y=-pr.y; }
  else if(f==7){ fp.x=-abs(pr.x); fp.y=abs(py); }
  if(uFlipX>0.5) fp.x=-fp.x;
  /* <> nose reads image center; >< nose reads image edge. */
  if(uFoldIn>0.5 && f!=0) fp.x=fp.x<0.0?(-0.5-fp.x):(0.5-fp.x);
  vec2 uv=rot2(fp*uScale,uRot)+uOffset+0.5;
  /* Warp must use folded fp, not raw q
 otherwise left/right phases diverge. */
  uv += vec2(sin(uTime*0.52+fp.y*6.6), sin(uTime*0.41+fp.x*6.2))*0.028*uAnim;
vec2(sin(uTime*0.21+fp.x*2.3), cos(uTime*0.17+fp.y*2.0))*0.016*uAnim;
  float win=smoothstep(-0.08,0.03,uv.x)*smoothstep(1.08,0.97,uv.x)*smoothstep(-0.08,0.03,uv.y)*smoothstep(1.08,0.97,uv.y);
  vec3 fdir=vec3(0.0);
  if(uDepth==0) fdir.x=uFrontSign; else if(uDepth==1) fdir.y=uFrontSign; else fdir.z=uFrontSign;
  float facing=dot(normalize(vLocalNormal),fdir);
  float faceMask=smoothstep(uFaceLo,uFaceHi,facing);
  /* Face plate: forehead to chin, stop at the ears
 no skull / sides / crown. */
  float earCut=1.0-M
smoothstep(0.20,0.33,abs(q.x));
  float browCut=1.0-smoothstep(0.24,0.38,q.y);
  float chinCut=smoothstep(-0.20,-0.08,q.y);
  float plate=faceMask*earCut*browCut*chinCut;
  vec3 tx=texture2D(uTex,clamp(uv,0.0,1.0)).rgb;
  float lum=dot(tx,vec3(0.299,0.587,0.114));
  int im=int(uInkMode+0.5);
    vec3 tx2=texture2D(uTex,clamp(uv+vec2(0.014,-0.010),0.0,1.0)).rgb;
    lum=mix(lum,dot(tx2,vec3(0.299,0.587,0.114)),0.45);
  float ink=smoothstep(0.02,0.46,(1.0-lum)*(1.08+uCover*0.16))*win*plate;
aper=smoothstep(0.70,0.90,lum);
  float pb=hash13(vec3(abs(fp)*3.2, 1.7+uCover));
  float pc=hash13(vec3(abs(fp)*6.4+2.2, 4.1));
  float pd=abs(sin(abs(fp.x)*7.0)*sin(abs(fp.y)*6.0));
  float proc=smoothstep(0.42,0.82, pb*0.50+pc*0.28+pd*0.22);
  ink=max(ink, proc*paper*0.28*plate);
  if(im==0) ink=smoothstep(0.03,0.66,ink);
  else if(im==4) ink=smoothstep(0.02,0.68,ink);
  else if(im==5) ink=pow(clamp(ink,0.0,1.0),0.50);
  else if(im==6) ink=smoothstep(0.03,0.72,ink);
  else if(im==7) ink=smoothstep(0.06,0.64,ink)M
  else if(im==9) ink=smoothstep(0.12,0.54,ink);
  ink=clamp(ink*1.22,0.0,1.0);
  if(abs(uSideBias)>0.5) ink*=mix(0.58,1.0,smoothstep(-0.06,0.16,pr.x*uSideBias));
  gBlot=ink*0.88+(1.0-lum)*plate*0.24;
  vec3 inkCol=mix(uInk,uInk2,clamp(0.5+pr.y,0.0,1.0));
  if(im==3) inkCol=mix(uInk2,vec3(0.84,0.66,0.24),0.42);
  else if(im==5) inkCol=mix(uInk*0.42,vec3(0.14,0.05,0.03),0.40);
  else if(im==8) inkCol=mix(uInk2,vec3(1.0,0.34,0.08),0.48);
  else if(im==6) inkCol=mix(uInk,uInk2,0.55);
  float skinL=dot(uSM
kin,vec3(0.30,0.59,0.11));
  float inkL=dot(inkCol,vec3(0.30,0.59,0.11));
  if(abs(skinL-inkL)<0.22) inkCol*=0.38;
  if((im==3||im==5||im==8) && abs(dot(uSkin,vec3(0.30,0.59,0.11))-dot(inkCol,vec3(0.30,0.59,0.11)))<0.28) inkCol*=0.55;
  vec3 col=mix(uSkin,inkCol,ink*0.96);
  if(im==4) col=mix(col,uInk2*0.50+uSkin*0.50,ink*0.22);
  float ndv=max(dot(normalize(vWorldN),normalize(cameraPosition-vWorldP)),0.0);
  float ear=smoothstep(0.26,0.46,abs(q.x))*smoothstep(0.58,0.12,q.y+0.04);
  float nose=(1.0-smoothstep(0.035M
,0.15,abs(q.x)))*smoothstep(0.00,0.22,q.y)*faceMask;
  float sss=pow(1.0-ndv,1.85)*(0.52+ear*0.90+nose*0.58);
  col=mix(col, col*vec3(1.22,0.78,0.64)+uSkin*0.22, sss*0.40*(1.0-ink*0.88));
  vec3 h=rgb2hsv(col); h.x=fract(h.x+uHue); h.y=clamp(h.y*uSat,0.0,1.0); h.z=clamp(h.z*uVal,0.0,1.0);
  col=hsv2rgb(h); col=mix(col,col*vec3(1.05,0.95,0.9),uTint);
  float neck=smoothstep(uNeckLo,uNeckHi,q.y);
  col=mix(uSkin, col, neck);
vec3 blotNormal(vec3 nView){
  int im=int(uInkMode+0.5);
f(im==2||im==5) sgn=-1.0;
  float h=gBlot*uRelief*sgn;
  vec3 nW=normalize(vWorldN);
  vec3 dpdx=dFdx(vWorldP);
  vec3 dpdy=dFdy(vWorldP);
  vec2 dH=vec2(dFdx(h),dFdy(h));
  vec3 R1=cross(dpdy,nW);
  vec3 R2=cross(nW,dpdx);
  float det=dot(dpdx,R1);
  vec3 grad=sign(det)*(dH.x*R1+dH.y*R2);
  vec3 nPert=normalize(abs(det)*nW-grad);
  vec3 nV=normalize((viewMatrix*vec4(nPert,0.0)).xyz);
  return normalize(mix(nView,nV,0.82));
float blotRough(float r0){
  float pore=hash13(vLocalPos*36.0);
  float pore2=hash13(vLocaM
  float grain=pore*0.58+pore2*0.42;
  int im=int(uInkMode+0.5);
  if(im==0) inkR=0.28;
  else if(im==3) inkR=-0.22;
  else if(im==5) inkR=0.32;
  else if(im==7) inkR=-0.28;
  else if(im==8) inkR=-0.08;
  else if(im==9) inkR=0.06;
  return clamp(max(r0,0.34)+uFinR*0.20+grain*0.04+gInk*max(inkR,0.18),0.22,0.88);
float blotMetal(float m0){
  return mix(min(m0,0.10), 0.02, gInk);
function makeHeadMaterial(){
  const m=new THREE.MeshPhysicalMaterial({
    color:0xffffff, roughneM
ss:0.48, metalness:0.04, envMapIntensity:0.52,
    sheen:0.38, sheenRoughness:0.60, sheenColor:new THREE.Color(0xe8c4b4)
  m.onBeforeCompile=(sh)=>{
    Object.assign(sh.uniforms,U);
    sh.vertexShader=sh.vertexShader
      .replace('#include <common>','#include <common>\nvarying vec3 vLocalPos;\nvarying vec3 vLocalNormal;\nvarying vec3 vWorldP;\nvarying vec3 vWorldN;')
      .replace('#include <begin_vertex>','#include <begin_vertex>\nvLocalPos = position;\nvLocalNormal = normal;\nvWorldP = (modelMatrix * vM
ec4(position,1.0)).xyz;\nvWorldN = normalize(mat3(modelMatrix) * normal);');
    sh.fragmentShader=sh.fragmentShader
      .replace('#include <common>','#include <common>\n'+FRAG_HEAD)
      .replace('vec4 diffuseColor = vec4( diffuse, opacity );','vec4 diffuseColor = vec4( rorschach(), opacity );')
      .replace('#include <normal_fragment_maps>','#include <normal_fragment_maps>\nnormal = blotNormal(normal);')
      .replace('#include <roughnessmap_fragment>','#include <roughnessmap_fragment>\nroughnessFactor = blM
otRough(roughnessFactor);')
      .replace('#include <metalnessmap_fragment>','#include <metalnessmap_fragment>\nmetalnessFactor = blotMetal(metalnessFactor);')
      .replace('#include <emissivemap_fragment>','#include <emissivemap_fragment>\nif(int(uInkMode+0.5)==8) totalEmissiveRadiance += uInk2*gInk*0.48;');
  m.customProgramCacheKey=()=>'rorschach-head-v29';
function makeEyeMaterial(){
  const hot=eyeU.uEyeColor.value.clone().lerp(new THREE.Color(0xffffff), 0.58);
 m=new THREE.MeshStandardMaterial({
    color:0x060606, roughness:0.22, metalness:0.0, side:THREE.DoubleSide,
    emissive:hot, emissiveIntensity:2.6
  m.onBeforeCompile=(shader)=>{
    shader.uniforms.uEyeColor=eyeU.uEyeColor;
    shader.uniforms.uEyeGlow=eyeU.uEyeGlow;
    shader.uniforms.uStyle=eyeU.uStyle;
    shader.uniforms.uPupil=eyeU.uPupil;
    shader.uniforms.uSpokes=eyeU.uSpokes;
    shader.uniforms.uSeed=eyeU.uSeed;
    shader.uniforms.uLit=eyeU.uLit;
    shader.uniforms.uTime=eyeU.uTime;
er.fragmentShader=shader.fragmentShader
      .replace('#include <common>', `#include <common>
        uniform vec3 uEyeColor;
        uniform float uEyeGlow,uStyle,uPupil,uSpokes,uSeed,uLit,uTime;`)
      .replace('#include <emissivemap_fragment>', `#include <emissivemap_fragment>
        vec3 Vn=normalize(vViewPosition);
        float facing=clamp(dot(normal,Vn),0.0,1.0);
        vec2 p=normal.xy;
        float rad=length(p);
        float ang=atan(p.y,p.x);
        int st=int(uStyle+0.5);
        float pup=clampM
        float spk=max(uSpokes,3.0);
        float structM=1.0;
          structM=0.70+facing*0.20;
        } else if(st==1){
          float disk=smoothstep(0.90,0.36,rad);
          float hole=1.0-smoothstep(pup*0.70,pup*1.15,rad);
          float spokes=0.55+0.45*pow(abs(sin(ang*spk+uSeed*6.28)),1.4);
          structM=max(0.42, disk*spokes*(1.0-hole*0.55));
        } else if(st==2){
          float disk=smoothstep(0.86,0.32,rad);
          float slit=smoothstep(0.070,0.016,M
abs(p.x))*smoothstep(0.66,0.08,abs(p.y));
          structM=max(0.40, disk*(0.40+slit*0.85));
        } else if(st==3){
          float disk=smoothstep(0.86,0.34,rad);
          float cx=smoothstep(0.075,0.016,abs(p.x));
          float cy=smoothstep(0.075,0.016,abs(p.y));
          structM=max(0.40, disk*(0.42+max(cx,cy)*0.75));
        } else if(st==4){
          float ring=smoothstep(0.14,0.26,rad)*smoothstep(0.78,0.48,rad);
          structM=max(0.45, 0.28+ring*1.05);
        } else if(st==5){
isk=smoothstep(0.88,0.34,rad);
          float occ=smoothstep(0.10,0.55,length(p-vec2(0.18,0.04)));
          structM=max(0.42, disk*mix(0.55,1.0,occ));
        } else if(st==6){
          float rays=pow(abs(sin(ang*spk+uTime*0.4)),3.2);
          structM=max(0.45, smoothstep(0.92,0.16,rad)*mix(0.40,1.15,rays));
        } else if(st==7){
          float hole=smoothstep(0.62,0.22,rad);
          structM=max(0.38, (1.0-hole)*0.95+0.22);
        } else if(st==8){
          float a=mod(ang+3.14159, 6.28318/max(spk,4.0)M
          float rune=smoothstep(0.14,0.04,abs(a-0.42))*smoothstep(0.74,0.20,rad);
          structM=max(0.42, smoothstep(0.88,0.38,rad)*(0.40+rune*0.85));
        } else if(st==9){
          float rings=0.5+0.5*sin(rad*14.0-uTime*1.2);
          structM=max(0.50, smoothstep(0.92,0.12,rad)*mix(0.55,1.15,rings));
          float heat=smoothstep(0.88,0.10,rad);
          structM=max(0.48, heat*(0.75+0.25*sin(uTime*5.0+uSeed*8.0)));
        vec3 core=mix(uEyeColor*1.20, vec3(1.50,1.42,1.25M
), pow(facing,1.25)*0.72);
        float amp=(1.15 + uEyeGlow * 1.25) * mix(0.55,1.0,uLit);
        totalEmissiveRadiance = core * structM * amp;
        diffuseColor.rgb = mix(vec3(0.03), uEyeColor*0.22, structM*0.50);
    m.userData.shader=shader;
  m.customProgramCacheKey=()=>'titan-eye-v14';
  m._eye=true; return m;
/* ---- post fx ---- */
const composer=new EffectComposer(renderer);
composer.addPass(new RenderPass(scene,camera));
const bloom=new UnrealBloomPass(new THREE.Vector2(innerWidth,inM
nerHeight),0.44,0.56,0.50);
composer.addPass(bloom);
    tDiffuse:{value:null}, uRes:{value:new THREE.Vector2(innerWidth,innerHeight)},
    uFilter:{value:0}, uContrast:{value:1.08}, uSat:{value:1.04}, uLift:{value:0.0}, uGamma:{value:1.02},
    uTint:{value:new THREE.Color(0xffffff)}, uDuoA:{value:new THREE.Color(0x0a0610)}, uDuoB:{value:new THREE.Color(0xff3d8a)},
    uInvert:{value:0}, uGrain:{value:0.006}
  vertexShader:`varying vec2 vUv; void main(){ vUv=uv; gl_Position=prM
ojectionMatrix*modelViewMatrix*vec4(position,1.0);} `,
    precision highp float; varying vec2 vUv;
    uniform sampler2D tDiffuse; uniform vec2 uRes;
    uniform int uFilter; uniform float uContrast,uSat,uLift,uGamma,uInvert,uGrain;
    uniform vec3 uTint,uDuoA,uDuoB;
    float luma(vec3 c){ return dot(c,vec3(0.2126,0.7152,0.0722)); }
      vec2 uv=vUv; int f=uFilter;
      vec3 col=texture2D(tDiffuse,uv).rgb;
        float px=160.0;
        col=mix(col, texture2M
D(tDiffuse,floor(uv*px)/px).rgb, 0.82);
        float px=2.2/uRes.x;
        vec3 ch=vec3(texture2D(tDiffuse,uv+vec2(px,0.0)).r, col.g, texture2D(tDiffuse,uv-vec2(px,0.0)).b);
        col=mix(col,ch,0.72);
      col=(col-0.5)*uContrast+0.5+uLift;
      col=pow(max(col,0.0), vec3(uGamma));
      float L=luma(col); col=mix(vec3(L),col,uSat);
      col=mix(col, col*uTint, 0.20);
      float g=fract(sin(dot(uv*uRes,vec2(12.9898,78.233)))*43758.5453);
      col+=(g-0.5)*uGrain;
==4){ col=mix(col, floor(col*5.0+0.5)/5.0, 0.68); }
      if(f==5){ vec3 duo=mix(uDuoA,uDuoB,smoothstep(0.10,0.90,L)); col=mix(col,duo,0.52); }
      if(f==6){ float scan=sin(uv.y*uRes.y*3.14159)*0.5+0.5; col*=1.0-scan*0.16; col*=vec3(0.96,1.02,0.94); }
      if(f==7){ vec3 th=vec3(L*1.25, L*0.45, 0.88-L*0.40); col=mix(col,th,0.58); }
      if(f==8){ col=mix(col, col*vec3(0.76,0.88,1.10), 0.50); col=(col-0.5)*1.18+0.45; }
      if(f==9){ col=vec3(L); }
      if(f==10){ col=mix(col, vec3(L)*vec3(1.12,0.90,0.68), 0.7M
      if(f==11){ col=mix(col, vec3(L*1.14+0.06), 0.55); }
      if(f==12){ col=vec3(L); col=(col-0.5)*1.12+0.52; col=max(col,vec3(0.055)); }
      if(f==13){ col=mix(col, col*vec3(1.10,0.96,0.82), 0.36); }
      if(f==14){ col=mix(col, col*vec3(0.72,0.94,1.18), 0.58); }
      if(f==15){ col=mix(col, col*vec3(1.22,0.82,0.62), 0.58); }
      if(f==16){ col=mix(col, col*vec3(0.62,1.10,1.16), 0.55); }
      if(f==17){ col=mix(col, col*vec3(0.86,0.96,1.12), 0.40); }
      if(f==18){ col=mix(col,vec3(L),0.82); col*M
=vec3(0.94,0.98,1.06); }
      if(f==19){ col=mix(col, col*vec3(0.68,0.78,1.12), 0.48); col=max(col*0.92, vec3(0.04)); }
      if(f==20){ col=mix(col, col*vec3(1.22,0.72,0.92), 0.55); }
      if(f==21){ col=mix(col, col*vec3(0.88,1.12,0.62), 0.55); }
      if(f==22){ col=mix(col, col*vec3(1.30,0.72,0.42), 0.56); }
      if(f==23){ col=mix(col, floor(col*6.0+0.5)/6.0, 0.40); }
      gl_FragColor=vec4(clamp(col,0.0,1.0),1.0);
const lookPass=new ShaderPass(LookShader);
composer.addPass(lookPass);
  {c:1.00,s:1.00,lift:0.00,g:1.00,grain:0.003},
  {c:1.04,s:0.84,lift:0.02,g:1.05,grain:0.007,tint:0xd2c2a4},
  {c:1.06,s:1.00,lift:0.00,g:1.00,grain:0.004},
  {c:1.02,s:1.10,lift:0.00,g:1.00,grain:0.004},
  {c:1.10,s:1.12,lift:0.00,g:1.00,grain:0.005},
  {c:1.06,s:0.62,lift:0.00,g:1.00,grain:0.004},
  {c:1.08,s:0.88,lift:-0.02,g:1.04,grain:0.006},
  {c:1.10,s:1.18,lift:0.02,g:0.94,grain:0.004},
  {c:1.16,s:0.70,lift:-0.03,g:1.04,grain:0.005,tint:0x88a4b8},
  {c:1.12,s:0.00,liM
ft:0.00,g:1.02,grain:0.006},
  {c:1.06,s:0.42,lift:0.02,g:1.04,grain:0.006,tint:0xc8a060},
  {c:1.16,s:0.22,lift:0.08,g:0.90,grain:0.005},
  {c:1.12,s:0.00,lift:0.03,g:1.04,grain:0.006},
  {c:1.04,s:0.88,lift:0.00,g:1.02,grain:0.004,tint:0xd2b48c},
  {c:1.06,s:0.88,lift:0.00,g:1.00,grain:0.004,tint:0x6aa8c4},
  {c:1.08,s:0.92,lift:0.01,g:1.02,grain:0.004,tint:0xd48848},
  {c:1.06,s:0.90,lift:0.00,g:1.00,grain:0.004,tint:0x2aa8a4},
  {c:1.06,s:0.86,lift:0.00,g:1.02,grain:0.004,tint:0x8ab0c4},
  {c:1.10,s:0.12,lift:0M
.02,g:1.02,grain:0.005,tint:0xc4d0d6},
  {c:1.08,s:0.80,lift:0.02,g:1.04,grain:0.004,tint:0x4a5a88},
  {c:1.06,s:0.92,lift:0.01,g:1.00,grain:0.004,tint:0xd06088},
  {c:1.06,s:0.86,lift:0.00,g:1.00,grain:0.004,tint:0x7a9a40},
  {c:1.14,s:1.08,lift:-0.02,g:0.98,grain:0.005,tint:0xe07028},
  {c:1.10,s:0.80,lift:0.00,g:1.00,grain:0.006,tint:0xc8bca0}
function applyLook(){
  const g=GRADES[TR.gradeName]||GRADES.ice;
  const f=TR.filter|0;
  const fl=FILTER_LOOK[f]||FILTER_LOOK[0];
  LOOK.uFilter.value=f;
rast.value=g.c*fl.c;
  LOOK.uSat.value=g.s*fl.s;
  LOOK.uLift.value=(g.lift||0)+fl.lift;
  LOOK.uGamma.value=g.g*fl.g;
  LOOK.uTint.value.setHex(fl.tint||g.tint);
  LOOK.uGrain.value=Math.min(0.008, fl.grain);
  LOOK.uInvert.value=0;
  if(h){ LOOK.uDuoA.value.setHex(h.ink[0]); LOOK.uDuoB.value.setHex(h.accent); }
  if(TR.cycle==='night'){
    LOOK.uTint.value.lerp(new THREE.Color(0x88a0e0), 0.48);
    LOOK.uSat.value*=1.10;
    LOOK.uContrast.value*=1.05;
    LOOK.uTint.value.lerp(newM
 THREE.Color(0xf2d09a), 0.42);
    LOOK.uSat.value*=1.06;
    LOOK.uLift.value+=0.01;
  if(typeof applyBackGlow==='function') applyBackGlow();
/* ---- SIGNAL glitch FX (ported from richart.app SIGNAL engine
facd0b9bi0): rgb-split ghosts (accent + cyan), horizontal
   slice displacement, moving scanlines, digital grain, accent-bar flash
   on new-block "drop", subtle vignette. Runs on the final sRGB frame so
   it matches SIGNAL's 2D canvas look. Driven by mempool fee / audio highs
ash instead of SIGNAL's chaos+motion. */
const SignalGlitchShader={
    tDiffuse:{value:null},
    uRes:{value:new THREE.Vector2(innerWidth,innerHeight)},
    uTime:{value:0}, uAmount:{value:0}, uBurst:{value:0},
    uRGB:{value:6.0}, uScan:{value:0.14}, uGrain:{value:0.04},
    uEnable:{value:0.0}, uStyle:{value:0}, uAccent:{value:new THREE.Color(0xff2a2a)}
  vertexShader:`varying vec2 vUv; void main(){ vUv=uv; gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0);} `,
    precision highp float;
    varying vec2 vUv;
    uniform sampler2D tDiffuse; uniform vec2 uRes;
    uniform float uTime,uAmount,uBurst,uRGB,uScan,uGrain,uEnable;
    uniform int uStyle;
    uniform vec3 uAccent;
    float hash(float n){ return fract(sin(n)*43758.5453123); }
    float hash2(vec2 p){ return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453123); }
      vec2 uv=vUv; int st=uStyle;
      if(uEnable<0.5||st==0){ gl_FragColor=texture2D(tDiffuse,uv); return; }
      float amt=clamp(uAmM
      vec3 col=texture2D(tDiffuse,uv).rgb;
        float px=(1.2+amt*2.0)/uRes.x;
        col=vec3(texture2D(tDiffuse,vec2(uv.x+px,uv.y)).r, col.g, texture2D(tDiffuse,vec2(uv.x-px,uv.y)).b);
      if(st==1||st==2){
        float gr=hash2(uv*uRes+floor(uTime*6.0))*2.0-1.0;
        col+=gr*uGrain*0.28;
      gl_FragColor=vec4(col,1.0);
const fxPass=new ShaderPass(SignalGlitchShader);
composer.addPass(fxPass);
composer.addPass(new OutputPass());
const FX_NAMES=['off','grain','chroma'];
function pickFxStyle(r, houseId){
  const w={ ORACLE:[88,8,4], PHANTOM:[80,12,8], GENESIS:[92,6,2], FORGE:[86,10,4] }[houseId]||[88,8,4];
  let t=r()*w.reduce((a,b)=>a+b,0);
  for(let i=0;i<w.length;i++){ t-=w[i]; if(t<=0) return i; }
function applyFxStyle(i){
  fxIdx=((i%FX_NAMES.length)+FX_NAMES.length)%FX_NAMES.length;
  FX.uStyle.value=fxIdx;
  FX.uEnable.value=fxIdx>0?1:0;
/* ============================ 7) MM
ODEL ============================ */
const gltfL=new GLTFLoader();
const draco=new DRACOLoader();
/* On-chain the Draco decoder is inscribed as two files; route DRACOLoader's
   two fixed requests to their inscription ids. If the ids are still the
   placeholders (dev / off-chain), fall back to the gstatic decoder that is
   verified to decode these models. */
/* Draco JS is split across two inscriptions (size limit). Concatenate both
 the first chunk alone is invalid JS and kills the worker. */
  'b969fd350f588831192572a11707a3a5e3f73dea61fe818d79f2d7209989d47bi0',
  'febdcbc379c731bfb12d3d07746d4f2079b28a042e86ce11721aa0dd97011f79i0'
  'draco_wasm_wrapper.js':'__DRACO_WRAPPER_ID__',
  'draco_decoder.wasm':'__DRACO_DECODER_ID__'
function loadContentText(id){
  const loader=new THREE.FileLoader(draco.manager);
  loader.setPath(CONTENT); loader.setResponseType('text'); loader.setWithCredentials(draco.withCredentials);
  return new Promise((res,rej)=>loader.load(id,reM
if(/^[0-9a-f]{64}i\d+$/.test(DRACO_JS_PARTS[0])){
  draco.setDecoderConfig({type:'js'});
  draco._loadLibrary=function(u){
    if(u!=='draco_decoder.js') return Promise.reject(new Error('DRACO missing '+u));
    return Promise.all(DRACO_JS_PARTS.map(loadContentText)).then(p=>p.join(''));
} else if(/^[0-9a-f]{64}i\d+$/.test(DRACO_IDS['draco_wasm_wrapper.js'])){
  draco.setDecoderConfig({type:'wasm'});
  draco._loadLibrary=function(u,responseType){
    const id=DRACO_IDS[u]; const loader=newM
 THREE.FileLoader(this.manager);
    loader.setPath(CONTENT); loader.setResponseType(responseType); loader.setWithCredentials(this.withCredentials);
    return new Promise((res,rej)=>loader.load(id,res,undefined,rej));
  draco.setDecoderPath('https://www.gstatic.com/draco/versioned/decoders/1.5.7/');
gltfL.setDRACOLoader(draco);
const texL=new THREE.TextureLoader();
const eyeMeshList=[];
function syncEyeLights(){
  while(eyeLights.length<eyeMeshList.M
    const l=new THREE.PointLight(0xff3344,0.38,1.40,1.85);
    head.add(l); eyeLights.push(l);
  eyeMeshList.forEach((n,i)=>{
    const pos=new THREE.Vector3();
    n.getWorldPosition(pos); head.worldToLocal(pos);
    pos.z += 0.11 * (P.frontSign||1);
    eyeLights[i].position.copy(pos);
    if(TR.eye) eyeLights[i].color.setHex(TR.eye);
    eyeLights[i].distance=1.40; eyeLights[i].decay=1.85;
function eyeGlowAt(t,ab){
  const base=TR.eyeGlow||2.4, rate=TR.eyeRate||1.4, mode=TR.eyeMode||'pulse';M
  if(mode==='pulse') m=0.40+0.60*(0.5+0.5*Math.sin(t*rate*2.4));
  else if(mode==='breathe') m=0.46+0.54*(0.5+0.5*Math.sin(t*rate*0.75));
  else if(mode==='heartbeat'){
    const p=(t*rate*1.5)%1;
    m=0.38+0.62*(Math.exp(-p*14.0)+0.70*Math.exp(-((p+0.58)%1)*16.0));
  } else if(mode==='flicker'){
    const n=Math.sin(t*18.0)+Math.sin(t*27.0+1.7)+Math.sin(t*43.0);
    m=0.36+0.64*Math.max(0.0, 0.5+0.5*n/3.0);
  } else if(mode==='audio') m=0.50+0.50*((ab&&ab.bass)||0)+0.20*(typeof beatEnv==='number'?beatM
  return Math.min(3.8, Math.max(0.85, base*m*(TR.quiet?0.86:1.0)));
function frame(obj){
  const box=new THREE.Box3().setFromObject(obj);
  const size=box.getSize(new THREE.Vector3()), c=box.getCenter(new THREE.Vector3());
  const maxDim=Math.max(size.x,size.y,size.z)||1, s=2.2/maxDim;
  obj.scale.setScalar(s); obj.position.sub(c.clone().multiplyScalar(s));
function setInkblot(id){
  if(BLOT_TEX[id]){ U.uTex.value=BLOT_TEX[id]; return; }
  if(!U.uTex.value) U.uTex.valuM
  texL.load(url(id),(t)=>{ t.colorSpace=THREE.NoColorSpace; t.minFilter=THREE.LinearMipmapLinearFilter; t.magFilter=THREE.LinearFilter;
    t.generateMipmaps=true; t.anisotropy=renderer.capabilities.getMaxAnisotropy();
    t.wrapS=t.wrapT=THREE.ClampToEdgeWrapping; BLOT_TEX[id]=t; U.uTex.value=t; },
    undefined, ()=>{ if(!U.uTex.value) U.uTex.value=proceduralInk(); });
function proceduralInk(){
  const S=256,cv=document.createElement('canvas');cv.width=cv.height=S;const x=cv.getContext('2d');M
  x.fillStyle='#fff';x.fillRect(0,0,S,S);x.fillStyle='#000';const r=mulberry32(fnv1a(seedMaterial()+'ink'));
  for(let i=0;i<70;i++){const px=r()*S*0.5,py=r()*S*0.5,rr=6+r()*40;x.beginPath();x.arc(px,py,rr,0,7);x.fill();x.beginPath();x.arc(S-px,py,rr,0,7);x.fill();x.beginPath();x.arc(px,S-py,rr,0,7);x.fill();x.beginPath();x.arc(S-px,S-py,rr,0,7);x.fill();}
  const tx=new THREE.CanvasTexture(cv);tx.colorSpace=THREE.NoColorSpace;return tx;
if(!SEALED) gltfL.load(url(HEAD_ID),(g)=>{
  const o=g.scene; o.updateMatrM
  const flat=new THREE.Group(), meshes=[];
  o.traverse(n=>{ if(n.isMesh) meshes.push(n); });
  meshes.forEach(n=>{
    n.geometry=n.geometry.clone(); n.geometry.applyMatrix4(n.matrixWorld);
    n.position.set(0,0,0); n.quaternion.identity(); n.scale.set(1,1,1);
    const nm=((n.name||'')+' '+((n.material&&n.material.name)||'')).toUpperCase();
    if(nm.includes('EYE')){ const em=makeEyeMaterial(); eyeMats.push(em); n.material=em; }
    else n.material=makeHeadMaterial();
st box=new THREE.Box3().setFromObject(flat), size=box.getSize(new THREE.Vector3()), c=box.getCenter(new THREE.Vector3());
  U.uModelCenter.value.copy(c); U.uModelSize.value=Math.max(size.x,size.y,size.z)||1;
  eyeMeshList.length=0;
  flat.children.forEach(n=>{ if(n.isMesh && n.material && n.material._eye) eyeMeshList.push(n); });
  frame(flat); bust=flat; head.add(flat); measureHead();
  if(!Number.isFinite(CAM.aimY)) syncAimFromLook();
  applyCam({front:true});
  headBox=new THREE.Box3().setFromObject(flat);
  document.getElementById('load').classList.add('hidden');
  if(canMintTraits()) applyTraits();
},undefined,(e)=>{ document.getElementById('load').classList.add('hidden'); console.error('head load failed',e); });
function setMotif(i){ motif=((i%INKBLOTS.length)+INKBLOTS.length)%INKBLOTS.length; setInkblot(INKBLOTS[motif]); refreshHUD(); }
if(!SEALED) setInkblot(INKBLOTS[0]);
/* ---- accessories: load transforms from the tuner, wear them per seed ---- */
F=null, headReady=false, headBox=null;
async function loadAccTransforms(){
  if(MINT||isGateway){ ACC_TF=ACC_TRANSFORMS; return ACC_TF; }
  try{ const j=await fetch('./accessory-transforms.json?'+Date.now()).then(r=>r.ok?r.json():null); ACC_TF=j||ACC_TRANSFORMS; }
  catch(e){ ACC_TF=ACC_TRANSFORMS; }
function clearAccessories(){ ACC.forEach(c=>head.remove(c.obj)); ACC.length=0; tuneIdx=-1; }
// default placement per group when no tuned transform exists (mirrors the tuner)
function defaultAccTransM
  const bb=headBox||new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1));
  const c=bb.getCenter(new THREE.Vector3());
  const top=bb.max.y, botY=bb.min.y, midY=(botY+top)/2, front=bb.max.z, back=bb.min.z;
  let px=c.x, py=c.y, pz=c.z, s=0.8; const g=man.group;
  if(g==='Wings'){ py=midY; pz=back-0.3; s=1.6; }
  else if(g==='Helmet'||g==='Hoodie'){ py=top; s=1.05; }
  else if(g==='Horns'){ py=top; s=0.9; }
  else if(g==='Glasses'||g==='Eyepatch'){ py=c.y+0.18; pz=front+0.02; s=0.6; }
se if(g==='Mask'||g==='Phantom'){ py=c.y-0.05; pz=front+0.02; s=0.7; }
  else if(g==='Armor'||g==='Shirt'){ py=botY+0.15; s=1.2; }
  return {id:man.id, sx:s,sy:s,sz:s, px, py, pz, rx:0, ry:0, rz:0};
const CLOTH_GROUPS=new Set(['Hoodie','Shirt']);
  WING_SERAPH:0, WING_HALO:5, WING_SPECTRE:3, WING_WRAITH:3,
  WING_ONYX:1, WING_PHOENIX:2, WING_TEMPEST:4, WING_TALON:1, WING_FALLEN:2
const WING_FX_NAMES=['scan','vein','ember','spectre','storm','halo'];
  uTime:{value:0}, uAmp:{valuM
e:1.0}, uSeed:{value:0.37}, uStyle:{value:0},
  uAccent:{value:new THREE.Color(0x3dffe8)}, uInk:{value:new THREE.Color(0x080808)}
function makeWingMaterial(man){
  const law=HOUSE_MAT[TR.houseId]||HOUSE_MAT.GENESIS;
  const fin=FINISHES[TR.finishName]||FINISHES.skin;
  const spec=law.metal;
  let st=WING_STYLE[man.key]!=null?WING_STYLE[man.key]:0;
  if(TR.chaseWing!=null) st=TR.chaseWing;
  let acc=TR.house?TR.house.accent:0x3dffe8;
  if(TR.chase==='GILDED'||TR.chase==='ECLIPSE-GOLD') acc=0xe0b030;
chase==='SPECTRAL') acc=0x66c8d8;
  else if(TR.chase==='PHANTOM') acc=0xd07090;
  else if(TR.chase==='GENESIS') acc=0xd0d0d0;
  const wingHex=contrastKitColor(spec.c, 'metal');
  const m=new THREE.MeshStandardMaterial({
    color:wingHex, metalness:Math.min(0.58, spec.m*0.42+fin.m*0.28),
    roughness:Math.max(0.28, spec.r*0.55+fin.r*0.40),
    envMapIntensity:0.16+fin.env*0.14, side:THREE.DoubleSide,
    emissive:new THREE.Color(acc), emissiveIntensity:0.12
  if(TR.ink2) m.color.lerp(new THREE.Color(TR.ink2)M
  m.color.setHex(contrastKitColor(m.color.getHex(), 'metal'));
  if(TR.chase==='GILDED'||TR.chase==='ECLIPSE-GOLD') m.color.lerp(new THREE.Color(0xe8c060), 0.42);
  else if(TR.chase==='SPECTRAL') m.color.lerp(new THREE.Color(0x66c8d8), 0.38);
  else if(TR.chase==='PHANTOM') m.color.lerp(new THREE.Color(0xaa55ff), 0.32);
  wingU.uAccent.value.setHex(acc);
  wingU.uInk.value.setHex(TR.ink||0x080808);
  wingU.uStyle.value=st;
  wingU.uSeed.value=TR.eyeSeed||0.37;
  TR.wingFx=WING_FX_NAMES[st]||'scan';
eforeCompile=(sh)=>{
    Object.assign(sh.uniforms, wingU);
    sh.vertexShader=sh.vertexShader
      .replace('#include <common>',`#include <common>
        varying vec3 vWingP; uniform float uTime,uAmp;`)
      .replace('#include <begin_vertex>',`#include <begin_vertex>
        vWingP=position;
        float w=sin(position.x*2.2+uTime*1.45)*0.014+sin(position.y*2.8+uTime*1.05)*0.009;
        transformed += normal * w * (0.65+uAmp*0.35);
    sh.fragmentShader=sh.fragmentShader
      .replace('#include <cM
ommon>', `#include <common>
        varying vec3 vWingP;
        uniform float uTime,uAmp,uSeed; uniform int uStyle;
        uniform vec3 uAccent,uInk;
        float wH(vec3 p){ return fract(sin(dot(p,vec3(127.1,311.7,74.7)))*43758.5453); }
        float wN(vec2 p){
          vec2 i=floor(p),f=fract(p);
          float a=wH(vec3(i,uSeed)),b=wH(vec3(i+vec2(1,0),uSeed));
          float c=wH(vec3(i+vec2(0,1),uSeed)),d=wH(vec3(i+vec2(1,1),uSeed));
          vec2 u=f*f*(3.0-2.0*f);
          return mix(mix(a,b,u.x),mixM
      .replace('#include <emissivemap_fragment>', `#include <emissivemap_fragment>
        vec3 P=vWingP; float t=uTime; int st=uStyle;
        vec3 Vn=normalize(vViewPosition);
        float facing=clamp(dot(normal,Vn),0.0,1.0);
        float rim=pow(1.0-facing,2.2);
        float glow=0.0;
          float scan=pow(abs(sin(P.y*24.0-t*3.0)),9.0);
          float band=pow(abs(sin(P.y*7.0+t*0.9)),3.0)*0.22;
          glow=scan*0.90+band+rim*0.28;
        } else if(st==1)M
          float n=wN(P.xy*3.8+vec2(t*0.16,t*0.07));
          float vein=smoothstep(0.40,0.70,n)*smoothstep(0.90,0.60,n);
          glow=vein*1.15+rim*0.24;
        } else if(st==2){
          float heat=smoothstep(-0.45,0.55,P.y+0.12*sin(t*1.5+P.x*5.5));
          float flick=0.72+0.28*sin(t*6.5+P.x*8.0);
          glow=heat*flick*0.95+rim*0.38;
        } else if(st==3){
          float sc=pow(abs(sin(P.x*16.0+t*2.2)),11.0);
          float flick=0.55+0.45*step(0.18,fract(sin(floor(t*5.5)+uSeed)*43.11));
   glow=sc*0.75+rim*0.50*flick;
        } else if(st==4){
          float bolt=exp(-abs(P.x+0.10*sin(P.y*9.0-t*7.5))*16.0);
          bolt*=smoothstep(0.15,0.85,sin(t*4.8+P.y*3.2)*0.5+0.5);
          glow=bolt*1.35+rim*0.22;
          float ring=abs(sin(length(P.xy)*9.0-t*1.3));
          glow=pow(1.0-ring,5.5)*0.95+rim*0.30;
        totalEmissiveRadiance += uAccent*glow*(0.50+uAmp*0.55);
        diffuseColor.rgb = mix(diffuseColor.rgb, mix(uInk,uAccent,0.35), glow*0.22);
 m.customProgramCacheKey=()=>'titan-wing-v3-'+st;
function isLensMat(node, src){
  const nm=((node&&node.name)||'')+' '+((src&&src.name)||'');
  if(/LENS|GLASS|VISOR|SHIELD/i.test(nm)) return true;
  if(src&&src.transparent&&src.opacity<0.85) return true;
function styleAccMaterial(man, src, node){
  const law=HOUSE_MAT[TR.houseId]||HOUSE_MAT.GENESIS;
  if(man.group==='Glasses'){
    if(isLensMat(node, src)){
      const m=new THREE.MeshPhysicalMaterial({
:0x152028, metalness:0.08, roughness:0.04, transmission:0.90,
        thickness:0.22, ior:1.45, transparent:true, opacity:0.18,
        attenuationColor:new THREE.Color(law.glass.c), attenuationDistance:0.8,
        side:THREE.DoubleSide
    const m=(src&&src.clone)?src.clone():new THREE.MeshStandardMaterial();
    m.color.setHex(0x080808); if(m.emissive) m.emissive.setRGB(0,0,0);
    m.emissiveIntensity=0; m.vertexColors=false; m.map=null; m.lightMap=null;
    m.metalness=0.55; m.roM
ughness=0.18; m.envMapIntensity=0.55; m.transparent=false; m.opacity=1; m.needsUpdate=true;
    decorateAccMaterial(m, man, false);
  if(man.group==='Wings') return makeWingMaterial(man);
  const cloth=CLOTH_GROUPS.has(man.group);
  const armor=man.group==='Armor';
  const spec=cloth?law.cloth:law.metal;
  const fin=FINISHES[TR.finishName]||FINISHES.skin;
  const m=(src&&src.clone)?src.clone():new THREE.MeshStandardMaterial();
  m.color.setHex(spec.c);
  if(TR.ink2) m.color.lerp(new THREE.Color(TRM
  if(fin.metalMix>0 && !cloth) m.color.lerp(new THREE.Color(0xc9a24b), fin.metalMix*0.18);
  m.color.setHex(contrastKitColor(m.color.getHex(), cloth?'cloth':armor?'armor':'metal'));
  if(m.emissive) m.emissive.setHex(TR.house&&TR.house.accent?TR.house.accent:0x000000);
  m.emissiveIntensity=0.02;
    m.metalness=0.02;
    m.roughness=Math.max(0.72, spec.r*0.86);
    m.envMapIntensity=0.08;
    m.metalness=Math.min(0.62, spec.m*(0.42+fin.m*0.38));
    m.roughness=Math.max(armorM
?0.28:0.22, spec.r*0.58+fin.r*0.38);
    m.envMapIntensity=0.14+fin.env*0.12;
  m.vertexColors=false; m.map=null; m.lightMap=null; m.needsUpdate=true;
  decorateAccMaterial(m, man, cloth?'cloth':armor?'armor':'metal');
function decorateAccMaterial(m, man, kind){
  const mode=kind===true?'cloth':kind===false?'metal':(kind||'metal');
  const kId=mode==='cloth'?1.0:mode==='armor'?2.0:0.0;
  const seed=(TR.eyeSeed||0.37)+((man.key||'').length*0.17);
  m.onBeforeCompile=(sh)=>{
    sh.uniforms.uAccSeedM
    sh.uniforms.uAccKind={value:kId};
    sh.vertexShader=sh.vertexShader
      .replace('#include <common>','#include <common>\nvarying vec3 vAccP;')
      .replace('#include <begin_vertex>','#include <begin_vertex>\nvAccP=position;');
    sh.fragmentShader=sh.fragmentShader
      .replace('#include <common>', `#include <common>
        varying vec3 vAccP; uniform float uAccSeed,uAccKind;
        float aH(vec3 p){ return fract(sin(dot(p,vec3(127.1,311.7,74.7))+uAccSeed)*43758.5453); }`)
ce('#include <normal_fragment_maps>', `#include <normal_fragment_maps>
        if(uAccKind>1.5){
          float px=sin(vAccP.x*13.0); float py=sin(vAccP.y*11.0);
          normal=normalize(normal+vec3(px*0.10, py*0.08, 0.0));
        } else if(uAccKind>0.5){
          float tw=sin(vAccP.x*22.0)*sin(vAccP.y*20.0);
          float rib=sin(vAccP.x*12.0);
          float fold=sin(vAccP.x*4.4+vAccP.y*3.2);
          normal=normalize(normal+vec3(rib*0.16+fold*0.08, tw*0.12+fold*0.06, 0.0));
include <color_fragment>', `#include <color_fragment>
        if(uAccKind>1.5){
          float px=abs(fract(vAccP.x*6.5)-0.5);
          float py=abs(fract(vAccP.y*5.2)-0.5);
          float seam=smoothstep(0.055,0.018,min(px,py));
          float rivet=smoothstep(0.90,0.97,aH(floor(vAccP*6.5)+0.3));
          float wear=aH(vAccP*12.0);
          diffuseColor.rgb *= 0.64+0.22*wear;
          diffuseColor.rgb = mix(diffuseColor.rgb, diffuseColor.rgb*0.46, seam*0.70);
          diffuseColor.rgb = mix(diffuseColor.rgM
b, diffuseColor.rgb*1.18, rivet*0.28);
        } else if(uAccKind>0.5){
          float dye=aH(vAccP*4.2);
          float twill=abs(sin(vAccP.x*20.0+vAccP.y*20.0))*abs(sin(vAccP.x*20.0-vAccP.y*20.0));
          float knit=abs(sin(vAccP.x*14.0))*abs(sin(vAccP.y*16.0));
          float rib=pow(0.5+0.5*sin(vAccP.x*11.0),1.8);
          float fold=0.5+0.5*sin(vAccP.x*4.2+vAccP.y*3.1)*sin(vAccP.y*5.0);
          float hem=smoothstep(0.05,0.0,abs(fract(vAccP.y*3.4)-0.5)-0.42);
          diffuseColor.rgb *= 0.70+0.30*dyeM
          diffuseColor.rgb *= 0.76+0.24*fold;
          diffuseColor.rgb = mix(diffuseColor.rgb, diffuseColor.rgb*0.55, twill*0.48);
          diffuseColor.rgb = mix(diffuseColor.rgb, diffuseColor.rgb*0.68, knit*0.32);
          diffuseColor.rgb = mix(diffuseColor.rgb, diffuseColor.rgb*0.72, rib*0.34);
          diffuseColor.rgb *= 1.0-hem*0.24;
          float wear=smoothstep(0.78,0.96,aH(vAccP*28.0));
          diffuseColor.rgb = mix(diffuseColor.rgb, diffuseColor.rgb*vec3(0.70,0.66,0.56), wearM
      .replace('#include <roughnessmap_fragment>', `#include <roughnessmap_fragment>
        float n1=aH(vAccP*16.0); float n2=aH(vAccP*36.0+2.7);
        if(uAccKind>1.5){
          float seam=smoothstep(0.055,0.018,min(abs(fract(vAccP.x*6.5)-0.5),abs(fract(vAccP.y*5.2)-0.5)));
          roughnessFactor=clamp(roughnessFactor+seam*0.28+(n1-0.5)*0.10, 0.12, 0.88);
        } else if(uAccKind>0.5){
          float twill=abs(sin(vAccP.x*20.0+vAccP.y*20.0));
          float rib=abs(sin(vAccP.x*11.0))M
          roughnessFactor=clamp(0.58+twill*0.22+rib*0.10+(n1-0.5)*0.08, 0.52, 0.94);
          float scratch=smoothstep(0.76,0.94,n2)*0.28;
          float pit=smoothstep(0.82,0.96,n1)*0.16;
          roughnessFactor=clamp(roughnessFactor+scratch+pit+(n1-0.5)*0.07, 0.06, 0.90);
      .replace('#include <metalnessmap_fragment>', `#include <metalnessmap_fragment>
        if(uAccKind<0.5){
          float scratch=smoothstep(0.76,0.94,aH(vAccP*36.0+2.7))*0.28;
          metalnessFactor=clM
amp(metalnessFactor-scratch*0.42, 0.08, 0.96);
        } else if(uAccKind>1.5){
          float seam=smoothstep(0.055,0.018,min(abs(fract(vAccP.x*6.5)-0.5),abs(fract(vAccP.y*5.2)-0.5)));
          metalnessFactor=clamp(metalnessFactor-seam*0.35, 0.10, 0.92);
          metalnessFactor=clamp(metalnessFactor*0.15, 0.00, 0.08);
  m.customProgramCacheKey=()=>'titan-acc-v3-'+mode+'-'+(man.key||'x');
function mountAccessory(key, proto, tf, man){
  const inner=proto.M
  inner.traverse(n=>{
    if(!n.isMesh) return;
    n.material=styleAccMaterial(man, n.material, n);
  const holder=new THREE.Group(); holder.add(inner); holder.userData.cat=key;
  const scx=(tf.sx!=null?tf.sx:tf.s!=null?tf.s:1), scy=(tf.sy!=null?tf.sy:tf.s!=null?tf.s:1), scz=(tf.sz!=null?tf.sz:tf.s!=null?tf.s:1);
  holder.position.set(tf.px,tf.py,tf.pz); holder.rotation.set(tf.rx,tf.ry,tf.rz); holder.scale.set(scx,scy,scz);
  holder.visible=kitRevealed();
  ACC.push({cat:key,M
 id:man.id, obj:holder, a:{sx:scx,sy:scy,sz:scz,x:tf.px,y:tf.py,z:tf.pz,rx:tf.rx,ry:tf.ry,rz:tf.rz},
    apply(){ holder.position.set(this.a.x,this.a.y,this.a.z); holder.rotation.set(this.a.rx,this.a.ry,this.a.rz); holder.scale.set(this.a.sx,this.a.sy,this.a.sz); }});
function loadOneAccessory(key){
  const man=ACC_BY_KEY[key]; if(!man) return;
  const saved=(ACC_TF&&(ACC_TF[key]||ACC_TF[man.cat]));
  const tf = saved || defaultAccTransform(man);
  if(ACC_PROTO[key]){ mountAccessory(key, ACC_PROTOM
[key], tf, man); return; }
  gltfL.load(url(man.id),(g)=>{
    const o=g.scene; o.updateMatrixWorld(true); const inner=new THREE.Group();
      if(!n.isMesh) return;
      const geo=n.geometry.clone(); geo.applyMatrix4(n.matrixWorld);
      const src=n.material;
      const mat=Array.isArray(src)?src.map(m=>styleAccMaterial(man,m,n)):styleAccMaterial(man,src,n);
      inner.add(new THREE.Mesh(geo,mat));
    const b=new THREE.Box3().setFromObject(inner), sz=b.getSize(new THREE.Vector3()),M
 ctr=b.getCenter(new THREE.Vector3());
    const norm=Math.max(sz.x,sz.y,sz.z)||1; inner.children.forEach(m=>m.position.sub(ctr)); inner.scale.setScalar(1/norm);
    ACC_PROTO[key]=inner;
    mountAccessory(key, inner, tf, man);
// deterministic per-seed selection; a group is skipped if its slot(s) are already occupied
function chooseAccessories(r, houseId){
  const kit=HOUSE_KIT[houseId]||HOUSE_KIT.GENESIS;
  const chosen=[], used=[];
  const tryAdd=(key)=>{
    const a=ACC_BY_KEY[key]; if(!a) returM
    if(used.some(u=>conflictsWith(u,a))) return false;
    used.push(a); chosen.push(key); return true;
  const tryGroup=(group)=>{
    const prob=(kit.groups&&kit.groups[group])||0;
    if(r()>=prob) return;
    let opts=ACCESSORIES.filter(a=>a.group===group); if(!opts.length) return;
    const pref=(kit.prefer&&kit.prefer[group])||[];
    if(pref.length && r()<0.62){
      const hit=opts.filter(a=>pref.includes(a.key));
      if(hit.length) opts=hit;
    const a=opts[Math.floor(r()*opts.lengthM
    if(used.some(u=>conflictsWith(u,a))) return;
    used.push(a); chosen.push(a.key);
  tryGroup('Hoodie');
  tryGroup('Helmet');
  tryGroup('Horns');
  tryGroup('Armor');
  tryGroup('Shirt');
  tryGroup('Phantom');
  tryGroup('Glasses');
  tryGroup('Eyepatch');
  tryGroup('Wings');
  const torsoOf=k=>['Hoodie','Armor','Shirt'].includes(ACC_BY_KEY[k]?.group);
    ORACLE:['SHIRT_HENLEY','SHIRT_CLASSIC','ARMOR_AEGIS'],
    PHANTOM:['HOODIE_SHROUD','HOODIE_RAVEN','ARMOM
    GENESIS:['SHIRT_CLASSIC','ARMOR_AEGIS','ARMOR_PLATE'],
    FORGE:['ARMOR_PLATE','ARMOR_WARDEN','SHIRT_TEE']
  }[houseId]||['SHIRT_CLASSIC'];
  const accentPool={
    ORACLE:['WING_SERAPH','HELM_CROWN','WING_HALO'],
    PHANTOM:['WING_SPECTRE','WING_WRAITH','PHANTOM'],
    GENESIS:['HELM_CROWN','WING_HALO','ARMOR_WARDEN'],
    FORGE:['HORNS','HELM_VIKING','WING_TALON']
  }[houseId]||['HELM_CROWN'];
  if(!chosen.some(torsoOf)){
    const start=Math.floor(r()*torsoPool.length);
    for(let i=0;i<torsoM
Pool.length;i++) if(tryAdd(torsoPool[(start+i)%torsoPool.length])) break;
  if(chosen.length<2){
    const start=Math.floor(r()*accentPool.length);
    for(let i=0;i<accentPool.length;i++) if(tryAdd(accentPool[(start+i)%accentPool.length])) break;
  if(chosen.length<2){
    const extra=['WING_HALO','HELM_CROWN','HORNS','WING_SERAPH','GLASSES','WING_SPECTRE','WING_TALON'];
    const start=Math.floor(r()*extra.length);
    for(let i=0;i<extra.length;i++) if(tryAdd(extra[(start+i)%extra.length])) break;
function wearAccessories(){ if(!headReady) return; clearAccessories(); (TR.worn||[]).forEach(loadOneAccessory); }
function kitRevealed(){ return revealT<0 || revealT>=0.95; }
function startReveal(){
  if(bust) bust.visible=false;
  if(bustCap) bustCap.visible=false;
  ACC.forEach(a=>{ if(a.obj) a.obj.visible=false; });
  if(typeof sigil!=='undefined') sigil.visible=false;
  if(head) head.scale.setScalar(0.92);
function tickReveal(dt){
  if(revealT<0) return 0;
  if(revealT>=0.32 && bust) bust.visible=true;
  if(revealT>=0.58 && bustCap) bustCap.visible=true;
  if(revealT>=0.95) ACC.forEach(a=>{ if(a.obj) a.obj.visible=true; });
    if(revealT<0.95){
      const u=revealT<0.32?0:Math.min(1,(revealT-0.32)/0.50);
      const e=u*u*(3.0-2.0*u);
      head.scale.setScalar(0.92+0.08*e);
    } else head.scale.setScalar(1);
  if(revealT>=1.28){
    if(typeof sigil!=='undefined') sigil.visible=true;
    if(revealT<2.35) boost=Math.sin(((reveM
alT-1.28)/1.07)*Math.PI)*0.42;
  if(revealT>=2.55) revealT=-1;
/* ============================ 8) MEMPOOL ============================ */
/* live Bitcoin feed: fee rate drives tempo/brightness/rotation; each new block
   fires a bell + revoices the chord + flashes the scene. */
let feeRate=null, feeHour=null, feeEco=null, tipHeight=null, beatEnv=0, flash=0, ritual=0;
const feeNorm=()=>feeRate==null?0.3:Math.min(feeRate/25,1);
function refreshFees(){
  const el=document.getElementById('fees');M
  if(feeRate!=null){
    if(feeEco!=null) parts.push(feeEco);
    if(feeHour!=null && feeHour!==feeEco) parts.push(feeHour);
    if(feeRate!=null && feeRate!==feeHour) parts.push(feeRate);
    if(!parts.length) parts.push(feeRate);
    html=parts.join('
  ')+'<small>sat/vB</small>';
  if(tipHeight!=null) html+=tipHeight+'<small>block</small>';
  el.innerHTML=html||'
function readPlainHeight(t){
  const n=parseInt(String(t||'').replace(/[^0-9]/g,'')M
  return (!isNaN(n)&&n>0)?n:null;
async function fetchTipHeight(){
  const urls=isGateway
    ? ['/r/blockheight','/blockheight']
    : ['https://mempool.space/api/blocks/tip/height','https://ordinals.com/r/blockheight'];
  for(const u of urls){
      const n=readPlainHeight(await fetch(u).then(r=>r.ok?r.text():''));
      if(n) return n;
function applyFeeRates(eco, hour, fast){
  const a=eco!=null?+eco:null, b=hour!=null?+hour:null, c=fast!=null?+fast:null;
f(c==null && b==null && a==null) return false;
  feeRate=c!=null?c:(b!=null?b:a);
  if(actx) tuneAudio();
async function pollMempool(){
        const f=await fetch('https://mempool.space/api/v1/fees/recommended').then(r=>r.ok?r.json():null);
        if(f&&f.fastestFee!=null) applyFeeRates(f.economyFee??f.minimumFee, f.hourFee??f.halfHourFee, f.fastestFee);
    const hn=await fetchTipHeight();
    if(tipHeight!=null && hn>tipHeight) onNewBlock();
      if(feeRate==null || isGateway){
        const base=isGateway?'/r/blockinfo/':'https://ordinals.com/r/blockinfo/';
        const info=await fetch(base+hn).then(r=>r.ok?r.json():null).catch(()=>null);
          const p=info.feerate_percentiles;
          if(Array.isArray(p)&&p.some(x=>+x>0)) applyFeeRates(p[1]??p[0], p[2], p[4]??p[3]??info.max_fee_rate);
          else applyFeeRates(info.min_fee_rate, info.average_fee_raM
te, info.max_fee_rate);
  refreshHUD(); refreshFees();
function connectMempool(){ pollMempool(); setInterval(pollMempool, 20000); }
function onNewBlock(){
  ritual=1.25; flash=0.28;
 block rite '+(tipHeight!=null?tipHeight+1:''));
  if(audioState===1){ bellHit(); if(TR.audioEngine==='flux') gavsBlockAccent(); else revoiceChord(); }
/* ============================ 9) AUDIO ============================ */
/* Mechanical / cyber machine: dry clock, filterM
ed pulse, metallic hits.
   Fee is tempo only. Muted until the viewer enables it. */
let audioOn=false, actx=null, master=null, comp=null, verb=null, dly=null, pumpGain=null, noiseBuf=null,
    droneFilt=null, droneOsc=[], padNodes=[], seqTimer=null, glitchTimer=null, chordTimer=null,
    nextStepTime=0, step16=0, AP=null, synthBuilt=false, audioState=0;
/* Flux/GAVS engine globals */
let gBuilt=false, gMaster=null, gcomp=null, warm=null, gNodes=null, gPreset=null, gChannels=[],
    gBpm=120, gStep=0, gScaleIdx=0, M
gNext=0, gavsActive=false, gavsTimer=null;
let analyser=null, freqData=null;
function getAnalyser(){ if(!actx) return null; if(!analyser){ analyser=actx.createAnalyser(); analyser.fftSize=256; freqData=new Uint8Array(analyser.frequencyBinCount);} return analyser; }
function makeSoftClip(){
  const sh=actx.createWaveShaper();
  const n=2048, c=new Float32Array(n);
  for(let i=0;i<n;i++){ const x=i/(n-1)*2-1; c[i]=Math.tanh(x*1.12)*0.90; }
  sh.curve=c; sh.oversample='2x'; return sh;
  if(safeChain) return safeChain;
  const hp=actx.createBiquadFilter(); hp.type='highpass'; hp.frequency.value=40; hp.Q.value=0.7;
  const lp=actx.createBiquadFilter(); lp.type='lowpass'; lp.frequency.value=6800; lp.Q.value=0.85;
  const body=actx.createDynamicsCompressor();
  body.threshold.value=-24; body.knee.value=14; body.ratio.value=8;
  body.attack.value=0.004; body.release.value=0.22;
  const lim=actx.createDynamicsCompressor();
  lim.threshold.value=-4; lim.knee.value=0; lim.ratio.value=20;
  lim.attack.value=0.001; lim.release.value=0.14;
  const clip=makeSoftClip();
  const out=actx.createGain(); out.gain.value=0.70;
  const bus=actx.createGain(); bus.gain.value=1;
  bus.connect(hp); hp.connect(lp); lp.connect(body); body.connect(lim); lim.connect(clip); clip.connect(out); out.connect(actx.destination);
  const an=getAnalyser(); if(an) bus.connect(an);
  safeChain={bus,out}; return safeChain;
function audioBands(){ if(!analyser||!freqData) return {bass:0,high:0,level:0}; analyser.getByteFrequencyDM
  const n=freqData.length, bEnd=Math.max(1,Math.floor(n*0.15)), hStart=Math.floor(n*0.6);
  let b=0,h=0,s=0; for(let i=0;i<n;i++){ s+=freqData[i]; if(i<bEnd)b+=freqData[i]; if(i>=hStart)h+=freqData[i]; }
  return {bass:(b/bEnd)/255, high:(h/Math.max(1,(n-hStart)))/255, level:(s/n)/255}; }
function ensureCtx(){ if(actx) return true; const AC=window.AudioContext||window.webkitAudioContext; if(!AC) return false; actx=new AC(); return true; }
const mtof=(m)=>440*Math.pow(2,(m-69)/12);
function scaleNote(M
deg,oct){ const sc=SCALES[(TR.audioScaleIdx||0)%SCALES.length], root=TR.audioRoot||48;
  const n=sc[((deg%sc.length)+sc.length)%sc.length]; return mtof(root+n+12*oct); }
function mechWave(){
  return ({ORACLE:'square',PHANTOM:'sawtooth',GENESIS:'square',FORGE:'sawtooth'}[TR.houseId]||'square');
function arpWave(){ return mechWave(); }
function makeIR(sec,decay){ const sr=actx.sampleRate, len=Math.max(1,Math.floor(sr*sec)); const b=actx.createBuffer(2,len,sr);
  for(let c=0;c<2;c++){ const d=b.getChannelData(c); fM
or(let i=0;i<len;i++) d[i]=(Math.random()*2-1)*Math.pow(1-i/len,decay); } return b; }
  [0,null,null,0, 7,null,null,0, 5,null,null,5, 3,null,7,null],
  [0,0,null,0,    0,0,null,7,    5,5,null,5,    3,3,null,7   ],
  [null,0,null,0, null,5,null,5, null,3,null,3, null,7,null,0],
  [0,null,0,7,    0,null,0,7,    5,null,5,3,    5,null,7,null],
  [0,null,null,null, 0,null,7,null, 5,null,null,3, 0,null,5,7],
  [0,7,0,null, 5,null,3,null, 0,7,0,5, 3,null,7,null] ];
  [0,2,4,7,   4,2,4,9M
,    0,2,4,7,    11,9,7,4 ],
  [0,null,4,null, 2,null,7,null, 0,null,4,null, 9,null,7,null],
  [0,4,7,11,  7,4,0,4,    2,5,9,12,   9,5,2,5  ],
  [0,2,4,2,   7,4,2,4,    0,2,4,2,    9,7,4,2  ],
  [7,4,2,0,   4,2,0,2,    9,7,4,2,    11,9,7,4 ],
  [0,null,7,4, null,2,null,7, 0,4,null,9, 7,null,4,2] ];
  [1,1,1,1, 1,1,1,2, 1,1,1,1, 1,1,1,2],
  [1,0,1,1, 1,0,1,2, 1,0,1,1, 1,1,1,2],
  [1,1,0,1, 1,1,0,1, 1,1,0,1, 1,0,1,2],
  [1,0,1,0, 1,1,1,2, 1,0,1,0, 1,1,2,1] ];
function buildAudioPatterns(){
mulberry32((fnv1a("audio"+seedNumber()))>>>0);
  AP={ bass:BASS_PATS[Math.floor(r()*BASS_PATS.length)], arp:ARP_PATS[Math.floor(r()*ARP_PATS.length)],
       hat:HAT_PATS[Math.floor(r()*HAT_PATS.length)], arpOct:0,
function bpmNow(){ return 112+feeNorm()*36; }
function stepDur(){ return 60/bpmNow()/4; }
function arpNote(deg,baseOct){ const len=SCALES[(TR.audioScaleIdx||0)%SCALES.length].length; return scaleNote(deg, baseOct+Math.floor(deg/len)); }
function initAudio(){
  if(synthBuilt) returnM
; if(!ensureCtx()) return; synthBuilt=true;
  const bus=ensureSafeOut().bus;
  comp=actx.createDynamicsCompressor();
  comp.threshold.value=-20; comp.knee.value=10; comp.ratio.value=6; comp.attack.value=0.006; comp.release.value=0.20;
  comp.connect(bus);
  master=actx.createGain(); master.gain.value=0.0; master.connect(comp);
  verb=actx.createConvolver(); verb.buffer=makeIR(0.95,2.8);
  const vg=actx.createGain(); vg.gain.value=0.08; verb.connect(vg).connect(master);
  dly=actx.createDelay(1.0); dly.delayTime.valM
  const fb=actx.createGain(); fb.gain.value=0.24; dly.connect(fb).connect(dly);
  const dg=actx.createGain(); dg.gain.value=0.28; dly.connect(dg).connect(master);
  pumpGain=actx.createGain(); pumpGain.gain.value=1.0; pumpGain.connect(master);
  noiseBuf=actx.createBuffer(1,Math.floor(actx.sampleRate*2),actx.sampleRate);
  { const d=noiseBuf.getChannelData(0); for(let i=0;i<d.length;i++) d[i]=Math.random()*2-1; }
  droneFilt=actx.createBiquadFilter(); droneFilt.type="lowpass"; droneFilt.frequency.value=22M
0; droneFilt.Q.value=2.6;
  const drg=actx.createGain(); drg.gain.value=0.040; droneFilt.connect(drg).connect(pumpGain);
  const f0=scaleNote(0,-1); droneOsc=[];
  [["square",1,0],["sawtooth",0.5,-10],["square",2,7]].forEach(([w,ratio,dt])=>{
    const o=actx.createOscillator(); o.type=w; o.frequency.value=f0*ratio; o.detune.value=dt; o.connect(droneFilt); o.start(); droneOsc.push({o,ratio}); });
  const lfo=actx.createOscillator(); lfo.frequency.value=0.11; const lg=actx.createGain(); lg.gain.value=55;
ct(lg).connect(droneFilt.frequency); lfo.start();
  padNodes=[]; [0,3,7].forEach((deg,i)=>{
    const o=actx.createOscillator(); o.type=mechWave(); o.frequency.value=scaleNote(deg,0); o.detune.value=(i-1)*7;
    const bp=actx.createBiquadFilter(); bp.type="bandpass"; bp.frequency.value=380+i*90; bp.Q.value=3.4;
    const g=actx.createGain(); g.gain.value=0.016;
    const gate=actx.createOscillator(); gate.frequency.value=bpmNow()/60*2;
    const gg=actx.createGain(); gg.gain.value=0.010;
    gate.connect(gg).connecM
t(g.gain); gate.start();
    o.connect(bp).connect(g).connect(pumpGain); o.start(); padNodes.push({o,g,deg}); });
  buildAudioPatterns(); tuneAudio();
function tuneAudio(){ if(!actx) return; const t=actx.currentTime;
  if(droneFilt) droneFilt.frequency.setTargetAtTime(200,t,0.4);
  if(dly) dly.delayTime.setTargetAtTime(Math.min(0.42,stepDur()*2.0),t,0.25); }
function revoiceChord(){ if(!actx||!padNodes.length) return; const t=actx.currentTime;
  const base=[0,3,4,5,1][Math.floor(Math.random()*5)];
ach((p,i)=>p.o.frequency.setTargetAtTime(scaleNote(base+i*2,0),t,0.9)); }
function pluck(freq,at,vol){
  const g=actx.createGain(), f=actx.createBiquadFilter();
  f.type="lowpass"; f.Q.value=1.8;
  f.frequency.setValueAtTime(Math.min(1400,freq*2.2),at);
  f.frequency.exponentialRampToValueAtTime(Math.max(140,freq*0.85),at+0.16);
  g.gain.setValueAtTime(0.0001,at);
  g.gain.exponentialRampToValueAtTime(Math.max(0.0002,vol*0.92),at+0.008);
  g.gain.exponentialRampToValueAtTime(0.0001,at+0.22);
  [[1,0,0.82], [1.01,-1M
4,0.28], [2.0,0,0.10]].forEach(([ratio,dt,mix])=>{
    const o=actx.createOscillator(), og=actx.createGain();
    o.type=mechWave(); o.frequency.value=freq*ratio; o.detune.value=dt; og.gain.value=mix;
    o.connect(og).connect(f); o.start(at); o.stop(at+0.28);
  f.connect(g); g.connect(pumpGain||master);
  if(dly){ const ds=actx.createGain(); ds.gain.value=0.22; g.connect(ds).connect(dly); }
function houseMotif(){
  if(!actx) return; const out=master||gMaster; if(!out) return; const at=actx.currentTime+0.04M
  const id=TR.houseId||'GENESIS';
  const phrases={ORACLE:[0,7,12,7],PHANTOM:[0,3,10,3],GENESIS:[0,7,0,12],FORGE:[0,5,7,0]};
  const ph=phrases[id]||phrases.GENESIS;
  ph.forEach((deg,i)=>clang(scaleNote(deg,0), at+i*0.11, 0.045));
function bass(freq,at){
  const g=actx.createGain(), f=actx.createBiquadFilter();
  f.type="lowpass"; f.frequency.value=Math.min(240,freq*1.8); f.Q.value=2.4;
  const sd=stepDur();
  g.gain.setValueAtTime(0.0001,at); g.gain.exponentialRampToValueAtTime(0.13,at+0.008);
ueAtTime(0.08,at+sd*0.42); g.gain.exponentialRampToValueAtTime(0.0001,at+sd*0.95);
  [["square",1,0],["sawtooth",0.5,-6]].forEach(([w,ratio,dt])=>{
    const o=actx.createOscillator(); o.type=w; o.frequency.setValueAtTime(freq*ratio,at); o.detune.value=dt;
    o.connect(f); o.start(at); o.stop(at+sd+0.08);
  f.connect(g).connect(master);
  const o=actx.createOscillator(), g=actx.createGain(); o.type="sine";
  o.frequency.setValueAtTime(92,at); o.frequency.exponentialRampToValueAtTime(38,aM
  g.gain.setValueAtTime(0.0001,at); g.gain.exponentialRampToValueAtTime(0.22,at+0.006); g.gain.exponentialRampToValueAtTime(0.0001,at+0.22);
  o.connect(g).connect(master); o.start(at); o.stop(at+0.24);
  const s=actx.createBufferSource(); s.buffer=noiseBuf;
  const hf=actx.createBiquadFilter(); hf.type="highpass"; hf.frequency.value=2400;
  const cg=actx.createGain(); cg.gain.setValueAtTime(0.06,at); cg.gain.exponentialRampToValueAtTime(0.0001,at+0.018);
  s.connect(hf).connect(cg).connect(master); s.starM
t(at); s.stop(at+0.03);
function clang(freq,at,vol){
  const g=actx.createGain();
  g.gain.setValueAtTime(0.0001,at); g.gain.exponentialRampToValueAtTime(vol||0.05,at+0.004); g.gain.exponentialRampToValueAtTime(0.0001,at+0.28);
  [[1,0],[2.76,0],[4.13,-8]].forEach(([ratio,dt])=>{
    const o=actx.createOscillator(), og=actx.createGain();
    o.type="triangle"; o.frequency.value=freq*ratio; o.detune.value=dt; og.gain.value=ratio===1?0.7:0.18;
    const f=actx.createBiquadFilter(); f.type="bandpass"; f.frequency.vaM
lue=freq*ratio; f.Q.value=6.5;
    o.connect(f).connect(og).connect(g); o.start(at); o.stop(at+0.30);
  g.connect(master||gMaster); if(dly){ const ds=actx.createGain(); ds.gain.value=0.16; g.connect(ds).connect(dly); }
function clockTick(at){
  const s=actx.createBufferSource(); s.buffer=noiseBuf;
  const f=actx.createBiquadFilter(); f.type="bandpass"; f.frequency.value=6200; f.Q.value=4.2;
  const g=actx.createGain(); g.gain.setValueAtTime(0.0001,at); g.gain.exponentialRampToValueAtTime(0.012,at+0.002); g.M
gain.exponentialRampToValueAtTime(0.0001,at+0.028);
  s.connect(f).connect(g).connect(master); s.start(at); s.stop(at+0.04);
function pump(at){ if(!pumpGain) return; const sd=stepDur();
  pumpGain.gain.cancelScheduledValues(at);
  pumpGain.gain.setValueAtTime(0.88,at); pumpGain.gain.linearRampToValueAtTime(1.0,at+sd*3.2); }
function hat(at,open){ const s=actx.createBufferSource(); s.buffer=noiseBuf;
  const f=actx.createBiquadFilter(); f.type="bandpass"; f.frequency.value=open?5200:7800; f.Q.value=3.8;
actx.createGain(); const dur=open?0.09:0.032;
  g.gain.setValueAtTime(0.0001,at); g.gain.exponentialRampToValueAtTime(open?0.018:0.012,at+0.002); g.gain.exponentialRampToValueAtTime(0.0001,at+dur);
  s.connect(f).connect(g).connect(master); s.start(at); s.stop(at+dur+0.02); }
function snare(at){ const s=actx.createBufferSource(); s.buffer=noiseBuf;
  const f=actx.createBiquadFilter(); f.type="bandpass"; f.frequency.value=2100; f.Q.value=1.8;
  const g=actx.createGain(); g.gain.setValueAtTime(0.0001,at); g.gain.expoM
nentialRampToValueAtTime(0.055,at+0.004); g.gain.exponentialRampToValueAtTime(0.0001,at+0.12);
  s.connect(f).connect(g).connect(master); s.start(at); s.stop(at+0.14);
  clang(220, at, 0.028);
function bellHit(){ if(!actx) return; const at=actx.currentTime;
  clang(scaleNote(0,0), at, 0.06); clang(scaleNote(7,0), at+0.05, 0.04); }
/* ---------- FLUX / GAVS engine (recovered generative soundscape) ---------- */
function gStepT(){ return 60/gBpm/4; }
function gEuclid(steps,hits){ const p=[]; let bucket=0; hits=MatM
h.max(0,Math.min(steps,hits));
  for(let i=0;i<steps;i++){ bucket+=hits; if(bucket>=steps){ bucket-=steps; p.push(1);} else p.push(0);} return p; }
function gImpulse(sr,dur,decay,dens){ const len=Math.max(1,Math.floor(sr*dur)); const b=actx.createBuffer(2,len,sr);
  for(let c=0;c<2;c++){ const d=b.getChannelData(c); for(let i=0;i<len;i++){ d[i]=(Math.random()*2-1)*Math.pow(1-i/len,decay)*(Math.random()<dens?1:0.35); } } return b; }
function buildFlux(seedStr, beatless){
  const r=mulberry32(fnv1a(seedStr));
 bpm = beatless ? (86+Math.floor(r()*22)) : (114+Math.floor(r()*28));
  const waves=['square','sawtooth','square'];
  const chars= beatless ? ['pulse','sub','clang','clock'] : ['sub','pulse','clang','clock','perc'];
  const scalePool=[[0,2,3,5,7,8,10],[0,3,5,7,10],[0,1,5,7,8],[0,2,5,7,10]];
  const scales=[]; const nsc=1+Math.floor(r()*2); for(let i=0;i<nsc;i++) scales.push(scalePool[Math.floor(r()*scalePool.length)]);
  const nch=3+Math.floor(r()*2), channels=[];
  for(let i=0;i<nch;i++){ const char=chars[Math.floM
or(r()*chars.length)], steps=[8,16,16,16,24][Math.floor(r()*5)];
    channels.push({ baseFreq:48*Math.pow(2,Math.floor(r()*2)), wave:waves[Math.floor(r()*waves.length)], char,
      attack: char==='pulse'?0.004+r()*0.02:0.004+r()*0.02, decay:0.06+r()*0.16, sustain: 0.05+r()*0.10, release:0.04+r()*0.14,
      vol:(0.06+r()*0.07)/Math.sqrt(nch), pan:(r()*2-1)*0.40, detune:4+r()*8, layers:1,
      filterF:160+r()*520, filterQ:1.4+r()*2.0, revSend:0.04+r()*0.06, dlySend:0.08+r()*0.16,
      steps, hits: Math.max(1,MathM
.floor(steps*(beatless?(0.10+r()*0.16):(0.16+r()*0.26)))) });
  return { bpm, master:0.34, scales, channels,
    reverb:{dur:0.8+r()*0.6, decay:1.8+r()*0.8, dens:0.35+r()*0.25, ret:0.06+r()*0.05},
    delay:{fb:0.18+r()*0.10, flt:700+r()*900} };
function initGavs(){
  if(gBuilt) return; if(!ensureCtx()) return; gBuilt=true;
  const bus=ensureSafeOut().bus;
  gcomp=actx.createDynamicsCompressor();
  gcomp.threshold.value=-22; gcomp.knee.value=12; gcomp.ratio.value=6; gcomp.attack.value=0.006; gcomp.release.valM
  gcomp.connect(bus);
  warm=actx.createBiquadFilter(); warm.type="lowpass"; warm.frequency.value=6200; warm.Q.value=0.45; warm.connect(gcomp);
  gMaster=actx.createGain(); gMaster.gain.value=0.0; gMaster.connect(warm);
  const conv=actx.createConvolver(); const revRet=actx.createGain(); conv.connect(revRet); revRet.connect(gcomp);
  const revPre=actx.createDelay(0.05); revPre.delayTime.value=0.02;
  const revHPF=actx.createBiquadFilter(); revHPF.type="highpass"; revHPF.frequency.value=220;
actx.createBiquadFilter(); revLPF.type="lowpass"; revLPF.frequency.value=5200;
  revPre.connect(revHPF); revHPF.connect(revLPF); revLPF.connect(conv);
  const dlyL=actx.createDelay(3), dlyR=actx.createDelay(3);
  const dlyFb=actx.createGain(), dlyFlt=actx.createBiquadFilter(); dlyFlt.type="lowpass";
  dlyL.connect(dlyFlt); dlyFlt.connect(dlyFb); dlyFb.connect(dlyR); dlyR.connect(dlyL);
  const pL=actx.createStereoPanner(); pL.pan.value=-0.7; const pR=actx.createStereoPanner(); pR.pan.value=0.7;
  const dRet=actx.crM
eateGain(); dRet.gain.value=0.18; dlyL.connect(pL); dlyR.connect(pR); pL.connect(dRet); pR.connect(dRet); dRet.connect(gcomp); dRet.connect(revPre);
  gNodes={revPre, delayIn:dlyL, dlyR, dlyFb, dlyFlt, revRet, conv};
function gApplyFx(){ const rv=gPreset.reverb, dl=gPreset.delay, st=gStepT();
  gNodes.conv.buffer=gImpulse(actx.sampleRate,rv.dur,rv.decay,rv.dens);
  gNodes.revRet.gain.value=rv.ret; gNodes.dlyFb.gain.value=dl.fb; gNodes.dlyFlt.frequency.value=dl.flt;
  gNodes.delayIn.delayTime.value=st*3; gNodes.dlM
yR.delayTime.value=st*5; }
function gInitChannels(){ gChannels=gPreset.channels.map(c=>({pattern:gEuclid(c.steps,c.hits), step:0})); }
function gNoteFreq(i){ const cfg=gPreset.channels[i]; const sc=gPreset.scales[gScaleIdx%gPreset.scales.length];
  const note=sc[i%sc.length], oct=Math.floor(i/sc.length); return cfg.baseFreq*Math.pow(2,(note+oct*12)/12); }
function gPlay(i,when,voiceScale){
  const cfg=gPreset.channels[i], freq=gNoteFreq(i), vel=0.78+Math.random()*0.16, fee=feeNorm();
  const totalDur=cfg.attack+cfgM
.decay+cfg.release+0.1;
  const vG=actx.createGain(), pan=actx.createStereoPanner(), flt=actx.createBiquadFilter(), flt2=actx.createBiquadFilter();
  pan.pan.value=cfg.pan*(0.6+Math.sin(gStep*0.08+i)*0.4);
  const toneMul=0.85, cutoff=Math.min(1600,cfg.filterF*toneMul);
  flt.type="lowpass"; flt.frequency.setValueAtTime(cutoff,when); flt.frequency.exponentialRampToValueAtTime(Math.max(80,cfg.filterF*0.2+i*30),when+cfg.attack+cfg.decay); flt.Q.value=Math.min(2.0,cfg.filterQ);
  flt2.type="lowpass"; flt2.frequency.seM
tValueAtTime(cutoff*1.2,when); flt2.frequency.exponentialRampToValueAtTime(Math.max(100,cfg.filterF*0.3),when+cfg.attack+cfg.decay+cfg.release); flt2.Q.value=Math.max(0.5,Math.min(1.4,cfg.filterQ*0.4));
  const peak=Math.min(0.16,cfg.vol*vel*(voiceScale||1)), sus=Math.max(0.0001,peak*cfg.sustain);
  vG.gain.setValueAtTime(0.0001,when); vG.gain.linearRampToValueAtTime(peak,when+cfg.attack);
  vG.gain.exponentialRampToValueAtTime(Math.max(0.0001,sus),when+cfg.attack+cfg.decay);
  vG.gain.setValueAtTime(sus,when+cfg.aM
ttack+cfg.decay); vG.gain.exponentialRampToValueAtTime(0.0001,when+cfg.attack+cfg.decay+cfg.release);
  flt.connect(flt2); flt2.connect(vG); vG.connect(pan); pan.connect(gMaster);
  const rs=actx.createGain(); rs.gain.value=cfg.revSend; vG.connect(rs); rs.connect(gNodes.revPre);
  const ds=actx.createGain(); ds.gain.value=cfg.dlySend; vG.connect(ds); ds.connect(gNodes.delayIn);
  for(let l=0;l<cfg.layers;l++){ const o=actx.createOscillator(); o.type=cfg.wave; o.frequency.setValueAtTime(freq,when);
alueAtTime((l-(cfg.layers-1)/2)*cfg.detune,when);
    if(cfg.char==="sub") o.frequency.exponentialRampToValueAtTime(Math.max(20,freq*0.35),when+cfg.attack+cfg.decay);
    o.connect(flt); o.start(when); o.stop(when+totalDur); }
  if(cfg.char==="sub"){ const s=actx.createOscillator(); s.type="sine"; s.frequency.setValueAtTime(freq*0.5,when);
    s.frequency.exponentialRampToValueAtTime(Math.max(15,freq*0.15),when+cfg.decay*1.5);
    const sg=actx.createGain(); sg.gain.setValueAtTime(peak*0.28,when); sg.gain.exponentiM
alRampToValueAtTime(0.0001,when+cfg.decay*1.5);
    s.connect(sg); sg.connect(flt2); s.start(when); s.stop(when+totalDur); }
  if(cfg.char==="clang"||cfg.char==="bell"){
    [2.76,4.13].forEach((ratio,k)=>{
      const p=actx.createOscillator(); p.type="triangle"; p.frequency.setValueAtTime(freq*ratio,when);
      const pg=actx.createGain(); pg.gain.setValueAtTime(peak*(k?0.05:0.12),when); pg.gain.exponentialRampToValueAtTime(0.0001,when+cfg.decay*1.4);
      p.connect(pg); pg.connect(flt); p.start(when); p.stop(whM
  if(cfg.char==="clock"){
    const n=actx.createBufferSource(); const nb=actx.createBuffer(1,Math.floor(actx.sampleRate*0.03),actx.sampleRate);
    const nd=nb.getChannelData(0); for(let j=0;j<nd.length;j++) nd[j]=Math.random()*2-1; n.buffer=nb;
    const nf=actx.createBiquadFilter(); nf.type="bandpass"; nf.frequency.value=6400; nf.Q.value=4.5;
    const ng=actx.createGain(); ng.gain.setValueAtTime(peak*0.22,when); ng.gain.exponentialRampToValueAtTime(0.0001,when+0.03);
 nf.connect(ng); ng.connect(flt2); n.start(when); n.stop(when+0.04);
  if(cfg.char==="pulse"){
    const p=actx.createOscillator(); p.type="square"; p.frequency.setValueAtTime(freq,when);
    const pg=actx.createGain(); pg.gain.setValueAtTime(peak*0.55,when); pg.gain.exponentialRampToValueAtTime(0.0001,when+cfg.decay+cfg.release);
    p.connect(pg); pg.connect(flt); p.start(when); p.stop(when+totalDur);
  if(cfg.char==="perc"){ const n=actx.createBufferSource(); const nb=actx.createBuffer(1,Math.floor(actx.M
sampleRate*0.05),actx.sampleRate);
    const nd=nb.getChannelData(0); for(let j=0;j<nd.length;j++) nd[j]=Math.random()*2-1; n.buffer=nb;
    const ng=actx.createGain(); ng.gain.setValueAtTime(peak*0.12,when); ng.gain.exponentialRampToValueAtTime(0.0001,when+0.05);
    const nf=actx.createBiquadFilter(); nf.type="bandpass"; nf.frequency.value=freq*3; nf.Q.value=2;
    n.connect(nf); nf.connect(ng); ng.connect(flt2); n.start(when); n.stop(when+0.06); }
  if(cfg.char==="click"){ const co=actx.createOscillator(); co.tyM
pe="sine"; co.frequency.setValueAtTime(freq*4,when);
    co.frequency.exponentialRampToValueAtTime(freq*0.5,when+0.02);
    const cg=actx.createGain(); cg.gain.setValueAtTime(peak*0.12,when); cg.gain.exponentialRampToValueAtTime(0.0001,when+0.03);
    co.connect(cg); cg.connect(flt); co.start(when); co.stop(when+0.04); }
  if(cfg.char==="lead"||cfg.char==="pad"){ const lfo=actx.createOscillator(); lfo.type="sine"; lfo.frequency.value=cfg.char==="pad"?3.5:5.2;
    const ld=actx.createGain(); ld.gain.setValueAtTime(0M
,when); ld.gain.linearRampToValueAtTime(cfg.char==="pad"?10:16,when+cfg.attack+cfg.decay*0.5);
    lfo.connect(ld); ld.connect(flt.frequency); lfo.start(when); lfo.stop(when+totalDur); }
function gDoStep(when){
  gChannels.forEach((ch,i)=>{ const cfg=gPreset.channels[i]; if(ch.pattern[ch.step]===1) due.push(i); ch.step=(ch.step+1)%cfg.steps; });
  const scale=1/Math.sqrt(Math.max(1,due.length));
  due.forEach((i,k)=>gPlay(i,when+0.001*k,scale));
  if(due.length){ const d=Math.max(0,(when-actx.currM
entTime)*1000); setTimeout(()=>{ beatEnv=Math.min(0.55,beatEnv+due.length*0.08); },d); }
  if(gStep%64===0) gScaleIdx=(gScaleIdx+1)%gPreset.scales.length;
  if(gStep%24===0){ const ci=Math.floor(Math.random()*gPreset.channels.length); const c=gPreset.channels[ci];
    const nh=Math.max(1,Math.min(c.steps-1,c.hits+Math.floor(Math.random()*3)-1)); gChannels[ci].pattern=gEuclid(c.steps,nh); }
function gavsSched(){ if(!gavsActive||!actx){ gavsTimer=null; return; }
  if(gNext < actx.currentTime) gNext = actM
x.currentTime + 0.02;
  while(gNext<actx.currentTime+0.12){ gDoStep(gNext); gNext+=gStepT(); } gavsTimer=setTimeout(gavsSched,25); }
function startGavs(){
  gPreset=buildFlux("flux"+seedNumber(), TR.audioBeat===false); gBpm=gPreset.bpm;
  initGavs(); if(actx&&actx.state==="suspended") actx.resume();
  gApplyFx(); gInitChannels(); gScaleIdx=0; gStep=0; gNext=actx.currentTime+0.1; gavsActive=true;
  if(gMaster) gMaster.gain.setTargetAtTime(gPreset.master,actx.currentTime,0.5);
function stopGavs(){ gaM
vsActive=false; if(gavsTimer){ clearTimeout(gavsTimer); gavsTimer=null; }
  if(gMaster&&actx) gMaster.gain.setTargetAtTime(0.0,actx.currentTime,0.3); }
function gavsBlockAccent(){ if(!gavsActive||!gPreset) return; gScaleIdx=(gScaleIdx+1)%gPreset.scales.length;
  const ci=Math.floor(Math.random()*gPreset.channels.length), c=gPreset.channels[ci];
  gChannels[ci].pattern=gEuclid(c.steps,Math.min(c.steps-1,c.hits+2)); }
function scheduler(){ if(!actx||audioState!==1||TR.audioEngine==='flux'){ seqTimer=null; return; }
  while(nextStepTime<actx.currentTime+0.12){
    const s=step16%16, at=nextStepTime+((s%2)?(AP.swing||0):0);
    if(TR.audioBeat){
      if(s%4===0){ kick(at); pump(at); }
      if(s===4||s===12) snare(at);
      const hp=AP.hat[s]; if(hp===1) hat(at,false); else if(hp===2) hat(at,true);
    const bd=AP.bass[s]; if(bd!=null) bass(scaleNote(bd,-1),at);
    const ad=AP.arp[s];  if(ad!=null){ pluck(arpNote(ad, 0),at,0.042); }
    if(s===2||s===10) clang(scaleNote(0,0), at, 0.030);
=0){ const d=Math.max(0,(at-actx.currentTime)*1000); setTimeout(()=>{ beatEnv=1.0; },d); }
    step16++; nextStepTime+=stepDur();
  seqTimer=setTimeout(scheduler,25);
function scheduleGlitch(){ if(!actx||audioState!==1){ glitchTimer=null; return; }
  glitchTimer=setTimeout(()=>{ if(audioState===1 && Math.random()<0.42){ const at=actx.currentTime;
      const s=actx.createBufferSource(); s.buffer=noiseBuf;
      const f=actx.createBiquadFilter(); f.type="bandpass"; f.Q.value=8;
      f.frequency.setValueAtTimeM
(400,at); f.frequency.exponentialRampToValueAtTime(2800,at+0.22);
      const g=actx.createGain(); g.gain.setValueAtTime(0.0001,at); g.gain.exponentialRampToValueAtTime(0.035,at+0.02); g.gain.exponentialRampToValueAtTime(0.0001,at+0.28);
      s.connect(f).connect(g); g.connect(master||gMaster); s.start(at); s.stop(at+0.30);
      clang(scaleNote(Math.floor(Math.random()*4),0), at+0.04, 0.03);
    scheduleGlitch(); }, 4200+Math.random()*7000);
function stopSynthSeq(){ if(master&&actx) master.gain.setTargetAM
tTime(0.0,actx.currentTime,0.4);
  if(seqTimer){clearTimeout(seqTimer);seqTimer=null;} if(glitchTimer){clearTimeout(glitchTimer);glitchTimer=null;}
  if(chordTimer){clearInterval(chordTimer);chordTimer=null;} }
function startSynthSeq(){ initAudio(); getAnalyser(); master.gain.setTargetAtTime(0.32,actx.currentTime,0.6);
  buildAudioPatterns(); nextStepTime=actx.currentTime+0.1; step16=0; scheduler(); scheduleGlitch();
  if(chordTimer) clearInterval(chordTimer); chordTimer=setInterval(()=>{ if(Math.random()<0.7) revoM
iceChord(); },9000); }
function stopEngine(){ stopSynthSeq(); stopGavs(); }
function startEngine(){ stopEngine(); getAnalyser();
  if(TR.audioEngine==='flux'){ initGavs(); startGavs(); } else { startSynthSeq(); }
  setTimeout(houseMotif, 90); }
function sndLabel(){
  if(MINT) return audioState===1?'SOUND ON':'SOUND OFF';
  if(audioState!==1) return '
 '+(TR.audioEngine==='flux'?'FLUX':'SYNTH')+(TR.audioBeat?'':'
function setAudio(on){
  if(!ensureCtx()) return; if(actx.stM
ate==="suspended") actx.resume();
  audioState=on?1:0; audioOn=!!on;
  if(on) startEngine(); else stopEngine();
  document.getElementById('snd').textContent=sndLabel(); refreshHUD();
/* ============================ HUD + MENU + CONTROLS ============================ */
function applyFraming(){
  CAM.headY=frameOffY;
  if(camLocked){ snapFront(); return; }
  try{ localStorage.setItem('titans-cam-v5', JSON.stringify({
    dist:+CAM.dist.toFixed(4), lookM
Y:+(CAM.lookY||0).toFixed(4), aimY:+camLookY().toFixed(4),
    tilt:+(CAM.tilt||0).toFixed(2), fov:+CAM.fov.toFixed(2),
    headY:+(CAM.headY||0).toFixed(4), shiftX:+(CAM.shiftX||0).toFixed(4),
    spinSpeed:+(CAM.spinSpeed||0.9).toFixed(2)
    dist:CAM.dist, lookY:CAM.lookY||0, tilt:CAM.tilt||0,
    fov:CAM.fov, headY:CAM.headY||0, shiftX:CAM.shiftX||0, spinSpeed:CAM.spinSpeed||0.9
function syncCamPanel(){
  const box=document.getElementById('camtune'); ifM
  const v=camVals();
  box.querySelectorAll('[data-cam]').forEach(el=>{
    const k=el.dataset.cam; if(v[k]==null) return;
    if(document.activeElement===el && el.type==='number') return;
    el.value=el.classList.contains('num')?n.toFixed(el.step==='0.5'?1:2):n;
function readCamField(el){
  const k=el.dataset.cam; let n=parseFloat(el.value); if(!Number.isFinite(n)) return;
  frameOffY=CAM.headY;
  if(k==='lookY'||k==='headY') syncAimFromLook();
eed'){ controls.autoRotateSpeed=CAM.spinSpeed; saveCam(); syncSpinUI(); return; }
  applyCam(); saveCam();
function syncSpinUI(){
  const on=!!spinWanted;
  const b=document.getElementById('spin');
    b.classList.toggle('on',on);
    b.textContent=MINT?(on?'SPIN ON':'SPIN OFF'):(on?'SPIN  ON':'SPIN  O');
  const t=document.getElementById('camSpin');
  if(t){ t.textContent=on?'stop':'start'; t.classList.toggle('prim',!on); }
function setSpin(on){
  clearTimeout(spinIdleT);
    if(camLocked) setCamLock(false);
    controls.enabled=true;
    controls.autoRotate=true;
    controls.autoRotateSpeed=CAM.spinSpeed||0.9;
    controls.autoRotate=false;
  toast(on?'spin on
 O to stop':'spin off');
function setCamTune(on){
  const box=document.getElementById('camtune');
  const btn=document.getElementById('cam');
  const guide=document.getElementById('camguide');
  if(box) box.classList.toggle('open', camTuneOpen);
  if(btn) btn.classLiM
st.toggle('on', camTuneOpen);
  if(guide) guide.classList.toggle('on', camTuneOpen);
    toggleCard(false);
    if(camLocked) setCamLock(false);
  toast(camTuneOpen?'camera tuner
 drag / wheel / sliders':'camera tuner off');
function copyCamValues(){
    'dist     '+CAM.dist.toFixed(4),
    'lookY    '+(CAM.lookY||0).toFixed(4)+'   (offset from face)',
    'aimY     '+camLookY().toFixed(4)+'   (absolute, this is what we keep)',
CAM.tilt||0).toFixed(2)+'   (0 = level)',
    'fov      '+CAM.fov.toFixed(2),
    'headY    '+(CAM.headY||0).toFixed(4),
    'shiftX   '+(CAM.shiftX||0).toFixed(4),
    'faceY    '+(FIT.ready?FIT.faceY.toFixed(4):'
')+'   (measured, not a camera value)'
  (navigator.clipboard?.writeText(txt)||Promise.reject()).then(
    ()=>toast('camera values copied'),
    ()=>{ prompt('copy camera values', txt); }
document.getElementById('camtune').querySelectorAll('[data-cam]').forEach(el=>{
ntListener('input',()=>readCamField(el));
document.getElementById('cam').addEventListener('click',()=>setCamTune(!camTuneOpen));
document.getElementById('spin').addEventListener('click',()=>setSpin(!spinWanted));
document.getElementById('camSpin').addEventListener('click',()=>setSpin(!spinWanted));
document.getElementById('camFront').addEventListener('click',()=>{ setSpin(false); snapFront(); saveCam(); });
document.getElementById('camFit').addEventListener('click',()=>fitHead());
document.getElementById('camReM
set').addEventListener('click',()=>{
  Object.assign(CAM, CAM_DEFAULT); frameOffY=CAM.headY; frameDistMul=1; measureHead();
  applyCam({front:true}); saveCam(); toast('camera reset');
document.getElementById('camCopy').addEventListener('click', copyCamValues);
controls.addEventListener('change',()=>{
  if(!camTuneOpen||camSyncing) return;
  CAM.dist=camera.position.distanceTo(controls.target);
  CAM.tilt=(Math.PI*0.5-controls.getPolarAngle())*180/Math.PI;
  CAM.aimY=controls.target.y;
  syncLookFromAim();
.shiftX=controls.target.x;
  frameOffY=CAM.headY;
  syncCamPanel(); saveCam();
/* motif auto-cycle */
let autoCycle=false, cycleT=0;
/* accessory tune registry (populated by the accessory loader) */
const ACC=[]; let tuneIdx=-1;
function curTune(){ return (tuneIdx>=0 && tuneIdx<ACC.length) ? ACC[tuneIdx] : null; }
function cycleTune(){ if(!ACC.length){ toast('no accessories loaded'); return; } tuneIdx=tuneIdx+1; if(tuneIdx>=ACC.length) tuneIdx=-1; refreshHUD(); }
function exportTransforms(){
  const out={}; ACCM
.forEach(c=>{ out[c.cat]={id:c.id,sx:+c.a.sx.toFixed(4),sy:+c.a.sy.toFixed(4),sz:+c.a.sz.toFixed(4),x:+c.a.x.toFixed(4),y:+c.a.y.toFixed(4),z:+c.a.z.toFixed(4),rx:+c.a.rx.toFixed(4),ry:+c.a.ry.toFixed(4),rz:+c.a.rz.toFixed(4)}; });
  const blob=new Blob([JSON.stringify(out,null,2)],{type:'application/json'});
  const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download='accessory-transforms.json'; a.click();
  toast('exported '+ACC.length+' transforms');
nction toast(msg){ if(MINT) return; let el=document.getElementById('toast');
  if(!el){ el=document.createElement('div'); el.id='toast'; el.style.cssText='position:fixed;left:50%;bottom:64px;transform:translateX(-50%);z-index:40;background:rgba(20,16,12,.9);border:1px solid #3a2f22;color:#e8d9b0;font:600 12px ui-monospace,monospace;padding:8px 14px;border-radius:8px;pointer-events:none;transition:opacity .3s'; document.body.appendChild(el); }
  el.textContent=msg; el.style.opacity='1'; clearTimeout(toastT); toastT=M
setTimeout(()=>el.style.opacity='0',1400);
function toggleMenu(force){
  const m=document.getElementById('menu');
  const open=force!=null?force:!m.classList.contains('open');
  m.classList.toggle('open',open);
function toggleCard(force){ const c=document.getElementById('card'); if(!c) return; const open=force!=null?force:!c.classList.contains('open'); c.classList.toggle('open',open); if(open) refreshCard(); }
function refreshCard(){
  const set=(id,v)=>{ const e=doM
cument.getElementById(id); if(e) e.textContent=v; };
  const worn=(TR.worn||[]).map(k=>{ const a=ACC_BY_KEY[k]; return a?a.name:k; }).join('
  set('card-name', TR.name||'TITAN');
  set('card-rank', (TR.rank||'
 '+(TR.element||''));
  set('card-house', TR.houseId||'
  set('card-cycle', TR.cycle||'day');
  set('card-fold', FOLD_NAMES[TR.fold|0]||'side');
  set('card-motif', (motif+1)+' / '+INKBLOTS.length);
  set('card-look', (FILTER_NAMES[TR.filter|0]||'punch')+'
  set('card-eyes', eyeLabel());
  set('card-chase', TR.chase||'none');
  set('card-ink', TR.inkMode||'paint');
  set('card-finish', TR.finishName||'skin');
  set('card-bust', TR.bust||'collar');
  set('card-worn', worn);
  set('card-id', SEED);
function exportPortrait(){
  const hid=['hud','menu','snd','help','rand','lock','cam','spin','title','card','camtune','camguide'];
  hid.forEach(id=>{ const e=document.getElementById(id); if(e){ prev.push([e,e.style.visibility]); e.style.visibility='M
  const wasLock=camLocked, wasRot=controls.autoRotate, wasEn=controls.enabled;
  snapFront(); controls.enabled=false; controls.autoRotate=false;
  composer.render();
  const src=renderer.domElement, W=1080, H=1350;
  const out=document.createElement('canvas'); out.width=W; out.height=H;
  const ctx=out.getContext('2d');
  ctx.fillStyle='#08070a'; ctx.fillRect(0,0,W,H);
  const sw=src.width, sh=src.height, side=Math.min(sw, sh*0.88);
  const sx=(sw-side)/2, sy=Math.max(0,(sh-side*1.12)/2);
age(src, sx, sy, side, Math.min(sh-sy, side*1.12), 0, 0, W, H-168);
  ctx.fillStyle='rgba(8,7,10,0.94)'; ctx.fillRect(0,H-168,W,168);
  ctx.strokeStyle='#c9a24b'; ctx.strokeRect(22,H-154,W-44,136);
  ctx.fillStyle='#e8d9b0'; ctx.font='700 34px ui-monospace, Menlo, monospace';
  ctx.fillText((TR.name||'TITAN')+'  /  '+(TR.houseId||'')+'  /  '+(TR.rank||''), 44, H-96);
  ctx.fillStyle='#9a8f7a'; ctx.font='400 15px ui-monospace, Menlo, monospace';
  const id=SEED.length>54?SEED.slice(0,54)+'
  ctx.fillText('BLOCKCHAIN TITANS'+(TR.chase?('
  '+TR.chase):''), 44, H-32);
    const a=document.createElement('a'); a.href=URL.createObjectURL(b);
    a.download=(TR.name||'titan')+'-'+(TR.houseId||'house')+'.png'; a.click();
  prev.forEach(([e,v])=>e.style.visibility=v);
  if(!wasLock){ controls.enabled=wasEn; controls.autoRotate=wasRot; }
  else { controls.enabled=false; }
  toast('portrait saved');
document.getElementById('help').addEventListener('click',M
document.getElementById('menu').addEventListener('click',(e)=>{ if(e.target.id==='menu') toggleMenu(false); });
function refreshHUD(){
  const el=document.getElementById('hud');
  const verbose=document.getElementById('menu')?.classList.contains('open') || camTuneOpen;
  const id=(TR.name||'TITAN')+' / '+(TR.houseId||'
')+' / '+(TR.rank||'
    el.textContent=id+(TR.chase?('  ['+TR.chase+']'):'')+'\n'+(TR.cycle||'day')+'
    if(document.getElementById('card')?.M
classList.contains('open')) refreshCard();
  const AX=['X','Y','Z'];
  const tuneLine = curTune() ? ('tune   '+curTune().cat+'  s'+curTune().a.sx.toFixed(2)+' y'+curTune().a.y.toFixed(2)+' z'+curTune().a.z.toFixed(2)+'\n') : '';
  const bgName=BG_NAMES[bgU.uVariant.value|0]||('W'+(bgU.uVariant.value+1));
  const lookName=FILTER_NAMES[TR.filter|0]||'punch';
 '+(TR.cycle||'day')+(TR.chase?('  ['+TR.chase+']'):'')+'\n'+
    'seed   '+SEED.slice(0,10)+(SEED.length>10?'
    'bg     '+bgName+'  '+( (bgU.uVariant.value|0)+1)+'/'+WORLDS+'   '+ (BG_FX_NAMES[TR.bgFx|0]||'calm')+'   look '+lookName+'
    'motif  '+(motif+1)+' / '+INKBLOTS.length+'   fee '+(feeRate==null?'
':feeRate+' sat/vB')+'   block '+(tipHeight==null?'
    'audio  '+(audioState===1?(TR.audioBeat?'beat':'ambient'):'off')+'   scale '+P.sx.toFixed(2)+'x'+P.sy.toFixed(2)+'  cover '+U.uCover.value.toFixed(1)+'\n'+
    'front  '+(P.frontSign>0?'+':'-')+AX[P.M
depth]+'   up '+AX[P.up]+'   fold '+(FOLD_NAMES[U.uFold.value|0]||'side')+'   eyes '+eyeLabel()+'  meshes '+(eyeMeshList.length||0)+'\n'+
    'ink    '+(TR.inkMode||'paint')+'   finish '+(TR.finishName||'skin')+'   bust '+(TR.bust||'
')+'   pose '+(TR.poseY||0).toFixed(2)+'\n'+
    (camTuneOpen?('cam    d'+CAM.dist.toFixed(2)+'  look '+(CAM.lookY||0).toFixed(2)+'  tilt '+(CAM.tilt||0).toFixed(1)+'
  fov '+CAM.fov.toFixed(0)+'\n'):'')+
    tuneLine+'accessories '+ACC.length+(TR.wingFx?('   wings '+TR.wingFx):'')+M
'   fx '+(FX_NAMES[fxIdx]||'off')+'   [H] keys';
  if(document.getElementById('card')?.classList.contains('open')) refreshCard();
function randomSeed(){
  const b=new Uint8Array(8); crypto.getRandomValues(b);
  SEED=Array.from(b,x=>x.toString(16).padStart(2,'0')).join('');
  CHAIN.id=CHAIN.number=CHAIN.sat=CHAIN.height=CHAIN.timestamp=CHAIN.satpoint=null;
  rnd=mulberry32(seedNumber());
  try{ const u=new URL(location.href); u.searchParams.set('seed',SEED); history.replaceState(null,'',u.pathname+u.search); }catcM
  if(audioState===1) startEngine();
  toast('seed '+SEED);
function inscRow(k,v,cls){
  if(v==null||v==='') return '';
  return '<div'+(cls?(' class="'+cls+'"'):'')+'><b>'+k+'</b><span>'+v+'</span></div>';
function refreshInsc(){
  const el=document.getElementById('insc');
  const id=CHAIN.id||inscriptionId()||SEED||'
    inscRow('Nummer', CHAIN.number!=null?String(CHAIN.number):'
    inscRow('Block', CHAIN.height!=null?StrinM
    inscRow('Sat', CHAIN.sat!=null?String(CHAIN.sat):'
    inscRow('Wrapper-ID', id, 'id');
function setData(on){
  const b=document.getElementById('data');
  const p=document.getElementById('insc');
  if(b){ b.textContent=on?'DATA ON':'DATA OFF'; b.classList.toggle('on',on); }
  if(p) p.classList.toggle('on',on);
  if(on) refreshInsc();
document.getElementById('snd').addEventListener('click',()=>setAudio(audioState!==1));
document.getElementById('data').addEventListM
ener('click',()=>setData(!dataOn));
document.getElementById('rand').addEventListener('click',randomSeed);
document.getElementById('lock').addEventListener('click',()=>setCamLock(!camLocked));
const FRONTS=[[2,1],[2,-1],[0,1],[0,-1]]; let fi=0;
addEventListener('keydown',(e)=>{
  if(e.target&&(e.target.tagName==='INPUT'||e.target.tagName==='TEXTAREA')) return;
  const k=e.key.toLowerCase();
    if(k==='a') setAudio(audioState!==1);
    else if(k==='o') setSpin(!spinWanted);
    else if(k==='i') setData(!M
  if(k==='h'||k==='?'){ toggleMenu(); }
  else if(k==='escape'){ toggleMenu(false); toggleCard(false); if(camTuneOpen) setCamTune(false); }
  else if(k==='k'){ setCamTune(!camTuneOpen); }
  else if(k===']') setMotif(motif+1);
  else if(k==='[') setMotif(motif-1);
  else if(k===' ') { autoCycle=!autoCycle; toast('auto-cycle '+(autoCycle?'on':'off')); }
  else if(k==='a'){ setAudio(audioState!==1); }
  else if(k==='s'){   // cycle: synth/beat
   if(TR.audioEngine==='synth' && TR.audioBeat) TR.audioBeat=false;
    else if(TR.audioEngine==='synth') { TR.audioEngine='flux'; TR.audioBeat=true; }
    else if(TR.audioBeat) TR.audioBeat=false;
    else { TR.audioEngine='synth'; TR.audioBeat=true; }
    if(audioState===1) startEngine();
    document.getElementById('snd').textContent=sndLabel();
    toast((TR.audioEngine==='flux'?'FLUX':'SYNTH')+(TR.audioBeat?'
  else if(k==='n'){ randomSeed(); }
  else if(k==='i'){ toggleCard(); }
else if(k==='p'){ exportPortrait(); }
  else if(k==='c'){ setCamLock(!camLocked); }
  else if(k==='o'){ setSpin(!spinWanted); }
  else if(k==='g'){ applyFxStyle(fxIdx+1); toast('glitch '+FX_NAMES[fxIdx]); }
  else if(k==='d'){ TR.cycle=TR.cycle==='night'?'day':'night'; applyHouseLights(); toast(TR.cycle==='night'?'night
  else if(k==='l'){ TR.filter=((TR.filter||0)+1)%FILTER_NAMES.length; applyLook(); toast('look '+FILTER_NAMES[TR.filter]); }
  else if(k==='1'){ P.sx=Math.max(0.05,P.sx-M
0.03); U.uScale.value.x=P.sx; }
  else if(k==='2'){ P.sx=Math.min(3,P.sx+0.03); U.uScale.value.x=P.sx; }
  else if(k==='3'){ P.sy=Math.max(0.05,P.sy-0.03); U.uScale.value.y=P.sy; }
  else if(k==='4'){ P.sy=Math.min(3,P.sy+0.03); U.uScale.value.y=P.sy; }
  else if(k==='arrowup'){ if(e.shiftKey){ CAM.lookY=Math.min(0.55,(CAM.lookY||0)+0.02); frameOffY=CAM.headY; applyFraming(); } else { P.offY+=0.02; U.uOffset.value.y=P.offY; } }
  else if(k==='arrowdown'){ if(e.shiftKey){ CAM.lookY=Math.max(-0.55,(CAM.lookY||0)-0.02M
); frameOffY=CAM.headY; applyFraming(); } else { P.offY-=0.02; U.uOffset.value.y=P.offY; } }
  else if(k==='arrowleft'){ if(e.shiftKey){ CAM.dist=Math.min(5.2,CAM.dist+0.05); applyFraming(); } else { P.offX-=0.02; U.uOffset.value.x=P.offX; } }
  else if(k==='arrowright'){ if(e.shiftKey){ CAM.dist=Math.max(0.8,CAM.dist-0.05); applyFraming(); } else { P.offX+=0.02; U.uOffset.value.x=P.offX; } }
  else if(k==='5'){ U.uCover.value=Math.max(1,U.uCover.value-0.5); }
  else if(k==='6'){ U.uCover.value=Math.min(20,U.uCoverM
  else if(k==='m'){ applyFold(((U.uFold.value|0)+1)%FOLD_NAMES.length); toast('fold '+FOLD_NAMES[TR.fold]); refreshHUD(); }
  else if(k==='b'){ bgU.uVariant.value=(bgU.uVariant.value+1)%WORLDS; TR.bg=bgU.uVariant.value; applyBgSeparation(); applyHouseLights(); toast(BG_NAMES[TR.bg]||('bg '+TR.bg)); }
  else if(k==='v'){ TR.bgFx=((TR.bgFx|0)+1)%BG_FX_NAMES.length; bgU.uFx.value=TR.bgFx; toast('bg fx '+BG_FX_NAMES[TR.bgFx]); }
  else if(k==='f'){ fi=(fi+1)%FRONTS.length; P.depth=FRONTS[fi][0]; P.frontSM
ign=FRONTS[fi][1]; if(P.depth===P.up)P.up=(P.up+1)%3; U.uDepth.value=P.depth; U.uFrontSign.value=P.frontSign; U.uUp.value=P.up; U.uHoriz.value=horizAxis(); }
  else if(k==='u'){ P.up=(P.up+1)%3; if(P.up===P.depth)P.depth=(P.depth+1)%3; U.uUp.value=P.up; U.uDepth.value=P.depth; U.uHoriz.value=horizAxis(); }
  // accessory tuning (per tuneMode): 7/8 size, 9/0 up/down, ,/. back/forward, R rotate, X export
  else if(k==='t'){ cycleTune(); }
  else if(k==='7'||k==='8'||k==='9'||k==='0'||k===','||k==='.'||k==='r'){
onst c=curTune(); if(!c){ if(k==='r'){} return; }
    if(k==='7'){ c.a.sx=Math.max(0.02,c.a.sx*0.97); c.a.sy=Math.max(0.02,c.a.sy*0.97); c.a.sz=Math.max(0.02,c.a.sz*0.97); }
    else if(k==='8'){ c.a.sx*=1.03; c.a.sy*=1.03; c.a.sz*=1.03; }
    else if(k==='9') c.a.y-=0.02;
    else if(k==='0') c.a.y+=0.02;
    else if(k===',') c.a.z-=0.02;
    else if(k==='.') c.a.z+=0.02;
    else if(k==='r') c.a.ry+=Math.PI/12;
  else if(k==='x'){ exportTransforms(); }
  else if(k==='backspace'){ resetAll(); toM
  e.preventDefault(); refreshHUD();
function resetAll(){
  P.sx=1.15;P.sy=1.15;P.offX=0;P.offY=-0.30; U.uScale.value.set(P.sx,P.sy); U.uOffset.value.set(P.offX,P.offY);
  U.uCover.value=6.0; U.uHalf.value=1.0; frameOffY=0; frameDistMul=1; applyFraming(); applyTraits();
addEventListener('pointerdown',()=>{ if(actx&&actx.state==='suspended') actx.resume(); },{passive:true});
addEventListener('message',ev=>{
  const d=ev.data||{};
  if(d.type!=='head:setInscription') return;
  if(hasWrapperChain()){
    rnd=mulberry32(seedNumber());
    if(headReady) applyTraits();
if(!MINT){ toggleMenu(true); setTimeout(()=>toggleMenu(false), 2600); }
/* ============================ RENDER ============================ */
addEventListener('resize',()=>{ camera.aspect=innerWidth/innerHeight; camera.updateProjectionMatrix();
  renderer.setSize(innerWidth,innerHeight); composer.setSize(innerWidth,innerHeight);
X.uRes.value.set(innerWidth,innerHeight); LOOK.uRes.value.set(innerWidth,innerHeight); });
renderer.setSize(innerWidth,innerHeight); composer.setSize(innerWidth,innerHeight);
let lastNow=performance.now();
  const t=now/1000, dt=Math.min(0.1,(now-lastNow)/1000); lastNow=now;
  bgU.uTime.value=t;
  const ab=audioState===1?audioBands():{bass:0,high:0,level:0};
  beatEnv=Math.max(0,beatEnv-0.03); flash=Math.max(0,flash-0.010);
  if(ritual>0) ritual=Math.M
  if(autoCycle){ cycleT+=dt; if(cycleT>7){ cycleT=0; setMotif(motif+1); } }
  const fee=feeNorm();
  /* Ink moves only faster/slower
 never jumps amplitude with kick/flash. */
  inkClock+=dt*(0.62+fee*0.85);
  U.uTime.value=inkClock;
  U.uAnim.value=1.0;
  const baseHue=TR.bgHue!=null?TR.bgHue:((TR.hue||0)+0.5)%1;
  bgU.uLevel.value=ab.bass*0.55+beatEnv*0.2+flash*0.25; bgU.uFee.value=fee;
  bgU.uHue.value=TR.cycle==='night'?((baseHue+0.24)%1):((baseHue+0.96)%1);
  bgU.uCycle.value=TR.cycle==='nM
  bgU.uWarm.value=TR.cycle==='night'?0.04:0.62;
  bgU.uFx.value=TR.bgFx|0;
  bgU.uFxAmt.value=0.22+fee*0.45+(ab.high||0)*0.25+(ritual>0?0.35:0);
  bgU.uBurst.value=flash*0.8+(ritual>0?0.4:0);
  U.uOffset.value.x=P.offX;
  U.uOffset.value.y=P.offY;
  eyeU.uTime.value=t;
  if(typeof wingU!=='undefined'){
    wingU.uTime.value=t;
    wingU.uAmp.value=(TR.quiet?0.74:0.82)+fee*0.16+(ritual>0?0.12:0);
  const glow=eyeGlowAt(t,ab);
  eyeU.uEyeGlow.value=glow;
  eyeMats.forEach(m=>{ if(m.emissiveIntensitM
y!=null) m.emissiveIntensity=glow; });
  eyeLights.forEach(l=>l.intensity=Math.min(1.15, glow*0.30));
  const houseBloom=Math.min(0.50, (TR.house&&TR.house.bloom!=null)?TR.house.bloom:0.44);
  bloom.strength=Math.min(0.52, (TR.quiet?houseBloom*0.88:houseBloom)+glow*0.02);
  if(typeof backGlow!=='undefined'){
    placeBackGlow();
    if(backGlow.visible){
      const darkSep=(TR.bgSep||0)>=0;
      backGlow.material.opacity=darkSep?0.52+beatEnv*0.05:0.48;
      if(backGlow2.visible) backGlow2.material.opacity=darkSeM
p?0.24+beatEnv*0.03:0.28;
  const revealPulse=tickReveal(dt);
  if(typeof sigil!=='undefined'){
    const pulse=ritual>0?(0.62+0.32*Math.abs(Math.sin(t*16))):(0.42+ab.bass*0.10+beatEnv*0.06+flash*0.08+revealPulse);
    sigilMat.opacity=pulse; sigilRing.material.opacity=pulse*1.05; sigilRing2.material.opacity=pulse*0.7;
  FX.uStyle.value=fxIdx;
  FX.uEnable.value=fxIdx>0?1:0;
  FX.uAmount.value=fxIdx===0?0:0.05+fee*0.03;
  FX.uBurst.value=0.0;
  FX.uAccent.value.coM
py(eyeU.uEyeColor.value);
  head.rotation.x=(TR.poseX||0)+Math.sin(t*0.52)*0.010;
  head.rotation.y=(TR.poseY||0)+Math.sin(t*0.37)*0.012;
  if(controls.autoRotate) controls.autoRotateSpeed=CAM.spinSpeed||0.9;
  controls.update();
  camera.getWorldDirection(_idleDir);
  camera.position.addScaledVector(_idleDir, Math.sin(t*0.33)*0.014);
  if(revealT>=0 && revealT<1.55){
    const u=Math.min(1, revealT/1.55);
    camera.position.addScaledVector(_idleDir, -(1-u*u*(3-2*u))*0.20);
  composer.render(); requestAnimatioM
if(!SEALED) requestAnimationFrame(tick);
/* ============================ 10) COMBO AUDIT ============================ */
const AUDIT_N=(()=>{ const m=String(location.search||'').match(/[?&]audit=(\d+)/); return m?Math.min(200,Math.max(0,+m[1])):0; })();
  document.documentElement.classList.add('audit','mint');
  document.body.classList.add('mint');
  const bar=document.createElement('div'); bar.id='auditBar'; bar.textContent='AUDIT 0/'+AUDIT_N; document.body.appendChild(bar);
  const src=('titans-audit-'+i).padEnd(32,'x');
  for(let k=0;k<8;k++) hex+=fnv1a(src+'/'+k).toString(16).padStart(8,'0');
  return hex.slice(0,64)+'i0';
function auditChain(i){
  const h=fnv1a('field-'+i);
  let number=180013+(h%797531);
  if(number%64===0) number+=1;
  if(number%111===0) number+=1;
  if(number%250===0) number+=1;
  return { i, number, height:848000+((h>>>8)%24000), sat:1136789107062472+i*104729, id:auditPadId(i) };
function auditWait(ms){ return new Promise(r=>sM
function auditFrame(){ return new Promise(r=>requestAnimationFrame(()=>requestAnimationFrame(r))); }
function auditWaitAcc(ms){
  return new Promise(res=>{
    const t0=performance.now();
    const step=()=>{
      const want=(TR.worn||[]).length;
      if(ACC.length>=want || performance.now()-t0>ms) res();
      else requestAnimationFrame(step);
function auditSample(canvas){
  const w=canvas.width, h=canvas.height;
  const tmp=document.createElement('canvas'); tmp.widM
  const ctx=tmp.getContext('2d',{willReadFrequently:true});
  ctx.drawImage(canvas,0,0);
  const read=(x,y,rw,rh)=>{
    const d=ctx.getImageData(x,y,rw,rh).data;
    let L=0,sL=0,sat=0,n=rw*rh;
    for(let i=0;i<d.length;i+=4){
      const r=d[i]/255,g=d[i+1]/255,b=d[i+2]/255;
      const l=0.2126*r+0.7152*g+0.0722*b;
      const mx=Math.max(r,g,b), mn=Math.min(r,g,b);
      L+=l; sL+=l*l; sat+=(mx-mn);
    const mean=L/n, v=Math.max(0,sL/n-mean*mean);
    return { mean:+mean.toFixed(4), M
std:+Math.sqrt(v).toFixed(4), sat:+(sat/n).toFixed(4) };
  const fw=Math.round(w*0.30), fh=Math.round(h*0.38);
  const fx=Math.round(w*0.35), fy=Math.round(h*0.22);
  const cw=Math.round(w*0.12), ch=Math.round(h*0.12);
  const face=read(fx,fy,fw,fh);
  const c1=read(8,8,cw,ch), c2=read(w-cw-8,8,cw,ch), c3=read(8,h-ch-8,cw,ch), c4=read(w-cw-8,h-ch-8,cw,ch);
  const bgMean=(c1.mean+c2.mean+c3.mean+c4.mean)/4;
  const figBg=((Math.max(face.mean,bgMean)+0.05)/(Math.min(face.mean,bgMean)+0.05));
L:face.mean, faceStd:face.std, faceSat:face.sat,
    bgL:+bgMean.toFixed(4), figBg:+figBg.toFixed(3),
    inkVisible:face.std>=0.055, figClear:figBg>=1.55
async function runComboAudit(){
  const bar=document.getElementById('auditBar');
  const cols=16, tw=140, th=176;
  const rows=Math.ceil(n/cols);
  const sheet=document.createElement('canvas');
  sheet.width=cols*tw; sheet.height=rows*th;
  const sctx=sheet.getContext('2d');
  sctx.fillStyle='#08070a'; sctx.fillRect(0,0,sheet.width,sheetM
  if(controls){ controls.autoRotate=false; controls.enabled=false; }
  for(let i=0;i<n;i++){
    const ch=auditChain(i);
    CHAIN.id=ch.id; CHAIN.number=ch.number; CHAIN.height=ch.height; CHAIN.sat=ch.sat; CHAIN.source='preview';
    if(bar) bar.textContent='AUDIT '+(i+1)+'/'+n+'  '+((TR&&TR.houseId)||'');
    finishRevealNow();
    await auditWaitAcc(90);
    finishRevealNow();
    await auditFrame(); await auditFrame();
    const pix=auditSample(canvas);
      i, name:TR.name, house:TR.houseId, rank:TR.rank, cycle:TR.cycle,
      finish:TR.finishName, ink:TR.inkMode, fold:FOLD_NAMES[TR.fold],
      filter:(typeof FILTER_NAMES!=='undefined'?FILTER_NAMES[TR.filter]:TR.filter),
      bg:(typeof BG_NAMES!=='undefined'?BG_NAMES[TR.bg]:TR.bg),
      eye:TR.eyeStyle, worn:(TR.worn||[]).join('+')||'
', chase:TR.chase||'',
    sctx.drawImage(canvas, (i%cols)*tw, Math.floor(i/cols)*thM
    window.__AUDIT_ROWS=out;
    await auditWait(8);
  window.__AUDIT__={ n, rows:out, sheet:sheet.toDataURL('image/jpeg',0.62) };
  if(bar) bar.textContent='AUDIT DONE '+n;
  return window.__AUDIT__;
/* ============================ 11) BOOT ============================ */
/* enrich seeds (await /r/), load accessory transforms, then start the live mempool feed. */
  await enrichSeeds();
  await loadAccTransforms();
  if(headReady) wearAccessories();
  if(!IS_CELL && !AUDIT_N) connectMM,
    const waitHead=()=>new Promise(res=>{
      if(headReady) return res();
      const id=setInterval(()=>{ if(headReady){ clearInterval(id); res(); } }, 40);
    await waitHead();
    await auditWait(400);
    await runComboAudit();
/Foundry USA Pool #dropgold/d|ap
DjB0xc91ef49431e70697f55f19ff3d39eea6bb9268f5ab6766580e240079aeec1755
DjB0x7c2231b6230e1fe90b9f222be7efe244584919902bc952d7ae4c536a4c777dd9
DjB0x6ac16ed13b0d101837bebb8f4338e5091787a34ea636082412d8152456d89ffb
6j4zKw:to:USDT(TRON):TD2Gg87W6nHT1SYVEeQkjKRgubfcc6GNYc
DjB0x1c97a8043ea2c6f7d3f45df1e440e6c97945dab001876c8d2a9f96a6de1c69cc
FjDOUT:0885F1F7BE3966989C1F7557FA429E8124B7A472A7D037CE63025695E91FA0D5
OjLL0x998479103e20dc0baecb075da1ebc69fac151d097f43764946f5e3441e843c39=|lifi
OjLL0xdc66cc93ad8d7c4347dc3e56afb8a68f9015d0b5d4b30dff4fa1215c4be03c33=|lifi
Bj@=:tr:TRkpvrqzsDebV7aQJr6kJGnh2B5VU6ZKFR:681472700/0/0:-_/t1:0/70
=j;sUq:to:USDT(BSC):0x50935b6EaEC0ff00A1CCaba1a7F172646a24dE8c
FjDOUT:EB9ECD4F2CF27BF35CB98046CC07867E39B44D267C21C9DA84A3FE7BB85DC04A
FjDOUT:0000100A4D320A8C2E950FB892C0E4134D912912CC3A809168394332078D798E
FjDOUT:0000053049A9CA58A44C9B2E5DE94DA7A189C1E578C21F250CA184E567303351
/j-VbE:to:TRX:TWVAg36LQi98Vz8NNvqFgEcpDgjRUzXyzy
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"80000000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"20000000000"}J
>j<from:104USDT(BSC):0x6e99cE042387BAC84fC4aCf02B906E66a8455234>
{jLx0x14bf084be511437b80b79b6f13660716bac188de98faf5b1ef616bddf64de3c9|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"ogza","amt":"117"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10000"}h!
<p>ignore child insc</p>
text/plain;charset=utf-8
>{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300.1515"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
DjB0x1705bdadcdf22ce5437fbf63561468683fb6d22100272c41013b184bc804f873
DjB0x58ff9444595d7b4dfcdefa3500145374272b5a6f1f92dd59a106e586525fd08c
DjB0x95d0a25d1a7140a22d49a2127b88a5b3520e06ae191f10fda543e0b562133d1a
DjB0xfa58db4c115858ef1fe36105ceddbb0ecc469880fb795b30a23f613cde94deed
DjB0x6e4f61528a7ebb3f8331ff1de97ea8bd3a3f2b864af0e2a1e8a2675d30f80cd4
DjB0x68f58ea537f90685c4ea13789c09185fcdac5f4b33829d3e489d2489f5d54ee4
DjB0x101bf5c35aa975b121e7dc483dd817fdb85785471aab15f6178d63b08cd7f5f1
DjB0x4a37d42714917607be0d33203040d255344596cdcbc8931e8a6f57b49350d577
DjB0x2e6953d880da65adcc39d8a9bde9a5059cc7248c7add0d94ace336a5e20b422b
DjB0x990fa6f10993edde9b56f55cee78eb53abf417e33f94d293375f2fd8d6731e07
DjB0xd4f8c9f74eedc65d5470eebcd909b2f5afc9eb4771abad02a71230409c0076c3
DjB0xdbc4eb2a14e15fd86d06f4f2900c8f6ef3cf7d6192d16c5127a7d9e48f3f65f7
DjB0x1113f3c19bd038970ce8d6901ebc975527ea71ee2da48edb873c65fa3cce2df1
DjB0x388001cc5841722691fab339acb702bf51ea7f987eb9befd10ea88ba3281542d
DjB0xd8fa53a6b65fd42aa348a34873ee8e42e8d1aff997e299a880b479708f22d35a
7j5=:l:ltc1q73lrj5sz9p74fvmnymm0uqc6cd4lmwc725y404:0/1/0
7j5=:l:ltc1q9w4yp9f9394jvkuk74j0rmjl8nd8p3hxm9csk8:0/1/0
DjB0x5c40f9761366bb0a1e265ab66b3bc7df07151c244238663c74d243a6253c287e
DjB0xadfdfd11408482b512440b6384d175903eee1e80b09d14ed540f5b74433bf299
DjB0xade1c70a5a05bca811d25d2920aa02d6079d429d88f4a3c27572be8b99cdec1a
DjB0xcd0783c9896b0e7883d41c2372df58cb3d4c51a097b1735d870575cfab2d629f
DjB0xf882b75f417267e7587e96eecfa4fae439f0861307e54dab292d492116104cd0
DjB0xd56d2955e114ec8f81680b529ea4434a5ae93446a57e32b6f4f31e43f3786f8d
DjB0x79197e5a85e7137ed8597cc78e58468f5dc38323d6f4da56aab3114ba3ff5c41
DjB0x333ead9bad33b0339e6fd7a23db02174a250318a396987623add987c0ba8a028
DjB0x52315d314ef54f6d3cd4abae4bfdaa9a938cd489d5008b79276c90fd6a3e0fd1
DjB0xb55082847bbc7b89909b3fc69ef7a56079a7cb6d11656d4aa0246faa9322f768
DjB0x2119bad07ffb4df23a57ed7539e47bcfb1fa70042b2f433363b73b2a1921f110
DjB0x6ddce5b933b66931147395c11c191872889fe61b79298a1bed2e5b10e3354a7e
FjDOUT:A8DD61340223D0C535FC617A632AE236EA1A8EB8C835B94869F609C8A26BDCF8
DjB0x3b8a12406f6994ae8a33c52677236c98e9e03b3d4e9a9490ea9355a8e0b69c82
DjB0x7e33391965df9eff3c8be5b3a6847f8dd8bf507adf2d2f3caf7a5377e78507e0
DjB0x4a789eb7ea54916211bc546f247972d95eac451f0a3a62bcf45cac0dba1d3f60
DjB0x9d4068f30c2bd3d71cc4d8766d346c2509a28f87833652de9db09a6119187719
DjB0x5431884792b2cb3b15193056334d9fe71af3d28b33ca8c974006024ce711541e
DjB0xb45dc03264447f246c9b971cd4f79682541fb5806ba485bc13260e44d14e2039
DjB0xf96605988192c134e9cefd0a13b21851963ec30054093bd27709ac98eefc709f
DjB0x85a59c89939603e7946e2229550f8bf33fe3738319f6c1b4b6010fe33422d3b5
6j4wrR:to:USDT(TRON):TW4dCL9Xp2YuoPXYMbjZkWsyXQR8cXt65c
9j7kRX:to:SOL:7ZSDJkDqso72hfFk9W18MiCP4W7mZTJa1uZ7buD4n1A3`
6j4VxX:to:USDT(TRON):TNLAucvPPqJnnjWkSffd1LLspbYfiLhtBf
6j4Xku:to:USDT(TRON):TVz61TFePzh4riEzqTmvtevx97KCrbaihK
=j;iF0:to:USDT(BSC):0x62A81cE640645306B3ee00C7b4e56Baf4A1B6615
6j4PpR:to:USDT(TRON):TKoKGrFuXcqM3T4F2ZcK6PQJWMQDPWe8wC
<j:4Ff:to:BNB(BSC):0x7568161eB0684639F541d29F66155142411d3967
6j4yzA:to:USDT(TRON):TEiE8Cvqz657utZHHCb13HfxJPhPjCT3zU
=j;wYC:to:USDT(BSC):0x4C2be3CBA7094697328de3b4cd490ac9bE03D740
<j:z4M:to:BNB(BSC):0x8DFF50F35f42940FFdEe14c287FFaD820E397C00
2j0to:USDT(TRON):TKKgzaHVHZU9a2JFApuSbZTpq4DfPeWrdc
6j4Dlu:to:USDT(TRON):TPFBCEiELmUjLUj6hm3TY8yzh3sD6xax3C
2j0to:USDT(TRON):TGLvgk83gUv4YeRaAhsqJnt8oiucxyVRdi
DjB0xc599ef7672ab1f1078b6f143004a92597095add5d2217f9d434a0ba4610dcf24
DjB{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"6000000000000"}
FjDOUT:BC47B13B90333D363A9A9CB0382D45011A68F94113CDD491C187BF1730BADD16
FjDOUT:F81E605C971117263DCADCF9E975527DBC0E27E917BB5ACD22CC86AC1D0E579C
FjDOUT:7C3937C79238383D2DE5DA283B565C0066E040A47D78C2A561AEAB9BAD546E45
FjDOUT:5435B3FBAC3CB37AB763CA1CEEBC4BF561C876BC5B820A3FD402DA898E9DE0CB
6j4N4d:to:USDT(TRON):TCAD9CVVrvpja5iAfWx9ouk2B44pApT6cP
?j=dVL:to:USDT(ERC20):0xE65B4Ff7EF54CC9746d6206dca2CdA4C9f983453l
=j;Gqd:to:USDT(BSC):0x8D776be0F0340Ee30c44887C07023e61915e3f52
<j:=:e:0x9345ab7C2511E78b3fCAd9863a0Ff801bdE72348:0/1/1:ej:75
7j57Gw:to:BCH:qrqntaj3t69me0hr6nf2exrkcsgvqhqxgv5jhdvh40T5
6j4pgI:to:USDT(TRON):TWNrgv2eFpfdUyCohoghWuD7FuaZTud44Qz
6j4w07:to:USDT(TRON):TEMAEZzcVwkuBu1h2dqB2Ju2Yqw26F6fpEz
6j4EzG:to:USDT(TRON):TPUndRJ2W1CHALYzW9bvTwGnCEFcwTkhgP <
8j6NZa:to:LTC:ltc1qndrruvnqfh4teya0upqh0rd85mh06ww24sscyl
8j6Fm4:to:MANA:0xca4437E6161227fbC8CDcD62e94Ab89858b7408A
=j;AFS:to:USDT(BSC):0xF4a9dF291639EbcFEd1aD9F2bB78B25C39506014
9j7Omh:to:SOL:DqKhtY18H9Txf4VXRD5Hna3Day9VLFDJW24NXyiSubrGz
?j=3GD:to:USDT(ERC20):0x0d286ad10a90C6Cb470C8F9f3A072eC778d71aA5
=j;jCq:to:USDT(BSC):0xc0E9511774601624a1e2004B57D77b6Ff0899678
=j;DiR:to:USDC(BSC):0x0a5CB6097E74a1F662EC26093C3135DD48675F13
<j:ZDj:to:BNB(BSC):0x3AE067c18849776C6aff1596068ad8320C85E8B6
PjLM0Cd:to:SUI:0x98f2c54f71bb51f677161c6802dfa4eb7f9d64d0eab063a1ee8a27a440ef1f26k
=j;LFE:to:ETH(BASE):0xe80f52eACef43edeD4bF42e8de3dB50dFAb5740e
=j;iz6:to:USDT(BSC):0x4Ae16E2AD1f652a0F957b7049AC575652B44e4C4
CjA4XS:to:GRAM(TON):EQDoeYnJLY1fxwFN95z0m9c_YF7M6MdH0c3f8oqTsPAVkRI1
2j0to:USDT(TRON):TAJ9HJwPh8VGr8BnK3hm7Pgu9NkvXX1tuWD
2j0to:USDT(TRON):TTZtekQwAhJPTTni8VD6DA72MYRqnRbxk6
2j0to:USDT(TRON):TVLXrCkiD5XrvXqnVmoy6KTMC31jTW47Vy#*
2j0to:USDT(TRON):TMgb65DH64ME8gtvbHi35fLev4hjgwK78KO
8j6from:3SOL:5pCyMGgR9yUquDyqpTCuAQauVbRgQtkyz4snJFscVxmC
0j.from:250XRP:rQH4Tmu78u5SadEvsHdYU3kVsckDXEWiNQJ
Aj?from:1000USDT(ERC20):0x3f5DC91cF4438006c0F7413ec32e48787A27128c.
0j.from:900TRX:TEZ5yghij34SR3TH3PmduFnAyMarP4wSivZ
@j>from:227USDT(ERC20):0xE3C55786Dbe599a8525B862Ce81874710e6F61Aa
/Foundry USA Pool #dropgold/iz%^
DjB0x4031915281f8779b5500882470dc51bae66925c7c75786b41f351cf12bd3afda
DjB0xadb7254a44b06ad8d7a90c018d9877f6132acba8d50ca25fe91b221bd6706622
DjB0x2a434305f7e4ec7781d7e6c8c4362027e5e3ea55aa541b586443d1de3c50d71a
DjB0xd5193fefb62f1bdd1a8936e4c72567bbfa6ab926562d7f70222f7805baf45bfb
DjB0xfcb5eac5e5abe7d2d28bd8a72aef02b75ca27d87c0744b55368ca955d8e9797a
DjB0x53a8621fbc7afe68fdbb91ed822dbdf1d934f9f7f01f3e8b4f961c972ac577b6
{jLx0xb8934fb94552299dc38f0d2951525d7805521262a6a8a4dd69bf6d3826daa685|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
{jLx0xda0d0d70436aced2d02401c6a4fd6470beb0f9d266be335ac7ae6b06db883ff2|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
7j5=:l:ltc1qcl2u2d63eqym4vdzmdumte52rvre03tf2fz2u2:0/1/0
DjB0x906d6c3e3a86d005fff623760018e6928534dbef77247c79885af3445873aa90
DjB0xf058391b6a07bbd480da605b9abd72ff8fc298cbe4fa83681293d1dee7cbf231
DjB0x520ef33b6ad673a84d46a13487f46d523da911f8e265d930f7a0a8e8440374e8
DjB0xd5dbb77980b0ea9e9133514b04c571f7c2bf42c651505000062ba787842b7f4c
DjB0xe75c71494d81969b8f41ac2ff9f85d2056ba3b7b1ed092d6adb31c0dd06622e6
DjB0x39a527d5b491f4d139fc3b9297d453cb7825d93a5f1e3890bfe7aab25587c1e9
DjB0x4264ce54f5c679dc2027d2a8e97dacd848fc3c09f6944b326c436860b1fff81f
DjB0x94fdb93032d121175defc20b5a31f235ff596b27bc33510db22ba41fe7168015
DjB0x982f3f21bd8953afa7f4366475338f3c50397d429f93684535c3056d0dfdc639
DjB0xaa9d03acad9d3dff2af69e4ae0a392eb0aaeb367c6daee65e672049ea9036687
DjB0x39b3ba2172885d170780494c1d7bfee40a0e6ef5ae61d2909f5905717f59e4a2
Bj@=:TRON.USDT:TVh9V5RddsgbAeFo743CYhxRSuBjWCSyv9:3363283696800/1/0
OjLL0x6d15c5433298c98e055c0e3c0df0dfd547ed9b81b0828e4aca85a5b81d9871f0=|lifih6
MjK=:g:cosmos1myk6yzqczq75hus9mk3965g4maxx298vpder92:2161962000/0/0:-_/t1:0/70
CjA=:tr:TBARCZLCR3vVggT3mnmmwFqmGb3MbveLiH:1885123000/0/0:-_/t1:0/70PX
DjB0x958dd78dc1f35d3d41aa62d5d2776e782c879dc10ea1058a385fff451e466a9b
DjB0xec60b705a6b6e61a1e2de7f9f95a5eb5e23381f7538f0465749c2b5d8bb71a89
=j;pFu:to:USDT(BSC):0xb859985455286d176951A4E64811427332810fCE
=j;HUU:to:USDT(BSC):0xD52F63ba0e9E043551fd493C282331570aE98227
6j4WrJ:to:USDT(TRON):TD9Mizyn16ZW5ix4wFzZ6uAQTBgxGzYtH2p
6j424u:to:USDT(TRON):TSaG6qkNwPVpYxhKRcJvKiRH6xGUBkULtQx
6j4VJ3:to:USDT(TRON):TN8kSiHyCjoHzQ8D6A3VHVnzNbBhVF4ruye
6j4e6E:to:USDT(TRON):TLpQRNZpDFHBZqgrcF9SqbeuXsXoMAZRsu
=j;M7z:to:USDT(BSC):0x8ee3A0B551Ce1D69E975e5581F03066a17FD46ac
?j=dAb:to:USDT(ERC20):0xa86AC4C74D1AeFba3645a9cd1ADeD2837a8d4786
6j49OL:to:USDT(TRON):TRQmGAhQ9waQ4YoidsCpF4Bgeu2JvkWpiN
6j4H0w:to:USDT(TRON):TARPEtJ9qNBvxkaBdqPkbtDJxdyXtRKrTL~
6j4yVE:to:USDT(TRON):TF4nLEv1i6Fy4nmnyMMyaBkGc9ZVn2rnJc
6j45Os:to:USDT(TRON):TXGR7EoMf9J51CjMBgm5fauc1Qfab7Fm4n
6j4RcS:to:USDT(TRON):TUrX3JMY83R3LFJB5sLtC3P3viy55G1jDjq
9j7VP9:to:SOL:BX6EeH5KdyfYUyVr9uTYBTX4WcSSK7KQoeWBwQKoy68Z~
=j;IbD:to:USDC(POL):0xbab3c68fFdeeA508AE89508143c9B2005a019AF5
?j=3VG:to:USDT(ERC20):0x97FCC2C739F9136820B7A385DFadEa465081CB6E3
?j=iUZ:to:USDT(ERC20):0xCEa7Ee90A05bA19036092cAC12F10f4ad3BB70b86
FjDOUT:3FBC5884CDCE1D550F6C5F69D544C1EDBBC916CDA2F438E27EB0C0A7F22FE0FF
2j0to:USDT(TRON):TSkgL8jrCg5JZScHuAUh3V1FzY7QWPfPtR
2j0to:USDT(TRON):TLb49C26JKrk5p2r6SBC3KJWyfoNANo6g9
>j<from:25USDC(BASE):0x866041a3605d0c92E1D424477c587D5cfd4b36ee
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"400000000000"}J
jBackgroundeGreendBodyfOrangeeShirtlProtocol TeedFacej3D GlassesdHatsdNonedItemePizzajAttributesdNone
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i5" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i4" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i14" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i8" width="1254L
" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i27" width="1254" height="1254"/></svg>hA
jBackgroundcReddBodyfPurpleeShirtlBitcoin MonkdFacedDerpdHatsdNonedItemuSpiked Brass KnucklesjAttributesdPipe
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i11" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i5" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai0" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i13" width="125M
4" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi3" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi17" width="1254" height="1254"/></svg>hA
jBackgrounddBluedBodyeBrowneShirtqDungarees PainterdFacehFrecklesdHatsjHeadphonesdItemsZhengshan xiaozhongjAttributeseCigar
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i1" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i2" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai12" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i14" width="125M}
4" height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i25" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi11" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi12" width="1254" height="1254"/></svg>hA
jBackgroundkLight BrowndBodycCoweShirtiDungareesdFacepShooting GlassesdHatsjBamboo HatdItemiIce CreamjAttributesgBig Bro
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i8" width="1254" height="1254"/><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i17" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai10" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi15" width="12M~
54" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i22" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i24" width="1254" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i19" width="1254" height="1254"/></svg>hA
jBackgroundfVioletdBodyfOrangeeShirtlBeliever TeedFacelMi Vida LocadHatskJeet TurbandItemiGolf ClubjAttributesdLeaf
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i12" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i4" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai18" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i17" width="12M~
54" height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i22" width="1254" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i15" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi16" width="1254" height="1254"/></svg>hA
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"766841574168"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"662657828061486"}J
DjB0x2368b496b4a75a008bc48a2fe230877372ea31fd9760fe9f5cb2fa97723acae2A
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"20"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"300"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"DIOR","amt":"2110011"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"460"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BIUR","amt":"52"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"14296155000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BIUR","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BIUR","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"TAOV","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BIUR","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"99"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"TRUM","amt":"2000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"ZBYY","amt":"200"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"12285161750"}h!
text/plain;charset=utf-8
>{"p":"brc-20","op":"transfer","tick":"
","amt":"500000000"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"4"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"120"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"270"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"$-:)","amt":"5892"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"12000000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"10000000000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Melar","amt":"10000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"39"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10000"}h!
SODA group: twins oldnew
@{"p":"brc-20","op":"transfer","tick":"
","amt":"40000000000"}h!
@{"p":"brc-20","op":"transfer","tick":"
","amt":"30000000000"}h!
@{"p":"brc-20","op":"transfer","tick":"
","amt":"30000000000"}h!
@{"p":"brc-20","op":"transfer","tick":"
","amt":"20000000000"}h!
?{"p":"brc-20","op":"transfer","tick":"
","amt":"5000000000"}h!
?{"p":"brc-20","op":"transfer","tick":"
","amt":"4000000000"}h!
/Foundry USA Pool #dropgold/k5[
DjB0x39e28ab645e2d2ec3b9d7f7c716bfc08140f08bdec095e9fea7be1287f7eee72
DjB0xd223a0359ffa131117d2112ae5904f6904d3e59f19ef0d1d3aeb951a46136b1a
DjB0x45bb0474e0caa5c267adc7b918b2c353eca8b6019e5bdd0a7b7d23f746a64d31
DjB0x7431f42e41fc08ae10eece87c6fcaad36ed4186065b0391b84df92d04deb65ec
DjB0x6470d4416e40ef5814419487fa3a3b1165c35067a45c68a510b5357ea7a19828
DjB0x4deb52df9b138189ce5022579b6bd3e6a343807639fa7e13cee9b878cf45ba0b
DjB0x8acc67454f60e6e810054bc8fab226e92271cc32361b71da5662d2835eabffc0
DjB0x6bcc31769918e2d9548d6ef3d39dc7b845ee4816a1bfac6af23346d0203598ff
DjB0x237c82ada9b4feb4d063ba7f509b289f22ebed80b880ae453c220e56ae389a62
DjB0x61c18398c7f246fa967b5c4fc49014bf47e7ffa817f43ad9c3d8fd97061d48e5
DjB0x52c74c6244d27bea6bd288438976f0e0bfe109bf704d47886a232537b67e0fea
DjB0xe15ccf1cf9491c3fdcda676d58cba36dd5f38b62252916703b74d130eefb7176
DjB0x6ffe95fa5663abb7cc1842ce8990241e850df8ac936addea865ea827e35daaf0
DjB0xcbc06b6e880c125dae84d1e7862a17b9637dab958020f54a5ca12fc693a63861
DjB0x4a319b86d965a6977c568de63c607324bfa49473c148aa488e4afc35fd8db7f7
DjB0x5ae91d2de2ee1797982ec7b20bafa6a980849e3f9d80533cbbe7751aa8041083
OjLL0x1c88b6e44bc403f582f49b0551b9a98b37501fd63c81b551613ed4803952b045=|lifi
6j4RXn:to:USDT(TRON):TCkUi6eT1zoubMQWQN8t41hKbiWocnintU
6j4H8i:to:USDT(TRON):TZC5kEdGSAh31Wq2GseENAa85bubYR1RVV
6j4sB4:to:USDT(TRON):TYusYEho97SmVw7nwQa12HhU3FjgASTFtV
FjDOUT:9099FD660C4C04652079864826C973FA33D3880D0E3497A3C7790F6172B3A6E5
FjDOUT:0000AB921D9CA775257FD9A8CE2119DCCD65D8A6D321AA97226F0171732A14D4
FjDOUT:00000330F4FD5FEF021AC8926FBD998029A2E5825F136F9EF6D780C0FD3A2E87
FjDOUT:43B9EE09E57CFACE989C0A8310B803719FBAA76192933544DFEF1223F835EAB7
FjDOUT:000001B49430FE92C00541F23CC8358953E8A2489B6B804B777160F6565C0E1B
=j;sDb:to:USDT(BSC):0x9480808A6365998A0c0cA82535CA34E2173f712c
6j4U6I:to:USDT(TRON):TXa3KSoTHcv3V6dmRCh7NkbQ35sa5grwC6
6j4Zct:to:USDT(TRON):TTAoa6zCPiBiNebbTKcNQzzcUjQCZLxFvU
8j6sks:to:LTC:ltc1qkmd88mmvvj8202uqufuhdsmsh0mel2v7trpcyt
9j72pK:to:SOL:EKnBjWCCQU4KdeRZ7BiYb54cfCrkG497vwddwPpHHEK7QP
=j;uO2:to:USDT(BSC):0x4EA3C7C7535dBCaa86FcEc938B1c35b5F2618B25
=j;uXk:to:USDT(POL):0x392329c60eFbf97Ee23b56922677d73D70B59691
=j;Pjq:to:USDT(BSC):0xabc30dA4a4273Fc7cCe3F210F2928EbB522D2Ff1S
jBackgroundnBitcoin OrangedBodydGreyeShirtpVibe Bugging TeedFacedMaxidHatsdNonedItemdNonejAttributesiCigarette
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i0" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i6" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i5" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i16" width="1254L
" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi13" width="1254" height="1254"/></svg>hA
jBackgroundfVioletdBodydPinkeShirtjNeat ShirtdFacefRockindHatsmOrange BeaniedItemnChef
s KnifejAttributeseCigar
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i12" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i1" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i3" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i12" width="125M{
4" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i6" width="1254" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i7" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi12" width="1254" height="1254"/></svg>hA
jBackgroundeBrowndBodyeBlackeShirtlDenim JacketdFaceeOh NodHatsnRed Garden CapdItemgHot DogjAttributeseCigar
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i2" width="1254" height="1254"/><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i16" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai7" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i11" width="125M}
4" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i10" width="1254" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i18" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi12" width="1254" height="1254"/></svg>hA
jBackgroundeGreendBodyfPurpleeShirtqDungarees PainterdFaceeOh NodHatshHair BowdItemdBeerjAttributesdPipe
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i5" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i5" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai12" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i11" width="125M}
4" height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i23" width="1254" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i28" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi17" width="1254" height="1254"/></svg>hA
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"100"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"35136451840"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"4.99"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"QQ
","amt":"10000000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"6967212033"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"7993284990"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"QQ
","amt":"10000000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
(j&SODA #8943 - #8944: Drawn Jun 28, 2026
dnamejSODA #8943edrawnlJun 28, 2026dseedx
twins extreme - panel 1/2dsizec2x1hsoftwarex/Pixaki 4.6 - iPad Pro 13" M5 - Apple Pencil Pro
dnamejSODA #8944edrawnlJun 28, 2026dseedx
twins extreme - panel 2/2dsizec2x1hsoftwarex/Pixaki 4.6 - iPad Pro 13" M5 - Apple Pencil Pro
/Foundry USA Pool #dropgold/p
;j9to:USDT(ERC20):0xaFc80BEBDEaa25033BEbe7631C1fE8EA21657952D
DjB0x0fc89fc98f656e28fb616f313ef6e5d268c3e73b726517bd66b4757ee18297e0
DjB0xb23d4a09ef3c85404753f5f8be711c277f463a2168619389a074fa2e368ea74c
DjB0xb5ec38fe532ea0282be2da63a22321d1de92d601b4d2e1f0452a2844980ac1d8
=j;iNW:to:USDT(BSC):0xadF9F8687557E81B87C0907EA7Ac20988B949e69
DjB0xb4196b71c042694c277f47a2f5636a6800e97bbd77fd49c62b3c2aa13252cb7f
DjB0x7778f946afd320a58b5ee97137184aa87187369227387d8c38135e2a7d2cde80
DjB0x661ef047db52a41afbb0cc63c9902eb5df5d8af410c626997b8c44ab6914fae1
DjB0xe623fd76c93817ca2895c2b4128ceade081a8edab2b7e0f031deffae3a84eb6a
DjB0xdba851f2fd140807d74b0f7a4ae1f6e97d1691471aa4f861ea148d410615286d
DjB0x0faf09794c76957b66a6d1c6ce16d1158435714c27919346524921b571900c8f
DjB0xf0f8aa0612fc7731bb854379a94a254742728d888b312d58414b219be1e7c3c2
DjB0x1f8f1ae6198337d75d66a73ff968df4b67bcfa700de1311e99ceebe7c41b9ed1
{jLx0x0f856fad9dc68004761616e5d155272e363fc16df222a416ae70d1f434eea33d|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
{jLx0xfdfff5e36daf1f1fa6d6b9cb4d21b937bd8c264897db29e5e36b20234fe382e8|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
DjB0xebdd4021487d59b670ee4f4f6399916af993f2f537db886ad4b36da1db3e0081
Bj@=:tr:TXcnmsjsFZ6r9ZPLsGrm5zwfvb5pRJpkHQ:743973000/0/0:-_/t1:0/70
DjB0xa4d3520043571961f07a06e9dfb7421bc037aab39e397d283cc477713a0ca118
DjB0x08670ad1a07433b604f527c2d7b10b8a6a7ec193bfb67e44011b33b30333734e
Bj@=:TRON.USDT:TVh9V5RddsgbAeFo743CYhxRSuBjWCSyv9:3356488034855/1/0
DjB0x79bbab3798c0dbc01fa5510187088c74496859432f7bb2ba40ce143650f5b6a5
DjB0xf68e8e5057381547d368400e66826960a5e4ecd5f02d411955b97a2b95d1afe3
DjB0x0bf1a9536cd41a3630924fd655370c0e6e1c8d8bb671eb2dfa3ac11ca66f2601
DjB0xcec1e408ebb7cf78eba41a8a9e0de03b23017313d07cd81c17fb5daf7925b976
DjB0x189fc6d25192d4b0f9701048f7f49e720850b7dea272ff8598f7f1a3962c7831
DjB0x9f49cf0e79770e14e9187b771d83c4629ba0a97af5a4956057f3b6b9409cd89c
DjB0x31ab19d4c815a0956f21fb9c0df084a47cb3b07d5d593a8c889c18c78b79c043
DjB0x422c12f8b6771aea2dd182f2bada05f32a3d5da0f61acbba8de9ccc87ea96943
DjB0xa483b5dd03c6afbb54466516f0319ae275fdf3e2aa0ca93e50dcc7449f0d5807
FjDOUT:61D6718FF2D8B83FC5D061279E7DF6B79340FDE9FC44E1C1371E91B62D7CA54D
FjDOUT:8307B627B53B23DD53F7B47A88C41E8314D0556CB8BF23FB3345E43FE8A362AB
FjDOUT:D0C10FEFDBAF36E384145DCC3E4D45B05E064164D195986DAA1EC9242A8C4462
FjDOUT:C516B38C4371009F581C3962B749B5CC7240D5C21358D95E6CA246EEA074E3B9
FjDOUT:1BB26C34D9DD4ACA47843B844CF62238AF004648CE73747EE9BD17047EF658FF
FjDOUT:000001CD25CEBC0D8B05782819A7F3ECF9F3FABC060DCDB93498B4682484B343
FjDOUT:000001EEEAB6EFDEC918DAC96E5E7200F7E10F900A7B7DD46832B7C2BB64C24E
FjDOUT:9481F491C203E6CC8424AACDC4588EAF2A0FEB2FB7023E413CAD2285FF8D9C48
FjDOUT:4D9370FD0CD91EFB124983117CC616DFE08296F9C9936F03164892ACD05F4F8B
FjDOUT:ED02151A75CD02EF93FB5CA90B01DB68EED0696CCDE2E71BBDB4F3D36668548B
LjJ=:g:cosmos1vt4fwhp00xczusqdm6ly8zqkalmwqx4k88vju2:158416800/0/0:-_/t1:0/70
DjB0xf6b35630d9d1a37d595963f5f0029e99beb21440765b4ab1e5e5774c687992fe
9j7to:USDT(BSC):0x942783dd9D048ee42Fc5438406654996556Ce68E
DjB0xdbeb19cba1b985be0e8689bea42dfcef59b21ab0fca44b36a07fedb51aaf2fcakX
6j4Axk:to:USDT(TRON):TKoKGrFuXcqM3T4F2ZcK6PQJWMQDPWe8wC
=j;jck:to:USDT(BSC):0xBbcAA9dD8329192b9442A3AC7FD67ABE0404Ac60
=j;qQj:to:USDT(BSC):0xF48F4dffE0bcEdc33c281486c134e3FbF88cCf7b
=j;pJ5:to:USDT(BSC):0xd2fd3dA4caCe6A01B42EC97f2FDF6908c10Ed9Bd
6j4E3o:to:USDT(TRON):TQihqgJJ3AhLbtda6jy3x6G8La9PRqpGkp
=j;wid:to:USDT(BSC):0xcf2C694b9496a30e8d929D22005a93Fe2440042B
6j4FG0:to:USDT(TRON):THfUJqQ7Q94octLcrBcTacm34djwJvNYku
DjB0x8b1041c3a58e84a2b6b527781b2c633d6acfe81d470cc46a63a3644dce8558eb
=j;XeY:to:USDT(BSC):0x0969e0C96636320930A140C414a7faB1932008F4
FjDOUT:2A7296B40DE3D41D3E6BDE40D28C932F0D2FD0E9605212E93DBF30DD5A7CE20A
FjDOUT:C80D741DB1B6748B32F899894E4DF79A6BAC174C50F123EE781E954C6D7ACBC2
{jLx0xf8eae0d59bd33b7ce4d04f8cb3bb70abdd35350f8c625a61098c7286b83f9dd9|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
FjDOUT:DFBC1FB6F8731BAF9D8A9F83AB0C2080B2E6E53F4E461E6F6F2A07C46328A5B8
?j=h5Z:to:WBTC(ERC20):0x9cC33Cc008eD5D51c0246aC22d00EeAEb9B49127
6j4iTo:to:USDT(TRON):TJ5qBb7yn85xc3Fx3yKNnX3X2JJqo8Cqha4
6j4lAe:to:USDT(TRON):TQquToJn4RxKQ5qk1kGXD49fx71g3tcjYS
6j4Erq:to:USDT(TRON):TUYUvjLZGYftAFf1jyHSrQPrb2z8i8YkZE
6j4NvQ:to:USDT(TRON):TVDd6To8LJN7WqN3aD9VhRfZrp8RQzsVdX
DjB0x4fdf4c8c62b9b4b8ebf84751b476ebf0d447604213b18a5726dc8c89a4981d97
/j-7U1:to:TRX:TPBftWsV8xSGZVzzUe1hkvLuc94Wa622PoRj
=j;QVx:to:USDT(BSC):0x4229138fF1a989c8F0552b352Fa4C23CB905A3c6
FjDOUT:4859B457BEBDEF803A8B1B56B4C44F96044EDCBC48B10D5A35C14E6955C9B408
FjDOUT:389B0756AD2DB24EBD42E2E9878BCF530247A1633C112883B916EB622985EDD6
FjDOUT:93C56643CC8BB5ADF63A933F81C56A538F63D31C14D75357F2DB92504E2FC4E8
FjDOUT:00000EA8390E45F8BC350C18D20E96AF0E5C11AD576C6C10E440CBD5B4520BE9
FjDOUT:000004BD4D1E29F3F0DD3BD3248CD42B531381FD3040622F2EE6F88D0580AA4B
=j;LYq:to:USDC(BSC):0x4025a14D133a8B7700c47CF852605D753FE7a261
?j=eEv:to:USDT(ERC20):0x93d37D4E9ab5A16cb65494731d6D0289976DaED3
=j;eBI:to:USDT(BSC):0xEcbAf615D0C8a35973f9652a19470c4618956594
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"336560640732"}J
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"6390112827225"}J
6j4U59:to:USDT(TRON):TT7npiWPenxXVeAJ3ZaV7tzxSCHVyojNah.
6j4dhr:to:USDT(TRON):TKGhP1fWoyGyN331xmFSj3C5RHpBMVHvrz
6j4IYr:to:USDT(TRON):TWZCE3T1tUAD4FaCdazqKxxQ38jgDo2Shs
GjE{"p":"crc-20","op":"transfer","tick":"ORNG","amt":"1946042429608136"}J
=j;LjP:to:USDT(BSC):0x7E7A160f5383B0d77bBbb1d6f0203560655D5eC0
=j;42q:to:USDT(BSC):0xB14F2CC37CdB286032cb3541aF0FF1050cB55b95
8j6tY1:to:SOL:gw2Q1Cmeeow6iGtw9DoVgvNcBg2g7auxkNFr9w7kLcY
9j7Zyp:to:SOL:89kFR8fEpyXQws13dugRJVLKyL1H7n2toMkNRfzwziii
9j7nvi:to:SOL:7boqqbrqvGbnQh5oAX4Z94yrRMv7v9FUjj1Mpna3NucW
<j:ETC:to:BNB(BSC):0xF860f8b34410ee7270F3245ff904708DB6B85712
9j7to:USDT(BSC):0x3457b19e853C84164fCd1c5abD5F2e432F96f89C]
=j;XCp:to:USDT(BSC):0x48db70eB8A58b6031362B5267A5a41580d178F67*
?j=BCs:to:USDC(SOL):GAWvsnmQNGeAqWAcGn6U478fgJEXrinmVsYhpz9cC8LKQ
FjDOUT:682DB78630A75DA0DFE026E23A9C5D5018CBC7E60BE3B14BC7A8B0B9F048A133
9j7to:USDT(BSC):0x9a64316892Bf299d6e2b164ef1A5Cb3279e776E1
9j7to:USDT(BSC):0x12597114062e7570C2FBbd727cBDA216C4441DA6M
FjDOUT:3273FD7F8461E871E5B153B77A5610AC41323127B261A186F211E5D0DA865D34
=j;=:l:ltc1qgfajxlg72r3k5q39n0syfjr872araxgr0hn6rd:0/1/1:ej:75(X
?j=dqe:to:USDT(ERC20):0xDd1F2181b35cCA50A9E7A1F97cb764127C13963A
DjB0x090b037a135faac61846ee1a717e17356e7525d61f954372103e58ac7323e711
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"330000000000000"}J
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":500000J
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":500000J
text/plain;charset=utf-8
A{"p":"brc-20","op":"transfer","tick":"
 ","amt":"600000000000"}h!
/Foundry USA Pool #dropgold/z7D
DjB0xa23ce6d87ef1ed72c6933a971648beed42e5c266fecc110f6a5265550e72fc8c
DjB0x9f0b7f87996951989e5b202172e70208ebd8d6328f5da853b741c7601d5a027b
DjB0xf5cbd6d841a0b3c1b50eaacf31a40ccc3e6383194319bef2f5a5f0c8a432dfd1
DjB0xf905c9701f39a743ff84b0591acfcc1f4cfca84e385f2b5476c86bfa8d78e3ab
DjB0x6b336cd3b8935ab02685b03faebf71d8f3c44db07b9523e5db3b0832923b3b3e
DjB0x55edb5734314486ebf509aacae4036dd499533228b8898be8c8690ac1b13bcf6
DjB0x7cf926cdf873bff791cc4790bf7e16f6c9ea401ee9f95b55a6ba5ab4b5597bf2
DjB0xd0b36e4e0c5305a1ab9d787bf3deb8cd69be76506f4c8edc4febe40477c466b3
DjB0x3ea8e9898ab0348d6d6a5b0e306a4fdd67e05317cd8a499393be03eaedc52691
DjB0x7b3b82f95cb2a63aa7a1aa99b909ab31100ff0a97f00191e1dd109d0edaf82f1
DjB0xbd3f7532cc3bd620656516fc4eb1e40235347aa3317d509a260f7b4967d5d368
DjB0xfaced45455534a4773a9648be34c77b045b256dd961eeef13f50cd002e97cc0d
DjB0xa35fe0441b79f292a5ec26d9a968bcd49b50054ca56c33fdd30ae1711713e9a0
DjB0xd113e4be36590c04db52e236859a18dfe8eaeb0d81d242225f3fc80204f95822
DjB0x5bdf59577e2c52492dc57652fb4f6149ac646079366ef339aad9d2fa6c0ddc8f
DjB0xb12b27ad13a0ed528d9fbc1fa232a56107f5aed9577ea29cf9ccf1ee324baf7c
DjB0x25c8d0d984416dc98d70b7b99e8be056d90a4971ffa6dbfb6adc89bc18bbffdd
DjB0x2806a047551f95dbf76df0f890c1aa6abb5266b173d2eba25d533aca2af253d3
DjB0xe454f52ce1440bb0c6ec0849ccfda7c8397d0680377295f3c69a05a5926b6bce
DjB0xf32919ebd9beb5eb0485f0c887147a33dea78228d28a3e992832a4659fd2367f
DjB0x400ea6c7a30f86f4ea0ee9e800812b26699d28c86ab8a4dc97dde0d2e8804f39
DjB0xcbf17a974e41c9b89de32802bea49e0e9cdd969acb9d0e0f06c1ae2ebc3d6f87
?j=from:16.3USDT(BSC):0xD7B31473E23909F8Ed317438D599aE947dCEB67fZ
DjB0xf30347d50c0789428e06ce86ff02ae28d509aee7cc0eca97b4cffc059a204961
DjB0xcc2e8e52bb226fbf8f80cfd728b828a8fb96dd0821d69d071090c943900a1754
DjB0xa1b69f3c7c6622e9c4bbdef633592cbef72f1509c447f213e7a1dd1d57ada7cd
DjB0xcbdb3d1bcf423badf52c549d46fb72a82d52b7a4fdd0dec9760a7ff0dbac5a8c
DjB0x29152722714d9e20d32165202a35b1d836cc3c26b14dabc52f86366253f62f4f
DjB0x2af23bb61a539555e886428c0007a320f3dfd511ea162499f70053acfef8a051
DjB0xd5b2eca95d0f8903298ad7a026ba42f1630ea4bc4c7d70c9ef0ef10991f30e34
DjB0xed96ad0f0cd97bb71e895d10be6cd2236278532e773aeb5932e1880a284aaf1a
DjB0xfda7db812fcefce10d21984a3567017c8eed17240a3b81ff428947fba1173253
DjB0x12a46e161af2a0a639addf97bfb0252271e224b063ef29434cd164efcc4c4901
DjB0x493de7d514be0d38db39f4988da7207bf59daf35221e515901295ba156cc2842
DjB0x3cc6a08e36e78193f081b56099e4a7b8b6fc563a28035c330e0013c0cafb2306
DjB0xb8b443e31060eb5429498fa2ba88b3f001be6038d54b33ca419472163ad394c5
DjB0x23b85d0f4614b3dc99bc7d9cea349c6ea5b5a364f58458af2358a35a6a813f20
DjB0x115b3588a1fe88c77fba4515d774918c80267dae8aa6d44d41c8aca9b1c42324
{jLx0xc776ee307d05d5fab7e5c97e96b7b4484d892468e81d74f8b67d0112568b7ea4|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
{jLx0x71753fca78756b389def1f58a32b6940a2261cceea4aea2c9153d4c08b06c035|depositor=bc1qsuer4na05wnmxucs9ktpnfsa8mjzvz2yxdc4yh|
DjB0x3ce88e3411cfea8ddd4c51b364f5a3adbf799560b4aa5540d0588517a432f0be
Aj?=:TRON.USDT:TVh9V5RddsgbAeFo743CYhxRSuBjWCSyv9:341989659597/1/0
DjB0xc8d6546da606e88b4e0eca8af8c5fc6a5ac167e891f2957c54b3680cf62827d0
7j5=:l:ltc1qfnxayvu6rzgmzxyuwk9h0z3wgrfwzyve4kn3eg:0/1/0
DjB0x4fdf4c8c62b9b4b8ebf84751b476ebf0d447604213b18a5726dc8c89a4981d97
6j49fA:to:USDT(TRON):TWWGxGVab7vXe8hDNDvNQho2Da1bgomWdL7A
6j4Hvl:to:USDT(TRON):TUd8SUo1xE3U9VCxVvSMoBrgiu7d856bEM
6j4oap:to:USDT(TRON):TRZib4dbvxJLoNBhuKFbuyr21h2ZWyy6PU
DjB0x89e26ffa11cc02697d79eb2e8458d16b8193abb018f8410caa7d5b702f7b6d82
DjB0xa11927561de9ae5e5b10c1cd0ca0afd8093af8936540405a7044c29cbd590aa0
DjB0xdebfce203e0a5a8604d9f2303d6e739b6e0a7b7bbe1106cdfb5e55a864decb55
DjB0xb908af83cfc78e9a18f51d6f3deedb7f06e92b6fa5d3f1bc81f1f5148d367ac0
DjB0x21fc3d9dd0990653fb633b37a0b02543104d5c6a356817deaaccb8aef407cc25
DjB0x1bc617434a43a004601a659abbfd8cf4e0d2caaca827c785cb6016bc68cba3b4
DjB0xf1b4960125b38bba2bc83f5d0734739f71841e8f967408049d3adc0dd8f331ac
DjB0x2e322ae8e025d87f0776c44206789998b9a132d292bd6372317495338cb0b879
DjB0x3cf8f86584ad5148522db323d03628bb4b2c0001a2ca0b6d4e01f3ab17755a6f
DjB0x35c1ee70c68dc0253b7d27bd6a5d4b99e00548440c7fe812aa2caca85ef592d9
DjB0xc5493da491e963623ce40ef25d9a13e8bc06e4360dd209ca228e5f4d1ec016a8
DjB0x38cb5cd6ad7713b79d12bafb9858f2a599e9f80aa7a53addd491ffa6349b6f97
=j;from:20USDT(BSC):0x0db9eC253bBE3dc9ee4A6F4D8eCF8CE31C746e04.
DjB0x4582937a6bab154c0ac0e1ff7be574c08fc60a575f1b19be2f1a719c59b68ddd
DjB0xa5274c6af6d4ab637f12d63fcce2a6f63636d45a86b062eae6c6c369f76978b8
DjB0x95e2779744e6eebcf5386429b5fca4d833ce9652ad9c629199696c66fe690d43
DjB0x1df6a69984146fe0cb4c08c8deb62e8e2d1dd23e1cd9b18cf26f2552da36ace9
DjB0xf81bf063223cbf93f141fd7a542a287b54610837ca6b27e0e7cf2b386115520e
DjB0xab85a31f3fd672bae4b474f86fe6ea0c1784e58cb0c0dc8b89036789ef294196
DjB0x38534cadb17f03436e5cd0e44068369b8782e133d30320a644de91f6b105019f
DjB0xc4438bb6df426c462420b958648b3dd46967af5d5f17d6aba83cff0113a152dc
DjB0xf8fdc603858aee44f7431e00fd66646144523f1227f885d31268bffb34b49618
DjB0xde706ba530b44b77b366672051c02a7c611dba58a94b0f1f8e5fdec83072f85b
DjB0x87433dbadcbb639c1df7926067a566be2a495c071516f5f2371e9388a5109cc8
DjB0x9963be0dbf70bfef56f730bb8feab2d8d9ffe9f8fb3f73b4c6092dc2caa3f469
DjB0xa02c040e23a19dd384adc3efec02fa331651a550df11ff80cb271c10fc56f8f1
DjB0x678084debe2eafac77537011a1e9f1d008040543eb2edba88853bcd28fedc935
CjA=:tr:TVHqcvptZU9Vjau6FtywBRSKmtYxVWN5Dx:1306762900/0/0:-_/t1:0/70
DjB0x5baf6535effe27921720c4c7bfb3508035d48ba57661d0fb2c25f1f483097b97
2j0to:USDT(TRON):TRFaxBzLqFLsTtLJJXRy9nUKbma9J3bm4K
OjLL0xd17f02c5bbe1e3b8c15cf5cbc6ca781dadfc820e0a0c05a6c82083521de36534=|lifi'D0
Bj@=:tr:TAyoSKf9Bb4212ZGEtLo2LvDh3KajJ11nX:586411700/0/0:-_/t1:0/70L
=j;TU2:to:USDT(BSC):0xA3d3f27F101ee9D79c249225380cb794260daa5c
FjDOUT:9F733E9EADF005E5D2902DD3EA046B69742DFFC519EAC82C0E2630F320584029
FjDOUT:DFCD567C85B674FA48BC2BCC5BAD848468965429B7F3E5DA4793FC28DD27B151
FjDOUT:76180D35B9CFFA18432B39B2BFB4D2C1CBCD1C9A15927FA3973FB5B871A18A29
FjDOUT:11D1FE3AF035CB247F354628BA7B6FB61DC8363EB69B3800631E1CFBF237B1F6
FjDOUT:B7965634A591EA89080698B146C82D7FE82A50DF65BBD39EE772C133EA8573C4
DjB0x030d62c0aef9279c6a5d1b1030f719683e00a19d30471a78bb55729c03e65469j
5j3=:tr:TBKenQWR2z1F8op2Nkzamq53pzwqR4BvjG:0/1/1:ej:75:S
=j;OR5:to:USDT(BSC):0x2CA7d3cCd8710981eB162C8b41c4F6bE2ddE4afd
?j=Qzk:to:USDT(ERC20):0xE17d821a2DDDfFeC46293a4E4831790Cb2809186
+j)to:TRX:TXGeDF81CCDe7KjYH1bs4WBs677vtQHvw9
6j4IBP:to:USDT(TRON):TCyKZTdBb7GGkFywGCoMPqUL4mbQdAJvFJ
=j;zOz:to:USDT(BSC):0xA4b7Fd43F458bcec831611354Ac7905186019371
6j4j50:to:USDT(TRON):TSovEa5DUrQnukFrcnXLMP6rrVfrMCcriA
6j4Afc:to:USDT(TRON):TX3woV7cK6CdPsf7Vm1aZM75ftAVBMLUBA
6j4h6A:to:USDT(TRON):THYzGtvL5zTnSiLAAgWUjCEa3WCUysZ2Hz
<j:=:s:0xd1049f104127144b1F6B9C546F021E364Fb7d3ED:0/1/1:ej:75
<j:=:c:qr4pyv240zgvak3df2uytu05elsqvmcrrcz9sxk3mx:0/1/1:ej:759
2j0to:USDT(TRON):TQF8iXY9Tz7gm8d8ndpsGCLMu5hdBuhhXa
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"ordi","amt":"1199.58"}h!
9j7Mrr:to:SOL:4jEtFLKncUSBXqW42TuG1LpSUAi9835YLTX8rrL4T6b5
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"ordi","amt":"213.14"}h!
jBackgroundeGreendBodyeWhiteeShirtmTeam M.K. TeedFacekMog GlassesdHatseDuragdItemnChef
s KnifejAttributesdPipe
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i5" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i3" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i15" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i18" width="125M|
4" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i12" width="1254" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i7" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi17" width="1254" height="1254"/></svg>hA
9j7to:USDT(BSC):0x666f036F84775857961e6e771EB9EeE67395135f
2j0to:USDT(TRON):TGqZH1RrpCU3YDDo6RsD5wrB8HpjPbV6n3D&
+j)to:TRX:TXiWWqfxSFxMF6HQt1kSW6CZmxg3JGiDcd
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"153600000000"}J
Bj@{"p":"crc-20","op":"transfer","tick":"BONS","amt":"38400000000"}J
*j({"p":"crc-20","op":"mint","tick":"ORNG"}J
%j#Ffssxj hb zk gnfvhcixi ugjaltox vo.
6j4qaL:to:USDT(TRON):TBLqGAMzRtjA79rP1eLNps4aierwR12jsq)
6j4uSo:to:USDT(TRON):TEuDvZKAWH7qrFd6VJeHsasfoWbv7D2qCtb
6j4K1Y:to:USDT(TRON):TLVJDRzniQCmbjaK5JPEEuhpTwQxzcjC7u
/j-fQY:to:XRP:rDJGX6q2SBornMWQobx24Hnoiu1mF5xHoZ
DjB=:e:0x5c9AFB02036e394490499A842D9e43901216C432:223891626/200:two:0
6j4vb2:to:USDT(TRON):TAN4G2gs2zHwyZaqM4en5UJpLcR5dZHjwH
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":500000J
6j4yVT:to:USDT(TRON):TFoBcmo1D6cqMxsTCSwneA2fn1iVLwLCVFP)
6j4SHM:to:USDT(TRON):TAWVCixTkUDEqqojYs7rrQv2bVXXtQrDYS~
6j4IDZ:to:USDT(TRON):TUtd2s3dEnqsgGgksYMyaszQwTW8unVB6t:B
6j4qpo:to:USDT(TRON):TCJUKNJnFQKVtaycNpRB3HVkkQHcjpS5wVM
/j-aJn:to:TRX:TVHJf9ZwPHLcUPvm1b2LZZqgTTwxZ1bd5Y
DjB0xedd3940c0ef341b146365eef3922c35228156f69c3a8ed32a5365572448db8f33
DjB0xdf3bad8add56e25d54c203cf7e75c9bf5448e26725fa54625fadaccbbfcad9113
=j;w14:to:USDT(BSC):0x6F3b898467540aF660BB93A85e2b0B95Bf7981a5
=j;HJW:to:USDT(BSC):0xe9123Bf8DdDd2edeB5eaf31F863De261425d085A
?j=mif:to:USDT(ERC20):0xB2027c10895F004dA225798312b36D6FfD3bA9692
?j=DLX:to:USDT(ERC20):0x1102Ed162b679CEaC3d524057A528fC6502fc55by
6j4ptM:to:USDT(TRON):TJugnw3xzKpiCGnamj8ZEnyRUBNwEZgzDr
6j49KF:to:USDT(TRON):TL41wpjL3pcvtZRLMauUDZDS1jvoAdFqqd
6j40jt:to:USDT(TRON):TFJzxR6DMKC9rAh6UNFkWbxFBCaSiJQVsG
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1000000000000"}J
6j4Zks:to:USDT(TRON):TVyLhivi6uyivMhjw387e5eYdQQZMvVmta
6j4bJb:to:USDT(TRON):THEJYtUewkYZzCXcXVA7dszsN5XJ7qJR1w
6j4mOs:to:USDT(TRON):TUpCLs2wf6wCRwRguF576nRcnRVhHnB3xzU
6j4NI1:to:USDT(TRON):TUHRNkdcVBECBbeSwqH9xVr7WeCj29qbwB
6j4mGr:to:USDT(TRON):TRrs3Scx2sGggeR9zq22SZx1xqiF4Cpy7q`
6j4YGA:to:USDT(TRON):TLpQRNZpDFHBZqgrcF9SqbeuXsXoMAZRsu
6j4Xbw:to:USDT(TRON):TYxJzVNMbZQCy3GBhn1daGtr4hcV8xJQqin
6j43pV:to:USDT(TRON):TSTW8DQ8uFno2g7yNFuihXgV6WDKHX3sBW'
6j4lXn:to:USDT(TRON):TUZkAxSJ1AxiYbzX87MK2HUFznbnxEFPMc
GjE{"p":"crc-20","op":"transfer","tick":"ORNG","amt":"1946042429608136"}J
7j5nTw:to:ETH:0x123e57F6841AdC00EfFB4DD389C26baAa1354cf8m
7j5k3E:to:QNT:0x469E945538461A047e5b6Bd84A01C28558bE3315
FjD{"p":"crc-20","op":"transfer","tick":"BCAT","amt":"500000000000000"}J
=j;P6T:to:USDT(BSC):0x362064496eDBEA7f90d30335073ED5822D16E14F
=j;8UR:to:USDT(BSC):0x1980070Dc4bDFf0610EED029A18Db2e5B504879d
8j6B77:to:LINK:0x7bf7fFaF23B263270D78114E29a0a92b71ef7d13<
8j6EYJ:to:SOL:YPPEC6ESYk7AtJPo7oUscSPZk8nTjxrnRwN6SfvJkHb``
9j72cM:to:SOL:8Tgw1VXT8tH5P8sJYhnhMkWpn79qgs6rVNPVRMyBYDj6[
9j7Q9V:to:SOL:7WeLUixVXnQ3BocpJTD2DUaYkZvPYrkC7QuiuwZJuxN1
<j:ilY:to:BNB(BSC):0xc1557A2dC4b3853914A11873aAF435613F38Fa072}
2j0to:USDT(TRON):TGQDAc5M3tf47LdGH6Dk5WfbjATYXWD2y4
=j;ETV:to:USDT(BSC):0x9366Edb4533e7f6aF9F2263c768E745e5BeE7b0bP
=j;nma:to:ETH(BASE):0xC455C0b70B661E54361e7C6bf61FC71be37223Bf
=j;G84:to:USDT(BSC):0xbCA33C0E3487222c711DEe3F7084dA100D842Efe
?j=zlJ:to:USDT(ERC20):0x480Ff2089B1e3C6AC4e34B1f1198b99727ff628c
?j=eSD:to:USDT(ERC20):0xD41C0a27eD3ab162Afce07bad0AcCE12ff36D048
6j4bZ0:to:USDT(TRON):TDfnqZQxzPKvw79EMFGtd5811AT6pooS6P
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":500000J
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":500000J
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"18000"}h!
2j0to:USDT(TRON):TMgb65DH64ME8gtvbHi35fLev4hjgwK78K
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"14000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"20000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"5000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"20000"}h!
text/plain;charset=utf-8
8j6to:POL(POL):0x87fD66Fe42198afe6e376CE042b6Ae204db9BB00
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"sats","amt":"2262408052"}h!
?j=uXe:to:USDC(SOL):Ap8GsZcE7NanmdGcSRMpLdyjwtQnbW7Wf9yHPwj2ETZz
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"sats","amt":"1377860.75"}h!
DjB0x889acd3c0357e5ad21265005a20e0786997199a83206ca383b43405a141cf28c
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"135634985232662"}J
text/plain;charset=utf-8
{"protocol":"Satnet","type":"planets-renamer","version":1,"planetId":"53c98986d28ad4aa5143e28a3533d03d3738000caa17828b4e29759c39a0fe86i71","name":"CHIEFS KINGDOM"}h!
jBackgroundjLight GreydBodyeBrowneShirtsPartial Button DowndFacelMi Vida LocadHatscWifdItemdNonejAttributesiCigarette
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i9" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i2" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i10" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i17" width="125M
4" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i21" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi13" width="1254" height="1254"/></svg>hA
DjB0x495aac9ad925945bf3772cb1f8a9d6858c2d291bc1155a2849ff22bd1b3d9a40
DjB0x2dad57bbb961fe7393a3381b8a2d016fde499bf4d597562c37c1e2c1537fb2ae
DjB0xdeb6c68184237f8d8486b2d3a66189a1aa7bbcd505421afb0e74687175c753bc
DjB0x030d62c0aef9279c6a5d1b1030f719683e00a19d30471a78bb55729c03e65469
6j4S2e:to:USDT(TRON):TWPbJAoUzCwpFHDhfkiHLAbcz4vDfMYPUP
=j;BPw:to:USDT(BSC):0x5dD4bb4A72b9ffB77E179422636C8EEFc71a36f2
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"fifa","amt":"150"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"15664666665"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"14000000000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"30000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BTTY","amt":"2000"}h!
jBackgroundnBitcoin OrangedBodycAsheShirtlLil Leaf TeedFacecPepdHatshPump CapdItemnChef's SpatulajAttributeseCigar
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i0" width="1254" height="1254"/><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i15" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i7" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i21" width="125M|
4" height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i19" width="1254" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i8" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi12" width="1254" height="1254"/></svg>hA
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"135"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"GKTF","amt":"1000000"}h!
jBackgroundiDark GreydBodyeOchreeShirtnSeed Sling BagdFacej3D GlassesdHatshDoge HatdItemfLedgerjAttributesiCigarette
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i3" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i0" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i9" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i8" width="1254"M{
 height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i10" width="1254" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i13" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi13" width="1254" height="1254"/></svg>hA
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"82000"}h!
jBackgroundeBrowndBodygRainboweShirtnSeed Sling BagdFacegAm GooddHatsjChique HatdItemlToilet PaperjAttributesdPipe
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i2" width="1254" height="1254"/><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i19" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i9" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i9" width="1254Mz
" height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i4" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi5" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi17" width="1254" height="1254"/></svg>hA
jBackgroundcReddBodyeOchreeShirtfBallindFacedMaxidHatskPumping CapdItemx
A mysterious shadowy figurejAttributesgBig Bro
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i11" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i0" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i9" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi15" width="125M}
4" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i16" width="1254" height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i27" width="1254" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i23" width="1254" height="1254"/></svg>hA
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"2"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"TRUM","amt":"1000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"
","amt":"15000000"}h!
text/plain;charset=utf-8
hprotocolfYETI/1hlanguagebpldrule
dyetidzyjegyetidlodjestjimperative
hzyj yetikrob yetidlahrelationx#yeti zyje, dlatego powstaja yetidlagexample
dnamegDRUKARAdtypegyetidlokinscriptionxBf551dd4a89279e29a87305b1b2cfb08cb5ab39dd9be0f1cdb04e2081c97b1d5ai0
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"2"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"50"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"4678015370"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"7525485808"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"7525485808"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"7525485808"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"beat","amt":"56"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BIUR","amt":"82"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"beat","amt":"55"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"50"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BIUR","amt":"24"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"beat","amt":"57"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"50"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"1621209492"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"7100000000"}h!
text/plain;charset=utf-8
C{"p":"brc-20","op":"transfer","tick":"X@AI","amt":"10000000000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"2254587808"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"4555248080"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"4555248080"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"2254587808"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"2254587808"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"4555248080"}h!
B04913d6969fb92caf378140c14e90df77470916fe107c1ab44fb79d104ef53c2:0a
GjElEdgee76a95679775b64afa31b73ed69a0f1960b23a7ebf5264fd63d5bb0994f09065
DjB0x7b4640af2d0c25556175f0147b91f3787c8178e23bfd5f20f40982771391efd33
DjB0x588f43639eccc1d0b8366c616612ea7816264d8d4e29fb8a8576e2dd36868ccfI
DjB0x3782e2778b5e582f483c51adf97405ccc38529c0794ab293dc3a8a8e7964ae153
{"p":"brc20-prog","op":"c","c":"0xdbb5b6a1d422fca2813cf486e5f986adb09d8337","b":"AVYI+Ff/DGKHm7PdlJxM8G9xv3woHc8k0WPn/x9A/x4D/w3btbah1CL8ooE89Ibl+YatsJ2DN/8fAf8fwP8eBl3/HgHg/x4CgP8eAf8RESNUvGSNJ/PQj2pl8hNC5OXIjnFjhoLRia5bSDrr+kzbIykOsPpQp4gn3sr7HZ+M/xAFhTQab581T1/TtGc7Gnl3PcbuI0XGOJ7wDEro46L/AQ0vpF0RON34Qmqz/wHNBG3Fev8QFEpsfwp7pi7Q3WuVnXgUDU9H/H7vbMWJiumJzVoDB4+J3D/17FGWQ8oFpeQqHpWy/xASZxaf9Bp84IIiJgqV2ayPjNu4wx37f9RuGB7OO+QkdppmdqSKh6B6s+MLU9Gqrhf/H4D/EBVKnBd/ZOSmbIypAy2t2UdOmaCE0Kmkt3YbIEHkW5T37ebs41BjULSYhrrHebAL
fif8QC1mYCp/7GccyWHKn79pz6q0STv4RDFsa2iEQODBAgWifjWxAaxLaploNLbEws5td/x9BpETIhRFQL0EqdaygnyyO2zpWIbza40wbOeF/QOmSeTtgtWTD8eL7ULKslnpCmNP1CoOm+NP50w+gHKg/fT03kBv/Hw"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10000"}h!
DjB0x5877e33e3e8797c732633ba8378ff30aea2c512e059cb26329df865d4bd41959
DjB0xe7fdc4158895a498336040d74a7f89794b2477f4984fb65a69d2bf3761e4d28b
DjB0x0d769ad01791e53bfff8d63c1ddccfafe40afa44ec66b396b9c0a26dd06218fe
DjB0xa08c6ad5b04261ee33b1469d0f087636797fab554c99a4a96c379a224c0d3215
DjB0x2088d7f8269a0a46017c9ac2f7d0368368984c43633252f66c35265f741d2610
DjB0xdfb17b72fdbecc1c7db10b07c38bfce80cd2fcb66bd04e00f6531777d17dd0f7
DjB0x10e72145d106fd8e7e868a248716b5bc8d7f26feb6a1f812965ebe9c60b73d26
DjB0xd63ca4fdc4705e1e8d5d71977d875a37fe326f4b2aeaa33d5d138fbf7f735781
DjB0xa00bf09a855c0ad389b7ae27d716db08c3f79b707fec0dddca3ca7aaf66737b4
DjB0xeac1055d32cc9da8922008e3fe4bb4c655f96a9c644c13febdc4a79e4643b340
DjB0x29cc8ec533d957738b28a8af44e8a1b3f0ebf390281140f2b7f59e8ce5d728af
DjB0xc8030068d52139b858054d02e3e043a956420b81186cd628628f4cb732ebcfce
DjB0x46dc826df025903a4c2a842ff3898575a80e475a093fa683cfb1898f0208d049
{jLx0xc35afaf46a3cf2f85f80d5cbdaa6223cca1660f5af6c26060a716eec64fb5a0e|depositor=bc1qlgz84e89nkdkefx50gggjfvk39xmzuen8c4rw3|
DjB0xeb333b1952f02c0846418b0987afaeca89135ae8beac1944990a7b6a201e075a
DjB0xe3ae96356152bffd3662141bfce39b77bcecbdac8ef96251b43ab2daaf102f9c
Aj?=:x:rPWgFUXmabcgntemgay1fgg35e3azsLHA1:226009400/0/0:-_/t1:0/70
{jLx0xa7ba05c5c6a41bb52595915c1f8233e584d20c85fb4bcb4665982dd0ecc187ac|depositor=bc1qw5hv6272mq57p7s5rktnlle42ulq3yr89shn2g|
DjB0xb35af9175cda2ce1169a46b0136b55be769ab47e7affdd42b3ebf61830e4d90c
DjB0x7b4640af2d0c25556175f0147b91f3787c8178e23bfd5f20f40982771391efd3
OjLL0xc75d2c4fa3f8b58798f1d7224580975c2e0ac93d3c22c6c76c474035dede9e43=|lifi
OjLL0x7990e4fb136a4bbff37c43f8acbbdb307e29f50c233e0cee8bc9cee14fe29cf9=|lifi
DjB0x0798f0816e45531ab2aabbebd8130bf99f67fef0975bcbfb0909fc03f3b658af
DjB0x3f4f1b1d4ac5e0597a54cdde12cda045d7a9592f19759864d5dc7c49009b35e6
DjB0xe696d2919c213bf58da1ff579665bad64dea046b569892a60f7090123960e28f
DjB0x870a199af1349d3a3967b11b9de664b1489ccedb22673048828b19731b635eca
DjB0x845e36c920176a2c8eab52f75a52a43f6fe49054f480e6b12ab9d65a26666f10
DjB0xc6aaf982f9e7364a4f4bcc8e29e53c7aa595944ea3e4e0e8bf118b07b23ad480
DjB0x9d3994ac1cc5578c3c42a64708de8ffb2fd6520da4057c6bbfa5980f66fde209
OjLL0xf01986e42da906a7d8071596c64466752758ccf1a95b8a21223a7c1f9547be74=|lifiP#
6j4A6u:to:USDT(TRON):TKhUbkN1WhTH2Hbxwd126mcXLuRh3FdMoN
DjB0xb7cc5eb4beb2bc497c101c6ae884c12f684e9ab6329e64d9dd326e975d445ce3
DjB0x35bb4c942a45bc1e688142f47e670b8f04eb17ec4089ec997db78459a8f0d2b9
DjB0x4d75bd431d0bcec221dffc49004bfc5f26581cb0291a10e0b8e786d87a61a2fd
DjB0x5642dfda804f56af0c0aa9e9960812b9051d2998eb8852d1a639d4d4842686f5
2j0to:USDT(TRON):TRVyAVDdoYiA84e31b6WaxPMebfVdQpstE
?j=oWt:to:USDT(ERC20):0x145A3ad3487cc195b1f6235E09979505A2276376
6j4R6M:to:USDT(TRON):TPLmFKCikxQdWemn2DKpZRcfGJwxtyiVC1
6j4TZq:to:USDT(TRON):TKoKGrFuXcqM3T4F2ZcK6PQJWMQDPWe8wC
2j0to:USDT(TRON):TU4jsfVdTxQ5HJZDMWNPnKHjbx27VK5FDs
6j4pPB:to:USDT(TRON):TQxKgUfoZxsFM6nPtGsUsm96TxeBgedsDW
6j44gm:to:USDT(TRON):TSTNpbRmCiTXs5XaZUNkwA4GevrmvwKsoE
6j44sb:to:USDT(TRON):TQpYCYEZATm5KZ5jC7NmhwW1pHGYQLSr84
6j49gA:to:USDT(TRON):TGKTENTd5MP9KDAw8q9sfUJ1dAmzT8bamw
6j4fEC:to:USDT(TRON):TLEYCWu3Yfa6MDqVu1L6eMD1ESFByRqdsBS
6j4yTU:to:USDT(TRON):TYfeikuQFaEEw9zcb3a6EE8vDRA6zcf9Hp;
/j-9db:to:TRX:TNfTFxxMuiRtE8abK5aanN5jv76phjYjST
/j-nvb:to:XRP:rw7Bti9g8nigTtcrXfC5Vnu3puJkteLqoa
=j;9it:to:USDC(ARB):0xb158b77b6de6579C163DC435Cc995c297c871ea2X
{"p":"brc20-prog","op":"c","c":"0xdbb5b6a1d422fca2813cf486e5f986adb09d8337","b":"AVYI+Ff/DGKHm7PdlJxM8G9xv3woHc8k0WPn/x9A/x4D/w3btbah1CL8ooE89Ibl+YatsJ2DN/8fAf8fwP8eBzr/HgHg/x4CgP8eAf8RApSJiOliC2SaWcFaawC1c84XzKWtQs5KjFnSIeGTfjQnRqpFN9oQcbIWLeC5GV6C/xAJSkE4jPt6wODovp84HfA9kHEUQcgPTpgdNTJ+j7+uEj87vd+jg7QwJ+OkUXBnUTP/EAJzoSoXHT09KclccCaMTcOz5dVQ33UwrQpg04jA5VquW3BO1a5hPqLPJO6ZqXoxRf8QERr7FeINuLYsdCIPAxfn0rfBohcYTjov1aKLQFrnMDgh5TUjSylNBJdidmvD40bj/x+A/xAY+eQB9voW3El8g3yw/wGDBE7PUZlIy1QtvHwGY78LKHCEdnX5qn5UKlDnGRjOG7tL
Y/xASFqvksdyJ5JzPb14ZoiJJTf8BPGbTKKKLK4C756u41GXTZ4KOAXUdL8C39kx0g7BU/x9BrosPZ2NsOx8uvzq5BvKiE3pB3Dq0c50ueDJS50k5vuNZhCluRhNMr9CYdEuXwP5B2d4FCH9t/RFFHiUD+U6sPBz/Hw"}h!
DjB0x8c25a1816435d8e9d73e31b3a2ce0be5b2163241b12977647e6bb4a1274e0b50
6j4mkw:to:USDT(TRON):TNAJ8yTsYgaQuMGU5gMHUaEKKjXwqxpfkL
6j490V:to:USDT(TRON):THAh19MFmsEVUc8GEaZseCa92gEAsheatfl
6j4yGZ:to:USDT(TRON):TRjs9Dxjef2LWTv4L8SRdhu23VpdW7ALT9w<
7j5bTg:to:ETH:0x279DF70dbAA7440d67dFA6ff0d23a16E44543664
8j6JqO:to:USDC:0xC32dA2E2931161D3165a1CA6614AE2736a4dC6487
FjDOUT:0000074FCB927A1020E5F309F8F985F12DEDF9B5F7AC8D0E4963D506F296F7AC
FjDOUT:0000018C62CD01387A3EDE8A3BA3346A572F17E63D0AD17AAE00DDC33A9E9730
FjDOUT:00000026A1442CF1C4EC5698D4F41EFB2C32A9E34D477756A4B51C5EEC71D9FD
<j:xoA:to:POL(POL):0x096720BBC618e24ACe6f6129272F95b951FB14C2+
?j=j8m:to:USDT(ERC20):0x1104E71dE79F8CF47B7AB8A4d86b06D5C837051b
?j=0l3:to:USDC(SOL):A9jMgqr3s413JoVBkMm6SGaweXoEtPkBS3mJZbAs2hn2
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":289970J
2j0to:USDT(TRON):TTxT3s5dzkWLDZuogjN47XKURjszNDDhx1C
2j0to:USDT(TRON):TFgD6fAWieuJNkmaLAMhcN2YQDNFbNVW4T
2j0to:USDT(TRON):TUHdRWktwmFZMCWmFHW6mWxBSFn8PLv7Um`-
=stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":8000}
=stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":7000}
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":500000J
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"200000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"200000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"200000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Tslau","amt":"280000"}h!
jBackgroundgHorizondBodyeOchreeShirttDouble Striped ShirtdFacegNeutraldHatsmLockchain CapdItemeWatchjAttributesdNone
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i7" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i0" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai9" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i19" width="1254M
" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i0" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi7" width="1254" height="1254"/></svg>hA
jBackgrounddBluedBodyfOrangeeShirtsGod likes elephantsdFaceeOh NodHatskGrey BeaniedItemhMemepooljAttributeseCigar
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i1" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i4" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai14" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i11" width="125M}
4" height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i20" width="1254" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i25" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi12" width="1254" height="1254"/></svg>hA
jBackgrounddBluedBodydBulleShirtmTeam M.K. TeedFacehFrecklesdHatshRich CapdItemiPep DrinkjAttributesdPipe
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i1" width="1254" height="1254"/><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i18" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i15" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i14" width="12M~
54" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i11" width="1254" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i26" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi17" width="1254" height="1254"/></svg>hA
jBackgroundeGreendBodyeBlackeShirtmCovenant ChuddFacegNeutraldHatskBalakoalavadItemsZhengshan xiaozhongjAttributesgBig Bro
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i5" width="1254" height="1254"/><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i16" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i6" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi15" width="125M}
4" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i19" width="1254" height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i13" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi11" width="1254" height="1254"/></svg>hA
Not sure about this colordBodydPinkeShirtmCovenant ChuddFacelMi Vida LocadHatspIdiot Smiley CapdItemuSpiked Brass KnucklesjAttributeseCigar
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i10" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i1" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i6" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i17" width="125M|
4" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi3" width="1254" height="1254"/><image href="/content/d1b79865b4fb7bdc3b53241f06a4e3ddb053064029d83b095422715f14012e44i26" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi12" width="1254" height="1254"/></svg>hA
jBackgroundgHorizondBodyeBrowneShirtkNo 2nd BestdFacecPepdHatsdNonedItemkBunny PlushjAttributeseCigar
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i7" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i2" width="1254" height="1254"/><image href="/content/86f007fce21c131dd94bc5fc568fd99291a3842b55a6a40ba0b1738ce68a48a5i5" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i21" width="1254M
" height="1254"/><image href="/content/9f6c7dd3c386fed0387b293382622b84382dfb43e342bc64f574ce810600d7e1i3" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi12" width="1254" height="1254"/></svg>hA
jBackgroundnBitcoin OrangedBodydGreyeShirtkFinance BrodFacedDerpdHatsfVikingdItemdNonejAttributesiCigarette
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i0" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i6" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai13" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i13" width="125M
4" height="1254"/><image href="/content/a964cf84f24d55d4efe8ada2eb0338b483a9d9120d6daa2e6057a1679d338271i19" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi13" width="1254" height="1254"/></svg>hA
jBackgroundeBrowndBodyeOchreeShirtkDot Com TeedFacecPepdHatsjBamboo HatdItemeStaffjAttributesdPipe
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254"><image href="/content/b069e369781e2909fe579ff540f6329af55363b507107d29139435aa1727a2d3i2" width="1254" height="1254"/><image href="/content/a64eb531d5e8a7c55bbca2aa0750854251a67b71696c2f64e199bfa7a94f1733i0" width="1254" height="1254"/><image href="/content/8c93fba3eca5e68e579678c749c97e83e029a5629f05bb54ebafd5f31f82fd0ai8" width="1254" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i21" width="1254M{
" height="1254"/><image href="/content/e03569dfa90d0ff76eb60efadcb1dd342624fcdceee4b5177c47d0dfde9b2916i24" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi4" width="1254" height="1254"/><image href="/content/313c0e14ba47d50a957e673f1786004a609d71e6d8b1882ef12ddbbd86b7f7cfi17" width="1254" height="1254"/></svg>hA
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"2000"}h!
Bdafd42b626db688a22c9da4fddca743a665206c0eb17ce6840a1618df7353899:2a
/Foundry USA Pool #dropgold/
:{"p":"brc-20","op":"transfer","tick":"mllt","amt":"30000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"9.9999"}h!
text/plain;charset=utf-8
>{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300.0616"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"3"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"3000000000"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"2"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"15000000000"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26762792335.1705338"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"QQ
","amt":"10308000000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"25"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"fifa","amt":"500"}h!
<html lang="en"><head><meta charset="utf-8"><title>gallery test</title>
<style>body{margin:0;background:#222}iframe{width:100vw;height:100vh;border:0;display:block}</style></head>
<body><iframe src="/content/CHILDREN_TEST_ID"></iframe></body></html>
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"301"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"20"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"12000000000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"50"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27474149272.0769068"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"3"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"8"}h!
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"GKTF","amt":"19790000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BUWE","amt":"1000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"ordi","amt":"46.03"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26762792335.1705338"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"20"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26762792335.1705338"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"QQ
","amt":"10000000000"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27474149272.0769068"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26417763531.0747625"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26417763531.0747625"}h!
text/plain;charset=utf-8
B{"p":"brc-20","op":"transfer","tick":"
","amt":"11399999958.3"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"2"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"9.98"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26417763531.0747625"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"TRUM","amt":"1000"}h!
text/plain;charset=utf-8
3{"p":"brc-20","op":"mint","tick":"CWJJ","amt":"10"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"ATMC","amt":"19.99999"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"50"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27474149272.0769068"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26417763531.0747625"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26762792335.1705338"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"50000000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"TSLAU","amt":"98888"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"TRUM","amt":"2000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BIUR","amt":"86"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"TRUM","amt":"1000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"27.8"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26417763531.0747625"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27474149272.0769068"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"13000000000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"50"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BUWE","amt":"1000"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27474149272.0769068"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"
","amt":"6111111111"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"
","amt":"8300000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"
","amt":"9000000000"}h!
text/plain;charset=utf-8
>{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300.0616"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26417763531.0747625"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"3"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27474149272.0769068"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26417763531.0747625"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26762792335.1705338"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"fifa","amt":"500"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27474149272.0769068"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"56"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27474149272.0769068"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"fifa","amt":"150"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"
","amt":"5000000000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"TSLAU","amt":"147000"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"OPMX","amt":"89900"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27474149272.0769068"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26762792335.1705338"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26762792335.1705338"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"50"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"7752315272"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"100"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26762792335.1705338"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"
","amt":"8000000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26417763531.0747625"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26762792335.1705338"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26762792335.1705338"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"27474149272.0769068"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26417763531.0747625"}h!
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"CRYPTO","amt":"260942"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"100"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300.02"}h!
text/plain;charset=utf-8
H{"p":"brc-20","op":"transfer","tick":"Vrqq","amt":"26417763531.0747625"}h!
text/plain;charset=utf-8
>{"p":"brc-20","op":"mint","tick":"squir","amt":"825740533200"}h!
text/plain;charset=utf-8
>{"p":"brc-20","op":"mint","tick":"squir","amt":"825740533200"}h!
text/plain;charset=utf-8
>{"p":"brc-20","op":"mint","tick":"squir","amt":"825740533200"}h!
text/plain;charset=utf-8
>{"p":"brc-20","op":"mint","tick":"squir","amt":"825740533200"}h!
text/plain;charset=utf-8
>{"p":"brc-20","op":"mint","tick":"squir","amt":"825740533200"}h!
text/plain;charset=utf-8
>{"p":"brc-20","op":"mint","tick":"squir","amt":"825740533200"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
 ","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
 ","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"blo
","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"omeg ","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"bt
 ","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
TC","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"Manan","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"ER
E","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"Dl
R","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"W
ed","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"Z
us","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"M
rs","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"m
rs","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"bay
","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"fil
","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"ANONO","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"AUBlE","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"b
ef","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"ro
t","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
it","amt":"0.000001"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"2000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"2000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"2000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"2000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"2000"}h!
DjB0x0b0aa0a000ea6b1585bd912c4eae0c920a938cfc9a58e0b184d5df97be523a3c
DjB0xb07f15b11a33d766ebff2630da91762e8586f2dfff6b3c0eb77fd853bba8e36a
DjB0x172f82fe0565dda6c3f7aaaae5b7dcc503bdd81fcedafc302272633a73ebba2b
DjB0x5c871e027f8da799c3b14174de8be1173308d0d9e41e38b3ea3848bceece5909
DjB0x7307ef12395fb7d944b91929e70d06bf14f0f3d28369909a6d2d703d7c5b1b27
DjB0x946eaa612056db15516cd218e6ddfe9d0d343f8792144a9aef9dfb15ae3efc84
DjB0xf8d6d0b282e1d2a98331ac8a1bd0ad1903ede1a2acecb2602e96e35002e19bf0
DjB0x34c91b895085d543c8ad25d7bc1ce948757a514f075192701a3558494f1e2bbf
DjB0x17cde57b55ebbcbde253e8b814f646817c58e93fb8a006c4c75aa464ae1f5649
DjB0xc107189058fc8af180dbc240b91f4535d7c4fa5feac8aec0e7a8c4ba7b64d8de
DjB0x61ad082417e0e2c79c559e37ecd2d95daa6fde7b74186b041890ea23ab826596
DjB0x2deda791d324adbaf516905b15f45d7ed6b8e05f791e58acff67432d5e13f676
DjB0xf96241b6f1a2ffaa7f9739a075f2cdd52d8a181e411a1fdf3c2e339c9d3094a5
DjB0x2d6b9ec394fd6522115c7278d1193b38e515a52179daa8bf5fdbb500a876026f
DjB0xa0137ca0faa89e81a0941b39c441c824aecf4882ec615499dcef00e4c81c4742
DjB0x017fb7943f22f7ef3336feb92f85a8a133457ab6b1fe66f5206664eaa727ff6c
DjB0x00f19845acbef93e3f2ec09928b95eebfecd02abc00fe05334b79d49c8ca01ad
DjB0x1871c9d2133dc57e0927a5ddcb720c0a2458954b5e1ac19986a9b4c4fdd173d7
6j4Jvc:to:USDT(TRON):TUKAeMJkEd59vra8cXNXkvZnZaMxkm3g1Y
DjB0x106b862fda2618786f3a7fdd47a17fbe99bc5b7571d8cc407b06c6a9ff4e6b2d
DjB0x4e83a2af9e66e70e454e20c2d6b084fc367d50886e542a2d1710c6c33b205548
DjB0x1d3ffb65cc21f56aba7a04282c4d2f6e6d1e374904329bddfc667843bf41d421
FjDOUT:142E0CD218E6B91E4BDBCD87D0ED1B796D235D21A76D9473D1C4F27395E083CD
FjDOUT:000001036396A244813DEDD19463D3CEB1E4757C3D1E9E29836C5F04C165BDF5
FjDOUT:000001414774079D711ACFA676BF286775505E829CE9D78E45BFB2870872630E
6j4xN5:to:USDT(TRON):TBiKWEtWwk9NYEpQDZAPVdcw4RDmNAJfiuk
6j4DpJ:to:USDT(TRON):TY1s4t4xWF9Ye41WBvHKhqHT5R5uK1kkPE
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"sats","amt":"10010360000"}h!
/j-w66:to:XRP:rGZPiveQz1po6KP3ga7yY75teGYhaX6EkF
6j4TEV:to:USDT(TRON):TXC4HANGRMbitDi3Bm39eb2FPArqqFqtug
6j4wJM:to:USDT(TRON):TXC4HANGRMbitDi3Bm39eb2FPArqqFqtug'
6j4yZZ:to:USDT(TRON):TULqQqmS8NeSh98eL771wBNxv43j1zVv86
8j6TCI:to:LTC:ltc1qkmekkn9scapucmh2uws3m0fhs3u4qhx2ec2acxb
/j-7rq:to:TRX:TUL3krXwtErpgXJrwMiMNa5jkGFWuExR8WI
DjB0xb4619d9e533bd734235f46408b2d1bb1e81c5169f2b9cdd28160da0d89d6b2b9g
=j;4lF:to:USDT(BSC):0xfb57A627b13278376a317d15d700Fd5f0D71E822
6j4RBq:to:USDT(TRON):TNJJC1P4UVHB5k9jyAqc8jzVCtiU79UCUN
6j4bfm:to:USDT(TRON):TSPYdUwF9DModWui7nk4iBVF3noAemyhyR
6j42AA:to:USDT(TRON):TVgiBmaqWFnL2yB7ucPZ5mqNkYhgEqutTBQi
6j4Xnh:to:USDT(TRON):TTxHGsbm2wSCa1LeikAhjftEeFdE4tVCv3
=j;R9a:to:USDT(BSC):0xceaE17922101E08359925619efB9ee4513307c5c
=j;cFa:to:USDT(BSC):0x387Be7c5204699262Eb5456b69a4dBEa1Fe0A712
6j42br:to:USDT(TRON):TXA6SWXySxuEsLgpVtLQZp2Kp6hcpV1X2w
9j7EC2:to:SOL:BLFRLqcjzMr6M7xV6h4J24BWqeokrXvmK1TCJX811cW3
2j0to:USDT(TRON):TNhpd14LvX4ycZDt2dkxNvUBwtm7yV4xCe
2j0to:USDT(TRON):TUHdRWktwmFZMCWmFHW6mWxBSFn8PLv7Um
<j:vPA:to:BNB(BSC):0xc1557A2dC4b3853914A11873aAF435613F38Fa07
6j4Bxw:to:USDT(TRON):TPRfeP5VncaLCHtB3oXT5XVartZncNyrKK
0j.from:100XRP:raVbBgeWyswwLs1jgWfGyjHtFaeTrE8fPt
.j,{"p":"crc-20","op":"transfer","tick":"SEAL"}J
2j0to:USDT(TRON):TTQVh2vnHyWP9uSUF6dXXYx7Jg3d4fP85e
RjLO=:BSC.USDT:0x12597114062e7570C2FBbd727cBDA216C4441DA6:120356e4/1/0:-_/bgw:10/30
?j=from:18.4USDT(BSC):0x772A9C52F5c0371f125DB4e6ae5aBB4A81F3B1c9R
DjB0xe9ead04d4bf8487a30019904f1fc7eba4157284956740865808dcc347a4f2e13
{"p":"brc20-prog","op":"c","c":"0xdbb5b6a1d422fca2813cf486e5f986adb09d8337","b":"AVYI+Ff/DGKHm7PdlJxM8G9xv3woHc8k0WPn/x9A/x4D/w3btbah1CL8ooE89Ibl+YatsJ2DN/8fAf8fwP8eB53/HgHg/x4CgP8eAf8RFy+NeacFs6ye8L0z0ZEkOSVCk5uihcoubSgjzU6kQn6CYIoO5eSWEHiCQzvJnBeX/xAOPC1fj5CME3+MdddL0/snVM560PmENttWsLV8/wGB0flnWU8vzXxhxK9QsJnwwvVy/xAF2HPZbsfZn2aEgr2oR+3jPUycDPSnklV1ORpC2YU98QvAy3y1GD8yrdWLaMkDjt//EA1U+hKWEJBzCoOkC5zyP9jBdZ3IK7EJ6r0kDSG5MJUPr2pB0/EzGqilr17+8MNYl/8fgP8QDSkeC9VL/p/tFYzO1Lwf2mAHokasHo7xPaaHTi3T9xzP+vwwc7rq0lX2mOWo0Z0L
g/xAZ0z/kH3rQEF457155zIw1x9MMYFsNM0dqZhPIbh0aa6IwKPsgYbh/vnBAcKuK2Hn/H0FwUiczERetiR2utHeFY45FoxP2llaQtR57EYnNdGCjBkJ6U51A3XK8AXjTJ/NxtP8BtPye10XT9PAb48y8FqOhDhv/Hw"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
DjB0xfe65fbbd205bc6788a0fc6d5124b0e3133f26290b85e04075f3210d02c9d263b
DjB0x85f784c715cc7056faf7de9f3aa7eb18adfc373d9459f2c781368cdc0b36da74
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"BCLD","amt":"50000000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"30"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"7400000000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"30"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"200"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
A{"p":"brc-20","op":"transfer","tick":"
 ","amt":"700000000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BAAI","amt":"20"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"Ftss","amt":"100"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BAAI","amt":"20"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"czcg","amt":"350000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"30"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"190"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"30"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"50"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"FF1E","amt":"47.5"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"fifa","amt":"200"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"Ftss","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"30"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"Ftss","amt":"100"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"10000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"Ftss","amt":"100"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"4"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"30"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"20"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"20"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"20"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
","amt":"0.000001"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"sats","amt":"2262408052"}h!
DjB0x18894140771f40ae11d7f4368c69966f6883f9521cd21472f5f0cdca49687f8c
DjB0x0139479e117d462c31d72221df1f85e0567b853b2be8ceb98e4f1d1c5a50f354
DjB0x314522be92c782586f81bf5ab6c8f729dd46e048425cb8650c2e7371d48878ef
DjB0x3f852917eb7aa3380d7473eaac8e3dea7ed9d7b2c1f6978d3594fbd36bce5d65
DjB0x87616bb523f58163f23cfd006296838ae67e725a7b2f93bc6dfdded37cccb410
DjB0x1c7c02f9957649193b17594b0ac1e73a0f827c5ae70e4fbd65aa6ce36ec9d9d2
DjB0x8284b750905f613e7a0f2ec1d8dd83eeee0810e6d275a4db2a3e070c7bebd7ed
DjB0x8c5811f64b9ff2d919071d45de7873438eb71f5c018d1f0ec8a65939f4c7e592
DjB0x34f00ceaf0e2f425c4669c99db04dd77495153b4c45b84750ec6e164d569aed2
OjLL0xdafd1cabbbfeba96350093ebd52cd0ea64fa780f9a3b50b223b84e4ca37c42fe=|lifi
DjB0x59df6acaabe8c9b7079f8cc341f4006cc62104989a0b557ddaa340d528d73dcf
DjB0xbb3b9a9022f151118c41586bda90f5d2c89203dee6e4042f0c22ff920a4bb871
DjB0x5ee1a0b07a312fcaf94f21277d274ba8a380b7b6d2ea098a7f4c8ced0e403008
DjB0x82e113c79206993c4744693243d4fdbb4aa6f3dc97f0588a5530f956f308d209
DjB0x087d17f1e0a7c124cf91ed3f4f1668cd9c6621d9d0b6be17cfba0cb8dcf75464
DjB0xfa187e01f941da07deb774ce1122185249fff7a8b2f135952531da3dee8a8a86
DjB0xe4fbe557e63d59ea65a9d36d2830965e76b0ec8cff27005c829d1525c5bdca01
DjB0xb3538feb113d978b0c2a8314367d1dfb73a68844c0c11fa57082fd20faf68325
DjB0xc27c640cea6848e22070015789129a7d0af7bd7c986b0a74f47375d1325ac4c3
DjB0xee15539a4388f70fe7420553f2bb2d06e23d7653d26fb5a330d7961f64171fb6
RjLO=:BSC.USDT:0x12597114062e7570C2FBbd727cBDA216C4441DA6:120851e4/1/0:-_/bgw:10/30
LjJ=:r:thor1q9md0qkpm7z6cm2mftwnn9h63em6da4r7w67p4:138080663729/1/0:-_/t:5/50
=j;BqU:to:USDT(BSC):0xb40Dd7D9137dE9609cFe18a1286b74447C24CF3cc
6j4c0W:to:USDT(TRON):TXC4HANGRMbitDi3Bm39eb2FPArqqFqtug
6j4gqk:to:USDT(TRON):TCuqDfTuXUXRJuzdUkmmx166uv5RaDW25w2
6j4gHB:to:USDT(TRON):TKcvTcDUKLsp2BBVQBQCfrY4eMQDG2jSnr/
6j4yII:to:USDT(TRON):TCP5kA4649EJHnPXSjZoJ8pqhUYv3a6VpV
Bj@=:tr:TKR3AZ8W2fD1g4SWUKxoWv1X2xgGwpsuHP:699967900/0/0:-_/t1:0/70
private invest transaction
DjB0x10638ff052ab0382771c2593f0e3c6bf01e67e37aea161f3cd23ce70ec64ff2dO,
=j;S5X:to:USDT(BSC):0x8B3072CDE017D1A4a130c492D629dE5f8d181Dd5
/j-mrF:to:XRP:rMxQ4d3XajQhoZo2FJMB6tWYYUZW7fsPWw
=j;INn:to:USDT(BSC):0xb859985455286d176951A4E64811427332810fCE
6j4nbC:to:USDT(TRON):TQsv8eMfBGzv7kJY7tyHueRa8WGTBZRxKs
2j0to:USDT(TRON):TX3woV7cK6CdPsf7Vm1aZM75ftAVBMLUBA
CjAiQR:to:GRAM(TON):UQA8Ax7S_85eggLOgicXWmY2Wsl1Czp3OcLvRUPWF3W1DWHr
FjDOUT:9E5846B7217EA74D448CBACB1F31CFED3AE2EE886331548DFA378ECE7EF8E6A6
FjDOUT:CD462567D58B480393BAE8B30B061334F0B367BF01ADD8559685E9319DE7B8C3
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"25000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"10000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"18000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"5000"}h!
text/plain;charset=utf-8
F{"p":"brc-20","op":"transfer","tick":"sats","amt":"116160579242.2044"}h!
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":500000J
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"20000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"10000"}h!
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1692822580645"}J
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"326802851682393"}J
B7e984448b955285d12821d78da3fe68b2370b2814f5e3827dce63e0f05363ca3:0a
Bbe89f20f908970d35ef80bfa21f7deecd0923d42a5cd6351e8e6362c95f8319a:0a
Bd8a5467a8b669f8ca4f3a781e27b178f27a9dfc51ee349615a65242aec247db4:0a
B9237692f66f35592f87ad470d4b1e775beaa6840c5e28cb198518b178e05a21f:0a
B470885bd16a33eaea5275ceca894587f3c9730cf2263766390660894201c4bd2:0a
{jLx0x8042febcf3eb24928752c4f015c96fcb6412cd42251df87123f0d17e81bf7eb9|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
B767f5d322ec9086ab0d185dd100b434ffa0f0d03a6a7a4d864e475aeb30dfd86:0a
B746b422debba56982e28e099ad32c9eccf4415a78a30a2bf1859e8da5eaa4ca7:0a
B7e2ab0a95ce20bacff8a6f34f72157590c5eb4bb9be0e868eb1ecbb9a2225ad3:0a
Eshad:46a6b0ed75cb9340d21338606b5ec52f3d86844d44ff300b8b639d5ec129c85f
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"fifa","amt":"200"}h!
DjB{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"5409523809524"}J
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"FF1E","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"FF1E","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"FF1E","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"FF1E","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"50"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"fifa","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"fifa","amt":"100"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"20000000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"satx","amt":"90000000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"10000141296"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"400"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"4"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"1"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"ACDIA","amt":"2000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
3{"p":"brc-20","op":"mint","tick":"CWJJ","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"beat","amt":"53"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"beat","amt":"54"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"beat","amt":"55"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"10"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
KjIThank you  bc1qgykqs7maj2cxxh2g6u9vw0fjm06mvl9rcr6gk8jxqccx5khmnx7q5aw008
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
Powered by Luxor Tech]
?j=QQc:to:USDT(ERC20):0x05FD56C4EDebab8ae1B36b9b2594380266E0689cv
DjB0x3c01f8a13ef308f8ffb46ec515086922ece20ae1541efaf6aff0f1dc5b11d79f
DjB0x2783e08fe43ceda37ad655da988e6013f38420d47e3119dc300ddc186fe5ce9c
DjB0x7c4f06c00ad087cda5f78d1331f040d9a2b9f3888e89744b17f6393e7f897246
DjB0x719a2cb7a9e26681c7a03e9573610e56de3bcfb70af1b4254b6aead94e9b7222
DjB0xf03ef668ccea071eee170b88c5ab90376df59d1a9b67193396bb681aa2e8b0ee
DjB0x87616bb523f58163f23cfd006296838ae67e725a7b2f93bc6dfdded37cccb410
DjB0xc5e9f03c78a0cfaf1702dae1cfe7051de09ebbbff57506fb398042804c3a620c
DjB0xd36686b3a4d3b12668cb571a3a7a21e15e833cf7ebe57166d46ec50e389e19ce
EjC{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"10000000000000"}
6j4AnC:to:USDT(TRON):TWMmKTrkBaZwtWJBNXVJFRYvEn29A1KLBSW
6j4Wvj:to:USDT(TRON):TJtCehseofNLHRFbfFb1kBtHiAm9FFoe4g
=j;ePZ:to:USDT(BSC):0x20ACdFE30edFfeb43cABfe52F34fb1751592cB8c
6j4Yjc:to:USDT(TRON):TUHRNkdcVBECBbeSwqH9xVr7WeCj29qbwB
=j;b0Y:to:USDT(BSC):0xa6bB2DE199Cdcf3120F178ed6593A8289092aBfb
6j4OnW:to:USDT(TRON):TFbAtSYwGhxai4yUebDgwH9BTQRhZhJV1q[L
6j4vjw:to:USDT(TRON):TY7VFDCeLe628PxGvjLZoiBZpwwr1RRPuW
?j=P1p:to:USDT(ERC20):0xE900d71D100060d1D71f4a5Bd6Caed686e0fEd9B
  "op": "dmt-deploy",
  "elem": "35c07cfb6059437e09a92ab36e213c17a33cb07370a2501f02e15911833c3e89i0",
  "tick": "natwatch",
  "id": "fef15d28e6559deb1431f225e51999e04dce3875bf2548154155fad37a8affe5i0",
  "prv": "c9c6b459176cd8d7abe17a207338888f26cee2cd8baff1a9091acc4d511ef773i0"
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"ordi","amt":"0.989527"}h!
@stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":343744J
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"ordi","amt":"0.945352"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"ZBYY","amt":"135"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"FF1E","amt":"48.5"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
eef","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
ENZ","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
udi","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
ams","amt":"0.000001"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
ayc","amt":"0.000001"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "3000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "3000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "3000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "3000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "3000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "3000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "3000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "3000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "2000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "2000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "2000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "2000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "2000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "2000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "2000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "2000"}h!
text/plain;charset=utf-8
?{"p": "brc-20","op": "transfer","tick": "shhhhh","amt": "2000"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1500"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1500"}h!
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1500"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
/Foundry USA Pool #dropgold/f{
OjLL0xdef0a669e595ef57e9833771e3385f73d5446580dcf5a7bba91b0092ec0a69ea=|lifi`
DjB0xfb37aa8988bdb42a645de602c0e60f1a9114be29e68fe984ca958edee87ef1f4
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"ordi","amt":"969.53"}h!
DjB0x5eb3ee6421452427df6a4cc296c58652cc907c3f190d454b601da7ce5d19c083
DjB0xa8f3ee44ea09ea1e8775f3ef8b51cec6de05b7cf327335c30935fdb78a31cc6b
DjB0x5c593e8de05bcdc0522fa31497e2d6afc09009d872dbe36af967b2623e668b6f
DjB0xe6b5de2e5b8659fcc9c16aae4be59449befa98851844ef8bf44b82f955967b5d
DjB0xe7a75ab561c07c818c9e762e0c23a683114bbf7ccdf84b7553f5b58849af4d06
DjB0xf7691a81a7662b0d62365e202dce620006b854e393038755ca932b3b40eb6a46
DjB0xe479e00108010d590916a5379268910c0e6ce7ec23a5c60dada4aa393af4ef22
DjB0x6341c6a287b3a093d7ecfa31439b4c1e37cd027894ed00d5c2986b0534043de4
DjB0x452aa3cde1ddc3a95a967b7608f38987ed7c52956c5115616e17027c12fc7a47
DjB0xa09e9c2f06234f469e6fde4cbbefa6db2ac3c2455f1b295fd3b6db2927a57524
7j5from:150USDT(TRON):TQihnaMjvme46trppQNDNanU4VKZ9LQidx
DjB0x979fd91ee615e8491c41f8802062942604cc9ec5cd7eb3d2b164cb8a5dfc4e74
DjB0x5c6079a579618304d87fc8b6db8eacbb85bc489f37f3efc09581eeb8e5e42e3c
DjB0x2e26e074d0e18cc86b99877e23c153596daaeffe99110b2a5a5c7904d67f8056
DjB{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"9888800000000"}
FjDOUT:1A9BEC5058BE4477F81868838D49BE45F1CABA426EC4284ADD964E711CEE376C
FjDOUT:94AFC4EE22EB7479434C35AD72435326847947B4636D3BEE6870B24DDE735A5B
FjDOUT:B590A00141C822CB6B11F06EAB90AC59291F9EDEA70AC37330F705B44E5B92FA
FjDOUT:C6EF139017EC303DE17C52802BD10784CB050B7D59EAFBD8B7E2551B01CEB8A7
FjDOUT:487A1868C0A55A91FEE54F0B40F86EEFF10EF85E108FC5DBD4334A8094117E40
6j415Y:to:USDT(TRON):TZ44McgvSSybYGk5YS2H7mGxeoNLDPZKBg
6j4Z6K:to:USDT(TRON):TTMZgkuHPTuNjijjLDqADDgpMbtvJSpARC
HjF=:l:ltc1qrmy7gwp89n4ct6tan5ua0rqv5ztt0eygkc6w3k:7833150/0/0:-_/t1:0/70
=j;cZQ:to:USDT(BSC):0xf733F3f3DB7eDD00Ffae96138979f56DC5Ebb45E
=j;tzs:to:USDT(BSC):0xf3E320a9be54fD519Fa58E7EB5335Cb2042bd9F5
DjB0x1c31ca13d857626efe8bc0d05959a0f62eb94f3d6dc0cf8e7b5b29549b3f43b0
DjB0x7d77513404217f358a2cce08e0ba218b1d6d0c94c97056249363f7c065854116
=j;GHt:to:USDT(BSC):0x5fE888E36ebb77cDcE55C2aB770f2006f8b1b892
6j4jje:to:USDT(TRON):THxFxnNvmW8pXrk791VuSSHEoySuoq1zdz
6j4NAL:to:USDT(TRON):TML7duRMKQHtp3pZJro6g7tVEAdqQV1vxW
6j4QGz:to:USDT(TRON):TGo1CcajZixnqHEA61h5Nzv5fB7VwJqv9z
6j4qui:to:USDT(TRON):TKZG2dzauhzfS2mimCvoBpdim79DL2EBFLX
6j4ArP:to:USDT(TRON):TN5AvD6vs2v63pX9S8AN3qmxMwEthF1daQ
6j4MVj:to:USDT(TRON):TTMKdFHAbpVwZgDWhq8HicsCmTVLNF6AKX
7j5XlP:to:ETH:0x694cc6546F533FbC4b578BfE8903B97e34Db9BB0=
7j5lqU:to:ETH:0xF28e201D77fa67295853Ab4c56B0160fD35eAF72
6j4uru:to:USDT(TRON):TXXndut7LTkeNMimLW6mhururEWohf7Ui3
=j;8HS:to:USDC(ARB):0x3b61d5C7BA1CbC0A369A274F4c8eaf4f0207Cf22FW
2j0to:USDT(TRON):TUTkGhS2Ln3WPmKr5PHHRBBw1UHNCoe6mM6%
FjDOUT:75CD970CB51829D1DA0615675AAD7E724AC4ADB2D966015CF88CA49C64E27E91
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"13000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"6000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"4000"}h!
2j0to:USDT(TRON):TLtAEaTQJ1wfyULpibfYWqQAXAXX99GKsf
Bc69a18329cc971daa4e96a4c88aa35d2bd169e267ef9174e04d6ccd42e25ad4d:0a
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1500000000000"}J
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1000000000000"}J
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1600000000000"}J
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"2000000000000"}J
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"400000000000"}J
CjA{"p":"crc-20","op":"transfer","tick":"LEAF","amt":"360619047619"}J
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"9000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"20000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"2000"}h!
DjB{"p":"crc-20","op":"transfer","tick":"BONS","amt":"1692822580644"}J
text/html;charset=utf-8
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#020307}
canvas{display:block;width:100%;height:100%;touch-action:none}
<canvas id="c"></canvas>
const c=document.getElementById("c");
const x=c.getContext("2d",{alpha:false});
  D=Math.min(devicePixelRatio||1,2);
  W=innerWidth; H=innerHeight;
  c.width=W*D; c.height=H*D;
  x.setTransform(D,0,0,D,0,0);
    seed=(seed*1664525+1013904223)>>>0;
    return seed/4294967296;
  for(let i=0;i<90;i++)
    stars.push([rnd()*W,rnd()*H,rnd()]);
addEventListener("resize",resize);
  const q=e.touches?e.toucM
  return [q.clientX,q.clientY];
  const [a,b]=pos(e);
  const dx=a-px,dy=b-py;
  pull=Math.min(1.25,Math.hypot(dx,dy)/Math.min(W,H)*2.4);
  if(pull>.025) fire(pull);
c.addEventListener("pointerdown",start);
c.addEventListener("pointermove",move);
addEventListener("pointerup",end);
  for(let i=0;i<n;i++){
    const u=i/n*Math.PI*2;
    const v=(i*2.399963229728653)% (Math.PI*2);
    const rr=a*(.35+.65*((i%17)/16));
function project(X,Y,Z){
  const s=f/Math.max(80,zz);
function membrane(){
  const cx=W*.5,cy=H*.5;
  const R=Math.min(W,H)*(.12+pull*.018);
  const g=x.createRadialGradient(cx,cy,0,cx,cy,R*1.8);
  g.addColorStop(0,"rgba(110,190,255,.09)");
  g.addColorStop(.45,"rgba(70,130,220,.025)");
  g.addColorStop(1,"rgba(0,0,0,0)");
  x.arc(cx,cy,R*1.8,0,Math.PI*2);
  x.strokeStyle="rgba(190,225,255,"+(0.12+pull*.34)+")";
  x.lineWidth=1+pull*2;
  x.arc(cx,cy,R,0,Math.PI*2);
    for(let i=0;i<18;i++){
      const a=i/18*Math.PI*2;
      const r=R*(1-pull*.13*Math.sin(t*4+a*3));
      x.strokeStyle="rgba(130,190,255,.055)";
      x.beginPath();
      x.moveTo(cx+Math.cos(a)*r*.25,cy+Math.sin(a)*r*.25);
      x.lineTo(cx+Math.cos(a)*r,cy+Math.sin(a)*r);
function updateRing(r,dt){
  // Nie rozwieramy torusa jak fali wodnej.
e; powolna dyfuzja rdzenia.
  for(const p of r.pM
    p.v+=r.gamma*dt/(1+p.rr*.025);
    // u = pozycja wok
    const cr=Math.cos(p.v), sr=Math.sin(p.v);
    const cu=Math.cos(p.u), su=Math.sin(p.u);
    const localR=r.R+p.rr*cr;
    let X=localR*cu;
    let Y=localR*su;
t przekroju daje ruch wzd
    let Z=r.z+p.rr*sr;
    // delikatna precesja ca
    const wob=.08*Math.sin(r.age*.7);
    const yy=Y*Math.cos(woM
    const zz=Y*Math.sin(wob)+Z*Math.cos(wob);
    const P=project(X,Y,Z);
    if(p.tail.length>13)p.tail.shift();
function drawRing(r){
  const fade=Math.min(1,r.age/.35)*
             Math.min(1,(r.life-r.age)/1.6);
  for(const p of r.p){
    if(p.tail.length<2)continue;
    for(let j=1;j<p.tail.length;j++){
      const A=p.tail[j-1],B=p.tail[j];
      const k=j/p.tail.length;
      x.strokeStyle=
        `rgba(${120+80*p.q},${175+55*k},255,${fadeM
      x.lineWidth=Math.max(.35,B[2]*1.25);
      x.beginPath();
      x.moveTo(A[0],A[1]);
      x.lineTo(B[0],B[1]);
    const P=p.tail[p.tail.length-1];
    x.fillStyle=`rgba(220,240,255,${fade*.32})`;
    x.arc(P[0],P[1],Math.max(.35,P[2]*1.25),0,Math.PI*2);
  x.fillStyle="#020307";
  x.fillRect(0,0,W,H);
  for(const s of stars){
    const a=.035+s[2]*.09;
    x.fillStyle=`rgba(180,205,230,${a})`;
    x.fillRect(s[0],s[1M
  const g=x.createRadialGradient(
    W*.5,H*.5,Math.max(W,H)*.55
  g.addColorStop(0,"rgba(20,38,70,.11)");
  g.addColorStop(1,"rgba(0,0,0,0)");
  x.fillRect(0,0,W,H);
function frame(now){
  const dt=Math.min(.035,(now-last)/1000);
  for(let i=rings.length-1;i>=0;i--){
    const r=rings[i];
    updateRing(r,dt);
    if(r.age>r.life)rings.splice(i,1);
  requestAnimationFrame(frame);
requestAnimationFrame(frame);
// pierwszy cichy impuls,
eby po otwarciu nie by
setTimeout(()=>fire(.55),450);
<!-- AIR_SLING_001 // RAW -->h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
text/plain;charset=utf-8R
DjB0x2e6baf8dd0c6b0d214a77862d671a4976277ee1773ee19c14ae03b4a89f5516b
DjB0x270f81c9dfc1287ea258c8a1c64338d50990cda2f9495e498827207aec8ce913
DjB0x62c285561be250bd21dc8294ab5503d64e0af6c5b3aa7bd904dee905052dd7bf
DjB0x5792d5eb5cd22b9b7038d4e6636562d3418d6e45d9d165211191b7556289cb97
DjB0xc6a6de92a85a490ef2173b694d3b7fbd85a540a2c56a5110d95d9c5163d05d93
DjB0x9ba883ad710b3883510b0609d213682b42aa643360458bee38cf9e3d97c81863
DjB0x41884b2758a08ed821fb706aa821fa61df522c7fdc96e2353bc8c4328da50499
DjB0x65de90f8671a95338231053d263db2ea71394a56b312fede9179fb34d83b96e8
DjB0x4102ec0745641d602dbe91a8a5887de1f4b1bf0677641545570a49e68bdb249e
FjD=:s:0x4d4A656b4513cb18a069E58406F2ff0ca305E416:174528/0/0:-_/t1:0/70
DjB0x2e356294c9020987d3a1589efb90bff196abf7fd0f1d3f3ec44422a89faf8cd5
DjB0x869b7332760e89947b0c38655821b70e3f8904cbdbbbaeb303146805d11e074a
DjB0x796e3057363bb995946137321e060c69971d8bbc59ce43d0cd301c3a7ad581dc
DjB0x481520a028dcc6e092de748da06f423f410dbf9d65cf8ef75faf8f66e2dc096a
DjB0xb8813f925bd52c11dc538790102fbd7e2426fb71749778b2917002168a2451a3
DjB0x139a3b1342fcc2f73adf2f0c7b3434860e3c410e1a71deb4c70911cfdea12190
DjB0x9c4e53a9b56cad86e54c0b9c8d63d7eb5297775f09c0413f3b8c3bff71ae77bb
DjB0x715a3758d62b41b7e1d0e30e2803a7c870bd9f9d82b4f56d7be8a989f00343ec
6j47aL:to:USDT(TRON):TNcPRFKmSfqSWNyoCbX42avNyCRqtttx2i
6j4KsU:to:USDT(TRON):TE229PGfkA5uN7qE13pi6MDJq9SEHNKvyv
DjB0x5a9c8752a2cce0ad33dd3f52ad77fb30452f9b22175b5eb1dbd26f585cd31ac2
>j<from:200USDT(BSC):0x68453c6FeC1E9D7f64032458592c483aE04d2B7e
6j4ers:to:USDT(TRON):TVbC9KoLEPA5yvfJzKUE3EjrD5CN5Nrwtj
DjB0xba9cedb36111d6419826bd9cf9c2919bd11aabc763958ec09a18823bb3e9caee
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"$-:)","amt":"4580"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"$-:)","amt":"4580"}h!
FjDOUT:F64115CD7925DE08C5BF196777049A6C4C18485B4900EF12FA5EC556C1ADC0B8
FjDOUT:591E98926993B47668B0212F5BB89988D5070DF47F77CE5312D7583D0F874D13
FjDOUT:960EF131E225626F491FCF49577F970EEA3D679111A3B935DAEC6F3B00D1537E
FjDOUT:796A9599F1698F34849120940734CD7C34853931CCC6CEECF2E70D9C90109B0A
FjDOUT:5545DBCE745DE2A6A7E87F06DF22752B02CFA98E697E946D904C4A84A1C98857
JjH=:e:0x3c26Dd101D4251310f4368a79E65a9194922dF2C:93079065/350:sk/tan:7/144
6j4J8F:to:USDT(TRON):TKcvTcDUKLsp2BBVQBQCfrY4eMQDG2jSnr
/j-roW:to:XRP:rGRM6T8xmEYdhyeiMUEHA7ju9wjnQCaQ2kKUr
DjB0x1e6ca5c30190765ef35a7f7b15e2c90e416aecfebb4a9e9bb524ccb55e00621cP
DjB0x7a04a719243f14ccb7cb028366a0fd547575b86e0f23e5e4940a9ad387adc53d
=j;WZX:to:USDT(BSC):0x8d84cd5181e19D1b7446c6861e202d3F2822B3e9
6j4AhH:to:USDT(TRON):TQWN2Sh9VXPhTHSj4ENhekxvTjxhLj4WpM
6j4tLr:to:USDT(TRON):TR1joP4a3yTiuQ72CghNzHYACcreMrF7ey
6j4Ek0:to:USDT(TRON):TRWrb2miv4cT5MZCzJcPJUASqhyPCc1uAi
6j4jEA:to:USDT(TRON):TQfDJq5RrM8sQerDcuFXvAeu1Phikgaohw
6j4VI5:to:USDT(TRON):TEQRaRv1aEtRbvyDxJB4rvj6EJyhUsTQ1F
6j4BOV:to:USDT(TRON):TA82FsgzJPVoYe8dqAtjzmQjLs7XQgkoTr
8j6tIa:to:SOL:HeVgi2Vh5Sv7AEZff3hfVXP6QvTHSHWz4nVix4zU4q8^
9j7fZc:to:SOL:81Yibid1rsoRVbPppQup4coCVTcJUydKHMVNXwfe3tiqp
=j;Rjr:to:USDT(BSC):0x48db70eB8A58b6031362B5267A5a41580d178F67
?j=CLi:to:USDT(ERC20):0xE5832Ae921bf474562d42437E405Bb007F6B212f]
FjDOUT:6911AE049D7449BA5BEF2F41AB2355476FEC499F66990D5CE5A0820341B8F2A2
9j7to:USDT(BSC):0x9a64316892Bf299d6e2b164ef1A5Cb3279e776E1
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
DjB0xcf47010b564ff8846003a4d74c0d311472657ba6d3a09f3813a8b685ac723af4
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
;j9to:USDT(ERC20):0x2bBB4B45C8F11668dfADA40856d8a2d3F3c1D720
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"34000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
Li{"p":"brc-20","op":"predeploy","hash":"3600dd34c2948131b0c8fc3d353ffe3a8eb28c127c7b0f5277fc879c8f06643e"}h!
text/plain;charset=utf-8
{"p":"tap","op":"token-send","items":[{"tick":"dmt-nat","amt":"1518709244","address":"bc1pcukxh2teu3h8jjvad0ynx7kgr2m7c2wuz7q02uunagujsqfux0rqed9k7u"},{"tick":"dmt-nat","amt":"856915353","address":"bc1pqrqht4harhx2vmh9wlfnkm86zzwl2djv9vy38fzuqcyxdy0t9nzq3ktrrn"},{"tick":"dmt-nat","amt":"82514795","address":"bc1p7ncudwy8egx88hk53tc2ldj725mxpvv6kjzp7859ttccec9asavsq3w2ca"},{"tick":"dmt-nat","amt":"44465693","address":"bc1q4ulvmqnsrsq5grn4243042rrfluyzadegtc8tn"},{"tick":"dmt-nat","amt":"36827120","address":"bc1qgs8wyM
6zh6n5aeek0anr4qs2j4299249kvfnpyp"},{"tick":"dmt-nat","amt":"28413804","address":"bc1q96rgt32cfsvhn5ucr9jvll5r9y6t4mfsnktefp"},{"tick":"dmt-nat","amt":"21435070","address":"bc1pk57998kylwwdvw5266lr7xwagggdmvr2mnp4sjsxgmg0wmrc42gsszygpr"},{"tick":"dmt-nat","amt":"20425278","address":"bc1qk2syxkr9gnnq8ptxp7d7t0223cdzwjxk064f8l"},{"tick":"dmt-nat","amt":"18231045","address":"bc1q9kn0lvq45njgw2ag4hf63rlcag23tdv35jk9xa"},{"tick":"dmt-nat","amt":"15844499","address":"bc1q534azmde40hmv6tqedaqsddheq2mrt97c3zqw8"},{"tick":"M
dmt-nat","amt":"15764322","address":"bc1q67540ujnnnn65c43zyel6u698k6yvzmlcslymp"},{"tick":"dmt-nat","amt":"10944424","address":"bc1qnclqxmdzag5qgqcepm56w2zym52k876j7h56nt"},{"tick":"dmt-nat","amt":"10710037","address":"bc1q35yrutc98mr7uet4k243w225n533h7hmyqjukm"},{"tick":"dmt-nat","amt":"10318393","address":"bc1qn9gkuegh3wu0ef7j95auqd9wqslltfqh8wesh5"},{"tick":"dmt-nat","amt":"10107220","address":"bc1q78yf7nvux9g0lhvf6lzsjk3eh9f3ajjpqx73a2pgj26lrjpu8kjs3v3eyv"},{"tick":"dmt-nat","amt":"9512593","address":"bc1p8x5egM
2wqmgnpkm6hrsxx7jml7v2qvs6nndh6gspp9elxxqlg0mtsle8n0y"},{"tick":"dmt-nat","amt":"7797122","address":"bc1phdshnhy5qvclm7flxhsul386ctpxxw2cyfkrpavq0cm3myuw264snur4fs"},{"tick":"dmt-nat","amt":"7660435","address":"bc1qzgqwvqzwtj4ppdtaw8ctvzsawffw2tjhcazs3m"},{"tick":"dmt-nat","amt":"6927865","address":"bc1qg7vhjq2wkh0uju29z0lthxkkjumqm7m68f533f"},{"tick":"dmt-nat","amt":"6864834","address":"bc1p9rzvclxc2uyh70v9zxusxyejv59p5zh2hg7s9h3meef9d6ykegaqdadywf"},{"tick":"dmt-nat","amt":"6470695","address":"bc1p8dh8r6mct2d2nqkM
72u4699yesu02xlaarp9wfgnrdz2xa5mqmcvqsdz0ys"},{"tick":"dmt-nat","amt":"6462597","address":"bc1qdwze833p5escrnq765wyj7esu9jr2emkpqpkeu"},{"tick":"dmt-nat","amt":"6117252","address":"bc1qnygdzszkswhu68wr6wvcw46x2smeydm0unpltm"},{"tick":"dmt-nat","amt":"6033259","address":"bc1pahnvlyflkmauewqnksv45veuwa56htcf38jvag4qpf0ut0ppxqdsmd6txm"},{"tick":"dmt-nat","amt":"5925132","address":"bc1pgym94yzzh5mj63tqkwc29xfe4ff0cfftp9nl4uas6e036q0mxd0svkk90z"},{"tick":"dmt-nat","amt":"5792203","address":"bc1qf58nu383rg3qvsvyd38z680w7M
dw874q0czvjum"},{"tick":"dmt-nat","amt":"5728876","address":"bc1qgmsk0mcwz6e3raug4jhlceu2qscwaturjqu72q"},{"tick":"dmt-nat","amt":"5677389","address":"bc1pn45g8pqnr5lwzk8t9egxfgy0xdcpcywxype4f9g6pvgendpuzppq5wxn3m"},{"tick":"dmt-nat","amt":"5523516","address":"12KkFRfMCLAvuEapHhyyAASHTcvksmxujG"},{"tick":"dmt-nat","amt":"5465166","address":"bc1qhx4het5k7vfqj67aqxhqp0cd97jsmlxfnk9qjt"},{"tick":"dmt-nat","amt":"5338382","address":"bc1padrk0x5eru8ltsek2kg6442vdl9470srg76rq8r8auhm3kd2n5eqpn9lm2"},{"tick":"dmt-nat","amtM
":"5229609","address":"bc1q3pkhz0xzt2te6yqczevck5q04j4yl0vaaju0w8"},{"tick":"dmt-nat","amt":"5192149","address":"bc1q8kcmfx3gu7v4dsdywrwj3vwr7enwhfzrhktt9z"},{"tick":"dmt-nat","amt":"5121433","address":"bc1qgteq0x6c606jk25rn79kezwzukedygqv5k6kqr"},{"tick":"dmt-nat","amt":"5117365","address":"bc1q8g33zpa024fde7lx32wqnvtz3dnls0cj0nfa6a"},{"tick":"dmt-nat","amt":"5093398","address":"12gUcVqUE9N5aSp5uBinH9AbkMBAbPzMWG"},{"tick":"dmt-nat","amt":"5047133","address":"bc1ph40jtaqu43xyhura8tq9dylxsxhcw2q24fsmkad8thllxpdjsz6Leqwjfru5"},{"tick":"dmt-nat","amt":"5030808","address":"bc1qnkdzflafp5qyml82n6yzr63rkty22cnwhj4zjr"}]}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"16000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"ordi","amt":"200"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
DjB0x819a54bb5bac4e927b45bfe2d255a5148e2cd69771dae8f710d76a16431a3bae3
DjB0x4906b0d612ee123b16df49e91c757007c2fb0ce3375465a70e872e7a90cf0ac03
Eshad:4e40ba2ad6ba804d48f37a354ad10ed366b1810de27c17c41b8cb21ee058fe28
DjB0xe0790977e70b054837535a8247d163f10fd0a172818091134267923b9f9a3c41
DjB0x119731bc5f4420375424db050bc0608906f3e16aca1a6ced76a4846e0a4f0a7e
DjB0xcebfa6080c5f038ba731c26b22349549ae36b6de9213ce8142c8de7ee0e989b1
DjB0x6f5301df49c518c532dba104545957cd9c4bfc26cb34d59f83a377d1615f5732
DjB0xc760355aee064ad2d8fb843d53ec37cb733c8244a742782d35cc4e60ee5c5835
Astamp:{"p":"SRC-20","op":"TRANM
 SFER","tick":"MSKK","amt":"50000M
DjB0xcb9c6488f5590c25133b7cc637580117710c7fcc3ee6de1f29ec45dde88d28ab
DjB0x35ad1837b6650bd6059856c61db40b0f0a773a5470bd93ed41dd9d44969f9edf
DjB0xb60abea058acdf9e507794e862334c72b4b67b16671a308a92ef638a08ec3cf3
DjB0x4906b0d612ee123b16df49e91c757007c2fb0ce3375465a70e872e7a90cf0ac0
6j4qPR:to:USDT(TRON):TLwonGduDEiFsRbncg1TaXWtuKFEwVgDm3
DjB0xdd62af133d84d40e23431dcfbc8a0277ce86e5a48bb3894745382dffdffbce17
HjF=:TRON.USDT:TT7ctfdfvjTNJ3Rx8KoF83xbMBKK4VVQyj:45131300/0/0:-_/t1:0/70
6j4guQ:to:USDT(TRON):TEQRaRv1aEtRbvyDxJB4rvj6EJyhUsTQ1F
8j6Y5j:to:LTC:ltc1qpuad4dlrrpddf2j376f23crum2la48zjsg7fv3
/j-xQ8:to:TRX:TWEjroM8ftE9eY6nBCMHbVWUJCpsWpdu8Z
=j;ZW9:to:USDT(BSC):0xa86ede5eDF53F1b1a420971c99dBe41aa8A8e32f
=j;eg7:to:USDT(BSC):0x119b66994DBB1b1dBa8c9070A1004c29e1f304F0
=j;Mg8:to:USDT(BSC):0xfE363cDF24C0514Bf4d5ccb108dBca83c0398E1A
6j4FOd:to:USDT(TRON):TGG5k6fnouFy9svdS8qtsGau4HfzbJfMgw
6j4fKl:to:USDT(TRON):TAG71cLzdLGxC7eMVnzNH4pPKRz9LsKh5E
=j;vKZ:to:USDT(BSC):0x759B9A9Fa58B1c08325e1E2A83dec0264346E5e6s)
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"20000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
DjB0xe9d6b171bfff006fcf5bea16f3dd70768838f0cf358b07c531ff4bc0b5c604bf3
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"10000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"10000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"17000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
{"p":"brc20-prog","op":"t","b":"Aii1L/1gDQtdGgD0J/kMCoIKvICAlGKHm7PdlJxM8G9xv3woHc8k0WPngLkLpGYjjh0AYAALABsAVAYkAwIMAQ0ZAACQZUtIUhQwkmZAFeEHowEMFwABgrgGq4Z0y6VNj2oJBHwE+gKSKov9Iym8K3SBgx2+GBziIJOysRU2XHKlihcCrwQQBwEbIwEchDCFPEiwAQseAdIB5+QXG/TToAAAg+Ye0wCHFAHtT956IjawAA3UUOxN3KQy9gA7TA3VO6oO1sDe8ppUtvvosXIbSHAO150qEKN8GF1+330S2AAQARNJJCZwzoSAAADZsz4EK2ZuTRZRGR3qqBLaBDNVtTYoprWUs1MP278wXCRFjo05YWMqD9xdLHKirBajv3ou3QEKBFK8A/1iNH0DWy7eVLQLH4Ur2gELYd8AbGuTW4u9QCn8BqME1C8JFrCj+0utm8uAXQgDmJ8Rz4C6F2DPPawHOhIHt08l8ZRLnkn1M
fqkTygTupM4KUKm6ep0HDlAqRMArJm2XW66BAHEBAALwLfO9WWck9kzQAAlvRwh3AJMpV8YoPvgHuDMCABsZNjXJrcXeoAAEfAb7AgoiUSAyFmKMSwbeBuWKMyMe0S6TWJhTdkAfob3xsvIKAkfqVwCCxzsAgA1fdX6GicOi+4auyrFEfRA+ioh7+mbhyZC+ngzK91RLU5eM4TCBMBgD2ZQBD07yOgClCyX5C/sUHNEOisw7+z4DT7LAq1pGtkKptQj55MpWeogPWHsE2Km9P8w0oiX55IWEpIZkhKAF0sk+fw3E7HHXewJNGtDgyg+5QOgkfPMT3RQ6krmOD6BaeJ5eddidXEjSrrUO75LR69LVXiDDs/eSSi+m3My7L3+gQWQNTSRkXD/GEE+SJsMBABLELVG3cYywkTe4mknnHKjeLjZmcK2/ydSKw0LYr2GVI5/HnRpPW0Q5MvNhohyZeWFeCjes8wRhfHZzHGAe9zLmgysnuxqyOEK1HANziIKPTIgZETLGL
H6TjYwJZX4YemSGWMaqNysCRh3+IsJjVaBEH8Hhmgljgu4zpYMpIOuk04+yX6PirG5DfNXRlyYLkNcqRATo3zngIs9egd0WbELvroNFn005sYt9rO8hkBiLBr4vQ5A4tAjU="}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"$-:)","amt":"5060"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
={"p":"brc-20","op":"transfer","tick":"GKTF","amt":"10000000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"5"}h!
text/plain;charset=utf-8
Li{"p":"brc-20","op":"predeploy","hash":"8a09c05963034c405a750c72baf321992470d17ecd565e02989fa0e8ebc7775f"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"11080000000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"22"}h!
text/plain;charset=utf-8
A{"p":"brc-20","op":"transfer","tick":"
","amt":"116600000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"15"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"14285000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"7646660000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"8858000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"13246800000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"3000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"10453800000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"10435890000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"20000000000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"BMW99","amt":"40000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"10856900000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"50000000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"28500000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"9635280000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"9642800000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"11245380000"}h!
text/html;charset=utf-8
xB551ac16d6443565ff867ef0c83fa48383e102ca11121674c5f696b11b0e4d6eci0
28fecad2523133a9c90a64b2e50349a09338cdc3cbb06934c25acea4f31eeb35
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#020307}
canvas{display:block;width:100%;height:100%;touch-action:none}
<canvas id="c"></canvas>
const c=document.getElementById("c");
c.getContext("2d",{alpha:false});
let t=0,last=performance.now();
  D=Math.min(devicePixelRatio||1,2);
  W=innerWidth; H=innerHeight;
  c.width=W*D; c.height=H*D;
  x.setTransform(D,0,0,D,0,0);
    seed=(seed*1664525+1013904223)>>>0;
    return seed/4294967296;
  for(let i=0;i<90;i++)
    stars.push([rnd()*W,rnd()*H,rnd()]);
addEventListener("resize"M
  const q=e.touches?e.touches[0]:e;
  return [q.clientX,q.clientY];
  const [a,b]=pos(e);
  const dx=a-px,dy=b-py;
  pull=Math.min(1.25,Math.hypot(dx,dy)/Math.min(W,H)*2.4);
  if(pull>.025) fire(pull);
c.addEventListener("pointerdown",start);
c.addEventListener("pointermove",move);
addEventListener("pointerup",enM
  for(let i=0;i<n;i++){
    const u=i/n*Math.PI*2;
    const v=(i*2.399963229728653)% (Math.PI*2);
    const rr=a*(.35+.65*((i%17)/16));
function project(X,Y,Z){
function membrane(){
  const cx=W*.5,cy=H*.5;
  const R=Math.min(W,H)*(.12+pull*.018);
  const g=x.createRadialGradient(cx,cy,0,cx,cy,R*1.8);
  g.addColorStop(0,"rgba(110,190,255,.09)");
  g.addColorStop(.45,"rgba(70,130,220,.025)");
  g.addColorStop(1,"rgba(0,0,0,0)");
  x.arc(cx,cy,R*1.8,0,Math.PI*2);
  x.strokeStyle="rgba(190,225,255,"+(0.12+pull*.34)+")";
  x.lineWidth=1+pull*2;
  x.arc(cx,cy,R,0,Math.PI*2);
    for(let i=0;i<18;i++){
      const a=i/18*Math.PI*2;
      const r=R*(1-pull*.13*Math.sin(t*4+a*3));
      x.strokeStyle="rgba(130,190,255,.055)";
      x.beginPath();
      x.moveTo(cx+Math.cos(a)*r*.25,cy+Math.sin(a)*r*.25);
      x.lineTo(cx+Math.cos(a)*r,cy+Math.sin(a)*r);
function updateRing(r,dt){
  // Nie rozwieramy torusa jak fali wodnej.
e; powolna dyfuzja rdzenia.
  for(const p of r.p){
    p.v+=r.gamma*dt/(1+p.rr*.025);
    // u = pozycja wok
    const cr=Math.cos(p.v), sr=Math.sin(p.v);
    const cu=Math.cos(p.u), su=Math.sin(p.u);
    const localR=r.R+p.rr*cr;
    let X=localR*cu;
    let Y=localR*su;
t przekroju daje ruch wzd
    let Z=r.z+p.rr*sr;
    // delikatna precesja ca
    const wob=.08*Math.sin(r.age*.7);
    const yy=Y*Math.cos(wob)-Z*Math.sin(wob);
    const zz=Y*Math.sin(wob)+Z*Math.cos(wob);
    const P=project(X,Y,Z);
    if(p.tail.length>13)p.tail.shift();
function drawRing(r){
  const fade=Math.min(1,r.age/.35)*
             Math.min(1,(r.life-r.age)/1.6);
  for(const p of r.p){
    if(p.tail.length<2)continue;
    for(let j=1;j<p.tail.length;j++){
      const A=p.tail[j-1],B=p.tail[j];
      const k=j/p.tail.length;
        `rgba(${120+80*p.q},${175+55*k},255,${fade*k*.19})`;
      x.lineWidth=Math.max(.35,B[2]*1.25);
      x.beginPath();
      x.moveTo(A[0],A[1]);
      x.lineTo(B[0],B[1]);
    const P=p.tail[p.tail.length-1];
    x.fillStyle=`rgba(220,240,255,${fade*.32})`;
    x.arc(P[0],P[1],Math.max(.35,P[2]*1.25),0,Math.PI*2);
  x.fillStyle="#020307";
  x.fillRect(0,0,W,H);
  for(const s of stars){
    const a=.035+s[2]*.09;
   x.fillStyle=`rgba(180,205,230,${a})`;
    x.fillRect(s[0],s[1],.6+s[2],.6+s[2]);
  const g=x.createRadialGradient(
    W*.5,H*.5,Math.max(W,H)*.55
  g.addColorStop(0,"rgba(20,38,70,.11)");
  g.addColorStop(1,"rgba(0,0,0,0)");
  x.fillRect(0,0,W,H);
function frame(now){
  const dt=Math.min(.035,(now-last)/1000);
  for(let i=rings.length-1;i>=0;i--){
    const r=rings[i];
    updateRing(r,dt);
r.life)rings.splice(i,1);
  requestAnimationFrame(frame);
requestAnimationFrame(frame);
// pierwszy cichy impuls,
eby po otwarciu nie by
setTimeout(()=>fire(.55),450);
<!-- AIR_SLING_001 // RAW -->KOCHAMCieChceCiuBezFirku
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"4"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"8639500000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"5000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"2000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"10485000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"13480000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"40000000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"6000000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"80"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"AMT  ","amt":"3600"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"2"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"9435280000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"13428000000"}h!
text/plain;charset=utf-8
<{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"10000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"FF1E","amt":"449"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"BCLD","amt":"4500000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"
","amt":"10000000000"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"8"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"28500000000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ctdl","amt":"62"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"AMT  ","amt":"3600"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"BTTY","amt":"2000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"10"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"50"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"transfer","tick":"FTSS","amt":"63.35"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"30"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"sats","amt":"10000000000"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"11248090000"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BTMV","amt":"100"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
:{"p":"brc-20","op":"mint","tick":"
LAW","amt":"0.000001"}h!
/ViaBTC/Mined by rate1ua/,
DjB0xdff927a53a93e9a2a0e4f24d496b7f75f31d508118e562c19540e8397081b182
DjB0x4c2fb1eacd639864ba70c0f52f69f6b0628133d02b73f46fb309b834daf40078
DjB0xfb785081409d43fbcf5c53cc9c7b456b965ba33f2b6fbeb324bcc8b827cd944d
BC3Mix + BC3Hash rough reference implementations | plaintext = xz-compressed tarball of directory with Python scripts and 1 textual log-file enclosed | encrypted with OpenSSL
vout=3 -> encryption CLI arguments | vout=4 -> SHA-256d hash of the plaintext | vout=5 + vout=6 -> signatures over the ciphertext produced with BC3Dev's OpenPGP signing keys | vout=7 -> ciphertext of the xz-compressed tarball itself
MjKThe symmetric encryption/decryption password will be provided in a later TX
Bj@openssl enc -aes-256-cbc -salt -iter 21000000 -md sha256 -pbkdf2
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEWemvZQOU4p50/3RzBLw4q76fph0FAmrBwZsACgkQBLw4q76f
ph38jRAAgl/MwSWkWfVnrWg/wH3qNK+Lx0kAWv28Y65ABA33UBSy2ZkWtJ8aN1hy
b7pE4OmL9khZtL3k+f99HByB/GroD7T+wBctfUmjGjTiUoU7XsP4F3UxDvCdykkh
At16ovvO/zuFSW97XbxXSykpsPkNalVO2VELmUlYFSLPL81lTtE5qx6hStW3r9Kh
ydQe2pUiteVt5YZMMfbEVLLqV/mhQyMvhTDG4Hbmy57siqzo+bUWXhC6hy/FV/2o
ieUrhgdu45J5ZlNtekc2HvRZmOGoS9HJLPzdSaBpWMmCVw/4RFrQr0Wd1MHyg3Jj
FIHDujtDP0NbgXHZkm/1zvZb2wELY5vhgIGCx90qIx8XRya1OlVDr72GzZW3LzjB
aCFP0B/lRa9H6Jq2S/XhKJW+xywl+0APQ3H/XN03jPICsYFyY3CWtxm8PuMe5smT
qoJvqORRmFZGzVcsABqJOvE/j3FiuR8qlvGUvYlfSco3J0Yhhz+4AoEBPsn73753
wnSA4EaleXPgvjrpQto5HGuBfyY8/MvvzUlohNKZr8M0cIigWv8Rb9pOgRtCa2o9
8nypSDjS+CwBhm9G/+9poBcIFdFCPEL6Et8mGOZxY8Rduba05d+4WsYxBd7//zrO
sUEjWwkCl0sJrVL9T7SFH+68rhJRVul935QLrHtB8P31DGfl88E=
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNATURE-----
iKcEABMJAC8WIQTZaKbwh8YXCwkrkAIPDcoDEzprhgUCasHB5xEcYmMzZGV2QHBy
b3Rvbi5tZQAKCRAPDcoDEzprhnpRAX9x36qrMbxfaFqqiFgfF6L7DP5FND4pbPHv
tMMUoliWPF3RsGSJ255tv6drNeFsStsBf3+h7wtQS3CGVhz0DCSBbDOtW472eqm0
S60/NVTthqXThtDfTzXCctnBOkEwSKwBjg==
-----END PGP SIGNATURE-----
DjB0x6784e6e3c80909a9b51cde9587651c319bbe49f9854b1049218082399cd20eee
DjB0x5325d3a1bd9ecb829f49a955d3855ce8f423b12657c9e586f7a1aed0caa5164c
DjB0xdc1e0c259d0efa1ec3b986f8d5995efe67f0921fec3a0e04367d180ebd1cca2b
DjB0x5b1aff90ab5cba0ce8cc2d87a6ce3867e92f9ba46b5fbd76ff9df265eab281bc
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"ordi","amt":"1366"}h!
DjB0x8bc686f1fb26a04d576ba3beb7943b7bc02477d4b6acd34ca5b7765dbd4614cf
DjB0xf9fb966b18d48d4e1980ecb614041128a470e5f58ac51e9173909af25166488b
DjB0x46c418b54546b6a603f13cc242f5e510d1b90398e2f0013cb137f51ee5a3264f
DjB0x6a9fcfbbb2f0ecde9292c5e21bb8294350ffcbb6cc20749b7edd07faf8207d2a
DjB0x82a268fc98d464e3b2dea1a2964c4909985264af6d9a2deed3355856cbd10e6c
DjB0xdc83fbe9412843b96bea4fc672ee1eaae015137b86d7b3e6a9f5cf9b5915007c
DjB0xe34de13e2733fe8b7b0efcdc77cf1727d0f966f3a8c73573bfadc66cc8859543
FjDOUT:5ADAF68B61E41C5EA27CC43DDAB8EC27FEDF5624D9CEB0A115A37D700F97D8F8
FjDOUT:C70A3796D574C01F1E37EB46478977BDDD0FECF90065E2E3BAC9EC799B7894A0
=j;d12:to:USDT(BSC):0x685234fa366aeb31C09462878DA8F3D701E523F4
6j4SVp:to:USDT(TRON):TVjoWJugiup6LWy6AfG9cTpiJxm2Xysg486(
6j41HQ:to:USDT(TRON):TSYgy7X9PPKAz7dZaRmqac1Zdb4nxCfbLx
/j-uIg:to:TRX:TDQ4owPn1j8PaBaj7ugPsSpqoXSea8fVvfjm
DjB0xfba94baac0b3ff5164f0f2ab5ea07086d93321ad2ddaa670a912b772f2cae5ae
/j-yVT:to:TRX:TABK2Z9cVWLb6cmLtjbfFZrvbBTvfMTGNV
2j0to:USDT(TRON):TA8hkJ1Et4ctZG2WbhZeTpMzh1uRndaB8n
=j;jkj:to:USDT(BSC):0xe885d5755ecB2C540573cDB5de78DC3423469f72
6j4PGY:to:USDT(TRON):TMAwAhsHeYCMAAMas6v8Vx4dkpqnbgdKuf
6j49yj:to:USDT(TRON):TR9fVxLD5qxHPdgvn4V8gpq9JWn8QiG7vCKU
{jLx0xdf558ba27dd37dba925a4e727230f3f22c09cf7697e202e6967cbcfe84bbd8ef|depositor=bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc|
>j<from:169USDT(BSC):0x1c992Bc4B231ba85C4D80Af5D344a12692dF0929v
FjD{"p":"crc-20","op":"transfer","tick":"BURN","amt":"348411502065256"}J
>stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":26045}
>stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":70061}
>stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":26045}
>stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":16218}
>stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":54153}
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":115867J
=stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":5082}
>stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":26045}
=stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":6489}
=stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":2549}
=stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":4886}
=stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":6642}
=stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":6533}
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":119498J
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":125259J
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":336518J
>stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":26777}
>stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":89266}
>stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":23525}
>stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mske","amt":72984}
?stamp:{"p":"src-20","op":"tranJ
 sfer","tick":"mskk","amt":500000J
CjA{"p":"crc-20","op":"transfer","tick":"BONS","amt":"200000000000"}J
FjD{"p":"crc-20","op":"transfer","tick":"BCAT","amt":"300000000000000"}J
DjB0x80395ba34d170b0b402c6d70ff220064613fff0069660b327bc1b9ad5414ce443
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"AI.BT","amt":"30"}h!
text/plain;charset=utf-8
8{"p":"brc-20","op":"transfer","tick":"BIUR","amt":"300"}h!
text/plain;charset=utf-8
@{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"28500000000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"500"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"500"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"500"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"TRUM","amt":"1000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"500"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"8"}h!
text/plain;charset=utf-8
6{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"8"}h!
<!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><style>*{margin:0;padding:0;box-sizing:border-box}html,body{width:100%;height:100%;overflow:hidden}body{display:flex;align-items:center;justify-content:center;font-family:serif;background:#E4D8C7}.container{position:relative;width:min(90%,900px);padding:6vmin;border:max(0.5px,0.05vmin) solid #A99A8D;border-radius:3vmin;text-align:center;animation:fadeIn 1.5s ease;backdrop-filter:blur(2pxM
);background:#493536}.container::before{content:"";position:absolute;inset:2vmin;border:max(1px,0.08vmin) dashed #A99A8D;border-radius:5vmin;pointer-events:none}h1{font-family:"Baskerville","Times New Roman",serif;font-size:clamp(0.3rem,10vw,4rem);font-weight:400;line-height:0.95;letter-spacing:0.02em;color:#F1E9DC;text-align:center;white-space:normal;overflow-wrap:break-word}.subtitle{text-align:center;margin-top:3.2vmin;font-size:2vmin;letter-spacing:0.6vmin;transform:translateX(0.5vmin);text-transform:uppercase;M
color:#D8CBB9;opacity:0.95}.line{width:6vmin;max-width:60px;height:max(1px,0.1vmin);margin:3.2vmin auto;background:#B9AA99;opacity:0.8}.author{font-size:2.5vmin;letter-spacing:0.22vmin;color:#D8CBB9;opacity:0.95}.year{margin-top:1.2vmin;font-size:2vmin;letter-spacing:0.35vmin;color:#D8CBB9;opacity:0.95}@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}</style></head><body><div class="container"><h1>Confluencias</h1><div class="subtitle">Forma, color y transformaci
n<Ly/div><div class="line"></div><div class="author">by Fernando Cabral</div><div class="year">2026</div></div></body></html>h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
7{"p":"brc-20","op":"transfer","tick":"ATMC","amt":"20"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"4369250000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"7425000000"}h!
text/plain;charset=utf-8
?{"p":"brc-20","op":"transfer","tick":"VRQQ","amt":"5368000000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"1000"}h!
text/plain;charset=utf-8
;{"p":"brc-20","op":"transfer","tick":"shhhhh","amt":"2000"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!
text/plain;charset=utf-8
9{"p":"brc-20","op":"transfer","tick":"Zeusv","amt":"300"}h!

blk00000.txt blk00001.txt blk00002.txt blk00003.txt blk00004.txt blk00005.txt blk00006.txt blk00007.txt blk00008.txt blk00009.txt blk00010.txt blk00011.txt blk00012.txt blk00013.txt blk00014.txt blk00015.txt blk00016.txt blk00017.txt blk00018.txt blk00019.txt blk00020.txt blk00021.txt blk00022.txt blk00023.txt blk00024.txt blk00025.txt blk00026.txt blk00027.txt blk00028.txt blk00029.txt blk00030.txt blk00031.txt blk00032.txt blk00033.txt blk00034.txt blk00035.txt blk00036.txt blk00037.txt blk00038.txt blk00039.txt blk00040.txt blk00041.txt blk00042.txt blk00043.txt blk00044.txt blk00045.txt blk00046.txt blk00047.txt blk00048.txt blk00049.txt blk00050.txt blk00051.txt blk00052.txt blk00053.txt blk00054.txt blk00055.txt blk00056.txt blk00057.txt blk00058.txt blk00059.txt blk00060.txt blk00061.txt blk00062.txt blk00063.txt blk00064.txt blk00065.txt blk00066.txt blk00067.txt blk00068.txt blk00069.txt blk00070.txt blk00071.txt blk00072.txt blk00073.txt blk00074.txt blk00075.txt blk00076.txt blk00077.txt blk00078.txt blk00079.txt blk00080.txt blk00081.txt blk00082.txt blk00083.txt blk00084.txt blk00085.txt blk00086.txt blk00087.txt blk00088.txt blk00089.txt blk00090.txt blk00091.txt blk00092.txt blk00093.txt blk00094.txt blk00095.txt blk00096.txt blk00097.txt blk00098.txt blk00099.txt blk00100.txt blk00101.txt blk00102.txt blk00103.txt blk00104.txt blk00105.txt blk00106.txt blk00107.txt blk00108.txt blk00109.txt blk00110.txt blk00111.txt blk00112.txt blk00113.txt blk00114.txt blk00115.txt blk00116.txt blk00117.txt blk00118.txt blk00119.txt blk00120.txt blk00121.txt blk00122.txt blk00123.txt blk00124.txt blk00125.txt blk00126.txt blk00127.txt blk00128.txt blk00129.txt blk00130.txt blk00131.txt blk00132.txt blk00133.txt blk00134.txt blk00135.txt blk00136.txt blk00137.txt blk00138.txt blk00139.txt blk00140.txt blk00141.txt blk00142.txt blk00143.txt blk00144.txt blk00145.txt blk00146.txt blk00147.txt blk00148.txt blk00149.txt blk00150.txt blk00151.txt blk00152.txt blk00153.txt blk00154.txt blk00155.txt blk00156.txt blk00157.txt blk00158.txt blk00159.txt blk00160.txt blk00161.txt blk00162.txt blk00163.txt blk00164.txt blk00165.txt blk00166.txt blk00167.txt blk00168.txt blk00169.txt blk00170.txt blk00171.txt blk00172.txt blk00173.txt blk00174.txt blk00175.txt blk00176.txt blk00177.txt blk00178.txt blk00179.txt blk00180.txt blk00181.txt blk00182.txt blk00183.txt blk00184.txt blk00185.txt blk00186.txt blk00187.txt blk00188.txt blk00189.txt blk00190.txt blk00191.txt blk00192.txt blk00193.txt blk00194.txt blk00195.txt blk00196.txt blk00197.txt blk00198.txt blk00199.txt blk00200.txt blk00201.txt blk00202.txt blk00203.txt blk00204.txt blk00205.txt blk00206.txt blk00207.txt blk00208.txt blk00209.txt blk00210.txt blk00211.txt blk00212.txt blk00213.txt blk00214.txt blk00215.txt blk00216.txt blk00217.txt blk00218.txt blk00219.txt blk00220.txt blk00221.txt blk00222.txt blk00223.txt blk00224.txt blk00225.txt blk00226.txt blk00227.txt blk00228.txt blk00229.txt blk00230.txt blk00231.txt blk00232.txt blk00233.txt blk00234.txt blk00235.txt blk00236.txt blk00237.txt blk00238.txt blk00239.txt blk00240.txt blk00241.txt blk00242.txt blk00243.txt blk00244.txt blk00245.txt blk00246.txt blk00247.txt blk00248.txt blk00249.txt blk00250.txt blk00251.txt blk00252.txt blk00253.txt blk00254.txt blk00255.txt blk00256.txt blk00257.txt blk00258.txt blk00259.txt blk00260.txt blk00261.txt blk00262.txt blk00263.txt blk00264.txt blk00265.txt blk00266.txt blk00267.txt blk00268.txt blk00269.txt blk00270.txt blk00271.txt blk00272.txt blk00273.txt blk00274.txt blk00275.txt blk00276.txt blk00277.txt blk00278.txt blk00279.txt blk00280.txt blk00281.txt blk00282.txt blk00283.txt blk00284.txt blk00285.txt blk00286.txt blk00287.txt blk00288.txt blk00289.txt blk00290.txt blk00291.txt blk00292.txt blk00293.txt blk00294.txt blk00295.txt blk00296.txt blk00297.txt blk00298.txt blk00299.txt blk00300.txt blk00301.txt blk00302.txt blk00303.txt blk00304.txt blk00305.txt blk00306.txt blk00307.txt blk00308.txt blk00309.txt blk00310.txt blk00311.txt blk00312.txt blk00313.txt blk00314.txt blk00315.txt blk00316.txt blk00317.txt blk00318.txt blk00319.txt blk00320.txt blk00321.txt blk00322.txt blk00323.txt blk00324.txt blk00325.txt blk00326.txt blk00327.txt blk00328.txt blk00329.txt blk00330.txt blk00331.txt blk00332.txt blk00333.txt blk00334.txt blk00335.txt blk00336.txt blk00337.txt blk00338.txt blk00339.txt blk00340.txt blk00341.txt blk00342.txt blk00343.txt blk00344.txt blk00345.txt blk00346.txt blk00347.txt blk00348.txt blk00349.txt blk00350.txt blk00351.txt blk00352.txt blk00353.txt blk00354.txt blk00355.txt blk00356.txt blk00357.txt blk00358.txt blk00359.txt blk00360.txt blk00361.txt blk00362.txt blk00363.txt blk00364.txt blk00365.txt blk00366.txt blk00367.txt blk00368.txt blk00369.txt blk00370.txt blk00371.txt blk00372.txt blk00373.txt blk00374.txt blk00375.txt blk00376.txt blk00377.txt blk00378.txt blk00379.txt blk00380.txt blk00381.txt blk00382.txt blk00383.txt blk00384.txt blk00385.txt blk00386.txt blk00387.txt blk00388.txt blk00389.txt blk00390.txt blk00391.txt blk00392.txt blk00393.txt blk00394.txt blk00395.txt blk00396.txt blk00397.txt blk00398.txt blk00399.txt blk00400.txt blk00401.txt blk00402.txt blk00403.txt blk00404.txt blk00405.txt blk00406.txt blk00407.txt blk00408.txt blk00409.txt blk00410.txt blk00411.txt blk00412.txt blk00413.txt blk00414.txt blk00415.txt blk00416.txt blk00417.txt blk00418.txt blk00419.txt blk00420.txt blk00421.txt blk00422.txt blk00423.txt blk00424.txt blk00425.txt blk00426.txt blk00427.txt blk00428.txt blk00429.txt blk00430.txt blk00431.txt blk00432.txt blk00433.txt blk00434.txt blk00435.txt blk00436.txt blk00437.txt blk00438.txt blk00439.txt blk00440.txt blk00441.txt blk00442.txt blk00443.txt blk00444.txt blk00445.txt blk00446.txt blk00447.txt blk00448.txt blk00449.txt blk00450.txt blk00451.txt blk00452.txt blk00453.txt blk00454.txt blk00455.txt blk00456.txt blk00457.txt blk00458.txt blk00459.txt blk00460.txt blk00461.txt blk00462.txt blk00463.txt blk00464.txt blk00465.txt blk00466.txt blk00467.txt blk00468.txt blk00469.txt blk00470.txt blk00471.txt blk00472.txt blk00473.txt blk00474.txt blk00475.txt blk00476.txt blk00477.txt blk00478.txt blk00479.txt blk00480.txt blk00481.txt blk00482.txt blk00483.txt blk00484.txt blk00485.txt blk00486.txt blk00487.txt blk00488.txt blk00489.txt blk00490.txt blk00491.txt blk00492.txt blk00493.txt blk00494.txt blk00495.txt blk00496.txt blk00497.txt blk00498.txt blk00499.txt blk00500.txt blk00501.txt blk00502.txt blk00503.txt blk00504.txt blk00505.txt blk00506.txt blk00507.txt blk00508.txt blk00509.txt blk00510.txt blk00511.txt blk00512.txt blk00513.txt blk00514.txt blk00515.txt blk00516.txt blk00517.txt blk00518.txt blk00519.txt blk00520.txt blk00521.txt blk00522.txt blk00523.txt blk00524.txt blk00525.txt blk00526.txt blk00527.txt blk00528.txt blk00529.txt blk00530.txt blk00531.txt blk00532.txt blk00533.txt blk00534.txt blk00535.txt blk00536.txt blk00537.txt blk00538.txt blk00539.txt blk00540.txt blk00541.txt blk00542.txt blk00543.txt blk00544.txt blk00545.txt blk00546.txt blk00547.txt blk00548.txt blk00549.txt blk00550.txt blk00551.txt blk00552.txt blk00553.txt blk00554.txt blk00555.txt blk00556.txt blk00557.txt blk00558.txt blk00559.txt blk00560.txt blk00561.txt blk00562.txt blk00563.txt blk00564.txt blk00565.txt blk00566.txt blk00567.txt blk00568.txt blk00569.txt blk00570.txt blk00571.txt blk00572.txt blk00573.txt blk00574.txt blk00575.txt blk00576.txt blk00577.txt blk00578.txt blk00579.txt blk00580.txt blk00581.txt blk00582.txt blk00583.txt blk00584.txt blk00585.txt blk00586.txt blk00587.txt blk00588.txt blk00589.txt blk00590.txt blk00591.txt blk00592.txt blk00593.txt blk00594.txt blk00595.txt blk00596.txt blk00597.txt blk00598.txt blk00599.txt blk00600.txt blk00601.txt blk00602.txt blk00603.txt blk00604.txt blk00605.txt blk00606.txt blk00607.txt blk00608.txt blk00609.txt blk00610.txt blk00611.txt blk00612.txt blk00613.txt blk00614.txt blk00615.txt blk00616.txt blk00617.txt blk00618.txt blk00619.txt blk00620.txt blk00621.txt blk00622.txt blk00623.txt blk00624.txt blk00625.txt blk00626.txt blk00627.txt blk00628.txt blk00629.txt blk00630.txt blk00631.txt blk00632.txt blk00633.txt blk00634.txt blk00635.txt blk00636.txt blk00637.txt blk00638.txt blk00639.txt blk00640.txt blk00641.txt blk00642.txt blk00643.txt blk00644.txt blk00645.txt blk00646.txt blk00647.txt blk00648.txt blk00649.txt blk00650.txt blk00651.txt blk00652.txt blk00653.txt blk00654.txt blk00655.txt blk00656.txt blk00657.txt blk00658.txt blk00659.txt blk00660.txt blk00661.txt blk00662.txt blk00663.txt blk00664.txt blk00665.txt blk00666.txt blk00667.txt blk00668.txt blk00669.txt blk00670.txt blk00671.txt blk00672.txt blk00673.txt blk00674.txt blk00675.txt blk00676.txt blk00677.txt blk00678.txt blk00679.txt blk00680.txt blk00681.txt blk00682.txt blk00683.txt blk00684.txt blk00685.txt blk00686.txt blk00687.txt blk00688.txt blk00689.txt blk00690.txt blk00691.txt blk00692.txt blk00693.txt blk00694.txt blk00695.txt blk00696.txt blk00697.txt blk00698.txt blk00699.txt blk00700.txt blk00701.txt blk00702.txt blk00703.txt blk00704.txt blk00705.txt blk00706.txt blk00707.txt blk00708.txt blk00709.txt blk00710.txt blk00711.txt blk00712.txt blk00713.txt blk00714.txt blk00715.txt blk00716.txt blk00717.txt blk00718.txt blk00719.txt blk00720.txt blk00721.txt blk00722.txt blk00723.txt blk00724.txt blk00725.txt blk00726.txt blk00727.txt blk00728.txt blk00729.txt blk00730.txt blk00731.txt blk00732.txt blk00733.txt blk00734.txt blk00735.txt blk00736.txt blk00737.txt blk00738.txt blk00739.txt blk00740.txt blk00741.txt blk00742.txt blk00743.txt blk00744.txt blk00745.txt blk00746.txt blk00747.txt blk00748.txt blk00749.txt blk00750.txt blk00751.txt blk00752.txt blk00753.txt blk00754.txt blk00755.txt blk00756.txt blk00757.txt blk00758.txt blk00759.txt blk00760.txt blk00761.txt blk00762.txt blk00763.txt blk00764.txt blk00765.txt blk00766.txt blk00767.txt blk00768.txt blk00769.txt blk00770.txt blk00771.txt blk00772.txt blk00773.txt blk00774.txt blk00775.txt blk00776.txt blk00777.txt blk00778.txt blk00779.txt blk00780.txt blk00781.txt blk00782.txt blk00783.txt blk00784.txt blk00785.txt blk00786.txt blk00787.txt blk00788.txt blk00789.txt blk00790.txt blk00791.txt blk00792.txt blk00793.txt blk00794.txt blk00795.txt blk00796.txt blk00797.txt blk00798.txt blk00799.txt blk00800.txt blk00801.txt blk00802.txt blk00803.txt blk00804.txt blk00805.txt blk00806.txt blk00807.txt blk00808.txt blk00809.txt blk00810.txt blk00811.txt blk00812.txt blk00813.txt blk00814.txt blk00815.txt blk00816.txt blk00817.txt blk00818.txt blk00819.txt blk00820.txt blk00821.txt blk00822.txt blk00823.txt blk00824.txt blk00825.txt blk00826.txt blk00827.txt blk00828.txt blk00829.txt blk00830.txt blk00831.txt blk00832.txt blk00833.txt blk00834.txt blk00835.txt blk00836.txt blk00837.txt blk00838.txt blk00839.txt blk00840.txt blk00841.txt blk00842.txt blk00843.txt blk00844.txt blk00845.txt blk00846.txt blk00847.txt blk00848.txt blk00849.txt blk00850.txt blk00851.txt blk00852.txt blk00853.txt blk00854.txt blk00855.txt blk00856.txt blk00857.txt blk00858.txt blk00859.txt blk00860.txt blk00861.txt blk00862.txt blk00863.txt blk00864.txt blk00865.txt blk00866.txt blk00867.txt blk00868.txt blk00869.txt blk00870.txt blk00871.txt blk00872.txt blk00873.txt blk00874.txt blk00875.txt blk00876.txt blk00877.txt blk00878.txt blk00879.txt blk00880.txt blk00881.txt blk00882.txt blk00883.txt blk00884.txt blk00885.txt blk00886.txt blk00887.txt blk00888.txt blk00889.txt blk00890.txt blk00891.txt blk00892.txt blk00893.txt blk00894.txt blk00895.txt blk00896.txt blk00897.txt blk00898.txt blk00899.txt blk00900.txt blk00901.txt blk00902.txt blk00903.txt blk00904.txt blk00905.txt blk00906.txt blk00907.txt blk00908.txt blk00909.txt blk00910.txt blk00911.txt blk00912.txt blk00913.txt blk00914.txt blk00915.txt blk00916.txt blk00917.txt blk00918.txt blk00919.txt blk00920.txt blk00921.txt blk00922.txt blk00923.txt blk00924.txt blk00925.txt blk00926.txt blk00927.txt blk00928.txt blk00929.txt blk00930.txt blk00931.txt blk00932.txt blk00933.txt blk00934.txt blk00935.txt blk00936.txt blk00937.txt blk00938.txt blk00939.txt blk00940.txt blk00941.txt blk00942.txt blk00943.txt blk00944.txt blk00945.txt blk00946.txt blk00947.txt blk00948.txt blk00949.txt blk00950.txt blk00951.txt blk00952.txt blk00953.txt blk00954.txt blk00955.txt blk00956.txt blk00957.txt blk00958.txt blk00959.txt blk00960.txt blk00961.txt blk00962.txt blk00963.txt blk00964.txt blk00965.txt blk00966.txt blk00967.txt blk00968.txt blk00969.txt blk00970.txt blk00971.txt blk00972.txt blk00973.txt blk00974.txt blk00975.txt blk00976.txt blk00977.txt blk00978.txt blk00979.txt blk00980.txt blk00981.txt blk00982.txt blk00983.txt blk00984.txt blk00985.txt blk00986.txt blk00987.txt blk00988.txt blk00989.txt blk00990.txt blk00991.txt blk00992.txt blk00993.txt blk00994.txt blk00995.txt blk00996.txt blk00997.txt blk00998.txt blk00999.txt blk01000.txt blk01001.txt blk01002.txt blk01003.txt blk01004.txt blk01005.txt blk01006.txt blk01007.txt blk01008.txt blk01009.txt blk01010.txt blk01011.txt blk01012.txt blk01013.txt blk01014.txt blk01015.txt blk01016.txt blk01017.txt blk01018.txt blk01019.txt blk01020.txt blk01021.txt blk01022.txt blk01023.txt blk01024.txt blk01025.txt blk01026.txt blk01027.txt blk01028.txt blk01029.txt blk01030.txt blk01031.txt blk01032.txt blk01033.txt blk01034.txt blk01035.txt blk01036.txt blk01037.txt blk01038.txt blk01039.txt blk01040.txt blk01041.txt blk01042.txt blk01043.txt blk01044.txt blk01045.txt blk01046.txt blk01047.txt blk01048.txt blk01049.txt blk01050.txt blk01051.txt blk01052.txt blk01053.txt blk01054.txt blk01055.txt blk01056.txt blk01057.txt blk01058.txt blk01059.txt blk01060.txt blk01061.txt blk01062.txt blk01063.txt blk01064.txt blk01065.txt blk01066.txt blk01067.txt blk01068.txt blk01069.txt blk01070.txt blk01071.txt blk01072.txt blk01073.txt blk01074.txt blk01075.txt blk01076.txt blk01077.txt blk01078.txt blk01079.txt blk01080.txt blk01081.txt blk01082.txt blk01083.txt blk01084.txt blk01085.txt blk01086.txt blk01087.txt blk01088.txt blk01089.txt blk01090.txt blk01091.txt blk01092.txt blk01093.txt blk01094.txt blk01095.txt blk01096.txt blk01097.txt blk01098.txt blk01099.txt blk01100.txt blk01101.txt blk01102.txt blk01103.txt blk01104.txt blk01105.txt blk01106.txt blk01107.txt blk01108.txt blk01109.txt blk01110.txt blk01111.txt blk01112.txt blk01113.txt blk01114.txt blk01115.txt blk01116.txt blk01117.txt blk01118.txt blk01119.txt blk01120.txt blk01121.txt blk01122.txt blk01123.txt blk01124.txt blk01125.txt blk01126.txt blk01127.txt blk01128.txt blk01129.txt blk01130.txt blk01131.txt blk01132.txt blk01133.txt blk01134.txt blk01135.txt blk01136.txt blk01137.txt blk01138.txt blk01139.txt blk01140.txt blk01141.txt blk01142.txt blk01143.txt blk01144.txt blk01145.txt blk01146.txt blk01147.txt blk01148.txt blk01149.txt blk01150.txt blk01151.txt blk01152.txt blk01153.txt blk01154.txt blk01155.txt blk01156.txt blk01157.txt blk01158.txt blk01159.txt blk01160.txt blk01161.txt blk01162.txt blk01163.txt blk01164.txt blk01165.txt blk01166.txt blk01167.txt blk01168.txt blk01169.txt blk01170.txt blk01171.txt blk01172.txt blk01173.txt blk01174.txt blk01175.txt blk01176.txt blk01177.txt blk01178.txt blk01179.txt blk01180.txt blk01181.txt blk01182.txt blk01183.txt blk01184.txt blk01185.txt blk01186.txt blk01187.txt blk01188.txt blk01189.txt blk01190.txt blk01191.txt blk01192.txt blk01193.txt blk01194.txt blk01195.txt blk01196.txt blk01197.txt blk01198.txt blk01199.txt blk01200.txt blk01201.txt blk01202.txt blk01203.txt blk01204.txt blk01205.txt blk01206.txt blk01207.txt blk01208.txt blk01209.txt blk01210.txt blk01211.txt blk01212.txt blk01213.txt blk01214.txt blk01215.txt blk01216.txt blk01217.txt blk01218.txt blk01219.txt blk01220.txt blk01221.txt blk01222.txt blk01223.txt blk01224.txt blk01225.txt blk01226.txt blk01227.txt blk01228.txt blk01229.txt blk01230.txt blk01231.txt blk01232.txt blk01233.txt blk01234.txt blk01235.txt blk01236.txt blk01237.txt blk01238.txt blk01239.txt blk01240.txt blk01241.txt blk01242.txt blk01243.txt blk01244.txt blk01245.txt blk01246.txt blk01247.txt blk01248.txt blk01249.txt blk01250.txt blk01251.txt blk01252.txt blk01253.txt blk01254.txt blk01255.txt blk01256.txt blk01257.txt blk01258.txt blk01259.txt blk01260.txt blk01261.txt blk01262.txt blk01263.txt blk01264.txt blk01265.txt blk01266.txt blk01267.txt blk01268.txt blk01269.txt blk01270.txt blk01271.txt blk01272.txt blk01273.txt blk01274.txt blk01275.txt blk01276.txt blk01277.txt blk01278.txt blk01279.txt blk01280.txt blk01281.txt blk01282.txt blk01283.txt blk01284.txt blk01285.txt blk01286.txt blk01287.txt blk01288.txt blk01289.txt blk01290.txt blk01291.txt blk01292.txt blk01293.txt blk01294.txt blk01295.txt blk01296.txt blk01297.txt blk01298.txt blk01299.txt blk01300.txt blk01301.txt blk01302.txt blk01303.txt blk01304.txt blk01305.txt blk01306.txt blk01307.txt blk01308.txt blk01309.txt blk01310.txt blk01311.txt blk01312.txt blk01313.txt blk01314.txt blk01315.txt blk01316.txt blk01317.txt blk01318.txt blk01319.txt blk01320.txt blk01321.txt blk01322.txt blk01323.txt blk01324.txt blk01325.txt blk01326.txt blk01327.txt blk01328.txt blk01329.txt blk01330.txt blk01331.txt blk01332.txt blk01333.txt blk01334.txt blk01335.txt blk01336.txt blk01337.txt blk01338.txt blk01339.txt blk01340.txt blk01341.txt blk01342.txt blk01343.txt blk01344.txt blk01345.txt blk01346.txt blk01347.txt blk01348.txt blk01349.txt blk01350.txt blk01351.txt blk01352.txt blk01353.txt blk01354.txt blk01355.txt blk01356.txt blk01357.txt blk01358.txt blk01359.txt blk01360.txt blk01361.txt blk01362.txt blk01363.txt blk01364.txt blk01365.txt blk01366.txt blk01367.txt blk01368.txt blk01369.txt blk01370.txt blk01371.txt blk01372.txt blk01373.txt blk01374.txt blk01375.txt blk01376.txt blk01377.txt blk01378.txt blk01379.txt blk01380.txt blk01381.txt blk01382.txt blk01383.txt blk01384.txt blk01385.txt blk01386.txt blk01387.txt blk01388.txt blk01389.txt blk01390.txt blk01391.txt blk01392.txt blk01393.txt blk01394.txt blk01395.txt blk01396.txt blk01397.txt blk01398.txt blk01399.txt blk01400.txt blk01401.txt blk01402.txt blk01403.txt blk01404.txt blk01405.txt blk01406.txt blk01407.txt blk01408.txt blk01409.txt blk01410.txt blk01411.txt blk01412.txt blk01413.txt blk01414.txt blk01415.txt blk01416.txt blk01417.txt blk01418.txt blk01419.txt blk01420.txt blk01421.txt blk01422.txt blk01423.txt blk01424.txt blk01425.txt blk01426.txt blk01427.txt blk01428.txt blk01429.txt blk01430.txt blk01431.txt blk01432.txt blk01433.txt blk01434.txt blk01435.txt blk01436.txt blk01437.txt blk01438.txt blk01439.txt blk01440.txt blk01441.txt blk01442.txt blk01443.txt blk01444.txt blk01445.txt blk01446.txt blk01447.txt blk01448.txt blk01449.txt blk01450.txt blk01451.txt blk01452.txt blk01453.txt blk01454.txt blk01455.txt blk01456.txt blk01457.txt blk01458.txt blk01459.txt blk01460.txt blk01461.txt blk01462.txt blk01463.txt blk01464.txt blk01465.txt blk01466.txt blk01467.txt blk01468.txt blk01469.txt blk01470.txt blk01471.txt blk01472.txt blk01473.txt blk01474.txt blk01475.txt blk01476.txt blk01477.txt blk01478.txt blk01479.txt blk01480.txt blk01481.txt blk01482.txt blk01483.txt blk01484.txt blk01485.txt blk01486.txt blk01487.txt blk01488.txt blk01489.txt blk01490.txt blk01491.txt blk01492.txt blk01493.txt blk01494.txt blk01495.txt blk01496.txt blk01497.txt blk01498.txt blk01499.txt blk01500.txt blk01501.txt blk01502.txt blk01503.txt blk01504.txt blk01505.txt blk01506.txt blk01507.txt blk01508.txt blk01509.txt blk01510.txt blk01511.txt blk01512.txt blk01513.txt blk01514.txt blk01515.txt blk01516.txt blk01517.txt blk01518.txt blk01519.txt blk01520.txt blk01521.txt blk01522.txt blk01523.txt blk01524.txt blk01525.txt blk01526.txt blk01527.txt blk01528.txt blk01529.txt blk01530.txt blk01531.txt blk01532.txt blk01533.txt blk01534.txt blk01535.txt blk01536.txt blk01537.txt blk01538.txt blk01539.txt blk01540.txt blk01541.txt blk01542.txt blk01543.txt blk01544.txt blk01545.txt blk01546.txt blk01547.txt blk01548.txt blk01549.txt blk01550.txt blk01551.txt blk01552.txt blk01553.txt blk01554.txt blk01555.txt blk01556.txt blk01557.txt blk01558.txt blk01559.txt blk01560.txt blk01561.txt blk01562.txt blk01563.txt blk01564.txt blk01565.txt blk01566.txt blk01567.txt blk01568.txt blk01569.txt blk01570.txt blk01571.txt blk01572.txt blk01573.txt blk01574.txt blk01575.txt blk01576.txt blk01577.txt blk01578.txt blk01579.txt blk01580.txt blk01581.txt blk01582.txt blk01583.txt blk01584.txt blk01585.txt blk01586.txt blk01587.txt blk01588.txt blk01589.txt blk01590.txt blk01591.txt blk01592.txt blk01593.txt blk01594.txt blk01595.txt blk01596.txt blk01597.txt blk01598.txt blk01599.txt blk01600.txt blk01601.txt blk01602.txt blk01603.txt blk01604.txt blk01605.txt blk01606.txt blk01607.txt blk01608.txt blk01609.txt blk01610.txt blk01611.txt blk01612.txt blk01613.txt blk01614.txt blk01615.txt blk01616.txt blk01617.txt blk01618.txt blk01619.txt blk01620.txt blk01621.txt blk01622.txt blk01623.txt blk01624.txt blk01625.txt blk01626.txt blk01627.txt blk01628.txt blk01629.txt blk01630.txt blk01631.txt blk01632.txt blk01633.txt blk01634.txt blk01635.txt blk01636.txt blk01637.txt blk01638.txt blk01639.txt blk01640.txt blk01641.txt blk01642.txt blk01643.txt blk01644.txt blk01645.txt blk01646.txt blk01647.txt blk01648.txt blk01649.txt blk01650.txt blk01651.txt blk01652.txt blk01653.txt blk01654.txt blk01655.txt blk01656.txt blk01657.txt blk01658.txt blk01659.txt blk01660.txt blk01661.txt blk01662.txt blk01663.txt blk01664.txt blk01665.txt blk01666.txt blk01667.txt blk01668.txt blk01669.txt blk01670.txt blk01671.txt blk01672.txt blk01673.txt blk01674.txt blk01675.txt blk01676.txt blk01677.txt blk01678.txt blk01679.txt blk01680.txt blk01681.txt blk01682.txt blk01683.txt blk01684.txt blk01685.txt blk01686.txt blk01687.txt blk01688.txt blk01689.txt blk01690.txt blk01691.txt blk01692.txt blk01693.txt blk01694.txt blk01695.txt blk01696.txt blk01697.txt blk01698.txt blk01699.txt blk01700.txt blk01701.txt blk01702.txt blk01703.txt blk01704.txt blk01705.txt blk01706.txt blk01707.txt blk01708.txt blk01709.txt blk01710.txt blk01711.txt blk01712.txt blk01713.txt blk01714.txt blk01715.txt blk01716.txt blk01717.txt blk01718.txt blk01719.txt blk01720.txt blk01721.txt blk01722.txt blk01723.txt blk01724.txt blk01725.txt blk01726.txt blk01727.txt blk01728.txt blk01729.txt blk01730.txt blk01731.txt blk01732.txt blk01733.txt blk01734.txt blk01735.txt blk01736.txt blk01737.txt blk01738.txt blk01739.txt blk01740.txt blk01741.txt blk01742.txt blk01743.txt blk01744.txt blk01745.txt blk01746.txt blk01747.txt blk01748.txt blk01749.txt blk01750.txt blk01751.txt blk01752.txt blk01753.txt blk01754.txt blk01755.txt blk01756.txt blk01757.txt blk01758.txt blk01759.txt blk01760.txt blk01761.txt blk01762.txt blk01763.txt blk01764.txt blk01765.txt blk01766.txt blk01767.txt blk01768.txt blk01769.txt blk01770.txt blk01771.txt blk01772.txt blk01773.txt blk01774.txt blk01775.txt blk01776.txt blk01777.txt blk01778.txt blk01779.txt blk01780.txt blk01781.txt blk01782.txt blk01783.txt blk01784.txt blk01785.txt blk01786.txt blk01787.txt blk01788.txt blk01789.txt blk01790.txt blk01791.txt blk01792.txt blk01793.txt blk01794.txt blk01795.txt blk01796.txt blk01797.txt blk01798.txt blk01799.txt blk01800.txt blk01801.txt blk01802.txt blk01803.txt blk01804.txt blk01805.txt blk01806.txt blk01807.txt blk01808.txt blk01809.txt blk01810.txt blk01811.txt blk01812.txt blk01813.txt blk01814.txt blk01815.txt blk01816.txt blk01817.txt blk01818.txt blk01819.txt blk01820.txt blk01821.txt blk01822.txt blk01823.txt blk01824.txt blk01825.txt blk01826.txt blk01827.txt blk01828.txt blk01829.txt blk01830.txt blk01831.txt blk01832.txt blk01833.txt blk01834.txt blk01835.txt blk01836.txt blk01837.txt blk01838.txt blk01839.txt blk01840.txt blk01841.txt blk01842.txt blk01843.txt blk01844.txt blk01845.txt blk01846.txt blk01847.txt blk01848.txt blk01849.txt blk01850.txt blk01851.txt blk01852.txt blk01853.txt blk01854.txt blk01855.txt blk01856.txt blk01857.txt blk01858.txt blk01859.txt blk01860.txt blk01861.txt blk01862.txt blk01863.txt blk01864.txt blk01865.txt blk01866.txt blk01867.txt blk01868.txt blk01869.txt blk01870.txt blk01871.txt blk01872.txt blk01873.txt blk01874.txt blk01875.txt blk01876.txt blk01877.txt blk01878.txt blk01879.txt blk01880.txt blk01881.txt blk01882.txt blk01883.txt blk01884.txt blk01885.txt blk01886.txt blk01887.txt blk01888.txt blk01889.txt blk01890.txt blk01891.txt blk01892.txt blk01893.txt blk01894.txt blk01895.txt blk01896.txt blk01897.txt blk01898.txt blk01899.txt blk01900.txt blk01901.txt blk01902.txt blk01903.txt blk01904.txt blk01905.txt blk01906.txt blk01907.txt blk01908.txt blk01909.txt blk01910.txt blk01911.txt blk01912.txt blk01913.txt blk01914.txt blk01915.txt blk01916.txt blk01917.txt blk01918.txt blk01919.txt blk01920.txt blk01921.txt blk01922.txt blk01923.txt blk01924.txt blk01925.txt blk01926.txt blk01927.txt blk01928.txt blk01929.txt blk01930.txt blk01931.txt blk01932.txt blk01933.txt blk01934.txt blk01935.txt blk01936.txt blk01937.txt blk01938.txt blk01939.txt blk01940.txt blk01941.txt blk01942.txt blk01943.txt blk01944.txt blk01945.txt blk01946.txt blk01947.txt blk01948.txt blk01949.txt blk01950.txt blk01951.txt blk01952.txt blk01953.txt blk01954.txt blk01955.txt blk01956.txt blk01957.txt blk01958.txt blk01959.txt blk01960.txt blk01961.txt blk01962.txt blk01963.txt blk01964.txt blk01965.txt blk01966.txt blk01967.txt blk01968.txt blk01969.txt blk01970.txt blk01971.txt blk01972.txt blk01973.txt blk01974.txt blk01975.txt blk01976.txt blk01977.txt blk01978.txt blk01979.txt blk01980.txt blk01981.txt blk01982.txt blk01983.txt blk01984.txt blk01985.txt blk01986.txt blk01987.txt blk01988.txt blk01989.txt blk01990.txt blk01991.txt blk01992.txt blk01993.txt blk01994.txt blk01995.txt blk01996.txt blk01997.txt blk01998.txt blk01999.txt blk02000.txt blk02001.txt blk02002.txt blk02003.txt blk02004.txt blk02005.txt blk02006.txt blk02007.txt blk02008.txt blk02009.txt blk02010.txt blk02011.txt blk02012.txt blk02013.txt blk02014.txt blk02015.txt blk02016.txt blk02017.txt blk02018.txt blk02019.txt blk02020.txt blk02021.txt blk02022.txt blk02023.txt blk02024.txt blk02025.txt blk02026.txt blk02027.txt blk02028.txt blk02029.txt blk02030.txt blk02031.txt blk02032.txt blk02033.txt blk02034.txt blk02035.txt blk02036.txt blk02037.txt blk02038.txt blk02039.txt blk02040.txt blk02041.txt blk02042.txt blk02043.txt blk02044.txt blk02045.txt blk02046.txt blk02047.txt blk02048.txt blk02049.txt blk02050.txt blk02051.txt blk02052.txt blk02053.txt blk02054.txt blk02055.txt blk02056.txt blk02057.txt blk02058.txt blk02059.txt blk02060.txt blk02061.txt blk02062.txt blk02063.txt blk02064.txt blk02065.txt blk02066.txt blk02067.txt blk02068.txt blk02069.txt blk02070.txt blk02071.txt blk02072.txt blk02073.txt blk02074.txt blk02075.txt blk02076.txt blk02077.txt blk02078.txt blk02079.txt blk02080.txt blk02081.txt blk02082.txt blk02083.txt blk02084.txt blk02085.txt blk02086.txt blk02087.txt blk02088.txt blk02089.txt blk02090.txt blk02091.txt blk02092.txt blk02093.txt blk02094.txt blk02095.txt blk02096.txt blk02097.txt blk02098.txt blk02099.txt blk02100.txt blk02101.txt blk02102.txt blk02103.txt blk02104.txt blk02105.txt blk02106.txt blk02107.txt blk02108.txt blk02109.txt blk02110.txt blk02111.txt blk02112.txt blk02113.txt blk02114.txt blk02115.txt blk02116.txt blk02117.txt blk02118.txt blk02119.txt blk02120.txt blk02121.txt blk02122.txt blk02123.txt blk02124.txt blk02125.txt blk02126.txt blk02127.txt blk02128.txt blk02129.txt blk02130.txt blk02131.txt blk02132.txt blk02133.txt blk02134.txt blk02135.txt blk02136.txt blk02137.txt blk02138.txt blk02139.txt blk02140.txt blk02141.txt blk02142.txt blk02143.txt blk02144.txt blk02145.txt blk02146.txt blk02147.txt blk02148.txt blk02149.txt blk02150.txt blk02151.txt blk02152.txt blk02153.txt blk02154.txt blk02155.txt blk02156.txt blk02157.txt blk02158.txt blk02159.txt blk02160.txt blk02161.txt blk02162.txt blk02163.txt blk02164.txt blk02165.txt blk02166.txt blk02167.txt blk02168.txt blk02169.txt blk02170.txt blk02171.txt blk02172.txt blk02173.txt blk02174.txt blk02175.txt blk02176.txt blk02177.txt blk02178.txt blk02179.txt blk02180.txt blk02181.txt blk02182.txt blk02183.txt blk02184.txt blk02185.txt blk02186.txt blk02187.txt blk02188.txt blk02189.txt blk02190.txt blk02191.txt blk02192.txt blk02193.txt blk02194.txt blk02195.txt blk02196.txt blk02197.txt blk02198.txt blk02199.txt blk02200.txt blk02201.txt blk02202.txt blk02203.txt blk02204.txt blk02205.txt blk02206.txt blk02207.txt blk02208.txt blk02209.txt blk02210.txt blk02211.txt blk02212.txt blk02213.txt blk02214.txt blk02215.txt blk02216.txt blk02217.txt blk02218.txt blk02219.txt blk02220.txt blk02221.txt blk02222.txt blk02223.txt blk02224.txt blk02225.txt blk02226.txt blk02227.txt blk02228.txt blk02229.txt blk02230.txt blk02231.txt blk02232.txt blk02233.txt blk02234.txt blk02235.txt blk02236.txt blk02237.txt blk02238.txt blk02239.txt blk02240.txt blk02241.txt blk02242.txt blk02243.txt blk02244.txt blk02245.txt blk02246.txt blk02247.txt blk02248.txt blk02249.txt blk02250.txt blk02251.txt blk02252.txt blk02253.txt blk02254.txt blk02255.txt blk02256.txt blk02257.txt blk02258.txt blk02259.txt blk02260.txt blk02261.txt blk02262.txt blk02263.txt blk02264.txt blk02265.txt blk02266.txt blk02267.txt blk02268.txt blk02269.txt blk02270.txt blk02271.txt blk02272.txt blk02273.txt blk02274.txt blk02275.txt blk02276.txt blk02277.txt blk02278.txt blk02279.txt blk02280.txt blk02281.txt blk02282.txt blk02283.txt blk02284.txt blk02285.txt blk02286.txt blk02287.txt blk02288.txt blk02289.txt blk02290.txt blk02291.txt blk02292.txt blk02293.txt blk02294.txt blk02295.txt blk02296.txt blk02297.txt blk02298.txt blk02299.txt blk02300.txt blk02301.txt blk02302.txt blk02303.txt blk02304.txt blk02305.txt blk02306.txt blk02307.txt blk02308.txt blk02309.txt blk02310.txt blk02311.txt blk02312.txt blk02313.txt blk02314.txt blk02315.txt blk02316.txt blk02317.txt blk02318.txt blk02319.txt blk02320.txt blk02321.txt blk02322.txt blk02323.txt blk02324.txt blk02325.txt blk02326.txt blk02327.txt blk02328.txt blk02329.txt blk02330.txt blk02331.txt blk02332.txt blk02333.txt blk02334.txt blk02335.txt blk02336.txt blk02337.txt blk02338.txt blk02339.txt blk02340.txt blk02341.txt blk02342.txt blk02343.txt blk02344.txt blk02345.txt blk02346.txt blk02347.txt blk02348.txt blk02349.txt blk02350.txt blk02351.txt blk02352.txt blk02353.txt blk02354.txt blk02355.txt blk02356.txt blk02357.txt blk02358.txt blk02359.txt blk02360.txt blk02361.txt blk02362.txt blk02363.txt blk02364.txt blk02365.txt blk02366.txt blk02367.txt blk02368.txt blk02369.txt blk02370.txt blk02371.txt blk02372.txt blk02373.txt blk02374.txt blk02375.txt blk02376.txt blk02377.txt blk02378.txt blk02379.txt blk02380.txt blk02381.txt blk02382.txt blk02383.txt blk02384.txt blk02385.txt blk02386.txt blk02387.txt blk02388.txt blk02389.txt blk02390.txt blk02391.txt blk02392.txt blk02393.txt blk02394.txt blk02395.txt blk02396.txt blk02397.txt blk02398.txt blk02399.txt blk02400.txt blk02401.txt blk02402.txt blk02403.txt blk02404.txt blk02405.txt blk02406.txt blk02407.txt blk02408.txt blk02409.txt blk02410.txt blk02411.txt blk02412.txt blk02413.txt blk02414.txt blk02415.txt blk02416.txt blk02417.txt blk02418.txt blk02419.txt blk02420.txt blk02421.txt blk02422.txt blk02423.txt blk02424.txt blk02425.txt blk02426.txt blk02427.txt blk02428.txt blk02429.txt blk02430.txt blk02431.txt blk02432.txt blk02433.txt blk02434.txt blk02435.txt blk02436.txt blk02437.txt blk02438.txt blk02439.txt blk02440.txt blk02441.txt blk02442.txt blk02443.txt blk02444.txt blk02445.txt blk02446.txt blk02447.txt blk02448.txt blk02449.txt blk02450.txt blk02451.txt blk02452.txt blk02453.txt blk02454.txt blk02455.txt blk02456.txt blk02457.txt blk02458.txt blk02459.txt blk02460.txt blk02461.txt blk02462.txt blk02463.txt blk02464.txt blk02465.txt blk02466.txt blk02467.txt blk02468.txt blk02469.txt blk02470.txt blk02471.txt blk02472.txt blk02473.txt blk02474.txt blk02475.txt blk02476.txt blk02477.txt blk02478.txt blk02479.txt blk02480.txt blk02481.txt blk02482.txt blk02483.txt blk02484.txt blk02485.txt blk02486.txt blk02487.txt blk02488.txt blk02489.txt blk02490.txt blk02491.txt blk02492.txt blk02493.txt blk02494.txt blk02495.txt blk02496.txt blk02497.txt blk02498.txt blk02499.txt blk02500.txt blk02501.txt blk02502.txt blk02503.txt blk02504.txt blk02505.txt blk02506.txt blk02507.txt blk02508.txt blk02509.txt blk02510.txt blk02511.txt blk02512.txt blk02513.txt blk02514.txt blk02515.txt blk02516.txt blk02517.txt blk02518.txt blk02519.txt blk02520.txt blk02521.txt blk02522.txt blk02523.txt blk02524.txt blk02525.txt blk02526.txt blk02527.txt blk02528.txt blk02529.txt blk02530.txt blk02531.txt blk02532.txt blk02533.txt blk02534.txt blk02535.txt blk02536.txt blk02537.txt blk02538.txt blk02539.txt blk02540.txt blk02541.txt blk02542.txt blk02543.txt blk02544.txt blk02545.txt blk02546.txt blk02547.txt blk02548.txt blk02549.txt blk02550.txt blk02551.txt blk02552.txt blk02553.txt blk02554.txt blk02555.txt blk02556.txt blk02557.txt blk02558.txt blk02559.txt blk02560.txt blk02561.txt blk02562.txt blk02563.txt blk02564.txt blk02565.txt blk02566.txt blk02567.txt blk02568.txt blk02569.txt blk02570.txt blk02571.txt blk02572.txt blk02573.txt blk02574.txt blk02575.txt blk02576.txt blk02577.txt blk02578.txt blk02579.txt blk02580.txt blk02581.txt blk02582.txt blk02583.txt blk02584.txt blk02585.txt blk02586.txt blk02587.txt blk02588.txt blk02589.txt blk02590.txt blk02591.txt blk02592.txt blk02593.txt blk02594.txt blk02595.txt blk02596.txt blk02597.txt blk02598.txt blk02599.txt blk02600.txt blk02601.txt blk02602.txt blk02603.txt blk02604.txt blk02605.txt blk02606.txt blk02607.txt blk02608.txt blk02609.txt blk02610.txt blk02611.txt blk02612.txt blk02613.txt blk02614.txt blk02615.txt blk02616.txt blk02617.txt blk02618.txt blk02619.txt blk02620.txt blk02621.txt blk02622.txt blk02623.txt blk02624.txt blk02625.txt blk02626.txt blk02627.txt blk02628.txt blk02629.txt blk02630.txt blk02631.txt blk02632.txt blk02633.txt blk02634.txt blk02635.txt blk02636.txt blk02637.txt blk02638.txt blk02639.txt blk02640.txt blk02641.txt blk02642.txt blk02643.txt blk02644.txt blk02645.txt blk02646.txt blk02647.txt blk02648.txt blk02649.txt blk02650.txt blk02651.txt blk02652.txt blk02653.txt blk02654.txt blk02655.txt blk02656.txt blk02657.txt blk02658.txt blk02659.txt blk02660.txt blk02661.txt blk02662.txt blk02663.txt blk02664.txt blk02665.txt blk02666.txt blk02667.txt blk02668.txt blk02669.txt blk02670.txt blk02671.txt blk02672.txt blk02673.txt blk02674.txt blk02675.txt blk02676.txt blk02677.txt blk02678.txt blk02679.txt blk02680.txt blk02681.txt blk02682.txt blk02683.txt blk02684.txt blk02685.txt blk02686.txt blk02687.txt blk02688.txt blk02689.txt blk02690.txt blk02691.txt blk02692.txt blk02693.txt blk02694.txt blk02695.txt blk02696.txt blk02697.txt blk02698.txt blk02699.txt blk02700.txt blk02701.txt blk02702.txt blk02703.txt blk02704.txt blk02705.txt blk02706.txt blk02707.txt blk02708.txt blk02709.txt blk02710.txt blk02711.txt blk02712.txt blk02713.txt blk02714.txt blk02715.txt blk02716.txt blk02717.txt blk02718.txt blk02719.txt blk02720.txt blk02721.txt blk02722.txt blk02723.txt blk02724.txt blk02725.txt blk02726.txt blk02727.txt blk02728.txt blk02729.txt blk02730.txt blk02731.txt blk02732.txt blk02733.txt blk02734.txt blk02735.txt blk02736.txt blk02737.txt blk02738.txt blk02739.txt blk02740.txt blk02741.txt blk02742.txt blk02743.txt blk02744.txt blk02745.txt blk02746.txt blk02747.txt blk02748.txt blk02749.txt blk02750.txt blk02751.txt blk02752.txt blk02753.txt blk02754.txt blk02755.txt blk02756.txt blk02757.txt blk02758.txt blk02759.txt blk02760.txt blk02761.txt blk02762.txt blk02763.txt blk02764.txt blk02765.txt blk02766.txt blk02767.txt blk02768.txt blk02769.txt blk02770.txt blk02771.txt blk02772.txt blk02773.txt blk02774.txt blk02775.txt blk02776.txt blk02777.txt blk02778.txt blk02779.txt blk02780.txt blk02781.txt blk02782.txt blk02783.txt blk02784.txt blk02785.txt blk02786.txt blk02787.txt blk02788.txt blk02789.txt blk02790.txt blk02791.txt blk02792.txt blk02793.txt blk02794.txt blk02795.txt blk02796.txt blk02797.txt blk02798.txt blk02799.txt blk02800.txt blk02801.txt blk02802.txt blk02803.txt blk02804.txt blk02805.txt blk02806.txt blk02807.txt blk02808.txt blk02809.txt blk02810.txt blk02811.txt blk02812.txt blk02813.txt blk02814.txt blk02815.txt blk02816.txt blk02817.txt blk02818.txt blk02819.txt blk02820.txt blk02821.txt blk02822.txt blk02823.txt blk02824.txt blk02825.txt blk02826.txt blk02827.txt blk02828.txt blk02829.txt blk02830.txt blk02831.txt blk02832.txt blk02833.txt blk02834.txt blk02835.txt blk02836.txt blk02837.txt blk02838.txt blk02839.txt blk02840.txt blk02841.txt blk02842.txt blk02843.txt blk02844.txt blk02845.txt blk02846.txt blk02847.txt blk02848.txt blk02849.txt blk02850.txt blk02851.txt blk02852.txt blk02853.txt blk02854.txt blk02855.txt blk02856.txt blk02857.txt blk02858.txt blk02859.txt blk02860.txt blk02861.txt blk02862.txt blk02863.txt blk02864.txt blk02865.txt blk02866.txt blk02867.txt blk02868.txt blk02869.txt blk02870.txt blk02871.txt blk02872.txt blk02873.txt blk02874.txt blk02875.txt blk02876.txt blk02877.txt blk02878.txt blk02879.txt blk02880.txt blk02881.txt blk02882.txt blk02883.txt blk02884.txt blk02885.txt blk02886.txt blk02887.txt blk02888.txt blk02889.txt blk02890.txt blk02891.txt blk02892.txt blk02893.txt blk02894.txt blk02895.txt blk02896.txt blk02897.txt blk02898.txt blk02899.txt blk02900.txt blk02901.txt blk02902.txt blk02903.txt blk02904.txt blk02905.txt blk02906.txt blk02907.txt blk02908.txt blk02909.txt blk02910.txt blk02911.txt blk02912.txt blk02913.txt blk02914.txt blk02915.txt blk02916.txt blk02917.txt blk02918.txt blk02919.txt blk02920.txt blk02921.txt blk02922.txt blk02923.txt blk02924.txt blk02925.txt blk02926.txt blk02927.txt blk02928.txt blk02929.txt blk02930.txt blk02931.txt blk02932.txt blk02933.txt blk02934.txt blk02935.txt blk02936.txt blk02937.txt blk02938.txt blk02939.txt blk02940.txt blk02941.txt blk02942.txt blk02943.txt blk02944.txt blk02945.txt blk02946.txt blk02947.txt blk02948.txt blk02949.txt blk02950.txt blk02951.txt blk02952.txt blk02953.txt blk02954.txt blk02955.txt blk02956.txt blk02957.txt blk02958.txt blk02959.txt blk02960.txt blk02961.txt blk02962.txt blk02963.txt blk02964.txt blk02965.txt blk02966.txt blk02967.txt blk02968.txt blk02969.txt blk02970.txt blk02971.txt blk02972.txt blk02973.txt blk02974.txt blk02975.txt blk02976.txt blk02977.txt blk02978.txt blk02979.txt blk02980.txt blk02981.txt blk02982.txt blk02983.txt blk02984.txt blk02985.txt blk02986.txt blk02987.txt blk02988.txt blk02989.txt blk02990.txt blk02991.txt blk02992.txt blk02993.txt blk02994.txt blk02995.txt blk02996.txt blk02997.txt blk02998.txt blk02999.txt blk03000.txt blk03001.txt blk03002.txt blk03003.txt blk03004.txt blk03005.txt blk03006.txt blk03007.txt blk03008.txt blk03009.txt blk03010.txt blk03011.txt blk03012.txt blk03013.txt blk03014.txt blk03015.txt blk03016.txt blk03017.txt blk03018.txt blk03019.txt blk03020.txt blk03021.txt blk03022.txt blk03023.txt blk03024.txt blk03025.txt blk03026.txt blk03027.txt blk03028.txt blk03029.txt blk03030.txt blk03031.txt blk03032.txt blk03033.txt blk03034.txt blk03035.txt blk03036.txt blk03037.txt blk03038.txt blk03039.txt blk03040.txt blk03041.txt blk03042.txt blk03043.txt blk03044.txt blk03045.txt blk03046.txt blk03047.txt blk03048.txt blk03049.txt blk03050.txt blk03051.txt blk03052.txt blk03053.txt blk03054.txt blk03055.txt blk03056.txt blk03057.txt blk03058.txt blk03059.txt blk03060.txt blk03061.txt blk03062.txt blk03063.txt blk03064.txt blk03065.txt blk03066.txt blk03067.txt blk03068.txt blk03069.txt blk03070.txt blk03071.txt blk03072.txt blk03073.txt blk03074.txt blk03075.txt blk03076.txt blk03077.txt blk03078.txt blk03079.txt blk03080.txt blk03081.txt blk03082.txt blk03083.txt blk03084.txt blk03085.txt blk03086.txt blk03087.txt blk03088.txt blk03089.txt blk03090.txt blk03091.txt blk03092.txt blk03093.txt blk03094.txt blk03095.txt blk03096.txt blk03097.txt blk03098.txt blk03099.txt blk03100.txt blk03101.txt blk03102.txt blk03103.txt blk03104.txt blk03105.txt blk03106.txt blk03107.txt blk03108.txt blk03109.txt blk03110.txt blk03111.txt blk03112.txt blk03113.txt blk03114.txt blk03115.txt blk03116.txt blk03117.txt blk03118.txt blk03119.txt blk03120.txt blk03121.txt blk03122.txt blk03123.txt blk03124.txt blk03125.txt blk03126.txt blk03127.txt blk03128.txt blk03129.txt blk03130.txt blk03131.txt blk03132.txt blk03133.txt blk03134.txt blk03135.txt blk03136.txt blk03137.txt blk03138.txt blk03139.txt blk03140.txt blk03141.txt blk03142.txt blk03143.txt blk03144.txt blk03145.txt blk03146.txt blk03147.txt blk03148.txt blk03149.txt blk03150.txt blk03151.txt blk03152.txt blk03153.txt blk03154.txt blk03155.txt blk03156.txt blk03157.txt blk03158.txt blk03159.txt blk03160.txt blk03161.txt blk03162.txt blk03163.txt blk03164.txt blk03165.txt blk03166.txt blk03167.txt blk03168.txt blk03169.txt blk03170.txt blk03171.txt blk03172.txt blk03173.txt blk03174.txt blk03175.txt blk03176.txt blk03177.txt blk03178.txt blk03179.txt blk03180.txt blk03181.txt blk03182.txt blk03183.txt blk03184.txt blk03185.txt blk03186.txt blk03187.txt blk03188.txt blk03189.txt blk03190.txt blk03191.txt blk03192.txt blk03193.txt blk03194.txt blk03195.txt blk03196.txt blk03197.txt blk03198.txt blk03199.txt blk03200.txt blk03201.txt blk03202.txt blk03203.txt blk03204.txt blk03205.txt blk03206.txt blk03207.txt blk03208.txt blk03209.txt blk03210.txt blk03211.txt blk03212.txt blk03213.txt blk03214.txt blk03215.txt blk03216.txt blk03217.txt blk03218.txt blk03219.txt blk03220.txt blk03221.txt blk03222.txt blk03223.txt blk03224.txt blk03225.txt blk03226.txt blk03227.txt blk03228.txt blk03229.txt blk03230.txt blk03231.txt blk03232.txt blk03233.txt blk03234.txt blk03235.txt blk03236.txt blk03237.txt blk03238.txt blk03239.txt blk03240.txt blk03241.txt blk03242.txt blk03243.txt blk03244.txt blk03245.txt blk03246.txt blk03247.txt blk03248.txt blk03249.txt blk03250.txt blk03251.txt blk03252.txt blk03253.txt blk03254.txt blk03255.txt blk03256.txt blk03257.txt blk03258.txt blk03259.txt blk03260.txt blk03261.txt blk03262.txt blk03263.txt blk03264.txt blk03265.txt blk03266.txt blk03267.txt blk03268.txt blk03269.txt blk03270.txt blk03271.txt blk03272.txt blk03273.txt blk03274.txt blk03275.txt blk03276.txt blk03277.txt blk03278.txt blk03279.txt blk03280.txt blk03281.txt blk03282.txt blk03283.txt blk03284.txt blk03285.txt blk03286.txt blk03287.txt blk03288.txt blk03289.txt blk03290.txt blk03291.txt blk03292.txt blk03293.txt blk03294.txt blk03295.txt blk03296.txt blk03297.txt blk03298.txt blk03299.txt blk03300.txt blk03301.txt blk03302.txt blk03303.txt blk03304.txt blk03305.txt blk03306.txt blk03307.txt blk03308.txt blk03309.txt blk03310.txt blk03311.txt blk03312.txt blk03313.txt blk03314.txt blk03315.txt blk03316.txt blk03317.txt blk03318.txt blk03319.txt blk03320.txt blk03321.txt blk03322.txt blk03323.txt blk03324.txt blk03325.txt blk03326.txt blk03327.txt blk03328.txt blk03329.txt blk03330.txt blk03331.txt blk03332.txt blk03333.txt blk03334.txt blk03335.txt blk03336.txt blk03337.txt blk03338.txt blk03339.txt blk03340.txt blk03341.txt blk03342.txt blk03343.txt blk03344.txt blk03345.txt blk03346.txt blk03347.txt blk03348.txt blk03349.txt blk03350.txt blk03351.txt blk03352.txt blk03353.txt blk03354.txt blk03355.txt blk03356.txt blk03357.txt blk03358.txt blk03359.txt blk03360.txt blk03361.txt blk03362.txt blk03363.txt blk03364.txt blk03365.txt blk03366.txt blk03367.txt blk03368.txt blk03369.txt blk03370.txt blk03371.txt blk03372.txt blk03373.txt blk03374.txt blk03375.txt blk03376.txt blk03377.txt blk03378.txt blk03379.txt blk03380.txt blk03381.txt blk03382.txt blk03383.txt blk03384.txt blk03385.txt blk03386.txt blk03387.txt blk03388.txt blk03389.txt blk03390.txt blk03391.txt blk03392.txt blk03393.txt blk03394.txt blk03395.txt blk03396.txt blk03397.txt blk03398.txt blk03399.txt blk03400.txt blk03401.txt blk03402.txt blk03403.txt blk03404.txt blk03405.txt blk03406.txt blk03407.txt blk03408.txt blk03409.txt blk03410.txt blk03411.txt blk03412.txt blk03413.txt blk03414.txt blk03415.txt blk03416.txt blk03417.txt blk03418.txt blk03419.txt blk03420.txt blk03421.txt blk03422.txt blk03423.txt blk03424.txt blk03425.txt blk03426.txt blk03427.txt blk03428.txt blk03429.txt blk03430.txt blk03431.txt blk03432.txt blk03433.txt blk03434.txt blk03435.txt blk03436.txt blk03437.txt blk03438.txt blk03439.txt blk03440.txt blk03441.txt blk03442.txt blk03443.txt blk03444.txt blk03445.txt blk03446.txt blk03447.txt blk03448.txt blk03449.txt blk03450.txt blk03451.txt blk03452.txt blk03453.txt blk03454.txt blk03455.txt blk03456.txt blk03457.txt blk03458.txt blk03459.txt blk03460.txt blk03461.txt blk03462.txt blk03463.txt blk03464.txt blk03465.txt blk03466.txt blk03467.txt blk03468.txt blk03469.txt blk03470.txt blk03471.txt blk03472.txt blk03473.txt blk03474.txt blk03475.txt blk03476.txt blk03477.txt blk03478.txt blk03479.txt blk03480.txt blk03481.txt blk03482.txt blk03483.txt blk03484.txt blk03485.txt blk03486.txt blk03487.txt blk03488.txt blk03489.txt blk03490.txt blk03491.txt blk03492.txt blk03493.txt blk03494.txt blk03495.txt blk03496.txt blk03497.txt blk03498.txt blk03499.txt blk03500.txt blk03501.txt blk03502.txt blk03503.txt blk03504.txt blk03505.txt blk03506.txt blk03507.txt blk03508.txt blk03509.txt blk03510.txt blk03511.txt blk03512.txt blk03513.txt blk03514.txt blk03515.txt blk03516.txt blk03517.txt blk03518.txt blk03519.txt blk03520.txt blk03521.txt blk03522.txt blk03523.txt blk03524.txt blk03525.txt blk03526.txt blk03527.txt blk03528.txt blk03529.txt blk03530.txt blk03531.txt blk03532.txt blk03533.txt blk03534.txt blk03535.txt blk03536.txt blk03537.txt blk03538.txt blk03539.txt blk03540.txt blk03541.txt blk03542.txt blk03543.txt blk03544.txt blk03545.txt blk03546.txt blk03547.txt blk03548.txt blk03549.txt blk03550.txt blk03551.txt blk03552.txt blk03553.txt blk03554.txt blk03555.txt blk03556.txt blk03557.txt blk03558.txt blk03559.txt blk03560.txt blk03561.txt blk03562.txt blk03563.txt blk03564.txt blk03565.txt blk03566.txt blk03567.txt blk03568.txt blk03569.txt blk03570.txt blk03571.txt blk03572.txt blk03573.txt blk03574.txt blk03575.txt blk03576.txt blk03577.txt blk03578.txt blk03579.txt blk03580.txt blk03581.txt blk03582.txt blk03583.txt blk03584.txt blk03585.txt blk03586.txt blk03587.txt blk03588.txt blk03589.txt blk03590.txt blk03591.txt blk03592.txt blk03593.txt blk03594.txt blk03595.txt blk03596.txt blk03597.txt blk03598.txt blk03599.txt blk03600.txt blk03601.txt blk03602.txt blk03603.txt blk03604.txt blk03605.txt blk03606.txt blk03607.txt blk03608.txt blk03609.txt blk03610.txt blk03611.txt blk03612.txt blk03613.txt blk03614.txt blk03615.txt blk03616.txt blk03617.txt blk03618.txt blk03619.txt blk03620.txt blk03621.txt blk03622.txt blk03623.txt blk03624.txt blk03625.txt blk03626.txt blk03627.txt blk03628.txt blk03629.txt blk03630.txt blk03631.txt blk03632.txt blk03633.txt blk03634.txt blk03635.txt blk03636.txt blk03637.txt blk03638.txt blk03639.txt blk03640.txt blk03641.txt blk03642.txt blk03643.txt blk03644.txt blk03645.txt blk03646.txt blk03647.txt blk03648.txt blk03649.txt blk03650.txt blk03651.txt blk03652.txt blk03653.txt blk03654.txt blk03655.txt blk03656.txt blk03657.txt blk03658.txt blk03659.txt blk03660.txt blk03661.txt blk03662.txt blk03663.txt blk03664.txt blk03665.txt blk03666.txt blk03667.txt blk03668.txt blk03669.txt blk03670.txt blk03671.txt blk03672.txt blk03673.txt blk03674.txt blk03675.txt blk03676.txt blk03677.txt blk03678.txt blk03679.txt blk03680.txt blk03681.txt blk03682.txt blk03683.txt blk03684.txt blk03685.txt blk03686.txt blk03687.txt blk03688.txt blk03689.txt blk03690.txt blk03691.txt blk03692.txt blk03693.txt blk03694.txt blk03695.txt blk03696.txt blk03697.txt blk03698.txt blk03699.txt blk03700.txt blk03701.txt blk03702.txt blk03703.txt blk03704.txt blk03705.txt blk03706.txt blk03707.txt blk03708.txt blk03709.txt blk03710.txt blk03711.txt blk03712.txt blk03713.txt blk03714.txt blk03715.txt blk03716.txt blk03717.txt blk03718.txt blk03719.txt blk03720.txt blk03721.txt blk03722.txt blk03723.txt blk03724.txt blk03725.txt blk03726.txt blk03727.txt blk03728.txt blk03729.txt blk03730.txt blk03731.txt blk03732.txt blk03733.txt blk03734.txt blk03735.txt blk03736.txt blk03737.txt blk03738.txt blk03739.txt blk03740.txt blk03741.txt blk03742.txt blk03743.txt blk03744.txt blk03745.txt blk03746.txt blk03747.txt blk03748.txt blk03749.txt blk03750.txt blk03751.txt blk03752.txt blk03753.txt blk03754.txt blk03755.txt blk03756.txt blk03757.txt blk03758.txt blk03759.txt blk03760.txt blk03761.txt blk03762.txt blk03763.txt blk03764.txt blk03765.txt blk03766.txt blk03767.txt blk03768.txt blk03769.txt blk03770.txt blk03771.txt blk03772.txt blk03773.txt blk03774.txt blk03775.txt blk03776.txt blk03777.txt blk03778.txt blk03779.txt blk03780.txt blk03781.txt blk03782.txt blk03783.txt blk03784.txt blk03785.txt blk03786.txt blk03787.txt blk03788.txt blk03789.txt blk03790.txt blk03791.txt blk03792.txt blk03793.txt blk03794.txt blk03795.txt blk03796.txt blk03797.txt blk03798.txt blk03799.txt blk03800.txt blk03801.txt blk03802.txt blk03803.txt blk03804.txt blk03805.txt blk03806.txt blk03807.txt blk03808.txt blk03809.txt blk03810.txt blk03811.txt blk03812.txt blk03813.txt blk03814.txt blk03815.txt blk03816.txt blk03817.txt blk03818.txt blk03819.txt blk03820.txt blk03821.txt blk03822.txt blk03823.txt blk03824.txt blk03825.txt blk03826.txt blk03827.txt blk03828.txt blk03829.txt blk03830.txt blk03831.txt blk03832.txt blk03833.txt blk03834.txt blk03835.txt blk03836.txt blk03837.txt blk03838.txt blk03839.txt blk03840.txt blk03841.txt blk03842.txt blk03843.txt blk03844.txt blk03845.txt blk03846.txt blk03847.txt blk03848.txt blk03849.txt blk03850.txt blk03851.txt blk03852.txt blk03853.txt blk03854.txt blk03855.txt blk03856.txt blk03857.txt blk03858.txt blk03859.txt blk03860.txt blk03861.txt blk03862.txt blk03863.txt blk03864.txt blk03865.txt blk03866.txt blk03867.txt blk03868.txt blk03869.txt blk03870.txt blk03871.txt blk03872.txt blk03873.txt blk03874.txt blk03875.txt blk03876.txt blk03877.txt blk03878.txt blk03879.txt blk03880.txt blk03881.txt blk03882.txt blk03883.txt blk03884.txt blk03885.txt blk03886.txt blk03887.txt blk03888.txt blk03889.txt blk03890.txt blk03891.txt blk03892.txt blk03893.txt blk03894.txt blk03895.txt blk03896.txt blk03897.txt blk03898.txt blk03899.txt blk03900.txt blk03901.txt blk03902.txt blk03903.txt blk03904.txt blk03905.txt blk03906.txt blk03907.txt blk03908.txt blk03909.txt blk03910.txt blk03911.txt blk03912.txt blk03913.txt blk03914.txt blk03915.txt blk03916.txt blk03917.txt blk03918.txt blk03919.txt blk03920.txt blk03921.txt blk03922.txt blk03923.txt blk03924.txt blk03925.txt blk03926.txt blk03927.txt blk03928.txt blk03929.txt blk03930.txt blk03931.txt blk03932.txt blk03933.txt blk03934.txt blk03935.txt blk03936.txt blk03937.txt blk03938.txt blk03939.txt blk03940.txt blk03941.txt blk03942.txt blk03943.txt blk03944.txt blk03945.txt blk03946.txt blk03947.txt blk03948.txt blk03949.txt blk03950.txt blk03951.txt blk03952.txt blk03953.txt blk03954.txt blk03955.txt blk03956.txt blk03957.txt blk03958.txt blk03959.txt blk03960.txt blk03961.txt blk03962.txt blk03963.txt blk03964.txt blk03965.txt blk03966.txt blk03967.txt blk03968.txt blk03969.txt blk03970.txt blk03971.txt blk03972.txt blk03973.txt blk03974.txt blk03975.txt blk03976.txt blk03977.txt blk03978.txt blk03979.txt blk03980.txt blk03981.txt blk03982.txt blk03983.txt blk03984.txt blk03985.txt blk03986.txt blk03987.txt blk03988.txt blk03989.txt blk03990.txt blk03991.txt blk03992.txt blk03993.txt blk03994.txt blk03995.txt blk03996.txt blk03997.txt blk03998.txt blk03999.txt blk04000.txt blk04001.txt blk04002.txt blk04003.txt blk04004.txt blk04005.txt blk04006.txt blk04007.txt blk04008.txt blk04009.txt blk04010.txt blk04011.txt blk04012.txt blk04013.txt blk04014.txt blk04015.txt blk04016.txt blk04017.txt blk04018.txt blk04019.txt blk04020.txt blk04021.txt blk04022.txt blk04023.txt blk04024.txt blk04025.txt blk04026.txt blk04027.txt blk04028.txt blk04029.txt blk04030.txt blk04031.txt blk04032.txt blk04033.txt blk04034.txt blk04035.txt blk04036.txt blk04037.txt blk04038.txt blk04039.txt blk04040.txt blk04041.txt blk04042.txt blk04043.txt blk04044.txt blk04045.txt blk04046.txt blk04047.txt blk04048.txt blk04049.txt blk04050.txt blk04051.txt blk04052.txt blk04053.txt blk04054.txt blk04055.txt blk04056.txt blk04057.txt blk04058.txt blk04059.txt blk04060.txt blk04061.txt blk04062.txt blk04063.txt blk04064.txt blk04065.txt blk04066.txt blk04067.txt blk04068.txt blk04069.txt blk04070.txt blk04071.txt blk04072.txt blk04073.txt blk04074.txt blk04075.txt blk04076.txt blk04077.txt blk04078.txt blk04079.txt blk04080.txt blk04081.txt blk04082.txt blk04083.txt blk04084.txt blk04085.txt blk04086.txt blk04087.txt blk04088.txt blk04089.txt blk04090.txt blk04091.txt blk04092.txt blk04093.txt blk04094.txt blk04095.txt blk04096.txt blk04097.txt blk04098.txt blk04099.txt blk04100.txt blk04101.txt blk04102.txt blk04103.txt blk04104.txt blk04105.txt blk04106.txt blk04107.txt blk04108.txt blk04109.txt blk04110.txt blk04111.txt blk04112.txt blk04113.txt blk04114.txt blk04115.txt blk04116.txt blk04117.txt blk04118.txt blk04119.txt blk04120.txt blk04121.txt blk04122.txt blk04123.txt blk04124.txt blk04125.txt blk04126.txt blk04127.txt blk04128.txt blk04129.txt blk04130.txt blk04131.txt blk04132.txt blk04133.txt blk04134.txt blk04135.txt blk04136.txt blk04137.txt blk04138.txt blk04139.txt blk04140.txt blk04141.txt blk04142.txt blk04143.txt blk04144.txt blk04145.txt blk04146.txt blk04147.txt blk04148.txt blk04149.txt blk04150.txt blk04151.txt blk04152.txt blk04153.txt blk04154.txt blk04155.txt blk04156.txt blk04157.txt blk04158.txt blk04159.txt blk04160.txt blk04161.txt blk04162.txt blk04163.txt blk04164.txt blk04165.txt blk04166.txt blk04167.txt blk04168.txt blk04169.txt blk04170.txt blk04171.txt blk04172.txt blk04173.txt blk04174.txt blk04175.txt blk04176.txt blk04177.txt blk04178.txt blk04179.txt blk04180.txt blk04181.txt blk04182.txt blk04183.txt blk04184.txt blk04185.txt blk04186.txt blk04187.txt blk04188.txt blk04189.txt blk04190.txt blk04191.txt blk04192.txt blk04193.txt blk04194.txt blk04195.txt blk04196.txt blk04197.txt blk04198.txt blk04199.txt blk04200.txt blk04201.txt blk04202.txt blk04203.txt blk04204.txt blk04205.txt blk04206.txt blk04207.txt blk04208.txt blk04209.txt blk04210.txt blk04211.txt blk04212.txt blk04213.txt blk04214.txt blk04215.txt blk04216.txt blk04217.txt blk04218.txt blk04219.txt blk04220.txt blk04221.txt blk04222.txt blk04223.txt blk04224.txt blk04225.txt blk04226.txt blk04227.txt blk04228.txt blk04229.txt blk04230.txt blk04231.txt blk04232.txt blk04233.txt blk04234.txt blk04235.txt blk04236.txt blk04237.txt blk04238.txt blk04239.txt blk04240.txt blk04241.txt blk04242.txt blk04243.txt blk04244.txt blk04245.txt blk04246.txt blk04247.txt blk04248.txt blk04249.txt blk04250.txt blk04251.txt blk04252.txt blk04253.txt blk04254.txt blk04255.txt blk04256.txt blk04257.txt blk04258.txt blk04259.txt blk04260.txt blk04261.txt blk04262.txt blk04263.txt blk04264.txt blk04265.txt blk04266.txt blk04267.txt blk04268.txt blk04269.txt blk04270.txt blk04271.txt blk04272.txt blk04273.txt blk04274.txt blk04275.txt blk04276.txt blk04277.txt blk04278.txt blk04279.txt blk04280.txt blk04281.txt blk04282.txt blk04283.txt blk04284.txt blk04285.txt blk04286.txt blk04287.txt blk04288.txt blk04289.txt blk04290.txt blk04291.txt blk04292.txt blk04293.txt blk04294.txt blk04295.txt blk04296.txt blk04297.txt blk04298.txt blk04299.txt blk04300.txt blk04301.txt blk04302.txt blk04303.txt blk04304.txt blk04305.txt blk04306.txt blk04307.txt blk04308.txt blk04309.txt blk04310.txt blk04311.txt blk04312.txt blk04313.txt blk04314.txt blk04315.txt blk04316.txt blk04317.txt blk04318.txt blk04319.txt blk04320.txt blk04321.txt blk04322.txt blk04323.txt blk04324.txt blk04325.txt blk04326.txt blk04327.txt blk04328.txt blk04329.txt blk04330.txt blk04331.txt blk04332.txt blk04333.txt blk04334.txt blk04335.txt blk04336.txt blk04337.txt blk04338.txt blk04339.txt blk04340.txt blk04341.txt blk04342.txt blk04343.txt blk04344.txt blk04345.txt blk04346.txt blk04347.txt blk04348.txt blk04349.txt blk04350.txt blk04351.txt blk04352.txt blk04353.txt blk04354.txt blk04355.txt blk04356.txt blk04357.txt blk04358.txt blk04359.txt blk04360.txt blk04361.txt blk04362.txt blk04363.txt blk04364.txt blk04365.txt blk04366.txt blk04367.txt blk04368.txt blk04369.txt blk04370.txt blk04371.txt blk04372.txt blk04373.txt blk04374.txt blk04375.txt blk04376.txt blk04377.txt blk04378.txt blk04379.txt blk04380.txt blk04381.txt blk04382.txt blk04383.txt blk04384.txt blk04385.txt blk04386.txt blk04387.txt blk04388.txt blk04389.txt blk04390.txt blk04391.txt blk04392.txt blk04393.txt blk04394.txt blk04395.txt blk04396.txt blk04397.txt blk04398.txt blk04399.txt blk04400.txt blk04401.txt blk04402.txt blk04403.txt blk04404.txt blk04405.txt blk04406.txt blk04407.txt blk04408.txt blk04409.txt blk04410.txt blk04411.txt blk04412.txt blk04413.txt blk04414.txt blk04415.txt blk04416.txt blk04417.txt blk04418.txt blk04419.txt blk04420.txt blk04421.txt blk04422.txt blk04423.txt blk04424.txt blk04425.txt blk04426.txt blk04427.txt blk04428.txt blk04429.txt blk04430.txt blk04431.txt blk04432.txt blk04433.txt blk04434.txt blk04435.txt blk04436.txt blk04437.txt blk04438.txt blk04439.txt blk04440.txt blk04441.txt blk04442.txt blk04443.txt blk04444.txt blk04445.txt blk04446.txt blk04447.txt blk04448.txt blk04449.txt blk04450.txt blk04451.txt blk04452.txt blk04453.txt blk04454.txt blk04455.txt blk04456.txt blk04457.txt blk04458.txt blk04459.txt blk04460.txt blk04461.txt blk04462.txt blk04463.txt blk04464.txt blk04465.txt blk04466.txt blk04467.txt blk04468.txt blk04469.txt blk04470.txt blk04471.txt blk04472.txt blk04473.txt blk04474.txt blk04475.txt blk04476.txt blk04477.txt blk04478.txt blk04479.txt blk04480.txt blk04481.txt blk04482.txt blk04483.txt blk04484.txt blk04485.txt blk04486.txt blk04487.txt blk04488.txt blk04489.txt blk04490.txt blk04491.txt blk04492.txt blk04493.txt blk04494.txt blk04495.txt blk04496.txt blk04497.txt blk04498.txt blk04499.txt blk04500.txt blk04501.txt blk04502.txt blk04503.txt blk04504.txt blk04505.txt blk04506.txt blk04507.txt blk04508.txt blk04509.txt blk04510.txt blk04511.txt blk04512.txt blk04513.txt blk04514.txt blk04515.txt blk04516.txt blk04517.txt blk04518.txt blk04519.txt blk04520.txt blk04521.txt blk04522.txt blk04523.txt blk04524.txt blk04525.txt blk04526.txt blk04527.txt blk04528.txt blk04529.txt blk04530.txt blk04531.txt blk04532.txt blk04533.txt blk04534.txt blk04535.txt blk04536.txt blk04537.txt blk04538.txt blk04539.txt blk04540.txt blk04541.txt blk04542.txt blk04543.txt blk04544.txt blk04545.txt blk04546.txt blk04547.txt blk04548.txt blk04549.txt blk04550.txt blk04551.txt blk04552.txt blk04553.txt blk04554.txt blk04555.txt blk04556.txt blk04557.txt blk04558.txt blk04559.txt blk04560.txt blk04561.txt blk04562.txt blk04563.txt blk04564.txt blk04565.txt blk04566.txt blk04567.txt blk04568.txt blk04569.txt blk04570.txt blk04571.txt blk04572.txt blk04573.txt blk04574.txt blk04575.txt blk04576.txt blk04577.txt blk04578.txt blk04579.txt blk04580.txt blk04581.txt blk04582.txt blk04583.txt blk04584.txt blk04585.txt blk04586.txt blk04587.txt blk04588.txt blk04589.txt blk04590.txt blk04591.txt blk04592.txt blk04593.txt blk04594.txt blk04595.txt blk04596.txt blk04597.txt blk04598.txt blk04599.txt blk04600.txt blk04601.txt blk04602.txt blk04603.txt blk04604.txt blk04605.txt blk04606.txt blk04607.txt blk04608.txt blk04609.txt blk04610.txt blk04611.txt blk04612.txt blk04613.txt blk04614.txt blk04615.txt blk04616.txt blk04617.txt blk04618.txt blk04619.txt blk04620.txt blk04621.txt blk04622.txt blk04623.txt blk04624.txt blk04625.txt blk04626.txt blk04627.txt blk04628.txt blk04629.txt blk04630.txt blk04631.txt blk04632.txt blk04633.txt blk04634.txt blk04635.txt blk04636.txt blk04637.txt blk04638.txt blk04639.txt blk04640.txt blk04641.txt blk04642.txt blk04643.txt blk04644.txt blk04645.txt blk04646.txt blk04647.txt blk04648.txt blk04649.txt blk04650.txt blk04651.txt blk04652.txt blk04653.txt blk04654.txt blk04655.txt blk04656.txt blk04657.txt blk04658.txt blk04659.txt blk04660.txt blk04661.txt blk04662.txt blk04663.txt blk04664.txt blk04665.txt blk04666.txt blk04667.txt blk04668.txt blk04669.txt blk04670.txt blk04671.txt blk04672.txt blk04673.txt blk04674.txt blk04675.txt blk04676.txt blk04677.txt blk04678.txt blk04679.txt blk04680.txt blk04681.txt blk04682.txt blk04683.txt blk04684.txt blk04685.txt blk04686.txt blk04687.txt blk04688.txt blk04689.txt blk04690.txt blk04691.txt blk04692.txt blk04693.txt blk04694.txt blk04695.txt blk04696.txt blk04697.txt blk04698.txt blk04699.txt blk04700.txt blk04701.txt blk04702.txt blk04703.txt blk04704.txt blk04705.txt blk04706.txt blk04707.txt blk04708.txt blk04709.txt blk04710.txt blk04711.txt blk04712.txt blk04713.txt blk04714.txt blk04715.txt blk04716.txt blk04717.txt blk04718.txt blk04719.txt blk04720.txt blk04721.txt blk04722.txt blk04723.txt blk04724.txt blk04725.txt blk04726.txt blk04727.txt blk04728.txt blk04729.txt blk04730.txt blk04731.txt blk04732.txt blk04733.txt blk04734.txt blk04735.txt blk04736.txt blk04737.txt blk04738.txt blk04739.txt blk04740.txt blk04741.txt blk04742.txt blk04743.txt blk04744.txt blk04745.txt blk04746.txt blk04747.txt blk04748.txt blk04749.txt blk04750.txt blk04751.txt blk04752.txt blk04753.txt blk04754.txt blk04755.txt blk04756.txt blk04757.txt blk04758.txt blk04759.txt blk04760.txt blk04761.txt blk04762.txt blk04763.txt blk04764.txt blk04765.txt blk04766.txt blk04767.txt blk04768.txt blk04769.txt blk04770.txt blk04771.txt blk04772.txt blk04773.txt blk04774.txt blk04775.txt blk04776.txt blk04777.txt blk04778.txt blk04779.txt blk04780.txt blk04781.txt blk04782.txt blk04783.txt blk04784.txt blk04785.txt blk04786.txt blk04787.txt blk04788.txt blk04789.txt blk04790.txt blk04791.txt blk04792.txt blk04793.txt blk04794.txt blk04795.txt blk04796.txt blk04797.txt blk04798.txt blk04799.txt blk04800.txt blk04801.txt blk04802.txt blk04803.txt blk04804.txt blk04805.txt blk04806.txt blk04807.txt blk04808.txt blk04809.txt blk04810.txt blk04811.txt blk04812.txt blk04813.txt blk04814.txt blk04815.txt blk04816.txt blk04817.txt blk04818.txt blk04819.txt blk04820.txt blk04821.txt blk04822.txt blk04823.txt blk04824.txt blk04825.txt blk04826.txt blk04827.txt blk04828.txt blk04829.txt blk04830.txt blk04831.txt blk04832.txt blk04833.txt blk04834.txt blk04835.txt blk04836.txt blk04837.txt blk04838.txt blk04839.txt blk04840.txt blk04841.txt blk04842.txt blk04843.txt blk04844.txt blk04845.txt blk04846.txt blk04847.txt blk04848.txt blk04849.txt blk04850.txt blk04851.txt blk04852.txt blk04853.txt blk04854.txt blk04855.txt blk04856.txt blk04857.txt blk04858.txt blk04859.txt blk04860.txt blk04861.txt blk04862.txt blk04863.txt blk04864.txt blk04865.txt blk04866.txt blk04867.txt blk04868.txt blk04869.txt blk04870.txt blk04871.txt blk04872.txt blk04873.txt blk04874.txt blk04875.txt blk04876.txt blk04877.txt blk04878.txt blk04879.txt blk04880.txt blk04881.txt blk04882.txt blk04883.txt blk04884.txt blk04885.txt blk04886.txt blk04887.txt blk04888.txt blk04889.txt blk04890.txt blk04891.txt blk04892.txt blk04893.txt blk04894.txt blk04895.txt blk04896.txt blk04897.txt blk04898.txt blk04899.txt blk04900.txt blk04901.txt blk04902.txt blk04903.txt blk04904.txt blk04905.txt blk04906.txt blk04907.txt blk04908.txt blk04909.txt blk04910.txt blk04911.txt blk04912.txt blk04913.txt blk04914.txt blk04915.txt blk04916.txt blk04917.txt blk04918.txt blk04919.txt blk04920.txt blk04921.txt blk04922.txt blk04923.txt blk04924.txt blk04925.txt blk04926.txt blk04927.txt blk04928.txt blk04929.txt blk04930.txt blk04931.txt blk04932.txt blk04933.txt blk04934.txt blk04935.txt blk04936.txt blk04937.txt blk04938.txt blk04939.txt blk04940.txt blk04941.txt blk04942.txt blk04943.txt blk04944.txt blk04945.txt blk04946.txt blk04947.txt blk04948.txt blk04949.txt blk04950.txt blk04951.txt blk04952.txt blk04953.txt blk04954.txt blk04955.txt blk04956.txt blk04957.txt blk04958.txt blk04959.txt blk04960.txt blk04961.txt blk04962.txt blk04963.txt blk04964.txt blk04965.txt blk04966.txt blk04967.txt blk04968.txt blk04969.txt blk04970.txt blk04971.txt blk04972.txt blk04973.txt blk04974.txt blk04975.txt blk04976.txt blk04977.txt blk04978.txt blk04979.txt blk04980.txt blk04981.txt blk04982.txt blk04983.txt blk04984.txt blk04985.txt blk04986.txt blk04987.txt blk04988.txt blk04989.txt blk04990.txt blk04991.txt blk04992.txt blk04993.txt blk04994.txt blk04995.txt blk04996.txt blk04997.txt blk04998.txt blk04999.txt blk05000.txt blk05001.txt blk05002.txt blk05003.txt blk05004.txt blk05005.txt blk05006.txt blk05007.txt blk05008.txt blk05009.txt blk05010.txt blk05011.txt blk05012.txt blk05013.txt blk05014.txt blk05015.txt blk05016.txt blk05017.txt blk05018.txt blk05019.txt blk05020.txt blk05021.txt blk05022.txt blk05023.txt blk05024.txt blk05025.txt blk05026.txt blk05027.txt blk05028.txt blk05029.txt blk05030.txt blk05031.txt blk05032.txt blk05033.txt blk05034.txt blk05035.txt blk05036.txt blk05037.txt blk05038.txt blk05039.txt blk05040.txt blk05041.txt blk05042.txt blk05043.txt blk05044.txt blk05045.txt blk05046.txt blk05047.txt blk05048.txt blk05049.txt blk05050.txt blk05051.txt blk05052.txt blk05053.txt blk05054.txt blk05055.txt blk05056.txt blk05057.txt blk05058.txt blk05059.txt blk05060.txt blk05061.txt blk05062.txt blk05063.txt blk05064.txt blk05065.txt blk05066.txt blk05067.txt blk05068.txt blk05069.txt blk05070.txt blk05071.txt blk05072.txt blk05073.txt blk05074.txt blk05075.txt blk05076.txt blk05077.txt blk05078.txt blk05079.txt blk05080.txt blk05081.txt blk05082.txt blk05083.txt blk05084.txt blk05085.txt blk05086.txt blk05087.txt blk05088.txt blk05089.txt blk05090.txt blk05091.txt blk05092.txt blk05093.txt blk05094.txt blk05095.txt blk05096.txt blk05097.txt blk05098.txt blk05099.txt blk05100.txt blk05101.txt blk05102.txt blk05103.txt blk05104.txt blk05105.txt blk05106.txt blk05107.txt blk05108.txt blk05109.txt blk05110.txt blk05111.txt blk05112.txt blk05113.txt blk05114.txt blk05115.txt blk05116.txt blk05117.txt blk05118.txt blk05119.txt blk05120.txt blk05121.txt blk05122.txt blk05123.txt blk05124.txt blk05125.txt blk05126.txt blk05127.txt blk05128.txt blk05129.txt blk05130.txt blk05131.txt blk05132.txt blk05133.txt blk05134.txt blk05135.txt blk05136.txt blk05137.txt blk05138.txt blk05139.txt blk05140.txt blk05141.txt blk05142.txt blk05143.txt blk05144.txt blk05145.txt blk05146.txt blk05147.txt blk05148.txt blk05149.txt blk05150.txt blk05151.txt blk05152.txt blk05153.txt blk05154.txt blk05155.txt blk05156.txt blk05157.txt blk05158.txt blk05159.txt blk05160.txt blk05161.txt blk05162.txt blk05163.txt blk05164.txt blk05165.txt blk05166.txt blk05167.txt blk05168.txt blk05169.txt blk05170.txt blk05171.txt blk05172.txt blk05173.txt blk05174.txt blk05175.txt blk05176.txt blk05177.txt blk05178.txt blk05179.txt blk05180.txt blk05181.txt blk05182.txt blk05183.txt blk05184.txt blk05185.txt blk05186.txt blk05187.txt blk05188.txt blk05189.txt blk05190.txt blk05191.txt blk05192.txt blk05193.txt blk05194.txt blk05195.txt blk05196.txt blk05197.txt blk05198.txt blk05199.txt blk05200.txt blk05201.txt blk05202.txt blk05203.txt blk05204.txt blk05205.txt blk05206.txt blk05207.txt blk05208.txt blk05209.txt blk05210.txt blk05211.txt blk05212.txt blk05213.txt blk05214.txt blk05215.txt blk05216.txt blk05217.txt blk05218.txt blk05219.txt blk05220.txt blk05221.txt blk05222.txt blk05223.txt blk05224.txt blk05225.txt blk05226.txt blk05227.txt blk05228.txt blk05229.txt blk05230.txt blk05231.txt blk05232.txt blk05233.txt blk05234.txt blk05235.txt blk05236.txt blk05237.txt blk05238.txt blk05239.txt blk05240.txt blk05241.txt blk05242.txt blk05243.txt blk05244.txt blk05245.txt blk05246.txt blk05247.txt blk05248.txt blk05249.txt blk05250.txt blk05251.txt blk05252.txt blk05253.txt blk05254.txt blk05255.txt blk05256.txt blk05257.txt blk05258.txt blk05259.txt blk05260.txt blk05261.txt blk05262.txt blk05263.txt blk05264.txt blk05265.txt blk05266.txt blk05267.txt blk05268.txt blk05269.txt blk05270.txt blk05271.txt blk05272.txt blk05273.txt blk05274.txt blk05275.txt blk05276.txt blk05277.txt blk05278.txt blk05279.txt blk05280.txt blk05281.txt blk05282.txt blk05283.txt blk05284.txt blk05285.txt blk05286.txt blk05287.txt blk05288.txt blk05289.txt blk05290.txt blk05291.txt blk05292.txt blk05293.txt blk05294.txt blk05295.txt blk05296.txt blk05297.txt blk05298.txt blk05299.txt blk05300.txt blk05301.txt blk05302.txt blk05303.txt blk05304.txt blk05305.txt blk05306.txt blk05307.txt blk05308.txt blk05309.txt blk05310.txt blk05311.txt blk05312.txt blk05313.txt blk05314.txt blk05315.txt blk05316.txt blk05317.txt blk05318.txt blk05319.txt blk05320.txt blk05321.txt blk05322.txt blk05323.txt blk05324.txt blk05325.txt blk05326.txt blk05327.txt blk05328.txt blk05329.txt blk05330.txt blk05331.txt blk05332.txt blk05333.txt blk05334.txt blk05335.txt blk05336.txt blk05337.txt blk05338.txt blk05339.txt blk05340.txt blk05341.txt blk05342.txt blk05343.txt blk05344.txt blk05345.txt blk05346.txt blk05347.txt blk05348.txt blk05349.txt blk05350.txt blk05351.txt blk05352.txt blk05353.txt blk05354.txt blk05355.txt blk05356.txt blk05357.txt blk05358.txt blk05359.txt blk05360.txt blk05361.txt blk05362.txt blk05363.txt blk05364.txt blk05365.txt blk05366.txt blk05367.txt blk05368.txt blk05369.txt blk05370.txt blk05371.txt blk05372.txt blk05373.txt blk05374.txt blk05375.txt blk05376.txt blk05377.txt blk05378.txt blk05379.txt blk05380.txt blk05381.txt blk05382.txt blk05383.txt blk05384.txt blk05385.txt blk05386.txt blk05387.txt blk05388.txt blk05389.txt blk05390.txt blk05391.txt blk05392.txt blk05393.txt blk05394.txt blk05395.txt blk05396.txt blk05397.txt blk05398.txt blk05399.txt blk05400.txt blk05401.txt blk05402.txt blk05403.txt blk05404.txt blk05405.txt blk05406.txt blk05407.txt blk05408.txt blk05409.txt blk05410.txt blk05411.txt blk05412.txt blk05413.txt blk05414.txt blk05415.txt blk05416.txt blk05417.txt blk05418.txt blk05419.txt blk05420.txt blk05421.txt blk05422.txt blk05423.txt blk05424.txt blk05425.txt blk05426.txt blk05427.txt blk05428.txt blk05429.txt blk05430.txt blk05431.txt blk05432.txt blk05433.txt blk05434.txt blk05435.txt blk05436.txt blk05437.txt blk05438.txt blk05439.txt blk05440.txt blk05441.txt blk05442.txt blk05443.txt blk05444.txt blk05445.txt blk05446.txt blk05447.txt blk05448.txt blk05449.txt blk05450.txt blk05451.txt blk05452.txt blk05453.txt blk05454.txt blk05455.txt blk05456.txt blk05457.txt blk05458.txt blk05459.txt blk05460.txt blk05461.txt blk05462.txt blk05463.txt blk05464.txt blk05465.txt blk05466.txt blk05467.txt blk05468.txt blk05469.txt blk05470.txt blk05471.txt blk05472.txt blk05473.txt blk05474.txt blk05475.txt blk05476.txt blk05477.txt blk05478.txt blk05479.txt blk05480.txt blk05481.txt blk05482.txt blk05483.txt blk05484.txt blk05485.txt blk05486.txt blk05487.txt blk05488.txt blk05489.txt blk05490.txt blk05491.txt blk05492.txt blk05493.txt blk05494.txt blk05495.txt blk05496.txt blk05497.txt blk05498.txt blk05499.txt blk05500.txt blk05501.txt blk05502.txt blk05503.txt blk05504.txt blk05505.txt blk05506.txt blk05507.txt blk05508.txt blk05509.txt blk05510.txt blk05511.txt blk05512.txt blk05513.txt blk05514.txt blk05515.txt blk05516.txt blk05517.txt blk05518.txt blk05519.txt blk05520.txt blk05521.txt blk05522.txt blk05523.txt blk05524.txt blk05525.txt blk05526.txt blk05527.txt blk05528.txt blk05529.txt blk05530.txt blk05531.txt blk05532.txt blk05533.txt blk05534.txt blk05535.txt blk05536.txt blk05537.txt blk05538.txt blk05539.txt blk05540.txt blk05541.txt blk05542.txt blk05543.txt blk05544.txt blk05545.txt blk05546.txt blk05547.txt blk05548.txt blk05549.txt blk05550.txt blk05551.txt blk05552.txt blk05553.txt blk05554.txt blk05555.txt blk05556.txt blk05557.txt blk05558.txt blk05559.txt blk05560.txt blk05561.txt blk05562.txt blk05563.txt blk05564.txt blk05565.txt blk05566.txt blk05567.txt blk05568.txt blk05569.txt blk05570.txt blk05571.txt blk05572.txt blk05573.txt blk05574.txt blk05575.txt blk05576.txt blk05577.txt blk05578.txt blk05579.txt blk05580.txt blk05581.txt blk05582.txt blk05583.txt blk05584.txt blk05585.txt blk05586.txt blk05587.txt blk05588.txt blk05589.txt blk05590.txt blk05591.txt blk05592.txt blk05593.txt blk05594.txt blk05595.txt blk05596.txt blk05597.txt blk05598.txt blk05599.txt blk05600.txt blk05601.txt blk05602.txt blk05603.txt blk05604.txt blk05605.txt blk05606.txt blk05607.txt blk05608.txt blk05609.txt blk05610.txt blk05611.txt blk05612.txt blk05613.txt blk05614.txt blk05615.txt blk05616.txt blk05617.txt blk05618.txt blk05619.txt blk05620.txt blk05621.txt blk05622.txt blk05623.txt blk05624.txt blk05625.txt blk05626.txt blk05627.txt blk05628.txt blk05629.txt blk05630.txt blk05631.txt blk05632.txt blk05633.txt blk05634.txt blk05635.txt blk05636.txt blk05637.txt blk05638.txt blk05639.txt blk05640.txt blk05641.txt blk05642.txt blk05643.txt blk05644.txt blk05645.txt blk05646.txt blk05647.txt blk05648.txt blk05649.txt blk05650.txt blk05651.txt blk05652.txt blk05653.txt blk05654.txt blk05655.txt blk05656.txt blk05657.txt blk05658.txt blk05659.txt blk05660.txt blk05661.txt blk05662.txt blk05663.txt blk05664.txt blk05665.txt blk05666.txt blk05667.txt blk05668.txt blk05669.txt blk05670.txt blk05671.txt blk05672.txt blk05673.txt blk05674.txt blk05675.txt blk05676.txt blk05677.txt blk05678.txt blk05679.txt blk05680.txt blk05681.txt blk05682.txt blk05683.txt blk05684.txt blk05685.txt blk05686.txt blk05687.txt blk05688.txt blk05689.txt blk05690.txt blk05691.txt blk05692.txt blk05693.txt blk05694.txt blk05695.txt blk05696.txt blk05697.txt blk05698.txt blk05699.txt blk05700.txt blk05701.txt blk05702.txt blk05703.txt blk05704.txt blk05705.txt blk05706.txt blk05707.txt blk05708.txt blk05709.txt blk05710.txt blk05711.txt blk05712.txt blk05713.txt blk05714.txt blk05715.txt blk05716.txt blk05717.txt blk05718.txt blk05719.txt blk05720.txt blk05721.txt blk05722.txt blk05723.txt blk05724.txt blk05725.txt blk05726.txt blk05727.txt blk05728.txt blk05729.txt blk05730.txt blk05731.txt blk05732.txt blk05733.txt blk05734.txt blk05735.txt blk05736.txt blk05737.txt blk05738.txt blk05739.txt blk05740.txt blk05741.txt blk05742.txt blk05743.txt blk05744.txt blk05745.txt blk05746.txt blk05747.txt blk05748.txt blk05749.txt blk05750.txt blk05751.txt blk05752.txt blk05753.txt blk05754.txt blk05755.txt blk05756.txt blk05757.txt blk05758.txt blk05759.txt blk05760.txt blk05761.txt blk05762.txt blk05763.txt blk05764.txt blk05765.txt blk05766.txt blk05767.txt blk05768.txt blk05769.txt blk05770.txt blk05771.txt blk05772.txt blk05773.txt blk05774.txt blk05775.txt blk05776.txt blk05777.txt blk05778.txt blk05779.txt blk05780.txt blk05781.txt blk05782.txt blk05783.txt blk05784.txt blk05785.txt blk05786.txt blk05787.txt blk05788.txt blk05789.txt blk05790.txt blk05791.txt Show all files
Advertisement: