Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- Artist
- Optimization enabled
- false
- Compiler version
- v0.5.16+commit.9c3226ce
- EVM Version
- istanbul
- Verified at
- 2026-04-22T03:09:21.664476Z
Constructor Arguments
00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000002790623f43a37f4537ca029491de6214775461900000000000000000000000008888888888646b186b3b7cdc989411e8cd5a2ba200000000000000000000000000000000000045166c45af0fc6e4cf31d9e14b9a0000000000000000000000009b893781ee099ea1d3831336cd38f91af2c5f36c000000000000000000000000d979f42b2ff6151ad32c8f96bbcee68d1f8eef92000000000000000000000000000000000000000000000000000000000000000562696e6765000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342494e0000000000000000000000000000000000000000000000000000000000
Arg [0] (string) : binge
Arg [1] (string) : BIN
Arg [2] (address) : 0x2790623f43a37f4537ca029491de621477546190
Arg [3] (address) : 0x8888888888646b186b3b7cdc989411e8cd5a2ba2
Arg [4] (address) : 0x00000000000045166c45af0fc6e4cf31d9e14b9a
Arg [5] (address) : 0x9b893781ee099ea1d3831336cd38f91af2c5f36c
Arg [6] (address) : 0xd979f42b2ff6151ad32c8f96bbcee68d1f8eef92
Artist.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.5.16;
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
pragma solidity ^0.5.16;
contract IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) public view returns (uint256 balance);
function ownerOf(uint256 tokenId) public view returns (address owner);
function approve(address to, uint256 tokenId) public;
function getApproved(uint256 tokenId) public view returns (address operator);
function setApprovalForAll(address operator, bool _approved) public;
function isApprovedForAll(address owner, address operator) public view returns (bool);
function transferFrom(address from, address to, uint256 tokenId) public;
function safeTransferFrom(address from, address to, uint256 tokenId) public;
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}
pragma solidity ^0.5.16;
contract IERC721Receiver {
function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
public returns (bytes4);
}
pragma solidity ^0.5.16;
library SafeMath {
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b);
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0);
uint256 c = a / b;
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a);
uint256 c = a - b;
return c;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a);
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0);
return a % b;
}
}
pragma solidity ^0.5.16;
library Address {
function isContract(address account) internal view returns (bool) {
uint256 size;
assembly { size := extcodesize(account) }
return size > 0;
}
}
pragma solidity ^0.5.16;
contract ERC165 is IERC165 {
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
mapping(bytes4 => bool) private _supportedInterfaces;
constructor () internal {
_registerInterface(_INTERFACE_ID_ERC165);
}
function supportsInterface(bytes4 interfaceId) external view returns (bool) {
return _supportedInterfaces[interfaceId];
}
function _registerInterface(bytes4 interfaceId) internal {
require(interfaceId != 0xffffffff);
_supportedInterfaces[interfaceId] = true;
}
}
pragma solidity ^0.5.16;
contract ERC721 is ERC165, IERC721 {
using SafeMath for uint256;
using Address for address;
bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
mapping (uint256 => address) private _tokenOwner;
mapping (uint256 => address) private _tokenApprovals;
mapping (address => uint256) private _ownedTokensCount;
mapping (address => mapping (address => bool)) private _operatorApprovals;
bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;
constructor () public {
_registerInterface(_INTERFACE_ID_ERC721);
}
function balanceOf(address owner) public view returns (uint256) {
require(owner != address(0));
return _ownedTokensCount[owner];
}
function ownerOf(uint256 tokenId) public view returns (address) {
address owner = _tokenOwner[tokenId];
require(owner != address(0));
return owner;
}
function approve(address to, uint256 tokenId) public {
address owner = ownerOf(tokenId);
require(to != owner);
require(msg.sender == owner || isApprovedForAll(owner, msg.sender));
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
function getApproved(uint256 tokenId) public view returns (address) {
require(_exists(tokenId));
return _tokenApprovals[tokenId];
}
function setApprovalForAll(address to, bool approved) public {
require(to != msg.sender);
_operatorApprovals[msg.sender][to] = approved;
emit ApprovalForAll(msg.sender, to, approved);
}
function isApprovedForAll(address owner, address operator) public view returns (bool) {
return _operatorApprovals[owner][operator];
}
function transferFrom(address from, address to, uint256 tokenId) public {
require(_isApprovedOrOwner(msg.sender, tokenId));
_transferFrom(from, to, tokenId);
}
function safeTransferFrom(address from, address to, uint256 tokenId) public {
safeTransferFrom(from, to, tokenId, "");
}
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
transferFrom(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data));
}
function _exists(uint256 tokenId) internal view returns (bool) {
address owner = _tokenOwner[tokenId];
return owner != address(0);
}
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
address owner = ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
function _mint(address to, uint256 tokenId) internal {
require(to != address(0));
require(!_exists(tokenId));
_tokenOwner[tokenId] = to;
_ownedTokensCount[to] = _ownedTokensCount[to].add(1);
emit Transfer(address(0), to, tokenId);
}
function _transferFrom(address from, address to, uint256 tokenId) internal {
require(ownerOf(tokenId) == from);
require(to != address(0));
_clearApproval(tokenId);
_ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
_ownedTokensCount[to] = _ownedTokensCount[to].add(1);
_tokenOwner[tokenId] = to;
emit Transfer(from, to, tokenId);
}
function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
internal returns (bool)
{
if (!to.isContract()) {
return true;
}
bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
return (retval == _ERC721_RECEIVED);
}
function _clearApproval(uint256 tokenId) private {
if (_tokenApprovals[tokenId] != address(0)) {
_tokenApprovals[tokenId] = address(0);
}
}
}
pragma solidity ^0.5.16;
contract IERC721Enumerable is IERC721 {
function totalSupply() public view returns (uint256);
function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);
function tokenByIndex(uint256 index) public view returns (uint256);
}
pragma solidity ^0.5.16;
contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {
mapping(address => uint256[]) private _ownedTokens;
mapping(uint256 => uint256) private _ownedTokensIndex;
uint256[] private _allTokens;
mapping(uint256 => uint256) private _allTokensIndex;
bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;
constructor () public {
_registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
}
function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
require(index < balanceOf(owner));
return _ownedTokens[owner][index];
}
function totalSupply() public view returns (uint256) {
return _allTokens.length;
}
function tokenByIndex(uint256 index) public view returns (uint256) {
require(index < totalSupply());
return _allTokens[index];
}
function _transferFrom(address from, address to, uint256 tokenId) internal {
super._transferFrom(from, to, tokenId);
_removeTokenFromOwnerEnumeration(from, tokenId);
_addTokenToOwnerEnumeration(to, tokenId);
}
function _mint(address to, uint256 tokenId) internal {
super._mint(to, tokenId);
_addTokenToOwnerEnumeration(to, tokenId);
_addTokenToAllTokensEnumeration(tokenId);
}
function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
return _ownedTokens[owner];
}
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
_ownedTokensIndex[tokenId] = _ownedTokens[to].length;
_ownedTokens[to].push(tokenId);
}
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
uint256 tokenIndex = _ownedTokensIndex[tokenId];
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId;
_ownedTokensIndex[lastTokenId] = tokenIndex;
}
_ownedTokens[from].length--;
}
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
uint256 lastTokenIndex = _allTokens.length.sub(1);
uint256 tokenIndex = _allTokensIndex[tokenId];
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId;
_allTokensIndex[lastTokenId] = tokenIndex;
_allTokens.length--;
_allTokensIndex[tokenId] = 0;
}
}
pragma solidity ^0.5.16;
contract IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
pragma solidity ^0.5.16;
contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {
string private _name;
string private _symbol;
bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
constructor (string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
_registerInterface(_INTERFACE_ID_ERC721_METADATA);
}
function name() external view returns (string memory) {
return _name;
}
function symbol() external view returns (string memory) {
return _symbol;
}
}
pragma solidity ^0.5.16;
contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata {
constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) {
}
}
pragma solidity ^0.5.16;
contract IRadicalNFT is IERC165 {
function round(uint256 _tokenid) external view returns (uint256 _round);
function price(uint256 _round) public returns (uint256 _price);
function getBidStartTime(uint256 tokenid)external view returns(uint64);
function bid(address inviterAddress, uint256 tokenid) external payable;
}
contract RadicalNFT is ERC165,IRadicalNFT {
bytes4 private constant _INTERFACE_ID_RADICALNFT = 0x9203c74e;
// bytes4(keccak256('round(uint256)')) ^
// bytes4(keccak256('price(uint256)')) ^
// bytes4(keccak256('getBidStartTime(uint256)')) ^
// bytes4(keccak256('bid(address,uint256)'));
constructor () public {
_registerInterface(_INTERFACE_ID_RADICALNFT);
}
}
contract Ownable {
address public owner;
constructor() public {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
function transferOwnership(address newOwner) onlyOwner public {
if (newOwner != address(0)) {
owner = newOwner;
}
}
}
contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor ()public {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
contract ArtistBase is Ownable,ERC721Full,RadicalNFT,ReentrancyGuard {
using SafeMath for uint256;
bool public paused = false;
address public cfoAddress;
address public cooAddress;
address public bonusPoolAddress;
address public devPoolAddress;
uint256[] private priceList;
/// @dev The main art struct.
struct Art {
uint256 id;
uint64 bidStartTime;
uint64 round;
//bid issue privileges
bool bid;
string ipfs;
}
uint256 public lastBidTime=0;
Art[] arts;
//current id
uint256 curid;
uint256 public bidInterval;
uint256 public defaultBidTokenId;
modifier onlyCLevel() {
require(
msg.sender == cooAddress
);
_;
}
modifier whenNotPaused() {
require(!paused);
_;
}
/// @dev Modifier to allow actions only when the contract IS paused
modifier whenPaused {
require(paused);
_;
}
function pause() external onlyCLevel whenNotPaused {
paused = true;
}
function unpause() public onlyCLevel whenPaused {
paused = false;
}
function creatArt(
bool bidflag,
string calldata ipfsaddr,
uint64 startTime
)
external
whenNotPaused
returns (uint256)
{
require(msg.sender == owner, "ERR_NOT_OWNER");
if(lastBidTime==0){
bidflag=false;
}else if((now-lastBidTime)<bidInterval){
bidflag=false;
}else{
if(bidflag){
lastBidTime=now;
}
}
Art memory _art = Art({
id: curid,
bidStartTime: startTime,
round: 0,
bid: bidflag,
ipfs: ipfsaddr
});
curid = arts.push(_art) ;
require(curid == uint256(uint32(curid)));
_mint(owner, curid-1);
return curid;
}
function tokenURI(uint256 tokenId) external view returns (string memory) {
require(_exists(tokenId));
return arts[tokenId].ipfs;
}
function checkArtBidable(uint256 tokenId) external view returns (bool) {
require(_exists(tokenId));
return arts[tokenId].bid;
}
function openBidTokenAuthority()
external
onlyCLevel
{
lastBidTime=now - bidInterval;
}
function closeBidTokenAuthority()
external
onlyCLevel
{
lastBidTime=0;
}
function setBidInterval(uint256 interval)
external
onlyCLevel
{
bidInterval=interval;
}
function changeArtData(uint256 tokenid,string calldata ipfs)
external
onlyCLevel
{
require(tokenid<curid, "ERR_ARTID_TOOBIG");
arts[tokenid].ipfs=ipfs;
}
function editArtData(uint256 tokenid,string calldata ipfs)
external
onlyOwner
{
require(tokenid<curid, "ERR_ARTID_TOOBIG");
require(arts[tokenid].bidStartTime>now,"ERR_ALREADY_START");
arts[tokenid].ipfs=ipfs;
}
function checkBidable() view
external
returns (bool){
if(lastBidTime==0){
return false;
}else if((now-lastBidTime)<bidInterval){
return false;
}else{
return true;
}
}
function getLatestTokenID() view
external
returns (uint256){
return curid;
}
function setBidStartTime(uint256 tokenid,uint64 startTime)
external
onlyOwner
{
require(tokenid<curid, "ERR_TOKEN_ID_ERROR");
require(arts[tokenid].bidStartTime>now,"ERR_ALREADY_START");
arts[tokenid].bidStartTime=startTime;
}
function getBidStartTime(uint256 tokenid) view
external
returns(uint64)
{
require(tokenid<curid, "ERR_TOKEN_ID_ERROR");
return arts[tokenid].bidStartTime;
}
function setDefaultBidId(uint256 tokenid)
external
onlyOwner
{
require(tokenid<curid, "ERR_TOKEN_ID_ERROR");
defaultBidTokenId=tokenid;
}
function round(uint256 tokenid) view
external
returns (uint256){
return arts[tokenid].round;
}
event LOG_AUCTION(
uint256 artid,
uint256 lastPrice,
uint256 curPrice,
uint256 bid,
address lastOwner,
address buyer,
address inviterAddress
);
//bid token address
IERC20 public bidtoken;
function () external
whenNotPaused
payable {
_bid(devPoolAddress,defaultBidTokenId);
}
function bid(address inviterAddress, uint256 artid) payable
whenNotPaused
public {
_bid(inviterAddress,artid);
}
function price(uint256 _round) public
returns (uint256)
{
if(_round>priceList.length){
uint256 lastValue=priceList[priceList.length-1];
for(uint256 i=priceList.length;i<_round;i++){
lastValue=lastValue.mul(11).div(10);
priceList.push(lastValue);
}
return lastValue;
}
return priceList[_round-1];
}
function initRoundPrice() internal
returns (uint256)
{
uint256 lastValue=0;
for(uint256 i=1;i<12;i++){
if(i<11){
lastValue=i.mul(0.05 ether);
}else{
lastValue=lastValue.mul(11).div(10);
}
priceList.push(lastValue);
}
}
function _bid(address inviterAddress, uint256 artid) nonReentrant internal
{
require(artid<curid, "ERR_ARTID_TOOBIG");
address lastOwner=ownerOf(artid);
require(lastOwner!=msg.sender, "ERR_CAN_NOT_PURCHASE_OWN_ART");
require(arts[artid].bidStartTime<now,"ERR_BID_NOT_START_YET");
uint256 r=arts[artid].round;
if(r==0){
uint256 payprice=0.05 ether;
require(msg.value>=payprice, "ERR_NOT_ENOUGH_MONEY");
msg.sender.send(msg.value.sub(payprice));
address(uint160(owner)).send(payprice);
uint256 x=0;
if(arts[artid].bid){
x=50 ether;
if(bidtoken.balanceOf(cfoAddress)>=x){
bidtoken.transferFrom(cfoAddress,msg.sender,x);
}else{
x=0;
}
}
arts[artid].round++;
_transferFrom(lastOwner, msg.sender, artid);
emit LOG_AUCTION(artid, payprice,payprice,x,lastOwner,msg.sender,inviterAddress );
return;
}
uint256 curprice=price(r);
uint256 payprice=price(r+1);
require(msg.value>=payprice, "ERR_NOT_ENOUGH_MONEY");
//refund extra money
msg.sender.send(msg.value-payprice);
uint256 smoney=payprice-curprice;
//we don't check any send process,only 2300 gas provided
address(uint160(owner)).send(smoney.mul(5).div(10));
address(uint160(bonusPoolAddress)).send(smoney.mul(18).div(100));
address(uint160(inviterAddress)).send(smoney.mul(2).div(100));
address(uint160(lastOwner)).send(smoney.mul(30).div(100).add(curprice));
uint256 x=0;
if(arts[artid].bid){
//r is last round
x=r<10?50 ether:((r+1).mul(5 ether));
if(bidtoken.balanceOf(cfoAddress)>=x){
bidtoken.transferFrom(cfoAddress,msg.sender,x);
}else{
x=0;
}
}
arts[artid].round++;
_transferFrom(lastOwner, msg.sender, artid);
emit LOG_AUCTION(artid, curprice,payprice,x,lastOwner,msg.sender,inviterAddress );
}
}
interface IERC20 {
function totalSupply() external view returns (uint);
function balanceOf(address account) external view returns (uint);
function transfer(address recipient, uint amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint amount) external returns (bool);
function transferFrom(address sender, address recipient, uint amount) external returns (bool);
}
contract Artist is ArtistBase{
constructor(string memory _name,string memory _symbol,address artistaddr,
address auditor,address _bid,address _bonusPool,address _devPool) ERC721Full(_name, _symbol) public {
bonusPoolAddress=_bonusPool;
devPoolAddress=_devPool;
bidtoken=IERC20(_bid);
curid=0;
owner=artistaddr;
cfoAddress=msg.sender;
cooAddress=auditor;
bidInterval=30 days;
defaultBidTokenId=0;
initRoundPrice();
}
function setCOO(address _newCOO) external onlyCLevel {
require(_newCOO != address(0));
cooAddress = _newCOO;
}
function rescueETH(address _address) external onlyCLevel {
address(uint160(_address)).transfer(address(this).balance);
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":200,"enabled":false},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"Artist.sol":"Artist"}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"string","name":"_name","internalType":"string"},{"type":"string","name":"_symbol","internalType":"string"},{"type":"address","name":"artistaddr","internalType":"address"},{"type":"address","name":"auditor","internalType":"address"},{"type":"address","name":"_bid","internalType":"address"},{"type":"address","name":"_bonusPool","internalType":"address"},{"type":"address","name":"_devPool","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"approved","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"bool","name":"approved","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"LOG_AUCTION","inputs":[{"type":"uint256","name":"artid","internalType":"uint256","indexed":false},{"type":"uint256","name":"lastPrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"curPrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"bid","internalType":"uint256","indexed":false},{"type":"address","name":"lastOwner","internalType":"address","indexed":false},{"type":"address","name":"buyer","internalType":"address","indexed":false},{"type":"address","name":"inviterAddress","internalType":"address","indexed":false}],"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":"tokenId","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"approve","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"owner","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"payable","payable":true,"outputs":[],"name":"bid","inputs":[{"type":"address","name":"inviterAddress","internalType":"address"},{"type":"uint256","name":"artid","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"bidInterval","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"bidtoken","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"bonusPoolAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"cfoAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"changeArtData","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"},{"type":"string","name":"ipfs","internalType":"string"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"checkArtBidable","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"checkBidable","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"closeBidTokenAuthority","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"cooAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"creatArt","inputs":[{"type":"bool","name":"bidflag","internalType":"bool"},{"type":"string","name":"ipfsaddr","internalType":"string"},{"type":"uint64","name":"startTime","internalType":"uint64"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"defaultBidTokenId","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devPoolAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"editArtData","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"},{"type":"string","name":"ipfs","internalType":"string"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getApproved","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"getBidStartTime","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLatestTokenID","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isApprovedForAll","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"operator","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastBidTime","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"openBidTokenAuthority","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ownerOf","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"pause","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"paused","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"price","inputs":[{"type":"uint256","name":"_round","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"rescueETH","inputs":[{"type":"address","name":"_address","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"round","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"bytes","name":"_data","internalType":"bytes"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setApprovalForAll","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"bool","name":"approved","internalType":"bool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setBidInterval","inputs":[{"type":"uint256","name":"interval","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setBidStartTime","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"},{"type":"uint64","name":"startTime","internalType":"uint64"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setCOO","inputs":[{"type":"address","name":"_newCOO","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setDefaultBidId","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenByIndex","inputs":[{"type":"uint256","name":"index","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenOfOwnerByIndex","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"uint256","name":"index","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"tokenURI","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"unpause","inputs":[],"constant":false}]
Contract Creation Code
0x60806040526000600d60006101000a81548160ff02191690831515021790555060006012553480156200003157600080fd5b5060405162004e4e38038062004e4e833981810160405260e08110156200005757600080fd5b81019080805160405193929190846401000000008211156200007857600080fd5b838201915060208201858111156200008f57600080fd5b8251866001820283011164010000000082111715620000ad57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000e3578082015181840152602081019050620000c6565b50505050905090810190601f168015620001115780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200013557600080fd5b838201915060208201858111156200014c57600080fd5b82518660018202830111640100000000821117156200016a57600080fd5b8083526020830192505050908051906020019080838360005b83811015620001a057808201518184015260208101905062000183565b50505050905090810190601f168015620001ce5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505086868181336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002666301ffc9a760e01b620004c160201b60201c565b6200027e6380ac58cd60e01b620004c160201b60201c565b6200029663780e9d6360e01b620004c160201b60201c565b81600a9080519060200190620002ae92919062000689565b5080600b9080519060200190620002c792919062000689565b50620002e0635b5e139f60e01b620004c160201b60201c565b50505050620002fc639203c74e60e01b620004c160201b60201c565b6001600c8190555081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601481905550846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062278d006015819055506000601681905550620004b36200056160201b60201c565b505050505050505062000738565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620004f557600080fd5b6001806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600090506000600190505b600c8110156200061e57600b811015620005ac57620005a466b1a2bc2ec50000826200062360201b62003a331790919060201c565b9150620005e4565b620005e1600a620005cd600b856200062360201b62003a331790919060201c565b6200066160201b62003a6d1790919060201c565b91505b601182908060018154018082558091505090600182039060005260206000200160009091929091909150555080806001019150506200056f565b505090565b6000808314156200063857600090506200065b565b60008284029050828482816200064a57fe5b04146200065657600080fd5b809150505b92915050565b60008082116200067057600080fd5b60008284816200067c57fe5b0490508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006cc57805160ff1916838001178555620006fd565b82800160010185558215620006fd579182015b82811115620006fc578251825591602001919060010190620006df565b5b5090506200070c919062000710565b5090565b6200073591905b808211156200073157600081600090555060010162000717565b5090565b90565b61470680620007486000396000f3fe60806040526004361061027d5760003560e01c8063642ab4b11161014f578063a8d48680116100c1578063cf59e7051161007a578063cf59e70514611190578063d9a4cda7146111bb578063da95f1d41461121e578063e985e9c51461124d578063f0588e7c146112d6578063f2fde38b146112ed5761027d565b8063a8d4868014610ef6578063b046229d14610f31578063b047fb5014610f5c578063b0b7d30c14610fb3578063b88d4fde14610fca578063c87b56dd146110dc5761027d565b806384efd6751161011357806384efd67514610ca05780638a9bfa0314610cf75780638da5cb5b14610d8757806395d89b4114610dde578063a22cb46514610e6e578063a622fc7314610ecb5761027d565b8063642ab4b114610b4f5780636604a6a314610b7a57806370a0823114610bd157806381c0f3da14610c365780638456cb5914610c895761027d565b806326a49e37116101f357806346834cca116101ac57806346834cca146109135780634f6ccce7146109cd57806359d667a514610a1c5780635a4d8e5414610a6a5780635c975abb14610aa55780636352211e14610ad45761027d565b806326a49e37146107235780632ba73c15146107725780632f745c59146107c357806334d5f37b146108325780633f4ba83a1461088157806342842e0e146108985761027d565b8063095ea7b311610245578063095ea7b3146104ec5780630d64ca031461054757806318160ddd14610596578063189db8c6146105c157806323b872dd1461061857806325c5edf4146106935761027d565b806301ffc9a7146102c757806304824e70146103395780630519ce791461038a57806306fdde03146103e1578063081812fc14610471575b600d60009054906101000a900460ff161561029757600080fd5b6102c5601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660165461133e565b005b3480156102d357600080fd5b5061031f600480360360208110156102ea57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506121a6565b604051808215151515815260200191505060405180910390f35b34801561034557600080fd5b506103886004803603602081101561035c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061220e565b005b34801561039657600080fd5b5061039f6122b2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ed57600080fd5b506103f66122d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561043657808201518184015260208101905061041b565b50505050905090810190601f1680156104635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047d57600080fd5b506104aa6004803603602081101561049457600080fd5b810190808035906020019092919050505061237a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f857600080fd5b506105456004803603604081101561050f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123c9565b005b34801561055357600080fd5b506105946004803603604081101561056a57600080fd5b8101908080359060200190929190803567ffffffffffffffff16906020019092919050505061250a565b005b3480156105a257600080fd5b506105ab6126d4565b6040518082815260200191505060405180910390f35b3480156105cd57600080fd5b506105d66126e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062457600080fd5b506106916004803603606081101561063b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612707565b005b34801561069f57600080fd5b50610721600480360360408110156106b657600080fd5b8101908080359060200190929190803590602001906401000000008111156106dd57600080fd5b8201836020820111156106ef57600080fd5b8035906020019184600183028401116401000000008311171561071157600080fd5b909192939192939050505061272a565b005b34801561072f57600080fd5b5061075c6004803603602081101561074657600080fd5b81019080803590602001909291905050506128de565b6040518082815260200191505060405180910390f35b34801561077e57600080fd5b506107c16004803603602081101561079557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129b3565b005b3480156107cf57600080fd5b5061081c600480360360408110156107e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a8b565b6040518082815260200191505060405180910390f35b34801561083e57600080fd5b5061086b6004803603602081101561085557600080fd5b8101908080359060200190929190505050612afe565b6040518082815260200191505060405180910390f35b34801561088d57600080fd5b50610896612b44565b005b3480156108a457600080fd5b50610911600480360360608110156108bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bd4565b005b34801561091f57600080fd5b506109b76004803603606081101561093657600080fd5b810190808035151590602001909291908035906020019064010000000081111561095f57600080fd5b82018360208201111561097157600080fd5b8035906020019184600183028401116401000000008311171561099357600080fd5b9091929391929390803567ffffffffffffffff169060200190929190505050612bf4565b6040518082815260200191505060405180910390f35b3480156109d957600080fd5b50610a06600480360360208110156109f057600080fd5b8101908080359060200190929190505050612eca565b6040518082815260200191505060405180910390f35b610a6860048036036040811015610a3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612efe565b005b348015610a7657600080fd5b50610aa360048036036020811015610a8d57600080fd5b8101908080359060200190929190505050612f26565b005b348015610ab157600080fd5b50610aba612f8a565b604051808215151515815260200191505060405180910390f35b348015610ae057600080fd5b50610b0d60048036036020811015610af757600080fd5b8101908080359060200190929190505050612f9d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b5b57600080fd5b50610b64613019565b6040518082815260200191505060405180910390f35b348015610b8657600080fd5b50610b8f61301f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bdd57600080fd5b50610c2060048036036020811015610bf457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613045565b6040518082815260200191505060405180910390f35b348015610c4257600080fd5b50610c6f60048036036020811015610c5957600080fd5b81019080803590602001909291905050506130c7565b604051808215151515815260200191505060405180910390f35b348015610c9557600080fd5b50610c9e61310e565b005b348015610cac57600080fd5b50610cb561319f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d0357600080fd5b50610d8560048036036040811015610d1a57600080fd5b810190808035906020019092919080359060200190640100000000811115610d4157600080fd5b820183602082011115610d5357600080fd5b80359060200191846001830284011164010000000083111715610d7557600080fd5b90919293919293905050506131c5565b005b348015610d9357600080fd5b50610d9c6132c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dea57600080fd5b50610df36132ee565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e33578082015181840152602081019050610e18565b50505050905090810190601f168015610e605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e7a57600080fd5b50610ec960048036036040811015610e9157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613390565b005b348015610ed757600080fd5b50610ee06134ca565b6040518082815260200191505060405180910390f35b348015610f0257600080fd5b50610f2f60048036036020811015610f1957600080fd5b81019080803590602001909291905050506134d0565b005b348015610f3d57600080fd5b50610f466135aa565b6040518082815260200191505060405180910390f35b348015610f6857600080fd5b50610f716135b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fbf57600080fd5b50610fc86135da565b005b348015610fd657600080fd5b506110da60048036036080811015610fed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561105457600080fd5b82018360208201111561106657600080fd5b8035906020019184600183028401116401000000008311171561108857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613641565b005b3480156110e857600080fd5b50611115600480360360208110156110ff57600080fd5b8101908080359060200190929190505050613667565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561115557808201518184015260208101905061113a565b50505050905090810190601f1680156111825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561119c57600080fd5b506111a5613739565b6040518082815260200191505060405180910390f35b3480156111c757600080fd5b506111f4600480360360208110156111de57600080fd5b810190808035906020019092919050505061373f565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561122a57600080fd5b506112336137f2565b604051808215151515815260200191505060405180910390f35b34801561125957600080fd5b506112bc6004803603604081101561127057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613826565b604051808215151515815260200191505060405180910390f35b3480156112e257600080fd5b506112eb6138ba565b005b3480156112f957600080fd5b5061133c6004803603602081101561131057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061391e565b005b6002600c5414156113b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600c819055506014548110611436576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b600061144182612f9d565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552525f43414e5f4e4f545f50555243484153455f4f574e5f4152540000000081525060200191505060405180910390fd5b42601383815481106114f357fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1610611596576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4552525f4249445f4e4f545f53544152545f594554000000000000000000000081525060200191505060405180910390fd5b6000601383815481106115a557fe5b906000526020600020906003020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506000811415611aed57600066b1a2bc2ec50000905080341015611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4552525f4e4f545f454e4f5547485f4d4f4e455900000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc61168f83346139ef90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050505060008090506013858154811061171357fe5b906000526020600020906003020160010160109054906101000a900460ff161561198b576802b5e3af16b1880000905080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561180557600080fd5b505afa158015611819573d6000803e3d6000fd5b505050506040513d602081101561182f57600080fd5b81019080805190602001909291905050501061198557601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b505050506040513d602081101561196e57600080fd5b81019080805190602001909291905050505061198a565b600090505b5b6013858154811061199857fe5b9060005260206000209060030201600101600881819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506119f9843387613a0f565b7fdbc7bf8977d24ca9350fbf7da682a8d3bf6c09e8ec388302d894cd222bf664428583848488338c604051808881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15050505061219a565b6000611af8826128de565b90506000611b08600184016128de565b905080341015611b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4552525f4e4f545f454e4f5547485f4d4f4e455900000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8234039081150290604051600060405180830381858888f1935050505050600082820390506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c21600a611c13600586613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c9f6064611c91601286613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050508673ffffffffffffffffffffffffffffffffffffffff166108fc611cfb6064611ced600286613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050508473ffffffffffffffffffffffffffffffffffffffff166108fc611d6985611d5b6064611d4d601e88613a3390919063ffffffff16565b613a6d90919063ffffffff16565b613a9390919063ffffffff16565b9081150290604051600060405180830381858888f1935050505050600080905060138781548110611d9657fe5b906000526020600020906003020160010160109054906101000a900460ff161561203a57600a8510611de557611de0674563918244f4000060018701613a3390919063ffffffff16565b611df0565b6802b5e3af16b18800005b905080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611eb457600080fd5b505afa158015611ec8573d6000803e3d6000fd5b505050506040513d6020811015611ede57600080fd5b81019080805190602001909291905050501061203457601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ff357600080fd5b505af1158015612007573d6000803e3d6000fd5b505050506040513d602081101561201d57600080fd5b810190808051906020019092919050505050612039565b600090505b5b6013878154811061204757fe5b9060005260206000209060030201600101600881819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506120a8863389613a0f565b7fdbc7bf8977d24ca9350fbf7da682a8d3bf6c09e8ec388302d894cd222bf66442878585848a338e604051808881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15050505050505b6001600c819055505050565b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461226857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156122ae573d6000803e3d6000fd5b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b5050505050905090565b600061238582613ab2565b61238e57600080fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006123d482612f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561240f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061244f575061244e8133613826565b5b61245857600080fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461256357600080fd5b60145482106125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b42601383815481106125e857fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161161268b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4552525f414c52454144595f535441525400000000000000000000000000000081525060200191505060405180910390fd5b806013838154811061269957fe5b906000526020600020906003020160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000600880549050905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127113382613b24565b61271a57600080fd5b612725838383613a0f565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461278357600080fd5b60145483106127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b426013848154811061280857fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16116128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4552525f414c52454144595f535441525400000000000000000000000000000081525060200191505060405180910390fd5b8181601385815481106128ba57fe5b906000526020600020906003020160020191906128d892919061453b565b50505050565b600060118054905082111561299057600060116001601180549050038154811061290457fe5b90600052602060002001549050600060118054905090505b838110156129865761294b600a61293d600b85613a3390919063ffffffff16565b613a6d90919063ffffffff16565b91506011829080600181540180825580915050906001820390600052602060002001600090919290919091505550808060010191505061291c565b50809150506129ae565b601160018303815481106129a057fe5b906000526020600020015490505b919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a0d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a4757600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612a9683613045565b8210612aa157600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612aeb57fe5b9060005260206000200154905092915050565b600060138281548110612b0d57fe5b906000526020600020906003020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b9e57600080fd5b600d60009054906101000a900460ff16612bb757600080fd5b6000600d60006101000a81548160ff021916908315150217905550565b612bef83838360405180602001604052806000815250613641565b505050565b6000600d60009054906101000a900460ff1615612c1057600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552525f4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b60006012541415612ce65760009450612d0d565b60155460125442031015612cfd5760009450612d0c565b8415612d0b57426012819055505b5b5b612d156145bb565b6040518060a0016040528060145481526020018467ffffffffffffffff168152602001600067ffffffffffffffff168152602001871515815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050601381908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548160ff0219169083151502179055506080820151816002019080519060200190612e6d929190614600565b50505060148190555060145463ffffffff1660145414612e8c57600080fd5b612ebc6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160145403613bb9565b601454915050949350505050565b6000612ed46126d4565b8210612edf57600080fd5b60088281548110612eec57fe5b90600052602060002001549050919050565b600d60009054906101000a900460ff1615612f1857600080fd5b612f22828261133e565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f8057600080fd5b8060158190555050565b600d60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561301057600080fd5b80915050919050565b60125481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561308057600080fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006130d282613ab2565b6130db57600080fd5b601382815481106130e857fe5b906000526020600020906003020160010160109054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461316857600080fd5b600d60009054906101000a900460ff161561318257600080fd5b6001600d60006101000a81548160ff021916908315150217905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461321f57600080fd5b6014548310613296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b8181601385815481106132a557fe5b906000526020600020906003020160020191906132c392919061453b565b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133865780601f1061335b57610100808354040283529160200191613386565b820191906000526020600020905b81548152906001019060200180831161336957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c957600080fd5b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461352957600080fd5b60145481106135a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b8060168190555050565b6000601454905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461363457600080fd5b6015544203601281905550565b61364c848484612707565b61365884848484613bda565b61366157600080fd5b50505050565b606061367282613ab2565b61367b57600080fd5b6013828154811061368857fe5b90600052602060002090600302016002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561372d5780601f106137025761010080835404028352916020019161372d565b820191906000526020600020905b81548152906001019060200180831161371057829003601f168201915b50505050509050919050565b60155481565b600060145482106137b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b601382815481106137c557fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff169050919050565b60008060125414156138075760009050613823565b6015546012544203101561381e5760009050613823565b600190505b90565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461391457600080fd5b6000601281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461397757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146139ec57806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000828211156139fe57600080fd5b600082840390508091505092915050565b613a1a838383613dc3565b613a248382614024565b613a2e82826141c2565b505050565b600080831415613a465760009050613a67565b6000828402905082848281613a5757fe5b0414613a6257600080fd5b809150505b92915050565b6000808211613a7b57600080fd5b6000828481613a8657fe5b0490508091505092915050565b600080828401905083811015613aa857600080fd5b8091505092915050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600080613b3083612f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613b9f57508373ffffffffffffffffffffffffffffffffffffffff16613b878461237a565b73ffffffffffffffffffffffffffffffffffffffff16145b80613bb05750613baf8185613826565b5b91505092915050565b613bc38282614289565b613bcd82826141c2565b613bd68161441e565b5050565b6000613bfb8473ffffffffffffffffffffffffffffffffffffffff1661446a565b613c085760019050613dbb565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613ce3578082015181840152602081019050613cc8565b50505050905090810190601f168015613d105780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613d3257600080fd5b505af1158015613d46573d6000803e3d6000fd5b505050506040513d6020811015613d5c57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16613de382612f9d565b73ffffffffffffffffffffffffffffffffffffffff1614613e0357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e3d57600080fd5b613e468161447d565b613e996001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ef90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2f6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061407c6001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506139ef90919063ffffffff16565b9050600060076000848152602001908152602001600020549050818114614169576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106140e957fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061414157fe5b9060005260206000200181905550816007600083815260200190815260200160002081905550505b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036141bb9190614680565b5050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506007600083815260200190815260200160002081905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156142c357600080fd5b6142cc81613ab2565b156142d657600080fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061437b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146145385760006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061457c57803560ff19168380011785556145aa565b828001600101855582156145aa579182015b828111156145a957823582559160200191906001019061458e565b5b5090506145b791906146ac565b5090565b6040518060a0016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600015158152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061464157805160ff191683800117855561466f565b8280016001018555821561466f579182015b8281111561466e578251825591602001919060010190614653565b5b50905061467c91906146ac565b5090565b8154818355818111156146a7578183600052602060002091820191016146a691906146ac565b5b505050565b6146ce91905b808211156146ca5760008160009055506001016146b2565b5090565b9056fea265627a7a7231582012f40e8f6873a77aa4d62bc4fd44305ab46de5bc66b1f9135665e3fd1d2fba3a64736f6c6343000510003200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000002790623f43a37f4537ca029491de6214775461900000000000000000000000008888888888646b186b3b7cdc989411e8cd5a2ba200000000000000000000000000000000000045166c45af0fc6e4cf31d9e14b9a0000000000000000000000009b893781ee099ea1d3831336cd38f91af2c5f36c000000000000000000000000d979f42b2ff6151ad32c8f96bbcee68d1f8eef92000000000000000000000000000000000000000000000000000000000000000562696e6765000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342494e0000000000000000000000000000000000000000000000000000000000
Deployed ByteCode
0x60806040526004361061027d5760003560e01c8063642ab4b11161014f578063a8d48680116100c1578063cf59e7051161007a578063cf59e70514611190578063d9a4cda7146111bb578063da95f1d41461121e578063e985e9c51461124d578063f0588e7c146112d6578063f2fde38b146112ed5761027d565b8063a8d4868014610ef6578063b046229d14610f31578063b047fb5014610f5c578063b0b7d30c14610fb3578063b88d4fde14610fca578063c87b56dd146110dc5761027d565b806384efd6751161011357806384efd67514610ca05780638a9bfa0314610cf75780638da5cb5b14610d8757806395d89b4114610dde578063a22cb46514610e6e578063a622fc7314610ecb5761027d565b8063642ab4b114610b4f5780636604a6a314610b7a57806370a0823114610bd157806381c0f3da14610c365780638456cb5914610c895761027d565b806326a49e37116101f357806346834cca116101ac57806346834cca146109135780634f6ccce7146109cd57806359d667a514610a1c5780635a4d8e5414610a6a5780635c975abb14610aa55780636352211e14610ad45761027d565b806326a49e37146107235780632ba73c15146107725780632f745c59146107c357806334d5f37b146108325780633f4ba83a1461088157806342842e0e146108985761027d565b8063095ea7b311610245578063095ea7b3146104ec5780630d64ca031461054757806318160ddd14610596578063189db8c6146105c157806323b872dd1461061857806325c5edf4146106935761027d565b806301ffc9a7146102c757806304824e70146103395780630519ce791461038a57806306fdde03146103e1578063081812fc14610471575b600d60009054906101000a900460ff161561029757600080fd5b6102c5601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660165461133e565b005b3480156102d357600080fd5b5061031f600480360360208110156102ea57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506121a6565b604051808215151515815260200191505060405180910390f35b34801561034557600080fd5b506103886004803603602081101561035c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061220e565b005b34801561039657600080fd5b5061039f6122b2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ed57600080fd5b506103f66122d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561043657808201518184015260208101905061041b565b50505050905090810190601f1680156104635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047d57600080fd5b506104aa6004803603602081101561049457600080fd5b810190808035906020019092919050505061237a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f857600080fd5b506105456004803603604081101561050f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123c9565b005b34801561055357600080fd5b506105946004803603604081101561056a57600080fd5b8101908080359060200190929190803567ffffffffffffffff16906020019092919050505061250a565b005b3480156105a257600080fd5b506105ab6126d4565b6040518082815260200191505060405180910390f35b3480156105cd57600080fd5b506105d66126e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062457600080fd5b506106916004803603606081101561063b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612707565b005b34801561069f57600080fd5b50610721600480360360408110156106b657600080fd5b8101908080359060200190929190803590602001906401000000008111156106dd57600080fd5b8201836020820111156106ef57600080fd5b8035906020019184600183028401116401000000008311171561071157600080fd5b909192939192939050505061272a565b005b34801561072f57600080fd5b5061075c6004803603602081101561074657600080fd5b81019080803590602001909291905050506128de565b6040518082815260200191505060405180910390f35b34801561077e57600080fd5b506107c16004803603602081101561079557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129b3565b005b3480156107cf57600080fd5b5061081c600480360360408110156107e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a8b565b6040518082815260200191505060405180910390f35b34801561083e57600080fd5b5061086b6004803603602081101561085557600080fd5b8101908080359060200190929190505050612afe565b6040518082815260200191505060405180910390f35b34801561088d57600080fd5b50610896612b44565b005b3480156108a457600080fd5b50610911600480360360608110156108bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bd4565b005b34801561091f57600080fd5b506109b76004803603606081101561093657600080fd5b810190808035151590602001909291908035906020019064010000000081111561095f57600080fd5b82018360208201111561097157600080fd5b8035906020019184600183028401116401000000008311171561099357600080fd5b9091929391929390803567ffffffffffffffff169060200190929190505050612bf4565b6040518082815260200191505060405180910390f35b3480156109d957600080fd5b50610a06600480360360208110156109f057600080fd5b8101908080359060200190929190505050612eca565b6040518082815260200191505060405180910390f35b610a6860048036036040811015610a3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612efe565b005b348015610a7657600080fd5b50610aa360048036036020811015610a8d57600080fd5b8101908080359060200190929190505050612f26565b005b348015610ab157600080fd5b50610aba612f8a565b604051808215151515815260200191505060405180910390f35b348015610ae057600080fd5b50610b0d60048036036020811015610af757600080fd5b8101908080359060200190929190505050612f9d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b5b57600080fd5b50610b64613019565b6040518082815260200191505060405180910390f35b348015610b8657600080fd5b50610b8f61301f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bdd57600080fd5b50610c2060048036036020811015610bf457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613045565b6040518082815260200191505060405180910390f35b348015610c4257600080fd5b50610c6f60048036036020811015610c5957600080fd5b81019080803590602001909291905050506130c7565b604051808215151515815260200191505060405180910390f35b348015610c9557600080fd5b50610c9e61310e565b005b348015610cac57600080fd5b50610cb561319f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d0357600080fd5b50610d8560048036036040811015610d1a57600080fd5b810190808035906020019092919080359060200190640100000000811115610d4157600080fd5b820183602082011115610d5357600080fd5b80359060200191846001830284011164010000000083111715610d7557600080fd5b90919293919293905050506131c5565b005b348015610d9357600080fd5b50610d9c6132c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dea57600080fd5b50610df36132ee565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e33578082015181840152602081019050610e18565b50505050905090810190601f168015610e605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e7a57600080fd5b50610ec960048036036040811015610e9157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613390565b005b348015610ed757600080fd5b50610ee06134ca565b6040518082815260200191505060405180910390f35b348015610f0257600080fd5b50610f2f60048036036020811015610f1957600080fd5b81019080803590602001909291905050506134d0565b005b348015610f3d57600080fd5b50610f466135aa565b6040518082815260200191505060405180910390f35b348015610f6857600080fd5b50610f716135b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fbf57600080fd5b50610fc86135da565b005b348015610fd657600080fd5b506110da60048036036080811015610fed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561105457600080fd5b82018360208201111561106657600080fd5b8035906020019184600183028401116401000000008311171561108857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613641565b005b3480156110e857600080fd5b50611115600480360360208110156110ff57600080fd5b8101908080359060200190929190505050613667565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561115557808201518184015260208101905061113a565b50505050905090810190601f1680156111825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561119c57600080fd5b506111a5613739565b6040518082815260200191505060405180910390f35b3480156111c757600080fd5b506111f4600480360360208110156111de57600080fd5b810190808035906020019092919050505061373f565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561122a57600080fd5b506112336137f2565b604051808215151515815260200191505060405180910390f35b34801561125957600080fd5b506112bc6004803603604081101561127057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613826565b604051808215151515815260200191505060405180910390f35b3480156112e257600080fd5b506112eb6138ba565b005b3480156112f957600080fd5b5061133c6004803603602081101561131057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061391e565b005b6002600c5414156113b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600c819055506014548110611436576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b600061144182612f9d565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552525f43414e5f4e4f545f50555243484153455f4f574e5f4152540000000081525060200191505060405180910390fd5b42601383815481106114f357fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1610611596576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4552525f4249445f4e4f545f53544152545f594554000000000000000000000081525060200191505060405180910390fd5b6000601383815481106115a557fe5b906000526020600020906003020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506000811415611aed57600066b1a2bc2ec50000905080341015611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4552525f4e4f545f454e4f5547485f4d4f4e455900000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc61168f83346139ef90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050505060008090506013858154811061171357fe5b906000526020600020906003020160010160109054906101000a900460ff161561198b576802b5e3af16b1880000905080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561180557600080fd5b505afa158015611819573d6000803e3d6000fd5b505050506040513d602081101561182f57600080fd5b81019080805190602001909291905050501061198557601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b505050506040513d602081101561196e57600080fd5b81019080805190602001909291905050505061198a565b600090505b5b6013858154811061199857fe5b9060005260206000209060030201600101600881819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506119f9843387613a0f565b7fdbc7bf8977d24ca9350fbf7da682a8d3bf6c09e8ec388302d894cd222bf664428583848488338c604051808881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15050505061219a565b6000611af8826128de565b90506000611b08600184016128de565b905080341015611b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4552525f4e4f545f454e4f5547485f4d4f4e455900000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8234039081150290604051600060405180830381858888f1935050505050600082820390506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c21600a611c13600586613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c9f6064611c91601286613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050508673ffffffffffffffffffffffffffffffffffffffff166108fc611cfb6064611ced600286613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050508473ffffffffffffffffffffffffffffffffffffffff166108fc611d6985611d5b6064611d4d601e88613a3390919063ffffffff16565b613a6d90919063ffffffff16565b613a9390919063ffffffff16565b9081150290604051600060405180830381858888f1935050505050600080905060138781548110611d9657fe5b906000526020600020906003020160010160109054906101000a900460ff161561203a57600a8510611de557611de0674563918244f4000060018701613a3390919063ffffffff16565b611df0565b6802b5e3af16b18800005b905080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611eb457600080fd5b505afa158015611ec8573d6000803e3d6000fd5b505050506040513d6020811015611ede57600080fd5b81019080805190602001909291905050501061203457601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ff357600080fd5b505af1158015612007573d6000803e3d6000fd5b505050506040513d602081101561201d57600080fd5b810190808051906020019092919050505050612039565b600090505b5b6013878154811061204757fe5b9060005260206000209060030201600101600881819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506120a8863389613a0f565b7fdbc7bf8977d24ca9350fbf7da682a8d3bf6c09e8ec388302d894cd222bf66442878585848a338e604051808881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15050505050505b6001600c819055505050565b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461226857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156122ae573d6000803e3d6000fd5b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b5050505050905090565b600061238582613ab2565b61238e57600080fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006123d482612f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561240f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061244f575061244e8133613826565b5b61245857600080fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461256357600080fd5b60145482106125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b42601383815481106125e857fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161161268b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4552525f414c52454144595f535441525400000000000000000000000000000081525060200191505060405180910390fd5b806013838154811061269957fe5b906000526020600020906003020160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000600880549050905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127113382613b24565b61271a57600080fd5b612725838383613a0f565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461278357600080fd5b60145483106127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b426013848154811061280857fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16116128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4552525f414c52454144595f535441525400000000000000000000000000000081525060200191505060405180910390fd5b8181601385815481106128ba57fe5b906000526020600020906003020160020191906128d892919061453b565b50505050565b600060118054905082111561299057600060116001601180549050038154811061290457fe5b90600052602060002001549050600060118054905090505b838110156129865761294b600a61293d600b85613a3390919063ffffffff16565b613a6d90919063ffffffff16565b91506011829080600181540180825580915050906001820390600052602060002001600090919290919091505550808060010191505061291c565b50809150506129ae565b601160018303815481106129a057fe5b906000526020600020015490505b919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a0d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a4757600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612a9683613045565b8210612aa157600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612aeb57fe5b9060005260206000200154905092915050565b600060138281548110612b0d57fe5b906000526020600020906003020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b9e57600080fd5b600d60009054906101000a900460ff16612bb757600080fd5b6000600d60006101000a81548160ff021916908315150217905550565b612bef83838360405180602001604052806000815250613641565b505050565b6000600d60009054906101000a900460ff1615612c1057600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552525f4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b60006012541415612ce65760009450612d0d565b60155460125442031015612cfd5760009450612d0c565b8415612d0b57426012819055505b5b5b612d156145bb565b6040518060a0016040528060145481526020018467ffffffffffffffff168152602001600067ffffffffffffffff168152602001871515815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050601381908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548160ff0219169083151502179055506080820151816002019080519060200190612e6d929190614600565b50505060148190555060145463ffffffff1660145414612e8c57600080fd5b612ebc6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160145403613bb9565b601454915050949350505050565b6000612ed46126d4565b8210612edf57600080fd5b60088281548110612eec57fe5b90600052602060002001549050919050565b600d60009054906101000a900460ff1615612f1857600080fd5b612f22828261133e565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f8057600080fd5b8060158190555050565b600d60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561301057600080fd5b80915050919050565b60125481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561308057600080fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006130d282613ab2565b6130db57600080fd5b601382815481106130e857fe5b906000526020600020906003020160010160109054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461316857600080fd5b600d60009054906101000a900460ff161561318257600080fd5b6001600d60006101000a81548160ff021916908315150217905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461321f57600080fd5b6014548310613296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b8181601385815481106132a557fe5b906000526020600020906003020160020191906132c392919061453b565b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133865780601f1061335b57610100808354040283529160200191613386565b820191906000526020600020905b81548152906001019060200180831161336957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c957600080fd5b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461352957600080fd5b60145481106135a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b8060168190555050565b6000601454905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461363457600080fd5b6015544203601281905550565b61364c848484612707565b61365884848484613bda565b61366157600080fd5b50505050565b606061367282613ab2565b61367b57600080fd5b6013828154811061368857fe5b90600052602060002090600302016002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561372d5780601f106137025761010080835404028352916020019161372d565b820191906000526020600020905b81548152906001019060200180831161371057829003601f168201915b50505050509050919050565b60155481565b600060145482106137b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b601382815481106137c557fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff169050919050565b60008060125414156138075760009050613823565b6015546012544203101561381e5760009050613823565b600190505b90565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461391457600080fd5b6000601281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461397757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146139ec57806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000828211156139fe57600080fd5b600082840390508091505092915050565b613a1a838383613dc3565b613a248382614024565b613a2e82826141c2565b505050565b600080831415613a465760009050613a67565b6000828402905082848281613a5757fe5b0414613a6257600080fd5b809150505b92915050565b6000808211613a7b57600080fd5b6000828481613a8657fe5b0490508091505092915050565b600080828401905083811015613aa857600080fd5b8091505092915050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600080613b3083612f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613b9f57508373ffffffffffffffffffffffffffffffffffffffff16613b878461237a565b73ffffffffffffffffffffffffffffffffffffffff16145b80613bb05750613baf8185613826565b5b91505092915050565b613bc38282614289565b613bcd82826141c2565b613bd68161441e565b5050565b6000613bfb8473ffffffffffffffffffffffffffffffffffffffff1661446a565b613c085760019050613dbb565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613ce3578082015181840152602081019050613cc8565b50505050905090810190601f168015613d105780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613d3257600080fd5b505af1158015613d46573d6000803e3d6000fd5b505050506040513d6020811015613d5c57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16613de382612f9d565b73ffffffffffffffffffffffffffffffffffffffff1614613e0357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e3d57600080fd5b613e468161447d565b613e996001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ef90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2f6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061407c6001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506139ef90919063ffffffff16565b9050600060076000848152602001908152602001600020549050818114614169576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106140e957fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061414157fe5b9060005260206000200181905550816007600083815260200190815260200160002081905550505b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036141bb9190614680565b5050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506007600083815260200190815260200160002081905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156142c357600080fd5b6142cc81613ab2565b156142d657600080fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061437b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146145385760006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061457c57803560ff19168380011785556145aa565b828001600101855582156145aa579182015b828111156145a957823582559160200191906001019061458e565b5b5090506145b791906146ac565b5090565b6040518060a0016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600015158152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061464157805160ff191683800117855561466f565b8280016001018555821561466f579182015b8281111561466e578251825591602001919060010190614653565b5b50905061467c91906146ac565b5090565b8154818355818111156146a7578183600052602060002091820191016146a691906146ac565b5b505050565b6146ce91905b808211156146ca5760008160009055506001016146b2565b5090565b9056fea265627a7a7231582012f40e8f6873a77aa4d62bc4fd44305ab46de5bc66b1f9135665e3fd1d2fba3a64736f6c63430005100032