More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 21162118 | 50 days ago | IN | 0 ETH | 0.0007665 | ||||
Approve | 21161334 | 51 days ago | IN | 0 ETH | 0.00079196 | ||||
Claim Share | 21161225 | 51 days ago | IN | 0 ETH | 0.00085665 | ||||
Approve | 21121366 | 56 days ago | IN | 0 ETH | 0.00034455 | ||||
Approve | 21082008 | 62 days ago | IN | 0 ETH | 0.00045361 | ||||
Claim Share | 21037857 | 68 days ago | IN | 0 ETH | 0.00116243 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21221508 | 42 days ago | 0.00160289 ETH | ||||
21221364 | 42 days ago | 0.0016035 ETH | ||||
21221364 | 42 days ago | 0.0016035 ETH | ||||
21221364 | 42 days ago | 0.0016035 ETH | ||||
21221364 | 42 days ago | 0.0016035 ETH | ||||
21221364 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21221361 | 42 days ago | 0.0016035 ETH | ||||
21188033 | 47 days ago | 0.00159238 ETH | ||||
21174930 | 49 days ago | 0.00153996 ETH | ||||
21171351 | 49 days ago | 0.00151031 ETH | ||||
21161470 | 51 days ago | 0.00156177 ETH | ||||
21161324 | 51 days ago | 0.00156177 ETH | ||||
21161277 | 51 days ago | 0.00155322 ETH | ||||
21161225 | 51 days ago | 0.54462508 ETH | ||||
21161183 | 51 days ago | 0.00156128 ETH |
Loading...
Loading
Contract Name:
XpPair
Compiler Version
v0.5.16+commit.9c3226ce
Optimization Enabled:
Yes with 200 runs
Other Settings:
istanbul EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity =0.5.16; interface IXpPair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function setMetadata( string calldata website, string calldata image, string calldata description, string calldata chat, string calldata social ) external; function fetchMetadata() external view returns (string memory, string memory, string memory, string memory, string memory); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function updateProvider(address user) external; function euler(uint256) external view returns (uint256); function viewShare() external view returns (uint256 share); function claimShare() external; function poolBalance() external view returns (uint256); function totalCollected() external view returns (uint256); function updateProtocol(address) external; function setProtocol() external; function protocol() external view returns (address); function payableProtocol() external view returns (address payable origin); function creator() external view returns (address); function renounce() external; function setFees() external; function updateFees(uint8, uint8, uint8, uint8) external; function buyLpFee() external view returns (uint8); function sellLpFee() external view returns (uint8); function buyProtocolFee() external view returns (uint8); function sellProtocolFee() external view returns (uint8); function buyTotalFee() external view returns (uint8); function sellTotalFee() external view returns (uint8); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function first_mint( address to, uint8 buyLp, uint8 sellLp, uint8 buyProtocol, uint8 sellProtocol, address protocolAddress ) external returns (uint256 liquidity); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address _token0, address _token1) external; } interface IXpERC20 { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); } interface IXpFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function routerSetter() external view returns (address); function router() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setRouterSetter(address) external; function setRouter(address) external; } interface IUniswapV2Callee { function uniswapV2Call(address sender, uint256 amount0, uint256 amount1, bytes calldata data) external; } library SafeMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } } library Math { function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } } library UQ112x112 { uint224 constant Q112 = 2 ** 112; // encode a uint112 as a UQ112x112 function encode(uint112 y) internal pure returns (uint224 z) { z = uint224(y) * Q112; // never overflows } // divide a UQ112x112 by a uint112, returning a UQ112x112 function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) { z = x / uint224(y); } } contract XpERC20 is IXpERC20 { using SafeMath for uint256; string public constant name = "XP"; string public constant symbol = "XP-LP"; uint8 public constant decimals = 18; uint256 public totalSupply; address public factory; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; bytes32 public DOMAIN_SEPARATOR; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; mapping(address => uint256) public nonces; event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); constructor() public { uint256 chainId; assembly { chainId := chainid } factory = msg.sender; DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256(bytes("1")), chainId, address(this) ) ); } function _mint(address to, uint256 value) internal { totalSupply = totalSupply.add(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(address(0), to, value); } function _burn(address from, uint256 value) internal { balanceOf[from] = balanceOf[from].sub(value); totalSupply = totalSupply.sub(value); emit Transfer(from, address(0), value); } function _approve(address owner, address spender, uint256 value) private { allowance[owner][spender] = value; emit Approval(owner, spender, value); } function _transfer(address from, address to, uint256 value) private { balanceOf[from] = balanceOf[from].sub(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(from, to, value); } function transfer(address to, uint256 value) external returns (bool) { if (to != 0x000000000000000000000000000000000000dEaD) { require(msg.sender == IXpFactory(factory).router(), "XpPair: FORBIDDEN"); } _transfer(msg.sender, to, value); return true; } function approve(address spender, uint256 value) external returns (bool) { require(spender == IXpFactory(factory).router(), "XpPair: FORBIDDEN"); _approve(msg.sender, spender, value); return true; } function transferFrom(address from, address to, uint256 value) external returns (bool) { require(msg.sender == IXpFactory(factory).router(), "XpPair: FORBIDDEN"); if (allowance[from][msg.sender] != uint256(-1)) { allowance[from][msg.sender] = allowance[from][msg.sender].sub(value); } _transfer(from, to, value); return true; } function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external { require(deadline >= block.timestamp, "XpPair: EXPIRED"); require(spender == IXpFactory(factory).router(), "XpPair: FORBIDDEN"); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, "XpPair: INVALID_SIGNATURE"); _approve(owner, spender, value); } } contract XpPair is IXpPair, XpERC20 { using SafeMath for uint256; using UQ112x112 for uint224; uint256 public constant MINIMUM_LIQUIDITY = 10 ** 3; uint256 private bigNumber = 10 ** 20; //prevents liqFee/totalSupply from rounding to 0. bytes4 private constant SELECTOR = bytes4(keccak256(bytes("transfer(address,uint256)"))); address public factory; address public token0; address public token1; uint8 public buyLpFee; uint8 public sellLpFee; uint8 public buyProtocolFee; uint8 public sellProtocolFee; uint8 public buyTotalFee; uint8 public sellTotalFee; uint256 public startTime_fees = 0; uint8 public future_buyLpFee; uint8 public future_sellLpFee; uint8 public future_buyProtocolFee; uint8 public future_sellProtocolFee; uint256 public totalCollected; uint256 public poolBalance; uint256 public startTime_protocol = 0; address public protocol; address public future_protocol; address public creator; uint256 public creation_time; string public websiteUrl = "Null"; string public imageUrl = "Null"; //IPFS link string public tokenDescription = "Null"; string public chatUrl = "Null"; string public socialUrl = "Null"; struct Provider { uint256 lp; uint256 euler0; } uint256[] public euler; mapping(address => Provider) public Providers; uint112 private reserve0; // uses single storage slot, accessible via getReserves uint112 private reserve1; // uses single storage slot, accessible via getReserves uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves uint256 public price0CumulativeLast; uint256 public price1CumulativeLast; uint256 public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event uint256 private unlocked = 1; modifier lock() { require(unlocked == 1, "Xp: LOCKED"); unlocked = 0; _; unlocked = 1; } //called everytime a swap is performed function() external payable { require(msg.sender == IXpFactory(factory).router(), "XpPair: FORBIDDEN"); poolBalance += msg.value; totalCollected += msg.value; updateEuler(msg.value); } //updates the euler constant - occurs everytime a swap is performed function updateEuler(uint256 liqFee) internal { if (euler.length == 0) { euler.push((liqFee * bigNumber) / totalSupply); } else { euler.push(euler[euler.length - 1] + (liqFee * bigNumber) / totalSupply); } } //called everytime liquidity is added/removed by the user function updateProvider(address user) external { require(msg.sender == IXpFactory(factory).router(), "XpPair: FORBIDDEN"); if (euler.length == 0) { Providers[user] = Provider(balanceOf[user], 0); } else { Providers[user] = Provider(balanceOf[user], euler[euler.length - 1]); } } function claimShare() public lock { require(euler.length > 0, "XpPair: Nothing to Claim"); uint256 share = (Providers[msg.sender].lp * (euler[euler.length - 1] - Providers[msg.sender].euler0)) / bigNumber; Providers[msg.sender] = Provider(balanceOf[msg.sender], euler[euler.length - 1]); poolBalance -= share; (bool sent,) = msg.sender.call.value(share)(""); require(sent, "Failed to send Ether"); } function viewShare() public view returns (uint256 share) { if (euler.length == 0) { return 0; } else { return Providers[msg.sender].lp * (euler[euler.length - 1] - Providers[msg.sender].euler0) / bigNumber; } } function updateFees(uint8 buyLpFuture, uint8 sellLpFuture, uint8 buyProtocolFuture, uint8 sellProtocolFuture) external { require(msg.sender == creator); startTime_fees = block.timestamp; future_buyLpFee = buyLpFuture; future_sellLpFee = sellLpFuture; future_buyProtocolFee = buyProtocolFuture; future_sellProtocolFee = sellProtocolFuture; } function setFees() external { require(startTime_fees != 0); require(msg.sender == creator && block.timestamp - startTime_fees >= 3 days); buyLpFee = future_buyLpFee; sellLpFee = future_sellLpFee; buyProtocolFee = future_buyProtocolFee; sellProtocolFee = future_sellProtocolFee; buyTotalFee = future_buyLpFee + future_buyProtocolFee + 1; sellTotalFee = future_sellLpFee + future_sellProtocolFee + 1; } function updateProtocol(address protocolFuture) external { require(msg.sender == creator); startTime_protocol = block.timestamp; future_protocol = protocolFuture; } function setProtocol() external { require(startTime_protocol != 0); require(msg.sender == creator && block.timestamp - startTime_protocol >= 3 days); protocol = future_protocol; } function payableProtocol() external view returns (address payable) { return address(uint160(protocol)); } function setMetadata( string calldata website, string calldata image, string calldata description, string calldata chat, string calldata social ) external { require(msg.sender == creator); websiteUrl = website; imageUrl = image; tokenDescription = description; chatUrl = chat; socialUrl = social; } function fetchMetadata() public view returns (string memory, string memory, string memory, string memory, string memory) { return (websiteUrl, imageUrl, tokenDescription, chatUrl, socialUrl); } function renounce() external { require(msg.sender == creator); creator = 0x000000000000000000000000000000000000dEaD; } function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) { _reserve0 = reserve0; _reserve1 = reserve1; _blockTimestampLast = blockTimestampLast; } function _safeTransfer(address token, address to, uint256 value) private { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "Xp: TRANSFER_FAILED"); } event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); constructor() public { factory = msg.sender; } // called once by the factory at time of deployment function initialize(address _token0, address _token1) external { require(msg.sender == factory, "XpPair: FORBIDDEN"); // sufficient check token0 = _token0; token1 = _token1; } // update reserves and, on the first call per block, price accumulators function _update(uint256 balance0, uint256 balance1, uint112 _reserve0, uint112 _reserve1) private { require(balance0 <= uint112(-1) && balance1 <= uint112(-1), "XpPair: OVERFLOW"); uint32 blockTimestamp = uint32(block.timestamp % 2 ** 32); uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) { // * never overflows, and + overflow is desired price0CumulativeLast += uint256(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed; price1CumulativeLast += uint256(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed; } reserve0 = uint112(balance0); reserve1 = uint112(balance1); blockTimestampLast = blockTimestamp; emit Sync(reserve0, reserve1); } // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k). This will never be on. function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) { address feeTo = IXpFactory(factory).feeTo(); feeOn = feeTo != address(0); uint256 _kLast = kLast; // gas savings if (feeOn) { if (_kLast != 0) { uint256 rootK = Math.sqrt(uint256(_reserve0).mul(_reserve1)); uint256 rootKLast = Math.sqrt(_kLast); if (rootK > rootKLast) { uint256 numerator = totalSupply.mul(rootK.sub(rootKLast)); uint256 denominator = rootK.mul(5).add(rootKLast); uint256 liquidity = numerator / denominator; if (liquidity > 0) _mint(feeTo, liquidity); } } } else if (_kLast != 0) { kLast = 0; } } // this low-level function should be called from a contract which performs important safety checks function first_mint( address to, uint8 buyLp, uint8 sellLp, uint8 buyProtocol, uint8 sellProtocol, address protocolAddress ) external lock returns (uint256 liquidity) { require(msg.sender == IXpFactory(factory).router(), "XpPair: FORBIDDEN"); (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings uint256 balance0 = IERC20(token0).balanceOf(address(this)); uint256 balance1 = IERC20(token1).balanceOf(address(this)); uint256 amount0 = balance0.sub(_reserve0); uint256 amount1 = balance1.sub(_reserve1); bool feeOn = _mintFee(_reserve0, _reserve1); uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee require(_totalSupply == 0); liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY); _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens creator = to; creation_time = block.timestamp; protocol = protocolAddress; buyLpFee = buyLp; sellLpFee = sellLp; buyProtocolFee = buyProtocol; sellProtocolFee = sellProtocol; buyTotalFee = buyLp + buyProtocol + 1; sellTotalFee = sellLp + sellProtocol + 1; require(liquidity > 0, "XpPair: INSUFFICIENT_LIQUIDITY_MINTED"); _mint(to, liquidity); _update(balance0, balance1, _reserve0, _reserve1); if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date emit Mint(msg.sender, amount0, amount1); } // this low-level function should be called from a contract which performs important safety checks function mint(address to) external lock returns (uint256 liquidity) { require(msg.sender == IXpFactory(factory).router(), "XpPair: FORBIDDEN"); (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings uint256 balance0 = IERC20(token0).balanceOf(address(this)); uint256 balance1 = IERC20(token1).balanceOf(address(this)); uint256 amount0 = balance0.sub(_reserve0); uint256 amount1 = balance1.sub(_reserve1); bool feeOn = _mintFee(_reserve0, _reserve1); uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee if (_totalSupply == 0) { revert("Use first_mint instead"); } else { liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1); } require(liquidity > 0, "XpPair: INSUFFICIENT_LIQUIDITY_MINTED"); _mint(to, liquidity); _update(balance0, balance1, _reserve0, _reserve1); if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date emit Mint(msg.sender, amount0, amount1); } // this low-level function should be called from a contract which performs important safety checks function burn(address to) external lock returns (uint256 amount0, uint256 amount1) { require(msg.sender == IXpFactory(factory).router(), "XpPair: FORBIDDEN"); require(block.timestamp - creation_time >= 5 days, "XpPair: FORBIDDEN RUGPULL"); (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings address _token0 = token0; // gas savings address _token1 = token1; // gas savings uint256 balance0 = IERC20(_token0).balanceOf(address(this)); uint256 balance1 = IERC20(_token1).balanceOf(address(this)); uint256 liquidity = balanceOf[address(this)]; bool feeOn = _mintFee(_reserve0, _reserve1); uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution require(amount0 > 0 && amount1 > 0, "XpPair: INSUFFICIENT_LIQUIDITY_BURNED"); _burn(address(this), liquidity); _safeTransfer(_token0, to, amount0); _safeTransfer(_token1, to, amount1); balance0 = IERC20(_token0).balanceOf(address(this)); balance1 = IERC20(_token1).balanceOf(address(this)); _update(balance0, balance1, _reserve0, _reserve1); if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date emit Burn(msg.sender, amount0, amount1, to); } // this low-level function should be called from a contract which performs important safety checks function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external lock { require(msg.sender == IXpFactory(factory).router(), "XpPair: FORBIDDEN"); require(amount0Out > 0 || amount1Out > 0, "XpPair: INSUFFICIENT_OUTPUT_AMOUNT"); (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings require(amount0Out < _reserve0 && amount1Out < _reserve1, "XpPair: INSUFFICIENT_LIQUIDITY"); uint256 balance0; uint256 balance1; { // scope for _token{0,1}, avoids stack too deep errors address _token0 = token0; address _token1 = token1; require(to != _token0 && to != _token1, "XpPair: INVALID_TO"); if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens if (data.length > 0) IUniswapV2Callee(to).uniswapV2Call(msg.sender, amount0Out, amount1Out, data); balance0 = IERC20(_token0).balanceOf(address(this)); balance1 = IERC20(_token1).balanceOf(address(this)); } uint256 amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0; uint256 amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0; require(amount0In > 0 || amount1In > 0, "Xp: INSUFFICIENT_INPUT_AMOUNT"); { require(balance0 * balance1 >= reserve0 * reserve1, "K"); } _update(balance0, balance1, _reserve0, _reserve1); emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to); } // force balances to match reserves function skim(address to) external lock { address _token0 = token0; // gas savings address _token1 = token1; // gas savings _safeTransfer(_token0, to, IERC20(_token0).balanceOf(address(this)).sub(reserve0)); _safeTransfer(_token1, to, IERC20(_token1).balanceOf(address(this)).sub(reserve1)); } // force reserves to match balances function sync() external lock { _update(IERC20(token0).balanceOf(address(this)), IERC20(token1).balanceOf(address(this)), reserve0, reserve1); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "istanbul", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Providers","outputs":[{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"euler0","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buyLpFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyProtocolFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"chatUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimShare","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creation_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"euler","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fetchMetadata","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint8","name":"buyLp","type":"uint8"},{"internalType":"uint8","name":"sellLp","type":"uint8"},{"internalType":"uint8","name":"buyProtocol","type":"uint8"},{"internalType":"uint8","name":"sellProtocol","type":"uint8"},{"internalType":"address","name":"protocolAddress","type":"address"}],"name":"first_mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"future_buyLpFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"future_buyProtocolFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"future_protocol","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"future_sellLpFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"future_sellProtocolFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"imageUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"payableProtocol","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"poolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"protocol","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounce","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellLpFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sellProtocolFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sellTotalFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"website","type":"string"},{"internalType":"string","name":"image","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"chat","type":"string"},{"internalType":"string","name":"social","type":"string"}],"name":"setMetadata","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setProtocol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"socialUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime_fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime_protocol","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenDescription","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint8","name":"buyLpFuture","type":"uint8"},{"internalType":"uint8","name":"sellLpFuture","type":"uint8"},{"internalType":"uint8","name":"buyProtocolFuture","type":"uint8"},{"internalType":"uint8","name":"sellProtocolFuture","type":"uint8"}],"name":"updateFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"protocolFuture","type":"address"}],"name":"updateProtocol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"updateProvider","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"viewShare","outputs":[{"internalType":"uint256","name":"share","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"websiteUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
68056bc75e2d631000006006556000600a819055600e5560c06040526004608081905263139d5b1b60e21b60a09081526200003e9160139190620001fb565b5060408051808201909152600480825263139d5b1b60e21b60209092019182526200006c91601491620001fb565b5060408051808201909152600480825263139d5b1b60e21b60209092019182526200009a91601591620001fb565b5060408051808201909152600480825263139d5b1b60e21b6020909201918252620000c891601691620001fb565b5060408051808201909152600480825263139d5b1b60e21b6020909201918252620000f691601791620001fb565b506001601e553480156200010957600080fd5b50600180546001600160a01b0319163317905560405146908060526200483c82396040805191829003605201822082820182526002835261058560f41b6020938401528151808301835260018152603160f81b908401528151808401919091527faf5941cbd1b93ae9110f07202eca1ba728114daa20a7178e984cb16f65ff43ab818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060045550600780546001600160a01b03191633179055620002a0565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200023e57805160ff19168380011785556200026e565b828001600101855582156200026e579182015b828111156200026e57825182559160200191906001019062000251565b506200027c92915062000280565b5090565b6200029d91905b808211156200027c576000815560010162000287565b90565b61458c80620002b06000396000f3fe6080604052600436106103c15760003560e01c80636fd3acb4116101f2578063bc25cf771161010d578063d505accf116100a0578063e2a7797e1161006f578063e2a7797e1461114e578063ef70768a14611163578063f079399714611196578063fff6cae9146111ab576103c1565b8063d505accf14611042578063dc2dc3f3146110a0578063dd62ed3e146110fe578063e29eb83614611139576103c1565b8063ccec72fb116100dc578063ccec72fb14610dde578063d170755114610df3578063d21220a714610e08578063d2f2ea8a14610e1d576103c1565b8063bc25cf7714610d6c578063c45a015514610d9f578063c7b8b46d14610db4578063cc2b765714610dc9576103c1565b80638ce7442611610185578063aba8315011610154578063aba8315014610d18578063abb5ca0914610d2d578063b15be2f514610d42578063ba9a7a5614610d57576103c1565b80638ce7442614610ca057806395d89b4114610cb557806396365d4414610cca578063a9059cbb14610cdf576103c1565b80637a91ae74116101c15780637a91ae7414610c105780637dd2b0ad14610c255780637ecebe0014610c3a57806389afcb4414610c6d576103c1565b80636fd3acb414610b8057806370a0823114610b95578063727a573c14610bc85780637464fc3d14610bfb576103c1565b806330adf81f116102e25780635909c0d51161027557806365008cd61161024457806365008cd614610b0e578063666da64f14610b235780636a62784214610b385780636dd240a514610b6b576103c1565b80635909c0d514610aa55780635a3d549314610aba5780635cb1ccec14610acf57806361047d3314610af9576103c1565b8063371db133116102b1578063371db133146108855780633b84e9971461089a578063434beeaf14610a55578063485cc95514610a6a576103c1565b806330adf81f14610831578063313ce567146108465780633644e5151461085b5780633705b39214610870576103c1565b80630aa75f6b1161035a57806318160ddd1161032957806318160ddd146107af57806323b872dd146107c457806325e6f516146108075780632ee9e82b1461081c576103c1565b80630aa75f6b146107195780630dfe16811461075e57806312ed704d14610773578063163258b214610788576103c1565b806302d05d3f1161039657806302d05d3f146105e857806306fdde03146105fd5780630902f1ac14610687578063095ea7b3146106cc576103c1565b806273010d146104a9578062afb325146104da578063018d0f8d14610505578063022c0d9f14610551575b600760009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b15801561040f57600080fd5b505afa158015610423573d6000803e3d6000fd5b505050506040513d602081101561043957600080fd5b50516001600160a01b0316331461048b576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b600d805434908101909155600c8054820190556104a7906111c0565b005b3480156104b557600080fd5b506104be611240565b604080516001600160a01b039092168252519081900360200190f35b3480156104e657600080fd5b506104ef61124f565b6040805160ff9092168252519081900360200190f35b34801561051157600080fd5b506105386004803603602081101561052857600080fd5b50356001600160a01b031661125f565b6040805192835260208301919091528051918290030190f35b34801561055d57600080fd5b506104a76004803603608081101561057457600080fd5b8135916020810135916001600160a01b036040830135169190810190608081016060820135600160201b8111156105aa57600080fd5b8201836020820111156105bc57600080fd5b803590602001918460018302840111600160201b831117156105dd57600080fd5b509092509050611278565b3480156105f457600080fd5b506104be61181d565b34801561060957600080fd5b5061061261182c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561064c578181015183820152602001610634565b50505050905090810190601f1680156106795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561069357600080fd5b5061069c61184a565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b3480156106d857600080fd5b50610705600480360360408110156106ef57600080fd5b506001600160a01b038135169060200135611874565b604080519115158252519081900360200190f35b34801561072557600080fd5b506104a76004803603608081101561073c57600080fd5b5060ff813581169160208101358216916040820135811691606001351661194d565b34801561076a57600080fd5b506104be6119b7565b34801561077f57600080fd5b506104ef6119c6565b34801561079457600080fd5b5061079d6119cf565b60408051918252519081900360200190f35b3480156107bb57600080fd5b5061079d6119d5565b3480156107d057600080fd5b50610705600480360360608110156107e757600080fd5b506001600160a01b038135811691602081013590911690604001356119db565b34801561081357600080fd5b50610612611b36565b34801561082857600080fd5b506104a7611bc4565b34801561083d57600080fd5b5061079d611ca4565b34801561085257600080fd5b506104ef611cc8565b34801561086757600080fd5b5061079d611ccd565b34801561087c57600080fd5b506104ef611cd3565b34801561089157600080fd5b506104ef611ce3565b3480156108a657600080fd5b506104a7600480360360a08110156108bd57600080fd5b810190602081018135600160201b8111156108d757600080fd5b8201836020820111156108e957600080fd5b803590602001918460018302840111600160201b8311171561090a57600080fd5b919390929091602081019035600160201b81111561092757600080fd5b82018360208201111561093957600080fd5b803590602001918460018302840111600160201b8311171561095a57600080fd5b919390929091602081019035600160201b81111561097757600080fd5b82018360208201111561098957600080fd5b803590602001918460018302840111600160201b831117156109aa57600080fd5b919390929091602081019035600160201b8111156109c757600080fd5b8201836020820111156109d957600080fd5b803590602001918460018302840111600160201b831117156109fa57600080fd5b919390929091602081019035600160201b811115610a1757600080fd5b820183602082011115610a2957600080fd5b803590602001918460018302840111600160201b83111715610a4a57600080fd5b509092509050611cf3565b348015610a6157600080fd5b50610612611d57565b348015610a7657600080fd5b506104a760048036036040811015610a8d57600080fd5b506001600160a01b0381358116916020013516611db2565b348015610ab157600080fd5b5061079d611e33565b348015610ac657600080fd5b5061079d611e39565b348015610adb57600080fd5b5061079d60048036036020811015610af257600080fd5b5035611e3f565b348015610b0557600080fd5b5061079d611e5d565b348015610b1a57600080fd5b5061079d611ec5565b348015610b2f57600080fd5b506104a7611ecb565b348015610b4457600080fd5b5061079d60048036036020811015610b5b57600080fd5b50356001600160a01b03166120c7565b348015610b7757600080fd5b5061079d612494565b348015610b8c57600080fd5b506104ef61249a565b348015610ba157600080fd5b5061079d60048036036020811015610bb857600080fd5b50356001600160a01b03166124aa565b348015610bd457600080fd5b506104a760048036036020811015610beb57600080fd5b50356001600160a01b03166124bc565b348015610c0757600080fd5b5061079d6124f9565b348015610c1c57600080fd5b506104ef6124ff565b348015610c3157600080fd5b506104ef61250d565b348015610c4657600080fd5b5061079d60048036036020811015610c5d57600080fd5b50356001600160a01b031661251c565b348015610c7957600080fd5b5061053860048036036020811015610c9057600080fd5b50356001600160a01b031661252e565b348015610cac57600080fd5b506104be6129ea565b348015610cc157600080fd5b506106126129f9565b348015610cd657600080fd5b5061079d612a1a565b348015610ceb57600080fd5b5061070560048036036040811015610d0257600080fd5b506001600160a01b038135169060200135612a20565b348015610d2457600080fd5b50610612612b09565b348015610d3957600080fd5b50610612612b64565b348015610d4e57600080fd5b506104a7612bbf565b348015610d6357600080fd5b5061079d612bec565b348015610d7857600080fd5b506104a760048036036020811015610d8f57600080fd5b50356001600160a01b0316612bf2565b348015610dab57600080fd5b506104be612d56565b348015610dc057600080fd5b506104ef612d65565b348015610dd557600080fd5b506104ef612d75565b348015610dea57600080fd5b506104be612d85565b348015610dff57600080fd5b50610612612d94565b348015610e1457600080fd5b506104be612def565b348015610e2957600080fd5b50610e32612dfe565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019080838360005b83811015610e7f578181015183820152602001610e67565b50505050905090810190601f168015610eac5780820380516001836020036101000a031916815260200191505b5086810385528a5181528a516020918201918c019080838360005b83811015610edf578181015183820152602001610ec7565b50505050905090810190601f168015610f0c5780820380516001836020036101000a031916815260200191505b5086810384528951815289516020918201918b019080838360005b83811015610f3f578181015183820152602001610f27565b50505050905090810190601f168015610f6c5780820380516001836020036101000a031916815260200191505b5086810383528851815288516020918201918a019080838360005b83811015610f9f578181015183820152602001610f87565b50505050905090810190601f168015610fcc5780820380516001836020036101000a031916815260200191505b50868103825287518152875160209182019189019080838360005b83811015610fff578181015183820152602001610fe7565b50505050905090810190601f16801561102c5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561104e57600080fd5b506104a7600480360360e081101561106557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356130f5565b3480156110ac57600080fd5b5061079d600480360360c08110156110c357600080fd5b506001600160a01b03813581169160ff6020820135811692604083013582169260608101358316926080820135169160a090910135166133c1565b34801561110a57600080fd5b5061079d6004803603604081101561112157600080fd5b506001600160a01b038135811691602001351661383f565b34801561114557600080fd5b5061079d61385c565b34801561115a57600080fd5b506104ef613862565b34801561116f57600080fd5b506104a76004803603602081101561118657600080fd5b50356001600160a01b0316613872565b3480156111a257600080fd5b506104a76139fb565b3480156111b757600080fd5b506104a7613a55565b6018546111f55760186000546006548302816111d857fe5b82546001810184556000938452602090932091900491015561123d565b601860005460065483028161120657fe5b0460186001601880549050038154811061121c57fe5b60009182526020808320909101548454600181018655948352912091019101555b50565b6010546001600160a01b031681565b600954600160c81b900460ff1681565b6019602052600090815260409020805460019091015482565b601e546001146112bc576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600754604080516303e21fa960e61b815290516001600160a01b039092169163f887ea4091600480820192602092909190829003018186803b15801561130657600080fd5b505afa15801561131a573d6000803e3d6000fd5b505050506040513d602081101561133057600080fd5b50516001600160a01b03163314611382576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b60008511806113915750600084115b6113cc5760405162461bcd60e51b81526004018080602001828103825260228152602001806145116022913960400191505060405180910390fd5b6000806113d761184a565b5091509150816001600160701b0316871080156113fc5750806001600160701b031686105b61144d576040805162461bcd60e51b815260206004820152601e60248201527f5870506169723a20494e53554646494349454e545f4c49515549444954590000604482015290519081900360640190fd5b60085460095460009182916001600160a01b0391821691908116908916821480159061148b5750806001600160a01b0316896001600160a01b031614155b6114d1576040805162461bcd60e51b81526020600482015260126024820152715870506169723a20494e56414c49445f544f60701b604482015290519081900360640190fd5b8a156114e2576114e2828a8d613bb0565b89156114f3576114f3818a8c613bb0565b86156115ae57886001600160a01b03166310d1e85c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561159557600080fd5b505af11580156115a9573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156115f457600080fd5b505afa158015611608573d6000803e3d6000fd5b505050506040513d602081101561161e57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561166a57600080fd5b505afa15801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b5051925060009150506001600160701b0385168a900383116116b75760006116c6565b89856001600160701b03160383035b9050600089856001600160701b03160383116116e35760006116f2565b89856001600160701b03160383035b905060008211806117035750600081115b611754576040805162461bcd60e51b815260206004820152601d60248201527f58703a20494e53554646494349454e545f494e5055545f414d4f554e54000000604482015290519081900360640190fd5b601a546001600160701b03808216600160701b9092048116919091021684840210156117ab576040805162461bcd60e51b81526020600482015260016024820152604b60f81b604482015290519081900360640190fd5b6117b784848888613d40565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001601e55505050505050505050565b6011546001600160a01b031681565b60405180604001604052806002815260200161058560f41b81525081565b601a546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b600154604080516303e21fa960e61b815290516000926001600160a01b03169163f887ea40916004808301926020929190829003018186803b1580156118b957600080fd5b505afa1580156118cd573d6000803e3d6000fd5b505050506040513d60208110156118e357600080fd5b50516001600160a01b03848116911614611938576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b611943338484613f02565b5060015b92915050565b6011546001600160a01b0316331461196457600080fd5b42600a55600b805460ff191660ff9586161761ff001916610100948616949094029390931762ff0000191662010000928516929092029190911763ff000000191663010000009190931602919091179055565b6008546001600160a01b031681565b600b5460ff1681565b600a5481565b60005481565b600154604080516303e21fa960e61b815290516000926001600160a01b03169163f887ea40916004808301926020929190829003018186803b158015611a2057600080fd5b505afa158015611a34573d6000803e3d6000fd5b505050506040513d6020811015611a4a57600080fd5b50516001600160a01b03163314611a9c576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b6001600160a01b038416600090815260036020908152604080832033845290915290205460001914611b21576001600160a01b0384166000908152600360209081526040808320338452909152902054611afc908363ffffffff613f6416565b6001600160a01b03851660009081526003602090815260408083203384529091529020555b611b2c848484613fb4565b5060019392505050565b6015805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b820191906000526020600020905b815481529060010190602001808311611b9f57829003601f168201915b505050505081565b600a54611bd057600080fd5b6011546001600160a01b031633148015611bf157506203f480600a54420310155b611bfa57600080fd5b600b546009805460ff60a01b1916600160a01b60ff8085169182029290921760ff60a81b1916600160a81b610100860484169081029190911760ff60b01b1916600160b01b62010000870485169081029190911760ff60b81b1916600160b81b630100000090970485169687021760ff60c01b1916600160c01b9390910160019081018516939093021760ff60c81b1916600160c81b919095019190910190911602919091179055565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60045481565b600954600160c01b900460ff1681565b600b546301000000900460ff1681565b6011546001600160a01b03163314611d0a57600080fd5b611d1660138b8b614453565b50611d2360148989614453565b50611d3060158787614453565b50611d3d60168585614453565b50611d4a60178383614453565b5050505050505050505050565b6016805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b6007546001600160a01b03163314611e05576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b600880546001600160a01b039384166001600160a01b03199182161790915560098054929093169116179055565b601b5481565b601c5481565b60188181548110611e4c57fe5b600091825260209091200154905081565b601854600090611e6f57506000611ec2565b60065433600090815260196020526040902060010154601880546000198101908110611e9757fe5b600091825260208083209091015433835260199091526040909120549190030281611ebe57fe5b0490505b90565b60125481565b601e54600114611f0f576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55601854611f68576040805162461bcd60e51b815260206004820152601860248201527f5870506169723a204e6f7468696e6720746f20436c61696d0000000000000000604482015290519081900360640190fd5b60065433600090815260196020526040812060010154601880549293926000198101908110611f9357fe5b600091825260208083209091015433835260199091526040909120549190030281611fba57fe5b60408051808201825233600090815260026020908152929020548152601880549490930494509290830191906000198101908110611ff457fe5b600091825260208083209091015490925233808252601983526040808320855181559490930151600190940193909355600d80548590039055905190919083908381818185875af1925050503d806000811461206c576040519150601f19603f3d011682016040523d82523d6000602084013e612071565b606091505b50509050806120be576040805162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015290519081900360640190fd5b50506001601e55565b6000601e5460011461210d576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600754604080516303e21fa960e61b815290516001600160a01b039092169163f887ea4091600480820192602092909190829003018186803b15801561215757600080fd5b505afa15801561216b573d6000803e3d6000fd5b505050506040513d602081101561218157600080fd5b50516001600160a01b031633146121d3576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b6000806121de61184a565b50600854604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b5051600954604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156122af57600080fd5b505afa1580156122c3573d6000803e3d6000fd5b505050506040513d60208110156122d957600080fd5b5051905060006122f8836001600160701b03871663ffffffff613f6416565b90506000612315836001600160701b03871663ffffffff613f6416565b90506000612323878761406e565b60005490915080612374576040805162461bcd60e51b8152602060048201526016602482015275155cd948199a5c9cdd17db5a5b9d081a5b9cdd19585960521b604482015290519081900360640190fd5b6123c06001600160701b038916612391868463ffffffff6141cc16565b8161239857fe5b046001600160701b0389166123b3868563ffffffff6141cc16565b816123ba57fe5b0461422f565b9850600089116124015760405162461bcd60e51b81526004018080602001828103825260258152602001806144ec6025913960400191505060405180910390fd5b61240b8a8a614247565b61241786868a8a613d40565b811561244757601a54612443906001600160701b0380821691600160701b90041663ffffffff6141cc16565b601d555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001601e5550949695505050505050565b600e5481565b600954600160a01b900460ff1681565b60026020526000908152604090205481565b6011546001600160a01b031633146124d357600080fd5b42600e55601080546001600160a01b0319166001600160a01b0392909216919091179055565b601d5481565b600b54610100900460ff1681565b600b5462010000900460ff1681565b60056020526000908152604090205481565b600080601e54600114612575576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600754604080516303e21fa960e61b815290516001600160a01b039092169163f887ea4091600480820192602092909190829003018186803b1580156125bf57600080fd5b505afa1580156125d3573d6000803e3d6000fd5b505050506040513d60208110156125e957600080fd5b50516001600160a01b0316331461263b576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b6206978060125442031015612697576040805162461bcd60e51b815260206004820152601960248201527f5870506169723a20464f5242494444454e2052554750554c4c00000000000000604482015290519081900360640190fd5b6000806126a261184a565b50600854600954604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156126fe57600080fd5b505afa158015612712573d6000803e3d6000fd5b505050506040513d602081101561272857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561277657600080fd5b505afa15801561278a573d6000803e3d6000fd5b505050506040513d60208110156127a057600080fd5b5051306000908152600260205260408120549192506127bf888861406e565b600054909150806127d6848763ffffffff6141cc16565b816127dd57fe5b049a50806127f1848663ffffffff6141cc16565b816127f857fe5b04995060008b11801561280b575060008a115b6128465760405162461bcd60e51b81526004018080602001828103825260258152602001806145336025913960400191505060405180910390fd5b61285030846142dd565b61285b878d8d613bb0565b612866868d8c613bb0565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156128ac57600080fd5b505afa1580156128c0573d6000803e3d6000fd5b505050506040513d60208110156128d657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561292257600080fd5b505afa158015612936573d6000803e3d6000fd5b505050506040513d602081101561294c57600080fd5b5051935061295c85858b8b613d40565b811561298c57601a54612988906001600160701b0380821691600160701b90041663ffffffff6141cc16565b601d555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001601e81905550915091565b600f546001600160a01b031681565b60405180604001604052806005815260200164058502d4c560dc1b81525081565b600d5481565b600061dead6001600160a01b03841614612afe57600160009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8257600080fd5b505afa158015612a96573d6000803e3d6000fd5b505050506040513d6020811015612aac57600080fd5b50516001600160a01b03163314612afe576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b611943338484613fb4565b6014805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b6013805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b6011546001600160a01b03163314612bd657600080fd5b601180546001600160a01b03191661dead179055565b6103e881565b601e54600114612c36576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600854600954601a54604080516370a0823160e01b815230600482015290516001600160a01b039485169490931692612ce59285928792612ce0926001600160701b03169185916370a0823191602480820192602092909190829003018186803b158015612ca857600080fd5b505afa158015612cbc573d6000803e3d6000fd5b505050506040513d6020811015612cd257600080fd5b50519063ffffffff613f6416565b613bb0565b601a54604080516370a0823160e01b81523060048201529051612d4c9284928792612ce092600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015612ca857600080fd5b50506001601e5550565b6007546001600160a01b031681565b600954600160a81b900460ff1681565b600954600160b01b900460ff1681565b600f546001600160a01b031690565b6017805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b6009546001600160a01b031681565b606080606080606060136014601560166017848054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ea55780601f10612e7a57610100808354040283529160200191612ea5565b820191906000526020600020905b815481529060010190602001808311612e8857829003601f168201915b5050875460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152959a5089945092508401905082828015612f335780601f10612f0857610100808354040283529160200191612f33565b820191906000526020600020905b815481529060010190602001808311612f1657829003601f168201915b5050865460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815295995088945092508401905082828015612fc15780601f10612f9657610100808354040283529160200191612fc1565b820191906000526020600020905b815481529060010190602001808311612fa457829003601f168201915b5050855460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529598508794509250840190508282801561304f5780601f106130245761010080835404028352916020019161304f565b820191906000526020600020905b81548152906001019060200180831161303257829003601f168201915b5050845460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152959750869450925084019050828280156130dd5780601f106130b2576101008083540402835291602001916130dd565b820191906000526020600020905b8154815290600101906020018083116130c057829003601f168201915b50505050509050945094509450945094509091929394565b4284101561313c576040805162461bcd60e51b815260206004820152600f60248201526e161c14185a5c8e8811561412549151608a1b604482015290519081900360640190fd5b600160009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b15801561318a57600080fd5b505afa15801561319e573d6000803e3d6000fd5b505050506040513d60208110156131b457600080fd5b50516001600160a01b03878116911614613209576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b6004546001600160a01b0380891660008181526005602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015613324573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061335a5750886001600160a01b0316816001600160a01b0316145b6133ab576040805162461bcd60e51b815260206004820152601960248201527f5870506169723a20494e56414c49445f5349474e415455524500000000000000604482015290519081900360640190fd5b6133b6898989613f02565b505050505050505050565b6000601e54600114613407576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600754604080516303e21fa960e61b815290516001600160a01b039092169163f887ea4091600480820192602092909190829003018186803b15801561345157600080fd5b505afa158015613465573d6000803e3d6000fd5b505050506040513d602081101561347b57600080fd5b50516001600160a01b031633146134cd576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b6000806134d861184a565b50600854604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561352c57600080fd5b505afa158015613540573d6000803e3d6000fd5b505050506040513d602081101561355657600080fd5b5051600954604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156135a957600080fd5b505afa1580156135bd573d6000803e3d6000fd5b505050506040513d60208110156135d357600080fd5b5051905060006135f2836001600160701b03871663ffffffff613f6416565b9050600061360f836001600160701b03871663ffffffff613f6416565b9050600061361d878761406e565b600054909150801561362e57600080fd5b6136586103e861364c613647878763ffffffff6141cc16565b61437b565b9063ffffffff613f6416565b985061366760006103e8614247565b8e601160006101000a8154816001600160a01b0302191690836001600160a01b031602179055504260128190555089600f60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508d600960146101000a81548160ff021916908360ff1602179055508c600960156101000a81548160ff021916908360ff1602179055508b600960166101000a81548160ff021916908360ff1602179055508a600960176101000a81548160ff021916908360ff1602179055508b8e01600101600960186101000a81548160ff021916908360ff1602179055508a8d01600101600960196101000a81548160ff021916908360ff160217905550600089116137a75760405162461bcd60e51b81526004018080602001828103825260258152602001806144ec6025913960400191505060405180910390fd5b6137b18f8a614247565b6137bd86868a8a613d40565b81156137ed57601a546137e9906001600160701b0380821691600160701b90041663ffffffff6141cc16565b601d555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001601e5550949b9a5050505050505050505050565b600360209081526000928352604080842090915290825290205481565b600c5481565b600954600160b81b900460ff1681565b600760009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b1580156138c057600080fd5b505afa1580156138d4573d6000803e3d6000fd5b505050506040513d60208110156138ea57600080fd5b50516001600160a01b0316331461393c576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b60185461398a576040805180820182526001600160a01b038316600081815260026020908152848220548452808401828152928252601990529290922090518155905160019091015561123d565b6040805180820182526001600160a01b03831660009081526002602090815292902054815260188054919283019160001981019081106139c657fe5b60009182526020808320909101549092526001600160a01b038416815260198252604090208251815591015160019091015550565b600e54613a0757600080fd5b6011546001600160a01b031633148015613a2857506203f480600e54420310155b613a3157600080fd5b601054600f80546001600160a01b0319166001600160a01b03909216919091179055565b601e54600114613a99576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600854604080516370a0823160e01b81523060048201529051613ba9926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613aea57600080fd5b505afa158015613afe573d6000803e3d6000fd5b505050506040513d6020811015613b1457600080fd5b5051600954604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015613b6157600080fd5b505afa158015613b75573d6000803e3d6000fd5b505050506040513d6020811015613b8b57600080fd5b5051601a546001600160701b0380821691600160701b900416613d40565b6001601e55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613c5d5780518252601f199092019160209182019101613c3e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cbf576040519150601f19603f3d011682016040523d82523d6000602084013e613cc4565b606091505b5091509150818015613cf2575080511580613cf25750808060200190516020811015613cef57600080fd5b50515b613d39576040805162461bcd60e51b8152602060048201526013602482015272161c0e881514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b5050505050565b6001600160701b038411801590613d5e57506001600160701b038311155b613da2576040805162461bcd60e51b815260206004820152601060248201526f5870506169723a204f564552464c4f5760801b604482015290519081900360640190fd5b601a5463ffffffff42811691600160e01b90048116820390811615801590613dd257506001600160701b03841615155b8015613de657506001600160701b03831615155b15613e57578063ffffffff16613e1485613dff866143cd565b6001600160e01b03169063ffffffff6143df16565b601b80546001600160e01b03929092169290920201905563ffffffff8116613e3f84613dff876143cd565b601c80546001600160e01b0392909216929092020190555b601a80546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115611947576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260026020526040902054613fdd908263ffffffff613f6416565b6001600160a01b038085166000908152600260205260408082209390935590841681522054614012908263ffffffff61440416565b6001600160a01b0380841660008181526002602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600760009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156140bf57600080fd5b505afa1580156140d3573d6000803e3d6000fd5b505050506040513d60208110156140e957600080fd5b5051601d546001600160a01b0382161580159450919250906141b85780156141b357600061412c6136476001600160701b0388811690881663ffffffff6141cc16565b905060006141398361437b565b9050808211156141b0576000614167614158848463ffffffff613f6416565b6000549063ffffffff6141cc16565b9050600061418c8361418086600563ffffffff6141cc16565b9063ffffffff61440416565b9050600081838161419957fe5b04905080156141ac576141ac8782614247565b5050505b50505b6141c4565b80156141c4576000601d555b505092915050565b60008115806141e7575050808202828282816141e457fe5b04145b611947576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b600081831061423e5781614240565b825b9392505050565b60005461425a908263ffffffff61440416565b60009081556001600160a01b038316815260026020526040902054614285908263ffffffff61440416565b6001600160a01b03831660008181526002602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216600090815260026020526040902054614306908263ffffffff613f6416565b6001600160a01b03831660009081526002602052604081209190915554614333908263ffffffff613f6416565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b600060038211156143be575080600160028204015b818110156143b8578091506002818285816143a757fe5b0401816143b057fe5b049050614390565b506143c8565b81156143c8575060015b919050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b038416816143fc57fe5b049392505050565b80820182811015611947576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106144945782800160ff198235161785556144c1565b828001600101855582156144c1579182015b828111156144c15782358255916020019190600101906144a6565b506144cd9291506144d1565b5090565b611ec291905b808211156144cd57600081556001016144d756fe5870506169723a20494e53554646494349454e545f4c49515549444954595f4d494e5445445870506169723a20494e53554646494349454e545f4f55545055545f414d4f554e545870506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a723158208553e0a8f007e29c6e39b6b73f8097f704a390c1b2031f3efc896ae77ee68f3b64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429
Deployed Bytecode
0x6080604052600436106103c15760003560e01c80636fd3acb4116101f2578063bc25cf771161010d578063d505accf116100a0578063e2a7797e1161006f578063e2a7797e1461114e578063ef70768a14611163578063f079399714611196578063fff6cae9146111ab576103c1565b8063d505accf14611042578063dc2dc3f3146110a0578063dd62ed3e146110fe578063e29eb83614611139576103c1565b8063ccec72fb116100dc578063ccec72fb14610dde578063d170755114610df3578063d21220a714610e08578063d2f2ea8a14610e1d576103c1565b8063bc25cf7714610d6c578063c45a015514610d9f578063c7b8b46d14610db4578063cc2b765714610dc9576103c1565b80638ce7442611610185578063aba8315011610154578063aba8315014610d18578063abb5ca0914610d2d578063b15be2f514610d42578063ba9a7a5614610d57576103c1565b80638ce7442614610ca057806395d89b4114610cb557806396365d4414610cca578063a9059cbb14610cdf576103c1565b80637a91ae74116101c15780637a91ae7414610c105780637dd2b0ad14610c255780637ecebe0014610c3a57806389afcb4414610c6d576103c1565b80636fd3acb414610b8057806370a0823114610b95578063727a573c14610bc85780637464fc3d14610bfb576103c1565b806330adf81f116102e25780635909c0d51161027557806365008cd61161024457806365008cd614610b0e578063666da64f14610b235780636a62784214610b385780636dd240a514610b6b576103c1565b80635909c0d514610aa55780635a3d549314610aba5780635cb1ccec14610acf57806361047d3314610af9576103c1565b8063371db133116102b1578063371db133146108855780633b84e9971461089a578063434beeaf14610a55578063485cc95514610a6a576103c1565b806330adf81f14610831578063313ce567146108465780633644e5151461085b5780633705b39214610870576103c1565b80630aa75f6b1161035a57806318160ddd1161032957806318160ddd146107af57806323b872dd146107c457806325e6f516146108075780632ee9e82b1461081c576103c1565b80630aa75f6b146107195780630dfe16811461075e57806312ed704d14610773578063163258b214610788576103c1565b806302d05d3f1161039657806302d05d3f146105e857806306fdde03146105fd5780630902f1ac14610687578063095ea7b3146106cc576103c1565b806273010d146104a9578062afb325146104da578063018d0f8d14610505578063022c0d9f14610551575b600760009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b15801561040f57600080fd5b505afa158015610423573d6000803e3d6000fd5b505050506040513d602081101561043957600080fd5b50516001600160a01b0316331461048b576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b600d805434908101909155600c8054820190556104a7906111c0565b005b3480156104b557600080fd5b506104be611240565b604080516001600160a01b039092168252519081900360200190f35b3480156104e657600080fd5b506104ef61124f565b6040805160ff9092168252519081900360200190f35b34801561051157600080fd5b506105386004803603602081101561052857600080fd5b50356001600160a01b031661125f565b6040805192835260208301919091528051918290030190f35b34801561055d57600080fd5b506104a76004803603608081101561057457600080fd5b8135916020810135916001600160a01b036040830135169190810190608081016060820135600160201b8111156105aa57600080fd5b8201836020820111156105bc57600080fd5b803590602001918460018302840111600160201b831117156105dd57600080fd5b509092509050611278565b3480156105f457600080fd5b506104be61181d565b34801561060957600080fd5b5061061261182c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561064c578181015183820152602001610634565b50505050905090810190601f1680156106795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561069357600080fd5b5061069c61184a565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b3480156106d857600080fd5b50610705600480360360408110156106ef57600080fd5b506001600160a01b038135169060200135611874565b604080519115158252519081900360200190f35b34801561072557600080fd5b506104a76004803603608081101561073c57600080fd5b5060ff813581169160208101358216916040820135811691606001351661194d565b34801561076a57600080fd5b506104be6119b7565b34801561077f57600080fd5b506104ef6119c6565b34801561079457600080fd5b5061079d6119cf565b60408051918252519081900360200190f35b3480156107bb57600080fd5b5061079d6119d5565b3480156107d057600080fd5b50610705600480360360608110156107e757600080fd5b506001600160a01b038135811691602081013590911690604001356119db565b34801561081357600080fd5b50610612611b36565b34801561082857600080fd5b506104a7611bc4565b34801561083d57600080fd5b5061079d611ca4565b34801561085257600080fd5b506104ef611cc8565b34801561086757600080fd5b5061079d611ccd565b34801561087c57600080fd5b506104ef611cd3565b34801561089157600080fd5b506104ef611ce3565b3480156108a657600080fd5b506104a7600480360360a08110156108bd57600080fd5b810190602081018135600160201b8111156108d757600080fd5b8201836020820111156108e957600080fd5b803590602001918460018302840111600160201b8311171561090a57600080fd5b919390929091602081019035600160201b81111561092757600080fd5b82018360208201111561093957600080fd5b803590602001918460018302840111600160201b8311171561095a57600080fd5b919390929091602081019035600160201b81111561097757600080fd5b82018360208201111561098957600080fd5b803590602001918460018302840111600160201b831117156109aa57600080fd5b919390929091602081019035600160201b8111156109c757600080fd5b8201836020820111156109d957600080fd5b803590602001918460018302840111600160201b831117156109fa57600080fd5b919390929091602081019035600160201b811115610a1757600080fd5b820183602082011115610a2957600080fd5b803590602001918460018302840111600160201b83111715610a4a57600080fd5b509092509050611cf3565b348015610a6157600080fd5b50610612611d57565b348015610a7657600080fd5b506104a760048036036040811015610a8d57600080fd5b506001600160a01b0381358116916020013516611db2565b348015610ab157600080fd5b5061079d611e33565b348015610ac657600080fd5b5061079d611e39565b348015610adb57600080fd5b5061079d60048036036020811015610af257600080fd5b5035611e3f565b348015610b0557600080fd5b5061079d611e5d565b348015610b1a57600080fd5b5061079d611ec5565b348015610b2f57600080fd5b506104a7611ecb565b348015610b4457600080fd5b5061079d60048036036020811015610b5b57600080fd5b50356001600160a01b03166120c7565b348015610b7757600080fd5b5061079d612494565b348015610b8c57600080fd5b506104ef61249a565b348015610ba157600080fd5b5061079d60048036036020811015610bb857600080fd5b50356001600160a01b03166124aa565b348015610bd457600080fd5b506104a760048036036020811015610beb57600080fd5b50356001600160a01b03166124bc565b348015610c0757600080fd5b5061079d6124f9565b348015610c1c57600080fd5b506104ef6124ff565b348015610c3157600080fd5b506104ef61250d565b348015610c4657600080fd5b5061079d60048036036020811015610c5d57600080fd5b50356001600160a01b031661251c565b348015610c7957600080fd5b5061053860048036036020811015610c9057600080fd5b50356001600160a01b031661252e565b348015610cac57600080fd5b506104be6129ea565b348015610cc157600080fd5b506106126129f9565b348015610cd657600080fd5b5061079d612a1a565b348015610ceb57600080fd5b5061070560048036036040811015610d0257600080fd5b506001600160a01b038135169060200135612a20565b348015610d2457600080fd5b50610612612b09565b348015610d3957600080fd5b50610612612b64565b348015610d4e57600080fd5b506104a7612bbf565b348015610d6357600080fd5b5061079d612bec565b348015610d7857600080fd5b506104a760048036036020811015610d8f57600080fd5b50356001600160a01b0316612bf2565b348015610dab57600080fd5b506104be612d56565b348015610dc057600080fd5b506104ef612d65565b348015610dd557600080fd5b506104ef612d75565b348015610dea57600080fd5b506104be612d85565b348015610dff57600080fd5b50610612612d94565b348015610e1457600080fd5b506104be612def565b348015610e2957600080fd5b50610e32612dfe565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019080838360005b83811015610e7f578181015183820152602001610e67565b50505050905090810190601f168015610eac5780820380516001836020036101000a031916815260200191505b5086810385528a5181528a516020918201918c019080838360005b83811015610edf578181015183820152602001610ec7565b50505050905090810190601f168015610f0c5780820380516001836020036101000a031916815260200191505b5086810384528951815289516020918201918b019080838360005b83811015610f3f578181015183820152602001610f27565b50505050905090810190601f168015610f6c5780820380516001836020036101000a031916815260200191505b5086810383528851815288516020918201918a019080838360005b83811015610f9f578181015183820152602001610f87565b50505050905090810190601f168015610fcc5780820380516001836020036101000a031916815260200191505b50868103825287518152875160209182019189019080838360005b83811015610fff578181015183820152602001610fe7565b50505050905090810190601f16801561102c5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561104e57600080fd5b506104a7600480360360e081101561106557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356130f5565b3480156110ac57600080fd5b5061079d600480360360c08110156110c357600080fd5b506001600160a01b03813581169160ff6020820135811692604083013582169260608101358316926080820135169160a090910135166133c1565b34801561110a57600080fd5b5061079d6004803603604081101561112157600080fd5b506001600160a01b038135811691602001351661383f565b34801561114557600080fd5b5061079d61385c565b34801561115a57600080fd5b506104ef613862565b34801561116f57600080fd5b506104a76004803603602081101561118657600080fd5b50356001600160a01b0316613872565b3480156111a257600080fd5b506104a76139fb565b3480156111b757600080fd5b506104a7613a55565b6018546111f55760186000546006548302816111d857fe5b82546001810184556000938452602090932091900491015561123d565b601860005460065483028161120657fe5b0460186001601880549050038154811061121c57fe5b60009182526020808320909101548454600181018655948352912091019101555b50565b6010546001600160a01b031681565b600954600160c81b900460ff1681565b6019602052600090815260409020805460019091015482565b601e546001146112bc576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600754604080516303e21fa960e61b815290516001600160a01b039092169163f887ea4091600480820192602092909190829003018186803b15801561130657600080fd5b505afa15801561131a573d6000803e3d6000fd5b505050506040513d602081101561133057600080fd5b50516001600160a01b03163314611382576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b60008511806113915750600084115b6113cc5760405162461bcd60e51b81526004018080602001828103825260228152602001806145116022913960400191505060405180910390fd5b6000806113d761184a565b5091509150816001600160701b0316871080156113fc5750806001600160701b031686105b61144d576040805162461bcd60e51b815260206004820152601e60248201527f5870506169723a20494e53554646494349454e545f4c49515549444954590000604482015290519081900360640190fd5b60085460095460009182916001600160a01b0391821691908116908916821480159061148b5750806001600160a01b0316896001600160a01b031614155b6114d1576040805162461bcd60e51b81526020600482015260126024820152715870506169723a20494e56414c49445f544f60701b604482015290519081900360640190fd5b8a156114e2576114e2828a8d613bb0565b89156114f3576114f3818a8c613bb0565b86156115ae57886001600160a01b03166310d1e85c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561159557600080fd5b505af11580156115a9573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156115f457600080fd5b505afa158015611608573d6000803e3d6000fd5b505050506040513d602081101561161e57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561166a57600080fd5b505afa15801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b5051925060009150506001600160701b0385168a900383116116b75760006116c6565b89856001600160701b03160383035b9050600089856001600160701b03160383116116e35760006116f2565b89856001600160701b03160383035b905060008211806117035750600081115b611754576040805162461bcd60e51b815260206004820152601d60248201527f58703a20494e53554646494349454e545f494e5055545f414d4f554e54000000604482015290519081900360640190fd5b601a546001600160701b03808216600160701b9092048116919091021684840210156117ab576040805162461bcd60e51b81526020600482015260016024820152604b60f81b604482015290519081900360640190fd5b6117b784848888613d40565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001601e55505050505050505050565b6011546001600160a01b031681565b60405180604001604052806002815260200161058560f41b81525081565b601a546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b600154604080516303e21fa960e61b815290516000926001600160a01b03169163f887ea40916004808301926020929190829003018186803b1580156118b957600080fd5b505afa1580156118cd573d6000803e3d6000fd5b505050506040513d60208110156118e357600080fd5b50516001600160a01b03848116911614611938576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b611943338484613f02565b5060015b92915050565b6011546001600160a01b0316331461196457600080fd5b42600a55600b805460ff191660ff9586161761ff001916610100948616949094029390931762ff0000191662010000928516929092029190911763ff000000191663010000009190931602919091179055565b6008546001600160a01b031681565b600b5460ff1681565b600a5481565b60005481565b600154604080516303e21fa960e61b815290516000926001600160a01b03169163f887ea40916004808301926020929190829003018186803b158015611a2057600080fd5b505afa158015611a34573d6000803e3d6000fd5b505050506040513d6020811015611a4a57600080fd5b50516001600160a01b03163314611a9c576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b6001600160a01b038416600090815260036020908152604080832033845290915290205460001914611b21576001600160a01b0384166000908152600360209081526040808320338452909152902054611afc908363ffffffff613f6416565b6001600160a01b03851660009081526003602090815260408083203384529091529020555b611b2c848484613fb4565b5060019392505050565b6015805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b820191906000526020600020905b815481529060010190602001808311611b9f57829003601f168201915b505050505081565b600a54611bd057600080fd5b6011546001600160a01b031633148015611bf157506203f480600a54420310155b611bfa57600080fd5b600b546009805460ff60a01b1916600160a01b60ff8085169182029290921760ff60a81b1916600160a81b610100860484169081029190911760ff60b01b1916600160b01b62010000870485169081029190911760ff60b81b1916600160b81b630100000090970485169687021760ff60c01b1916600160c01b9390910160019081018516939093021760ff60c81b1916600160c81b919095019190910190911602919091179055565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60045481565b600954600160c01b900460ff1681565b600b546301000000900460ff1681565b6011546001600160a01b03163314611d0a57600080fd5b611d1660138b8b614453565b50611d2360148989614453565b50611d3060158787614453565b50611d3d60168585614453565b50611d4a60178383614453565b5050505050505050505050565b6016805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b6007546001600160a01b03163314611e05576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b600880546001600160a01b039384166001600160a01b03199182161790915560098054929093169116179055565b601b5481565b601c5481565b60188181548110611e4c57fe5b600091825260209091200154905081565b601854600090611e6f57506000611ec2565b60065433600090815260196020526040902060010154601880546000198101908110611e9757fe5b600091825260208083209091015433835260199091526040909120549190030281611ebe57fe5b0490505b90565b60125481565b601e54600114611f0f576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55601854611f68576040805162461bcd60e51b815260206004820152601860248201527f5870506169723a204e6f7468696e6720746f20436c61696d0000000000000000604482015290519081900360640190fd5b60065433600090815260196020526040812060010154601880549293926000198101908110611f9357fe5b600091825260208083209091015433835260199091526040909120549190030281611fba57fe5b60408051808201825233600090815260026020908152929020548152601880549490930494509290830191906000198101908110611ff457fe5b600091825260208083209091015490925233808252601983526040808320855181559490930151600190940193909355600d80548590039055905190919083908381818185875af1925050503d806000811461206c576040519150601f19603f3d011682016040523d82523d6000602084013e612071565b606091505b50509050806120be576040805162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015290519081900360640190fd5b50506001601e55565b6000601e5460011461210d576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600754604080516303e21fa960e61b815290516001600160a01b039092169163f887ea4091600480820192602092909190829003018186803b15801561215757600080fd5b505afa15801561216b573d6000803e3d6000fd5b505050506040513d602081101561218157600080fd5b50516001600160a01b031633146121d3576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b6000806121de61184a565b50600854604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d602081101561225c57600080fd5b5051600954604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156122af57600080fd5b505afa1580156122c3573d6000803e3d6000fd5b505050506040513d60208110156122d957600080fd5b5051905060006122f8836001600160701b03871663ffffffff613f6416565b90506000612315836001600160701b03871663ffffffff613f6416565b90506000612323878761406e565b60005490915080612374576040805162461bcd60e51b8152602060048201526016602482015275155cd948199a5c9cdd17db5a5b9d081a5b9cdd19585960521b604482015290519081900360640190fd5b6123c06001600160701b038916612391868463ffffffff6141cc16565b8161239857fe5b046001600160701b0389166123b3868563ffffffff6141cc16565b816123ba57fe5b0461422f565b9850600089116124015760405162461bcd60e51b81526004018080602001828103825260258152602001806144ec6025913960400191505060405180910390fd5b61240b8a8a614247565b61241786868a8a613d40565b811561244757601a54612443906001600160701b0380821691600160701b90041663ffffffff6141cc16565b601d555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001601e5550949695505050505050565b600e5481565b600954600160a01b900460ff1681565b60026020526000908152604090205481565b6011546001600160a01b031633146124d357600080fd5b42600e55601080546001600160a01b0319166001600160a01b0392909216919091179055565b601d5481565b600b54610100900460ff1681565b600b5462010000900460ff1681565b60056020526000908152604090205481565b600080601e54600114612575576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600754604080516303e21fa960e61b815290516001600160a01b039092169163f887ea4091600480820192602092909190829003018186803b1580156125bf57600080fd5b505afa1580156125d3573d6000803e3d6000fd5b505050506040513d60208110156125e957600080fd5b50516001600160a01b0316331461263b576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b6206978060125442031015612697576040805162461bcd60e51b815260206004820152601960248201527f5870506169723a20464f5242494444454e2052554750554c4c00000000000000604482015290519081900360640190fd5b6000806126a261184a565b50600854600954604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156126fe57600080fd5b505afa158015612712573d6000803e3d6000fd5b505050506040513d602081101561272857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561277657600080fd5b505afa15801561278a573d6000803e3d6000fd5b505050506040513d60208110156127a057600080fd5b5051306000908152600260205260408120549192506127bf888861406e565b600054909150806127d6848763ffffffff6141cc16565b816127dd57fe5b049a50806127f1848663ffffffff6141cc16565b816127f857fe5b04995060008b11801561280b575060008a115b6128465760405162461bcd60e51b81526004018080602001828103825260258152602001806145336025913960400191505060405180910390fd5b61285030846142dd565b61285b878d8d613bb0565b612866868d8c613bb0565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156128ac57600080fd5b505afa1580156128c0573d6000803e3d6000fd5b505050506040513d60208110156128d657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561292257600080fd5b505afa158015612936573d6000803e3d6000fd5b505050506040513d602081101561294c57600080fd5b5051935061295c85858b8b613d40565b811561298c57601a54612988906001600160701b0380821691600160701b90041663ffffffff6141cc16565b601d555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001601e81905550915091565b600f546001600160a01b031681565b60405180604001604052806005815260200164058502d4c560dc1b81525081565b600d5481565b600061dead6001600160a01b03841614612afe57600160009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8257600080fd5b505afa158015612a96573d6000803e3d6000fd5b505050506040513d6020811015612aac57600080fd5b50516001600160a01b03163314612afe576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b611943338484613fb4565b6014805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b6013805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b6011546001600160a01b03163314612bd657600080fd5b601180546001600160a01b03191661dead179055565b6103e881565b601e54600114612c36576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600854600954601a54604080516370a0823160e01b815230600482015290516001600160a01b039485169490931692612ce59285928792612ce0926001600160701b03169185916370a0823191602480820192602092909190829003018186803b158015612ca857600080fd5b505afa158015612cbc573d6000803e3d6000fd5b505050506040513d6020811015612cd257600080fd5b50519063ffffffff613f6416565b613bb0565b601a54604080516370a0823160e01b81523060048201529051612d4c9284928792612ce092600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015612ca857600080fd5b50506001601e5550565b6007546001600160a01b031681565b600954600160a81b900460ff1681565b600954600160b01b900460ff1681565b600f546001600160a01b031690565b6017805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b6009546001600160a01b031681565b606080606080606060136014601560166017848054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ea55780601f10612e7a57610100808354040283529160200191612ea5565b820191906000526020600020905b815481529060010190602001808311612e8857829003601f168201915b5050875460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152959a5089945092508401905082828015612f335780601f10612f0857610100808354040283529160200191612f33565b820191906000526020600020905b815481529060010190602001808311612f1657829003601f168201915b5050865460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815295995088945092508401905082828015612fc15780601f10612f9657610100808354040283529160200191612fc1565b820191906000526020600020905b815481529060010190602001808311612fa457829003601f168201915b5050855460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529598508794509250840190508282801561304f5780601f106130245761010080835404028352916020019161304f565b820191906000526020600020905b81548152906001019060200180831161303257829003601f168201915b5050845460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152959750869450925084019050828280156130dd5780601f106130b2576101008083540402835291602001916130dd565b820191906000526020600020905b8154815290600101906020018083116130c057829003601f168201915b50505050509050945094509450945094509091929394565b4284101561313c576040805162461bcd60e51b815260206004820152600f60248201526e161c14185a5c8e8811561412549151608a1b604482015290519081900360640190fd5b600160009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b15801561318a57600080fd5b505afa15801561319e573d6000803e3d6000fd5b505050506040513d60208110156131b457600080fd5b50516001600160a01b03878116911614613209576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b6004546001600160a01b0380891660008181526005602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015613324573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061335a5750886001600160a01b0316816001600160a01b0316145b6133ab576040805162461bcd60e51b815260206004820152601960248201527f5870506169723a20494e56414c49445f5349474e415455524500000000000000604482015290519081900360640190fd5b6133b6898989613f02565b505050505050505050565b6000601e54600114613407576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600754604080516303e21fa960e61b815290516001600160a01b039092169163f887ea4091600480820192602092909190829003018186803b15801561345157600080fd5b505afa158015613465573d6000803e3d6000fd5b505050506040513d602081101561347b57600080fd5b50516001600160a01b031633146134cd576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b6000806134d861184a565b50600854604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561352c57600080fd5b505afa158015613540573d6000803e3d6000fd5b505050506040513d602081101561355657600080fd5b5051600954604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156135a957600080fd5b505afa1580156135bd573d6000803e3d6000fd5b505050506040513d60208110156135d357600080fd5b5051905060006135f2836001600160701b03871663ffffffff613f6416565b9050600061360f836001600160701b03871663ffffffff613f6416565b9050600061361d878761406e565b600054909150801561362e57600080fd5b6136586103e861364c613647878763ffffffff6141cc16565b61437b565b9063ffffffff613f6416565b985061366760006103e8614247565b8e601160006101000a8154816001600160a01b0302191690836001600160a01b031602179055504260128190555089600f60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508d600960146101000a81548160ff021916908360ff1602179055508c600960156101000a81548160ff021916908360ff1602179055508b600960166101000a81548160ff021916908360ff1602179055508a600960176101000a81548160ff021916908360ff1602179055508b8e01600101600960186101000a81548160ff021916908360ff1602179055508a8d01600101600960196101000a81548160ff021916908360ff160217905550600089116137a75760405162461bcd60e51b81526004018080602001828103825260258152602001806144ec6025913960400191505060405180910390fd5b6137b18f8a614247565b6137bd86868a8a613d40565b81156137ed57601a546137e9906001600160701b0380821691600160701b90041663ffffffff6141cc16565b601d555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001601e5550949b9a5050505050505050505050565b600360209081526000928352604080842090915290825290205481565b600c5481565b600954600160b81b900460ff1681565b600760009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b1580156138c057600080fd5b505afa1580156138d4573d6000803e3d6000fd5b505050506040513d60208110156138ea57600080fd5b50516001600160a01b0316331461393c576040805162461bcd60e51b81526020600482015260116024820152702c382830b4b91d102327a92124a22222a760791b604482015290519081900360640190fd5b60185461398a576040805180820182526001600160a01b038316600081815260026020908152848220548452808401828152928252601990529290922090518155905160019091015561123d565b6040805180820182526001600160a01b03831660009081526002602090815292902054815260188054919283019160001981019081106139c657fe5b60009182526020808320909101549092526001600160a01b038416815260198252604090208251815591015160019091015550565b600e54613a0757600080fd5b6011546001600160a01b031633148015613a2857506203f480600e54420310155b613a3157600080fd5b601054600f80546001600160a01b0319166001600160a01b03909216919091179055565b601e54600114613a99576040805162461bcd60e51b815260206004820152600a602482015269161c0e881313d0d2d15160b21b604482015290519081900360640190fd5b6000601e55600854604080516370a0823160e01b81523060048201529051613ba9926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613aea57600080fd5b505afa158015613afe573d6000803e3d6000fd5b505050506040513d6020811015613b1457600080fd5b5051600954604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015613b6157600080fd5b505afa158015613b75573d6000803e3d6000fd5b505050506040513d6020811015613b8b57600080fd5b5051601a546001600160701b0380821691600160701b900416613d40565b6001601e55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613c5d5780518252601f199092019160209182019101613c3e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cbf576040519150601f19603f3d011682016040523d82523d6000602084013e613cc4565b606091505b5091509150818015613cf2575080511580613cf25750808060200190516020811015613cef57600080fd5b50515b613d39576040805162461bcd60e51b8152602060048201526013602482015272161c0e881514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b5050505050565b6001600160701b038411801590613d5e57506001600160701b038311155b613da2576040805162461bcd60e51b815260206004820152601060248201526f5870506169723a204f564552464c4f5760801b604482015290519081900360640190fd5b601a5463ffffffff42811691600160e01b90048116820390811615801590613dd257506001600160701b03841615155b8015613de657506001600160701b03831615155b15613e57578063ffffffff16613e1485613dff866143cd565b6001600160e01b03169063ffffffff6143df16565b601b80546001600160e01b03929092169290920201905563ffffffff8116613e3f84613dff876143cd565b601c80546001600160e01b0392909216929092020190555b601a80546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115611947576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260026020526040902054613fdd908263ffffffff613f6416565b6001600160a01b038085166000908152600260205260408082209390935590841681522054614012908263ffffffff61440416565b6001600160a01b0380841660008181526002602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600760009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156140bf57600080fd5b505afa1580156140d3573d6000803e3d6000fd5b505050506040513d60208110156140e957600080fd5b5051601d546001600160a01b0382161580159450919250906141b85780156141b357600061412c6136476001600160701b0388811690881663ffffffff6141cc16565b905060006141398361437b565b9050808211156141b0576000614167614158848463ffffffff613f6416565b6000549063ffffffff6141cc16565b9050600061418c8361418086600563ffffffff6141cc16565b9063ffffffff61440416565b9050600081838161419957fe5b04905080156141ac576141ac8782614247565b5050505b50505b6141c4565b80156141c4576000601d555b505092915050565b60008115806141e7575050808202828282816141e457fe5b04145b611947576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b600081831061423e5781614240565b825b9392505050565b60005461425a908263ffffffff61440416565b60009081556001600160a01b038316815260026020526040902054614285908263ffffffff61440416565b6001600160a01b03831660008181526002602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216600090815260026020526040902054614306908263ffffffff613f6416565b6001600160a01b03831660009081526002602052604081209190915554614333908263ffffffff613f6416565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b600060038211156143be575080600160028204015b818110156143b8578091506002818285816143a757fe5b0401816143b057fe5b049050614390565b506143c8565b81156143c8575060015b919050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b038416816143fc57fe5b049392505050565b80820182811015611947576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106144945782800160ff198235161785556144c1565b828001600101855582156144c1579182015b828111156144c15782358255916020019190600101906144a6565b506144cd9291506144d1565b5090565b611ec291905b808211156144cd57600081556001016144d756fe5870506169723a20494e53554646494349454e545f4c49515549444954595f4d494e5445445870506169723a20494e53554646494349454e545f4f55545055545f414d4f554e545870506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a723158208553e0a8f007e29c6e39b6b73f8097f704a390c1b2031f3efc896ae77ee68f3b64736f6c63430005100032
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.