ETH Price: $2,627.48 (+0.54%)

Token

TheUse (TUSE)
 

Overview

Max Total Supply

100,000,000,000,000,987,655,765.898346793987361014 TUSE

Holders

83

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
6,483,195.171649490851369266 TUSE

Value
$0.00
0x700fbdf9eef4b7af5792afead9b825eda4b8ac39
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:
TheUse

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// https://www.theuse.io/
// 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 StakingLarpMap {
	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 TheUse is Ownable, ERC20 {

	IRouter public uniswapV2Router;
	address public immutable uniswapV2Pair;

	string private constant _name =  "TheUse";
	string private constant _symbol = "TUSE";
	uint8 private constant _decimals = 18;

	TheUseDividendTracker public dividendTracker;

	bool public isTradingEnabled;

	// initialSupply
	uint256 constant initialSupply = 1e9 * 1e18;

	uint256 public maxWalletAmount = initialSupply * 30 / 1000;

	uint256 public maxTxAmount = initialSupply * 15 / 100;

	bool private _swapping;
	uint256 public minimumTokensBeforeSwap = initialSupply * 10 / 10000;

	address public liquidityWallet;
	address public marketingWallet;
	address public buyBackWallet;
	address private poolbooster;

	struct CustomTaxPeriod {
		bytes23 periodName;
		uint8 blocksInPeriod;
		uint256 timeInPeriod;
		uint8 liquidityFeeOnBuy;
		uint8 liquidityFeeOnSell;
		uint8 marketingFeeOnBuy;
		uint8 marketingFeeOnSell;
		uint8 buyBackFeeOnBuy;
		uint8 buyBackFeeOnSell;
        uint8 burnFeeOnBuy;
		uint8 burnFeeOnSell;
		uint8 holdersFeeOnBuy;
		uint8 holdersFeeOnSell;
	}

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

	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 _marketingFee;
	uint8 private _buyBackFee;
    uint8 private _burnFee;
	uint8 private _holdersFee;
	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 marketingFee, uint8 buyBackFee, 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 marketingFee, uint8 buyBackFee, uint8 burnFee, uint8 holdersFee, uint8 totalFee);
	event PoolBoosterContractChange(address poolboosterContract);

	modifier hasPoolBoosterSupplyPermission {
		require(msg.sender == poolbooster, "only poolbooster contract can supply rewards for stakers");
		_;
	}

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

		liquidityWallet = owner();
		marketingWallet = address(0x43F83E2Afe1e887dCba5D92DCD654140A3Ba0fd6);
		buyBackWallet = address(0x99B0d1E42f746333F748dbA1e67dcE0CFd53F2b4);

		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[marketingWallet] = 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;
		_isExcludedFromMaxTransactionLimit[owner()] = true;
		_isExcludedFromMaxTransactionLimit[marketingWallet] = true;

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

		_mint(owner(), initialSupply);
	}

	receive() external payable {}

	// Setters
	function activateTrading() external onlyOwner {
		isTradingEnabled = true;
	}
	
	function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(automatedMarketMakerPairs[pair] != value, "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, " 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, "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, "Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
		emit ExcludeFromMaxWalletChange(account, excluded);
	}
	function setWallets(address newLiquidityWallet, address newMarketingWallet, address newBuyBackWallet) external onlyOwner {
		if(liquidityWallet != newLiquidityWallet) {
			require(newLiquidityWallet != address(0), "The liquidityWallet cannot be 0");
			emit WalletChange("liquidityWallet", newLiquidityWallet, liquidityWallet);
			liquidityWallet = newLiquidityWallet;
		}
		if(marketingWallet != newMarketingWallet) {
			require(newMarketingWallet != address(0), "The marketingWallet cannot be 0");
			emit WalletChange("marketingWallet", newMarketingWallet, marketingWallet);
			marketingWallet = newMarketingWallet;
		}
		if(buyBackWallet != newBuyBackWallet) {
			require(newBuyBackWallet != address(0), "The buyBackWallet cannot be 0");
			emit WalletChange("buyBackWallet", newBuyBackWallet, buyBackWallet);
			buyBackWallet = newBuyBackWallet;
		}
	}
	// Base fees
	function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _burnFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner {
		   require(5 > _liquidityFeeOnBuy + _marketingFeeOnBuy + _buyBackFeeOnBuy + _burnFeeOnBuy + _holdersFeeOnBuy, "buy fee must be fair!!!");
		_setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _burnFeeOnBuy, _holdersFeeOnBuy);
		emit FeeChange("baseFees-Buy", _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _burnFeeOnBuy, _holdersFeeOnBuy);
	}
	function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _burnFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner {
		   require( 7 > _liquidityFeeOnSell + _marketingFeeOnSell + _buyBackFeeOnSell + _burnFeeOnSell + _holdersFeeOnSell, "sell fee must be fair!!!");
		_setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _burnFeeOnSell, _holdersFeeOnSell);
		emit FeeChange("baseFees-Sell", _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _burnFeeOnSell, _holdersFeeOnSell);
	}
	function setUniswapRouter(address newAddress) external onlyOwner {
		require(newAddress != address(uniswapV2Router), "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, "Cannot update maxTxAmount to same value");
		emit MaxTransactionAmountChange(newValue, maxTxAmount);
		maxTxAmount = newValue;
	}
	function setMaxWalletAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxWalletAmount, "Cannot update maxWalletAmount to same value");
		emit MaxWalletAmountChange(newValue, maxWalletAmount);
		maxWalletAmount = newValue;
	}
	function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
		require(newValue != minimumTokensBeforeSwap, "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 claimETHOverflow(uint256 amount) external onlyOwner {
	    require(amount < address(this).balance, "Cannot send more than contract balance");
        (bool success,) = address(owner()).call{value : amount}("");
        if (success){
            emit ClaimETHOverflow(amount);
        }
	}
	function poolBoosterSupply(address account, uint256 value) external hasPoolBoosterSupplyPermission returns(bool) {
		_mint(account, value);
		return true;
	}
	function burn(uint256 value) external {
		_burn(msg.sender, value);
	}

	function poolboosterContract() external view returns (address) {
        return poolbooster;
    }

	function setPoolBoosterContract(address _poolboosterContract) external onlyOwner {
        require(_poolboosterContract != address(0x0) && _poolboosterContract != poolbooster, "invalid address");
        poolbooster = _poolboosterContract;
		emit PoolBoosterContractChange(_poolboosterContract);
    }

	// 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, uint8, uint8){
		return (_base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.buyBackFeeOnBuy, _base.burnFeeOnBuy, _base.holdersFeeOnBuy);
	}
	function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8, uint8){
		return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.buyBackFeeOnSell, _base.burnFeeOnSell, _base.holdersFeeOnSell);
	}

	// 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");

			if(amount == 0) {
				super._transfer(from, to, 0);
				return;
			}

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

			if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
				require(isTradingEnabled, "Trading is currently disabled.");
				if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { 
					
					if (isBuyFromLp) {
					require(amount <= maxWalletAmount, "Buy amount exceeds the maxTxBuyAmount.");
					}

					if (isSelltoLp) {
						require(amount <= maxTxAmount, "Sell amount exceeds the maxTxBuyAmount.");
					}
				}
				if (!_isExcludedFromMaxWalletLimit[to]) {
					require((balanceOf(to) + amount) <= maxWalletAmount, "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;
		_marketingFee = 0;
		_buyBackFee = 0;
        _burnFee = 0;
		_holdersFee = 0;

		if (isBuyFromLp) {
			_liquidityFee = _base.liquidityFeeOnBuy;
			_marketingFee = _base.marketingFeeOnBuy;
			_buyBackFee = _base.buyBackFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
			_holdersFee = _base.holdersFeeOnBuy;
		}
	    if (isSelltoLp) {
	    	_liquidityFee = _base.liquidityFeeOnSell;
			_marketingFee = _base.marketingFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;
		}
        if (!isSelltoLp && !isBuyFromLp) {
			_liquidityFee = _base.liquidityFeeOnSell;
			_marketingFee = _base.marketingFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;
		}
		_totalFee = _liquidityFee + _marketingFee + _buyBackFee + _burnFee + _holdersFee;
		emit FeesApplied(_liquidityFee, _marketingFee, _buyBackFee, _burnFee, _holdersFee, _totalFee);
	}
	function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnSell,
		uint8 _marketingFeeOnSell,
		uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell,
		uint8 _holdersFeeOnSell
	) private {
		if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
			emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, "liquidityFeeOnSell", map.periodName);
			map.liquidityFeeOnSell = _liquidityFeeOnSell;
		}
		if (map.marketingFeeOnSell != _marketingFeeOnSell) {
			emit CustomTaxPeriodChange(_marketingFeeOnSell, map.marketingFeeOnSell, "marketingFeeOnSell", map.periodName);
			map.marketingFeeOnSell = _marketingFeeOnSell;
		}
		if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
			emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, "buyBackFeeOnSell", map.periodName);
			map.buyBackFeeOnSell = _buyBackFeeOnSell;
		}
        if (map.burnFeeOnSell != _burnFeeOnSell) {
			emit CustomTaxPeriodChange(_burnFeeOnSell, map.burnFeeOnSell, "burnFeeOnSell", map.periodName);
			map.burnFeeOnSell = _burnFeeOnSell;
		}
		if (map.holdersFeeOnSell != _holdersFeeOnSell) {
			emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, "holdersFeeOnSell", map.periodName);
			map.holdersFeeOnSell = _holdersFeeOnSell;
		}
	}
	function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnBuy,
		uint8 _marketingFeeOnBuy,
		uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy,
		uint8 _holdersFeeOnBuy
		) private {
		if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
			emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, "liquidityFeeOnBuy", map.periodName);
			map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
		}
		if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
			emit CustomTaxPeriodChange(_marketingFeeOnBuy, map.marketingFeeOnBuy, "marketingFeeOnBuy", map.periodName);
			map.marketingFeeOnBuy = _marketingFeeOnBuy;
		}
		if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
			emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, "buyBackFeeOnBuy", map.periodName);
			map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
		}
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
			emit CustomTaxPeriodChange(_burnFeeOnBuy, map.burnFeeOnBuy, "burnFeeOnBuy", map.periodName);
			map.burnFeeOnBuy = _burnFeeOnBuy;
		}
		if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
			emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, "holdersFeeOnBuy", map.periodName);
			map.holdersFeeOnBuy = _holdersFeeOnBuy;
		}
	}
	function _swapAndLiquify() private {
		uint256 contractBalance = balanceOf(address(this));
		uint256 initialETHBalance = address(this).balance;

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

		_swapTokensForETH(amountToSwap);

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

		payable(buyBackWallet).transfer(amountETHBuyBack);
        payable(marketingWallet).transfer(amountETHMarketing);

		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(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.addLiquidityETH{value: ethAmount}(
			address(this),
			tokenAmount,
			0, // slippage is unavoidable
			0, // slippage is unavoidable
			liquidityWallet,
			block.timestamp
		);
	}
}

contract TheUseDividendTracker is DividendPayingToken {
	using SafeMath for uint256;
	using SafeMathInt for int256;
	using StakingLarpMap for StakingLarpMap.Map;

	StakingLarpMap.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("TheUse_Dividend_Tracker", "TheUse_Dividend_Tracker") {
		claimWait = 3600;
		minimumTokenBalanceForDividends = 0 * (10**18);
	}
	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, "TheUse_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 setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
		require(minimumTokenBalanceForDividends != newValue, "TheUse_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":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","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":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","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":"address","name":"poolboosterContract","type":"address"}],"name":"PoolBoosterContractChange","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"},{"inputs":[],"name":"activateTrading","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":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"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 TheUseDividendTracker","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"},{"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"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"poolBoosterSupply","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"poolboosterContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","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":"_poolboosterContract","type":"address"}],"name":"setPoolBoosterContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"}],"name":"setWallets","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":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526103e8620000206b033b2e3c9fd0803ce8000000601e62000c6b565b6200002c919062000c8d565b60085560646200004a6b033b2e3c9fd0803ce8000000600f62000c6b565b62000056919062000c8d565b600955612710620000756b033b2e3c9fd0803ce8000000600a62000c6b565b62000081919062000c8d565b600b55604080516101a081018252636261736560e01b81526001602082018190529181018290526000606082018190526080820181905260a0820181905260c0820181905260e082018390526101008201839052610120820183905261014082018390526101608201819052610180909101526010805464016261736560981b6001600160c01b0319909116179055601155601280546001600160501b0319166701010101000000001790553480156200013a57600080fd5b506040518060400160405280600681526020016554686555736560d01b815250604051806040016040528060048152602001635455534560e01b8152506000620001896200095660201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001e1838262000d54565b506005620001f0828262000d54565b505050604051620002019062000c47565b604051809103906000f0801580156200021e573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200028957600080fd5b505af11580156200029e573d6000803e3d6000fd5b5050600754604051638aee812760e01b81523060048201526001600160a01b039091169250638aee81279150602401600060405180830381600087803b158015620002e857600080fd5b505af1158015620002fd573d6000803e3d6000fd5b50505050620003116200095a60201b60201c565b600c80546001600160a01b03929092166001600160a01b0319928316179055600d805482167343f83e2afe1e887dcba5d92dcd654140a3ba0fd6179055600e80549091167399b0d1e42f746333f748dba1e67dce0cfd53f2b41790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e9919062000e20565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000437573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045d919062000e20565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d1919062000e20565b600680546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200050581600162000969565b6001601460006200051e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d5482168152601490935281832080548516600190811790915530845282842080548616821790556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620005c657600080fd5b505af1158015620005db573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200062557600080fd5b505af11580156200063a573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200068657600080fd5b505af11580156200069b573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db09050620006c56000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200070757600080fd5b505af11580156200071c573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200076857600080fd5b505af11580156200077d573d6000803e3d6000fd5b50505050600160136000620007976200095a60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560075490911681526015928390528181208054851660019081179091553082529181208054909416821790935591620008066000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260158452828120805486166001908117909155868316825260169485905283822080548716821790556007548316825283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620008ac6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d5490911681526016909252812080548316600190811790915561dead9091527f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b5780549092161790556200094e6200093b6000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000ad1565b505062000e66565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526017602052604090205481151560ff90911615150362000a055760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601760205260409020805460ff1916821580159190911790915562000a955760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000b295760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620009fc565b62000b458160035462000bdd60201b62001dfb1790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000b7a91839062001dfb62000bdd821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000bcc9085815260200190565b60405180910390a35050565b505050565b60008062000bec838562000e4b565b90508381101562000c405760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620009fc565b9392505050565b611e638062004bc183390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c885762000c8862000c55565b500290565b60008262000cab57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000cdb57607f821691505b60208210810362000cfc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000bd857600081815260208120601f850160051c8101602086101562000d2b5750805b601f850160051c820191505b8181101562000d4c5782815560010162000d37565b505050505050565b81516001600160401b0381111562000d705762000d7062000cb0565b62000d888162000d81845462000cc6565b8462000d02565b602080601f83116001811462000dc0576000841562000da75750858301515b600019600386901b1c1916600185901b17855562000d4c565b600085815260208120601f198616915b8281101562000df15788860151825594840194600190910190840162000dd0565b508582101562000e105787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000e3357600080fd5b81516001600160a01b038116811462000c4057600080fd5b6000821982111562000e615762000e6162000c55565b500190565b608051613d3f62000e82600039600061057b0152613d3f6000f3fe6080604052600436106102e85760003560e01c8063715018a611610190578063aa4bde28116100dc578063cd43e22811610095578063d46980161161006f578063d469801614610928578063dd62ed3e14610948578063f2fde38b1461098e578063fe017535146109ae57600080fd5b8063cd43e22814610881578063d2d7ad83146108f2578063d32215761461090857600080fd5b8063aa4bde28146107bb578063aee50b1e146107d1578063b1ba39ea146107f1578063b62496f514610811578063bea9849e14610841578063c02466681461086157600080fd5b80638da5cb5b116101495780639fad9683116101235780639fad96831461073b578063a457c2d71461075b578063a8b9d2401461077b578063a9059cbb1461079b57600080fd5b80638da5cb5b146106e85780638fb862511461070657806395d89b411461072657600080fd5b8063715018a61461063d57806375cb1bd11461065257806375f0a87414610672578063781edb3c14610692578063880bcbc1146106b25780638c0b5e22146106d257600080fd5b806327a14fc21161024f57806342966c68116102085780635ebf4db9116101e25780635ebf4db9146105b257806364b0f653146105d25780636843cd84146105e757806370a082311461060757600080fd5b806342966c681461054957806349bd5a5e146105695780634e71d92d1461059d57600080fd5b806327a14fc2146104985780632c1f5216146104b857806330bb4cff146104d8578063313ce567146104ed57806331e79db014610509578063395093511461052957600080fd5b80631694505e116102a15780631694505e146103c357806318160ddd146103fb5780631cd348c01461041a5780631e293c101461043a578063218bedf31461045a57806323b872dd1461047857600080fd5b8063064a59d0146102f457806306fdde031461032a57806307ef5de41461034c578063095ea7b31461036c578063098df5851461038c5780630bd05b69146103ae57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5060075461031590600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561033657600080fd5b5061033f6109f4565b60405161032191906136b4565b34801561035857600080fd5b5061031561036736600461371e565b610a86565b34801561037857600080fd5b5061031561038736600461371e565b610b21565b34801561039857600080fd5b506103ac6103a736600461374a565b610b2e565b005b3480156103ba57600080fd5b506103ac610c4b565b3480156103cf57600080fd5b506006546103e3906001600160a01b031681565b6040516001600160a01b039091168152602001610321565b34801561040757600080fd5b506003545b604051908152602001610321565b34801561042657600080fd5b50600e546103e3906001600160a01b031681565b34801561044657600080fd5b506103ac61045536600461374a565b610c8a565b34801561046657600080fd5b50600f546001600160a01b03166103e3565b34801561048457600080fd5b50610315610493366004613763565b610d48565b3480156104a457600080fd5b506103ac6104b336600461374a565b610db1565b3480156104c457600080fd5b506007546103e3906001600160a01b031681565b3480156104e457600080fd5b5061040c610e73565b3480156104f957600080fd5b5060405160128152602001610321565b34801561051557600080fd5b506103ac6105243660046137a4565b610ee6565b34801561053557600080fd5b5061031561054436600461371e565b610f73565b34801561055557600080fd5b506103ac61056436600461374a565b610fa9565b34801561057557600080fd5b506103e37f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a957600080fd5b506103ac610fb6565b3480156105be57600080fd5b506103ac6105cd36600461374a565b61102b565b3480156105de57600080fd5b5061040c611086565b3480156105f357600080fd5b5061040c6106023660046137a4565b6110d0565b34801561061357600080fd5b5061040c6106223660046137a4565b6001600160a01b031660009081526001602052604090205490565b34801561064957600080fd5b506103ac611146565b34801561065e57600080fd5b506103ac61066d3660046137c1565b6111ba565b34801561067e57600080fd5b50600d546103e3906001600160a01b031681565b34801561069e57600080fd5b506103ac6106ad36600461381a565b611493565b3480156106be57600080fd5b506103ac6106cd36600461381a565b61155d565b3480156106de57600080fd5b5061040c60095481565b3480156106f457600080fd5b506000546001600160a01b03166103e3565b34801561071257600080fd5b506103ac6107213660046137a4565b61161f565b34801561073257600080fd5b5061033f611701565b34801561074757600080fd5b506103ac610756366004613869565b611710565b34801561076757600080fd5b5061031561077636600461371e565b611844565b34801561078757600080fd5b5061040c6107963660046137a4565b611893565b3480156107a757600080fd5b506103156107b636600461371e565b6118c6565b3480156107c757600080fd5b5061040c60085481565b3480156107dd57600080fd5b506103ac6107ec36600461374a565b6118d3565b3480156107fd57600080fd5b506103ac61080c366004613869565b61199d565b34801561081d57600080fd5b5061031561082c3660046137a4565b60176020526000908152604090205460ff1681565b34801561084d57600080fd5b506103ac61085c3660046137a4565b611a71565b34801561086d57600080fd5b506103ac61087c36600461381a565b611b89565b34801561088d57600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610321565b3480156108fe57600080fd5b5061040c600b5481565b34801561091457600080fd5b506103ac61092336600461381a565b611c8f565b34801561093457600080fd5b50600c546103e3906001600160a01b031681565b34801561095457600080fd5b5061040c6109633660046138ce565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561099a57600080fd5b506103ac6109a93660046137a4565b611d11565b3480156109ba57600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166108be565b606060048054610a03906138fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2f906138fc565b8015610a7c5780601f10610a5157610100808354040283529160200191610a7c565b820191906000526020600020905b815481529060010190602001808311610a5f57829003601f168201915b5050505050905090565b600f546000906001600160a01b03163314610b0e5760405162461bcd60e51b815260206004820152603860248201527f6f6e6c7920706f6f6c626f6f7374657220636f6e74726163742063616e20737560448201527f70706c79207265776172647320666f72207374616b657273000000000000000060648201526084015b60405180910390fd5b610b188383611e61565b50600192915050565b6000610b18338484611f47565b6000546001600160a01b03163314610b585760405162461bcd60e51b8152600401610b0590613936565b478110610bb65760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610b05565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610c03576040519150601f19603f3d011682016040523d82523d6000602084013e610c08565b606091505b505090508015610c47576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610c755760405162461bcd60e51b8152600401610b0590613936565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610cb45760405162461bcd60e51b8152600401610b0590613936565b6009548103610d155760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420757064617465206d61785478416d6f756e7420746f2073616d604482015266652076616c756560c81b6064820152608401610b05565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610d5584848461206c565b610da78433610da285604051806060016040528060288152602001613c9d602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612670565b611f47565b5060019392505050565b6000546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610b0590613936565b6008548103610e405760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610b05565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee1919061396b565b905090565b6000546001600160a01b03163314610f105760405162461bcd60e51b8152600401610b0590613936565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610f5857600080fd5b505af1158015610f6c573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610b18918590610da29086611dfb565b610fb333826126aa565b50565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611007573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb39190613984565b6000546001600160a01b031633146110555760405162461bcd60e51b8152600401610b0590613936565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610f3e565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ebd573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611140919061396b565b92915050565b6000546001600160a01b031633146111705760405162461bcd60e51b8152600401610b0590613936565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111e45760405162461bcd60e51b8152600401610b0590613936565b600c546001600160a01b038481169116146112c8576001600160a01b03831661124f5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610b05565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b038381169116146113ac576001600160a01b0382166113335760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610b05565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461148e576001600160a01b0381166114175760405162461bcd60e51b815260206004820152601d60248201527f546865206275794261636b57616c6c65742063616e6e6f7420626520300000006044820152606401610b05565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6000546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036114fd5760405162461bcd60e51b8152600401610b05906139a1565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146115875760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036115c75760405162461bcd60e51b8152600401610b05906139a1565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611551565b6000546001600160a01b031633146116495760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b0381161580159061166f5750600f546001600160a01b03828116911614155b6116ad5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b6044820152606401610b05565b600f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f3b82d5d6453f0b1159c520f357885406fc3d5577c5eaf498aff4f8cfba4202099060200160405180910390a150565b606060058054610a03906138fc565b6000546001600160a01b0316331461173a5760405162461bcd60e51b8152600401610b0590613936565b8082846117478789613a01565b6117519190613a01565b61175b9190613a01565b6117659190613a01565b60ff166005116117b75760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610b05565b6117c6601086868686866127ae565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610b183384610da285604051806060016040528060258152602001613ce5602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612670565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016110ff565b6000610b1833848461206c565b6000546001600160a01b031633146118fd5760405162461bcd60e51b8152600401610b0590613936565b600b54810361196a5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610b05565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146119c75760405162461bcd60e51b8152600401610b0590613936565b8082846119d48789613a01565b6119de9190613a01565b6119e89190613a01565b6119f29190613a01565b60ff16600711611a445760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610b05565b611a5360108686868686612a93565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d016117df565b6000546001600160a01b03163314611a9b5760405162461bcd60e51b8152600401610b0590613936565b6006546001600160a01b0390811690821603611b055760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610b05565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610f3e565b6000546001600160a01b03163314611bb35760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503611c375760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b6064820152608401610b05565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611551565b6000546001600160a01b03163314611cb95760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611551565b6000546001600160a01b03163314611d3b5760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b038116611da05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b05565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e088385613a26565b905083811015611e5a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b05565b9392505050565b6001600160a01b038216611eb75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610b05565b600354611ec49082611dfb565b6003556001600160a01b038216600090815260016020526040902054611eea9082611dfb565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f3b9085815260200190565b60405180910390a35050565b6001600160a01b038316611fa95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b05565b6001600160a01b03821661200a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b05565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166120925760405162461bcd60e51b8152600401610b0590613a3e565b6001600160a01b0382166120b85760405162461bcd60e51b8152600401610b0590613a83565b806000036120cc5761148e83836000612d94565b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601390915290205460ff92831692918216911615801561212e57506001600160a01b03841660009081526013602052604090205460ff16155b1561235957600754600160a01b900460ff1661218c5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610b05565b6001600160a01b03841660009081526015602052604090205460ff161580156121ce57506001600160a01b03851660009081526015602052604090205460ff16155b156122a257811561223a5760085483111561223a5760405162461bcd60e51b815260206004820152602660248201527f42757920616d6f756e74206578636565647320746865206d617854784275794160448201526536b7bab73a1760d11b6064820152608401610b05565b80156122a2576009548311156122a25760405162461bcd60e51b815260206004820152602760248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547842757960448201526620b6b7bab73a1760c91b6064820152608401610b05565b6001600160a01b03841660009081526016602052604090205460ff1661235957600854836122e5866001600160a01b031660009081526001602052604090205490565b6122ef9190613a26565b11156123595760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610b05565b6123638282612ea0565b600b543060009081526001602052604090205460075491111590600160a01b900460ff1680156123905750805b801561239f5750600a5460ff16155b80156123b65750601854600160281b900460ff1615155b80156123da57506001600160a01b03851660009081526017602052604090205460ff165b156123ff57600a805460ff191660011790556123f4613118565b600a805460ff191690555b600a5460009060ff1615801561241e5750600754600160a01b900460ff165b6001600160a01b03881660009081526014602052604090205490915060ff168061246057506001600160a01b03861660009081526014602052604090205460ff165b15612469575060005b8080156124815750601854600160281b900460ff1615155b1561254a576018546000906064906124a390600160281b900460ff1688613ac6565b6124ad9190613afb565b6018549091506000906064906124cd906301000000900460ff1689613ac6565b6124d79190613afb565b90506124e38288613b0f565b96506124f0893084612d94565b80156125475761250030826126aa565b60185460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612555878787612d94565b6007546001600160a01b031663e30443bc88612586816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156125cc57600080fd5b505af19250505080156125dd575060015b506007546001600160a01b031663e30443bc8761260f816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561265557600080fd5b505af1925050508015612666575060015b5050505050505050565b600081848411156126945760405162461bcd60e51b8152600401610b0591906136b4565b5060006126a18486613b0f565b95945050505050565b6001600160a01b03821661270a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b05565b61274781604051806060016040528060228152602001613c55602291396001600160a01b0385166000908152600160205260409020549190612670565b6001600160a01b03831660009081526001602052604090205560035461276d9082613473565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611f3b565b600286015460ff86811691161461282f57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613cc5833981519152916128159160481b90613b26565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff8581166201000090920416146128c357604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613cc5833981519152916128a29160481b90613b26565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b909204161461295a576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613cc5833981519152916129369160481b90613b26565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b90920416146129f0576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613cc5833981519152916129ca9160481b90613b26565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612a8b576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613cc583398151915291612a639160481b90613b26565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff8681166101009092041614612b2457604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613cc583398151915291612b059160481b90613b26565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612bbd57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613cc583398151915291612b9a9160481b90613b26565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612c56576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613cc583398151915291612c319160481b90613b26565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612cee576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613cc583398151915291612cc79160481b90613b26565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612a8b576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613cc583398151915291612d629160481b90613b26565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612dba5760405162461bcd60e51b8152600401610b0590613a3e565b6001600160a01b038216612de05760405162461bcd60e51b8152600401610b0590613a83565b612e1d81604051806060016040528060268152602001613c77602691396001600160a01b0386166000908152600160205260409020549190612670565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612e4c9082611dfb565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061205f9085815260200190565b6018805464ffffffffff191690558115612f28576012546018805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612fa3576012546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b80158015612faf575081155b15613029576012546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60185460ff600160201b82048116916301000000810482169162010000820481169161305d91610100820481169116613a01565b6130679190613a01565b6130719190613a01565b61307b9190613a01565b6018805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610c3e565b306000908152600160205260408120546018549091479160029060ff600160281b8204811691613149911686613ac6565b6131539190613afb565b61315d9190613afb565b60185490915060009060ff600160281b820481169161318591600160201b9091041686613ac6565b61318f9190613afb565b9050600061319d8284613a26565b6131a79086613b0f565b90506131b2816134b5565b60006131be8547613b0f565b60185490915060009060ff600160201b8204811691630100000081048216916131ea9160029116613b3d565b6131f49190613a01565b6131fe9190613a01565b6018546132159190600160281b900460ff16613b5f565b60185460ff91821692506000916002918491613232911686613ac6565b61323c9190613afb565b6132469190613afb565b601854909150600090839061326390610100900460ff1686613ac6565b61326d9190613afb565b9050600061327b8284613a26565b6132859086613b0f565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156132c0573d6000803e3d6000fd5b50600d546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156132fb573d6000803e3d6000fd5b50871561334e5761330c8884613607565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af11580156133a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c69190613984565b9050801561346657600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561341457600080fd5b505af1158015613428573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698860405161345d91815260200190565b60405180910390a15b5050505050505050505050565b6000611e5a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612670565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134ea576134ea613b82565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135679190613b98565b8160018151811061357a5761357a613b82565b6001600160a01b0392831660209182029290920101526006546135a09130911684611f47565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906135d9908590600090869030904290600401613bb5565b600060405180830381600087803b1580156135f357600080fd5b505af1158015612a8b573d6000803e3d6000fd5b60065461361f9030906001600160a01b031684611f47565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561368f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f6c9190613c26565b600060208083528351808285015260005b818110156136e1578581018301518582016040015282016136c5565b818111156136f3576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610fb357600080fd5b6000806040838503121561373157600080fd5b823561373c81613709565b946020939093013593505050565b60006020828403121561375c57600080fd5b5035919050565b60008060006060848603121561377857600080fd5b833561378381613709565b9250602084013561379381613709565b929592945050506040919091013590565b6000602082840312156137b657600080fd5b8135611e5a81613709565b6000806000606084860312156137d657600080fd5b83356137e181613709565b925060208401356137f181613709565b9150604084013561380181613709565b809150509250925092565b8015158114610fb357600080fd5b6000806040838503121561382d57600080fd5b823561383881613709565b915060208301356138488161380c565b809150509250929050565b803560ff8116811461386457600080fd5b919050565b600080600080600060a0868803121561388157600080fd5b61388a86613853565b945061389860208701613853565b93506138a660408701613853565b92506138b460608701613853565b91506138c260808701613853565b90509295509295909350565b600080604083850312156138e157600080fd5b82356138ec81613709565b9150602083013561384881613709565b600181811c9082168061391057607f821691505b60208210810361393057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561397d57600080fd5b5051919050565b60006020828403121561399657600080fd5b8151611e5a8161380c565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff03821115613a1e57613a1e6139eb565b019392505050565b60008219821115613a3957613a396139eb565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000816000190483118215151615613ae057613ae06139eb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613b0a57613b0a613ae5565b500490565b600082821015613b2157613b216139eb565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff831680613b5057613b50613ae5565b8060ff84160491505092915050565b600060ff821660ff841680821015613b7957613b796139eb565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613baa57600080fd5b8151611e5a81613709565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613c055784516001600160a01b031683529383019391830191600101613be0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613c3b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207d566bc200d9696fa666450ccb188a7002bc902fa342e3cde841ca76861f7b6f64736f6c634300080f003360806040523480156200001157600080fd5b5060408051808201825260178082527f5468655573655f4469766964656e645f547261636b65720000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000197565b50600462000078828262000197565b50505060006200008d620000ee60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000263565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011d57607f821691505b6020821081036200013e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019257600081815260208120601f850160051c810160208610156200016d5750805b601f850160051c820191505b818110156200018e5782815560010162000179565b5050505b505050565b81516001600160401b03811115620001b357620001b3620000f2565b620001cb81620001c4845462000108565b8462000144565b602080601f831160018114620002035760008415620001ea5750858301515b600019600386901b1c1916600185901b1785556200018e565b600085815260208120601f198616915b82811015620002345788860151825594840194600190910190840162000213565b5085821015620002535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611bf080620002736000396000f3fe6080604052600436106101fd5760003560e01c8063715018a61161010d578063a9059cbb116100a0578063bea9849e1161006f578063bea9849e146105d6578063dd62ed3e146105f6578063e30443bc1461063c578063f2fde38b1461065c578063f7c618c11461067c57600080fd5b8063a9059cbb1461054a578063aafd847a1461056a578063bc4c4b37146105a0578063be10b614146105c057600080fd5b806391b89fba116100dc57806391b89fba146104d557806395d89b41146104f5578063a457c2d71461050a578063a8b9d2401461052a57600080fd5b8063715018a61461046c57806385a6b3ae146104815780638aee8127146104975780638da5cb5b146104b757600080fd5b806327ce0147116101905780634e7b827f1161015f5780634e7b827f146103bb5780636a474002146103eb5780636bf5ecd5146104005780636f2789ec1461042057806370a082311461043657600080fd5b806327ce01471461033f578063313ce5671461035f57806331e79db01461037b578063395093511461039b57600080fd5b80631694505e116101cc5780631694505e146102a557806318160ddd146102dd578063226cfa3d146102f257806323b872dd1461031f57600080fd5b806306fdde0314610209578063095ea7b31461023457806309bbedde14610264578063163c7cef1461028357600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021e61069c565b60405161022b9190611837565b60405180910390f35b34801561024057600080fd5b5061025461024f3660046118a1565b61072e565b604051901515815260200161022b565b34801561027057600080fd5b50600c545b60405190815260200161022b565b34801561028f57600080fd5b506102a361029e3660046118cd565b610745565b005b3480156102b157600080fd5b506009546102c5906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b3480156102e957600080fd5b50600254610275565b3480156102fe57600080fd5b5061027561030d3660046118e6565b60116020526000908152604090205481565b34801561032b57600080fd5b5061025461033a366004611903565b61081a565b34801561034b57600080fd5b5061027561035a3660046118e6565b610883565b34801561036b57600080fd5b506040516012815260200161022b565b34801561038757600080fd5b506102a36103963660046118e6565b6108df565b3480156103a757600080fd5b506102546103b63660046118a1565b610a06565b3480156103c757600080fd5b506102546103d63660046118e6565b60106020526000908152604090205460ff1681565b3480156103f757600080fd5b506102a3610a3c565b34801561040c57600080fd5b506102a361041b3660046118cd565b610a72565b34801561042c57600080fd5b5061027560125481565b34801561044257600080fd5b506102756104513660046118e6565b6001600160a01b031660009081526020819052604090205490565b34801561047857600080fd5b506102a3610b2f565b34801561048d57600080fd5b5061027560075481565b3480156104a357600080fd5b506102a36104b23660046118e6565b610ba3565b3480156104c357600080fd5b506005546001600160a01b03166102c5565b3480156104e157600080fd5b506102756104f03660046118e6565b610bd6565b34801561050157600080fd5b5061021e610be1565b34801561051657600080fd5b506102546105253660046118a1565b610bf0565b34801561053657600080fd5b506102756105453660046118e6565b610c3f565b34801561055657600080fd5b506102546105653660046118a1565b610c6b565b34801561057657600080fd5b506102756105853660046118e6565b6001600160a01b03166000908152600b602052604090205490565b3480156105ac57600080fd5b506102546105bb366004611952565b610c78565b3480156105cc57600080fd5b5061027560135481565b3480156105e257600080fd5b506102a36105f13660046118e6565b610d26565b34801561060257600080fd5b5061027561061136600461198b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561064857600080fd5b506102a36106573660046118a1565b610d59565b34801561066857600080fd5b506102a36106773660046118e6565b610ec3565b34801561068857600080fd5b506008546102c5906001600160a01b031681565b6060600380546106ab906119b9565b80601f01602080910402602001604051908101604052809291908181526020018280546106d7906119b9565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600061073b338484610fae565b5060015b92915050565b6005546001600160a01b031633146107785760405162461bcd60e51b815260040161076f906119f3565b60405180910390fd5b80601354036108155760405162461bcd60e51b815260206004820152605960248201527f5468655573655f4469766964656e645f547261636b65723a206d696e696d756d60448201527f546f6b656e42616c616e6365466f724469766964656e647320616c726561647960648201527f207468652076616c7565206f6620276e657756616c7565272e00000000000000608482015260a40161076f565b601355565b60006108278484846110d2565b610879843361087485604051806060016040528060288152602001611b6e602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611130565b610fae565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b926108d5926108d0926108ca916108c5919061116a565b6111f3565b90611203565b611241565b61073f9190611a3e565b6005546001600160a01b031633146109095760405162461bcd60e51b815260040161076f906119f3565b6001600160a01b03811660009081526010602052604090205460ff161561092f57600080fd5b6001600160a01b0381166000908152601060205260408120805460ff1916600117905561095d908290611254565b604051636aed6e4160e11b8152600c60048201526001600160a01b03821660248201527362805e76f857dadb8aaec4547e8e1d130d986d8f9063d5dadc829060440160006040518083038186803b1580156109b757600080fd5b505af41580156109cb573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161073b91859061087490866112b9565b6005546001600160a01b03163314610a665760405162461bcd60e51b815260040161076f906119f3565b610a6f33611318565b50565b6005546001600160a01b03163314610a9c5760405162461bcd60e51b815260040161076f906119f3565b6000610aa760025490565b11610ab157600080fd5b8015610a6f57610ae4610ac360025490565b610ad183600160801b61116a565b610adb9190611a3e565b600654906112b9565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610b2990826112b9565b60075550565b6005546001600160a01b03163314610b595760405162461bcd60e51b815260040161076f906119f3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bcd5760405162461bcd60e51b815260040161076f906119f3565b610a6f8161147d565b600061073f82610c3f565b6060600480546106ab906119b9565b600061073b338461087485604051806060016040528060258152602001611b96602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611130565b6001600160a01b0381166000908152600b602052604081205461073f90610c6584610883565b906114c9565b600061073b3384846110d2565b6005546000906001600160a01b03163314610ca55760405162461bcd60e51b815260040161076f906119f3565b6000610cb084611318565b90508015610d1c576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610d0a9085815260200190565b60405180910390a3600191505061073f565b5060009392505050565b6005546001600160a01b03163314610d505760405162461bcd60e51b815260040161076f906119f3565b610a6f8161150b565b6005546001600160a01b03163314610d835760405162461bcd60e51b815260040161076f906119f3565b6001600160a01b03821660009081526010602052604090205460ff16610ebf576013548110610e3457610db68282611254565b60405163f71fe99560e01b8152600c60048201526001600160a01b0383166024820152604481018290527362805e76f857dadb8aaec4547e8e1d130d986d8f9063f71fe9959060640160006040518083038186803b158015610e1757600080fd5b505af4158015610e2b573d6000803e3d6000fd5b50505050610eb2565b610e3f826000611254565b604051636aed6e4160e11b8152600c60048201526001600160a01b03831660248201527362805e76f857dadb8aaec4547e8e1d130d986d8f9063d5dadc829060440160006040518083038186803b158015610e9957600080fd5b505af4158015610ead573d6000803e3d6000fd5b505050505b610ebd826001610c78565b505b5050565b6005546001600160a01b03163314610eed5760405162461bcd60e51b815260040161076f906119f3565b6001600160a01b038116610f525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166110105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076f565b6001600160a01b0382166110715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602d60248201527f5468655573655f4469766964656e645f547261636b65723a204e6f207472616e60448201526c1cd9995c9cc8185b1b1bddd959609a1b606482015260840161076f565b600081848411156111545760405162461bcd60e51b815260040161076f9190611837565b5060006111618486611a60565b95945050505050565b60008260000361117c5750600061073f565b60006111888385611a77565b9050826111958583611a3e565b146111ec5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161076f565b9392505050565b6000818181121561073f57600080fd5b6000806112108385611a96565b9050600083121580156112235750838112155b80611238575060008312801561123857508381125b6111ec57600080fd5b60008082121561125057600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561129357600061128183836114c9565b905061128d8482611557565b50610ebd565b80821015610ebd5760006112a782846114c9565b90506112b384826115bb565b50505050565b6000806112c68385611ad7565b9050838110156111ec5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161076f565b60008061132483610c3f565b90508015611474576001600160a01b0383166000908152600b602052604090205461134f90826112b9565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061139e9084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156113fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141e9190611aef565b90508061146d576001600160a01b0384166000908152600b602052604090205461144890836114c9565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b031633146114a75760405162461bcd60e51b815260040161076f906119f3565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006111ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611130565b6005546001600160a01b031633146115355760405162461bcd60e51b815260040161076f906119f3565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b61156182826115ff565b61159b61157c6108c58360065461116a90919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906116ea565b6001600160a01b039092166000908152600a602052604090209190915550565b6115c58282611727565b61159b6115e06108c58360065461116a90919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611203565b6001600160a01b0382166116555760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161076f565b61166160008383610ebd565b60025461166e90826112b9565b6002556001600160a01b03821660009081526020819052604090205461169490826112b9565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806116f78385611b0c565b90506000831215801561170a5750838113155b80611238575060008312801561123857508381136111ec57600080fd5b6001600160a01b0382166117875760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161076f565b61179382600083610ebd565b6117d081604051806060016040528060228152602001611b4c602291396001600160a01b0385166000908152602081905260409020549190611130565b6001600160a01b0383166000908152602081905260409020556002546117f690826114c9565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016116de565b600060208083528351808285015260005b8181101561186457858101830151858201604001528201611848565b81811115611876576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610a6f57600080fd5b600080604083850312156118b457600080fd5b82356118bf8161188c565b946020939093013593505050565b6000602082840312156118df57600080fd5b5035919050565b6000602082840312156118f857600080fd5b81356111ec8161188c565b60008060006060848603121561191857600080fd5b83356119238161188c565b925060208401356119338161188c565b929592945050506040919091013590565b8015158114610a6f57600080fd5b6000806040838503121561196557600080fd5b82356119708161188c565b9150602083013561198081611944565b809150509250929050565b6000806040838503121561199e57600080fd5b82356119a98161188c565b915060208301356119808161188c565b600181811c908216806119cd57607f821691505b6020821081036119ed57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611a5b57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611a7257611a72611a28565b500390565b6000816000190483118215151615611a9157611a91611a28565b500290565b600080821280156001600160ff1b0384900385131615611ab857611ab8611a28565b600160ff1b8390038412811615611ad157611ad1611a28565b50500190565b60008219821115611aea57611aea611a28565b500190565b600060208284031215611b0157600080fd5b81516111ec81611944565b60008083128015600160ff1b850184121615611b2a57611b2a611a28565b6001600160ff1b0384018313811615611b4557611b45611a28565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d0ed209e0294f8d27eef6181e566df231e24d95ea9f9bc10cdda632c315ddfb264736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c8063715018a611610190578063aa4bde28116100dc578063cd43e22811610095578063d46980161161006f578063d469801614610928578063dd62ed3e14610948578063f2fde38b1461098e578063fe017535146109ae57600080fd5b8063cd43e22814610881578063d2d7ad83146108f2578063d32215761461090857600080fd5b8063aa4bde28146107bb578063aee50b1e146107d1578063b1ba39ea146107f1578063b62496f514610811578063bea9849e14610841578063c02466681461086157600080fd5b80638da5cb5b116101495780639fad9683116101235780639fad96831461073b578063a457c2d71461075b578063a8b9d2401461077b578063a9059cbb1461079b57600080fd5b80638da5cb5b146106e85780638fb862511461070657806395d89b411461072657600080fd5b8063715018a61461063d57806375cb1bd11461065257806375f0a87414610672578063781edb3c14610692578063880bcbc1146106b25780638c0b5e22146106d257600080fd5b806327a14fc21161024f57806342966c68116102085780635ebf4db9116101e25780635ebf4db9146105b257806364b0f653146105d25780636843cd84146105e757806370a082311461060757600080fd5b806342966c681461054957806349bd5a5e146105695780634e71d92d1461059d57600080fd5b806327a14fc2146104985780632c1f5216146104b857806330bb4cff146104d8578063313ce567146104ed57806331e79db014610509578063395093511461052957600080fd5b80631694505e116102a15780631694505e146103c357806318160ddd146103fb5780631cd348c01461041a5780631e293c101461043a578063218bedf31461045a57806323b872dd1461047857600080fd5b8063064a59d0146102f457806306fdde031461032a57806307ef5de41461034c578063095ea7b31461036c578063098df5851461038c5780630bd05b69146103ae57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5060075461031590600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561033657600080fd5b5061033f6109f4565b60405161032191906136b4565b34801561035857600080fd5b5061031561036736600461371e565b610a86565b34801561037857600080fd5b5061031561038736600461371e565b610b21565b34801561039857600080fd5b506103ac6103a736600461374a565b610b2e565b005b3480156103ba57600080fd5b506103ac610c4b565b3480156103cf57600080fd5b506006546103e3906001600160a01b031681565b6040516001600160a01b039091168152602001610321565b34801561040757600080fd5b506003545b604051908152602001610321565b34801561042657600080fd5b50600e546103e3906001600160a01b031681565b34801561044657600080fd5b506103ac61045536600461374a565b610c8a565b34801561046657600080fd5b50600f546001600160a01b03166103e3565b34801561048457600080fd5b50610315610493366004613763565b610d48565b3480156104a457600080fd5b506103ac6104b336600461374a565b610db1565b3480156104c457600080fd5b506007546103e3906001600160a01b031681565b3480156104e457600080fd5b5061040c610e73565b3480156104f957600080fd5b5060405160128152602001610321565b34801561051557600080fd5b506103ac6105243660046137a4565b610ee6565b34801561053557600080fd5b5061031561054436600461371e565b610f73565b34801561055557600080fd5b506103ac61056436600461374a565b610fa9565b34801561057557600080fd5b506103e37f000000000000000000000000241a29b0586467cc5253c0013ed7d2151ff734de81565b3480156105a957600080fd5b506103ac610fb6565b3480156105be57600080fd5b506103ac6105cd36600461374a565b61102b565b3480156105de57600080fd5b5061040c611086565b3480156105f357600080fd5b5061040c6106023660046137a4565b6110d0565b34801561061357600080fd5b5061040c6106223660046137a4565b6001600160a01b031660009081526001602052604090205490565b34801561064957600080fd5b506103ac611146565b34801561065e57600080fd5b506103ac61066d3660046137c1565b6111ba565b34801561067e57600080fd5b50600d546103e3906001600160a01b031681565b34801561069e57600080fd5b506103ac6106ad36600461381a565b611493565b3480156106be57600080fd5b506103ac6106cd36600461381a565b61155d565b3480156106de57600080fd5b5061040c60095481565b3480156106f457600080fd5b506000546001600160a01b03166103e3565b34801561071257600080fd5b506103ac6107213660046137a4565b61161f565b34801561073257600080fd5b5061033f611701565b34801561074757600080fd5b506103ac610756366004613869565b611710565b34801561076757600080fd5b5061031561077636600461371e565b611844565b34801561078757600080fd5b5061040c6107963660046137a4565b611893565b3480156107a757600080fd5b506103156107b636600461371e565b6118c6565b3480156107c757600080fd5b5061040c60085481565b3480156107dd57600080fd5b506103ac6107ec36600461374a565b6118d3565b3480156107fd57600080fd5b506103ac61080c366004613869565b61199d565b34801561081d57600080fd5b5061031561082c3660046137a4565b60176020526000908152604090205460ff1681565b34801561084d57600080fd5b506103ac61085c3660046137a4565b611a71565b34801561086d57600080fd5b506103ac61087c36600461381a565b611b89565b34801561088d57600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610321565b3480156108fe57600080fd5b5061040c600b5481565b34801561091457600080fd5b506103ac61092336600461381a565b611c8f565b34801561093457600080fd5b50600c546103e3906001600160a01b031681565b34801561095457600080fd5b5061040c6109633660046138ce565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561099a57600080fd5b506103ac6109a93660046137a4565b611d11565b3480156109ba57600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166108be565b606060048054610a03906138fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2f906138fc565b8015610a7c5780601f10610a5157610100808354040283529160200191610a7c565b820191906000526020600020905b815481529060010190602001808311610a5f57829003601f168201915b5050505050905090565b600f546000906001600160a01b03163314610b0e5760405162461bcd60e51b815260206004820152603860248201527f6f6e6c7920706f6f6c626f6f7374657220636f6e74726163742063616e20737560448201527f70706c79207265776172647320666f72207374616b657273000000000000000060648201526084015b60405180910390fd5b610b188383611e61565b50600192915050565b6000610b18338484611f47565b6000546001600160a01b03163314610b585760405162461bcd60e51b8152600401610b0590613936565b478110610bb65760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610b05565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610c03576040519150601f19603f3d011682016040523d82523d6000602084013e610c08565b606091505b505090508015610c47576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610c755760405162461bcd60e51b8152600401610b0590613936565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610cb45760405162461bcd60e51b8152600401610b0590613936565b6009548103610d155760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420757064617465206d61785478416d6f756e7420746f2073616d604482015266652076616c756560c81b6064820152608401610b05565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610d5584848461206c565b610da78433610da285604051806060016040528060288152602001613c9d602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612670565b611f47565b5060019392505050565b6000546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610b0590613936565b6008548103610e405760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610b05565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee1919061396b565b905090565b6000546001600160a01b03163314610f105760405162461bcd60e51b8152600401610b0590613936565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610f5857600080fd5b505af1158015610f6c573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610b18918590610da29086611dfb565b610fb333826126aa565b50565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611007573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb39190613984565b6000546001600160a01b031633146110555760405162461bcd60e51b8152600401610b0590613936565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610f3e565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ebd573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611140919061396b565b92915050565b6000546001600160a01b031633146111705760405162461bcd60e51b8152600401610b0590613936565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111e45760405162461bcd60e51b8152600401610b0590613936565b600c546001600160a01b038481169116146112c8576001600160a01b03831661124f5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610b05565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b038381169116146113ac576001600160a01b0382166113335760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610b05565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461148e576001600160a01b0381166114175760405162461bcd60e51b815260206004820152601d60248201527f546865206275794261636b57616c6c65742063616e6e6f7420626520300000006044820152606401610b05565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6000546001600160a01b031633146114bd5760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036114fd5760405162461bcd60e51b8152600401610b05906139a1565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146115875760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036115c75760405162461bcd60e51b8152600401610b05906139a1565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611551565b6000546001600160a01b031633146116495760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b0381161580159061166f5750600f546001600160a01b03828116911614155b6116ad5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b6044820152606401610b05565b600f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f3b82d5d6453f0b1159c520f357885406fc3d5577c5eaf498aff4f8cfba4202099060200160405180910390a150565b606060058054610a03906138fc565b6000546001600160a01b0316331461173a5760405162461bcd60e51b8152600401610b0590613936565b8082846117478789613a01565b6117519190613a01565b61175b9190613a01565b6117659190613a01565b60ff166005116117b75760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610b05565b6117c6601086868686866127ae565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610b183384610da285604051806060016040528060258152602001613ce5602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612670565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016110ff565b6000610b1833848461206c565b6000546001600160a01b031633146118fd5760405162461bcd60e51b8152600401610b0590613936565b600b54810361196a5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610b05565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146119c75760405162461bcd60e51b8152600401610b0590613936565b8082846119d48789613a01565b6119de9190613a01565b6119e89190613a01565b6119f29190613a01565b60ff16600711611a445760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610b05565b611a5360108686868686612a93565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d016117df565b6000546001600160a01b03163314611a9b5760405162461bcd60e51b8152600401610b0590613936565b6006546001600160a01b0390811690821603611b055760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610b05565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610f3e565b6000546001600160a01b03163314611bb35760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503611c375760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b6064820152608401610b05565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611551565b6000546001600160a01b03163314611cb95760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611551565b6000546001600160a01b03163314611d3b5760405162461bcd60e51b8152600401610b0590613936565b6001600160a01b038116611da05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b05565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e088385613a26565b905083811015611e5a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b05565b9392505050565b6001600160a01b038216611eb75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610b05565b600354611ec49082611dfb565b6003556001600160a01b038216600090815260016020526040902054611eea9082611dfb565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f3b9085815260200190565b60405180910390a35050565b6001600160a01b038316611fa95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b05565b6001600160a01b03821661200a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b05565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166120925760405162461bcd60e51b8152600401610b0590613a3e565b6001600160a01b0382166120b85760405162461bcd60e51b8152600401610b0590613a83565b806000036120cc5761148e83836000612d94565b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601390915290205460ff92831692918216911615801561212e57506001600160a01b03841660009081526013602052604090205460ff16155b1561235957600754600160a01b900460ff1661218c5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610b05565b6001600160a01b03841660009081526015602052604090205460ff161580156121ce57506001600160a01b03851660009081526015602052604090205460ff16155b156122a257811561223a5760085483111561223a5760405162461bcd60e51b815260206004820152602660248201527f42757920616d6f756e74206578636565647320746865206d617854784275794160448201526536b7bab73a1760d11b6064820152608401610b05565b80156122a2576009548311156122a25760405162461bcd60e51b815260206004820152602760248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547842757960448201526620b6b7bab73a1760c91b6064820152608401610b05565b6001600160a01b03841660009081526016602052604090205460ff1661235957600854836122e5866001600160a01b031660009081526001602052604090205490565b6122ef9190613a26565b11156123595760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610b05565b6123638282612ea0565b600b543060009081526001602052604090205460075491111590600160a01b900460ff1680156123905750805b801561239f5750600a5460ff16155b80156123b65750601854600160281b900460ff1615155b80156123da57506001600160a01b03851660009081526017602052604090205460ff165b156123ff57600a805460ff191660011790556123f4613118565b600a805460ff191690555b600a5460009060ff1615801561241e5750600754600160a01b900460ff165b6001600160a01b03881660009081526014602052604090205490915060ff168061246057506001600160a01b03861660009081526014602052604090205460ff165b15612469575060005b8080156124815750601854600160281b900460ff1615155b1561254a576018546000906064906124a390600160281b900460ff1688613ac6565b6124ad9190613afb565b6018549091506000906064906124cd906301000000900460ff1689613ac6565b6124d79190613afb565b90506124e38288613b0f565b96506124f0893084612d94565b80156125475761250030826126aa565b60185460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612555878787612d94565b6007546001600160a01b031663e30443bc88612586816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156125cc57600080fd5b505af19250505080156125dd575060015b506007546001600160a01b031663e30443bc8761260f816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561265557600080fd5b505af1925050508015612666575060015b5050505050505050565b600081848411156126945760405162461bcd60e51b8152600401610b0591906136b4565b5060006126a18486613b0f565b95945050505050565b6001600160a01b03821661270a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b05565b61274781604051806060016040528060228152602001613c55602291396001600160a01b0385166000908152600160205260409020549190612670565b6001600160a01b03831660009081526001602052604090205560035461276d9082613473565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611f3b565b600286015460ff86811691161461282f57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613cc5833981519152916128159160481b90613b26565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff8581166201000090920416146128c357604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613cc5833981519152916128a29160481b90613b26565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b909204161461295a576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613cc5833981519152916129369160481b90613b26565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b90920416146129f0576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613cc5833981519152916129ca9160481b90613b26565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612a8b576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613cc583398151915291612a639160481b90613b26565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff8681166101009092041614612b2457604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613cc583398151915291612b059160481b90613b26565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612bbd57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613cc583398151915291612b9a9160481b90613b26565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612c56576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613cc583398151915291612c319160481b90613b26565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612cee576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613cc583398151915291612cc79160481b90613b26565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612a8b576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613cc583398151915291612d629160481b90613b26565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612dba5760405162461bcd60e51b8152600401610b0590613a3e565b6001600160a01b038216612de05760405162461bcd60e51b8152600401610b0590613a83565b612e1d81604051806060016040528060268152602001613c77602691396001600160a01b0386166000908152600160205260409020549190612670565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612e4c9082611dfb565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061205f9085815260200190565b6018805464ffffffffff191690558115612f28576012546018805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612fa3576012546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b80158015612faf575081155b15613029576012546018805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60185460ff600160201b82048116916301000000810482169162010000820481169161305d91610100820481169116613a01565b6130679190613a01565b6130719190613a01565b61307b9190613a01565b6018805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610c3e565b306000908152600160205260408120546018549091479160029060ff600160281b8204811691613149911686613ac6565b6131539190613afb565b61315d9190613afb565b60185490915060009060ff600160281b820481169161318591600160201b9091041686613ac6565b61318f9190613afb565b9050600061319d8284613a26565b6131a79086613b0f565b90506131b2816134b5565b60006131be8547613b0f565b60185490915060009060ff600160201b8204811691630100000081048216916131ea9160029116613b3d565b6131f49190613a01565b6131fe9190613a01565b6018546132159190600160281b900460ff16613b5f565b60185460ff91821692506000916002918491613232911686613ac6565b61323c9190613afb565b6132469190613afb565b601854909150600090839061326390610100900460ff1686613ac6565b61326d9190613afb565b9050600061327b8284613a26565b6132859086613b0f565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156132c0573d6000803e3d6000fd5b50600d546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156132fb573d6000803e3d6000fd5b50871561334e5761330c8884613607565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af11580156133a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c69190613984565b9050801561346657600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561341457600080fd5b505af1158015613428573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698860405161345d91815260200190565b60405180910390a15b5050505050505050505050565b6000611e5a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612670565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134ea576134ea613b82565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135679190613b98565b8160018151811061357a5761357a613b82565b6001600160a01b0392831660209182029290920101526006546135a09130911684611f47565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906135d9908590600090869030904290600401613bb5565b600060405180830381600087803b1580156135f357600080fd5b505af1158015612a8b573d6000803e3d6000fd5b60065461361f9030906001600160a01b031684611f47565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561368f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f6c9190613c26565b600060208083528351808285015260005b818110156136e1578581018301518582016040015282016136c5565b818111156136f3576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610fb357600080fd5b6000806040838503121561373157600080fd5b823561373c81613709565b946020939093013593505050565b60006020828403121561375c57600080fd5b5035919050565b60008060006060848603121561377857600080fd5b833561378381613709565b9250602084013561379381613709565b929592945050506040919091013590565b6000602082840312156137b657600080fd5b8135611e5a81613709565b6000806000606084860312156137d657600080fd5b83356137e181613709565b925060208401356137f181613709565b9150604084013561380181613709565b809150509250925092565b8015158114610fb357600080fd5b6000806040838503121561382d57600080fd5b823561383881613709565b915060208301356138488161380c565b809150509250929050565b803560ff8116811461386457600080fd5b919050565b600080600080600060a0868803121561388157600080fd5b61388a86613853565b945061389860208701613853565b93506138a660408701613853565b92506138b460608701613853565b91506138c260808701613853565b90509295509295909350565b600080604083850312156138e157600080fd5b82356138ec81613709565b9150602083013561384881613709565b600181811c9082168061391057607f821691505b60208210810361393057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561397d57600080fd5b5051919050565b60006020828403121561399657600080fd5b8151611e5a8161380c565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff03821115613a1e57613a1e6139eb565b019392505050565b60008219821115613a3957613a396139eb565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000816000190483118215151615613ae057613ae06139eb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613b0a57613b0a613ae5565b500490565b600082821015613b2157613b216139eb565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff831680613b5057613b50613ae5565b8060ff84160491505092915050565b600060ff821660ff841680821015613b7957613b796139eb565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613baa57600080fd5b8151611e5a81613709565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613c055784516001600160a01b031683529383019391830191600101613be0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613c3b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207d566bc200d9696fa666450ccb188a7002bc902fa342e3cde841ca76861f7b6f64736f6c634300080f0033

Libraries Used


Deployed Bytecode Sourcemap

15812:20781:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16112:28;;;;;;;;;;-1:-1:-1;16112:28:0;;;;-1:-1:-1;;;16112:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;16112:28:0;;;;;;;;8466:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26877:160::-;;;;;;;;;;-1:-1:-1;26877:160:0;;;;;:::i;:::-;;:::i;9290:154::-;;;;;;;;;;-1:-1:-1;9290:154:0;;;;;:::i;:::-;;:::i;26571:303::-;;;;;;;;;;-1:-1:-1;26571:303:0;;;;;:::i;:::-;;:::i;:::-;;21466:79;;;;;;;;;;;;;:::i;15852:30::-;;;;;;;;;;-1:-1:-1;15852:30:0;;;;-1:-1:-1;;;;;15852:30:0;;;;;;-1:-1:-1;;;;;1628:32:1;;;1610:51;;1598:2;1583:18;15852:30:0;1449:218:1;8751:99:0;;;;;;;;;;-1:-1:-1;8833:12:0;;8751:99;;;1818:25:1;;;1806:2;1791:18;8751:99:0;1672:177:1;16504:28:0;;;;;;;;;;-1:-1:-1;16504:28:0;;;;-1:-1:-1;;;;;16504:28:0;;;25531:241;;;;;;;;;;-1:-1:-1;25531:241:0;;;;;:::i;:::-;;:::i;27117:100::-;;;;;;;;;;-1:-1:-1;27198:11:0;;-1:-1:-1;;;;;27198:11:0;27117:100;;9449:313;;;;;;;;;;-1:-1:-1;9449:313:0;;;;;:::i;:::-;;:::i;25775:247::-;;;;;;;;;;-1:-1:-1;25775:247:0;;;;;:::i;:::-;;:::i;16062:44::-;;;;;;;;;;-1:-1:-1;16062:44:0;;;;-1:-1:-1;;;;;16062:44:0;;;27545:132;;;;;;;;;;;;;:::i;8662:84::-;;;;;;;;;;-1:-1:-1;8662:84:0;;8739:2;2911:36:1;;2899:2;2884:18;8662:84:0;2769:184:1;22392:121:0;;;;;;;;;;-1:-1:-1;22392:121:0;;;;;:::i;:::-;;:::i;9767:203::-;;;;;;;;;;-1:-1:-1;9767:203:0;;;;;:::i;:::-;;:::i;27040:72::-;;;;;;;;;;-1:-1:-1;27040:72:0;;;;;:::i;:::-;;:::i;15886:38::-;;;;;;;;;;;;;;;26471:97;;;;;;;;;;;;;:::i;26324:144::-;;;;;;;;;;-1:-1:-1;26324:144:0;;;;;:::i;:::-;;:::i;27962:132::-;;;;;;;;;;;;;:::i;27827:::-;;;;;;;;;;-1:-1:-1;27827:132:0;;;;;:::i;:::-;;:::i;8855:118::-;;;;;;;;;;-1:-1:-1;8855:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;8950:18:0;8929:7;8950:18;;;:9;:18;;;;;;;8855:118;7700:133;;;;;;;;;;;;;:::i;23159:873::-;;;;;;;;;;-1:-1:-1;23159:873:0;;;;;:::i;:::-;;:::i;16470:30::-;;;;;;;;;;-1:-1:-1;16470:30:0;;;;-1:-1:-1;;;;;16470:30:0;;;22846:310;;;;;;;;;;-1:-1:-1;22846:310:0;;;;;:::i;:::-;;:::i;22516:327::-;;;;;;;;;;-1:-1:-1;22516:327:0;;;;;:::i;:::-;;:::i;16278:53::-;;;;;;;;;;;;;;;;7516:70;;;;;;;;;;-1:-1:-1;7554:7:0;7575:6;-1:-1:-1;;;;;7575:6:0;7516:70;;27222:305;;;;;;;;;;-1:-1:-1;27222:305:0;;;;;:::i;:::-;;:::i;8562:95::-;;;;;;;;;;;;;:::i;24050:563::-;;;;;;;;;;-1:-1:-1;24050:563:0;;;;;:::i;:::-;;:::i;9975:254::-;;;;;;;;;;-1:-1:-1;9975:254:0;;;;;:::i;:::-;;:::i;27680:144::-;;;;;;;;;;-1:-1:-1;27680:144:0;;;;;:::i;:::-;;:::i;8978:160::-;;;;;;;;;;-1:-1:-1;8978:160:0;;;;;:::i;:::-;;:::i;16214:58::-;;;;;;;;;;;;;;;;26025:296;;;;;;;;;;-1:-1:-1;26025:296:0;;;;;:::i;:::-;;:::i;24616:588::-;;;;;;;;;;-1:-1:-1;24616:588:0;;;;;:::i;:::-;;:::i;17319:58::-;;;;;;;;;;-1:-1:-1;17319:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25207:321;;;;;;;;;;-1:-1:-1;25207:321:0;;;;;:::i;:::-;;:::i;22115:274::-;;;;;;;;;;-1:-1:-1;22115:274:0;;;;;:::i;:::-;;:::i;28097:216::-;;;;;;;;;;-1:-1:-1;28193:23:0;;;;;;;28218;;;;;;-1:-1:-1;;;28243:21:0;;;;;-1:-1:-1;;;28266:18:0;;;;;-1:-1:-1;;;28286:21:0;;;;28097:216;;;;5153:4:1;5141:17;;;5123:36;;5195:17;;;5190:2;5175:18;;5168:45;5249:17;;;5229:18;;;5222:45;;;;5303:17;;5298:2;5283:18;;5276:45;5358:17;;;5352:3;5337:19;;5330:46;5110:3;5095:19;28097:216:0;4884:498:1;16363:67:0;;;;;;;;;;;;;;;;21910:202;;;;;;;;;;-1:-1:-1;21910:202:0;;;;;:::i;:::-;;:::i;16436:30::-;;;;;;;;;;-1:-1:-1;16436:30:0;;;;-1:-1:-1;;;;;16436:30:0;;;9143:142;;;;;;;;;;-1:-1:-1;9143:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;9253:18:0;;;9232:7;9253:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9143:142;7838:223;;;;;;;;;;-1:-1:-1;7838:223:0;;;;;:::i;:::-;;:::i;28316:222::-;;;;;;;;;;-1:-1:-1;28413:24:0;;;;;;;;;28439;;;;;;-1:-1:-1;;;28465:22:0;;;;;-1:-1:-1;;;28489:19:0;;;;;-1:-1:-1;;;28510:22:0;;;;28316:222;;8466:91;8520:13;8547:5;8540:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8466:91;:::o;26877:160::-;19271:11;;26984:4;;-1:-1:-1;;;;;19271:11:0;19257:10;:25;19249:94;;;;-1:-1:-1;;;19249:94:0;;6367:2:1;19249:94:0;;;6349:21:1;6406:2;6386:18;;;6379:30;6445:34;6425:18;;;6418:62;6516:26;6496:18;;;6489:54;6560:19;;19249:94:0;;;;;;;;;26995:21:::1;27001:7;27010:5;26995;:21::i;:::-;-1:-1:-1::0;27028:4:0::1;26877:160:::0;;;;:::o;9290:154::-;9373:4;9384:39;6982:10;9407:7;9416:6;9384:8;:39::i;26571:303::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;26657:21:::1;26648:6;:30;26640:81;;;::::0;-1:-1:-1;;;26640:81:0;;7153:2:1;26640:81:0::1;::::0;::::1;7135:21:1::0;7192:2;7172:18;;;7165:30;7231:34;7211:18;;;7204:62;-1:-1:-1;;;7282:18:1;;;7275:36;7328:19;;26640:81:0::1;6951:402:1::0;26640:81:0::1;26733:12;7575:6:::0;;26750:41:::1;::::0;-1:-1:-1;;;;;7575:6:0;;;;26780;;26733:12;26750:41;26733:12;26750:41;26780:6;7575;26750:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26732:59;;;26806:7;26802:68;;;26834:24;::::0;1818:25:1;;;26834:24:0::1;::::0;1806:2:1;1791:18;26834:24:0::1;;;;;;;;26802:68;26632:242;26571:303:::0;:::o;21466:79::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;21517:16:::1;:23:::0;;-1:-1:-1;;;;21517:23:0::1;-1:-1:-1::0;;;21517:23:0::1;::::0;;21466:79::o;25531:241::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;25626:11:::1;;25614:8;:23:::0;25606:75:::1;;;::::0;-1:-1:-1;;;25606:75:0;;7770:2:1;25606:75:0::1;::::0;::::1;7752:21:1::0;7809:2;7789:18;;;7782:30;7848:34;7828:18;;;7821:62;-1:-1:-1;;;7899:18:1;;;7892:37;7946:19;;25606:75:0::1;7568:403:1::0;25606:75:0::1;25728:11;::::0;25691:49:::1;::::0;25718:8;;25691:49:::1;::::0;;;::::1;25745:11;:22:::0;25531:241::o;9449:313::-;9568:4;9579:36;9589:6;9597:9;9608:6;9579:9;:36::i;:::-;9620:121;9629:6;6982:10;9651:89;9689:6;9651:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9651:19:0;;;;;;:11;:19;;;;;;;;6982:10;9651:33;;;;;;;;;;:37;:89::i;:::-;9620:8;:121::i;:::-;-1:-1:-1;9753:4:0;9449:313;;;;;:::o;25775:247::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;25865:15:::1;;25853:8;:27:::0;25845:83:::1;;;::::0;-1:-1:-1;;;25845:83:0;;8178:2:1;25845:83:0::1;::::0;::::1;8160:21:1::0;8217:2;8197:18;;;8190:30;8256:34;8236:18;;;8229:62;-1:-1:-1;;;8307:18:1;;;8300:41;8358:19;;25845:83:0::1;7976:407:1::0;25845:83:0::1;25970:15;::::0;25938:48:::1;::::0;25960:8;;25938:48:::1;::::0;;;::::1;25991:15;:26:::0;25775:247::o;27545:132::-;27629:15;;:43;;;-1:-1:-1;;;27629:43:0;;;;27608:7;;-1:-1:-1;;;;;27629:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27622:50;;27545:132;:::o;22392:121::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;22463:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;22463:45:0;;-1:-1:-1;;;;;1628:32:1;;;22463:45:0::1;::::0;::::1;1610:51:1::0;22463:15:0;;::::1;::::0;:36:::1;::::0;1583:18:1;;22463:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22392:121:::0;:::o;9767:203::-;6982:10;9855:4;9898:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9898:34:0;;;;;;;;;;9855:4;;9866:83;;9889:7;;9898:50;;9937:10;9898:38;:50::i;27040:72::-;27083:24;27089:10;27101:5;27083;:24::i;:::-;27040:72;:::o;26471:97::-;26502:15;;:58;;-1:-1:-1;;;26502:58:0;;26541:10;26502:58;;;8761:51:1;26502:15:0;8828:18:1;;;8821:50;-1:-1:-1;;;;;26502:15:0;;;;:30;;8734:18:1;;26502:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26324:144::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;26410:15:::1;::::0;:53:::1;::::0;-1:-1:-1;;;26410:53:0;;::::1;::::0;::::1;1818:25:1::0;;;-1:-1:-1;;;;;26410:15:0;;::::1;::::0;:43:::1;::::0;1791:18:1;;26410:53:0::1;1672:177:1::0;27962:132:0;28048:15;;:41;;;-1:-1:-1;;;28048:41:0;;;;28027:7;;-1:-1:-1;;;;;28048:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;27827:132;27920:15;;:34;;-1:-1:-1;;;27920:34:0;;-1:-1:-1;;;;;1628:32:1;;;27920:34:0;;;1610:51:1;27899:7:0;;27920:15;;:25;;1583:18:1;;27920:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27913:41;27827:132;-1:-1:-1;;27827:132:0:o;7700:133::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;7801:1:::1;7785:6:::0;;7764:40:::1;::::0;-1:-1:-1;;;;;7785:6:0;;::::1;::::0;7764:40:::1;::::0;7801:1;;7764:40:::1;7826:1;7809:19:::0;;-1:-1:-1;;;;;;7809:19:0::1;::::0;;7700:133::o;23159:873::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;23288:15:::1;::::0;-1:-1:-1;;;;;23288:37:0;;::::1;:15:::0;::::1;:37;23285:251;;-1:-1:-1::0;;;;;23341:32:0;::::1;23333:76;;;::::0;-1:-1:-1;;;23333:76:0;;9334:2:1;23333:76:0::1;::::0;::::1;9316:21:1::0;9373:2;9353:18;;;9346:30;9412:33;9392:18;;;9385:61;9463:18;;23333:76:0::1;9132:355:1::0;23333:76:0::1;23472:15;::::0;23420:68:::1;::::0;-1:-1:-1;;;9694:30:1;;-1:-1:-1;;;;;23472:15:0;;::::1;::::0;23420:68;::::1;::::0;9749:2:1;9740:12;23420:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;23494:15;:36:::0;;-1:-1:-1;;;;;;23494:36:0::1;-1:-1:-1::0;;;;;23494:36:0;::::1;;::::0;;23285:251:::1;23543:15;::::0;-1:-1:-1;;;;;23543:37:0;;::::1;:15:::0;::::1;:37;23540:251;;-1:-1:-1::0;;;;;23596:32:0;::::1;23588:76;;;::::0;-1:-1:-1;;;23588:76:0;;9965:2:1;23588:76:0::1;::::0;::::1;9947:21:1::0;10004:2;9984:18;;;9977:30;10043:33;10023:18;;;10016:61;10094:18;;23588:76:0::1;9763:355:1::0;23588:76:0::1;23727:15;::::0;23675:68:::1;::::0;-1:-1:-1;;;10325:30:1;;-1:-1:-1;;;;;23727:15:0;;::::1;::::0;23675:68;::::1;::::0;10380:2:1;10371:12;23675:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;23749:15;:36:::0;;-1:-1:-1;;;;;;23749:36:0::1;-1:-1:-1::0;;;;;23749:36:0;::::1;;::::0;;23540:251:::1;23798:13;::::0;-1:-1:-1;;;;;23798:33:0;;::::1;:13:::0;::::1;:33;23795:233;;-1:-1:-1::0;;;;;23847:30:0;::::1;23839:72;;;::::0;-1:-1:-1;;;23839:72:0;;10596:2:1;23839:72:0::1;::::0;::::1;10578:21:1::0;10635:2;10615:18;;;10608:30;10674:31;10654:18;;;10647:59;10723:18;;23839:72:0::1;10394:353:1::0;23839:72:0::1;23970:13;::::0;23922:62:::1;::::0;-1:-1:-1;;;10954:28:1;;-1:-1:-1;;;;;23970:13:0;;::::1;::::0;23922:62;::::1;::::0;11007:2:1;10998:12;23922:62:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;23990:13;:32:::0;;-1:-1:-1;;;;;;23990:32:0::1;-1:-1:-1::0;;;;;23990:32:0;::::1;;::::0;;23795:233:::1;23159:873:::0;;;:::o;22846:310::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22945:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;22937:105:::1;;;;-1:-1:-1::0;;;22937:105:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23047:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;23047:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23106:45;;154:41:1;;;23106:45:0::1;::::0;127:18:1;23106:45:0::1;;;;;;;;22846:310:::0;;:::o;22516:327::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22620:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;22612:110:::1;;;;-1:-1:-1::0;;;22612:110:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22727:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;22727:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22791:47;;154:41:1;;;22791:47:0::1;::::0;127:18:1;22791:47:0::1;14:187:1::0;27222:305:0;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27322:36:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;27386:11:0::1;::::0;-1:-1:-1;;;;;27362:35:0;;::::1;27386:11:::0;::::1;27362:35;;27322:75;27314:103;;;::::0;-1:-1:-1;;;27314:103:0;;11634:2:1;27314:103:0::1;::::0;::::1;11616:21:1::0;11673:2;11653:18;;;11646:30;-1:-1:-1;;;11692:18:1;;;11685:45;11747:18;;27314:103:0::1;11432:339:1::0;27314:103:0::1;27428:11;:34:::0;;-1:-1:-1;;;;;;27428:34:0::1;-1:-1:-1::0;;;;;27428:34:0;::::1;::::0;;::::1;::::0;;;27472:47:::1;::::0;1610:51:1;;;27472:47:0::1;::::0;1598:2:1;1583:18;27472:47:0::1;;;;;;;27222:305:::0;:::o;8562:95::-;8618:13;8645:7;8638:14;;;;;:::i;24050:563::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;24313:16;24297:13;24278:16;24236:39:::1;24257:18:::0;24236;:39:::1;:::i;:::-;:58;;;;:::i;:::-;:74;;;;:::i;:::-;:93;;;;:::i;:::-;24232:97;;:1;:97;24224:133;;;::::0;-1:-1:-1;;;24224:133:0;;12319:2:1;24224:133:0::1;::::0;::::1;12301:21:1::0;12358:2;12338:18;;;12331:30;12397:25;12377:18;;;12370:53;12440:18;;24224:133:0::1;12117:347:1::0;24224:133:0::1;24362:120;24385:5;24392:18;24412;24432:16;24450:13;24465:16;24362:22;:120::i;:::-;24492:116;::::0;-1:-1:-1;;;12671:27:1;;12723:2;12714:12;24492:116:0::1;;::::0;;;;;::::1;::::0;;5153:4:1;5141:17;;;5123:36;;5195:17;;;5190:2;5175:18;;5168:45;5249:17;;;5229:18;;;5222:45;5303:17;;;5298:2;5283:18;;5276:45;5358:17;;5352:3;5337:19;;5330:46;24492:116:0;;;;::::1;::::0;;;;;5110:3:1;24492:116:0;;::::1;24050:563:::0;;;;;:::o;9975:254::-;10068:4;10079:129;6982:10;10102:7;10111:96;10150:15;10111:96;;;;;;;;;;;;;;;;;6982:10;10111:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10111:34:0;;;;;;;;;;;;:38;:96::i;27680:144::-;27772:15;;:47;;-1:-1:-1;;;27772:47:0;;-1:-1:-1;;;;;1628:32:1;;;27772:47:0;;;1610:51:1;27751:7:0;;27772:15;;:38;;1583:18:1;;27772:47:0;1449:218:1;8978:160:0;9064:4;9075:42;6982:10;9099:9;9110:6;9075:9;:42::i;26025:296::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;26123:23:::1;;26111:8;:35:::0;26103:99:::1;;;::::0;-1:-1:-1;;;26103:99:0;;12939:2:1;26103:99:0::1;::::0;::::1;12921:21:1::0;12978:2;12958:18;;;12951:30;13017:34;12997:18;;;12990:62;-1:-1:-1;;;13068:18:1;;;13061:49;13127:19;;26103:99:0::1;12737:415:1::0;26103:99:0::1;26253:23;::::0;26212:65:::1;::::0;26243:8;;26212:65:::1;::::0;;;::::1;26282:23;:34:::0;26025:296::o;24616:588::-;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;24890:17;24873:14;24853:17;24809:41:::1;24831:19:::0;24809;:41:::1;:::i;:::-;:61;;;;:::i;:::-;:78;;;;:::i;:::-;:98;;;;:::i;:::-;24805:102;;:1;:102;24796:140;;;::::0;-1:-1:-1;;;24796:140:0;;13359:2:1;24796:140:0::1;::::0;::::1;13341:21:1::0;13398:2;13378:18;;;13371:30;13437:26;13417:18;;;13410:54;13481:18;;24796:140:0::1;13157:348:1::0;24796:140:0::1;24941:126;24965:5;24972:19;24993;25014:17;25033:14;25049:17;24941:23;:126::i;:::-;25077:122;::::0;-1:-1:-1;;;13712:28:1;;13765:2;13756:12;25077:122:0::1;13510:264:1::0;25207:321:0;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;25307:15:::1;::::0;-1:-1:-1;;;;;25307:15:0;;::::1;25285:38:::0;;::::1;::::0;25277:86:::1;;;::::0;-1:-1:-1;;;25277:86:0;;13981:2:1;25277:86:0::1;::::0;::::1;13963:21:1::0;14020:2;14000:18;;;13993:30;14059:34;14039:18;;;14032:62;-1:-1:-1;;;14110:18:1;;;14103:33;14153:19;;25277:86:0::1;13779:399:1::0;25277:86:0::1;25415:15;::::0;25373:59:::1;::::0;-1:-1:-1;;;;;25415:15:0;;::::1;::::0;25373:59;::::1;::::0;::::1;::::0;25415:15:::1;::::0;25373:59:::1;25437:15;:37:::0;;-1:-1:-1;;;;;;25437:37:0::1;-1:-1:-1::0;;;;;25437:37:0;;::::1;::::0;;::::1;::::0;;;25479:15:::1;::::0;:44:::1;::::0;-1:-1:-1;;;25479:44:0;;::::1;::::0;::::1;1610:51:1::0;;;;25479:15:0;;::::1;::::0;:32:::1;::::0;1583:18:1;;25479:44:0::1;1449:218:1::0;22115:274:0;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22204:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;22196:95:::1;;;::::0;-1:-1:-1;;;22196:95:0;;14385:2:1;22196:95:0::1;::::0;::::1;14367:21:1::0;14424:2;14404:18;;;14397:30;14463:34;14443:18;;;14436:62;-1:-1:-1;;;14514:18:1;;;14507:41;14565:19;;22196:95:0::1;14183:407:1::0;22196:95:0::1;-1:-1:-1::0;;;;;22296:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;22296:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22344:40;;154:41:1;;;22344:40:0::1;::::0;127:18:1;22344:40:0::1;14:187:1::0;21910:202:0;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21999:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;21999:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22057:50;;154:41:1;;;22057:50:0::1;::::0;127:18:1;22057:50:0::1;14:187:1::0;7838:223:0;7625:6;;-1:-1:-1;;;;;7625:6:0;6982:10;7625:22;7617:67;;;;-1:-1:-1;;;7617:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7921:22:0;::::1;7913:73;;;::::0;-1:-1:-1;;;7913:73:0;;14797:2:1;7913:73:0::1;::::0;::::1;14779:21:1::0;14836:2;14816:18;;;14809:30;14875:34;14855:18;;;14848:62;-1:-1:-1;;;14926:18:1;;;14919:36;14972:19;;7913:73:0::1;14595:402:1::0;7913:73:0::1;8017:6;::::0;;7996:38:::1;::::0;-1:-1:-1;;;;;7996:38:0;;::::1;::::0;8017:6;::::1;::::0;7996:38:::1;::::0;::::1;8039:6;:17:::0;;-1:-1:-1;;;;;;8039:17:0::1;-1:-1:-1::0;;;;;8039:17:0;;;::::1;::::0;;;::::1;::::0;;7838:223::o;2625:160::-;2683:7;;2709:5;2713:1;2709;:5;:::i;:::-;2697:17;;2732:1;2727;:6;;2719:46;;;;-1:-1:-1;;;2719:46:0;;15337:2:1;2719:46:0;;;15319:21:1;15376:2;15356:18;;;15349:30;15415:29;15395:18;;;15388:57;15462:18;;2719:46:0;15135:351:1;2719:46:0;2779:1;2625:160;-1:-1:-1;;;2625:160:0:o;10748:341::-;-1:-1:-1;;;;;10826:21:0;;10818:65;;;;-1:-1:-1;;;10818:65:0;;15693:2:1;10818:65:0;;;15675:21:1;15732:2;15712:18;;;15705:30;15771:33;15751:18;;;15744:61;15822:18;;10818:65:0;15491:355:1;10818:65:0;10957:12;;:24;;10974:6;10957:16;:24::i;:::-;10942:12;:39;-1:-1:-1;;;;;11007:18:0;;;;;;:9;:18;;;;;;:30;;11030:6;11007:22;:30::i;:::-;-1:-1:-1;;;;;10986:18:0;;;;;;:9;:18;;;;;;:51;;;;11047:37;;10986:18;;;11047:37;;;;11077:6;1818:25:1;;1806:2;1791:18;;1672:177;11047:37:0;;;;;;;;10748:341;;:::o;11480:330::-;-1:-1:-1;;;;;11589:19:0;;11581:68;;;;-1:-1:-1;;;11581:68:0;;16053:2:1;11581:68:0;;;16035:21:1;16092:2;16072:18;;;16065:30;16131:34;16111:18;;;16104:62;-1:-1:-1;;;16182:18:1;;;16175:34;16226:19;;11581:68:0;15851:400:1;11581:68:0;-1:-1:-1;;;;;11662:21:0;;11654:68;;;;-1:-1:-1;;;11654:68:0;;16458:2:1;11654:68:0;;;16440:21:1;16497:2;16477:18;;;16470:30;16536:34;16516:18;;;16509:62;-1:-1:-1;;;16587:18:1;;;16580:32;16629:19;;11654:68:0;16256:398:1;11654:68:0;-1:-1:-1;;;;;11727:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11773:32;;1818:25:1;;;11773:32:0;;1791:18:1;11773:32:0;;;;;;;;11480:330;;;:::o;28553:2181::-;-1:-1:-1;;;;;28660:18:0;;28652:68;;;;-1:-1:-1;;;28652:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28734:16:0;;28726:64;;;;-1:-1:-1;;;28726:64:0;;;;;;;:::i;:::-;28801:6;28811:1;28801:11;28798:71;;28821:28;28837:4;28843:2;28847:1;28821:15;:28::i;28798:71::-;-1:-1:-1;;;;;28895:31:0;;;28876:16;28895:31;;;:25;:31;;;;;;;;;28950:29;;;;;;;;;28991:35;;;:29;:35;;;;;;28895:31;;;;;28950:29;;;;28991:35;28990:36;:74;;;;-1:-1:-1;;;;;;29031:33:0;;;;;;:29;:33;;;;;;;;29030:34;28990:74;28987:666;;;29081:16;;-1:-1:-1;;;29081:16:0;;;;29073:59;;;;-1:-1:-1;;;29073:59:0;;17671:2:1;29073:59:0;;;17653:21:1;17710:2;17690:18;;;17683:30;17749:32;17729:18;;;17722:60;17799:18;;29073:59:0;17469:354:1;29073:59:0;-1:-1:-1;;;;;29144:38:0;;;;;;:34;:38;;;;;;;;29143:39;:84;;;;-1:-1:-1;;;;;;29187:40:0;;;;;;:34;:40;;;;;;;;29186:41;29143:84;29139:339;;;29249:11;29245:110;;;29288:15;;29278:6;:25;;29270:76;;;;-1:-1:-1;;;29270:76:0;;18030:2:1;29270:76:0;;;18012:21:1;18069:2;18049:18;;;18042:30;18108:34;18088:18;;;18081:62;-1:-1:-1;;;18159:18:1;;;18152:36;18205:19;;29270:76:0;17828:402:1;29270:76:0;29368:10;29364:107;;;29407:11;;29397:6;:21;;29389:73;;;;-1:-1:-1;;;29389:73:0;;18437:2:1;29389:73:0;;;18419:21:1;18476:2;18456:18;;;18449:30;18515:34;18495:18;;;18488:62;-1:-1:-1;;;18566:18:1;;;18559:37;18613:19;;29389:73:0;18235:403:1;29389:73:0;-1:-1:-1;;;;;29489:33:0;;;;;;:29;:33;;;;;;;;29484:163;;29568:15;;29557:6;29541:13;29551:2;-1:-1:-1;;;;;8950:18:0;8929:7;8950:18;;;:9;:18;;;;;;;8855:118;29541:13;:22;;;;:::i;:::-;29540:43;;29532:107;;;;-1:-1:-1;;;29532:107:0;;18845:2:1;29532:107:0;;;18827:21:1;18884:2;18864:18;;;18857:30;18923:34;18903:18;;;18896:62;-1:-1:-1;;;18974:18:1;;;18967:49;19033:19;;29532:107:0;18643:415:1;29532:107:0;29660:37;29673:11;29686:10;29660:12;:37::i;:::-;29746:23;;29736:4;29703:12;8950:18;;;:9;:18;;;;;;29787:16;;-1:-1:-1;;29718:51:0;;-1:-1:-1;;;29787:16:0;;;;:32;;;;;29812:7;29787:32;:51;;;;-1:-1:-1;29829:9:0;;;;29828:10;29787:51;:73;;;;-1:-1:-1;29847:9:0;;-1:-1:-1;;;29847:9:0;;;;:13;;29787:73;:111;;;;-1:-1:-1;;;;;;29869:29:0;;;;;;:25;:29;;;;;;;;29787:111;29777:206;;;29912:9;:16;;-1:-1:-1;;29912:16:0;29924:4;29912:16;;;29935:17;:15;:17::i;:::-;29959:9;:17;;-1:-1:-1;;29959:17:0;;;29777:206;30006:9;;29990:12;;30006:9;;30005:10;:30;;;;-1:-1:-1;30019:16:0;;-1:-1:-1;;;30019:16:0;;;;30005:30;-1:-1:-1;;;;;30046:24:0;;;;;;:18;:24;;;;;;29990:45;;-1:-1:-1;30046:24:0;;;:50;;-1:-1:-1;;;;;;30074:22:0;;;;;;:18;:22;;;;;;;;30046:50;30043:83;;;-1:-1:-1;30114:5:0;30043:83;30135:7;:24;;;;-1:-1:-1;30146:9:0;;-1:-1:-1;;;30146:9:0;;;;:13;;30135:24;30131:392;;;30191:9;;30168:11;;30203:3;;30182:18;;-1:-1:-1;;;30191:9:0;;;;30182:6;:18;:::i;:::-;:24;;;;:::i;:::-;30255:8;;30168:38;;-1:-1:-1;30225:18:0;;30266:3;;30246:17;;30255:8;;;;;30246:6;:17;:::i;:::-;:23;;;;:::i;:::-;30225:44;-1:-1:-1;30285:12:0;30294:3;30285:6;:12;:::i;:::-;30276:21;;30304:41;30320:4;30334;30341:3;30304:15;:41::i;:::-;30370:14;;30366:151;;30409:38;30429:4;30436:10;30409:11;:38::i;:::-;30485:8;;30475:31;;;30485:8;;;;;;19793:36:1;;19860:2;19845:18;;19838:34;;;30475:31:0;;19766:18:1;30475:31:0;;;;;;;30366:151;30161:362;;30131:392;30528:33;30544:4;30550:2;30554:6;30528:15;:33::i;:::-;30582:15;;-1:-1:-1;;;;;30582:15:0;:26;30617:4;30624:15;30617:4;-1:-1:-1;;;;;8950:18:0;8929:7;8950:18;;;:9;:18;;;;;;;8855:118;30624:15;30582:58;;-1:-1:-1;;;;;;30582:58:0;;;;;;;-1:-1:-1;;;;;20091:32:1;;;30582:58:0;;;20073:51:1;20140:18;;;20133:34;20046:18;;30582:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30578:74;30664:15;;-1:-1:-1;;;;;30664:15:0;:26;30699:2;30704:13;30699:2;-1:-1:-1;;;;;8950:18:0;8929:7;8950:18;;;:9;:18;;;;;;;8855:118;30704:13;30664:54;;-1:-1:-1;;;;;;30664:54:0;;;;;;;-1:-1:-1;;;;;20091:32:1;;;30664:54:0;;;20073:51:1;20140:18;;;20133:34;20046:18;;30664:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30660:70;28646:2088;;;;28553:2181;;;:::o;2922:171::-;3008:7;3038:12;3030:6;;;;3022:29;;;;-1:-1:-1;;;3022:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3056:9:0;3068:5;3072:1;3068;:5;:::i;:::-;3056:17;2922:171;-1:-1:-1;;;;;2922:171:0:o;11094:381::-;-1:-1:-1;;;;;11172:21:0;;11164:67;;;;-1:-1:-1;;;11164:67:0;;20380:2:1;11164:67:0;;;20362:21:1;20419:2;20399:18;;;20392:30;20458:34;20438:18;;;20431:62;-1:-1:-1;;;20509:18:1;;;20502:31;20550:19;;11164:67:0;20178:397:1;11164:67:0;11311:68;11334:6;11311:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11311:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;11290:18:0;;;;;;:9;:18;;;;;:89;11399:12;;:24;;11416:6;11399:16;:24::i;:::-;11384:12;:39;11433:37;;1818:25:1;;;11459:1:0;;-1:-1:-1;;;;;11433:37:0;;;;;1806:2:1;1791:18;11433:37:0;1672:177:1;33169:1258:0;33393:21;;;;:43;;;;:21;;:43;33389:215;;33449:101;;-1:-1:-1;;;20782:32:1;;20839:2;20830:12;33449:101:0;;;;;;;;33491:21;;;;33535:14;;33449:101;;33491:21;;;;;33449:101;;;;-1:-1:-1;;;;;;;;;;;33449:101:0;;;33535:14;;;33449:101;:::i;:::-;;;;;;;;33556:21;;;:42;;-1:-1:-1;;33556:42:0;;;;;;;33389:215;33612:21;;;;:43;;;;:21;;;;;:43;33608:215;;33668:101;;-1:-1:-1;;;21269:32:1;;21326:2;21317:12;33668:101:0;;;;;;;;33710:21;;;;33754:14;;33668:101;;33710:21;;;;;;;;33668:101;;;;-1:-1:-1;;;;;;;;;;;33668:101:0;;;33754:14;;;33668:101;:::i;:::-;;;;;;;;33775:21;;;:42;;-1:-1:-1;;33775:42:0;;;;;;;;;33608:215;33831:19;;;;:39;;;;-1:-1:-1;;;33831:19:0;;;;:39;33827:201;;33883:95;;-1:-1:-1;;;21542:30:1;;21597:2;21588:12;33883:95:0;;;;;;;;33923:19;;;;33963:14;;33883:95;;33923:19;-1:-1:-1;;;33923:19:0;;;;;;33883:95;;;;-1:-1:-1;;;;;;;;;;;33883:95:0;;;33963:14;;;33883:95;:::i;:::-;;;;;;;;33984:19;;;:38;;-1:-1:-1;;33984:38:0;-1:-1:-1;;;33984:38:0;;;;;;;33827:201;34042:16;;;;:33;;;;-1:-1:-1;;;34042:16:0;;;;:33;34038:180;;34088:86;;-1:-1:-1;;;21813:27:1;;21865:2;21856:12;34088:86:0;;;;;;;;34125:16;;;;34159:14;;34088:86;;34125:16;-1:-1:-1;;;34125:16:0;;;;;;34088:86;;;;-1:-1:-1;;;;;;;;;;;34088:86:0;;;34159:14;;;34088:86;:::i;:::-;;;;;;;;34180:16;;;:32;;-1:-1:-1;;34180:32:0;-1:-1:-1;;;34180:32:0;;;;;;;34038:180;34226:19;;;;:39;;;;-1:-1:-1;;;34226:19:0;;;;:39;34222:201;;34278:95;;-1:-1:-1;;;22081:30:1;;22136:2;22127:12;34278:95:0;;;;;;;;34318:19;;;;34358:14;;34278:95;;34318:19;-1:-1:-1;;;34318:19:0;;;;;;34278:95;;;;-1:-1:-1;;;;;;;;;;;34278:95:0;;;34358:14;;;34278:95;:::i;:::-;;;;;;;;34379:19;;;:38;;-1:-1:-1;;34379:38:0;-1:-1:-1;;;34379:38:0;;;;;;;34222:201;33169:1258;;;;;;:::o;31868:1298::-;32097:22;;;;:45;;;;:22;;;;;:45;32093:222;;32155:104;;-1:-1:-1;;;22352:33:1;;22410:2;22401:12;32155:104:0;;;;;;;;32198:22;;;;32244:14;;32155:104;;32198:22;;;;;;;;32155:104;;;;-1:-1:-1;;;;;;;;;;;32155:104:0;;;32244:14;;;32155:104;:::i;:::-;;;;;;;;32265:22;;;:44;;-1:-1:-1;;32265:44:0;;;;;;;;;32093:222;32323:22;;;;:45;;;;:22;;;;;:45;32319:222;;32381:104;;-1:-1:-1;;;22626:33:1;;22684:2;22675:12;32381:104:0;;;;;;;;32424:22;;;;32470:14;;32381:104;;32424:22;;;;;;;;32381:104;;;;-1:-1:-1;;;;;;;;;;;32381:104:0;;;32470:14;;;32381:104;:::i;:::-;;;;;;;;32491:22;;;:44;;-1:-1:-1;;32491:44:0;;;;;;;;;32319:222;32549:20;;;;:41;;;;-1:-1:-1;;;32549:20:0;;;;:41;32545:208;;32603:98;;-1:-1:-1;;;22900:31:1;;22956:2;22947:12;32603:98:0;;;;;;;;32644:20;;;;32686:14;;32603:98;;32644:20;-1:-1:-1;;;32644:20:0;;;;;;32603:98;;;;-1:-1:-1;;;;;;;;;;;32603:98:0;;;32686:14;;;32603:98;:::i;:::-;;;;;;;;32707:20;;;:40;;-1:-1:-1;;32707:40:0;-1:-1:-1;;;32707:40:0;;;;;;;32545:208;32767:17;;;;:35;;;;-1:-1:-1;;;32767:17:0;;;;:35;32763:187;;32815:89;;-1:-1:-1;;;23172:28:1;;23225:2;23216:12;32815:89:0;;;;;;;;32853:17;;;;32889:14;;32815:89;;32853:17;-1:-1:-1;;;32853:17:0;;;;;;32815:89;;;;-1:-1:-1;;;;;;;;;;;32815:89:0;;;32889:14;;;32815:89;:::i;:::-;;;;;;;;32910:17;;;:34;;-1:-1:-1;;32910:34:0;-1:-1:-1;;;32910:34:0;;;;;;;32763:187;32958:20;;;;:41;;;;-1:-1:-1;;;32958:20:0;;;;:41;32954:208;;33012:98;;-1:-1:-1;;;23441:31:1;;23497:2;23488:12;33012:98:0;;;;;;;;33053:20;;;;33095:14;;33012:98;;33053:20;-1:-1:-1;;;33053:20:0;;;;;;33012:98;;;;-1:-1:-1;;;;;;;;;;;33012:98:0;;;33095:14;;;33012:98;:::i;:::-;;;;;;;;33116:20;;;:40;;;;;-1:-1:-1;;;33116:40:0;-1:-1:-1;;33116:40:0;;;;;;31868:1298;;;;;;:::o;10234:509::-;-1:-1:-1;;;;;10347:20:0;;10339:70;;;;-1:-1:-1;;;10339:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10422:23:0;;10414:71;;;;-1:-1:-1;;;10414:71:0;;;;;;;:::i;:::-;10562;10584:6;10562:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10562:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;10542:17:0;;;;;;;:9;:17;;;;;;:91;;;;10661:20;;;;;;;:32;;10686:6;10661:24;:32::i;:::-;-1:-1:-1;;;;;10638:20:0;;;;;;;:9;:20;;;;;;;:55;;;;10703:35;;;;;;;;;;10731:6;1818:25:1;;1806:2;1791:18;;1672:177;30737:1128:0;30807:13;:17;;-1:-1:-1;;30894:15:0;;;30916:239;;;;30955:23;;30939:13;:39;;30955:23;;;;-1:-1:-1;;30984:39:0;;;;;;;30955:23;31000;;;;;;30984:39;;;;;;;;-1:-1:-1;;31079:29:0;-1:-1:-1;;;31043:21:0;;;;;31029:35;;;;-1:-1:-1;;31079:29:0;;-1:-1:-1;;;31090:18:0;;;;31079:29;;;-1:-1:-1;;31114:35:0;-1:-1:-1;;;31128:21:0;;;;;;;31114:35;;;;;;;30916:239;31166:10;31162:246;;;31203:24;;31187:13;:40;;31203:24;;;;;;;;-1:-1:-1;;31233:40:0;;;;;;;31249:24;;;;;;31233:40;;;;;-1:-1:-1;;31330:30:0;-1:-1:-1;;;31293:22:0;;;;31279:36;;-1:-1:-1;;31330:30:0;;-1:-1:-1;;;31341:19:0;;;;31330:30;;;;;-1:-1:-1;;31366:36:0;-1:-1:-1;;;31380:22:0;;;;-1:-1:-1;;;31366:36:0;;;;;;;31162:246;31423:10;31422:11;:27;;;;;31438:11;31437:12;31422:27;31418:260;;;31473:24;;31457:13;:40;;31473:24;;;;;;;;-1:-1:-1;;31503:40:0;;;;;;;31519:24;;;;;;31503:40;;;;;-1:-1:-1;;31600:30:0;-1:-1:-1;;;31563:22:0;;;;31549:36;;-1:-1:-1;;31600:30:0;;-1:-1:-1;;;31611:19:0;;;;31600:30;;;;;-1:-1:-1;;31636:36:0;-1:-1:-1;;;31650:22:0;;;;-1:-1:-1;;;31636:36:0;;;;;;;31418:260;31751:11;;;-1:-1:-1;;;31751:11:0;;;;;31740:8;;;;;;31726:11;;;;;;31694:29;;31751:11;31710:13;;;;;31694;:29;:::i;:::-;:43;;;;:::i;:::-;:54;;;;:::i;:::-;:68;;;;:::i;:::-;31682:9;:80;;-1:-1:-1;;31682:80:0;;-1:-1:-1;;;31682:80:0;;;;;;;;;;;;;31772:88;;;31784:13;;;;;;;;;;23797:34:1;;31682:80:0;31799:13;;;;23862:2:1;23847:18;;23840:43;31814:11:0;;;;;23899:18:1;;;23892:43;;;;31827:8:0;;;;;23966:2:1;23951:18;;23944:43;-1:-1:-1;;;31837:11:0;;;;24018:3:1;24003:19;;23996:44;31850:9:0;;;;;;24071:3:1;24056:19;;24049:44;31772:88:0;;23761:3:1;23746:19;31772:88:0;23511:588:1;34430:1390:0;34514:4;34470:23;8950:18;;;:9;:18;;;;;;34641:9;;8950:18;;34553:21;;34653:1;;34641:9;-1:-1:-1;;;34641:9:0;;;;;34607:31;;34625:13;8950:18;34607:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;34724:9;;34581:73;;-1:-1:-1;34665:24:0;;34724:9;-1:-1:-1;;;34724:9:0;;;;;34692:29;;-1:-1:-1;;;34710:11:0;;;;34692:15;:29;:::i;:::-;:41;;;;:::i;:::-;34665:68;-1:-1:-1;34738:20:0;34780:34;34665:68;34780:15;:34;:::i;:::-;34761:54;;:15;:54;:::i;:::-;34738:77;;34822:31;34840:12;34822:17;:31::i;:::-;34860:27;34890:42;34915:17;34890:21;:42;:::i;:::-;35005:11;;34860:72;;-1:-1:-1;34937:19:0;;35005:11;-1:-1:-1;;;35005:11:0;;;;;34994:8;;;;;;34973:17;;34989:1;;34973:13;:17;:::i;:::-;34972:30;;;;:::i;:::-;:44;;;;:::i;:::-;34959:9;;:58;;;-1:-1:-1;;;34959:9:0;;;;:58;:::i;:::-;35073:13;;34937:80;;;;;-1:-1:-1;35022:26:0;;35103:1;;34937:80;;35051:35;;35073:13;35051:19;:35;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;35166:13;;35022:82;;-1:-1:-1;35115:26:0;;35182:11;;35144:35;;35166:13;;;;;35144:19;:35;:::i;:::-;:49;;;;:::i;:::-;35115:78;-1:-1:-1;35198:24:0;35248:39;35115:78;35248:18;:39;:::i;:::-;35225:63;;:19;:63;:::i;:::-;35303:13;;35295:49;;35198:90;;-1:-1:-1;;;;;;35303:13:0;;35295:49;;;;;35198:90;;35303:13;35295:49;35303:13;35295:49;35198:90;35303:13;35295:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35363:15:0;;35355:53;;-1:-1:-1;;;;;35363:15:0;;;;35355:53;;;;;35389:18;;35363:15;35355:53;35363:15;35355:53;35389:18;35363:15;35355:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35419:19:0;;35415:169;;35446:50;35460:15;35477:18;35446:13;:50::i;:::-;35507:65;;;24676:25:1;;;24732:2;24717:18;;24710:34;;;24760:18;;;24753:34;;;35507:65:0;;24664:2:1;24649:18;35507:65:0;;;;;;;35415:169;35646:15;;35607:74;;-1:-1:-1;;;35607:74:0;;-1:-1:-1;;;;;35646:15:0;;;35607:74;;;20073:51:1;20140:18;;;20133:34;;;35591:12:0;;35622:4;;35607:30;;20046:18:1;;35607:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35590:91;;35689:7;35686:130;;;35704:15;;:64;;-1:-1:-1;;;35704:64:0;;;;;1818:25:1;;;-1:-1:-1;;;;;35704:15:0;;;;:46;;1791:18:1;;35704:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35779:31;35793:16;35779:31;;;;1818:25:1;;1806:2;1791:18;;1672:177;35779:31:0;;;;;;;;35686:130;34465:1355;;;;;;;;;;;34430:1390::o;2790:127::-;2848:7;2869:43;2873:1;2876;2869:43;;;;;;;;;;;;;;;;;:3;:43::i;35823:416::-;35908:16;;;35922:1;35908:16;;;;;;;;35884:21;;35908:16;;;;;;;;;;-1:-1:-1;35908:16:0;35884:40;;35947:4;35929;35934:1;35929:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35929:23:0;;;:7;;;;;;;;;;:23;;;;35967:15;;:22;;;-1:-1:-1;;;35967:22:0;;;;:15;;;;;:20;;:22;;;;;35929:7;;35967:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35957:4;35962:1;35957:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35957:32:0;;;:7;;;;;;;;;:32;36026:15;;35994:62;;36011:4;;36026:15;36044:11;35994:8;:62::i;:::-;36061:15;;:173;;-1:-1:-1;;;36061:173:0;;-1:-1:-1;;;;;36061:15:0;;;;:66;;:173;;36133:11;;36061:15;;36185:4;;36203;;36214:15;;36061:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36242:348;36350:15;;36318:62;;36335:4;;-1:-1:-1;;;;;36350:15:0;36368:11;36318:8;:62::i;:::-;36385:15;;36544;;36385:200;;-1:-1:-1;;;36385:200:0;;36448:4;36385:200;;;26923:34:1;26973:18;;;26966:34;;;36385:15:0;27016:18:1;;;27009:34;;;27059:18;;;27052:34;-1:-1:-1;;;;;36544:15:0;;;27102:19:1;;;27095:44;36565:15:0;27155:19:1;;;27148:35;36385:15:0;;;:31;;36424:9;;26857:19:1;;36385:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1264:180::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;-1:-1:-1;1415:23:1;;1264:180;-1:-1:-1;1264:180:1:o;2062:456::-;2139:6;2147;2155;2208:2;2196:9;2187:7;2183:23;2179:32;2176:52;;;2224:1;2221;2214:12;2176:52;2263:9;2250:23;2282:31;2307:5;2282:31;:::i;:::-;2332:5;-1:-1:-1;2389:2:1;2374:18;;2361:32;2402:33;2361:32;2402:33;:::i;:::-;2062:456;;2454:7;;-1:-1:-1;;;2508:2:1;2493:18;;;;2480:32;;2062:456::o;2958:247::-;3017:6;3070:2;3058:9;3049:7;3045:23;3041:32;3038:52;;;3086:1;3083;3076:12;3038:52;3125:9;3112:23;3144:31;3169:5;3144:31;:::i;3210:529::-;3287:6;3295;3303;3356:2;3344:9;3335:7;3331:23;3327:32;3324:52;;;3372:1;3369;3362:12;3324:52;3411:9;3398:23;3430:31;3455:5;3430:31;:::i;:::-;3480:5;-1:-1:-1;3537:2:1;3522:18;;3509:32;3550:33;3509:32;3550:33;:::i;:::-;3602:7;-1:-1:-1;3661:2:1;3646:18;;3633:32;3674:33;3633:32;3674:33;:::i;:::-;3726:7;3716:17;;;3210:529;;;;;:::o;3744:118::-;3830:5;3823:13;3816:21;3809:5;3806:32;3796:60;;3852:1;3849;3842:12;3867:382;3932:6;3940;3993:2;3981:9;3972:7;3968:23;3964:32;3961:52;;;4009:1;4006;3999:12;3961:52;4048:9;4035:23;4067:31;4092:5;4067:31;:::i;:::-;4117:5;-1:-1:-1;4174:2:1;4159:18;;4146:32;4187:30;4146:32;4187:30;:::i;:::-;4236:7;4226:17;;;3867:382;;;;;:::o;4254:156::-;4320:20;;4380:4;4369:16;;4359:27;;4349:55;;4400:1;4397;4390:12;4349:55;4254:156;;;:::o;4415:464::-;4500:6;4508;4516;4524;4532;4585:3;4573:9;4564:7;4560:23;4556:33;4553:53;;;4602:1;4599;4592:12;4553:53;4625:27;4642:9;4625:27;:::i;:::-;4615:37;;4671:36;4703:2;4692:9;4688:18;4671:36;:::i;:::-;4661:46;;4726:36;4758:2;4747:9;4743:18;4726:36;:::i;:::-;4716:46;;4781:36;4813:2;4802:9;4798:18;4781:36;:::i;:::-;4771:46;;4836:37;4868:3;4857:9;4853:19;4836:37;:::i;:::-;4826:47;;4415:464;;;;;;;;:::o;5387:388::-;5455:6;5463;5516:2;5504:9;5495:7;5491:23;5487:32;5484:52;;;5532:1;5529;5522:12;5484:52;5571:9;5558:23;5590:31;5615:5;5590:31;:::i;:::-;5640:5;-1:-1:-1;5697:2:1;5682:18;;5669:32;5710:33;5669:32;5710:33;:::i;5780:380::-;5859:1;5855:12;;;;5902;;;5923:61;;5977:4;5969:6;5965:17;5955:27;;5923:61;6030:2;6022:6;6019:14;5999:18;5996:38;5993:161;;6076:10;6071:3;6067:20;6064:1;6057:31;6111:4;6108:1;6101:15;6139:4;6136:1;6129:15;5993:161;;5780:380;;;:::o;6590:356::-;6792:2;6774:21;;;6811:18;;;6804:30;6870:34;6865:2;6850:18;;6843:62;6937:2;6922:18;;6590:356::o;8388:184::-;8458:6;8511:2;8499:9;8490:7;8486:23;8482:32;8479:52;;;8527:1;8524;8517:12;8479:52;-1:-1:-1;8550:16:1;;8388:184;-1:-1:-1;8388:184:1:o;8882:245::-;8949:6;9002:2;8990:9;8981:7;8977:23;8973:32;8970:52;;;9018:1;9015;9008:12;8970:52;9050:9;9044:16;9069:28;9091:5;9069:28;:::i;11021:406::-;11223:2;11205:21;;;11262:2;11242:18;;;11235:30;11301:34;11296:2;11281:18;;11274:62;-1:-1:-1;;;11367:2:1;11352:18;;11345:40;11417:3;11402:19;;11021:406::o;11776:127::-;11837:10;11832:3;11828:20;11825:1;11818:31;11868:4;11865:1;11858:15;11892:4;11889:1;11882:15;11908:204;11946:3;11982:4;11979:1;11975:12;12014:4;12011:1;12007:12;12049:3;12043:4;12039:14;12034:3;12031:23;12028:49;;;12057:18;;:::i;:::-;12093:13;;11908:204;-1:-1:-1;;;11908:204:1:o;15002:128::-;15042:3;15073:1;15069:6;15066:1;15063:13;15060:39;;;15079:18;;:::i;:::-;-1:-1:-1;15115:9:1;;15002:128::o;16659:401::-;16861:2;16843:21;;;16900:2;16880:18;;;16873:30;16939:34;16934:2;16919:18;;16912:62;-1:-1:-1;;;17005:2:1;16990:18;;16983:35;17050:3;17035:19;;16659:401::o;17065:399::-;17267:2;17249:21;;;17306:2;17286:18;;;17279:30;17345:34;17340:2;17325:18;;17318:62;-1:-1:-1;;;17411:2:1;17396:18;;17389:33;17454:3;17439:19;;17065:399::o;19063:168::-;19103:7;19169:1;19165;19161:6;19157:14;19154:1;19151:21;19146:1;19139:9;19132:17;19128:45;19125:71;;;19176:18;;:::i;:::-;-1:-1:-1;19216:9:1;;19063:168::o;19236:127::-;19297:10;19292:3;19288:20;19285:1;19278:31;19328:4;19325:1;19318:15;19352:4;19349:1;19342:15;19368:120;19408:1;19434;19424:35;;19439:18;;:::i;:::-;-1:-1:-1;19473:9:1;;19368:120::o;19493:125::-;19533:4;19561:1;19558;19555:8;19552:34;;;19566:18;;:::i;:::-;-1:-1:-1;19603:9:1;;19493:125::o;20853:209::-;-1:-1:-1;;21017:38:1;;;;20999:57;;20987:2;20972:18;;20853:209::o;24104:165::-;24142:1;24176:4;24173:1;24169:12;24200:3;24190:37;;24207:18;;:::i;:::-;24259:3;24252:4;24249:1;24245:12;24241:22;24236:27;;;24104:165;;;;:::o;24274:195::-;24312:4;24349;24346:1;24342:12;24381:4;24378:1;24374:12;24406:3;24401;24398:12;24395:38;;;24413:18;;:::i;:::-;24450:13;;;24274:195;-1:-1:-1;;;24274:195:1:o;25209:127::-;25270:10;25265:3;25261:20;25258:1;25251:31;25301:4;25298:1;25291:15;25325:4;25322:1;25315:15;25341:251;25411:6;25464:2;25452:9;25443:7;25439:23;25435:32;25432:52;;;25480:1;25477;25470:12;25432:52;25512:9;25506:16;25531:31;25556:5;25531:31;:::i;25597:980::-;25859:4;25907:3;25896:9;25892:19;25938:6;25927:9;25920:25;25964:2;26002:6;25997:2;25986:9;25982:18;25975:34;26045:3;26040:2;26029:9;26025:18;26018:31;26069:6;26104;26098:13;26135:6;26127;26120:22;26173:3;26162:9;26158:19;26151:26;;26212:2;26204:6;26200:15;26186:29;;26233:1;26243:195;26257:6;26254:1;26251:13;26243:195;;;26322:13;;-1:-1:-1;;;;;26318:39:1;26306:52;;26413:15;;;;26378:12;;;;26354:1;26272:9;26243:195;;;-1:-1:-1;;;;;;;26494:32:1;;;;26489:2;26474:18;;26467:60;-1:-1:-1;;;26558:3:1;26543:19;26536:35;26455:3;25597:980;-1:-1:-1;;;25597:980:1:o;27194:306::-;27282:6;27290;27298;27351:2;27339:9;27330:7;27326:23;27322:32;27319:52;;;27367:1;27364;27357:12;27319:52;27396:9;27390:16;27380:26;;27446:2;27435:9;27431:18;27425:25;27415:35;;27490:2;27479:9;27475:18;27469:25;27459:35;;27194:306;;;;;:::o

Swarm Source

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