{"sources":{"DragonAgents.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\n/// @title Dragon Agents - 1,888 fully on-chain pixel Chinese dragons for Binance .ai agents. First 888 mints free, then 0.0002 BNB.\ninterface IERC721Bal { function balanceOf(address) external view returns (uint256); }\ninterface IReceiver { function onERC721Received(address,address,uint256,bytes calldata) external returns (bytes4); }\n\ncontract DragonAgents {\n    string public constant name = unicode\"龙 Agents\";\n    string public constant symbol = \"DRAGON\";\n    uint256 public constant MAX_SUPPLY = 1888;\n    uint256 public constant FREE_SUPPLY = 888;\n    uint256 public constant MAX_PER_WALLET = 5;\n    uint96 public constant ROYALTY_BPS = 500;\n    IERC721Bal public constant AGENT_ID = IERC721Bal(0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F);\n    string private constant DESC = \"Dragon Agents are 1,888 pixel dragons living 100% on BNB Chain - every pixel is drawn by the smart contract, no IPFS, nothing can rug the art. Only wallets holding a Binance .ai Agent ID can mint. The first 888 mints are free; after that each mint costs 0.0002 BNB. In Chinese tradition the dragon is the supreme symbol of power, luck and prosperity: it commands the rain and the rivers, guards hidden treasure and chases the flaming pearl of wisdom through the clouds. Traits include Emerald scales, crimson manes, antler horns, flowing whiskers, coiled bodies and treasures like the flaming pearl, the jade pearl and the golden pearl. May the dragon bring you rain, riches and rise.\";\n\n    address public owner;\n    address public immutable payout;\n    uint256 public price = 0.0002 ether;\n    bool public mintOpen = true;\n    uint256 public totalSupply;\n    uint256 public freeClaimed;\n\n    mapping(uint256 => address) private _owners;\n    mapping(address => uint256) private _balances;\n    mapping(uint256 => address) public getApproved;\n    mapping(address => mapping(address => bool)) public isApprovedForAll;\n    mapping(address => uint256) public mintedBy;\n    mapping(uint256 => uint256) private _seed;\n\n    event Transfer(address indexed from, address indexed to, uint256 indexed id);\n    event Approval(address indexed o, address indexed s, uint256 indexed id);\n    event ApprovalForAll(address indexed o, address indexed op, bool ok);\n    event OwnershipTransferred(address indexed prev, address indexed next);\n\n    constructor(address _owner, address _payout) {\n        owner = _owner; payout = _payout;\n        emit OwnershipTransferred(address(0), _owner);\n    }\n\n    modifier onlyOwner() { require(msg.sender == owner, \"owner\"); _; }\n\n    // ---------------- mint ----------------\n    function cost(address who, uint256 qty) public view returns (uint256) {\n        if (qty == 0) return 0;\n        bool free = mintedBy[who] == 0 && freeClaimed < FREE_SUPPLY;\n        return price * (free ? qty - 1 : qty);\n    }\n\n    function mint(uint256 qty) external payable {\n        require(mintOpen, \"closed\");\n        require(qty > 0 && mintedBy[msg.sender] + qty <= MAX_PER_WALLET, \"limit\");\n        require(totalSupply + qty <= MAX_SUPPLY, \"sold out\");\n        require(AGENT_ID.balanceOf(msg.sender) > 0, \"need .ai Agent ID\");\n        uint256 c = cost(msg.sender, qty);\n        require(msg.value >= c, \"price\");\n        if (mintedBy[msg.sender] == 0 && freeClaimed < FREE_SUPPLY) freeClaimed++;\n        mintedBy[msg.sender] += qty;\n        for (uint256 i; i < qty; i++) {\n            uint256 id = ++totalSupply;\n            _seed[id] = uint256(keccak256(abi.encode(id, msg.sender, block.prevrandao, block.timestamp)));\n            _owners[id] = msg.sender;\n            _balances[msg.sender]++;\n            emit Transfer(address(0), msg.sender, id);\n        }\n        if (msg.value > c) payable(msg.sender).transfer(msg.value - c);\n    }\n\n    function withdraw() external { payable(payout).transfer(address(this).balance); }\n    function setPrice(uint256 p) external onlyOwner { price = p; }\n    function setMintOpen(bool o) external onlyOwner { mintOpen = o; }\n    function transferOwnership(address n) external onlyOwner { emit OwnershipTransferred(owner, n); owner = n; }\n\n    // ---------------- ERC721 ----------------\n    function balanceOf(address a) external view returns (uint256) { require(a != address(0)); return _balances[a]; }\n    function ownerOf(uint256 id) public view returns (address o) { o = _owners[id]; require(o != address(0), \"none\"); }\n    function approve(address s, uint256 id) external {\n        address o = ownerOf(id);\n        require(msg.sender == o || isApprovedForAll[o][msg.sender], \"auth\");\n        getApproved[id] = s; emit Approval(o, s, id);\n    }\n    function setApprovalForAll(address op, bool ok) external { isApprovedForAll[msg.sender][op] = ok; emit ApprovalForAll(msg.sender, op, ok); }\n    function transferFrom(address f, address t, uint256 id) public {\n        require(f == ownerOf(id), \"from\");\n        require(t != address(0), \"to\");\n        require(msg.sender == f || isApprovedForAll[f][msg.sender] || msg.sender == getApproved[id], \"auth\");\n        _balances[f]--; _balances[t]++; _owners[id] = t; delete getApproved[id];\n        emit Transfer(f, t, id);\n    }\n    function safeTransferFrom(address f, address t, uint256 id) external { safeTransferFrom(f, t, id, \"\"); }\n    function safeTransferFrom(address f, address t, uint256 id, bytes memory d) public {\n        transferFrom(f, t, id);\n        if (t.code.length > 0) require(IReceiver(t).onERC721Received(msg.sender, f, id, d) == IReceiver.onERC721Received.selector, \"recv\");\n    }\n    function supportsInterface(bytes4 i) external pure returns (bool) {\n        return i == 0x01ffc9a7 || i == 0x80ac58cd || i == 0x5b5e139f || i == 0x2a55205a;\n    }\n    function royaltyInfo(uint256, uint256 sale) external view returns (address, uint256) { return (payout, sale * ROYALTY_BPS / 10000); }\n\n    // ---------------- traits ----------------\n    function _pick(uint256 r, uint8[8] memory cum, uint256 n) private pure returns (uint256) {\n        r = (r & 0xffff) % 100;\n        for (uint256 i; i < n; i++) if (r < cum[i]) return i;\n        return n - 1;\n    }\n    function _traits(uint256 s) private pure returns (uint256[7] memory t) {\n        t[0] = (s & 0xff) % 8;                                                   // background\n        t[1] = _pick(s >> 8, [uint8(30), 52, 66, 76, 84, 90, 95, 100], 8);      // scales\n        t[2] = _pick(s >> 24, [uint8(34), 60, 82, 100, 100, 100, 100, 100], 4);  // pattern\n        t[3] = _pick(s >> 40, [uint8(26), 46, 62, 74, 84, 91, 96, 100], 8);     // eyes\n        t[4] = _pick(s >> 56, [uint8(30), 55, 75, 90, 100, 100, 100, 100], 5);   // mane\n        t[5] = _pick(s >> 72, [uint8(45), 80, 100, 100, 100, 100, 100, 100], 3); // horns\n        t[6] = _pick(s >> 88, [uint8(20), 55, 78, 92, 100, 100, 100, 100], 5);   // treasure\n    }\n    function _bgC(uint256 i) private pure returns (string memory) {\n        return [\"#F0B90B\",\"#C8102E\",\"#0E5E42\",\"#14213D\",\"#F5E6CC\",\"#6D213C\",\"#065A60\",\"#E26D5C\"][i];\n    }\n    function _bgN(uint256 i) private pure returns (string memory) {\n        return [\"BNB Gold\",\"Lucky Red\",\"Jade\",\"Midnight\",\"Cream\",\"Plum\",\"Deep Teal\",\"Sunset\"][i];\n    }\n    function _furC(uint256 i) private pure returns (string memory) {\n        return [\"#2E7D5B\",\"#F2C230\",\"#2B50AA\",\"#C8102E\",\"#F7F3EA\",\"#5B2A86\",\"#33302B\",\"#0FA3A3\"][i];\n    }\n    function _furN(uint256 i) private pure returns (string memory) {\n        return [\"Emerald\",\"Imperial Gold\",\"Azure\",\"Crimson\",\"Pearl White\",\"Amethyst\",\"Obsidian\",\"Turquoise\"][i];\n    }\n    function _patN(uint256 i) private pure returns (string memory) { return [\"None\",\"Scale Shine\",\"Cloud Marks\",\"Belly Bands\"][i]; }\n    function _eyesN(uint256 i) private pure returns (string memory) {\n        return [\"Kind\",\"Joyful\",\"Golden\",\"BNB\",\"Sleepy\",\"Diamond\",\"Fierce\",\"Wink\"][i];\n    }\n    function _maneC(uint256 i) private pure returns (string memory) {\n        return [\"#C8102E\",\"#FFD700\",\"#F7F3EA\",\"#F08A24\",\"#5B2A86\"][i];\n    }\n    function _maneN(uint256 i) private pure returns (string memory) {\n        return [\"Crimson Mane\",\"Golden Mane\",\"Ivory Mane\",\"Flame Mane\",\"Royal Mane\"][i];\n    }\n    function _hornN(uint256 i) private pure returns (string memory) { return [\"Antlers\",\"Grand Antlers\",\"Short Horns\"][i]; }\n    function _treasureN(uint256 i) private pure returns (string memory) {\n        return [\"None\",\"Flaming Pearl\",\"Jade Pearl\",\"Golden Pearl\",\"Twin Pearls\"][i];\n    }\n\n    // ---------------- art ----------------\n    // 24x24 pixel grid, drawn as SVG rects exactly like the template collections.\n    // A _rect() builder keeps the bytecode under the 24,576-byte mainnet limit;\n    // the emitted SVG is identical in form to the template's literal rects.\n    function _rect(uint256 x, uint256 y, uint256 w, uint256 h, string memory f) private pure returns (string memory) {\n        return string.concat('<rect x=\"', _str(x), '\" y=\"', _str(y), '\" width=\"', _str(w), '\" height=\"', _str(h), '\" fill=\"', f, '\"/>');\n    }\n    function _rectO(uint256 x, uint256 y, uint256 w, uint256 h, string memory f, string memory op) private pure returns (string memory) {\n        return string.concat('<rect x=\"', _str(x), '\" y=\"', _str(y), '\" width=\"', _str(w), '\" height=\"', _str(h), '\" fill=\"', f, '\" fill-opacity=\"', op, '\"/>');\n    }\n    function _base(string memory fur, string memory mane) private pure returns (string memory) {\n        string memory oc = \"#2A1D16\";\n        // coiled body first, tail fin tipped with mane colour, so the head overlaps its top\n        string memory s = string.concat(_rect(10, 15, 4, 2, oc), _rect(11, 15, 2, 2, fur));\n        s = string.concat(s, _rect(5, 17, 14, 6, oc), _rect(6, 18, 12, 4, fur));\n        s = string.concat(s, _rect(19, 18, 3, 2, oc), _rect(20, 19, 1, 1, fur), _rect(20, 16, 3, 1, mane), _rect(21, 17, 2, 1, mane));\n        s = string.concat(s, _rect(5, 23, 14, 1, oc));\n        // mane: a wild ruff framing the head, silhouette then mane-colour border and side spikes\n        s = string.concat(s, _rect(3, 3, 18, 11, oc), _rect(4, 4, 16, 1, mane), _rect(4, 13, 16, 1, mane), _rect(4, 5, 1, 8, mane), _rect(19, 5, 1, 8, mane));\n        s = string.concat(s, _rect(2, 6, 1, 3, mane), _rect(21, 6, 1, 3, mane), _rect(2, 10, 1, 2, mane), _rect(21, 10, 1, 2, mane), _rect(10, 2, 4, 1, mane));\n        // head block and fill\n        s = string.concat(s, _rect(5, 4, 14, 9, oc), _rect(6, 5, 12, 7, fur));\n        // long snout, lit along the top\n        s = string.concat(s, _rect(8, 11, 8, 4, oc), _rect(9, 12, 6, 2, fur), _rectO(9, 12, 6, 1, \"#FFFFFF\", \".18\"));\n        // chin beard hanging over the coil\n        s = string.concat(s, _rect(11, 15, 2, 3, mane));\n        return s;\n    }\n    function _pattern(uint256 k) private pure returns (string memory) {\n        if (k == 0) return \"\";\n        string memory s;\n        if (k == 1) {\n            // scale shine: light flecks on the forehead and coil\n            s = string.concat(_rectO(11, 5, 2, 1, \"#FFFFFF\", \".15\"), _rectO(7, 19, 2, 1, \"#FFFFFF\", \".15\"), _rectO(15, 20, 2, 1, \"#FFFFFF\", \".15\"));\n            s = string.concat(s, _rectO(9, 21, 2, 1, \"#FFFFFF\", \".15\"), _rectO(16, 18, 1, 1, \"#FFFFFF\", \".15\"));\n            return s;\n        }\n        if (k == 2) {\n            // cloud marks curling over the coil\n            s = string.concat(_rectO(6, 19, 3, 1, \"#FFFFFF\", \".22\"), _rectO(6, 20, 1, 1, \"#FFFFFF\", \".22\"), _rectO(8, 21, 2, 1, \"#FFFFFF\", \".22\"));\n            s = string.concat(s, _rectO(15, 19, 3, 1, \"#FFFFFF\", \".22\"), _rectO(17, 20, 1, 1, \"#FFFFFF\", \".22\"), _rectO(14, 21, 2, 1, \"#FFFFFF\", \".22\"));\n            return s;\n        }\n        // belly bands across the coil\n        s = string.concat(_rectO(6, 19, 12, 1, \"#FFFFFF\", \".3\"), _rectO(6, 21, 12, 1, \"#FFFFFF\", \".3\"));\n        return s;\n    }\n    function _horns(uint256 k) private pure returns (string memory) {\n        string memory h = \"#B87333\";\n        string memory s;\n        if (k == 0) {\n            // antlers: a stem with two branches on each side\n            s = string.concat(_rect(4, 0, 1, 4, h), _rect(3, 1, 1, 1, h), _rect(5, 2, 1, 1, h), _rect(3, 3, 1, 1, h));\n            return string.concat(s, _rect(19, 0, 1, 4, h), _rect(20, 1, 1, 1, h), _rect(18, 2, 1, 1, h), _rect(20, 3, 1, 1, h));\n        }\n        if (k == 1) {\n            // grand antlers, taller with a zig-zag of branches\n            s = string.concat(_rect(3, 0, 1, 5, h), _rect(2, 1, 1, 1, h), _rect(4, 2, 1, 1, h), _rect(2, 3, 1, 1, h), _rect(4, 4, 1, 1, h));\n            return string.concat(s, _rect(20, 0, 1, 5, h), _rect(21, 1, 1, 1, h), _rect(19, 2, 1, 1, h), _rect(21, 3, 1, 1, h), _rect(19, 4, 1, 1, h));\n        }\n        // short horns\n        s = string.concat(_rect(5, 1, 2, 1, h), _rect(5, 2, 1, 1, h));\n        return string.concat(s, _rect(17, 1, 2, 1, h), _rect(18, 2, 1, 1, h));\n    }\n    function _whiskers() private pure returns (string memory) {\n        // long whiskers flowing out and down from the snout\n        string memory s = string.concat(_rectO(6, 12, 2, 1, \"#FFFFFF\", \".45\"), _rectO(3, 13, 3, 1, \"#FFFFFF\", \".45\"), _rectO(0, 14, 3, 1, \"#FFFFFF\", \".45\"));\n        return string.concat(s, _rectO(16, 12, 2, 1, \"#FFFFFF\", \".45\"), _rectO(18, 13, 3, 1, \"#FFFFFF\", \".45\"), _rectO(21, 14, 3, 1, \"#FFFFFF\", \".45\"));\n    }\n    function _ew() private pure returns (string memory) {\n        return string.concat(_rect(6, 7, 4, 3, \"#FFFFFF\"), _rect(14, 7, 4, 3, \"#FFFFFF\"));\n    }\n    function _iris(string memory c, string memory hl) private pure returns (string memory) {\n        return string.concat(_rect(7, 8, 2, 2, c), _rect(15, 8, 2, 2, c), _rect(7, 8, 1, 1, hl), _rect(15, 8, 1, 1, hl));\n    }\n    function _eyes(uint256 k) private pure returns (string memory) {\n        string memory oc = \"#2A1D16\";\n        if (k == 0) return string.concat(_ew(), _iris(\"#2B2B2B\", \"#FFFFFF\"));\n        if (k == 1) return string.concat(_rect(6, 8, 4, 1, oc), _rect(6, 7, 1, 1, oc), _rect(9, 7, 1, 1, oc), _rect(14, 8, 4, 1, oc), _rect(14, 7, 1, 1, oc), _rect(17, 7, 1, 1, oc));\n        if (k == 2) return string.concat(_ew(), _iris(\"#FFD700\", \"#111\"));\n        if (k == 3) return string.concat(_ew(), _rect(7, 8, 2, 2, \"#F0B90B\"), _rect(15, 8, 2, 2, \"#F0B90B\"), _rect(8, 7, 1, 3, \"#111\"), _rect(16, 7, 1, 3, \"#111\"));\n        if (k == 4) return string.concat(_rect(6, 9, 4, 1, oc), _rect(14, 9, 4, 1, oc), _rect(7, 10, 1, 1, oc), _rect(16, 10, 1, 1, oc));\n        if (k == 5) return string.concat(_ew(), _iris(\"#9BE7FF\", \"#111\"));\n        if (k == 6) {\n            string memory e = string.concat(_rect(6, 6, 2, 1, oc), _rect(8, 5, 2, 1, oc), _rect(14, 5, 2, 1, oc), _rect(16, 6, 2, 1, oc));\n            return string.concat(e, _rect(6, 8, 4, 2, \"#FFFFFF\"), _rect(14, 8, 4, 2, \"#FFFFFF\"), _rect(7, 9, 2, 1, oc), _rect(15, 9, 2, 1, oc));\n        }\n        // wink: left eye a joyful arc, right eye open\n        return string.concat(_rect(6, 8, 4, 1, oc), _rect(6, 7, 1, 1, oc), _rect(9, 7, 1, 1, oc), _rect(14, 7, 4, 3, \"#FFFFFF\"), _rect(15, 8, 2, 2, \"#2B2B2B\"), _rect(15, 8, 1, 1, \"#FFFFFF\"));\n    }\n    function _face() private pure returns (string memory) {\n        string memory oc = \"#2A1D16\";\n        // nostrils on the snout, and a red tongue between two fangs on the mouth line\n        string memory s = string.concat(_rect(10, 12, 1, 1, oc), _rect(13, 12, 1, 1, oc), _rect(9, 13, 1, 1, oc), _rect(14, 13, 1, 1, oc));\n        s = string.concat(s, _rect(10, 14, 1, 1, \"#FFFFFF\"), _rect(13, 14, 1, 1, \"#FFFFFF\"), _rect(11, 14, 2, 1, \"#C8102E\"));\n        return s;\n    }\n    function _treasure(uint256 k) private pure returns (string memory) {\n        if (k == 0) return \"\";\n        string memory s;\n        if (k == 1) {\n            // the flaming pearl, wreathed in fire above the coil\n            s = string.concat(_rect(11, 16, 2, 1, \"#F08A24\"), _rect(10, 17, 1, 2, \"#E8442E\"), _rect(13, 17, 1, 2, \"#E8442E\"));\n            s = string.concat(s, _rect(10, 19, 4, 1, \"#FFF3B0\"), _rect(9, 20, 6, 1, \"#FFFFFF\"), _rect(9, 21, 6, 1, \"#F5E6CC\"), _rect(10, 22, 4, 1, \"#D9C9A3\"), _rect(11, 20, 2, 1, \"#E8442E\"));\n            return s;\n        }\n        if (k == 2) {\n            // jade pearl resting on the coil\n            s = string.concat(_rect(10, 19, 4, 1, \"#35A06B\"), _rect(9, 20, 6, 1, \"#2E7D5B\"), _rect(9, 21, 6, 1, \"#2E7D5B\"), _rect(10, 22, 4, 1, \"#1F5C40\"));\n            s = string.concat(s, _rect(10, 20, 1, 1, \"#BFF3D6\"));\n            return s;\n        }\n        if (k == 3) {\n            // golden pearl resting on the coil\n            s = string.concat(_rect(10, 19, 4, 1, \"#FFE066\"), _rect(9, 20, 6, 1, \"#FFD700\"), _rect(9, 21, 6, 1, \"#FFD700\"), _rect(10, 22, 4, 1, \"#B8860B\"));\n            s = string.concat(s, _rect(10, 20, 1, 1, \"#FFF3B0\"));\n            return s;\n        }\n        // twin pearls, one gold and one jade\n        s = string.concat(_rect(8, 20, 3, 1, \"#FFD700\"), _rect(8, 21, 3, 1, \"#B8860B\"), _rect(13, 20, 3, 1, \"#35A06B\"), _rect(13, 21, 3, 1, \"#1F5C40\"));\n        return s;\n    }\n    function _svg(uint256 s) private pure returns (string memory) {\n        return _draw(_traits(s));\n    }\n    function _draw(uint256[7] memory t) private pure returns (string memory) {\n        return string.concat(\n            '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" shape-rendering=\"crispEdges\">',\n            string.concat('<rect x=\"0\" y=\"0\" width=\"24\" height=\"24\" fill=\"', _bgC(t[0]), '\"/>', _base(_furC(t[1]), _maneC(t[4])), _pattern(t[2])),\n            string.concat(_horns(t[5]), _whiskers(), _eyes(t[3]), _face(), _treasure(t[6])),\n            '</svg>'\n        );\n    }\n    function tokenURI(uint256 id) external view returns (string memory) {\n        ownerOf(id);\n        uint256 s = _seed[id];\n        uint256[7] memory t = _traits(s);\n        string memory attrs = string.concat(\n            string.concat('[{\"trait_type\":\"Background\",\"value\":\"', _bgN(t[0]), '\"},{\"trait_type\":\"Scales\",\"value\":\"', _furN(t[1]), '\"},{\"trait_type\":\"Pattern\",\"value\":\"', _patN(t[2])),\n            string.concat('\"},{\"trait_type\":\"Eyes\",\"value\":\"', _eyesN(t[3]), '\"},{\"trait_type\":\"Mane\",\"value\":\"', _maneN(t[4])),\n            string.concat('\"},{\"trait_type\":\"Horns\",\"value\":\"', _hornN(t[5]), '\"},{\"trait_type\":\"Treasure\",\"value\":\"', _treasureN(t[6]), '\"}]')\n        );\n        string memory json = string.concat(\n            '{\"name\":\"Dragon #', _str(id), '\",\"description\":\"', DESC,\n            '\",\"image\":\"data:image/svg+xml;base64,', _b64(bytes(_svg(s))), '\",\"attributes\":', attrs, '}'\n        );\n        return string.concat(\"data:application/json;base64,\", _b64(bytes(json)));\n    }\n    function contractURI() external view returns (string memory) {\n        string memory json = string.concat(\n            '{\"name\":\"Dragon Agents\",\"description\":\"', DESC,\n            '\",\"image\":\"data:image/svg+xml;base64,', _b64(bytes(_draw([uint256(1), 0, 3, 1, 0, 0, 2]))),\n            '\",\"seller_fee_basis_points\":500,\"fee_recipient\":\"', _hex(payout), '\"}'\n        );\n        return string.concat(\"data:application/json;base64,\", _b64(bytes(json)));\n    }\n\n    // ---------------- utils ----------------\n    function _hex(address a) private pure returns (string memory) {\n        bytes memory h = \"0123456789abcdef\"; bytes memory r = new bytes(42);\n        r[0] = \"0\"; r[1] = \"x\";\n        for (uint256 i; i < 20; i++) {\n            uint8 b = uint8(uint160(a) >> (8 * (19 - i)));\n            r[2 + i * 2] = h[b >> 4]; r[3 + i * 2] = h[b & 15];\n        }\n        return string(r);\n    }\n    function _str(uint256 v) private pure returns (string memory) {\n        if (v == 0) return \"0\";\n        uint256 l; for (uint256 t = v; t > 0; t /= 10) l++;\n        bytes memory b = new bytes(l);\n        while (v > 0) { b[--l] = bytes1(uint8(48 + v % 10)); v /= 10; }\n        return string(b);\n    }\n    function _b64(bytes memory data) private pure returns (string memory) {\n        bytes memory T = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n        uint256 len = data.length; if (len == 0) return \"\";\n        bytes memory r = new bytes(4 * ((len + 2) / 3));\n        uint256 j;\n        for (uint256 i; i < len; i += 3) {\n            uint256 a = uint8(data[i]);\n            uint256 b = i + 1 < len ? uint8(data[i + 1]) : 0;\n            uint256 c = i + 2 < len ? uint8(data[i + 2]) : 0;\n            uint256 n = (a << 16) | (b << 8) | c;\n            r[j++] = T[(n >> 18) & 63]; r[j++] = T[(n >> 12) & 63];\n            r[j++] = i + 1 < len ? T[(n >> 6) & 63] : bytes1(\"=\");\n            r[j++] = i + 2 < len ? T[n & 63] : bytes1(\"=\");\n        }\n        return string(r);\n    }\n}\n"}},"abi":[{"type":"constructor","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_payout","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"name":"Approval","type":"event","inputs":[{"name":"o","type":"address","indexed":true,"internalType":"address"},{"name":"s","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"ApprovalForAll","type":"event","inputs":[{"name":"o","type":"address","indexed":true,"internalType":"address"},{"name":"op","type":"address","indexed":true,"internalType":"address"},{"name":"ok","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"name":"OwnershipTransferred","type":"event","inputs":[{"name":"prev","type":"address","indexed":true,"internalType":"address"},{"name":"next","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"AGENT_ID","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC721Bal"}],"stateMutability":"view"},{"name":"FREE_SUPPLY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_PER_WALLET","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MAX_SUPPLY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"ROYALTY_BPS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint96","internalType":"uint96"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"s","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"a","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"contractURI","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"cost","type":"function","inputs":[{"name":"who","type":"address","internalType":"address"},{"name":"qty","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"freeClaimed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"getApproved","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"isApprovedForAll","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"mint","type":"function","inputs":[{"name":"qty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"name":"mintOpen","type":"function","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"mintedBy","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"ownerOf","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"o","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"payout","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"price","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"royaltyInfo","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"sale","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"safeTransferFrom","type":"function","inputs":[{"name":"f","type":"address","internalType":"address"},{"name":"t","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"safeTransferFrom","type":"function","inputs":[{"name":"f","type":"address","internalType":"address"},{"name":"t","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"d","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setApprovalForAll","type":"function","inputs":[{"name":"op","type":"address","internalType":"address"},{"name":"ok","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setMintOpen","type":"function","inputs":[{"name":"o","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setPrice","type":"function","inputs":[{"name":"p","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"supportsInterface","type":"function","inputs":[{"name":"i","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"tokenURI","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transferFrom","type":"function","inputs":[{"name":"f","type":"address","internalType":"address"},{"name":"t","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"transferOwnership","type":"function","inputs":[{"name":"n","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"withdraw","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"}],"matchId":"59124174","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-11-11T22:52:03Z","match":"exact_match","chainId":"56","address":"0xad0D8ac3D61fC8ab397B7136C69fcBf1281a4998"}