Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
17218309 | 648 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Pool
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-11 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.2; library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } library Math { function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } // 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; } } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IFactory { function lpFee() external returns (uint); function feeTo() external returns (address); function totalPairs() external view returns (uint); function getPair(address tokenAddress) external view returns (address pair); function createPair(address tokenAddress) external returns (address pair); function createPairWithAddExactEthLP(address tokenAddress, uint tokenAmountMin, address to, uint deadline) payable external returns (address pair, uint lpAmount); event lpFeeUpdated(uint previousFee, uint newFee); event PairCreated(address indexed tokenAddress, address pair, uint); } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract ERC20 { using SafeMath for uint; string public constant name = 'PeppSwap LP'; string public constant symbol = 'PEPP-LP'; uint8 public constant decimals = 18; uint public totalSupply; mapping(address => uint) public balanceOf; mapping(address => mapping(address => uint)) public allowance; event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); constructor() {} 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, 'PeppSwap: INSUFFICIENT_BALANCE'); 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, 'PeppSwap: INSUFFICIENT_BALANCE'); balanceOf[to] = balanceOf[to].add(value); emit Transfer(from, to, value); } function approve(address spender, uint value) external returns (bool) { _approve(msg.sender, spender, value); return true; } function transfer(address to, uint value) external returns (bool) { _transfer(msg.sender, to, value); return true; } function transferFrom(address from, address to, uint value) external returns (bool) { if (allowance[from][msg.sender] != type(uint).max) { allowance[from][msg.sender] = allowance[from][msg.sender].sub(value, 'PeppSwap: INSUFFICIENT_ALLOWANCE'); } _transfer(from, to, value); return true; } } abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being 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 percentage 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. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } contract Pool is ERC20, ReentrancyGuard { using SafeMath for uint; using SafeERC20 for IERC20; address public token; address public factory; bool initialized; event Sync(uint reserve0, uint reserve1); 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 ); modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'PeppSwap: EXPIRED'); _; } constructor() { } function initialize(address _token) external { require(!initialized, 'PeppSwap: ALREADY_INITIALIZED'); initialized = true; factory = msg.sender; token = _token; } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'PeppSwap: ETH_TXN_FAILED'); } function token0() external pure returns (address _token) { _token = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; } function token1() external view returns (address _token) { _token = token; } function reserve0() external view returns (uint _reserve0) { _reserve0 = address(this).balance; } function reserve1() external view returns (uint _reserve1) { _reserve1 = IERC20(token).balanceOf(address(this)); } function getReserves() external view returns(uint _reserve0, uint _reserve1, uint _blockTimestampLast) { return ( address(this).balance, IERC20(token).balanceOf(address(this)), block.timestamp ); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure returns (uint amountOut) { require(amountIn > 0, 'PeppSwap: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'PeppSwap: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure returns (uint amountIn) { require(amountOut > 0, 'PeppSwap: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'PeppSwap: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } function swapExactETHForTokens(uint amount1min, address to, uint deadline) payable external ensure(deadline) nonReentrant returns (uint amount1) { address _token = token; // gas savings uint reserve0_ = (address(this).balance).sub(msg.value); uint reserve1_ = IERC20(_token).balanceOf(address(this)); amount1 = getAmountOut(msg.value, reserve0_, reserve1_); require(amount1min <= amount1, 'PeppSwap: SLIPPAGE_REACHED'); IERC20(_token).safeTransfer(to, amount1); emit Swap(msg.sender, msg.value, 0, 0, amount1, to); emit Sync(reserve0_.add(msg.value), reserve1_.sub(amount1)); } function swapETHForExactTokens(uint amount1, address to, uint deadline) payable external ensure(deadline) nonReentrant returns (uint amount0) { address _token = token; // gas savings uint reserve0_ = (address(this).balance).sub(msg.value); uint reserve1_ = IERC20(_token).balanceOf(address(this)); amount0 = getAmountIn(amount1, reserve0_, reserve1_); require(amount0 <= msg.value, 'PeppSwap: SLIPPAGE_REACHED'); IERC20(_token).safeTransfer(to, amount1); if(msg.value > amount0){ safeTransferETH(msg.sender, msg.value.sub(amount0)); } emit Swap(msg.sender, amount0, 0, 0, amount1, to); emit Sync(reserve0_.add(amount0), reserve1_.sub(amount1)); } function swapExactTokensForETH(uint amount1, uint amount0min, address to, uint deadline) external ensure(deadline) nonReentrant returns (uint amount0) { address _token = token; // gas savings uint reserve0_ = address(this).balance; uint reserve1_ = IERC20(_token).balanceOf(address(this)); IERC20(_token).safeTransferFrom(msg.sender, address(this), amount1); amount1 = (IERC20(_token).balanceOf(address(this))).sub(reserve1_); amount0 = getAmountOut(amount1, reserve1_, reserve0_); require(amount0min <= amount0, 'PeppSwap: SLIPPAGE_REACHED'); safeTransferETH(to, amount0); emit Swap(msg.sender, 0, amount1, amount0, 0, to); emit Sync(reserve0_.sub(amount0), reserve1_.add(amount1)); } function swapTokensForExactETH(uint amount0, uint amount1max, address to, uint deadline) external ensure(deadline) nonReentrant returns (uint amount1) { address _token = token; // gas savings uint reserve0_ = address(this).balance; uint reserve1_ = IERC20(_token).balanceOf(address(this)); amount1 = getAmountIn(amount0, reserve1_, reserve0_); require(amount1 <= amount1max, 'PeppSwap: SLIPPAGE_REACHED'); IERC20(_token).safeTransferFrom(msg.sender, address(this), amount1); require(amount1 == (IERC20(_token).balanceOf(address(this))).sub(reserve1_), 'PeppSwap: DEFLATIONARY_TOKEN_USE_EXACT_TOKENS'); safeTransferETH(to, amount0); emit Swap(msg.sender, 0, amount1, amount0, 0, to); emit Sync(reserve0_.sub(amount0), reserve1_.add(amount1)); } function _addLPinternal(uint amount0min, uint amount1, address from, address to) internal returns (uint lpAmount) { require(msg.value > 0 && amount1 > 0, 'PeppSwap: INVALID_AMOUNT'); address _token = token; // gas savings uint reserve0_ = (address(this).balance).sub(msg.value); uint reserve1_ = IERC20(_token).balanceOf(address(this)); uint _totalSupply = totalSupply; IERC20(_token).safeTransferFrom(from, address(this), amount1); amount1 = (IERC20(_token).balanceOf(address(this))).sub(reserve1_); uint amount0; if(_totalSupply > 0){ amount0 = ( amount1.mul( reserve0_ ) ).div(reserve1_); require(amount0 <= msg.value, 'PeppSwap: SLIPPAGE_REACHED_DESIRED'); require(amount0 >= amount0min, 'PeppSwap: SLIPPAGE_REACHED_MIN'); } else { amount0 = msg.value; } if (_totalSupply == 0) { lpAmount = Math.sqrt(amount0.mul(amount1)).sub(10**3); _mint(address(0), 10**3); } else { lpAmount = Math.min(amount0.mul(_totalSupply) / reserve0_, amount1.mul(_totalSupply) / reserve1_); } require(lpAmount > 0, 'PeppSwap: INSUFFICIENT_LIQUIDITY_MINTED'); // refund only if value is > 1000 wei if(msg.value > amount0.add(1000)){ safeTransferETH(from, msg.value.sub(amount0)); } uint _fee = IFactory(factory).lpFee(); if(_fee > 0){ uint _feeAmount = ( lpAmount.mul(_fee) ).div(10**4); _mint(IFactory(factory).feeTo(), _feeAmount); lpAmount = lpAmount.sub(_feeAmount); } _mint(to, lpAmount); emit Mint(from, amount0, amount1); emit Sync(reserve0_.add(amount0), reserve1_.add(amount1)); } function addLPfromFactory(uint amount0min, uint amount1, address from, address to, uint deadline) payable external ensure(deadline) nonReentrant returns (uint lpAmount) { require(msg.sender == factory, 'PeppSwap: FORBIDDEN'); lpAmount = _addLPinternal(amount0min, amount1, from, to); } function addLP(uint amount0min, uint amount1, address to, uint deadline) payable external ensure(deadline) nonReentrant returns (uint lpAmount) { lpAmount = _addLPinternal(amount0min, amount1, msg.sender, to); } function removeLiquidity(uint lpAmount, address to, uint deadline) external ensure(deadline) nonReentrant returns (uint amount0, uint amount1) { require(lpAmount > 0, 'PeppSwap: INSUFFICIENT_LIQUIDITY'); address _token = token; // gas savings uint reserve0_ = address(this).balance; uint reserve1_ = IERC20(_token).balanceOf(address(this)); uint _totalSupply = totalSupply; amount0 = lpAmount.mul(reserve0_) / _totalSupply; amount1 = lpAmount.mul(reserve1_) / _totalSupply; require(amount0 > 0 && amount1 > 0, 'PeppSwap: INSUFFICIENT_LIQUIDITY_BURNED'); _burn(msg.sender, lpAmount); IERC20(_token).safeTransfer(to, amount1); safeTransferETH(to, amount0); emit Burn(msg.sender, amount0, amount1, to); emit Sync(reserve0_.sub(amount0), reserve1_.sub(amount1)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reserve0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserve1","type":"uint256"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount0min","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLP","outputs":[{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0min","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLPfromFactory","outputs":[{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint256","name":"_reserve0","type":"uint256"},{"internalType":"uint256","name":"_reserve1","type":"uint256"},{"internalType":"uint256","name":"_blockTimestampLast","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lpAmount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve0","outputs":[{"internalType":"uint256","name":"_reserve0","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve1","outputs":[{"internalType":"uint256","name":"_reserve1","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount1min","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"uint256","name":"amount0min","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1max","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060016003556123eb806100256000396000f3fe6080604052600436106101815760003560e01c806385f8c259116100d1578063c4d66de81161008a578063e8063bea11610064578063e8063bea146104dd578063ece0c417146104f0578063fc0c546a14610503578063ffee770f1461052357600080fd5b8063c4d66de814610465578063d21220a714610487578063dd62ed3e146104a557600080fd5b806385f8c2591461037d57806395d89b411461039d578063a9059cbb146103d0578063aa20a83a146103f0578063c45a015514610410578063c4ccdeea1461043057600080fd5b806323b872dd1161013e5780635a76f25e116101185780635a76f25e146103085780635c7e072b1461031d57806370a082311461033d578063766156121461036a57600080fd5b806323b872dd146102ae578063313ce567146102ce578063443cb4bc146102f557600080fd5b8063054d50d41461018657806306fdde03146101b95780630902f1ac146101fd578063095ea7b31461022d5780630dfe16811461025d57806318160ddd14610298575b600080fd5b34801561019257600080fd5b506101a66101a1366004611fa8565b610536565b6040519081526020015b60405180910390f35b3480156101c557600080fd5b506101f06040518060400160405280600b81526020016a05065707053776170204c560ac1b81525081565b6040516101b09190611ff8565b34801561020957600080fd5b50610212610611565b604080519384526020840192909252908201526060016101b0565b34801561023957600080fd5b5061024d610248366004612043565b610693565b60405190151581526020016101b0565b34801561026957600080fd5b5073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b6040516001600160a01b0390911681526020016101b0565b3480156102a457600080fd5b506101a660005481565b3480156102ba57600080fd5b5061024d6102c936600461206f565b6106aa565b3480156102da57600080fd5b506102e3601281565b60405160ff90911681526020016101b0565b34801561030157600080fd5b50476101a6565b34801561031457600080fd5b506101a6610770565b34801561032957600080fd5b506101a66103383660046120b0565b6107e7565b34801561034957600080fd5b506101a66103583660046120ef565b60016020526000908152604090205481565b6101a66103783660046120b0565b6109f9565b34801561038957600080fd5b506101a6610398366004611fa8565b610a5e565b3480156103a957600080fd5b506101f0604051806040016040528060078152602001660504550502d4c560cc1b81525081565b3480156103dc57600080fd5b5061024d6103eb366004612043565b610b2e565b3480156103fc57600080fd5b506101a661040b3660046120b0565b610b3b565b34801561041c57600080fd5b50600554610280906001600160a01b031681565b34801561043c57600080fd5b5061045061044b36600461210c565b610d42565b604080519283526020830191909152016101b0565b34801561047157600080fd5b506104856104803660046120ef565b610f7c565b005b34801561049357600080fd5b506004546001600160a01b0316610280565b3480156104b157600080fd5b506101a66104c0366004612133565b600260209081526000928352604080842090915290825290205481565b6101a66104eb36600461210c565b611013565b6101a66104fe36600461216c565b6111cf565b34801561050f57600080fd5b50600454610280906001600160a01b031681565b6101a661053136600461210c565b611285565b60008084116105985760405162461bcd60e51b815260206004820152602360248201527f50657070537761703a20494e53554646494349454e545f494e5055545f414d4f60448201526215539560ea1b60648201526084015b60405180910390fd5b6000831180156105a85750600082115b6105c45760405162461bcd60e51b815260040161058f906121be565b60006105d2856103e56113fd565b905060006105e082856113fd565b905060006105fa836105f4886103e86113fd565b90611409565b90506106068183612209565b979650505050505050565b600480546040516370a0823160e01b815230928101929092526000918291829147916001600160a01b0316906370a0823190602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610687919061222b565b42925092509250909192565b60006106a0338484611415565b5060015b92915050565b6001600160a01b03831660009081526002602090815260408083203384529091528120546000191461075a5760408051808201825260208082527f50657070537761703a20494e53554646494349454e545f414c4c4f57414e4345818301526001600160a01b0387166000908152600282528381203382529091529190912054610735918490611477565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6107658484846114a3565b5060015b9392505050565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e2919061222b565b905090565b6000814281101561080a5760405162461bcd60e51b815260040161058f90612244565b60026003540361082c5760405162461bcd60e51b815260040161058f9061226f565b6002600355600480546040516370a0823160e01b815230928101929092526001600160a01b031690479060009083906370a0823190602401602060405180830381865afa158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a5919061222b565b90506108bc6001600160a01b03841633308c611581565b6040516370a0823160e01b81523060048201526109319082906001600160a01b038616906370a08231906024015b602060405180830381865afa158015610907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092b919061222b565b906115f2565b985061093e898284610536565b9450848811156109605760405162461bcd60e51b815260040161058f906122a6565b61096a87866115fe565b604080516000808252602082018c9052818301889052606082015290516001600160a01b0389169133916000805160206123768339815191529181900360800190a36000805160206123968339815191526109c583876115f2565b6109cf838c611409565b6040805192835260208301919091520160405180910390a150506001600355509095945050505050565b60008142811015610a1c5760405162461bcd60e51b815260040161058f90612244565b600260035403610a3e5760405162461bcd60e51b815260040161058f9061226f565b6002600355610a4f868633876116c0565b60016003559695505050505050565b6000808411610abb5760405162461bcd60e51b8152602060048201526024808201527f50657070537761703a20494e53554646494349454e545f4f55545055545f414d60448201526313d5539560e21b606482015260840161058f565b600083118015610acb5750600082115b610ae75760405162461bcd60e51b815260040161058f906121be565b6000610aff6103e8610af986886113fd565b906113fd565b90506000610b136103e5610af986896115f2565b9050610b2460016105f48385612209565b9695505050505050565b60006106a03384846114a3565b60008142811015610b5e5760405162461bcd60e51b815260040161058f90612244565b600260035403610b805760405162461bcd60e51b815260040161058f9061226f565b6002600355600480546040516370a0823160e01b815230928101929092526001600160a01b031690479060009083906370a0823190602401602060405180830381865afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf9919061222b565b9050610c06898284610a5e565b945087851115610c285760405162461bcd60e51b815260040161058f906122a6565b610c3d6001600160a01b038416333088611581565b6040516370a0823160e01b8152306004820152610c6f9082906001600160a01b038616906370a08231906024016108ea565b8514610cd35760405162461bcd60e51b815260206004820152602d60248201527f50657070537761703a204445464c4154494f4e4152595f544f4b454e5f55534560448201526c5f45584143545f544f4b454e5360981b606482015260840161058f565b610cdd878a6115fe565b604080516000808252602082018890528183018c9052606082015290516001600160a01b0389169133916000805160206123768339815191529181900360800190a3600080516020612396833981519152610d38838b6115f2565b6109cf8388611409565b6000808242811015610d665760405162461bcd60e51b815260040161058f90612244565b600260035403610d885760405162461bcd60e51b815260040161058f9061226f565b600260035585610daa5760405162461bcd60e51b815260040161058f906121be565b600480546040516370a0823160e01b815230928101929092526001600160a01b031690479060009083906370a0823190602401602060405180830381865afa158015610dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1e919061222b565b60005490915080610e2f8b856113fd565b610e399190612209565b965080610e468b846113fd565b610e509190612209565b9550600087118015610e625750600086115b610ebe5760405162461bcd60e51b815260206004820152602760248201527f50657070537761703a20494e53554646494349454e545f4c495155494449545960448201526617d0955493915160ca1b606482015260840161058f565b610ec8338b611b5f565b610edc6001600160a01b0385168a88611c29565b610ee689886115fe565b60408051888152602081018890526001600160a01b038b169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a3600080516020612396833981519152610f4584896115f2565b610f4f84896115f2565b6040805192835260208301919091520160405180910390a150505050600160038190555050935093915050565b600554600160a01b900460ff1615610fd65760405162461bcd60e51b815260206004820152601d60248201527f50657070537761703a20414c52454144595f494e495449414c495a4544000000604482015260640161058f565b600580546001600160a81b0319163317600160a01b179055600480546001600160a01b03929092166001600160a01b031992909216919091179055565b600081428110156110365760405162461bcd60e51b815260040161058f90612244565b6002600354036110585760405162461bcd60e51b815260040161058f9061226f565b60026003556004546001600160a01b0316600061107547346115f2565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156110bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e3919061222b565b90506110f0888383610a5e565b9450348511156111125760405162461bcd60e51b815260040161058f906122a6565b6111266001600160a01b038416888a611c29565b84341115611141576111413361113c34886115f2565b6115fe565b6040805186815260006020820181905281830152606081018a905290516001600160a01b0389169133916000805160206123768339815191529181900360800190a360008051602061239683398151915261119c8387611409565b6111a6838b6115f2565b6040805192835260208301919091520160405180910390a1505060016003555090949350505050565b600081428110156111f25760405162461bcd60e51b815260040161058f90612244565b6002600354036112145760405162461bcd60e51b815260040161058f9061226f565b60026003556005546001600160a01b031633146112695760405162461bcd60e51b81526020600482015260136024820152722832b83829bbb0b81d102327a92124a22222a760691b604482015260640161058f565b611275878787876116c0565b6001600355979650505050505050565b600081428110156112a85760405162461bcd60e51b815260040161058f90612244565b6002600354036112ca5760405162461bcd60e51b815260040161058f9061226f565b60026003556004546001600160a01b031660006112e747346115f2565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611355919061222b565b9050611362348383610536565b9450848811156113845760405162461bcd60e51b815260040161058f906122a6565b6113986001600160a01b0384168887611c29565b60408051348152600060208201819052818301526060810187905290516001600160a01b0389169133916000805160206123768339815191529181900360800190a36000805160206123968339815191526113f38334611409565b6111a683886115f2565b600061076982846122dd565b600061076982846122f4565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000818484111561149b5760405162461bcd60e51b815260040161058f9190611ff8565b505050900390565b604080518082018252601e81527f50657070537761703a20494e53554646494349454e545f42414c414e434500006020808301919091526001600160a01b0386166000908152600190915291909120546114fe918390611477565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461152d9082611409565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061146a9085815260200190565b6040516001600160a01b03808516602483015283166044820152606481018290526115ec9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611c59565b50505050565b60006107698284612307565b604080516000808252602082019092526001600160a01b038416908390604051611628919061231a565b60006040518083038185875af1925050503d8060008114611665576040519150601f19603f3d011682016040523d82523d6000602084013e61166a565b606091505b50509050806116bb5760405162461bcd60e51b815260206004820152601860248201527f50657070537761703a204554485f54584e5f4641494c45440000000000000000604482015260640161058f565b505050565b600080341180156116d15750600084115b61171d5760405162461bcd60e51b815260206004820152601860248201527f50657070537761703a20494e56414c49445f414d4f554e540000000000000000604482015260640161058f565b6004546001600160a01b0316600061173547346115f2565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561177f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a3919061222b565b6000549091506117be6001600160a01b03851688308b611581565b6040516370a0823160e01b81523060048201526117f09083906001600160a01b038716906370a08231906024016108ea565b9750600081156118c05761180e836118088b876113fd565b90611d2b565b90503481111561186b5760405162461bcd60e51b815260206004820152602260248201527f50657070537761703a20534c4950504147455f524541434845445f4445534952604482015261115160f21b606482015260840161058f565b898110156118bb5760405162461bcd60e51b815260206004820152601e60248201527f50657070537761703a20534c4950504147455f524541434845445f4d494e0000604482015260640161058f565b6118c3565b50345b816000036118f7576118e36103e861092b6118de848d6113fd565b611d37565b95506118f260006103e8611da7565b61192c565b6119298461190583856113fd565b61190f9190612209565b8461191a8c866113fd565b6119249190612209565b611e2a565b95505b6000861161198c5760405162461bcd60e51b815260206004820152602760248201527f50657070537761703a20494e53554646494349454e545f4c495155494449545960448201526617d3525395115160ca1b606482015260840161058f565b611998816103e8611409565b3411156119ad576119ad8861113c34846115f2565b60055460408051633826721f60e11b815290516000926001600160a01b03169163704ce43e916004808301926020929190829003018187875af11580156119f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1c919061222b565b90508015611ac8576000611a366127106118088a856113fd565b9050611aba600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab49190612336565b82611da7565b611ac488826115f2565b9750505b611ad28888611da7565b60408051838152602081018c90526001600160a01b038b16917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a2600080516020612396833981519152611b2f8684611409565b611b39868d611409565b6040805192835260208301919091520160405180910390a1505050505050949350505050565b604080518082018252601e81527f50657070537761703a20494e53554646494349454e545f42414c414e434500006020808301919091526001600160a01b038516600090815260019091529190912054611bba918390611477565b6001600160a01b03831660009081526001602052604081209190915554611be190826115f2565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6040516001600160a01b0383166024820152604481018290526116bb90849063a9059cbb60e01b906064016115b5565b6000611cae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e409092919063ffffffff16565b8051909150156116bb5780806020019051810190611ccc9190612353565b6116bb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161058f565b60006107698284612209565b60006003821115611d985750806000611d51600283612209565b611d5c9060016122f4565b90505b81811015611d9257905080600281611d778186612209565b611d8191906122f4565b611d8b9190612209565b9050611d5f565b50919050565b8115611da2575060015b919050565b600054611db49082611409565b60009081556001600160a01b038316815260016020526040902054611dd99082611409565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c1d9085815260200190565b6000818310611e395781610769565b5090919050565b6060611e4f8484600085611e57565b949350505050565b606082471015611eb85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161058f565b843b611f065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161058f565b600080866001600160a01b03168587604051611f22919061231a565b60006040518083038185875af1925050503d8060008114611f5f576040519150601f19603f3d011682016040523d82523d6000602084013e611f64565b606091505b509150915061060682828660608315611f7e575081610769565b825115611f8e5782518084602001fd5b8160405162461bcd60e51b815260040161058f9190611ff8565b600080600060608486031215611fbd57600080fd5b505081359360208301359350604090920135919050565b60005b83811015611fef578181015183820152602001611fd7565b50506000910152565b6020815260008251806020840152612017816040850160208701611fd4565b601f01601f19169190910160400192915050565b6001600160a01b038116811461204057600080fd5b50565b6000806040838503121561205657600080fd5b82356120618161202b565b946020939093013593505050565b60008060006060848603121561208457600080fd5b833561208f8161202b565b9250602084013561209f8161202b565b929592945050506040919091013590565b600080600080608085870312156120c657600080fd5b843593506020850135925060408501356120df8161202b565b9396929550929360600135925050565b60006020828403121561210157600080fd5b81356107698161202b565b60008060006060848603121561212157600080fd5b83359250602084013561209f8161202b565b6000806040838503121561214657600080fd5b82356121518161202b565b915060208301356121618161202b565b809150509250929050565b600080600080600060a0868803121561218457600080fd5b8535945060208601359350604086013561219d8161202b565b925060608601356121ad8161202b565b949793965091946080013592915050565b6020808252818101527f50657070537761703a20494e53554646494349454e545f4c4951554944495459604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261222657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561223d57600080fd5b5051919050565b60208082526011908201527014195c1c14ddd85c0e8811561412549151607a1b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601a908201527f50657070537761703a20534c4950504147455f52454143484544000000000000604082015260600190565b80820281158282048414176106a4576106a46121f3565b808201808211156106a4576106a46121f3565b818103818111156106a4576106a46121f3565b6000825161232c818460208701611fd4565b9190910192915050565b60006020828403121561234857600080fd5b81516107698161202b565b60006020828403121561236557600080fd5b8151801515811461076957600080fdfed78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822cf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848aa2646970667358221220f7760a5147b46fd3eb33b044d756842fbd517e0417ae93f7d8bcfe95cacefa4164736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101815760003560e01c806385f8c259116100d1578063c4d66de81161008a578063e8063bea11610064578063e8063bea146104dd578063ece0c417146104f0578063fc0c546a14610503578063ffee770f1461052357600080fd5b8063c4d66de814610465578063d21220a714610487578063dd62ed3e146104a557600080fd5b806385f8c2591461037d57806395d89b411461039d578063a9059cbb146103d0578063aa20a83a146103f0578063c45a015514610410578063c4ccdeea1461043057600080fd5b806323b872dd1161013e5780635a76f25e116101185780635a76f25e146103085780635c7e072b1461031d57806370a082311461033d578063766156121461036a57600080fd5b806323b872dd146102ae578063313ce567146102ce578063443cb4bc146102f557600080fd5b8063054d50d41461018657806306fdde03146101b95780630902f1ac146101fd578063095ea7b31461022d5780630dfe16811461025d57806318160ddd14610298575b600080fd5b34801561019257600080fd5b506101a66101a1366004611fa8565b610536565b6040519081526020015b60405180910390f35b3480156101c557600080fd5b506101f06040518060400160405280600b81526020016a05065707053776170204c560ac1b81525081565b6040516101b09190611ff8565b34801561020957600080fd5b50610212610611565b604080519384526020840192909252908201526060016101b0565b34801561023957600080fd5b5061024d610248366004612043565b610693565b60405190151581526020016101b0565b34801561026957600080fd5b5073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b6040516001600160a01b0390911681526020016101b0565b3480156102a457600080fd5b506101a660005481565b3480156102ba57600080fd5b5061024d6102c936600461206f565b6106aa565b3480156102da57600080fd5b506102e3601281565b60405160ff90911681526020016101b0565b34801561030157600080fd5b50476101a6565b34801561031457600080fd5b506101a6610770565b34801561032957600080fd5b506101a66103383660046120b0565b6107e7565b34801561034957600080fd5b506101a66103583660046120ef565b60016020526000908152604090205481565b6101a66103783660046120b0565b6109f9565b34801561038957600080fd5b506101a6610398366004611fa8565b610a5e565b3480156103a957600080fd5b506101f0604051806040016040528060078152602001660504550502d4c560cc1b81525081565b3480156103dc57600080fd5b5061024d6103eb366004612043565b610b2e565b3480156103fc57600080fd5b506101a661040b3660046120b0565b610b3b565b34801561041c57600080fd5b50600554610280906001600160a01b031681565b34801561043c57600080fd5b5061045061044b36600461210c565b610d42565b604080519283526020830191909152016101b0565b34801561047157600080fd5b506104856104803660046120ef565b610f7c565b005b34801561049357600080fd5b506004546001600160a01b0316610280565b3480156104b157600080fd5b506101a66104c0366004612133565b600260209081526000928352604080842090915290825290205481565b6101a66104eb36600461210c565b611013565b6101a66104fe36600461216c565b6111cf565b34801561050f57600080fd5b50600454610280906001600160a01b031681565b6101a661053136600461210c565b611285565b60008084116105985760405162461bcd60e51b815260206004820152602360248201527f50657070537761703a20494e53554646494349454e545f494e5055545f414d4f60448201526215539560ea1b60648201526084015b60405180910390fd5b6000831180156105a85750600082115b6105c45760405162461bcd60e51b815260040161058f906121be565b60006105d2856103e56113fd565b905060006105e082856113fd565b905060006105fa836105f4886103e86113fd565b90611409565b90506106068183612209565b979650505050505050565b600480546040516370a0823160e01b815230928101929092526000918291829147916001600160a01b0316906370a0823190602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610687919061222b565b42925092509250909192565b60006106a0338484611415565b5060015b92915050565b6001600160a01b03831660009081526002602090815260408083203384529091528120546000191461075a5760408051808201825260208082527f50657070537761703a20494e53554646494349454e545f414c4c4f57414e4345818301526001600160a01b0387166000908152600282528381203382529091529190912054610735918490611477565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6107658484846114a3565b5060015b9392505050565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156107be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e2919061222b565b905090565b6000814281101561080a5760405162461bcd60e51b815260040161058f90612244565b60026003540361082c5760405162461bcd60e51b815260040161058f9061226f565b6002600355600480546040516370a0823160e01b815230928101929092526001600160a01b031690479060009083906370a0823190602401602060405180830381865afa158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a5919061222b565b90506108bc6001600160a01b03841633308c611581565b6040516370a0823160e01b81523060048201526109319082906001600160a01b038616906370a08231906024015b602060405180830381865afa158015610907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092b919061222b565b906115f2565b985061093e898284610536565b9450848811156109605760405162461bcd60e51b815260040161058f906122a6565b61096a87866115fe565b604080516000808252602082018c9052818301889052606082015290516001600160a01b0389169133916000805160206123768339815191529181900360800190a36000805160206123968339815191526109c583876115f2565b6109cf838c611409565b6040805192835260208301919091520160405180910390a150506001600355509095945050505050565b60008142811015610a1c5760405162461bcd60e51b815260040161058f90612244565b600260035403610a3e5760405162461bcd60e51b815260040161058f9061226f565b6002600355610a4f868633876116c0565b60016003559695505050505050565b6000808411610abb5760405162461bcd60e51b8152602060048201526024808201527f50657070537761703a20494e53554646494349454e545f4f55545055545f414d60448201526313d5539560e21b606482015260840161058f565b600083118015610acb5750600082115b610ae75760405162461bcd60e51b815260040161058f906121be565b6000610aff6103e8610af986886113fd565b906113fd565b90506000610b136103e5610af986896115f2565b9050610b2460016105f48385612209565b9695505050505050565b60006106a03384846114a3565b60008142811015610b5e5760405162461bcd60e51b815260040161058f90612244565b600260035403610b805760405162461bcd60e51b815260040161058f9061226f565b6002600355600480546040516370a0823160e01b815230928101929092526001600160a01b031690479060009083906370a0823190602401602060405180830381865afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf9919061222b565b9050610c06898284610a5e565b945087851115610c285760405162461bcd60e51b815260040161058f906122a6565b610c3d6001600160a01b038416333088611581565b6040516370a0823160e01b8152306004820152610c6f9082906001600160a01b038616906370a08231906024016108ea565b8514610cd35760405162461bcd60e51b815260206004820152602d60248201527f50657070537761703a204445464c4154494f4e4152595f544f4b454e5f55534560448201526c5f45584143545f544f4b454e5360981b606482015260840161058f565b610cdd878a6115fe565b604080516000808252602082018890528183018c9052606082015290516001600160a01b0389169133916000805160206123768339815191529181900360800190a3600080516020612396833981519152610d38838b6115f2565b6109cf8388611409565b6000808242811015610d665760405162461bcd60e51b815260040161058f90612244565b600260035403610d885760405162461bcd60e51b815260040161058f9061226f565b600260035585610daa5760405162461bcd60e51b815260040161058f906121be565b600480546040516370a0823160e01b815230928101929092526001600160a01b031690479060009083906370a0823190602401602060405180830381865afa158015610dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1e919061222b565b60005490915080610e2f8b856113fd565b610e399190612209565b965080610e468b846113fd565b610e509190612209565b9550600087118015610e625750600086115b610ebe5760405162461bcd60e51b815260206004820152602760248201527f50657070537761703a20494e53554646494349454e545f4c495155494449545960448201526617d0955493915160ca1b606482015260840161058f565b610ec8338b611b5f565b610edc6001600160a01b0385168a88611c29565b610ee689886115fe565b60408051888152602081018890526001600160a01b038b169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a3600080516020612396833981519152610f4584896115f2565b610f4f84896115f2565b6040805192835260208301919091520160405180910390a150505050600160038190555050935093915050565b600554600160a01b900460ff1615610fd65760405162461bcd60e51b815260206004820152601d60248201527f50657070537761703a20414c52454144595f494e495449414c495a4544000000604482015260640161058f565b600580546001600160a81b0319163317600160a01b179055600480546001600160a01b03929092166001600160a01b031992909216919091179055565b600081428110156110365760405162461bcd60e51b815260040161058f90612244565b6002600354036110585760405162461bcd60e51b815260040161058f9061226f565b60026003556004546001600160a01b0316600061107547346115f2565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156110bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e3919061222b565b90506110f0888383610a5e565b9450348511156111125760405162461bcd60e51b815260040161058f906122a6565b6111266001600160a01b038416888a611c29565b84341115611141576111413361113c34886115f2565b6115fe565b6040805186815260006020820181905281830152606081018a905290516001600160a01b0389169133916000805160206123768339815191529181900360800190a360008051602061239683398151915261119c8387611409565b6111a6838b6115f2565b6040805192835260208301919091520160405180910390a1505060016003555090949350505050565b600081428110156111f25760405162461bcd60e51b815260040161058f90612244565b6002600354036112145760405162461bcd60e51b815260040161058f9061226f565b60026003556005546001600160a01b031633146112695760405162461bcd60e51b81526020600482015260136024820152722832b83829bbb0b81d102327a92124a22222a760691b604482015260640161058f565b611275878787876116c0565b6001600355979650505050505050565b600081428110156112a85760405162461bcd60e51b815260040161058f90612244565b6002600354036112ca5760405162461bcd60e51b815260040161058f9061226f565b60026003556004546001600160a01b031660006112e747346115f2565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611355919061222b565b9050611362348383610536565b9450848811156113845760405162461bcd60e51b815260040161058f906122a6565b6113986001600160a01b0384168887611c29565b60408051348152600060208201819052818301526060810187905290516001600160a01b0389169133916000805160206123768339815191529181900360800190a36000805160206123968339815191526113f38334611409565b6111a683886115f2565b600061076982846122dd565b600061076982846122f4565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000818484111561149b5760405162461bcd60e51b815260040161058f9190611ff8565b505050900390565b604080518082018252601e81527f50657070537761703a20494e53554646494349454e545f42414c414e434500006020808301919091526001600160a01b0386166000908152600190915291909120546114fe918390611477565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461152d9082611409565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061146a9085815260200190565b6040516001600160a01b03808516602483015283166044820152606481018290526115ec9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611c59565b50505050565b60006107698284612307565b604080516000808252602082019092526001600160a01b038416908390604051611628919061231a565b60006040518083038185875af1925050503d8060008114611665576040519150601f19603f3d011682016040523d82523d6000602084013e61166a565b606091505b50509050806116bb5760405162461bcd60e51b815260206004820152601860248201527f50657070537761703a204554485f54584e5f4641494c45440000000000000000604482015260640161058f565b505050565b600080341180156116d15750600084115b61171d5760405162461bcd60e51b815260206004820152601860248201527f50657070537761703a20494e56414c49445f414d4f554e540000000000000000604482015260640161058f565b6004546001600160a01b0316600061173547346115f2565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561177f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a3919061222b565b6000549091506117be6001600160a01b03851688308b611581565b6040516370a0823160e01b81523060048201526117f09083906001600160a01b038716906370a08231906024016108ea565b9750600081156118c05761180e836118088b876113fd565b90611d2b565b90503481111561186b5760405162461bcd60e51b815260206004820152602260248201527f50657070537761703a20534c4950504147455f524541434845445f4445534952604482015261115160f21b606482015260840161058f565b898110156118bb5760405162461bcd60e51b815260206004820152601e60248201527f50657070537761703a20534c4950504147455f524541434845445f4d494e0000604482015260640161058f565b6118c3565b50345b816000036118f7576118e36103e861092b6118de848d6113fd565b611d37565b95506118f260006103e8611da7565b61192c565b6119298461190583856113fd565b61190f9190612209565b8461191a8c866113fd565b6119249190612209565b611e2a565b95505b6000861161198c5760405162461bcd60e51b815260206004820152602760248201527f50657070537761703a20494e53554646494349454e545f4c495155494449545960448201526617d3525395115160ca1b606482015260840161058f565b611998816103e8611409565b3411156119ad576119ad8861113c34846115f2565b60055460408051633826721f60e11b815290516000926001600160a01b03169163704ce43e916004808301926020929190829003018187875af11580156119f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1c919061222b565b90508015611ac8576000611a366127106118088a856113fd565b9050611aba600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab49190612336565b82611da7565b611ac488826115f2565b9750505b611ad28888611da7565b60408051838152602081018c90526001600160a01b038b16917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a2600080516020612396833981519152611b2f8684611409565b611b39868d611409565b6040805192835260208301919091520160405180910390a1505050505050949350505050565b604080518082018252601e81527f50657070537761703a20494e53554646494349454e545f42414c414e434500006020808301919091526001600160a01b038516600090815260019091529190912054611bba918390611477565b6001600160a01b03831660009081526001602052604081209190915554611be190826115f2565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6040516001600160a01b0383166024820152604481018290526116bb90849063a9059cbb60e01b906064016115b5565b6000611cae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e409092919063ffffffff16565b8051909150156116bb5780806020019051810190611ccc9190612353565b6116bb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161058f565b60006107698284612209565b60006003821115611d985750806000611d51600283612209565b611d5c9060016122f4565b90505b81811015611d9257905080600281611d778186612209565b611d8191906122f4565b611d8b9190612209565b9050611d5f565b50919050565b8115611da2575060015b919050565b600054611db49082611409565b60009081556001600160a01b038316815260016020526040902054611dd99082611409565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c1d9085815260200190565b6000818310611e395781610769565b5090919050565b6060611e4f8484600085611e57565b949350505050565b606082471015611eb85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161058f565b843b611f065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161058f565b600080866001600160a01b03168587604051611f22919061231a565b60006040518083038185875af1925050503d8060008114611f5f576040519150601f19603f3d011682016040523d82523d6000602084013e611f64565b606091505b509150915061060682828660608315611f7e575081610769565b825115611f8e5782518084602001fd5b8160405162461bcd60e51b815260040161058f9190611ff8565b600080600060608486031215611fbd57600080fd5b505081359360208301359350604090920135919050565b60005b83811015611fef578181015183820152602001611fd7565b50506000910152565b6020815260008251806020840152612017816040850160208701611fd4565b601f01601f19169190910160400192915050565b6001600160a01b038116811461204057600080fd5b50565b6000806040838503121561205657600080fd5b82356120618161202b565b946020939093013593505050565b60008060006060848603121561208457600080fd5b833561208f8161202b565b9250602084013561209f8161202b565b929592945050506040919091013590565b600080600080608085870312156120c657600080fd5b843593506020850135925060408501356120df8161202b565b9396929550929360600135925050565b60006020828403121561210157600080fd5b81356107698161202b565b60008060006060848603121561212157600080fd5b83359250602084013561209f8161202b565b6000806040838503121561214657600080fd5b82356121518161202b565b915060208301356121618161202b565b809150509250929050565b600080600080600060a0868803121561218457600080fd5b8535945060208601359350604086013561219d8161202b565b925060608601356121ad8161202b565b949793965091946080013592915050565b6020808252818101527f50657070537761703a20494e53554646494349454e545f4c4951554944495459604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261222657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561223d57600080fd5b5051919050565b60208082526011908201527014195c1c14ddd85c0e8811561412549151607a1b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601a908201527f50657070537761703a20534c4950504147455f52454143484544000000000000604082015260600190565b80820281158282048414176106a4576106a46121f3565b808201808211156106a4576106a46121f3565b818103818111156106a4576106a46121f3565b6000825161232c818460208701611fd4565b9190910192915050565b60006020828403121561234857600080fd5b81516107698161202b565b60006020828403121561236557600080fd5b8151801515811461076957600080fdfed78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822cf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848aa2646970667358221220f7760a5147b46fd3eb33b044d756842fbd517e0417ae93f7d8bcfe95cacefa4164736f6c63430008130033
Deployed Bytecode Sourcemap
15555:9362:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17476:499;;;;;;;;;;-1:-1:-1;17476:499:0;;;;;:::i;:::-;;:::i;:::-;;;481:25:1;;;469:2;454:18;17476:499:0;;;;;;;;12349:43;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12349:43:0;;;;;;;;;;;;:::i;17209:259::-;;;;;;;;;;;;;:::i;:::-;;;;1375:25:1;;;1431:2;1416:18;;1409:34;;;;1459:18;;;1452:34;1363:2;1348:18;17209:259:0;1173:319:1;13719:147:0;;;;;;;;;;-1:-1:-1;13719:147:0;;;;;:::i;:::-;;:::i;:::-;;;2118:14:1;;2111:22;2093:41;;2081:2;2066:18;13719:147:0;1953:187:1;16721:127:0;;;;;;;;;;-1:-1:-1;16798:42:0;16721:127;;;-1:-1:-1;;;;;2309:32:1;;;2291:51;;2279:2;2264:18;16721:127:0;2145:203:1;12489:24:0;;;;;;;;;;;;;;;;14021:343;;;;;;;;;;-1:-1:-1;14021:343:0;;;;;:::i;:::-;;:::i;12447:35::-;;;;;;;;;;;;12480:2;12447:35;;;;;2986:4:1;2974:17;;;2956:36;;2944:2;2929:18;12447:35:0;2814:184:1;16954:111:0;;;;;;;;;;-1:-1:-1;17036:21:0;16954:111;;17073:128;;;;;;;;;;;;;:::i;19891:801::-;;;;;;;;;;-1:-1:-1;19891:801:0;;;;;:::i;:::-;;:::i;12520:41::-;;;;;;;;;;-1:-1:-1;12520:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;23773:225;;;;;;:::i;:::-;;:::i;17983:454::-;;;;;;;;;;-1:-1:-1;17983:454:0;;;;;:::i;:::-;;:::i;12399:41::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12399:41:0;;;;;13874:139;;;;;;;;;;-1:-1:-1;13874:139:0;;;;;:::i;:::-;;:::i;20700:867::-;;;;;;;;;;-1:-1:-1;20700:867:0;;;;;:::i;:::-;;:::i;15694:22::-;;;;;;;;;;-1:-1:-1;15694:22:0;;;;-1:-1:-1;;;;;15694:22:0;;;24006:902;;;;;;;;;;-1:-1:-1;24006:902:0;;;;;:::i;:::-;;:::i;:::-;;;;4274:25:1;;;4330:2;4315:18;;4308:34;;;;4247:18;24006:902:0;4100:248:1;16311:205:0;;;;;;;;;;-1:-1:-1;16311:205:0;;;;;:::i;:::-;;:::i;:::-;;16856:90;;;;;;;;;;-1:-1:-1;16933:5:0;;-1:-1:-1;;;;;16933:5:0;16856:90;;12568:61;;;;;;;;;;-1:-1:-1;12568:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;19130:753;;;;;;:::i;:::-;;:::i;23457:308::-;;;;;;:::i;:::-;;:::i;15667:20::-;;;;;;;;;;-1:-1:-1;15667:20:0;;;;-1:-1:-1;;;;;15667:20:0;;;18445:673;;;;;;:::i;:::-;;:::i;17476:499::-;17567:14;17613:1;17602:8;:12;17594:60;;;;-1:-1:-1;;;17594:60:0;;5547:2:1;17594:60:0;;;5529:21:1;5586:2;5566:18;;;5559:30;5625:34;5605:18;;;5598:62;-1:-1:-1;;;5676:18:1;;;5669:33;5719:19;;17594:60:0;;;;;;;;;17685:1;17673:9;:13;:31;;;;;17703:1;17690:10;:14;17673:31;17665:76;;;;-1:-1:-1;;;17665:76:0;;;;;;;:::i;:::-;17752:20;17775:17;:8;17788:3;17775:12;:17::i;:::-;17752:40;-1:-1:-1;17803:14:0;17820:31;17752:40;17840:10;17820:19;:31::i;:::-;17803:48;-1:-1:-1;17862:16:0;17881:40;17905:15;17881:19;:9;17895:4;17881:13;:19::i;:::-;:23;;:40::i;:::-;17862:59;-1:-1:-1;17944:23:0;17862:59;17944:9;:23;:::i;:::-;17932:35;17476:499;-1:-1:-1;;;;;;;17476:499:0:o;17209:259::-;17388:5;;;17381:38;;-1:-1:-1;;;17381:38:0;;17413:4;17381:38;;;2291:51:1;;;;17254:14:0;;;;;;17345:21;;-1:-1:-1;;;;;17388:5:0;;17381:23;;2264:18:1;;17381:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17434:15;17323:137;;;;;;17209:259;;;:::o;13719:147::-;13783:4;13800:36;13809:10;13821:7;13830:5;13800:8;:36::i;:::-;-1:-1:-1;13854:4:0;13719:147;;;;;:::o;14021:343::-;-1:-1:-1;;;;;14120:15:0;;14099:4;14120:15;;;:9;:15;;;;;;;;14136:10;14120:27;;;;;;;;-1:-1:-1;;14120:45:0;14116:182;;14212:74;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14212:15:0;;-1:-1:-1;14212:15:0;;;:9;:15;;;;;14228:10;14212:27;;;;;;;;;;:74;;14244:5;;14212:31;:74::i;:::-;-1:-1:-1;;;;;14182:15:0;;;;;;:9;:15;;;;;;;;14198:10;14182:27;;;;;;;:104;14116:182;14308:26;14318:4;14324:2;14328:5;14308:9;:26::i;:::-;-1:-1:-1;14352:4:0;14021:343;;;;;;:::o;17073:128::-;17162:5;;;17155:38;;-1:-1:-1;;;17155:38:0;;17187:4;17155:38;;;2291:51:1;;;;17116:14:0;;-1:-1:-1;;;;;17162:5:0;;;;17155:23;;2264:18:1;;17155:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17143:50;;17073:128;:::o;19891:801::-;20028:12;19996:8;16205:15;16193:8;:27;;16185:57;;;;-1:-1:-1;;;16185:57:0;;;;;;;:::i;:::-;15255:1:::1;15407:7;;:19:::0;15399:63:::1;;;;-1:-1:-1::0;;;15399:63:0::1;;;;;;;:::i;:::-;15255:1;15475:7;:18:::0;20070:5:::2;::::0;;20174:39:::2;::::0;-1:-1:-1;;;20174:39:0;;20207:4:::2;20174:39:::0;;::::2;2291:51:1::0;;;;-1:-1:-1;;;;;20070:5:0::2;::::0;20125:21:::2;::::0;20053:14:::2;::::0;20070:5;;20174:24:::2;::::0;2264:18:1;;20174:39:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20157:56:::0;-1:-1:-1;20226:67:0::2;-1:-1:-1::0;;;;;20226:31:0;::::2;20258:10;20278:4;20285:7:::0;20226:31:::2;:67::i;:::-;20315:39;::::0;-1:-1:-1;;;20315:39:0;;20348:4:::2;20315:39;::::0;::::2;2291:51:1::0;20314:56:0::2;::::0;20360:9;;-1:-1:-1;;;;;20315:24:0;::::2;::::0;::::2;::::0;2264:18:1;;20315:39:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20314:45:::0;::::2;:56::i;:::-;20304:66;;20391:43;20404:7;20413:9;20424;20391:12;:43::i;:::-;20381:53;;20467:7;20453:10;:21;;20445:60;;;;-1:-1:-1::0;;;20445:60:0::2;;;;;;;:::i;:::-;20526:28;20542:2;20546:7;20526:15;:28::i;:::-;20572:44;::::0;;20589:1:::2;7961:25:1::0;;;8017:2;8002:18;;7995:34;;;8045:18;;;8038:34;;;8103:2;8088:18;;8081:34;20572:44:0;;-1:-1:-1;;;;;20572:44:0;::::2;::::0;20577:10:::2;::::0;-1:-1:-1;;;;;;;;;;;20572:44:0;;;;7948:3:1;20572:44:0;;::::2;-1:-1:-1::0;;;;;;;;;;;20637:22:0::2;:9:::0;20651:7;20637:13:::2;:22::i;:::-;20661;:9:::0;20675:7;20661:13:::2;:22::i;:::-;20632:52;::::0;;4274:25:1;;;4330:2;4315:18;;4308:34;;;;4247:18;20632:52:0::2;;;;;;;-1:-1:-1::0;;15211:1:0::1;15516:7;:22:::0;-1:-1:-1;19891:801:0;;;-1:-1:-1;;;;;19891:801:0:o;23773:225::-;23902:13;23870:8;16205:15;16193:8;:27;;16185:57;;;;-1:-1:-1;;;16185:57:0;;;;;;;:::i;:::-;15255:1:::1;15407:7;;:19:::0;15399:63:::1;;;;-1:-1:-1::0;;;15399:63:0::1;;;;;;;:::i;:::-;15255:1;15475:7;:18:::0;23939:51:::2;23954:10:::0;23966:7;23975:10:::2;23987:2:::0;23939:14:::2;:51::i;:::-;15211:1:::1;15516:7;:22:::0;23928:62;23773:225;-1:-1:-1;;;;;;23773:225:0:o;17983:454::-;18074:13;18120:1;18108:9;:13;18100:62;;;;-1:-1:-1;;;18100:62:0;;8328:2:1;18100:62:0;;;8310:21:1;8367:2;8347:18;;;8340:30;8406:34;8386:18;;;8379:62;-1:-1:-1;;;8457:18:1;;;8450:34;8501:19;;18100:62:0;8126:400:1;18100:62:0;18193:1;18181:9;:13;:31;;;;;18211:1;18198:10;:14;18181:31;18173:76;;;;-1:-1:-1;;;18173:76:0;;;;;;;:::i;:::-;18260:14;18277:34;18306:4;18277:24;:9;18291;18277:13;:24::i;:::-;:28;;:34::i;:::-;18260:51;-1:-1:-1;18322:16:0;18341:34;18371:3;18341:25;:10;18356:9;18341:14;:25::i;:34::-;18322:53;-1:-1:-1;18397:32:0;18427:1;18398:23;18322:53;18398:9;:23;:::i;18397:32::-;18386:43;17983:454;-1:-1:-1;;;;;;17983:454:0:o;13874:139::-;13934:4;13951:32;13961:10;13973:2;13977:5;13951:9;:32::i;20700:867::-;20837:12;20805:8;16205:15;16193:8;:27;;16185:57;;;;-1:-1:-1;;;16185:57:0;;;;;;;:::i;:::-;15255:1:::1;15407:7;;:19:::0;15399:63:::1;;;;-1:-1:-1::0;;;15399:63:0::1;;;;;;;:::i;:::-;15255:1;15475:7;:18:::0;20879:5:::2;::::0;;20983:39:::2;::::0;-1:-1:-1;;;20983:39:0;;21016:4:::2;20983:39:::0;;::::2;2291:51:1::0;;;;-1:-1:-1;;;;;20879:5:0::2;::::0;20934:21:::2;::::0;20862:14:::2;::::0;20879:5;;20983:24:::2;::::0;2264:18:1;;20983:39:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20966:56;;21053:42;21065:7;21074:9;21085;21053:11;:42::i;:::-;21043:52;;21125:10;21114:7;:21;;21106:60;;;;-1:-1:-1::0;;;21106:60:0::2;;;;;;;:::i;:::-;21177:67;-1:-1:-1::0;;;;;21177:31:0;::::2;21209:10;21229:4;21236:7:::0;21177:31:::2;:67::i;:::-;21275:39;::::0;-1:-1:-1;;;21275:39:0;;21308:4:::2;21275:39;::::0;::::2;2291:51:1::0;21274:56:0::2;::::0;21320:9;;-1:-1:-1;;;;;21275:24:0;::::2;::::0;::::2;::::0;2264:18:1;;21275:39:0::2;2145:203:1::0;21274:56:0::2;21263:7;:67;21255:125;;;::::0;-1:-1:-1;;;21255:125:0;;8733:2:1;21255:125:0::2;::::0;::::2;8715:21:1::0;8772:2;8752:18;;;8745:30;8811:34;8791:18;;;8784:62;-1:-1:-1;;;8862:18:1;;;8855:43;8915:19;;21255:125:0::2;8531:409:1::0;21255:125:0::2;21401:28;21417:2;21421:7;21401:15;:28::i;:::-;21447:44;::::0;;21464:1:::2;7961:25:1::0;;;8017:2;8002:18;;7995:34;;;8045:18;;;8038:34;;;8103:2;8088:18;;8081:34;21447:44:0;;-1:-1:-1;;;;;21447:44:0;::::2;::::0;21452:10:::2;::::0;-1:-1:-1;;;;;;;;;;;21447:44:0;;;;7948:3:1;21447:44:0;;::::2;-1:-1:-1::0;;;;;;;;;;;21512:22:0::2;:9:::0;21526:7;21512:13:::2;:22::i;:::-;21536;:9:::0;21550:7;21536:13:::2;:22::i;24006:902::-:0;24121:12;24135;24089:8;16205:15;16193:8;:27;;16185:57;;;;-1:-1:-1;;;16185:57:0;;;;;;;:::i;:::-;15255:1:::1;15407:7;;:19:::0;15399:63:::1;;;;-1:-1:-1::0;;;15399:63:0::1;;;;;;;:::i;:::-;15255:1;15475:7;:18:::0;24168:12;24160:57:::2;;;;-1:-1:-1::0;;;24160:57:0::2;;;;;;;:::i;:::-;24245:5;::::0;;24351:39:::2;::::0;-1:-1:-1;;;24351:39:0;;24384:4:::2;24351:39:::0;;::::2;2291:51:1::0;;;;-1:-1:-1;;;;;24245:5:0::2;::::0;24302:21:::2;::::0;24228:14:::2;::::0;24245:5;;24351:24:::2;::::0;2264:18:1;;24351:39:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24403:17;24423:11:::0;24334:56;;-1:-1:-1;24423:11:0;24456:23:::2;:8:::0;24469:9;24456:12:::2;:23::i;:::-;:38;;;;:::i;:::-;24446:48:::0;-1:-1:-1;24542:12:0;24516:23:::2;:8:::0;24529:9;24516:12:::2;:23::i;:::-;:38;;;;:::i;:::-;24506:48;;24584:1;24574:7;:11;:26;;;;;24599:1;24589:7;:11;24574:26;24566:78;;;::::0;-1:-1:-1;;;24566:78:0;;9147:2:1;24566:78:0::2;::::0;::::2;9129:21:1::0;9186:2;9166:18;;;9159:30;9225:34;9205:18;;;9198:62;-1:-1:-1;;;9276:18:1;;;9269:37;9323:19;;24566:78:0::2;8945:403:1::0;24566:78:0::2;24657:27;24663:10;24675:8;24657:5;:27::i;:::-;24697:40;-1:-1:-1::0;;;;;24697:27:0;::::2;24725:2:::0;24729:7;24697:27:::2;:40::i;:::-;24748:28;24764:2;24768:7;24748:15;:28::i;:::-;24794:38;::::0;;4274:25:1;;;4330:2;4315:18;;4308:34;;;-1:-1:-1;;;;;24794:38:0;::::2;::::0;24799:10:::2;::::0;24794:38:::2;::::0;4247:18:1;24794:38:0::2;;;;;;;-1:-1:-1::0;;;;;;;;;;;24853:22:0::2;:9:::0;24867:7;24853:13:::2;:22::i;:::-;24877;:9:::0;24891:7;24877:13:::2;:22::i;:::-;24848:52;::::0;;4274:25:1;;;4330:2;4315:18;;4308:34;;;;4247:18;24848:52:0::2;;;;;;;24149:759;;;;15211:1:::1;15516:7;:22;;;;24006:902:::0;;;;;;;:::o;16311:205::-;16376:11;;-1:-1:-1;;;16376:11:0;;;;16375:12;16367:54;;;;-1:-1:-1;;;16367:54:0;;9555:2:1;16367:54:0;;;9537:21:1;9594:2;9574:18;;;9567:30;9633:31;9613:18;;;9606:59;9682:18;;16367:54:0;9353:353:1;16367:54:0;16434:11;:18;;-1:-1:-1;;;;;;16463:20:0;16473:10;16463:20;-1:-1:-1;;;16463:20:0;;;16494:5;:14;;-1:-1:-1;;;;;16494:14:0;;;;-1:-1:-1;;;;;;16494:14:0;;;;;;;;;;16311:205::o;19130:753::-;19258:12;19226:8;16205:15;16193:8;:27;;16185:57;;;;-1:-1:-1;;;16185:57:0;;;;;;;:::i;:::-;15255:1:::1;15407:7;;:19:::0;15399:63:::1;;;;-1:-1:-1::0;;;15399:63:0::1;;;;;;;:::i;:::-;15255:1;15475:7;:18:::0;19300:5:::2;::::0;-1:-1:-1;;;;;19300:5:0::2;19283:14;19355:38;19356:21;19383:9;19355:27;:38::i;:::-;19421:39;::::0;-1:-1:-1;;;19421:39:0;;19454:4:::2;19421:39;::::0;::::2;2291:51:1::0;19338:55:0;;-1:-1:-1;19404:14:0::2;::::0;-1:-1:-1;;;;;19421:24:0;::::2;::::0;::::2;::::0;2264:18:1;;19421:39:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19404:56;;19491:42;19503:7;19512:9;19523;19491:11;:42::i;:::-;19481:52;;19563:9;19552:7;:20;;19544:59;;;;-1:-1:-1::0;;;19544:59:0::2;;;;;;;:::i;:::-;19614:40;-1:-1:-1::0;;;;;19614:27:0;::::2;19642:2:::0;19646:7;19614:27:::2;:40::i;:::-;19682:7;19670:9;:19;19667:79;;;19692:51;19708:10;19720:22;:9;19734:7:::0;19720:13:::2;:22::i;:::-;19692:15;:51::i;:::-;19763:44;::::0;;7961:25:1;;;19789:1:0::2;8017:2:1::0;8002:18;;7995:34;;;8045:18;;;8038:34;8103:2;8088:18;;8081:34;;;19763:44:0;;-1:-1:-1;;;;;19763:44:0;::::2;::::0;19768:10:::2;::::0;-1:-1:-1;;;;;;;;;;;19763:44:0;;;;7948:3:1;19763:44:0;;::::2;-1:-1:-1::0;;;;;;;;;;;19828:22:0::2;:9:::0;19842:7;19828:13:::2;:22::i;:::-;19852;:9:::0;19866:7;19852:13:::2;:22::i;:::-;19823:52;::::0;;4274:25:1;;;4330:2;4315:18;;4308:34;;;;4247:18;19823:52:0::2;;;;;;;-1:-1:-1::0;;15211:1:0::1;15516:7;:22:::0;-1:-1:-1;19130:753:0;;;-1:-1:-1;;;;19130:753:0:o;23457:308::-;23611:13;23579:8;16205:15;16193:8;:27;;16185:57;;;;-1:-1:-1;;;16185:57:0;;;;;;;:::i;:::-;15255:1:::1;15407:7;;:19:::0;15399:63:::1;;;;-1:-1:-1::0;;;15399:63:0::1;;;;;;;:::i;:::-;15255:1;15475:7;:18:::0;23659:7:::2;::::0;-1:-1:-1;;;;;23659:7:0::2;23645:10;:21;23637:53;;;::::0;-1:-1:-1;;;23637:53:0;;10325:2:1;23637:53:0::2;::::0;::::2;10307:21:1::0;10364:2;10344:18;;;10337:30;-1:-1:-1;;;10383:18:1;;;10376:49;10442:18;;23637:53:0::2;10123:343:1::0;23637:53:0::2;23712:45;23727:10;23739:7;23748:4;23754:2;23712:14;:45::i;:::-;15211:1:::1;15516:7;:22:::0;23701:56;23457:308;-1:-1:-1;;;;;;;23457:308:0:o;18445:673::-;18576:12;18544:8;16205:15;16193:8;:27;;16185:57;;;;-1:-1:-1;;;16185:57:0;;;;;;;:::i;:::-;15255:1:::1;15407:7;;:19:::0;15399:63:::1;;;;-1:-1:-1::0;;;15399:63:0::1;;;;;;;:::i;:::-;15255:1;15475:7;:18:::0;18618:5:::2;::::0;-1:-1:-1;;;;;18618:5:0::2;18601:14;18673:38;18674:21;18701:9;18673:27;:38::i;:::-;18739:39;::::0;-1:-1:-1;;;18739:39:0;;18772:4:::2;18739:39;::::0;::::2;2291:51:1::0;18656:55:0;;-1:-1:-1;18722:14:0::2;::::0;-1:-1:-1;;;;;18739:24:0;::::2;::::0;::::2;::::0;2264:18:1;;18739:39:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18722:56;;18809:45;18822:9;18833;18844;18809:12;:45::i;:::-;18799:55;;18887:7;18873:10;:21;;18865:60;;;;-1:-1:-1::0;;;18865:60:0::2;;;;;;;:::i;:::-;18936:40;-1:-1:-1::0;;;;;18936:27:0;::::2;18964:2:::0;18968:7;18936:27:::2;:40::i;:::-;18994:46;::::0;;19011:9:::2;7961:25:1::0;;19022:1:0::2;8017:2:1::0;8002:18;;7995:34;;;8045:18;;;8038:34;8103:2;8088:18;;8081:34;;;18994:46:0;;-1:-1:-1;;;;;18994:46:0;::::2;::::0;18999:10:::2;::::0;-1:-1:-1;;;;;;;;;;;18994:46:0;;;;7948:3:1;18994:46:0;;::::2;-1:-1:-1::0;;;;;;;;;;;19061:24:0::2;:9:::0;19075::::2;19061:13;:24::i;:::-;19087:22;:9:::0;19101:7;19087:13:::2;:22::i;1671:98::-:0;1729:7;1756:5;1760:1;1756;:5;:::i;1451:98::-;1509:7;1536:5;1540:1;1536;:5;:::i;13280:169::-;-1:-1:-1;;;;;13361:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;13410:31;;481:25:1;;;13410:31:0;;454:18:1;13410:31:0;;;;;;;;13280:169;;;:::o;1997:240::-;2117:7;2178:12;2170:6;;;;2162:29;;;;-1:-1:-1;;;2162:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2213:5:0;;;1997:240::o;13457:254::-;13551:60;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13551:15:0;;-1:-1:-1;13551:15:0;;;:9;:15;;;;;;;;:60;;13571:5;;13551:19;:60::i;:::-;-1:-1:-1;;;;;13533:15:0;;;;;;;:9;:15;;;;;;:78;;;;13638:13;;;;;;;:24;;13656:5;13638:17;:24::i;:::-;-1:-1:-1;;;;;13622:13:0;;;;;;;:9;:13;;;;;;;:40;;;;13678:25;;;;;;;;;;13697:5;481:25:1;;469:2;454:18;;335:177;7811:248:0;7982:68;;-1:-1:-1;;;;;11032:15:1;;;7982:68:0;;;11014:34:1;11084:15;;11064:18;;;11057:43;11116:18;;;11109:34;;;7955:96:0;;7975:5;;-1:-1:-1;;;8005:27:0;10949:18:1;;7982:68:0;;;;-1:-1:-1;;7982:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;7982:68:0;-1:-1:-1;;;;;;7982:68:0;;;;;;;;;;7955:19;:96::i;:::-;7811:248;;;;:::o;1561:98::-;1619:7;1646:5;1650:1;1646;:5;:::i;16524:189::-;16637:12;;;16597;16637;;;;;;;;;-1:-1:-1;;;;;16615:7:0;;;16630:5;;16615:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16596:54;;;16669:7;16661:44;;;;-1:-1:-1;;;16661:44:0;;11913:2:1;16661:44:0;;;11895:21:1;11952:2;11932:18;;;11925:30;11991:26;11971:18;;;11964:54;12035:18;;16661:44:0;11711:348:1;16661:44:0;16585:128;16524:189;;:::o;21575:1874::-;21674:13;21720:1;21708:9;:13;:28;;;;;21735:1;21725:7;:11;21708:28;21700:65;;;;-1:-1:-1;;;21700:65:0;;12266:2:1;21700:65:0;;;12248:21:1;12305:2;12285:18;;;12278:30;12344:26;12324:18;;;12317:54;12388:18;;21700:65:0;12064:348:1;21700:65:0;21793:5;;-1:-1:-1;;;;;21793:5:0;21776:14;21848:38;21849:21;21876:9;21848:27;:38::i;:::-;21914:39;;-1:-1:-1;;;21914:39:0;;21947:4;21914:39;;;2291:51:1;21831:55:0;;-1:-1:-1;21897:14:0;;-1:-1:-1;;;;;21914:24:0;;;;;2264:18:1;;21914:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21964:17;21984:11;21897:56;;-1:-1:-1;22008:61:0;-1:-1:-1;;;;;22008:31:0;;22040:4;22054;22061:7;22008:31;:61::i;:::-;22091:39;;-1:-1:-1;;;22091:39:0;;22124:4;22091:39;;;2291:51:1;22090:56:0;;22136:9;;-1:-1:-1;;;;;22091:24:0;;;;;2264:18:1;;22091:39:0;2145:203:1;22090:56:0;22080:66;-1:-1:-1;22159:12:0;22185:16;;22182:323;;22227:43;22260:9;22229:24;:7;22242:9;22229:11;:24::i;:::-;22227:32;;:43::i;:::-;22217:53;;22304:9;22293:7;:20;;22285:67;;;;-1:-1:-1;;;22285:67:0;;12619:2:1;22285:67:0;;;12601:21:1;12658:2;12638:18;;;12631:30;12697:34;12677:18;;;12670:62;-1:-1:-1;;;12748:18:1;;;12741:32;12790:19;;22285:67:0;12417:398:1;22285:67:0;22386:10;22375:7;:21;;22367:64;;;;-1:-1:-1;;;22367:64:0;;13022:2:1;22367:64:0;;;13004:21:1;13061:2;13041:18;;;13034:30;13100:32;13080:18;;;13073:60;13150:18;;22367:64:0;12820:354:1;22367:64:0;22182:323;;;-1:-1:-1;22484:9:0;22182:323;22521:12;22537:1;22521:17;22517:271;;22566:42;22602:5;22566:31;22576:20;:7;22588;22576:11;:20::i;:::-;22566:9;:31::i;:42::-;22555:53;;22622:24;22636:1;22640:5;22622;:24::i;:::-;22517:271;;;22690:86;22727:9;22699:25;:7;22711:12;22699:11;:25::i;:::-;:37;;;;:::i;:::-;22766:9;22738:25;:7;22750:12;22738:11;:25::i;:::-;:37;;;;:::i;:::-;22690:8;:86::i;:::-;22679:97;;22517:271;22827:1;22816:8;:12;22808:64;;;;-1:-1:-1;;;22808:64:0;;13381:2:1;22808:64:0;;;13363:21:1;13420:2;13400:18;;;13393:30;13459:34;13439:18;;;13432:62;-1:-1:-1;;;13510:18:1;;;13503:37;13557:19;;22808:64:0;13179:403:1;22808:64:0;22947:17;:7;22959:4;22947:11;:17::i;:::-;22935:9;:29;22932:105;;;22980:45;22996:4;23002:22;:9;23016:7;23002:13;:22::i;22980:45::-;23070:7;;23061:25;;;-1:-1:-1;;;23061:25:0;;;;23049:9;;-1:-1:-1;;;;;23070:7:0;;23061:23;;:25;;;;;;;;;;;;;;23049:9;23070:7;23061:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23049:37;-1:-1:-1;23100:8:0;;23097:199;;23124:15;23142:33;23169:5;23144:18;:8;23157:4;23144:12;:18::i;23142:33::-;23124:51;;23190:44;23205:7;;;;;;;;;-1:-1:-1;;;;;23205:7:0;-1:-1:-1;;;;;23196:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23223:10;23190:5;:44::i;:::-;23260:24;:8;23273:10;23260:12;:24::i;:::-;23249:35;;23109:187;23097:199;23308:19;23314:2;23318:8;23308:5;:19::i;:::-;23345:28;;;4274:25:1;;;4330:2;4315:18;;4308:34;;;-1:-1:-1;;;;;23345:28:0;;;;;4247:18:1;23345:28:0;;;;;;;-1:-1:-1;;;;;;;;;;;23394:22:0;:9;23408:7;23394:13;:22::i;:::-;23418;:9;23432:7;23418:13;:22::i;:::-;23389:52;;;4274:25:1;;;4330:2;4315:18;;4308:34;;;;4247:18;23389:52:0;;;;;;;21689:1760;;;;;;21575:1874;;;;;;:::o;13029:243::-;13108:60;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13108:15:0;;-1:-1:-1;13108:15:0;;;:9;:15;;;;;;;;:60;;13128:5;;13108:19;:60::i;:::-;-1:-1:-1;;;;;13090:15:0;;;;;;:9;:15;;;;;:78;;;;13193:11;:22;;13209:5;13193:15;:22::i;:::-;13179:11;:36;;;13231:33;;481:25:1;;;-1:-1:-1;;;;;13231:33:0;;;;;469:2:1;454:18;13231:33:0;;;;;;;;13029:243;;:::o;7592:211::-;7736:58;;-1:-1:-1;;;;;14035:32:1;;7736:58:0;;;14017:51:1;14084:18;;;14077:34;;;7709:86:0;;7729:5;;-1:-1:-1;;;7759:23:0;13990:18:1;;7736:58:0;13843:274:1;9301:373:0;9382:23;9408:69;9436:4;9408:69;;;;;;;;;;;;;;;;;9416:5;-1:-1:-1;;;;;9408:27:0;;;:69;;;;;:::i;:::-;9492:17;;9382:95;;-1:-1:-1;9492:21:0;9488:179;;9589:10;9578:30;;;;;;;;;;;;:::i;:::-;9570:85;;;;-1:-1:-1;;;9570:85:0;;14606:2:1;9570:85:0;;;14588:21:1;14645:2;14625:18;;;14618:30;14684:34;14664:18;;;14657:62;-1:-1:-1;;;14735:18:1;;;14728:40;14785:19;;9570:85:0;14404:406:1;1781:98:0;1839:7;1866:5;1870:1;1866;:5;:::i;3482:303::-;3527:6;3554:1;3550;:5;3546:232;;;-1:-1:-1;3576:1:0;3592:6;3601:5;3605:1;3576;3601:5;:::i;:::-;:9;;3609:1;3601:9;:::i;:::-;3592:18;;3625:92;3636:1;3632;:5;3625:92;;;3662:1;-1:-1:-1;3662:1:0;3700;3662;3687:5;3662:1;3687;:5;:::i;:::-;:9;;;;:::i;:::-;3686:15;;;;:::i;:::-;3682:19;;3625:92;;;3557:171;3482:303;;;:::o;3546:232::-;3738:6;;3734:44;;-1:-1:-1;3765:1:0;3734:44;3482:303;;;:::o;12820:201::-;12893:11;;:22;;12909:5;12893:15;:22::i;:::-;12879:11;:36;;;-1:-1:-1;;;;;12942:13:0;;;;:9;:13;;;;;;:24;;12960:5;12942:17;:24::i;:::-;-1:-1:-1;;;;;12926:13:0;;;;;;:9;:13;;;;;;:40;;;;12982:31;;12926:13;;;12982:31;;;;13007:5;481:25:1;;469:2;454:18;;335:177;2881:106:0;2939:7;2970:1;2966;:5;:13;;2978:1;2966:13;;;-1:-1:-1;2974:1:0;;2881:106;-1:-1:-1;2881:106:0:o;4541:229::-;4678:12;4710:52;4732:6;4740:4;4746:1;4749:12;4710:21;:52::i;:::-;4703:59;4541:229;-1:-1:-1;;;;4541:229:0:o;5054:510::-;5224:12;5282:5;5257:21;:30;;5249:81;;;;-1:-1:-1;;;5249:81:0;;15017:2:1;5249:81:0;;;14999:21:1;15056:2;15036:18;;;15029:30;15095:34;15075:18;;;15068:62;-1:-1:-1;;;15146:18:1;;;15139:36;15192:19;;5249:81:0;14815:402:1;5249:81:0;3949:20;;5341:60;;;;-1:-1:-1;;;5341:60:0;;15424:2:1;5341:60:0;;;15406:21:1;15463:2;15443:18;;;15436:30;15502:31;15482:18;;;15475:59;15551:18;;5341:60:0;15222:353:1;5341:60:0;5415:12;5429:23;5456:6;-1:-1:-1;;;;;5456:11:0;5475:5;5482:4;5456:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5414:73;;;;5505:51;5522:7;5531:10;5543:12;6964;6993:7;6989:530;;;-1:-1:-1;7024:10:0;7017:17;;6989:530;7138:17;;:21;7134:374;;7336:10;7330:17;7397:15;7384:10;7380:2;7376:19;7369:44;7134:374;7479:12;7472:20;;-1:-1:-1;;;7472:20:0;;;;;;;;:::i;14:316:1:-;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;-1:-1:-1;;199:23:1;;;269:2;254:18;;241:32;;-1:-1:-1;320:2:1;305:18;;;292:32;;14:316;-1:-1:-1;14:316:1:o;517:250::-;602:1;612:113;626:6;623:1;620:13;612:113;;;702:11;;;696:18;683:11;;;676:39;648:2;641:10;612:113;;;-1:-1:-1;;759:1:1;741:16;;734:27;517:250::o;772:396::-;921:2;910:9;903:21;884:4;953:6;947:13;996:6;991:2;980:9;976:18;969:34;1012:79;1084:6;1079:2;1068:9;1064:18;1059:2;1051:6;1047:15;1012:79;:::i;:::-;1152:2;1131:15;-1:-1:-1;;1127:29:1;1112:45;;;;1159:2;1108:54;;772:396;-1:-1:-1;;772:396:1:o;1497:131::-;-1:-1:-1;;;;;1572:31:1;;1562:42;;1552:70;;1618:1;1615;1608:12;1552:70;1497:131;:::o;1633:315::-;1701:6;1709;1762:2;1750:9;1741:7;1737:23;1733:32;1730:52;;;1778:1;1775;1768:12;1730:52;1817:9;1804:23;1836:31;1861:5;1836:31;:::i;:::-;1886:5;1938:2;1923:18;;;;1910:32;;-1:-1:-1;;;1633:315:1:o;2353:456::-;2430:6;2438;2446;2499:2;2487:9;2478:7;2474:23;2470:32;2467:52;;;2515:1;2512;2505:12;2467:52;2554:9;2541:23;2573:31;2598:5;2573:31;:::i;:::-;2623:5;-1:-1:-1;2680:2:1;2665:18;;2652:32;2693:33;2652:32;2693:33;:::i;:::-;2353:456;;2745:7;;-1:-1:-1;;;2799:2:1;2784:18;;;;2771:32;;2353:456::o;3003:452::-;3089:6;3097;3105;3113;3166:3;3154:9;3145:7;3141:23;3137:33;3134:53;;;3183:1;3180;3173:12;3134:53;3219:9;3206:23;3196:33;;3276:2;3265:9;3261:18;3248:32;3238:42;;3330:2;3319:9;3315:18;3302:32;3343:31;3368:5;3343:31;:::i;:::-;3003:452;;;;-1:-1:-1;3393:5:1;;3445:2;3430:18;3417:32;;-1:-1:-1;;3003:452:1:o;3460:247::-;3519:6;3572:2;3560:9;3551:7;3547:23;3543:32;3540:52;;;3588:1;3585;3578:12;3540:52;3627:9;3614:23;3646:31;3671:5;3646:31;:::i;3712:383::-;3789:6;3797;3805;3858:2;3846:9;3837:7;3833:23;3829:32;3826:52;;;3874:1;3871;3864:12;3826:52;3910:9;3897:23;3887:33;;3970:2;3959:9;3955:18;3942:32;3983:31;4008:5;3983:31;:::i;4353:388::-;4421:6;4429;4482:2;4470:9;4461:7;4457:23;4453:32;4450:52;;;4498:1;4495;4488:12;4450:52;4537:9;4524:23;4556:31;4581:5;4556:31;:::i;:::-;4606:5;-1:-1:-1;4663:2:1;4648:18;;4635:32;4676:33;4635:32;4676:33;:::i;:::-;4728:7;4718:17;;;4353:388;;;;;:::o;4746:594::-;4841:6;4849;4857;4865;4873;4926:3;4914:9;4905:7;4901:23;4897:33;4894:53;;;4943:1;4940;4933:12;4894:53;4979:9;4966:23;4956:33;;5036:2;5025:9;5021:18;5008:32;4998:42;;5090:2;5079:9;5075:18;5062:32;5103:31;5128:5;5103:31;:::i;:::-;5153:5;-1:-1:-1;5210:2:1;5195:18;;5182:32;5223:33;5182:32;5223:33;:::i;:::-;4746:594;;;;-1:-1:-1;4746:594:1;;5329:3;5314:19;5301:33;;4746:594;-1:-1:-1;;4746:594:1:o;5749:356::-;5951:2;5933:21;;;5970:18;;;5963:30;6029:34;6024:2;6009:18;;6002:62;6096:2;6081:18;;5749:356::o;6110:127::-;6171:10;6166:3;6162:20;6159:1;6152:31;6202:4;6199:1;6192:15;6226:4;6223:1;6216:15;6242:217;6282:1;6308;6298:132;;6352:10;6347:3;6343:20;6340:1;6333:31;6387:4;6384:1;6377:15;6415:4;6412:1;6405:15;6298:132;-1:-1:-1;6444:9:1;;6242:217::o;6464:184::-;6534:6;6587:2;6575:9;6566:7;6562:23;6558:32;6555:52;;;6603:1;6600;6593:12;6555:52;-1:-1:-1;6626:16:1;;6464:184;-1:-1:-1;6464:184:1:o;6653:341::-;6855:2;6837:21;;;6894:2;6874:18;;;6867:30;-1:-1:-1;;;6928:2:1;6913:18;;6906:47;6985:2;6970:18;;6653:341::o;6999:355::-;7201:2;7183:21;;;7240:2;7220:18;;;7213:30;7279:33;7274:2;7259:18;;7252:61;7345:2;7330:18;;6999:355::o;7359:350::-;7561:2;7543:21;;;7600:2;7580:18;;;7573:30;7639:28;7634:2;7619:18;;7612:56;7700:2;7685:18;;7359:350::o;10471:168::-;10544:9;;;10575;;10592:15;;;10586:22;;10572:37;10562:71;;10613:18;;:::i;10644:125::-;10709:9;;;10730:10;;;10727:36;;;10743:18;;:::i;11154:128::-;11221:9;;;11242:11;;;11239:37;;;11256:18;;:::i;11419:287::-;11548:3;11586:6;11580:13;11602:66;11661:6;11656:3;11649:4;11641:6;11637:17;11602:66;:::i;:::-;11684:16;;;;;11419:287;-1:-1:-1;;11419:287:1:o;13587:251::-;13657:6;13710:2;13698:9;13689:7;13685:23;13681:32;13678:52;;;13726:1;13723;13716:12;13678:52;13758:9;13752:16;13777:31;13802:5;13777:31;:::i;14122:277::-;14189:6;14242:2;14230:9;14221:7;14217:23;14213:32;14210:52;;;14258:1;14255;14248:12;14210:52;14290:9;14284:16;14343:5;14336:13;14329:21;14322:5;14319:32;14309:60;;14365:1;14362;14355:12
Swarm Source
ipfs://f7760a5147b46fd3eb33b044d756842fbd517e0417ae93f7d8bcfe95cacefa41
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.