ETH Price: $3,808.00 (+4.91%)

Token

PinMo Token (pinmo)
 

Overview

Max Total Supply

273,000,000 pinmo

Holders

2,995

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
53.27 pinmo

Value
$0.00
0xd77a4fbff64f158abc12dead6622574e77b56b13
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PinMo

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-08-28
*/

pragma solidity ^0.4.18;

// ----------------------------------------------------------------------------
// PinMo contract
// 
// Symbol      : PMC
// Name        : PinMo Crown
// Total supply: 100,000
// Decimals    : 0
// 
// Symbol      : PMT
// Name        : PinMo Token
// Total supply: 273,000,000
// Decimals    : 18
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// Safe maths
// ----------------------------------------------------------------------------
contract SafeMath {
    function safeAdd(uint a, uint b) public pure returns (uint c) {
        c = a + b;
        require(c >= a);
    }
    function safeSub(uint a, uint b) public pure returns (uint c) {
        require(b <= a);
        c = a - b;
    }
    function safeMul(uint a, uint b) public pure returns (uint c) {
        c = a * b;
        require(a == 0 || c / a == b);
    }
    function safeDiv(uint a, uint b) public pure returns (uint c) {
        require(b > 0);
        c = a / b;
    }
}


// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// ----------------------------------------------------------------------------
contract ERC20Interface {
    function totalSupply() public constant returns (uint);
    function balanceOf(address tokenOwner) public constant returns (uint balance);
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}


// ----------------------------------------------------------------------------
// Contract function to receive approval and execute function in one call
//
// Borrowed from MiniMeToken
// ----------------------------------------------------------------------------
contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}


// ----------------------------------------------------------------------------
// Admin contract
// ----------------------------------------------------------------------------
contract Administration {
    event AdminTransferred(address indexed _from, address indexed _to);
    event Pause();
    event Unpause();
    
    address public adminAddress = 0x9d3177a1363702682EA8913Cb4A8a0FBDa00Ba75;

    bool public paused = false;

    modifier onlyAdmin() {
        require(msg.sender == adminAddress);
        _;
    }

    function setAdmin(address _newAdmin) public onlyAdmin {
        require(_newAdmin != address(0));
        AdminTransferred(adminAddress, _newAdmin);
        adminAddress = _newAdmin;
        
    }

    function withdrawBalance() external onlyAdmin {
        adminAddress.transfer(this.balance);
    }

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused() {
        require(paused);
        _;
    }

    function pause() public onlyAdmin whenNotPaused returns(bool) {
        paused = true;
        Pause();
        return true;
    }

    function unpause() public onlyAdmin whenPaused returns(bool) {
        paused = false;
        Unpause();
        return true;
    }

    uint oneEth = 1 ether;
}

contract PinMoCrown is ERC20Interface, Administration, SafeMath {
    event CrownTransfer(address indexed from, address indexed to, uint tokens);
    
    string public crownSymbol;
    string public crownName;
    uint8 public crownDecimals;
    uint public _crownTotalSupply;

    mapping(address => uint) crownBalances;
    mapping(address => bool) crownFreezed;
    mapping(address => uint) crownFreezeAmount;
    mapping(address => uint) crownUnlockTime;


    // ------------------------------------------------------------------------
    // Constructor
    // ------------------------------------------------------------------------
    function PinMoCrown() public {
        crownSymbol = "PMC";
        crownName = "PinMo Crown";
        crownDecimals = 0;
        _crownTotalSupply = 100000;
        crownBalances[adminAddress] = _crownTotalSupply;
        CrownTransfer(address(0), adminAddress, _crownTotalSupply);
    }


    // ------------------------------------------------------------------------
    // Total supply
    // ------------------------------------------------------------------------
    function crownTotalSupply() public constant returns (uint) {
        return _crownTotalSupply  - crownBalances[address(0)];
    }


    // ------------------------------------------------------------------------
    // Get the token balance for account tokenOwner
    // ------------------------------------------------------------------------
    function crownBalanceOf(address tokenOwner) public constant returns (uint balance) {
        return crownBalances[tokenOwner];
    }


    // ------------------------------------------------------------------------
    // Transfer the balance from token owner's account to to account
    // - Owner's account must have sufficient balance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function crownTransfer(address to, uint tokens) public whenNotPaused returns (bool success) {
        if(crownFreezed[msg.sender] == false){
            crownBalances[msg.sender] = safeSub(crownBalances[msg.sender], tokens);
            crownBalances[to] = safeAdd(crownBalances[to], tokens);
            CrownTransfer(msg.sender, to, tokens);
        } else {
            if(crownBalances[msg.sender] > crownFreezeAmount[msg.sender]) {
                require(tokens <= safeSub(crownBalances[msg.sender], crownFreezeAmount[msg.sender]));
                crownBalances[msg.sender] = safeSub(crownBalances[msg.sender], tokens);
                crownBalances[to] = safeAdd(crownBalances[to], tokens);
                CrownTransfer(msg.sender, to, tokens);
            }
        }
            
        return true;
    }

    // ------------------------------------------------------------------------
    // Mint Tokens
    // ------------------------------------------------------------------------
    function mintCrown(uint amount) public onlyAdmin {
        crownBalances[msg.sender] = safeAdd(crownBalances[msg.sender], amount);
        _crownTotalSupply = safeAdd(_crownTotalSupply, amount);
    }

    // ------------------------------------------------------------------------
    // Burn Tokens
    // ------------------------------------------------------------------------
    function burnCrown(uint amount) public onlyAdmin {
        crownBalances[msg.sender] = safeSub(crownBalances[msg.sender], amount);
        _crownTotalSupply = safeSub(_crownTotalSupply, amount);
    }
    
    // ------------------------------------------------------------------------
    // Freeze Tokens
    // ------------------------------------------------------------------------
    function crownFreeze(address user, uint amount, uint period) public onlyAdmin {
        require(crownBalances[user] >= amount);
        crownFreezed[user] = true;
        crownUnlockTime[user] = uint(now) + period;
        crownFreezeAmount[user] = amount;
    }
    
    function _crownFreeze(uint amount) internal {
        require(crownFreezed[msg.sender] == false);
        require(crownBalances[msg.sender] >= amount);
        crownFreezed[msg.sender] = true;
        crownUnlockTime[msg.sender] = uint(-1);
        crownFreezeAmount[msg.sender] = amount;
    }

    // ------------------------------------------------------------------------
    // UnFreeze Tokens
    // ------------------------------------------------------------------------
    function crownUnFreeze() public whenNotPaused {
        require(crownFreezed[msg.sender] == true);
        require(crownUnlockTime[msg.sender] < uint(now));
        crownFreezed[msg.sender] = false;
        crownFreezeAmount[msg.sender] = 0;
    }
    
    function _crownUnFreeze(uint _amount) internal {
        require(crownFreezed[msg.sender] == true);
        crownUnlockTime[msg.sender] = 0;
        crownFreezed[msg.sender] = false;
        crownFreezeAmount[msg.sender] = safeSub(crownFreezeAmount[msg.sender], _amount);
    }
    
    function crownIfFreeze(address user) public view returns (
        bool check, 
        uint amount, 
        uint timeLeft
    ) {
        check = crownFreezed[user];
        amount = crownFreezeAmount[user];
        timeLeft = crownUnlockTime[user] - uint(now);
    }

}

//
contract PinMoToken is PinMoCrown {
    event PartnerCreated(uint indexed partnerId, address indexed partner, uint indexed amount, uint singleTrans, uint durance);
    event RewardDistribute(uint indexed postId, uint partnerId, address indexed user, uint indexed amount);
    
    event VipAgreementSign(uint indexed vipId, address indexed vip, uint durance, uint frequence, uint salar);
    event SalaryReceived(uint indexed vipId, address indexed vip, uint salary, uint indexed timestamp);
    
    string public symbol;
    string public  name;
    uint8 public decimals;
    uint public _totalSupply;
    uint public minePool;

//Advertising partner can construct their rewarding pool for each campaign
    struct Partner {
        address admin;
        uint tokenPool;
        uint singleTrans;
        uint timestamp;
        uint durance;
    }
//regular users
    struct Poster {
        address poster;
        bytes32 hashData;
        uint reward;
    }
//Influencers do have additional privileges such as salary
    struct Vip {
        address vip;
        uint durance;
        uint frequence;
        uint salary;
        uint timestamp;
    }
    
    Partner[] partners;
    Vip[] vips;

    modifier onlyPartner(uint _partnerId) {
        require(partners[_partnerId].admin == msg.sender);
        require(partners[_partnerId].tokenPool > uint(0));
        uint deadline = safeAdd(partners[_partnerId].timestamp, partners[_partnerId].durance);
        require(deadline > now);
        _;
    }
    
    modifier onlyVip(uint _vipId) {
        require(vips[_vipId].vip == msg.sender);
        require(vips[_vipId].durance > now);
        require(vips[_vipId].timestamp < now);
        _;
    }

    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowed;
    mapping(address => bool) freezed;
    mapping(address => uint) freezeAmount;
    mapping(address => uint) unlockTime;
    
    mapping(uint => Poster[]) PartnerIdToPosterList;


    // ------------------------------------------------------------------------
    // Constructor
    // ------------------------------------------------------------------------
    function PinMoToken() public {
        symbol = "pinmo";
        name = "PinMo Token";
        decimals = 18;
        _totalSupply = 273000000000000000000000000;
        
    //rewarding pool
        minePool = 136500000000000000000000000;
        balances[adminAddress] = _totalSupply - minePool;
        Transfer(address(0), adminAddress, _totalSupply);
    }
    
    // ------------------------------------------------------------------------
    // Total supply
    // ------------------------------------------------------------------------
    function totalSupply() public constant returns (uint) {
        return _totalSupply  - balances[address(0)];
    }


    // ------------------------------------------------------------------------
    // Get the token balance for account tokenOwner
    // ------------------------------------------------------------------------
    function balanceOf(address tokenOwner) public constant returns (uint balance) {
        return balances[tokenOwner];
    }


    // ------------------------------------------------------------------------
    // Transfer the balance from token owner's account to to account
    // - Owner's account must have sufficient balance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transfer(address to, uint tokens) public returns (bool success) {
        if(freezed[msg.sender] == false){
            balances[msg.sender] = safeSub(balances[msg.sender], tokens);
            balances[to] = safeAdd(balances[to], tokens);
            Transfer(msg.sender, to, tokens);
        } else {
            if(balances[msg.sender] > freezeAmount[msg.sender]) {
                require(tokens <= safeSub(balances[msg.sender], freezeAmount[msg.sender]));
                balances[msg.sender] = safeSub(balances[msg.sender], tokens);
                balances[to] = safeAdd(balances[to], tokens);
                Transfer(msg.sender, to, tokens);
            }
        }
            
        return true;
    }


    // ------------------------------------------------------------------------
    // Token owner can approve for spender to transferFrom(...) tokens
    // from the token owner's account
    //
    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
    // recommends that there are no checks for the approval double-spend attack
    // as this should be implemented in user interfaces 
    // ------------------------------------------------------------------------
    function approve(address spender, uint tokens) public returns (bool success) {
        require(freezed[msg.sender] != true);
        allowed[msg.sender][spender] = tokens;
        Approval(msg.sender, spender, tokens);
        return true;
    }


    // ------------------------------------------------------------------------
    // Transfer tokens from the from account to the to account
    // 
    // The calling account must already have sufficient tokens approve(...)-d
    // for spending from the from account and
    // - From account must have sufficient balance to transfer
    // - Spender must have sufficient allowance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transferFrom(address from, address to, uint tokens) public returns (bool success) {
        balances[from] = safeSub(balances[from], tokens);
        allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens);
        balances[to] = safeAdd(balances[to], tokens);
        Transfer(from, to, tokens);
        return true;
    }


    // ------------------------------------------------------------------------
    // Returns the amount of tokens approved by the owner that can be
    // transferred to the spender's account
    // ------------------------------------------------------------------------
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining) {
        require(freezed[msg.sender] != true);
        return allowed[tokenOwner][spender];
    }


    // ------------------------------------------------------------------------
    // Token owner can approve for spender to transferFrom(...) tokens
    // from the token owner's account. The spender contract function
    // receiveApproval(...) is then executed
    // ------------------------------------------------------------------------
    function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) {
        require(freezed[msg.sender] != true);
        allowed[msg.sender][spender] = tokens;
        Approval(msg.sender, spender, tokens);
        ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data);
        return true;
    }

    // ------------------------------------------------------------------------
    // Mint Tokens
    // ------------------------------------------------------------------------
    function _mint(uint amount, address receiver) internal {
        require(minePool >= amount);
        minePool = safeSub(minePool, amount);
        balances[receiver] = safeAdd(balances[receiver], amount);
        Transfer(address(0), receiver, amount);
    }
    
    function mint(uint amount) public onlyAdmin {
        require(minePool >= amount);
        minePool = safeSub(minePool, amount);
        balances[msg.sender] = safeAdd(balances[msg.sender], amount);
        Transfer(address(0), msg.sender, amount);
    }
    
    // ------------------------------------------------------------------------
    // Freeze Tokens
    // ------------------------------------------------------------------------
    function freeze(address user, uint amount, uint period) public onlyAdmin {
        require(balances[user] >= amount);
        freezed[user] = true;
        unlockTime[user] = uint(now) + period;
        freezeAmount[user] = amount;
    }

    // ------------------------------------------------------------------------
    // UnFreeze Tokens
    // ------------------------------------------------------------------------
    function unFreeze() public {
        require(freezed[msg.sender] == true);
        require(unlockTime[msg.sender] < uint(now));
        freezed[msg.sender] = false;
        freezeAmount[msg.sender] = 0;
    }
    
    function ifFreeze(address user) public view returns (
        bool check, 
        uint amount, 
        uint timeLeft
    ) {
        check = freezed[user];
        amount = freezeAmount[user];
        timeLeft = unlockTime[user] - uint(now);
    }
    
    // ------------------------------------------------------------------------
    // Partner Authorization
    // ------------------------------------------------------------------------
    function createPartner(address _partner, uint _amount, uint _singleTrans, uint _durance) public onlyAdmin returns (uint) {
        Partner memory _Partner = Partner({
            admin: _partner,
            tokenPool: _amount,
            singleTrans: _singleTrans,
            timestamp: uint(now),
            durance: _durance
        });
        uint newPartnerId = partners.push(_Partner) - 1;
        PartnerCreated(newPartnerId, _partner, _amount, _singleTrans, _durance);
        
        return newPartnerId;
    }
    
    function partnerTransfer(uint _partnerId, bytes32 _data, address _to, uint _amount) public onlyPartner(_partnerId) whenNotPaused returns (bool) {
        require(_amount <= partners[_partnerId].singleTrans);
        partners[_partnerId].tokenPool = safeSub(partners[_partnerId].tokenPool, _amount);
        Poster memory _Poster = Poster ({
           poster: _to,
            hashData: _data,
           reward: _amount
        });
        uint newPostId = PartnerIdToPosterList[_partnerId].push(_Poster) - 1;
        _mint(_amount, _to);
        RewardDistribute(newPostId, _partnerId, _to, _amount);
        return true;
    }
    
    function setPartnerPool(uint _partnerId, uint _amount) public onlyAdmin {
        partners[_partnerId].tokenPool = _amount;
    }
    
    function setPartnerDurance(uint _partnerId, uint _durance) public onlyAdmin {
        partners[_partnerId].durance = uint(now) + _durance;
    }
    
    function getPartnerInfo(uint _partnerId) public view returns (
        address admin,
        uint tokenPool,
        uint timeLeft
    ) {
        Partner memory _Partner = partners[_partnerId];
        admin = _Partner.admin;
        tokenPool = _Partner.tokenPool;
        if (_Partner.timestamp + _Partner.durance > uint(now)) {
            timeLeft = _Partner.timestamp + _Partner.durance - uint(now);
        } else {
            timeLeft = 0;
        }
        
    }

    function getPosterInfo(uint _partnerId, uint _posterId) public view returns (
        address poster,
        bytes32 hashData,
        uint reward
    ) {
        Poster memory _Poster = PartnerIdToPosterList[_partnerId][_posterId];
        poster = _Poster.poster;
        hashData = _Poster.hashData;
        reward = _Poster.reward;
    }

    // ------------------------------------------------------------------------
    // Vip Agreement
    // ------------------------------------------------------------------------
    function createVip(address _vip, uint _durance, uint _frequence, uint _salary) public onlyAdmin returns (uint) {
        Vip memory _Vip = Vip ({
           vip: _vip,
           durance: uint(now) + _durance,
           frequence: _frequence,
           salary: _salary,
           timestamp: now + _frequence
        });
        uint newVipId = vips.push(_Vip) - 1;
        VipAgreementSign(newVipId, _vip, _durance, _frequence, _salary);
        
        return newVipId;
    }
    
    function mineSalary(uint _vipId) public onlyVip(_vipId) whenNotPaused returns (bool) {
        Vip storage _Vip = vips[_vipId];
        _mint(_Vip.salary, _Vip.vip);
        _Vip.timestamp = safeAdd(_Vip.timestamp, _Vip.frequence);
        
        SalaryReceived(_vipId, _Vip.vip, _Vip.salary, _Vip.timestamp);
        return true;
    }
    
    function deleteVip(uint _vipId) public onlyAdmin {
        delete vips[_vipId];
    }
    
    function getVipInfo(uint _vipId) public view returns (
        address vip,
        uint durance,
        uint frequence,
        uint salary,
        uint nextSalary,
        string log
    ) {
        Vip memory _Vip = vips[_vipId];
        vip = _Vip.vip;
        durance = _Vip.durance;
        frequence = _Vip.frequence;
        salary = _Vip.salary;
        if(_Vip.timestamp >= uint(now)) {
            nextSalary = safeSub(_Vip.timestamp, uint(now));
            log = "Please Wait";
        } else {
            nextSalary = 0;
            log = "Pick Up Your Salary Now";
        }
    }

    // ------------------------------------------------------------------------
    // Accept ETH
    // ------------------------------------------------------------------------
    function () public payable {
    }

    // ------------------------------------------------------------------------
    // Owner can transfer out any accidentally sent ERC20 tokens
    // ------------------------------------------------------------------------
    function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyAdmin returns (bool success) {
        return ERC20Interface(tokenAddress).transfer(adminAddress, tokens);
    }
}

contract PinMo is PinMoToken {
    event MembershipUpdate(address indexed member, uint indexed level);
    event MembershipCancel(address indexed member);
    event PinMoTradeCreated(uint indexed tradeId, bool indexed ifCrown, uint crown, uint token);
    event TradeCancel(uint indexed tradeId);
    event TradeComplete(uint indexed tradeId, address indexed buyer, address indexed seller, uint crown, uint token);
    event Mine(address indexed miner, uint indexed salary);
    
    mapping (address => uint) MemberToLevel;
    mapping (address => uint) MemberToCrown;
    mapping (address => uint) MemberToToken;
    mapping (address => uint) MemberToTime;
    
    uint public period = 30 days;
    
    uint[4] public boardMember =[
        0,
        5,
        25,
        100
    ];

    uint[4] public salary = [
        0,
        2000000000000000000000,
        6000000000000000000000,
        12000000000000000000000
    ];
    
    struct PinMoTrade {
        address seller;
        bool ifCrown;
        uint crown;
        uint token;
    }
    
    PinMoTrade[] pinMoTrades;
    
    function boardMemberApply(uint _level) public whenNotPaused {
        require(_level > 0 && _level <= 3);
        require(crownBalances[msg.sender] >= boardMember[_level]);
        _crownFreeze(boardMember[_level]);
        MemberToLevel[msg.sender] = _level;
        if(MemberToTime[msg.sender] == 0) {
            MemberToTime[msg.sender] = uint(now);
        }
        
        MembershipUpdate(msg.sender, _level);
    }
    
    function getBoardMember(address _member) public view returns (
        uint level,
        uint timeLeft
    ) {
        level = MemberToLevel[_member];
        if(MemberToTime[_member] > uint(now)) {
            timeLeft = safeSub(MemberToTime[_member], uint(now));
        } else {
            timeLeft = 0;
        }
    }
    
    function boardMemberCancel() public whenNotPaused {
        require(MemberToLevel[msg.sender] > 0);
        _crownUnFreeze(boardMember[MemberToLevel[msg.sender]]);
        
        MemberToLevel[msg.sender] = 0;
        MembershipCancel(msg.sender);
    }
    
    function createPinMoTrade(bool _ifCrown, uint _crown, uint _token) public whenNotPaused returns (uint) {
        if(_ifCrown) {
            require(crownBalances[msg.sender] >= _crown);
            crownBalances[msg.sender] = safeSub(crownBalances[msg.sender], _crown);
            MemberToCrown[msg.sender] = _crown;
            PinMoTrade memory pinMo = PinMoTrade({
               seller: msg.sender,
               ifCrown:_ifCrown,
               crown: _crown,
               token: _token
            });
            uint newCrownTradeId = pinMoTrades.push(pinMo) - 1;
            PinMoTradeCreated(newCrownTradeId, _ifCrown, _crown, _token);
            
            return newCrownTradeId;
        } else {
            require(balances[msg.sender] >= _token);
            balances[msg.sender] = safeSub(balances[msg.sender], _token);
            MemberToToken[msg.sender] = _token;
            PinMoTrade memory _pinMo = PinMoTrade({
               seller: msg.sender,
               ifCrown:_ifCrown,
               crown: _crown,
               token: _token
            });
            uint newTokenTradeId = pinMoTrades.push(_pinMo) - 1;
            PinMoTradeCreated(newTokenTradeId, _ifCrown, _crown, _token);
            
            return newTokenTradeId;
        }
    }
    
    function cancelTrade(uint _tradeId) public whenNotPaused {
        PinMoTrade memory pinMo = pinMoTrades[_tradeId];
        require(pinMo.seller == msg.sender);
        if(pinMo.ifCrown){
            crownBalances[msg.sender] = safeAdd(crownBalances[msg.sender], pinMo.crown);
            MemberToCrown[msg.sender] = 0;
        } else {
            balances[msg.sender] = safeAdd(balances[msg.sender], pinMo.token);
            MemberToToken[msg.sender] = 0;
        }
        delete pinMoTrades[_tradeId];
        TradeCancel(_tradeId);
    }
    
    function trade(uint _tradeId) public whenNotPaused {
        PinMoTrade memory pinMo = pinMoTrades[_tradeId];
        if(pinMo.ifCrown){
            crownBalances[msg.sender] = safeAdd(crownBalances[msg.sender], pinMo.crown);
            MemberToCrown[pinMo.seller] = 0;
            transfer(pinMo.seller, pinMo.token);
            delete pinMoTrades[_tradeId];
            TradeComplete(_tradeId, msg.sender, pinMo.seller, pinMo.crown, pinMo.token);
        } else {
            balances[msg.sender] = safeAdd(balances[msg.sender], pinMo.token);
            MemberToToken[pinMo.seller] = 0;
            crownTransfer(pinMo.seller, pinMo.crown);
            delete pinMoTrades[_tradeId];
            TradeComplete(_tradeId, msg.sender, pinMo.seller, pinMo.crown, pinMo.token);
        }
    }
    
    function mine() public whenNotPaused {
        uint level = MemberToLevel[msg.sender];
        require(MemberToTime[msg.sender] < uint(now)); 
        require(level > 0);
        _mint(salary[level], msg.sender);
        MemberToTime[msg.sender] = safeAdd(MemberToTime[msg.sender], period);
        Mine(msg.sender, salary[level]);
    }
    
    function setBoardMember(uint one, uint two, uint three) public onlyAdmin {
        boardMember[1] = one;
        boardMember[2] = two;
        boardMember[3] = three;
    }
    
    function setSalary(uint one, uint two, uint three) public onlyAdmin {
        salary[1] = one;
        salary[2] = two;
        salary[3] = three;
    }
    
    function setPeriod(uint time) public onlyAdmin {
        period = time;
    }
    
    function getTrade(uint _tradeId) public view returns (
        address seller,
        bool ifCrown,
        uint crown,
        uint token 
    ) {
        PinMoTrade memory _pinMo = pinMoTrades[_tradeId];
        seller = _pinMo.seller;
        ifCrown = _pinMo.ifCrown;
        crown = _pinMo.crown;
        token = _pinMo.token;
    }
    
    function WhoIsTheContractMaster() public pure returns (string) {
        return "Alexander The Exlosion";
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"}],"name":"crownBalanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_level","type":"uint256"}],"name":"boardMemberApply","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tradeId","type":"uint256"}],"name":"cancelTrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"time","type":"uint256"}],"name":"setPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_partner","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_singleTrans","type":"uint256"},{"name":"_durance","type":"uint256"}],"name":"createPartner","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"burnCrown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tradeId","type":"uint256"}],"name":"getTrade","outputs":[{"name":"seller","type":"address"},{"name":"ifCrown","type":"bool"},{"name":"crown","type":"uint256"},{"name":"token","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"amount","type":"uint256"},{"name":"period","type":"uint256"}],"name":"freeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"amount","type":"uint256"},{"name":"period","type":"uint256"}],"name":"crownFreeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_vipId","type":"uint256"}],"name":"getVipInfo","outputs":[{"name":"vip","type":"address"},{"name":"durance","type":"uint256"},{"name":"frequence","type":"uint256"},{"name":"salary","type":"uint256"},{"name":"nextSalary","type":"uint256"},{"name":"log","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_partnerId","type":"uint256"},{"name":"_durance","type":"uint256"}],"name":"setPartnerDurance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ifCrown","type":"bool"},{"name":"_crown","type":"uint256"},{"name":"_token","type":"uint256"}],"name":"createPinMoTrade","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_partnerId","type":"uint256"}],"name":"getPartnerInfo","outputs":[{"name":"admin","type":"address"},{"name":"tokenPool","type":"uint256"},{"name":"timeLeft","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_crownTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"crownTransfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"one","type":"uint256"},{"name":"two","type":"uint256"},{"name":"three","type":"uint256"}],"name":"setSalary","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minePool","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_member","type":"address"}],"name":"getBoardMember","outputs":[{"name":"level","type":"uint256"},{"name":"timeLeft","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"ifFreeze","outputs":[{"name":"check","type":"bool"},{"name":"amount","type":"uint256"},{"name":"timeLeft","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_partnerId","type":"uint256"},{"name":"_amount","type":"uint256"}],"name":"setPartnerPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"mintCrown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"one","type":"uint256"},{"name":"two","type":"uint256"},{"name":"three","type":"uint256"}],"name":"setBoardMember","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"crownUnFreeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"WhoIsTheContractMaster","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"boardMemberCancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unFreeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"crownTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"crownSymbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_vipId","type":"uint256"}],"name":"mineSalary","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"boardMember","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_vipId","type":"uint256"}],"name":"deleteVip","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"mine","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeSub","outputs":[{"name":"c","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_partnerId","type":"uint256"},{"name":"_posterId","type":"uint256"}],"name":"getPosterInfo","outputs":[{"name":"poster","type":"address"},{"name":"hashData","type":"bytes32"},{"name":"reward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"salary","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeDiv","outputs":[{"name":"c","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"crownName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"crownIfFreeze","outputs":[{"name":"check","type":"bool"},{"name":"amount","type":"uint256"},{"name":"timeLeft","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_vip","type":"address"},{"name":"_durance","type":"uint256"},{"name":"_frequence","type":"uint256"},{"name":"_salary","type":"uint256"}],"name":"createVip","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeMul","outputs":[{"name":"c","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tradeId","type":"uint256"}],"name":"trade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeAdd","outputs":[{"name":"c","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"crownDecimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"period","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_partnerId","type":"uint256"},{"name":"_data","type":"bytes32"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"partnerTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"adminAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"member","type":"address"},{"indexed":true,"name":"level","type":"uint256"}],"name":"MembershipUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"member","type":"address"}],"name":"MembershipCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tradeId","type":"uint256"},{"indexed":true,"name":"ifCrown","type":"bool"},{"indexed":false,"name":"crown","type":"uint256"},{"indexed":false,"name":"token","type":"uint256"}],"name":"PinMoTradeCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tradeId","type":"uint256"}],"name":"TradeCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tradeId","type":"uint256"},{"indexed":true,"name":"buyer","type":"address"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"crown","type":"uint256"},{"indexed":false,"name":"token","type":"uint256"}],"name":"TradeComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"miner","type":"address"},{"indexed":true,"name":"salary","type":"uint256"}],"name":"Mine","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"partnerId","type":"uint256"},{"indexed":true,"name":"partner","type":"address"},{"indexed":true,"name":"amount","type":"uint256"},{"indexed":false,"name":"singleTrans","type":"uint256"},{"indexed":false,"name":"durance","type":"uint256"}],"name":"PartnerCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"postId","type":"uint256"},{"indexed":false,"name":"partnerId","type":"uint256"},{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"amount","type":"uint256"}],"name":"RewardDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"vipId","type":"uint256"},{"indexed":true,"name":"vip","type":"address"},{"indexed":false,"name":"durance","type":"uint256"},{"indexed":false,"name":"frequence","type":"uint256"},{"indexed":false,"name":"salar","type":"uint256"}],"name":"VipAgreementSign","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"vipId","type":"uint256"},{"indexed":true,"name":"vip","type":"address"},{"indexed":false,"name":"salary","type":"uint256"},{"indexed":true,"name":"timestamp","type":"uint256"}],"name":"SalaryReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"CrownTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"AdminTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"}]

606060409081526000805460a060020a60ff0219600160a060020a0319909116739d3177a1363702682ea8913cb4a8a0fbda00ba7517169055670de0b6b3a764000060015562278d00601b556080905190810160409081526000825260056020830152601990820152606460608201526200007f90601c906004620002f2565b506080604051908101604090815260008252686c6b935b8bbd40000060208084019190915269014542ba12a337c000009183019190915269028a857425466f8000006060830152620000d39160046200033a565b5060408051908101604052600381527f504d430000000000000000000000000000000000000000000000000000000000602082015260029080516200011d92916020019062000376565b5060408051908101604052600b81527f50696e4d6f2043726f776e000000000000000000000000000000000000000000602082015260039080516200016792916020019062000376565b506004805460ff19169055620186a0600581905560008054600160a060020a039081168252600660205260408083208490558254909116927f65ce8557a92565d22c46ffce284dd053284557951303e4488bcff08b9df81051915190815260200160405180910390a360408051908101604052600581527f70696e6d6f0000000000000000000000000000000000000000000000000000006020820152600a9080516200021992916020019062000376565b5060408051908101604052600b8082527f50696e4d6f20546f6b656e00000000000000000000000000000000000000000060208301529080516200026292916020019062000376565b50600c805460ff191660121790556ae1d1ffa7888968b1000000600d9081556a70e8ffd3c444b458800000600e81905560008054600160a060020a03908116825260116020526040808320939093558154935493169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91905190815260200160405180910390a362000409565b826004810192821562000328579160200282015b8281111562000328578251829060ff1690559160200191906001019062000306565b5062000336929150620003e9565b5090565b826004810192821562000328579160200282015b828111156200032857825182906001605060020a03169055916020019190600101906200034e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003b957805160ff191683800117855562000328565b8280016001018555821562000328579182015b8281111562000328578251825591602001919060010190620003cc565b6200040691905b80821115620003365760008155600101620003f0565b90565b61358180620004196000396000f3006060604052600436106102db5763ffffffff60e060020a60003504166295716b81146102dd5780630486529b1461030e57806306fdde0314610324578063095ea7b3146103ae57806309ec6cc7146103e45780630f3a9f65146103fa57806318160ddd1461041057806320db91e21461042357806323b872dd1461044b5780632c78bfdc146104735780632db25e051461048957806330e1e4e5146104d5578063313ce567146104fa5780633d0e6afc146105235780633eaaf86b146105485780633f4ba83a1461055b5780634d65beb11461056e5780634ea611cd146106315780634eb054e61461064a5780635538c9641461066857806356e8f53e146106b457806359acbcb1146106c75780635bee29be146106e95780635c975abb146107055780635fd8c71014610718578063602e66231461072b578063637fcf951461073e57806363c454ca146107755780636509c195146107ba5780636b8b3268146107d35780636e8de595146107e9578063704b6c021461080557806370a082311461082457806373e528551461084357806376637dcd146108565780637c85ab3a146108695780637cf12b901461087c578063806b39ab1461088f5780638456cb59146108a2578063876f20b1146108b5578063876f9795146108c85780638a583911146108de5780638d72f856146108f457806395d89b411461090a57806399f4b2511461091d578063a0712d6814610930578063a293d1e814610946578063a61d68291461095f578063a9059cbb146109a6578063a9b6c435146109c8578063b5931f7c146109de578063b975ce23146109f7578063baa93b5614610a0a578063cae9ca5114610a29578063cdfe281514610a8e578063d05c78da14610ab6578063dc39d06d14610acf578063dd62ed3e14610af1578063df1dd82614610b16578063e6cb901314610b2c578063eb65a2c714610b45578063ef78d4fd14610b58578063fc04c0c414610b6b578063fc6f946814610b93575b005b34156102e857600080fd5b6102fc600160a060020a0360043516610bc2565b60405190815260200160405180910390f35b341561031957600080fd5b6102db600435610bdd565b341561032f57600080fd5b610337610cdc565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561037357808201518382015260200161035b565b50505050905090810190601f1680156103a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103b957600080fd5b6103d0600160a060020a0360043516602435610d7a565b604051901515815260200160405180910390f35b34156103ef57600080fd5b6102db600435610e0f565b341561040557600080fd5b6102db600435610fc9565b341561041b57600080fd5b6102fc610fe9565b341561042e57600080fd5b6102fc600160a060020a036004351660243560443560643561101c565b341561045657600080fd5b6103d0600160a060020a0360043581169060243516604435611135565b341561047e57600080fd5b6102db600435611224565b341561049457600080fd5b61049f60043561128e565b604051600160a060020a039094168452911515602084015260408084019190915260608301919091526080909101905180910390f35b34156104e057600080fd5b6102db600160a060020a036004351660243560443561131b565b341561050557600080fd5b61050d61139c565b60405160ff909116815260200160405180910390f35b341561052e57600080fd5b6102db600160a060020a03600435166024356044356113a5565b341561055357600080fd5b6102fc611426565b341561056657600080fd5b6103d061142c565b341561057957600080fd5b6105846004356114b0565b6040518087600160a060020a0316600160a060020a0316815260200186815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156105f15780820151838201526020016105d9565b50505050905090810190601f16801561061e5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b341561063c57600080fd5b6102db6004356024356115dc565b341561065557600080fd5b6102fc6004351515602435604435611622565b341561067357600080fd5b61067e600435611939565b6040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390f35b34156106bf57600080fd5b6102fc6119e4565b34156106d257600080fd5b6103d0600160a060020a03600435166024356119ea565b34156106f457600080fd5b6102db600435602435604435611bed565b341561071057600080fd5b6103d0611c1f565b341561072357600080fd5b6102db611c2f565b341561073657600080fd5b6102fc611c85565b341561074957600080fd5b61075d600160a060020a0360043516611c8b565b60405191825260208201526040908101905180910390f35b341561078057600080fd5b610794600160a060020a0360043516611ced565b604051921515835260208301919091526040808301919091526060909101905180910390f35b34156107c557600080fd5b6102db600435602435611d26565b34156107de57600080fd5b6102db600435611d6a565b34156107f457600080fd5b6102db600435602435604435611dce565b341561081057600080fd5b6102db600160a060020a0360043516611dfd565b341561082f57600080fd5b6102fc600160a060020a0360043516611e8b565b341561084e57600080fd5b6102db611ea6565b341561086157600080fd5b610337611f39565b341561087457600080fd5b6102db611f7a565b341561088757600080fd5b6102db61202f565b341561089a57600080fd5b6102fc6120ab565b34156108ad57600080fd5b6103d06120dd565b34156108c057600080fd5b610337612166565b34156108d357600080fd5b6103d06004356121d1565b34156108e957600080fd5b6102fc60043561232a565b34156108ff57600080fd5b6102db60043561233e565b341561091557600080fd5b6103376123a0565b341561092857600080fd5b6102db61240b565b341561093b57600080fd5b6102db600435612505565b341561095157600080fd5b6102fc6004356024356125a5565b341561096a57600080fd5b6109786004356024356125ba565b604051600160a060020a03909316835260208301919091526040808301919091526060909101905180910390f35b34156109b157600080fd5b6103d0600160a060020a036004351660243561263c565b34156109d357600080fd5b6102fc600435612802565b34156109e957600080fd5b6102fc60043560243561280f565b3415610a0257600080fd5b610337612830565b3415610a1557600080fd5b610794600160a060020a036004351661289b565b3415610a3457600080fd5b6103d060048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506128d495505050505050565b3415610a9957600080fd5b6102fc600160a060020a0360043516602435604435606435612a63565b3415610ac157600080fd5b6102fc600435602435612b8c565b3415610ada57600080fd5b6103d0600160a060020a0360043516602435612bb1565b3415610afc57600080fd5b6102fc600160a060020a0360043581169060243516612c54565b3415610b2157600080fd5b6102db600435612cab565b3415610b3757600080fd5b6102fc600435602435612f59565b3415610b5057600080fd5b61050d612f69565b3415610b6357600080fd5b6102fc612f72565b3415610b7657600080fd5b6103d0600435602435600160a060020a0360443516606435612f78565b3415610b9e57600080fd5b610ba66131c2565b604051600160a060020a03909116815260200160405180910390f35b600160a060020a031660009081526006602052604090205490565b60005460a060020a900460ff1615610bf457600080fd5b600081118015610c05575060038111155b1515610c1057600080fd5b601c8160048110610c1d57fe5b0154600160a060020a0333166000908152600660205260409020541015610c4357600080fd5b610c5a601c8260048110610c5357fe5b01546131d1565b600160a060020a0333166000908152601760209081526040808320849055601a9091529020541515610ca257600160a060020a0333166000908152601a602052604090204290555b8033600160a060020a03167f0cc0076665281ff8398c9431c41b09049a4aa58f50f11b4130ef230ed60adc8760405160405180910390a350565b600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d725780601f10610d4757610100808354040283529160200191610d72565b820191906000526020600020905b815481529060010190602001808311610d5557829003601f168201915b505050505081565b600160a060020a03331660009081526013602052604081205460ff16151560011415610da557600080fd5b600160a060020a03338116600081815260126020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b610e17613364565b60005460a060020a900460ff1615610e2e57600080fd5b6024805483908110610e3c57fe5b9060005260206000209060030201608060405190810160409081528254600160a060020a03808216845260a060020a90910460ff16151560208401526001840154918301919091526002909201546060820152915033168151600160a060020a031614610ea857600080fd5b806020015115610f0557600160a060020a0333166000908152600660205260409081902054610ed991830151612f59565b600160a060020a0333166000908152600660209081526040808320939093556018905290812055610f54565b600160a060020a033316600090815260116020526040902054610f2c906060830151612f59565b600160a060020a03331660009081526011602090815260408083209390935560199052908120555b6024805483908110610f6257fe5b600091825260208220600390910201805474ffffffffffffffffffffffffffffffffffffffffff191681556001810182905560020155817f223868bda9e47fa465ee1e1401b3bd23888b9b951308671e785b0e890b728a9660405160405180910390a25050565b60005433600160a060020a03908116911614610fe457600080fd5b601b55565b6000805260116020527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b754600d54035b90565b600061102661338b565b6000805433600160a060020a0390811691161461104257600080fd5b60a06040519081016040528088600160a060020a031681526020018781526020018681526020014281526020018581525091506001600f805480600101828161108b91906133c4565b6000928352602090922085916005020181518154600160a060020a031916600160a060020a03919091161781556020820151816001015560408201518160020155606082015181600301556080820151816004015550500390508587600160a060020a0316827ff2b85b43211ffec4da9402231db708764bd4c87ed2853c3b3e9308ec067ae02a888860405191825260208201526040908101905180910390a49695505050505050565b600160a060020a03831660009081526011602052604081205461115890836125a5565b600160a060020a038086166000908152601160209081526040808320949094556012815283822033909316825291909152205461119590836125a5565b600160a060020a03808616600090815260126020908152604080832033851684528252808320949094559186168152601190915220546111d59083612f59565b600160a060020a03808516600081815260116020526040908190209390935591908616906000805160206135368339815191529085905190815260200160405180910390a35060019392505050565b60005433600160a060020a0390811691161461123f57600080fd5b600160a060020a03331660009081526006602052604090205461126290826125a5565b600160a060020a03331660009081526006602052604090205560055461128890826125a5565b60055550565b60008060008061129c613364565b60248054879081106112aa57fe5b9060005260206000209060030201608060405190810160409081528254600160a060020a038116835260a060020a900460ff16151560208301526001830154908201526002909101546060820152905080519450806020015193508060400151925080606001519150509193509193565b60005433600160a060020a0390811691161461133657600080fd5b600160a060020a0383166000908152601160205260409020548290101561135c57600080fd5b600160a060020a039092166000908152601360209081526040808320805460ff191660011790556015825280832042909501909455601490529190912055565b600c5460ff1681565b60005433600160a060020a039081169116146113c057600080fd5b600160a060020a038316600090815260066020526040902054829010156113e657600080fd5b600160a060020a039092166000908152600760209081526040808320805460ff191660011790556009825280832042909501909455600890529190912055565b600d5481565b6000805433600160a060020a0390811691161461144857600080fd5b60005460a060020a900460ff16151561146057600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a150600190565b60008060008060006114c06133f5565b6114c861338b565b60108054899081106114d657fe5b906000526020600020906005020160a060405190810160409081528254600160a060020a0316825260018301546020830152600283015490820152600382015460608201526004909101546080820152905080519650806020015195508060400151945080606001519350428160800151106115975761155a8160800151426125a5565b925060408051908101604052600b81527f506c656173652057616974000000000000000000000000000000000000000000602082015291506115d2565b6000925060408051908101604052601781527f5069636b20557020596f75722053616c617279204e6f77000000000000000000602082015291505b5091939550919395565b60005433600160a060020a039081169116146115f757600080fd5b804201600f8381548110151561160957fe5b9060005260206000209060050201600401819055505050565b600061162c613364565b6000611636613364565b6000805460a060020a900460ff161561164e57600080fd5b87156117c357600160a060020a0333166000908152600660205260409020548790101561167a57600080fd5b600160a060020a03331660009081526006602052604090205461169d90886125a5565b600160a060020a03331660009081526006602090815260408083209390935560189052819020889055608090519081016040528033600160a060020a03168152602001891515815260200188815260200187815250935060016024805480600101828161170a9190613407565b6000928352602090922087916003020181518154600160a060020a031916600160a060020a03919091161781556020820151815490151560a060020a0274ff00000000000000000000000000000000000000001990911617815560408201518160010155606082015181600201555050039250871515837f65733af3c4ea373312d42cc1b8d5b311e9d47d79fc537e577d39b63171896f85898960405191825260208201526040908101905180910390a382945061192e565b600160a060020a033316600090815260116020526040902054869010156117e957600080fd5b600160a060020a03331660009081526011602052604090205461180c90876125a5565b600160a060020a03331660009081526011602090815260408083209390935560199052819020879055608090519081016040528033600160a060020a0316815260200189151581526020018881526020018781525091506001602480548060010182816118799190613407565b6000928352602090922085916003020181518154600160a060020a031916600160a060020a03919091161781556020820151815490151560a060020a0274ff00000000000000000000000000000000000000001990911617815560408201518160010155606082015181600201555050039050871515817f65733af3c4ea373312d42cc1b8d5b311e9d47d79fc537e577d39b63171896f85898960405191825260208201526040908101905180910390a38094505b505050509392505050565b600080600061194661338b565b600f80548690811061195457fe5b906000526020600020906005020160a060405190810160409081528254600160a060020a03168252600183015460208301526002830154908201526003820154606082015260049091015460808201529050805193508060200151925042816080015182606001510111156119d7574281608001518260600151010391506119dc565b600091505b509193909250565b60055481565b6000805460a060020a900460ff1615611a0257600080fd5b600160a060020a03331660009081526007602052604090205460ff161515611ad357600160a060020a033316600090815260066020526040902054611a4790836125a5565b600160a060020a033381166000908152600660205260408082209390935590851681522054611a769083612f59565b600160a060020a0380851660008181526006602052604090819020939093559133909116907f65ce8557a92565d22c46ffce284dd053284557951303e4488bcff08b9df810519085905190815260200160405180910390a3611be4565b600160a060020a0333166000908152600860209081526040808320546006909252909120541115611be457600160a060020a033316600090815260066020908152604080832054600890925290912054611b2d91906125a5565b821115611b3957600080fd5b600160a060020a033316600090815260066020526040902054611b5c90836125a5565b600160a060020a033381166000908152600660205260408082209390935590851681522054611b8b9083612f59565b600160a060020a0380851660008181526006602052604090819020939093559133909116907f65ce8557a92565d22c46ffce284dd053284557951303e4488bcff08b9df810519085905190815260200160405180910390a35b50600192915050565b60005433600160a060020a03908116911614611c0857600080fd5b6021839055602282905580602060035b0155505050565b60005460a060020a900460ff1681565b60005433600160a060020a03908116911614611c4a57600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515611c8357600080fd5b565b600e5481565b600160a060020a038116600090815260176020908152604080832054601a90925282205490919042901115611ce457600160a060020a0383166000908152601a6020526040902054611cdd90426125a5565b9050611ce8565b5060005b915091565b600160a060020a03166000908152601360209081526040808320546014835281842054601590935292205460ff90921692909142900390565b60005433600160a060020a03908116911614611d4157600080fd5b80600f83815481101515611d5157fe5b9060005260206000209060050201600101819055505050565b60005433600160a060020a03908116911614611d8557600080fd5b600160a060020a033316600090815260066020526040902054611da89082612f59565b600160a060020a0333166000908152600660205260409020556005546112889082612f59565b60005433600160a060020a03908116911614611de957600080fd5b601d839055601e82905580601c6003611c18565b60005433600160a060020a03908116911614611e1857600080fd5b600160a060020a0381161515611e2d57600080fd5b600054600160a060020a0380831691167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360008054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a031660009081526011602052604090205490565b60005460a060020a900460ff1615611ebd57600080fd5b600160a060020a03331660009081526007602052604090205460ff161515600114611ee757600080fd5b600160a060020a033316600090815260096020526040902054429010611f0c57600080fd5b600160a060020a0333166000908152600760209081526040808320805460ff191690556008909152812055565b611f416133f5565b60408051908101604052601681527f416c6578616e646572205468652045786c6f73696f6e000000000000000000006020820152905090565b60005460a060020a900460ff1615611f9157600080fd5b600160a060020a03331660009081526017602052604081205411611fb457600080fd5b600160a060020a033316600090815260176020526040902054611fe590601c9060048110611fde57fe5b0154613259565b600160a060020a033316600081815260176020526040808220919091557f16bfdc1e6dc7f481f073edc603659a221eed08e79f1d7e075d30eced1d10cc11905160405180910390a2565b600160a060020a03331660009081526013602052604090205460ff16151560011461205957600080fd5b600160a060020a03331660009081526015602052604090205442901061207e57600080fd5b600160a060020a0333166000908152601360209081526040808320805460ff191690556014909152812055565b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8546005540390565b6000805433600160a060020a039081169116146120f957600080fd5b60005460a060020a900460ff161561211057600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a150600190565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d725780601f10610d4757610100808354040283529160200191610d72565b6000808233600160a060020a03166010828154811015156121ee57fe5b6000918252602090912060059091020154600160a060020a03161461221257600080fd5b4260108281548110151561222257fe5b90600052602060002090600502016001015411151561224057600080fd5b4260108281548110151561225057fe5b90600052602060002090600502016004015410151561226e57600080fd5b60005460a060020a900460ff161561228557600080fd5b601080548590811061229357fe5b60009182526020909120600590910201600381015481549193506122bf91600160a060020a03166132de565b6122d182600401548360020154612f59565b6004830181905582546003840154600160a060020a039091169086907fe59c03907eb3e86b26f58d894ce2930fb7654708c75e33e4ae4a8025631ce94d9060405190815260200160405180910390a45060019392505050565b601c816004811061233757fe5b0154905081565b60005433600160a060020a0390811691161461235957600080fd5b601080548290811061236757fe5b6000918252602082206005909102018054600160a060020a03191681556001810182905560028101829055600381018290556004015550565b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d725780601f10610d4757610100808354040283529160200191610d72565b6000805460a060020a900460ff161561242357600080fd5b50600160a060020a033316600090815260176020908152604080832054601a9092529091205442901061245557600080fd5b6000811161246257600080fd5b61247a6020826004811061247257fe5b0154336132de565b600160a060020a0333166000908152601a6020526040902054601b546124a09190612f59565b600160a060020a0333166000908152601a602090815260409091209190915581600481106124ca57fe5b015433600160a060020a03167ff23a961744a760027f8811c59a0eaef0d29cf965578b17412bcc375b52fa39d160405160405180910390a350565b60005433600160a060020a0390811691161461252057600080fd5b600e548190101561253057600080fd5b61253c600e54826125a5565b600e55600160a060020a0333166000908152601160205260409020546125629082612f59565b600160a060020a0333166000818152601160205260408082209390935590916000805160206135368339815191529084905190815260200160405180910390a350565b6000828211156125b457600080fd5b50900390565b60008060006125c7613433565b60008681526016602052604090208054869081106125e157fe5b9060005260206000209060030201606060405190810160409081528254600160a060020a0316825260018301546020830152600290920154918101919091529050805193508060200151925080604001519150509250925092565b600160a060020a03331660009081526013602052604081205460ff1615156126fb57600160a060020a03331660009081526011602052604090205461268190836125a5565b600160a060020a0333811660009081526011602052604080822093909355908516815220546126b09083612f59565b600160a060020a0380851660008181526011602052604090819020939093559133909116906000805160206135368339815191529085905190815260200160405180910390a3611be4565b600160a060020a0333166000908152601460209081526040808320546011909252909120541115611be457600160a060020a03331660009081526011602090815260408083205460149092529091205461275591906125a5565b82111561276157600080fd5b600160a060020a03331660009081526011602052604090205461278490836125a5565b600160a060020a0333811660009081526011602052604080822093909355908516815220546127b39083612f59565b600160a060020a0380851660008181526011602052604090819020939093559133909116906000805160206135368339815191529085905190815260200160405180910390a350600192915050565b6020816004811061233757fe5b600080821161281d57600080fd5b818381151561282857fe5b049392505050565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d725780601f10610d4757610100808354040283529160200191610d72565b600160a060020a03166000908152600760209081526040808320546008835281842054600990935292205460ff90921692909142900390565b600160a060020a03331660009081526013602052604081205460ff161515600114156128ff57600080fd5b600160a060020a03338116600081815260126020908152604080832094891680845294909152908190208690557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259086905190815260200160405180910390a383600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156129f75780820151838201526020016129df565b50505050905090810190601f168015612a245780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515612a4557600080fd5b6102c65a03f11515612a5657600080fd5b5060019695505050505050565b6000612a6d61338b565b6000805433600160a060020a03908116911614612a8957600080fd5b60a06040519081016040528088600160a060020a0316815260200187420181526020018681526020018581526020018642018152509150600160108054806001018281612ad691906133c4565b6000928352602090922085916005020181518154600160a060020a031916600160a060020a039190911617815560208201518160010155604082015181600201556060820151816003015560808201518160040155505003905086600160a060020a0316817fe0a25f374c3ccea9b3852380e0d550961e95fb10b5dd9efb7d390e852786ef7088888860405180848152602001838152602001828152602001935050505060405180910390a39695505050505050565b818102821580612ba65750818382811515612ba357fe5b04145b1515610e0957600080fd5b6000805433600160a060020a03908116911614612bcd57600080fd5b60008054600160a060020a038086169263a9059cbb929091169085906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515612c3357600080fd5b6102c65a03f11515612c4457600080fd5b5050506040518051949350505050565b600160a060020a03331660009081526013602052604081205460ff16151560011415612c7f57600080fd5b50600160a060020a03918216600090815260126020908152604080832093909416825291909152205490565b612cb3613364565b60005460a060020a900460ff1615612cca57600080fd5b6024805483908110612cd857fe5b9060005260206000209060030201608060405190810160409081528254600160a060020a038116835260a060020a900460ff16151560208301908152600184015491830191909152600290920154606082015291505115612e4657600160a060020a0333166000908152600660205260409081902054612d5a91830151612f59565b600160a060020a0333166000908152600660205260408120919091556018818351600160a060020a03168152602081019190915260400160002055612da48151826060015161263c565b506024805483908110612db357fe5b600091825260208220600390910201805474ffffffffffffffffffffffffffffffffffffffffff1916815560018101829055600201558051600160a060020a031633600160a060020a0316837f8e5d31db095940719a41f61a733ac177443e93085309b93626db618db0c9f2718460400151856060015160405191825260208201526040908101905180910390a4612f55565b600160a060020a033316600090815260116020526040902054612e6d906060830151612f59565b600160a060020a0333166000908152601160205260408120919091556019818351600160a060020a03168152602081019190915260400160002055612eb7815182604001516119ea565b506024805483908110612ec657fe5b600091825260208220600390910201805474ffffffffffffffffffffffffffffffffffffffffff1916815560018101829055600201558051600160a060020a031633600160a060020a0316837f8e5d31db095940719a41f61a733ac177443e93085309b93626db618db0c9f2718460400151856060015160405191825260208201526040908101905180910390a45b5050565b81810182811015610e0957600080fd5b60045460ff1681565b601b5481565b6000612f82613433565b600086600033600160a060020a0316600f83815481101515612fa057fe5b6000918252602090912060059091020154600160a060020a031614612fc457600080fd5b6000600f83815481101515612fd557fe5b906000526020600020906005020160010154111515612ff357600080fd5b61303d600f8381548110151561300557fe5b906000526020600020906005020160030154600f8481548110151561302657fe5b906000526020600020906005020160040154612f59565b905042811161304b57600080fd5b60005460a060020a900460ff161561306257600080fd5b600f80548a90811061307057fe5b906000526020600020906005020160020154861115151561309057600080fd5b6130ba600f8a8154811015156130a257fe5b906000526020600020906005020160010154876125a5565b600f80548b9081106130c857fe5b90600052602060002090600502016001018190555060606040519081016040908152600160a060020a038916825260208083018b905281830189905260008c815260169091522080549195506001918083016131248382613453565b6000928352602090922087916003020181518154600160a060020a031916600160a060020a03919091161781556020820151600182015560408201518160020155505003925061317486886132de565b8587600160a060020a0316847fdf6fd8077aa2d207937dd80dc1ddb27e974d3420442c7def38ec089f4364b74e8c60405190815260200160405180910390a450600198975050505050505050565b600054600160a060020a031681565b600160a060020a03331660009081526007602052604090205460ff16156131f757600080fd5b600160a060020a0333166000908152600660205260409020548190101561321d57600080fd5b600160a060020a0333166000908152600760209081526040808320805460ff191660011790556009825280832060001990556008909152902055565b600160a060020a03331660009081526007602052604090205460ff16151560011461328357600080fd5b600160a060020a033316600090815260096020908152604080832083905560078252808320805460ff1916905560089091529020546132c290826125a5565b600160a060020a03331660009081526008602052604090205550565b600e54829010156132ee57600080fd5b6132fa600e54836125a5565b600e55600160a060020a0381166000908152601160205260409020546133209083612f59565b600160a060020a0382166000818152601160205260408082209390935590916000805160206135368339815191529085905190815260200160405180910390a35050565b60806040519081016040908152600080835260208301819052908201819052606082015290565b60a0604051908101604052806000600160a060020a03168152602001600081526020016000815260200160008152602001600081525090565b8154818355818115116133f0576005028160050283600052602060002091820191016133f0919061347f565b505050565b60206040519081016040526000815290565b8154818355818115116133f0576003028160030283600052602060002091820191016133f091906134c3565b606060405190810160409081526000808352602083018190529082015290565b8154818355818115116133f0576003028160030283600052602060002091820191016133f09190613503565b61101991905b808211156134bf578054600160a060020a031916815560006001820181905560028201819055600382018190556004820155600501613485565b5090565b61101991905b808211156134bf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560006001820181905560028201556003016134c9565b61101991905b808211156134bf578054600160a060020a031916815560006001820181905560028201556003016135095600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820bd503ab29c0d1952140e407995bff6e36e7a8939267ee1b5f96a9e423f274a010029

Deployed Bytecode

0x6060604052600436106102db5763ffffffff60e060020a60003504166295716b81146102dd5780630486529b1461030e57806306fdde0314610324578063095ea7b3146103ae57806309ec6cc7146103e45780630f3a9f65146103fa57806318160ddd1461041057806320db91e21461042357806323b872dd1461044b5780632c78bfdc146104735780632db25e051461048957806330e1e4e5146104d5578063313ce567146104fa5780633d0e6afc146105235780633eaaf86b146105485780633f4ba83a1461055b5780634d65beb11461056e5780634ea611cd146106315780634eb054e61461064a5780635538c9641461066857806356e8f53e146106b457806359acbcb1146106c75780635bee29be146106e95780635c975abb146107055780635fd8c71014610718578063602e66231461072b578063637fcf951461073e57806363c454ca146107755780636509c195146107ba5780636b8b3268146107d35780636e8de595146107e9578063704b6c021461080557806370a082311461082457806373e528551461084357806376637dcd146108565780637c85ab3a146108695780637cf12b901461087c578063806b39ab1461088f5780638456cb59146108a2578063876f20b1146108b5578063876f9795146108c85780638a583911146108de5780638d72f856146108f457806395d89b411461090a57806399f4b2511461091d578063a0712d6814610930578063a293d1e814610946578063a61d68291461095f578063a9059cbb146109a6578063a9b6c435146109c8578063b5931f7c146109de578063b975ce23146109f7578063baa93b5614610a0a578063cae9ca5114610a29578063cdfe281514610a8e578063d05c78da14610ab6578063dc39d06d14610acf578063dd62ed3e14610af1578063df1dd82614610b16578063e6cb901314610b2c578063eb65a2c714610b45578063ef78d4fd14610b58578063fc04c0c414610b6b578063fc6f946814610b93575b005b34156102e857600080fd5b6102fc600160a060020a0360043516610bc2565b60405190815260200160405180910390f35b341561031957600080fd5b6102db600435610bdd565b341561032f57600080fd5b610337610cdc565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561037357808201518382015260200161035b565b50505050905090810190601f1680156103a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103b957600080fd5b6103d0600160a060020a0360043516602435610d7a565b604051901515815260200160405180910390f35b34156103ef57600080fd5b6102db600435610e0f565b341561040557600080fd5b6102db600435610fc9565b341561041b57600080fd5b6102fc610fe9565b341561042e57600080fd5b6102fc600160a060020a036004351660243560443560643561101c565b341561045657600080fd5b6103d0600160a060020a0360043581169060243516604435611135565b341561047e57600080fd5b6102db600435611224565b341561049457600080fd5b61049f60043561128e565b604051600160a060020a039094168452911515602084015260408084019190915260608301919091526080909101905180910390f35b34156104e057600080fd5b6102db600160a060020a036004351660243560443561131b565b341561050557600080fd5b61050d61139c565b60405160ff909116815260200160405180910390f35b341561052e57600080fd5b6102db600160a060020a03600435166024356044356113a5565b341561055357600080fd5b6102fc611426565b341561056657600080fd5b6103d061142c565b341561057957600080fd5b6105846004356114b0565b6040518087600160a060020a0316600160a060020a0316815260200186815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156105f15780820151838201526020016105d9565b50505050905090810190601f16801561061e5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b341561063c57600080fd5b6102db6004356024356115dc565b341561065557600080fd5b6102fc6004351515602435604435611622565b341561067357600080fd5b61067e600435611939565b6040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390f35b34156106bf57600080fd5b6102fc6119e4565b34156106d257600080fd5b6103d0600160a060020a03600435166024356119ea565b34156106f457600080fd5b6102db600435602435604435611bed565b341561071057600080fd5b6103d0611c1f565b341561072357600080fd5b6102db611c2f565b341561073657600080fd5b6102fc611c85565b341561074957600080fd5b61075d600160a060020a0360043516611c8b565b60405191825260208201526040908101905180910390f35b341561078057600080fd5b610794600160a060020a0360043516611ced565b604051921515835260208301919091526040808301919091526060909101905180910390f35b34156107c557600080fd5b6102db600435602435611d26565b34156107de57600080fd5b6102db600435611d6a565b34156107f457600080fd5b6102db600435602435604435611dce565b341561081057600080fd5b6102db600160a060020a0360043516611dfd565b341561082f57600080fd5b6102fc600160a060020a0360043516611e8b565b341561084e57600080fd5b6102db611ea6565b341561086157600080fd5b610337611f39565b341561087457600080fd5b6102db611f7a565b341561088757600080fd5b6102db61202f565b341561089a57600080fd5b6102fc6120ab565b34156108ad57600080fd5b6103d06120dd565b34156108c057600080fd5b610337612166565b34156108d357600080fd5b6103d06004356121d1565b34156108e957600080fd5b6102fc60043561232a565b34156108ff57600080fd5b6102db60043561233e565b341561091557600080fd5b6103376123a0565b341561092857600080fd5b6102db61240b565b341561093b57600080fd5b6102db600435612505565b341561095157600080fd5b6102fc6004356024356125a5565b341561096a57600080fd5b6109786004356024356125ba565b604051600160a060020a03909316835260208301919091526040808301919091526060909101905180910390f35b34156109b157600080fd5b6103d0600160a060020a036004351660243561263c565b34156109d357600080fd5b6102fc600435612802565b34156109e957600080fd5b6102fc60043560243561280f565b3415610a0257600080fd5b610337612830565b3415610a1557600080fd5b610794600160a060020a036004351661289b565b3415610a3457600080fd5b6103d060048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506128d495505050505050565b3415610a9957600080fd5b6102fc600160a060020a0360043516602435604435606435612a63565b3415610ac157600080fd5b6102fc600435602435612b8c565b3415610ada57600080fd5b6103d0600160a060020a0360043516602435612bb1565b3415610afc57600080fd5b6102fc600160a060020a0360043581169060243516612c54565b3415610b2157600080fd5b6102db600435612cab565b3415610b3757600080fd5b6102fc600435602435612f59565b3415610b5057600080fd5b61050d612f69565b3415610b6357600080fd5b6102fc612f72565b3415610b7657600080fd5b6103d0600435602435600160a060020a0360443516606435612f78565b3415610b9e57600080fd5b610ba66131c2565b604051600160a060020a03909116815260200160405180910390f35b600160a060020a031660009081526006602052604090205490565b60005460a060020a900460ff1615610bf457600080fd5b600081118015610c05575060038111155b1515610c1057600080fd5b601c8160048110610c1d57fe5b0154600160a060020a0333166000908152600660205260409020541015610c4357600080fd5b610c5a601c8260048110610c5357fe5b01546131d1565b600160a060020a0333166000908152601760209081526040808320849055601a9091529020541515610ca257600160a060020a0333166000908152601a602052604090204290555b8033600160a060020a03167f0cc0076665281ff8398c9431c41b09049a4aa58f50f11b4130ef230ed60adc8760405160405180910390a350565b600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d725780601f10610d4757610100808354040283529160200191610d72565b820191906000526020600020905b815481529060010190602001808311610d5557829003601f168201915b505050505081565b600160a060020a03331660009081526013602052604081205460ff16151560011415610da557600080fd5b600160a060020a03338116600081815260126020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b610e17613364565b60005460a060020a900460ff1615610e2e57600080fd5b6024805483908110610e3c57fe5b9060005260206000209060030201608060405190810160409081528254600160a060020a03808216845260a060020a90910460ff16151560208401526001840154918301919091526002909201546060820152915033168151600160a060020a031614610ea857600080fd5b806020015115610f0557600160a060020a0333166000908152600660205260409081902054610ed991830151612f59565b600160a060020a0333166000908152600660209081526040808320939093556018905290812055610f54565b600160a060020a033316600090815260116020526040902054610f2c906060830151612f59565b600160a060020a03331660009081526011602090815260408083209390935560199052908120555b6024805483908110610f6257fe5b600091825260208220600390910201805474ffffffffffffffffffffffffffffffffffffffffff191681556001810182905560020155817f223868bda9e47fa465ee1e1401b3bd23888b9b951308671e785b0e890b728a9660405160405180910390a25050565b60005433600160a060020a03908116911614610fe457600080fd5b601b55565b6000805260116020527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b754600d54035b90565b600061102661338b565b6000805433600160a060020a0390811691161461104257600080fd5b60a06040519081016040528088600160a060020a031681526020018781526020018681526020014281526020018581525091506001600f805480600101828161108b91906133c4565b6000928352602090922085916005020181518154600160a060020a031916600160a060020a03919091161781556020820151816001015560408201518160020155606082015181600301556080820151816004015550500390508587600160a060020a0316827ff2b85b43211ffec4da9402231db708764bd4c87ed2853c3b3e9308ec067ae02a888860405191825260208201526040908101905180910390a49695505050505050565b600160a060020a03831660009081526011602052604081205461115890836125a5565b600160a060020a038086166000908152601160209081526040808320949094556012815283822033909316825291909152205461119590836125a5565b600160a060020a03808616600090815260126020908152604080832033851684528252808320949094559186168152601190915220546111d59083612f59565b600160a060020a03808516600081815260116020526040908190209390935591908616906000805160206135368339815191529085905190815260200160405180910390a35060019392505050565b60005433600160a060020a0390811691161461123f57600080fd5b600160a060020a03331660009081526006602052604090205461126290826125a5565b600160a060020a03331660009081526006602052604090205560055461128890826125a5565b60055550565b60008060008061129c613364565b60248054879081106112aa57fe5b9060005260206000209060030201608060405190810160409081528254600160a060020a038116835260a060020a900460ff16151560208301526001830154908201526002909101546060820152905080519450806020015193508060400151925080606001519150509193509193565b60005433600160a060020a0390811691161461133657600080fd5b600160a060020a0383166000908152601160205260409020548290101561135c57600080fd5b600160a060020a039092166000908152601360209081526040808320805460ff191660011790556015825280832042909501909455601490529190912055565b600c5460ff1681565b60005433600160a060020a039081169116146113c057600080fd5b600160a060020a038316600090815260066020526040902054829010156113e657600080fd5b600160a060020a039092166000908152600760209081526040808320805460ff191660011790556009825280832042909501909455600890529190912055565b600d5481565b6000805433600160a060020a0390811691161461144857600080fd5b60005460a060020a900460ff16151561146057600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a150600190565b60008060008060006114c06133f5565b6114c861338b565b60108054899081106114d657fe5b906000526020600020906005020160a060405190810160409081528254600160a060020a0316825260018301546020830152600283015490820152600382015460608201526004909101546080820152905080519650806020015195508060400151945080606001519350428160800151106115975761155a8160800151426125a5565b925060408051908101604052600b81527f506c656173652057616974000000000000000000000000000000000000000000602082015291506115d2565b6000925060408051908101604052601781527f5069636b20557020596f75722053616c617279204e6f77000000000000000000602082015291505b5091939550919395565b60005433600160a060020a039081169116146115f757600080fd5b804201600f8381548110151561160957fe5b9060005260206000209060050201600401819055505050565b600061162c613364565b6000611636613364565b6000805460a060020a900460ff161561164e57600080fd5b87156117c357600160a060020a0333166000908152600660205260409020548790101561167a57600080fd5b600160a060020a03331660009081526006602052604090205461169d90886125a5565b600160a060020a03331660009081526006602090815260408083209390935560189052819020889055608090519081016040528033600160a060020a03168152602001891515815260200188815260200187815250935060016024805480600101828161170a9190613407565b6000928352602090922087916003020181518154600160a060020a031916600160a060020a03919091161781556020820151815490151560a060020a0274ff00000000000000000000000000000000000000001990911617815560408201518160010155606082015181600201555050039250871515837f65733af3c4ea373312d42cc1b8d5b311e9d47d79fc537e577d39b63171896f85898960405191825260208201526040908101905180910390a382945061192e565b600160a060020a033316600090815260116020526040902054869010156117e957600080fd5b600160a060020a03331660009081526011602052604090205461180c90876125a5565b600160a060020a03331660009081526011602090815260408083209390935560199052819020879055608090519081016040528033600160a060020a0316815260200189151581526020018881526020018781525091506001602480548060010182816118799190613407565b6000928352602090922085916003020181518154600160a060020a031916600160a060020a03919091161781556020820151815490151560a060020a0274ff00000000000000000000000000000000000000001990911617815560408201518160010155606082015181600201555050039050871515817f65733af3c4ea373312d42cc1b8d5b311e9d47d79fc537e577d39b63171896f85898960405191825260208201526040908101905180910390a38094505b505050509392505050565b600080600061194661338b565b600f80548690811061195457fe5b906000526020600020906005020160a060405190810160409081528254600160a060020a03168252600183015460208301526002830154908201526003820154606082015260049091015460808201529050805193508060200151925042816080015182606001510111156119d7574281608001518260600151010391506119dc565b600091505b509193909250565b60055481565b6000805460a060020a900460ff1615611a0257600080fd5b600160a060020a03331660009081526007602052604090205460ff161515611ad357600160a060020a033316600090815260066020526040902054611a4790836125a5565b600160a060020a033381166000908152600660205260408082209390935590851681522054611a769083612f59565b600160a060020a0380851660008181526006602052604090819020939093559133909116907f65ce8557a92565d22c46ffce284dd053284557951303e4488bcff08b9df810519085905190815260200160405180910390a3611be4565b600160a060020a0333166000908152600860209081526040808320546006909252909120541115611be457600160a060020a033316600090815260066020908152604080832054600890925290912054611b2d91906125a5565b821115611b3957600080fd5b600160a060020a033316600090815260066020526040902054611b5c90836125a5565b600160a060020a033381166000908152600660205260408082209390935590851681522054611b8b9083612f59565b600160a060020a0380851660008181526006602052604090819020939093559133909116907f65ce8557a92565d22c46ffce284dd053284557951303e4488bcff08b9df810519085905190815260200160405180910390a35b50600192915050565b60005433600160a060020a03908116911614611c0857600080fd5b6021839055602282905580602060035b0155505050565b60005460a060020a900460ff1681565b60005433600160a060020a03908116911614611c4a57600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515611c8357600080fd5b565b600e5481565b600160a060020a038116600090815260176020908152604080832054601a90925282205490919042901115611ce457600160a060020a0383166000908152601a6020526040902054611cdd90426125a5565b9050611ce8565b5060005b915091565b600160a060020a03166000908152601360209081526040808320546014835281842054601590935292205460ff90921692909142900390565b60005433600160a060020a03908116911614611d4157600080fd5b80600f83815481101515611d5157fe5b9060005260206000209060050201600101819055505050565b60005433600160a060020a03908116911614611d8557600080fd5b600160a060020a033316600090815260066020526040902054611da89082612f59565b600160a060020a0333166000908152600660205260409020556005546112889082612f59565b60005433600160a060020a03908116911614611de957600080fd5b601d839055601e82905580601c6003611c18565b60005433600160a060020a03908116911614611e1857600080fd5b600160a060020a0381161515611e2d57600080fd5b600054600160a060020a0380831691167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a360008054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a031660009081526011602052604090205490565b60005460a060020a900460ff1615611ebd57600080fd5b600160a060020a03331660009081526007602052604090205460ff161515600114611ee757600080fd5b600160a060020a033316600090815260096020526040902054429010611f0c57600080fd5b600160a060020a0333166000908152600760209081526040808320805460ff191690556008909152812055565b611f416133f5565b60408051908101604052601681527f416c6578616e646572205468652045786c6f73696f6e000000000000000000006020820152905090565b60005460a060020a900460ff1615611f9157600080fd5b600160a060020a03331660009081526017602052604081205411611fb457600080fd5b600160a060020a033316600090815260176020526040902054611fe590601c9060048110611fde57fe5b0154613259565b600160a060020a033316600081815260176020526040808220919091557f16bfdc1e6dc7f481f073edc603659a221eed08e79f1d7e075d30eced1d10cc11905160405180910390a2565b600160a060020a03331660009081526013602052604090205460ff16151560011461205957600080fd5b600160a060020a03331660009081526015602052604090205442901061207e57600080fd5b600160a060020a0333166000908152601360209081526040808320805460ff191690556014909152812055565b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8546005540390565b6000805433600160a060020a039081169116146120f957600080fd5b60005460a060020a900460ff161561211057600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a150600190565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d725780601f10610d4757610100808354040283529160200191610d72565b6000808233600160a060020a03166010828154811015156121ee57fe5b6000918252602090912060059091020154600160a060020a03161461221257600080fd5b4260108281548110151561222257fe5b90600052602060002090600502016001015411151561224057600080fd5b4260108281548110151561225057fe5b90600052602060002090600502016004015410151561226e57600080fd5b60005460a060020a900460ff161561228557600080fd5b601080548590811061229357fe5b60009182526020909120600590910201600381015481549193506122bf91600160a060020a03166132de565b6122d182600401548360020154612f59565b6004830181905582546003840154600160a060020a039091169086907fe59c03907eb3e86b26f58d894ce2930fb7654708c75e33e4ae4a8025631ce94d9060405190815260200160405180910390a45060019392505050565b601c816004811061233757fe5b0154905081565b60005433600160a060020a0390811691161461235957600080fd5b601080548290811061236757fe5b6000918252602082206005909102018054600160a060020a03191681556001810182905560028101829055600381018290556004015550565b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d725780601f10610d4757610100808354040283529160200191610d72565b6000805460a060020a900460ff161561242357600080fd5b50600160a060020a033316600090815260176020908152604080832054601a9092529091205442901061245557600080fd5b6000811161246257600080fd5b61247a6020826004811061247257fe5b0154336132de565b600160a060020a0333166000908152601a6020526040902054601b546124a09190612f59565b600160a060020a0333166000908152601a602090815260409091209190915581600481106124ca57fe5b015433600160a060020a03167ff23a961744a760027f8811c59a0eaef0d29cf965578b17412bcc375b52fa39d160405160405180910390a350565b60005433600160a060020a0390811691161461252057600080fd5b600e548190101561253057600080fd5b61253c600e54826125a5565b600e55600160a060020a0333166000908152601160205260409020546125629082612f59565b600160a060020a0333166000818152601160205260408082209390935590916000805160206135368339815191529084905190815260200160405180910390a350565b6000828211156125b457600080fd5b50900390565b60008060006125c7613433565b60008681526016602052604090208054869081106125e157fe5b9060005260206000209060030201606060405190810160409081528254600160a060020a0316825260018301546020830152600290920154918101919091529050805193508060200151925080604001519150509250925092565b600160a060020a03331660009081526013602052604081205460ff1615156126fb57600160a060020a03331660009081526011602052604090205461268190836125a5565b600160a060020a0333811660009081526011602052604080822093909355908516815220546126b09083612f59565b600160a060020a0380851660008181526011602052604090819020939093559133909116906000805160206135368339815191529085905190815260200160405180910390a3611be4565b600160a060020a0333166000908152601460209081526040808320546011909252909120541115611be457600160a060020a03331660009081526011602090815260408083205460149092529091205461275591906125a5565b82111561276157600080fd5b600160a060020a03331660009081526011602052604090205461278490836125a5565b600160a060020a0333811660009081526011602052604080822093909355908516815220546127b39083612f59565b600160a060020a0380851660008181526011602052604090819020939093559133909116906000805160206135368339815191529085905190815260200160405180910390a350600192915050565b6020816004811061233757fe5b600080821161281d57600080fd5b818381151561282857fe5b049392505050565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d725780601f10610d4757610100808354040283529160200191610d72565b600160a060020a03166000908152600760209081526040808320546008835281842054600990935292205460ff90921692909142900390565b600160a060020a03331660009081526013602052604081205460ff161515600114156128ff57600080fd5b600160a060020a03338116600081815260126020908152604080832094891680845294909152908190208690557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259086905190815260200160405180910390a383600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156129f75780820151838201526020016129df565b50505050905090810190601f168015612a245780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515612a4557600080fd5b6102c65a03f11515612a5657600080fd5b5060019695505050505050565b6000612a6d61338b565b6000805433600160a060020a03908116911614612a8957600080fd5b60a06040519081016040528088600160a060020a0316815260200187420181526020018681526020018581526020018642018152509150600160108054806001018281612ad691906133c4565b6000928352602090922085916005020181518154600160a060020a031916600160a060020a039190911617815560208201518160010155604082015181600201556060820151816003015560808201518160040155505003905086600160a060020a0316817fe0a25f374c3ccea9b3852380e0d550961e95fb10b5dd9efb7d390e852786ef7088888860405180848152602001838152602001828152602001935050505060405180910390a39695505050505050565b818102821580612ba65750818382811515612ba357fe5b04145b1515610e0957600080fd5b6000805433600160a060020a03908116911614612bcd57600080fd5b60008054600160a060020a038086169263a9059cbb929091169085906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515612c3357600080fd5b6102c65a03f11515612c4457600080fd5b5050506040518051949350505050565b600160a060020a03331660009081526013602052604081205460ff16151560011415612c7f57600080fd5b50600160a060020a03918216600090815260126020908152604080832093909416825291909152205490565b612cb3613364565b60005460a060020a900460ff1615612cca57600080fd5b6024805483908110612cd857fe5b9060005260206000209060030201608060405190810160409081528254600160a060020a038116835260a060020a900460ff16151560208301908152600184015491830191909152600290920154606082015291505115612e4657600160a060020a0333166000908152600660205260409081902054612d5a91830151612f59565b600160a060020a0333166000908152600660205260408120919091556018818351600160a060020a03168152602081019190915260400160002055612da48151826060015161263c565b506024805483908110612db357fe5b600091825260208220600390910201805474ffffffffffffffffffffffffffffffffffffffffff1916815560018101829055600201558051600160a060020a031633600160a060020a0316837f8e5d31db095940719a41f61a733ac177443e93085309b93626db618db0c9f2718460400151856060015160405191825260208201526040908101905180910390a4612f55565b600160a060020a033316600090815260116020526040902054612e6d906060830151612f59565b600160a060020a0333166000908152601160205260408120919091556019818351600160a060020a03168152602081019190915260400160002055612eb7815182604001516119ea565b506024805483908110612ec657fe5b600091825260208220600390910201805474ffffffffffffffffffffffffffffffffffffffffff1916815560018101829055600201558051600160a060020a031633600160a060020a0316837f8e5d31db095940719a41f61a733ac177443e93085309b93626db618db0c9f2718460400151856060015160405191825260208201526040908101905180910390a45b5050565b81810182811015610e0957600080fd5b60045460ff1681565b601b5481565b6000612f82613433565b600086600033600160a060020a0316600f83815481101515612fa057fe5b6000918252602090912060059091020154600160a060020a031614612fc457600080fd5b6000600f83815481101515612fd557fe5b906000526020600020906005020160010154111515612ff357600080fd5b61303d600f8381548110151561300557fe5b906000526020600020906005020160030154600f8481548110151561302657fe5b906000526020600020906005020160040154612f59565b905042811161304b57600080fd5b60005460a060020a900460ff161561306257600080fd5b600f80548a90811061307057fe5b906000526020600020906005020160020154861115151561309057600080fd5b6130ba600f8a8154811015156130a257fe5b906000526020600020906005020160010154876125a5565b600f80548b9081106130c857fe5b90600052602060002090600502016001018190555060606040519081016040908152600160a060020a038916825260208083018b905281830189905260008c815260169091522080549195506001918083016131248382613453565b6000928352602090922087916003020181518154600160a060020a031916600160a060020a03919091161781556020820151600182015560408201518160020155505003925061317486886132de565b8587600160a060020a0316847fdf6fd8077aa2d207937dd80dc1ddb27e974d3420442c7def38ec089f4364b74e8c60405190815260200160405180910390a450600198975050505050505050565b600054600160a060020a031681565b600160a060020a03331660009081526007602052604090205460ff16156131f757600080fd5b600160a060020a0333166000908152600660205260409020548190101561321d57600080fd5b600160a060020a0333166000908152600760209081526040808320805460ff191660011790556009825280832060001990556008909152902055565b600160a060020a03331660009081526007602052604090205460ff16151560011461328357600080fd5b600160a060020a033316600090815260096020908152604080832083905560078252808320805460ff1916905560089091529020546132c290826125a5565b600160a060020a03331660009081526008602052604090205550565b600e54829010156132ee57600080fd5b6132fa600e54836125a5565b600e55600160a060020a0381166000908152601160205260409020546133209083612f59565b600160a060020a0382166000818152601160205260408082209390935590916000805160206135368339815191529085905190815260200160405180910390a35050565b60806040519081016040908152600080835260208301819052908201819052606082015290565b60a0604051908101604052806000600160a060020a03168152602001600081526020016000815260200160008152602001600081525090565b8154818355818115116133f0576005028160050283600052602060002091820191016133f0919061347f565b505050565b60206040519081016040526000815290565b8154818355818115116133f0576003028160030283600052602060002091820191016133f091906134c3565b606060405190810160409081526000808352602083018190529082015290565b8154818355818115116133f0576003028160030283600052602060002091820191016133f09190613503565b61101991905b808211156134bf578054600160a060020a031916815560006001820181905560028201819055600382018190556004820155600501613485565b5090565b61101991905b808211156134bf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560006001820181905560028201556003016134c9565b61101991905b808211156134bf578054600160a060020a031916815560006001820181905560028201556003016135095600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820bd503ab29c0d1952140e407995bff6e36e7a8939267ee1b5f96a9e423f274a010029

Swarm Source

bzzr://bd503ab29c0d1952140e407995bff6e36e7a8939267ee1b5f96a9e423f274a01
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.