Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
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:
- LnProxyERC20
- Optimization enabled
- false
- Compiler version
- v0.6.12+commit.27d51765
- EVM Version
- istanbul
- Verified at
- 2025-06-23T13:51:00.815917Z
Constructor Arguments
00000000000000000000000074e5d6c26dfbeb647dfe36f44fee805bafefbfc0
Arg [0] (address) : 0x74e5d6c26dfbeb647dfe36f44fee805bafefbfc0
LnProxyERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;
interface IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function transfer(address to, uint value) external returns (bool);
function approve(address spender, uint value) external returns (bool);
function transferFrom(
address from,
address to,
uint value
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint value);
event Approval(address indexed owner, address indexed spender, uint value);
}
contract LnAdmin {
address public admin;
address public candidate;
constructor(address _admin) public {
require(_admin != address(0), "admin address cannot be 0");
admin = _admin;
emit AdminChanged(address(0), _admin);
}
function setCandidate(address _candidate) external onlyAdmin {
address old = candidate;
candidate = _candidate;
emit candidateChanged( old, candidate);
}
function becomeAdmin( ) external {
require( msg.sender == candidate, "Only candidate can become admin");
address old = admin;
admin = candidate;
emit AdminChanged( old, admin );
}
modifier onlyAdmin {
require( (msg.sender == admin), "Only the contract admin can perform this action");
_;
}
event candidateChanged(address oldCandidate, address newCandidate );
event AdminChanged(address oldAdmin, address newAdmin);
}
contract LnProxyBase is LnAdmin {
LnProxyImpl public target;
constructor(address _admin) public LnAdmin(_admin) {}
function setTarget(LnProxyImpl _target) external onlyAdmin {
target = _target;
emit TargetUpdated(_target);
}
function Log0( bytes calldata callData ) external onlyTarget {
uint size = callData.length;
bytes memory _callData = callData;
assembly {
log0(add(_callData, 32), size)
}
}
function Log1( bytes calldata callData, bytes32 topic1 ) external onlyTarget {
uint size = callData.length;
bytes memory _callData = callData;
assembly {
log1(add(_callData, 32), size, topic1 )
}
}
function Log2( bytes calldata callData, bytes32 topic1, bytes32 topic2 ) external onlyTarget {
uint size = callData.length;
bytes memory _callData = callData;
assembly {
log2(add(_callData, 32), size, topic1, topic2 )
}
}
function Log3( bytes calldata callData, bytes32 topic1, bytes32 topic2, bytes32 topic3 ) external onlyTarget {
uint size = callData.length;
bytes memory _callData = callData;
assembly {
log3(add(_callData, 32), size, topic1, topic2, topic3 )
}
}
function Log4( bytes calldata callData, bytes32 topic1, bytes32 topic2, bytes32 topic3, bytes32 topic4 ) external onlyTarget {
uint size = callData.length;
bytes memory _callData = callData;
assembly {
log4(add(_callData, 32), size, topic1, topic2, topic3, topic4 )
}
}
//receive: It is executed on a call to the contract with empty calldata. This is the function that is executed on plain Ether transfers (e.g. via .send() or .transfer()).
//fallback: can only rely on 2300 gas being available,
receive() external payable {
target.setMessageSender(msg.sender);
assembly {
let free_ptr := mload(0x40)
calldatacopy(free_ptr, 0, calldatasize())
let result := call(gas(), sload(target_slot), callvalue(), free_ptr, calldatasize(), 0, 0)
returndatacopy(free_ptr, 0, returndatasize())
if iszero(result) {
revert(free_ptr, returndatasize())
}
return(free_ptr, returndatasize())
}
}
modifier onlyTarget {
require(LnProxyImpl(msg.sender) == target, "Must be proxy target");
_;
}
event TargetUpdated(LnProxyImpl newTarget);
}
abstract contract LnProxyImpl is LnAdmin {
LnProxyBase public proxy;
LnProxyBase public integrationProxy;
address public messageSender;
constructor(address payable _proxy) internal {
require(admin != address(0), "Admin must be set");
proxy = LnProxyBase(_proxy);
emit ProxyUpdated(_proxy);
}
function setProxy(address payable _proxy) external onlyAdmin {
proxy = LnProxyBase(_proxy);
emit ProxyUpdated(_proxy);
}
function setIntegrationProxy(address payable _integrationProxy) external onlyAdmin {
integrationProxy = LnProxyBase(_integrationProxy);
}
function setMessageSender(address sender) external onlyProxy {
messageSender = sender;
}
modifier onlyProxy {
require(LnProxyBase(msg.sender) == proxy || LnProxyBase(msg.sender) == integrationProxy, "Only the proxy can call");
_;
}
modifier optionalProxy {
if (LnProxyBase(msg.sender) != proxy && LnProxyBase(msg.sender) != integrationProxy && messageSender != msg.sender) {
messageSender = msg.sender;
}
_;
}
modifier optionalProxy_onlyAdmin {
if (LnProxyBase(msg.sender) != proxy && LnProxyBase(msg.sender) != integrationProxy && messageSender != msg.sender) {
messageSender = msg.sender;
}
require(messageSender == admin, "only for admin");
_;
}
event ProxyUpdated(address proxyAddress);
}
contract LnProxyERC20 is LnProxyBase, IERC20 {
constructor(address _admin) public LnProxyBase(_admin) {}
function name() public view override returns (string memory) {
return IERC20(address(target)).name();
}
function symbol() public view override returns (string memory) {
return IERC20(address(target)).symbol();
}
function decimals() public view override returns (uint8) {
return IERC20(address(target)).decimals();
}
function totalSupply() public view override returns (uint256) {
return IERC20(address(target)).totalSupply();
}
function balanceOf(address account) public view override returns (uint256) {
return IERC20(address(target)).balanceOf(account);
}
function allowance(address owner, address spender) public view override returns (uint256) {
return IERC20(address(target)).allowance(owner, spender);
}
function transfer(address to, uint256 value) public override returns (bool) {
target.setMessageSender(msg.sender);
IERC20(address(target)).transfer(to, value);
return true;
}
function approve(address spender, uint256 value) public override returns (bool) {
target.setMessageSender(msg.sender);
IERC20(address(target)).approve(spender, value);
return true;
}
function transferFrom(
address from,
address to,
uint256 value
) public override returns (bool) {
target.setMessageSender(msg.sender);
IERC20(address(target)).transferFrom(from, to, value);
return true;
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":200,"enabled":false},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"LnProxyERC20.sol":"LnProxyERC20"}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_admin","internalType":"address"}]},{"type":"event","name":"AdminChanged","inputs":[{"type":"address","name":"oldAdmin","internalType":"address","indexed":false},{"type":"address","name":"newAdmin","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"TargetUpdated","inputs":[{"type":"address","name":"newTarget","internalType":"contract LnProxyImpl","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"candidateChanged","inputs":[{"type":"address","name":"oldCandidate","internalType":"address","indexed":false},{"type":"address","name":"newCandidate","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"Log0","inputs":[{"type":"bytes","name":"callData","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"Log1","inputs":[{"type":"bytes","name":"callData","internalType":"bytes"},{"type":"bytes32","name":"topic1","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"Log2","inputs":[{"type":"bytes","name":"callData","internalType":"bytes"},{"type":"bytes32","name":"topic1","internalType":"bytes32"},{"type":"bytes32","name":"topic2","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"Log3","inputs":[{"type":"bytes","name":"callData","internalType":"bytes"},{"type":"bytes32","name":"topic1","internalType":"bytes32"},{"type":"bytes32","name":"topic2","internalType":"bytes32"},{"type":"bytes32","name":"topic3","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"Log4","inputs":[{"type":"bytes","name":"callData","internalType":"bytes"},{"type":"bytes32","name":"topic1","internalType":"bytes32"},{"type":"bytes32","name":"topic2","internalType":"bytes32"},{"type":"bytes32","name":"topic3","internalType":"bytes32"},{"type":"bytes32","name":"topic4","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"admin","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"becomeAdmin","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"candidate","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setCandidate","inputs":[{"type":"address","name":"_candidate","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTarget","inputs":[{"type":"address","name":"_target","internalType":"contract LnProxyImpl"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract LnProxyImpl"}],"name":"target","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x608060405234801561001057600080fd5b5060405161219a38038061219a8339818101604052602081101561003357600080fd5b81019080805190602001909291905050508080600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f61646d696e20616464726573732063616e6e6f7420626520300000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f600082604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050611ff3806101a76000396000f3fe6080604052600436106101235760003560e01c8063776d1a01116100a0578063ced7bc7011610064578063ced7bc7014610804578063d4b83992146108a8578063db3dce3f146108e9578063dd62ed3e14610983578063f851a44014610a08576101f0565b8063776d1a011461057457806395d89b41146105c5578063a0e0048814610655578063a8f56ef2146106e5578063a9059cbb14610793576101f0565b806323b872dd116100e757806323b872dd146103f857806325971dff14610489578063313ce567146104a05780636c8381f8146104ce57806370a082311461050f576101f0565b806306fdde03146101f557806307880b7f14610285578063095ea7b3146102d65780630ba25f7d1461034757806318160ddd146103cd576101f0565b366101f057600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc67f832336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156101b357600080fd5b505af11580156101c7573d6000803e3d6000fd5b5050505060405136600082376000803683346002545af13d6000833e806101ec573d82fd5b3d82f35b600080fd5b34801561020157600080fd5b5061020a610a49565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024a57808201518184015260208101905061022f565b50505050905090810190601f1680156102775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029157600080fd5b506102d4600480360360208110156102a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bb1565b005b3480156102e257600080fd5b5061032f600480360360408110156102f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d4e565b60405180821515815260200191505060405180910390f35b34801561035357600080fd5b506103cb6004803603602081101561036a57600080fd5b810190808035906020019064010000000081111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460018302840111640100000000831117156103bb57600080fd5b9091929391929390505050610ecc565b005b3480156103d957600080fd5b506103e2610fec565b6040518082815260200191505060405180910390f35b34801561040457600080fd5b506104716004803603606081101561041b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611096565b60405180821515815260200191505060405180910390f35b34801561049557600080fd5b5061049e611233565b005b3480156104ac57600080fd5b506104b561140c565b604051808260ff16815260200191505060405180910390f35b3480156104da57600080fd5b506104e36114b6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051b57600080fd5b5061055e6004803603602081101561053257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114dc565b6040518082815260200191505060405180910390f35b34801561058057600080fd5b506105c36004803603602081101561059757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a9565b005b3480156105d157600080fd5b506105da6116de565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561061a5780820151818401526020810190506105ff565b50505050905090810190601f1680156106475780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561066157600080fd5b506106e36004803603604081101561067857600080fd5b810190808035906020019064010000000081111561069557600080fd5b8201836020820111156106a757600080fd5b803590602001918460018302840111640100000000831117156106c957600080fd5b909192939192939080359060200190929190505050611846565b005b3480156106f157600080fd5b50610791600480360360a081101561070857600080fd5b810190808035906020019064010000000081111561072557600080fd5b82018360208201111561073757600080fd5b8035906020019184600183028401116401000000008311171561075957600080fd5b909192939192939080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611968565b005b34801561079f57600080fd5b506107ec600480360360408110156107b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a90565b60405180821515815260200191505060405180910390f35b34801561081057600080fd5b506108a66004803603608081101561082757600080fd5b810190808035906020019064010000000081111561084457600080fd5b82018360208201111561085657600080fd5b8035906020019184600183028401116401000000008311171561087857600080fd5b9091929391929390803590602001909291908035906020019092919080359060200190929190505050611c0e565b005b3480156108b457600080fd5b506108bd611d34565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108f557600080fd5b506109816004803603606081101561090c57600080fd5b810190808035906020019064010000000081111561092957600080fd5b82018360208201111561093b57600080fd5b8035906020019184600183028401116401000000008311171561095d57600080fd5b90919293919293908035906020019092919080359060200190929190505050611d5a565b005b34801561098f57600080fd5b506109f2600480360360408110156109a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e7e565b6040518082815260200191505060405180910390f35b348015610a1457600080fd5b50610a1d611f6a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015610ab357600080fd5b505afa158015610ac7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610af157600080fd5b8101908080516040519392919084640100000000821115610b1157600080fd5b83820191506020820185811115610b2757600080fd5b8251866001820283011164010000000082111715610b4457600080fd5b8083526020830192505050908051906020019080838360005b83811015610b78578082015181840152602081019050610b5d565b50505050905090810190601f168015610ba55780820380516001836020036101000a031916815260200191505b50604052505050905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f8f602f913960400191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0faed18be9e8f4d4c05dfbcc80ea2c97a0be729614d766827778f60890c02cab81600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc67f832336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610e8657600080fd5b505af1158015610e9a573d6000803e3d6000fd5b505050506040513d6020811015610eb057600080fd5b8101908080519060200190929190505050506001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d7573742062652070726f78792074617267657400000000000000000000000081525060200191505060405180910390fd5b6000828290509050606083838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508160208201a050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561105657600080fd5b505afa15801561106a573d6000803e3d6000fd5b505050506040513d602081101561108057600080fd5b8101908080519060200190929190505050905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc67f832336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561112357600080fd5b505af1158015611137573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156111ec57600080fd5b505af1158015611200573d6000803e3d6000fd5b505050506040513d602081101561121657600080fd5b810190808051906020019092919050505050600190509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f6e6c792063616e6469646174652063616e206265636f6d652061646d696e0081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f8160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561147657600080fd5b505afa15801561148a573d6000803e3d6000fd5b505050506040513d60208110156114a057600080fd5b8101908080519060200190929190505050905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561156757600080fd5b505afa15801561157b573d6000803e3d6000fd5b505050506040513d602081101561159157600080fd5b81019080805190602001909291905050509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f8f602f913960400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f814250a3b8c79fcbe2ead2c131c952a278491c8f4322a79fe84b5040a810373e81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561174857600080fd5b505afa15801561175c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561178657600080fd5b81019080805160405193929190846401000000008211156117a657600080fd5b838201915060208201858111156117bc57600080fd5b82518660018202830111640100000000821117156117d957600080fd5b8083526020830192505050908051906020019080838360005b8381101561180d5780820151818401526020810190506117f2565b50505050905090810190601f16801561183a5780820380516001836020036101000a031916815260200191505b50604052505050905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611909576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d7573742062652070726f78792074617267657400000000000000000000000081525060200191505060405180910390fd5b6000838390509050606084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050828260208301a15050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d7573742062652070726f78792074617267657400000000000000000000000081525060200191505060405180910390fd5b6000868690509050606087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050828486888560208601a45050505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc67f832336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611bc857600080fd5b505af1158015611bdc573d6000803e3d6000fd5b505050506040513d6020811015611bf257600080fd5b8101908080519060200190929190505050506001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d7573742062652070726f78792074617267657400000000000000000000000081525060200191505060405180910390fd5b6000858590509050606086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508284868460208501a350505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d7573742062652070726f78792074617267657400000000000000000000000081525060200191505060405180910390fd5b6000848490509050606085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905082848360208401a2505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611f2757600080fd5b505afa158015611f3b573d6000803e3d6000fd5b505050506040513d6020811015611f5157600080fd5b8101908080519060200190929190505050905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156fe4f6e6c792074686520636f6e74726163742061646d696e2063616e20706572666f726d207468697320616374696f6ea2646970667358221220b20723e98eba0ad18ec1baf96750a1ca700dc7293ce840a307500810c294e73464736f6c634300060c003300000000000000000000000074e5d6c26dfbeb647dfe36f44fee805bafefbfc0
Deployed ByteCode
0x6080604052600436106101235760003560e01c8063776d1a01116100a0578063ced7bc7011610064578063ced7bc7014610804578063d4b83992146108a8578063db3dce3f146108e9578063dd62ed3e14610983578063f851a44014610a08576101f0565b8063776d1a011461057457806395d89b41146105c5578063a0e0048814610655578063a8f56ef2146106e5578063a9059cbb14610793576101f0565b806323b872dd116100e757806323b872dd146103f857806325971dff14610489578063313ce567146104a05780636c8381f8146104ce57806370a082311461050f576101f0565b806306fdde03146101f557806307880b7f14610285578063095ea7b3146102d65780630ba25f7d1461034757806318160ddd146103cd576101f0565b366101f057600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc67f832336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156101b357600080fd5b505af11580156101c7573d6000803e3d6000fd5b5050505060405136600082376000803683346002545af13d6000833e806101ec573d82fd5b3d82f35b600080fd5b34801561020157600080fd5b5061020a610a49565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024a57808201518184015260208101905061022f565b50505050905090810190601f1680156102775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029157600080fd5b506102d4600480360360208110156102a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bb1565b005b3480156102e257600080fd5b5061032f600480360360408110156102f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d4e565b60405180821515815260200191505060405180910390f35b34801561035357600080fd5b506103cb6004803603602081101561036a57600080fd5b810190808035906020019064010000000081111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460018302840111640100000000831117156103bb57600080fd5b9091929391929390505050610ecc565b005b3480156103d957600080fd5b506103e2610fec565b6040518082815260200191505060405180910390f35b34801561040457600080fd5b506104716004803603606081101561041b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611096565b60405180821515815260200191505060405180910390f35b34801561049557600080fd5b5061049e611233565b005b3480156104ac57600080fd5b506104b561140c565b604051808260ff16815260200191505060405180910390f35b3480156104da57600080fd5b506104e36114b6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051b57600080fd5b5061055e6004803603602081101561053257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114dc565b6040518082815260200191505060405180910390f35b34801561058057600080fd5b506105c36004803603602081101561059757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a9565b005b3480156105d157600080fd5b506105da6116de565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561061a5780820151818401526020810190506105ff565b50505050905090810190601f1680156106475780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561066157600080fd5b506106e36004803603604081101561067857600080fd5b810190808035906020019064010000000081111561069557600080fd5b8201836020820111156106a757600080fd5b803590602001918460018302840111640100000000831117156106c957600080fd5b909192939192939080359060200190929190505050611846565b005b3480156106f157600080fd5b50610791600480360360a081101561070857600080fd5b810190808035906020019064010000000081111561072557600080fd5b82018360208201111561073757600080fd5b8035906020019184600183028401116401000000008311171561075957600080fd5b909192939192939080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611968565b005b34801561079f57600080fd5b506107ec600480360360408110156107b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a90565b60405180821515815260200191505060405180910390f35b34801561081057600080fd5b506108a66004803603608081101561082757600080fd5b810190808035906020019064010000000081111561084457600080fd5b82018360208201111561085657600080fd5b8035906020019184600183028401116401000000008311171561087857600080fd5b9091929391929390803590602001909291908035906020019092919080359060200190929190505050611c0e565b005b3480156108b457600080fd5b506108bd611d34565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108f557600080fd5b506109816004803603606081101561090c57600080fd5b810190808035906020019064010000000081111561092957600080fd5b82018360208201111561093b57600080fd5b8035906020019184600183028401116401000000008311171561095d57600080fd5b90919293919293908035906020019092919080359060200190929190505050611d5a565b005b34801561098f57600080fd5b506109f2600480360360408110156109a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e7e565b6040518082815260200191505060405180910390f35b348015610a1457600080fd5b50610a1d611f6a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015610ab357600080fd5b505afa158015610ac7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610af157600080fd5b8101908080516040519392919084640100000000821115610b1157600080fd5b83820191506020820185811115610b2757600080fd5b8251866001820283011164010000000082111715610b4457600080fd5b8083526020830192505050908051906020019080838360005b83811015610b78578082015181840152602081019050610b5d565b50505050905090810190601f168015610ba55780820380516001836020036101000a031916815260200191505b50604052505050905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f8f602f913960400191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0faed18be9e8f4d4c05dfbcc80ea2c97a0be729614d766827778f60890c02cab81600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc67f832336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610e8657600080fd5b505af1158015610e9a573d6000803e3d6000fd5b505050506040513d6020811015610eb057600080fd5b8101908080519060200190929190505050506001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d7573742062652070726f78792074617267657400000000000000000000000081525060200191505060405180910390fd5b6000828290509050606083838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508160208201a050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561105657600080fd5b505afa15801561106a573d6000803e3d6000fd5b505050506040513d602081101561108057600080fd5b8101908080519060200190929190505050905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc67f832336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561112357600080fd5b505af1158015611137573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156111ec57600080fd5b505af1158015611200573d6000803e3d6000fd5b505050506040513d602081101561121657600080fd5b810190808051906020019092919050505050600190509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f6e6c792063616e6469646174652063616e206265636f6d652061646d696e0081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f8160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561147657600080fd5b505afa15801561148a573d6000803e3d6000fd5b505050506040513d60208110156114a057600080fd5b8101908080519060200190929190505050905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561156757600080fd5b505afa15801561157b573d6000803e3d6000fd5b505050506040513d602081101561159157600080fd5b81019080805190602001909291905050509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f8f602f913960400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f814250a3b8c79fcbe2ead2c131c952a278491c8f4322a79fe84b5040a810373e81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561174857600080fd5b505afa15801561175c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561178657600080fd5b81019080805160405193929190846401000000008211156117a657600080fd5b838201915060208201858111156117bc57600080fd5b82518660018202830111640100000000821117156117d957600080fd5b8083526020830192505050908051906020019080838360005b8381101561180d5780820151818401526020810190506117f2565b50505050905090810190601f16801561183a5780820380516001836020036101000a031916815260200191505b50604052505050905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611909576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d7573742062652070726f78792074617267657400000000000000000000000081525060200191505060405180910390fd5b6000838390509050606084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050828260208301a15050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d7573742062652070726f78792074617267657400000000000000000000000081525060200191505060405180910390fd5b6000868690509050606087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050828486888560208601a45050505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc67f832336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611bc857600080fd5b505af1158015611bdc573d6000803e3d6000fd5b505050506040513d6020811015611bf257600080fd5b8101908080519060200190929190505050506001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d7573742062652070726f78792074617267657400000000000000000000000081525060200191505060405180910390fd5b6000858590509050606086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090508284868460208501a350505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d7573742062652070726f78792074617267657400000000000000000000000081525060200191505060405180910390fd5b6000848490509050606085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905082848360208401a2505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611f2757600080fd5b505afa158015611f3b573d6000803e3d6000fd5b505050506040513d6020811015611f5157600080fd5b8101908080519060200190929190505050905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156fe4f6e6c792074686520636f6e74726163742061646d696e2063616e20706572666f726d207468697320616374696f6ea2646970667358221220b20723e98eba0ad18ec1baf96750a1ca700dc7293ce840a307500810c294e73464736f6c634300060c0033