false
true
0

Contract Address Details

0x076641aF1B8f06B7f8C92587156143C109002cbe

Token
SoPay (SOP)
Creator
0x236e03–8f02f5 at 0xe53297–89183a
Balance
0.0003 PLS ( )
Tokens
Fetching tokens...
Transactions
25,321 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26233460
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
SOPToken




Optimization enabled
true
Compiler version
v0.4.20+commit.3155dd80




Optimization runs
200
Verified at
2026-02-28T23:35:27.572060Z

Constructor Arguments

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000b2d05e000000000000000000000000000000000000000000000000000000000000000005536f5061790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534f500000000000000000000000000000000000000000000000000000000000

Arg [0] (string) : SoPay
Arg [1] (string) : SOP
Arg [2] (uint256) : 3000000000

              

SOPToken.sol

pragma solidity ^0.4.18;

contract ERC20 {
//	function totalSupply() public constant returns (uint supply);
//	function balanceOf(address who) public constant returns (uint value);
//	function allowance(address owner, address spender) public constant returns (uint _allowance);
	function transfer(address to, uint value) public returns (bool success);
	function transferFrom(address from, address to, uint value) public returns (bool success);
	function approve(address spender, uint value) public returns (bool success);

	event Transfer(address indexed from, address indexed to, uint value);
	event Approval(address indexed owner, address indexed spender, uint value);
}

/**
 * Math operations with safety checks
 */
contract SafeMath {

	function mul(uint a, uint b) internal pure returns (uint) {
		uint c = a * b;
		assert(a == 0 || c / a == b);
		return c;
	}

	function div(uint a, uint b) internal pure returns (uint) {
		assert(b > 0);
		return a / b;
	}

	function sub(uint a, uint b) internal pure returns (uint) {
		assert(b <= a);
		return a - b;
	}

	function add(uint a, uint b) internal pure returns (uint) {
		uint c = a + b;
		assert(c >= a && c >= b);
		return c;
	}

	function min(uint x, uint y) internal pure returns (uint) {
		return x <= y ? x : y;
	}

	function max(uint x, uint y) internal pure returns (uint) {
		return x >= y ? x : y;
	}
}

contract Owned {
    address public owner;

    function Owned() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address newOwner) onlyOwner public {
        owner = newOwner;
    }
}

contract SOPToken is ERC20, SafeMath, Owned {

	// Public variables of the token
	string public name;
	string public symbol;
	uint8 public decimals = 18;
	// 18 decimals is the strongly suggested default, avoid changing it
	uint public totalSupply;

	// This creates an array with all balances
	mapping(address => uint) public balanceOf;
	mapping(address => mapping(address => uint)) public allowance;


	mapping(address=>uint) public lock; 
	mapping(address=>bool) public freezeIn;
	mapping(address=>bool) public freezeOut;
	

	//event definitions
	/* This notifies clients about the amount burnt */
	event Burn(address indexed from, uint value);

	event FreezeIn(address[] indexed from, bool value);

	event FreezeOut(address[] indexed from, bool value);


	function SOPToken(string tokenName, string tokenSymbol, uint initSupply) public {
		totalSupply=initSupply*10**uint(decimals);      //update total supply
		name=tokenName;
		symbol=tokenSymbol;

		balanceOf[owner]=totalSupply;       //give the owner all initial tokens

	}

	//ERC 20
	///////////////////////////////////////////////////////////////////////////////////////////

	function internalTransfer(address from, address toaddr, uint value) internal {
		require(toaddr!=0);
		require(balanceOf[from]>=value);

		require(now>=lock[from]);
		require(!freezeIn[toaddr]);
		require(!freezeOut[from]);

		balanceOf[from]=sub(balanceOf[from], value);
		balanceOf[toaddr]=add(balanceOf[toaddr], value);

		Transfer(from, toaddr, value);
	}

	function transfer(address toaddr, uint value) public returns (bool) {
		internalTransfer(msg.sender, toaddr, value);

		return true;
	}
	
	function transferFrom(address from, address toaddr, uint value) public returns (bool) {
		require(allowance[from][msg.sender]>=value);

		allowance[from][msg.sender]=sub(allowance[from][msg.sender], value);

		internalTransfer(from, toaddr, value);

		return true;
	}

	function approve(address spender, uint amount) public returns (bool) {
		require((amount == 0) || (allowance[msg.sender][spender] == 0));
		
		allowance[msg.sender][spender]=amount;

		Approval(msg.sender, spender, amount);

		return true;
	}

	/////////////////////////////////////////////////////////////////////////////////////////

	function setNameSymbol(string tokenName, string tokenSymbol) public onlyOwner {
		name=tokenName;
		symbol=tokenSymbol;
	}

	////////////////////////////////////////////////////////////////////////////////////////////
	function setLock(address[] addrs, uint[] times) public onlyOwner {
		require(addrs.length==times.length);

		for (uint i=0; i<addrs.length; i++) {
			lock[addrs[i]]=times[i];
		}
	}

	function setFreezeIn(address[] addrs, bool value) public onlyOwner {
		for (uint i=0; i<addrs.length; i++) {
			freezeIn[addrs[i]]=value;
		}

		FreezeIn(addrs, value);
	}

	function setFreezeOut(address[] addrs, bool value) public onlyOwner {
		for (uint i=0; i<addrs.length; i++) {
			freezeOut[addrs[i]]=value;
		}

		FreezeOut(addrs, value);
	}

	///////////////////////////////////////////////////////////////////////////////////////////
	function mint(uint amount) public onlyOwner {
		balanceOf[owner]=add(balanceOf[owner], amount);
		totalSupply=add(totalSupply, amount);
	}

	function burn(uint amount) public {
		balanceOf[msg.sender]=sub(balanceOf[msg.sender], amount);
		totalSupply=sub(totalSupply, amount);

		Burn(msg.sender, amount);
	}

	///////////////////////////////////////////////////////////////////////////////////////////

	function withdrawEther(uint amount) public onlyOwner {
		owner.transfer(amount);
	}

	// can accept ether
	function() public payable {
    }


}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":true},"libraries":{},"compilationTarget":{"SOPToken.sol":"SOPToken"}}
              

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":""}],"name":"approve","inputs":[{"type":"address","name":"spender"},{"type":"uint256","name":"amount"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":""}],"name":"transferFrom","inputs":[{"type":"address","name":"from"},{"type":"address","name":"toaddr"},{"type":"uint256","name":"value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":""}],"name":"decimals","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"withdrawEther","inputs":[{"type":"uint256","name":"amount"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setLock","inputs":[{"type":"address[]","name":"addrs"},{"type":"uint256[]","name":"times"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setFreezeOut","inputs":[{"type":"address[]","name":"addrs"},{"type":"bool","name":"value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"amount"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setNameSymbol","inputs":[{"type":"string","name":"tokenName"},{"type":"string","name":"tokenSymbol"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"balanceOf","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":""}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"freezeIn","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"mint","inputs":[{"type":"uint256","name":"amount"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":""}],"name":"transfer","inputs":[{"type":"address","name":"toaddr"},{"type":"uint256","name":"value"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setFreezeIn","inputs":[{"type":"address[]","name":"addrs"},{"type":"bool","name":"value"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"freezeOut","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"allowance","inputs":[{"type":"address","name":""},{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"lock","inputs":[{"type":"address","name":""}],"constant":true},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"string","name":"tokenName"},{"type":"string","name":"tokenSymbol"},{"type":"uint256","name":"initSupply"}]},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"from","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"FreezeIn","inputs":[{"type":"address[]","name":"from","indexed":true},{"type":"bool","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"FreezeOut","inputs":[{"type":"address[]","name":"from","indexed":true},{"type":"bool","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","indexed":true},{"type":"address","name":"to","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","indexed":true},{"type":"address","name":"spender","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false}]
              

Contract Creation Code

Verify & Publish
0x60606040526003805460ff19166012179055341561001c57600080fd5b60405162001072380380620010728339810160405280805182019190602001805182019190602001805160008054600160a060020a03191633600160a060020a031617905560035460ff16600a0a81026004559150600190508380516100869291602001906100c0565b50600282805161009a9291602001906100c0565b505060045460008054600160a060020a03168152600560205260409020555061015b9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061010157805160ff191683800117855561012e565b8280016001018555821561012e579182015b8281111561012e578251825591602001919060010190610113565b5061013a92915061013e565b5090565b61015891905b8082111561013a5760008155600101610144565b90565b610f07806200016b6000396000f30060606040526004361061011c5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461011e578063095ea7b3146101a857806318160ddd146101de57806323b872dd14610203578063313ce5671461022b5780633bed33ce146102545780633d7240271461026a57806340fe90d0146102f957806342966c681461034c578063504334c21461036257806370a08231146103f55780638da5cb5b1461041457806395d89b41146104435780639cf568c614610456578063a0712d6814610475578063a9059cbb1461048b578063b0c39bbd146104ad578063b81180a314610500578063dd62ed3e1461051f578063f2fde38b14610544578063f435f5a714610563575b005b341561012957600080fd5b610131610582565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561016d578082015183820152602001610155565b50505050905090810190601f16801561019a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101b357600080fd5b6101ca600160a060020a0360043516602435610620565b604051901515815260200160405180910390f35b34156101e957600080fd5b6101f16106c6565b60405190815260200160405180910390f35b341561020e57600080fd5b6101ca600160a060020a03600435811690602435166044356106cc565b341561023657600080fd5b61023e61076f565b60405160ff909116815260200160405180910390f35b341561025f57600080fd5b61011c600435610778565b341561027557600080fd5b61011c6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506107c995505050505050565b341561030457600080fd5b61011c60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496505050509135151591506108579050565b341561035757600080fd5b61011c600435610945565b341561036d57600080fd5b61011c60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506109d195505050505050565b341561040057600080fd5b6101f1600160a060020a0360043516610a13565b341561041f57600080fd5b610427610a25565b604051600160a060020a03909116815260200160405180910390f35b341561044e57600080fd5b610131610a34565b341561046157600080fd5b6101ca600160a060020a0360043516610a9f565b341561048057600080fd5b61011c600435610ab4565b341561049657600080fd5b6101ca600160a060020a0360043516602435610b1e565b34156104b857600080fd5b61011c6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650505050913515159150610b349050565b341561050b57600080fd5b6101ca600160a060020a0360043516610c22565b341561052a57600080fd5b6101f1600160a060020a0360043581169060243516610c37565b341561054f57600080fd5b61011c600160a060020a0360043516610c54565b341561056e57600080fd5b6101f1600160a060020a0360043516610c9e565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106185780601f106105ed57610100808354040283529160200191610618565b820191906000526020600020905b8154815290600101906020018083116105fb57829003601f168201915b505050505081565b60008115806106525750600160a060020a03338116600090815260066020908152604080832093871683529290522054155b151561065d57600080fd5b600160a060020a03338116600081815260066020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60045481565b600160a060020a038084166000908152600660209081526040808320339094168352929052908120548290101561070257600080fd5b600160a060020a03808516600090815260066020908152604080832033909416835292905220546107339083610cb0565b600160a060020a0380861660009081526006602090815260408083203390941683529290522055610765848484610cc2565b5060019392505050565b60035460ff1681565b60005433600160a060020a0390811691161461079357600080fd5b600054600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156107c657600080fd5b50565b6000805433600160a060020a039081169116146107e557600080fd5b81518351146107f357600080fd5b5060005b82518110156108525781818151811061080c57fe5b906020019060200201516007600085848151811061082657fe5b90602001906020020151600160a060020a031681526020810191909152604001600020556001016107f7565b505050565b6000805433600160a060020a0390811691161461087357600080fd5b5060005b82518110156108cb57816009600085848151811061089157fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff1916911515919091179055600101610877565b8260405180828051906020019060200280838360005b838110156108f95780820151838201526020016108e1565b5050505090500191505060405180910390207f43654ecda0d123d59e6228d89cb8c1d65fe882ffb98133e49887736fcbbaed8583604051901515815260200160405180910390a2505050565b600160a060020a0333166000908152600560205260409020546109689082610cb0565b600160a060020a03331660009081526005602052604090205560045461098e9082610cb0565b600455600160a060020a0333167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405190815260200160405180910390a250565b60005433600160a060020a039081169116146109ec57600080fd5b60018280516109ff929160200190610e40565b506002818051610852929160200190610e40565b60056020526000908152604090205481565b600054600160a060020a031681565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106185780601f106105ed57610100808354040283529160200191610618565b60086020526000908152604090205460ff1681565b60005433600160a060020a03908116911614610acf57600080fd5b60008054600160a060020a0316815260056020526040902054610af29082610e1c565b60008054600160a060020a0316815260056020526040902055600454610b189082610e1c565b60045550565b6000610b2b338484610cc2565b50600192915050565b6000805433600160a060020a03908116911614610b5057600080fd5b5060005b8251811015610ba8578160086000858481518110610b6e57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff1916911515919091179055600101610b54565b8260405180828051906020019060200280838360005b83811015610bd6578082015183820152602001610bbe565b5050505090500191505060405180910390207f110963bb3f5926815efaa21791f13d2e45cd09ee5a9903b7ef413526eb9acef183604051901515815260200160405180910390a2505050565b60096020526000908152604090205460ff1681565b600660209081526000928352604080842090915290825290205481565b60005433600160a060020a03908116911614610c6f57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60076020526000908152604090205481565b600082821115610cbc57fe5b50900390565b600160a060020a0382161515610cd757600080fd5b600160a060020a03831660009081526005602052604090205481901015610cfd57600080fd5b600160a060020a038316600090815260076020526040902054421015610d2257600080fd5b600160a060020a03821660009081526008602052604090205460ff1615610d4857600080fd5b600160a060020a03831660009081526009602052604090205460ff1615610d6e57600080fd5b600160a060020a038316600090815260056020526040902054610d919082610cb0565b600160a060020a038085166000908152600560205260408082209390935590841681522054610dc09082610e1c565b600160a060020a03808416600081815260056020526040908190209390935591908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084905190815260200160405180910390a3505050565b6000828201838110801590610e315750828110155b1515610e3957fe5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610e8157805160ff1916838001178555610eae565b82800160010185558215610eae579182015b82811115610eae578251825591602001919060010190610e93565b50610eba929150610ebe565b5090565b610ed891905b80821115610eba5760008155600101610ec4565b905600a165627a7a72305820a72a7f1eccf87b353f1bf3325c4d89a1e185409e215499380a7c4c9ccc367b180029000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000b2d05e000000000000000000000000000000000000000000000000000000000000000005536f5061790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534f500000000000000000000000000000000000000000000000000000000000

Deployed ByteCode

0x60606040526004361061011c5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461011e578063095ea7b3146101a857806318160ddd146101de57806323b872dd14610203578063313ce5671461022b5780633bed33ce146102545780633d7240271461026a57806340fe90d0146102f957806342966c681461034c578063504334c21461036257806370a08231146103f55780638da5cb5b1461041457806395d89b41146104435780639cf568c614610456578063a0712d6814610475578063a9059cbb1461048b578063b0c39bbd146104ad578063b81180a314610500578063dd62ed3e1461051f578063f2fde38b14610544578063f435f5a714610563575b005b341561012957600080fd5b610131610582565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561016d578082015183820152602001610155565b50505050905090810190601f16801561019a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101b357600080fd5b6101ca600160a060020a0360043516602435610620565b604051901515815260200160405180910390f35b34156101e957600080fd5b6101f16106c6565b60405190815260200160405180910390f35b341561020e57600080fd5b6101ca600160a060020a03600435811690602435166044356106cc565b341561023657600080fd5b61023e61076f565b60405160ff909116815260200160405180910390f35b341561025f57600080fd5b61011c600435610778565b341561027557600080fd5b61011c6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506107c995505050505050565b341561030457600080fd5b61011c60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496505050509135151591506108579050565b341561035757600080fd5b61011c600435610945565b341561036d57600080fd5b61011c60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506109d195505050505050565b341561040057600080fd5b6101f1600160a060020a0360043516610a13565b341561041f57600080fd5b610427610a25565b604051600160a060020a03909116815260200160405180910390f35b341561044e57600080fd5b610131610a34565b341561046157600080fd5b6101ca600160a060020a0360043516610a9f565b341561048057600080fd5b61011c600435610ab4565b341561049657600080fd5b6101ca600160a060020a0360043516602435610b1e565b34156104b857600080fd5b61011c6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650505050913515159150610b349050565b341561050b57600080fd5b6101ca600160a060020a0360043516610c22565b341561052a57600080fd5b6101f1600160a060020a0360043581169060243516610c37565b341561054f57600080fd5b61011c600160a060020a0360043516610c54565b341561056e57600080fd5b6101f1600160a060020a0360043516610c9e565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106185780601f106105ed57610100808354040283529160200191610618565b820191906000526020600020905b8154815290600101906020018083116105fb57829003601f168201915b505050505081565b60008115806106525750600160a060020a03338116600090815260066020908152604080832093871683529290522054155b151561065d57600080fd5b600160a060020a03338116600081815260066020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60045481565b600160a060020a038084166000908152600660209081526040808320339094168352929052908120548290101561070257600080fd5b600160a060020a03808516600090815260066020908152604080832033909416835292905220546107339083610cb0565b600160a060020a0380861660009081526006602090815260408083203390941683529290522055610765848484610cc2565b5060019392505050565b60035460ff1681565b60005433600160a060020a0390811691161461079357600080fd5b600054600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156107c657600080fd5b50565b6000805433600160a060020a039081169116146107e557600080fd5b81518351146107f357600080fd5b5060005b82518110156108525781818151811061080c57fe5b906020019060200201516007600085848151811061082657fe5b90602001906020020151600160a060020a031681526020810191909152604001600020556001016107f7565b505050565b6000805433600160a060020a0390811691161461087357600080fd5b5060005b82518110156108cb57816009600085848151811061089157fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff1916911515919091179055600101610877565b8260405180828051906020019060200280838360005b838110156108f95780820151838201526020016108e1565b5050505090500191505060405180910390207f43654ecda0d123d59e6228d89cb8c1d65fe882ffb98133e49887736fcbbaed8583604051901515815260200160405180910390a2505050565b600160a060020a0333166000908152600560205260409020546109689082610cb0565b600160a060020a03331660009081526005602052604090205560045461098e9082610cb0565b600455600160a060020a0333167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405190815260200160405180910390a250565b60005433600160a060020a039081169116146109ec57600080fd5b60018280516109ff929160200190610e40565b506002818051610852929160200190610e40565b60056020526000908152604090205481565b600054600160a060020a031681565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106185780601f106105ed57610100808354040283529160200191610618565b60086020526000908152604090205460ff1681565b60005433600160a060020a03908116911614610acf57600080fd5b60008054600160a060020a0316815260056020526040902054610af29082610e1c565b60008054600160a060020a0316815260056020526040902055600454610b189082610e1c565b60045550565b6000610b2b338484610cc2565b50600192915050565b6000805433600160a060020a03908116911614610b5057600080fd5b5060005b8251811015610ba8578160086000858481518110610b6e57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff1916911515919091179055600101610b54565b8260405180828051906020019060200280838360005b83811015610bd6578082015183820152602001610bbe565b5050505090500191505060405180910390207f110963bb3f5926815efaa21791f13d2e45cd09ee5a9903b7ef413526eb9acef183604051901515815260200160405180910390a2505050565b60096020526000908152604090205460ff1681565b600660209081526000928352604080842090915290825290205481565b60005433600160a060020a03908116911614610c6f57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60076020526000908152604090205481565b600082821115610cbc57fe5b50900390565b600160a060020a0382161515610cd757600080fd5b600160a060020a03831660009081526005602052604090205481901015610cfd57600080fd5b600160a060020a038316600090815260076020526040902054421015610d2257600080fd5b600160a060020a03821660009081526008602052604090205460ff1615610d4857600080fd5b600160a060020a03831660009081526009602052604090205460ff1615610d6e57600080fd5b600160a060020a038316600090815260056020526040902054610d919082610cb0565b600160a060020a038085166000908152600560205260408082209390935590841681522054610dc09082610e1c565b600160a060020a03808416600081815260056020526040908190209390935591908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084905190815260200160405180910390a3505050565b6000828201838110801590610e315750828110155b1515610e3957fe5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610e8157805160ff1916838001178555610eae565b82800160010185558215610eae579182015b82811115610eae578251825591602001919060010190610e93565b50610eba929150610ebe565b5090565b610ed891905b80821115610eba5760008155600101610ec4565b905600a165627a7a72305820a72a7f1eccf87b353f1bf3325c4d89a1e185409e215499380a7c4c9ccc367b180029