Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 50 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17665987 | 417 days ago | IN | 0 ETH | 0.00094442 | ||||
Approve | 17665960 | 417 days ago | IN | 0 ETH | 0.0009491 | ||||
Approve | 17665809 | 417 days ago | IN | 0 ETH | 0.00139002 | ||||
Renounce Ownersh... | 17665723 | 417 days ago | IN | 0 ETH | 0.00057733 | ||||
Set Sell Tax | 17665720 | 417 days ago | IN | 0 ETH | 0.00068562 | ||||
Set Buy Tax | 17665720 | 417 days ago | IN | 0 ETH | 0.00068375 | ||||
Approve | 17665690 | 417 days ago | IN | 0 ETH | 0.00128877 | ||||
Set Buy Tax | 17665684 | 417 days ago | IN | 0 ETH | 0.00088211 | ||||
Set Sell Tax | 17665683 | 417 days ago | IN | 0 ETH | 0.00088849 | ||||
Approve | 17665671 | 417 days ago | IN | 0 ETH | 0.00147446 | ||||
Approve | 17665635 | 417 days ago | IN | 0 ETH | 0.00161099 | ||||
Approve | 17665616 | 417 days ago | IN | 0 ETH | 0.00209853 | ||||
Approve | 17665616 | 417 days ago | IN | 0 ETH | 0.00209853 | ||||
Manual Swap Back | 17665584 | 417 days ago | IN | 0 ETH | 0.00458368 | ||||
Approve | 17665576 | 417 days ago | IN | 0 ETH | 0.0050083 | ||||
Approve | 17665575 | 417 days ago | IN | 0 ETH | 0.002116 | ||||
Approve | 17665573 | 417 days ago | IN | 0 ETH | 0.00503438 | ||||
Approve | 17665571 | 417 days ago | IN | 0 ETH | 0.00161979 | ||||
Approve | 17665570 | 417 days ago | IN | 0 ETH | 0.00159182 | ||||
Approve | 17665568 | 417 days ago | IN | 0 ETH | 0.00160172 | ||||
Approve | 17665568 | 417 days ago | IN | 0 ETH | 0.00160172 | ||||
Approve | 17665568 | 417 days ago | IN | 0 ETH | 0.00495937 | ||||
Approve | 17665567 | 417 days ago | IN | 0 ETH | 0.00483136 | ||||
Approve | 17665565 | 417 days ago | IN | 0 ETH | 0.00143993 | ||||
Approve | 17665565 | 417 days ago | IN | 0 ETH | 0.00143993 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17665747 | 417 days ago | 0.03603267 ETH | ||||
17665747 | 417 days ago | 0.03603267 ETH | ||||
17665642 | 417 days ago | 0.01802055 ETH | ||||
17665642 | 417 days ago | 0.01802055 ETH | ||||
17665642 | 417 days ago | 0.01948419 ETH | ||||
17665642 | 417 days ago | 0.01948419 ETH | ||||
17665642 | 417 days ago | 0.02113377 ETH | ||||
17665642 | 417 days ago | 0.02113377 ETH | ||||
17665642 | 417 days ago | 0.006333 ETH | ||||
17665642 | 417 days ago | 0.006333 ETH | ||||
17665641 | 417 days ago | 0.00424284 ETH | ||||
17665641 | 417 days ago | 0.00424284 ETH | ||||
17665600 | 417 days ago | 0.01851409 ETH | ||||
17665600 | 417 days ago | 0.01851409 ETH | ||||
17665597 | 417 days ago | 0.01922364 ETH | ||||
17665597 | 417 days ago | 0.01922364 ETH | ||||
17665592 | 417 days ago | 0.00199733 ETH | ||||
17665592 | 417 days ago | 0.00199733 ETH | ||||
17665584 | 417 days ago | 0.31809712 ETH | ||||
17665584 | 417 days ago | 0.31809712 ETH | ||||
17665564 | 417 days ago | 0.00779075 ETH | ||||
17665564 | 417 days ago | 0.00779075 ETH | ||||
17665564 | 417 days ago | 0.00820009 ETH | ||||
17665564 | 417 days ago | 0.00820009 ETH | ||||
17665564 | 417 days ago | 0.00864259 ETH |
Loading...
Loading
Contract Name:
DinoLFG20
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-10 */ /** TG: https://t.me/DINO20_ENTRY TW: https://twitter.com/DINO20_ERC Web: http://DINO20.com/ */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) external pure returns (uint amountOut); function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) external pure returns (uint amountIn); function getAmountsOut( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); function getAmountsIn( uint amountOut, address[] calldata path ) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 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 functionCallWithValue( target, data, 0, "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" ); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert( bytes memory returndata, string memory errorMessage ) private pure { if (returndata.length > 0) { /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, uint256 amount ) external returns (bool); } 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 oldAllowance = token.allowance(address(this), spender); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, oldAllowance + value ) ); } 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" ); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, oldAllowance - value ) ); } } function forceApprove( IERC20 token, address spender, uint256 value ) internal { bytes memory approvalCall = abi.encodeWithSelector( token.approve.selector, spender, value ); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, 0) ); _callOptionalReturn(token, approvalCall); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require( nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed" ); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); require( returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } function _callOptionalReturnBool( IERC20 token, bytes memory data ) private returns (bool) { (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token)); } } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; } function _nonReentrantAfter() private { _status = _NOT_ENTERED; } function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } function transfer( address to, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve( address spender, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { 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); } function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { 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); } } contract DinoLFG20 is Ownable, ReentrancyGuard, ERC20 { using SafeERC20 for IERC20; uint256 public liquidityTaxBuy; uint256 public liquidityTaxSell; uint256 public marketingTaxBuy; uint256 public marketingTaxSell; uint256 public immutable denominator; uint256 public liquidityTokenAmount; uint256 public marketingTokenAmount; address public marketingWallet; bool private swapping; uint256 public swapTokensAtAmount; bool public isSwapBackEnabled; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; uint256 public maxWalletLimit; mapping(address => bool) private _isAutomatedMarketMakerPair; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedFromMaxWalletLimit; modifier inSwap() { swapping = true; _; swapping = false; } event UpdateBuyTax(uint256 liquidityTaxBuy, uint256 marketingTaxBuy); event UpdateSellTax(uint256 liquidityTaxSell, uint256 marketingTaxSell); event UpdateMarketingWallet(address indexed marketingWallet); event UpdateMaxWalletLimit(uint256 maxWalletLimit); event UpdateExcludeFromMaxWalletLimit( address indexed account, bool isExcluded ); event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount); event UpdateSwapBackStatus(bool status); event UpdateAutomatedMarketMakerPair(address indexed pair, bool status); event UpdateExcludeFromFees(address indexed account, bool isExcluded); constructor() ERC20("DinoLFG 2.0", "DINO20") { _mint(owner(), 10_000_000_000 * (10 ** 18)); liquidityTaxBuy = 0; liquidityTaxSell = 0; marketingTaxBuy = 1000; marketingTaxSell = 1500; denominator = 10_000; marketingWallet = 0xe89896A0Ae60eC1c46dA3D7eA50Cb9bC07bc6021; swapTokensAtAmount = totalSupply() / 100_000; isSwapBackEnabled = true; address router = getRouterAddress(); uniswapV2Router = IUniswapV2Router02(router); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); _approve(address(this), address(uniswapV2Router), type(uint256).max); maxWalletLimit = 200; _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true; _isExcludedFromMaxWalletLimit[address(0xdead)] = true; _isExcludedFromMaxWalletLimit[address(owner())] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Pair)] = true; _isExcludedFromFees[address(0xdead)] = true; _isExcludedFromFees[address(owner())] = true; _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[address(uniswapV2Router)] = true; } receive() external payable {} fallback() external payable {} function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function getRouterAddress() public view returns (address) { if (block.chainid == 56) { return 0x10ED43C718714eb63d5aA57B78B54704E256024E; } else if (block.chainid == 97) { return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; } else if (block.chainid == 1 || block.chainid == 5) { return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else { revert("Cannot found router on this network"); } } function claimStuckTokens(address token) external onlyOwner { require(token != address(this), "Owner cannot claim native tokens"); if (token == address(0x0)) { payable(msg.sender).transfer(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.safeTransfer(msg.sender, balance); } function setBuyTax( uint256 _liquidityTaxBuy, uint256 _marketingTaxBuy ) external onlyOwner { require( liquidityTaxBuy != _liquidityTaxBuy || marketingTaxBuy != _marketingTaxBuy, "Buy Tax already on that amount" ); require( _liquidityTaxBuy + _marketingTaxBuy <= 4_000, "Buy Tax cannot be more than 10%" ); liquidityTaxBuy = _liquidityTaxBuy; marketingTaxBuy = _marketingTaxBuy; emit UpdateBuyTax(_liquidityTaxBuy, _marketingTaxBuy); } function setSellTax( uint256 _liquidityTaxSell, uint256 _marketingTaxSell ) external onlyOwner { require( liquidityTaxSell != _liquidityTaxSell || marketingTaxSell != _marketingTaxSell, "Sell Tax already on that amount" ); require( _liquidityTaxSell + _marketingTaxSell <= 4_000, "Sell Tax cannot be more than 10%" ); liquidityTaxSell = _liquidityTaxSell; marketingTaxSell = _marketingTaxSell; emit UpdateSellTax(_liquidityTaxSell, _marketingTaxSell); } function setMarketingWallet(address _marketingWallet) external onlyOwner { require( _marketingWallet != marketingWallet, "Marketing wallet is already that address" ); require( _marketingWallet != address(0), "Marketing wallet cannot be the zero address" ); require( !isContract(_marketingWallet), "Marketing wallet cannot be a contract" ); marketingWallet = _marketingWallet; emit UpdateMarketingWallet(_marketingWallet); } function setSwapTokensAtAmount(uint256 amount) external onlyOwner { require( swapTokensAtAmount != amount, "SwapTokensAtAmount already on that amount" ); require( amount >= totalSupply() / 1_000_000, "Amount must be equal or greater than 0.000001% of Total Supply" ); swapTokensAtAmount = amount; emit UpdateSwapTokensAtAmount(amount); } function toggleSwapBack(bool status) external onlyOwner { require(isSwapBackEnabled != status, "SwapBack already on status"); isSwapBackEnabled = status; emit UpdateSwapBackStatus(status); } function setMaxWalletLimit(uint256 amount) external onlyOwner { require( maxWalletLimit != amount, "maxWalletLimit already on that amount" ); require( amount >= 10 && amount <= 10_000, "maxWalletLimit cannot be below 0.1% of totalSupply (10) or more than 100% of totalSupply (10000)" ); maxWalletLimit = amount; emit UpdateMaxWalletLimit(amount); } function setAutomatedMarketMakerPair( address pair, bool status ) external onlyOwner { require( _isAutomatedMarketMakerPair[pair] != status, "Pair address is already the value of 'status'" ); require(pair != address(uniswapV2Pair), "Cannot set this pair"); _isAutomatedMarketMakerPair[pair] = status; emit UpdateAutomatedMarketMakerPair(pair, status); } function isAutomatedMarketMakerPair( address pair ) external view returns (bool) { return _isAutomatedMarketMakerPair[pair]; } function setExcludeFromFees( address account, bool excluded ) external onlyOwner { require( _isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromFees[account] = excluded; emit UpdateExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) external view returns (bool) { return _isExcludedFromFees[account]; } function setExcludeFromMaxWalletLimit( address account, bool excluded ) external onlyOwner { require( account != address(this), "State of this contract address cannot be modified" ); require( _isExcludedFromMaxWalletLimit[account] != excluded, "Account is already the value of 'excluded'" ); require(account != address(uniswapV2Pair), "Cannot set this pair"); _isExcludedFromMaxWalletLimit[account] = excluded; emit UpdateExcludeFromMaxWalletLimit(account, excluded); } function isExcludedFromMaxWalletLimit( address account ) external view returns (bool) { return _isExcludedFromMaxWalletLimit[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && !swapping && !_isAutomatedMarketMakerPair[from] && isSwapBackEnabled && liquidityTokenAmount + marketingTokenAmount > 0 ) { swapBack(); } bool takeFee = true; if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) { takeFee = false; } if (!_isExcludedFromMaxWalletLimit[to]) { require( balanceOf(to) + amount <= (totalSupply() * maxWalletLimit) / denominator, "Balance of to user cannot more than wallet limit" ); } if (takeFee) { uint256 tempLiquidityAmount; uint256 tempMarketingAmount; if (_isAutomatedMarketMakerPair[from]) { tempLiquidityAmount = (amount * liquidityTaxBuy) / denominator; tempMarketingAmount = (amount * marketingTaxBuy) / denominator; } else if (_isAutomatedMarketMakerPair[to]) { tempLiquidityAmount = (amount * liquidityTaxSell) / denominator; tempMarketingAmount = (amount * marketingTaxSell) / denominator; } liquidityTokenAmount += tempLiquidityAmount; marketingTokenAmount += tempMarketingAmount; uint256 fees = tempLiquidityAmount + tempMarketingAmount; if (fees > 0) { amount -= fees; super._transfer(from, address(this), fees); } } super._transfer(from, to, amount); } function swapBack() internal inSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uint256 contractTokenBalance = balanceOf(address(this)); uint256 totalTax = liquidityTokenAmount + marketingTokenAmount; uint256 liquifyToken = (contractTokenBalance * (liquidityTokenAmount / 2)) / totalTax; uint256 swapBackAmount = contractTokenBalance - liquifyToken; totalTax -= (liquidityTokenAmount) / 2; try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( swapBackAmount, 0, path, address(this), block.timestamp ) {} catch { return; } uint256 newBalance = address(this).balance; uint256 marketingBNB = (newBalance * marketingTokenAmount) / totalTax; uint256 liquifyBNB = newBalance - marketingBNB; if (liquifyToken > 0 && liquifyBNB > 0) { try uniswapV2Router.addLiquidityETH{value: liquifyBNB}( address(this), liquifyToken, 0, 0, address(0xdead), block.timestamp ) {} catch {} } if (marketingBNB > 0) { sendBNB(marketingWallet, marketingBNB); } liquidityTokenAmount = 0; marketingTokenAmount = 0; } function sendBNB( address _to, uint256 amount ) internal nonReentrant returns (bool) { if (address(this).balance < amount) return false; (bool success, ) = payable(_to).call{value: amount}(""); return success; } function manualSwapBack() external { uint256 contractTokenBalance = balanceOf(address(this)); require(contractTokenBalance > 0, "Cant Swap Back 0 Token!"); swapBack(); } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimit","type":"uint256"}],"name":"UpdateMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxSell","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","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":"amount","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040523480156200001157600080fd5b506040518060400160405280600b81526020016a044696e6f4c464720322e360ac1b81525060405180604001604052806006815260200165044494e4f32360d41b8152506200006f620000696200044760201b60201c565b6200044b565b6001805560056200008183826200080e565b5060066200009082826200080e565b505050620000ba620000a76200049b60201b60201c565b6b204fce5e3e25026110000000620004aa565b600060078190556008556103e86009556105dc600a55612710608052600d80546001600160a01b03191673e89896a0ae60ec1c46da3d7ea50cb9bc07bc6021179055620186a06200010a60045490565b620001169190620008da565b600e55600f805460ff1916600117905560006200013262000573565b9050806001600160a01b031660a0816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b59190620008fd565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022b9190620008fd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000279573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029f9190620008fd565b6001600160a01b031660c05260a051620002be9030906000196200063d565b60c860105560c0516001600160a01b0316600090815260116020908152604082208054600160ff19918216811790925561dead84526013928390527f2264e2d7bacabe6058f5009f42467b9be28015e7760f87409562384c94ac271c80549091168217905591620003376000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526013845282812080548616600190811790915560a05183168252838220805487168217905560c0519092168152918220805485168217905561dead82526012928390527f1120e10407cab1193d7c5139d9aae5536deb3d83e855f25f8e42f811c01f56f780549094168117909355620003e96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601290935281832080548516600190811790915560a0519091168352912080549092161790555062000957565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b6001600160a01b038216620005065760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b80600460008282546200051a91906200092f565b90915550506001600160a01b0382166000818152600260209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000466038036200059757507310ed43c718714eb63d5aa57b78b54704e256024e90565b46606103620005b9575073d99d1c33f9fc3444f8101754abc46c52416550d190565b4660011480620005c95750466005145b15620005e85750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401620004fd565b6001600160a01b038316620006a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004fd565b6001600160a01b038216620007045760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004fd565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200079557607f821691505b602082108103620007b657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200076557600081815260208120601f850160051c81016020861015620007e55750805b601f850160051c820191505b818110156200080657828155600101620007f1565b505050505050565b81516001600160401b038111156200082a576200082a6200076a565b62000842816200083b845462000780565b84620007bc565b602080601f8311600181146200087a5760008415620008615750858301515b600019600386901b1c1916600185901b17855562000806565b600085815260208120601f198616915b82811015620008ab578886015182559484019460019091019084016200088a565b5085821015620008ca5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082620008f857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200091057600080fd5b81516001600160a01b03811681146200092857600080fd5b9392505050565b808201808211156200095157634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051612992620009cd6000396000818161042001528181610f8e01526111030152600081816102f701528181611cfd01528181611e360152611f2801526000818161064b01528181611a1401528181611b0f01528181611b4a01528181611bab0152611be601526129926000f3fe60806040526004361061023d5760003560e01c806371afc7131161012d5780639a7a23d6116100b0578063d54f7d5e11610077578063d54f7d5e14610726578063d63cad221461073b578063dd62ed3e1461075b578063e2f456051461077b578063f2fde38b14610791578063f9d0831a146107b157005b80639a7a23d61461066d578063a457c2d71461068d578063a8a69b9d146106ad578063a9059cbb146106e6578063afa4f3b21461070657005b80638123bdc8116100f45780638123bdc8146105d05780638a96082e146105e65780638da5cb5b1461060657806395d89b411461062457806396ce07951461063957005b806371afc7131461052b578063721e623314610541578063728d41c91461055757806375f0a874146105775780637949a4031461059757005b8063313ce567116101c057806352dfc8d01161018757806352dfc8d01461047b5780635d098b381461049557806366a88d96146104b557806366eb3785146104cb57806370a08231146104e0578063715018a61461051657005b8063313ce567146103bc57806339509351146103d857806342d0b0bc146103f857806349bd5a5e1461040e5780634fbee1931461044257005b806318160ddd1161020457806318160ddd146103315780631f88a23e1461034657806323b872dd14610366578063247b912d14610386578063248ba7ed146103a657005b806305a1f36d1461024657806306fdde0314610266578063095ea7b3146102915780630abc8e7b146102c15780631694505e146102e557005b3661024457005b005b34801561025257600080fd5b506102446102613660046124ed565b6107d1565b34801561027257600080fd5b5061027b6108e0565b6040516102889190612533565b60405180910390f35b34801561029d57600080fd5b506102b16102ac36600461257b565b610972565b6040519015158152602001610288565b3480156102cd57600080fd5b506102d760075481565b604051908152602001610288565b3480156102f157600080fd5b506103197f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610288565b34801561033d57600080fd5b506004546102d7565b34801561035257600080fd5b506102446103613660046125b5565b61098c565b34801561037257600080fd5b506102b16103813660046125d9565b610a36565b34801561039257600080fd5b506102446103a13660046124ed565b610a5a565b3480156103b257600080fd5b506102d760085481565b3480156103c857600080fd5b5060405160128152602001610288565b3480156103e457600080fd5b506102b16103f336600461257b565b610b5c565b34801561040457600080fd5b506102d7600a5481565b34801561041a57600080fd5b506103197f000000000000000000000000000000000000000000000000000000000000000081565b34801561044e57600080fd5b506102b161045d36600461261a565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561048757600080fd5b50600f546102b19060ff1681565b3480156104a157600080fd5b506102446104b036600461261a565b610b7e565b3480156104c157600080fd5b506102d760105481565b3480156104d757600080fd5b50610244610d0f565b3480156104ec57600080fd5b506102d76104fb36600461261a565b6001600160a01b031660009081526002602052604090205490565b34801561052257600080fd5b50610244610d77565b34801561053757600080fd5b506102d7600c5481565b34801561054d57600080fd5b506102d760095481565b34801561056357600080fd5b50610244610572366004612637565b610d8b565b34801561058357600080fd5b50600d54610319906001600160a01b031681565b3480156105a357600080fd5b506102b16105b236600461261a565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156105dc57600080fd5b506102d7600b5481565b3480156105f257600080fd5b50610244610601366004612650565b610ed2565b34801561061257600080fd5b506000546001600160a01b0316610319565b34801561063057600080fd5b5061027b611064565b34801561064557600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b34801561067957600080fd5b50610244610688366004612650565b611073565b34801561069957600080fd5b506102b16106a836600461257b565b6111d1565b3480156106b957600080fd5b506102b16106c836600461261a565b6001600160a01b031660009081526013602052604090205460ff1690565b3480156106f257600080fd5b506102b161070136600461257b565b61124c565b34801561071257600080fd5b50610244610721366004612637565b61125a565b34801561073257600080fd5b50610319611386565b34801561074757600080fd5b50610244610756366004612650565b61144b565b34801561076757600080fd5b506102d7610776366004612689565b6114eb565b34801561078757600080fd5b506102d7600e5481565b34801561079d57600080fd5b506102446107ac36600461261a565b611516565b3480156107bd57600080fd5b506102446107cc36600461261a565b61158c565b6107d96116b2565b816007541415806107ec57508060095414155b61083d5760405162461bcd60e51b815260206004820152601e60248201527f4275792054617820616c7265616479206f6e207468617420616d6f756e74000060448201526064015b60405180910390fd5b610fa061084a82846126cd565b11156108985760405162461bcd60e51b815260206004820152601f60248201527f427579205461782063616e6e6f74206265206d6f7265207468616e20313025006044820152606401610834565b6007829055600981905560408051838152602081018390527f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec91015b60405180910390a15050565b6060600580546108ef906126e0565b80601f016020809104026020016040519081016040528092919081815260200182805461091b906126e0565b80156109685780601f1061093d57610100808354040283529160200191610968565b820191906000526020600020905b81548152906001019060200180831161094b57829003601f168201915b5050505050905090565b60003361098081858561170c565b60019150505b92915050565b6109946116b2565b600f5481151560ff9091161515036109ee5760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e207374617475730000000000006044820152606401610834565b600f805460ff19168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b600033610a44858285611830565b610a4f8585856118aa565b506001949350505050565b610a626116b2565b81600854141580610a75575080600a5414155b610ac15760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74006044820152606401610834565b610fa0610ace82846126cd565b1115610b1c5760405162461bcd60e51b815260206004820181905260248201527f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203130256044820152606401610834565b6008829055600a81905560408051838152602081018390527fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e91016108d4565b600033610980818585610b6f83836114eb565b610b7991906126cd565b61170c565b610b866116b2565b600d546001600160a01b0390811690821603610bf55760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610834565b6001600160a01b038116610c5f5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610834565b6001600160a01b0381163b15610cc55760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610834565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090600090a250565b3060009081526002602052604090205480610d6c5760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610834565b610d74611c93565b50565b610d7f6116b2565b610d896000611fe0565b565b610d936116b2565b8060105403610df25760405162461bcd60e51b815260206004820152602560248201527f6d617857616c6c65744c696d697420616c7265616479206f6e207468617420616044820152641b5bdd5b9d60da1b6064820152608401610834565b600a8110158015610e0557506127108111155b610e9d5760405162461bcd60e51b815260206004820152606060248201527f6d617857616c6c65744c696d69742063616e6e6f742062652062656c6f77203060448201527f2e3125206f6620746f74616c537570706c792028313029206f72206d6f72652060648201527f7468616e2031303025206f6620746f74616c537570706c792028313030303029608482015260a401610834565b60108190556040518181527f071f030755f9025ecd66a1867810c7348bbb888c00d1ec32bf7c9d6a5a6001e890602001610a2b565b610eda6116b2565b306001600160a01b03831603610f4c5760405162461bcd60e51b815260206004820152603160248201527f5374617465206f66207468697320636f6e747261637420616464726573732063604482015270185b9b9bdd081899481b5bd91a599a5959607a1b6064820152608401610834565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503610f8c5760405162461bcd60e51b81526004016108349061271a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110045760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610834565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f0e89fd97e9b48b2465436024d8fa33a1d7721523f27d529a278d7244d3ef5e5891015b60405180910390a25050565b6060600680546108ef906126e0565b61107b6116b2565b6001600160a01b03821660009081526011602052604090205481151560ff9091161515036111015760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201526c65206f6620277374617475732760981b6064820152608401610834565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111795760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610834565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f1332059101611058565b600033816111df82866114eb565b90508381101561123f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610834565b610a4f828686840361170c565b6000336109808185856118aa565b6112626116b2565b80600e54036112c55760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e207468604482015268185d08185b5bdd5b9d60ba1b6064820152608401610834565b620f42406112d260045490565b6112dc9190612764565b8110156113515760405162461bcd60e51b815260206004820152603e60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e20302e30303030303125206f6620546f74616c20537570706c7900006064820152608401610834565b600e8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e4890602001610a2b565b6000466038036113a957507310ed43c718714eb63d5aa57b78b54704e256024e90565b466061036113ca575073d99d1c33f9fc3444f8101754abc46c52416550d190565b46600114806113d95750466005145b156113f75750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401610834565b6114536116b2565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036114935760405162461bcd60e51b81526004016108349061271a565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101611058565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61151e6116b2565b6001600160a01b0381166115835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610834565b610d7481611fe0565b6115946116b2565b306001600160a01b038216036115ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610834565b6001600160a01b03811661162a5760405133904780156108fc02916000818181858888f19350505050158015611626573d6000803e3d6000fd5b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190612786565b90506116ad6001600160a01b0383163383612030565b505050565b6000546001600160a01b03163314610d895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610834565b6001600160a01b03831661176e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610834565b6001600160a01b0382166117cf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610834565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061183c84846114eb565b905060001981146118a457818110156118975760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610834565b6118a4848484840361170c565b50505050565b6001600160a01b0383166118d05760405162461bcd60e51b81526004016108349061279f565b6001600160a01b0382166118f65760405162461bcd60e51b8152600401610834906127e4565b8060000361190a576116ad83836000612082565b30600090815260026020526040902054600e54811080159081906119385750600d54600160a01b900460ff16155b801561195d57506001600160a01b03851660009081526011602052604090205460ff16155b801561196b5750600f5460ff165b801561198657506000600c54600b5461198491906126cd565b115b1561199357611993611c93565b6001600160a01b03851660009081526012602052604090205460019060ff16806119d557506001600160a01b03851660009081526012602052604090205460ff165b806119e95750600d54600160a01b900460ff165b156119f2575060005b6001600160a01b03851660009081526013602052604090205460ff16611ae4577f0000000000000000000000000000000000000000000000000000000000000000601054611a3f60045490565b611a499190612827565b611a539190612764565b84611a73876001600160a01b031660009081526002602052604090205490565b611a7d91906126cd565b1115611ae45760405162461bcd60e51b815260206004820152603060248201527f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460448201526f1a185b881dd85b1b195d081b1a5b5a5d60821b6064820152608401610834565b8015611c80576001600160a01b038616600090815260116020526040812054819060ff1615611b88577f000000000000000000000000000000000000000000000000000000000000000060075487611b3c9190612827565b611b469190612764565b91507f000000000000000000000000000000000000000000000000000000000000000060095487611b779190612827565b611b819190612764565b9050611c20565b6001600160a01b03871660009081526011602052604090205460ff1615611c20577f000000000000000000000000000000000000000000000000000000000000000060085487611bd89190612827565b611be29190612764565b91507f0000000000000000000000000000000000000000000000000000000000000000600a5487611c139190612827565b611c1d9190612764565b90505b81600b6000828254611c3291906126cd565b9250508190555080600c6000828254611c4b91906126cd565b9091555060009050611c5d82846126cd565b90508015611c7c57611c6f818861283e565b9650611c7c893083612082565b5050505b611c8b868686612082565b505050505050565b600d805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611cdb57611cdb612851565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d9190612867565b81600181518110611d9057611d90612851565b6001600160a01b039092166020928302919091018201523060009081526002909152604081205490506000600c54600b54611dcb91906126cd565b90506000816002600b54611ddf9190612764565b611de99085612827565b611df39190612764565b90506000611e01828561283e565b90506002600b54611e129190612764565b611e1c908461283e565b60405163791ac94760e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611e749084906000908a9030904290600401612884565b600060405180830381600087803b158015611e8e57600080fd5b505af1925050508015611e9f575060015b611ead575050505050611fd1565b600c5447906000908590611ec19084612827565b611ecb9190612764565b90506000611ed9828461283e565b9050600085118015611eeb5750600081115b15611fa05760405163f305d71960e01b815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015611f97575060408051601f3d908101601f19168201909252611f94918101906128f5565b60015b15611fa0575050505b8115611fbe57600d54611fbc906001600160a01b0316836121b3565b505b50506000600b819055600c555050505050505b600d805460ff60a01b19169055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116ad90849061222f565b6001600160a01b0383166120a85760405162461bcd60e51b81526004016108349061279f565b6001600160a01b0382166120ce5760405162461bcd60e51b8152600401610834906127e4565b6001600160a01b038316600090815260026020526040902054818110156121465760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610834565b6001600160a01b0380851660008181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121a69086815260200190565b60405180910390a36118a4565b60006121bd612304565b814710156121cd57506000612226565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461221a576040519150601f19603f3d011682016040523d82523d6000602084013e61221f565b606091505b5090925050505b61098660018055565b6000612284826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661235d9092919063ffffffff16565b90508051600014806122a55750808060200190518101906122a59190612923565b6116ad5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610834565b6002600154036123565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610834565b6002600155565b606061236c8484600085612374565b949350505050565b6060824710156123d55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610834565b600080866001600160a01b031685876040516123f19190612940565b60006040518083038185875af1925050503d806000811461242e576040519150601f19603f3d011682016040523d82523d6000602084013e612433565b606091505b50915091506124448783838761244f565b979650505050505050565b606083156124be5782516000036124b7576001600160a01b0385163b6124b75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610834565b508161236c565b61236c83838151156124d35781518083602001fd5b8060405162461bcd60e51b81526004016108349190612533565b6000806040838503121561250057600080fd5b50508035926020909101359150565b60005b8381101561252a578181015183820152602001612512565b50506000910152565b602081526000825180602084015261255281604085016020870161250f565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d7457600080fd5b6000806040838503121561258e57600080fd5b823561259981612566565b946020939093013593505050565b8015158114610d7457600080fd5b6000602082840312156125c757600080fd5b81356125d2816125a7565b9392505050565b6000806000606084860312156125ee57600080fd5b83356125f981612566565b9250602084013561260981612566565b929592945050506040919091013590565b60006020828403121561262c57600080fd5b81356125d281612566565b60006020828403121561264957600080fd5b5035919050565b6000806040838503121561266357600080fd5b823561266e81612566565b9150602083013561267e816125a7565b809150509250929050565b6000806040838503121561269c57600080fd5b82356126a781612566565b9150602083013561267e81612566565b634e487b7160e01b600052601160045260246000fd5b80820180821115610986576109866126b7565b600181811c908216806126f457607f821691505b60208210810361271457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60008261278157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561279857600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610986576109866126b7565b81810381811115610986576109866126b7565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561287957600080fd5b81516125d281612566565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128d45784516001600160a01b0316835293830193918301916001016128af565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561290a57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561293557600080fd5b81516125d2816125a7565b6000825161295281846020870161250f565b919091019291505056fea2646970667358221220d437563052451a306c5ad3c80966c03ac799d146a6294c3868934e4c051d2de364736f6c63430008130033
Deployed Bytecode
0x60806040526004361061023d5760003560e01c806371afc7131161012d5780639a7a23d6116100b0578063d54f7d5e11610077578063d54f7d5e14610726578063d63cad221461073b578063dd62ed3e1461075b578063e2f456051461077b578063f2fde38b14610791578063f9d0831a146107b157005b80639a7a23d61461066d578063a457c2d71461068d578063a8a69b9d146106ad578063a9059cbb146106e6578063afa4f3b21461070657005b80638123bdc8116100f45780638123bdc8146105d05780638a96082e146105e65780638da5cb5b1461060657806395d89b411461062457806396ce07951461063957005b806371afc7131461052b578063721e623314610541578063728d41c91461055757806375f0a874146105775780637949a4031461059757005b8063313ce567116101c057806352dfc8d01161018757806352dfc8d01461047b5780635d098b381461049557806366a88d96146104b557806366eb3785146104cb57806370a08231146104e0578063715018a61461051657005b8063313ce567146103bc57806339509351146103d857806342d0b0bc146103f857806349bd5a5e1461040e5780634fbee1931461044257005b806318160ddd1161020457806318160ddd146103315780631f88a23e1461034657806323b872dd14610366578063247b912d14610386578063248ba7ed146103a657005b806305a1f36d1461024657806306fdde0314610266578063095ea7b3146102915780630abc8e7b146102c15780631694505e146102e557005b3661024457005b005b34801561025257600080fd5b506102446102613660046124ed565b6107d1565b34801561027257600080fd5b5061027b6108e0565b6040516102889190612533565b60405180910390f35b34801561029d57600080fd5b506102b16102ac36600461257b565b610972565b6040519015158152602001610288565b3480156102cd57600080fd5b506102d760075481565b604051908152602001610288565b3480156102f157600080fd5b506103197f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610288565b34801561033d57600080fd5b506004546102d7565b34801561035257600080fd5b506102446103613660046125b5565b61098c565b34801561037257600080fd5b506102b16103813660046125d9565b610a36565b34801561039257600080fd5b506102446103a13660046124ed565b610a5a565b3480156103b257600080fd5b506102d760085481565b3480156103c857600080fd5b5060405160128152602001610288565b3480156103e457600080fd5b506102b16103f336600461257b565b610b5c565b34801561040457600080fd5b506102d7600a5481565b34801561041a57600080fd5b506103197f00000000000000000000000024ea87bd0f04633589e57020aa2c871c39edd25081565b34801561044e57600080fd5b506102b161045d36600461261a565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561048757600080fd5b50600f546102b19060ff1681565b3480156104a157600080fd5b506102446104b036600461261a565b610b7e565b3480156104c157600080fd5b506102d760105481565b3480156104d757600080fd5b50610244610d0f565b3480156104ec57600080fd5b506102d76104fb36600461261a565b6001600160a01b031660009081526002602052604090205490565b34801561052257600080fd5b50610244610d77565b34801561053757600080fd5b506102d7600c5481565b34801561054d57600080fd5b506102d760095481565b34801561056357600080fd5b50610244610572366004612637565b610d8b565b34801561058357600080fd5b50600d54610319906001600160a01b031681565b3480156105a357600080fd5b506102b16105b236600461261a565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156105dc57600080fd5b506102d7600b5481565b3480156105f257600080fd5b50610244610601366004612650565b610ed2565b34801561061257600080fd5b506000546001600160a01b0316610319565b34801561063057600080fd5b5061027b611064565b34801561064557600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000271081565b34801561067957600080fd5b50610244610688366004612650565b611073565b34801561069957600080fd5b506102b16106a836600461257b565b6111d1565b3480156106b957600080fd5b506102b16106c836600461261a565b6001600160a01b031660009081526013602052604090205460ff1690565b3480156106f257600080fd5b506102b161070136600461257b565b61124c565b34801561071257600080fd5b50610244610721366004612637565b61125a565b34801561073257600080fd5b50610319611386565b34801561074757600080fd5b50610244610756366004612650565b61144b565b34801561076757600080fd5b506102d7610776366004612689565b6114eb565b34801561078757600080fd5b506102d7600e5481565b34801561079d57600080fd5b506102446107ac36600461261a565b611516565b3480156107bd57600080fd5b506102446107cc36600461261a565b61158c565b6107d96116b2565b816007541415806107ec57508060095414155b61083d5760405162461bcd60e51b815260206004820152601e60248201527f4275792054617820616c7265616479206f6e207468617420616d6f756e74000060448201526064015b60405180910390fd5b610fa061084a82846126cd565b11156108985760405162461bcd60e51b815260206004820152601f60248201527f427579205461782063616e6e6f74206265206d6f7265207468616e20313025006044820152606401610834565b6007829055600981905560408051838152602081018390527f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec91015b60405180910390a15050565b6060600580546108ef906126e0565b80601f016020809104026020016040519081016040528092919081815260200182805461091b906126e0565b80156109685780601f1061093d57610100808354040283529160200191610968565b820191906000526020600020905b81548152906001019060200180831161094b57829003601f168201915b5050505050905090565b60003361098081858561170c565b60019150505b92915050565b6109946116b2565b600f5481151560ff9091161515036109ee5760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e207374617475730000000000006044820152606401610834565b600f805460ff19168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b600033610a44858285611830565b610a4f8585856118aa565b506001949350505050565b610a626116b2565b81600854141580610a75575080600a5414155b610ac15760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74006044820152606401610834565b610fa0610ace82846126cd565b1115610b1c5760405162461bcd60e51b815260206004820181905260248201527f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203130256044820152606401610834565b6008829055600a81905560408051838152602081018390527fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e91016108d4565b600033610980818585610b6f83836114eb565b610b7991906126cd565b61170c565b610b866116b2565b600d546001600160a01b0390811690821603610bf55760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610834565b6001600160a01b038116610c5f5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610834565b6001600160a01b0381163b15610cc55760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610834565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090600090a250565b3060009081526002602052604090205480610d6c5760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610834565b610d74611c93565b50565b610d7f6116b2565b610d896000611fe0565b565b610d936116b2565b8060105403610df25760405162461bcd60e51b815260206004820152602560248201527f6d617857616c6c65744c696d697420616c7265616479206f6e207468617420616044820152641b5bdd5b9d60da1b6064820152608401610834565b600a8110158015610e0557506127108111155b610e9d5760405162461bcd60e51b815260206004820152606060248201527f6d617857616c6c65744c696d69742063616e6e6f742062652062656c6f77203060448201527f2e3125206f6620746f74616c537570706c792028313029206f72206d6f72652060648201527f7468616e2031303025206f6620746f74616c537570706c792028313030303029608482015260a401610834565b60108190556040518181527f071f030755f9025ecd66a1867810c7348bbb888c00d1ec32bf7c9d6a5a6001e890602001610a2b565b610eda6116b2565b306001600160a01b03831603610f4c5760405162461bcd60e51b815260206004820152603160248201527f5374617465206f66207468697320636f6e747261637420616464726573732063604482015270185b9b9bdd081899481b5bd91a599a5959607a1b6064820152608401610834565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503610f8c5760405162461bcd60e51b81526004016108349061271a565b7f00000000000000000000000024ea87bd0f04633589e57020aa2c871c39edd2506001600160a01b0316826001600160a01b0316036110045760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610834565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f0e89fd97e9b48b2465436024d8fa33a1d7721523f27d529a278d7244d3ef5e5891015b60405180910390a25050565b6060600680546108ef906126e0565b61107b6116b2565b6001600160a01b03821660009081526011602052604090205481151560ff9091161515036111015760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201526c65206f6620277374617475732760981b6064820152608401610834565b7f00000000000000000000000024ea87bd0f04633589e57020aa2c871c39edd2506001600160a01b0316826001600160a01b0316036111795760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610834565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f1332059101611058565b600033816111df82866114eb565b90508381101561123f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610834565b610a4f828686840361170c565b6000336109808185856118aa565b6112626116b2565b80600e54036112c55760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e207468604482015268185d08185b5bdd5b9d60ba1b6064820152608401610834565b620f42406112d260045490565b6112dc9190612764565b8110156113515760405162461bcd60e51b815260206004820152603e60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e20302e30303030303125206f6620546f74616c20537570706c7900006064820152608401610834565b600e8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e4890602001610a2b565b6000466038036113a957507310ed43c718714eb63d5aa57b78b54704e256024e90565b466061036113ca575073d99d1c33f9fc3444f8101754abc46c52416550d190565b46600114806113d95750466005145b156113f75750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401610834565b6114536116b2565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036114935760405162461bcd60e51b81526004016108349061271a565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101611058565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61151e6116b2565b6001600160a01b0381166115835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610834565b610d7481611fe0565b6115946116b2565b306001600160a01b038216036115ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610834565b6001600160a01b03811661162a5760405133904780156108fc02916000818181858888f19350505050158015611626573d6000803e3d6000fd5b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190612786565b90506116ad6001600160a01b0383163383612030565b505050565b6000546001600160a01b03163314610d895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610834565b6001600160a01b03831661176e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610834565b6001600160a01b0382166117cf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610834565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061183c84846114eb565b905060001981146118a457818110156118975760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610834565b6118a4848484840361170c565b50505050565b6001600160a01b0383166118d05760405162461bcd60e51b81526004016108349061279f565b6001600160a01b0382166118f65760405162461bcd60e51b8152600401610834906127e4565b8060000361190a576116ad83836000612082565b30600090815260026020526040902054600e54811080159081906119385750600d54600160a01b900460ff16155b801561195d57506001600160a01b03851660009081526011602052604090205460ff16155b801561196b5750600f5460ff165b801561198657506000600c54600b5461198491906126cd565b115b1561199357611993611c93565b6001600160a01b03851660009081526012602052604090205460019060ff16806119d557506001600160a01b03851660009081526012602052604090205460ff165b806119e95750600d54600160a01b900460ff165b156119f2575060005b6001600160a01b03851660009081526013602052604090205460ff16611ae4577f0000000000000000000000000000000000000000000000000000000000002710601054611a3f60045490565b611a499190612827565b611a539190612764565b84611a73876001600160a01b031660009081526002602052604090205490565b611a7d91906126cd565b1115611ae45760405162461bcd60e51b815260206004820152603060248201527f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460448201526f1a185b881dd85b1b195d081b1a5b5a5d60821b6064820152608401610834565b8015611c80576001600160a01b038616600090815260116020526040812054819060ff1615611b88577f000000000000000000000000000000000000000000000000000000000000271060075487611b3c9190612827565b611b469190612764565b91507f000000000000000000000000000000000000000000000000000000000000271060095487611b779190612827565b611b819190612764565b9050611c20565b6001600160a01b03871660009081526011602052604090205460ff1615611c20577f000000000000000000000000000000000000000000000000000000000000271060085487611bd89190612827565b611be29190612764565b91507f0000000000000000000000000000000000000000000000000000000000002710600a5487611c139190612827565b611c1d9190612764565b90505b81600b6000828254611c3291906126cd565b9250508190555080600c6000828254611c4b91906126cd565b9091555060009050611c5d82846126cd565b90508015611c7c57611c6f818861283e565b9650611c7c893083612082565b5050505b611c8b868686612082565b505050505050565b600d805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611cdb57611cdb612851565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d9190612867565b81600181518110611d9057611d90612851565b6001600160a01b039092166020928302919091018201523060009081526002909152604081205490506000600c54600b54611dcb91906126cd565b90506000816002600b54611ddf9190612764565b611de99085612827565b611df39190612764565b90506000611e01828561283e565b90506002600b54611e129190612764565b611e1c908461283e565b60405163791ac94760e01b81529093506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611e749084906000908a9030904290600401612884565b600060405180830381600087803b158015611e8e57600080fd5b505af1925050508015611e9f575060015b611ead575050505050611fd1565b600c5447906000908590611ec19084612827565b611ecb9190612764565b90506000611ed9828461283e565b9050600085118015611eeb5750600081115b15611fa05760405163f305d71960e01b815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015611f97575060408051601f3d908101601f19168201909252611f94918101906128f5565b60015b15611fa0575050505b8115611fbe57600d54611fbc906001600160a01b0316836121b3565b505b50506000600b819055600c555050505050505b600d805460ff60a01b19169055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116ad90849061222f565b6001600160a01b0383166120a85760405162461bcd60e51b81526004016108349061279f565b6001600160a01b0382166120ce5760405162461bcd60e51b8152600401610834906127e4565b6001600160a01b038316600090815260026020526040902054818110156121465760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610834565b6001600160a01b0380851660008181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121a69086815260200190565b60405180910390a36118a4565b60006121bd612304565b814710156121cd57506000612226565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461221a576040519150601f19603f3d011682016040523d82523d6000602084013e61221f565b606091505b5090925050505b61098660018055565b6000612284826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661235d9092919063ffffffff16565b90508051600014806122a55750808060200190518101906122a59190612923565b6116ad5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610834565b6002600154036123565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610834565b6002600155565b606061236c8484600085612374565b949350505050565b6060824710156123d55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610834565b600080866001600160a01b031685876040516123f19190612940565b60006040518083038185875af1925050503d806000811461242e576040519150601f19603f3d011682016040523d82523d6000602084013e612433565b606091505b50915091506124448783838761244f565b979650505050505050565b606083156124be5782516000036124b7576001600160a01b0385163b6124b75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610834565b508161236c565b61236c83838151156124d35781518083602001fd5b8060405162461bcd60e51b81526004016108349190612533565b6000806040838503121561250057600080fd5b50508035926020909101359150565b60005b8381101561252a578181015183820152602001612512565b50506000910152565b602081526000825180602084015261255281604085016020870161250f565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d7457600080fd5b6000806040838503121561258e57600080fd5b823561259981612566565b946020939093013593505050565b8015158114610d7457600080fd5b6000602082840312156125c757600080fd5b81356125d2816125a7565b9392505050565b6000806000606084860312156125ee57600080fd5b83356125f981612566565b9250602084013561260981612566565b929592945050506040919091013590565b60006020828403121561262c57600080fd5b81356125d281612566565b60006020828403121561264957600080fd5b5035919050565b6000806040838503121561266357600080fd5b823561266e81612566565b9150602083013561267e816125a7565b809150509250929050565b6000806040838503121561269c57600080fd5b82356126a781612566565b9150602083013561267e81612566565b634e487b7160e01b600052601160045260246000fd5b80820180821115610986576109866126b7565b600181811c908216806126f457607f821691505b60208210810361271457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60008261278157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561279857600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610986576109866126b7565b81810381811115610986576109866126b7565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561287957600080fd5b81516125d281612566565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128d45784516001600160a01b0316835293830193918301916001016128af565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561290a57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561293557600080fd5b81516125d2816125a7565b6000825161295281846020870161250f565b919091019291505056fea2646970667358221220d437563052451a306c5ad3c80966c03ac799d146a6294c3868934e4c051d2de364736f6c63430008130033
Deployed Bytecode Sourcemap
24068:13456:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28295:599;;;;;;;;;;-1:-1:-1;28295:599:0;;;;;:::i;:::-;;:::i;17696:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18694:226;;;;;;;;;;-1:-1:-1;18694:226:0;;;;;:::i;:::-;;:::i;:::-;;;1544:14:1;;1537:22;1519:41;;1507:2;1492:18;18694:226:0;1379:187:1;24164:30:0;;;;;;;;;;;;;;;;;;;1717:25:1;;;1705:2;1690:18;24164:30:0;1571:177:1;24594:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1943:32:1;;;1925:51;;1913:2;1898:18;24594:51:0;1753:229:1;18017:108:0;;;;;;;;;;-1:-1:-1;18105:12:0;;18017:108;;30575:224;;;;;;;;;;-1:-1:-1;30575:224:0;;;;;:::i;:::-;;:::i;18928:295::-;;;;;;;;;;-1:-1:-1;18928:295:0;;;;;:::i;:::-;;:::i;28902:617::-;;;;;;;;;;-1:-1:-1;28902:617:0;;;;;:::i;:::-;;:::i;24201:31::-;;;;;;;;;;;;;;;;17916:93;;;;;;;;;;-1:-1:-1;17916:93:0;;17999:2;2959:36:1;;2947:2;2932:18;17916:93:0;2817:184:1;19231:263:0;;;;;;;;;;-1:-1:-1;19231:263:0;;;;;:::i;:::-;;:::i;24278:31::-;;;;;;;;;;;;;;;;24652:38;;;;;;;;;;;;;;;32277:128;;;;;;;;;;-1:-1:-1;32277:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;32369:28:0;32345:4;32369:28;;;:19;:28;;;;;;;;;32277:128;24556:29;;;;;;;;;;-1:-1:-1;24556:29:0;;;;;;;;29527:580;;;;;;;;;;-1:-1:-1;29527:580:0;;;;;:::i;:::-;;:::i;24699:29::-;;;;;;;;;;;;;;;;37316:205;;;;;;;;;;;;;:::i;18133:143::-;;;;;;;;;;-1:-1:-1;18133:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18250:18:0;18223:7;18250:18;;;:9;:18;;;;;;;18133:143;23513:103;;;;;;;;;;;;;:::i;24405:35::-;;;;;;;;;;;;;;;;24241:30;;;;;;;;;;;;;;;;30807:463;;;;;;;;;;-1:-1:-1;30807:463:0;;;;;:::i;:::-;;:::i;24449:30::-;;;;;;;;;;-1:-1:-1;24449:30:0;;;;-1:-1:-1;;;;;24449:30:0;;;31744:154;;;;;;;;;;-1:-1:-1;31744:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;31857:33:0;31833:4;31857:33;;;:27;:33;;;;;;;;;31744:154;24363:35;;;;;;;;;;;;;;;;32413:616;;;;;;;;;;-1:-1:-1;32413:616:0;;;;;:::i;:::-;;:::i;23278:87::-;;;;;;;;;;-1:-1:-1;23324:7:0;23351:6;-1:-1:-1;;;;;23351:6:0;23278:87;;17804:104;;;;;;;;;;;;;:::i;24318:36::-;;;;;;;;;;;;;;;31280:456;;;;;;;;;;-1:-1:-1;31280:456:0;;;;;:::i;:::-;;:::i;19502:498::-;;;;;;;;;;-1:-1:-1;19502:498:0;;;;;:::i;:::-;;:::i;33037:164::-;;;;;;;;;;-1:-1:-1;33037:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;33155:38:0;33131:4;33155:38;;;:29;:38;;;;;;;;;33037:164;18284:218;;;;;;;;;;-1:-1:-1;18284:218:0;;;;;:::i;:::-;;:::i;30115:452::-;;;;;;;;;;-1:-1:-1;30115:452:0;;;;;:::i;:::-;;:::i;27342:490::-;;;;;;;;;;;;;:::i;31906:363::-;;;;;;;;;;-1:-1:-1;31906:363:0;;;;;:::i;:::-;;:::i;18510:176::-;;;;;;;;;;-1:-1:-1;18510:176:0;;;;;:::i;:::-;;:::i;24516:33::-;;;;;;;;;;;;;;;;23624:238;;;;;;;;;;-1:-1:-1;23624:238:0;;;;;:::i;:::-;;:::i;27840:447::-;;;;;;;;;;-1:-1:-1;27840:447:0;;;;;:::i;:::-;;:::i;28295:599::-;23237:13;:11;:13::i;:::-;28462:16:::1;28443:15;;:35;;:91;;;;28518:16;28499:15;;:35;;28443:91;28421:171;;;::::0;-1:-1:-1;;;28421:171:0;;4633:2:1;28421:171:0::1;::::0;::::1;4615:21:1::0;4672:2;4652:18;;;4645:30;4711:32;4691:18;;;4684:60;4761:18;;28421:171:0::1;;;;;;;;;28664:5;28625:35;28644:16:::0;28625;:35:::1;:::i;:::-;:44;;28603:125;;;::::0;-1:-1:-1;;;28603:125:0;;5254:2:1;28603:125:0::1;::::0;::::1;5236:21:1::0;5293:2;5273:18;;;5266:30;5332:33;5312:18;;;5305:61;5383:18;;28603:125:0::1;5052:355:1::0;28603:125:0::1;28741:15;:34:::0;;;28786:15:::1;:34:::0;;;28838:48:::1;::::0;;5586:25:1;;;5642:2;5627:18;;5620:34;;;28838:48:0::1;::::0;5559:18:1;28838:48:0::1;;;;;;;;28295:599:::0;;:::o;17696:100::-;17750:13;17783:5;17776:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17696:100;:::o;18694:226::-;18802:4;17156:10;18858:32;17156:10;18874:7;18883:6;18858:8;:32::i;:::-;18908:4;18901:11;;;18694:226;;;;;:::o;30575:224::-;23237:13;:11;:13::i;:::-;30650:17:::1;::::0;:27;::::1;;:17;::::0;;::::1;:27;;::::0;30642:66:::1;;;::::0;-1:-1:-1;;;30642:66:0;;6252:2:1;30642:66:0::1;::::0;::::1;6234:21:1::0;6291:2;6271:18;;;6264:30;6330:28;6310:18;;;6303:56;6376:18;;30642:66:0::1;6050:350:1::0;30642:66:0::1;30721:17;:26:::0;;-1:-1:-1;;30721:26:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30763:28:::1;::::0;1519:41:1;;;30763:28:0::1;::::0;1507:2:1;1492:18;30763:28:0::1;;;;;;;;30575:224:::0;:::o;18928:295::-;19059:4;17156:10;19117:38;19133:4;17156:10;19148:6;19117:15;:38::i;:::-;19166:27;19176:4;19182:2;19186:6;19166:9;:27::i;:::-;-1:-1:-1;19211:4:0;;18928:295;-1:-1:-1;;;;18928:295:0:o;28902:617::-;23237:13;:11;:13::i;:::-;29073:17:::1;29053:16;;:37;;:95;;;;29131:17;29111:16;;:37;;29053:95;29031:176;;;::::0;-1:-1:-1;;;29031:176:0;;6607:2:1;29031:176:0::1;::::0;::::1;6589:21:1::0;6646:2;6626:18;;;6619:30;6685:33;6665:18;;;6658:61;6736:18;;29031:176:0::1;6405:355:1::0;29031:176:0::1;29281:5;29240:37;29260:17:::0;29240;:37:::1;:::i;:::-;:46;;29218:128;;;::::0;-1:-1:-1;;;29218:128:0;;6967:2:1;29218:128:0::1;::::0;::::1;6949:21:1::0;;;6986:18;;;6979:30;7045:34;7025:18;;;7018:62;7097:18;;29218:128:0::1;6765:356:1::0;29218:128:0::1;29359:16;:36:::0;;;29406:16:::1;:36:::0;;;29460:51:::1;::::0;;5586:25:1;;;5642:2;5627:18;;5620:34;;;29460:51:0::1;::::0;5559:18:1;29460:51:0::1;5412:248:1::0;19231:263:0;19344:4;17156:10;19400:64;17156:10;19416:7;19453:10;19425:25;17156:10;19416:7;19425:9;:25::i;:::-;:38;;;;:::i;:::-;19400:8;:64::i;29527:580::-;23237:13;:11;:13::i;:::-;29653:15:::1;::::0;-1:-1:-1;;;;;29653:15:0;;::::1;29633:35:::0;;::::1;::::0;29611:125:::1;;;::::0;-1:-1:-1;;;29611:125:0;;7328:2:1;29611:125:0::1;::::0;::::1;7310:21:1::0;7367:2;7347:18;;;7340:30;7406:34;7386:18;;;7379:62;-1:-1:-1;;;7457:18:1;;;7450:38;7505:19;;29611:125:0::1;7126:404:1::0;29611:125:0::1;-1:-1:-1::0;;;;;29769:30:0;::::1;29747:123;;;::::0;-1:-1:-1;;;29747:123:0;;7737:2:1;29747:123:0::1;::::0;::::1;7719:21:1::0;7776:2;7756:18;;;7749:30;7815:34;7795:18;;;7788:62;-1:-1:-1;;;7866:18:1;;;7859:41;7917:19;;29747:123:0::1;7535:407:1::0;29747:123:0::1;-1:-1:-1::0;;;;;27303:19:0;;;:23;29881:116:::1;;;::::0;-1:-1:-1;;;29881:116:0;;8149:2:1;29881:116:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;8227:34;8207:18;;;8200:62;-1:-1:-1;;;8278:18:1;;;8271:35;8323:19;;29881:116:0::1;7947:401:1::0;29881:116:0::1;30010:15;:34:::0;;-1:-1:-1;;;;;;30010:34:0::1;-1:-1:-1::0;;;;;30010:34:0;::::1;::::0;;::::1;::::0;;;30060:39:::1;::::0;::::1;::::0;-1:-1:-1;;30060:39:0::1;29527:580:::0;:::o;37316:205::-;37411:4;37362:28;18250:18;;;:9;:18;;;;;;37438:24;37430:60;;;;-1:-1:-1;;;37430:60:0;;8555:2:1;37430:60:0;;;8537:21:1;8594:2;8574:18;;;8567:30;8633:25;8613:18;;;8606:53;8676:18;;37430:60:0;8353:347:1;37430:60:0;37503:10;:8;:10::i;:::-;37351:170;37316:205::o;23513:103::-;23237:13;:11;:13::i;:::-;23578:30:::1;23605:1;23578:18;:30::i;:::-;23513:103::o:0;30807:463::-;23237:13;:11;:13::i;:::-;30920:6:::1;30902:14;;:24:::0;30880:111:::1;;;::::0;-1:-1:-1;;;30880:111:0;;8907:2:1;30880:111:0::1;::::0;::::1;8889:21:1::0;8946:2;8926:18;;;8919:30;8985:34;8965:18;;;8958:62;-1:-1:-1;;;9036:18:1;;;9029:35;9081:19;;30880:111:0::1;8705:401:1::0;30880:111:0::1;31034:2;31024:6;:12;;:32;;;;;31050:6;31040;:16;;31024:32;31002:178;;;::::0;-1:-1:-1;;;31002:178:0;;9313:2:1;31002:178:0::1;::::0;::::1;9295:21:1::0;9352:2;9332:18;;;9325:30;9391:34;9371:18;;;9364:62;9462:34;9442:18;;;9435:62;9534:34;9513:19;;;9506:63;9586:19;;31002:178:0::1;9111:500:1::0;31002:178:0::1;31193:14;:23:::0;;;31234:28:::1;::::0;1717:25:1;;;31234:28:0::1;::::0;1705:2:1;1690:18;31234:28:0::1;1571:177:1::0;32413:616:0;23237:13;:11;:13::i;:::-;32579:4:::1;-1:-1:-1::0;;;;;32560:24:0;::::1;::::0;32538:123:::1;;;::::0;-1:-1:-1;;;32538:123:0;;9818:2:1;32538:123:0::1;::::0;::::1;9800:21:1::0;9857:2;9837:18;;;9830:30;9896:34;9876:18;;;9869:62;-1:-1:-1;;;9947:18:1;;;9940:47;10004:19;;32538:123:0::1;9616:413:1::0;32538:123:0::1;-1:-1:-1::0;;;;;32694:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;32672:142:::1;;;;-1:-1:-1::0;;;32672:142:0::1;;;;;;;:::i;:::-;32852:13;-1:-1:-1::0;;;;;32833:33:0::1;:7;-1:-1:-1::0;;;;;32833:33:0::1;::::0;32825:66:::1;;;::::0;-1:-1:-1;;;32825:66:0;;10647:2:1;32825:66:0::1;::::0;::::1;10629:21:1::0;10686:2;10666:18;;;10659:30;-1:-1:-1;;;10705:18:1;;;10698:50;10765:18;;32825:66:0::1;10445:344:1::0;32825:66:0::1;-1:-1:-1::0;;;;;32904:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;32904:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32971:50;;1519:41:1;;;32971:50:0::1;::::0;1492:18:1;32971:50:0::1;;;;;;;;32413:616:::0;;:::o;17804:104::-;17860:13;17893:7;17886:14;;;;;:::i;31280:456::-;23237:13;:11;:13::i;:::-;-1:-1:-1;;;;;31421:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;:43;::::1;;:33;::::0;;::::1;:43;;::::0;31399:138:::1;;;::::0;-1:-1:-1;;;31399:138:0;;10996:2:1;31399:138:0::1;::::0;::::1;10978:21:1::0;11035:2;11015:18;;;11008:30;11074:34;11054:18;;;11047:62;-1:-1:-1;;;11125:18:1;;;11118:43;11178:19;;31399:138:0::1;10794:409:1::0;31399:138:0::1;31572:13;-1:-1:-1::0;;;;;31556:30:0::1;:4;-1:-1:-1::0;;;;;31556:30:0::1;::::0;31548:63:::1;;;::::0;-1:-1:-1;;;31548:63:0;;10647:2:1;31548:63:0::1;::::0;::::1;10629:21:1::0;10686:2;10666:18;;;10659:30;-1:-1:-1;;;10705:18:1;;;10698:50;10765:18;;31548:63:0::1;10445:344:1::0;31548:63:0::1;-1:-1:-1::0;;;;;31624:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;;;;:42;;-1:-1:-1;;31624:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31684:44;;1519:41:1;;;31684:44:0::1;::::0;1492:18:1;31684:44:0::1;1379:187:1::0;19502:498:0;19620:4;17156:10;19620:4;19703:25;17156:10;19720:7;19703:9;:25::i;:::-;19676:52;;19781:15;19761:16;:35;;19739:122;;;;-1:-1:-1;;;19739:122:0;;11410:2:1;19739:122:0;;;11392:21:1;11449:2;11429:18;;;11422:30;11488:34;11468:18;;;11461:62;-1:-1:-1;;;11539:18:1;;;11532:35;11584:19;;19739:122:0;11208:401:1;19739:122:0;19897:60;19906:5;19913:7;19941:15;19922:16;:34;19897:8;:60::i;18284:218::-;18388:4;17156:10;18444:28;17156:10;18461:2;18465:6;18444:9;:28::i;30115:452::-;23237:13;:11;:13::i;:::-;30236:6:::1;30214:18;;:28:::0;30192:119:::1;;;::::0;-1:-1:-1;;;30192:119:0;;11816:2:1;30192:119:0::1;::::0;::::1;11798:21:1::0;11855:2;11835:18;;;11828:30;11894:34;11874:18;;;11867:62;-1:-1:-1;;;11945:18:1;;;11938:39;11994:19;;30192:119:0::1;11614:405:1::0;30192:119:0::1;30370:9;30354:13;18105:12:::0;;;18017:108;30354:13:::1;:25;;;;:::i;:::-;30344:6;:35;;30322:147;;;::::0;-1:-1:-1;;;30322:147:0;;12448:2:1;30322:147:0::1;::::0;::::1;12430:21:1::0;12487:2;12467:18;;;12460:30;12526:34;12506:18;;;12499:62;12597:32;12577:18;;;12570:60;12647:19;;30322:147:0::1;12246:426:1::0;30322:147:0::1;30482:18;:27:::0;;;30527:32:::1;::::0;1717:25:1;;;30527:32:0::1;::::0;1705:2:1;1690:18;30527:32:0::1;1571:177:1::0;27342:490:0;27391:7;27415:13;27432:2;27415:19;27411:414;;-1:-1:-1;27458:42:0;;27342:490::o;27411:414::-;27522:13;27539:2;27522:19;27518:307;;-1:-1:-1;27565:42:0;;27342:490::o;27518:307::-;27629:13;27646:1;27629:18;:40;;;;27651:13;27668:1;27651:18;27629:40;27625:200;;;-1:-1:-1;27693:42:0;;27342:490::o;27625:200::-;27768:45;;-1:-1:-1;;;27768:45:0;;12879:2:1;27768:45:0;;;12861:21:1;12918:2;12898:18;;;12891:30;12957:34;12937:18;;;12930:62;-1:-1:-1;;;13008:18:1;;;13001:33;13051:19;;27768:45:0;12677:399:1;31906:363:0;23237:13;:11;:13::i;:::-;-1:-1:-1;;;;;32043:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;32021:132:::1;;;;-1:-1:-1::0;;;32021:132:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32164:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;32164:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32221:40;;1519:41:1;;;32221:40:0::1;::::0;1492:18:1;32221:40:0::1;1379:187:1::0;18510:176:0;-1:-1:-1;;;;;18651:18:0;;;18624:7;18651:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18510:176::o;23624:238::-;23237:13;:11;:13::i;:::-;-1:-1:-1;;;;;23727:22:0;::::1;23705:110;;;::::0;-1:-1:-1;;;23705:110:0;;13283:2:1;23705:110:0::1;::::0;::::1;13265:21:1::0;13322:2;13302:18;;;13295:30;13361:34;13341:18;;;13334:62;-1:-1:-1;;;13412:18:1;;;13405:36;13458:19;;23705:110:0::1;13081:402:1::0;23705:110:0::1;23826:28;23845:8;23826:18;:28::i;27840:447::-:0;23237:13;:11;:13::i;:::-;27936:4:::1;-1:-1:-1::0;;;;;27919:22:0;::::1;::::0;27911:67:::1;;;::::0;-1:-1:-1;;;27911:67:0;;13690:2:1;27911:67:0::1;::::0;::::1;13672:21:1::0;;;13709:18;;;13702:30;13768:34;13748:18;;;13741:62;13820:18;;27911:67:0::1;13488:356:1::0;27911:67:0::1;-1:-1:-1::0;;;;;27995:21:0;::::1;27991:126;;28033:51;::::0;28041:10:::1;::::0;28062:21:::1;28033:51:::0;::::1;;;::::0;::::1;::::0;;;28062:21;28041:10;28033:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37351:170:::0;37316:205::o;27991:126::-:1;28189:35;::::0;-1:-1:-1;;;28189:35:0;;28218:4:::1;28189:35;::::0;::::1;1925:51:1::0;28154:5:0;;28127:17:::1;::::0;-1:-1:-1;;;;;28189:20:0;::::1;::::0;::::1;::::0;1898:18:1;;28189:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28171:53:::0;-1:-1:-1;28235:44:0::1;-1:-1:-1::0;;;;;28235:23:0;::::1;28259:10;28171:53:::0;28235:23:::1;:44::i;:::-;27900:387;;27840:447:::0;:::o;23373:132::-;23324:7;23351:6;-1:-1:-1;;;;;23351:6:0;17156:10;23437:23;23429:68;;;;-1:-1:-1;;;23429:68:0;;14240:2:1;23429:68:0;;;14222:21:1;;;14259:18;;;14252:30;14318:34;14298:18;;;14291:62;14370:18;;23429:68:0;14038:356:1;21778:380:0;-1:-1:-1;;;;;21914:19:0;;21906:68;;;;-1:-1:-1;;;21906:68:0;;14601:2:1;21906:68:0;;;14583:21:1;14640:2;14620:18;;;14613:30;14679:34;14659:18;;;14652:62;-1:-1:-1;;;14730:18:1;;;14723:34;14774:19;;21906:68:0;14399:400:1;21906:68:0;-1:-1:-1;;;;;21993:21:0;;21985:68;;;;-1:-1:-1;;;21985:68:0;;15006:2:1;21985:68:0;;;14988:21:1;15045:2;15025:18;;;15018:30;15084:34;15064:18;;;15057:62;-1:-1:-1;;;15135:18:1;;;15128:32;15177:19;;21985:68:0;14804:398:1;21985:68:0;-1:-1:-1;;;;;22066:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22118:32;;1717:25:1;;;22118:32:0;;1690:18:1;22118:32:0;;;;;;;21778:380;;;:::o;22166:502::-;22301:24;22328:25;22338:5;22345:7;22328:9;:25::i;:::-;22301:52;;-1:-1:-1;;22368:16:0;:37;22364:297;;22468:6;22448:16;:26;;22422:117;;;;-1:-1:-1;;;22422:117:0;;15409:2:1;22422:117:0;;;15391:21:1;15448:2;15428:18;;;15421:30;15487:31;15467:18;;;15460:59;15536:18;;22422:117:0;15207:353:1;22422:117:0;22583:51;22592:5;22599:7;22627:6;22608:16;:25;22583:8;:51::i;:::-;22290:378;22166:502;;;:::o;33209:2206::-;-1:-1:-1;;;;;33341:18:0;;33333:68;;;;-1:-1:-1;;;33333:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33420:16:0;;33412:64;;;;-1:-1:-1;;;33412:64:0;;;;;;;:::i;:::-;33493:6;33503:1;33493:11;33489:93;;33521:28;33537:4;33543:2;33547:1;33521:15;:28::i;33489:93::-;33643:4;33594:28;18250:18;;;:9;:18;;;;;;33701;;33677:42;;;;;;;33750:33;;-1:-1:-1;33775:8:0;;-1:-1:-1;;;33775:8:0;;;;33774:9;33750:33;:84;;;;-1:-1:-1;;;;;;33801:33:0;;;;;;:27;:33;;;;;;;;33800:34;33750:84;:118;;;;-1:-1:-1;33851:17:0;;;;33750:118;:182;;;;;33931:1;33908:20;;33885;;:43;;;;:::i;:::-;:47;33750:182;33732:249;;;33959:10;:8;:10::i;:::-;-1:-1:-1;;;;;34029:25:0;;33993:12;34029:25;;;:19;:25;;;;;;34008:4;;34029:25;;;:52;;-1:-1:-1;;;;;;34058:23:0;;;;;;:19;:23;;;;;;;;34029:52;:64;;;-1:-1:-1;34085:8:0;;-1:-1:-1;;;34085:8:0;;;;34029:64;34025:112;;;-1:-1:-1;34120:5:0;34025:112;-1:-1:-1;;;;;34155:33:0;;;;;;:29;:33;;;;;;;;34150:294;;34325:11;34307:14;;34291:13;18105:12;;;18017:108;34291:13;:30;;;;:::i;:::-;34290:46;;;;:::i;:::-;34255:6;34239:13;34249:2;-1:-1:-1;;;;;18250:18:0;18223:7;18250:18;;;:9;:18;;;;;;;18133:143;34239:13;:22;;;;:::i;:::-;:97;;34209:219;;;;-1:-1:-1;;;34209:219:0;;16750:2:1;34209:219:0;;;16732:21:1;16789:2;16769:18;;;16762:30;16828:34;16808:18;;;16801:62;-1:-1:-1;;;16879:18:1;;;16872:46;16935:19;;34209:219:0;16548:412:1;34209:219:0;34470:7;34466:896;;;-1:-1:-1;;;;;34584:33:0;;34494:27;34584:33;;;:27;:33;;;;;;34494:27;;34584:33;;34580:440;;;34689:11;34670:15;;34661:6;:24;;;;:::i;:::-;34660:40;;;;:::i;:::-;34638:62;;34770:11;34751:15;;34742:6;:24;;;;:::i;:::-;34741:40;;;;:::i;:::-;34719:62;;34580:440;;;-1:-1:-1;;;;;34807:31:0;;;;;;:27;:31;;;;;;;;34803:217;;;34911:11;34891:16;;34882:6;:25;;;;:::i;:::-;34881:41;;;;:::i;:::-;34859:63;;34993:11;34973:16;;34964:6;:25;;;;:::i;:::-;34963:41;;;;:::i;:::-;34941:63;;34803:217;35060:19;35036:20;;:43;;;;;;;:::i;:::-;;;;;;;;35118:19;35094:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;35154:12:0;;-1:-1:-1;35169:41:0;35191:19;35169;:41;:::i;:::-;35154:56;-1:-1:-1;35231:8:0;;35227:124;;35260:14;35270:4;35260:14;;:::i;:::-;;;35293:42;35309:4;35323;35330;35293:15;:42::i;:::-;34479:883;;;34466:896;35374:33;35390:4;35396:2;35400:6;35374:15;:33::i;:::-;33322:2093;;;33209:2206;;;:::o;35423:1607::-;24963:8;:15;;-1:-1:-1;;;;24963:15:0;-1:-1:-1;;;24963:15:0;;;35494:16:::1;::::0;;35508:1:::1;35494:16:::0;;;;;::::1;::::0;;-1:-1:-1;;35494:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;35494:16:0::1;35470:40;;35539:4;35521;35526:1;35521:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;35521:23:0::1;;;-1:-1:-1::0;;;;;35521:23:0::1;;;::::0;::::1;35565:15;-1:-1:-1::0;;;;;35565:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35555:4;35560:1;35555:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35555:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:32;35649:4:::1;35600:28;18250:18:::0;;;:9;:18;;;;;;;35600:55:::1;;35668:16;35710:20;;35687;;:43;;;;:::i;:::-;35668:62;;35743:20;35833:8;35827:1;35804:20;;:24;;;;:::i;:::-;35767:62;::::0;:20;:62:::1;:::i;:::-;35766:75;;;;:::i;:::-;35743:98:::0;-1:-1:-1;35854:22:0::1;35879:35;35743:98:::0;35879:20;:35:::1;:::i;:::-;35854:60;;35964:1;35940:20;;35939:26;;;;:::i;:::-;35927:38;::::0;;::::1;:::i;:::-;35995:223;::::0;-1:-1:-1;;;35995:223:0;;35927:38;;-1:-1:-1;;;;;;35995:15:0::1;:66;::::0;::::1;::::0;:223:::1;::::0;36080:14;;36113:1:::1;::::0;36133:4;;36164::::1;::::0;36188:15:::1;::::0;35995:223:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;35978:292;;36252:7;;;;;;;35978:292;36374:20;::::0;36303:21:::1;::::0;36282:18:::1;::::0;36398:8;;36361:33:::1;::::0;36303:21;36361:33:::1;:::i;:::-;36360:46;;;;:::i;:::-;36337:69:::0;-1:-1:-1;36417:18:0::1;36438:25;36337:69:::0;36438:10;:25:::1;:::i;:::-;36417:46;;36495:1;36480:12;:16;:34;;;;;36513:1;36500:10;:14;36480:34;36476:376;;;36552:264;::::0;-1:-1:-1;;;36552:264:0;;36633:4:::1;36552:264;::::0;::::1;18944:34:1::0;18994:18;;;18987:34;;;36696:1:0::1;19037:18:1::0;;;19030:34;;;19080:18;;;19073:34;36752:6:0::1;19123:19:1::0;;;19116:44;36782:15:0::1;19176:19:1::0;;;19169:35;36552:15:0::1;-1:-1:-1::0;;;;;36552:31:0::1;::::0;::::1;::::0;36591:10;;18878:19:1;;36552:264:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;36552:264:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;36552:264:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;36531:310:::0;::::1;;;;;;36868:16:::0;;36864:87:::1;;36909:15;::::0;36901:38:::1;::::0;-1:-1:-1;;;;;36909:15:0::1;36926:12:::0;36901:7:::1;:38::i;:::-;;36864:87;-1:-1:-1::0;;36986:1:0::1;36963:20;:24:::0;;;36998:20:::1;:24:::0;-1:-1:-1;;;;;;24989:1:0::1;25001:8:::0;:16;;-1:-1:-1;;;;25001:16:0;;;35423:1607::o;23870:191::-;23944:16;23963:6;;-1:-1:-1;;;;;23980:17:0;;;-1:-1:-1;;;;;;23980:17:0;;;;;;24013:40;;23963:6;;;;;;;24013:40;;23944:16;24013:40;23933:128;23870:191;:::o;12243:214::-;12380:58;;;-1:-1:-1;;;;;19718:32:1;;12380:58:0;;;19700:51:1;19767:18;;;;19760:34;;;12380:58:0;;;;;;;;;;19673:18:1;;;;12380:58:0;;;;;;;;-1:-1:-1;;;;;12380:58:0;-1:-1:-1;;;12380:58:0;;;12326:123;;12360:5;;12326:19;:123::i;20008:714::-;-1:-1:-1;;;;;20139:18:0;;20131:68;;;;-1:-1:-1;;;20131:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20218:16:0;;20210:64;;;;-1:-1:-1;;;20210:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20360:15:0;;20338:19;20360:15;;;:9;:15;;;;;;20408:21;;;;20386:109;;;;-1:-1:-1;;;20386:109:0;;20007:2:1;20386:109:0;;;19989:21:1;20046:2;20026:18;;;20019:30;20085:34;20065:18;;;20058:62;-1:-1:-1;;;20136:18:1;;;20129:36;20182:19;;20386:109:0;19805:402:1;20386:109:0;-1:-1:-1;;;;;20531:15:0;;;;;;;:9;:15;;;;;;20549:20;;;20531:38;;20586:13;;;;;;;;;;:23;;;;;;20638:26;;;;;;20563:6;1717:25:1;;1705:2;1690:18;;1571:177;20638:26:0;;;;;;;;20677:37;27840:447;37038:270;37140:4;16600:21;:19;:21::i;:::-;37185:6:::1;37161:21;:30;37157:48;;;-1:-1:-1::0;37200:5:0::1;37193:12;;37157:48;37219:12;37245:3;-1:-1:-1::0;;;;;37237:17:0::1;37262:6;37237:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;37218:55:0;;-1:-1:-1;;;16632:1:0::1;16644:20:::0;16416:1;16889:22;;16840:79;15351:380;15432:23;15458:106;15500:4;15458:106;;;;;;;;;;;;;;;;;15466:5;-1:-1:-1;;;;;15458:27:0;;;:106;;;;;:::i;:::-;15432:132;;15597:10;:17;15618:1;15597:22;:56;;;;15634:10;15623:30;;;;;;;;;;;;:::i;:::-;15575:148;;;;-1:-1:-1;;;15575:148:0;;20874:2:1;15575:148:0;;;20856:21:1;20913:2;20893:18;;;20886:30;20952:34;20932:18;;;20925:62;-1:-1:-1;;;21003:18:1;;;20996:40;21053:19;;15575:148:0;20672:406:1;16680:152:0;16460:1;16738:7;;:19;16730:63;;;;-1:-1:-1;;;16730:63:0;;21285:2:1;16730:63:0;;;21267:21:1;21324:2;21304:18;;;21297:30;21363:33;21343:18;;;21336:61;21414:18;;16730:63:0;21083:355:1;16730:63:0;16460:1;16806:7;:18;16680:152::o;7048:229::-;7185:12;7217:52;7239:6;7247:4;7253:1;7256:12;7217:21;:52::i;:::-;7210:59;7048:229;-1:-1:-1;;;;7048:229:0:o;7649:612::-;7819:12;7891:5;7866:21;:30;;7844:118;;;;-1:-1:-1;;;7844:118:0;;21645:2:1;7844:118:0;;;21627:21:1;21684:2;21664:18;;;21657:30;21723:34;21703:18;;;21696:62;-1:-1:-1;;;21774:18:1;;;21767:36;21820:19;;7844:118:0;21443:402:1;7844:118:0;7974:12;7988:23;8015:6;-1:-1:-1;;;;;8015:11:0;8034:5;8055:4;8015:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7973:97;;;;8101:152;8146:6;8171:7;8197:10;8226:12;8101:26;:152::i;:::-;8081:172;7649:612;-1:-1:-1;;;;;;;7649:612:0:o;9765:477::-;9950:12;9979:7;9975:260;;;10007:10;:17;10028:1;10007:22;10003:123;;-1:-1:-1;;;;;27303:19:0;;;10050:60;;;;-1:-1:-1;;;10050:60:0;;22344:2:1;10050:60:0;;;22326:21:1;22383:2;22363:18;;;22356:30;22422:31;22402:18;;;22395:59;22471:18;;10050:60:0;22142:353:1;10050:60:0;-1:-1:-1;10147:10:0;10140:17;;9975:260;10190:33;10198:10;10210:12;10686:17;;:21;10682:299;;10829:10;10823:17;10886:15;10873:10;10869:2;10865:19;10858:44;10682:299;10956:12;10949:20;;-1:-1:-1;;;10949:20:0;;;;;;;;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:250::-;352:1;362:113;376:6;373:1;370:13;362:113;;;452:11;;;446:18;433:11;;;426:39;398:2;391:10;362:113;;;-1:-1:-1;;509:1:1;491:16;;484:27;267:250::o;522:396::-;671:2;660:9;653:21;634:4;703:6;697:13;746:6;741:2;730:9;726:18;719:34;762:79;834:6;829:2;818:9;814:18;809:2;801:6;797:15;762:79;:::i;:::-;902:2;881:15;-1:-1:-1;;877:29:1;862:45;;;;909:2;858:54;;522:396;-1:-1:-1;;522:396:1:o;923:131::-;-1:-1:-1;;;;;998:31:1;;988:42;;978:70;;1044:1;1041;1034:12;1059:315;1127:6;1135;1188:2;1176:9;1167:7;1163:23;1159:32;1156:52;;;1204:1;1201;1194:12;1156:52;1243:9;1230:23;1262:31;1287:5;1262:31;:::i;:::-;1312:5;1364:2;1349:18;;;;1336:32;;-1:-1:-1;;;1059:315:1:o;1987:118::-;2073:5;2066:13;2059:21;2052:5;2049:32;2039:60;;2095:1;2092;2085:12;2110:241;2166:6;2219:2;2207:9;2198:7;2194:23;2190:32;2187:52;;;2235:1;2232;2225:12;2187:52;2274:9;2261:23;2293:28;2315:5;2293:28;:::i;:::-;2340:5;2110:241;-1:-1:-1;;;2110:241:1:o;2356:456::-;2433:6;2441;2449;2502:2;2490:9;2481:7;2477:23;2473:32;2470:52;;;2518:1;2515;2508:12;2470:52;2557:9;2544:23;2576:31;2601:5;2576:31;:::i;:::-;2626:5;-1:-1:-1;2683:2:1;2668:18;;2655:32;2696:33;2655:32;2696:33;:::i;:::-;2356:456;;2748:7;;-1:-1:-1;;;2802:2:1;2787:18;;;;2774:32;;2356:456::o;3214:247::-;3273:6;3326:2;3314:9;3305:7;3301:23;3297:32;3294:52;;;3342:1;3339;3332:12;3294:52;3381:9;3368:23;3400:31;3425:5;3400:31;:::i;3466:180::-;3525:6;3578:2;3566:9;3557:7;3553:23;3549:32;3546:52;;;3594:1;3591;3584:12;3546:52;-1:-1:-1;3617:23:1;;3466:180;-1:-1:-1;3466:180:1:o;3651:382::-;3716:6;3724;3777:2;3765:9;3756:7;3752:23;3748:32;3745:52;;;3793:1;3790;3783:12;3745:52;3832:9;3819:23;3851:31;3876:5;3851:31;:::i;:::-;3901:5;-1:-1:-1;3958:2:1;3943:18;;3930:32;3971:30;3930:32;3971:30;:::i;:::-;4020:7;4010:17;;;3651:382;;;;;:::o;4038:388::-;4106:6;4114;4167:2;4155:9;4146:7;4142:23;4138:32;4135:52;;;4183:1;4180;4173:12;4135:52;4222:9;4209:23;4241:31;4266:5;4241:31;:::i;:::-;4291:5;-1:-1:-1;4348:2:1;4333:18;;4320:32;4361:33;4320:32;4361:33;:::i;4790:127::-;4851:10;4846:3;4842:20;4839:1;4832:31;4882:4;4879:1;4872:15;4906:4;4903:1;4896:15;4922:125;4987:9;;;5008:10;;;5005:36;;;5021:18;;:::i;5665:380::-;5744:1;5740:12;;;;5787;;;5808:61;;5862:4;5854:6;5850:17;5840:27;;5808:61;5915:2;5907:6;5904:14;5884:18;5881:38;5878:161;;5961:10;5956:3;5952:20;5949:1;5942:31;5996:4;5993:1;5986:15;6024:4;6021:1;6014:15;5878:161;;5665:380;;;:::o;10034:406::-;10236:2;10218:21;;;10275:2;10255:18;;;10248:30;10314:34;10309:2;10294:18;;10287:62;-1:-1:-1;;;10380:2:1;10365:18;;10358:40;10430:3;10415:19;;10034:406::o;12024:217::-;12064:1;12090;12080:132;;12134:10;12129:3;12125:20;12122:1;12115:31;12169:4;12166:1;12159:15;12197:4;12194:1;12187:15;12080:132;-1:-1:-1;12226:9:1;;12024:217::o;13849:184::-;13919:6;13972:2;13960:9;13951:7;13947:23;13943:32;13940:52;;;13988:1;13985;13978:12;13940:52;-1:-1:-1;14011:16:1;;13849:184;-1:-1:-1;13849:184:1:o;15565:401::-;15767:2;15749:21;;;15806:2;15786:18;;;15779:30;15845:34;15840:2;15825:18;;15818:62;-1:-1:-1;;;15911:2:1;15896:18;;15889:35;15956:3;15941:19;;15565:401::o;15971:399::-;16173:2;16155:21;;;16212:2;16192:18;;;16185:30;16251:34;16246:2;16231:18;;16224:62;-1:-1:-1;;;16317:2:1;16302:18;;16295:33;16360:3;16345:19;;15971:399::o;16375:168::-;16448:9;;;16479;;16496:15;;;16490:22;;16476:37;16466:71;;16517:18;;:::i;16965:128::-;17032:9;;;17053:11;;;17050:37;;;17067:18;;:::i;17230:127::-;17291:10;17286:3;17282:20;17279:1;17272:31;17322:4;17319:1;17312:15;17346:4;17343:1;17336:15;17362:251;17432:6;17485:2;17473:9;17464:7;17460:23;17456:32;17453:52;;;17501:1;17498;17491:12;17453:52;17533:9;17527:16;17552:31;17577:5;17552:31;:::i;17618:980::-;17880:4;17928:3;17917:9;17913:19;17959:6;17948:9;17941:25;17985:2;18023:6;18018:2;18007:9;18003:18;17996:34;18066:3;18061:2;18050:9;18046:18;18039:31;18090:6;18125;18119:13;18156:6;18148;18141:22;18194:3;18183:9;18179:19;18172:26;;18233:2;18225:6;18221:15;18207:29;;18254:1;18264:195;18278:6;18275:1;18272:13;18264:195;;;18343:13;;-1:-1:-1;;;;;18339:39:1;18327:52;;18434:15;;;;18399:12;;;;18375:1;18293:9;18264:195;;;-1:-1:-1;;;;;;;18515:32:1;;;;18510:2;18495:18;;18488:60;-1:-1:-1;;;18579:3:1;18564:19;18557:35;18476:3;17618:980;-1:-1:-1;;;17618:980:1:o;19215:306::-;19303:6;19311;19319;19372:2;19360:9;19351:7;19347:23;19343:32;19340:52;;;19388:1;19385;19378:12;19340:52;19417:9;19411:16;19401:26;;19467:2;19456:9;19452:18;19446:25;19436:35;;19511:2;19500:9;19496:18;19490:25;19480:35;;19215:306;;;;;:::o;20422:245::-;20489:6;20542:2;20530:9;20521:7;20517:23;20513:32;20510:52;;;20558:1;20555;20548:12;20510:52;20590:9;20584:16;20609:28;20631:5;20609:28;:::i;21850:287::-;21979:3;22017:6;22011:13;22033:66;22092:6;22087:3;22080:4;22072:6;22068:17;22033:66;:::i;:::-;22115:16;;;;;21850:287;-1:-1:-1;;21850:287:1:o
Swarm Source
ipfs://d437563052451a306c5ad3c80966c03ac799d146a6294c3868934e4c051d2de3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.