ERC-20
Overview
Max Total Supply
1,000,000,000 ITX
Holders
1,603
Market
Price
$0.00 @ 0.000000 ETH (-2.31%)
Onchain Market Cap
$31,850.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000534720419576197 ITXValue
$0.00 ( ~0 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | Uniswap V2 (Ethereum) | 0X23D894FB4A0F551F2F923FC85E09819D1F3894B2-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 | $0.00 0.0000000 Eth | $47.40 1,454,686.116 0X23D894FB4A0F551F2F923FC85E09819D1F3894B2 | 100.0000% |
Contract Name:
Intellix
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-12-25 */ /* SPDX-License-Identifier: MIT */ pragma solidity 0.8.19; 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 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; } } 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 Intellix is ERC20, Ownable { using Address for address payable; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; mapping (address => bool) private _isExcludedFromFees; mapping (address => uint256) public _tierOneTimestamp; uint256 public basicThreshold; mapping (address => uint256) public _tierTwoTimestamp; uint256 public bronzeThreshold; mapping (address => uint256) public _tierThreeTimestamp; uint256 public silverThreshold; mapping (address => uint256) public _tierFourTimestamp; uint256 public goldThreshold; mapping (address => uint256) public _tierFiveTimestamp; uint256 public platinumThreshold; uint256 public daysToHold; uint256 public ITXVaultFeeOnBuy; uint256 public ITXVaultFeeOnSell; uint256 public ITXRevFeeOnBuy; uint256 public ITXRevFeeOnSell; uint256 public totalBuyFee; uint256 public totalSellFee; address public ITXVaultWallet; address public ITXRevWallet; uint256 public swapTokensAtAmount; bool private swapping; bool public swapEnabled; event ExcludeFromFees(address indexed account, bool isExcluded); event ITXVaultWalletChanged(address ITXVaultWallet); event ITXRevWalletChanged(address ITXRevWallet); event UpdateFees(uint256 ITXVaultFeeOnBuy, uint256 ITXVaultFeeOnSell, uint256 ITXRevFeeOnBuy, uint256 ITXRevFeeOnSell); event SwapAndSendITXVault(uint256 tokensSwapped, uint256 bnbSend); event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount); event TradingEnabled(bool tradingEnabled); constructor () ERC20("Intellix", "ITX") { address router; address pinkLock; if (block.chainid == 56) { router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router pinkLock = 0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE; // BSC PinkLock } else if (block.chainid == 97) { router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router pinkLock = 0x5E5b9bE5fd939c578ABE5800a90C566eeEbA44a5; // BSC Testnet PinkLock } else if (block.chainid == 1 || block.chainid == 5) { router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet pinkLock = 0x71B5759d73262FBb223956913ecF4ecC51057641; // ETH PinkLock } else { revert(); } 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); ITXVaultFeeOnBuy = 3; ITXVaultFeeOnSell = 3; ITXRevFeeOnBuy = 2; ITXRevFeeOnSell = 2; totalBuyFee = ITXVaultFeeOnBuy + ITXRevFeeOnBuy; totalSellFee = ITXVaultFeeOnSell + ITXRevFeeOnSell; ITXVaultWallet = 0x4602254ABC766D31267F1501aF5f88c094A0402e; ITXRevWallet = 0x1287E0A24F2Fb3E832993e3484E14Af63fE5C5f4; maxWalletLimitEnabled = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[address(0xdead)] = true; _isExcludedFromMaxWalletLimit[ITXVaultWallet] = true; _isExcludedFromMaxWalletLimit[ITXRevWallet] = true; _isExcludedFromMaxWalletLimit[pinkLock] = true; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(0xdead)] = true; _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[pinkLock] = true; _isExcludedFromFees[ITXVaultWallet] = true; _isExcludedFromFees[ITXRevWallet] = true; _mint(owner(), 1e9 * (10 ** decimals())); swapTokensAtAmount = totalSupply() / 5_000; maxWalletAmount = totalSupply() * 20 / 1000; basicThreshold = 100_000; bronzeThreshold = 500_000; silverThreshold = 1_000_000; goldThreshold = 5_000_000; platinumThreshold = 10_000_000; daysToHold = 30 days; 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 setTierSettings(uint256 _basicThreshold, uint256 _bronzeThreshold, uint256 _silverThreshold, uint256 _goldThreshold, uint256 _platinumThreshold, uint256 _daysToHold) external onlyOwner { basicThreshold = _basicThreshold; bronzeThreshold = _bronzeThreshold; silverThreshold = _silverThreshold; goldThreshold = _goldThreshold; platinumThreshold = _platinumThreshold; daysToHold = _daysToHold; require(_daysToHold >= 1 days && _daysToHold <= 40 days, "Wrong format"); require(_basicThreshold <= 1e9, "Wrong format"); require(_bronzeThreshold <= 1e9, "Wrong format"); require(_silverThreshold <= 1e9, "Wrong format"); require(_goldThreshold <= 1e9, "Wrong format"); require(_platinumThreshold <= 1e9, "Wrong format"); } function setTiers(address account) internal { if (balanceOf(account) >= basicThreshold * (10 ** decimals()) && _tierOneTimestamp[account] == 0){ _tierOneTimestamp[account] = block.timestamp; } else if (balanceOf(account) < basicThreshold * (10 ** decimals())) { _tierOneTimestamp[account] = 0; } if (balanceOf(account) >= bronzeThreshold * (10 ** decimals()) && _tierTwoTimestamp[account] == 0){ _tierTwoTimestamp[account] = block.timestamp; } else if (balanceOf(account) < bronzeThreshold * (10 ** decimals())) { _tierTwoTimestamp[account] = 0; } if (balanceOf(account) >= silverThreshold * (10 ** decimals()) && _tierThreeTimestamp[account] == 0){ _tierThreeTimestamp[account] = block.timestamp; } else if (balanceOf(account) < silverThreshold * (10 ** decimals())) { _tierThreeTimestamp[account] = 0; } if (balanceOf(account) >= goldThreshold * (10 ** decimals()) && _tierFourTimestamp[account] == 0){ _tierFourTimestamp[account] = block.timestamp; } else if (balanceOf(account) < goldThreshold * (10 ** decimals())) { _tierFourTimestamp[account] = 0; } if (balanceOf(account) >= platinumThreshold * (10 ** decimals()) && _tierFiveTimestamp[account] == 0){ _tierFiveTimestamp[account] = block.timestamp; } else if (balanceOf(account) < platinumThreshold * (10 ** decimals())) { _tierFiveTimestamp[account] = 0; } } function getTier(address account) public view returns (string memory) { if (block.timestamp > _tierFiveTimestamp[account] + daysToHold && _tierFiveTimestamp[account] != 0 && balanceOf(account) >= platinumThreshold) { return "Platinum Tier"; } if (block.timestamp > _tierFourTimestamp[account] + daysToHold && _tierFourTimestamp[account] != 0 && balanceOf(account) >= goldThreshold) { return "Gold Tier"; } if (block.timestamp > _tierThreeTimestamp[account] + daysToHold && _tierThreeTimestamp[account] != 0 && balanceOf(account) >= silverThreshold) { return "Silver Tier"; } if (block.timestamp > _tierTwoTimestamp[account] + daysToHold && _tierTwoTimestamp[account] != 0 && balanceOf(account) >= bronzeThreshold) { return "Bronze Tier"; } if (block.timestamp > _tierOneTimestamp[account] + daysToHold && _tierOneTimestamp[account] != 0 && balanceOf(account) >= basicThreshold) { return "Basic Tier"; } return "Entry Level"; } 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 updateFees(uint256 _ITXVaultFeeOnBuy, uint256 _ITXVaultFeeOnSell, uint256 _ITXRevFeeOnBuy, uint256 _ITXRevFeeOnSell) external onlyOwner { ITXVaultFeeOnSell = _ITXVaultFeeOnSell; ITXVaultFeeOnBuy = _ITXVaultFeeOnBuy; ITXRevFeeOnBuy = _ITXRevFeeOnBuy; ITXRevFeeOnSell = _ITXRevFeeOnSell; totalBuyFee = ITXVaultFeeOnBuy + ITXRevFeeOnBuy; totalSellFee = ITXVaultFeeOnSell + ITXRevFeeOnSell; require(totalBuyFee <= 5, "Total Fees cannot exceed the maximum"); require(totalSellFee <= 5, "Total Fees cannot exceed the maximum"); emit UpdateFees(ITXVaultFeeOnSell, ITXVaultFeeOnBuy, ITXRevFeeOnBuy, ITXRevFeeOnSell); } function changeITXVaultWallet(address _ITXVaultWallet) external onlyOwner{ require(_ITXVaultWallet != ITXVaultWallet,"ITXVault wallet is already that address"); require(_ITXVaultWallet != address(0),"ITXVault wallet cannot be the zero address"); ITXVaultWallet = _ITXVaultWallet; emit ITXVaultWalletChanged(ITXVaultWallet); } function changeITXRevtWallet(address _ITXRevWallet) external onlyOwner{ require(_ITXRevWallet != ITXRevWallet,"ITXRev wallet is already that address"); require(_ITXRevWallet != address(0),"ITXRev wallet cannot be the zero address"); ITXRevWallet = _ITXRevWallet; emit ITXRevWalletChanged(ITXRevWallet); } bool public tradingEnabled; uint256 tradingBlock; uint256 tradingTime; function enableTrading() external onlyOwner{ require(!tradingEnabled, "Trading already enabled."); tradingEnabled = true; swapEnabled = true; tradingBlock = block.number; tradingTime = block.timestamp; emit TradingEnabled(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; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && !swapping && to == uniswapV2Pair && totalBuyFee + totalSellFee > 0 && swapEnabled ) { swapping = true; swapAndSendITX(contractTokenBalance); swapping = false; } uint256 _totalFees; if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) { _totalFees = 0; } else if (block.number <= tradingBlock + 1){ _totalFees = 99; } else if (block.timestamp <= tradingTime + 2 hours) { if (from == uniswapV2Pair) { _totalFees = 5; } else if (to == uniswapV2Pair) { _totalFees = 20; } } else if (from == uniswapV2Pair) { _totalFees = totalBuyFee; } else if (to == uniswapV2Pair) { _totalFees = totalSellFee; } 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); setTiers(from); setTiers(to); } 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 swapAndSendITX(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; // (totalBuyFee + totalSellFee) always greater than 0, checked in transfer func. uint256 vaultBalance = (ITXVaultFeeOnBuy + ITXVaultFeeOnSell) * newBalance / (totalBuyFee + totalSellFee); if (vaultBalance > 0){ payable(ITXVaultWallet).sendValue(vaultBalance); } if (newBalance - vaultBalance > 0) { payable(ITXRevWallet).sendValue(newBalance - vaultBalance); } emit SwapAndSendITXVault(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]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"ITXRevWallet","type":"address"}],"name":"ITXRevWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"ITXVaultWallet","type":"address"}],"name":"ITXVaultWalletChanged","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":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":"bnbSend","type":"uint256"}],"name":"SwapAndSendITXVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"tradingEnabled","type":"bool"}],"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ITXVaultFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ITXVaultFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ITXRevFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ITXRevFeeOnSell","type":"uint256"}],"name":"UpdateFees","type":"event"},{"inputs":[],"name":"ITXRevFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ITXRevFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ITXRevWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ITXVaultFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ITXVaultFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ITXVaultWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_tierFiveTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_tierFourTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_tierOneTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_tierThreeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_tierTwoTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[],"name":"basicThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bronzeThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ITXRevWallet","type":"address"}],"name":"changeITXRevtWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ITXVaultWallet","type":"address"}],"name":"changeITXVaultWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daysToHold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTier","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platinumThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","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":[{"internalType":"uint256","name":"_basicThreshold","type":"uint256"},{"internalType":"uint256","name":"_bronzeThreshold","type":"uint256"},{"internalType":"uint256","name":"_silverThreshold","type":"uint256"},{"internalType":"uint256","name":"_goldThreshold","type":"uint256"},{"internalType":"uint256","name":"_platinumThreshold","type":"uint256"},{"internalType":"uint256","name":"_daysToHold","type":"uint256"}],"name":"setTierSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"silverThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"inputs":[{"internalType":"uint256","name":"_ITXVaultFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_ITXVaultFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_ITXRevFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_ITXRevFeeOnSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405180604001604052806008815260200167092dce8cad8d8d2f60c31b81525060405180604001604052806003815260200162092a8b60eb1b8152508160039081620000609190620008b2565b5060046200006f8282620008b2565b505050600062000084620005f460201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600080466038036200011157507310ed43c718714eb63d5aa57b78b54704e256024e905073407993575c91ce7643a4d4ccacc9a98c36ee1bbe6200019b565b466061036200014d575073d99d1c33f9fc3444f8101754abc46c52416550d19050735e5b9be5fd939c578abe5800a90c566eeeba44a56200019b565b46600114806200015d5750466005145b15620001965750737a250d5630b4cf539739df2c5dacb4c659f2488d90507371b5759d73262fbb223956913ecf4ecc510576416200019b565b600080fd5b60008290506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020791906200097e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027b91906200097e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ef91906200097e565b600680546001600160a01b038086166001600160a01b03199283168117909355600780549185169190921617905590915062000330903090600019620005f8565b6003601481905560158190556002601681905560178190556200035391620009c6565b601855601754601554620003689190620009c6565b601955601a80546001600160a01b0319908116734602254abc766d31267f1501af5f88c094a0402e17909155601b8054909116731287e0a24f2fb3e832993e3484e14af63fe5c5f41790556021805460ff1916600190811790915560206000620003da6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081529280528183208054851660019081179091557fcbaad361c71be11fa6bdbe0e740c6259be964b32182da2da47b54472477c6a178054861682179055601a54821684528284208054861682179055601b54821684528284208054861682179055908716835290822080549093168117909255600890620004926005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560089093527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805485166001908117909155308452828420805486168217905587821684528284208054861682179055601a54821684528284208054861682179055601b549091168352912080549092161790556200056f6200054b6005546001600160a01b031690565b620005596012600a62000adf565b6200056990633b9aca0062000af0565b62000724565b6113886200057c60025490565b62000588919062000b0a565b601c556103e86200059860025490565b620005a590601462000af0565b620005b1919062000b0a565b6022555050620186a0600a5550506207a120600c55620f4240600e55624c4b406010556298968060125562278d00601355601d805462ffff001916905562000b2d565b3390565b6001600160a01b038316620006605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006c35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000657565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166200077c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000657565b8060026000828254620007909190620009c6565b90915550506001600160a01b03821660009081526020819052604081208054839290620007bf908490620009c6565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200083957607f821691505b6020821081036200085a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200080957600081815260208120601f850160051c81016020861015620008895750805b601f850160051c820191505b81811015620008aa5782815560010162000895565b505050505050565b81516001600160401b03811115620008ce57620008ce6200080e565b620008e681620008df845462000824565b8462000860565b602080601f8311600181146200091e5760008415620009055750858301515b600019600386901b1c1916600185901b178555620008aa565b600085815260208120601f198616915b828110156200094f578886015182559484019460019091019084016200092e565b50858210156200096e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200099157600080fd5b81516001600160a01b0381168114620009a957600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620009dc57620009dc620009b0565b92915050565b600181815b8085111562000a2357816000190482111562000a075762000a07620009b0565b8085161562000a1557918102915b93841c9390800290620009e7565b509250929050565b60008262000a3c57506001620009dc565b8162000a4b57506000620009dc565b816001811462000a64576002811462000a6f5762000a8f565b6001915050620009dc565b60ff84111562000a835762000a83620009b0565b50506001821b620009dc565b5060208310610133831016604e8410600b841016171562000ab4575081810a620009dc565b62000ac08383620009e2565b806000190482111562000ad75762000ad7620009b0565b029392505050565b6000620009a960ff84168362000a2b565b8082028115828204841417620009dc57620009dc620009b0565b60008262000b2857634e487b7160e01b600052601260045260246000fd5b500490565b6130ae8062000b3d6000396000f3fe6080604052600436106103545760003560e01c806370a08231116101c6578063b45aae52116100f7578063dd62ed3e11610095578063ed9600311161006f578063ed960031146109b8578063f2a9fa9a146109e5578063f2fde38b14610a12578063f9d0831a14610a3257600080fd5b8063dd62ed3e1461093c578063e01af92c14610982578063e2f45605146109a257600080fd5b8063c6d410f9116100d1578063c6d410f9146108da578063d2fcc001146108f0578063d5b2c19114610910578063dc3532a11461092657600080fd5b8063b45aae521461087a578063c02466681461089a578063c6616ba1146108ba57600080fd5b8063a457c2d711610164578063a9ea64541161013e578063a9ea645414610801578063aa4bde2814610817578063af4716721461082d578063afa4f3b21461085a57600080fd5b8063a457c2d714610789578063a8a69b9d146107a9578063a9059cbb146107e157600080fd5b80638da5cb5b116101a05780638da5cb5b1461072a57806395d89b41146107485780639d9241ec1461075d578063a0063bbc1461077357600080fd5b806370a08231146106e0578063715018a6146107005780638a8c523c1461071557600080fd5b80633b07dd7e116102a05780634fe48c451161023e578063644c30fe11610218578063644c30fe1461067557806365a6b5a1146106955780636ddd1713146106ab57806370330488146106ca57600080fd5b80634fe48c451461063357806359b107b9146106495780635da736a71461065f57600080fd5b806346ba52341161027a57806346ba52341461059a57806349bd5a5e146105ba5780634ada218b146105da5780634fbee193146105fa57600080fd5b80633b07dd7e1461052057806342a0798c1461054d57806342af738e1461057a57600080fd5b806321a9d82a1161030d57806327cf6f9e116102e757806327cf6f9e146104a45780632a6c7dba146104c4578063313ce567146104e4578063395093511461050057600080fd5b806321a9d82a1461044a57806323b872dd1461046457806327a14fc21461048457600080fd5b806301ef24bc1461036057806306fdde0314610389578063095ea7b3146103ab578063114ef6ca146103db5780631694505e146103fd57806318160ddd1461043557600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660165481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5061039e610a52565b6040516103809190612ac1565b3480156103b757600080fd5b506103cb6103c6366004612b24565b610ae4565b6040519015158152602001610380565b3480156103e757600080fd5b506103fb6103f6366004612b50565b610afb565b005b34801561040957600080fd5b5060065461041d906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b34801561044157600080fd5b50600254610376565b34801561045657600080fd5b506021546103cb9060ff1681565b34801561047057600080fd5b506103cb61047f366004612b74565b610c56565b34801561049057600080fd5b506103fb61049f366004612bb5565b610d07565b3480156104b057600080fd5b506103fb6104bf366004612b50565b610e06565b3480156104d057600080fd5b506103fb6104df366004612bdc565b610f55565b3480156104f057600080fd5b5060405160128152602001610380565b34801561050c57600080fd5b506103cb61051b366004612b24565b611034565b34801561052c57600080fd5b5061037661053b366004612b50565b60116020526000908152604090205481565b34801561055957600080fd5b50610376610568366004612b50565b600d6020526000908152604090205481565b34801561058657600080fd5b50601a5461041d906001600160a01b031681565b3480156105a657600080fd5b506103fb6105b5366004612bf9565b611070565b3480156105c657600080fd5b5060075461041d906001600160a01b031681565b3480156105e657600080fd5b50601d546103cb9062010000900460ff1681565b34801561060657600080fd5b506103cb610615366004612b50565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561063f57600080fd5b5061037660175481565b34801561065557600080fd5b5061037660185481565b34801561066b57600080fd5b50610376600c5481565b34801561068157600080fd5b50601b5461041d906001600160a01b031681565b3480156106a157600080fd5b5061037660145481565b3480156106b757600080fd5b50601d546103cb90610100900460ff1681565b3480156106d657600080fd5b50610376600e5481565b3480156106ec57600080fd5b506103766106fb366004612b50565b6111a6565b34801561070c57600080fd5b506103fb6111c1565b34801561072157600080fd5b506103fb611235565b34801561073657600080fd5b506005546001600160a01b031661041d565b34801561075457600080fd5b5061039e611315565b34801561076957600080fd5b5061037660195481565b34801561077f57600080fd5b5061037660155481565b34801561079557600080fd5b506103cb6107a4366004612b24565b611324565b3480156107b557600080fd5b506103cb6107c4366004612b50565b6001600160a01b0316600090815260208052604090205460ff1690565b3480156107ed57600080fd5b506103cb6107fc366004612b24565b6113bd565b34801561080d57600080fd5b50610376600a5481565b34801561082357600080fd5b5061037660225481565b34801561083957600080fd5b50610376610848366004612b50565b600f6020526000908152604090205481565b34801561086657600080fd5b506103fb610875366004612bb5565b6113ca565b34801561088657600080fd5b5061039e610895366004612b50565b6114b4565b3480156108a657600080fd5b506103fb6108b5366004612c3c565b61179d565b3480156108c657600080fd5b506103fb6108d5366004612c75565b6118aa565b3480156108e657600080fd5b5061037660105481565b3480156108fc57600080fd5b506103fb61090b366004612c3c565b6119a5565b34801561091c57600080fd5b5061037660125481565b34801561093257600080fd5b5061037660135481565b34801561094857600080fd5b50610376610957366004612ca7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561098e57600080fd5b506103fb61099d366004612bdc565b611af8565b3480156109ae57600080fd5b50610376601c5481565b3480156109c457600080fd5b506103766109d3366004612b50565b600b6020526000908152604090205481565b3480156109f157600080fd5b50610376610a00366004612b50565b60096020526000908152604090205481565b348015610a1e57600080fd5b506103fb610a2d366004612b50565b611ba9565b348015610a3e57600080fd5b506103fb610a4d366004612b50565b611c94565b606060038054610a6190612cd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8d90612cd5565b8015610ada5780601f10610aaf57610100808354040283529160200191610ada565b820191906000526020600020905b815481529060010190602001808311610abd57829003601f168201915b5050505050905090565b6000610af1338484611e40565b5060015b92915050565b6005546001600160a01b03163314610b2e5760405162461bcd60e51b8152600401610b2590612d0f565b60405180910390fd5b601b546001600160a01b0390811690821603610b9a5760405162461bcd60e51b815260206004820152602560248201527f4954585265762077616c6c657420697320616c72656164792074686174206164604482015264647265737360d81b6064820152608401610b25565b6001600160a01b038116610c015760405162461bcd60e51b815260206004820152602860248201527f4954585265762077616c6c65742063616e6e6f7420626520746865207a65726f604482015267206164647265737360c01b6064820152608401610b25565b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9aa41769aec0ad3a162314d2ec9633d01f579f6a87894784874182a27b1bd46f906020015b60405180910390a150565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610cf15782811015610ce45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b25565b610cf18533858403611e40565b610cfc858585611f64565b506001949350505050565b6005546001600160a01b03163314610d315760405162461bcd60e51b8152600401610b2590612d0f565b6064610d3f6012600a612e3e565b600254610d4c9190612e4d565b610d569190612e4d565b811015610dbb5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b6064820152608401610b25565b610dc76012600a612e3e565b610dd19082612e6f565b60228190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb594290602001610c4b565b6005546001600160a01b03163314610e305760405162461bcd60e51b8152600401610b2590612d0f565b601a546001600160a01b0390811690821603610e9e5760405162461bcd60e51b815260206004820152602760248201527f4954585661756c742077616c6c657420697320616c72656164792074686174206044820152666164647265737360c81b6064820152608401610b25565b6001600160a01b038116610f075760405162461bcd60e51b815260206004820152602a60248201527f4954585661756c742077616c6c65742063616e6e6f7420626520746865207a65604482015269726f206164647265737360b01b6064820152608401610b25565b601a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f15afd8bc48542dca4a828cf615d823b6721afdb10bff15343cb49ad62062441f90602001610c4b565b6005546001600160a01b03163314610f7f5760405162461bcd60e51b8152600401610b2590612d0f565b60215460ff16151581151503610fed5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b6064820152608401610b25565b6021805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610c4b565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610af191859061106b908690612e86565b611e40565b6005546001600160a01b0316331461109a5760405162461bcd60e51b8152600401610b2590612d0f565b600a869055600c859055600e8490556010839055601282905560138190556201518081108015906110ce57506234bc008111155b6110ea5760405162461bcd60e51b8152600401610b2590612e99565b633b9aca0086111561110e5760405162461bcd60e51b8152600401610b2590612e99565b633b9aca008511156111325760405162461bcd60e51b8152600401610b2590612e99565b633b9aca008411156111565760405162461bcd60e51b8152600401610b2590612e99565b633b9aca0083111561117a5760405162461bcd60e51b8152600401610b2590612e99565b633b9aca0082111561119e5760405162461bcd60e51b8152600401610b2590612e99565b505050505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111eb5760405162461bcd60e51b8152600401610b2590612d0f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610b2590612d0f565b601d5462010000900460ff16156112b85760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e00000000000000006044820152606401610b25565b601d80546201010062ffff0019909116179081905543601e5542601f556040516201000090910460ff16151581527fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9060200160405180910390a1565b606060048054610a6190612cd5565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b25565b6113b33385858403611e40565b5060019392505050565b6000610af1338484611f64565b6005546001600160a01b031633146113f45760405162461bcd60e51b8152600401610b2590612d0f565b620f424061140160025490565b61140b9190612e4d565b811161147f5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c79006064820152608401610b25565b601c8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610c4b565b6013546001600160a01b0382166000908152601160205260409020546060916114dc91612e86565b4211801561150157506001600160a01b03821660009081526011602052604090205415155b80156115175750601254611514836111a6565b10155b1561154557505060408051808201909152600d81526c283630ba34b73ab6902a34b2b960991b602082015290565b6013546001600160a01b0383166000908152600f602052604090205461156b9190612e86565b4211801561159057506001600160a01b0382166000908152600f602052604090205415155b80156115a657506010546115a3836111a6565b10155b156115d057505060408051808201909152600981526823b7b632102a34b2b960b91b602082015290565b6013546001600160a01b0383166000908152600d60205260409020546115f69190612e86565b4211801561161b57506001600160a01b0382166000908152600d602052604090205415155b80156116315750600e5461162e836111a6565b10155b1561165d57505060408051808201909152600b81526a29b4b63b32b9102a34b2b960a91b602082015290565b6013546001600160a01b0383166000908152600b60205260409020546116839190612e86565b421180156116a857506001600160a01b0382166000908152600b602052604090205415155b80156116be5750600c546116bb836111a6565b10155b156116ea57505060408051808201909152600b81526a213937b73d32902a34b2b960a91b602082015290565b6013546001600160a01b0383166000908152600960205260409020546117109190612e86565b4211801561173557506001600160a01b03821660009081526009602052604090205415155b801561174b5750600a54611748836111a6565b10155b1561177657505060408051808201909152600a8152692130b9b4b1902a34b2b960b11b602082015290565b505060408051808201909152600b81526a115b9d1c9e4813195d995b60aa1b602082015290565b6005546001600160a01b031633146117c75760405162461bcd60e51b8152600401610b2590612d0f565b6001600160a01b03821660009081526008602052604090205481151560ff90911615150361184a5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610b25565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b031633146118d45760405162461bcd60e51b8152600401610b2590612d0f565b60158390556014849055601682905560178190556118f28285612e86565b6018556017546015546119059190612e86565b6019556018546005101561192b5760405162461bcd60e51b8152600401610b2590612ebf565b6005601954111561194e5760405162461bcd60e51b8152600401610b2590612ebf565b6015546014546016546017546040805194855260208501939093529183015260608201527f5c3aee3d65f7eb02cded951435d06b06ef307bc7f57b98975c4a41dc116e711c9060800160405180910390a150505050565b6005546001600160a01b031633146119cf5760405162461bcd60e51b8152600401610b2590612d0f565b6001600160a01b038216600090815260208052604090205481151560ff909116151503611a4a5760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b6064820152608401610b25565b306001600160a01b03831603611aa25760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610b25565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c910161189e565b6005546001600160a01b03163314611b225760405162461bcd60e51b8152600401610b2590612d0f565b801515601d60019054906101000a900460ff16151503611b8f5760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b6064820152608401610b25565b601d80549115156101000261ff0019909216919091179055565b6005546001600160a01b03163314611bd35760405162461bcd60e51b8152600401610b2590612d0f565b6001600160a01b038116611c385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b25565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611cbe5760405162461bcd60e51b8152600401610b2590612d0f565b306001600160a01b03821603611d3c5760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e730000000000000000006064820152608401610b25565b6001600160a01b038116611d5857611d543347612346565b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc59190612f03565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e399190612f1c565b5050505b50565b6001600160a01b038316611ea25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b25565b6001600160a01b038216611f035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b25565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f8a5760405162461bcd60e51b8152600401610b2590612f39565b6001600160a01b038216611fb05760405162461bcd60e51b8152600401610b2590612f7e565b601d5462010000900460ff1680611fdf57506001600160a01b03831660009081526008602052604090205460ff165b8061200257506001600160a01b03821660009081526008602052604090205460ff165b61204e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b25565b8060000361206757612062838360006123f5565b505050565b6000612072306111a6565b601c549091508110801590819061208c5750601d5460ff16155b80156120a557506007546001600160a01b038581169116145b80156120c0575060006019546018546120be9190612e86565b115b80156120d35750601d54610100900460ff165b156120f957601d805460ff191660011790556120ee82612549565b601d805460ff191690555b6001600160a01b03851660009081526008602052604081205460ff168061213857506001600160a01b03851660009081526008602052604090205460ff165b806121455750601d5460ff165b1561215257506000612202565b601e54612160906001612e86565b431161216e57506063612202565b601f5461217d90611c20612e86565b42116121c0576007546001600160a01b03908116908716036121a157506005612202565b6007546001600160a01b03908116908616036121bb575060145b612202565b6007546001600160a01b03908116908716036121df5750601854612202565b6007546001600160a01b03908116908616036121fe5750601954612202565b5060005b801561223b57600060646122168387612e6f565b6122209190612e4d565b905061222c8186612fc1565b94506122398730836123f5565b505b60215460ff1615612329576001600160a01b038616600090815260208052604090205460ff1615801561228657506001600160a01b038516600090815260208052604090205460ff16155b80156122a057506007546001600160a01b03868116911614155b156123295760006122b0866111a6565b6022549091506122c08683612e86565b11156123275760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b6064820152608401610b25565b505b6123348686866123f5565b61233d86612764565b61119e85612764565b6000814710156123985760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b25565b6000836001600160a01b03168360405160006040518083038185875af1925050503d80600081146123e5576040519150601f19603f3d011682016040523d82523d6000602084013e6123ea565b606091505b509095945050505050565b6001600160a01b03831661241b5760405162461bcd60e51b8152600401610b2590612f39565b6001600160a01b0382166124415760405162461bcd60e51b8152600401610b2590612f7e565b6001600160a01b038316600090815260208190526040902054818110156124b95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b25565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124f0908490612e86565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161253c91815260200190565b60405180910390a3611e39565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061258257612582612fd4565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190612fea565b8160018151811061261257612612612fd4565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790612658908690600090869030904290600401613007565b600060405180830381600087803b15801561267257600080fd5b505af1158015612686573d6000803e3d6000fd5b50505050600082476126989190612fc1565b905060006019546018546126ac9190612e86565b826015546014546126bd9190612e86565b6126c79190612e6f565b6126d19190612e4d565b905080156126f157601a546126ef906001600160a01b031682612346565b505b60006126fd8284612fc1565b1115612724576127226127108284612fc1565b601b546001600160a01b031690612346565b505b60408051868152602081018490527f38235d841737e18036f35d868462415317514cba27d7b9e1208ff9137f8ab763910160405180910390a15050505050565b6127706012600a612e3e565b600a5461277d9190612e6f565b612786826111a6565b101580156127aa57506001600160a01b038116600090815260096020526040902054155b156127cf576001600160a01b0381166000908152600960205260409020429055612811565b6127db6012600a612e3e565b600a546127e89190612e6f565b6127f1826111a6565b1015612811576001600160a01b0381166000908152600960205260408120555b61281d6012600a612e3e565b600c5461282a9190612e6f565b612833826111a6565b1015801561285757506001600160a01b0381166000908152600b6020526040902054155b1561287c576001600160a01b0381166000908152600b602052604090204290556128be565b6128886012600a612e3e565b600c546128959190612e6f565b61289e826111a6565b10156128be576001600160a01b0381166000908152600b60205260408120555b6128ca6012600a612e3e565b600e546128d79190612e6f565b6128e0826111a6565b1015801561290457506001600160a01b0381166000908152600d6020526040902054155b15612929576001600160a01b0381166000908152600d6020526040902042905561296b565b6129356012600a612e3e565b600e546129429190612e6f565b61294b826111a6565b101561296b576001600160a01b0381166000908152600d60205260408120555b6129776012600a612e3e565b6010546129849190612e6f565b61298d826111a6565b101580156129b157506001600160a01b0381166000908152600f6020526040902054155b156129d6576001600160a01b0381166000908152600f60205260409020429055612a18565b6129e26012600a612e3e565b6010546129ef9190612e6f565b6129f8826111a6565b1015612a18576001600160a01b0381166000908152600f60205260408120555b612a246012600a612e3e565b601254612a319190612e6f565b612a3a826111a6565b10158015612a5e57506001600160a01b038116600090815260116020526040902054155b15612a7f576001600160a01b03166000908152601160205260409020429055565b612a8b6012600a612e3e565b601254612a989190612e6f565b612aa1826111a6565b1015611e3d576001600160a01b0316600090815260116020526040812055565b600060208083528351808285015260005b81811015612aee57858101830151858201604001528201612ad2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611e3d57600080fd5b60008060408385031215612b3757600080fd5b8235612b4281612b0f565b946020939093013593505050565b600060208284031215612b6257600080fd5b8135612b6d81612b0f565b9392505050565b600080600060608486031215612b8957600080fd5b8335612b9481612b0f565b92506020840135612ba481612b0f565b929592945050506040919091013590565b600060208284031215612bc757600080fd5b5035919050565b8015158114611e3d57600080fd5b600060208284031215612bee57600080fd5b8135612b6d81612bce565b60008060008060008060c08789031215612c1257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612c4f57600080fd5b8235612c5a81612b0f565b91506020830135612c6a81612bce565b809150509250929050565b60008060008060808587031215612c8b57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612cba57600080fd5b8235612cc581612b0f565b91506020830135612c6a81612b0f565b600181811c90821680612ce957607f821691505b602082108103612d0957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612d95578160001904821115612d7b57612d7b612d44565b80851615612d8857918102915b93841c9390800290612d5f565b509250929050565b600082612dac57506001610af5565b81612db957506000610af5565b8160018114612dcf5760028114612dd957612df5565b6001915050610af5565b60ff841115612dea57612dea612d44565b50506001821b610af5565b5060208310610133831016604e8410600b8410161715612e18575081810a610af5565b612e228383612d5a565b8060001904821115612e3657612e36612d44565b029392505050565b6000612b6d60ff841683612d9d565b600082612e6a57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610af557610af5612d44565b80820180821115610af557610af5612d44565b6020808252600c908201526b15dc9bdb99c8199bdc9b585d60a21b604082015260600190565b60208082526024908201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604082015263696d756d60e01b606082015260800190565b600060208284031215612f1557600080fd5b5051919050565b600060208284031215612f2e57600080fd5b8151612b6d81612bce565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610af557610af5612d44565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612ffc57600080fd5b8151612b6d81612b0f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130575784516001600160a01b031683529383019391830191600101613032565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212206f43450014f3ae0bd04aad3f803b32ec28acdd514c50e1a498a1ec0514546d9964736f6c63430008130033
Deployed Bytecode
0x6080604052600436106103545760003560e01c806370a08231116101c6578063b45aae52116100f7578063dd62ed3e11610095578063ed9600311161006f578063ed960031146109b8578063f2a9fa9a146109e5578063f2fde38b14610a12578063f9d0831a14610a3257600080fd5b8063dd62ed3e1461093c578063e01af92c14610982578063e2f45605146109a257600080fd5b8063c6d410f9116100d1578063c6d410f9146108da578063d2fcc001146108f0578063d5b2c19114610910578063dc3532a11461092657600080fd5b8063b45aae521461087a578063c02466681461089a578063c6616ba1146108ba57600080fd5b8063a457c2d711610164578063a9ea64541161013e578063a9ea645414610801578063aa4bde2814610817578063af4716721461082d578063afa4f3b21461085a57600080fd5b8063a457c2d714610789578063a8a69b9d146107a9578063a9059cbb146107e157600080fd5b80638da5cb5b116101a05780638da5cb5b1461072a57806395d89b41146107485780639d9241ec1461075d578063a0063bbc1461077357600080fd5b806370a08231146106e0578063715018a6146107005780638a8c523c1461071557600080fd5b80633b07dd7e116102a05780634fe48c451161023e578063644c30fe11610218578063644c30fe1461067557806365a6b5a1146106955780636ddd1713146106ab57806370330488146106ca57600080fd5b80634fe48c451461063357806359b107b9146106495780635da736a71461065f57600080fd5b806346ba52341161027a57806346ba52341461059a57806349bd5a5e146105ba5780634ada218b146105da5780634fbee193146105fa57600080fd5b80633b07dd7e1461052057806342a0798c1461054d57806342af738e1461057a57600080fd5b806321a9d82a1161030d57806327cf6f9e116102e757806327cf6f9e146104a45780632a6c7dba146104c4578063313ce567146104e4578063395093511461050057600080fd5b806321a9d82a1461044a57806323b872dd1461046457806327a14fc21461048457600080fd5b806301ef24bc1461036057806306fdde0314610389578063095ea7b3146103ab578063114ef6ca146103db5780631694505e146103fd57806318160ddd1461043557600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660165481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5061039e610a52565b6040516103809190612ac1565b3480156103b757600080fd5b506103cb6103c6366004612b24565b610ae4565b6040519015158152602001610380565b3480156103e757600080fd5b506103fb6103f6366004612b50565b610afb565b005b34801561040957600080fd5b5060065461041d906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b34801561044157600080fd5b50600254610376565b34801561045657600080fd5b506021546103cb9060ff1681565b34801561047057600080fd5b506103cb61047f366004612b74565b610c56565b34801561049057600080fd5b506103fb61049f366004612bb5565b610d07565b3480156104b057600080fd5b506103fb6104bf366004612b50565b610e06565b3480156104d057600080fd5b506103fb6104df366004612bdc565b610f55565b3480156104f057600080fd5b5060405160128152602001610380565b34801561050c57600080fd5b506103cb61051b366004612b24565b611034565b34801561052c57600080fd5b5061037661053b366004612b50565b60116020526000908152604090205481565b34801561055957600080fd5b50610376610568366004612b50565b600d6020526000908152604090205481565b34801561058657600080fd5b50601a5461041d906001600160a01b031681565b3480156105a657600080fd5b506103fb6105b5366004612bf9565b611070565b3480156105c657600080fd5b5060075461041d906001600160a01b031681565b3480156105e657600080fd5b50601d546103cb9062010000900460ff1681565b34801561060657600080fd5b506103cb610615366004612b50565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561063f57600080fd5b5061037660175481565b34801561065557600080fd5b5061037660185481565b34801561066b57600080fd5b50610376600c5481565b34801561068157600080fd5b50601b5461041d906001600160a01b031681565b3480156106a157600080fd5b5061037660145481565b3480156106b757600080fd5b50601d546103cb90610100900460ff1681565b3480156106d657600080fd5b50610376600e5481565b3480156106ec57600080fd5b506103766106fb366004612b50565b6111a6565b34801561070c57600080fd5b506103fb6111c1565b34801561072157600080fd5b506103fb611235565b34801561073657600080fd5b506005546001600160a01b031661041d565b34801561075457600080fd5b5061039e611315565b34801561076957600080fd5b5061037660195481565b34801561077f57600080fd5b5061037660155481565b34801561079557600080fd5b506103cb6107a4366004612b24565b611324565b3480156107b557600080fd5b506103cb6107c4366004612b50565b6001600160a01b0316600090815260208052604090205460ff1690565b3480156107ed57600080fd5b506103cb6107fc366004612b24565b6113bd565b34801561080d57600080fd5b50610376600a5481565b34801561082357600080fd5b5061037660225481565b34801561083957600080fd5b50610376610848366004612b50565b600f6020526000908152604090205481565b34801561086657600080fd5b506103fb610875366004612bb5565b6113ca565b34801561088657600080fd5b5061039e610895366004612b50565b6114b4565b3480156108a657600080fd5b506103fb6108b5366004612c3c565b61179d565b3480156108c657600080fd5b506103fb6108d5366004612c75565b6118aa565b3480156108e657600080fd5b5061037660105481565b3480156108fc57600080fd5b506103fb61090b366004612c3c565b6119a5565b34801561091c57600080fd5b5061037660125481565b34801561093257600080fd5b5061037660135481565b34801561094857600080fd5b50610376610957366004612ca7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561098e57600080fd5b506103fb61099d366004612bdc565b611af8565b3480156109ae57600080fd5b50610376601c5481565b3480156109c457600080fd5b506103766109d3366004612b50565b600b6020526000908152604090205481565b3480156109f157600080fd5b50610376610a00366004612b50565b60096020526000908152604090205481565b348015610a1e57600080fd5b506103fb610a2d366004612b50565b611ba9565b348015610a3e57600080fd5b506103fb610a4d366004612b50565b611c94565b606060038054610a6190612cd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8d90612cd5565b8015610ada5780601f10610aaf57610100808354040283529160200191610ada565b820191906000526020600020905b815481529060010190602001808311610abd57829003601f168201915b5050505050905090565b6000610af1338484611e40565b5060015b92915050565b6005546001600160a01b03163314610b2e5760405162461bcd60e51b8152600401610b2590612d0f565b60405180910390fd5b601b546001600160a01b0390811690821603610b9a5760405162461bcd60e51b815260206004820152602560248201527f4954585265762077616c6c657420697320616c72656164792074686174206164604482015264647265737360d81b6064820152608401610b25565b6001600160a01b038116610c015760405162461bcd60e51b815260206004820152602860248201527f4954585265762077616c6c65742063616e6e6f7420626520746865207a65726f604482015267206164647265737360c01b6064820152608401610b25565b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9aa41769aec0ad3a162314d2ec9633d01f579f6a87894784874182a27b1bd46f906020015b60405180910390a150565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610cf15782811015610ce45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b25565b610cf18533858403611e40565b610cfc858585611f64565b506001949350505050565b6005546001600160a01b03163314610d315760405162461bcd60e51b8152600401610b2590612d0f565b6064610d3f6012600a612e3e565b600254610d4c9190612e4d565b610d569190612e4d565b811015610dbb5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060448201526c6c6f776572207468616e20312560981b6064820152608401610b25565b610dc76012600a612e3e565b610dd19082612e6f565b60228190556040519081527f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb594290602001610c4b565b6005546001600160a01b03163314610e305760405162461bcd60e51b8152600401610b2590612d0f565b601a546001600160a01b0390811690821603610e9e5760405162461bcd60e51b815260206004820152602760248201527f4954585661756c742077616c6c657420697320616c72656164792074686174206044820152666164647265737360c81b6064820152608401610b25565b6001600160a01b038116610f075760405162461bcd60e51b815260206004820152602a60248201527f4954585661756c742077616c6c65742063616e6e6f7420626520746865207a65604482015269726f206164647265737360b01b6064820152608401610b25565b601a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f15afd8bc48542dca4a828cf615d823b6721afdb10bff15343cb49ad62062441f90602001610c4b565b6005546001600160a01b03163314610f7f5760405162461bcd60e51b8152600401610b2590612d0f565b60215460ff16151581151503610fed5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b6064820152608401610b25565b6021805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f190602001610c4b565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610af191859061106b908690612e86565b611e40565b6005546001600160a01b0316331461109a5760405162461bcd60e51b8152600401610b2590612d0f565b600a869055600c859055600e8490556010839055601282905560138190556201518081108015906110ce57506234bc008111155b6110ea5760405162461bcd60e51b8152600401610b2590612e99565b633b9aca0086111561110e5760405162461bcd60e51b8152600401610b2590612e99565b633b9aca008511156111325760405162461bcd60e51b8152600401610b2590612e99565b633b9aca008411156111565760405162461bcd60e51b8152600401610b2590612e99565b633b9aca0083111561117a5760405162461bcd60e51b8152600401610b2590612e99565b633b9aca0082111561119e5760405162461bcd60e51b8152600401610b2590612e99565b505050505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111eb5760405162461bcd60e51b8152600401610b2590612d0f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610b2590612d0f565b601d5462010000900460ff16156112b85760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e00000000000000006044820152606401610b25565b601d80546201010062ffff0019909116179081905543601e5542601f556040516201000090910460ff16151581527fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9060200160405180910390a1565b606060048054610a6190612cd5565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b25565b6113b33385858403611e40565b5060019392505050565b6000610af1338484611f64565b6005546001600160a01b031633146113f45760405162461bcd60e51b8152600401610b2590612d0f565b620f424061140160025490565b61140b9190612e4d565b811161147f5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c79006064820152608401610b25565b601c8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610c4b565b6013546001600160a01b0382166000908152601160205260409020546060916114dc91612e86565b4211801561150157506001600160a01b03821660009081526011602052604090205415155b80156115175750601254611514836111a6565b10155b1561154557505060408051808201909152600d81526c283630ba34b73ab6902a34b2b960991b602082015290565b6013546001600160a01b0383166000908152600f602052604090205461156b9190612e86565b4211801561159057506001600160a01b0382166000908152600f602052604090205415155b80156115a657506010546115a3836111a6565b10155b156115d057505060408051808201909152600981526823b7b632102a34b2b960b91b602082015290565b6013546001600160a01b0383166000908152600d60205260409020546115f69190612e86565b4211801561161b57506001600160a01b0382166000908152600d602052604090205415155b80156116315750600e5461162e836111a6565b10155b1561165d57505060408051808201909152600b81526a29b4b63b32b9102a34b2b960a91b602082015290565b6013546001600160a01b0383166000908152600b60205260409020546116839190612e86565b421180156116a857506001600160a01b0382166000908152600b602052604090205415155b80156116be5750600c546116bb836111a6565b10155b156116ea57505060408051808201909152600b81526a213937b73d32902a34b2b960a91b602082015290565b6013546001600160a01b0383166000908152600960205260409020546117109190612e86565b4211801561173557506001600160a01b03821660009081526009602052604090205415155b801561174b5750600a54611748836111a6565b10155b1561177657505060408051808201909152600a8152692130b9b4b1902a34b2b960b11b602082015290565b505060408051808201909152600b81526a115b9d1c9e4813195d995b60aa1b602082015290565b6005546001600160a01b031633146117c75760405162461bcd60e51b8152600401610b2590612d0f565b6001600160a01b03821660009081526008602052604090205481151560ff90911615150361184a5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610b25565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b031633146118d45760405162461bcd60e51b8152600401610b2590612d0f565b60158390556014849055601682905560178190556118f28285612e86565b6018556017546015546119059190612e86565b6019556018546005101561192b5760405162461bcd60e51b8152600401610b2590612ebf565b6005601954111561194e5760405162461bcd60e51b8152600401610b2590612ebf565b6015546014546016546017546040805194855260208501939093529183015260608201527f5c3aee3d65f7eb02cded951435d06b06ef307bc7f57b98975c4a41dc116e711c9060800160405180910390a150505050565b6005546001600160a01b031633146119cf5760405162461bcd60e51b8152600401610b2590612d0f565b6001600160a01b038216600090815260208052604090205481151560ff909116151503611a4a5760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b6064820152608401610b25565b306001600160a01b03831603611aa25760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610b25565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c910161189e565b6005546001600160a01b03163314611b225760405162461bcd60e51b8152600401610b2590612d0f565b801515601d60019054906101000a900460ff16151503611b8f5760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b6064820152608401610b25565b601d80549115156101000261ff0019909216919091179055565b6005546001600160a01b03163314611bd35760405162461bcd60e51b8152600401610b2590612d0f565b6001600160a01b038116611c385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b25565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611cbe5760405162461bcd60e51b8152600401610b2590612d0f565b306001600160a01b03821603611d3c5760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e730000000000000000006064820152608401610b25565b6001600160a01b038116611d5857611d543347612346565b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc59190612f03565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e399190612f1c565b5050505b50565b6001600160a01b038316611ea25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b25565b6001600160a01b038216611f035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b25565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f8a5760405162461bcd60e51b8152600401610b2590612f39565b6001600160a01b038216611fb05760405162461bcd60e51b8152600401610b2590612f7e565b601d5462010000900460ff1680611fdf57506001600160a01b03831660009081526008602052604090205460ff165b8061200257506001600160a01b03821660009081526008602052604090205460ff165b61204e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b25565b8060000361206757612062838360006123f5565b505050565b6000612072306111a6565b601c549091508110801590819061208c5750601d5460ff16155b80156120a557506007546001600160a01b038581169116145b80156120c0575060006019546018546120be9190612e86565b115b80156120d35750601d54610100900460ff165b156120f957601d805460ff191660011790556120ee82612549565b601d805460ff191690555b6001600160a01b03851660009081526008602052604081205460ff168061213857506001600160a01b03851660009081526008602052604090205460ff165b806121455750601d5460ff165b1561215257506000612202565b601e54612160906001612e86565b431161216e57506063612202565b601f5461217d90611c20612e86565b42116121c0576007546001600160a01b03908116908716036121a157506005612202565b6007546001600160a01b03908116908616036121bb575060145b612202565b6007546001600160a01b03908116908716036121df5750601854612202565b6007546001600160a01b03908116908616036121fe5750601954612202565b5060005b801561223b57600060646122168387612e6f565b6122209190612e4d565b905061222c8186612fc1565b94506122398730836123f5565b505b60215460ff1615612329576001600160a01b038616600090815260208052604090205460ff1615801561228657506001600160a01b038516600090815260208052604090205460ff16155b80156122a057506007546001600160a01b03868116911614155b156123295760006122b0866111a6565b6022549091506122c08683612e86565b11156123275760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b6064820152608401610b25565b505b6123348686866123f5565b61233d86612764565b61119e85612764565b6000814710156123985760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b25565b6000836001600160a01b03168360405160006040518083038185875af1925050503d80600081146123e5576040519150601f19603f3d011682016040523d82523d6000602084013e6123ea565b606091505b509095945050505050565b6001600160a01b03831661241b5760405162461bcd60e51b8152600401610b2590612f39565b6001600160a01b0382166124415760405162461bcd60e51b8152600401610b2590612f7e565b6001600160a01b038316600090815260208190526040902054818110156124b95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b25565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124f0908490612e86565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161253c91815260200190565b60405180910390a3611e39565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061258257612582612fd4565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190612fea565b8160018151811061261257612612612fd4565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac94790612658908690600090869030904290600401613007565b600060405180830381600087803b15801561267257600080fd5b505af1158015612686573d6000803e3d6000fd5b50505050600082476126989190612fc1565b905060006019546018546126ac9190612e86565b826015546014546126bd9190612e86565b6126c79190612e6f565b6126d19190612e4d565b905080156126f157601a546126ef906001600160a01b031682612346565b505b60006126fd8284612fc1565b1115612724576127226127108284612fc1565b601b546001600160a01b031690612346565b505b60408051868152602081018490527f38235d841737e18036f35d868462415317514cba27d7b9e1208ff9137f8ab763910160405180910390a15050505050565b6127706012600a612e3e565b600a5461277d9190612e6f565b612786826111a6565b101580156127aa57506001600160a01b038116600090815260096020526040902054155b156127cf576001600160a01b0381166000908152600960205260409020429055612811565b6127db6012600a612e3e565b600a546127e89190612e6f565b6127f1826111a6565b1015612811576001600160a01b0381166000908152600960205260408120555b61281d6012600a612e3e565b600c5461282a9190612e6f565b612833826111a6565b1015801561285757506001600160a01b0381166000908152600b6020526040902054155b1561287c576001600160a01b0381166000908152600b602052604090204290556128be565b6128886012600a612e3e565b600c546128959190612e6f565b61289e826111a6565b10156128be576001600160a01b0381166000908152600b60205260408120555b6128ca6012600a612e3e565b600e546128d79190612e6f565b6128e0826111a6565b1015801561290457506001600160a01b0381166000908152600d6020526040902054155b15612929576001600160a01b0381166000908152600d6020526040902042905561296b565b6129356012600a612e3e565b600e546129429190612e6f565b61294b826111a6565b101561296b576001600160a01b0381166000908152600d60205260408120555b6129776012600a612e3e565b6010546129849190612e6f565b61298d826111a6565b101580156129b157506001600160a01b0381166000908152600f6020526040902054155b156129d6576001600160a01b0381166000908152600f60205260409020429055612a18565b6129e26012600a612e3e565b6010546129ef9190612e6f565b6129f8826111a6565b1015612a18576001600160a01b0381166000908152600f60205260408120555b612a246012600a612e3e565b601254612a319190612e6f565b612a3a826111a6565b10158015612a5e57506001600160a01b038116600090815260116020526040902054155b15612a7f576001600160a01b03166000908152601160205260409020429055565b612a8b6012600a612e3e565b601254612a989190612e6f565b612aa1826111a6565b1015611e3d576001600160a01b0316600090815260116020526040812055565b600060208083528351808285015260005b81811015612aee57858101830151858201604001528201612ad2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611e3d57600080fd5b60008060408385031215612b3757600080fd5b8235612b4281612b0f565b946020939093013593505050565b600060208284031215612b6257600080fd5b8135612b6d81612b0f565b9392505050565b600080600060608486031215612b8957600080fd5b8335612b9481612b0f565b92506020840135612ba481612b0f565b929592945050506040919091013590565b600060208284031215612bc757600080fd5b5035919050565b8015158114611e3d57600080fd5b600060208284031215612bee57600080fd5b8135612b6d81612bce565b60008060008060008060c08789031215612c1257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612c4f57600080fd5b8235612c5a81612b0f565b91506020830135612c6a81612bce565b809150509250929050565b60008060008060808587031215612c8b57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612cba57600080fd5b8235612cc581612b0f565b91506020830135612c6a81612b0f565b600181811c90821680612ce957607f821691505b602082108103612d0957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612d95578160001904821115612d7b57612d7b612d44565b80851615612d8857918102915b93841c9390800290612d5f565b509250929050565b600082612dac57506001610af5565b81612db957506000610af5565b8160018114612dcf5760028114612dd957612df5565b6001915050610af5565b60ff841115612dea57612dea612d44565b50506001821b610af5565b5060208310610133831016604e8410600b8410161715612e18575081810a610af5565b612e228383612d5a565b8060001904821115612e3657612e36612d44565b029392505050565b6000612b6d60ff841683612d9d565b600082612e6a57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610af557610af5612d44565b80820180821115610af557610af5612d44565b6020808252600c908201526b15dc9bdb99c8199bdc9b585d60a21b604082015260600190565b60208082526024908201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604082015263696d756d60e01b606082015260800190565b600060208284031215612f1557600080fd5b5051919050565b600060208284031215612f2e57600080fd5b8151612b6d81612bce565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610af557610af5612d44565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612ffc57600080fd5b8151612b6d81612b0f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130575784516001600160a01b031683529383019391830191600101613032565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212206f43450014f3ae0bd04aad3f803b32ec28acdd514c50e1a498a1ec0514546d9964736f6c63430008130033
Deployed Bytecode Sourcemap
15707:16295:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16562:30;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;16562:30:0;;;;;;;;10992:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11906:169::-;;;;;;;;;;-1:-1:-1;11906:169:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;11906:169:0;1205:187:1;25807:347:0;;;;;;;;;;-1:-1:-1;25807:347:0;;;;;:::i;:::-;;:::i;:::-;;15792:41;;;;;;;;;;-1:-1:-1;15792:41:0;;;;-1:-1:-1;;;;;15792:41:0;;;;;;-1:-1:-1;;;;;1839:32:1;;;1821:51;;1809:2;1794:18;15792:41:0;1649:229:1;11313:108:0;;;;;;;;;;-1:-1:-1;11401:12:0;;11313:108;;30529:36;;;;;;;;;;-1:-1:-1;30529:36:0;;;;;;;;12083:573;;;;;;;;;;-1:-1:-1;12083:573:0;;;;;:::i;:::-;;:::i;31107:340::-;;;;;;;;;;-1:-1:-1;31107:340:0;;;;;:::i;:::-;;:::i;25431:368::-;;;;;;;;;;-1:-1:-1;25431:368:0;;;;;:::i;:::-;;:::i;30819:280::-;;;;;;;;;;-1:-1:-1;30819:280:0;;;;;:::i;:::-;;:::i;11212:93::-;;;;;;;;;;-1:-1:-1;11212:93:0;;11295:2;3040:36:1;;3028:2;3013:18;11212:93:0;2898:184:1;12664:215:0;;;;;;;;;;-1:-1:-1;12664:215:0;;;;;:::i;:::-;;:::i;16343:54::-;;;;;;;;;;-1:-1:-1;16343:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;16140:55;;;;;;;;;;-1:-1:-1;16140:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;16710:30;;;;;;;;;;-1:-1:-1;16710:30:0;;;;-1:-1:-1;;;;;16710:30:0;;;20712:843;;;;;;;;;;-1:-1:-1;20712:843:0;;;;;:::i;:::-;;:::i;15840:29::-;;;;;;;;;;-1:-1:-1;15840:29:0;;;;-1:-1:-1;;;;;15840:29:0;;;26162:26;;;;;;;;;;-1:-1:-1;26162:26:0;;;;;;;;;;;24577:125;;;;;;;;;;-1:-1:-1;24577:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;24666:28:0;24642:4;24666:28;;;:19;:28;;;;;;;;;24577:125;16599:31;;;;;;;;;;;;;;;;16639:27;;;;;;;;;;;;;;;;16099:31;;;;;;;;;;;;;;;;16747:28;;;;;;;;;;-1:-1:-1;16747:28:0;;;;-1:-1:-1;;;;;16747:28:0;;;16481:32;;;;;;;;;;;;;;;;16858:26;;;;;;;;;;-1:-1:-1;16858:26:0;;;;;;;;;;;16202:31;;;;;;;;;;;;;;;;11429:127;;;;;;;;;;-1:-1:-1;11429:127:0;;;;;:::i;:::-;;:::i;10179:148::-;;;;;;;;;;;;;:::i;26250:303::-;;;;;;;;;;;;;:::i;9965:79::-;;;;;;;;;;-1:-1:-1;10030:6:0;;-1:-1:-1;;;;;10030:6:0;9965:79;;11100:104;;;;;;;;;;;;;:::i;16673:28::-;;;;;;;;;;;;;;;;16520:33;;;;;;;;;;;;;;;;12887:413;;;;;;;;;;-1:-1:-1;12887:413:0;;;;;:::i;:::-;;:::i;31854:145::-;;;;;;;;;;-1:-1:-1;31854:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;31953:38:0;31929:4;31953:38;;;:29;:38;;;;;;;;;31854:145;11564:175;;;;;;;;;;-1:-1:-1;11564:175:0;;;;;:::i;:::-;;:::i;16000:30::-;;;;;;;;;;;;;;;;30572;;;;;;;;;;;;;;;;16243:54;;;;;;;;;;-1:-1:-1;16243:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;29112:304;;;;;;;;;;-1:-1:-1;29112:304:0;;;;;:::i;:::-;;:::i;23166:1105::-;;;;;;;;;;-1:-1:-1;23166:1105:0;;;;;:::i;:::-;;:::i;24279:290::-;;;;;;;;;;-1:-1:-1;24279:290:0;;;;;:::i;:::-;;:::i;24710:713::-;;;;;;;;;;-1:-1:-1;24710:713:0;;;;;:::i;:::-;;:::i;16304:29::-;;;;;;;;;;;;;;;;31455:391;;;;;;;;;;-1:-1:-1;31455:391:0;;;;;:::i;:::-;;:::i;16404:33::-;;;;;;;;;;;;;;;;16446:26;;;;;;;;;;;;;;;;11747:151;;;;;;;;;;-1:-1:-1;11747:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11863:18:0;;;11836:7;11863:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11747:151;28925:179;;;;;;;;;;-1:-1:-1;28925:179:0;;;;;:::i;:::-;;:::i;16784:34::-;;;;;;;;;;;;;;;;16039:53;;;;;;;;;;-1:-1:-1;16039:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;15940;;;;;;;;;;-1:-1:-1;15940:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;10335:244;;;;;;;;;;-1:-1:-1;10335:244:0;;;;;:::i;:::-;;:::i;20239:465::-;;;;;;;;;;-1:-1:-1;20239:465:0;;;;;:::i;:::-;;:::i;10992:100::-;11046:13;11079:5;11072:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10992:100;:::o;11906:169::-;11989:4;12006:39;9368:10;12029:7;12038:6;12006:8;:39::i;:::-;-1:-1:-1;12063:4:0;11906:169;;;;;:::o;25807:347::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;;;;;;;;;25913:12:::1;::::0;-1:-1:-1;;;;;25913:12:0;;::::1;25896:29:::0;;::::1;::::0;25888:78:::1;;;::::0;-1:-1:-1;;;25888:78:0;;5941:2:1;25888:78:0::1;::::0;::::1;5923:21:1::0;5980:2;5960:18;;;5953:30;6019:34;5999:18;;;5992:62;-1:-1:-1;;;6070:18:1;;;6063:35;6115:19;;25888:78:0::1;5739:401:1::0;25888:78:0::1;-1:-1:-1::0;;;;;25985:27:0;::::1;25977:79;;;::::0;-1:-1:-1;;;25977:79:0;;6347:2:1;25977:79:0::1;::::0;::::1;6329:21:1::0;6386:2;6366:18;;;6359:30;6425:34;6405:18;;;6398:62;-1:-1:-1;;;6476:18:1;;;6469:38;6524:19;;25977:79:0::1;6145:404:1::0;25977:79:0::1;26067:12;:28:::0;;-1:-1:-1;;;;;;26067:28:0::1;-1:-1:-1::0;;;;;26067:28:0;::::1;::::0;;::::1;::::0;;;26113:33:::1;::::0;1821:51:1;;;26113:33:0::1;::::0;1809:2:1;1794:18;26113:33:0::1;;;;;;;;25807:347:::0;:::o;12083:573::-;-1:-1:-1;;;;;12267:19:0;;12223:4;12267:19;;;:11;:19;;;;;;;;9368:10;12267:33;;;;;;;;-1:-1:-1;;12315:37:0;;12311:265;;12397:6;12377:16;:26;;12369:79;;;;-1:-1:-1;;;12369:79:0;;6756:2:1;12369:79:0;;;6738:21:1;6795:2;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;-1:-1:-1;;;6885:18:1;;;6878:38;6933:19;;12369:79:0;6554:404:1;12369:79:0;12492:57;12501:6;9368:10;12542:6;12523:16;:25;12492:8;:57::i;:::-;12588:36;12598:6;12606:9;12617:6;12588:9;:36::i;:::-;-1:-1:-1;12644:4:0;;12083:573;-1:-1:-1;;;;12083:573:0:o;31107:340::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;31258:3:::1;31237:16;11295:2:::0;31237::::1;:16;:::i;:::-;11401:12:::0;;31220:34:::1;;;;:::i;:::-;31219:42;;;;:::i;:::-;31199:16;:62;;31191:120;;;::::0;-1:-1:-1;;;31191:120:0;;8902:2:1;31191:120:0::1;::::0;::::1;8884:21:1::0;8941:2;8921:18;;;8914:30;8980:34;8960:18;;;8953:62;-1:-1:-1;;;9031:18:1;;;9024:43;9084:19;;31191:120:0::1;8700:409:1::0;31191:120:0::1;31360:16;11295:2:::0;31360::::1;:16;:::i;:::-;31340:37;::::0;:16;:37:::1;:::i;:::-;31322:15;:55:::0;;;31395:44:::1;::::0;160:25:1;;;31395:44:0::1;::::0;148:2:1;133:18;31395:44:0::1;14:177:1::0;25431:368:0;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;25542:14:::1;::::0;-1:-1:-1;;;;;25542:14:0;;::::1;25523:33:::0;;::::1;::::0;25515:84:::1;;;::::0;-1:-1:-1;;;25515:84:0;;9489:2:1;25515:84:0::1;::::0;::::1;9471:21:1::0;9528:2;9508:18;;;9501:30;9567:34;9547:18;;;9540:62;-1:-1:-1;;;9618:18:1;;;9611:37;9665:19;;25515:84:0::1;9287:403:1::0;25515:84:0::1;-1:-1:-1::0;;;;;25618:29:0;::::1;25610:83;;;::::0;-1:-1:-1;;;25610:83:0;;9897:2:1;25610:83:0::1;::::0;::::1;9879:21:1::0;9936:2;9916:18;;;9909:30;9975:34;9955:18;;;9948:62;-1:-1:-1;;;10026:18:1;;;10019:40;10076:19;;25610:83:0::1;9695:406:1::0;25610:83:0::1;25704:14;:32:::0;;-1:-1:-1;;;;;;25704:32:0::1;-1:-1:-1::0;;;;;25704:32:0;::::1;::::0;;::::1;::::0;;;25754:37:::1;::::0;1821:51:1;;;25754:37:0::1;::::0;1809:2:1;1794:18;25754:37:0::1;1649:229:1::0;30819:280:0;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;30913:21:::1;::::0;::::1;;30903:31;;::::0;::::1;;::::0;30895:88:::1;;;::::0;-1:-1:-1;;;30895:88:0;;10308:2:1;30895:88:0::1;::::0;::::1;10290:21:1::0;10347:2;10327:18;;;10320:30;10386:34;10366:18;;;10359:62;-1:-1:-1;;;10437:18:1;;;10430:43;10490:19;;30895:88:0::1;10106:409:1::0;30895:88:0::1;30994:21;:30:::0;;-1:-1:-1;;30994:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31042:49:::1;::::0;30994:30:::1;31069:21:::0;;;1370:14:1;1363:22;1345:41;;31042:49:0::1;::::0;1333:2:1;1318:18;31042:49:0::1;1205:187:1::0;12664:215:0;9368:10;12752:4;12801:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12801:34:0;;;;;;;;;;12752:4;;12769:80;;12792:7;;12801:47;;12838:10;;12801:47;:::i;:::-;12769:8;:80::i;20712:843::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;20917:14:::1;:32:::0;;;20960:15:::1;:34:::0;;;21005:15:::1;:34:::0;;;21050:13:::1;:30:::0;;;21091:17:::1;:38:::0;;;21142:10:::1;:24:::0;;;21202:6:::1;21187:21:::0;::::1;::::0;::::1;::::0;:47:::1;;;21227:7;21212:11;:22;;21187:47;21179:72;;;;-1:-1:-1::0;;;21179:72:0::1;;;;;;;:::i;:::-;21291:3;21272:15;:22;;21264:47;;;;-1:-1:-1::0;;;21264:47:0::1;;;;;;;:::i;:::-;21350:3;21330:16;:23;;21322:48;;;;-1:-1:-1::0;;;21322:48:0::1;;;;;;;:::i;:::-;21409:3;21389:16;:23;;21381:48;;;;-1:-1:-1::0;;;21381:48:0::1;;;;;;;:::i;:::-;21466:3;21448:14;:21;;21440:46;;;;-1:-1:-1::0;;;21440:46:0::1;;;;;;;:::i;:::-;21527:3;21505:18;:25;;21497:50;;;;-1:-1:-1::0;;;21497:50:0::1;;;;;;;:::i;:::-;20712:843:::0;;;;;;:::o;11429:127::-;-1:-1:-1;;;;;11530:18:0;11503:7;11530:18;;;;;;;;;;;;11429:127::o;10179:148::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;10270:6:::1;::::0;10249:40:::1;::::0;10286:1:::1;::::0;-1:-1:-1;;;;;10270:6:0::1;::::0;10249:40:::1;::::0;10286:1;;10249:40:::1;10300:6;:19:::0;;-1:-1:-1;;;;;;10300:19:0::1;::::0;;10179:148::o;26250:303::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;26313:14:::1;::::0;;;::::1;;;26312:15;26304:52;;;::::0;-1:-1:-1;;;26304:52:0;;11193:2:1;26304:52:0::1;::::0;::::1;11175:21:1::0;11232:2;11212:18;;;11205:30;11271:26;11251:18;;;11244:54;11315:18;;26304:52:0::1;10991:348:1::0;26304:52:0::1;26367:14;:21:::0;;26399:18;-1:-1:-1;;26399:18:0;;;;;;;;26445:12:::1;26430;:27:::0;26482:15:::1;26468:11;:29:::0;26515:30:::1;::::0;26367:21;26530:14;;::::1;26367:21;26530:14;1370::1::0;1363:22;1345:41;;26515:30:0::1;::::0;1333:2:1;1318:18;26515:30:0::1;;;;;;;26250:303::o:0;11100:104::-;11156:13;11189:7;11182:14;;;;;:::i;12887:413::-;9368:10;12980:4;13024:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13024:34:0;;;;;;;;;;13077:35;;;;13069:85;;;;-1:-1:-1;;;13069:85:0;;11546:2:1;13069:85:0;;;11528:21:1;11585:2;11565:18;;;11558:30;11624:34;11604:18;;;11597:62;-1:-1:-1;;;11675:18:1;;;11668:35;11720:19;;13069:85:0;11344:401:1;13069:85:0;13190:67;9368:10;13213:7;13241:15;13222:16;:34;13190:8;:67::i;:::-;-1:-1:-1;13288:4:0;;12887:413;-1:-1:-1;;;12887:413:0:o;11564:175::-;11650:4;11667:42;9368:10;11691:9;11702:6;11667:9;:42::i;29112:304::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;29227:9:::1;29211:13;11401:12:::0;;;11313:108;29211:13:::1;:25;;;;:::i;:::-;29199:9;:37;29191:113;;;::::0;-1:-1:-1;;;29191:113:0;;11952:2:1;29191:113:0::1;::::0;::::1;11934:21:1::0;11991:2;11971:18;;;11964:30;12030:34;12010:18;;;12003:62;12101:33;12081:18;;;12074:61;12152:19;;29191:113:0::1;11750:427:1::0;29191:113:0::1;29315:18;:30:::0;;;29363:45:::1;::::0;160:25:1;;;29363:45:0::1;::::0;148:2:1;133:18;29363:45:0::1;14:177:1::0;23166:1105:0;23299:10;;-1:-1:-1;;;;;23269:27:0;;;;;;:18;:27;;;;;;23221:13;;23269:40;;;:::i;:::-;23251:15;:58;:94;;;;-1:-1:-1;;;;;;23313:27:0;;;;;;:18;:27;;;;;;:32;;23251:94;:137;;;;;23371:17;;23349:18;23359:7;23349:9;:18::i;:::-;:39;;23251:137;23247:192;;;-1:-1:-1;;23405:22:0;;;;;;;;;;;;-1:-1:-1;;;23405:22:0;;;;;23166:1105::o;23247:192::-;23501:10;;-1:-1:-1;;;;;23471:27:0;;;;;;:18;:27;;;;;;:40;;23501:10;23471:40;:::i;:::-;23453:15;:58;:94;;;;-1:-1:-1;;;;;;23515:27:0;;;;;;:18;:27;;;;;;:32;;23453:94;:133;;;;;23573:13;;23551:18;23561:7;23551:9;:18::i;:::-;:35;;23453:133;23449:184;;;-1:-1:-1;;23603:18:0;;;;;;;;;;;;-1:-1:-1;;;23603:18:0;;;;;23166:1105::o;23449:184::-;23696:10;;-1:-1:-1;;;;;23665:28:0;;;;;;:19;:28;;;;;;:41;;23696:10;23665:41;:::i;:::-;23647:15;:59;:96;;;;-1:-1:-1;;;;;;23710:28:0;;;;;;:19;:28;;;;;;:33;;23647:96;:137;;;;;23769:15;;23747:18;23757:7;23747:9;:18::i;:::-;:37;;23647:137;23643:190;;;-1:-1:-1;;23801:20:0;;;;;;;;;;;;-1:-1:-1;;;23801:20:0;;;;;23166:1105::o;23643:190::-;23894:10;;-1:-1:-1;;;;;23865:26:0;;;;;;:17;:26;;;;;;:39;;23894:10;23865:39;:::i;:::-;23847:15;:57;:92;;;;-1:-1:-1;;;;;;23908:26:0;;;;;;:17;:26;;;;;;:31;;23847:92;:133;;;;;23965:15;;23943:18;23953:7;23943:9;:18::i;:::-;:37;;23847:133;23843:186;;;-1:-1:-1;;23997:20:0;;;;;;;;;;;;-1:-1:-1;;;23997:20:0;;;;;23166:1105::o;23843:186::-;24090:10;;-1:-1:-1;;;;;24061:26:0;;;;;;:17;:26;;;;;;:39;;24090:10;24061:39;:::i;:::-;24043:15;:57;:92;;;;-1:-1:-1;;;;;;24104:26:0;;;;;;:17;:26;;;;;;:31;;24043:92;:132;;;;;24161:14;;24139:18;24149:7;24139:9;:18::i;:::-;:36;;24043:132;24039:184;;;-1:-1:-1;;24192:19:0;;;;;;;;;;;;-1:-1:-1;;;24192:19:0;;;;;23166:1105::o;24039:184::-;-1:-1:-1;;24243:20:0;;;;;;;;;;;;-1:-1:-1;;;24243:20:0;;;;;23166:1105::o;24279:290::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24373:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;24365:94:::1;;;::::0;-1:-1:-1;;;24365:94:0;;12384:2:1;24365:94:0::1;::::0;::::1;12366:21:1::0;12423:2;12403:18;;;12396:30;12462:34;12442:18;;;12435:62;-1:-1:-1;;;12513:18:1;;;12506:40;12563:19;;24365:94:0::1;12182:406:1::0;24365:94:0::1;-1:-1:-1::0;;;;;24470:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;24470:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24527:34;;1345:41:1;;;24527:34:0::1;::::0;1318:18:1;24527:34:0::1;;;;;;;;24279:290:::0;;:::o;24710:713::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;24866:17:::1;:38:::0;;;24915:16:::1;:36:::0;;;24964:14:::1;:32:::0;;;25007:15:::1;:34:::0;;;25068:33:::1;24981:15:::0;24934:17;25068:33:::1;:::i;:::-;25054:11;:47:::0;25147:15:::1;::::0;25127:17:::1;::::0;:35:::1;::::0;25147:15;25127:35:::1;:::i;:::-;25112:12;:50:::0;25183:11:::1;::::0;25198:1:::1;-1:-1:-1::0;25183:16:0::1;25175:65;;;;-1:-1:-1::0;;;25175:65:0::1;;;;;;;:::i;:::-;25275:1;25259:12;;:17;;25251:66;;;;-1:-1:-1::0;;;25251:66:0::1;;;;;;;:::i;:::-;25346:17;::::0;25365:16:::1;::::0;25383:14:::1;::::0;25399:15:::1;::::0;25335:80:::1;::::0;;13229:25:1;;;13285:2;13270:18;;13263:34;;;;13313:18;;;13306:34;13371:2;13356:18;;13349:34;25335:80:0::1;::::0;13216:3:1;13201:19;25335:80:0::1;;;;;;;24710:713:::0;;;;:::o;31455:391::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31555:38:0;::::1;;::::0;;;:29:::1;:38:::0;;;;;;:49;::::1;;:38;::::0;;::::1;:49;;::::0;31546:98:::1;;;::::0;-1:-1:-1;;;31546:98:0;;13596:2:1;31546:98:0::1;::::0;::::1;13578:21:1::0;13635:2;13615:18;;;13608:30;13674:34;13654:18;;;13647:62;-1:-1:-1;;;13725:18:1;;;13718:34;13769:19;;31546:98:0::1;13394:400:1::0;31546:98:0::1;31682:4;-1:-1:-1::0;;;;;31663:24:0;::::1;::::0;31655:60:::1;;;::::0;-1:-1:-1;;;31655:60:0;;14001:2:1;31655:60:0::1;::::0;::::1;13983:21:1::0;14040:2;14020:18;;;14013:30;14079:25;14059:18;;;14052:53;14122:18;;31655:60:0::1;13799:347:1::0;31655:60:0::1;-1:-1:-1::0;;;;;31728:38:0;::::1;;::::0;;;:29:::1;:38:::0;;;;;;;;:48;;-1:-1:-1;;31728:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31794:44;;1345:41:1;;;31794:44:0::1;::::0;1318:18:1;31794:44:0::1;1205:187:1::0;28925:179:0;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;29016:8:::1;29001:23;;:11;;;;;;;;;;;:23;;::::0;28993:70:::1;;;::::0;-1:-1:-1;;;28993:70:0;;14353:2:1;28993:70:0::1;::::0;::::1;14335:21:1::0;14392:2;14372:18;;;14365:30;14431:34;14411:18;;;14404:62;-1:-1:-1;;;14482:18:1;;;14475:32;14524:19;;28993:70:0::1;14151:398:1::0;28993:70:0::1;29074:11;:22:::0;;;::::1;;;;-1:-1:-1::0;;29074:22:0;;::::1;::::0;;;::::1;::::0;;28925:179::o;10335:244::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10424:22:0;::::1;10416:73;;;::::0;-1:-1:-1;;;10416:73:0;;14756:2:1;10416:73:0::1;::::0;::::1;14738:21:1::0;14795:2;14775:18;;;14768:30;14834:34;14814:18;;;14807:62;-1:-1:-1;;;14885:18:1;;;14878:36;14931:19;;10416:73:0::1;14554:402:1::0;10416:73:0::1;10526:6;::::0;10505:38:::1;::::0;-1:-1:-1;;;;;10505:38:0;;::::1;::::0;10526:6:::1;::::0;10505:38:::1;::::0;10526:6:::1;::::0;10505:38:::1;10554:6;:17:::0;;-1:-1:-1;;;;;;10554:17:0::1;-1:-1:-1::0;;;;;10554:17:0;;;::::1;::::0;;;::::1;::::0;;10335:244::o;20239:465::-;10092:6;;-1:-1:-1;;;;;10092:6:0;9368:10;10092:22;10084:67;;;;-1:-1:-1;;;10084:67:0;;;;;;;:::i;:::-;20335:4:::1;-1:-1:-1::0;;;;;20318:22:0;::::1;::::0;20310:90:::1;;;::::0;-1:-1:-1;;;20310:90:0;;15163:2:1;20310:90:0::1;::::0;::::1;15145:21:1::0;15202:2;15182:18;;;15175:30;15241:34;15221:18;;;15214:62;15312:25;15292:18;;;15285:53;15355:19;;20310:90:0::1;14961:419:1::0;20310:90:0::1;-1:-1:-1::0;;;;;20415:21:0;::::1;20411:127;;20453:52;20461:10;20483:21;20453:29;:52::i;:::-;;20239:465:::0;:::o;20411:127::-:1;20610:35;::::0;-1:-1:-1;;;20610:35:0;;20639:4:::1;20610:35;::::0;::::1;1821:51:1::0;20575:5:0;;20548:17:::1;::::0;-1:-1:-1;;;;;20610:20:0;::::1;::::0;::::1;::::0;1794:18:1;;20610:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20656:40;::::0;-1:-1:-1;;;20656:40:0;;20676:10:::1;20656:40;::::0;::::1;15748:51:1::0;15815:18;;;15808:34;;;20592:53:0;;-1:-1:-1;;;;;;20656:19:0;::::1;::::0;::::1;::::0;15721:18:1;;20656:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20299:405;;10162:1;20239:465:::0;:::o;15055:380::-;-1:-1:-1;;;;;15191:19:0;;15183:68;;;;-1:-1:-1;;;15183:68:0;;16305:2:1;15183:68:0;;;16287:21:1;16344:2;16324:18;;;16317:30;16383:34;16363:18;;;16356:62;-1:-1:-1;;;16434:18:1;;;16427:34;16478:19;;15183:68:0;16103:400:1;15183:68:0;-1:-1:-1;;;;;15270:21:0;;15262:68;;;;-1:-1:-1;;;15262:68:0;;16710:2:1;15262:68:0;;;16692:21:1;16749:2;16729:18;;;16722:30;16788:34;16768:18;;;16761:62;-1:-1:-1;;;16839:18:1;;;16832:32;16881:19;;15262:68:0;16508:398:1;15262:68:0;-1:-1:-1;;;;;15343:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15395:32;;160:25:1;;;15395:32:0;;133:18:1;15395:32:0;;;;;;;15055:380;;;:::o;26561:2356::-;-1:-1:-1;;;;;26658:18:0;;26650:68;;;;-1:-1:-1;;;26650:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26737:16:0;;26729:64;;;;-1:-1:-1;;;26729:64:0;;;;;;;:::i;:::-;26812:14;;;;;;;;:43;;-1:-1:-1;;;;;;26830:25:0;;;;;;:19;:25;;;;;;;;26812:43;:70;;;-1:-1:-1;;;;;;26859:23:0;;;;;;:19;:23;;;;;;;;26812:70;26804:107;;;;-1:-1:-1;;;26804:107:0;;17923:2:1;26804:107:0;;;17905:21:1;17962:2;17942:18;;;17935:30;18001:26;17981:18;;;17974:54;18045:18;;26804:107:0;17721:348:1;26804:107:0;26935:6;26945:1;26935:11;26931:93;;26963:28;26979:4;26985:2;26989:1;26963:15;:28::i;:::-;26561:2356;;;:::o;26931:93::-;27030:28;27061:24;27079:4;27061:9;:24::i;:::-;27137:18;;27030:55;;-1:-1:-1;27113:42:0;;;;;;;27172:33;;-1:-1:-1;27197:8:0;;;;27196:9;27172:33;:69;;;;-1:-1:-1;27228:13:0;;-1:-1:-1;;;;;27222:19:0;;;27228:13;;27222:19;27172:69;:116;;;;;27287:1;27272:12;;27258:11;;:26;;;;:::i;:::-;:30;27172:116;:144;;;;-1:-1:-1;27305:11:0;;;;;;;27172:144;27168:293;;;27343:8;:15;;-1:-1:-1;;27343:15:0;27354:4;27343:15;;;27375:36;27390:20;27375:14;:36::i;:::-;27433:8;:16;;-1:-1:-1;;27433:16:0;;;27168:293;-1:-1:-1;;;;;27506:25:0;;27473:18;27506:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27535:23:0;;;;;;:19;:23;;;;;;;;27506:52;:64;;;-1:-1:-1;27562:8:0;;;;27506:64;27502:646;;;-1:-1:-1;27600:1:0;27502:646;;;27639:12;;:16;;27654:1;27639:16;:::i;:::-;27623:12;:32;27619:529;;-1:-1:-1;27684:2:0;27619:529;;;27727:11;;:21;;27741:7;27727:21;:::i;:::-;27708:15;:40;27704:444;;27777:13;;-1:-1:-1;;;;;27777:13:0;;;27769:21;;;;27765:157;;-1:-1:-1;27824:1:0;27704:444;;27765:157;27857:13;;-1:-1:-1;;;;;27857:13:0;;;27851:19;;;;27847:75;;-1:-1:-1;27904:2:0;27847:75;27704:444;;;27951:13;;-1:-1:-1;;;;;27951:13:0;;;27943:21;;;;27939:209;;-1:-1:-1;27994:11:0;;27939:209;;;28033:13;;-1:-1:-1;;;;;28033:13:0;;;28027:19;;;;28023:125;;-1:-1:-1;28077:12:0;;28023:125;;;-1:-1:-1;28135:1:0;28023:125;28164:14;;28160:183;;28195:12;28234:3;28211:19;28220:10;28211:6;:19;:::i;:::-;28210:27;;;;:::i;:::-;28195:42;-1:-1:-1;28261:13:0;28195:42;28261:6;:13;:::i;:::-;28252:22;;28289:42;28305:4;28319;28326;28289:15;:42::i;:::-;28180:163;28160:183;28359:21;;;;28355:459;;;-1:-1:-1;;;;;28412:35:0;;;;;;:29;:35;;;;;;;;28411:36;:92;;;;-1:-1:-1;;;;;;28470:33:0;;;;;;:29;:33;;;;;;;;28469:34;28411:92;:132;;;;-1:-1:-1;28530:13:0;;-1:-1:-1;;;;;28524:19:0;;;28530:13;;28524:19;;28411:132;28407:396;;;28578:15;28597:13;28607:2;28597:9;:13::i;:::-;28679:15;;28578:32;;-1:-1:-1;28659:16:0;28669:6;28578:32;28659:16;:::i;:::-;:35;;28629:158;;;;-1:-1:-1;;;28629:158:0;;18409:2:1;28629:158:0;;;18391:21:1;18448:2;18428:18;;;18421:30;18487:34;18467:18;;;18460:62;-1:-1:-1;;;18538:18:1;;;18531:46;18594:19;;28629:158:0;18207:412:1;28629:158:0;28559:244;28407:396;28826:33;28842:4;28848:2;28852:6;28826:15;:33::i;:::-;28872:14;28881:4;28872:8;:14::i;:::-;28897:12;28906:2;28897:8;:12::i;8982:266::-;9061:4;9110:6;9085:21;:31;;9077:73;;;;-1:-1:-1;;;9077:73:0;;18826:2:1;9077:73:0;;;18808:21:1;18865:2;18845:18;;;18838:30;18904:31;18884:18;;;18877:59;18953:18;;9077:73:0;18624:353:1;9077:73:0;9164:12;9182:9;-1:-1:-1;;;;;9182:14:0;9204:6;9182:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9163:52:0;;8982:266;-1:-1:-1;;;;;8982:266:0:o;13308:733::-;-1:-1:-1;;;;;13448:20:0;;13440:70;;;;-1:-1:-1;;;13440:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13529:23:0;;13521:71;;;;-1:-1:-1;;;13521:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13689:17:0;;13665:21;13689:17;;;;;;;;;;;13725:23;;;;13717:74;;;;-1:-1:-1;;;13717:74:0;;19394:2:1;13717:74:0;;;19376:21:1;19433:2;19413:18;;;19406:30;19472:34;19452:18;;;19445:62;-1:-1:-1;;;19523:18:1;;;19516:36;19569:19;;13717:74:0;19192:402:1;13717:74:0;-1:-1:-1;;;;;13827:17:0;;;:9;:17;;;;;;;;;;;13847:22;;;13827:42;;13891:20;;;;;;;;:30;;13863:6;;13827:9;13891:30;;13863:6;;13891:30;:::i;:::-;;;;;;;;13956:9;-1:-1:-1;;;;;13939:35:0;13948:6;-1:-1:-1;;;;;13939:35:0;;13967:6;13939:35;;;;160:25:1;;148:2;133:18;;14:177;13939:35:0;;;;;;;;13987:46;26561:2356;29424:1028;29571:16;;;29585:1;29571:16;;;;;;;;29513:21;;29488:22;;29571:16;29585:1;29571:16;;;;;;;;;;-1:-1:-1;29571:16:0;29547:40;;29616:4;29598;29603:1;29598:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29598:23:0;;;:7;;;;;;;;;;:23;;;;29642:15;;:22;;;-1:-1:-1;;;29642:22:0;;;;:15;;;;;:20;;:22;;;;;29598:7;;29642:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29632:4;29637:1;29632:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29632:32:0;;;:7;;;;;;;;;:32;29677:15;;:186;;-1:-1:-1;;;29677:186:0;;:15;;;:66;;:186;;29758:11;;29677:15;;29800:4;;29827;;29847:15;;29677:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29876:18;29921:14;29897:21;:38;;;;:::i;:::-;29876:59;;30038:20;30130:12;;30116:11;;:26;;;;:::i;:::-;30102:10;30081:17;;30062:16;;:36;;;;:::i;:::-;30061:51;;;;:::i;:::-;:82;;;;:::i;:::-;30038:105;-1:-1:-1;30160:16:0;;30156:95;;30200:14;;30192:47;;-1:-1:-1;;;;;30200:14:0;30226:12;30192:33;:47::i;:::-;;30156:95;30295:1;30267:25;30280:12;30267:10;:25;:::i;:::-;:29;30263:120;;;30313:58;30345:25;30358:12;30345:10;:25;:::i;:::-;30321:12;;-1:-1:-1;;;;;30321:12:0;;30313:31;:58::i;:::-;;30263:120;30400:44;;;21278:25:1;;;21334:2;21319:18;;21312:34;;;30400:44:0;;21251:18:1;30400:44:0;;;;;;;29477:975;;;;29424:1028;:::o;21563:1595::-;21662:16;11295:2;21662;:16;:::i;:::-;21644:14;;:35;;;;:::i;:::-;21622:18;21632:7;21622:9;:18::i;:::-;:57;;:92;;;;-1:-1:-1;;;;;;21683:26:0;;;;;;:17;:26;;;;;;:31;21622:92;21618:293;;;-1:-1:-1;;;;;21730:26:0;;;;;;:17;:26;;;;;21759:15;21730:44;;21618:293;;;21835:16;11295:2;21835;:16;:::i;:::-;21817:14;;:35;;;;:::i;:::-;21796:18;21806:7;21796:9;:18::i;:::-;:56;21792:119;;;-1:-1:-1;;;;;21869:26:0;;21898:1;21869:26;;;:17;:26;;;;;:30;21792:119;21968:16;11295:2;21968;:16;:::i;:::-;21949:15;;:36;;;;:::i;:::-;21927:18;21937:7;21927:9;:18::i;:::-;:58;;:93;;;;-1:-1:-1;;;;;;21989:26:0;;;;;;:17;:26;;;;;;:31;21927:93;21923:295;;;-1:-1:-1;;;;;22036:26:0;;;;;;:17;:26;;;;;22065:15;22036:44;;21923:295;;;22142:16;11295:2;22142;:16;:::i;:::-;22123:15;;:36;;;;:::i;:::-;22102:18;22112:7;22102:9;:18::i;:::-;:57;22098:120;;;-1:-1:-1;;;;;22176:26:0;;22205:1;22176:26;;;:17;:26;;;;;:30;22098:120;22275:16;11295:2;22275;:16;:::i;:::-;22256:15;;:36;;;;:::i;:::-;22234:18;22244:7;22234:9;:18::i;:::-;:58;;:95;;;;-1:-1:-1;;;;;;22296:28:0;;;;;;:19;:28;;;;;;:33;22234:95;22230:301;;;-1:-1:-1;;;;;22345:28:0;;;;;;:19;:28;;;;;22376:15;22345:46;;22230:301;;;22453:16;11295:2;22453;:16;:::i;:::-;22434:15;;:36;;;;:::i;:::-;22413:18;22423:7;22413:9;:18::i;:::-;:57;22409:122;;;-1:-1:-1;;;;;22487:28:0;;22518:1;22487:28;;;:19;:28;;;;;:32;22409:122;22586:16;11295:2;22586;:16;:::i;:::-;22569:13;;:34;;;;:::i;:::-;22547:18;22557:7;22547:9;:18::i;:::-;:56;;:92;;;;-1:-1:-1;;;;;;22607:27:0;;;;;;:18;:27;;;;;;:32;22547:92;22543:294;;;-1:-1:-1;;;;;22655:27:0;;;;;;:18;:27;;;;;22685:15;22655:45;;22543:294;;;22760:16;11295:2;22760;:16;:::i;:::-;22743:13;;:34;;;;:::i;:::-;22722:18;22732:7;22722:9;:18::i;:::-;:55;22718:119;;;-1:-1:-1;;;;;22794:27:0;;22824:1;22794:27;;;:18;:27;;;;;:31;22718:119;22896:16;11295:2;22896;:16;:::i;:::-;22875:17;;:38;;;;:::i;:::-;22853:18;22863:7;22853:9;:18::i;:::-;:60;;:96;;;;-1:-1:-1;;;;;;22917:27:0;;;;;;:18;:27;;;;;;:32;22853:96;22849:302;;;-1:-1:-1;;;;;22965:27:0;;;;;:18;:27;;;;;22995:15;22965:45;;20239:465::o;22849:302::-;23074:16;11295:2;23074;:16;:::i;:::-;23053:17;;:38;;;;:::i;:::-;23032:18;23042:7;23032:9;:18::i;:::-;:59;23028:123;;;-1:-1:-1;;;;;23108:27:0;23138:1;23108:27;;;:18;:27;;;;;:31;21563:1595::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;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;:::-;1633:5;1397:247;-1:-1:-1;;;1397: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:523::-;3399:6;3407;3415;3423;3431;3439;3492:3;3480:9;3471:7;3467:23;3463:33;3460:53;;;3509:1;3506;3499:12;3460:53;-1:-1:-1;;3532:23:1;;;3602:2;3587:18;;3574:32;;-1:-1:-1;3653:2:1;3638:18;;3625:32;;3704:2;3689:18;;3676:32;;-1:-1:-1;3755:3:1;3740:19;;3727:33;;-1:-1:-1;3807:3:1;3792:19;3779:33;;-1:-1:-1;3295:523:1;-1:-1:-1;3295:523:1:o;3823:382::-;3888:6;3896;3949:2;3937:9;3928:7;3924:23;3920:32;3917:52;;;3965:1;3962;3955:12;3917:52;4004:9;3991:23;4023:31;4048:5;4023:31;:::i;:::-;4073:5;-1:-1:-1;4130:2:1;4115:18;;4102:32;4143:30;4102:32;4143:30;:::i;:::-;4192:7;4182:17;;;3823:382;;;;;:::o;4210:385::-;4296:6;4304;4312;4320;4373:3;4361:9;4352:7;4348:23;4344:33;4341:53;;;4390:1;4387;4380:12;4341:53;-1:-1:-1;;4413:23:1;;;4483:2;4468:18;;4455:32;;-1:-1:-1;4534:2:1;4519:18;;4506:32;;4585:2;4570:18;4557:32;;-1:-1:-1;4210:385:1;-1:-1:-1;4210:385:1:o;4600:388::-;4668:6;4676;4729:2;4717:9;4708:7;4704:23;4700:32;4697:52;;;4745:1;4742;4735:12;4697:52;4784:9;4771:23;4803:31;4828:5;4803:31;:::i;:::-;4853:5;-1:-1:-1;4910:2:1;4895:18;;4882:32;4923:33;4882:32;4923:33;:::i;4993:380::-;5072:1;5068:12;;;;5115;;;5136:61;;5190:4;5182:6;5178:17;5168:27;;5136:61;5243:2;5235:6;5232:14;5212:18;5209:38;5206:161;;5289:10;5284:3;5280:20;5277:1;5270:31;5324:4;5321:1;5314:15;5352:4;5349:1;5342:15;5206:161;;4993:380;;;:::o;5378:356::-;5580:2;5562:21;;;5599:18;;;5592:30;5658:34;5653:2;5638:18;;5631:62;5725:2;5710:18;;5378:356::o;6963:127::-;7024:10;7019:3;7015:20;7012:1;7005:31;7055:4;7052:1;7045:15;7079:4;7076:1;7069:15;7095:422;7184:1;7227:5;7184:1;7241:270;7262:7;7252:8;7249:21;7241:270;;;7321:4;7317:1;7313:6;7309:17;7303:4;7300:27;7297:53;;;7330:18;;:::i;:::-;7380:7;7370:8;7366:22;7363:55;;;7400:16;;;;7363:55;7479:22;;;;7439:15;;;;7241:270;;;7245:3;7095:422;;;;;:::o;7522:806::-;7571:5;7601:8;7591:80;;-1:-1:-1;7642:1:1;7656:5;;7591:80;7690:4;7680:76;;-1:-1:-1;7727:1:1;7741:5;;7680:76;7772:4;7790:1;7785:59;;;;7858:1;7853:130;;;;7765:218;;7785:59;7815:1;7806:10;;7829:5;;;7853:130;7890:3;7880:8;7877:17;7874:43;;;7897:18;;:::i;:::-;-1:-1:-1;;7953:1:1;7939:16;;7968:5;;7765:218;;8067:2;8057:8;8054:16;8048:3;8042:4;8039:13;8035:36;8029:2;8019:8;8016:16;8011:2;8005:4;8002:12;7998:35;7995:77;7992:159;;;-1:-1:-1;8104:19:1;;;8136:5;;7992:159;8183:34;8208:8;8202:4;8183:34;:::i;:::-;8253:6;8249:1;8245:6;8241:19;8232:7;8229:32;8226:58;;;8264:18;;:::i;:::-;8302:20;;7522:806;-1:-1:-1;;;7522:806:1:o;8333:140::-;8391:5;8420:47;8461:4;8451:8;8447:19;8441:4;8420:47;:::i;8478:217::-;8518:1;8544;8534:132;;8588:10;8583:3;8579:20;8576:1;8569:31;8623:4;8620:1;8613:15;8651:4;8648:1;8641:15;8534:132;-1:-1:-1;8680:9:1;;8478:217::o;9114:168::-;9187:9;;;9218;;9235:15;;;9229:22;;9215:37;9205:71;;9256:18;;:::i;10520:125::-;10585:9;;;10606:10;;;10603:36;;;10619:18;;:::i;10650:336::-;10852:2;10834:21;;;10891:2;10871:18;;;10864:30;-1:-1:-1;;;10925:2:1;10910:18;;10903:42;10977:2;10962:18;;10650:336::o;12593:400::-;12795:2;12777:21;;;12834:2;12814:18;;;12807:30;12873:34;12868:2;12853:18;;12846:62;-1:-1:-1;;;12939:2:1;12924:18;;12917:34;12983:3;12968:19;;12593:400::o;15385:184::-;15455:6;15508:2;15496:9;15487:7;15483:23;15479:32;15476:52;;;15524:1;15521;15514:12;15476:52;-1:-1:-1;15547:16:1;;15385:184;-1:-1:-1;15385:184:1:o;15853:245::-;15920:6;15973:2;15961:9;15952:7;15948:23;15944:32;15941:52;;;15989:1;15986;15979:12;15941:52;16021:9;16015:16;16040:28;16062:5;16040:28;:::i;16911:401::-;17113:2;17095:21;;;17152:2;17132:18;;;17125:30;17191:34;17186:2;17171:18;;17164:62;-1:-1:-1;;;17257:2:1;17242:18;;17235:35;17302:3;17287:19;;16911:401::o;17317:399::-;17519:2;17501:21;;;17558:2;17538:18;;;17531:30;17597:34;17592:2;17577:18;;17570:62;-1:-1:-1;;;17663:2:1;17648:18;;17641:33;17706:3;17691:19;;17317:399::o;18074:128::-;18141:9;;;18162:11;;;18159:37;;;18176:18;;:::i;19731:127::-;19792:10;19787:3;19783:20;19780:1;19773:31;19823:4;19820:1;19813:15;19847:4;19844:1;19837:15;19863:251;19933:6;19986:2;19974:9;19965:7;19961:23;19957:32;19954:52;;;20002:1;19999;19992:12;19954:52;20034:9;20028:16;20053:31;20078:5;20053:31;:::i;20119:980::-;20381:4;20429:3;20418:9;20414:19;20460:6;20449:9;20442:25;20486:2;20524:6;20519:2;20508:9;20504:18;20497:34;20567:3;20562:2;20551:9;20547:18;20540:31;20591:6;20626;20620:13;20657:6;20649;20642:22;20695:3;20684:9;20680:19;20673:26;;20734:2;20726:6;20722:15;20708:29;;20755:1;20765:195;20779:6;20776:1;20773:13;20765:195;;;20844:13;;-1:-1:-1;;;;;20840:39:1;20828:52;;20935:15;;;;20900:12;;;;20876:1;20794:9;20765:195;;;-1:-1:-1;;;;;;;21016:32:1;;;;21011:2;20996:18;;20989:60;-1:-1:-1;;;21080:3:1;21065:19;21058:35;20977:3;20119:980;-1:-1:-1;;;20119:980:1:o
Swarm Source
ipfs://6f43450014f3ae0bd04aad3f803b32ec28acdd514c50e1a498a1ec0514546d99
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.