// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
/**
* @title Warstreet
* @notice 10,000 chess-rank soldiers across 100 tokenized-stock factions.
* - Cheap mint of a specific unit (the one the player clicks). Mint proceeds fund the project.
* - 10% secondary royalty flows into a reward pool (this contract is the royalty receiver).
* - An authoritative battle server (the `oracle`) submits results:
* * payoutCentury(top5): pays 10% of the pool to the creator, 90% split (18% each) to the
* owners of the current top-5 NFTs — but only owners holding >= MIN_HOLD (6).
* * burnUnits(ids): burns NFTs that reached the death cap (pure deflation, no refund).
* - Metadata (image + 3D animation_url) is served from baseURI/<tokenId> (IPFS).
*/
contract Warstreet is ERC721Royalty, Ownable, ReentrancyGuard {
uint256 public constant MAX_SUPPLY = 10_000;
uint256 public constant MIN_HOLD = 6; // must hold >= 6 to collect rewards
uint96 public constant ROYALTY_BPS = 1000; // 10%
uint256 public mintPrice; // cheap; settable by owner
string private baseTokenURI; // e.g. ipfs://<cid>/ (tokenURI = base + tokenId)
address public oracle; // authoritative battle server
address public immutable treasury; // cold wallet: receives mint proceeds + creator cut (cannot be changed)
uint256 public rewardPool; // ETH from royalties, paid to top-5
uint256 public totalMinted;
uint256 public totalBurned;
event Minted(address indexed to, uint256 indexed tokenId);
event RoyaltyReceived(uint256 amount);
event CenturyPayout(uint256 poolPaid, uint256 creatorCut, uint256 perHolder);
event UnitsBurned(uint256 count);
error SoldOut();
error TokenTaken();
error BadToken();
error Underpaid();
error NotOracle();
modifier onlyOracle() {
if (msg.sender != oracle) revert NotOracle();
_;
}
constructor(uint256 _mintPrice, string memory _base, address _oracle, address _treasury)
ERC721("Warstreet", "WAR")
Ownable(msg.sender)
{
require(_treasury != address(0), "treasury=0");
mintPrice = _mintPrice;
baseTokenURI = _base;
oracle = _oracle;
treasury = _treasury;
_setDefaultRoyalty(address(this), ROYALTY_BPS); // royalties -> reward pool
}
// --------------------------------------------------------------------- mint
/// @notice Mint the specific unit the player selected (tokenId in [0, MAX_SUPPLY)).
function mint(uint256 tokenId) external payable nonReentrant {
if (totalMinted >= MAX_SUPPLY) revert SoldOut();
if (tokenId >= MAX_SUPPLY) revert BadToken();
if (_ownerOf(tokenId) != address(0)) revert TokenTaken();
if (msg.value < mintPrice) revert Underpaid();
totalMinted += 1;
_safeMint(msg.sender, tokenId);
_pay(treasury, mintPrice); // proceeds go straight to the cold treasury
uint256 excess = msg.value - mintPrice;
if (excess > 0) _pay(msg.sender, excess); // refund overpayment
emit Minted(msg.sender, tokenId);
}
// ----------------------------------------------------------- reward inflow
/// @notice Marketplace royalties (and any ETH sent here) accrue to the reward pool.
receive() external payable {
rewardPool += msg.value;
emit RoyaltyReceived(msg.value);
}
// -------------------------------------------------------- oracle: payouts
/// @notice Pay the reward pool to the current top-5 NFTs' owners. Creator 10%, holders 90% (18% each).
/// @dev Shares for owners not holding >= MIN_HOLD are kept in the pool for the next round.
function payoutCentury(uint256[5] calldata topFive) external onlyOracle nonReentrant {
uint256 pool = rewardPool;
if (pool == 0) return;
rewardPool = 0;
uint256 creatorCut = pool / 10; // 10%
uint256 perHolder = (pool * 90) / 100 / 5; // 18% each
uint256 distributed = 0;
_pay(treasury, creatorCut);
distributed += creatorCut;
for (uint256 i = 0; i < 5; i++) {
address h = _ownerOf(topFive[i]);
if (h != address(0) && balanceOf(h) >= MIN_HOLD) {
_pay(h, perHolder);
distributed += perHolder;
}
}
// Return anything not distributed (rounding dust + ineligible shares) to the pool.
if (distributed < pool) rewardPool += (pool - distributed);
emit CenturyPayout(pool, creatorCut, perHolder);
}
// ----------------------------------------------------------- oracle: burns
/// @notice Burn units that reached the death cap (pure deflation, no refund).
function burnUnits(uint256[] calldata tokenIds) external onlyOracle {
uint256 n;
for (uint256 i = 0; i < tokenIds.length; i++) {
if (_ownerOf(tokenIds[i]) != address(0)) {
_burn(tokenIds[i]);
n++;
}
}
totalBurned += n;
emit UnitsBurned(n);
}
// --------------------------------------------------------------- admin
function setBaseURI(string calldata b) external onlyOwner { baseTokenURI = b; }
function setMintPrice(uint256 p) external onlyOwner { mintPrice = p; }
function setOracle(address o) external onlyOwner { oracle = o; }
// --------------------------------------------------------------- internal
function _baseURI() internal view override returns (string memory) {
return baseTokenURI;
}
function _pay(address to, uint256 amt) private {
if (amt == 0) return;
(bool ok, ) = payable(to).call{value: amt}("");
require(ok, "pay failed");
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_mintPrice",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_base",
"type": "string",
"internalType": "string"
},
{
"name": "_oracle",
"type": "address",
"internalType": "address"
},
{
"name": "_treasury",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "BadToken",
"type": "error",
"inputs": []
},
{
"name": "ERC2981InvalidDefaultRoyalty",
"type": "error",
"inputs": [
{
"name": "numerator",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "denominator",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC2981InvalidDefaultRoyaltyReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC2981InvalidTokenRoyalty",
"type": "error",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "numerator",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "denominator",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC2981InvalidTokenRoyaltyReceiver",
"type": "error",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721IncorrectOwner",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InsufficientApproval",
"type": "error",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC721InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidOperator",
"type": "error",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721NonexistentToken",
"type": "error",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "NotOracle",
"type": "error",
"inputs": []
},
{
"name": "OwnableInvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SoldOut",
"type": "error",
"inputs": []
},
{
"name": "TokenTaken",
"type": "error",
"inputs": []
},
{
"name": "Underpaid",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ApprovalForAll",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "CenturyPayout",
"type": "event",
"inputs": [
{
"name": "poolPaid",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "creatorCut",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "perHolder",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Minted",
"type": "event",
"inputs": [
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RoyaltyReceived",
"type": "event",
"inputs": [
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "UnitsBurned",
"type": "event",
"inputs": [
{
"name": "count",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MAX_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MIN_HOLD",
"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": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "burnUnits",
"type": "function",
"inputs": [
{
"name": "tokenIds",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "getApproved",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "isApprovedForAll",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "mint",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "mintPrice",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "oracle",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "ownerOf",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "payoutCentury",
"type": "function",
"inputs": [
{
"name": "topFive",
"type": "uint256[5]",
"internalType": "uint256[5]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "rewardPool",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "royaltyInfo",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "salePrice",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setApprovalForAll",
"type": "function",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setBaseURI",
"type": "function",
"inputs": [
{
"name": "b",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setMintPrice",
"type": "function",
"inputs": [
{
"name": "p",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setOracle",
"type": "function",
"inputs": [
{
"name": "o",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "supportsInterface",
"type": "function",
"inputs": [
{
"name": "interfaceId",
"type": "bytes4",
"internalType": "bytes4"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "tokenURI",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalBurned",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalMinted",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "treasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x60a06040523480156200001157600080fd5b50604051620022d0380380620022d0833981016040819052620000349162000299565b336040518060400160405280600981526020016815d85c9cdd1c99595d60ba1b815250604051806040016040528060038152602001622ba0a960e91b81525081600290816200008491906200042f565b5060036200009382826200042f565b5050506001600160a01b038116620000c657604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000d1816200016d565b5060016009556001600160a01b0381166200011c5760405162461bcd60e51b815260206004820152600a602482015269074726561737572793d360b41b6044820152606401620000bd565b600a849055600b6200012f84826200042f565b50600c80546001600160a01b0319166001600160a01b0384811691909117909155811660805262000163306103e8620001bf565b50505050620004fb565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106001600160601b0382168110156200020057604051636f483d0960e01b81526001600160601b038316600482015260248101829052604401620000bd565b6001600160a01b0383166200022c57604051635b6cc80560e11b815260006004820152602401620000bd565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200029457600080fd5b919050565b60008060008060808587031215620002b057600080fd5b8451602080870151919550906001600160401b0380821115620002d257600080fd5b818801915088601f830112620002e757600080fd5b815181811115620002fc57620002fc62000266565b604051601f8201601f19908116603f0116810190838211818310171562000327576200032762000266565b816040528281528b868487010111156200034057600080fd5b600093505b8284101562000364578484018601518185018701529285019262000345565b600086848301015280985050505050505062000383604086016200027c565b915062000393606086016200027c565b905092959194509250565b600181811c90821680620003b357607f821691505b602082108103620003d457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042a576000816000526020600020601f850160051c81016020861015620004055750805b601f850160051c820191505b81811015620004265782815560010162000411565b5050505b505050565b81516001600160401b038111156200044b576200044b62000266565b62000463816200045c84546200039e565b84620003da565b602080601f8311600181146200049b5760008415620004825750858301515b600019600386901b1c1916600185901b17855562000426565b600085815260208120601f198616915b82811015620004cc57888601518255948401946001909101908401620004ab565b5085821015620004eb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611dab620005256000396000818161040601528181610b1b0152610c480152611dab6000f3fe6080604052600436106101e75760003560e01c8063715018a611610102578063a2309ff811610095578063d89135cd11610064578063d89135cd146105e5578063e985e9c5146105fb578063f2fde38b1461061b578063f4a0a5281461063b57600080fd5b8063a2309ff81461056f578063b88d4fde14610585578063c3126f40146105a5578063c87b56dd146105c557600080fd5b80638da5cb5b116100d15780638da5cb5b1461050957806395d89b4114610527578063a0712d681461053c578063a22cb4651461054f57600080fd5b8063715018a6146104945780637adbf973146104a95780637dc0d1d0146104c95780637e31e006146104e957600080fd5b806342842e0e1161017a5780636352211e116101495780636352211e1461042857806366666aa9146104485780636817c76c1461045e57806370a082311461047457600080fd5b806342842e0e1461038657806349c657db146103a657806355f804b3146103d457806361d027b3146103f457600080fd5b8063126457e1116101b6578063126457e1146102ee57806323b872dd146103115780632a55205a1461033157806332cb6b0c1461037057600080fd5b806301ffc9a71461023d57806306fdde0314610272578063081812fc14610294578063095ea7b3146102cc57600080fd5b366102385734600d60008282546101fe919061174e565b90915550506040513481527f4ee1650382bd39b3e43ac1f021e744a11710cc313e924ab84b3781f524e231819060200160405180910390a1005b600080fd5b34801561024957600080fd5b5061025d610258366004611777565b61065b565b60405190151581526020015b60405180910390f35b34801561027e57600080fd5b5061028761066c565b60405161026991906117e4565b3480156102a057600080fd5b506102b46102af3660046117f7565b6106fe565b6040516001600160a01b039091168152602001610269565b3480156102d857600080fd5b506102ec6102e736600461182c565b610727565b005b3480156102fa57600080fd5b50610303600681565b604051908152602001610269565b34801561031d57600080fd5b506102ec61032c366004611856565b610736565b34801561033d57600080fd5b5061035161034c366004611892565b6107c6565b604080516001600160a01b039093168352602083019190915201610269565b34801561037c57600080fd5b5061030361271081565b34801561039257600080fd5b506102ec6103a1366004611856565b610872565b3480156103b257600080fd5b506103bc6103e881565b6040516001600160601b039091168152602001610269565b3480156103e057600080fd5b506102ec6103ef3660046118b4565b610892565b34801561040057600080fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b34801561043457600080fd5b506102b46104433660046117f7565b6108a7565b34801561045457600080fd5b50610303600d5481565b34801561046a57600080fd5b50610303600a5481565b34801561048057600080fd5b5061030361048f366004611926565b6108b2565b3480156104a057600080fd5b506102ec6108fa565b3480156104b557600080fd5b506102ec6104c4366004611926565b61090e565b3480156104d557600080fd5b50600c546102b4906001600160a01b031681565b3480156104f557600080fd5b506102ec610504366004611941565b610938565b34801561051557600080fd5b506008546001600160a01b03166102b4565b34801561053357600080fd5b50610287610a3d565b6102ec61054a3660046117f7565b610a4c565b34801561055b57600080fd5b506102ec61056a3660046119a4565b610b9f565b34801561057b57600080fd5b50610303600e5481565b34801561059157600080fd5b506102ec6105a03660046119f6565b610baa565b3480156105b157600080fd5b506102ec6105c0366004611ad2565b610bc1565b3480156105d157600080fd5b506102876105e03660046117f7565b610d7e565b3480156105f157600080fd5b50610303600f5481565b34801561060757600080fd5b5061025d610616366004611afa565b610de6565b34801561062757600080fd5b506102ec610636366004611926565b610e14565b34801561064757600080fd5b506102ec6106563660046117f7565b610e4f565b600061066682610e5c565b92915050565b60606002805461067b90611b2d565b80601f01602080910402602001604051908101604052809291908181526020018280546106a790611b2d565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b5050505050905090565b600061070982610e9c565b506000828152600660205260409020546001600160a01b0316610666565b610732828233610ed5565b5050565b6001600160a01b03821661076557604051633250574960e11b8152600060048201526024015b60405180910390fd5b6000610772838333610ee2565b9050836001600160a01b0316816001600160a01b0316146107c0576040516364283d7b60e01b81526001600160a01b038086166004830152602482018490528216604482015260640161075c565b50505050565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b031692820192909252829161083b5750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101516000906127109061085a906001600160601b031687611b61565b6108649190611b78565b915196919550909350505050565b61088d83838360405180602001604052806000815250610baa565b505050565b61089a610fdb565b600b61088d828483611bea565b600061066682610e9c565b60006001600160a01b0382166108de576040516322718ad960e21b81526000600482015260240161075c565b506001600160a01b031660009081526005602052604090205490565b610902610fdb565b61090c6000611008565b565b610916610fdb565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b0316331461096357604051631bc2178f60e01b815260040160405180910390fd5b6000805b828110156109ed5760006109a885858481811061098657610986611caa565b905060200201356000908152600460205260409020546001600160a01b031690565b6001600160a01b0316146109e5576109d78484838181106109cb576109cb611caa565b9050602002013561105a565b816109e181611cc0565b9250505b600101610967565b5080600f6000828254610a00919061174e565b90915550506040518181527fc64be795f0ad1c12668871b5a86da06a72d6e73e3be6b533c84acb6c6a01f76f9060200160405180910390a1505050565b60606003805461067b90611b2d565b610a54611095565b612710600e5410610a78576040516352df9fe560e01b815260040160405180910390fd5b6127108110610a9a57604051637401d93160e01b815260040160405180910390fd5b6000818152600460205260409020546001600160a01b031615610ad057604051637fd5d10160e01b815260040160405180910390fd5b600a54341015610af35760405163949ce24160e01b815260040160405180910390fd5b6001600e6000828254610b06919061174e565b90915550610b16905033826110bf565b610b427f0000000000000000000000000000000000000000000000000000000000000000600a546110d9565b6000600a5434610b529190611cd9565b90508015610b6457610b6433826110d9565b604051829033907f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe90600090a350610b9c6001600955565b50565b610732338383611175565b610bb5848484610736565b6107c084848484611214565b600c546001600160a01b03163314610bec57604051631bc2178f60e01b815260040160405180910390fd5b610bf4611095565b600d546000819003610c065750610d74565b6000600d819055610c18600a83611b78565b9050600060056064610c2b85605a611b61565b610c359190611b78565b610c3f9190611b78565b90506000610c6d7f0000000000000000000000000000000000000000000000000000000000000000846110d9565b610c77838261174e565b905060005b6005811015610d04576000610cbc878360058110610c9c57610c9c611caa565b60200201356000908152600460205260409020546001600160a01b031690565b90506001600160a01b03811615801590610cdf57506006610cdc826108b2565b10155b15610cfb57610cee81856110d9565b610cf8848461174e565b92505b50600101610c7c565b5083811015610d2e57610d178185611cd9565b600d6000828254610d28919061174e565b90915550505b60408051858152602081018590529081018390527f757d24358276a73ba44104ee95ff68f2665534a7cec919ab4fe869361a95fda69060600160405180910390a1505050505b610b9c6001600955565b6060610d8982610e9c565b506000610d9461133d565b90506000815111610db45760405180602001604052806000815250610ddf565b80610dbe8461134c565b604051602001610dcf929190611cec565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b610e1c610fdb565b6001600160a01b038116610e4657604051631e4fbdf760e01b81526000600482015260240161075c565b610b9c81611008565b610e57610fdb565b600a55565b60006001600160e01b031982166380ac58cd60e01b1480610e8d57506001600160e01b03198216635b5e139f60e01b145b806106665750610666826113df565b6000818152600460205260408120546001600160a01b03168061066657604051637e27328960e01b81526004810184905260240161075c565b61088d8383836001611414565b6000828152600460205260408120546001600160a01b0390811690831615610f0f57610f0f81848661151a565b6001600160a01b03811615610f4d57610f2c600085600080611414565b6001600160a01b038116600090815260056020526040902080546000190190555b6001600160a01b03851615610f7c576001600160a01b0385166000908152600560205260409020805460010190555b60008481526004602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6008546001600160a01b0316331461090c5760405163118cdaa760e01b815233600482015260240161075c565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006110696000836000610ee2565b90506001600160a01b03811661073257604051637e27328960e01b81526004810183905260240161075c565b6002600954036110b857604051633ee5aeb560e01b815260040160405180910390fd5b6002600955565b61073282826040518060200160405280600081525061157e565b806000036110e5575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611132576040519150601f19603f3d011682016040523d82523d6000602084013e611137565b606091505b505090508061088d5760405162461bcd60e51b815260206004820152600a6024820152691c185e4819985a5b195960b21b604482015260640161075c565b6001600160a01b0382166111a757604051630b61174360e31b81526001600160a01b038316600482015260240161075c565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156107c057604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611256903390889087908790600401611d1b565b6020604051808303816000875af1925050508015611291575060408051601f3d908101601f1916820190925261128e91810190611d58565b60015b6112fa573d8080156112bf576040519150601f19603f3d011682016040523d82523d6000602084013e6112c4565b606091505b5080516000036112f257604051633250574960e11b81526001600160a01b038516600482015260240161075c565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461133657604051633250574960e11b81526001600160a01b038516600482015260240161075c565b5050505050565b6060600b805461067b90611b2d565b6060600061135983611595565b600101905060008167ffffffffffffffff811115611379576113796119e0565b6040519080825280601f01601f1916602001820160405280156113a3576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846113ad57509392505050565b60006001600160e01b0319821663152a902d60e11b148061066657506301ffc9a760e01b6001600160e01b0319831614610666565b808061142857506001600160a01b03821615155b156114ea57600061143884610e9c565b90506001600160a01b038316158015906114645750826001600160a01b0316816001600160a01b031614155b801561147757506114758184610de6565b155b156114a05760405163a9fbf51f60e01b81526001600160a01b038416600482015260240161075c565b81156114e85783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260066020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61152583838361166d565b61088d576001600160a01b03831661155357604051637e27328960e01b81526004810182905260240161075c565b60405163177e802f60e01b81526001600160a01b03831660048201526024810182905260440161075c565b61158883836116d3565b61088d6000848484611214565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106115d45772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611600576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061161e57662386f26fc10000830492506010015b6305f5e1008310611636576305f5e100830492506008015b612710831061164a57612710830492506004015b6064831061165c576064830492506002015b600a83106106665760010192915050565b60006001600160a01b038316158015906116cb5750826001600160a01b0316846001600160a01b031614806116a757506116a78484610de6565b806116cb57506000828152600660205260409020546001600160a01b038481169116145b949350505050565b6001600160a01b0382166116fd57604051633250574960e11b81526000600482015260240161075c565b600061170b83836000610ee2565b90506001600160a01b0381161561088d576040516339e3563760e11b81526000600482015260240161075c565b634e487b7160e01b600052601160045260246000fd5b8082018082111561066657610666611738565b6001600160e01b031981168114610b9c57600080fd5b60006020828403121561178957600080fd5b8135610ddf81611761565b60005b838110156117af578181015183820152602001611797565b50506000910152565b600081518084526117d0816020860160208601611794565b601f01601f19169290920160200192915050565b602081526000610ddf60208301846117b8565b60006020828403121561180957600080fd5b5035919050565b80356001600160a01b038116811461182757600080fd5b919050565b6000806040838503121561183f57600080fd5b61184883611810565b946020939093013593505050565b60008060006060848603121561186b57600080fd5b61187484611810565b925061188260208501611810565b9150604084013590509250925092565b600080604083850312156118a557600080fd5b50508035926020909101359150565b600080602083850312156118c757600080fd5b823567ffffffffffffffff808211156118df57600080fd5b818501915085601f8301126118f357600080fd5b81358181111561190257600080fd5b86602082850101111561191457600080fd5b60209290920196919550909350505050565b60006020828403121561193857600080fd5b610ddf82611810565b6000806020838503121561195457600080fd5b823567ffffffffffffffff8082111561196c57600080fd5b818501915085601f83011261198057600080fd5b81358181111561198f57600080fd5b8660208260051b850101111561191457600080fd5b600080604083850312156119b757600080fd5b6119c083611810565b9150602083013580151581146119d557600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611a0c57600080fd5b611a1585611810565b9350611a2360208601611810565b925060408501359150606085013567ffffffffffffffff80821115611a4757600080fd5b818701915087601f830112611a5b57600080fd5b813581811115611a6d57611a6d6119e0565b604051601f8201601f19908116603f01168101908382118183101715611a9557611a956119e0565b816040528281528a6020848701011115611aae57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600060a08284031215611ae457600080fd5b8260a083011115611af457600080fd5b50919050565b60008060408385031215611b0d57600080fd5b611b1683611810565b9150611b2460208401611810565b90509250929050565b600181811c90821680611b4157607f821691505b602082108103611af457634e487b7160e01b600052602260045260246000fd5b808202811582820484141761066657610666611738565b600082611b9557634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561088d576000816000526020600020601f850160051c81016020861015611bc35750805b601f850160051c820191505b81811015611be257828155600101611bcf565b505050505050565b67ffffffffffffffff831115611c0257611c026119e0565b611c1683611c108354611b2d565b83611b9a565b6000601f841160018114611c4a5760008515611c325750838201355b600019600387901b1c1916600186901b178355611336565b600083815260209020601f19861690835b82811015611c7b5786850135825560209485019460019092019101611c5b565b5086821015611c985760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201611cd257611cd2611738565b5060010190565b8181038181111561066657610666611738565b60008351611cfe818460208801611794565b835190830190611d12818360208801611794565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d4e908301846117b8565b9695505050505050565b600060208284031215611d6a57600080fd5b8151610ddf8161176156fea264697066735822122033e38f9196c0ec58f13784bfb224a1edff559efe29b984d08bd840bb5317f81864736f6c634300081800330000000000000000000000000000000000000000000000000000fea8948980000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000cf07ec4f94fa83aa1af653b88052be9e0cd301f9000000000000000000000000f726af5db915b1dcbdc1ae5be6bc5dc2603c673a0000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656968697967613363656e656a7a65373361647471617035677233727877626e69696e6c7173776c746568637568367a703277356f612f0000000000000000000000000000000000000000000000000000000000
0x6080604052600436106101e75760003560e01c8063715018a611610102578063a2309ff811610095578063d89135cd11610064578063d89135cd146105e5578063e985e9c5146105fb578063f2fde38b1461061b578063f4a0a5281461063b57600080fd5b8063a2309ff81461056f578063b88d4fde14610585578063c3126f40146105a5578063c87b56dd146105c557600080fd5b80638da5cb5b116100d15780638da5cb5b1461050957806395d89b4114610527578063a0712d681461053c578063a22cb4651461054f57600080fd5b8063715018a6146104945780637adbf973146104a95780637dc0d1d0146104c95780637e31e006146104e957600080fd5b806342842e0e1161017a5780636352211e116101495780636352211e1461042857806366666aa9146104485780636817c76c1461045e57806370a082311461047457600080fd5b806342842e0e1461038657806349c657db146103a657806355f804b3146103d457806361d027b3146103f457600080fd5b8063126457e1116101b6578063126457e1146102ee57806323b872dd146103115780632a55205a1461033157806332cb6b0c1461037057600080fd5b806301ffc9a71461023d57806306fdde0314610272578063081812fc14610294578063095ea7b3146102cc57600080fd5b366102385734600d60008282546101fe919061174e565b90915550506040513481527f4ee1650382bd39b3e43ac1f021e744a11710cc313e924ab84b3781f524e231819060200160405180910390a1005b600080fd5b34801561024957600080fd5b5061025d610258366004611777565b61065b565b60405190151581526020015b60405180910390f35b34801561027e57600080fd5b5061028761066c565b60405161026991906117e4565b3480156102a057600080fd5b506102b46102af3660046117f7565b6106fe565b6040516001600160a01b039091168152602001610269565b3480156102d857600080fd5b506102ec6102e736600461182c565b610727565b005b3480156102fa57600080fd5b50610303600681565b604051908152602001610269565b34801561031d57600080fd5b506102ec61032c366004611856565b610736565b34801561033d57600080fd5b5061035161034c366004611892565b6107c6565b604080516001600160a01b039093168352602083019190915201610269565b34801561037c57600080fd5b5061030361271081565b34801561039257600080fd5b506102ec6103a1366004611856565b610872565b3480156103b257600080fd5b506103bc6103e881565b6040516001600160601b039091168152602001610269565b3480156103e057600080fd5b506102ec6103ef3660046118b4565b610892565b34801561040057600080fd5b506102b47f000000000000000000000000f726af5db915b1dcbdc1ae5be6bc5dc2603c673a81565b34801561043457600080fd5b506102b46104433660046117f7565b6108a7565b34801561045457600080fd5b50610303600d5481565b34801561046a57600080fd5b50610303600a5481565b34801561048057600080fd5b5061030361048f366004611926565b6108b2565b3480156104a057600080fd5b506102ec6108fa565b3480156104b557600080fd5b506102ec6104c4366004611926565b61090e565b3480156104d557600080fd5b50600c546102b4906001600160a01b031681565b3480156104f557600080fd5b506102ec610504366004611941565b610938565b34801561051557600080fd5b506008546001600160a01b03166102b4565b34801561053357600080fd5b50610287610a3d565b6102ec61054a3660046117f7565b610a4c565b34801561055b57600080fd5b506102ec61056a3660046119a4565b610b9f565b34801561057b57600080fd5b50610303600e5481565b34801561059157600080fd5b506102ec6105a03660046119f6565b610baa565b3480156105b157600080fd5b506102ec6105c0366004611ad2565b610bc1565b3480156105d157600080fd5b506102876105e03660046117f7565b610d7e565b3480156105f157600080fd5b50610303600f5481565b34801561060757600080fd5b5061025d610616366004611afa565b610de6565b34801561062757600080fd5b506102ec610636366004611926565b610e14565b34801561064757600080fd5b506102ec6106563660046117f7565b610e4f565b600061066682610e5c565b92915050565b60606002805461067b90611b2d565b80601f01602080910402602001604051908101604052809291908181526020018280546106a790611b2d565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b5050505050905090565b600061070982610e9c565b506000828152600660205260409020546001600160a01b0316610666565b610732828233610ed5565b5050565b6001600160a01b03821661076557604051633250574960e11b8152600060048201526024015b60405180910390fd5b6000610772838333610ee2565b9050836001600160a01b0316816001600160a01b0316146107c0576040516364283d7b60e01b81526001600160a01b038086166004830152602482018490528216604482015260640161075c565b50505050565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b031692820192909252829161083b5750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101516000906127109061085a906001600160601b031687611b61565b6108649190611b78565b915196919550909350505050565b61088d83838360405180602001604052806000815250610baa565b505050565b61089a610fdb565b600b61088d828483611bea565b600061066682610e9c565b60006001600160a01b0382166108de576040516322718ad960e21b81526000600482015260240161075c565b506001600160a01b031660009081526005602052604090205490565b610902610fdb565b61090c6000611008565b565b610916610fdb565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b0316331461096357604051631bc2178f60e01b815260040160405180910390fd5b6000805b828110156109ed5760006109a885858481811061098657610986611caa565b905060200201356000908152600460205260409020546001600160a01b031690565b6001600160a01b0316146109e5576109d78484838181106109cb576109cb611caa565b9050602002013561105a565b816109e181611cc0565b9250505b600101610967565b5080600f6000828254610a00919061174e565b90915550506040518181527fc64be795f0ad1c12668871b5a86da06a72d6e73e3be6b533c84acb6c6a01f76f9060200160405180910390a1505050565b60606003805461067b90611b2d565b610a54611095565b612710600e5410610a78576040516352df9fe560e01b815260040160405180910390fd5b6127108110610a9a57604051637401d93160e01b815260040160405180910390fd5b6000818152600460205260409020546001600160a01b031615610ad057604051637fd5d10160e01b815260040160405180910390fd5b600a54341015610af35760405163949ce24160e01b815260040160405180910390fd5b6001600e6000828254610b06919061174e565b90915550610b16905033826110bf565b610b427f000000000000000000000000f726af5db915b1dcbdc1ae5be6bc5dc2603c673a600a546110d9565b6000600a5434610b529190611cd9565b90508015610b6457610b6433826110d9565b604051829033907f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe90600090a350610b9c6001600955565b50565b610732338383611175565b610bb5848484610736565b6107c084848484611214565b600c546001600160a01b03163314610bec57604051631bc2178f60e01b815260040160405180910390fd5b610bf4611095565b600d546000819003610c065750610d74565b6000600d819055610c18600a83611b78565b9050600060056064610c2b85605a611b61565b610c359190611b78565b610c3f9190611b78565b90506000610c6d7f000000000000000000000000f726af5db915b1dcbdc1ae5be6bc5dc2603c673a846110d9565b610c77838261174e565b905060005b6005811015610d04576000610cbc878360058110610c9c57610c9c611caa565b60200201356000908152600460205260409020546001600160a01b031690565b90506001600160a01b03811615801590610cdf57506006610cdc826108b2565b10155b15610cfb57610cee81856110d9565b610cf8848461174e565b92505b50600101610c7c565b5083811015610d2e57610d178185611cd9565b600d6000828254610d28919061174e565b90915550505b60408051858152602081018590529081018390527f757d24358276a73ba44104ee95ff68f2665534a7cec919ab4fe869361a95fda69060600160405180910390a1505050505b610b9c6001600955565b6060610d8982610e9c565b506000610d9461133d565b90506000815111610db45760405180602001604052806000815250610ddf565b80610dbe8461134c565b604051602001610dcf929190611cec565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b610e1c610fdb565b6001600160a01b038116610e4657604051631e4fbdf760e01b81526000600482015260240161075c565b610b9c81611008565b610e57610fdb565b600a55565b60006001600160e01b031982166380ac58cd60e01b1480610e8d57506001600160e01b03198216635b5e139f60e01b145b806106665750610666826113df565b6000818152600460205260408120546001600160a01b03168061066657604051637e27328960e01b81526004810184905260240161075c565b61088d8383836001611414565b6000828152600460205260408120546001600160a01b0390811690831615610f0f57610f0f81848661151a565b6001600160a01b03811615610f4d57610f2c600085600080611414565b6001600160a01b038116600090815260056020526040902080546000190190555b6001600160a01b03851615610f7c576001600160a01b0385166000908152600560205260409020805460010190555b60008481526004602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6008546001600160a01b0316331461090c5760405163118cdaa760e01b815233600482015260240161075c565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006110696000836000610ee2565b90506001600160a01b03811661073257604051637e27328960e01b81526004810183905260240161075c565b6002600954036110b857604051633ee5aeb560e01b815260040160405180910390fd5b6002600955565b61073282826040518060200160405280600081525061157e565b806000036110e5575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611132576040519150601f19603f3d011682016040523d82523d6000602084013e611137565b606091505b505090508061088d5760405162461bcd60e51b815260206004820152600a6024820152691c185e4819985a5b195960b21b604482015260640161075c565b6001600160a01b0382166111a757604051630b61174360e31b81526001600160a01b038316600482015260240161075c565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156107c057604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611256903390889087908790600401611d1b565b6020604051808303816000875af1925050508015611291575060408051601f3d908101601f1916820190925261128e91810190611d58565b60015b6112fa573d8080156112bf576040519150601f19603f3d011682016040523d82523d6000602084013e6112c4565b606091505b5080516000036112f257604051633250574960e11b81526001600160a01b038516600482015260240161075c565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461133657604051633250574960e11b81526001600160a01b038516600482015260240161075c565b5050505050565b6060600b805461067b90611b2d565b6060600061135983611595565b600101905060008167ffffffffffffffff811115611379576113796119e0565b6040519080825280601f01601f1916602001820160405280156113a3576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846113ad57509392505050565b60006001600160e01b0319821663152a902d60e11b148061066657506301ffc9a760e01b6001600160e01b0319831614610666565b808061142857506001600160a01b03821615155b156114ea57600061143884610e9c565b90506001600160a01b038316158015906114645750826001600160a01b0316816001600160a01b031614155b801561147757506114758184610de6565b155b156114a05760405163a9fbf51f60e01b81526001600160a01b038416600482015260240161075c565b81156114e85783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260066020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61152583838361166d565b61088d576001600160a01b03831661155357604051637e27328960e01b81526004810182905260240161075c565b60405163177e802f60e01b81526001600160a01b03831660048201526024810182905260440161075c565b61158883836116d3565b61088d6000848484611214565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106115d45772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611600576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061161e57662386f26fc10000830492506010015b6305f5e1008310611636576305f5e100830492506008015b612710831061164a57612710830492506004015b6064831061165c576064830492506002015b600a83106106665760010192915050565b60006001600160a01b038316158015906116cb5750826001600160a01b0316846001600160a01b031614806116a757506116a78484610de6565b806116cb57506000828152600660205260409020546001600160a01b038481169116145b949350505050565b6001600160a01b0382166116fd57604051633250574960e11b81526000600482015260240161075c565b600061170b83836000610ee2565b90506001600160a01b0381161561088d576040516339e3563760e11b81526000600482015260240161075c565b634e487b7160e01b600052601160045260246000fd5b8082018082111561066657610666611738565b6001600160e01b031981168114610b9c57600080fd5b60006020828403121561178957600080fd5b8135610ddf81611761565b60005b838110156117af578181015183820152602001611797565b50506000910152565b600081518084526117d0816020860160208601611794565b601f01601f19169290920160200192915050565b602081526000610ddf60208301846117b8565b60006020828403121561180957600080fd5b5035919050565b80356001600160a01b038116811461182757600080fd5b919050565b6000806040838503121561183f57600080fd5b61184883611810565b946020939093013593505050565b60008060006060848603121561186b57600080fd5b61187484611810565b925061188260208501611810565b9150604084013590509250925092565b600080604083850312156118a557600080fd5b50508035926020909101359150565b600080602083850312156118c757600080fd5b823567ffffffffffffffff808211156118df57600080fd5b818501915085601f8301126118f357600080fd5b81358181111561190257600080fd5b86602082850101111561191457600080fd5b60209290920196919550909350505050565b60006020828403121561193857600080fd5b610ddf82611810565b6000806020838503121561195457600080fd5b823567ffffffffffffffff8082111561196c57600080fd5b818501915085601f83011261198057600080fd5b81358181111561198f57600080fd5b8660208260051b850101111561191457600080fd5b600080604083850312156119b757600080fd5b6119c083611810565b9150602083013580151581146119d557600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611a0c57600080fd5b611a1585611810565b9350611a2360208601611810565b925060408501359150606085013567ffffffffffffffff80821115611a4757600080fd5b818701915087601f830112611a5b57600080fd5b813581811115611a6d57611a6d6119e0565b604051601f8201601f19908116603f01168101908382118183101715611a9557611a956119e0565b816040528281528a6020848701011115611aae57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600060a08284031215611ae457600080fd5b8260a083011115611af457600080fd5b50919050565b60008060408385031215611b0d57600080fd5b611b1683611810565b9150611b2460208401611810565b90509250929050565b600181811c90821680611b4157607f821691505b602082108103611af457634e487b7160e01b600052602260045260246000fd5b808202811582820484141761066657610666611738565b600082611b9557634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561088d576000816000526020600020601f850160051c81016020861015611bc35750805b601f850160051c820191505b81811015611be257828155600101611bcf565b505050505050565b67ffffffffffffffff831115611c0257611c026119e0565b611c1683611c108354611b2d565b83611b9a565b6000601f841160018114611c4a5760008515611c325750838201355b600019600387901b1c1916600186901b178355611336565b600083815260209020601f19861690835b82811015611c7b5786850135825560209485019460019092019101611c5b565b5086821015611c985760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201611cd257611cd2611738565b5060010190565b8181038181111561066657610666611738565b60008351611cfe818460208801611794565b835190830190611d12818360208801611794565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d4e908301846117b8565b9695505050505050565b600060208284031215611d6a57600080fd5b8151610ddf8161176156fea264697066735822122033e38f9196c0ec58f13784bfb224a1edff559efe29b984d08bd840bb5317f81864736f6c63430008180033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x73881a…9f7fb9 | 36 days agoSun, 12 Jul 2026 18:58:20 UTC | 0xc64be7…f76f | data: 0x000000000000000000…00000000 |
| 0x6506d4…ec80f1 | 36 days agoSun, 12 Jul 2026 18:57:48 UTC | 0xc64be7…f76f | data: 0x000000000000000000…00000000 |
| 0x960674…a1b32e | 36 days agoSun, 12 Jul 2026 18:56:45 UTC | 0xc64be7…f76f | data: 0x000000000000000000…00000000 |
| 0xd22928…0f731e | 36 days agoSun, 12 Jul 2026 18:15:43 UTC | 0xc64be7…f76f | data: 0x000000000000000000…00000000 |
| 0x88c202…9e112e | 36 days agoSun, 12 Jul 2026 18:14:55 UTC | 0xc64be7…f76f | data: 0x000000000000000000…00000000 |
| 0x7c0adf…9933c5 | 36 days agoSun, 12 Jul 2026 18:14:08 UTC | 0xc64be7…f76f | data: 0x000000000000000000…00000000 |
| 0xc1f693…ae0303 | 36 days agoSun, 12 Jul 2026 17:43:35 UTC | 0x30385c…adfe | [0] 0x000000000000…603c673a [1] 0x000000000000…00002451 |
| 0xc1f693…ae0303 | 36 days agoSun, 12 Jul 2026 17:43:35 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…603c673a [2] 0x000000000000…00002451 |
| 0x353334…80116d | 36 days agoSun, 12 Jul 2026 17:25:37 UTC | 0xc64be7…f76f | data: 0x000000000000000000…00000000 |
| 0x3a7604…6e6c8d | 36 days agoSun, 12 Jul 2026 13:34:22 UTC | 0x8be007…57e0 | [0] 0x000000000000…0cd301f9 [1] 0x000000000000…603c673a |
| 0xc385b2…1b69a7 | 36 days agoSun, 12 Jul 2026 13:34:19 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…0cd301f9 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x73881a…9f7fb9 | burnUnits | 8,038,612 | 36 days agoSun, 12 Jul 2026 18:58:20 UTC | 0x5e35…dc74 | IN | Warstreet | $0.000 ETH | 0.00000163 | |
| 0x6506d4…ec80f1 | burnUnits | 8,038,290 | 36 days agoSun, 12 Jul 2026 18:57:48 UTC | 0x5e35…dc74 | IN | Warstreet | $0.000 ETH | 0.00000162 | |
| 0x960674…a1b32e | burnUnits | 8,037,662 | 36 days agoSun, 12 Jul 2026 18:56:45 UTC | 0x5e35…dc74 | IN | Warstreet | $0.000 ETH | 0.00000162 | |
| 0xd22928…0f731e | burnUnits | 8,013,081 | 36 days agoSun, 12 Jul 2026 18:15:43 UTC | 0x5e35…dc74 | IN | Warstreet | $0.000 ETH | 0.00000164 | |
| 0x88c202…9e112e | burnUnits | 8,012,607 | 36 days agoSun, 12 Jul 2026 18:14:55 UTC | 0x5e35…dc74 | IN | Warstreet | $0.000 ETH | 0.00000165 | |
| 0x7c0adf…9933c5 | burnUnits | 8,012,133 | 36 days agoSun, 12 Jul 2026 18:14:08 UTC | 0x5e35…dc74 | IN | Warstreet | $0.000 ETH | 0.00000163 | |
| 0xc1f693…ae0303 | mint | 7,993,814 | 36 days agoSun, 12 Jul 2026 17:43:35 UTC | 0xf726…673a | IN | Warstreet | $0.530.00028 ETH | 0.00000564 | |
| 0x353334…80116d | burnUnits | 7,983,028 | 36 days agoSun, 12 Jul 2026 17:25:37 UTC | 0x5e35…dc74 | IN | Warstreet | $0.000 ETH | 0.00000161 | |
| 0x560e00…699804 | payoutCentury | 7,942,314 | 36 days agoSun, 12 Jul 2026 16:17:39 UTC | 0x5e35…dc74 | IN | Warstreet | $0.000 ETH | 0.00000153 | |
| 0x68f494…124c69 | payoutCentury | 7,939,821 | 36 days agoSun, 12 Jul 2026 16:13:30 UTC | 0x5e35…dc74 | IN | Warstreet | $0.000 ETH | 0.00000155 | |
| 0xe5ce86…26b50f | setOracle | 7,935,301 | 36 days agoSun, 12 Jul 2026 16:05:57 UTC | 0xf726…673a | IN | Warstreet | $0.000 ETH | 0.00000155 | |
| 0x3a7604…6e6c8d | transferOwnership | 7,844,457 | 36 days agoSun, 12 Jul 2026 13:34:22 UTC | 0xcf07…01f9 | IN | Warstreet | $0.000 ETH | 0.00000146 |