Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 94 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 22100463 | 23 days ago | IN | 0 ETH | 0.00004295 | ||||
Transfer | 21524507 | 104 days ago | IN | 0 ETH | 0.00036248 | ||||
Transfer | 20972241 | 181 days ago | IN | 0 ETH | 0.00164822 | ||||
Approve | 20302026 | 274 days ago | IN | 0 ETH | 0.00016048 | ||||
Approve | 19733986 | 354 days ago | IN | 0 ETH | 0.00077008 | ||||
Approve | 19544627 | 380 days ago | IN | 0 ETH | 0.00091966 | ||||
Approve | 19420598 | 398 days ago | IN | 0 ETH | 0.0035791 | ||||
Approve | 19414446 | 399 days ago | IN | 0 ETH | 0.00327816 | ||||
Approve | 19361149 | 406 days ago | IN | 0 ETH | 0.00181254 | ||||
Approve | 18865234 | 476 days ago | IN | 0 ETH | 0.00067187 | ||||
Approve | 18863455 | 476 days ago | IN | 0 ETH | 0.00114643 | ||||
Approve | 18848730 | 478 days ago | IN | 0 ETH | 0.00121655 | ||||
Approve | 18830253 | 481 days ago | IN | 0 ETH | 0.00151023 | ||||
Approve | 18823398 | 482 days ago | IN | 0 ETH | 0.00169991 | ||||
Approve | 18822438 | 482 days ago | IN | 0 ETH | 0.00259604 | ||||
Approve | 18816751 | 482 days ago | IN | 0 ETH | 0.00205253 | ||||
Approve | 18815437 | 483 days ago | IN | 0 ETH | 0.00421932 | ||||
Approve | 18815327 | 483 days ago | IN | 0 ETH | 0.00352867 | ||||
Transfer | 18815324 | 483 days ago | IN | 0 ETH | 0.00413089 | ||||
Transfer | 18815290 | 483 days ago | IN | 0 ETH | 0.00492724 | ||||
Approve | 18815260 | 483 days ago | IN | 0 ETH | 0.00364587 | ||||
Transfer | 18815202 | 483 days ago | IN | 0 ETH | 0.00425978 | ||||
Approve | 18815172 | 483 days ago | IN | 0 ETH | 0.00372478 | ||||
Approve | 18815147 | 483 days ago | IN | 0 ETH | 0.00369562 | ||||
Approve | 18815120 | 483 days ago | IN | 0 ETH | 0.0038166 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 19809201 | 343 days ago | 0.00063957 ETH | ||||
Transfer | 19809201 | 343 days ago | 0.00063957 ETH | ||||
Transfer | 19809201 | 343 days ago | 0.00127914 ETH | ||||
Add Liquidity ET... | 19809201 | 343 days ago | 0.00031998 ETH | ||||
Transfer | 19809201 | 343 days ago | 0.00031998 ETH | ||||
Transfer | 18944167 | 465 days ago | 0.00266107 ETH | ||||
Transfer | 18944167 | 465 days ago | 0.00266107 ETH | ||||
Transfer | 18944167 | 465 days ago | 0.00532214 ETH | ||||
Add Liquidity ET... | 18944167 | 465 days ago | 0.00133374 ETH | ||||
Transfer | 18944167 | 465 days ago | 0.00133374 ETH | ||||
Transfer | 18865235 | 476 days ago | 0.0009198 ETH | ||||
Transfer | 18865235 | 476 days ago | 0.0009198 ETH | ||||
Transfer | 18865235 | 476 days ago | 0.0018396 ETH | ||||
Add Liquidity ET... | 18865235 | 476 days ago | 0.00046024 ETH | ||||
Transfer | 18865235 | 476 days ago | 0.00046024 ETH | ||||
Transfer | 18848732 | 478 days ago | 0.00133582 ETH | ||||
Transfer | 18848732 | 478 days ago | 0.00133582 ETH | ||||
Transfer | 18848732 | 478 days ago | 0.00267164 ETH | ||||
Add Liquidity ET... | 18848732 | 478 days ago | 0.00066862 ETH | ||||
Transfer | 18848732 | 478 days ago | 0.00066862 ETH | ||||
Transfer | 18837318 | 480 days ago | 0.00281954 ETH | ||||
Transfer | 18837318 | 480 days ago | 0.00281954 ETH | ||||
Transfer | 18837318 | 480 days ago | 0.00563908 ETH | ||||
Add Liquidity ET... | 18837318 | 480 days ago | 0.0014128 ETH | ||||
Transfer | 18837318 | 480 days ago | 0.0014128 ETH |
Loading...
Loading
Contract Name:
TamaBlockChi
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-12-06 */ // ░█████╗░░█████╗░██╗███╗░░██╗░██████╗██╗░░░██╗██╗░░░░░████████╗░░░░███╗░░██╗███████╗████████╗ // ██╔══██╗██╔══██╗██║████╗░██║██╔════╝██║░░░██║██║░░░░░╚══██╔══╝░░░░████╗░██║██╔════╝╚══██╔══╝ // ██║░░╚═╝██║░░██║██║██╔██╗██║╚█████╗░██║░░░██║██║░░░░░░░░██║░░░░░░░██╔██╗██║█████╗░░░░░██║░░░ // ██║░░██╗██║░░██║██║██║╚████║░╚═══██╗██║░░░██║██║░░░░░░░░██║░░░░░░░██║╚████║██╔══╝░░░░░██║░░░ // ╚█████╔╝╚█████╔╝██║██║░╚███║██████╔╝╚██████╔╝███████╗░░░██║░░░██╗░██║░╚███║███████╗░░░██║░░░ // ░╚════╝░░╚════╝░╚═╝╚═╝░░╚══╝╚═════╝░░╚═════╝░╚══════╝░░░╚═╝░░░╚═╝░╚═╝░░╚══╝╚══════╝░░░╚═╝░░░ // ############################################################ // || || // || This Contract Was Created by t.me/coinsult_tg || // || || // ############################################################ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; 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; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } 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 IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal returns(bool){ require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); return success; } 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) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract 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 { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { uint256 currentAllowance = _allowances[sender][_msgSender()]; if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } } _transfer(sender, recipient, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, 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; _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 _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract TamaBlockChi is ERC20, Ownable { using Address for address payable; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; mapping (address => bool) private _isExcludedFromFees; uint256 public liquidityFeeOnBuy; uint256 public liquidityFeeOnSell; uint256 public marketingFeeOnBuy; uint256 public marketingFeeOnSell; uint256 public nftFeeOnBuy; uint256 public nftFeeOnSell; uint256 private _totalFeesOnBuy; uint256 private _totalFeesOnSell; address public marketingWallet; address public nftContract; uint256 public swapTokensAtAmount; bool private swapping; bool public swapEnabled; event ExcludeFromFees(address indexed account, bool isExcluded); event MarketingWalletChanged(address marketingWallet); event NFTWalletChanged(address nftContract); event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity); event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend); event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount); event TradingEnabled(); constructor () ERC20("TamaBlockChi", "TAMA") { address router; if (block.chainid == 56) { router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router } else if (block.chainid == 97) { router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router } else if (block.chainid == 1 || block.chainid == 5) { router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet } else { revert(); } transferOwnership(0x3653533b59089251020cDD237A15AE88C2e99D9E); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _approve(address(this), address(uniswapV2Router), type(uint256).max); liquidityFeeOnBuy = 1; liquidityFeeOnSell = 1; marketingFeeOnBuy = 1; marketingFeeOnSell = 1; nftFeeOnBuy = 1; nftFeeOnSell = 1; _totalFeesOnBuy = liquidityFeeOnBuy + marketingFeeOnBuy + nftFeeOnBuy; _totalFeesOnSell = liquidityFeeOnSell + marketingFeeOnSell + nftFeeOnSell; marketingWallet = 0x3653533b59089251020cDD237A15AE88C2e99D9E; nftContract = 0x3653533b59089251020cDD237A15AE88C2e99D9E; maxTransactionLimitEnabled = true; _isExcludedFromMaxTxLimit[owner()] = true; _isExcludedFromMaxTxLimit[address(this)] = true; _isExcludedFromMaxTxLimit[address(0xdead)] = true; _isExcludedFromMaxTxLimit[marketingWallet] = true; _isExcludedFromMaxTxLimit[0x71B5759d73262FBb223956913ecF4ecC51057641] = true; //pinklock maxWalletLimitEnabled = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[address(0xdead)] = true; _isExcludedFromMaxWalletLimit[marketingWallet] = true; _isExcludedFromMaxWalletLimit[0x71B5759d73262FBb223956913ecF4ecC51057641] = true; //pinklock _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(0xdead)] = true; _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[marketingWallet] = true; _isExcludedFromFees[0x71B5759d73262FBb223956913ecF4ecC51057641] = true; //pinklock _mint(owner(), 1e8 * (10 ** decimals())); swapTokensAtAmount = totalSupply() / 5_000; maxTransactionAmountBuy = totalSupply() * 10 / 1000; maxTransactionAmountSell = totalSupply() * 10 / 1000; maxWalletAmount = totalSupply() * 30 / 1000; tradingEnabled = false; swapEnabled = false; } receive() external payable { } function claimStuckTokens(address token) external onlyOwner { require(token != address(this), "Owner cannot claim contract's balance of its own tokens"); if (token == address(0x0)) { payable(msg.sender).sendValue(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.transfer(msg.sender, balance); } function excludeFromFees(address account, bool excluded) external onlyOwner{ require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function changeMarketingWallet(address _marketingWallet) external onlyOwner{ require(_marketingWallet != marketingWallet,"Marketing wallet is already that address"); require(_marketingWallet != address(0),"Marketing wallet cannot be the zero address"); marketingWallet = _marketingWallet; emit MarketingWalletChanged(marketingWallet); } function changeNftWallet(address _nftContract) external onlyOwner{ require(_nftContract != marketingWallet,"NFT wallet is already that address"); require(_nftContract != address(0),"NFT wallet cannot be the zero address"); nftContract = _nftContract; emit NFTWalletChanged(nftContract); } bool public tradingEnabled; function enableTrading() external onlyOwner{ require(!tradingEnabled, "Trading already enabled."); tradingEnabled = true; swapEnabled = true; emit TradingEnabled(); } 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"); require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!"); if (amount == 0) { super._transfer(from, to, 0); return; } if (maxTransactionLimitEnabled) { if ((from == uniswapV2Pair || to == uniswapV2Pair) && !_isExcludedFromMaxTxLimit[from] && !_isExcludedFromMaxTxLimit[to] ) { if (from == uniswapV2Pair) { require( amount <= maxTransactionAmountBuy, "AntiWhale: Transfer amount exceeds the maxTransactionAmount" ); } else { require( amount <= maxTransactionAmountSell, "AntiWhale: Transfer amount exceeds the maxTransactionAmount" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && !swapping && to == uniswapV2Pair && _totalFeesOnBuy + _totalFeesOnSell > 0 && swapEnabled ) { swapping = true; uint256 totalFee = _totalFeesOnBuy + _totalFeesOnSell; uint256 liquidityShare = liquidityFeeOnBuy + liquidityFeeOnSell; uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell + nftFeeOnBuy + nftFeeOnSell; if (liquidityShare > 0) { uint256 liquidityTokens = contractTokenBalance * liquidityShare / totalFee; swapAndLiquify(liquidityTokens); } if (marketingShare > 0) { uint256 marketingTokens = contractTokenBalance * marketingShare / totalFee; swapAndSendMarketing(marketingTokens); } swapping = false; } uint256 _totalFees; if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) { _totalFees = 0; } else if (from == uniswapV2Pair) { _totalFees = _totalFeesOnBuy; } else if (to == uniswapV2Pair) { _totalFees = _totalFeesOnSell; } else { _totalFees = 0; } if (_totalFees > 0) { uint256 fees = (amount * _totalFees) / 100; amount = amount - fees; super._transfer(from, address(this), fees); } if (maxWalletLimitEnabled) { if (!_isExcludedFromMaxWalletLimit[from] && !_isExcludedFromMaxWalletLimit[to] && to != uniswapV2Pair ) { uint256 balance = balanceOf(to); require( balance + amount <= maxWalletAmount, "MaxWallet: Recipient exceeds the maxWalletAmount" ); } } super._transfer(from, to, amount); } function setSwapEnabled(bool _enabled) external onlyOwner{ require(swapEnabled != _enabled, "swapEnabled already at this state."); swapEnabled = _enabled; } function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{ require(newAmount > totalSupply() / 1_000_000, "SwapTokensAtAmount must be greater than 0.0001% of total supply"); swapTokensAtAmount = newAmount; emit SwapTokensAtAmountUpdated(swapTokensAtAmount); } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens / 2; uint256 otherHalf = tokens - half; uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( half, 0, path, address(this), block.timestamp); uint256 newBalance = address(this).balance - initialBalance; uniswapV2Router.addLiquidityETH{value: newBalance}( address(this), otherHalf, 0, 0, address(0xdead), block.timestamp ); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapAndSendMarketing(uint256 tokenAmount) private { uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp); uint256 newBalance = address(this).balance - initialBalance; payable(marketingWallet).sendValue(newBalance / 2); payable(nftContract).sendValue(address(this).balance); emit SwapAndSendMarketing(tokenAmount, newBalance); } mapping(address => bool) private _isExcludedFromMaxWalletLimit; bool public maxWalletLimitEnabled; uint256 public maxWalletAmount; event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded); event MaxWalletLimitStateChanged(bool maxWalletLimit); event MaxWalletLimitAmountChanged(uint256 maxWalletAmount); function setEnableMaxWalletLimit(bool enable) external onlyOwner { require(enable != maxWalletLimitEnabled,"Max wallet limit is already set to that state"); maxWalletLimitEnabled = enable; emit MaxWalletLimitStateChanged(maxWalletLimitEnabled); } function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner { require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%"); maxWalletAmount = _maxWalletAmount * (10 ** decimals()); emit MaxWalletLimitAmountChanged(maxWalletAmount); } function excludeFromMaxWallet(address account, bool exclude) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state"); require(account != address(this), "Can't set this address."); _isExcludedFromMaxWalletLimit[account] = exclude; emit ExcludedFromMaxWalletLimit(account, exclude); } function isExcludedFromMaxWalletLimit(address account) public view returns(bool) { return _isExcludedFromMaxWalletLimit[account]; } mapping(address => bool) private _isExcludedFromMaxTxLimit; bool public maxTransactionLimitEnabled; uint256 public maxTransactionAmountBuy; uint256 public maxTransactionAmountSell; event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded); event MaxTransactionLimitStateChanged(bool maxTransactionLimit); event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell); function setEnableMaxTransactionLimit(bool enable) external onlyOwner { require(enable != maxTransactionLimitEnabled, "Max transaction limit is already set to that state"); maxTransactionLimitEnabled = enable; emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled); } function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner { require( _maxTransactionAmountBuy >= (totalSupply() / (10 ** decimals())) / 1_000 && _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals())) / 1_000, "Max Transaction limis cannot be lower than 0.1% of total supply" ); maxTransactionAmountBuy = _maxTransactionAmountBuy * (10 ** decimals()); maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals()); emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell); } function excludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner { require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state"); require(account != address(this), "Can't set this address."); _isExcludedFromMaxTxLimit[account] = exclude; emit ExcludedFromMaxTransactionLimit(account, exclude); } function isExcludedFromMaxTransaction(address account) public view returns(bool) { return _isExcludedFromMaxTxLimit[account]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nftContract","type":"address"}],"name":"NFTWalletChanged","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"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":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftContract","type":"address"}],"name":"changeNftWallet","outputs":[],"stateMutability":"nonpayable","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","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":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","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":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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
60806040523480156200001157600080fd5b506040518060400160405280600c81526020016b54616d61426c6f636b43686960a01b8152506040518060400160405280600481526020016354414d4160e01b815250816003908162000065919062000aea565b50600462000074828262000aea565b5050506000620000896200071e60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003a2b833981519152908290a350600046603803620000ed57507310ed43c718714eb63d5aa57b78b54704e256024e62000149565b4660610362000112575073d99d1c33f9fc3444f8101754abc46c52416550d162000149565b4660011480620001225750466005145b15620001445750737a250d5630b4cf539739df2c5dacb4c659f2488d62000149565b600080fd5b62000168733653533b59089251020cdd237a15ae88c2e99d9e62000722565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d4919062000bb6565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000222573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000248919062000bb6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000bb6565b600680546001600160a01b038086166001600160a01b031992831681179093556007805491851691909216179055909150620002fd90309060001962000834565b60016009819055600a819055600b819055600c819055600d819055600e81905562000329818062000bfe565b62000335919062000bfe565b600f55600e54600c54600a546200034d919062000bfe565b62000359919062000bfe565b60105560118054733653533b59089251020cdd237a15ae88c2e99d9e6001600160a01b031991821681179092556012805490911690911790556019805460ff1916600190811790915560186000620003b96005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260189093528183208054851660019081179091557fe3ec2099396b7359df1c566dfdf9dfdb5e22fd64a6ede9d61aa32b2f63968fd68054861682179055601154909116835290822080548416821790557371b5759d73262fbb223956913ecf4ecc5105764182527faa64b75785b4196225f954b2df00eb09f2c77b8f751a01e9adc0279f530e413480548416821790556016805490931681179092556015906200049c6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260159093528183208054851660019081179091557f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e58054861682179055601154909116835290822080548416821790557371b5759d73262fbb223956913ecf4ecc5105764182527fc8f14557f34db8167f6d7baba29c70d6a52784fcbd12f2d148c8caa038358cea80549093168117909255600890620005756005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560089093527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054851660019081179091553084528284208054861682179055601154909116835290822080548416821790557371b5759d73262fbb223956913ecf4ecc510576419091527f2c39206bcdadd432bc62b946002427b71b691b17a08e0002260ae5f7c436ec588054909216179055620006726200064e6005546001600160a01b031690565b6200065c6012600a62000d17565b6200066c906305f5e10062000d28565b6200095c565b6113886200067f60025490565b6200068b919062000d42565b6013556103e86200069b60025490565b620006a890600a62000d28565b620006b4919062000d42565b601a556103e8620006c460025490565b620006d190600a62000d28565b620006dd919062000d42565b601b556103e8620006ed60025490565b620006fa90601e62000d28565b62000706919062000d42565b60175550506014805462ffff00191690555062000d65565b3390565b6005546001600160a01b03163314620007825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620007e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000779565b6005546040516001600160a01b0380841692169060008051602062003a2b83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316620008985760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000779565b6001600160a01b038216620008fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000779565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620009b45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000779565b8060026000828254620009c8919062000bfe565b90915550506001600160a01b03821660009081526020819052604081208054839290620009f790849062000bfe565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000a7157607f821691505b60208210810362000a9257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a4157600081815260208120601f850160051c8101602086101562000ac15750805b601f850160051c820191505b8181101562000ae25782815560010162000acd565b505050505050565b81516001600160401b0381111562000b065762000b0662000a46565b62000b1e8162000b17845462000a5c565b8462000a98565b602080601f83116001811462000b56576000841562000b3d5750858301515b600019600386901b1c1916600185901b17855562000ae2565b600085815260208120601f198616915b8281101562000b875788860151825594840194600190910190840162000b66565b508582101562000ba65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000bc957600080fd5b81516001600160a01b038116811462000be157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000c145762000c1462000be8565b92915050565b600181815b8085111562000c5b57816000190482111562000c3f5762000c3f62000be8565b8085161562000c4d57918102915b93841c939080029062000c1f565b509250929050565b60008262000c745750600162000c14565b8162000c835750600062000c14565b816001811462000c9c576002811462000ca75762000cc7565b600191505062000c14565b60ff84111562000cbb5762000cbb62000be8565b50506001821b62000c14565b5060208310610133831016604e8410600b841016171562000cec575081810a62000c14565b62000cf8838362000c1a565b806000190482111562000d0f5762000d0f62000be8565b029392505050565b600062000be160ff84168362000c63565b808202811582820484141762000c145762000c1462000be8565b60008262000d6057634e487b7160e01b600052601260045260246000fd5b500490565b612cb68062000d756000396000f3fe6080604052600436106102975760003560e01c8063715018a61161015a578063b6f7f681116100c1578063dc4c7dbc1161007a578063dc4c7dbc146107f4578063dd62ed3e1461080a578063e01af92c14610850578063e2f4560514610870578063f2fde38b14610886578063f9d0831a146108a657600080fd5b8063b6f7f6811461073e578063bb85c6d11461075e578063c02466681461077e578063c43876591461079e578063d2fcc001146107b4578063d56d229d146107d457600080fd5b806395d89b411161011357806395d89b411461067a578063a457c2d71461068f578063a8a69b9d146106af578063a9059cbb146106e8578063aa4bde2814610708578063afa4f3b21461071e57600080fd5b8063715018a6146105dc57806375f0a874146105f15780637b3c83b114610611578063880bcbc1146106275780638a8c523c146106475780638da5cb5b1461065c57600080fd5b80632ce86fbf116101fe5780634fbee193116101b75780634fbee1931461050257806356a6cabf1461053b57806359136fa51461055b5780635fc2e596146105715780636ddd17131461058757806370a08231146105a657600080fd5b80632ce86fbf14610450578063313ce56714610466578063391518e11461048257806339509351146104a257806349bd5a5e146104c25780634ada218b146104e257600080fd5b806318d9ceae1161025057806318d9ceae1461038157806321a9d82a146103ba57806323b872dd146103d457806327a14fc2146103f45780632a6c7dba146104165780632ba86bf21461043657600080fd5b80630105d0fd146102a357806306fdde03146102cc578063095ea7b3146102ee57806315e53df91461031e5780631694505e1461033457806318160ddd1461036c57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b9601a5481565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b506102e16108c6565b6040516102c391906126b7565b3480156102fa57600080fd5b5061030e61030936600461271a565b610958565b60405190151581526020016102c3565b34801561032a57600080fd5b506102b9600d5481565b34801561034057600080fd5b50600654610354906001600160a01b031681565b6040516001600160a01b0390911681526020016102c3565b34801561037857600080fd5b506002546102b9565b34801561038d57600080fd5b5061030e61039c366004612746565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156103c657600080fd5b5060165461030e9060ff1681565b3480156103e057600080fd5b5061030e6103ef36600461276a565b61096f565b34801561040057600080fd5b5061041461040f3660046127ab565b610a25565b005b34801561042257600080fd5b506104146104313660046127d2565b610b2b565b34801561044257600080fd5b5060195461030e9060ff1681565b34801561045c57600080fd5b506102b9600a5481565b34801561047257600080fd5b50604051601281526020016102c3565b34801561048e57600080fd5b5061041461049d366004612746565b610c0a565b3480156104ae57600080fd5b5061030e6104bd36600461271a565b610d4f565b3480156104ce57600080fd5b50600754610354906001600160a01b031681565b3480156104ee57600080fd5b5060145461030e9062010000900460ff1681565b34801561050e57600080fd5b5061030e61051d366004612746565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561054757600080fd5b506104146105563660046127d2565b610d8b565b34801561056757600080fd5b506102b9601b5481565b34801561057d57600080fd5b506102b9600b5481565b34801561059357600080fd5b5060145461030e90610100900460ff1681565b3480156105b257600080fd5b506102b96105c1366004612746565b6001600160a01b031660009081526020819052604090205490565b3480156105e857600080fd5b50610414610e6f565b3480156105fd57600080fd5b50601154610354906001600160a01b031681565b34801561061d57600080fd5b506102b960095481565b34801561063357600080fd5b506104146106423660046127ef565b610ee3565b34801561065357600080fd5b50610414610fff565b34801561066857600080fd5b506005546001600160a01b0316610354565b34801561068657600080fd5b506102e16110be565b34801561069b57600080fd5b5061030e6106aa36600461271a565b6110cd565b3480156106bb57600080fd5b5061030e6106ca366004612746565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156106f457600080fd5b5061030e61070336600461271a565b611166565b34801561071457600080fd5b506102b960175481565b34801561072a57600080fd5b506104146107393660046127ab565b611173565b34801561074a57600080fd5b50610414610759366004612828565b61125d565b34801561076a57600080fd5b50610414610779366004612746565b6113cc565b34801561078a57600080fd5b506104146107993660046127ef565b61151d565b3480156107aa57600080fd5b506102b9600e5481565b3480156107c057600080fd5b506104146107cf3660046127ef565b611622565b3480156107e057600080fd5b50601254610354906001600160a01b031681565b34801561080057600080fd5b506102b9600c5481565b34801561081657600080fd5b506102b961082536600461284a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561085c57600080fd5b5061041461086b3660046127d2565b611736565b34801561087c57600080fd5b506102b960135481565b34801561089257600080fd5b506104146108a1366004612746565b6117e7565b3480156108b257600080fd5b506104146108c1366004612746565b6118d2565b6060600380546108d590612878565b80601f016020809104026020016040519081016040528092919081815260200182805461090190612878565b801561094e5780601f106109235761010080835404028352916020019161094e565b820191906000526020600020905b81548152906001019060200180831161093157829003601f168201915b5050505050905090565b6000610965338484611a7e565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610a0f5782811015610a025760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610a0f8533858403611a7e565b610a1a858585611ba2565b506001949350505050565b6005546001600160a01b03163314610a4f5760405162461bcd60e51b81526004016109f9906128b2565b6064610a5d6012600a6129e1565b600254610a6a91906129f0565b610a7491906129f0565b811015610ad95760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b60648201526084016109f9565b610ae56012600a6129e1565b610aef9082612a12565b60178190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6005546001600160a01b03163314610b555760405162461bcd60e51b81526004016109f9906128b2565b60165460ff16151581151503610bc35760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b60648201526084016109f9565b6016805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610b20565b6005546001600160a01b03163314610c345760405162461bcd60e51b81526004016109f9906128b2565b6011546001600160a01b0390811690821603610c9d5760405162461bcd60e51b815260206004820152602260248201527f4e46542077616c6c657420697320616c72656164792074686174206164647265604482015261737360f01b60648201526084016109f9565b6001600160a01b038116610d015760405162461bcd60e51b815260206004820152602560248201527f4e46542077616c6c65742063616e6e6f7420626520746865207a65726f206164604482015264647265737360d81b60648201526084016109f9565b601280546001600160a01b0319166001600160a01b0383169081179091556040519081527f91e9aa2b3d76331674b6d806ea764d8760e47cd228ca58d176052d21e234188f90602001610b20565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610965918590610d86908690612a29565b611a7e565b6005546001600160a01b03163314610db55760405162461bcd60e51b81526004016109f9906128b2565b60195460ff16151581151503610e285760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b60648201526084016109f9565b6019805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610b20565b6005546001600160a01b03163314610e995760405162461bcd60e51b81526004016109f9906128b2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f0d5760405162461bcd60e51b81526004016109f9906128b2565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503610f4d5760405162461bcd60e51b81526004016109f990612a3c565b306001600160a01b03831603610f9f5760405162461bcd60e51b815260206004820152601760248201527621b0b713ba1039b2ba103a3434b99030b2323932b9b99760491b60448201526064016109f9565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6005546001600160a01b031633146110295760405162461bcd60e51b81526004016109f9906128b2565b60145462010000900460ff16156110825760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e000000000000000060448201526064016109f9565b6014805462ffff001916620101001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b6060600480546108d590612878565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561114f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109f9565b61115c3385858403611a7e565b5060019392505050565b6000610965338484611ba2565b6005546001600160a01b0316331461119d5760405162461bcd60e51b81526004016109f9906128b2565b620f42406111aa60025490565b6111b491906129f0565b81116112285760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c790060648201526084016109f9565b60138190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610b20565b6005546001600160a01b031633146112875760405162461bcd60e51b81526004016109f9906128b2565b6103e86112966012600a6129e1565b6002546112a391906129f0565b6112ad91906129f0565b82101580156112e157506103e86112c66012600a6129e1565b6002546112d391906129f0565b6112dd91906129f0565b8110155b6113535760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c790060648201526084016109f9565b61135f6012600a6129e1565b6113699083612a12565b601a556113786012600a6129e1565b6113829082612a12565b601b819055601a546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131926113c0928252602082015260400190565b60405180910390a15050565b6005546001600160a01b031633146113f65760405162461bcd60e51b81526004016109f9906128b2565b6011546001600160a01b03908116908216036114655760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b60648201526084016109f9565b6001600160a01b0381166114cf5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b60648201526084016109f9565b601180546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610b20565b6005546001600160a01b031633146115475760405162461bcd60e51b81526004016109f9906128b2565b6001600160a01b03821660009081526008602052604090205481151560ff9091161515036115ca5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016109f9565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610ff3565b6005546001600160a01b0316331461164c5760405162461bcd60e51b81526004016109f9906128b2565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361168c5760405162461bcd60e51b81526004016109f990612a3c565b306001600160a01b038316036116de5760405162461bcd60e51b815260206004820152601760248201527621b0b713ba1039b2ba103a3434b99030b2323932b9b99760491b60448201526064016109f9565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101610ff3565b6005546001600160a01b031633146117605760405162461bcd60e51b81526004016109f9906128b2565b801515601460019054906101000a900460ff161515036117cd5760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b60648201526084016109f9565b601480549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146118115760405162461bcd60e51b81526004016109f9906128b2565b6001600160a01b0381166118765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109f9565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118fc5760405162461bcd60e51b81526004016109f9906128b2565b306001600160a01b0382160361197a5760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e7300000000000000000060648201526084016109f9565b6001600160a01b0381166119965761199233476120a1565b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156119df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a039190612a80565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a779190612a99565b5050505b50565b6001600160a01b038316611ae05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109f9565b6001600160a01b038216611b415760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109f9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611bc85760405162461bcd60e51b81526004016109f990612ab6565b6001600160a01b038216611bee5760405162461bcd60e51b81526004016109f990612afb565b60145462010000900460ff1680611c1d57506001600160a01b03831660009081526008602052604090205460ff165b80611c4057506001600160a01b03821660009081526008602052604090205460ff165b611c8c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c656421000000000000000060448201526064016109f9565b80600003611ca557611ca083836000612150565b505050565b60195460ff1615611d87576007546001600160a01b0384811691161480611cd957506007546001600160a01b038381169116145b8015611cfe57506001600160a01b03831660009081526018602052604090205460ff16155b8015611d2357506001600160a01b03821660009081526018602052604090205460ff16155b15611d87576007546001600160a01b0390811690841603611d6557601a54811115611d605760405162461bcd60e51b81526004016109f990612b3e565b611d87565b601b54811115611d875760405162461bcd60e51b81526004016109f990612b3e565b3060009081526020819052604090205460135481108015908190611dae575060145460ff16155b8015611dc757506007546001600160a01b038581169116145b8015611de257506000601054600f54611de09190612a29565b115b8015611df55750601454610100900460ff165b15611ebf576014805460ff19166001179055601054600f54600091611e1991612a29565b90506000600a54600954611e2d9190612a29565b90506000600e54600d54600c54600b54611e479190612a29565b611e519190612a29565b611e5b9190612a29565b90508115611e8757600083611e708488612a12565b611e7a91906129f0565b9050611e85816122a4565b505b8015611eb157600083611e9a8388612a12565b611ea491906129f0565b9050611eaf816124ef565b505b50506014805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff1680611efe57506001600160a01b03851660009081526008602052604090205460ff165b80611f0b575060145460ff165b15611f1857506000611f5a565b6007546001600160a01b0390811690871603611f375750600f54611f5a565b6007546001600160a01b0390811690861603611f565750601054611f5a565b5060005b8015611f935760006064611f6e8387612a12565b611f7891906129f0565b9050611f848186612b9b565b9450611f91873083612150565b505b60165460ff161561208e576001600160a01b03861660009081526015602052604090205460ff16158015611fe057506001600160a01b03851660009081526015602052604090205460ff16155b8015611ffa57506007546001600160a01b03868116911614155b1561208e576001600160a01b0385166000908152602081905260409020546017546120258683612a29565b111561208c5760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b60648201526084016109f9565b505b612099868686612150565b505050505050565b6000814710156120f35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109f9565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612140576040519150601f19603f3d011682016040523d82523d6000602084013e612145565b606091505b509095945050505050565b6001600160a01b0383166121765760405162461bcd60e51b81526004016109f990612ab6565b6001600160a01b03821661219c5760405162461bcd60e51b81526004016109f990612afb565b6001600160a01b038316600090815260208190526040902054818110156122145760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109f9565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061224b908490612a29565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161229791815260200190565b60405180910390a3611a77565b60006122b16002836129f0565b905060006122bf8284612b9b565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106122f9576122f9612bae565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123769190612bc4565b8160018151811061238957612389612bae565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906123cf908790600090869030904290600401612be1565b600060405180830381600087803b1580156123e957600080fd5b505af11580156123fd573d6000803e3d6000fd5b505050506000824761240f9190612b9b565b60065460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af115801561247e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124a39190612c52565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061252857612528612bae565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a59190612bc4565b816001815181106125b8576125b8612bae565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906125fe908690600090869030904290600401612be1565b600060405180830381600087803b15801561261857600080fd5b505af115801561262c573d6000803e3d6000fd5b505050506000824761263e9190612b9b565b905061266061264e6002836129f0565b6011546001600160a01b0316906120a1565b50601254612677906001600160a01b0316476120a1565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a150505050565b600060208083528351808285015260005b818110156126e4578581018301518582016040015282016126c8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a7b57600080fd5b6000806040838503121561272d57600080fd5b823561273881612705565b946020939093013593505050565b60006020828403121561275857600080fd5b813561276381612705565b9392505050565b60008060006060848603121561277f57600080fd5b833561278a81612705565b9250602084013561279a81612705565b929592945050506040919091013590565b6000602082840312156127bd57600080fd5b5035919050565b8015158114611a7b57600080fd5b6000602082840312156127e457600080fd5b8135612763816127c4565b6000806040838503121561280257600080fd5b823561280d81612705565b9150602083013561281d816127c4565b809150509250929050565b6000806040838503121561283b57600080fd5b50508035926020909101359150565b6000806040838503121561285d57600080fd5b823561286881612705565b9150602083013561281d81612705565b600181811c9082168061288c57607f821691505b6020821081036128ac57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561293857816000190482111561291e5761291e6128e7565b8085161561292b57918102915b93841c9390800290612902565b509250929050565b60008261294f57506001610969565b8161295c57506000610969565b8160018114612972576002811461297c57612998565b6001915050610969565b60ff84111561298d5761298d6128e7565b50506001821b610969565b5060208310610133831016604e8410600b84101617156129bb575081810a610969565b6129c583836128fd565b80600019048211156129d9576129d96128e7565b029392505050565b600061276360ff841683612940565b600082612a0d57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610969576109696128e7565b80820180821115610969576109696128e7565b60208082526024908201527f4163636f756e7420697320616c72656164792073657420746f207468617420736040820152637461746560e01b606082015260800190565b600060208284031215612a9257600080fd5b5051919050565b600060208284031215612aab57600080fd5b8151612763816127c4565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b81810381811115610969576109696128e7565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612bd657600080fd5b815161276381612705565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c315784516001600160a01b031683529383019391830191600101612c0c565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612c6757600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122062f482bebfe2ea1a567bf0b556e3fc87d2cbdb8d5aa49e079d1c482b411aea9164736f6c634300081100338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x6080604052600436106102975760003560e01c8063715018a61161015a578063b6f7f681116100c1578063dc4c7dbc1161007a578063dc4c7dbc146107f4578063dd62ed3e1461080a578063e01af92c14610850578063e2f4560514610870578063f2fde38b14610886578063f9d0831a146108a657600080fd5b8063b6f7f6811461073e578063bb85c6d11461075e578063c02466681461077e578063c43876591461079e578063d2fcc001146107b4578063d56d229d146107d457600080fd5b806395d89b411161011357806395d89b411461067a578063a457c2d71461068f578063a8a69b9d146106af578063a9059cbb146106e8578063aa4bde2814610708578063afa4f3b21461071e57600080fd5b8063715018a6146105dc57806375f0a874146105f15780637b3c83b114610611578063880bcbc1146106275780638a8c523c146106475780638da5cb5b1461065c57600080fd5b80632ce86fbf116101fe5780634fbee193116101b75780634fbee1931461050257806356a6cabf1461053b57806359136fa51461055b5780635fc2e596146105715780636ddd17131461058757806370a08231146105a657600080fd5b80632ce86fbf14610450578063313ce56714610466578063391518e11461048257806339509351146104a257806349bd5a5e146104c25780634ada218b146104e257600080fd5b806318d9ceae1161025057806318d9ceae1461038157806321a9d82a146103ba57806323b872dd146103d457806327a14fc2146103f45780632a6c7dba146104165780632ba86bf21461043657600080fd5b80630105d0fd146102a357806306fdde03146102cc578063095ea7b3146102ee57806315e53df91461031e5780631694505e1461033457806318160ddd1461036c57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b9601a5481565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b506102e16108c6565b6040516102c391906126b7565b3480156102fa57600080fd5b5061030e61030936600461271a565b610958565b60405190151581526020016102c3565b34801561032a57600080fd5b506102b9600d5481565b34801561034057600080fd5b50600654610354906001600160a01b031681565b6040516001600160a01b0390911681526020016102c3565b34801561037857600080fd5b506002546102b9565b34801561038d57600080fd5b5061030e61039c366004612746565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156103c657600080fd5b5060165461030e9060ff1681565b3480156103e057600080fd5b5061030e6103ef36600461276a565b61096f565b34801561040057600080fd5b5061041461040f3660046127ab565b610a25565b005b34801561042257600080fd5b506104146104313660046127d2565b610b2b565b34801561044257600080fd5b5060195461030e9060ff1681565b34801561045c57600080fd5b506102b9600a5481565b34801561047257600080fd5b50604051601281526020016102c3565b34801561048e57600080fd5b5061041461049d366004612746565b610c0a565b3480156104ae57600080fd5b5061030e6104bd36600461271a565b610d4f565b3480156104ce57600080fd5b50600754610354906001600160a01b031681565b3480156104ee57600080fd5b5060145461030e9062010000900460ff1681565b34801561050e57600080fd5b5061030e61051d366004612746565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561054757600080fd5b506104146105563660046127d2565b610d8b565b34801561056757600080fd5b506102b9601b5481565b34801561057d57600080fd5b506102b9600b5481565b34801561059357600080fd5b5060145461030e90610100900460ff1681565b3480156105b257600080fd5b506102b96105c1366004612746565b6001600160a01b031660009081526020819052604090205490565b3480156105e857600080fd5b50610414610e6f565b3480156105fd57600080fd5b50601154610354906001600160a01b031681565b34801561061d57600080fd5b506102b960095481565b34801561063357600080fd5b506104146106423660046127ef565b610ee3565b34801561065357600080fd5b50610414610fff565b34801561066857600080fd5b506005546001600160a01b0316610354565b34801561068657600080fd5b506102e16110be565b34801561069b57600080fd5b5061030e6106aa36600461271a565b6110cd565b3480156106bb57600080fd5b5061030e6106ca366004612746565b6001600160a01b031660009081526015602052604090205460ff1690565b3480156106f457600080fd5b5061030e61070336600461271a565b611166565b34801561071457600080fd5b506102b960175481565b34801561072a57600080fd5b506104146107393660046127ab565b611173565b34801561074a57600080fd5b50610414610759366004612828565b61125d565b34801561076a57600080fd5b50610414610779366004612746565b6113cc565b34801561078a57600080fd5b506104146107993660046127ef565b61151d565b3480156107aa57600080fd5b506102b9600e5481565b3480156107c057600080fd5b506104146107cf3660046127ef565b611622565b3480156107e057600080fd5b50601254610354906001600160a01b031681565b34801561080057600080fd5b506102b9600c5481565b34801561081657600080fd5b506102b961082536600461284a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561085c57600080fd5b5061041461086b3660046127d2565b611736565b34801561087c57600080fd5b506102b960135481565b34801561089257600080fd5b506104146108a1366004612746565b6117e7565b3480156108b257600080fd5b506104146108c1366004612746565b6118d2565b6060600380546108d590612878565b80601f016020809104026020016040519081016040528092919081815260200182805461090190612878565b801561094e5780601f106109235761010080835404028352916020019161094e565b820191906000526020600020905b81548152906001019060200180831161093157829003601f168201915b5050505050905090565b6000610965338484611a7e565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610a0f5782811015610a025760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610a0f8533858403611a7e565b610a1a858585611ba2565b506001949350505050565b6005546001600160a01b03163314610a4f5760405162461bcd60e51b81526004016109f9906128b2565b6064610a5d6012600a6129e1565b600254610a6a91906129f0565b610a7491906129f0565b811015610ad95760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b60648201526084016109f9565b610ae56012600a6129e1565b610aef9082612a12565b60178190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942906020015b60405180910390a150565b6005546001600160a01b03163314610b555760405162461bcd60e51b81526004016109f9906128b2565b60165460ff16151581151503610bc35760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b60648201526084016109f9565b6016805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610b20565b6005546001600160a01b03163314610c345760405162461bcd60e51b81526004016109f9906128b2565b6011546001600160a01b0390811690821603610c9d5760405162461bcd60e51b815260206004820152602260248201527f4e46542077616c6c657420697320616c72656164792074686174206164647265604482015261737360f01b60648201526084016109f9565b6001600160a01b038116610d015760405162461bcd60e51b815260206004820152602560248201527f4e46542077616c6c65742063616e6e6f7420626520746865207a65726f206164604482015264647265737360d81b60648201526084016109f9565b601280546001600160a01b0319166001600160a01b0383169081179091556040519081527f91e9aa2b3d76331674b6d806ea764d8760e47cd228ca58d176052d21e234188f90602001610b20565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610965918590610d86908690612a29565b611a7e565b6005546001600160a01b03163314610db55760405162461bcd60e51b81526004016109f9906128b2565b60195460ff16151581151503610e285760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b60648201526084016109f9565b6019805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610b20565b6005546001600160a01b03163314610e995760405162461bcd60e51b81526004016109f9906128b2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f0d5760405162461bcd60e51b81526004016109f9906128b2565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503610f4d5760405162461bcd60e51b81526004016109f990612a3c565b306001600160a01b03831603610f9f5760405162461bcd60e51b815260206004820152601760248201527621b0b713ba1039b2ba103a3434b99030b2323932b9b99760491b60448201526064016109f9565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6005546001600160a01b031633146110295760405162461bcd60e51b81526004016109f9906128b2565b60145462010000900460ff16156110825760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e000000000000000060448201526064016109f9565b6014805462ffff001916620101001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b6060600480546108d590612878565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561114f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109f9565b61115c3385858403611a7e565b5060019392505050565b6000610965338484611ba2565b6005546001600160a01b0316331461119d5760405162461bcd60e51b81526004016109f9906128b2565b620f42406111aa60025490565b6111b491906129f0565b81116112285760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c790060648201526084016109f9565b60138190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610b20565b6005546001600160a01b031633146112875760405162461bcd60e51b81526004016109f9906128b2565b6103e86112966012600a6129e1565b6002546112a391906129f0565b6112ad91906129f0565b82101580156112e157506103e86112c66012600a6129e1565b6002546112d391906129f0565b6112dd91906129f0565b8110155b6113535760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c790060648201526084016109f9565b61135f6012600a6129e1565b6113699083612a12565b601a556113786012600a6129e1565b6113829082612a12565b601b819055601a546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131926113c0928252602082015260400190565b60405180910390a15050565b6005546001600160a01b031633146113f65760405162461bcd60e51b81526004016109f9906128b2565b6011546001600160a01b03908116908216036114655760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b60648201526084016109f9565b6001600160a01b0381166114cf5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b60648201526084016109f9565b601180546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610b20565b6005546001600160a01b031633146115475760405162461bcd60e51b81526004016109f9906128b2565b6001600160a01b03821660009081526008602052604090205481151560ff9091161515036115ca5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016109f9565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610ff3565b6005546001600160a01b0316331461164c5760405162461bcd60e51b81526004016109f9906128b2565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361168c5760405162461bcd60e51b81526004016109f990612a3c565b306001600160a01b038316036116de5760405162461bcd60e51b815260206004820152601760248201527621b0b713ba1039b2ba103a3434b99030b2323932b9b99760491b60448201526064016109f9565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101610ff3565b6005546001600160a01b031633146117605760405162461bcd60e51b81526004016109f9906128b2565b801515601460019054906101000a900460ff161515036117cd5760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b60648201526084016109f9565b601480549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146118115760405162461bcd60e51b81526004016109f9906128b2565b6001600160a01b0381166118765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109f9565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118fc5760405162461bcd60e51b81526004016109f9906128b2565b306001600160a01b0382160361197a5760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e7300000000000000000060648201526084016109f9565b6001600160a01b0381166119965761199233476120a1565b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156119df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a039190612a80565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a779190612a99565b5050505b50565b6001600160a01b038316611ae05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109f9565b6001600160a01b038216611b415760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109f9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611bc85760405162461bcd60e51b81526004016109f990612ab6565b6001600160a01b038216611bee5760405162461bcd60e51b81526004016109f990612afb565b60145462010000900460ff1680611c1d57506001600160a01b03831660009081526008602052604090205460ff165b80611c4057506001600160a01b03821660009081526008602052604090205460ff165b611c8c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c656421000000000000000060448201526064016109f9565b80600003611ca557611ca083836000612150565b505050565b60195460ff1615611d87576007546001600160a01b0384811691161480611cd957506007546001600160a01b038381169116145b8015611cfe57506001600160a01b03831660009081526018602052604090205460ff16155b8015611d2357506001600160a01b03821660009081526018602052604090205460ff16155b15611d87576007546001600160a01b0390811690841603611d6557601a54811115611d605760405162461bcd60e51b81526004016109f990612b3e565b611d87565b601b54811115611d875760405162461bcd60e51b81526004016109f990612b3e565b3060009081526020819052604090205460135481108015908190611dae575060145460ff16155b8015611dc757506007546001600160a01b038581169116145b8015611de257506000601054600f54611de09190612a29565b115b8015611df55750601454610100900460ff165b15611ebf576014805460ff19166001179055601054600f54600091611e1991612a29565b90506000600a54600954611e2d9190612a29565b90506000600e54600d54600c54600b54611e479190612a29565b611e519190612a29565b611e5b9190612a29565b90508115611e8757600083611e708488612a12565b611e7a91906129f0565b9050611e85816122a4565b505b8015611eb157600083611e9a8388612a12565b611ea491906129f0565b9050611eaf816124ef565b505b50506014805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff1680611efe57506001600160a01b03851660009081526008602052604090205460ff165b80611f0b575060145460ff165b15611f1857506000611f5a565b6007546001600160a01b0390811690871603611f375750600f54611f5a565b6007546001600160a01b0390811690861603611f565750601054611f5a565b5060005b8015611f935760006064611f6e8387612a12565b611f7891906129f0565b9050611f848186612b9b565b9450611f91873083612150565b505b60165460ff161561208e576001600160a01b03861660009081526015602052604090205460ff16158015611fe057506001600160a01b03851660009081526015602052604090205460ff16155b8015611ffa57506007546001600160a01b03868116911614155b1561208e576001600160a01b0385166000908152602081905260409020546017546120258683612a29565b111561208c5760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b60648201526084016109f9565b505b612099868686612150565b505050505050565b6000814710156120f35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109f9565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612140576040519150601f19603f3d011682016040523d82523d6000602084013e612145565b606091505b509095945050505050565b6001600160a01b0383166121765760405162461bcd60e51b81526004016109f990612ab6565b6001600160a01b03821661219c5760405162461bcd60e51b81526004016109f990612afb565b6001600160a01b038316600090815260208190526040902054818110156122145760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109f9565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061224b908490612a29565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161229791815260200190565b60405180910390a3611a77565b60006122b16002836129f0565b905060006122bf8284612b9b565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106122f9576122f9612bae565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123769190612bc4565b8160018151811061238957612389612bae565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906123cf908790600090869030904290600401612be1565b600060405180830381600087803b1580156123e957600080fd5b505af11580156123fd573d6000803e3d6000fd5b505050506000824761240f9190612b9b565b60065460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af115801561247e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124a39190612c52565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061252857612528612bae565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a59190612bc4565b816001815181106125b8576125b8612bae565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906125fe908690600090869030904290600401612be1565b600060405180830381600087803b15801561261857600080fd5b505af115801561262c573d6000803e3d6000fd5b505050506000824761263e9190612b9b565b905061266061264e6002836129f0565b6011546001600160a01b0316906120a1565b50601254612677906001600160a01b0316476120a1565b5060408051858152602081018390527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a150505050565b600060208083528351808285015260005b818110156126e4578581018301518582016040015282016126c8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a7b57600080fd5b6000806040838503121561272d57600080fd5b823561273881612705565b946020939093013593505050565b60006020828403121561275857600080fd5b813561276381612705565b9392505050565b60008060006060848603121561277f57600080fd5b833561278a81612705565b9250602084013561279a81612705565b929592945050506040919091013590565b6000602082840312156127bd57600080fd5b5035919050565b8015158114611a7b57600080fd5b6000602082840312156127e457600080fd5b8135612763816127c4565b6000806040838503121561280257600080fd5b823561280d81612705565b9150602083013561281d816127c4565b809150509250929050565b6000806040838503121561283b57600080fd5b50508035926020909101359150565b6000806040838503121561285d57600080fd5b823561286881612705565b9150602083013561281d81612705565b600181811c9082168061288c57607f821691505b6020821081036128ac57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561293857816000190482111561291e5761291e6128e7565b8085161561292b57918102915b93841c9390800290612902565b509250929050565b60008261294f57506001610969565b8161295c57506000610969565b8160018114612972576002811461297c57612998565b6001915050610969565b60ff84111561298d5761298d6128e7565b50506001821b610969565b5060208310610133831016604e8410600b84101617156129bb575081810a610969565b6129c583836128fd565b80600019048211156129d9576129d96128e7565b029392505050565b600061276360ff841683612940565b600082612a0d57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610969576109696128e7565b80820180821115610969576109696128e7565b60208082526024908201527f4163636f756e7420697320616c72656164792073657420746f207468617420736040820152637461746560e01b606082015260800190565b600060208284031215612a9257600080fd5b5051919050565b600060208284031215612aab57600080fd5b8151612763816127c4565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b81810381811115610969576109696128e7565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612bd657600080fd5b815161276381612705565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c315784516001600160a01b031683529383019391830191600101612c0c565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612c6757600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122062f482bebfe2ea1a567bf0b556e3fc87d2cbdb8d5aa49e079d1c482b411aea9164736f6c63430008110033
Deployed Bytecode Sourcemap
21625:15198:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34891:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;34891:39:0;;;;;;;;16910:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17824:169::-;;;;;;;;;;-1:-1:-1;17824:169:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;17824:169:0;1205:187:1;22028:27:0;;;;;;;;;;;;;;;;21714:41;;;;;;;;;;-1:-1:-1;21714:41:0;;;;-1:-1:-1;;;;;21714:41:0;;;;;;-1:-1:-1;;;;;1587:32:1;;;1569:51;;1557:2;1542:18;21714:41:0;1397:229:1;17231:108:0;;;;;;;;;;-1:-1:-1;17319:12:0;;17231:108;;36679:141;;;;;;;;;;-1:-1:-1;36679:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;36778:34:0;36754:4;36778:34;;;:25;:34;;;;;;;;;36679:141;33299:36;;;;;;;;;;-1:-1:-1;33299:36:0;;;;;;;;18001:573;;;;;;;;;;-1:-1:-1;18001:573:0;;;;;:::i;:::-;;:::i;33877:340::-;;;;;;;;;;-1:-1:-1;33877:340:0;;;;;:::i;:::-;;:::i;:::-;;33589:280;;;;;;;;;;-1:-1:-1;33589:280:0;;;;;:::i;:::-;;:::i;34842:42::-;;;;;;;;;;-1:-1:-1;34842:42:0;;;;;;;;21902:34;;;;;;;;;;;;;;;;17130:93;;;;;;;;;;-1:-1:-1;17130:93:0;;17213:2;3040:36:1;;3028:2;3013:18;17130:93:0;2898:184:1;27137:331:0;;;;;;;;;;-1:-1:-1;27137:331:0;;;;;:::i;:::-;;:::i;18582:215::-;;;;;;;;;;-1:-1:-1;18582:215:0;;;;;:::i;:::-;;:::i;21762:29::-;;;;;;;;;;-1:-1:-1;21762:29:0;;;;-1:-1:-1;;;;;21762:29:0;;;27476:26;;;;;;;;;;-1:-1:-1;27476:26:0;;;;;;;;;;;26617:125;;;;;;;;;;-1:-1:-1;26617:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;26706:28:0;26682:4;26706:28;;;:19;:28;;;;;;;;;26617:125;35256:311;;;;;;;;;;-1:-1:-1;35256:311:0;;;;;:::i;:::-;;:::i;34937:40::-;;;;;;;;;;;;;;;;21945:33;;;;;;;;;;;;;;;;22326:26;;;;;;;;;;-1:-1:-1;22326:26:0;;;;;;;;;;;17347:127;;;;;;;;;;-1:-1:-1;17347:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17448:18:0;17421:7;17448:18;;;;;;;;;;;;17347:127;16097:148;;;;;;;;;;;;;:::i;22178:31::-;;;;;;;;;;-1:-1:-1;22178:31:0;;;;-1:-1:-1;;;;;22178:31:0;;;21862:33;;;;;;;;;;;;;;;;36272:399;;;;;;;;;;-1:-1:-1;36272:399:0;;;;;:::i;:::-;;:::i;27511:209::-;;;;;;;;;;;;;:::i;15883:79::-;;;;;;;;;;-1:-1:-1;15948:6:0;;-1:-1:-1;;;;;15948:6:0;15883:79;;17018:104;;;;;;;;;;;;;:::i;18805:413::-;;;;;;;;;;-1:-1:-1;18805:413:0;;;;;:::i;:::-;;:::i;34624:145::-;;;;;;;;;;-1:-1:-1;34624:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;34723:38:0;34699:4;34723:38;;;:29;:38;;;;;;;;;34624:145;17482:175;;;;;;;;;;-1:-1:-1;17482:175:0;;;;;:::i;:::-;;:::i;33342:30::-;;;;;;;;;;;;;;;;31311:304;;;;;;;;;;-1:-1:-1;31311:304:0;;;;;:::i;:::-;;:::i;35575:689::-;;;;;;;;;;-1:-1:-1;35575:689:0;;;;;:::i;:::-;;:::i;26750:379::-;;;;;;;;;;-1:-1:-1;26750:379:0;;;;;:::i;:::-;;:::i;26319:290::-;;;;;;;;;;-1:-1:-1;26319:290:0;;;;;:::i;:::-;;:::i;22062:28::-;;;;;;;;;;;;;;;;34225:391;;;;;;;;;;-1:-1:-1;34225:391:0;;;;;:::i;:::-;;:::i;22216:27::-;;;;;;;;;;-1:-1:-1;22216:27:0;;;;-1:-1:-1;;;;;22216:27:0;;;21985:34;;;;;;;;;;;;;;;;17665:151;;;;;;;;;;-1:-1:-1;17665:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;17781:18:0;;;17754:7;17781:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17665:151;31124:179;;;;;;;;;;-1:-1:-1;31124:179:0;;;;;:::i;:::-;;:::i;22252:34::-;;;;;;;;;;;;;;;;16253:244;;;;;;;;;;-1:-1:-1;16253:244:0;;;;;:::i;:::-;;:::i;25846:465::-;;;;;;;;;;-1:-1:-1;25846:465:0;;;;;:::i;:::-;;:::i;16910:100::-;16964:13;16997:5;16990:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16910:100;:::o;17824:169::-;17907:4;17924:39;15286:10;17947:7;17956:6;17924:8;:39::i;:::-;-1:-1:-1;17981:4:0;17824:169;;;;;:::o;18001:573::-;-1:-1:-1;;;;;18185:19:0;;18141:4;18185:19;;;:11;:19;;;;;;;;15286:10;18185:33;;;;;;;;-1:-1:-1;;18233:37:0;;18229:265;;18315:6;18295:16;:26;;18287:79;;;;-1:-1:-1;;;18287:79:0;;4915:2:1;18287:79:0;;;4897:21:1;4954:2;4934:18;;;4927:30;4993:34;4973:18;;;4966:62;-1:-1:-1;;;5044:18:1;;;5037:38;5092:19;;18287:79:0;;;;;;;;;18410:57;18419:6;15286:10;18460:6;18441:16;:25;18410:8;:57::i;:::-;18506:36;18516:6;18524:9;18535:6;18506:9;:36::i;:::-;-1:-1:-1;18562:4:0;;18001:573;-1:-1:-1;;;;18001:573:0:o;33877:340::-;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;34028:3:::1;34007:16;17213:2:::0;34007::::1;:16;:::i;:::-;17319:12:::0;;33990:34:::1;;;;:::i;:::-;33989:42;;;;:::i;:::-;33969:16;:62;;33961:120;;;::::0;-1:-1:-1;;;33961:120:0;;7422:2:1;33961:120:0::1;::::0;::::1;7404:21:1::0;7461:2;7441:18;;;7434:30;7500:34;7480:18;;;7473:62;-1:-1:-1;;;7551:18:1;;;7544:43;7604:19;;33961:120:0::1;7220:409:1::0;33961:120:0::1;34130:16;17213:2:::0;34130::::1;:16;:::i;:::-;34110:37;::::0;:16;:37:::1;:::i;:::-;34092:15;:55:::0;;;34165:44:::1;::::0;160:25:1;;;34165:44:0::1;::::0;148:2:1;133:18;34165:44:0::1;;;;;;;;33877:340:::0;:::o;33589:280::-;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;33683:21:::1;::::0;::::1;;33673:31;;::::0;::::1;;::::0;33665:88:::1;;;::::0;-1:-1:-1;;;33665:88:0;;8009:2:1;33665:88:0::1;::::0;::::1;7991:21:1::0;8048:2;8028:18;;;8021:30;8087:34;8067:18;;;8060:62;-1:-1:-1;;;8138:18:1;;;8131:43;8191:19;;33665:88:0::1;7807:409:1::0;33665:88:0::1;33764:21;:30:::0;;-1:-1:-1;;33764:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33812:49:::1;::::0;33764:30:::1;33839:21:::0;;;1370:14:1;1363:22;1345:41;;33812:49:0::1;::::0;1333:2:1;1318:18;33812:49:0::1;1205:187:1::0;27137:331:0;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;27237:15:::1;::::0;-1:-1:-1;;;;;27237:15:0;;::::1;27221:31:::0;;::::1;::::0;27213:77:::1;;;::::0;-1:-1:-1;;;27213:77:0;;8423:2:1;27213:77:0::1;::::0;::::1;8405:21:1::0;8462:2;8442:18;;;8435:30;8501:34;8481:18;;;8474:62;-1:-1:-1;;;8552:18:1;;;8545:32;8594:19;;27213:77:0::1;8221:398:1::0;27213:77:0::1;-1:-1:-1::0;;;;;27309:26:0;::::1;27301:75;;;::::0;-1:-1:-1;;;27301:75:0;;8826:2:1;27301:75:0::1;::::0;::::1;8808:21:1::0;8865:2;8845:18;;;8838:30;8904:34;8884:18;;;8877:62;-1:-1:-1;;;8955:18:1;;;8948:35;9000:19;;27301:75:0::1;8624:401:1::0;27301:75:0::1;27387:11;:26:::0;;-1:-1:-1;;;;;;27387:26:0::1;-1:-1:-1::0;;;;;27387:26:0;::::1;::::0;;::::1;::::0;;;27431:29:::1;::::0;1569:51:1;;;27431:29:0::1;::::0;1557:2:1;1542:18;27431:29:0::1;1397:229:1::0;18582:215:0;15286:10;18670:4;18719:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18719:34:0;;;;;;;;;;18670:4;;18687:80;;18710:7;;18719:47;;18756:10;;18719:47;:::i;:::-;18687:8;:80::i;35256:311::-;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;35355:26:::1;::::0;::::1;;35345:36;;::::0;::::1;;::::0;35337:99:::1;;;::::0;-1:-1:-1;;;35337:99:0;;9362:2:1;35337:99:0::1;::::0;::::1;9344:21:1::0;9401:2;9381:18;;;9374:30;9440:34;9420:18;;;9413:62;-1:-1:-1;;;9491:18:1;;;9484:48;9549:19;;35337:99:0::1;9160:414:1::0;35337:99:0::1;35447:26;:35:::0;;-1:-1:-1;;35447:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35500:59:::1;::::0;35447:35:::1;35532:26:::0;;;1370:14:1;1363:22;1345:41;;35500:59:0::1;::::0;1333:2:1;1318:18;35500:59:0::1;1205:187:1::0;16097:148:0;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;16188:6:::1;::::0;16167:40:::1;::::0;16204:1:::1;::::0;-1:-1:-1;;;;;16188:6:0::1;::::0;16167:40:::1;::::0;16204:1;;16167:40:::1;16218:6;:19:::0;;-1:-1:-1;;;;;;16218:19:0::1;::::0;;16097:148::o;36272:399::-;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36382:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;:45;::::1;;:34;::::0;;::::1;:45;;::::0;36373:95:::1;;;;-1:-1:-1::0;;;36373:95:0::1;;;;;;;:::i;:::-;36506:4;-1:-1:-1::0;;;;;36487:24:0;::::1;::::0;36479:60:::1;;;::::0;-1:-1:-1;;;36479:60:0;;10186:2:1;36479:60:0::1;::::0;::::1;10168:21:1::0;10225:2;10205:18;;;10198:30;-1:-1:-1;;;10244:18:1;;;10237:53;10307:18;;36479:60:0::1;9984:347:1::0;36479:60:0::1;-1:-1:-1::0;;;;;36552:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:44;;-1:-1:-1;;36552:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36614:49;;1345:41:1;;;36614:49:0::1;::::0;1318:18:1;36614:49:0::1;;;;;;;;36272:399:::0;;:::o;27511:209::-;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;27574:14:::1;::::0;;;::::1;;;27573:15;27565:52;;;::::0;-1:-1:-1;;;27565:52:0;;10538:2:1;27565:52:0::1;::::0;::::1;10520:21:1::0;10577:2;10557:18;;;10550:30;10616:26;10596:18;;;10589:54;10660:18;;27565:52:0::1;10336:348:1::0;27565:52:0::1;27628:14;:21:::0;;-1:-1:-1;;27660:18:0;;;;;27696:16:::1;::::0;::::1;::::0;-1:-1:-1;;27696:16:0::1;27511:209::o:0;17018:104::-;17074:13;17107:7;17100:14;;;;;:::i;18805:413::-;15286:10;18898:4;18942:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18942:34:0;;;;;;;;;;18995:35;;;;18987:85;;;;-1:-1:-1;;;18987:85:0;;10891:2:1;18987:85:0;;;10873:21:1;10930:2;10910:18;;;10903:30;10969:34;10949:18;;;10942:62;-1:-1:-1;;;11020:18:1;;;11013:35;11065:19;;18987:85:0;10689:401:1;18987:85:0;19108:67;15286:10;19131:7;19159:15;19140:16;:34;19108:8;:67::i;:::-;-1:-1:-1;19206:4:0;;18805:413;-1:-1:-1;;;18805:413:0:o;17482:175::-;17568:4;17585:42;15286:10;17609:9;17620:6;17585:9;:42::i;31311:304::-;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;31426:9:::1;31410:13;17319:12:::0;;;17231:108;31410:13:::1;:25;;;;:::i;:::-;31398:9;:37;31390:113;;;::::0;-1:-1:-1;;;31390:113:0;;11297:2:1;31390:113:0::1;::::0;::::1;11279:21:1::0;11336:2;11316:18;;;11309:30;11375:34;11355:18;;;11348:62;11446:33;11426:18;;;11419:61;11497:19;;31390:113:0::1;11095:427:1::0;31390:113:0::1;31514:18;:30:::0;;;31562:45:::1;::::0;160:25:1;;;31562:45:0::1;::::0;148:2:1;133:18;31562:45:0::1;14:177:1::0;35575:689:0;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;35798:5:::1;35777:16;17213:2:::0;35777::::1;:16;:::i;:::-;17319:12:::0;;35760:34:::1;;;;:::i;:::-;35759:44;;;;:::i;:::-;35730:24;:73;;:164;;;;-1:-1:-1::0;35889:5:0::1;35868:16;17213:2:::0;35868::::1;:16;:::i;:::-;17319:12:::0;;35851:34:::1;;;;:::i;:::-;35850:44;;;;:::i;:::-;35821:25;:73;;35730:164;35708:278;;;::::0;-1:-1:-1;;;35708:278:0;;11729:2:1;35708:278:0::1;::::0;::::1;11711:21:1::0;11768:2;11748:18;;;11741:30;11807:34;11787:18;;;11780:62;11878:33;11858:18;;;11851:61;11929:19;;35708:278:0::1;11527:427:1::0;35708:278:0::1;36054:16;17213:2:::0;36054::::1;:16;:::i;:::-;36025:46;::::0;:24;:46:::1;:::i;:::-;35998:23;:73:::0;36138:16:::1;17213:2:::0;36138::::1;:16;:::i;:::-;36109:46;::::0;:25;:46:::1;:::i;:::-;36082:24;:73:::0;;;36206:23:::1;::::0;36173:83:::1;::::0;::::1;::::0;::::1;::::0;12133:25:1;;12189:2;12174:18;;12167:34;12121:2;12106:18;;11959:248;36173:83:0::1;;;;;;;;35575:689:::0;;:::o;26750:379::-;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;26864:15:::1;::::0;-1:-1:-1;;;;;26864:15:0;;::::1;26844:35:::0;;::::1;::::0;26836:87:::1;;;::::0;-1:-1:-1;;;26836:87:0;;12414:2:1;26836:87:0::1;::::0;::::1;12396:21:1::0;12453:2;12433:18;;;12426:30;12492:34;12472:18;;;12465:62;-1:-1:-1;;;12543:18:1;;;12536:38;12591:19;;26836:87:0::1;12212:404:1::0;26836:87:0::1;-1:-1:-1::0;;;;;26942:30:0;::::1;26934:85;;;::::0;-1:-1:-1;;;26934:85:0;;12823:2:1;26934:85:0::1;::::0;::::1;12805:21:1::0;12862:2;12842:18;;;12835:30;12901:34;12881:18;;;12874:62;-1:-1:-1;;;12952:18:1;;;12945:41;13003:19;;26934:85:0::1;12621:407:1::0;26934:85:0::1;27030:15;:34:::0;;-1:-1:-1;;;;;;27030:34:0::1;-1:-1:-1::0;;;;;27030:34:0;::::1;::::0;;::::1;::::0;;;27082:39:::1;::::0;1569:51:1;;;27082:39:0::1;::::0;1557:2:1;1542:18;27082:39:0::1;1397:229:1::0;26319:290:0;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26413:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;26405:94:::1;;;::::0;-1:-1:-1;;;26405:94:0;;13235:2:1;26405:94:0::1;::::0;::::1;13217:21:1::0;13274:2;13254:18;;;13247:30;13313:34;13293:18;;;13286:62;-1:-1:-1;;;13364:18:1;;;13357:40;13414:19;;26405:94:0::1;13033:406:1::0;26405:94:0::1;-1:-1:-1::0;;;;;26510:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;26510:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26567:34;;1345:41:1;;;26567:34:0::1;::::0;1318:18:1;26567:34:0::1;1205:187:1::0;34225:391:0;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34325:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:49;::::1;;:38;::::0;;::::1;:49;;::::0;34316:98:::1;;;;-1:-1:-1::0;;;34316:98:0::1;;;;;;;:::i;:::-;34452:4;-1:-1:-1::0;;;;;34433:24:0;::::1;::::0;34425:60:::1;;;::::0;-1:-1:-1;;;34425:60:0;;10186:2:1;34425:60:0::1;::::0;::::1;10168:21:1::0;10225:2;10205:18;;;10198:30;-1:-1:-1;;;10244:18:1;;;10237:53;10307:18;;34425:60:0::1;9984:347:1::0;34425:60:0::1;-1:-1:-1::0;;;;;34498:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;34498:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34564:44;;1345:41:1;;;34564:44:0::1;::::0;1318:18:1;34564:44:0::1;1205:187:1::0;31124:179:0;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;31215:8:::1;31200:23;;:11;;;;;;;;;;;:23;;::::0;31192:70:::1;;;::::0;-1:-1:-1;;;31192:70:0;;13646:2:1;31192:70:0::1;::::0;::::1;13628:21:1::0;13685:2;13665:18;;;13658:30;13724:34;13704:18;;;13697:62;-1:-1:-1;;;13775:18:1;;;13768:32;13817:19;;31192:70:0::1;13444:398:1::0;31192:70:0::1;31273:11;:22:::0;;;::::1;;;;-1:-1:-1::0;;31273:22:0;;::::1;::::0;;;::::1;::::0;;31124:179::o;16253:244::-;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16342:22:0;::::1;16334:73;;;::::0;-1:-1:-1;;;16334:73:0;;14049:2:1;16334:73:0::1;::::0;::::1;14031:21:1::0;14088:2;14068:18;;;14061:30;14127:34;14107:18;;;14100:62;-1:-1:-1;;;14178:18:1;;;14171:36;14224:19;;16334:73:0::1;13847:402:1::0;16334:73:0::1;16444:6;::::0;16423:38:::1;::::0;-1:-1:-1;;;;;16423:38:0;;::::1;::::0;16444:6:::1;::::0;16423:38:::1;::::0;16444:6:::1;::::0;16423:38:::1;16472:6;:17:::0;;-1:-1:-1;;;;;;16472:17:0::1;-1:-1:-1::0;;;;;16472:17:0;;;::::1;::::0;;;::::1;::::0;;16253:244::o;25846:465::-;16010:6;;-1:-1:-1;;;;;16010:6:0;15286:10;16010:22;16002:67;;;;-1:-1:-1;;;16002:67:0;;;;;;;:::i;:::-;25942:4:::1;-1:-1:-1::0;;;;;25925:22:0;::::1;::::0;25917:90:::1;;;::::0;-1:-1:-1;;;25917:90:0;;14456:2:1;25917:90:0::1;::::0;::::1;14438:21:1::0;14495:2;14475:18;;;14468:30;14534:34;14514:18;;;14507:62;14605:25;14585:18;;;14578:53;14648:19;;25917:90:0::1;14254:419:1::0;25917:90:0::1;-1:-1:-1::0;;;;;26022:21:0;::::1;26018:127;;26060:52;26068:10;26090:21;26060:29;:52::i;:::-;;25846:465:::0;:::o;26018:127::-:1;26217:35;::::0;-1:-1:-1;;;26217:35:0;;26246:4:::1;26217:35;::::0;::::1;1569:51:1::0;26182:5:0;;26155:17:::1;::::0;-1:-1:-1;;;;;26217:20:0;::::1;::::0;::::1;::::0;1542:18:1;;26217:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26263:40;::::0;-1:-1:-1;;;26263:40:0;;26283:10:::1;26263:40;::::0;::::1;15041:51:1::0;15108:18;;;15101:34;;;26199:53:0;;-1:-1:-1;;;;;;26263:19:0;::::1;::::0;::::1;::::0;15014:18:1;;26263:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25906:405;;16080:1;25846:465:::0;:::o;20973:380::-;-1:-1:-1;;;;;21109:19:0;;21101:68;;;;-1:-1:-1;;;21101:68:0;;15598:2:1;21101:68:0;;;15580:21:1;15637:2;15617:18;;;15610:30;15676:34;15656:18;;;15649:62;-1:-1:-1;;;15727:18:1;;;15720:34;15771:19;;21101:68:0;15396:400:1;21101:68:0;-1:-1:-1;;;;;21188:21:0;;21180:68;;;;-1:-1:-1;;;21180:68:0;;16003:2:1;21180:68:0;;;15985:21:1;16042:2;16022:18;;;16015:30;16081:34;16061:18;;;16054:62;-1:-1:-1;;;16132:18:1;;;16125:32;16174:19;;21180:68:0;15801:398:1;21180:68:0;-1:-1:-1;;;;;21261:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21313:32;;160:25:1;;;21313:32:0;;133:18:1;21313:32:0;;;;;;;20973:380;;;:::o;27728:3388::-;-1:-1:-1;;;;;27825:18:0;;27817:68;;;;-1:-1:-1;;;27817:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27904:16:0;;27896:64;;;;-1:-1:-1;;;27896:64:0;;;;;;;:::i;:::-;27979:14;;;;;;;;:43;;-1:-1:-1;;;;;;27997:25:0;;;;;;:19;:25;;;;;;;;27979:43;:70;;;-1:-1:-1;;;;;;28026:23:0;;;;;;:19;:23;;;;;;;;27979:70;27971:107;;;;-1:-1:-1;;;27971:107:0;;17216:2:1;27971:107:0;;;17198:21:1;17255:2;17235:18;;;17228:30;17294:26;17274:18;;;17267:54;17338:18;;27971:107:0;17014:348:1;27971:107:0;28102:6;28112:1;28102:11;28098:93;;28130:28;28146:4;28152:2;28156:1;28130:15;:28::i;:::-;27728:3388;;;:::o;28098:93::-;28207:26;;;;28203:752;;;28273:13;;-1:-1:-1;;;;;28265:21:0;;;28273:13;;28265:21;;:44;;-1:-1:-1;28296:13:0;;-1:-1:-1;;;;;28290:19:0;;;28296:13;;28290:19;28265:44;28264:99;;;;-1:-1:-1;;;;;;28332:31:0;;;;;;:25;:31;;;;;;;;28331:32;28264:99;:151;;;;-1:-1:-1;;;;;;28386:29:0;;;;;;:25;:29;;;;;;;;28385:30;28264:151;28260:684;;;28462:13;;-1:-1:-1;;;;;28462:13:0;;;28454:21;;;;28450:479;;28544:23;;28534:6;:33;;28500:180;;;;-1:-1:-1;;;28500:180:0;;;;;;;:::i;:::-;28450:479;;;28773:24;;28763:6;:34;;28729:180;;;;-1:-1:-1;;;28729:180:0;;;;;;;:::i;:::-;29010:4;28961:28;17448:18;;;;;;;;;;;29068;;29044:42;;;;;;;29103:33;;-1:-1:-1;29128:8:0;;;;29127:9;29103:33;:69;;;;-1:-1:-1;29159:13:0;;-1:-1:-1;;;;;29153:19:0;;;29159:13;;29153:19;29103:69;:124;;;;;29226:1;29207:16;;29189:15;;:34;;;;:::i;:::-;:38;29103:124;:152;;;;-1:-1:-1;29244:11:0;;;;;;;29103:152;29099:924;;;29282:8;:15;;-1:-1:-1;;29282:15:0;29293:4;29282:15;;;29351:16;;29333:15;;29282:8;;29333:34;;;:::i;:::-;29314:53;;29382:22;29427:18;;29407:17;;:38;;;;:::i;:::-;29382:63;;29460:22;29540:12;;29526:11;;29505:18;;29485:17;;:38;;;;:::i;:::-;:52;;;;:::i;:::-;:67;;;;:::i;:::-;29460:92;-1:-1:-1;29573:18:0;;29569:183;;29612:23;29678:8;29638:37;29661:14;29638:20;:37;:::i;:::-;:48;;;;:::i;:::-;29612:74;;29705:31;29720:15;29705:14;:31::i;:::-;29593:159;29569:183;29784:18;;29780:189;;29823:23;29889:8;29849:37;29872:14;29849:20;:37;:::i;:::-;:48;;;;:::i;:::-;29823:74;;29916:37;29937:15;29916:20;:37::i;:::-;29804:165;29780:189;-1:-1:-1;;29995:8:0;:16;;-1:-1:-1;;29995:16:0;;;-1:-1:-1;29099:924:0;-1:-1:-1;;;;;30068:25:0;;30035:18;30068:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;30097:23:0;;;;;;:19;:23;;;;;;;;30068:52;:64;;;-1:-1:-1;30124:8:0;;;;30068:64;30064:333;;;-1:-1:-1;30162:1:0;30064:333;;;30193:13;;-1:-1:-1;;;;;30193:13:0;;;30185:21;;;;30181:216;;-1:-1:-1;30236:15:0;;30181:216;;;30279:13;;-1:-1:-1;;;;;30279:13:0;;;30273:19;;;;30269:128;;-1:-1:-1;30322:16:0;;30269:128;;;-1:-1:-1;30384:1:0;30269:128;30413:14;;30409:183;;30444:12;30483:3;30460:19;30469:10;30460:6;:19;:::i;:::-;30459:27;;;;:::i;:::-;30444:42;-1:-1:-1;30510:13:0;30444:42;30510:6;:13;:::i;:::-;30501:22;;30538:42;30554:4;30568;30575;30538:15;:42::i;:::-;30429:163;30409:183;30608:21;;;;30604:459;;;-1:-1:-1;;;;;30661:35:0;;;;;;:29;:35;;;;;;;;30660:36;:92;;;;-1:-1:-1;;;;;;30719:33:0;;;;;;:29;:33;;;;;;;;30718:34;30660:92;:132;;;;-1:-1:-1;30779:13:0;;-1:-1:-1;;;;;30773:19:0;;;30779:13;;30773:19;;30660:132;30656:396;;;-1:-1:-1;;;;;17448:18:0;;30827:15;17448:18;;;;;;;;;;;30928:15;;30908:16;30918:6;17448:18;30908:16;:::i;:::-;:35;;30878:158;;;;-1:-1:-1;;;30878:158:0;;18130:2:1;30878:158:0;;;18112:21:1;18169:2;18149:18;;;18142:30;18208:34;18188:18;;;18181:62;-1:-1:-1;;;18259:18:1;;;18252:46;18315:19;;30878:158:0;17928:412:1;30878:158:0;30808:244;30656:396;31075:33;31091:4;31097:2;31101:6;31075:15;:33::i;:::-;27806:3310;;;27728:3388;;;:::o;11116:266::-;11195:4;11244:6;11219:21;:31;;11211:73;;;;-1:-1:-1;;;11211:73:0;;18547:2:1;11211:73:0;;;18529:21:1;18586:2;18566:18;;;18559:30;18625:31;18605:18;;;18598:59;18674:18;;11211:73:0;18345:353:1;11211:73:0;11298:12;11316:9;-1:-1:-1;;;;;11316:14:0;11338:6;11316:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11297:52:0;;11116:266;-1:-1:-1;;;;;11116:266:0:o;19226:733::-;-1:-1:-1;;;;;19366:20:0;;19358:70;;;;-1:-1:-1;;;19358:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19447:23:0;;19439:71;;;;-1:-1:-1;;;19439:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19607:17:0;;19583:21;19607:17;;;;;;;;;;;19643:23;;;;19635:74;;;;-1:-1:-1;;;19635:74:0;;19115:2:1;19635:74:0;;;19097:21:1;19154:2;19134:18;;;19127:30;19193:34;19173:18;;;19166:62;-1:-1:-1;;;19244:18:1;;;19237:36;19290:19;;19635:74:0;18913:402:1;19635:74:0;-1:-1:-1;;;;;19745:17:0;;;:9;:17;;;;;;;;;;;19765:22;;;19745:42;;19809:20;;;;;;;;:30;;19781:6;;19745:9;19809:30;;19781:6;;19809:30;:::i;:::-;;;;;;;;19874:9;-1:-1:-1;;;;;19857:35:0;19866:6;-1:-1:-1;;;;;19857:35:0;;19885:6;19857:35;;;;160:25:1;;148:2;133:18;;14:177;19857:35:0;;;;;;;;19905:46;27728:3388;31623:876;31682:12;31697:10;31706:1;31697:6;:10;:::i;:::-;31682:25;-1:-1:-1;31718:17:0;31738:13;31682:25;31738:6;:13;:::i;:::-;31847:16;;;31861:1;31847:16;;;;;;;;31718:33;;-1:-1:-1;31789:21:0;;31764:22;;31847:16;;;;;;;;;;-1:-1:-1;31847:16:0;31823:40;;31892:4;31874;31879:1;31874:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31874:23:0;;;:7;;;;;;;;;;:23;;;;31918:15;;:22;;;-1:-1:-1;;;31918:22:0;;;;:15;;;;;:20;;:22;;;;;31874:7;;31918:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31908:4;31913:1;31908:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31908:32:0;;;:7;;;;;;;;;:32;31953:15;;:179;;-1:-1:-1;;;31953:179:0;;:15;;;:66;;:179;;32034:4;;31953:15;;32069:4;;32096;;32116:15;;31953:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32153:18;32198:14;32174:21;:38;;;;:::i;:::-;32225:15;;:205;;-1:-1:-1;;;32225:205:0;;32298:4;32225:205;;;21166:34:1;21216:18;;;21209:34;;;32225:15:0;21259:18:1;;;21252:34;;;21302:18;;;21295:34;32382:6:0;21345:19:1;;;21338:44;32404:15:0;21398:19:1;;;21391:35;32153:59:0;;-1:-1:-1;;;;;;32225:15:0;;:31;;32153:59;;21100:19:1;;32225:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;32448:43:0;;;21950:25:1;;;22006:2;21991:18;;21984:34;;;22034:18;;;22027:34;;;32448:43:0;;-1:-1:-1;21938:2:1;21923:18;32448:43:0;;;;;;;31671:828;;;;;31623:876;:::o;32507:715::-;32660:16;;;32674:1;32660:16;;;;;;;;32602:21;;32577:22;;32660:16;32674:1;32660:16;;;;;;;;;;-1:-1:-1;32660:16:0;32636:40;;32705:4;32687;32692:1;32687:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32687:23:0;;;:7;;;;;;;;;;:23;;;;32731:15;;:22;;;-1:-1:-1;;;32731:22:0;;;;:15;;;;;:20;;:22;;;;;32687:7;;32731:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32721:4;32726:1;32721:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32721:32:0;;;:7;;;;;;;;;:32;32766:15;;:186;;-1:-1:-1;;;32766:186:0;;:15;;;:66;;:186;;32847:11;;32766:15;;32889:4;;32916;;32936:15;;32766:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32965:18;33010:14;32986:21;:38;;;;:::i;:::-;32965:59;-1:-1:-1;33037:50:0;33072:14;33085:1;32965:59;33072:14;:::i;:::-;33045:15;;-1:-1:-1;;;;;33045:15:0;;33037:34;:50::i;:::-;-1:-1:-1;33106:11:0;;33098:53;;-1:-1:-1;;;;;33106:11:0;33129:21;33098:30;:53::i;:::-;-1:-1:-1;33169:45:0;;;12133:25:1;;;12189:2;12174:18;;12167:34;;;33169:45:0;;12106:18:1;33169:45:0;;;;;;;32566:656;;;32507:715;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1631:247::-;1690:6;1743:2;1731:9;1722:7;1718:23;1714:32;1711:52;;;1759:1;1756;1749:12;1711:52;1798:9;1785:23;1817:31;1842:5;1817:31;:::i;:::-;1867:5;1631:247;-1:-1:-1;;;1631:247:1:o;1883:456::-;1960:6;1968;1976;2029:2;2017:9;2008:7;2004:23;2000:32;1997:52;;;2045:1;2042;2035:12;1997:52;2084:9;2071:23;2103:31;2128:5;2103:31;:::i;:::-;2153:5;-1:-1:-1;2210:2:1;2195:18;;2182:32;2223:33;2182:32;2223:33;:::i;:::-;1883:456;;2275:7;;-1:-1:-1;;;2329:2:1;2314:18;;;;2301:32;;1883:456::o;2344:180::-;2403:6;2456:2;2444:9;2435:7;2431:23;2427:32;2424:52;;;2472:1;2469;2462:12;2424:52;-1:-1:-1;2495:23:1;;2344:180;-1:-1:-1;2344:180:1:o;2529:118::-;2615:5;2608:13;2601:21;2594:5;2591:32;2581:60;;2637:1;2634;2627:12;2652:241;2708:6;2761:2;2749:9;2740:7;2736:23;2732:32;2729:52;;;2777:1;2774;2767:12;2729:52;2816:9;2803:23;2835:28;2857:5;2835:28;:::i;3295:382::-;3360:6;3368;3421:2;3409:9;3400:7;3396:23;3392:32;3389:52;;;3437:1;3434;3427:12;3389:52;3476:9;3463:23;3495:31;3520:5;3495:31;:::i;:::-;3545:5;-1:-1:-1;3602:2:1;3587:18;;3574:32;3615:30;3574:32;3615:30;:::i;:::-;3664:7;3654:17;;;3295:382;;;;;:::o;3682:248::-;3750:6;3758;3811:2;3799:9;3790:7;3786:23;3782:32;3779:52;;;3827:1;3824;3817:12;3779:52;-1:-1:-1;;3850:23:1;;;3920:2;3905:18;;;3892:32;;-1:-1:-1;3682:248:1:o;3935:388::-;4003:6;4011;4064:2;4052:9;4043:7;4039:23;4035:32;4032:52;;;4080:1;4077;4070:12;4032:52;4119:9;4106:23;4138:31;4163:5;4138:31;:::i;:::-;4188:5;-1:-1:-1;4245:2:1;4230:18;;4217:32;4258:33;4217:32;4258:33;:::i;4328:380::-;4407:1;4403:12;;;;4450;;;4471:61;;4525:4;4517:6;4513:17;4503:27;;4471:61;4578:2;4570:6;4567:14;4547:18;4544:38;4541:161;;4624:10;4619:3;4615:20;4612:1;4605:31;4659:4;4656:1;4649:15;4687:4;4684:1;4677:15;4541:161;;4328:380;;;:::o;5122:356::-;5324:2;5306:21;;;5343:18;;;5336:30;5402:34;5397:2;5382:18;;5375:62;5469:2;5454:18;;5122:356::o;5483:127::-;5544:10;5539:3;5535:20;5532:1;5525:31;5575:4;5572:1;5565:15;5599:4;5596:1;5589:15;5615:422;5704:1;5747:5;5704:1;5761:270;5782:7;5772:8;5769:21;5761:270;;;5841:4;5837:1;5833:6;5829:17;5823:4;5820:27;5817:53;;;5850:18;;:::i;:::-;5900:7;5890:8;5886:22;5883:55;;;5920:16;;;;5883:55;5999:22;;;;5959:15;;;;5761:270;;;5765:3;5615:422;;;;;:::o;6042:806::-;6091:5;6121:8;6111:80;;-1:-1:-1;6162:1:1;6176:5;;6111:80;6210:4;6200:76;;-1:-1:-1;6247:1:1;6261:5;;6200:76;6292:4;6310:1;6305:59;;;;6378:1;6373:130;;;;6285:218;;6305:59;6335:1;6326:10;;6349:5;;;6373:130;6410:3;6400:8;6397:17;6394:43;;;6417:18;;:::i;:::-;-1:-1:-1;;6473:1:1;6459:16;;6488:5;;6285:218;;6587:2;6577:8;6574:16;6568:3;6562:4;6559:13;6555:36;6549:2;6539:8;6536:16;6531:2;6525:4;6522:12;6518:35;6515:77;6512:159;;;-1:-1:-1;6624:19:1;;;6656:5;;6512:159;6703:34;6728:8;6722:4;6703:34;:::i;:::-;6773:6;6769:1;6765:6;6761:19;6752:7;6749:32;6746:58;;;6784:18;;:::i;:::-;6822:20;;6042:806;-1:-1:-1;;;6042:806:1:o;6853:140::-;6911:5;6940:47;6981:4;6971:8;6967:19;6961:4;6940:47;:::i;6998:217::-;7038:1;7064;7054:132;;7108:10;7103:3;7099:20;7096:1;7089:31;7143:4;7140:1;7133:15;7171:4;7168:1;7161:15;7054:132;-1:-1:-1;7200:9:1;;6998:217::o;7634:168::-;7707:9;;;7738;;7755:15;;;7749:22;;7735:37;7725:71;;7776:18;;:::i;9030:125::-;9095:9;;;9116:10;;;9113:36;;;9129:18;;:::i;9579:400::-;9781:2;9763:21;;;9820:2;9800:18;;;9793:30;9859:34;9854:2;9839:18;;9832:62;-1:-1:-1;;;9925:2:1;9910:18;;9903:34;9969:3;9954:19;;9579:400::o;14678:184::-;14748:6;14801:2;14789:9;14780:7;14776:23;14772:32;14769:52;;;14817:1;14814;14807:12;14769:52;-1:-1:-1;14840:16:1;;14678:184;-1:-1:-1;14678:184:1:o;15146:245::-;15213:6;15266:2;15254:9;15245:7;15241:23;15237:32;15234:52;;;15282:1;15279;15272:12;15234:52;15314:9;15308:16;15333:28;15355:5;15333:28;:::i;16204:401::-;16406:2;16388:21;;;16445:2;16425:18;;;16418:30;16484:34;16479:2;16464:18;;16457:62;-1:-1:-1;;;16550:2:1;16535:18;;16528:35;16595:3;16580:19;;16204:401::o;16610:399::-;16812:2;16794:21;;;16851:2;16831:18;;;16824:30;16890:34;16885:2;16870:18;;16863:62;-1:-1:-1;;;16956:2:1;16941:18;;16934:33;16999:3;16984:19;;16610:399::o;17367:423::-;17569:2;17551:21;;;17608:2;17588:18;;;17581:30;17647:34;17642:2;17627:18;;17620:62;17718:29;17713:2;17698:18;;17691:57;17780:3;17765:19;;17367:423::o;17795:128::-;17862:9;;;17883:11;;;17880:37;;;17897:18;;:::i;19452:127::-;19513:10;19508:3;19504:20;19501:1;19494:31;19544:4;19541:1;19534:15;19568:4;19565:1;19558:15;19584:251;19654:6;19707:2;19695:9;19686:7;19682:23;19678:32;19675:52;;;19723:1;19720;19713:12;19675:52;19755:9;19749:16;19774:31;19799:5;19774:31;:::i;19840:980::-;20102:4;20150:3;20139:9;20135:19;20181:6;20170:9;20163:25;20207:2;20245:6;20240:2;20229:9;20225:18;20218:34;20288:3;20283:2;20272:9;20268:18;20261:31;20312:6;20347;20341:13;20378:6;20370;20363:22;20416:3;20405:9;20401:19;20394:26;;20455:2;20447:6;20443:15;20429:29;;20476:1;20486:195;20500:6;20497:1;20494:13;20486:195;;;20565:13;;-1:-1:-1;;;;;20561:39:1;20549:52;;20656:15;;;;20621:12;;;;20597:1;20515:9;20486:195;;;-1:-1:-1;;;;;;;20737:32:1;;;;20732:2;20717:18;;20710:60;-1:-1:-1;;;20801:3:1;20786:19;20779:35;20698:3;19840:980;-1:-1:-1;;;19840:980:1:o;21437:306::-;21525:6;21533;21541;21594:2;21582:9;21573:7;21569:23;21565:32;21562:52;;;21610:1;21607;21600:12;21562:52;21639:9;21633:16;21623:26;;21689:2;21678:9;21674:18;21668:25;21658:35;;21733:2;21722:9;21718:18;21712:25;21702:35;;21437:306;;;;;:::o
Swarm Source
ipfs://62f482bebfe2ea1a567bf0b556e3fc87d2cbdb8d5aa49e079d1c482b411aea91
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.