Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB 0x080f7a005834c84240f25b2df4aed8236bd57812.
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
Verify & Publish
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
- Contract name:
- Token
- Optimization enabled
- true
- Compiler version
- v0.8.26+commit.8a97fa7a
- Optimization runs
- 1000000
- Verified at
- 2026-02-20T00:06:33.955527Z
Token.sol
// Verified & Published by Crypto Glider ✈️
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
library Address {
error AddressInsufficientBalance(address account);
error AddressEmptyCode(address target);
error FailedInnerCall();
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) revert AddressInsufficientBalance(address(this));
(bool success, ) = recipient.call{value: amount}("");
if (!success) revert FailedInnerCall();
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) revert AddressInsufficientBalance(address(this));
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function verifyCallResultFromTarget(address target, bool success, bytes memory returndata) internal view returns (bytes memory) {
if (!success) _revert(returndata);
else {
if (returndata.length == 0 && target.code.length == 0) revert AddressEmptyCode(target);
return returndata;
}
}
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) _revert(returndata);
else return returndata;
}
function _revert(bytes memory returndata) private pure {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert FailedInnerCall();
}
}
}
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
// EIP-6093 standard errors used by OZ v5
interface IERC20Errors {
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
error ERC20InvalidSender(address sender);
error ERC20InvalidReceiver(address receiver);
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
error ERC20InvalidApprover(address approver);
error ERC20InvalidSpender(address spender);
}
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual returns (string memory) { return _name; }
function symbol() public view virtual returns (string memory) { return _symbol; }
function decimals() public view virtual returns (uint8) { return 18; }
function totalSupply() public view virtual returns (uint256) { return _totalSupply; }
function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; }
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) revert ERC20InvalidSender(address(0));
if (to == address(0)) revert ERC20InvalidReceiver(address(0));
_update(from, to, value);
}
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) revert ERC20InsufficientBalance(from, fromBalance, value);
unchecked { _balances[from] = fromBalance - value; }
}
if (to == address(0)) {
unchecked { _totalSupply -= value; }
} else {
unchecked { _balances[to] += value; }
}
emit Transfer(from, to, value);
}
function _mint(address account, uint256 value) internal {
if (account == address(0)) revert ERC20InvalidReceiver(address(0));
_update(address(0), account, value);
}
function _burn(address account, uint256 value) internal {
if (account == address(0)) revert ERC20InvalidSender(address(0));
_update(account, address(0), value);
}
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) revert ERC20InvalidApprover(address(0));
if (spender == address(0)) revert ERC20InvalidSpender(address(0));
_allowances[owner][spender] = value;
if (emitEvent) emit Approval(owner, spender, value);
}
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
if (currentAllowance < value) revert ERC20InsufficientAllowance(spender, currentAllowance, value);
unchecked { _approve(owner, spender, currentAllowance - value, false); }
}
}
}
abstract contract ERC20Burnable is Context, ERC20 {
function burn(uint256 value) public virtual { _burn(_msgSender(), value); }
function burnFrom(address account, uint256 value) public virtual {
_spendAllowance(account, _msgSender(), value);
_burn(account, value);
}
}
abstract contract Ownable is Context {
address private _owner;
error OwnableUnauthorizedAccount(address account);
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor(address initialOwner) {
if (initialOwner == address(0)) revert OwnableInvalidOwner(address(0));
_transferOwnership(initialOwner);
}
modifier onlyOwner() { _checkOwner(); _; }
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) revert OwnableUnauthorizedAccount(_msgSender());
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) revert OwnableInvalidOwner(address(0));
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
error Token_AlreadyLaunched();
error Token_NotLaunched();
error Token_TransferFailed();
contract Token is ERC20, ERC20Burnable, Ownable {
using Address for address;
bool public launched;
constructor(
string memory _name,
string memory _symbol,
uint256 _totalSupply
) ERC20(_name, _symbol) Ownable(msg.sender) {
_mint(msg.sender, _totalSupply);
}
function launch() external onlyOwner {
if (launched) revert Token_AlreadyLaunched();
launched = true;
}
function _transferAllowed(address from, address to) private view returns (bool) {
if (launched) return true;
if (from == owner() || to == owner()) return true;
return false;
}
function transferFrom(address from, address to, uint256 value) public override returns (bool) {
if (!_transferAllowed(from, to)) revert Token_NotLaunched();
bool success = super.transferFrom(from, to, value);
if (!success) revert Token_TransferFailed();
return true;
}
function transfer(address to, uint256 value) public virtual override returns (bool) {
if (!_transferAllowed(_msgSender(), to)) revert Token_NotLaunched();
super._transfer(_msgSender(), to, value);
return true;
}
}
Compiler Settings
{"viaIR":true,"remappings":[],"optimizer":{"runs":1000000,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"paris","compilationTarget":{"Token.sol":"Token"}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"_name","internalType":"string"},{"type":"string","name":"_symbol","internalType":"string"},{"type":"uint256","name":"_totalSupply","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"allowance","internalType":"uint256"},{"type":"uint256","name":"needed","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"uint256","name":"balance","internalType":"uint256"},{"type":"uint256","name":"needed","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"type":"address","name":"approver","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"type":"address","name":"receiver","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"type":"address","name":"sender","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"error","name":"Token_AlreadyLaunched","inputs":[]},{"type":"error","name":"Token_NotLaunched","inputs":[]},{"type":"error","name":"Token_TransferFailed","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burnFrom","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"launch","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"launched","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
Contract Creation Code
0x6080604052346103f6576113f580380380610019816103fb565b9283398101906060818303126103f65780516001600160401b0381116103f65782610045918301610420565b60208201519092906001600160401b0381116103f657604091610069918401610420565b91015182516001600160401b0381116102ff57600354600181811c911680156103ec575b60208210146102df57601f8111610387575b506020601f82116001146103205781929394600092610315575b50508160011b916000199060031b1c1916176003555b81516001600160401b0381116102ff57600454600181811c911680156102f5575b60208210146102df57601f811161027a575b50602092601f8211600114610215579281929360009261020a575b50508160011b916000199060031b1c1916176004555b33156101f45760058054336001600160a01b0319821681179092556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a360006002548281018091116101e05760025550336000526000602052604060002081815401905560405190815260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203393a3604051610f69908161048c8239f35b634e487b7160e01b82526011600452602482fd5b631e4fbdf760e01b600052600060045260246000fd5b01519050388061011d565b601f198216936004600052806000209160005b8681106102625750836001959610610249575b505050811b01600455610133565b015160001960f88460031b161c1916905538808061023b565b91926020600181928685015181550194019201610228565b60046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c810191602084106102d5575b601f0160051c01905b8181106102c95750610102565b600081556001016102bc565b90915081906102b3565b634e487b7160e01b600052602260045260246000fd5b90607f16906100f0565b634e487b7160e01b600052604160045260246000fd5b0151905038806100b9565b601f198216906003600052806000209160005b81811061036f57509583600195969710610356575b505050811b016003556100cf565b015160001960f88460031b161c19169055388080610348565b9192602060018192868b015181550194019201610333565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c810191602084106103e2575b601f0160051c01905b8181106103d6575061009f565b600081556001016103c9565b90915081906103c0565b90607f169061008d565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176102ff57604052565b81601f820112156103f6578051906001600160401b0382116102ff5761044f601f8301601f19166020016103fb565b92828452602083830101116103f65760005b82811061047657505060206000918301015290565b8060208092840101518282870101520161046156fe6080604052600436101561001257600080fd5b60003560e01c806301339c2114610a2057806306fdde03146108e6578063095ea7b3146107d757806318160ddd1461079b57806323b872dd14610735578063313ce567146106fb57806342966c68146106c057806370a082311461065b578063715018a6146105bd57806379cc67901461056d5780638091f3bf146105295780638da5cb5b146104d757806395d89b41146102dc578063a9059cbb14610253578063dd62ed3e146101c35763f2fde38b146100cc57600080fd5b346101be5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be5773ffffffffffffffffffffffffffffffffffffffff610118610b35565b610120610b7b565b16801561018f5773ffffffffffffffffffffffffffffffffffffffff600554827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b600080fd5b346101be5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576101fa610b35565b73ffffffffffffffffffffffffffffffffffffffff610217610b58565b9116600052600160205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b346101be5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be5761028a610b35565b6102948133610bca565b156102b2576102a7906024359033610e38565b602060405160018152f35b7f76e7eb3a0000000000000000000000000000000000000000000000000000000060005260046000fd5b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57604051600090600454918260011c600184169384156104cd575b6020821085146104a0578394828552908160001461044057506001146103c5575b5003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176103965761039282918260405282610acd565b0390f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6004600090815291507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b81831061042457505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610346565b60209193508060019154838588010152019101909183926103f0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b840190910191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09050610346565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b90607f1690610325565b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57602073ffffffffffffffffffffffffffffffffffffffff60055416604051908152f35b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57602060ff60055460a01c166040519015158152f35b346101be5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576105bb6105a7610b35565b602435906105b6823383610d0c565b610c36565b005b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576105f4610b7b565b600073ffffffffffffffffffffffffffffffffffffffff6005547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101be5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be5773ffffffffffffffffffffffffffffffffffffffff6106a7610b35565b1660005260006020526020604060002054604051908152f35b346101be5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576105bb60043533610c36565b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57602060405160128152f35b346101be5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be5761076c610b35565b610774610b58565b604435906107828184610bca565b156102b2576102a792610796833383610d0c565b610e38565b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576020600254604051908152f35b346101be5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be5761080e610b35565b6024359033156108b75773ffffffffffffffffffffffffffffffffffffffff1690811561088857336000526001602052604060002082600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b7f94280d6200000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b7fe602df0500000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57604051600090600354918260011c60018416938415610a16575b6020821085146104a05783948285529081600014610440575060011461099b575003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176103965761039282918260405282610acd565b6003600090815291507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8183106109fa57505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610346565b60209193508060019154838588010152019101909183926109c6565b90607f169061092f565b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57610a57610b7b565b60055460ff8160a01c16610aa3577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017600555005b7f6b25d1de0000000000000000000000000000000000000000000000000000000060005260046000fd5b9190916020815282519283602083015260005b848110610b1f5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006040809697860101520116010190565b8060208092840101516040828601015201610ae0565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101be57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101be57565b73ffffffffffffffffffffffffffffffffffffffff600554163303610b9c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b6005549060ff8260a01c16610c2e5773ffffffffffffffffffffffffffffffffffffffff8092169182911614918215610c0e575b5050610c0957600090565b600190565b73ffffffffffffffffffffffffffffffffffffffff161490503880610bfe565b505050600190565b73ffffffffffffffffffffffffffffffffffffffff168015610cdd57600091818352826020526040832054818110610cab57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926020928587528684520360408620558060025403600255604051908152a3565b83927fe450d38c0000000000000000000000000000000000000000000000000000000060649552600452602452604452fd5b7f96c6fd1e00000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff909291921691826000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff8216600052602052604060002054927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8403610d87575b50505050565b828410610dec5780156108b75773ffffffffffffffffffffffffffffffffffffffff82161561088857600052600160205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260406000209103905538808080610d81565b5073ffffffffffffffffffffffffffffffffffffffff83917ffb8f41b2000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff16908115610cdd5773ffffffffffffffffffffffffffffffffffffffff16918215610f04576000828152806020526040812054828110610ed15791604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815280845220818154019055604051908152a3565b6064937fe450d38c0000000000000000000000000000000000000000000000000000000083949352600452602452604452fd5b7fec442f0500000000000000000000000000000000000000000000000000000000600052600060045260246000fdfea264697066735822122019044437cf9f873d46cc9896afabc7b42fea081d47451f8e6e7b714b95f5c16264736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000000000000000000000000004537461780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045354415800000000000000000000000000000000000000000000000000000000
Deployed ByteCode
0x6080604052600436101561001257600080fd5b60003560e01c806301339c2114610a2057806306fdde03146108e6578063095ea7b3146107d757806318160ddd1461079b57806323b872dd14610735578063313ce567146106fb57806342966c68146106c057806370a082311461065b578063715018a6146105bd57806379cc67901461056d5780638091f3bf146105295780638da5cb5b146104d757806395d89b41146102dc578063a9059cbb14610253578063dd62ed3e146101c35763f2fde38b146100cc57600080fd5b346101be5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be5773ffffffffffffffffffffffffffffffffffffffff610118610b35565b610120610b7b565b16801561018f5773ffffffffffffffffffffffffffffffffffffffff600554827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b600080fd5b346101be5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576101fa610b35565b73ffffffffffffffffffffffffffffffffffffffff610217610b58565b9116600052600160205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b346101be5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be5761028a610b35565b6102948133610bca565b156102b2576102a7906024359033610e38565b602060405160018152f35b7f76e7eb3a0000000000000000000000000000000000000000000000000000000060005260046000fd5b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57604051600090600454918260011c600184169384156104cd575b6020821085146104a0578394828552908160001461044057506001146103c5575b5003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176103965761039282918260405282610acd565b0390f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6004600090815291507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b81831061042457505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610346565b60209193508060019154838588010152019101909183926103f0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b840190910191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09050610346565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b90607f1690610325565b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57602073ffffffffffffffffffffffffffffffffffffffff60055416604051908152f35b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57602060ff60055460a01c166040519015158152f35b346101be5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576105bb6105a7610b35565b602435906105b6823383610d0c565b610c36565b005b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576105f4610b7b565b600073ffffffffffffffffffffffffffffffffffffffff6005547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101be5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be5773ffffffffffffffffffffffffffffffffffffffff6106a7610b35565b1660005260006020526020604060002054604051908152f35b346101be5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576105bb60043533610c36565b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57602060405160128152f35b346101be5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be5761076c610b35565b610774610b58565b604435906107828184610bca565b156102b2576102a792610796833383610d0c565b610e38565b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be576020600254604051908152f35b346101be5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be5761080e610b35565b6024359033156108b75773ffffffffffffffffffffffffffffffffffffffff1690811561088857336000526001602052604060002082600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b7f94280d6200000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b7fe602df0500000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57604051600090600354918260011c60018416938415610a16575b6020821085146104a05783948285529081600014610440575060011461099b575003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176103965761039282918260405282610acd565b6003600090815291507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8183106109fa57505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610346565b60209193508060019154838588010152019101909183926109c6565b90607f169061092f565b346101be5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101be57610a57610b7b565b60055460ff8160a01c16610aa3577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017600555005b7f6b25d1de0000000000000000000000000000000000000000000000000000000060005260046000fd5b9190916020815282519283602083015260005b848110610b1f5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006040809697860101520116010190565b8060208092840101516040828601015201610ae0565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101be57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101be57565b73ffffffffffffffffffffffffffffffffffffffff600554163303610b9c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b6005549060ff8260a01c16610c2e5773ffffffffffffffffffffffffffffffffffffffff8092169182911614918215610c0e575b5050610c0957600090565b600190565b73ffffffffffffffffffffffffffffffffffffffff161490503880610bfe565b505050600190565b73ffffffffffffffffffffffffffffffffffffffff168015610cdd57600091818352826020526040832054818110610cab57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926020928587528684520360408620558060025403600255604051908152a3565b83927fe450d38c0000000000000000000000000000000000000000000000000000000060649552600452602452604452fd5b7f96c6fd1e00000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff909291921691826000526001602052604060002073ffffffffffffffffffffffffffffffffffffffff8216600052602052604060002054927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8403610d87575b50505050565b828410610dec5780156108b75773ffffffffffffffffffffffffffffffffffffffff82161561088857600052600160205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260406000209103905538808080610d81565b5073ffffffffffffffffffffffffffffffffffffffff83917ffb8f41b2000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff16908115610cdd5773ffffffffffffffffffffffffffffffffffffffff16918215610f04576000828152806020526040812054828110610ed15791604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815280845220818154019055604051908152a3565b6064937fe450d38c0000000000000000000000000000000000000000000000000000000083949352600452602452604452fd5b7fec442f0500000000000000000000000000000000000000000000000000000000600052600060045260246000fdfea264697066735822122019044437cf9f873d46cc9896afabc7b42fea081d47451f8e6e7b714b95f5c16264736f6c634300081a0033