Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Fee To | 15398633 | 843 days ago | IN | 0 ETH | 0.00027411 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15405942 | 842 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
RYZRSwapFactory
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-26 */ // SPDX-License-Identifier: MIT pragma solidity >=0.8.15; interface IToken { function addPair(address pair, address token) external; function depositLPFee(uint amount, address token) external; } interface IRYZRSwapCallee { function newSwapCall(address sender, uint amount0, uint amount1, bytes calldata data) external; } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint 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 (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } // a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format)) // range: [0, 2**112 - 1] // resolution: 1 / 2**112 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); } } // a library for performing various math operations library Math { function min(uint x, uint y) internal pure returns (uint z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint y) internal pure returns (uint z) { if (y > 3) { z = y; uint x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } } /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { revert("ECDSA: invalid signature length"); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return recover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`, * `r` and `s` signature fields separately. */ function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value"); require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value"); // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`] * JSON-RPC method. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { // provides additional gas efficiency function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } function div(uint x, uint y) internal pure returns (uint z) { require(y > 0, "ds-math-div-underflow"); z = x / y; } } interface IRYZRSwapERC20 { 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 (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint 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 (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; } contract RYZRSwapERC20 is IRYZRSwapERC20 { using SafeMath for uint; string public constant override name = 'RYZRSwap-LP'; string public constant override symbol = 'NEW-LP'; uint8 public constant override decimals = 18; uint public override totalSupply; mapping(address => uint) public override balanceOf; mapping(address => mapping(address => uint)) public override allowance; bytes32 public immutable override DOMAIN_SEPARATOR; bytes32 public constant override PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); mapping(address => uint) public override nonces; event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); constructor() { uint chainId; assembly { chainId := chainid() } 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, uint value) internal { totalSupply = totalSupply.add(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(address(0), to, value); } function _burn(address from, uint value) internal { balanceOf[from] = balanceOf[from].sub(value); totalSupply = totalSupply.sub(value); emit Transfer(from, address(0), value); } function _approve(address owner, address spender, uint value) private { allowance[owner][spender] = value; emit Approval(owner, spender, value); } function _transfer(address from, address to, uint value) private { balanceOf[from] = balanceOf[from].sub(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(from, to, value); } function approve(address spender, uint value) external virtual override returns (bool) { _approve(msg.sender, spender, value); return true; } function transfer(address to, uint value) external override returns (bool) { _transfer(msg.sender, to, value); return true; } function transferFrom(address from, address to, uint value) external override returns (bool) { if (allowance[from][msg.sender] != type(uint).max - 1) { allowance[from][msg.sender] = allowance[from][msg.sender].sub(value); } _transfer(from, to, value); return true; } function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external override { require(deadline >= block.timestamp, 'RYZRSwap: TIMESTAMP_DEADLINE_EXPIRED'); bytes32 digest = keccak256( abi.encodePacked( '\x19\x01', DOMAIN_SEPARATOR, keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); address recoveredAddress = ECDSA.recover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, 'RYZRSwap: SIGNATURE_IS_INVVALID'); _approve(owner, spender, value); } } interface IRYZRSwapRouter { function pairFeeAddress(address pair) external view returns (address); function adminFee() external view returns (uint256); function feeAddressGet() external view returns (address); } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. * * _Since v2.5.0:_ this module is now much more gas efficient, given net gas * metering changes introduced in the Istanbul hardfork. */ contract ReentrancyGuard { bool private _notEntered; constructor () { // Storing an initial non-zero value makes deployment a bit more // expensive, but in exchange the refund on every call to nonReentrant // will be lower in amount. Since refunds are capped to a percetange of // the total transaction's gas, it is best to keep them low in cases // like this one, to increase the likelihood of the full refund coming // into effect. _notEntered = true; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } interface IRYZRSwapPair { function baseToken() external view returns (address); function getTotalFee() external view returns (uint); function updateTotalFee(uint totalFee) external returns (bool); function MINIMUM_LIQUIDITY() external pure returns (uint); 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, address _baseToken); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, uint amount0Fee, uint amount1Fee, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; function setBaseToken(address _baseToken) external; } interface IRYZRSwapFactory { function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function pairExist(address pair) external view returns (bool); function createPair(address tokenA, address tokenB) external returns (address pair); function routerInitialize(address) external; function routerAddress() external view returns (address); } contract RYZRSwapPair is IRYZRSwapPair, RYZRSwapERC20, ReentrancyGuard { using SafeMath for uint; using UQ112x112 for uint224; uint public constant override MINIMUM_LIQUIDITY = 10**3; bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)'))); IRYZRSwapRouter public routerAddress; address public immutable override factory; address public override token0; address public override token1; address public override baseToken; uint public totalFee = 1000; uint112 private reserve0; uint112 private reserve1; uint32 private blockTimestampLast; uint public override price0CumulativeLast; uint public override price1CumulativeLast; uint public override kLast; uint private unlocked = 1; modifier lock() { // IMPORTANT TO PREVENT RE-ENTRANCY require(msg.sender == address(routerAddress), "RYZRSwap: ONLY_ROUTER_CAN_ACCESS"); require(unlocked == 1, "RYZRSwap: LOCKED"); unlocked = 0; _; unlocked = 1; } function getReserves() public view override returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast, address _baseToken) { _reserve0 = reserve0; _reserve1 = reserve1; _blockTimestampLast = blockTimestampLast; _baseToken = baseToken; } function _safeTransfer(address token, address to, uint value, bool isSwapping) private nonReentrant { if(value == 0){ return; } if (routerAddress.pairFeeAddress(address(this)) == token && isSwapping){ uint256 adminFee = routerAddress.adminFee(); if(adminFee != 0){ uint256 getOutFee = value.mul(adminFee) / (10000); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, routerAddress.feeAddressGet(), getOutFee)); require(success && (data.length == 0 || abi.decode(data, (bool))), "RYZRSwap: TRANSFER_FAILED"); value = value.sub(getOutFee); } (bool success1, bytes memory data1) = token.call(abi.encodeWithSelector(SELECTOR, to, value)); require(success1 && (data1.length == 0 || abi.decode(data1, (bool))), "RYZRSwap: TRANSFER_FAILED"); }else { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "RYZRSwap: TRANSFER_FAILED"); } } event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); event Initialize(address token0, address token1, IRYZRSwapRouter router, address caller); event BaseTokenSet(address baseToken, address caller); event TotalFeeUpdate(uint totalFee); constructor() { factory = msg.sender; } // called once by the factory at time of deployment function initialize(address _token0, address _token1) external override { require(msg.sender == factory, "RYZRSwap: ONLY_FACTORY_CAN_CALL"); require(_token0 != address(0) && _token1 != address(0), "RYZRSwap: INVALID_ADDRESS"); token0 = _token0; token1 = _token1; routerAddress = IRYZRSwapRouter(IRYZRSwapFactory(factory).routerAddress()); emit Initialize(token0, token1, routerAddress, msg.sender); } // update reserves and, on the first call per block, price accumulators function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private { require(balance0 <= type(uint112).max && balance1 <= type(uint112).max, "RYZRSwap: OVERFLOW_ERROR"); uint32 blockTimestamp = uint32(block.timestamp % 2**32); uint32 timeElapsed = blockTimestamp - blockTimestampLast; if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) { price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed; price1CumulativeLast += uint(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) function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) { address feeTo = IRYZRSwapFactory(factory).feeTo(); feeOn = feeTo != address(0); uint _kLast = kLast; if (feeOn) { if (_kLast != 0) { uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1)); uint rootKLast = Math.sqrt(_kLast); if (rootK > rootKLast) { uint numerator = totalSupply.mul(rootK.sub(rootKLast)); uint denominator = rootK.mul(5).add(rootKLast); uint 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 mint(address to) external override lock returns (uint liquidity) { (uint112 _reserve0, uint112 _reserve1,,) = getReserves(); uint balance0 = IERC20(token0).balanceOf(address(this)); uint balance1 = IERC20(token1).balanceOf(address(this)); uint amount0 = balance0.sub(_reserve0); uint amount1 = balance1.sub(_reserve1); bool feeOn = _mintFee(_reserve0, _reserve1); uint _totalSupply = totalSupply; if (_totalSupply == 0) { liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY); _mint(address(0), MINIMUM_LIQUIDITY); } else { liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1); } require(liquidity > 0, "RYZRSwap: INSUFFICIENT_LIQUIDITY_MINTED"); _mint(to, liquidity); _update(balance0, balance1, _reserve0, _reserve1); if (feeOn) kLast = uint(reserve0).mul(reserve1); 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 override lock returns (uint amount0, uint amount1) { require(totalSupply != 0, "RYZRSwap: totalSupply must not be 0"); (uint112 _reserve0, uint112 _reserve1,,) = getReserves(); address _token0 = token0; address _token1 = token1; uint balance0 = IERC20(_token0).balanceOf(address(this)); uint balance1 = IERC20(_token1).balanceOf(address(this)); uint liquidity = balanceOf[address(this)]; bool feeOn = _mintFee(_reserve0, _reserve1); uint _totalSupply = totalSupply; amount0 = liquidity.mul(balance0) / _totalSupply; amount1 = liquidity.mul(balance1) / _totalSupply; require(amount0 > 0 && amount1 > 0, "RYZRSwap: INSUFFICIENT_LIQUIDITY_BURNED"); _burn(address(this), liquidity); _safeTransfer(_token0, to, amount0, false); _safeTransfer(_token1, to, amount1, false); balance0 = IERC20(_token0).balanceOf(address(this)); balance1 = IERC20(_token1).balanceOf(address(this)); _update(balance0, balance1, _reserve0, _reserve1); if (feeOn) kLast = uint(reserve0).mul(reserve1); emit Burn(msg.sender, amount0, amount1, to); } // this low-level function should be called from a contract which performs important safety checks function swap(uint amount0Out, uint amount1Out, uint amount0Fee, uint amount1Fee, address to, bytes calldata data) external override lock { require(amount0Out > 0 || amount1Out > 0, "ERROR: TRY_INCREASING_OUTPUT_AMOUNT"); (uint112 _reserve0, uint112 _reserve1,,) = getReserves(); require(amount0Out < _reserve0 && amount1Out < _reserve1, "RYZRSwap: INSUFFICIENT_LIQUIDITY"); if(baseToken != address(0)) { require(amount0Fee > 0 || amount1Fee > 0, "RYZRSwap: INSUFFICIENT_FEE_AMOUNT"); } uint balance0; uint balance1; { address _token0 = token0; address _token1 = token1; require(to != _token0 && to != _token1, "RYZRSwap: INVALID_RECEIVER"); if (amount0Out > 0) { _safeTransfer(_token0, to, amount0Out, true); } if (amount1Out > 0) { _safeTransfer(_token1, to, amount1Out, true); } if(amount0Fee > 0 && baseToken == token0) { bool success0 = IERC20(_token0).approve(_token1, amount0Fee); require(success0); IToken(_token1).depositLPFee(amount0Fee, _token0); } if(amount1Fee > 0 && baseToken == token1) { bool success1 = IERC20(_token1).approve(_token0, amount1Fee); require(success1); IToken(_token0).depositLPFee(amount1Fee, _token1); } if (data.length > 0) IRYZRSwapCallee(to).newSwapCall(msg.sender, amount0Out, amount1Out, data); balance0 = IERC20(_token0).balanceOf(address(this)); balance1 = IERC20(_token1).balanceOf(address(this)); } uint amount0In = balance0 > _reserve0 - amount0Out - amount0Fee ? balance0 - (_reserve0 - amount0Out) : 0; uint amount1In = balance1 > _reserve1 - amount1Out - amount1Fee ? balance1 - (_reserve1 - amount1Out) : 0; require(amount0In > 0 || amount1In > 0, "ERROR: AMOUNT_MUST_BE_GREATER_THAN_ZERO"); _update(balance0, balance1, _reserve0, _reserve1); { uint _amount0Out = amount0Out; uint _amount1Out = amount1Out; address _to = to; emit Swap(msg.sender, amount0In, amount1In, _amount0Out, _amount1Out, _to); } } // force balances to match reserves function skim(address to) external override lock { address _token0 = token0; address _token1 = token1; _safeTransfer(_token0, to, IERC20(_token0).balanceOf(address(this)).sub(reserve0), false); _safeTransfer(_token1, to, IERC20(_token1).balanceOf(address(this)).sub(reserve1), false); } // force reserves to match balances function sync() external override lock { _update(IERC20(token0).balanceOf(address(this)), IERC20(token1).balanceOf(address(this)), reserve0, reserve1); } // This function can ONLY be called by the token contract function setBaseToken(address _baseToken) external override { require(msg.sender == token0 || msg.sender == token1, "RYZRSwap: NOT_ALLOWED"); require(_baseToken == token0 || _baseToken == token1, "RYZRSwap: WRONG_ADDRESS"); baseToken = _baseToken; emit BaseTokenSet(baseToken, msg.sender); } function getTotalFee() external override view returns (uint) { return totalFee; } // This function can ONLY be called by the token contract function updateTotalFee(uint _totalFee) external override returns (bool) { if (baseToken == address(0)) return false; address feeTaker = baseToken == token0 ? token1 : token0; require(feeTaker == msg.sender, "RYZRSwap: NOT_ALLOWED"); require(_totalFee <= 2500, "RYZRSwap: FEE_TOO_HIGH"); totalFee = _totalFee; emit TotalFeeUpdate(totalFee); return true; } } contract RYZRSwapFactory is IRYZRSwapFactory, ReentrancyGuard { bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(RYZRSwapPair).creationCode)); address public override feeTo; address public override feeToSetter; address public override routerAddress; bool public routerInit; mapping(address => mapping(address => address)) public override getPair; address[] public override allPairs; mapping (address => bool) public override pairExist; event PairCreated(address indexed token0, address indexed token1, address pair, uint); event FeeToUpdate(address feeTo); event FeeToSetterUpdate(address feeToSetter); constructor() { feeToSetter = msg.sender; feeTo = msg.sender; } function routerInitialize(address _router) external override { require(!routerInit, "RYZRSwap: ROUTER_INITIALIZED_ALREADY"); require(!routerInit, "RYZRSwap: INITIALIZED_ALREADY"); require(_router != address(0), "RYZRSwap: INVALID_ADDRESS"); routerAddress = _router; routerInit = true; } function allPairsLength() external override view returns (uint) { return allPairs.length; } function createPair(address tokenA, address tokenB) external override nonReentrant returns (address pair) { require(tokenA != tokenB, "RYZRSwap: CANNOT_BE_IDENTICAL_ADDRESSES"); (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "RYZRSwap: CANNOT_BE_THE_ZERO_ADDRESS"); require(getPair[token0][token1] == address(0), "RYZRSwap: PAIR_ALREADY_EXISTS"); bytes memory bytecode = type(RYZRSwapPair).creationCode; bytes32 salt = keccak256(abi.encodePacked(token0, token1)); assembly { pair := create2(0, add(bytecode, 32), mload(bytecode), salt) } IRYZRSwapPair(pair).initialize(token0, token1); getPair[token0][token1] = pair; getPair[token1][token0] = pair; allPairs.push(pair); pairExist[pair] = true; emit PairCreated(token0, token1, pair, allPairs.length); } function setFeeTo(address _feeTo) external { require(msg.sender == feeToSetter, "RYZRSwap: ACCESS_DENIED"); require(_feeTo != address(0), "RYZRSwap: INVALID_ADDRESS"); feeTo = _feeTo; emit FeeToUpdate(feeTo); } function setFeeToSetter(address _feeToSetter) external { require(msg.sender == feeToSetter, "RYZRSwap: ACCESS_DENIED"); require(_feeToSetter != address(0), "RYZRSwap: INVALID_ADDRESS"); feeToSetter = _feeToSetter; emit FeeToSetterUpdate(feeToSetter); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"feeToSetter","type":"address"}],"name":"FeeToSetterUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"feeTo","type":"address"}],"name":"FeeToUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"inputs":[],"name":"INIT_CODE_PAIR_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerInit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"routerInitialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060008054600180546001600160a01b031916339081178255610100026001600160a81b031990921691909117179055613c928061004f6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063a2e74af61161008c578063b77fe18311610066578063b77fe183146101b8578063c9c65396146101cb578063e6a43905146101de578063f46901ed1461021257600080fd5b8063a2e74af61461015c578063ac393aff14610171578063ae63fe0b146101a457600080fd5b8063017e7e58146100d4578063094b7415146101095780631e3dd18b1461011c5780633268cc561461012f578063574f2ba3146101425780635855a25a14610154575b600080fd5b6000546100ec9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6001546100ec906001600160a01b031681565b6100ec61012a3660046108f2565b610225565b6002546100ec906001600160a01b031681565b6004545b604051908152602001610100565b61014661024f565b61016f61016a366004610927565b610299565b005b61019461017f366004610927565b60056020526000908152604090205460ff1681565b6040519015158152602001610100565b60025461019490600160a01b900460ff1681565b61016f6101c6366004610927565b61036d565b6100ec6101d9366004610949565b61047a565b6100ec6101ec366004610949565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b61016f610220366004610927565b610812565b6004818154811061023557600080fd5b6000918252602090912001546001600160a01b0316905081565b60405161025e602082016108e5565b601f1982820381018352601f909101166040819052610280919060200161097c565b6040516020818303038152906040528051906020012081565b6001546001600160a01b031633146102f25760405162461bcd60e51b81526020600482015260176024820152761496569494ddd85c0e881050d0d154d4d7d11153925151604a1b60448201526064015b60405180910390fd5b6001600160a01b0381166103185760405162461bcd60e51b81526004016102e9906109b7565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f54d416927ee51567f5741fa90904ecfa1b124c769ac044013a56e823daad57b3906020015b60405180910390a150565b600254600160a01b900460ff16156103d35760405162461bcd60e51b8152602060048201526024808201527f52595a52537761703a20524f555445525f494e495449414c495a45445f414c526044820152634541445960e01b60648201526084016102e9565b600254600160a01b900460ff161561042d5760405162461bcd60e51b815260206004820152601d60248201527f52595a52537761703a20494e495449414c495a45445f414c524541445900000060448201526064016102e9565b6001600160a01b0381166104535760405162461bcd60e51b81526004016102e9906109b7565b600280546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b6000805460ff166104cd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102e9565b6000805460ff191690556001600160a01b03808316908416036105425760405162461bcd60e51b815260206004820152602760248201527f52595a52537761703a2043414e4e4f545f42455f4944454e544943414c5f41446044820152664452455353455360c81b60648201526084016102e9565b600080836001600160a01b0316856001600160a01b031610610565578385610568565b84845b90925090506001600160a01b0382166105cf5760405162461bcd60e51b8152602060048201526024808201527f52595a52537761703a2043414e4e4f545f42455f5448455f5a45524f5f4144446044820152635245535360e01b60648201526084016102e9565b6001600160a01b038281166000908152600360209081526040808320858516845290915290205416156106445760405162461bcd60e51b815260206004820152601d60248201527f52595a52537761703a20504149525f414c52454144595f45584953545300000060448201526064016102e9565b600060405180602001610656906108e5565b601f1982820381018352601f9091011660408190526bffffffffffffffffffffffff19606086811b8216602084015285901b166034820152909150600090604801604051602081830303815290604052805190602001209050808251602084016000f560405163485cc95560e01b81526001600160a01b03868116600483015285811660248301529196509086169063485cc95590604401600060405180830381600087803b15801561070857600080fd5b505af115801561071c573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526003602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560048054600181810183557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101805490991686179098558486526005845294829020805460ff191690971790965592548351928352908201527f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9910160405180910390a350506000805460ff1916600117905550909392505050565b6001546001600160a01b031633146108665760405162461bcd60e51b81526020600482015260176024820152761496569494ddd85c0e881050d0d154d4d7d11153925151604a1b60448201526064016102e9565b6001600160a01b03811661088c5760405162461bcd60e51b81526004016102e9906109b7565b60008054610100600160a81b0319166101006001600160a01b038481168202929092179283905560405192041681527f68953050a837881c7c6f52c422b0f82e1fd474e6931654ea29f569d19fcc42c290602001610362565b61326e806109ef83390190565b60006020828403121561090457600080fd5b5035919050565b80356001600160a01b038116811461092257600080fd5b919050565b60006020828403121561093957600080fd5b6109428261090b565b9392505050565b6000806040838503121561095c57600080fd5b6109658361090b565b91506109736020840161090b565b90509250929050565b6000825160005b8181101561099d5760208186018101518583015201610983565b818111156109ac576000828501525b509190910192915050565b60208082526019908201527f52595a52537761703a20494e56414c49445f414444524553530000000000000060408201526060019056fe60c06040526103e86008556001600d5534801561001b57600080fd5b50604080518082018252600b81526a052595a52537761702d4c560ac1b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527feba07f2ff9b21b4ff1f18f31abc4a0a12415871c2f4e7a5fa4de4e0b6f7d0746918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a08301529060c00160408051601f198184030181529190528051602090910120608052506004805460ff191660011790553360a05260805160a05161312461014a600039600081816104a70152818161078e015281816108a70152611f0101526000818161037b015261138f01526131246000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c806370a082311161011a578063bc25cf77116100ad578063d32b96041161007c578063d32b9604146104ef578063d505accf14610502578063dd62ed3e14610515578063f8b134c614610540578063fff6cae91461055357600080fd5b8063bc25cf771461048f578063c45a0155146104a2578063c55dae63146104c9578063d21220a7146104dc57600080fd5b806389afcb44116100e957806389afcb441461042657806395d89b411461044e578063a9059cbb14610473578063ba9a7a561461048657600080fd5b806370a08231146103d55780637464fc3d146103f55780637ae316d0146103fe5780637ecebe001461040657600080fd5b806330adf81f11610192578063485cc95511610161578063485cc9551461039d5780635909c0d5146103b05780635a3d5493146103b95780636a627842146103c257600080fd5b806330adf81f1461031d578063313ce567146103445780633268cc561461035e5780633644e5151461037657600080fd5b806316bb6c13116101ce57806316bb6c13146102d557806318160ddd146102ea5780631df4ccfc1461030157806323b872dd1461030a57600080fd5b806306fdde03146102005780630902f1ac14610240578063095ea7b3146102875780630dfe1681146102aa575b600080fd5b61022a6040518060400160405280600b81526020016a052595a52537761702d4c560ac1b81525081565b6040516102379190612c19565b60405180910390f35b61024861055b565b604080516001600160701b03958616815294909316602085015263ffffffff909116918301919091526001600160a01b03166060820152608001610237565b61029a610295366004612c64565b610592565b6040519015158152602001610237565b6005546102bd906001600160a01b031681565b6040516001600160a01b039091168152602001610237565b6102e86102e3366004612c90565b6105a9565b005b6102f360005481565b604051908152602001610237565b6102f360085481565b61029a610318366004612cad565b6106e3565b6102f37f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61034c601281565b60405160ff9091168152602001610237565b6004546102bd9061010090046001600160a01b031681565b6102f37f000000000000000000000000000000000000000000000000000000000000000081565b6102e86103ab366004612cee565b610783565b6102f3600a5481565b6102f3600b5481565b6102f36103d0366004612c90565b61099c565b6102f36103e3366004612c90565b60016020526000908152604090205481565b6102f3600c5481565b6008546102f3565b6102f3610414366004612c90565b60036020526000908152604090205481565b610439610434366004612c90565b610c9a565b60408051928352602083019190915201610237565b61022a6040518060400160405280600681526020016504e45572d4c560d41b81525081565b61029a610481366004612c64565b611093565b6102f36103e881565b6102e861049d366004612c90565b6110a0565b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6007546102bd906001600160a01b031681565b6006546102bd906001600160a01b031681565b61029a6104fd366004612d27565b6111e5565b6102e8610510366004612d40565b611317565b6102f3610523366004612cee565b600260209081526000928352604080842090915290825290205481565b6102e861054e366004612db7565b61150d565b6102e8611c4b565b6009546007546001600160701b0380831693600160701b840490911692600160e01b900463ffffffff16916001600160a01b031690565b600061059f338484611d9e565b5060015b92915050565b6005546001600160a01b03163314806105cc57506006546001600160a01b031633145b6106155760405162461bcd60e51b81526020600482015260156024820152741496569494ddd85c0e881393d517d0531313d5d151605a1b60448201526064015b60405180910390fd5b6005546001600160a01b038281169116148061063e57506006546001600160a01b038281169116145b61068a5760405162461bcd60e51b815260206004820152601760248201527f52595a52537761703a2057524f4e475f41444452455353000000000000000000604482015260640161060c565b600780546001600160a01b0319166001600160a01b038316908117909155604080519182523360208301527f81d060e62e98f05de6556ad0e46fcba49da8631d2b46069174cae9da2035fead910160405180910390a150565b60006106f26001600019612e79565b6001600160a01b03851660009081526002602090815260408083203384529091529020541461076e576001600160a01b03841660009081526002602090815260408083203384529091529020546107499083611e00565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610779848484611e56565b5060019392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107fb5760405162461bcd60e51b815260206004820152601f60248201527f52595a52537761703a204f4e4c595f464143544f52595f43414e5f43414c4c00604482015260640161060c565b6001600160a01b0382161580159061081b57506001600160a01b03811615155b6108675760405162461bcd60e51b815260206004820152601960248201527f52595a52537761703a20494e56414c49445f4144445245535300000000000000604482015260640161060c565b600580546001600160a01b038085166001600160a01b03199283161790925560068054848416921691909117905560408051631934662b60e11b815290517f000000000000000000000000000000000000000000000000000000000000000090921691633268cc56916004808201926020929091908290030181865afa1580156108f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109199190612e90565b60048054610100600160a81b0319166101006001600160a01b0393841681029190911791829055600554600654604080519286168352908516602083015291909204909216918101919091523360608201527f420f11aae030b1b71b7480842c183b50e595c7c74203eb478d183ad7d3fdbd269060800160405180910390a15050565b60045460009061010090046001600160a01b031633146109ce5760405162461bcd60e51b815260040161060c90612ead565b600d546001146109f05760405162461bcd60e51b815260040161060c90612ee2565b6000600d81905580610a0061055b565b50506005546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190612f0c565b6006546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae99190612f0c565b90506000610b00836001600160701b038716611e00565b90506000610b17836001600160701b038716611e00565b90506000610b258787611efc565b60008054919250819003610b6557610b516103e8610b4b610b468787612044565b6120ab565b90611e00565b9850610b6060006103e861211b565b610bac565b610ba96001600160701b038916610b7c8684612044565b610b869190612f3b565b6001600160701b038916610b9a8685612044565b610ba49190612f3b565b6121aa565b98505b60008911610c0c5760405162461bcd60e51b815260206004820152602760248201527f52595a52537761703a20494e53554646494349454e545f4c495155494449545960448201526617d3525395115160ca1b606482015260840161060c565b610c168a8a61211b565b610c2286868a8a6121c2565b8115610c4c57600954610c48906001600160701b0380821691600160701b900416612044565b600c555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600d5550949695505050505050565b600454600090819061010090046001600160a01b03163314610cce5760405162461bcd60e51b815260040161060c90612ead565b600d54600114610cf05760405162461bcd60e51b815260040161060c90612ee2565b6000600d81905580549003610d535760405162461bcd60e51b815260206004820152602360248201527f52595a52537761703a20746f74616c537570706c79206d757374206e6f74206260448201526206520360ec1b606482015260840161060c565b600080610d5e61055b565b50506005546006546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a0823190602401602060405180830381865afa158015610db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddd9190612f0c565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4b9190612f0c565b30600090815260016020526040812054919250610e688888611efc565b60005490915080610e798487612044565b610e839190612f3b565b9a5080610e908486612044565b610e9a9190612f3b565b995060008b118015610eac575060008a115b610f085760405162461bcd60e51b815260206004820152602760248201527f52595a52537761703a20494e53554646494349454e545f4c495155494449545960448201526617d0955493915160ca1b606482015260840161060c565b610f1230846123b8565b610f1f878d8d6000612442565b610f2c868d8c6000612442565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f949190612f0c565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a0823190602401602060405180830381865afa158015610fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fff9190612f0c565b935061100d85858b8b6121c2565b811561103757600954611033906001600160701b0380821691600160701b900416612044565b600c555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600d81905550915091565b600061059f338484611e56565b60045461010090046001600160a01b031633146110cf5760405162461bcd60e51b815260040161060c90612ead565b600d546001146110f15760405162461bcd60e51b815260040161060c90612ee2565b6000600d556005546006546009546040516370a0823160e01b81523060048201526001600160a01b03938416939092169161118e9184918691611187916001600160701b039091169084906370a08231906024015b602060405180830381865afa158015611163573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190612f0c565b6000612442565b6009546040516370a0823160e01b81523060048201526111db918391869161118791600160701b9091046001600160701b0316906001600160a01b038516906370a0823190602401611146565b50506001600d5550565b6007546000906001600160a01b031661120057506000919050565b6005546007546000916001600160a01b0391821691161461122c576005546001600160a01b0316611239565b6006546001600160a01b03165b90506001600160a01b038116331461128b5760405162461bcd60e51b81526020600482015260156024820152741496569494ddd85c0e881393d517d0531313d5d151605a1b604482015260640161060c565b6109c48311156112d65760405162461bcd60e51b81526020600482015260166024820152750a4b2b4a4a6eec2e074408c8a8abea89e9ebe90928e960531b604482015260640161060c565b60088390556040518381527f2598cd7355e98757fff6a4b454cc7807441ecd94892843f8ad49f00dc833c9669060200160405180910390a150600192915050565b428410156113735760405162461bcd60e51b8152602060048201526024808201527f52595a52537761703a2054494d455354414d505f444541444c494e455f4558506044820152631254915160e21b606482015260840161060c565b6001600160a01b038716600090815260036020526040812080547f0000000000000000000000000000000000000000000000000000000000000000917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91876113e183612f4f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161145a92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000611480828686866129bd565b90506001600160a01b038116158015906114ab5750886001600160a01b0316816001600160a01b0316145b6114f75760405162461bcd60e51b815260206004820152601f60248201527f52595a52537761703a205349474e41545552455f49535f494e5656414c494400604482015260640161060c565b611502898989611d9e565b505050505050505050565b60045461010090046001600160a01b0316331461153c5760405162461bcd60e51b815260040161060c90612ead565b600d5460011461155e5760405162461bcd60e51b815260040161060c90612ee2565b6000600d55861515806115715750600086115b6115c95760405162461bcd60e51b815260206004820152602360248201527f4552524f523a205452595f494e4352454153494e475f4f55545055545f414d4f60448201526215539560ea1b606482015260840161060c565b6000806115d461055b565b505091509150816001600160701b0316891080156115fa5750806001600160701b031688105b6116465760405162461bcd60e51b815260206004820181905260248201527f52595a52537761703a20494e53554646494349454e545f4c4951554944495459604482015260640161060c565b6007546001600160a01b0316156116bc5760008711806116665750600086115b6116bc5760405162461bcd60e51b815260206004820152602160248201527f52595a52537761703a20494e53554646494349454e545f4645455f414d4f554e6044820152601560fa1b606482015260840161060c565b60055460065460009182916001600160a01b039182169190811690891682148015906116fa5750806001600160a01b0316896001600160a01b031614155b6117465760405162461bcd60e51b815260206004820152601a60248201527f52595a52537761703a20494e56414c49445f5245434549564552000000000000604482015260640161060c565b8c1561175957611759828a8f6001612442565b8b1561176c5761176c818a8e6001612442565b60008b11801561178c57506005546007546001600160a01b039081169116145b156118785760405163095ea7b360e01b81526001600160a01b038281166004830152602482018d90526000919084169063095ea7b3906044016020604051808303816000875af11580156117e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118089190612f68565b90508061181457600080fd5b604051638283bbf360e01b8152600481018d90526001600160a01b038481166024830152831690638283bbf390604401600060405180830381600087803b15801561185e57600080fd5b505af1158015611872573d6000803e3d6000fd5b50505050505b60008a11801561189857506006546007546001600160a01b039081169116145b156119845760405163095ea7b360e01b81526001600160a01b038381166004830152602482018c90526000919083169063095ea7b3906044016020604051808303816000875af11580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119149190612f68565b90508061192057600080fd5b604051638283bbf360e01b8152600481018c90526001600160a01b038381166024830152841690638283bbf390604401600060405180830381600087803b15801561196a57600080fd5b505af115801561197e573d6000803e3d6000fd5b50505050505b86156119f157886001600160a01b031663c626b9ac338f8f8c8c6040518663ffffffff1660e01b81526004016119be959493929190612f8a565b600060405180830381600087803b1580156119d857600080fd5b505af11580156119ec573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015611a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a599190612f0c565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa158015611aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac49190612f0c565b925050506000898c866001600160701b0316611ae09190612e79565b611aea9190612e79565b8311611af7576000611b14565b611b0a8c6001600160701b038716612e79565b611b149084612e79565b9050600089611b2c8d6001600160701b038816612e79565b611b369190612e79565b8311611b43576000611b60565b611b568c6001600160701b038716612e79565b611b609084612e79565b90506000821180611b715750600081115b611bcd5760405162461bcd60e51b815260206004820152602760248201527f4552524f523a20414d4f554e545f4d5553545f42455f475245415445525f5448604482015266414e5f5a45524f60c81b606482015260840161060c565b611bd9848488886121c2565b60408051838152602081018390529081018e9052606081018d90528d908d908b906001600160a01b0382169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600d555050505050505050505050505050565b60045461010090046001600160a01b03163314611c7a5760405162461bcd60e51b815260040161060c90612ead565b600d54600114611c9c5760405162461bcd60e51b815260040161060c90612ee2565b6000600d556005546040516370a0823160e01b8152306004820152611d97916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190612f0c565b6006546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7b9190612f0c565b6009546001600160701b0380821691600160701b9004166121c2565b6001600d55565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600082611e0d8382612e79565b91508111156105a35760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015260640161060c565b6001600160a01b038316600090815260016020526040902054611e799082611e00565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ea89082612b66565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611df39085815260200190565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f819190612e90565b600c546001600160a01b03821615801594509192509061203057801561202b576000611fbc610b466001600160701b03888116908816612044565b90506000611fc9836120ab565b905080821115612028576000611feb611fe28484611e00565b60005490612044565b9050600061200483611ffe866005612044565b90612b66565b905060006120128284612f3b565b9050801561202457612024878261211b565b5050505b50505b61203c565b801561203c576000600c555b505092915050565b60008115806120685750828261205a8183612fd6565b92506120669083612f3b565b145b6105a35760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015260640161060c565b6000600382111561210c57508060006120c5600283612f3b565b6120d0906001612ff5565b90505b81811015612106579050806002816120eb8186612f3b565b6120f59190612ff5565b6120ff9190612f3b565b90506120d3565b50919050565b8115612116575060015b919050565b6000546121289082612b66565b60009081556001600160a01b03831681526001602052604090205461214d9082612b66565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061219e9085815260200190565b60405180910390a35050565b60008183106121b957816121bb565b825b9392505050565b6001600160701b0384118015906121e057506001600160701b038311155b61222c5760405162461bcd60e51b815260206004820152601860248201527f52595a52537761703a204f564552464c4f575f4552524f520000000000000000604482015260640161060c565b600061223d6401000000004261300d565b60095490915060009061225d90600160e01b900463ffffffff1683613021565b905060008163ffffffff1611801561227d57506001600160701b03841615155b801561229157506001600160701b03831615155b15612320578063ffffffff166122b9856122aa86612bbb565b6001600160e01b031690612bd4565b6001600160e01b03166122cc9190612fd6565b600a60008282546122dd9190612ff5565b909155505063ffffffff81166122f6846122aa87612bbb565b6001600160e01b03166123099190612fd6565b600b600082825461231a9190612ff5565b90915550505b6009805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b0382166000908152600160205260409020546123db9082611e00565b6001600160a01b038316600090815260016020526040812091909155546124029082611e00565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161219e565b60045460ff166124945760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060c565b6004805460ff1916905581156129aa576004805460405163dcacce6960e01b815230928101929092526001600160a01b0386811692610100909204169063dcacce6990602401602060405180830381865afa1580156124f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251b9190612e90565b6001600160a01b031614801561252e5750805b15612897576000600460019054906101000a90046001600160a01b03166001600160a01b031663a0be06f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ac9190612f0c565b9050801561277f5760006127106125c38584612044565b6125cd9190612f3b565b9050600080876001600160a01b0316604051806040016040528060198152602001787472616e7366657228616464726573732c75696e743235362960381b81525080519060200120600460019054906101000a90046001600160a01b03166001600160a01b031663add10aa26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268c9190612e90565b6040516001600160a01b0390911660248201526044810186905260640160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516126e79190613046565b6000604051808303816000865af19150503d8060008114612724576040519150601f19603f3d011682016040523d82523d6000602084013e612729565b606091505b50915091508180156127535750805115806127535750808060200190518101906127539190612f68565b61276f5760405162461bcd60e51b815260040161060c90613062565b6127798684611e00565b95505050505b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0387811660248301526044808301889052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b179052915160009283928916916128079190613046565b6000604051808303816000865af19150503d8060008114612844576040519150601f19603f3d011682016040523d82523d6000602084013e612849565b606091505b50915091508180156128735750805115806128735750808060200190518101906128739190612f68565b61288f5760405162461bcd60e51b815260040161060c90613062565b5050506129aa565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0386811660248301526044808301879052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1790529151600092839288169161291f9190613046565b6000604051808303816000865af19150503d806000811461295c576040519150601f19603f3d011682016040523d82523d6000602084013e612961565b606091505b509150915081801561298b57508051158061298b57508080602001905181019061298b9190612f68565b6129a75760405162461bcd60e51b815260040161060c90613062565b50505b50506004805460ff191660011790555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612a3a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161060c565b8360ff16601b1480612a4f57508360ff16601c145b612aa65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161060c565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015612afa573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612b5d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161060c565b95945050505050565b600082612b738382612ff5565b91508110156105a35760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015260640161060c565b60006105a3600160701b6001600160701b038416613099565b60006121bb6001600160701b038316846130c8565b60005b83811015612c04578181015183820152602001612bec565b83811115612c13576000848401525b50505050565b6020815260008251806020840152612c38816040850160208701612be9565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612c6157600080fd5b50565b60008060408385031215612c7757600080fd5b8235612c8281612c4c565b946020939093013593505050565b600060208284031215612ca257600080fd5b81356121bb81612c4c565b600080600060608486031215612cc257600080fd5b8335612ccd81612c4c565b92506020840135612cdd81612c4c565b929592945050506040919091013590565b60008060408385031215612d0157600080fd5b8235612d0c81612c4c565b91506020830135612d1c81612c4c565b809150509250929050565b600060208284031215612d3957600080fd5b5035919050565b600080600080600080600060e0888a031215612d5b57600080fd5b8735612d6681612c4c565b96506020880135612d7681612c4c565b95506040880135945060608801359350608088013560ff81168114612d9a57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080600080600080600060c0888a031215612dd257600080fd5b873596506020880135955060408801359450606088013593506080880135612df981612c4c565b925060a088013567ffffffffffffffff80821115612e1657600080fd5b818a0191508a601f830112612e2a57600080fd5b813581811115612e3957600080fd5b8b6020828501011115612e4b57600080fd5b60208301945080935050505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600082821015612e8b57612e8b612e63565b500390565b600060208284031215612ea257600080fd5b81516121bb81612c4c565b6020808252818101527f52595a52537761703a204f4e4c595f524f555445525f43414e5f414343455353604082015260600190565b60208082526010908201526f1496569494ddd85c0e881313d0d2d15160821b604082015260600190565b600060208284031215612f1e57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b600082612f4a57612f4a612f25565b500490565b600060018201612f6157612f61612e63565b5060010190565b600060208284031215612f7a57600080fd5b815180151581146121bb57600080fd5b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b6000816000190483118215151615612ff057612ff0612e63565b500290565b6000821982111561300857613008612e63565b500190565b60008261301c5761301c612f25565b500690565b600063ffffffff8381169083168181101561303e5761303e612e63565b039392505050565b60008251613058818460208701612be9565b9190910192915050565b60208082526019908201527f52595a52537761703a205452414e534645525f4641494c454400000000000000604082015260600190565b60006001600160e01b03828116848216811515828404821116156130bf576130bf612e63565b02949350505050565b60006001600160e01b03838116806130e2576130e2612f25565b9216919091049291505056fea26469706673582212202c11e9c9053ec5eff28cea1b7ce8dcf9563829591d00ce0b6d49b85eebc74b8f64736f6c634300080f0033a264697066735822122042ab3deeea76d9aff90f62981eecf2a4ebbafa94f01099fd10802277726c825264736f6c634300080f0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063a2e74af61161008c578063b77fe18311610066578063b77fe183146101b8578063c9c65396146101cb578063e6a43905146101de578063f46901ed1461021257600080fd5b8063a2e74af61461015c578063ac393aff14610171578063ae63fe0b146101a457600080fd5b8063017e7e58146100d4578063094b7415146101095780631e3dd18b1461011c5780633268cc561461012f578063574f2ba3146101425780635855a25a14610154575b600080fd5b6000546100ec9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6001546100ec906001600160a01b031681565b6100ec61012a3660046108f2565b610225565b6002546100ec906001600160a01b031681565b6004545b604051908152602001610100565b61014661024f565b61016f61016a366004610927565b610299565b005b61019461017f366004610927565b60056020526000908152604090205460ff1681565b6040519015158152602001610100565b60025461019490600160a01b900460ff1681565b61016f6101c6366004610927565b61036d565b6100ec6101d9366004610949565b61047a565b6100ec6101ec366004610949565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b61016f610220366004610927565b610812565b6004818154811061023557600080fd5b6000918252602090912001546001600160a01b0316905081565b60405161025e602082016108e5565b601f1982820381018352601f909101166040819052610280919060200161097c565b6040516020818303038152906040528051906020012081565b6001546001600160a01b031633146102f25760405162461bcd60e51b81526020600482015260176024820152761496569494ddd85c0e881050d0d154d4d7d11153925151604a1b60448201526064015b60405180910390fd5b6001600160a01b0381166103185760405162461bcd60e51b81526004016102e9906109b7565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f54d416927ee51567f5741fa90904ecfa1b124c769ac044013a56e823daad57b3906020015b60405180910390a150565b600254600160a01b900460ff16156103d35760405162461bcd60e51b8152602060048201526024808201527f52595a52537761703a20524f555445525f494e495449414c495a45445f414c526044820152634541445960e01b60648201526084016102e9565b600254600160a01b900460ff161561042d5760405162461bcd60e51b815260206004820152601d60248201527f52595a52537761703a20494e495449414c495a45445f414c524541445900000060448201526064016102e9565b6001600160a01b0381166104535760405162461bcd60e51b81526004016102e9906109b7565b600280546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b6000805460ff166104cd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102e9565b6000805460ff191690556001600160a01b03808316908416036105425760405162461bcd60e51b815260206004820152602760248201527f52595a52537761703a2043414e4e4f545f42455f4944454e544943414c5f41446044820152664452455353455360c81b60648201526084016102e9565b600080836001600160a01b0316856001600160a01b031610610565578385610568565b84845b90925090506001600160a01b0382166105cf5760405162461bcd60e51b8152602060048201526024808201527f52595a52537761703a2043414e4e4f545f42455f5448455f5a45524f5f4144446044820152635245535360e01b60648201526084016102e9565b6001600160a01b038281166000908152600360209081526040808320858516845290915290205416156106445760405162461bcd60e51b815260206004820152601d60248201527f52595a52537761703a20504149525f414c52454144595f45584953545300000060448201526064016102e9565b600060405180602001610656906108e5565b601f1982820381018352601f9091011660408190526bffffffffffffffffffffffff19606086811b8216602084015285901b166034820152909150600090604801604051602081830303815290604052805190602001209050808251602084016000f560405163485cc95560e01b81526001600160a01b03868116600483015285811660248301529196509086169063485cc95590604401600060405180830381600087803b15801561070857600080fd5b505af115801561071c573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526003602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560048054600181810183557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101805490991686179098558486526005845294829020805460ff191690971790965592548351928352908201527f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9910160405180910390a350506000805460ff1916600117905550909392505050565b6001546001600160a01b031633146108665760405162461bcd60e51b81526020600482015260176024820152761496569494ddd85c0e881050d0d154d4d7d11153925151604a1b60448201526064016102e9565b6001600160a01b03811661088c5760405162461bcd60e51b81526004016102e9906109b7565b60008054610100600160a81b0319166101006001600160a01b038481168202929092179283905560405192041681527f68953050a837881c7c6f52c422b0f82e1fd474e6931654ea29f569d19fcc42c290602001610362565b61326e806109ef83390190565b60006020828403121561090457600080fd5b5035919050565b80356001600160a01b038116811461092257600080fd5b919050565b60006020828403121561093957600080fd5b6109428261090b565b9392505050565b6000806040838503121561095c57600080fd5b6109658361090b565b91506109736020840161090b565b90509250929050565b6000825160005b8181101561099d5760208186018101518583015201610983565b818111156109ac576000828501525b509190910192915050565b60208082526019908201527f52595a52537761703a20494e56414c49445f414444524553530000000000000060408201526060019056fe60c06040526103e86008556001600d5534801561001b57600080fd5b50604080518082018252600b81526a052595a52537761702d4c560ac1b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527feba07f2ff9b21b4ff1f18f31abc4a0a12415871c2f4e7a5fa4de4e0b6f7d0746918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a08301529060c00160408051601f198184030181529190528051602090910120608052506004805460ff191660011790553360a05260805160a05161312461014a600039600081816104a70152818161078e015281816108a70152611f0101526000818161037b015261138f01526131246000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c806370a082311161011a578063bc25cf77116100ad578063d32b96041161007c578063d32b9604146104ef578063d505accf14610502578063dd62ed3e14610515578063f8b134c614610540578063fff6cae91461055357600080fd5b8063bc25cf771461048f578063c45a0155146104a2578063c55dae63146104c9578063d21220a7146104dc57600080fd5b806389afcb44116100e957806389afcb441461042657806395d89b411461044e578063a9059cbb14610473578063ba9a7a561461048657600080fd5b806370a08231146103d55780637464fc3d146103f55780637ae316d0146103fe5780637ecebe001461040657600080fd5b806330adf81f11610192578063485cc95511610161578063485cc9551461039d5780635909c0d5146103b05780635a3d5493146103b95780636a627842146103c257600080fd5b806330adf81f1461031d578063313ce567146103445780633268cc561461035e5780633644e5151461037657600080fd5b806316bb6c13116101ce57806316bb6c13146102d557806318160ddd146102ea5780631df4ccfc1461030157806323b872dd1461030a57600080fd5b806306fdde03146102005780630902f1ac14610240578063095ea7b3146102875780630dfe1681146102aa575b600080fd5b61022a6040518060400160405280600b81526020016a052595a52537761702d4c560ac1b81525081565b6040516102379190612c19565b60405180910390f35b61024861055b565b604080516001600160701b03958616815294909316602085015263ffffffff909116918301919091526001600160a01b03166060820152608001610237565b61029a610295366004612c64565b610592565b6040519015158152602001610237565b6005546102bd906001600160a01b031681565b6040516001600160a01b039091168152602001610237565b6102e86102e3366004612c90565b6105a9565b005b6102f360005481565b604051908152602001610237565b6102f360085481565b61029a610318366004612cad565b6106e3565b6102f37f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61034c601281565b60405160ff9091168152602001610237565b6004546102bd9061010090046001600160a01b031681565b6102f37f000000000000000000000000000000000000000000000000000000000000000081565b6102e86103ab366004612cee565b610783565b6102f3600a5481565b6102f3600b5481565b6102f36103d0366004612c90565b61099c565b6102f36103e3366004612c90565b60016020526000908152604090205481565b6102f3600c5481565b6008546102f3565b6102f3610414366004612c90565b60036020526000908152604090205481565b610439610434366004612c90565b610c9a565b60408051928352602083019190915201610237565b61022a6040518060400160405280600681526020016504e45572d4c560d41b81525081565b61029a610481366004612c64565b611093565b6102f36103e881565b6102e861049d366004612c90565b6110a0565b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6007546102bd906001600160a01b031681565b6006546102bd906001600160a01b031681565b61029a6104fd366004612d27565b6111e5565b6102e8610510366004612d40565b611317565b6102f3610523366004612cee565b600260209081526000928352604080842090915290825290205481565b6102e861054e366004612db7565b61150d565b6102e8611c4b565b6009546007546001600160701b0380831693600160701b840490911692600160e01b900463ffffffff16916001600160a01b031690565b600061059f338484611d9e565b5060015b92915050565b6005546001600160a01b03163314806105cc57506006546001600160a01b031633145b6106155760405162461bcd60e51b81526020600482015260156024820152741496569494ddd85c0e881393d517d0531313d5d151605a1b60448201526064015b60405180910390fd5b6005546001600160a01b038281169116148061063e57506006546001600160a01b038281169116145b61068a5760405162461bcd60e51b815260206004820152601760248201527f52595a52537761703a2057524f4e475f41444452455353000000000000000000604482015260640161060c565b600780546001600160a01b0319166001600160a01b038316908117909155604080519182523360208301527f81d060e62e98f05de6556ad0e46fcba49da8631d2b46069174cae9da2035fead910160405180910390a150565b60006106f26001600019612e79565b6001600160a01b03851660009081526002602090815260408083203384529091529020541461076e576001600160a01b03841660009081526002602090815260408083203384529091529020546107499083611e00565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610779848484611e56565b5060019392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107fb5760405162461bcd60e51b815260206004820152601f60248201527f52595a52537761703a204f4e4c595f464143544f52595f43414e5f43414c4c00604482015260640161060c565b6001600160a01b0382161580159061081b57506001600160a01b03811615155b6108675760405162461bcd60e51b815260206004820152601960248201527f52595a52537761703a20494e56414c49445f4144445245535300000000000000604482015260640161060c565b600580546001600160a01b038085166001600160a01b03199283161790925560068054848416921691909117905560408051631934662b60e11b815290517f000000000000000000000000000000000000000000000000000000000000000090921691633268cc56916004808201926020929091908290030181865afa1580156108f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109199190612e90565b60048054610100600160a81b0319166101006001600160a01b0393841681029190911791829055600554600654604080519286168352908516602083015291909204909216918101919091523360608201527f420f11aae030b1b71b7480842c183b50e595c7c74203eb478d183ad7d3fdbd269060800160405180910390a15050565b60045460009061010090046001600160a01b031633146109ce5760405162461bcd60e51b815260040161060c90612ead565b600d546001146109f05760405162461bcd60e51b815260040161060c90612ee2565b6000600d81905580610a0061055b565b50506005546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190612f0c565b6006546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae99190612f0c565b90506000610b00836001600160701b038716611e00565b90506000610b17836001600160701b038716611e00565b90506000610b258787611efc565b60008054919250819003610b6557610b516103e8610b4b610b468787612044565b6120ab565b90611e00565b9850610b6060006103e861211b565b610bac565b610ba96001600160701b038916610b7c8684612044565b610b869190612f3b565b6001600160701b038916610b9a8685612044565b610ba49190612f3b565b6121aa565b98505b60008911610c0c5760405162461bcd60e51b815260206004820152602760248201527f52595a52537761703a20494e53554646494349454e545f4c495155494449545960448201526617d3525395115160ca1b606482015260840161060c565b610c168a8a61211b565b610c2286868a8a6121c2565b8115610c4c57600954610c48906001600160701b0380821691600160701b900416612044565b600c555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600d5550949695505050505050565b600454600090819061010090046001600160a01b03163314610cce5760405162461bcd60e51b815260040161060c90612ead565b600d54600114610cf05760405162461bcd60e51b815260040161060c90612ee2565b6000600d81905580549003610d535760405162461bcd60e51b815260206004820152602360248201527f52595a52537761703a20746f74616c537570706c79206d757374206e6f74206260448201526206520360ec1b606482015260840161060c565b600080610d5e61055b565b50506005546006546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a0823190602401602060405180830381865afa158015610db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddd9190612f0c565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4b9190612f0c565b30600090815260016020526040812054919250610e688888611efc565b60005490915080610e798487612044565b610e839190612f3b565b9a5080610e908486612044565b610e9a9190612f3b565b995060008b118015610eac575060008a115b610f085760405162461bcd60e51b815260206004820152602760248201527f52595a52537761703a20494e53554646494349454e545f4c495155494449545960448201526617d0955493915160ca1b606482015260840161060c565b610f1230846123b8565b610f1f878d8d6000612442565b610f2c868d8c6000612442565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f949190612f0c565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a0823190602401602060405180830381865afa158015610fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fff9190612f0c565b935061100d85858b8b6121c2565b811561103757600954611033906001600160701b0380821691600160701b900416612044565b600c555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600d81905550915091565b600061059f338484611e56565b60045461010090046001600160a01b031633146110cf5760405162461bcd60e51b815260040161060c90612ead565b600d546001146110f15760405162461bcd60e51b815260040161060c90612ee2565b6000600d556005546006546009546040516370a0823160e01b81523060048201526001600160a01b03938416939092169161118e9184918691611187916001600160701b039091169084906370a08231906024015b602060405180830381865afa158015611163573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190612f0c565b6000612442565b6009546040516370a0823160e01b81523060048201526111db918391869161118791600160701b9091046001600160701b0316906001600160a01b038516906370a0823190602401611146565b50506001600d5550565b6007546000906001600160a01b031661120057506000919050565b6005546007546000916001600160a01b0391821691161461122c576005546001600160a01b0316611239565b6006546001600160a01b03165b90506001600160a01b038116331461128b5760405162461bcd60e51b81526020600482015260156024820152741496569494ddd85c0e881393d517d0531313d5d151605a1b604482015260640161060c565b6109c48311156112d65760405162461bcd60e51b81526020600482015260166024820152750a4b2b4a4a6eec2e074408c8a8abea89e9ebe90928e960531b604482015260640161060c565b60088390556040518381527f2598cd7355e98757fff6a4b454cc7807441ecd94892843f8ad49f00dc833c9669060200160405180910390a150600192915050565b428410156113735760405162461bcd60e51b8152602060048201526024808201527f52595a52537761703a2054494d455354414d505f444541444c494e455f4558506044820152631254915160e21b606482015260840161060c565b6001600160a01b038716600090815260036020526040812080547f0000000000000000000000000000000000000000000000000000000000000000917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91876113e183612f4f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161145a92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000611480828686866129bd565b90506001600160a01b038116158015906114ab5750886001600160a01b0316816001600160a01b0316145b6114f75760405162461bcd60e51b815260206004820152601f60248201527f52595a52537761703a205349474e41545552455f49535f494e5656414c494400604482015260640161060c565b611502898989611d9e565b505050505050505050565b60045461010090046001600160a01b0316331461153c5760405162461bcd60e51b815260040161060c90612ead565b600d5460011461155e5760405162461bcd60e51b815260040161060c90612ee2565b6000600d55861515806115715750600086115b6115c95760405162461bcd60e51b815260206004820152602360248201527f4552524f523a205452595f494e4352454153494e475f4f55545055545f414d4f60448201526215539560ea1b606482015260840161060c565b6000806115d461055b565b505091509150816001600160701b0316891080156115fa5750806001600160701b031688105b6116465760405162461bcd60e51b815260206004820181905260248201527f52595a52537761703a20494e53554646494349454e545f4c4951554944495459604482015260640161060c565b6007546001600160a01b0316156116bc5760008711806116665750600086115b6116bc5760405162461bcd60e51b815260206004820152602160248201527f52595a52537761703a20494e53554646494349454e545f4645455f414d4f554e6044820152601560fa1b606482015260840161060c565b60055460065460009182916001600160a01b039182169190811690891682148015906116fa5750806001600160a01b0316896001600160a01b031614155b6117465760405162461bcd60e51b815260206004820152601a60248201527f52595a52537761703a20494e56414c49445f5245434549564552000000000000604482015260640161060c565b8c1561175957611759828a8f6001612442565b8b1561176c5761176c818a8e6001612442565b60008b11801561178c57506005546007546001600160a01b039081169116145b156118785760405163095ea7b360e01b81526001600160a01b038281166004830152602482018d90526000919084169063095ea7b3906044016020604051808303816000875af11580156117e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118089190612f68565b90508061181457600080fd5b604051638283bbf360e01b8152600481018d90526001600160a01b038481166024830152831690638283bbf390604401600060405180830381600087803b15801561185e57600080fd5b505af1158015611872573d6000803e3d6000fd5b50505050505b60008a11801561189857506006546007546001600160a01b039081169116145b156119845760405163095ea7b360e01b81526001600160a01b038381166004830152602482018c90526000919083169063095ea7b3906044016020604051808303816000875af11580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119149190612f68565b90508061192057600080fd5b604051638283bbf360e01b8152600481018c90526001600160a01b038381166024830152841690638283bbf390604401600060405180830381600087803b15801561196a57600080fd5b505af115801561197e573d6000803e3d6000fd5b50505050505b86156119f157886001600160a01b031663c626b9ac338f8f8c8c6040518663ffffffff1660e01b81526004016119be959493929190612f8a565b600060405180830381600087803b1580156119d857600080fd5b505af11580156119ec573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015611a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a599190612f0c565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa158015611aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac49190612f0c565b925050506000898c866001600160701b0316611ae09190612e79565b611aea9190612e79565b8311611af7576000611b14565b611b0a8c6001600160701b038716612e79565b611b149084612e79565b9050600089611b2c8d6001600160701b038816612e79565b611b369190612e79565b8311611b43576000611b60565b611b568c6001600160701b038716612e79565b611b609084612e79565b90506000821180611b715750600081115b611bcd5760405162461bcd60e51b815260206004820152602760248201527f4552524f523a20414d4f554e545f4d5553545f42455f475245415445525f5448604482015266414e5f5a45524f60c81b606482015260840161060c565b611bd9848488886121c2565b60408051838152602081018390529081018e9052606081018d90528d908d908b906001600160a01b0382169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600d555050505050505050505050505050565b60045461010090046001600160a01b03163314611c7a5760405162461bcd60e51b815260040161060c90612ead565b600d54600114611c9c5760405162461bcd60e51b815260040161060c90612ee2565b6000600d556005546040516370a0823160e01b8152306004820152611d97916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190612f0c565b6006546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7b9190612f0c565b6009546001600160701b0380821691600160701b9004166121c2565b6001600d55565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600082611e0d8382612e79565b91508111156105a35760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015260640161060c565b6001600160a01b038316600090815260016020526040902054611e799082611e00565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ea89082612b66565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611df39085815260200190565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f819190612e90565b600c546001600160a01b03821615801594509192509061203057801561202b576000611fbc610b466001600160701b03888116908816612044565b90506000611fc9836120ab565b905080821115612028576000611feb611fe28484611e00565b60005490612044565b9050600061200483611ffe866005612044565b90612b66565b905060006120128284612f3b565b9050801561202457612024878261211b565b5050505b50505b61203c565b801561203c576000600c555b505092915050565b60008115806120685750828261205a8183612fd6565b92506120669083612f3b565b145b6105a35760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015260640161060c565b6000600382111561210c57508060006120c5600283612f3b565b6120d0906001612ff5565b90505b81811015612106579050806002816120eb8186612f3b565b6120f59190612ff5565b6120ff9190612f3b565b90506120d3565b50919050565b8115612116575060015b919050565b6000546121289082612b66565b60009081556001600160a01b03831681526001602052604090205461214d9082612b66565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061219e9085815260200190565b60405180910390a35050565b60008183106121b957816121bb565b825b9392505050565b6001600160701b0384118015906121e057506001600160701b038311155b61222c5760405162461bcd60e51b815260206004820152601860248201527f52595a52537761703a204f564552464c4f575f4552524f520000000000000000604482015260640161060c565b600061223d6401000000004261300d565b60095490915060009061225d90600160e01b900463ffffffff1683613021565b905060008163ffffffff1611801561227d57506001600160701b03841615155b801561229157506001600160701b03831615155b15612320578063ffffffff166122b9856122aa86612bbb565b6001600160e01b031690612bd4565b6001600160e01b03166122cc9190612fd6565b600a60008282546122dd9190612ff5565b909155505063ffffffff81166122f6846122aa87612bbb565b6001600160e01b03166123099190612fd6565b600b600082825461231a9190612ff5565b90915550505b6009805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b0382166000908152600160205260409020546123db9082611e00565b6001600160a01b038316600090815260016020526040812091909155546124029082611e00565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161219e565b60045460ff166124945760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060c565b6004805460ff1916905581156129aa576004805460405163dcacce6960e01b815230928101929092526001600160a01b0386811692610100909204169063dcacce6990602401602060405180830381865afa1580156124f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251b9190612e90565b6001600160a01b031614801561252e5750805b15612897576000600460019054906101000a90046001600160a01b03166001600160a01b031663a0be06f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ac9190612f0c565b9050801561277f5760006127106125c38584612044565b6125cd9190612f3b565b9050600080876001600160a01b0316604051806040016040528060198152602001787472616e7366657228616464726573732c75696e743235362960381b81525080519060200120600460019054906101000a90046001600160a01b03166001600160a01b031663add10aa26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268c9190612e90565b6040516001600160a01b0390911660248201526044810186905260640160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516126e79190613046565b6000604051808303816000865af19150503d8060008114612724576040519150601f19603f3d011682016040523d82523d6000602084013e612729565b606091505b50915091508180156127535750805115806127535750808060200190518101906127539190612f68565b61276f5760405162461bcd60e51b815260040161060c90613062565b6127798684611e00565b95505050505b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0387811660248301526044808301889052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b179052915160009283928916916128079190613046565b6000604051808303816000865af19150503d8060008114612844576040519150601f19603f3d011682016040523d82523d6000602084013e612849565b606091505b50915091508180156128735750805115806128735750808060200190518101906128739190612f68565b61288f5760405162461bcd60e51b815260040161060c90613062565b5050506129aa565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0386811660248301526044808301879052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1790529151600092839288169161291f9190613046565b6000604051808303816000865af19150503d806000811461295c576040519150601f19603f3d011682016040523d82523d6000602084013e612961565b606091505b509150915081801561298b57508051158061298b57508080602001905181019061298b9190612f68565b6129a75760405162461bcd60e51b815260040161060c90613062565b50505b50506004805460ff191660011790555050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612a3a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161060c565b8360ff16601b1480612a4f57508360ff16601c145b612aa65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161060c565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015612afa573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612b5d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161060c565b95945050505050565b600082612b738382612ff5565b91508110156105a35760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015260640161060c565b60006105a3600160701b6001600160701b038416613099565b60006121bb6001600160701b038316846130c8565b60005b83811015612c04578181015183820152602001612bec565b83811115612c13576000848401525b50505050565b6020815260008251806020840152612c38816040850160208701612be9565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612c6157600080fd5b50565b60008060408385031215612c7757600080fd5b8235612c8281612c4c565b946020939093013593505050565b600060208284031215612ca257600080fd5b81356121bb81612c4c565b600080600060608486031215612cc257600080fd5b8335612ccd81612c4c565b92506020840135612cdd81612c4c565b929592945050506040919091013590565b60008060408385031215612d0157600080fd5b8235612d0c81612c4c565b91506020830135612d1c81612c4c565b809150509250929050565b600060208284031215612d3957600080fd5b5035919050565b600080600080600080600060e0888a031215612d5b57600080fd5b8735612d6681612c4c565b96506020880135612d7681612c4c565b95506040880135945060608801359350608088013560ff81168114612d9a57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080600080600080600060c0888a031215612dd257600080fd5b873596506020880135955060408801359450606088013593506080880135612df981612c4c565b925060a088013567ffffffffffffffff80821115612e1657600080fd5b818a0191508a601f830112612e2a57600080fd5b813581811115612e3957600080fd5b8b6020828501011115612e4b57600080fd5b60208301945080935050505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600082821015612e8b57612e8b612e63565b500390565b600060208284031215612ea257600080fd5b81516121bb81612c4c565b6020808252818101527f52595a52537761703a204f4e4c595f524f555445525f43414e5f414343455353604082015260600190565b60208082526010908201526f1496569494ddd85c0e881313d0d2d15160821b604082015260600190565b600060208284031215612f1e57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b600082612f4a57612f4a612f25565b500490565b600060018201612f6157612f61612e63565b5060010190565b600060208284031215612f7a57600080fd5b815180151581146121bb57600080fd5b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b6000816000190483118215151615612ff057612ff0612e63565b500290565b6000821982111561300857613008612e63565b500190565b60008261301c5761301c612f25565b500690565b600063ffffffff8381169083168181101561303e5761303e612e63565b039392505050565b60008251613058818460208701612be9565b9190910192915050565b60208082526019908201527f52595a52537761703a205452414e534645525f4641494c454400000000000000604082015260600190565b60006001600160e01b03828116848216811515828404821116156130bf576130bf612e63565b02949350505050565b60006001600160e01b03838116806130e2576130e2612f25565b9216919091049291505056fea26469706673582212202c11e9c9053ec5eff28cea1b7ce8dcf9563829591d00ce0b6d49b85eebc74b8f64736f6c634300080f0033a264697066735822122042ab3deeea76d9aff90f62981eecf2a4ebbafa94f01099fd10802277726c825264736f6c634300080f0033
Deployed Bytecode Sourcemap
28256:2793:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28440:29;;;;;;;;-1:-1:-1;;;;;28440:29:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;28440:29:0;;;;;;;;28476:35;;;;;-1:-1:-1;;;;;28476:35:0;;;28671:34;;;;;;:::i;:::-;;:::i;28518:37::-;;;;;-1:-1:-1;;;;;28518:37:0;;;29397:105;29479:8;:15;29397:105;;;553:25:1;;;541:2;526:18;29397:105:0;407:177:1;28325:106:0;;;:::i;30751:295::-;;;;;;:::i;:::-;;:::i;:::-;;28712:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1305:14:1;;1298:22;1280:41;;1268:2;1253:18;28712:51:0;1140:187:1;28562:22:0;;;;;-1:-1:-1;;;28562:22:0;;;;;;29054:337;;;;;;:::i;:::-;;:::i;29510:972::-;;;;;;:::i;:::-;;:::i;28593:71::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28593:71:0;;;30490:253;;;;;;:::i;:::-;;:::i;28671:34::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28671:34:0;;-1:-1:-1;28671:34:0;:::o;28325:106::-;28398:31;;;;;;;:::i;:::-;-1:-1:-1;;28398:31:0;;;;;;;;;;;;;;;;28381:49;;28398:31;;28381:49;;:::i;:::-;;;;;;;;;;;;;28371:60;;;;;;28325:106;:::o;30751:295::-;30839:11;;-1:-1:-1;;;;;30839:11:0;30825:10;:25;30817:61;;;;-1:-1:-1;;;30817:61:0;;2230:2:1;30817:61:0;;;2212:21:1;2269:2;2249:18;;;2242:30;-1:-1:-1;;;2288:18:1;;;2281:53;2351:18;;30817:61:0;;;;;;;;;-1:-1:-1;;;;;30897:26:0;;30889:64;;;;-1:-1:-1;;;30889:64:0;;;;;;;:::i;:::-;30965:11;:26;;-1:-1:-1;;;;;;30965:26:0;-1:-1:-1;;;;;30965:26:0;;;;;;;;31008:30;;160:51:1;;;31008:30:0;;148:2:1;133:18;31008:30:0;;;;;;;;30751:295;:::o;29054:337::-;29135:10;;-1:-1:-1;;;29135:10:0;;;;29134:11;29126:60;;;;-1:-1:-1;;;29126:60:0;;2936:2:1;29126:60:0;;;2918:21:1;2975:2;2955:18;;;2948:30;3014:34;2994:18;;;2987:62;-1:-1:-1;;;3065:18:1;;;3058:34;3109:19;;29126:60:0;2734:400:1;29126:60:0;29206:10;;-1:-1:-1;;;29206:10:0;;;;29205:11;29197:53;;;;-1:-1:-1;;;29197:53:0;;3341:2:1;29197:53:0;;;3323:21:1;3380:2;3360:18;;;3353:30;3419:31;3399:18;;;3392:59;3468:18;;29197:53:0;3139:353:1;29197:53:0;-1:-1:-1;;;;;29270:21:0;;29262:59;;;;-1:-1:-1;;;29262:59:0;;;;;;;:::i;:::-;29332:13;:23;;-1:-1:-1;;;;;;29366:17:0;-1:-1:-1;;;;;29332:23:0;;;29366:17;;;;-1:-1:-1;;;29366:17:0;;;29054:337::o;29510:972::-;29602:12;13752:11;;;;13744:55;;;;-1:-1:-1;;;13744:55:0;;3699:2:1;13744:55:0;;;3681:21:1;3738:2;3718:18;;;3711:30;3777:33;3757:18;;;3750:61;3828:18;;13744:55:0;3497:355:1;13744:55:0;13891:5;13877:19;;-1:-1:-1;;13877:19:0;;;-1:-1:-1;;;;;29635:16:0;;::::1;::::0;;::::1;::::0;29627:68:::1;;;::::0;-1:-1:-1;;;29627:68:0;;4059:2:1;29627:68:0::1;::::0;::::1;4041:21:1::0;4098:2;4078:18;;;4071:30;4137:34;4117:18;;;4110:62;-1:-1:-1;;;4188:18:1;;;4181:37;4235:19;;29627:68:0::1;3857:403:1::0;29627:68:0::1;29707:14;29723::::0;29750:6:::1;-1:-1:-1::0;;;;;29741:15:0::1;:6;-1:-1:-1::0;;;;;29741:15:0::1;;:53;;29779:6;29787;29741:53;;;29760:6;29768;29741:53;29706:88:::0;;-1:-1:-1;29706:88:0;-1:-1:-1;;;;;;29813:20:0;::::1;29805:69;;;::::0;-1:-1:-1;;;29805:69:0;;4467:2:1;29805:69:0::1;::::0;::::1;4449:21:1::0;4506:2;4486:18;;;4479:30;4545:34;4525:18;;;4518:62;-1:-1:-1;;;4596:18:1;;;4589:34;4640:19;;29805:69:0::1;4265:400:1::0;29805:69:0::1;-1:-1:-1::0;;;;;29893:15:0;;::::1;29928:1;29893:15:::0;;;:7:::1;:15;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;::::1;:37:::0;29885:79:::1;;;::::0;-1:-1:-1;;;29885:79:0;;4872:2:1;29885:79:0::1;::::0;::::1;4854:21:1::0;4911:2;4891:18;;;4884:30;4950:31;4930:18;;;4923:59;4999:18;;29885:79:0::1;4670:353:1::0;29885:79:0::1;29976:21;30000:31;;;;;;;;:::i;:::-;-1:-1:-1::0;;30000:31:0;;;;;;;::::1;::::0;;::::1;;;::::0;;;-1:-1:-1;;5255:2:1;5251:15;;;5247:24;;30000:31:0::1;30067:32:::0;::::1;5235:37:1::0;5306:15;;;5302:24;5288:12;;;5281:46;30000:31:0;;-1:-1:-1;30042:12:0::1;::::0;5343::1;;30067:32:0::1;;;;;;;;;;;;30057:43;;;;;;30042:58;;30190:4;30179:8;30173:15;30168:2;30158:8;30154:17;30151:1;30143:52;30216:46;::::0;-1:-1:-1;;;30216:46:0;;-1:-1:-1;;;;;5596:15:1;;;30216:46:0::1;::::0;::::1;5578:34:1::0;5648:15;;;5628:18;;;5621:43;30135:60:0;;-1:-1:-1;30216:30:0;;::::1;::::0;::::1;::::0;5513:18:1;;30216:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;;30273:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;;:30;;;;::::1;-1:-1:-1::0;;;;;;30273:30:0;;::::1;::::0;::::1;::::0;;;30314:15;;;;;;:23;;;;;;;;:30;;;::::1;::::0;::::1;::::0;;30356:8:::1;:19:::0;;-1:-1:-1;30356:19:0;;::::1;::::0;;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;30386:15;;;:9:::1;:15:::0;;;;;;:22;;-1:-1:-1;;30386:22:0::1;::::0;;::::1;::::0;;;30458:15;;30424:50;;5849:51:1;;;5916:18;;;5909:34;30424:50:0::1;::::0;5822:18:1;30424:50:0::1;;;;;;;-1:-1:-1::0;;14057:11:0;:18;;-1:-1:-1;;14057:18:0;14071:4;14057:18;;;-1:-1:-1;29510:972:0;;;-1:-1:-1;;;29510:972:0:o;30490:253::-;30566:11;;-1:-1:-1;;;;;30566:11:0;30552:10;:25;30544:61;;;;-1:-1:-1;;;30544:61:0;;2230:2:1;30544:61:0;;;2212:21:1;2269:2;2249:18;;;2242:30;-1:-1:-1;;;2288:18:1;;;2281:53;2351:18;;30544:61:0;2028:347:1;30544:61:0;-1:-1:-1;;;;;30624:20:0;;30616:58;;;;-1:-1:-1;;;30616:58:0;;;;;;;:::i;:::-;30686:5;:14;;-1:-1:-1;;;;;;30686:14:0;;-1:-1:-1;;;;;30686:14:0;;;;;;;;;;;;;30717:18;;30729:5;;;160:51:1;;30717:18:0;;148:2:1;133:18;30717::0;14:203:1;-1:-1:-1;;;;;;;;:::o;222:180:1:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;771:173::-;839:20;;-1:-1:-1;;;;;888:31:1;;878:42;;868:70;;934:1;931;924:12;868:70;771:173;;;:::o;949:186::-;1008:6;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1100:29;1119:9;1100:29;:::i;:::-;1090:39;949:186;-1:-1:-1;;;949:186:1:o;1332:260::-;1400:6;1408;1461:2;1449:9;1440:7;1436:23;1432:32;1429:52;;;1477:1;1474;1467:12;1429:52;1500:29;1519:9;1500:29;:::i;:::-;1490:39;;1548:38;1582:2;1571:9;1567:18;1548:38;:::i;:::-;1538:48;;1332:260;;;;;:::o;1597:426::-;1726:3;1764:6;1758:13;1789:1;1799:129;1813:6;1810:1;1807:13;1799:129;;;1911:4;1895:14;;;1891:25;;1885:32;1872:11;;;1865:53;1828:12;1799:129;;;1946:6;1943:1;1940:13;1937:48;;;1981:1;1972:6;1967:3;1963:16;1956:27;1937:48;-1:-1:-1;2001:16:1;;;;;1597:426;-1:-1:-1;;1597:426:1:o;2380:349::-;2582:2;2564:21;;;2621:2;2601:18;;;2594:30;2660:27;2655:2;2640:18;;2633:55;2720:2;2705:18;;2380:349::o
Swarm Source
ipfs://42ab3deeea76d9aff90f62981eecf2a4ebbafa94f01099fd10802277726c8252
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.