Address Details
contract
0x80D2a1Efe9A9C0CB25b3e5ae51c693FE0A69228E
- Contract Name
- NFTKToken
- Creator
- 0x0ca82c–81b919 at 0x37c8cc–5476a5
- Balance
- 0 CELO ( )
- Locked CELO Balance
- 0.00 CELO
- Voting CELO Balance
- 0.00 CELO
- Pending Unlocked Gold
- 0.00 CELO
- Tokens
-
Fetching tokens...
- Transactions
- Fetching transactions...
- Transfers
- Fetching transfers...
- Gas Used
- Fetching gas used...
- Last Balance Update
- 15157646
This contract has been verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- NFTKToken
- Optimization enabled
- false
- Compiler version
- v0.8.2+commit.661d1103
- EVM Version
- istanbul
- Verified at
- 2022-09-17T22:22:31.644657Z
BIP20.sol
pragma solidity 0.8.2; interface BIP20 { function totalSupply() external view returns (uint24); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); function balanceOf(address account) external view returns (uint24); function transfer(address recipient, uint24 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint24); function approve(address spender, uint24 amount) external returns (bool); function transferFrom(address sender, address recipient, uint24 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint24 value); event Approval(address indexed owner, address indexed spender, uint24 value); } contract Context { constructor () { } function _msgSender() internal view returns (address ) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; return msg.data; } } library SafeMath { function add(uint24 a, uint24 b) internal pure returns (uint24) { uint24 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint24 a, uint24 b) internal pure returns (uint24) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint24 a, uint24 b, string memory errorMessage) internal pure returns (uint24) { require(b <= a, errorMessage); uint24 c = a - b; return c; } function mul(uint24 a, uint24 b) internal pure returns (uint24) { // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint24 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint24 a, uint24 b) internal pure returns (uint24) { return div(a, b, "SafeMath: division by zero"); } function div(uint24 a, uint24 b, string memory errorMessage) internal pure returns (uint24) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint24 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint24 a, uint24 b) internal pure returns (uint24) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint24 a, uint24 b, string memory errorMessage) internal pure returns (uint24) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract NFTKToken is Context, BIP20, Ownable { using SafeMath for uint24; mapping (address => uint24) private _balances; mapping (address => mapping (address => uint24)) private _allowances; uint24 private _totalSupply; uint8 private _decimals; string private _symbol; string private _name; string private _ico; string private _baseURI; constructor() public { _name = "NFTicket Pay Token"; _symbol = "NFTK"; _decimals = 0; _ico = "QmPNAJEacA9FRnkirZxqm1xav4QizRhrNPNuSiX9yS3Vp2"; _totalSupply = 400000; _balances[msg.sender] = _totalSupply; _baseURI="https://ipfs.io/ipfs/"; emit Transfer(address(0), msg.sender, _totalSupply); } function setBaseURI(string calldata _uri) external returns (bool) { _baseURI = _uri; return true; } function getOwner() override external view returns (address) { return owner(); } function getIconCID() external view returns (string memory) { return _ico; } function getBaseURI() external view returns (string memory) { return _baseURI; } function decimals() override external view returns (uint8) { return _decimals; } function symbol() override external view returns (string memory) { return _symbol; } function ico() external view returns (string memory) { return string(abi.encodePacked(_baseURI, _ico)); } function icon() external view returns (string memory) { return string(abi.encodePacked(_baseURI, _ico)); } /** * @dev Returns the token name. */ function name() override external view returns (string memory) { return _name; } function totalSupply() override external view returns (uint24) { return _totalSupply; } function balanceOf(address account) override external view returns (uint24) { return _balances[account]; } function transfer(address recipient, uint24 amount) override external returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) override external view returns (uint24) { return _allowances[owner][spender]; } function approve(address spender, uint24 amount) override external returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint24 amount) override external returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "NFTicket: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint24 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint24 subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "NFTicket: decreased allowance below zero")); return true; } function mint(uint24 amount) public onlyOwner returns (bool) { _mint(_msgSender(), amount); return true; } function _transfer(address sender, address recipient, uint24 amount) internal { require(sender != address(0), "NFTicket: transfer from the zero address"); require(recipient != address(0), "NFTicket: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "NFTicket: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint24 amount) internal { require(account != address(0), "NFTicket: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint24 amount) internal { require(account != address(0), "NFTicket: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "NFTicket: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint24 amount) internal { require(owner != address(0), "NFTicket: approve from the zero address"); require(spender != address(0), "NFTicket: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _burnFrom(address account, uint24 amount) internal { _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "NFTicket: burn amount exceeds allowance")); } }
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint24","name":"value","internalType":"uint24","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":"uint24","name":"value","internalType":"uint24","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"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":"uint24","name":"amount","internalType":"uint24"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint24","name":"subtractedValue","internalType":"uint24"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getBaseURI","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getIconCID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"ico","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"icon","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint24","name":"addedValue","internalType":"uint24"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"mint","inputs":[{"type":"uint24","name":"amount","internalType":"uint24"}]},{"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":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"setBaseURI","inputs":[{"type":"string","name":"_uri","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint24","name":"amount","internalType":"uint24"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint24","name":"amount","internalType":"uint24"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b857806395d89b411161007c57806395d89b4114610356578063c557b98514610374578063dd62ed3e14610392578063eaef4d8f146103c2578063f2fde38b146103f2578063f4de1e971461040e57610137565b806370a08231146102c2578063714c5398146102f2578063715018a614610310578063893d20e81461031a5780638da5cb5b1461033857610137565b80634f61fd2a116100ff5780634f61fd2a146101e457806355f804b3146102145780635b195c86146102445780635d45220114610274578063601b79211461029257610137565b806306fdde031461013c578063176cd7101461015a57806318160ddd1461018a578063188743a8146101a8578063313ce567146101c6575b600080fd5b61014461043e565b6040516101519190611b55565b60405180910390f35b610174600480360381019061016f91906117f6565b6104d0565b6040516101819190611b3a565b60405180910390f35b6101926105bd565b60405161019f9190611c77565b60405180910390f35b6101b06105d6565b6040516101bd9190611b55565b60405180910390f35b6101ce610668565b6040516101db9190611c92565b60405180910390f35b6101fe60048036038101906101f99190611845565b61067d565b60405161020b9190611b3a565b60405180910390f35b61022e60048036038101906102299190611881565b61075e565b60405161023b9190611b3a565b60405180910390f35b61025e60048036038101906102599190611845565b61077c565b60405161026b9190611b3a565b60405180910390f35b61027c61079a565b6040516102899190611b55565b60405180910390f35b6102ac60048036038101906102a79190611845565b6107c5565b6040516102b99190611b3a565b60405180910390f35b6102dc60048036038101906102d79190611791565b6107e3565b6040516102e99190611c77565b60405180910390f35b6102fa61083b565b6040516103079190611b55565b60405180910390f35b6103186108cd565b005b610322610a20565b60405161032f9190611b1f565b60405180910390f35b610340610a2f565b60405161034d9190611b1f565b60405180910390f35b61035e610a58565b60405161036b9190611b55565b60405180910390f35b61037c610aea565b6040516103899190611b55565b60405180910390f35b6103ac60048036038101906103a791906117ba565b610b15565b6040516103b99190611c77565b60405180910390f35b6103dc60048036038101906103d791906118c6565b610bab565b6040516103e99190611b3a565b60405180910390f35b61040c60048036038101906104079190611791565b610c5c565b005b61042860048036038101906104239190611845565b610cfd565b6040516104359190611b3a565b60405180910390f35b60606005805461044d90611de3565b80601f016020809104026020016040519081016040528092919081815260200182805461047990611de3565b80156104c65780601f1061049b576101008083540402835291602001916104c6565b820191906000526020600020905b8154815290600101906020018083116104a957829003601f168201915b5050505050905090565b60006104dd848484610dc4565b6105b2846104e96110aa565b6105ad856040518060600160405280602b8152602001612107602b9139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061054f6110aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166110b29092919063ffffffff16565b611120565b600190509392505050565b6000600360009054906101000a900462ffffff16905090565b6060600680546105e590611de3565b80601f016020809104026020016040519081016040528092919081815260200182805461061190611de3565b801561065e5780601f106106335761010080835404028352916020019161065e565b820191906000526020600020905b81548152906001019060200180831161064157829003601f168201915b5050505050905090565b600060038054906101000a900460ff16905090565b600061075461068a6110aa565b8461074f856040518060600160405280602881526020016120df60289139600260006106b46110aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166110b29092919063ffffffff16565b611120565b6001905092915050565b600082826007919061077192919061167a565b506001905092915050565b60006107906107896110aa565b8484610dc4565b6001905092915050565b6060600760066040516020016107b1929190611afb565b604051602081830303815290604052905090565b60006107d96107d26110aa565b8484611120565b6001905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff169050919050565b60606007805461084a90611de3565b80601f016020809104026020016040519081016040528092919081815260200182805461087690611de3565b80156108c35780601f10610898576101008083540402835291602001916108c3565b820191906000526020600020905b8154815290600101906020018083116108a657829003601f168201915b5050505050905090565b6108d56110aa565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990611c37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610a2a610a2f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a6790611de3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9390611de3565b8015610ae05780601f10610ab557610100808354040283529160200191610ae0565b820191906000526020600020905b815481529060010190602001808311610ac357829003601f168201915b5050505050905090565b606060076006604051602001610b01929190611afb565b604051602081830303815290604052905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff16905092915050565b6000610bb56110aa565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990611c37565b60405180910390fd5b610c53610c4d6110aa565b83611303565b60019050919050565b610c646110aa565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890611c37565b60405180910390fd5b610cfa816114e5565b50565b6000610dba610d0a6110aa565b84610db58560026000610d1b6110aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff1661161290919063ffffffff16565b611120565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90611bf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90611c57565b60405180910390fd5b610f248160405180606001604052806029815260200161213260299139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166110b29092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff160217905550610fe581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff1661161290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f4c3f23e06500a14887485511327c0d579fbccac302d5839c043bcc62bf8677938360405161109d9190611c77565b60405180910390a3505050565b600033905090565b60008362ffffff168362ffffff1611158290611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb9190611b55565b60405180910390fd5b50600083856111139190611d22565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790611bb7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790611bd7565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3ba96ffca58a5c0843f7fa57ac208298b3b86e7feed3d33a9f706270c2626e9836040516112f69190611c77565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a90611c17565b60405180910390fd5b61139c81600360009054906101000a900462ffffff1662ffffff1661161290919063ffffffff16565b600360006101000a81548162ffffff021916908362ffffff16021790555061142081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff1661161290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f4c3f23e06500a14887485511327c0d579fbccac302d5839c043bcc62bf867793836040516114d99190611c77565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90611b77565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846116219190611ce9565b90508362ffffff168162ffffff161015611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790611b97565b60405180910390fd5b8091505092915050565b82805461168690611de3565b90600052602060002090601f0160209004810192826116a857600085556116ef565b82601f106116c157803560ff19168380011785556116ef565b828001600101855582156116ef579182015b828111156116ee5782358255916020019190600101906116d3565b5b5090506116fc9190611700565b5090565b5b80821115611719576000816000905550600101611701565b5090565b60008135905061172c816120b0565b92915050565b60008083601f84011261174457600080fd5b8235905067ffffffffffffffff81111561175d57600080fd5b60208301915083600182028301111561177557600080fd5b9250929050565b60008135905061178b816120c7565b92915050565b6000602082840312156117a357600080fd5b60006117b18482850161171d565b91505092915050565b600080604083850312156117cd57600080fd5b60006117db8582860161171d565b92505060206117ec8582860161171d565b9150509250929050565b60008060006060848603121561180b57600080fd5b60006118198682870161171d565b935050602061182a8682870161171d565b925050604061183b8682870161177c565b9150509250925092565b6000806040838503121561185857600080fd5b60006118668582860161171d565b92505060206118778582860161177c565b9150509250929050565b6000806020838503121561189457600080fd5b600083013567ffffffffffffffff8111156118ae57600080fd5b6118ba85828601611732565b92509250509250929050565b6000602082840312156118d857600080fd5b60006118e68482850161177c565b91505092915050565b6118f881611d56565b82525050565b61190781611d68565b82525050565b600061191882611cc2565b6119228185611ccd565b9350611932818560208601611db0565b61193b81611e73565b840191505092915050565b6000815461195381611de3565b61195d8186611cde565b945060018216600081146119785760018114611989576119bc565b60ff198316865281860193506119bc565b61199285611cad565b60005b838110156119b457815481890152600182019150602081019050611995565b838801955050505b50505092915050565b60006119d2602683611ccd565b91506119dd82611e84565b604082019050919050565b60006119f5601b83611ccd565b9150611a0082611ed3565b602082019050919050565b6000611a18602783611ccd565b9150611a2382611efc565b604082019050919050565b6000611a3b602583611ccd565b9150611a4682611f4b565b604082019050919050565b6000611a5e602883611ccd565b9150611a6982611f9a565b604082019050919050565b6000611a81602283611ccd565b9150611a8c82611fe9565b604082019050919050565b6000611aa4602083611ccd565b9150611aaf82612038565b602082019050919050565b6000611ac7602683611ccd565b9150611ad282612061565b604082019050919050565b611ae681611d94565b82525050565b611af581611da3565b82525050565b6000611b078285611946565b9150611b138284611946565b91508190509392505050565b6000602082019050611b3460008301846118ef565b92915050565b6000602082019050611b4f60008301846118fe565b92915050565b60006020820190508181036000830152611b6f818461190d565b905092915050565b60006020820190508181036000830152611b90816119c5565b9050919050565b60006020820190508181036000830152611bb0816119e8565b9050919050565b60006020820190508181036000830152611bd081611a0b565b9050919050565b60006020820190508181036000830152611bf081611a2e565b9050919050565b60006020820190508181036000830152611c1081611a51565b9050919050565b60006020820190508181036000830152611c3081611a74565b9050919050565b60006020820190508181036000830152611c5081611a97565b9050919050565b60006020820190508181036000830152611c7081611aba565b9050919050565b6000602082019050611c8c6000830184611add565b92915050565b6000602082019050611ca76000830184611aec565b92915050565b60008190508160005260206000209050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611cf482611d94565b9150611cff83611d94565b92508262ffffff03821115611d1757611d16611e15565b5b828201905092915050565b6000611d2d82611d94565b9150611d3883611d94565b925082821015611d4b57611d4a611e15565b5b828203905092915050565b6000611d6182611d74565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b600060ff82169050919050565b60005b83811015611dce578082015181840152602081019050611db3565b83811115611ddd576000848401525b50505050565b60006002820490506001821680611dfb57607f821691505b60208210811415611e0f57611e0e611e44565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4e465469636b65743a20617070726f76652066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a20617070726f766520746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a207472616e736665722066726f6d20746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a206d696e7420746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e465469636b65743a207472616e7366657220746f20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6120b981611d56565b81146120c457600080fd5b50565b6120d081611d94565b81146120db57600080fd5b5056fe4e465469636b65743a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4e465469636b65743a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654e465469636b65743a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212204a37c4361e97ade24846a6a1bf3e7f0e7bb64fce94c9d6b1aabf6fc31a6378db64736f6c63430008020033