Feature Tip: Add private address tag to any address under My Name Tag !
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
|
|||
---|---|---|---|---|---|---|
12385206 | 1372 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x55934Bec...D719D6CF7 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
DextokenPool
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: LGPL-3.0-or-later pragma solidity 0.5.17; import "./Math.sol"; import "./SafeMath.sol"; import "./SafeERC20.sol"; import "./ReentrancyGuard.sol"; import "./IDextokenPool.sol"; import "./IDextokenFactory.sol"; import "./LPToken.sol"; contract DextokenPool is LPToken, IDextokenPool, ReentrancyGuard { using SafeERC20 for IERC20; using SafeMath for uint; /// AMM fee uint public constant FEE_BASE = 10**4; // 0.01% uint public constant FEE_FACTOR = 30; IDextokenFactory public factory; /// The collateral token IERC20 public WETH; /// Pooling uint public totalLiquidity; IERC20 public token0; /// Speculative AMM struct AMM { uint Ct; uint Pt; uint Nt; uint lastUpdateTime; } /// AMM states AMM private _AMM; modifier updatePriceTick() { _; /// step the price tick (t+1) _AMM.lastUpdateTime = _lastPriceTickApplicable(); } constructor() public { factory = IDextokenFactory(msg.sender); _AMM.lastUpdateTime = 0; totalLiquidity = 0; } function initialize(address _token0, address _token1, uint _Ct, uint _Pt) external { require(msg.sender == address(factory), 'initialize: Forbidden'); token0 = IERC20(_token0); require(_Ct <= token0.totalSupply(), "initialize: Invalid _Ct"); /// snapshot of the pooled token _AMM.Ct = _Ct; _AMM.Pt = _Pt; _AMM.Nt = _AMM.Pt.mul(_AMM.Ct).div(1e18); /// The collateral token WETH = IERC20(_token1); } function deposit(uint amount) external nonReentrant updatePriceTick() { require(amount > 0, "deposit: invalid amount"); uint _totalBalance = getPoolBalance(); address _token0 = address(token0); uint _Ct = _AMM.Ct.add(amount); uint _Nt = _AMM.Nt; // liquidity at price tick (t) uint spotPrice = getSpotPrice(_Ct, _Nt); uint liquidity = spotPrice.mul(amount); require(liquidity > 0, "deposit: invalid user liquidity"); _totalBalance = _totalBalance.add(amount); uint _totalLiquidity = totalLiquidity.add(liquidity); // mint liquidity tokens uint mintedTokens = _calcLiquidityToken(_totalLiquidity, _totalBalance, liquidity); /// calculate the virtual collateral tokens at price tick (t) uint _Mb = WETH.balanceOf(address(this)).mul(mintedTokens).div(totalSupply().add(mintedTokens)); // move price tick to (t+1) _AMM.Ct = _Ct; _AMM.Nt = _Nt.add(_Mb); totalLiquidity = _totalLiquidity; // mint liquidity token at price tick (t+1) _mintLiquidityToken(msg.sender, mintedTokens); _tokenSafeTransferFrom(_token0, msg.sender, address(this), amount); emit TokenDeposit(_token0, msg.sender, amount, spotPrice); } function withdraw(uint tokens) external nonReentrant updatePriceTick() { require(tokens > 0, "withdraw: invalid tokens"); require(totalSupply() > 0, "withdraw: insufficient liquidity"); require(balanceOf(msg.sender) >= tokens, "withdraw: insufficient tokens"); address _token0 = address(token0); // liquidity at price tick (t) uint amount = liquidityTokenToAmount(tokens); /// calculate the collateral token shares uint balance = WETH.balanceOf(address(this)); uint amountOut = balance.mul(tokens).div(totalSupply()); /// Ensure the amountOut is not more than the balance in the contract. /// Preventing underflow due to very low values of the balance. require(amountOut <= balance, "withdraw: insufficient ETH balance"); // prepare for price tick (t+1) uint _Ct = _AMM.Ct; uint _Nt = _AMM.Nt; _Ct = _Ct.sub(amount); _Nt = _Nt.sub(amountOut); // liquidity at price tick (t+1) uint spotPrice = getSpotPrice(_Ct, _Nt); totalLiquidity = spotPrice.mul(getPoolBalance().sub(amount)); _AMM.Ct = _Ct; _AMM.Nt = _Nt; _tokenSafeTransfer(_token0, msg.sender, amount); _tokenSafeTransfer(address(WETH), msg.sender, amountOut); _burnLiquidityToken(msg.sender, tokens); emit TokenWithdraw(_token0, msg.sender, amount, spotPrice); } function swapExactETHForTokens( uint amountIn, uint minAmountOut, uint maxPrice, uint deadline ) external nonReentrant returns (uint) { require(WETH.balanceOf(msg.sender) >= amountIn, "swapExactETHForTokens: Insufficient ETH balance"); require(deadline > _lastPriceTickApplicable(), "swapExactETHForTokens: Invalid transaction"); require(amountIn > 0, "swapExactETHForTokens: Invalid amountIn"); uint spotPrice; IERC20 _WETH = WETH; /// the price tick at (t) /// increase the collateral token supply including interests rate { spotPrice = getSpotPrice(_AMM.Ct, _AMM.Nt.add(amountIn)); require(spotPrice <= maxPrice, "swapExactETHForTokens: Invalid price slippage"); } /// check amount out without fees uint amountOut = amountIn.mul(1e18).div(spotPrice); require(amountOut >= minAmountOut, "swapExactETHForTokens: Invalid amountOut"); /// split fees and check exact amount out uint feeAmountIn = _calcFees(amountIn); uint exactAmountIn = amountIn.sub(feeAmountIn); uint exactAmountOut = exactAmountIn.mul(1e18).div(spotPrice); /// increase the collateral token supply _AMM.Nt = _AMM.Nt.add(exactAmountIn); spotPrice = getSpotPrice(_AMM.Ct.sub(exactAmountOut), _AMM.Nt); totalLiquidity = spotPrice.mul(getPoolBalance().sub(exactAmountOut)); /// transfer the collateral tokens in _tokenSafeTransferFrom(address(_WETH), msg.sender, address(this), amountIn); /// transfer fees _tokenSafeTransfer(address(_WETH), factory.getFeePool(), feeAmountIn); /// move to the next price tick (t+1) _withdrawAndTransfer(msg.sender, exactAmountOut); emit SwapExactETHForTokens(address(this), exactAmountOut, amountIn, spotPrice, msg.sender); return exactAmountOut; } function swapExactTokensForETH( uint amountIn, uint minAmountOut, uint minPrice, uint deadline ) external nonReentrant returns (uint) { require(token0.balanceOf(msg.sender) >= amountIn, "swapExactTokensForETH: Insufficient user balance"); require(deadline > _lastPriceTickApplicable(), "swapExactTokensForETH: Invalid order"); require(amountIn > 0, "swapExactTokensForETH: Invalid amountIn"); uint _Nt = _AMM.Nt; IERC20 _WETH = WETH; /// add liquidity at the price tick (t) uint spotPrice = getSpotPrice(_AMM.Ct.add(amountIn), _Nt); require(spotPrice >= minPrice, "swapExactTokensForETH: Invalid price slippage"); /// user receives uint amountOut = spotPrice.mul(amountIn).div(1e18); require(_WETH.balanceOf(address(this)) >= amountOut, "swapExactTokensForETH: Insufficient ETH liquidity"); require(amountOut >= minAmountOut, "swapExactTokensForETH: Invalid amountOut"); /// split fees uint feeAmountOut = _calcFees(amountOut); uint exactAmountOut = amountOut.sub(feeAmountOut); /// decrease the collateral token, and add liquidity /// providers' fee shares back to the pool _AMM.Nt = _Nt.sub(exactAmountOut); totalLiquidity = spotPrice.mul(getPoolBalance().add(amountIn)); /// move the next price tick (t+1) _depositAndTransfer(msg.sender, amountIn); /// transfer the collateral token out _tokenSafeTransfer(address(_WETH), msg.sender, exactAmountOut); emit SwapExactTokensForETH(address(this), exactAmountOut, amountIn, spotPrice, msg.sender); return exactAmountOut; } function getLastUpdateTime() external view returns (uint) { return _AMM.lastUpdateTime; } function getCirculatingSupply() external view returns (uint) { return _AMM.Ct; } function getUserbase() external view returns (uint) { return _AMM.Nt; } function getToken() external view returns (address) { return address(token0); } function getTotalLiquidity() external view returns (uint) { return totalLiquidity.div(1e18); } function liquidityOf(address account) external view returns (uint) { return balanceOf(account); } function liquiditySharesOf(address account) external view returns (uint) { uint userTokens = balanceOf(account); if (userTokens == 0) { return 0; } return totalSupply() .mul(1e18) .div(userTokens); } function mean() public view returns (uint) { return _AMM.Nt .mul(_AMM.Pt); } function getPoolBalance() public view returns (uint) { return token0.balanceOf(address(this)); } function getPrice() public view returns (uint) { return _AMM.Nt.mul(1e18).div(_AMM.Ct); } function getSpotPrice(uint _Ct, uint _Nt) public pure returns (uint) { return _Nt.mul(1e18).div(_Ct); } function liquidityTokenToAmount(uint token) public view returns (uint) { if (totalSupply() == 0) { return 0; } return getPoolBalance() .mul(token) .div(totalSupply()); } function liquidityFromAmount(uint amount) public view returns (uint) { return getPrice().mul(amount); } function _depositAndTransfer(address account, uint amount) internal updatePriceTick() { _AMM.Ct = _AMM.Ct.add(amount); _tokenSafeTransferFrom(address(token0), account, address(this), amount); } function _withdrawAndTransfer(address account, uint amount) internal updatePriceTick() { _AMM.Ct = _AMM.Ct.sub(amount); _tokenSafeTransfer(address(token0), account, amount); } function _lastPriceTickApplicable() internal view returns (uint) { return Math.max(block.timestamp, _AMM.lastUpdateTime); } function _mintLiquidityToken(address to, uint amount) internal { _mint(address(this), amount); _transfer(address(this), to, amount); } function _burnLiquidityToken(address from, uint amount) internal { _transfer(from, address(this), amount); _burn(address(this), amount); } function _calcFees(uint amount) internal pure returns (uint) { return amount.mul(FEE_FACTOR).div(FEE_BASE); } function _calcLiquidityToken( uint _totalLiquidity, uint _totalBalance, uint _liquidity ) internal pure returns (uint) { if (_totalLiquidity == 0) { return 0; } return _totalBalance .mul(_liquidity) .div(_totalLiquidity); } function _tokenSafeTransfer( address token, address to, uint amount ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "_tokenSafeTransfer failed"); } function _tokenSafeTransferFrom( address token, address from, address to, uint amount ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "_tokenSafeTransferFrom failed"); } }
pragma solidity 0.5.17; /** * @title Address * @dev Check if the address is a contract using eip-1052 */ library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } }
pragma solidity 0.5.17; contract Context { constructor () internal { } function _msgSender() internal view returns (address payable) { return msg.sender; } }
pragma solidity 0.5.17; import "./Context.sol"; import "./IERC20.sol"; import "./SafeMath.sol"; /** * @dev The ERC20 standard implementation. */ contract ERC20 is Context, IERC20 { using SafeMath for uint; mapping (address => uint) private _balances; mapping (address => mapping (address => uint)) private _allowances; uint private _totalSupply; function totalSupply() public view returns (uint) { return _totalSupply; } function balanceOf(address account) public view returns (uint) { return _balances[account]; } function transfer(address recipient, uint amount) public returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view returns (uint) { return _allowances[owner][spender]; } function approve(address spender, uint amount) public returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint amount) public returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint amount) internal { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint amount) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } }
pragma solidity 0.5.17; import "./IERC20.sol"; contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } }
pragma solidity 0.5.17; interface IDextokenFactory { function getFeePool() external view returns (address); }
pragma solidity 0.5.17; interface IDextokenPool { event TokenDeposit( address indexed token, address indexed account, uint amount, uint spotPrice ); event TokenWithdraw( address indexed token, address indexed account, uint amount, uint spotPrice ); event SwapExactETHForTokens( address indexed poolOut, uint amountOut, uint amountIn, uint spotPrice, address indexed account ); event SwapExactTokensForETH( address indexed poolOut, uint amountOut, uint amountIn, uint spotPrice, address indexed account ); /// Speculative AMM function initialize(address _token0, address _token1, uint _Ct, uint _Pt) external; function mean() external view returns (uint); function getLastUpdateTime() external view returns (uint); function getCirculatingSupply() external view returns (uint); function getUserbase() external view returns (uint); function getPrice() external view returns (uint); function getSpotPrice(uint _Ct, uint _Nt) external pure returns (uint); function getToken() external view returns (address); /// Pool Management function getPoolBalance() external view returns (uint); function getTotalLiquidity() external view returns (uint); function liquidityOf(address account) external view returns (uint); function liquiditySharesOf(address account) external view returns (uint); function liquidityTokenToAmount(uint token) external view returns (uint); function liquidityFromAmount(uint amount) external view returns (uint); function deposit(uint amount) external; function withdraw(uint tokens) external; /// Trading function swapExactETHForTokens( uint amountIn, uint minAmountOut, uint maxPrice, uint deadline ) external returns (uint); function swapExactTokensForETH( uint amountIn, uint minAmountOut, uint minPrice, uint deadline ) external returns (uint); }
pragma solidity 0.5.17; interface IERC20 { function totalSupply() external view returns (uint); function balanceOf(address account) external view returns (uint); function transfer(address recipient, uint amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint amount) external returns (bool); function transferFrom(address sender, address recipient, uint amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); }
pragma solidity 0.5.17; interface IWETH { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function balanceOf(address) external view returns (uint); function allowance(address, address) external view returns (uint); function deposit() external payable; function withdraw(uint wad) external; function totalSupply() external view returns (uint); function approve(address guy, uint wad) external returns (bool); function transfer(address dst, uint wad) external returns (bool); function transferFrom(address src, address dst, uint wad) external returns (bool); }
// SPDX-License-Identifier: LGPL-3.0-or-later pragma solidity 0.5.17; import "./ERC20.sol"; contract LPToken is ERC20 { string public constant name = "DEXG Liquidity Pool"; string public constant symbol = "DEXG-LP"; uint8 public constant decimals = 18; }
pragma solidity ^0.5.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } }
pragma solidity ^0.5.17; contract Ownable { address public owner; address public newOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; newOwner = address(0); } modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyNewOwner() { require(msg.sender != address(0)); require(msg.sender == newOwner); _; } function isOwner(address account) public view returns (bool) { if(account == owner) { return true; } else { return false; } } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != address(0)); newOwner = _newOwner; } function acceptOwnership() public onlyNewOwner { emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } }
pragma solidity ^0.5.17; import "./Owned.sol"; contract Pausable is Ownable { event Paused(address account); event Unpaused(address account); bool private _paused; constructor () public { _paused = false; } modifier whenNotPaused() { require(!_paused); _; } modifier whenPaused() { require(_paused); _; } function paused() public view returns (bool) { return _paused; } function pause() public onlyOwner whenNotPaused { _paused = true; emit Paused(msg.sender); } function unpause() public onlyOwner whenPaused { _paused = false; emit Unpaused(msg.sender); } }
pragma solidity ^0.5.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the `nonReentrant` modifier * available, which can be aplied 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. */ contract ReentrancyGuard { /// @dev counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor () internal { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @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() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call"); } }
pragma solidity ^0.5.0; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; library SafeERC20 { using SafeMath for uint; using Address for address; function safeTransfer(IERC20 token, address to, uint value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint 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 callOptionalReturn(IERC20 token, bytes memory data) private { require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
pragma solidity 0.5.17; library SafeMath { function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint a, uint b) internal pure returns (uint) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) { require(b <= a, errorMessage); uint c = a - b; return c; } function mul(uint a, uint b) internal pure returns (uint) { if (a == 0) { return 0; } uint c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint a, uint b) internal pure returns (uint) { return div(a, b, "SafeMath: division by zero"); } function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint c = a / b; return c; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"poolOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"spotPrice","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"SwapExactETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"poolOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"spotPrice","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"SwapExactTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"spotPrice","type":"uint256"}],"name":"TokenDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"spotPrice","type":"uint256"}],"name":"TokenWithdraw","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"},{"constant":true,"inputs":[],"name":"FEE_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FEE_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"contract IDextokenFactory","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPoolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_Ct","type":"uint256"},{"internalType":"uint256","name":"_Nt","type":"uint256"}],"name":"getSpotPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getUserbase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"uint256","name":"_Ct","type":"uint256"},{"internalType":"uint256","name":"_Pt","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"liquidityFromAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"liquidityOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"liquiditySharesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"token","type":"uint256"}],"name":"liquidityTokenToAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mean","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c80635556350d11610125578063b6b55f25116100ad578063cc3644f11161007c578063cc3644f114610595578063dd62ed3e146105b2578063eb990c59146105e0578063ecefc7051461061c578063fd5c63b21461062457610211565b8063b6b55f2514610560578063b7f883201461057d578063c45a015514610585578063cbf950bd1461058d57610211565b806398d5fdca116100f457806398d5fdca146104f0578063a457c2d7146104f8578063a9059cbb14610524578063abd70aa214610550578063ad5c46481461055857610211565b80635556350d1461049d5780635afbc4a8146104ba57806370a08231146104c257806395d89b41146104e857610211565b80632b112e49116101a8578063376c464211610177578063376c4642146103d357806339509351146104025780633c4750df1461042e5780633f812882146104545780634dfe0b1b1461047757610211565b80632b112e49146103865780632e1a7d4d1461038e578063313ce567146103ad57806335c7e925146103cb57610211565b806318160ddd116101e457806318160ddd146103115780631d98cf401461031957806321df0da71461034857806323b872dd1461035057610211565b806306fdde0314610216578063095ea7b3146102935780630dfe1681146102d357806315770f92146102f7575b600080fd5b61021e61062c565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610258578181015183820152602001610240565b50505050905090810190601f1680156102855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102bf600480360360408110156102a957600080fd5b506001600160a01b03813516906020013561065b565b604080519115158252519081900360200190f35b6102db610679565b604080516001600160a01b039092168252519081900360200190f35b6102ff610688565b60408051918252519081900360200190f35b6102ff61068e565b6102ff6004803603608081101561032f57600080fd5b5080359060208101359060408101359060600135610694565b6102db610a8b565b6102bf6004803603606081101561036657600080fd5b506001600160a01b03813581169160208101359091169060400135610a9a565b6102ff610b28565b6103ab600480360360208110156103a457600080fd5b5035610b2e565b005b6103b5610e85565b6040805160ff9092168252519081900360200190f35b6102ff610e8a565b6102ff600480360360808110156103e957600080fd5b5080359060208101359060408101359060600135610ead565b6102bf6004803603604081101561041857600080fd5b506001600160a01b03813516906020013561128b565b6102ff6004803603602081101561044457600080fd5b50356001600160a01b03166112df565b6102ff6004803603604081101561046a57600080fd5b50803590602001356112f2565b6102ff6004803603602081101561048d57600080fd5b50356001600160a01b0316611310565b6102ff600480360360208110156104b357600080fd5b5035611351565b6102ff61137e565b6102ff600480360360208110156104d857600080fd5b50356001600160a01b0316611383565b61021e61139e565b6102ff6113c1565b6102bf6004803603604081101561050e57600080fd5b506001600160a01b0381351690602001356113e6565b6102bf6004803603604081101561053a57600080fd5b506001600160a01b038135169060200135611454565b6102ff611468565b6102db6114e4565b6103ab6004803603602081101561057657600080fd5b50356114f3565b6102ff61175f565b6102db611765565b6102ff611774565b6102ff600480360360208110156105ab57600080fd5b503561178d565b6102ff600480360360408110156105c857600080fd5b506001600160a01b038135811691602001351661179b565b6103ab600480360360808110156105f657600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356117c6565b6102ff611947565b6102ff61194d565b6040518060400160405280601381526020017211115611c8131a5c5d5a591a5d1e48141bdbdb606a1b81525081565b600061066f610668611953565b8484611957565b5060015b92915050565b6007546001600160a01b031681565b60065481565b60025490565b6003805460010190819055600754604080516370a0823160e01b815233600482015290516000939288926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b1580156106f057600080fd5b505afa158015610704573d6000803e3d6000fd5b505050506040513d602081101561071a57600080fd5b505110156107595760405162461bcd60e51b81526004018080602001828103825260308152602001806126536030913960400191505060405180910390fd5b610761611a43565b831161079e5760405162461bcd60e51b81526004018080602001828103825260248152602001806126d56024913960400191505060405180910390fd5b600086116107dd5760405162461bcd60e51b81526004018080602001828103825260278152602001806124a76027913960400191505060405180910390fd5b600a546005546008546001600160a01b039091169060009061080f90610809908b63ffffffff611a5416565b846112f2565b9050868110156108505760405162461bcd60e51b815260040180806020018281038252602d8152602001806123e9602d913960400191505060405180910390fd5b600061087a670de0b6b3a764000061086e848d63ffffffff611aae16565b9063ffffffff611b0716565b604080516370a0823160e01b8152306004820152905191925082916001600160a01b038616916370a08231916024808301926020929190829003018186803b1580156108c557600080fd5b505afa1580156108d9573d6000803e3d6000fd5b505050506040513d60208110156108ef57600080fd5b5051101561092e5760405162461bcd60e51b81526004018080602001828103825260318152602001806124f66031913960400191505060405180910390fd5b8881101561096d5760405162461bcd60e51b81526004018080602001828103825260288152602001806124ce6028913960400191505060405180910390fd5b600061097882611b49565b9050600061098c838363ffffffff611b6216565b905061099e868263ffffffff611b6216565b600a556109c96109bc8d6109b0611468565b9063ffffffff611a5416565b859063ffffffff611aae16565b6006556109d6338d611ba4565b6109e1853383611be1565b60408051828152602081018e90528082018690529051339130917fa93b604be85dee08c402c756f5ca54b63c7fd292be0dd25ff4350debc9633fef9181900360600190a3965050505050506003548114610a82576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50949350505050565b6007546001600160a01b031690565b6000610aa7848484611d4b565b610b1d84610ab3611953565b610b1885604051806060016040528060288152602001612570602891396001600160a01b038a16600090815260016020526040812090610af1611953565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611ea716565b611957565b5060015b9392505050565b60085490565b600380546001019081905581610b8b576040805162461bcd60e51b815260206004820152601860248201527f77697468647261773a20696e76616c696420746f6b656e730000000000000000604482015290519081900360640190fd5b6000610b9561068e565b11610be7576040805162461bcd60e51b815260206004820181905260248201527f77697468647261773a20696e73756666696369656e74206c6971756964697479604482015290519081900360640190fd5b81610bf133611383565b1015610c44576040805162461bcd60e51b815260206004820152601d60248201527f77697468647261773a20696e73756666696369656e7420746f6b656e73000000604482015290519081900360640190fd5b6007546001600160a01b03166000610c5b84611351565b600554604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610cac57600080fd5b505afa158015610cc0573d6000803e3d6000fd5b505050506040513d6020811015610cd657600080fd5b505190506000610cf7610ce761068e565b61086e848963ffffffff611aae16565b905081811115610d385760405162461bcd60e51b81526004018080602001828103825260228152602001806125de6022913960400191505060405180910390fd5b600854600a54610d4e828663ffffffff611b6216565b9150610d60818463ffffffff611b6216565b90506000610d6e83836112f2565b9050610d98610d8b87610d7f611468565b9063ffffffff611b6216565b829063ffffffff611aae16565b6006556008839055600a829055610db0873388611be1565b600554610dc7906001600160a01b03163386611be1565b610dd1338a611f3e565b6040805187815260208101839052815133926001600160a01b038b16927ff6a7e66150be6cb9298dfde86d270dad2bb6cf1550db4bc04fabc754e002e10c929081900390910190a350505050505050610e28611a43565b600b556003548114610e81576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5050565b601281565b600654600090610ea890670de0b6b3a764000063ffffffff611b0716565b905090565b6003805460010190819055600554604080516370a0823160e01b815233600482015290516000939288926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015610f0957600080fd5b505afa158015610f1d573d6000803e3d6000fd5b505050506040513d6020811015610f3357600080fd5b50511015610f725760405162461bcd60e51b815260040180806020018281038252602f815260200180612624602f913960400191505060405180910390fd5b610f7a611a43565b8311610fb75760405162461bcd60e51b815260040180806020018281038252602a81526020018061239c602a913960400191505060405180910390fd5b60008611610ff65760405162461bcd60e51b81526004018080602001828103825260278152602001806124806027913960400191505060405180910390fd5b600554600854600a546000926001600160a01b03169161102591611020908b63ffffffff611a5416565b6112f2565b9150858211156110665760405162461bcd60e51b815260040180806020018281038252602d815260200180612683602d913960400191505060405180910390fd5b60006110848361086e8b670de0b6b3a764000063ffffffff611aae16565b9050878110156110c55760405162461bcd60e51b81526004018080602001828103825260288152602001806125276028913960400191505060405180910390fd5b60006110d08a611b49565b905060006110e48b8363ffffffff611b6216565b905060006111048661086e84670de0b6b3a764000063ffffffff611aae16565b600a5490915061111a908363ffffffff611a5416565b600a5560085461113c90611134908363ffffffff611b6216565b600a546112f2565b955061115a61114d82610d7f611468565b879063ffffffff611aae16565b6006556111698533308f611f53565b6004805460408051630e14581960e21b815290516111e09389936001600160a01b03169263385160649281830192602092829003018186803b1580156111ae57600080fd5b505afa1580156111c2573d6000803e3d6000fd5b505050506040513d60208110156111d857600080fd5b505185611be1565b6111ea33826120c6565b60408051828152602081018e90528082018890529051339130917f5e9c0189949f283ec504519f5615f4f190d66083cf363875683035cfbaac9a5a9181900360600190a3965050505050506003548114610a82576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600061066f611298611953565b84610b1885600160006112a9611953565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611a5416565b60006112ea82611383565b90505b919050565b6000610b218361086e84670de0b6b3a764000063ffffffff611aae16565b60008061131c83611383565b90508061132d5760009150506112ed565b610b218161086e670de0b6b3a764000061134561068e565b9063ffffffff611aae16565b600061135b61068e565b611367575060006112ed565b6112ea61137261068e565b61086e84611345611468565b601e81565b6001600160a01b031660009081526020819052604090205490565b604051806040016040528060078152602001660444558472d4c560cc1b81525081565b600854600a54600091610ea89161086e90670de0b6b3a764000063ffffffff611aae16565b600061066f6113f3611953565b84610b18856040518060600160405280602581526020016126b0602591396001600061141d611953565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611ea716565b600061066f611461611953565b8484611d4b565b600754604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156114b357600080fd5b505afa1580156114c7573d6000803e3d6000fd5b505050506040513d60208110156114dd57600080fd5b5051905090565b6005546001600160a01b031681565b600380546001019081905581611550576040805162461bcd60e51b815260206004820152601760248201527f6465706f7369743a20696e76616c696420616d6f756e74000000000000000000604482015290519081900360640190fd5b600061155a611468565b6007546008549192506001600160a01b031690600090611580908663ffffffff611a5416565b600a54909150600061159283836112f2565b905060006115a6828963ffffffff611aae16565b9050600081116115fd576040805162461bcd60e51b815260206004820152601f60248201527f6465706f7369743a20696e76616c69642075736572206c697175696469747900604482015290519081900360640190fd5b61160d868963ffffffff611a5416565b9550600061162682600654611a5490919063ffffffff16565b905060006116358289856120f3565b905060006116d1611648836109b061068e565b600554604080516370a0823160e01b8152306004820152905161086e9287926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561169957600080fd5b505afa1580156116ad573d6000803e3d6000fd5b505050506040513d60208110156116c357600080fd5b50519063ffffffff611aae16565b600888905590506116e8868263ffffffff611a5416565b600a5560068390556116fa338361211e565b6117068833308e611f53565b604080518c815260208101879052815133926001600160a01b038c16927f4466433a9d9e9d68780a1f6286a07c1c7a0e597fe1af747b4ea79d013628fc9e929081900390910190a3505050505050505050610e28611a43565b600b5490565b6004546001600160a01b031681565b600954600a54600091610ea8919063ffffffff611aae16565b60006112ea826113456113c1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6004546001600160a01b0316331461181d576040805162461bcd60e51b815260206004820152601560248201527434b734ba34b0b634bd329d102337b93134b23232b760591b604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b038681169190911791829055604080516318160ddd60e01b8152905192909116916318160ddd91600480820192602092909190829003018186803b15801561187957600080fd5b505afa15801561188d573d6000803e3d6000fd5b505050506040513d60208110156118a357600080fd5b50518211156118f9576040805162461bcd60e51b815260206004820152601760248201527f696e697469616c697a653a20496e76616c6964205f4374000000000000000000604482015290519081900360640190fd5b6008829055600981905561191f670de0b6b3a764000061086e838563ffffffff611aae16565b600a555050600580546001600160a01b0319166001600160a01b039290921691909117905550565b61271081565b600a5490565b3390565b6001600160a01b03831661199c5760405162461bcd60e51b81526004018080602001828103825260248152602001806126006024913960400191505060405180910390fd5b6001600160a01b0382166119e15760405162461bcd60e51b81526004018080602001828103825260228152602001806124386022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610ea842600860030154612133565b600082820183811015610b21576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611abd57506000610673565b82820282848281611aca57fe5b0414610b215760405162461bcd60e51b815260040180806020018281038252602181526020018061254f6021913960400191505060405180910390fd5b6000610b2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061214a565b60006112ea61271061086e84601e63ffffffff611aae16565b6000610b2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ea7565b600854611bb7908263ffffffff611a5416565b600855600754611bd2906001600160a01b0316833084611f53565b611bda611a43565b600b555050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310611c5e5780518252601f199092019160209182019101611c3f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611cc0576040519150601f19603f3d011682016040523d82523d6000602084013e611cc5565b606091505b5091509150818015611cf3575080511580611cf35750808060200190516020811015611cf057600080fd5b50515b611d44576040805162461bcd60e51b815260206004820152601960248201527f5f746f6b656e536166655472616e73666572206661696c656400000000000000604482015290519081900360640190fd5b5050505050565b6001600160a01b038316611d905760405162461bcd60e51b81526004018080602001828103825260258152602001806125b96025913960400191505060405180910390fd5b6001600160a01b038216611dd55760405162461bcd60e51b81526004018080602001828103825260238152602001806123c66023913960400191505060405180910390fd5b611e188160405180606001604052806026815260200161245a602691396001600160a01b038616600090815260208190526040902054919063ffffffff611ea716565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e4d908263ffffffff611a5416565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611f365760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611efb578181015183820152602001611ee3565b50505050905090810190601f168015611f285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b611f49823083611d4b565b610e8130826121af565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310611fd85780518252601f199092019160209182019101611fb9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461203a576040519150601f19603f3d011682016040523d82523d6000602084013e61203f565b606091505b509150915081801561206d57508051158061206d575080806020019051602081101561206a57600080fd5b50515b6120be576040805162461bcd60e51b815260206004820152601d60248201527f5f746f6b656e536166655472616e7366657246726f6d206661696c6564000000604482015290519081900360640190fd5b505050505050565b6008546120d9908263ffffffff611b6216565b600855600754611bd2906001600160a01b03168383611be1565b60008361210257506000610b21565b6121168461086e858563ffffffff611aae16565b949350505050565b61212830826122ab565b610e81308383611d4b565b6000818310156121435781610b21565b5090919050565b600081836121995760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611efb578181015183820152602001611ee3565b5060008385816121a557fe5b0495945050505050565b6001600160a01b0382166121f45760405162461bcd60e51b81526004018080602001828103825260218152602001806125986021913960400191505060405180910390fd5b61223781604051806060016040528060228152602001612416602291396001600160a01b038516600090815260208190526040902054919063ffffffff611ea716565b6001600160a01b038316600090815260208190526040902055600254612263908263ffffffff611b6216565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038216612306576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254612319908263ffffffff611a5416565b6002556001600160a01b038216600090815260208190526040902054612345908263ffffffff611a5416565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3505056fe737761704578616374455448466f72546f6b656e733a20496e76616c6964207472616e73616374696f6e45524332303a207472616e7366657220746f20746865207a65726f2061646472657373737761704578616374546f6b656e73466f724554483a20496e76616c696420707269636520736c69707061676545524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365737761704578616374455448466f72546f6b656e733a20496e76616c696420616d6f756e74496e737761704578616374546f6b656e73466f724554483a20496e76616c696420616d6f756e74496e737761704578616374546f6b656e73466f724554483a20496e76616c696420616d6f756e744f7574737761704578616374546f6b656e73466f724554483a20496e73756666696369656e7420455448206c6971756964697479737761704578616374455448466f72546f6b656e733a20496e76616c696420616d6f756e744f7574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737377697468647261773a20696e73756666696369656e74204554482062616c616e636545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373737761704578616374455448466f72546f6b656e733a20496e73756666696369656e74204554482062616c616e6365737761704578616374546f6b656e73466f724554483a20496e73756666696369656e7420757365722062616c616e6365737761704578616374455448466f72546f6b656e733a20496e76616c696420707269636520736c69707061676545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f737761704578616374546f6b656e73466f724554483a20496e76616c6964206f72646572a265627a7a72315820522f03b0c842cbef2e0bea3b7f30f7576db4c5229796739953179f42fe41a01064736f6c63430005110032
Deployed Bytecode Sourcemap
264:11860:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;264:11860:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;127:55:9;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;127:55:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;870:146:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;870:146:3;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;656:20:2;;;:::i;:::-;;;;-1:-1:-1;;;;;656:20:2;;;;;;;;;;;;;;624:26;;;:::i;:::-;;;;;;;;;;;;;;;;374:86:3;;;:::i;6503:1752:2:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;6503:1752:2;;;;;;;;;;;;;;;;;:::i;8561:91::-;;;:::i;1022:297:3:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1022:297:3;;;;;;;;;;;;;;;;;:::i;8370:92:2:-;;;:::i;3012:1490::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3012:1490:2;;:::i;:::-;;237:36:9;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8658:106:2;;;:::i;4508:1988::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;4508:1988:2;;;;;;;;;;;;;;;;;:::i;1325:204:3:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1325:204:3;;;;;;;;:::i;8772:109:2:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8772:109:2;-1:-1:-1;;;;;8772:109:2;;:::i;9496:115::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9496:115:2;;;;;;;:::i;8887:271::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8887:271:2;-1:-1:-1;;;;;8887:271:2;;:::i;9617:241::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9617:241:2;;:::i;470:39::-;;;:::i;466:105:3:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;466:105:3;-1:-1:-1;;;;;466:105:3;;:::i;188:43:9:-;;;:::i;9386:101:2:-;;;:::i;1535:255:3:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1535:255:3;;;;;;;;:::i;577:152::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;577:152:3;;;;;;;;:::i;9272:108:2:-;;;:::i;583:18::-;;;:::i;1671:1335::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1671:1335:2;;:::i;8261:101::-;;;:::i;516:31::-;;;:::i;9166:100::-;;;:::i;9866:116::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9866:116:2;;:::i;735:129:3:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;735:129:3;;;;;;;;;;:::i;1153:512:2:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;1153:512:2;;;;;;;;;;;;;;;;;;;;;;:::i;413:42::-;;;:::i;8472:83::-;;;:::i;127:55:9:-;;;;;;;;;;;;;;-1:-1:-1;;;127:55:9;;;;:::o;870:146:3:-;933:4;949:39;958:12;:10;:12::i;:::-;972:7;981:6;949:8;:39::i;:::-;-1:-1:-1;1005:4:3;870:146;;;;;:::o;656:20:2:-;;;-1:-1:-1;;;;;656:20:2;;:::o;624:26::-;;;;:::o;374:86:3:-;441:12;;374:86;:::o;6503:1752:2:-;1301:13:13;:18;;1318:1;1301:18;;;;;6720:6:2;;:28;;;-1:-1:-1;;;6720:28:2;;6737:10;6720:28;;;;;;6692:4;;1301:18:13;6752:8:2;;-1:-1:-1;;;;;6720:6:2;;;;:16;;:28;;;;;;;;;;;;;;;:6;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;6720:28:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6720:28:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6720:28:2;:40;;6712:101;;;;-1:-1:-1;;;6712:101:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6846:26;:24;:26::i;:::-;6835:8;:37;6827:86;;;;-1:-1:-1;;;6827:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6942:1;6931:8;:12;6923:64;;;;-1:-1:-1;;;6923:64:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7008:7;;7040:4;;7008;7133:7;-1:-1:-1;;;;;7040:4:2;;;;6997:8;;7120:40;;7133:21;;7145:8;7133:21;:11;:21;:::i;:::-;7156:3;7120:12;:40::i;:::-;7103:57;;7191:8;7178:9;:21;;7170:79;;;;-1:-1:-1;;;7170:79:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7286:14;7303:33;7331:4;7303:23;:9;7317:8;7303:23;:13;:23;:::i;:::-;:27;:33;:27;:33;:::i;:::-;7354:30;;;-1:-1:-1;;;7354:30:2;;7378:4;7354:30;;;;;;7286:50;;-1:-1:-1;7286:50:2;;-1:-1:-1;;;;;7354:15:2;;;;;:30;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;7354:30:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7354:30:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7354:30:2;:43;;7346:105;;;;-1:-1:-1;;;7346:105:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7482:12;7469:9;:25;;7461:78;;;;-1:-1:-1;;;7461:78:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7573:17;7593:20;7603:9;7593;:20::i;:::-;7573:40;-1:-1:-1;7623:19:2;7645:27;:9;7573:40;7645:27;:13;:27;:::i;:::-;7623:49;-1:-1:-1;7806:23:2;:3;7623:49;7806:23;:7;:23;:::i;:::-;7796:7;:33;7857:45;7871:30;7892:8;7871:16;:14;:16::i;:::-;:20;:30;:20;:30;:::i;:::-;7857:9;;:45;:13;:45;:::i;:::-;7840:14;:62;7956:41;7976:10;7988:8;7956:19;:41::i;:::-;8054:62;8081:5;8089:10;8101:14;8054:18;:62::i;:::-;8132:85;;;;;;;;;;;;;;;;;;;;8206:10;;8162:4;;8132:85;;;;;;;;;8234:14;-1:-1:-1;;;;;;1410:13:13;;1394:12;:29;1386:73;;;;;-1:-1:-1;;;1386:73:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;6503:1752:2;;;;;;;:::o;8561:91::-;8638:6;;-1:-1:-1;;;;;8638:6:2;8561:91;:::o;1022:297:3:-;1108:4;1124:36;1134:6;1142:9;1153:6;1124:9;:36::i;:::-;1170:121;1179:6;1187:12;:10;:12::i;:::-;1201:89;1239:6;1201:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1201:19:3;;;;;;:11;:19;;;;;;1221:12;:10;:12::i;:::-;-1:-1:-1;;;;;1201:33:3;;;;;;;;;;;;-1:-1:-1;1201:33:3;;;:89;;:37;:89;:::i;:::-;1170:8;:121::i;:::-;-1:-1:-1;1308:4:3;1022:297;;;;;;:::o;8370:92:2:-;8448:4;:7;8370:92;:::o;3012:1490::-;1301:13:13;:18;;1318:1;1301:18;;;;;3131:10:2;3123:47;;;;;-1:-1:-1;;;3123:47:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;3204:1;3188:13;:11;:13::i;:::-;:17;3180:62;;;;;-1:-1:-1;;;3180:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3285:6;3260:21;3270:10;3260:9;:21::i;:::-;:31;;3252:73;;;;;-1:-1:-1;;;3252:73:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;3361:6;;-1:-1:-1;;;;;3361:6:2;3335:15;3438:30;3461:6;3438:22;:30::i;:::-;3544:4;;:29;;;-1:-1:-1;;;3544:29:2;;3567:4;3544:29;;;;;;3424:44;;-1:-1:-1;3529:12:2;;-1:-1:-1;;;;;3544:4:2;;;;:14;;:29;;;;;;;;;;;;;;;:4;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;3544:29:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3544:29:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3544:29:2;;-1:-1:-1;3583:14:2;3600:38;3624:13;:11;:13::i;:::-;3600:19;:7;3612:6;3600:19;:11;:19;:::i;:38::-;3583:55;;3829:7;3816:9;:20;;3808:67;;;;-1:-1:-1;;;3808:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3937:4;:7;3965;;3988:15;3937:7;3996:6;3988:15;:7;:15;:::i;:::-;3982:21;-1:-1:-1;4019:18:2;:3;4027:9;4019:18;:7;:18;:::i;:::-;4013:24;;4097:14;4114:22;4127:3;4132;4114:12;:22::i;:::-;4097:39;;4163:43;4177:28;4198:6;4177:16;:14;:16::i;:::-;:20;:28;:20;:28;:::i;:::-;4163:9;;:43;:13;:43;:::i;:::-;4146:14;:60;4217:4;:13;;;4240:7;:13;;;4264:47;4283:7;4292:10;4304:6;4264:18;:47::i;:::-;4348:4;;4321:56;;-1:-1:-1;;;;;4348:4:2;4355:10;4367:9;4321:18;:56::i;:::-;4388:39;4408:10;4420:6;4388:19;:39::i;:::-;4442:53;;;;;;;;;;;;;;4465:10;;-1:-1:-1;;;;;4442:53:2;;;;;;;;;;;;;;894:1;;;;;;;965:26;:24;:26::i;:::-;943:19;:48;:19;1410:13:13;1394:29;;1386:73;;;;;-1:-1:-1;;;1386:73:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;3012:1490:2;;:::o;237:36:9:-;271:2;237:36;:::o;8658:106:2:-;8733:14;;8710:4;;8733:24;;8752:4;8733:24;:18;:24;:::i;:::-;8726:31;;8658:106;:::o;4508:1988::-;1301:13:13;:18;;1318:1;1301:18;;;;;4725:4:2;;:26;;;-1:-1:-1;;;4725:26:2;;4740:10;4725:26;;;;;;4697:4;;1301:18:13;4755:8:2;;-1:-1:-1;;;;;4725:4:2;;;;:14;;:26;;;;;;;;;;;;;;;:4;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;4725:26:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4725:26:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4725:26:2;:38;;4717:98;;;;-1:-1:-1;;;4717:98:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4844:26;:24;:26::i;:::-;4833:8;:37;4825:92;;;;-1:-1:-1;;;4825:92:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4946:1;4935:8;:12;4927:64;;;;-1:-1:-1;;;4927:64:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5040:4;;5210;:7;5219;;5001:14;;-1:-1:-1;;;;;5040:4:2;;5197:44;;5219:21;;5231:8;5219:21;:11;:21;:::i;:::-;5197:12;:44::i;:::-;5185:56;;5276:8;5263:9;:21;;5255:79;;;;-1:-1:-1;;;5255:79:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5397:14;5414:33;5437:9;5414:18;:8;5427:4;5414:18;:12;:18;:::i;:33::-;5397:50;;5478:12;5465:9;:25;;5457:78;;;;-1:-1:-1;;;5457:78:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5596:16;5615:19;5625:8;5615:9;:19::i;:::-;5596:38;-1:-1:-1;5644:18:2;5665:25;:8;5596:38;5665:25;:12;:25;:::i;:::-;5644:46;-1:-1:-1;5700:19:2;5722:38;5750:9;5722:23;5644:46;5740:4;5722:23;:17;:23;:::i;:38::-;5830:7;;5700:60;;-1:-1:-1;5830:26:2;;5842:13;5830:26;:11;:26;:::i;:::-;5820:7;:36;:4;5891:7;5878:50;;5891:27;;5903:14;5891:27;:11;:27;:::i;:::-;5920:7;;5878:12;:50::i;:::-;5866:62;;5955:51;5969:36;5990:14;5969:16;:14;:16::i;:36::-;5955:9;;:51;:13;:51;:::i;:::-;5938:14;:68;6063:75;6094:5;6102:10;6122:4;6129:8;6063:22;:75::i;:::-;6218:7;;;:20;;;-1:-1:-1;;;6218:20:2;;;;6183:69;;6210:5;;-1:-1:-1;;;;;6218:7:2;;:18;;:20;;;;;;;;;;;:7;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;6218:20:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6218:20:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6218:20:2;6240:11;6183:18;:69::i;:::-;6309:48;6330:10;6342:14;6309:20;:48::i;:::-;6373:85;;;;;;;;;;;;;;;;;;;;6447:10;;6403:4;;6373:85;;;;;;;;;6475:14;-1:-1:-1;;;;;;1410:13:13;;1394:12;:29;1386:73;;;;;-1:-1:-1;;;1386:73:13;;;;;;;;;;;;;;;;;;;;;;;;;;;1325:204:3;1402:4;1418:83;1427:12;:10;:12::i;:::-;1441:7;1450:50;1489:10;1450:11;:25;1462:12;:10;:12::i;:::-;-1:-1:-1;;;;;1450:25:3;;;;;;;;;;;;;;;;;-1:-1:-1;1450:25:3;;;:34;;;;;;;;;;;:50;:38;:50;:::i;8772:109:2:-;8833:4;8856:18;8866:7;8856:9;:18::i;:::-;8849:25;;8772:109;;;;:::o;9496:115::-;9559:4;9582:22;9600:3;9582:13;:3;9590:4;9582:13;:7;:13;:::i;8887:271::-;8954:4;8970:15;8988:18;8998:7;8988:9;:18::i;:::-;8970:36;-1:-1:-1;9020:15:2;9016:54;;9058:1;9051:8;;;;;9016:54;9086:65;9140:10;9086:36;9117:4;9086:13;:11;:13::i;:::-;:30;:36;:30;:36;:::i;9617:241::-;9682:4;9702:13;:11;:13::i;:::-;9698:57;;-1:-1:-1;9743:1:2;9736:8;;9698:57;9779:72;9837:13;:11;:13::i;:::-;9779:40;9813:5;9779:16;:14;:16::i;470:39::-;507:2;470:39;:::o;466:105:3:-;-1:-1:-1;;;;;546:18:3;523:4;546:18;;;;;;;;;;;;466:105::o;188:43:9:-;;;;;;;;;;;;;;-1:-1:-1;;;188:43:9;;;;:::o;9386:101:2:-;9472:4;:7;9450;;9427:4;;9450:30;;:17;;9462:4;9450:17;:11;:17;:::i;1535:255:3:-;1617:4;1633:129;1642:12;:10;:12::i;:::-;1656:7;1665:96;1704:15;1665:96;;;;;;;;;;;;;;;;;:11;:25;1677:12;:10;:12::i;:::-;-1:-1:-1;;;;;1665:25:3;;;;;;;;;;;;;;;;;-1:-1:-1;1665:25:3;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;577:152::-;643:4;659:42;669:12;:10;:12::i;:::-;683:9;694:6;659:9;:42::i;9272:108:2:-;9342:6;;:31;;;-1:-1:-1;;;9342:31:2;;9367:4;9342:31;;;;;;9319:4;;-1:-1:-1;;;;;9342:6:2;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;9342:31:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9342:31:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9342:31:2;;-1:-1:-1;9272:108:2;:::o;583:18::-;;;-1:-1:-1;;;;;583:18:2;;:::o;1671:1335::-;1301:13:13;:18;;1318:1;1301:18;;;;;1789:10:2;1781:46;;;;;-1:-1:-1;;;1781:46:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;1837:18;1858:16;:14;:16::i;:::-;1910:6;;1938:4;:7;1837:37;;-1:-1:-1;;;;;;1910:6:2;;1884:15;;1938:19;;1950:6;1938:19;:11;:19;:::i;:::-;1978:7;;1927:30;;-1:-1:-1;1967:8:2;2052:22;1927:30;1978:7;2052:12;:22::i;:::-;2035:39;-1:-1:-1;2084:14:2;2101:21;2035:39;2115:6;2101:21;:13;:21;:::i;:::-;2084:38;;2152:1;2140:9;:13;2132:57;;;;;-1:-1:-1;;;2132:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;2216:25;:13;2234:6;2216:25;:17;:25;:::i;:::-;2200:41;;2251:20;2274:29;2293:9;2274:14;;:18;;:29;;;;:::i;:::-;2251:52;;2347:17;2367:62;2387:15;2404:13;2419:9;2367:19;:62::i;:::-;2347:82;;2510:8;2521:84;2573:31;2591:12;2573:13;:11;:13::i;:31::-;2521:4;;:29;;;-1:-1:-1;;;2521:29:2;;2544:4;2521:29;;;;;;:47;;2555:12;;-1:-1:-1;;;;;2521:4:2;;;;:14;;:29;;;;;;;;;;;;;;;:4;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;2521:29:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2521:29:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2521:29:2;;:47;:33;:47;:::i;:84::-;2653:4;:13;;;2510:95;-1:-1:-1;2686:12:2;:3;2510:95;2686:12;:7;:12;:::i;:::-;2676:7;:22;2708:14;:32;;;2803:45;2823:10;2835:12;2803:19;:45::i;:::-;2858:66;2881:7;2890:10;2910:4;2917:6;2858:22;:66::i;:::-;2939:52;;;;;;;;;;;;;;2961:10;;-1:-1:-1;;;;;2939:52:2;;;;;;;;;;;;;;894:1;;;;;;;;;965:26;:24;:26::i;8261:101::-;8336:19;;8261:101;:::o;516:31::-;;;-1:-1:-1;;;;;516:31:2;;:::o;9166:100::-;9251:7;;9226;;9203:4;;9226:33;;:7;:33;:24;:33;:::i;9866:116::-;9929:4;9952:22;9967:6;9952:10;:8;:10::i;735:129:3:-;-1:-1:-1;;;;;830:18:3;;;807:4;830:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;735:129::o;1153:512:2:-;1290:7;;-1:-1:-1;;;;;1290:7:2;1268:10;:30;1260:64;;;;;-1:-1:-1;;;1260:64:2;;;;;;;;;;;;-1:-1:-1;;;1260:64:2;;;;;;;;;;;;;;;1335:6;:24;;-1:-1:-1;;;;;;1335:24:2;-1:-1:-1;;;;;1335:24:2;;;;;;;;;;;1385:20;;;-1:-1:-1;;;1385:20:2;;;;:6;;;;;:18;;:20;;;;;;;;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;1385:20:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1385:20:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1385:20:2;1378:27;;;1370:63;;;;;-1:-1:-1;;;1370:63:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;1498:4;:13;;;1521:7;:13;;;1554:30;1579:4;1554:20;1531:3;1508;1554:20;:11;:20;:::i;:30::-;1544:7;:40;-1:-1:-1;;1628:4:2;:22;;-1:-1:-1;;;;;;1628:22:2;-1:-1:-1;;;;;1628:22:2;;;;;;;;;;-1:-1:-1;1153:512:2:o;413:42::-;450:5;413:42;:::o;8472:83::-;8541:7;;8472:83;:::o;82:96:1:-;161:10;82:96;:::o;2913:329:3:-;-1:-1:-1;;;;;3003:19:3;;2995:68;;;;-1:-1:-1;;;2995:68:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3081:21:3;;3073:68;;;;-1:-1:-1;;;3073:68:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3152:18:3;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;3203:32;;;;;;;;;;;;;;;;;2913:329;;;:::o;10462:135:2:-;10521:4;10544:46;10553:15;10570:4;:19;;;10544:8;:46::i;49:164:15:-;101:4;126:5;;;149:6;;;;141:46;;;;;-1:-1:-1;;;141:46:15;;;;;;;;;;;;;;;;;;;;;;;;;;;528:229;580:4;600:6;596:45;;-1:-1:-1;629:1:15;622:8;;596:45;660:5;;;664:1;660;:5;:1;683:5;;;;;:10;675:56;;;;-1:-1:-1;;;675:56:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;762:121;814:4;837:39;841:1;844;837:39;;;;;;;;;;;;;;;;;:3;:39::i;10928:121:2:-;10983:4;11006:36;450:5;11006:22;:6;507:2;11006:22;:10;:22;:::i;218:125:15:-;270:4;293:43;297:1;300;293:43;;;;;;;;;;;;;;;;;:3;:43::i;9988:238:2:-;10115:4;:7;:19;;10127:6;10115:19;:11;:19;:::i;:::-;10105:4;:29;10179:6;;10148:71;;-1:-1:-1;;;;;10179:6:2;10188:7;10205:4;10212:6;10148:22;:71::i;:::-;965:26;:24;:26::i;:::-;943:19;:48;-1:-1:-1;;9988:238:2:o;11414:323::-;11578:46;;;-1:-1:-1;;;;;11578:46:2;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11578:46:2;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;11567:58:2;;;;11532:12;;11546:17;;11567:10;;;;11578:46;11567:58;;;25:18:-1;11567:58:2;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11567:58:2;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;11531:94:2;;;;11643:7;:57;;;;-1:-1:-1;11655:11:2;;:16;;:44;;;11686:4;11675:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11675:24:2;11655:44;11635:95;;;;;-1:-1:-1;;;11635:95:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;11414:323;;;;;:::o;1796:461:3:-;-1:-1:-1;;;;;1890:20:3;;1882:70;;;;-1:-1:-1;;;1882:70:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1970:23:3;;1962:71;;;;-1:-1:-1;;;1962:71:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064;2086:6;2064:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2064:17:3;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;2044:17:3;;;:9;:17;;;;;;;;;;;:91;;;;2168:20;;;;;;;:32;;2193:6;2168:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;2145:20:3;;;:9;:20;;;;;;;;;;;;:55;;;;2215:35;;;;;;;2145:20;;2215:35;;;;;;;;;;;;;1796:461;;;:::o;348:175:15:-;428:4;460:12;452:6;;;;444:29;;;;-1:-1:-1;;;444:29:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;444:29:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;492:5:15;;;348:175::o;10763:158:2:-;10838:38;10848:4;10862;10869:6;10838:9;:38::i;:::-;10886:28;10900:4;10907:6;10886:5;:28::i;11743:359::-;11933:52;;;-1:-1:-1;;;;;11933:52:2;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11933:52:2;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;11922:64:2;;;;11887:12;;11901:17;;11922:10;;;;11933:52;11922:64;;;25:18:-1;11922:64:2;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11922:64:2;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;11886:100:2;;;;12004:7;:57;;;;-1:-1:-1;12016:11:2;;:16;;:44;;;12047:4;12036:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12036:24:2;12016:44;11996:99;;;;;-1:-1:-1;;;11996:99:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;11743:359;;;;;;:::o;10232:220::-;10360:4;:7;:19;;10372:6;10360:19;:11;:19;:::i;:::-;10350:4;:29;10420:6;;10393:52;;-1:-1:-1;;;;;10420:6:2;10429:7;10438:6;10393:18;:52::i;11055:353::-;11225:4;11250:20;11246:59;;-1:-1:-1;11293:1:2;11286:8;;11246:59;11325:76;11385:15;11325:42;:13;11356:10;11325:42;:30;:42;:::i;:76::-;11318:83;11055:353;-1:-1:-1;;;;11055:353:2:o;10603:154::-;10676:28;10690:4;10697:6;10676:5;:28::i;:::-;10714:36;10732:4;10739:2;10743:6;10714:9;:36::i;182:105:10:-;240:7;271:1;266;:6;;:14;;279:1;266:14;;;-1:-1:-1;275:1:10;;182:105;-1:-1:-1;182:105:10:o;888:240:15:-;968:4;1065:12;1058:5;1050:28;;;;-1:-1:-1;;;1050:28:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1050:28:15;;1088:6;1101:1;1097;:5;;;;;;;888:240;-1:-1:-1;;;;;888:240:15:o;2568:339:3:-;-1:-1:-1;;;;;2640:21:3;;2632:67;;;;-1:-1:-1;;;2632:67:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2731:68;2754:6;2731:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2731:18:3;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;2710:18:3;;:9;:18;;;;;;;;;;:89;2824:12;;:24;;2841:6;2824:24;:16;:24;:::i;:::-;2809:12;:39;2863:37;;;;;;;;2889:1;;-1:-1:-1;;;;;2863:37:3;;;;;;;;;;;;2568:339;;:::o;2263:299::-;-1:-1:-1;;;;;2335:21:3;;2327:65;;;;;-1:-1:-1;;;2327:65:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;2418:12;;:24;;2435:6;2418:24;:16;:24;:::i;:::-;2403:12;:39;-1:-1:-1;;;;;2473:18:3;;:9;:18;;;;;;;;;;;:30;;2496:6;2473:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;2452:18:3;;:9;:18;;;;;;;;;;;:51;;;;2518:37;;;;;;;2452:18;;:9;;2518:37;;;;;;;;;;2263:299;;:::o
Swarm Source
bzzr://522f03b0c842cbef2e0bea3b7f30f7576db4c5229796739953179f42fe41a010
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.