ETH Price: $3,162.55 (-8.61%)
Gas: 2 Gwei

Token

Benno Inu (Benno)
 

Overview

Max Total Supply

99,774,700,176,021.03956802656734134 Benno

Holders

47

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
yous1902.eth
Balance
216,782,121.345481050566106055 Benno

Value
$0.00
0x62C989Bdaaedc2078f3Ed396A26A323cBCf1a57c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BennoInu

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-31
*/

/**
Twitter: 
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.15;

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 IFactory {
	function createPair(address tokenA, address tokenB)
	external
	returns (address pair);

	function getPair(address tokenA, address tokenB)
	external
	view
	returns (address pair);
}

interface IRouter {
	function factory() external pure returns (address);

	function WETH() external pure returns (address);

	function addLiquidityETH(
		address token,
		uint256 amountTokenDesired,
		uint256 amountTokenMin,
		uint256 amountETHMin,
		address to,
		uint256 deadline
	)
	external
	payable
	returns (
		uint256 amountToken,
		uint256 amountETH,
		uint256 liquidity
	);

	function swapExactETHForTokensSupportingFeeOnTransferTokens(
		uint256 amountOutMin,
		address[] calldata path,
		address to,
		uint256 deadline
	) external payable;

	function swapExactTokensForETHSupportingFeeOnTransferTokens(
		uint256 amountIn,
		uint256 amountOutMin,
		address[] calldata path,
		address to,
		uint256 deadline
	) external;
}

interface IERC20Metadata is IERC20 {
	function name() external view returns (string memory);
	function symbol() external view returns (string memory);
	function decimals() external view returns (uint8);
}

interface DividendPayingTokenInterface {
	function dividendOf(address _owner) external view returns(uint256);
	function withdrawDividend() external;
	event DividendsDistributed(
		address indexed from,
		uint256 weiAmount
	);
	event DividendWithdrawn(
		address indexed to,
		uint256 weiAmount
	);
}

interface DividendPayingTokenOptionalInterface {
	function withdrawableDividendOf(address _owner) external view returns(uint256);
	function withdrawnDividendOf(address _owner) external view returns(uint256);
	function accumulativeDividendOf(address _owner) external view returns(uint256);
}

library SafeMath {

	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		require(c >= a, "SafeMath: addition overflow");

		return c;
	}

	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		return sub(a, b, "SafeMath: subtraction overflow");
	}

	function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b <= a, errorMessage);
		uint256 c = a - b;

		return c;
	}

	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
		// benefit is lost if 'b' is also tested.
		// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
		if (a == 0) {
			return 0;
		}

		uint256 c = a * b;
		require(c / a == b, "SafeMath: multiplication overflow");

		return c;
	}

	function div(uint256 a, uint256 b) internal pure returns (uint256) {
		return div(a, b, "SafeMath: division by zero");
	}

	function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b > 0, errorMessage);
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold

		return c;
	}

	function mod(uint256 a, uint256 b) internal pure returns (uint256) {
		return mod(a, b, "SafeMath: modulo by zero");
	}

	function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b != 0, errorMessage);
		return a % b;
	}
}

library SafeMathInt {
	int256 private constant MIN_INT256 = int256(1) << 255;
	int256 private constant MAX_INT256 = ~(int256(1) << 255);

	function mul(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a * b;

		// Detect overflow when multiplying MIN_INT256 with -1
		require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
		require((b == 0) || (c / b == a));
		return c;
	}
	function div(int256 a, int256 b) internal pure returns (int256) {
		// Prevent overflow when dividing MIN_INT256 by -1
		require(b != -1 || a != MIN_INT256);

		// Solidity already throws when dividing by 0.
		return a / b;
	}
	function sub(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a - b;
		require((b >= 0 && c <= a) || (b < 0 && c > a));
		return c;
	}
	function add(int256 a, int256 b) internal pure returns (int256) {
		int256 c = a + b;
		require((b >= 0 && c >= a) || (b < 0 && c < a));
		return c;
	}
	function abs(int256 a) internal pure returns (int256) {
		require(a != MIN_INT256);
		return a < 0 ? -a : a;
	}
	function toUint256Safe(int256 a) internal pure returns (uint256) {
		require(a >= 0);
		return uint256(a);
	}
}

library SafeMathUint {
	function toInt256Safe(uint256 a) internal pure returns (int256) {
		int256 b = int256(a);
		require(b >= 0);
		return b;
	}
}

library IterableMapping {
	struct Map {
		address[] keys;
		mapping(address => uint) values;
		mapping(address => uint) indexOf;
		mapping(address => bool) inserted;
	}

	function get(Map storage map, address key) public view returns (uint) {
		return map.values[key];
	}

	function getIndexOfKey(Map storage map, address key) public view returns (int) {
		if(!map.inserted[key]) {
			return -1;
		}
		return int(map.indexOf[key]);
	}

	function getKeyAtIndex(Map storage map, uint index) public view returns (address) {
		return map.keys[index];
	}

	function size(Map storage map) public view returns (uint) {
		return map.keys.length;
	}

	function set(Map storage map, address key, uint val) public {
		if (map.inserted[key]) {
			map.values[key] = val;
		} else {
			map.inserted[key] = true;
			map.values[key] = val;
			map.indexOf[key] = map.keys.length;
			map.keys.push(key);
		}
	}

	function remove(Map storage map, address key) public {
		if (!map.inserted[key]) {
			return;
		}

		delete map.inserted[key];
		delete map.values[key];

		uint index = map.indexOf[key];
		uint lastIndex = map.keys.length - 1;
		address lastKey = map.keys[lastIndex];

		map.indexOf[lastKey] = index;
		delete map.indexOf[key];

		map.keys[index] = lastKey;
		map.keys.pop();
	}
}

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;
	}
}

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 {
	using SafeMath for uint256;

	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) {
		_transfer(sender, recipient, amount);
		_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
		return true;
	}

	function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
		return true;
	}

	function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
		_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
		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);
		_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
		_balances[recipient] = _balances[recipient].add(amount);
		emit Transfer(sender, recipient, amount);
	}

	function _mint(address account, uint256 amount) internal virtual {
		require(account != address(0), "ERC20: mint to the zero address");
		_beforeTokenTransfer(address(0), account, amount);
		_totalSupply = _totalSupply.add(amount);
		_balances[account] = _balances[account].add(amount);
		emit Transfer(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);
		_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
		_totalSupply = _totalSupply.sub(amount);
		emit Transfer(account, address(0), amount);
	}

	function _approve(
		address owner,
		address spender,
		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 {}
}

contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
	using SafeMath for uint256;
	using SafeMathUint for uint256;
	using SafeMathInt for int256;

	uint256 constant internal magnitude = 2**128;
	uint256 internal magnifiedDividendPerShare;
	uint256 public totalDividendsDistributed;
	address public rewardToken;
	IRouter public uniswapV2Router;

	mapping(address => int256) internal magnifiedDividendCorrections;
	mapping(address => uint256) internal withdrawnDividends;

	constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {}

	receive() external payable {}

	function distributeDividendsUsingAmount(uint256 amount) public onlyOwner {
		require(totalSupply() > 0);
		if (amount > 0) {
			magnifiedDividendPerShare = magnifiedDividendPerShare.add((amount).mul(magnitude) / totalSupply());
			emit DividendsDistributed(msg.sender, amount);
			totalDividendsDistributed = totalDividendsDistributed.add(amount);
		}
	}
	function withdrawDividend() public virtual override onlyOwner {
		_withdrawDividendOfUser(payable(msg.sender));
	}
	function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
		uint256 _withdrawableDividend = withdrawableDividendOf(user);
		if (_withdrawableDividend > 0) {
			withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
			emit DividendWithdrawn(user, _withdrawableDividend);
			(bool success) = IERC20(rewardToken).transfer(user, _withdrawableDividend);
			if(!success) {
				withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
				return 0;
			}
			return _withdrawableDividend;
		}
		return 0;
	}
	function dividendOf(address _owner) public view override returns(uint256) {
		return withdrawableDividendOf(_owner);
	}
	function withdrawableDividendOf(address _owner) public view override returns(uint256) {
		return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
	}
	function withdrawnDividendOf(address _owner) public view override returns(uint256) {
		return withdrawnDividends[_owner];
	}
	function accumulativeDividendOf(address _owner) public view override returns(uint256) {
		return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
		.add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
	}
	function _transfer(address from, address to, uint256 value) internal virtual override {
		require(false);
		int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
		magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
		magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
	}
	function _mint(address account, uint256 value) internal override {
		super._mint(account, value);
		magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
		.sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
	}
	function _burn(address account, uint256 value) internal override {
		super._burn(account, value);
		magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
		.add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
	}
	function _setBalance(address account, uint256 newBalance) internal {
		uint256 currentBalance = balanceOf(account);
		if(newBalance > currentBalance) {
			uint256 mintAmount = newBalance.sub(currentBalance);
			_mint(account, mintAmount);
		} else if(newBalance < currentBalance) {
			uint256 burnAmount = currentBalance.sub(newBalance);
			_burn(account, burnAmount);
		}
	}
	function _setRewardToken(address token) internal onlyOwner {
	    rewardToken = token;
	}
	function _setUniswapRouter(address router) internal onlyOwner {
	    uniswapV2Router = IRouter(router);
	}
}

contract BennoInu is Ownable, ERC20 {

	IRouter public uniswapV2Router;
	address public immutable uniswapV2Pair;

	string private constant _name =  "Benno Inu";
	string private constant _symbol = "Benno";
	uint8 private constant _decimals = 18;

	BennoTokenDividendTracker public dividendTracker;
    
	mapping(address => bool) private _isBlackListedBot;
	address[] private _blackListedBots;

	bool public isTradingEnabled;

	// initialSupply
	uint256 constant initialSupply = 100000000000000e18; 

	uint256 public maxWalletAmount = initialSupply * 3;

	uint256 public maxTxAmount = initialSupply * 3;

	bool private _swapping;
	uint256 public minimumTokensBeforeSwap = 150000000 * (10**18);

	struct CustomTaxPeriod {
		bytes23 periodName;
		uint8 blocksInPeriod;
		uint256 timeInPeriod;
		uint8 liquidityFeeOnBuy;
		uint8 liquidityFeeOnSell;		
        uint8 burnFeeOnBuy;
		uint8 burnFeeOnSell;
		uint8 reflectionsFeeOnBuy;
		uint8 reflectionsFeeOnSell;
	}

	// Base taxes
	CustomTaxPeriod private _base = CustomTaxPeriod("base",0,0,1,1,2,2,3,3);

	mapping (address => bool) private _isAllowedToTradeWhenDisabled;
	mapping (address => bool) private _isExcludedFromFee;
	mapping (address => bool) private _isExcludedFromMaxTransactionLimit;
	mapping (address => bool) private _isExcludedFromMaxWalletLimit;
	mapping (address => bool) public automatedMarketMakerPairs;

	uint8 private _liquidityFee;	
    uint8 private _burnFee;
	uint8 private _reflectionsFee;
	uint8 private _totalFee;

	event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
	event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
	event WalletChange(string indexed indentifier, address indexed newWallet, address indexed oldWallet);
	event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 burnFee, uint8 holdersFee);
	event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period);
	event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event ExcludeFromFeesChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
	event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);
	event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
	event MinTokenAmountForDividendsChange(uint256 indexed newValue, uint256 indexed oldValue);
	event DividendsSent(uint256 tokensSwapped);
	event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity);
    event ClaimETHOverflow(uint256 amount);
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
	event FeesApplied(uint8 liquidityFee, uint8 burnFee, uint8 holdersFee, uint8 totalFee);
	event botAddedToBlacklist(address account);
    event botRemovedFromBlacklist(address account);


	constructor() ERC20(_name, _symbol) {
		dividendTracker = new BennoTokenDividendTracker();
		dividendTracker.setUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dividendTracker.setRewardToken(address(this));

		IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
		address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
		uniswapV2Router = _uniswapV2Router;
		uniswapV2Pair = _uniswapV2Pair;
		_setAutomatedMarketMakerPair(_uniswapV2Pair, true);

		_isExcludedFromFee[owner()] = true;
		_isExcludedFromFee[address(this)] = true;
		_isExcludedFromFee[address(dividendTracker)] = true;

		dividendTracker.excludeFromDividends(address(dividendTracker));
		dividendTracker.excludeFromDividends(address(this));
		dividendTracker.excludeFromDividends(address(0x000000000000000000000000000000000000dEaD));
		dividendTracker.excludeFromDividends(owner());
		dividendTracker.excludeFromDividends(address(_uniswapV2Router));

		_isAllowedToTradeWhenDisabled[owner()] = true;

		_isExcludedFromMaxTransactionLimit[address(dividendTracker)] = true;
		_isExcludedFromMaxTransactionLimit[address(this)] = true;

		_isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
		_isExcludedFromMaxWalletLimit[address(dividendTracker)] = true;
		_isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
		_isExcludedFromMaxWalletLimit[address(this)] = true;
		_isExcludedFromMaxWalletLimit[owner()] = true;

		_mint(owner(), initialSupply);
	}

	receive() external payable {}

	// Setters
	function activateTrading() external onlyOwner {
		isTradingEnabled = true;
	}
	function deactivateTrading() external onlyOwner {
		isTradingEnabled = false;
	}
	function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(automatedMarketMakerPairs[pair] != value, "BennoToken: Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;
		if(value) {
			dividendTracker.excludeFromDividends(pair);
		}
		emit AutomatedMarketMakerPairChange(pair, value);
	}
	function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}
	function excludeFromFees(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromFee[account] != excluded, "BennoToken: Account is already the value of 'excluded'");
		_isExcludedFromFee[account] = excluded;
		emit ExcludeFromFeesChange(account, excluded);
	}
	function excludeFromDividends(address account) external onlyOwner {
		dividendTracker.excludeFromDividends(account);
	}
	function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxTransactionLimit[account] != excluded, "BennoToken: Account is already the value of 'excluded'");
		_isExcludedFromMaxTransactionLimit[account] = excluded;
		emit ExcludeFromMaxTransferChange(account, excluded);
	}
	function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxWalletLimit[account] != excluded, "BennoToken: Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
		emit ExcludeFromMaxWalletChange(account, excluded);
	}

    //Recover contract balance ETH (if sent by accident)
    function recoverEth() external onlyOwner() {
        payable(msg.sender).transfer(address(this).balance);
    }
    //Recover any token from the contract 
    function recoverToken(address _token, uint256 amount) external onlyOwner returns (bool _sent){
        _sent = IERC20(_token).transfer(msg.sender, amount);
    }

	function addBotToBlacklist(address account) external onlyOwner {
        require(
            account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,
            "We cannot blacklist UniSwap router"
        );
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);

        emit botAddedToBlacklist(account);
    }

        function isBotBlacklisted(address account) public view returns(bool) {
            return _isBlackListedBot[account];
    }

	function removeBotFromBlacklist(address account) external onlyOwner {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[
                    _blackListedBots.length - 1
                ];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
        emit botRemovedFromBlacklist(account);
    }

	// Base fees
	function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _burnFeeOnBuy, uint8 _reflectionsFeeOnBuy) external onlyOwner {
		_setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _burnFeeOnBuy, _reflectionsFeeOnBuy);
		emit FeeChange("baseFees-Buy", _liquidityFeeOnBuy, _burnFeeOnBuy, _reflectionsFeeOnBuy);
	}
	function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _burnFeeOnSell, uint8 _reflectionsFeeOnSell) external onlyOwner {
		_setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _burnFeeOnSell, _reflectionsFeeOnSell);
		emit FeeChange("baseFees-Sell", _liquidityFeeOnSell, _burnFeeOnSell, _reflectionsFeeOnSell);
	}
	function setUniswapRouter(address newAddress) external onlyOwner {
		require(newAddress != address(uniswapV2Router), "BennoToken: The router already has that address");
		emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
		uniswapV2Router = IRouter(newAddress);
		dividendTracker.setUniswapRouter(newAddress);
	}
	function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxTxAmount, "BennoToken: Cannot update maxTxAmount to same value");
		emit MaxTransactionAmountChange(newValue, maxTxAmount);
		maxTxAmount = newValue;
	}
	function setMaxWalletAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxWalletAmount, "BennoToken: Cannot update maxWalletAmount to same value");
		emit MaxWalletAmountChange(newValue, maxWalletAmount);
		maxWalletAmount = newValue;
	}
	function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
		require(newValue != minimumTokensBeforeSwap, "BennoToken: Cannot update minimumTokensBeforeSwap to same value");
		emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
		minimumTokensBeforeSwap = newValue;
	}
	function setMinimumTokenBalanceForDividends(uint256 newValue) external onlyOwner {
		dividendTracker.setTokenBalanceForDividends(newValue);
	}
	function claim() external {
		dividendTracker.processAccount(payable(msg.sender), false);
    }
	function updateClaimWait(uint256 claimWait) external onlyOwner {
        dividendTracker.updateClaimWait(claimWait);
    }
    function getClaimWait() external view returns(uint256) {
        return dividendTracker.claimWait();
    }
	function claimETHOverflow(uint256 amount) external onlyOwner {
	    require(amount < address(this).balance, "BennoToken: Cannot send more than contract balance");
        (bool success,) = address(owner()).call{value : amount}("");
        if (success){
            emit ClaimETHOverflow(amount);
        }
	}

	function burn(uint256 value) external {
		_burn(msg.sender, value);
	}


	// Getters
	function getTotalDividendsDistributed() external view returns (uint256) {
		return dividendTracker.totalDividendsDistributed();
	}
	function withdrawableDividendOf(address account) external view returns(uint256) {
		return dividendTracker.withdrawableDividendOf(account);
	}
	function dividendTokenBalanceOf(address account) external view returns (uint256) {
		return dividendTracker.balanceOf(account);
	}
	function getNumberOfDividendTokenHolders() external view returns(uint256) {
		return dividendTracker.getNumberOfTokenHolders();
	}
	function getBaseBuyFees() external view returns (uint8, uint8, uint8){
		return (_base.liquidityFeeOnBuy, _base.burnFeeOnBuy, _base.reflectionsFeeOnBuy);
	}
	function getBaseSellFees() external view returns (uint8, uint8, uint8){
		return (_base.liquidityFeeOnSell, _base.burnFeeOnSell, _base.reflectionsFeeOnSell);
	}

	// Main
	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(!_isBlackListedBot[from], "from is blacklisted");
        	require(!_isBlackListedBot[msg.sender], "you are blacklisted");
        	require(!_isBlackListedBot[tx.origin], "blacklisted");
			require(amount > 0, "Transfer amount must be greater than zero");



			bool isBuyFromLp = automatedMarketMakerPairs[from];
			bool isSelltoLp = automatedMarketMakerPairs[to];

			if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
				require(isTradingEnabled, "BennoToken: Trading is currently disabled.");
				if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
					require(amount <= maxTxAmount, "BennoToken: Buy amount exceeds the maxTxBuyAmount.");
				}
				if (!_isExcludedFromMaxWalletLimit[to]) {
					require((balanceOf(to) + amount) <= maxWalletAmount, "BennoToken: Expected wallet amount exceeds the maxWalletAmount.");
				}
			}

			_adjustTaxes(isBuyFromLp, isSelltoLp);
			bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

			if (
				isTradingEnabled &&
				canSwap &&
				!_swapping &&
				_totalFee > 0 &&
				automatedMarketMakerPairs[to]
			) {
				_swapping = true;
				_swapAndLiquify();
				_swapping = false;
			}

			bool takeFee = !_swapping && isTradingEnabled;

			if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
				takeFee = false;
			}
			if (takeFee && _totalFee > 0) {
				uint256 fee = amount * _totalFee / 100;
                uint256 burnAmount = amount * _burnFee / 100;
				amount = amount - fee;
				super._transfer(from, address(this), fee);

                if (burnAmount > 0) {
                    super._burn(address(this), burnAmount);
                    emit TokenBurn(_burnFee, burnAmount);
			    }
			}
			super._transfer(from, to, amount);

            try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
		    try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}
	}
	function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private {
		_liquidityFee = 0;
        _burnFee = 0;
		_reflectionsFee = 0;

		if (isBuyFromLp) {
			_liquidityFee = _base.liquidityFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
			_reflectionsFee = _base.reflectionsFeeOnBuy;
		}
	    if (isSelltoLp) {
	    	_liquidityFee = _base.liquidityFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
			_reflectionsFee = _base.reflectionsFeeOnSell;
		}
        if (!isSelltoLp && !isBuyFromLp) {
			_liquidityFee = _base.liquidityFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
			_reflectionsFee = _base.reflectionsFeeOnSell;
		}
		_totalFee = _liquidityFee  + _burnFee + _reflectionsFee;
		emit FeesApplied(_liquidityFee, _burnFee, _reflectionsFee, _totalFee);
	}
	function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnSell,
        uint8 _burnFeeOnSell,
		uint8 _reflectionsFeeOnSell
	) private {
		if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
			emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, "liquidityFeeOnSell", map.periodName);
			map.liquidityFeeOnSell = _liquidityFeeOnSell;
		}	
        if (map.burnFeeOnSell != _burnFeeOnSell) {
			emit CustomTaxPeriodChange(_burnFeeOnSell, map.burnFeeOnSell, "burnFeeOnSell", map.periodName);
			map.burnFeeOnSell = _burnFeeOnSell;
		}
		if (map.reflectionsFeeOnSell != _reflectionsFeeOnSell) {
			emit CustomTaxPeriodChange(_reflectionsFeeOnSell, map.reflectionsFeeOnSell, "reflectionsFeeOnSell", map.periodName);
			map.reflectionsFeeOnSell = _reflectionsFeeOnSell;
		}
	}
	function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnBuy,
        uint8 _burnFeeOnBuy,
		uint8 _reflectionsFeeOnBuy
		) private {
		if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
			emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, "liquidityFeeOnBuy", map.periodName);
			map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
		}
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
			emit CustomTaxPeriodChange(_burnFeeOnBuy, map.burnFeeOnBuy, "burnFeeOnBuy", map.periodName);
			map.burnFeeOnBuy = _burnFeeOnBuy;
		}
		if (map.reflectionsFeeOnBuy != _reflectionsFeeOnBuy) {
			emit CustomTaxPeriodChange(_reflectionsFeeOnBuy, map.reflectionsFeeOnBuy, "reflectionsFeeOnBuy", map.periodName);
			map.reflectionsFeeOnBuy = _reflectionsFeeOnBuy;
		}
	}
	function _swapAndLiquify() private {
		uint256 contractBalance = balanceOf(address(this));
		uint256 initialETHBalance = address(this).balance;

		uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2;
        uint256 amountForHolders = contractBalance * _reflectionsFee / _totalFee;
		uint256 amountToSwap = contractBalance - (amountToLiquify + amountForHolders);

		_swapTokensForETH(amountToSwap);

		uint256 ETHBalanceAfterSwap = address(this).balance  - initialETHBalance;
		uint256 totalETHFee = _totalFee - ((_liquidityFee / 2) + _burnFee + _reflectionsFee);
		uint256 amountETHLiquidity = ETHBalanceAfterSwap * _liquidityFee / totalETHFee / 2;

		if (amountToLiquify > 0) {
			_addLiquidity(amountToLiquify, amountETHLiquidity);
			emit SwapAndLiquify(amountToSwap, amountETHLiquidity, amountToLiquify);
        }

		(bool success) = IERC20(address(this)).transfer(address(dividendTracker), amountForHolders);
		if(success) {
			dividendTracker.distributeDividendsUsingAmount(amountForHolders);
			emit DividendsSent(amountForHolders);
		}
	}
	function _swapTokensForETH(uint256 tokenAmount) private {
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = uniswapV2Router.WETH();
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			0, // accept any amount of ETH
			path,
			address(this),
			block.timestamp
		);
	}
	function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
		_approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
		uniswapV2Router.addLiquidityETH{value: ethAmount}(
			address(this),
			tokenAmount,
			0, // slippage is unavoidable
			0, // slippage is unavoidable
			address(this),
			block.timestamp
		);
	}
}

contract BennoTokenDividendTracker is DividendPayingToken {
	using SafeMath for uint256;
	using SafeMathInt for int256;
	using IterableMapping for IterableMapping.Map;

	IterableMapping.Map private tokenHoldersMap;

	mapping (address => bool) public excludedFromDividends;
	mapping (address => uint256) public lastClaimTimes;
	uint256 public claimWait;
	uint256 public minimumTokenBalanceForDividends;

	event ExcludeFromDividends(address indexed account);
	event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
	event Claim(address indexed account, uint256 amount, bool indexed automatic);

	constructor() DividendPayingToken("SHI_Token_Dividend_Tracker", "SHI_Token_Dividend_Tracker") {
		claimWait = 3600; // 1 Hour
		minimumTokenBalanceForDividends = 0 * (10**18); // by default 0
	}
	function setRewardToken(address token) external onlyOwner {
	    _setRewardToken(token);
	}
	function setUniswapRouter(address router) external onlyOwner {
	    _setUniswapRouter(router);
	}
	function _transfer(address, address, uint256) internal override pure {
		require(false, "SHI_Token_Dividend_Tracker: No transfers allowed");
	}
	function excludeFromDividends(address account) external onlyOwner {
		require(!excludedFromDividends[account]);
		excludedFromDividends[account] = true;
		_setBalance(account, 0);
		tokenHoldersMap.remove(account);
		emit ExcludeFromDividends(account);
	}

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "SHI_Token_Tracker: claimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "SHI_Token_Reward_Tracker: Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

	function setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
		require(minimumTokenBalanceForDividends != newValue, "SHI_Token_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'.");
		minimumTokenBalanceForDividends = newValue;
	}
	function getNumberOfTokenHolders() external view returns(uint256) {
		return tokenHoldersMap.keys.length;
	}
    function setBalance(address payable account, uint256 newBalance) external onlyOwner {
		if(excludedFromDividends[account]) {
			return;
		}
		if(newBalance >= minimumTokenBalanceForDividends) {
			_setBalance(account, newBalance);
			tokenHoldersMap.set(account, newBalance);
		}
		else {
			_setBalance(account, 0);
			tokenHoldersMap.remove(account);
		}
		processAccount(account, true);
	}
	function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
		uint256 amount = _withdrawDividendOfUser(account);
		if(amount > 0) {
			lastClaimTimes[account] = block.timestamp;
			emit Claim(account, amount, automatic);
			return true;
		}
		return false;
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountForDividendsChange","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":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"botAddedToBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"botRemovedFromBlacklist","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract BennoTokenDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","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":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","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":"isBotBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_reflectionsFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_reflectionsFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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 IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526200001f6d04ee2d6d415b85acef8100000000600362000afb565b600b556200003d6d04ee2d6d415b85acef8100000000600362000afb565b600c556a7c13bc4b2c133c56000000600e556040805161012081018252636261736560e01b81526000602082018190529181018290526001606082018190526080820152600260a0820181905260c0820152600360e0820181905261010090910152600f80546001600160c01b031916636261736560981b179055601055601180546503030202010165ffffffffffff19909116179055348015620000e157600080fd5b506040518060400160405280600981526020016842656e6e6f20496e7560b81b8152506040518060400160405280600581526020016442656e6e6f60d81b815250600062000134620007d860201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060046200018c838262000bc1565b5060056200019b828262000bc1565b505050604051620001ac9062000ad7565b604051809103906000f080158015620001c9573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200023457600080fd5b505af115801562000249573d6000803e3d6000fd5b5050600754604051638aee812760e01b81523060048201526001600160a01b039091169250638aee81279150602401600060405180830381600087803b1580156200029357600080fd5b505af1158015620002a8573d6000803e3d6000fd5b505050506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000306573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032c919062000c8d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a0919062000c8d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000414919062000c8d565b600680546001600160a01b0319166001600160a01b03858116919091179091558116608052905062000448816001620007dc565b600160136000620004616000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260139093528183208054851660019081179091556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620004f757600080fd5b505af11580156200050c573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200055657600080fd5b505af11580156200056b573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620005b757600080fd5b505af1158015620005cc573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db09050620005f66000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200063857600080fd5b505af11580156200064d573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200069957600080fd5b505af1158015620006ae573d6000803e3d6000fd5b50505050600160126000620006c86200095260201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600780548316825260148552838220805487166001908117909155308084528584208054891683179055888516845260159687905285842080548916831790559154841683528483208054881682179055600654909316825283822080548716841790558152918220805490941681179093556200077c6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620007d0620007bb6000546001600160a01b031690565b6d04ee2d6d415b85acef810000000062000961565b505062000cd3565b3390565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620008865760405162461bcd60e51b8152602060048201526044602482018190527f42656e6e6f546f6b656e3a204175746f6d61746564206d61726b6574206d616b908201527f6572207061697220697320616c72656164792073657420746f20746861742076606482015263616c756560e01b608482015260a4015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff19168215801591909117909155620009165760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015620008fc57600080fd5b505af115801562000911573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6000546001600160a01b031690565b6001600160a01b038216620009b95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200087d565b620009d58160035462000a6d60201b62001df31790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000a0a91839062001df362000a6d821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000a5c9085815260200190565b60405180910390a35050565b505050565b60008062000a7c838562000cb8565b90508381101562000ad05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200087d565b9392505050565b611ffb806200460d83390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000b185762000b1862000ae5565b500290565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000b4857607f821691505b60208210810362000b6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a6857600081815260208120601f850160051c8101602086101562000b985750805b601f850160051c820191505b8181101562000bb95782815560010162000ba4565b505050505050565b81516001600160401b0381111562000bdd5762000bdd62000b1d565b62000bf58162000bee845462000b33565b8462000b6f565b602080601f83116001811462000c2d576000841562000c145750858301515b600019600386901b1c1916600185901b17855562000bb9565b600085815260208120601f198616915b8281101562000c5e5788860151825594840194600190910190840162000c3d565b508582101562000c7d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000ca057600080fd5b81516001600160a01b038116811462000ad057600080fd5b6000821982111562000cce5762000cce62000ae5565b500190565b60805161391e62000cef600039600061059f015261391e6000f3fe6080604052600436106103035760003560e01c806376dca83511610190578063b29a8140116100dc578063d2d7ad8311610095578063e62572461161006f578063e625724614610959578063e98030c714610979578063f2fde38b14610999578063fe017535146109b957600080fd5b8063d2d7ad83146108dd578063d3221576146108f3578063dd62ed3e1461091357600080fd5b8063b29a8140146107ea578063b62496f51461080a578063bcdb446b1461083a578063bea9849e1461084f578063c02466681461086f578063cd43e2281461088f57600080fd5b8063a26579ad11610149578063a9059cbb11610123578063a9059cbb14610774578063aa4bde2814610794578063aee50b1e146107aa578063b030b34a146107ca57600080fd5b8063a26579ad1461071f578063a457c2d714610734578063a8b9d2401461075457600080fd5b806376dca83514610676578063781edb3c14610696578063880bcbc1146106b65780638c0b5e22146106d65780638da5cb5b146106ec57806395d89b411461070a57600080fd5b806330bb4cff1161024f57806349bd5a5e1161020857806364b0f653116101e257806364b0f653146105f65780636843cd841461060b57806370a082311461062b578063715018a61461066157600080fd5b806349bd5a5e1461058d5780634e71d92d146105c15780635ebf4db9146105d657600080fd5b806330bb4cff146104e7578063313ce567146104fc57806331e79db01461051857806334cf1fea14610538578063395093511461054d57806342966c681461056d57600080fd5b80631694505e116102bc5780631e293c10116102965780631e293c101461046757806323b872dd1461048757806327a14fc2146104a75780632c1f5216146104c757600080fd5b80631694505e146103f057806318160ddd146104285780631d7ef8791461044757600080fd5b806305cb48931461030f578063064a59d01461035d57806306fdde0314610377578063095ea7b314610399578063098df585146103b95780630bd05b69146103db57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061034861032a3660046132da565b6001600160a01b031660009081526008602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561036957600080fd5b50600a546103489060ff1681565b34801561038357600080fd5b5061038c6109eb565b60405161035491906132f7565b3480156103a557600080fd5b506103486103b436600461334c565b610a7d565b3480156103c557600080fd5b506103d96103d4366004613378565b610a93565b005b3480156103e757600080fd5b506103d9610bc5565b3480156103fc57600080fd5b50600654610410906001600160a01b031681565b6040516001600160a01b039091168152602001610354565b34801561043457600080fd5b506003545b604051908152602001610354565b34801561045357600080fd5b506103d96104623660046132da565b610bfe565b34801561047357600080fd5b506103d9610482366004613378565b610da5565b34801561049357600080fd5b506103486104a2366004613391565b610e6f565b3480156104b357600080fd5b506103d96104c2366004613378565b610ed8565b3480156104d357600080fd5b50600754610410906001600160a01b031681565b3480156104f357600080fd5b50610439610fac565b34801561050857600080fd5b5060405160128152602001610354565b34801561052457600080fd5b506103d96105333660046132da565b61101f565b34801561054457600080fd5b506103d96110ac565b34801561055957600080fd5b5061034861056836600461334c565b6110e2565b34801561057957600080fd5b506103d9610588366004613378565b611118565b34801561059957600080fd5b506104107f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cd57600080fd5b506103d9611125565b3480156105e257600080fd5b506103d96105f1366004613378565b61119a565b34801561060257600080fd5b506104396111f5565b34801561061757600080fd5b506104396106263660046132da565b61123f565b34801561063757600080fd5b506104396106463660046132da565b6001600160a01b031660009081526001602052604090205490565b34801561066d57600080fd5b506103d96112b5565b34801561068257600080fd5b506103d96106913660046133e8565b611329565b3480156106a257600080fd5b506103d96106b1366004613439565b6113cd565b3480156106c257600080fd5b506103d96106d1366004613439565b611497565b3480156106e257600080fd5b50610439600c5481565b3480156106f857600080fd5b506000546001600160a01b0316610410565b34801561071657600080fd5b5061038c611559565b34801561072b57600080fd5b50610439611568565b34801561074057600080fd5b5061034861074f36600461334c565b6115b2565b34801561076057600080fd5b5061043961076f3660046132da565b611601565b34801561078057600080fd5b5061034861078f36600461334c565b611634565b3480156107a057600080fd5b50610439600b5481565b3480156107b657600080fd5b506103d96107c5366004613378565b611641565b3480156107d657600080fd5b506103d96107e53660046132da565b611715565b3480156107f657600080fd5b5061034861080536600461334c565b6118f9565b34801561081657600080fd5b506103486108253660046132da565b60166020526000908152604090205460ff1681565b34801561084657600080fd5b506103d961199c565b34801561085b57600080fd5b506103d961086a3660046132da565b6119f2565b34801561087b57600080fd5b506103d961088a366004613439565b611b16565b34801561089b57600080fd5b5060115460ff80821691620100008104821691640100000000909104165b6040805160ff94851681529284166020840152921691810191909152606001610354565b3480156108e957600080fd5b50610439600e5481565b3480156108ff57600080fd5b506103d961090e366004613439565b611bd8565b34801561091f57600080fd5b5061043961092e366004613472565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561096557600080fd5b506103d96109743660046133e8565b611c5a565b34801561098557600080fd5b506103d9610994366004613378565b611cae565b3480156109a557600080fd5b506103d96109b43660046132da565b611d09565b3480156109c557600080fd5b5060115460ff610100820481169163010000008104821691600160281b909104166108b9565b6060600480546109fa906134a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a26906134a0565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b5050505050905090565b6000610a8a338484611e52565b50600192915050565b6000546001600160a01b03163314610ac65760405162461bcd60e51b8152600401610abd906134da565b60405180910390fd5b478110610b305760405162461bcd60e51b815260206004820152603260248201527f42656e6e6f546f6b656e3a2043616e6e6f742073656e64206d6f7265207468616044820152716e20636f6e74726163742062616c616e636560701b6064820152608401610abd565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610b7d576040519150601f19603f3d011682016040523d82523d6000602084013e610b82565b606091505b505090508015610bc1576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610bef5760405162461bcd60e51b8152600401610abd906134da565b600a805460ff19166001179055565b6000546001600160a01b03163314610c285760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d03610c9f5760405162461bcd60e51b815260206004820152602260248201527f57652063616e6e6f7420626c61636b6c69737420556e695377617020726f757460448201526132b960f11b6064820152608401610abd565b6001600160a01b03811660009081526008602052604090205460ff1615610d085760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c697374656400006044820152606401610abd565b6001600160a01b0381166000818152600860209081526040808320805460ff191660019081179091556009805491820181559093527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90920180546001600160a01b0319168417905590519182527f6cf65f3ff491cb358bea0efd5ee0fe0340757225d38a096d09c637ba897a679f91015b60405180910390a150565b6000546001600160a01b03163314610dcf5760405162461bcd60e51b8152600401610abd906134da565b600c548103610e3c5760405162461bcd60e51b815260206004820152603360248201527f42656e6e6f546f6b656e3a2043616e6e6f7420757064617465206d61785478416044820152726d6f756e7420746f2073616d652076616c756560681b6064820152608401610abd565b600c5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600c55565b6000610e7c848484611f77565b610ece8433610ec98560405180606001604052806028815260200161387c602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061266e565b611e52565b5060019392505050565b6000546001600160a01b03163314610f025760405162461bcd60e51b8152600401610abd906134da565b600b548103610f795760405162461bcd60e51b815260206004820152603760248201527f42656e6e6f546f6b656e3a2043616e6e6f7420757064617465206d617857616c60448201527f6c6574416d6f756e7420746f2073616d652076616c75650000000000000000006064820152608401610abd565b600b5460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600b55565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101a919061350f565b905090565b6000546001600160a01b031633146110495760405162461bcd60e51b8152600401610abd906134da565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b15801561109157600080fd5b505af11580156110a5573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146110d65760405162461bcd60e51b8152600401610abd906134da565b600a805460ff19169055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610a8a918590610ec99086611df3565b61112233826126a8565b50565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611176573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111229190613528565b6000546001600160a01b031633146111c45760405162461bcd60e51b8152600401610abd906134da565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401611077565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ff6573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af919061350f565b92915050565b6000546001600160a01b031633146112df5760405162461bcd60e51b8152600401610abd906134da565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113535760405162461bcd60e51b8152600401610abd906134da565b611360600f8484846127b3565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146113f75760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036114375760405162461bcd60e51b8152600401610abd90613545565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146114c15760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036115015760405162461bcd60e51b8152600401610abd90613545565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a40910161148b565b6060600580546109fa906134a0565b60075460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610ff6573d6000803e3d6000fd5b6000610a8a3384610ec9856040518060600160405280602581526020016138c4602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061266e565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d2409060240161126e565b6000610a8a338484611f77565b6000546001600160a01b0316331461166b5760405162461bcd60e51b8152600401610abd906134da565b600e5481036116e25760405162461bcd60e51b815260206004820152603f60248201527f42656e6e6f546f6b656e3a2043616e6e6f7420757064617465206d696e696d7560448201527f6d546f6b656e734265666f72655377617020746f2073616d652076616c7565006064820152608401610abd565b600e5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600e55565b6000546001600160a01b0316331461173f5760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b03811660009081526008602052604090205460ff166117a75760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610abd565b60005b6009548110156118bf57816001600160a01b0316600982815481106117d1576117d161359b565b6000918252602090912001546001600160a01b0316036118ad57600980546117fb906001906135c7565b8154811061180b5761180b61359b565b600091825260209091200154600980546001600160a01b0390921691839081106118375761183761359b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600890915260409020805460ff191690556009805480611886576118866135de565b600082815260209020810160001990810180546001600160a01b03191690550190556118bf565b806118b7816135f4565b9150506117aa565b506040516001600160a01b03821681527fbbde34c13f8f74d401949e0eb9a888308ee89bb0887791bba7e8dd0bced4704190602001610d9a565b600080546001600160a01b031633146119245760405162461bcd60e51b8152600401610abd906134da565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119959190613528565b9392505050565b6000546001600160a01b031633146119c65760405162461bcd60e51b8152600401610abd906134da565b60405133904780156108fc02916000818181858888f19350505050158015611122573d6000803e3d6000fd5b6000546001600160a01b03163314611a1c5760405162461bcd60e51b8152600401610abd906134da565b6006546001600160a01b0390811690821603611a925760405162461bcd60e51b815260206004820152602f60248201527f42656e6e6f546f6b656e3a2054686520726f7574657220616c7265616479206860448201526e61732074686174206164647265737360881b6064820152608401610abd565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401611077565b6000546001600160a01b03163314611b405760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503611b805760405162461bcd60e51b8152600401610abd90613545565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b910161148b565b6000546001600160a01b03163314611c025760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910161148b565b6000546001600160a01b03163314611c845760405162461bcd60e51b8152600401610abd906134da565b611c91600f84848461297b565b6040516b62617365466565732d42757960a01b8152600c0161137a565b6000546001600160a01b03163314611cd85760405162461bcd60e51b8152600401610abd906134da565b60075460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401611077565b6000546001600160a01b03163314611d335760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b038116611d985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e00838561360d565b9050838110156119955760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610abd565b6001600160a01b038316611eb45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abd565b6001600160a01b038216611f155760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abd565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611f9d5760405162461bcd60e51b8152600401610abd90613625565b6001600160a01b038216611fc35760405162461bcd60e51b8152600401610abd9061366a565b6001600160a01b03831660009081526008602052604090205460ff16156120225760405162461bcd60e51b8152602060048201526013602482015272199c9bdb481a5cc8189b1858dadb1a5cdd1959606a1b6044820152606401610abd565b3360009081526008602052604090205460ff16156120785760405162461bcd60e51b81526020600482015260136024820152721e5bdd48185c9948189b1858dadb1a5cdd1959606a1b6044820152606401610abd565b3260009081526008602052604090205460ff16156120c65760405162461bcd60e51b815260206004820152600b60248201526a189b1858dadb1a5cdd195960aa1b6044820152606401610abd565b600081116121285760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610abd565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff92831692918216911615801561218a57506001600160a01b03841660009081526012602052604090205460ff16155b1561236957600a5460ff166121f45760405162461bcd60e51b815260206004820152602a60248201527f42656e6e6f546f6b656e3a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b6064820152608401610abd565b6001600160a01b03841660009081526014602052604090205460ff1615801561223657506001600160a01b03851660009081526014602052604090205460ff16155b156122a857600c548311156122a85760405162461bcd60e51b815260206004820152603260248201527f42656e6e6f546f6b656e3a2042757920616d6f756e742065786365656473207460448201527134329036b0bc2a3c213abca0b6b7bab73a1760711b6064820152608401610abd565b6001600160a01b03841660009081526015602052604090205460ff1661236957600b54836122eb866001600160a01b031660009081526001602052604090205490565b6122f5919061360d565b11156123695760405162461bcd60e51b815260206004820152603f60248201527f42656e6e6f546f6b656e3a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e006064820152608401610abd565b6123738282612b30565b600e5430600090815260016020526040902054600a549111159060ff1680156123995750805b80156123a85750600d5460ff16155b80156123bf57506017546301000000900460ff1615155b80156123e357506001600160a01b03851660009081526016602052604090205460ff165b1561240857600d805460ff191660011790556123fd612cd2565b600d805460ff191690555b600d5460009060ff161580156124205750600a5460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061246257506001600160a01b03861660009081526013602052604090205460ff165b1561246b575060005b80801561248357506017546301000000900460ff1615155b15612548576017546000906064906124a5906301000000900460ff16886136ad565b6124af91906136e2565b6017549091506000906064906124cd90610100900460ff16896136ad565b6124d791906136e2565b90506124e382886135c7565b96506124f0893084612f73565b80156125455761250030826126a8565b6017546040805161010090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612553878787612f73565b6007546001600160a01b031663e30443bc88612584816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156125ca57600080fd5b505af19250505080156125db575060015b506007546001600160a01b031663e30443bc8761260d816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561265357600080fd5b505af1925050508015612664575060015b5050505050505050565b600081848411156126925760405162461bcd60e51b8152600401610abd91906132f7565b50600061269f84866135c7565b95945050505050565b6001600160a01b0382166127085760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610abd565b61274581604051806060016040528060228152602001613834602291396001600160a01b038516600090815260016020526040902054919061266e565b6001600160a01b03831660009081526001602052604090205560035461276b908261307f565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600284015460ff848116610100909204161461284457604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028601548654919260ff610100909204821692918716916000805160206138a4833981519152916128259160481b906136f6565b60405180910390a460028401805461ff00191661010060ff8616021790555b600284015460ff838116630100000090920416146128d8576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028601548654919260ff6301000000909204821692918616916000805160206138a4833981519152916128b59160481b906136f6565b60405180910390a460028401805463ff0000001916630100000060ff8516021790555b600284015460ff828116600160281b909204161461297557604051731c99599b1958dd1a5bdb9cd1995953db94d95b1b60621b815260140160405190819003812060028601548654919260ff600160281b909204821692918516916000805160206138a4833981519152916129509160481b906136f6565b60405180910390a460028401805465ff00000000001916600160281b60ff8416021790555b50505050565b600284015460ff8481169116146129fc57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028601548654919260ff91821692918716916000805160206138a4833981519152916129e29160481b906136f6565b60405180910390a460028401805460ff191660ff85161790555b600284015460ff838116620100009092041614612a8b576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028601548654919260ff62010000909204821692918616916000805160206138a483398151915291612a6a9160481b906136f6565b60405180910390a460028401805462ff000019166201000060ff8516021790555b600284015460ff828116640100000000909204161461297557604051727265666c656374696f6e734665654f6e42757960681b815260130160405190819003812060028601548654919260ff640100000000909204821692918516916000805160206138a483398151915291612b049160481b906136f6565b60405180910390a460028401805460ff83166401000000000264ff000000001990911617905550505050565b6017805462ffffff191690558115612b865760115460178054640100000000830460ff9081166201000090810262ff00001991860483166101000261ffff19909416929095169190911791909117169190911790555b8015612bd2576011546017805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b80158015612bde575081155b15612c29576011546017805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b60175460ff620100008204811691612c499161010082048116911661370d565b612c53919061370d565b6017805463ff000000198116630100000060ff9485168102918217938490556040805193861692861692909217835261010084048516602084015262010000840485169183019190915290910490911660608201527fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b90608001610bb8565b306000908152600160205260408120546017549091479160029060ff63010000008204811691612d039116866136ad565b612d0d91906136e2565b612d1791906136e2565b60175490915060009060ff63010000008204811691612d3e916201000090910416866136ad565b612d4891906136e2565b90506000612d56828461360d565b612d6090866135c7565b9050612d6b816130c1565b6000612d7785476135c7565b60175490915060009060ff6201000082048116916101008104821691612da09160029116613732565b612daa919061370d565b612db4919061370d565b601754612dcb91906301000000900460ff16613754565b60175460ff91821692506000916002918491612de89116866136ad565b612df291906136e2565b612dfc91906136e2565b90508515612e5057612e0e868261321b565b60408051858152602081018390529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101869052600090309063a9059cbb906044016020604051808303816000875af1158015612ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec89190613528565b90508015612f6857600754604051636bf5ecd560e01b8152600481018890526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612f1657600080fd5b505af1158015612f2a573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96986604051612f5f91815260200190565b60405180910390a15b505050505050505050565b6001600160a01b038316612f995760405162461bcd60e51b8152600401610abd90613625565b6001600160a01b038216612fbf5760405162461bcd60e51b8152600401610abd9061366a565b612ffc81604051806060016040528060268152602001613856602691396001600160a01b038616600090815260016020526040902054919061266e565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461302b9082611df3565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f6a9085815260200190565b600061199583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061266e565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130f6576130f661359b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561314f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131739190613777565b816001815181106131865761318661359b565b6001600160a01b0392831660209182029290920101526006546131ac9130911684611e52565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906131e5908590600090869030904290600401613794565b600060405180830381600087803b1580156131ff57600080fd5b505af1158015613213573d6000803e3d6000fd5b505050505050565b6006546132339030906001600160a01b031684611e52565b60065460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156132a0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a59190613805565b6001600160a01b038116811461112257600080fd5b6000602082840312156132ec57600080fd5b8135611995816132c5565b600060208083528351808285015260005b8181101561332457858101830151858201604001528201613308565b81811115613336576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561335f57600080fd5b823561336a816132c5565b946020939093013593505050565b60006020828403121561338a57600080fd5b5035919050565b6000806000606084860312156133a657600080fd5b83356133b1816132c5565b925060208401356133c1816132c5565b929592945050506040919091013590565b803560ff811681146133e357600080fd5b919050565b6000806000606084860312156133fd57600080fd5b613406846133d2565b9250613414602085016133d2565b9150613422604085016133d2565b90509250925092565b801515811461112257600080fd5b6000806040838503121561344c57600080fd5b8235613457816132c5565b915060208301356134678161342b565b809150509250929050565b6000806040838503121561348557600080fd5b8235613490816132c5565b91506020830135613467816132c5565b600181811c908216806134b457607f821691505b6020821081036134d457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561352157600080fd5b5051919050565b60006020828403121561353a57600080fd5b81516119958161342b565b60208082526036908201527f42656e6e6f546f6b656e3a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156135d9576135d96135b1565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201613606576136066135b1565b5060010190565b60008219821115613620576136206135b1565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008160001904831182151516156136c7576136c76135b1565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826136f1576136f16136cc565b500490565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff0382111561372a5761372a6135b1565b019392505050565b600060ff831680613745576137456136cc565b8060ff84160491505092915050565b600060ff821660ff84168082101561376e5761376e6135b1565b90039392505050565b60006020828403121561378957600080fd5b8151611995816132c5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137e45784516001600160a01b0316835293830193918301916001016137bf565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561381a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220301a7d53b7b2543461c1846cd80c86218191ed2cc76a730ef73a596691fee4c164736f6c634300080f003360806040523480156200001157600080fd5b50604080518082018252601a8082527f5348495f546f6b656e5f4469766964656e645f547261636b65720000000000006020808401829052845180860190955291845290830152908181600362000069838262000197565b50600462000078828262000197565b50505060006200008d620000ee60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000263565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011d57607f821691505b6020821081036200013e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019257600081815260208120601f850160051c810160208610156200016d5750805b601f850160051c820191505b818110156200018e5782815560010162000179565b5050505b505050565b81516001600160401b03811115620001b357620001b3620000f2565b620001cb81620001c4845462000108565b8462000144565b602080601f831160018114620002035760008415620001ea5750858301515b600019600386901b1c1916600185901b1785556200018e565b600085815260208120601f198616915b82811015620002345788860151825594840194600190910190840162000213565b5085821015620002535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611d8880620002736000396000f3fe6080604052600436106102085760003560e01c8063715018a611610118578063aafd847a116100a0578063dd62ed3e1161006f578063dd62ed3e14610601578063e30443bc14610647578063e98030c714610667578063f2fde38b14610687578063f7c618c1146106a757600080fd5b8063aafd847a14610575578063bc4c4b37146105ab578063be10b614146105cb578063bea9849e146105e157600080fd5b806391b89fba116100e757806391b89fba146104e057806395d89b4114610500578063a457c2d714610515578063a8b9d24014610535578063a9059cbb1461055557600080fd5b8063715018a61461047757806385a6b3ae1461048c5780638aee8127146104a25780638da5cb5b146104c257600080fd5b806327ce01471161019b5780634e7b827f1161016a5780634e7b827f146103c65780636a474002146103f65780636bf5ecd51461040b5780636f2789ec1461042b57806370a082311461044157600080fd5b806327ce01471461034a578063313ce5671461036a57806331e79db01461038657806339509351146103a657600080fd5b80631694505e116101d75780631694505e146102b057806318160ddd146102e8578063226cfa3d146102fd57806323b872dd1461032a57600080fd5b806306fdde0314610214578063095ea7b31461023f57806309bbedde1461026f578063163c7cef1461028e57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b506102296106c7565b60405161023691906119cf565b60405180910390f35b34801561024b57600080fd5b5061025f61025a366004611a39565b610759565b6040519015158152602001610236565b34801561027b57600080fd5b50600c545b604051908152602001610236565b34801561029a57600080fd5b506102ae6102a9366004611a65565b610770565b005b3480156102bc57600080fd5b506009546102d0906001600160a01b031681565b6040516001600160a01b039091168152602001610236565b3480156102f457600080fd5b50600254610280565b34801561030957600080fd5b50610280610318366004611a7e565b60116020526000908152604090205481565b34801561033657600080fd5b5061025f610345366004611a9b565b610845565b34801561035657600080fd5b50610280610365366004611a7e565b6108ae565b34801561037657600080fd5b5060405160128152602001610236565b34801561039257600080fd5b506102ae6103a1366004611a7e565b61090a565b3480156103b257600080fd5b5061025f6103c1366004611a39565b610a31565b3480156103d257600080fd5b5061025f6103e1366004611a7e565b60106020526000908152604090205460ff1681565b34801561040257600080fd5b506102ae610a67565b34801561041757600080fd5b506102ae610426366004611a65565b610a9d565b34801561043757600080fd5b5061028060125481565b34801561044d57600080fd5b5061028061045c366004611a7e565b6001600160a01b031660009081526020819052604090205490565b34801561048357600080fd5b506102ae610b5a565b34801561049857600080fd5b5061028060075481565b3480156104ae57600080fd5b506102ae6104bd366004611a7e565b610bce565b3480156104ce57600080fd5b506005546001600160a01b03166102d0565b3480156104ec57600080fd5b506102806104fb366004611a7e565b610c01565b34801561050c57600080fd5b50610229610c0c565b34801561052157600080fd5b5061025f610530366004611a39565b610c1b565b34801561054157600080fd5b50610280610550366004611a7e565b610c6a565b34801561056157600080fd5b5061025f610570366004611a39565b610c96565b34801561058157600080fd5b50610280610590366004611a7e565b6001600160a01b03166000908152600b602052604090205490565b3480156105b757600080fd5b5061025f6105c6366004611aea565b610ca3565b3480156105d757600080fd5b5061028060135481565b3480156105ed57600080fd5b506102ae6105fc366004611a7e565b610d51565b34801561060d57600080fd5b5061028061061c366004611b23565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561065357600080fd5b506102ae610662366004611a39565b610d84565b34801561067357600080fd5b506102ae610682366004611a65565b610eee565b34801561069357600080fd5b506102ae6106a2366004611a7e565b611058565b3480156106b357600080fd5b506008546102d0906001600160a01b031681565b6060600380546106d690611b51565b80601f016020809104026020016040519081016040528092919081815260200182805461070290611b51565b801561074f5780601f106107245761010080835404028352916020019161074f565b820191906000526020600020905b81548152906001019060200180831161073257829003601f168201915b5050505050905090565b6000610766338484611143565b5060015b92915050565b6005546001600160a01b031633146107a35760405162461bcd60e51b815260040161079a90611b8b565b60405180910390fd5b80601354036108405760405162461bcd60e51b815260206004820152605c60248201527f5348495f546f6b656e5f4469766964656e645f547261636b65723a206d696e6960448201527f6d756d546f6b656e42616c616e6365466f724469766964656e647320616c726560648201527f616479207468652076616c7565206f6620276e657756616c7565272e00000000608482015260a40161079a565b601355565b6000610852848484611267565b6108a4843361089f85604051806060016040528060288152602001611d06602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906112c8565b611143565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b92610900926108fb926108f5916108f09190611302565b61138b565b9061139b565b6113d9565b61076a9190611bd6565b6005546001600160a01b031633146109345760405162461bcd60e51b815260040161079a90611b8b565b6001600160a01b03811660009081526010602052604090205460ff161561095a57600080fd5b6001600160a01b0381166000908152601060205260408120805460ff191660011790556109889082906113ec565b60405163131836e760e21b8152600c60048201526001600160a01b03821660248201527333a39cf8211fbc46dd89b8dfbee542c09e80bf4190634c60db9c9060440160006040518083038186803b1580156109e257600080fd5b505af41580156109f6573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161076691859061089f9086611451565b6005546001600160a01b03163314610a915760405162461bcd60e51b815260040161079a90611b8b565b610a9a336114b0565b50565b6005546001600160a01b03163314610ac75760405162461bcd60e51b815260040161079a90611b8b565b6000610ad260025490565b11610adc57600080fd5b8015610a9a57610b0f610aee60025490565b610afc83600160801b611302565b610b069190611bd6565b60065490611451565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610b549082611451565b60075550565b6005546001600160a01b03163314610b845760405162461bcd60e51b815260040161079a90611b8b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bf85760405162461bcd60e51b815260040161079a90611b8b565b610a9a81611615565b600061076a82610c6a565b6060600480546106d690611b51565b6000610766338461089f85604051806060016040528060258152602001611d2e602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906112c8565b6001600160a01b0381166000908152600b602052604081205461076a90610c90846108ae565b90611661565b6000610766338484611267565b6005546000906001600160a01b03163314610cd05760405162461bcd60e51b815260040161079a90611b8b565b6000610cdb846114b0565b90508015610d47576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610d359085815260200190565b60405180910390a3600191505061076a565b5060009392505050565b6005546001600160a01b03163314610d7b5760405162461bcd60e51b815260040161079a90611b8b565b610a9a816116a3565b6005546001600160a01b03163314610dae5760405162461bcd60e51b815260040161079a90611b8b565b6001600160a01b03821660009081526010602052604090205460ff16610eea576013548110610e5f57610de182826113ec565b604051632f0ad01760e21b8152600c60048201526001600160a01b0383166024820152604481018290527333a39cf8211fbc46dd89b8dfbee542c09e80bf419063bc2b405c9060640160006040518083038186803b158015610e4257600080fd5b505af4158015610e56573d6000803e3d6000fd5b50505050610edd565b610e6a8260006113ec565b60405163131836e760e21b8152600c60048201526001600160a01b03831660248201527333a39cf8211fbc46dd89b8dfbee542c09e80bf4190634c60db9c9060440160006040518083038186803b158015610ec457600080fd5b505af4158015610ed8573d6000803e3d6000fd5b505050505b610ee8826001610ca3565b505b5050565b6005546001600160a01b03163314610f185760405162461bcd60e51b815260040161079a90611b8b565b610e108110158015610f2d5750620151808111155b610fae5760405162461bcd60e51b815260206004820152604660248201527f5348495f546f6b656e5f547261636b65723a20636c61696d57616974206d757360448201527f74206265207570646174656420746f206265747765656e203120616e6420323460648201526520686f75727360d01b608482015260a40161079a565b60125481036110255760405162461bcd60e51b815260206004820152603f60248201527f5348495f546f6b656e5f5265776172645f547261636b65723a2043616e6e6f7460448201527f2075706461746520636c61696d5761697420746f2073616d652076616c756500606482015260840161079a565b60125460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601255565b6005546001600160a01b031633146110825760405162461bcd60e51b815260040161079a90611b8b565b6001600160a01b0381166110e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161079a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111a55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161079a565b6001600160a01b0382166112065760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161079a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152603060248201527f5348495f546f6b656e5f4469766964656e645f547261636b65723a204e6f207460448201526f1c985b9cd9995c9cc8185b1b1bddd95960821b606482015260840161079a565b600081848411156112ec5760405162461bcd60e51b815260040161079a91906119cf565b5060006112f98486611bf8565b95945050505050565b6000826000036113145750600061076a565b60006113208385611c0f565b90508261132d8583611bd6565b146113845760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161079a565b9392505050565b6000818181121561076a57600080fd5b6000806113a88385611c2e565b9050600083121580156113bb5750838112155b806113d057506000831280156113d057508381125b61138457600080fd5b6000808212156113e857600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561142b5760006114198383611661565b905061142584826116ef565b50610ee8565b80821015610ee857600061143f8284611661565b905061144b8482611753565b50505050565b60008061145e8385611c6f565b9050838110156113845760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161079a565b6000806114bc83610c6a565b9050801561160c576001600160a01b0383166000908152600b60205260409020546114e79082611451565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906115369084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af1158015611592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b69190611c87565b905080611605576001600160a01b0384166000908152600b60205260409020546115e09083611661565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b0316331461163f5760405162461bcd60e51b815260040161079a90611b8b565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061138483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112c8565b6005546001600160a01b031633146116cd5760405162461bcd60e51b815260040161079a90611b8b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6116f98282611797565b6117336117146108f08360065461130290919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611882565b6001600160a01b039092166000908152600a602052604090209190915550565b61175d82826118bf565b6117336117786108f08360065461130290919063ffffffff16565b6001600160a01b0384166000908152600a60205260409020549061139b565b6001600160a01b0382166117ed5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161079a565b6117f960008383610ee8565b6002546118069082611451565b6002556001600160a01b03821660009081526020819052604090205461182c9082611451565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60008061188f8385611ca4565b9050600083121580156118a25750838113155b806113d057506000831280156113d0575083811361138457600080fd5b6001600160a01b03821661191f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161079a565b61192b82600083610ee8565b61196881604051806060016040528060228152602001611ce4602291396001600160a01b03851660009081526020819052604090205491906112c8565b6001600160a01b03831660009081526020819052604090205560025461198e9082611661565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611876565b600060208083528351808285015260005b818110156119fc578581018301518582016040015282016119e0565b81811115611a0e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610a9a57600080fd5b60008060408385031215611a4c57600080fd5b8235611a5781611a24565b946020939093013593505050565b600060208284031215611a7757600080fd5b5035919050565b600060208284031215611a9057600080fd5b813561138481611a24565b600080600060608486031215611ab057600080fd5b8335611abb81611a24565b92506020840135611acb81611a24565b929592945050506040919091013590565b8015158114610a9a57600080fd5b60008060408385031215611afd57600080fd5b8235611b0881611a24565b91506020830135611b1881611adc565b809150509250929050565b60008060408385031215611b3657600080fd5b8235611b4181611a24565b91506020830135611b1881611a24565b600181811c90821680611b6557607f821691505b602082108103611b8557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611bf357634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611c0a57611c0a611bc0565b500390565b6000816000190483118215151615611c2957611c29611bc0565b500290565b600080821280156001600160ff1b0384900385131615611c5057611c50611bc0565b600160ff1b8390038412811615611c6957611c69611bc0565b50500190565b60008219821115611c8257611c82611bc0565b500190565b600060208284031215611c9957600080fd5b815161138481611adc565b60008083128015600160ff1b850184121615611cc257611cc2611bc0565b6001600160ff1b0384018313811615611cdd57611cdd611bc0565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e2dd06412f5ca46a101b482ebad77e393f3da2dfbb29d6809b201d51110001c664736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106103035760003560e01c806376dca83511610190578063b29a8140116100dc578063d2d7ad8311610095578063e62572461161006f578063e625724614610959578063e98030c714610979578063f2fde38b14610999578063fe017535146109b957600080fd5b8063d2d7ad83146108dd578063d3221576146108f3578063dd62ed3e1461091357600080fd5b8063b29a8140146107ea578063b62496f51461080a578063bcdb446b1461083a578063bea9849e1461084f578063c02466681461086f578063cd43e2281461088f57600080fd5b8063a26579ad11610149578063a9059cbb11610123578063a9059cbb14610774578063aa4bde2814610794578063aee50b1e146107aa578063b030b34a146107ca57600080fd5b8063a26579ad1461071f578063a457c2d714610734578063a8b9d2401461075457600080fd5b806376dca83514610676578063781edb3c14610696578063880bcbc1146106b65780638c0b5e22146106d65780638da5cb5b146106ec57806395d89b411461070a57600080fd5b806330bb4cff1161024f57806349bd5a5e1161020857806364b0f653116101e257806364b0f653146105f65780636843cd841461060b57806370a082311461062b578063715018a61461066157600080fd5b806349bd5a5e1461058d5780634e71d92d146105c15780635ebf4db9146105d657600080fd5b806330bb4cff146104e7578063313ce567146104fc57806331e79db01461051857806334cf1fea14610538578063395093511461054d57806342966c681461056d57600080fd5b80631694505e116102bc5780631e293c10116102965780631e293c101461046757806323b872dd1461048757806327a14fc2146104a75780632c1f5216146104c757600080fd5b80631694505e146103f057806318160ddd146104285780631d7ef8791461044757600080fd5b806305cb48931461030f578063064a59d01461035d57806306fdde0314610377578063095ea7b314610399578063098df585146103b95780630bd05b69146103db57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061034861032a3660046132da565b6001600160a01b031660009081526008602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561036957600080fd5b50600a546103489060ff1681565b34801561038357600080fd5b5061038c6109eb565b60405161035491906132f7565b3480156103a557600080fd5b506103486103b436600461334c565b610a7d565b3480156103c557600080fd5b506103d96103d4366004613378565b610a93565b005b3480156103e757600080fd5b506103d9610bc5565b3480156103fc57600080fd5b50600654610410906001600160a01b031681565b6040516001600160a01b039091168152602001610354565b34801561043457600080fd5b506003545b604051908152602001610354565b34801561045357600080fd5b506103d96104623660046132da565b610bfe565b34801561047357600080fd5b506103d9610482366004613378565b610da5565b34801561049357600080fd5b506103486104a2366004613391565b610e6f565b3480156104b357600080fd5b506103d96104c2366004613378565b610ed8565b3480156104d357600080fd5b50600754610410906001600160a01b031681565b3480156104f357600080fd5b50610439610fac565b34801561050857600080fd5b5060405160128152602001610354565b34801561052457600080fd5b506103d96105333660046132da565b61101f565b34801561054457600080fd5b506103d96110ac565b34801561055957600080fd5b5061034861056836600461334c565b6110e2565b34801561057957600080fd5b506103d9610588366004613378565b611118565b34801561059957600080fd5b506104107f000000000000000000000000f676d3f0f2b5f7dbf0192015d866348d496535f381565b3480156105cd57600080fd5b506103d9611125565b3480156105e257600080fd5b506103d96105f1366004613378565b61119a565b34801561060257600080fd5b506104396111f5565b34801561061757600080fd5b506104396106263660046132da565b61123f565b34801561063757600080fd5b506104396106463660046132da565b6001600160a01b031660009081526001602052604090205490565b34801561066d57600080fd5b506103d96112b5565b34801561068257600080fd5b506103d96106913660046133e8565b611329565b3480156106a257600080fd5b506103d96106b1366004613439565b6113cd565b3480156106c257600080fd5b506103d96106d1366004613439565b611497565b3480156106e257600080fd5b50610439600c5481565b3480156106f857600080fd5b506000546001600160a01b0316610410565b34801561071657600080fd5b5061038c611559565b34801561072b57600080fd5b50610439611568565b34801561074057600080fd5b5061034861074f36600461334c565b6115b2565b34801561076057600080fd5b5061043961076f3660046132da565b611601565b34801561078057600080fd5b5061034861078f36600461334c565b611634565b3480156107a057600080fd5b50610439600b5481565b3480156107b657600080fd5b506103d96107c5366004613378565b611641565b3480156107d657600080fd5b506103d96107e53660046132da565b611715565b3480156107f657600080fd5b5061034861080536600461334c565b6118f9565b34801561081657600080fd5b506103486108253660046132da565b60166020526000908152604090205460ff1681565b34801561084657600080fd5b506103d961199c565b34801561085b57600080fd5b506103d961086a3660046132da565b6119f2565b34801561087b57600080fd5b506103d961088a366004613439565b611b16565b34801561089b57600080fd5b5060115460ff80821691620100008104821691640100000000909104165b6040805160ff94851681529284166020840152921691810191909152606001610354565b3480156108e957600080fd5b50610439600e5481565b3480156108ff57600080fd5b506103d961090e366004613439565b611bd8565b34801561091f57600080fd5b5061043961092e366004613472565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561096557600080fd5b506103d96109743660046133e8565b611c5a565b34801561098557600080fd5b506103d9610994366004613378565b611cae565b3480156109a557600080fd5b506103d96109b43660046132da565b611d09565b3480156109c557600080fd5b5060115460ff610100820481169163010000008104821691600160281b909104166108b9565b6060600480546109fa906134a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a26906134a0565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b5050505050905090565b6000610a8a338484611e52565b50600192915050565b6000546001600160a01b03163314610ac65760405162461bcd60e51b8152600401610abd906134da565b60405180910390fd5b478110610b305760405162461bcd60e51b815260206004820152603260248201527f42656e6e6f546f6b656e3a2043616e6e6f742073656e64206d6f7265207468616044820152716e20636f6e74726163742062616c616e636560701b6064820152608401610abd565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610b7d576040519150601f19603f3d011682016040523d82523d6000602084013e610b82565b606091505b505090508015610bc1576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610bef5760405162461bcd60e51b8152600401610abd906134da565b600a805460ff19166001179055565b6000546001600160a01b03163314610c285760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d03610c9f5760405162461bcd60e51b815260206004820152602260248201527f57652063616e6e6f7420626c61636b6c69737420556e695377617020726f757460448201526132b960f11b6064820152608401610abd565b6001600160a01b03811660009081526008602052604090205460ff1615610d085760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c697374656400006044820152606401610abd565b6001600160a01b0381166000818152600860209081526040808320805460ff191660019081179091556009805491820181559093527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90920180546001600160a01b0319168417905590519182527f6cf65f3ff491cb358bea0efd5ee0fe0340757225d38a096d09c637ba897a679f91015b60405180910390a150565b6000546001600160a01b03163314610dcf5760405162461bcd60e51b8152600401610abd906134da565b600c548103610e3c5760405162461bcd60e51b815260206004820152603360248201527f42656e6e6f546f6b656e3a2043616e6e6f7420757064617465206d61785478416044820152726d6f756e7420746f2073616d652076616c756560681b6064820152608401610abd565b600c5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600c55565b6000610e7c848484611f77565b610ece8433610ec98560405180606001604052806028815260200161387c602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061266e565b611e52565b5060019392505050565b6000546001600160a01b03163314610f025760405162461bcd60e51b8152600401610abd906134da565b600b548103610f795760405162461bcd60e51b815260206004820152603760248201527f42656e6e6f546f6b656e3a2043616e6e6f7420757064617465206d617857616c60448201527f6c6574416d6f756e7420746f2073616d652076616c75650000000000000000006064820152608401610abd565b600b5460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600b55565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101a919061350f565b905090565b6000546001600160a01b031633146110495760405162461bcd60e51b8152600401610abd906134da565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b15801561109157600080fd5b505af11580156110a5573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146110d65760405162461bcd60e51b8152600401610abd906134da565b600a805460ff19169055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610a8a918590610ec99086611df3565b61112233826126a8565b50565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611176573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111229190613528565b6000546001600160a01b031633146111c45760405162461bcd60e51b8152600401610abd906134da565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401611077565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ff6573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af919061350f565b92915050565b6000546001600160a01b031633146112df5760405162461bcd60e51b8152600401610abd906134da565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113535760405162461bcd60e51b8152600401610abd906134da565b611360600f8484846127b3565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146113f75760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036114375760405162461bcd60e51b8152600401610abd90613545565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146114c15760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036115015760405162461bcd60e51b8152600401610abd90613545565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a40910161148b565b6060600580546109fa906134a0565b60075460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610ff6573d6000803e3d6000fd5b6000610a8a3384610ec9856040518060600160405280602581526020016138c4602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061266e565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d2409060240161126e565b6000610a8a338484611f77565b6000546001600160a01b0316331461166b5760405162461bcd60e51b8152600401610abd906134da565b600e5481036116e25760405162461bcd60e51b815260206004820152603f60248201527f42656e6e6f546f6b656e3a2043616e6e6f7420757064617465206d696e696d7560448201527f6d546f6b656e734265666f72655377617020746f2073616d652076616c7565006064820152608401610abd565b600e5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600e55565b6000546001600160a01b0316331461173f5760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b03811660009081526008602052604090205460ff166117a75760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610abd565b60005b6009548110156118bf57816001600160a01b0316600982815481106117d1576117d161359b565b6000918252602090912001546001600160a01b0316036118ad57600980546117fb906001906135c7565b8154811061180b5761180b61359b565b600091825260209091200154600980546001600160a01b0390921691839081106118375761183761359b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600890915260409020805460ff191690556009805480611886576118866135de565b600082815260209020810160001990810180546001600160a01b03191690550190556118bf565b806118b7816135f4565b9150506117aa565b506040516001600160a01b03821681527fbbde34c13f8f74d401949e0eb9a888308ee89bb0887791bba7e8dd0bced4704190602001610d9a565b600080546001600160a01b031633146119245760405162461bcd60e51b8152600401610abd906134da565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119959190613528565b9392505050565b6000546001600160a01b031633146119c65760405162461bcd60e51b8152600401610abd906134da565b60405133904780156108fc02916000818181858888f19350505050158015611122573d6000803e3d6000fd5b6000546001600160a01b03163314611a1c5760405162461bcd60e51b8152600401610abd906134da565b6006546001600160a01b0390811690821603611a925760405162461bcd60e51b815260206004820152602f60248201527f42656e6e6f546f6b656e3a2054686520726f7574657220616c7265616479206860448201526e61732074686174206164647265737360881b6064820152608401610abd565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401611077565b6000546001600160a01b03163314611b405760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503611b805760405162461bcd60e51b8152600401610abd90613545565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b910161148b565b6000546001600160a01b03163314611c025760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910161148b565b6000546001600160a01b03163314611c845760405162461bcd60e51b8152600401610abd906134da565b611c91600f84848461297b565b6040516b62617365466565732d42757960a01b8152600c0161137a565b6000546001600160a01b03163314611cd85760405162461bcd60e51b8152600401610abd906134da565b60075460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401611077565b6000546001600160a01b03163314611d335760405162461bcd60e51b8152600401610abd906134da565b6001600160a01b038116611d985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e00838561360d565b9050838110156119955760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610abd565b6001600160a01b038316611eb45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abd565b6001600160a01b038216611f155760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abd565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611f9d5760405162461bcd60e51b8152600401610abd90613625565b6001600160a01b038216611fc35760405162461bcd60e51b8152600401610abd9061366a565b6001600160a01b03831660009081526008602052604090205460ff16156120225760405162461bcd60e51b8152602060048201526013602482015272199c9bdb481a5cc8189b1858dadb1a5cdd1959606a1b6044820152606401610abd565b3360009081526008602052604090205460ff16156120785760405162461bcd60e51b81526020600482015260136024820152721e5bdd48185c9948189b1858dadb1a5cdd1959606a1b6044820152606401610abd565b3260009081526008602052604090205460ff16156120c65760405162461bcd60e51b815260206004820152600b60248201526a189b1858dadb1a5cdd195960aa1b6044820152606401610abd565b600081116121285760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610abd565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff92831692918216911615801561218a57506001600160a01b03841660009081526012602052604090205460ff16155b1561236957600a5460ff166121f45760405162461bcd60e51b815260206004820152602a60248201527f42656e6e6f546f6b656e3a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b6064820152608401610abd565b6001600160a01b03841660009081526014602052604090205460ff1615801561223657506001600160a01b03851660009081526014602052604090205460ff16155b156122a857600c548311156122a85760405162461bcd60e51b815260206004820152603260248201527f42656e6e6f546f6b656e3a2042757920616d6f756e742065786365656473207460448201527134329036b0bc2a3c213abca0b6b7bab73a1760711b6064820152608401610abd565b6001600160a01b03841660009081526015602052604090205460ff1661236957600b54836122eb866001600160a01b031660009081526001602052604090205490565b6122f5919061360d565b11156123695760405162461bcd60e51b815260206004820152603f60248201527f42656e6e6f546f6b656e3a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e006064820152608401610abd565b6123738282612b30565b600e5430600090815260016020526040902054600a549111159060ff1680156123995750805b80156123a85750600d5460ff16155b80156123bf57506017546301000000900460ff1615155b80156123e357506001600160a01b03851660009081526016602052604090205460ff165b1561240857600d805460ff191660011790556123fd612cd2565b600d805460ff191690555b600d5460009060ff161580156124205750600a5460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061246257506001600160a01b03861660009081526013602052604090205460ff165b1561246b575060005b80801561248357506017546301000000900460ff1615155b15612548576017546000906064906124a5906301000000900460ff16886136ad565b6124af91906136e2565b6017549091506000906064906124cd90610100900460ff16896136ad565b6124d791906136e2565b90506124e382886135c7565b96506124f0893084612f73565b80156125455761250030826126a8565b6017546040805161010090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612553878787612f73565b6007546001600160a01b031663e30443bc88612584816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156125ca57600080fd5b505af19250505080156125db575060015b506007546001600160a01b031663e30443bc8761260d816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561265357600080fd5b505af1925050508015612664575060015b5050505050505050565b600081848411156126925760405162461bcd60e51b8152600401610abd91906132f7565b50600061269f84866135c7565b95945050505050565b6001600160a01b0382166127085760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610abd565b61274581604051806060016040528060228152602001613834602291396001600160a01b038516600090815260016020526040902054919061266e565b6001600160a01b03831660009081526001602052604090205560035461276b908261307f565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600284015460ff848116610100909204161461284457604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028601548654919260ff610100909204821692918716916000805160206138a4833981519152916128259160481b906136f6565b60405180910390a460028401805461ff00191661010060ff8616021790555b600284015460ff838116630100000090920416146128d8576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028601548654919260ff6301000000909204821692918616916000805160206138a4833981519152916128b59160481b906136f6565b60405180910390a460028401805463ff0000001916630100000060ff8516021790555b600284015460ff828116600160281b909204161461297557604051731c99599b1958dd1a5bdb9cd1995953db94d95b1b60621b815260140160405190819003812060028601548654919260ff600160281b909204821692918516916000805160206138a4833981519152916129509160481b906136f6565b60405180910390a460028401805465ff00000000001916600160281b60ff8416021790555b50505050565b600284015460ff8481169116146129fc57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028601548654919260ff91821692918716916000805160206138a4833981519152916129e29160481b906136f6565b60405180910390a460028401805460ff191660ff85161790555b600284015460ff838116620100009092041614612a8b576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028601548654919260ff62010000909204821692918616916000805160206138a483398151915291612a6a9160481b906136f6565b60405180910390a460028401805462ff000019166201000060ff8516021790555b600284015460ff828116640100000000909204161461297557604051727265666c656374696f6e734665654f6e42757960681b815260130160405190819003812060028601548654919260ff640100000000909204821692918516916000805160206138a483398151915291612b049160481b906136f6565b60405180910390a460028401805460ff83166401000000000264ff000000001990911617905550505050565b6017805462ffffff191690558115612b865760115460178054640100000000830460ff9081166201000090810262ff00001991860483166101000261ffff19909416929095169190911791909117169190911790555b8015612bd2576011546017805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b80158015612bde575081155b15612c29576011546017805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b60175460ff620100008204811691612c499161010082048116911661370d565b612c53919061370d565b6017805463ff000000198116630100000060ff9485168102918217938490556040805193861692861692909217835261010084048516602084015262010000840485169183019190915290910490911660608201527fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b90608001610bb8565b306000908152600160205260408120546017549091479160029060ff63010000008204811691612d039116866136ad565b612d0d91906136e2565b612d1791906136e2565b60175490915060009060ff63010000008204811691612d3e916201000090910416866136ad565b612d4891906136e2565b90506000612d56828461360d565b612d6090866135c7565b9050612d6b816130c1565b6000612d7785476135c7565b60175490915060009060ff6201000082048116916101008104821691612da09160029116613732565b612daa919061370d565b612db4919061370d565b601754612dcb91906301000000900460ff16613754565b60175460ff91821692506000916002918491612de89116866136ad565b612df291906136e2565b612dfc91906136e2565b90508515612e5057612e0e868261321b565b60408051858152602081018390529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101869052600090309063a9059cbb906044016020604051808303816000875af1158015612ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec89190613528565b90508015612f6857600754604051636bf5ecd560e01b8152600481018890526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612f1657600080fd5b505af1158015612f2a573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96986604051612f5f91815260200190565b60405180910390a15b505050505050505050565b6001600160a01b038316612f995760405162461bcd60e51b8152600401610abd90613625565b6001600160a01b038216612fbf5760405162461bcd60e51b8152600401610abd9061366a565b612ffc81604051806060016040528060268152602001613856602691396001600160a01b038616600090815260016020526040902054919061266e565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461302b9082611df3565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f6a9085815260200190565b600061199583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061266e565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130f6576130f661359b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561314f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131739190613777565b816001815181106131865761318661359b565b6001600160a01b0392831660209182029290920101526006546131ac9130911684611e52565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906131e5908590600090869030904290600401613794565b600060405180830381600087803b1580156131ff57600080fd5b505af1158015613213573d6000803e3d6000fd5b505050505050565b6006546132339030906001600160a01b031684611e52565b60065460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156132a0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110a59190613805565b6001600160a01b038116811461112257600080fd5b6000602082840312156132ec57600080fd5b8135611995816132c5565b600060208083528351808285015260005b8181101561332457858101830151858201604001528201613308565b81811115613336576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561335f57600080fd5b823561336a816132c5565b946020939093013593505050565b60006020828403121561338a57600080fd5b5035919050565b6000806000606084860312156133a657600080fd5b83356133b1816132c5565b925060208401356133c1816132c5565b929592945050506040919091013590565b803560ff811681146133e357600080fd5b919050565b6000806000606084860312156133fd57600080fd5b613406846133d2565b9250613414602085016133d2565b9150613422604085016133d2565b90509250925092565b801515811461112257600080fd5b6000806040838503121561344c57600080fd5b8235613457816132c5565b915060208301356134678161342b565b809150509250929050565b6000806040838503121561348557600080fd5b8235613490816132c5565b91506020830135613467816132c5565b600181811c908216806134b457607f821691505b6020821081036134d457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561352157600080fd5b5051919050565b60006020828403121561353a57600080fd5b81516119958161342b565b60208082526036908201527f42656e6e6f546f6b656e3a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156135d9576135d96135b1565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201613606576136066135b1565b5060010190565b60008219821115613620576136206135b1565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008160001904831182151516156136c7576136c76135b1565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826136f1576136f16136cc565b500490565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff0382111561372a5761372a6135b1565b019392505050565b600060ff831680613745576137456136cc565b8060ff84160491505092915050565b600060ff821660ff84168082101561376e5761376e6135b1565b90039392505050565b60006020828403121561378957600080fd5b8151611995816132c5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137e45784516001600160a01b0316835293830193918301916001016137bf565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561381a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220301a7d53b7b2543461c1846cd80c86218191ed2cc76a730ef73a596691fee4c164736f6c634300080f0033

Libraries Used

IterableMapping : 0x33a39cf8211fbc46dd89b8dfbee542c09e80bf41Unverified

Deployed Bytecode Sourcemap

15810:18422:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23230:125;;;;;;;;;;-1:-1:-1;23230:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;23321:26:0;23293:4;23321:26;;;:17;:26;;;;;;;;;23230:125;;;;567:14:1;;560:22;542:41;;530:2;515:18;23230:125:0;;;;;;;;16218:28;;;;;;;;;;-1:-1:-1;16218:28:0;;;;;;;;8464:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9288:154::-;;;;;;;;;;-1:-1:-1;9288:154:0;;;;;:::i;:::-;;:::i;26253:315::-;;;;;;;;;;-1:-1:-1;26253:315:0;;;;;:::i;:::-;;:::i;:::-;;20571:79;;;;;;;;;;;;;:::i;15852:30::-;;;;;;;;;;-1:-1:-1;15852:30:0;;;;-1:-1:-1;;;;;15852:30:0;;;;;;-1:-1:-1;;;;;1880:32:1;;;1862:51;;1850:2;1835:18;15852:30:0;1701:218:1;8749:99:0;;;;;;;;;;-1:-1:-1;8831:12:0;;8749:99;;;2070:25:1;;;2058:2;2043:18;8749:99:0;1924:177:1;22787:431:0;;;;;;;;;;-1:-1:-1;22787:431:0;;;;;:::i;:::-;;:::i;24936:253::-;;;;;;;;;;-1:-1:-1;24936:253:0;;;;;:::i;:::-;;:::i;9447:313::-;;;;;;;;;;-1:-1:-1;9447:313:0;;;;;:::i;:::-;;:::i;25192:259::-;;;;;;;;;;-1:-1:-1;25192:259:0;;;;;:::i;:::-;;:::i;16066:48::-;;;;;;;;;;-1:-1:-1;16066:48:0;;;;-1:-1:-1;;;;;16066:48:0;;;26665:132;;;;;;;;;;;;;:::i;8660:84::-;;;;;;;;;;-1:-1:-1;8660:84:0;;8737:2;2959:36:1;;2947:2;2932:18;8660:84:0;2817:184:1;21602:121:0;;;;;;;;;;-1:-1:-1;21602:121:0;;;;;:::i;:::-;;:::i;20653:82::-;;;;;;;;;;;;;:::i;9765:203::-;;;;;;;;;;-1:-1:-1;9765:203:0;;;;;:::i;:::-;;:::i;26573:72::-;;;;;;;;;;-1:-1:-1;26573:72:0;;;;;:::i;:::-;;:::i;15886:38::-;;;;;;;;;;;;;;;25912:97;;;;;;;;;;;;;:::i;25765:144::-;;;;;;;;;;-1:-1:-1;25765:144:0;;;;;:::i;:::-;;:::i;27082:132::-;;;;;;;;;;;;;:::i;26947:::-;;;;;;;;;;-1:-1:-1;26947:132:0;;;;;:::i;:::-;;:::i;8853:118::-;;;;;;;;;;-1:-1:-1;8853:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;8948:18:0;8927:7;8948:18;;;:9;:18;;;;;;;8853:118;7696:133;;;;;;;;;;;;;:::i;24277:320::-;;;;;;;;;;-1:-1:-1;24277:320:0;;;;;:::i;:::-;;:::i;22068:322::-;;;;;;;;;;-1:-1:-1;22068:322:0;;;;;:::i;:::-;;:::i;21726:339::-;;;;;;;;;;-1:-1:-1;21726:339:0;;;;;:::i;:::-;;:::i;16385:46::-;;;;;;;;;;;;;;;;7512:70;;;;;;;;;;-1:-1:-1;7550:7:0;7571:6;-1:-1:-1;;;;;7571:6:0;7512:70;;8560:95;;;;;;;;;;;;;:::i;26142:108::-;;;;;;;;;;;;;:::i;9973:254::-;;;;;;;;;;-1:-1:-1;9973:254:0;;;;;:::i;:::-;;:::i;26800:144::-;;;;;;;;;;-1:-1:-1;26800:144:0;;;;;:::i;:::-;;:::i;8976:160::-;;;;;;;;;;-1:-1:-1;8976:160:0;;;;;:::i;:::-;;:::i;16329:50::-;;;;;;;;;;;;;;;;25454:308;;;;;;;;;;-1:-1:-1;25454:308:0;;;;;:::i;:::-;;:::i;23360:586::-;;;;;;;;;;-1:-1:-1;23360:586:0;;;;;:::i;:::-;;:::i;22619:163::-;;;;;;;;;;-1:-1:-1;22619:163:0;;;;;:::i;:::-;;:::i;17164:58::-;;;;;;;;;;-1:-1:-1;17164:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22456:113;;;;;;;;;;;;;:::i;24600:333::-;;;;;;;;;;-1:-1:-1;24600:333:0;;;;;:::i;:::-;;:::i;21314:285::-;;;;;;;;;;-1:-1:-1;21314:285:0;;;;;:::i;:::-;;:::i;27217:158::-;;;;;;;;;;-1:-1:-1;27299:23:0;;;;;;;27324:18;;;;;;27344:25;;;;;27217:158;;;;4432:4:1;4420:17;;;4402:36;;4474:17;;;4469:2;4454:18;;4447:45;4528:17;;4508:18;;;4501:45;;;;4390:2;4375:18;27217:158:0;4212:340:1;16463:61:0;;;;;;;;;;;;;;;;21109:202;;;;;;;;;;-1:-1:-1;21109:202:0;;;;;:::i;:::-;;:::i;9141:142::-;;;;;;;;;;-1:-1:-1;9141:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;9251:18:0;;;9230:7;9251:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9141:142;23966:308;;;;;;;;;;-1:-1:-1;23966:308:0;;;;;:::i;:::-;;:::i;26012:124::-;;;;;;;;;;-1:-1:-1;26012:124:0;;;;;:::i;:::-;;:::i;7834:223::-;;;;;;;;;;-1:-1:-1;7834:223:0;;;;;:::i;:::-;;:::i;27378:162::-;;;;;;;;;;-1:-1:-1;27461:24:0;;;;;;;;;27487:19;;;;;;-1:-1:-1;;;27508:26:0;;;;27378:162;;8464:91;8518:13;8545:5;8538:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8464:91;:::o;9288:154::-;9371:4;9382:39;6978:10;9405:7;9414:6;9382:8;:39::i;:::-;-1:-1:-1;9433:4:0;9288:154;;;;:::o;26253:315::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;;;;;;;;;26339:21:::1;26330:6;:30;26322:93;;;::::0;-1:-1:-1;;;26322:93:0;;5898:2:1;26322:93:0::1;::::0;::::1;5880:21:1::0;5937:2;5917:18;;;5910:30;5976:34;5956:18;;;5949:62;-1:-1:-1;;;6027:18:1;;;6020:48;6085:19;;26322:93:0::1;5696:414:1::0;26322:93:0::1;26427:12;7571:6:::0;;26444:41:::1;::::0;-1:-1:-1;;;;;7571:6:0;;;;26474;;26427:12;26444:41;26427:12;26444:41;26474:6;7571;26444:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26426:59;;;26500:7;26496:68;;;26528:24;::::0;2070:25:1;;;26528:24:0::1;::::0;2058:2:1;2043:18;26528:24:0::1;;;;;;;;26496:68;26314:254;26253:315:::0;:::o;20571:79::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;20622:16:::1;:23:::0;;-1:-1:-1;;20622:23:0::1;20641:4;20622:23;::::0;;20571:79::o;22787:431::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22883:53:0;::::1;22894:42;22883:53:::0;22861:137:::1;;;::::0;-1:-1:-1;;;22861:137:0;;6527:2:1;22861:137:0::1;::::0;::::1;6509:21:1::0;6566:2;6546:18;;;6539:30;6605:34;6585:18;;;6578:62;-1:-1:-1;;;6656:18:1;;;6649:32;6698:19;;22861:137:0::1;6325:398:1::0;22861:137:0::1;-1:-1:-1::0;;;;;23018:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;23017:27;23009:70;;;::::0;-1:-1:-1;;;23009:70:0;;6930:2:1;23009:70:0::1;::::0;::::1;6912:21:1::0;6969:2;6949:18;;;6942:30;7008:32;6988:18;;;6981:60;7058:18;;23009:70:0::1;6728:354:1::0;23009:70:0::1;-1:-1:-1::0;;;;;23090:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;-1:-1:-1;;23090:33:0::1;23119:4;23090:33:::0;;::::1;::::0;;;23134:16:::1;:30:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23134:30:0::1;::::0;::::1;::::0;;23182:28;;1862:51:1;;;23182:28:0::1;::::0;1835:18:1;23182:28:0::1;;;;;;;;22787:431:::0;:::o;24936:253::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;25031:11:::1;;25019:8;:23:::0;25011:87:::1;;;::::0;-1:-1:-1;;;25011:87:0;;7289:2:1;25011:87:0::1;::::0;::::1;7271:21:1::0;7328:2;7308:18;;;7301:30;7367:34;7347:18;;;7340:62;-1:-1:-1;;;7418:18:1;;;7411:49;7477:19;;25011:87:0::1;7087:415:1::0;25011:87:0::1;25145:11;::::0;25108:49:::1;::::0;25135:8;;25108:49:::1;::::0;;;::::1;25162:11;:22:::0;24936:253::o;9447:313::-;9566:4;9577:36;9587:6;9595:9;9606:6;9577:9;:36::i;:::-;9618:121;9627:6;6978:10;9649:89;9687:6;9649:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9649:19:0;;;;;;:11;:19;;;;;;;;6978:10;9649:33;;;;;;;;;;:37;:89::i;:::-;9618:8;:121::i;:::-;-1:-1:-1;9751:4:0;9447:313;;;;;:::o;25192:259::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;25282:15:::1;;25270:8;:27:::0;25262:95:::1;;;::::0;-1:-1:-1;;;25262:95:0;;7709:2:1;25262:95:0::1;::::0;::::1;7691:21:1::0;7748:2;7728:18;;;7721:30;7787:34;7767:18;;;7760:62;7858:25;7838:18;;;7831:53;7901:19;;25262:95:0::1;7507:419:1::0;25262:95:0::1;25399:15;::::0;25367:48:::1;::::0;25389:8;;25367:48:::1;::::0;;;::::1;25420:15;:26:::0;25192:259::o;26665:132::-;26749:15;;:43;;;-1:-1:-1;;;26749:43:0;;;;26728:7;;-1:-1:-1;;;;;26749:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26742:50;;26665:132;:::o;21602:121::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;21673:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;21673:45:0;;-1:-1:-1;;;;;1880:32:1;;;21673:45:0::1;::::0;::::1;1862:51:1::0;21673:15:0;;::::1;::::0;:36:::1;::::0;1835:18:1;;21673:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21602:121:::0;:::o;20653:82::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;20706:16:::1;:24:::0;;-1:-1:-1;;20706:24:0::1;::::0;;20653:82::o;9765:203::-;6978:10;9853:4;9896:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9896:34:0;;;;;;;;;;9853:4;;9864:83;;9887:7;;9896:50;;9935:10;9896:38;:50::i;26573:72::-;26616:24;26622:10;26634:5;26616;:24::i;:::-;26573:72;:::o;25912:97::-;25943:15;;:58;;-1:-1:-1;;;25943:58:0;;25982:10;25943:58;;;8304:51:1;25943:15:0;8371:18:1;;;8364:50;-1:-1:-1;;;;;25943:15:0;;;;:30;;8277:18:1;;25943:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25765:144::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;25851:15:::1;::::0;:53:::1;::::0;-1:-1:-1;;;25851:53:0;;::::1;::::0;::::1;2070:25:1::0;;;-1:-1:-1;;;;;25851:15:0;;::::1;::::0;:43:::1;::::0;2043:18:1;;25851:53:0::1;1924:177:1::0;27082:132:0;27168:15;;:41;;;-1:-1:-1;;;27168:41:0;;;;27147:7;;-1:-1:-1;;;;;27168:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;26947:132;27040:15;;:34;;-1:-1:-1;;;27040:34:0;;-1:-1:-1;;;;;1880:32:1;;;27040:34:0;;;1862:51:1;27019:7:0;;27040:15;;:25;;1835:18:1;;27040:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27033:41;26947:132;-1:-1:-1;;26947:132:0:o;7696:133::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;7797:1:::1;7781:6:::0;;7760:40:::1;::::0;-1:-1:-1;;;;;7781:6:0;;::::1;::::0;7760:40:::1;::::0;7797:1;;7760:40:::1;7822:1;7805:19:::0;;-1:-1:-1;;;;;;7805:19:0::1;::::0;;7696:133::o;24277:320::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;24406:90:::1;24430:5;24437:19;24458:14;24474:21;24406:23;:90::i;:::-;24506:86;::::0;-1:-1:-1;;;8877:28:1;;8930:2;8921:12;24506:86:0::1;;::::0;;;;;::::1;::::0;;4432:4:1;4420:17;;;4402:36;;4474:17;;;4469:2;4454:18;;4447:45;4528:17;;4508:18;;;4501:45;24506:86:0;;;;::::1;::::0;;;;;4390:2:1;24506:86:0;;::::1;24277:320:::0;;;:::o;22068:322::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22167:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;22159:117:::1;;;;-1:-1:-1::0;;;22159:117:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22281:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;22281:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22340:45;;542:41:1;;;22340:45:0::1;::::0;515:18:1;22340:45:0::1;;;;;;;;22068:322:::0;;:::o;21726:339::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21830:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;21822:122:::1;;;;-1:-1:-1::0;;;21822:122:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21949:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;21949:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22013:47;;542:41:1;;;22013:47:0::1;::::0;515:18:1;22013:47:0::1;402:187:1::0;8560:95:0;8616:13;8643:7;8636:14;;;;;:::i;26142:108::-;26215:15;;:27;;;-1:-1:-1;;;26215:27:0;;;;26188:7;;-1:-1:-1;;;;;26215:15:0;;:25;;:27;;;;;;;;;;;;;;:15;:27;;;;;;;;;;;;;;9973:254;10066:4;10077:129;6978:10;10100:7;10109:96;10148:15;10109:96;;;;;;;;;;;;;;;;;6978:10;10109:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10109:34:0;;;;;;;;;;;;:38;:96::i;26800:144::-;26892:15;;:47;;-1:-1:-1;;;26892:47:0;;-1:-1:-1;;;;;1880:32:1;;;26892:47:0;;;1862:51:1;26871:7:0;;26892:15;;:38;;1835:18:1;;26892:47:0;1701:218:1;8976:160:0;9062:4;9073:42;6978:10;9097:9;9108:6;9073:9;:42::i;25454:308::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;25552:23:::1;;25540:8;:35:::0;25532:111:::1;;;::::0;-1:-1:-1;;;25532:111:0;;9569:2:1;25532:111:0::1;::::0;::::1;9551:21:1::0;9608:2;9588:18;;;9581:30;9647:34;9627:18;;;9620:62;9718:33;9698:18;;;9691:61;9769:19;;25532:111:0::1;9367:427:1::0;25532:111:0::1;25694:23;::::0;25653:65:::1;::::0;25684:8;;25653:65:::1;::::0;;;::::1;25723:23;:34:::0;25454:308::o;23360:586::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23447:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;23439:65;;;::::0;-1:-1:-1;;;23439:65:0;;10001:2:1;23439:65:0::1;::::0;::::1;9983:21:1::0;10040:2;10020:18;;;10013:30;10079:28;10059:18;;;10052:56;10125:18;;23439:65:0::1;9799:350:1::0;23439:65:0::1;23520:9;23515:376;23539:16;:23:::0;23535:27;::::1;23515:376;;;23611:7;-1:-1:-1::0;;;;;23588:30:0::1;:16;23605:1;23588:19;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23588:19:0::1;:30:::0;23584:296:::1;;23661:16;23700:23:::0;;:27:::1;::::0;23726:1:::1;::::0;23700:27:::1;:::i;:::-;23661:85;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23639:16:::1;:19:::0;;-1:-1:-1;;;;;23661:85:0;;::::1;::::0;23656:1;;23639:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:107:::0;;-1:-1:-1;;;;;;23639:107:0::1;-1:-1:-1::0;;;;;23639:107:0;;::::1;;::::0;;23765:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;23765:34:0::1;::::0;;23818:16:::1;:22:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23818:22:0;;;;;-1:-1:-1;;;;;;23818:22:0::1;::::0;;;;;23859:5:::1;;23584:296;23564:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23515:376;;;-1:-1:-1::0;23906:32:0::1;::::0;-1:-1:-1;;;;;1880:32:1;;1862:51;;23906:32:0::1;::::0;1850:2:1;1835:18;23906:32:0::1;1701:218:1::0;22619:163:0;22701:10;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;22731:43:::1;::::0;-1:-1:-1;;;22731:43:0;;22755:10:::1;22731:43;::::0;::::1;10994:51:1::0;11061:18;;;11054:34;;;-1:-1:-1;;;;;22731:23:0;::::1;::::0;::::1;::::0;10967:18:1;;22731:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22723:51:::0;22619:163;-1:-1:-1;;;22619:163:0:o;22456:113::-;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;22510:51:::1;::::0;22518:10:::1;::::0;22539:21:::1;22510:51:::0;::::1;;;::::0;::::1;::::0;;;22539:21;22518:10;22510:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;24600:333:::0;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;24700:15:::1;::::0;-1:-1:-1;;;;;24700:15:0;;::::1;24678:38:::0;;::::1;::::0;24670:98:::1;;;::::0;-1:-1:-1;;;24670:98:0;;11301:2:1;24670:98:0::1;::::0;::::1;11283:21:1::0;11340:2;11320:18;;;11313:30;11379:34;11359:18;;;11352:62;-1:-1:-1;;;11430:18:1;;;11423:45;11485:19;;24670:98:0::1;11099:411:1::0;24670:98:0::1;24820:15;::::0;24778:59:::1;::::0;-1:-1:-1;;;;;24820:15:0;;::::1;::::0;24778:59;::::1;::::0;::::1;::::0;24820:15:::1;::::0;24778:59:::1;24842:15;:37:::0;;-1:-1:-1;;;;;;24842:37:0::1;-1:-1:-1::0;;;;;24842:37:0;;::::1;::::0;;::::1;::::0;;;24884:15:::1;::::0;:44:::1;::::0;-1:-1:-1;;;24884:44:0;;::::1;::::0;::::1;1862:51:1::0;;;;24884:15:0;;::::1;::::0;:32:::1;::::0;1835:18:1;;24884:44:0::1;1701:218:1::0;21314:285:0;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21403:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;21395:106:::1;;;;-1:-1:-1::0;;;21395:106:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21506:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;21506:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21554:40;;542:41:1;;;21554:40:0::1;::::0;515:18:1;21554:40:0::1;402:187:1::0;21109:202:0;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21198:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;21198:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21256:50;;542:41:1;;;21256:50:0::1;::::0;515:18:1;21256:50:0::1;402:187:1::0;23966:308:0;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;24091:86:::1;24114:5;24121:18;24141:13;24156:20;24091:22;:86::i;:::-;24187:82;::::0;-1:-1:-1;;;11717:27:1;;11769:2;11760:12;24187:82:0::1;11515:263:1::0;26012:124:0;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;26086:15:::1;::::0;:42:::1;::::0;-1:-1:-1;;;26086:42:0;;::::1;::::0;::::1;2070:25:1::0;;;-1:-1:-1;;;;;26086:15:0;;::::1;::::0;:31:::1;::::0;2043:18:1;;26086:42:0::1;1924:177:1::0;7834:223:0;7621:6;;-1:-1:-1;;;;;7621:6:0;6978:10;7621:22;7613:67;;;;-1:-1:-1;;;7613:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7917:22:0;::::1;7909:73;;;::::0;-1:-1:-1;;;7909:73:0;;11985:2:1;7909:73:0::1;::::0;::::1;11967:21:1::0;12024:2;12004:18;;;11997:30;12063:34;12043:18;;;12036:62;-1:-1:-1;;;12114:18:1;;;12107:36;12160:19;;7909:73:0::1;11783:402:1::0;7909:73:0::1;8013:6;::::0;;7992:38:::1;::::0;-1:-1:-1;;;;;7992:38:0;;::::1;::::0;8013:6;::::1;::::0;7992:38:::1;::::0;::::1;8035:6;:17:::0;;-1:-1:-1;;;;;;8035:17:0::1;-1:-1:-1::0;;;;;8035:17:0;;;::::1;::::0;;;::::1;::::0;;7834:223::o;2620:160::-;2678:7;;2704:5;2708:1;2704;:5;:::i;:::-;2692:17;;2727:1;2722;:6;;2714:46;;;;-1:-1:-1;;;2714:46:0;;12525:2:1;2714:46:0;;;12507:21:1;12564:2;12544:18;;;12537:30;12603:29;12583:18;;;12576:57;12650:18;;2714:46:0;12323:351:1;11478:330:0;-1:-1:-1;;;;;11587:19:0;;11579:68;;;;-1:-1:-1;;;11579:68:0;;12881:2:1;11579:68:0;;;12863:21:1;12920:2;12900:18;;;12893:30;12959:34;12939:18;;;12932:62;-1:-1:-1;;;13010:18:1;;;13003:34;13054:19;;11579:68:0;12679:400:1;11579:68:0;-1:-1:-1;;;;;11660:21:0;;11652:68;;;;-1:-1:-1;;;11652:68:0;;13286:2:1;11652:68:0;;;13268:21:1;13325:2;13305:18;;;13298:30;13364:34;13344:18;;;13337:62;-1:-1:-1;;;13415:18:1;;;13408:32;13457:19;;11652:68:0;13084:398:1;11652:68:0;-1:-1:-1;;;;;11725:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11771:32;;2070:25:1;;;11771:32:0;;2043:18:1;11771:32:0;;;;;;;;11478:330;;;:::o;27555:2253::-;-1:-1:-1;;;;;27662:18:0;;27654:68;;;;-1:-1:-1;;;27654:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27736:16:0;;27728:64;;;;-1:-1:-1;;;27728:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27807:23:0;;;;;;:17;:23;;;;;;;;27806:24;27798:56;;;;-1:-1:-1;;;27798:56:0;;14499:2:1;27798:56:0;;;14481:21:1;14538:2;14518:18;;;14511:30;-1:-1:-1;;;14557:18:1;;;14550:49;14616:18;;27798:56:0;14297:343:1;27798:56:0;27893:10;27875:29;;;;:17;:29;;;;;;;;27874:30;27866:62;;;;-1:-1:-1;;;27866:62:0;;14847:2:1;27866:62:0;;;14829:21:1;14886:2;14866:18;;;14859:30;-1:-1:-1;;;14905:18:1;;;14898:49;14964:18;;27866:62:0;14645:343:1;27866:62:0;27967:9;27949:28;;;;:17;:28;;;;;;;;27948:29;27940:53;;;;-1:-1:-1;;;27940:53:0;;15195:2:1;27940:53:0;;;15177:21:1;15234:2;15214:18;;;15207:30;-1:-1:-1;;;15253:18:1;;;15246:41;15304:18;;27940:53:0;14993:335:1;27940:53:0;28016:1;28007:6;:10;27999:64;;;;-1:-1:-1;;;27999:64:0;;15535:2:1;27999:64:0;;;15517:21:1;15574:2;15554:18;;;15547:30;15613:34;15593:18;;;15586:62;-1:-1:-1;;;15664:18:1;;;15657:39;15713:19;;27999:64:0;15333:405:1;27999:64:0;-1:-1:-1;;;;;28094:31:0;;;28075:16;28094:31;;;:25;:31;;;;;;;;;28149:29;;;;;;;;;28190:35;;;:29;:35;;;;;;28094:31;;;;;28149:29;;;;28190:35;28189:36;:74;;;;-1:-1:-1;;;;;;28230:33:0;;;;;;:29;:33;;;;;;;;28229:34;28189:74;28186:541;;;28280:16;;;;28272:71;;;;-1:-1:-1;;;28272:71:0;;15945:2:1;28272:71:0;;;15927:21:1;15984:2;15964:18;;;15957:30;16023:34;16003:18;;;15996:62;-1:-1:-1;;;16074:18:1;;;16067:40;16124:19;;28272:71:0;15743:406:1;28272:71:0;-1:-1:-1;;;;;28355:38:0;;;;;;:34;:38;;;;;;;;28354:39;:84;;;;-1:-1:-1;;;;;;28398:40:0;;;;;;:34;:40;;;;;;;;28397:41;28354:84;28350:190;;;28466:11;;28456:6;:21;;28448:84;;;;-1:-1:-1;;;28448:84:0;;16356:2:1;28448:84:0;;;16338:21:1;16395:2;16375:18;;;16368:30;16434:34;16414:18;;;16407:62;-1:-1:-1;;;16485:18:1;;;16478:48;16543:19;;28448:84:0;16154:414:1;28448:84:0;-1:-1:-1;;;;;28551:33:0;;;;;;:29;:33;;;;;;;;28546:175;;28630:15;;28619:6;28603:13;28613:2;-1:-1:-1;;;;;8948:18:0;8927:7;8948:18;;;:9;:18;;;;;;;8853:118;28603:13;:22;;;;:::i;:::-;28602:43;;28594:119;;;;-1:-1:-1;;;28594:119:0;;16775:2:1;28594:119:0;;;16757:21:1;16814:2;16794:18;;;16787:30;16853:34;16833:18;;;16826:62;16924:33;16904:18;;;16897:61;16975:19;;28594:119:0;16573:427:1;28594:119:0;28734:37;28747:11;28760:10;28734:12;:37::i;:::-;28820:23;;28810:4;28777:12;8948:18;;;:9;:18;;;;;;28861:16;;-1:-1:-1;;28792:51:0;;28861:16;;:32;;;;;28886:7;28861:32;:51;;;;-1:-1:-1;28903:9:0;;;;28902:10;28861:51;:73;;;;-1:-1:-1;28921:9:0;;;;;;;:13;;28861:73;:111;;;;-1:-1:-1;;;;;;28943:29:0;;;;;;:25;:29;;;;;;;;28861:111;28851:206;;;28986:9;:16;;-1:-1:-1;;28986:16:0;28998:4;28986:16;;;29009:17;:15;:17::i;:::-;29033:9;:17;;-1:-1:-1;;29033:17:0;;;28851:206;29080:9;;29064:12;;29080:9;;29079:10;:30;;;;-1:-1:-1;29093:16:0;;;;29079:30;-1:-1:-1;;;;;29120:24:0;;;;;;:18;:24;;;;;;29064:45;;-1:-1:-1;29120:24:0;;;:50;;-1:-1:-1;;;;;;29148:22:0;;;;;;:18;:22;;;;;;;;29120:50;29117:83;;;-1:-1:-1;29188:5:0;29117:83;29209:7;:24;;;;-1:-1:-1;29220:9:0;;;;;;;:13;;29209:24;29205:392;;;29265:9;;29242:11;;29277:3;;29256:18;;29265:9;;;;;29256:6;:18;:::i;:::-;:24;;;;:::i;:::-;29329:8;;29242:38;;-1:-1:-1;29299:18:0;;29340:3;;29320:17;;29329:8;;;;;29320:6;:17;:::i;:::-;:23;;;;:::i;:::-;29299:44;-1:-1:-1;29359:12:0;29368:3;29359:6;:12;:::i;:::-;29350:21;;29378:41;29394:4;29408;29415:3;29378:15;:41::i;:::-;29444:14;;29440:151;;29483:38;29503:4;29510:10;29483:11;:38::i;:::-;29559:8;;29549:31;;;29559:8;;;;;;17605:36:1;;17672:2;17657:18;;17650:34;;;29549:31:0;;17578:18:1;29549:31:0;;;;;;;29440:151;29235:362;;29205:392;29602:33;29618:4;29624:2;29628:6;29602:15;:33::i;:::-;29656:15;;-1:-1:-1;;;;;29656:15:0;:26;29691:4;29698:15;29691:4;-1:-1:-1;;;;;8948:18:0;8927:7;8948:18;;;:9;:18;;;;;;;8853:118;29698:15;29656:58;;-1:-1:-1;;;;;;29656:58:0;;;;;;;-1:-1:-1;;;;;11012:32:1;;;29656:58:0;;;10994:51:1;11061:18;;;11054:34;10967:18;;29656:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29652:74;29738:15;;-1:-1:-1;;;;;29738:15:0;:26;29773:2;29778:13;29773:2;-1:-1:-1;;;;;8948:18:0;8927:7;8948:18;;;:9;:18;;;;;;;8853:118;29778:13;29738:54;;-1:-1:-1;;;;;;29738:54:0;;;;;;;-1:-1:-1;;;;;11012:32:1;;;29738:54:0;;;10994:51:1;11061:18;;;11054:34;10967:18;;29738:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29734:70;27648:2160;;;;27555:2253;;;:::o;2917:171::-;3003:7;3033:12;3025:6;;;;3017:29;;;;-1:-1:-1;;;3017:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3051:9:0;3063:5;3067:1;3063;:5;:::i;:::-;3051:17;2917:171;-1:-1:-1;;;;;2917:171:0:o;11092:381::-;-1:-1:-1;;;;;11170:21:0;;11162:67;;;;-1:-1:-1;;;11162:67:0;;18192:2:1;11162:67:0;;;18174:21:1;18231:2;18211:18;;;18204:30;18270:34;18250:18;;;18243:62;-1:-1:-1;;;18321:18:1;;;18314:31;18362:19;;11162:67:0;17990:397:1;11162:67:0;11309:68;11332:6;11309:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11309:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;11288:18:0;;;;;;:9;:18;;;;;:89;11397:12;;:24;;11414:6;11397:16;:24::i;:::-;11382:12;:39;11431:37;;2070:25:1;;;11457:1:0;;-1:-1:-1;;;;;11431:37:0;;;;;2058:2:1;2043:18;11431:37:0;;;;;;;11092:381;;:::o;30617:835::-;30792:22;;;;:45;;;;:22;;;;;:45;30788:222;;30850:104;;-1:-1:-1;;;18594:33:1;;18652:2;18643:12;30850:104:0;;;;;;;;30893:22;;;;30939:14;;30850:104;;30893:22;;;;;;;;30850:104;;;;-1:-1:-1;;;;;;;;;;;30850:104:0;;;30939:14;;;30850:104;:::i;:::-;;;;;;;;30960:22;;;:44;;-1:-1:-1;;30960:44:0;;;;;;;;;30788:222;31025:17;;;;:35;;;;:17;;;;;:35;31021:187;;31073:89;;-1:-1:-1;;;19082:28:1;;19135:2;19126:12;31073:89:0;;;;;;;;31111:17;;;;31147:14;;31073:89;;31111:17;;;;;;;;31073:89;;;;-1:-1:-1;;;;;;;;;;;31073:89:0;;;31147:14;;;31073:89;:::i;:::-;;;;;;;;31168:17;;;:34;;-1:-1:-1;;31168:34:0;;;;;;;;;31021:187;31216:24;;;;:49;;;;-1:-1:-1;;;31216:24:0;;;;:49;31212:236;;31278:110;;-1:-1:-1;;;19351:35:1;;19411:2;19402:12;31278:110:0;;;;;;;;31323:24;;;;31373:14;;31278:110;;31323:24;-1:-1:-1;;;31323:24:0;;;;;;31278:110;;;;-1:-1:-1;;;;;;;;;;;31278:110:0;;;31373:14;;;31278:110;:::i;:::-;;;;;;;;31394:24;;;:48;;-1:-1:-1;;31394:48:0;-1:-1:-1;;;31394:48:0;;;;;;;31212:236;30617:835;;;;:::o;31455:810::-;31627:21;;;;:43;;;;:21;;:43;31623:215;;31683:101;;-1:-1:-1;;;19627:32:1;;19684:2;19675:12;31683:101:0;;;;;;;;31725:21;;;;31769:14;;31683:101;;31725:21;;;;;31683:101;;;;-1:-1:-1;;;;;;;;;;;31683:101:0;;;31769:14;;;31683:101;:::i;:::-;;;;;;;;31790:21;;;:42;;-1:-1:-1;;31790:42:0;;;;;;;31623:215;31852:16;;;;:33;;;;:16;;;;;:33;31848:180;;31898:86;;-1:-1:-1;;;19900:27:1;;19952:2;19943:12;31898:86:0;;;;;;;;31935:16;;;;31969:14;;31898:86;;31935:16;;;;;;;;31898:86;;;;-1:-1:-1;;;;;;;;;;;31898:86:0;;;31969:14;;;31898:86;:::i;:::-;;;;;;;;31990:16;;;:32;;-1:-1:-1;;31990:32:0;;;;;;;;;31848:180;32036:23;;;;:47;;;;:23;;;;;:47;32032:229;;32096:107;;-1:-1:-1;;;20168:34:1;;20227:2;20218:12;32096:107:0;;;;;;;;32140:23;;;;32188:14;;32096:107;;32140:23;;;;;;;;32096:107;;;;-1:-1:-1;;;;;;;;;;;32096:107:0;;;32188:14;;;32096:107;:::i;:::-;;;;;;;;32209:23;;;:46;;;;;;;-1:-1:-1;;32209:46:0;;;;;;31455:810;;;;:::o;29811:803::-;29881:13;:17;;-1:-1:-1;;29926:19:0;;;29952:161;;;;29991:23;;29975:13;:39;;30082:25;;;29991:23;30082:25;;;30040:18;30064:43;;;-1:-1:-1;;30040:18:0;;;;;29991:23;30029:29;-1:-1:-1;;30029:29:0;;;29991:23;;;;30029:29;;;;;;;;30064:43;;;;;;;29952:161;30124:10;30120:166;;;30161:24;;30145:13;:40;;30161:24;;;;;;;;-1:-1:-1;;30200:30:0;;;;;;;30211:19;;;;;30200:30;;;;;-1:-1:-1;;30236:44:0;-1:-1:-1;;;30254:26:0;;;;30236:44;;;;;;;;30120:166;30301:10;30300:11;:27;;;;;30316:11;30315:12;30300:27;30296:180;;;30351:24;;30335:13;:40;;30351:24;;;;;;;;-1:-1:-1;;30390:30:0;;;;;;;30401:19;;;;;30390:30;;;;;-1:-1:-1;;30426:44:0;-1:-1:-1;;;30444:26:0;;;;30426:44;;;;;;;;30296:180;30520:15;;;;;;;;;30492:25;;30520:15;30509:8;;;;;30492:13;:25;:::i;:::-;:43;;;;:::i;:::-;30480:9;:55;;-1:-1:-1;;30480:55:0;;;;;;;;;;;;;;;;30545:64;;;30557:13;;;;;;;;;;20665:36:1;;30480:55:0;30572:8;;;;20732:2:1;20717:18;;20710:45;30582:15:0;;;;;20771:18:1;;;20764:45;;;;30599:9:0;;;;;;20840:2:1;20825:18;;20818:45;30545:64:0;;20652:3:1;20637:19;30545:64:0;20450:419:1;32268:1094:0;32352:4;32308:23;8948:18;;;:9;:18;;;;;;32479:9;;8948:18;;32391:21;;32491:1;;32479:9;;;;;;;32445:31;;32463:13;8948:18;32445:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;32566:9;;32419:73;;-1:-1:-1;32503:24:0;;32566:9;;;;;;;32530:33;;32548:15;;;;;32530;:33;:::i;:::-;:45;;;;:::i;:::-;32503:72;-1:-1:-1;32580:20:0;32622:34;32503:72;32622:15;:34;:::i;:::-;32603:54;;:15;:54;:::i;:::-;32580:77;;32664:31;32682:12;32664:17;:31::i;:::-;32702:27;32732:42;32757:17;32732:21;:42;:::i;:::-;32847:15;;32702:72;;-1:-1:-1;32779:19:0;;32847:15;;;;;;;;32836:8;;;;;32815:17;;32847:15;;32815:13;:17;:::i;:::-;32814:30;;;;:::i;:::-;:48;;;;:::i;:::-;32801:9;;:62;;;:9;;;;;:62;:::i;:::-;32919:13;;32779:84;;;;;-1:-1:-1;32868:26:0;;32949:1;;32779:84;;32897:35;;32919:13;32897:19;:35;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;32868:82;-1:-1:-1;32961:19:0;;32957:169;;32988:50;33002:15;33019:18;32988:13;:50::i;:::-;33049:65;;;21446:25:1;;;21502:2;21487:18;;21480:34;;;21530:18;;;21523:34;;;33049:65:0;;21434:2:1;21419:18;33049:65:0;;;;;;;32957:169;33188:15;;33149:74;;-1:-1:-1;;;33149:74:0;;-1:-1:-1;;;;;33188:15:0;;;33149:74;;;10994:51:1;11061:18;;;11054:34;;;33133:12:0;;33164:4;;33149:30;;10967:18:1;;33149:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33132:91;;33231:7;33228:130;;;33246:15;;:64;;-1:-1:-1;;;33246:64:0;;;;;2070:25:1;;;-1:-1:-1;;;;;33246:15:0;;;;:46;;2043:18:1;;33246:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33321:31;33335:16;33321:31;;;;2070:25:1;;2058:2;2043:18;;1924:177;33321:31:0;;;;;;;;33228:130;32303:1059;;;;;;;;;32268:1094::o;10232:509::-;-1:-1:-1;;;;;10345:20:0;;10337:70;;;;-1:-1:-1;;;10337:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10420:23:0;;10412:71;;;;-1:-1:-1;;;10412:71:0;;;;;;;:::i;:::-;10560;10582:6;10560:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10560:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;10540:17:0;;;;;;;:9;:17;;;;;;:91;;;;10659:20;;;;;;;:32;;10684:6;10659:24;:32::i;:::-;-1:-1:-1;;;;;10636:20:0;;;;;;;:9;:20;;;;;;;:55;;;;10701:35;;;;;;;;;;10729:6;2070:25:1;;2058:2;2043:18;;1924:177;2785:127:0;2843:7;2864:43;2868:1;2871;2864:43;;;;;;;;;;;;;;;;;:3;:43::i;33365:416::-;33450:16;;;33464:1;33450:16;;;;;;;;33426:21;;33450:16;;;;;;;;;;-1:-1:-1;33450:16:0;33426:40;;33489:4;33471;33476:1;33471:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33471:23:0;;;:7;;;;;;;;;;:23;;;;33509:15;;:22;;;-1:-1:-1;;;33509:22:0;;;;:15;;;;;:20;;:22;;;;;33471:7;;33509:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33499:4;33504:1;33499:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33499:32:0;;;:7;;;;;;;;;:32;33568:15;;33536:62;;33553:4;;33568:15;33586:11;33536:8;:62::i;:::-;33603:15;;:173;;-1:-1:-1;;;33603:173:0;;-1:-1:-1;;;;;33603:15:0;;;;:66;;:173;;33675:11;;33603:15;;33727:4;;33745;;33756:15;;33603:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33421:360;33365:416;:::o;33784:445::-;33959:15;;33927:62;;33944:4;;-1:-1:-1;;;;;33959:15:0;33977:11;33927:8;:62::i;:::-;34026:15;;:198;;-1:-1:-1;;;34026:198:0;;34089:4;34026:198;;;23282:34:1;;;23332:18;;;23325:34;;;34026:15:0;23375:18:1;;;23368:34;;;23418:18;;;23411:34;23461:19;;;23454:44;34204:15:0;23514:19:1;;;23507:35;-1:-1:-1;;;;;34026:15:0;;;;:31;;34065:9;;23216:19:1;;34026:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:597::-;706:4;735:2;764;753:9;746:21;796:6;790:13;839:6;834:2;823:9;819:18;812:34;864:1;874:140;888:6;885:1;882:13;874:140;;;983:14;;;979:23;;973:30;949:17;;;968:2;945:26;938:66;903:10;;874:140;;;1032:6;1029:1;1026:13;1023:91;;;1102:1;1097:2;1088:6;1077:9;1073:22;1069:31;1062:42;1023:91;-1:-1:-1;1175:2:1;1154:15;-1:-1:-1;;1150:29:1;1135:45;;;;1182:2;1131:54;;594:597;-1:-1:-1;;;594:597:1:o;1196:315::-;1264:6;1272;1325:2;1313:9;1304:7;1300:23;1296:32;1293:52;;;1341:1;1338;1331:12;1293:52;1380:9;1367:23;1399:31;1424:5;1399:31;:::i;:::-;1449:5;1501:2;1486:18;;;;1473:32;;-1:-1:-1;;;1196:315:1:o;1516:180::-;1575:6;1628:2;1616:9;1607:7;1603:23;1599:32;1596:52;;;1644:1;1641;1634:12;1596:52;-1:-1:-1;1667:23:1;;1516:180;-1:-1:-1;1516:180:1:o;2106:456::-;2183:6;2191;2199;2252:2;2240:9;2231:7;2227:23;2223:32;2220:52;;;2268:1;2265;2258:12;2220:52;2307:9;2294:23;2326:31;2351:5;2326:31;:::i;:::-;2376:5;-1:-1:-1;2433:2:1;2418:18;;2405:32;2446:33;2405:32;2446:33;:::i;:::-;2106:456;;2498:7;;-1:-1:-1;;;2552:2:1;2537:18;;;;2524:32;;2106:456::o;3214:156::-;3280:20;;3340:4;3329:16;;3319:27;;3309:55;;3360:1;3357;3350:12;3309:55;3214:156;;;:::o;3375:322::-;3446:6;3454;3462;3515:2;3503:9;3494:7;3490:23;3486:32;3483:52;;;3531:1;3528;3521:12;3483:52;3554:27;3571:9;3554:27;:::i;:::-;3544:37;;3600:36;3632:2;3621:9;3617:18;3600:36;:::i;:::-;3590:46;;3655:36;3687:2;3676:9;3672:18;3655:36;:::i;:::-;3645:46;;3375:322;;;;;:::o;3702:118::-;3788:5;3781:13;3774:21;3767:5;3764:32;3754:60;;3810:1;3807;3800:12;3825:382;3890:6;3898;3951:2;3939:9;3930:7;3926:23;3922:32;3919:52;;;3967:1;3964;3957:12;3919:52;4006:9;3993:23;4025:31;4050:5;4025:31;:::i;:::-;4075:5;-1:-1:-1;4132:2:1;4117:18;;4104:32;4145:30;4104:32;4145:30;:::i;:::-;4194:7;4184:17;;;3825:382;;;;;:::o;4557:388::-;4625:6;4633;4686:2;4674:9;4665:7;4661:23;4657:32;4654:52;;;4702:1;4699;4692:12;4654:52;4741:9;4728:23;4760:31;4785:5;4760:31;:::i;:::-;4810:5;-1:-1:-1;4867:2:1;4852:18;;4839:32;4880:33;4839:32;4880:33;:::i;4950:380::-;5029:1;5025:12;;;;5072;;;5093:61;;5147:4;5139:6;5135:17;5125:27;;5093:61;5200:2;5192:6;5189:14;5169:18;5166:38;5163:161;;5246:10;5241:3;5237:20;5234:1;5227:31;5281:4;5278:1;5271:15;5309:4;5306:1;5299:15;5163:161;;4950:380;;;:::o;5335:356::-;5537:2;5519:21;;;5556:18;;;5549:30;5615:34;5610:2;5595:18;;5588:62;5682:2;5667:18;;5335:356::o;7931:184::-;8001:6;8054:2;8042:9;8033:7;8029:23;8025:32;8022:52;;;8070:1;8067;8060:12;8022:52;-1:-1:-1;8093:16:1;;7931:184;-1:-1:-1;7931:184:1:o;8425:245::-;8492:6;8545:2;8533:9;8524:7;8520:23;8516:32;8513:52;;;8561:1;8558;8551:12;8513:52;8593:9;8587:16;8612:28;8634:5;8612:28;:::i;8944:418::-;9146:2;9128:21;;;9185:2;9165:18;;;9158:30;9224:34;9219:2;9204:18;;9197:62;-1:-1:-1;;;9290:2:1;9275:18;;9268:52;9352:3;9337:19;;8944:418::o;10154:127::-;10215:10;10210:3;10206:20;10203:1;10196:31;10246:4;10243:1;10236:15;10270:4;10267:1;10260:15;10286:127;10347:10;10342:3;10338:20;10335:1;10328:31;10378:4;10375:1;10368:15;10402:4;10399:1;10392:15;10418:125;10458:4;10486:1;10483;10480:8;10477:34;;;10491:18;;:::i;:::-;-1:-1:-1;10528:9:1;;10418:125::o;10548:127::-;10609:10;10604:3;10600:20;10597:1;10590:31;10640:4;10637:1;10630:15;10664:4;10661:1;10654:15;10680:135;10719:3;10740:17;;;10737:43;;10760:18;;:::i;:::-;-1:-1:-1;10807:1:1;10796:13;;10680:135::o;12190:128::-;12230:3;12261:1;12257:6;12254:1;12251:13;12248:39;;;12267:18;;:::i;:::-;-1:-1:-1;12303:9:1;;12190:128::o;13487:401::-;13689:2;13671:21;;;13728:2;13708:18;;;13701:30;13767:34;13762:2;13747:18;;13740:62;-1:-1:-1;;;13833:2:1;13818:18;;13811:35;13878:3;13863:19;;13487:401::o;13893:399::-;14095:2;14077:21;;;14134:2;14114:18;;;14107:30;14173:34;14168:2;14153:18;;14146:62;-1:-1:-1;;;14239:2:1;14224:18;;14217:33;14282:3;14267:19;;13893:399::o;17005:168::-;17045:7;17111:1;17107;17103:6;17099:14;17096:1;17093:21;17088:1;17081:9;17074:17;17070:45;17067:71;;;17118:18;;:::i;:::-;-1:-1:-1;17158:9:1;;17005:168::o;17178:127::-;17239:10;17234:3;17230:20;17227:1;17220:31;17270:4;17267:1;17260:15;17294:4;17291:1;17284:15;17310:120;17350:1;17376;17366:35;;17381:18;;:::i;:::-;-1:-1:-1;17415:9:1;;17310:120::o;18666:209::-;-1:-1:-1;;18830:38:1;;;;18812:57;;18800:2;18785:18;;18666:209::o;20241:204::-;20279:3;20315:4;20312:1;20308:12;20347:4;20344:1;20340:12;20382:3;20376:4;20372:14;20367:3;20364:23;20361:49;;;20390:18;;:::i;:::-;20426:13;;20241:204;-1:-1:-1;;;20241:204:1:o;20874:165::-;20912:1;20946:4;20943:1;20939:12;20970:3;20960:37;;20977:18;;:::i;:::-;21029:3;21022:4;21019:1;21015:12;21011:22;21006:27;;;20874:165;;;;:::o;21044:195::-;21082:4;21119;21116:1;21112:12;21151:4;21148:1;21144:12;21176:3;21171;21168:12;21165:38;;;21183:18;;:::i;:::-;21220:13;;;21044:195;-1:-1:-1;;;21044:195:1:o;21700:251::-;21770:6;21823:2;21811:9;21802:7;21798:23;21794:32;21791:52;;;21839:1;21836;21829:12;21791:52;21871:9;21865:16;21890:31;21915:5;21890:31;:::i;21956:980::-;22218:4;22266:3;22255:9;22251:19;22297:6;22286:9;22279:25;22323:2;22361:6;22356:2;22345:9;22341:18;22334:34;22404:3;22399:2;22388:9;22384:18;22377:31;22428:6;22463;22457:13;22494:6;22486;22479:22;22532:3;22521:9;22517:19;22510:26;;22571:2;22563:6;22559:15;22545:29;;22592:1;22602:195;22616:6;22613:1;22610:13;22602:195;;;22681:13;;-1:-1:-1;;;;;22677:39:1;22665:52;;22772:15;;;;22737:12;;;;22713:1;22631:9;22602:195;;;-1:-1:-1;;;;;;;22853:32:1;;;;22848:2;22833:18;;22826:60;-1:-1:-1;;;22917:3:1;22902:19;22895:35;22814:3;21956:980;-1:-1:-1;;;21956:980:1:o;23553:306::-;23641:6;23649;23657;23710:2;23698:9;23689:7;23685:23;23681:32;23678:52;;;23726:1;23723;23716:12;23678:52;23755:9;23749:16;23739:26;;23805:2;23794:9;23790:18;23784:25;23774:35;;23849:2;23838:9;23834:18;23828:25;23818:35;;23553:306;;;;;:::o

Swarm Source

ipfs://e2dd06412f5ca46a101b482ebad77e393f3da2dfbb29d6809b201d51110001c6
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.