ETH Price: $2,987.29 (+3.62%)
Gas: 3 Gwei

Token

Optimus Miner (OPTIM)
 

Overview

Max Total Supply

10,000,000 OPTIM

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 OPTIM

Value
$0.00
0xe073bfe8ec039f5da0ad8c456bc76ef42e7b2b0d
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:
OPTIM

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-27
*/

/*
Optimus Miner 🤖 $OPTIM 🤖
Elon Musk loves his Optimus AI robot, as well as it's female version Catgirl. The crypto space stands behind Elon's attempts to advance humanity to a next level.

Optimus Miner, is a custom cloud-based BTC mining solution that's hosted on power-efficient cloud regions and enables $OPTIM holders to earn rewards by holding our native token. We have customized it around Optimus to pay further attribution to Elon's robot and cryptocurrency support all those years. Mining is fun when done together as a community.

https://twitter.com/optimus_miner
https://optimusminer.cloud/
https://t.me/OptimusMinerETH

*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

abstract contract Context {
	function _msgSender() internal view virtual returns (address) {
		return msg.sender;
	}

	function _msgData() internal view virtual returns (bytes calldata) {
		this;
		return msg.data;
	}
}

interface IUniswapV2Pair {
	event Approval(address indexed owner, address indexed spender, uint value);
	event Transfer(address indexed from, address indexed to, uint value);

	function name() external pure returns (string memory);
	function symbol() external pure returns (string memory);
	function decimals() external pure returns (uint8);
	function totalSupply() external view returns (uint);
	function balanceOf(address owner) external view returns (uint);
	function allowance(address owner, address spender) external view returns (uint);
	function approve(address spender, uint value) external returns (bool);
	function transfer(address to, uint value) external returns (bool);
	function transferFrom(address from, address to, uint value) external returns (bool);
	function DOMAIN_SEPARATOR() external view returns (bytes32);
	function PERMIT_TYPEHASH() external pure returns (bytes32);
	function nonces(address owner) external view returns (uint);
	function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

	event Mint(address indexed sender, uint amount0, uint amount1);
	event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
	event Swap(
		address indexed sender,
		uint amount0In,
		uint amount1In,
		uint amount0Out,
		uint amount1Out,
		address indexed to
	);
	event Sync(uint112 reserve0, uint112 reserve1);

	function MINIMUM_LIQUIDITY() external pure returns (uint);
	function factory() external view returns (address);
	function token0() external view returns (address);
	function token1() external view returns (address);
	function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
	function price0CumulativeLast() external view returns (uint);
	function price1CumulativeLast() external view returns (uint);
	function kLast() external view returns (uint);
	function mint(address to) external returns (uint liquidity);
	function burn(address to) external returns (uint amount0, uint amount1);
	function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
	function skim(address to) external;
	function sync() external;
	function initialize(address, address) external;
	}

interface IUniswapV2Factory {
	event PairCreated(address indexed token0, address indexed token1, address pair, uint);
	function feeTo() external view returns (address);
	function feeToSetter() external view returns (address);
	function getPair(address tokenA, address tokenB) external view returns (address pair);
	function allPairs(uint) external view returns (address pair);
	function allPairsLength() external view returns (uint);
	function createPair(address tokenA, address tokenB) external returns (address pair);
	function setFeeTo(address) external;
	function setFeeToSetter(address) external;
}

interface IERC20 {
	function totalSupply() external view returns (uint256);
	function balanceOf(address account) external view returns (uint256);
	function transfer(address recipient, uint256 amount) external returns (bool);
	function allowance(address owner, address spender) external view returns (uint256);
	function approve(address spender, uint256 amount) external returns (bool);
	function transferFrom(
		address sender,
		address recipient,
		uint256 amount
	) external returns (bool);
	event Transfer(address indexed from, address indexed to, uint256 value);
	event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
	function name() external view returns (string memory);
	function symbol() external view returns (string memory);
	function decimals() external view returns (uint8);
}
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 {}

}

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


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

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;
		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) {
		require(b != -1 || a != MIN_INT256);
		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;
}
}

interface IUniswapV2Router01 {
	function factory() external pure returns (address);
	function WETH() external pure returns (address);
	function addLiquidity(
		address tokenA,
		address tokenB,
		uint amountADesired,
		uint amountBDesired,
		uint amountAMin,
		uint amountBMin,
		address to,
		uint deadline
	) external returns (uint amountA, uint amountB, uint liquidity);
	function addLiquidityETH(
		address token,
		uint amountTokenDesired,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external payable returns (uint amountToken, uint amountETH, uint liquidity);
	function removeLiquidity(
		address tokenA,
		address tokenB,
		uint liquidity,
		uint amountAMin,
		uint amountBMin,
		address to,
		uint deadline
	) external returns (uint amountA, uint amountB);
	function removeLiquidityETH(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external returns (uint amountToken, uint amountETH);
	function removeLiquidityWithPermit(
		address tokenA,
		address tokenB,
		uint liquidity,
		uint amountAMin,
		uint amountBMin,
		address to,
		uint deadline,
		bool approveMax, uint8 v, bytes32 r, bytes32 s
	) external returns (uint amountA, uint amountB);
	function removeLiquidityETHWithPermit(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline,
		bool approveMax, uint8 v, bytes32 r, bytes32 s
	) external returns (uint amountToken, uint amountETH);
	function swapExactTokensForTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external returns (uint[] memory amounts);
	function swapTokensForExactTokens(
		uint amountOut,
		uint amountInMax,
		address[] calldata path,
		address to,
		uint deadline
	) external returns (uint[] memory amounts);
	function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
		external
		payable
		returns (uint[] memory amounts);
	function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
		external
		returns (uint[] memory amounts);
	function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
		external
		returns (uint[] memory amounts);
		function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
		external
		payable
		returns (uint[] memory amounts);
	function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
	function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
	function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
	function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
	function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
	function removeLiquidityETHSupportingFeeOnTransferTokens(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external returns (uint amountETH);
	function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline,
		bool approveMax, uint8 v, bytes32 r, bytes32 s
	) external returns (uint amountETH);
	function swapExactTokensForTokensSupportingFeeOnTransferTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external;
	function swapExactETHForTokensSupportingFeeOnTransferTokens(
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external payable;
	function swapExactTokensForETHSupportingFeeOnTransferTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external;
}
contract OPTIM is ERC20, Ownable {
	using SafeMath for uint256;

	IUniswapV2Router02 public immutable uniswapV2Router;

	address public immutable uniswapV2Pair;
	address public constant deadAddress = address(0xdead);

	bool private swapping;

	address public marketingWallet;
	address public lpLocker;
	
	uint256 public maxTransactionAmount;
	uint256 public swapTokensAtAmount;

	uint256 public maxWallet;

	bool public swapEnabled = true;

	uint256 public buyTotalFees;
	uint256 public buyMarketingFee;
	uint256 public buyLiquidityFee;
	uint256 public buyBurnFee;
	
	uint256 public sellTotalFees;
	uint256 public sellMarketingFee;
	uint256 public sellLiquidityFee;
	uint256 public sellBurnFee;
	
	uint256 public tokensForMarketing;
	uint256 public tokensForLiquidity;
	uint256 public tokensForBurn;

	mapping (address => bool) private _isExcludedFromFees;
	mapping (address => bool) public _isExcludedMaxTransactionAmount;

	mapping (address => bool) public automatedMarketMakerPairs;
	event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
	event ExcludeFromFees(address indexed account, bool isExcluded);
	event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
	event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
	event SwapAndLiquify(
		uint256 tokensSwapped,
		uint256 ethReceived,
		uint256 tokensIntoLiquidity
	);
	event BuyBackTriggered(uint256 amount);

	constructor() ERC20("Optimus Miner", "OPTIM") {
		address newOwner = address(owner());
		IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
		excludeFromMaxTransaction(address(_uniswapV2Router), true);
		uniswapV2Router = _uniswapV2Router;
		uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
		excludeFromMaxTransaction(address(uniswapV2Pair), true);
		_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
		
		uint256 _buyMarketingFee = 20;
		uint256 _buyLiquidityFee = 0;
		uint256 _buyBurnFee = 0;

		uint256 _sellMarketingFee = 45;
		uint256 _sellLiquidityFee = 0;
		uint256 _sellBurnFee = 0;
		
		uint256 totalSupply = 1 * 1e7 * 1e18;
		
		maxTransactionAmount = (totalSupply * 1 / 100) + (1 * 1e18); // 1% maxTransactionAmountTxn
		maxWallet = (totalSupply * 3 / 100) + (1 * 1e18); // 3% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.10% swap wallet

		buyMarketingFee = _buyMarketingFee;
		buyLiquidityFee = _buyLiquidityFee;
		buyBurnFee = _buyBurnFee;
		buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
		
		sellMarketingFee = _sellMarketingFee;
		sellLiquidityFee = _sellLiquidityFee;
		sellBurnFee = _sellBurnFee;
		sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
		
		marketingWallet = address(0x5F8Dc46aD493e1604693cDc43BDe5d4376F689D1);
		lpLocker = address(0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214);

		excludeFromFees(newOwner, true);
		excludeFromFees(address(this), true);
		excludeFromFees(address(0xdead), true);
		excludeFromFees(marketingWallet, true);
		excludeFromFees(lpLocker, true);
		
		excludeFromMaxTransaction(newOwner, true);
		excludeFromMaxTransaction(address(this), true);
		excludeFromMaxTransaction(address(0xdead), true);
		excludeFromMaxTransaction(marketingWallet, true);
		excludeFromMaxTransaction(lpLocker, true);

		_mint(newOwner, totalSupply);

		transferOwnership(newOwner);
	}

	receive() external payable {
	}

	function changeSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
		require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
		require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
		swapTokensAtAmount = totalSupply() * newAmount / 10000;
		return true;
		}
	
	function changeMaxTxAmount(uint256 newNum) external onlyOwner {
		require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set maxTransactionAmount lower than 1%");
		maxTransactionAmount = (totalSupply() * newNum / 100)/1e18 + (1 * 1e18);
	}
	
	function changeMaxWalletAmount(uint256 newNum) external onlyOwner {
		require(newNum >= (totalSupply() * 3 / 100)/1e18, "Cannot set maxWalletAmount lower than 3%");
		maxWallet = (totalSupply() * newNum / 100)/1e18 + (1 * 1e18);
	}

	function changeLimits(uint256 _maxTransactionAmount, uint256 _maxWallet) external onlyOwner {
		require(_maxTransactionAmount >= (totalSupply() * 1 / 100)/1e18, "Cannot set maxTransactionAmount lower than 1%");
		require(_maxWallet >= (totalSupply() * 3 / 100)/1e18, "Cannot set maxWallet lower than 3%");
		maxTransactionAmount = (totalSupply() * _maxTransactionAmount / 100)/1e18 + (1 * 1e18);
		maxWallet = (totalSupply() * _maxWallet / 100)/1e18 + (1 * 1e18);
	}

	function removeLimits() external onlyOwner {
		maxTransactionAmount = totalSupply();
		maxWallet = totalSupply();
	}
	
	function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
		_isExcludedMaxTransactionAmount[updAds] = isEx;
	}

	function changeSwapEnabled(bool enabled) external onlyOwner(){
		swapEnabled = enabled;
	}

	function changeBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _burnFee) external onlyOwner {
		buyMarketingFee = _marketingFee;
		buyLiquidityFee = _liquidityFee;
		buyBurnFee = _burnFee;
		buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
		require(buyTotalFees <= 20, "Must keep fees at 20% or less");
	}

	function changeSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _burnFee) external onlyOwner {
		sellMarketingFee = _marketingFee;
		sellLiquidityFee = _liquidityFee;
		sellBurnFee = _burnFee;
		sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
		require(sellTotalFees <= 45, "Must keep fees at 45% or less");
	}

	function excludeFromFees(address account, bool excluded) public onlyOwner {
		_isExcludedFromFees[account] = excluded;
		emit ExcludeFromFees(account, excluded);
	}

	function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
		require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
		_setAutomatedMarketMakerPair(pair, value);
	}

	function _setAutomatedMarketMakerPair(address pair, bool value) private {
		automatedMarketMakerPairs[pair] = value;
		emit SetAutomatedMarketMakerPair(pair, value);
	}

	function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
		emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
		marketingWallet = newMarketingWallet;
	}

	function isExcludedFromFees(address account) public view returns(bool) {
		return _isExcludedFromFees[account];
	}

	function _transfer(
		address from,
		address to,
		uint256 amount
	) internal override {
		require(from != address(0), "ERC20: transfer from the zero address");
		require(to != address(0), "ERC20: transfer to the zero address");
		
		if(amount == 0) {
			super._transfer(from, to, 0);
			return;
		}
			if (
				from != owner() &&

				to != owner() &&
				to != address(0) &&
				to != address(0xdead) &&
				!swapping
			){
				//when buy
				if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
						require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
						require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");

				}
				
				//when sell
				else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
						require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
				}
			}
		uint256 contractTokenBalance = balanceOf(address(this));
		bool canSwap = contractTokenBalance >= swapTokensAtAmount;

		if( 
			canSwap &&
			swapEnabled &&
			!swapping &&
			!automatedMarketMakerPairs[from] &&
			!_isExcludedFromFees[from] &&
			!_isExcludedFromFees[to]
		) {
			swapping = true; 
			swapBack();
			swapping = false;
		}
		bool takeFee = !swapping;

		if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
			takeFee = false;
		}
		uint256 fees = 0;
		if(takeFee){
            //when sell
			if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
				fees = amount.mul(sellTotalFees).div(100);
				tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
				tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
				tokensForBurn += fees * sellBurnFee / sellTotalFees;
			}
            //when buy
			else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
				fees = amount.mul(buyTotalFees).div(100);
				tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
				tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
				tokensForBurn += fees * buyBurnFee / buyTotalFees;
			}
			
			if(fees > 0){    
				super._transfer(from, address(this), (fees - tokensForBurn));
			}

			if(tokensForBurn > 0){
				super._transfer(from, deadAddress, tokensForBurn);
				tokensForBurn = 0;
			}
			amount -= fees;
		}
		super._transfer(from, to, amount);
	}

	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,
			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,
			0,
			deadAddress,
			block.timestamp
		);
	}

	function swapBack() private {
		uint256 contractBalance = balanceOf(address(this));
		uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
		
		if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
		uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
		uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
		uint256 initialETHBalance = address(this).balance;
		swapTokensForEth(amountToSwapForETH); 
		uint256 ethBalance = address(this).balance.sub(initialETHBalance);
		uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);

		uint256 ethForLiquidity = ethBalance - ethForMarketing;

		tokensForLiquidity = 0;
		tokensForMarketing = 0;
		
		(bool success,) = address(marketingWallet).call{value: ethForMarketing}("");
		if(liquidityTokens > 0 && ethForLiquidity > 0){
			addLiquidity(liquidityTokens, ethForLiquidity);
			emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
		}

		(success,) = address(marketingWallet).call{value: address(this).balance}("");
	}
	
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"changeBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"changeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"changeSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"changeSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"changeSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpLocker","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":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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 IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600d81526020017f4f7074696d7573204d696e6572000000000000000000000000000000000000008152506040518060400160405280600581526020017f4f5054494d0000000000000000000000000000000000000000000000000000008152508160039081620000aa919062001071565b508060049081620000bc919062001071565b5050506000620000d1620006fa60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000620001826200070260201b60201c565b90506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001b08160016200072c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002569190620011c2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e49190620011c2565b6040518363ffffffff1660e01b81526004016200030392919062001205565b6020604051808303816000875af115801562000323573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003499190620011c2565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200039160a05160016200072c60201b60201c565b620003a660a05160016200082960201b60201c565b6000601490506000806000602d905060008060006a084595161401484a0000009050670de0b6b3a76400006064600183620003e2919062001261565b620003ee9190620012db565b620003fa919062001313565b600881905550670de0b6b3a764000060646003836200041a919062001261565b620004269190620012db565b62000432919062001313565b600a81905550612710600a826200044a919062001261565b620004569190620012db565b60098190555086600d8190555085600e8190555084600f81905550600f54600e54600d5462000486919062001313565b62000492919062001313565b600c81905550836011819055508260128190555081601381905550601354601254601154620004c2919062001313565b620004ce919062001313565b601081905550735f8dc46ad493e1604693cdc43bde5d4376f689d1600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073663a5c229c09b049e36dcc11a9b0d4a8eb9db214600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000591896001620008ca60201b60201c565b620005a4306001620008ca60201b60201c565b620005b961dead6001620008ca60201b60201c565b620005ee600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008ca60201b60201c565b62000623600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008ca60201b60201c565b620006368960016200072c60201b60201c565b620006493060016200072c60201b60201c565b6200065e61dead60016200072c60201b60201c565b62000693600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200072c60201b60201c565b620006c8600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200072c60201b60201c565b620006da898262000a1760201b60201c565b620006eb8962000bbb60201b60201c565b505050505050505050620015b5565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200073c620006fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c590620013af565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620008da620006fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200096c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096390620013af565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a0b9190620013ee565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a80906200145b565b60405180910390fd5b62000a9d6000838362000d8f60201b60201c565b62000ab48160025462000d9460201b90919060201c565b60028190555062000b0d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d9460201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000baf91906200148e565b60405180910390a35050565b62000bcb620006fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c5490620013af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cc69062001521565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000da5919062001313565b90508381101562000ded576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de49062001593565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e7957607f821691505b60208210810362000e8f5762000e8e62000e31565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ef97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000eba565b62000f05868362000eba565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f5262000f4c62000f468462000f1d565b62000f27565b62000f1d565b9050919050565b6000819050919050565b62000f6e8362000f31565b62000f8662000f7d8262000f59565b84845462000ec7565b825550505050565b600090565b62000f9d62000f8e565b62000faa81848462000f63565b505050565b5b8181101562000fd25762000fc660008262000f93565b60018101905062000fb0565b5050565b601f821115620010215762000feb8162000e95565b62000ff68462000eaa565b8101602085101562001006578190505b6200101e620010158562000eaa565b83018262000faf565b50505b505050565b600082821c905092915050565b6000620010466000198460080262001026565b1980831691505092915050565b600062001061838362001033565b9150826002028217905092915050565b6200107c8262000df7565b67ffffffffffffffff81111562001098576200109762000e02565b5b620010a4825462000e60565b620010b182828562000fd6565b600060209050601f831160018114620010e95760008415620010d4578287015190505b620010e0858262001053565b86555062001150565b601f198416620010f98662000e95565b60005b828110156200112357848901518255600182019150602085019450602081019050620010fc565b868310156200114357848901516200113f601f89168262001033565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200118a826200115d565b9050919050565b6200119c816200117d565b8114620011a857600080fd5b50565b600081519050620011bc8162001191565b92915050565b600060208284031215620011db57620011da62001158565b5b6000620011eb84828501620011ab565b91505092915050565b620011ff816200117d565b82525050565b60006040820190506200121c6000830185620011f4565b6200122b6020830184620011f4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200126e8262000f1d565b91506200127b8362000f1d565b92508282026200128b8162000f1d565b91508282048414831517620012a557620012a462001232565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012e88262000f1d565b9150620012f58362000f1d565b925082620013085762001307620012ac565b5b828204905092915050565b6000620013208262000f1d565b91506200132d8362000f1d565b925082820190508082111562001348576200134762001232565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013976020836200134e565b9150620013a4826200135f565b602082019050919050565b60006020820190508181036000830152620013ca8162001388565b9050919050565b60008115159050919050565b620013e881620013d1565b82525050565b6000602082019050620014056000830184620013dd565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001443601f836200134e565b915062001450826200140b565b602082019050919050565b60006020820190508181036000830152620014768162001434565b9050919050565b620014888162000f1d565b82525050565b6000602082019050620014a560008301846200147d565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620015096026836200134e565b91506200151682620014ab565b604082019050919050565b600060208201905081810360008301526200153c81620014fa565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200157b601b836200134e565b9150620015888262001543565b602082019050919050565b60006020820190508181036000830152620015ae816200156c565b9050919050565b60805160a051614e106200160560003960008181610fe301526117e6015260008181610e08015281816136c1015281816137a2015281816137c901528181613865015261388c0152614e106000f3fe6080604052600436106102b25760003560e01c80637bce5a0411610175578063c0246668116100dc578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610ad7578063f2fde38b14610b02578063f637434214610b2b578063f8b45b0514610b56576102b9565b8063e2f4560514610a58578063e71dc3f514610a83578063e81ea6a914610aae576102b9565b8063c02466681461094a578063c8c8ebe414610973578063cd7b33ab1461099e578063d0243792146109c7578063d85ba063146109f0578063dd62ed3e14610a1b576102b9565b8063a3d14e721161012e578063a3d14e7214610816578063a457c2d71461083f578063a9059cbb1461087c578063aacebbe3146108b9578063adb873bd146108e2578063b62496f51461090d576102b9565b80637bce5a041461071857806381bfdcca146107435780638da5cb5b1461076c578063921369131461079757806395d89b41146107c25780639a7a23d6146107ed576102b9565b8063313ce567116102195780636ddd1713116101d25780636ddd17131461062e57806370a0823114610659578063715018a614610696578063751039fc146106ad5780637571336a146106c457806375f0a874146106ed576102b9565b8063313ce5671461050a578063395093511461053557806349bd5a5e146105725780634fbee1931461059d578063677daa57146105da5780636a486a8e14610603576102b9565b806318160ddd1161026b57806318160ddd146103f65780631a8145bb146104215780631d7778561461044c5780631f3fed8f1461047757806323b872dd146104a257806327c8f835146104df576102b9565b806303fc2013146102be57806306fdde03146102e9578063095ea7b31461031457806309d6bf0a1461035157806310d5de531461038e5780631694505e146103cb576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b81565b6040516102e091906139df565b60405180910390f35b3480156102f557600080fd5b506102fe610ba7565b60405161030b9190613a8a565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613b13565b610c39565b6040516103489190613b6e565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190613b89565b610c57565b6040516103859190613b6e565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190613bb6565b610de6565b6040516103c29190613b6e565b60405180910390f35b3480156103d757600080fd5b506103e0610e06565b6040516103ed9190613c42565b60405180910390f35b34801561040257600080fd5b5061040b610e2a565b6040516104189190613c6c565b60405180910390f35b34801561042d57600080fd5b50610436610e34565b6040516104439190613c6c565b60405180910390f35b34801561045857600080fd5b50610461610e3a565b60405161046e9190613c6c565b60405180910390f35b34801561048357600080fd5b5061048c610e40565b6040516104999190613c6c565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613c87565b610e46565b6040516104d69190613b6e565b60405180910390f35b3480156104eb57600080fd5b506104f4610f1f565b60405161050191906139df565b60405180910390f35b34801561051657600080fd5b5061051f610f25565b60405161052c9190613cf6565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190613b13565b610f2e565b6040516105699190613b6e565b60405180910390f35b34801561057e57600080fd5b50610587610fe1565b60405161059491906139df565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190613bb6565b611005565b6040516105d19190613b6e565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190613b89565b61105b565b005b34801561060f57600080fd5b506106186111ad565b6040516106259190613c6c565b60405180910390f35b34801561063a57600080fd5b506106436111b3565b6040516106509190613b6e565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190613bb6565b6111c6565b60405161068d9190613c6c565b60405180910390f35b3480156106a257600080fd5b506106ab61120e565b005b3480156106b957600080fd5b506106c2611366565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613d3d565b61141b565b005b3480156106f957600080fd5b5061070261150d565b60405161070f91906139df565b60405180910390f35b34801561072457600080fd5b5061072d611533565b60405161073a9190613c6c565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613b89565b611539565b005b34801561077857600080fd5b5061078161168b565b60405161078e91906139df565b60405180910390f35b3480156107a357600080fd5b506107ac6116b5565b6040516107b99190613c6c565b60405180910390f35b3480156107ce57600080fd5b506107d76116bb565b6040516107e49190613a8a565b60405180910390f35b3480156107f957600080fd5b50610814600480360381019061080f9190613d3d565b61174d565b005b34801561082257600080fd5b5061083d60048036038101906108389190613d7d565b611880565b005b34801561084b57600080fd5b5061086660048036038101906108619190613b13565b61199a565b6040516108739190613b6e565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e9190613b13565b611a67565b6040516108b09190613b6e565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190613bb6565b611a85565b005b3480156108ee57600080fd5b506108f7611bdc565b6040516109049190613c6c565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613bb6565b611be2565b6040516109419190613b6e565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c9190613d3d565b611c02565b005b34801561097f57600080fd5b50610988611d42565b6040516109959190613c6c565b60405180910390f35b3480156109aa57600080fd5b506109c560048036038101906109c09190613d7d565b611d48565b005b3480156109d357600080fd5b506109ee60048036038101906109e99190613dd0565b611e62565b005b3480156109fc57600080fd5b50610a0561206d565b604051610a129190613c6c565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d9190613e10565b612073565b604051610a4f9190613c6c565b60405180910390f35b348015610a6457600080fd5b50610a6d6120fa565b604051610a7a9190613c6c565b60405180910390f35b348015610a8f57600080fd5b50610a98612100565b604051610aa59190613c6c565b60405180910390f35b348015610aba57600080fd5b50610ad56004803603810190610ad09190613e50565b612106565b005b348015610ae357600080fd5b50610aec6121ba565b604051610af99190613c6c565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190613bb6565b6121c0565b005b348015610b3757600080fd5b50610b40612386565b604051610b4d9190613c6c565b60405180910390f35b348015610b6257600080fd5b50610b6b61238c565b604051610b789190613c6c565b60405180910390f35b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610bb690613eac565b80601f0160208091040260200160405190810160405280929190818152602001828054610be290613eac565b8015610c2f5780601f10610c0457610100808354040283529160200191610c2f565b820191906000526020600020905b815481529060010190602001808311610c1257829003601f168201915b5050505050905090565b6000610c4d610c46612392565b848461239a565b6001905092915050565b6000610c61612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790613f29565b60405180910390fd5b620186a06001610cfe610e2a565b610d089190613f78565b610d129190613fe9565b821015610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b9061408c565b60405180910390fd5b6103e86005610d61610e2a565b610d6b9190613f78565b610d759190613fe9565b821115610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae9061411e565b60405180910390fd5b61271082610dc3610e2a565b610dcd9190613f78565b610dd79190613fe9565b60098190555060019050919050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b60165481565b60145481565b6000610e53848484612563565b610f1484610e5f612392565b610f0f85604051806060016040528060288152602001614d8e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ec5612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea89092919063ffffffff16565b61239a565b600190509392505050565b61dead81565b60006012905090565b6000610fd7610f3b612392565b84610fd28560016000610f4c612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0c90919063ffffffff16565b61239a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611063612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990613f29565b60405180910390fd5b670de0b6b3a764000060646001611107610e2a565b6111119190613f78565b61111b9190613fe9565b6111259190613fe9565b811015611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e906141b0565b60405180910390fd5b670de0b6b3a76400008060648361117c610e2a565b6111869190613f78565b6111909190613fe9565b61119a9190613fe9565b6111a491906141d0565b60088190555050565b60105481565b600b60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611216612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c90613f29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61136e612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f490613f29565b60405180910390fd5b611405610e2a565b600881905550611413610e2a565b600a81905550565b611423612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990613f29565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b611541612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c790613f29565b60405180910390fd5b670de0b6b3a7640000606460036115e5610e2a565b6115ef9190613f78565b6115f99190613fe9565b6116039190613fe9565b811015611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c90614276565b60405180910390fd5b670de0b6b3a76400008060648361165a610e2a565b6116649190613f78565b61166e9190613fe9565b6116789190613fe9565b61168291906141d0565b600a8190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6060600480546116ca90613eac565b80601f01602080910402602001604051908101604052809291908181526020018280546116f690613eac565b80156117435780601f1061171857610100808354040283529160200191611743565b820191906000526020600020905b81548152906001019060200180831161172657829003601f168201915b5050505050905090565b611755612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613f29565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990614308565b60405180910390fd5b61187c8282612f6a565b5050565b611888612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613f29565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461193f91906141d0565b61194991906141d0565b601081905550602d6010541115611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c90614374565b60405180910390fd5b505050565b6000611a5d6119a7612392565b84611a5885604051806060016040528060258152602001614db660259139600160006119d1612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea89092919063ffffffff16565b61239a565b6001905092915050565b6000611a7b611a74612392565b8484612563565b6001905092915050565b611a8d612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1390613f29565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60196020528060005260406000206000915054906101000a900460ff1681565b611c0a612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090613f29565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d369190613b6e565b60405180910390a25050565b60085481565b611d50612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd690613f29565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d54611e0791906141d0565b611e1191906141d0565b600c819055506014600c541115611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e54906143e0565b60405180910390fd5b505050565b611e6a612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613f29565b60405180910390fd5b670de0b6b3a764000060646001611f0e610e2a565b611f189190613f78565b611f229190613fe9565b611f2c9190613fe9565b821015611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f65906141b0565b60405180910390fd5b670de0b6b3a764000060646003611f83610e2a565b611f8d9190613f78565b611f979190613fe9565b611fa19190613fe9565b811015611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda90614472565b60405180910390fd5b670de0b6b3a764000080606484611ff8610e2a565b6120029190613f78565b61200c9190613fe9565b6120169190613fe9565b61202091906141d0565b600881905550670de0b6b3a76400008060648361203b610e2a565b6120459190613f78565b61204f9190613fe9565b6120599190613fe9565b61206391906141d0565b600a819055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600f5481565b61210e612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219490613f29565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b600e5481565b6121c8612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90613f29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614504565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240090614596565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f90614628565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125569190613c6c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c9906146ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612641576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126389061474c565b60405180910390fd5b6000810361265a576126558383600061300b565b612ea3565b61266261168b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126d057506126a061168b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127095750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612743575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561275c5750600560149054906101000a900460ff16155b1561299b57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128045750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128ab5760085481111561284e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612845906147de565b60405180910390fd5b600a5461285a836111c6565b8261286591906141d0565b11156128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d9061484a565b60405180910390fd5b61299a565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561294e5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561299957600854811115612998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298f906148dc565b60405180910390fd5b5b5b5b60006129a6306111c6565b9050600060095482101590508080156129cb5750600b60009054906101000a900460ff165b80156129e45750600560149054906101000a900460ff16155b8015612a3a5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a905750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ae65750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2a576001600560146101000a81548160ff021916908315150217905550612b0e61329e565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612be05750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bea57600090505b60008115612e9357601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c4d57506000601054115b15612d1a57612c7a6064612c6c6010548861350f90919063ffffffff16565b61358990919063ffffffff16565b905060105460125482612c8d9190613f78565b612c979190613fe9565b60156000828254612ca891906141d0565b9250508190555060105460115482612cc09190613f78565b612cca9190613fe9565b60146000828254612cdb91906141d0565b9250508190555060105460135482612cf39190613f78565b612cfd9190613fe9565b60166000828254612d0e91906141d0565b92505081905550612e3f565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d7557506000600c54115b15612e3e57612da26064612d94600c548861350f90919063ffffffff16565b61358990919063ffffffff16565b9050600c54600e5482612db59190613f78565b612dbf9190613fe9565b60156000828254612dd091906141d0565b92505081905550600c54600d5482612de89190613f78565b612df29190613fe9565b60146000828254612e0391906141d0565b92505081905550600c54600f5482612e1b9190613f78565b612e259190613fe9565b60166000828254612e3691906141d0565b925050819055505b5b6000811115612e6157612e60873060165484612e5b91906148fc565b61300b565b5b60006016541115612e8457612e7b8761dead60165461300b565b60006016819055505b8085612e9091906148fc565b94505b612e9e87878761300b565b505050505b505050565b6000838311158290612ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee79190613a8a565b60405180910390fd5b5060008385612eff91906148fc565b9050809150509392505050565b6000808284612f1b91906141d0565b905083811015612f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f579061497c565b60405180910390fd5b8091505092915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361307a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613071906146ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e09061474c565b60405180910390fd5b6130f48383836135d3565b61315f81604051806060016040528060268152602001614d68602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131f2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132919190613c6c565b60405180910390a3505050565b60006132a9306111c6565b905060006014546015546132bd91906141d0565b905060008214806132ce5750600081145b156132da57505061350d565b6000600282601554856132ed9190613f78565b6132f79190613fe9565b6133019190613fe9565b9050600061331882856135d890919063ffffffff16565b9050600047905061332882613622565b600061333d82476135d890919063ffffffff16565b905060006133688661335a6014548561350f90919063ffffffff16565b61358990919063ffffffff16565b90506000818361337891906148fc565b9050600060158190555060006014819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516133d2906149cd565b60006040518083038185875af1925050503d806000811461340f576040519150601f19603f3d011682016040523d82523d6000602084013e613414565b606091505b505090506000871180156134285750600082115b1561347557613437878361385f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868360155460405161346c939291906149e2565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516134bb906149cd565b60006040518083038185875af1925050503d80600081146134f8576040519150601f19603f3d011682016040523d82523d6000602084013e6134fd565b606091505b5050809150505050505050505050505b565b60008083036135215760009050613583565b6000828461352f9190613f78565b905082848261353e9190613fe9565b1461357e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357590614a8b565b60405180910390fd5b809150505b92915050565b60006135cb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061393b565b905092915050565b505050565b600061361a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ea8565b905092915050565b6000600267ffffffffffffffff81111561363f5761363e614aab565b5b60405190808252806020026020018201604052801561366d5781602001602082028036833780820191505090505b509050308160008151811061368557613684614ada565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561372a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374e9190614b1e565b8160018151811061376257613761614ada565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137c7307f00000000000000000000000000000000000000000000000000000000000000008461239a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613829959493929190614c44565b600060405180830381600087803b15801561384357600080fd5b505af1158015613857573d6000803e3d6000fd5b505050505050565b61388a307f00000000000000000000000000000000000000000000000000000000000000008461239a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016138f196959493929190614c9e565b60606040518083038185885af115801561390f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139349190614d14565b5050505050565b60008083118290613982576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139799190613a8a565b60405180910390fd5b50600083856139919190613fe9565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139c98261399e565b9050919050565b6139d9816139be565b82525050565b60006020820190506139f460008301846139d0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a34578082015181840152602081019050613a19565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a5c826139fa565b613a668185613a05565b9350613a76818560208601613a16565b613a7f81613a40565b840191505092915050565b60006020820190508181036000830152613aa48184613a51565b905092915050565b600080fd5b613aba816139be565b8114613ac557600080fd5b50565b600081359050613ad781613ab1565b92915050565b6000819050919050565b613af081613add565b8114613afb57600080fd5b50565b600081359050613b0d81613ae7565b92915050565b60008060408385031215613b2a57613b29613aac565b5b6000613b3885828601613ac8565b9250506020613b4985828601613afe565b9150509250929050565b60008115159050919050565b613b6881613b53565b82525050565b6000602082019050613b836000830184613b5f565b92915050565b600060208284031215613b9f57613b9e613aac565b5b6000613bad84828501613afe565b91505092915050565b600060208284031215613bcc57613bcb613aac565b5b6000613bda84828501613ac8565b91505092915050565b6000819050919050565b6000613c08613c03613bfe8461399e565b613be3565b61399e565b9050919050565b6000613c1a82613bed565b9050919050565b6000613c2c82613c0f565b9050919050565b613c3c81613c21565b82525050565b6000602082019050613c576000830184613c33565b92915050565b613c6681613add565b82525050565b6000602082019050613c816000830184613c5d565b92915050565b600080600060608486031215613ca057613c9f613aac565b5b6000613cae86828701613ac8565b9350506020613cbf86828701613ac8565b9250506040613cd086828701613afe565b9150509250925092565b600060ff82169050919050565b613cf081613cda565b82525050565b6000602082019050613d0b6000830184613ce7565b92915050565b613d1a81613b53565b8114613d2557600080fd5b50565b600081359050613d3781613d11565b92915050565b60008060408385031215613d5457613d53613aac565b5b6000613d6285828601613ac8565b9250506020613d7385828601613d28565b9150509250929050565b600080600060608486031215613d9657613d95613aac565b5b6000613da486828701613afe565b9350506020613db586828701613afe565b9250506040613dc686828701613afe565b9150509250925092565b60008060408385031215613de757613de6613aac565b5b6000613df585828601613afe565b9250506020613e0685828601613afe565b9150509250929050565b60008060408385031215613e2757613e26613aac565b5b6000613e3585828601613ac8565b9250506020613e4685828601613ac8565b9150509250929050565b600060208284031215613e6657613e65613aac565b5b6000613e7484828501613d28565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ec457607f821691505b602082108103613ed757613ed6613e7d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f13602083613a05565b9150613f1e82613edd565b602082019050919050565b60006020820190508181036000830152613f4281613f06565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f8382613add565b9150613f8e83613add565b9250828202613f9c81613add565b91508282048414831517613fb357613fb2613f49565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ff482613add565b9150613fff83613add565b92508261400f5761400e613fba565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614076603583613a05565b91506140818261401a565b604082019050919050565b600060208201905081810360008301526140a581614069565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614108603483613a05565b9150614113826140ac565b604082019050919050565b60006020820190508181036000830152614137816140fb565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b600061419a602d83613a05565b91506141a58261413e565b604082019050919050565b600060208201905081810360008301526141c98161418d565b9050919050565b60006141db82613add565b91506141e683613add565b92508282019050808211156141fe576141fd613f49565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f77657260008201527f207468616e203325000000000000000000000000000000000000000000000000602082015250565b6000614260602883613a05565b915061426b82614204565b604082019050919050565b6000602082019050818103600083015261428f81614253565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142f2603983613a05565b91506142fd82614296565b604082019050919050565b60006020820190508181036000830152614321816142e5565b9050919050565b7f4d757374206b656570206665657320617420343525206f72206c657373000000600082015250565b600061435e601d83613a05565b915061436982614328565b602082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006143ca601d83613a05565b91506143d582614394565b602082019050919050565b600060208201905081810360008301526143f9816143bd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3325000000000000000000000000000000000000000000000000000000000000602082015250565b600061445c602283613a05565b915061446782614400565b604082019050919050565b6000602082019050818103600083015261448b8161444f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144ee602683613a05565b91506144f982614492565b604082019050919050565b6000602082019050818103600083015261451d816144e1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614580602483613a05565b915061458b82614524565b604082019050919050565b600060208201905081810360008301526145af81614573565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614612602283613a05565b915061461d826145b6565b604082019050919050565b6000602082019050818103600083015261464181614605565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006146a4602583613a05565b91506146af82614648565b604082019050919050565b600060208201905081810360008301526146d381614697565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614736602383613a05565b9150614741826146da565b604082019050919050565b6000602082019050818103600083015261476581614729565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147c8603583613a05565b91506147d38261476c565b604082019050919050565b600060208201905081810360008301526147f7816147bb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614834601383613a05565b915061483f826147fe565b602082019050919050565b6000602082019050818103600083015261486381614827565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148c6603683613a05565b91506148d18261486a565b604082019050919050565b600060208201905081810360008301526148f5816148b9565b9050919050565b600061490782613add565b915061491283613add565b925082820390508181111561492a57614929613f49565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614966601b83613a05565b915061497182614930565b602082019050919050565b6000602082019050818103600083015261499581614959565b9050919050565b600081905092915050565b50565b60006149b760008361499c565b91506149c2826149a7565b600082019050919050565b60006149d8826149aa565b9150819050919050565b60006060820190506149f76000830186613c5d565b614a046020830185613c5d565b614a116040830184613c5d565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a75602183613a05565b9150614a8082614a19565b604082019050919050565b60006020820190508181036000830152614aa481614a68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b1881613ab1565b92915050565b600060208284031215614b3457614b33613aac565b5b6000614b4284828501614b09565b91505092915050565b6000819050919050565b6000614b70614b6b614b6684614b4b565b613be3565b613add565b9050919050565b614b8081614b55565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bbb816139be565b82525050565b6000614bcd8383614bb2565b60208301905092915050565b6000602082019050919050565b6000614bf182614b86565b614bfb8185614b91565b9350614c0683614ba2565b8060005b83811015614c37578151614c1e8882614bc1565b9750614c2983614bd9565b925050600181019050614c0a565b5085935050505092915050565b600060a082019050614c596000830188613c5d565b614c666020830187614b77565b8181036040830152614c788186614be6565b9050614c8760608301856139d0565b614c946080830184613c5d565b9695505050505050565b600060c082019050614cb360008301896139d0565b614cc06020830188613c5d565b614ccd6040830187614b77565b614cda6060830186614b77565b614ce760808301856139d0565b614cf460a0830184613c5d565b979650505050505050565b600081519050614d0e81613ae7565b92915050565b600080600060608486031215614d2d57614d2c613aac565b5b6000614d3b86828701614cff565b9350506020614d4c86828701614cff565b9250506040614d5d86828701614cff565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205195518ce58e4c410fd274350d2beb95333207786037ad5ab6b566d0a2b702fc64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80637bce5a0411610175578063c0246668116100dc578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610ad7578063f2fde38b14610b02578063f637434214610b2b578063f8b45b0514610b56576102b9565b8063e2f4560514610a58578063e71dc3f514610a83578063e81ea6a914610aae576102b9565b8063c02466681461094a578063c8c8ebe414610973578063cd7b33ab1461099e578063d0243792146109c7578063d85ba063146109f0578063dd62ed3e14610a1b576102b9565b8063a3d14e721161012e578063a3d14e7214610816578063a457c2d71461083f578063a9059cbb1461087c578063aacebbe3146108b9578063adb873bd146108e2578063b62496f51461090d576102b9565b80637bce5a041461071857806381bfdcca146107435780638da5cb5b1461076c578063921369131461079757806395d89b41146107c25780639a7a23d6146107ed576102b9565b8063313ce567116102195780636ddd1713116101d25780636ddd17131461062e57806370a0823114610659578063715018a614610696578063751039fc146106ad5780637571336a146106c457806375f0a874146106ed576102b9565b8063313ce5671461050a578063395093511461053557806349bd5a5e146105725780634fbee1931461059d578063677daa57146105da5780636a486a8e14610603576102b9565b806318160ddd1161026b57806318160ddd146103f65780631a8145bb146104215780631d7778561461044c5780631f3fed8f1461047757806323b872dd146104a257806327c8f835146104df576102b9565b806303fc2013146102be57806306fdde03146102e9578063095ea7b31461031457806309d6bf0a1461035157806310d5de531461038e5780631694505e146103cb576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b81565b6040516102e091906139df565b60405180910390f35b3480156102f557600080fd5b506102fe610ba7565b60405161030b9190613a8a565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613b13565b610c39565b6040516103489190613b6e565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190613b89565b610c57565b6040516103859190613b6e565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190613bb6565b610de6565b6040516103c29190613b6e565b60405180910390f35b3480156103d757600080fd5b506103e0610e06565b6040516103ed9190613c42565b60405180910390f35b34801561040257600080fd5b5061040b610e2a565b6040516104189190613c6c565b60405180910390f35b34801561042d57600080fd5b50610436610e34565b6040516104439190613c6c565b60405180910390f35b34801561045857600080fd5b50610461610e3a565b60405161046e9190613c6c565b60405180910390f35b34801561048357600080fd5b5061048c610e40565b6040516104999190613c6c565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613c87565b610e46565b6040516104d69190613b6e565b60405180910390f35b3480156104eb57600080fd5b506104f4610f1f565b60405161050191906139df565b60405180910390f35b34801561051657600080fd5b5061051f610f25565b60405161052c9190613cf6565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190613b13565b610f2e565b6040516105699190613b6e565b60405180910390f35b34801561057e57600080fd5b50610587610fe1565b60405161059491906139df565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190613bb6565b611005565b6040516105d19190613b6e565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190613b89565b61105b565b005b34801561060f57600080fd5b506106186111ad565b6040516106259190613c6c565b60405180910390f35b34801561063a57600080fd5b506106436111b3565b6040516106509190613b6e565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190613bb6565b6111c6565b60405161068d9190613c6c565b60405180910390f35b3480156106a257600080fd5b506106ab61120e565b005b3480156106b957600080fd5b506106c2611366565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613d3d565b61141b565b005b3480156106f957600080fd5b5061070261150d565b60405161070f91906139df565b60405180910390f35b34801561072457600080fd5b5061072d611533565b60405161073a9190613c6c565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613b89565b611539565b005b34801561077857600080fd5b5061078161168b565b60405161078e91906139df565b60405180910390f35b3480156107a357600080fd5b506107ac6116b5565b6040516107b99190613c6c565b60405180910390f35b3480156107ce57600080fd5b506107d76116bb565b6040516107e49190613a8a565b60405180910390f35b3480156107f957600080fd5b50610814600480360381019061080f9190613d3d565b61174d565b005b34801561082257600080fd5b5061083d60048036038101906108389190613d7d565b611880565b005b34801561084b57600080fd5b5061086660048036038101906108619190613b13565b61199a565b6040516108739190613b6e565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e9190613b13565b611a67565b6040516108b09190613b6e565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190613bb6565b611a85565b005b3480156108ee57600080fd5b506108f7611bdc565b6040516109049190613c6c565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613bb6565b611be2565b6040516109419190613b6e565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c9190613d3d565b611c02565b005b34801561097f57600080fd5b50610988611d42565b6040516109959190613c6c565b60405180910390f35b3480156109aa57600080fd5b506109c560048036038101906109c09190613d7d565b611d48565b005b3480156109d357600080fd5b506109ee60048036038101906109e99190613dd0565b611e62565b005b3480156109fc57600080fd5b50610a0561206d565b604051610a129190613c6c565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d9190613e10565b612073565b604051610a4f9190613c6c565b60405180910390f35b348015610a6457600080fd5b50610a6d6120fa565b604051610a7a9190613c6c565b60405180910390f35b348015610a8f57600080fd5b50610a98612100565b604051610aa59190613c6c565b60405180910390f35b348015610aba57600080fd5b50610ad56004803603810190610ad09190613e50565b612106565b005b348015610ae357600080fd5b50610aec6121ba565b604051610af99190613c6c565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190613bb6565b6121c0565b005b348015610b3757600080fd5b50610b40612386565b604051610b4d9190613c6c565b60405180910390f35b348015610b6257600080fd5b50610b6b61238c565b604051610b789190613c6c565b60405180910390f35b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610bb690613eac565b80601f0160208091040260200160405190810160405280929190818152602001828054610be290613eac565b8015610c2f5780601f10610c0457610100808354040283529160200191610c2f565b820191906000526020600020905b815481529060010190602001808311610c1257829003601f168201915b5050505050905090565b6000610c4d610c46612392565b848461239a565b6001905092915050565b6000610c61612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790613f29565b60405180910390fd5b620186a06001610cfe610e2a565b610d089190613f78565b610d129190613fe9565b821015610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b9061408c565b60405180910390fd5b6103e86005610d61610e2a565b610d6b9190613f78565b610d759190613fe9565b821115610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae9061411e565b60405180910390fd5b61271082610dc3610e2a565b610dcd9190613f78565b610dd79190613fe9565b60098190555060019050919050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b60165481565b60145481565b6000610e53848484612563565b610f1484610e5f612392565b610f0f85604051806060016040528060288152602001614d8e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ec5612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea89092919063ffffffff16565b61239a565b600190509392505050565b61dead81565b60006012905090565b6000610fd7610f3b612392565b84610fd28560016000610f4c612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0c90919063ffffffff16565b61239a565b6001905092915050565b7f000000000000000000000000c8a219c9624744b40b381d9251b9a4a1d7d0696881565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611063612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990613f29565b60405180910390fd5b670de0b6b3a764000060646001611107610e2a565b6111119190613f78565b61111b9190613fe9565b6111259190613fe9565b811015611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e906141b0565b60405180910390fd5b670de0b6b3a76400008060648361117c610e2a565b6111869190613f78565b6111909190613fe9565b61119a9190613fe9565b6111a491906141d0565b60088190555050565b60105481565b600b60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611216612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c90613f29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61136e612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f490613f29565b60405180910390fd5b611405610e2a565b600881905550611413610e2a565b600a81905550565b611423612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990613f29565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b611541612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c790613f29565b60405180910390fd5b670de0b6b3a7640000606460036115e5610e2a565b6115ef9190613f78565b6115f99190613fe9565b6116039190613fe9565b811015611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c90614276565b60405180910390fd5b670de0b6b3a76400008060648361165a610e2a565b6116649190613f78565b61166e9190613fe9565b6116789190613fe9565b61168291906141d0565b600a8190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6060600480546116ca90613eac565b80601f01602080910402602001604051908101604052809291908181526020018280546116f690613eac565b80156117435780601f1061171857610100808354040283529160200191611743565b820191906000526020600020905b81548152906001019060200180831161172657829003601f168201915b5050505050905090565b611755612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613f29565b60405180910390fd5b7f000000000000000000000000c8a219c9624744b40b381d9251b9a4a1d7d0696873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990614308565b60405180910390fd5b61187c8282612f6a565b5050565b611888612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613f29565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461193f91906141d0565b61194991906141d0565b601081905550602d6010541115611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c90614374565b60405180910390fd5b505050565b6000611a5d6119a7612392565b84611a5885604051806060016040528060258152602001614db660259139600160006119d1612392565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea89092919063ffffffff16565b61239a565b6001905092915050565b6000611a7b611a74612392565b8484612563565b6001905092915050565b611a8d612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1390613f29565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60196020528060005260406000206000915054906101000a900460ff1681565b611c0a612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090613f29565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d369190613b6e565b60405180910390a25050565b60085481565b611d50612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd690613f29565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d54611e0791906141d0565b611e1191906141d0565b600c819055506014600c541115611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e54906143e0565b60405180910390fd5b505050565b611e6a612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613f29565b60405180910390fd5b670de0b6b3a764000060646001611f0e610e2a565b611f189190613f78565b611f229190613fe9565b611f2c9190613fe9565b821015611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f65906141b0565b60405180910390fd5b670de0b6b3a764000060646003611f83610e2a565b611f8d9190613f78565b611f979190613fe9565b611fa19190613fe9565b811015611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda90614472565b60405180910390fd5b670de0b6b3a764000080606484611ff8610e2a565b6120029190613f78565b61200c9190613fe9565b6120169190613fe9565b61202091906141d0565b600881905550670de0b6b3a76400008060648361203b610e2a565b6120459190613f78565b61204f9190613fe9565b6120599190613fe9565b61206391906141d0565b600a819055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600f5481565b61210e612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219490613f29565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b600e5481565b6121c8612392565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90613f29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614504565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240090614596565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f90614628565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125569190613c6c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c9906146ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612641576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126389061474c565b60405180910390fd5b6000810361265a576126558383600061300b565b612ea3565b61266261168b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126d057506126a061168b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127095750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612743575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561275c5750600560149054906101000a900460ff16155b1561299b57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128045750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128ab5760085481111561284e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612845906147de565b60405180910390fd5b600a5461285a836111c6565b8261286591906141d0565b11156128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d9061484a565b60405180910390fd5b61299a565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561294e5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561299957600854811115612998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298f906148dc565b60405180910390fd5b5b5b5b60006129a6306111c6565b9050600060095482101590508080156129cb5750600b60009054906101000a900460ff165b80156129e45750600560149054906101000a900460ff16155b8015612a3a5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a905750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ae65750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2a576001600560146101000a81548160ff021916908315150217905550612b0e61329e565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612be05750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bea57600090505b60008115612e9357601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c4d57506000601054115b15612d1a57612c7a6064612c6c6010548861350f90919063ffffffff16565b61358990919063ffffffff16565b905060105460125482612c8d9190613f78565b612c979190613fe9565b60156000828254612ca891906141d0565b9250508190555060105460115482612cc09190613f78565b612cca9190613fe9565b60146000828254612cdb91906141d0565b9250508190555060105460135482612cf39190613f78565b612cfd9190613fe9565b60166000828254612d0e91906141d0565b92505081905550612e3f565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d7557506000600c54115b15612e3e57612da26064612d94600c548861350f90919063ffffffff16565b61358990919063ffffffff16565b9050600c54600e5482612db59190613f78565b612dbf9190613fe9565b60156000828254612dd091906141d0565b92505081905550600c54600d5482612de89190613f78565b612df29190613fe9565b60146000828254612e0391906141d0565b92505081905550600c54600f5482612e1b9190613f78565b612e259190613fe9565b60166000828254612e3691906141d0565b925050819055505b5b6000811115612e6157612e60873060165484612e5b91906148fc565b61300b565b5b60006016541115612e8457612e7b8761dead60165461300b565b60006016819055505b8085612e9091906148fc565b94505b612e9e87878761300b565b505050505b505050565b6000838311158290612ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee79190613a8a565b60405180910390fd5b5060008385612eff91906148fc565b9050809150509392505050565b6000808284612f1b91906141d0565b905083811015612f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f579061497c565b60405180910390fd5b8091505092915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361307a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613071906146ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e09061474c565b60405180910390fd5b6130f48383836135d3565b61315f81604051806060016040528060268152602001614d68602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131f2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132919190613c6c565b60405180910390a3505050565b60006132a9306111c6565b905060006014546015546132bd91906141d0565b905060008214806132ce5750600081145b156132da57505061350d565b6000600282601554856132ed9190613f78565b6132f79190613fe9565b6133019190613fe9565b9050600061331882856135d890919063ffffffff16565b9050600047905061332882613622565b600061333d82476135d890919063ffffffff16565b905060006133688661335a6014548561350f90919063ffffffff16565b61358990919063ffffffff16565b90506000818361337891906148fc565b9050600060158190555060006014819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516133d2906149cd565b60006040518083038185875af1925050503d806000811461340f576040519150601f19603f3d011682016040523d82523d6000602084013e613414565b606091505b505090506000871180156134285750600082115b1561347557613437878361385f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868360155460405161346c939291906149e2565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516134bb906149cd565b60006040518083038185875af1925050503d80600081146134f8576040519150601f19603f3d011682016040523d82523d6000602084013e6134fd565b606091505b5050809150505050505050505050505b565b60008083036135215760009050613583565b6000828461352f9190613f78565b905082848261353e9190613fe9565b1461357e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357590614a8b565b60405180910390fd5b809150505b92915050565b60006135cb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061393b565b905092915050565b505050565b600061361a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ea8565b905092915050565b6000600267ffffffffffffffff81111561363f5761363e614aab565b5b60405190808252806020026020018201604052801561366d5781602001602082028036833780820191505090505b509050308160008151811061368557613684614ada565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561372a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374e9190614b1e565b8160018151811061376257613761614ada565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137c7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461239a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613829959493929190614c44565b600060405180830381600087803b15801561384357600080fd5b505af1158015613857573d6000803e3d6000fd5b505050505050565b61388a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461239a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016138f196959493929190614c9e565b60606040518083038185885af115801561390f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139349190614d14565b5050505050565b60008083118290613982576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139799190613a8a565b60405180910390fd5b50600083856139919190613fe9565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139c98261399e565b9050919050565b6139d9816139be565b82525050565b60006020820190506139f460008301846139d0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a34578082015181840152602081019050613a19565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a5c826139fa565b613a668185613a05565b9350613a76818560208601613a16565b613a7f81613a40565b840191505092915050565b60006020820190508181036000830152613aa48184613a51565b905092915050565b600080fd5b613aba816139be565b8114613ac557600080fd5b50565b600081359050613ad781613ab1565b92915050565b6000819050919050565b613af081613add565b8114613afb57600080fd5b50565b600081359050613b0d81613ae7565b92915050565b60008060408385031215613b2a57613b29613aac565b5b6000613b3885828601613ac8565b9250506020613b4985828601613afe565b9150509250929050565b60008115159050919050565b613b6881613b53565b82525050565b6000602082019050613b836000830184613b5f565b92915050565b600060208284031215613b9f57613b9e613aac565b5b6000613bad84828501613afe565b91505092915050565b600060208284031215613bcc57613bcb613aac565b5b6000613bda84828501613ac8565b91505092915050565b6000819050919050565b6000613c08613c03613bfe8461399e565b613be3565b61399e565b9050919050565b6000613c1a82613bed565b9050919050565b6000613c2c82613c0f565b9050919050565b613c3c81613c21565b82525050565b6000602082019050613c576000830184613c33565b92915050565b613c6681613add565b82525050565b6000602082019050613c816000830184613c5d565b92915050565b600080600060608486031215613ca057613c9f613aac565b5b6000613cae86828701613ac8565b9350506020613cbf86828701613ac8565b9250506040613cd086828701613afe565b9150509250925092565b600060ff82169050919050565b613cf081613cda565b82525050565b6000602082019050613d0b6000830184613ce7565b92915050565b613d1a81613b53565b8114613d2557600080fd5b50565b600081359050613d3781613d11565b92915050565b60008060408385031215613d5457613d53613aac565b5b6000613d6285828601613ac8565b9250506020613d7385828601613d28565b9150509250929050565b600080600060608486031215613d9657613d95613aac565b5b6000613da486828701613afe565b9350506020613db586828701613afe565b9250506040613dc686828701613afe565b9150509250925092565b60008060408385031215613de757613de6613aac565b5b6000613df585828601613afe565b9250506020613e0685828601613afe565b9150509250929050565b60008060408385031215613e2757613e26613aac565b5b6000613e3585828601613ac8565b9250506020613e4685828601613ac8565b9150509250929050565b600060208284031215613e6657613e65613aac565b5b6000613e7484828501613d28565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ec457607f821691505b602082108103613ed757613ed6613e7d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f13602083613a05565b9150613f1e82613edd565b602082019050919050565b60006020820190508181036000830152613f4281613f06565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f8382613add565b9150613f8e83613add565b9250828202613f9c81613add565b91508282048414831517613fb357613fb2613f49565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ff482613add565b9150613fff83613add565b92508261400f5761400e613fba565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614076603583613a05565b91506140818261401a565b604082019050919050565b600060208201905081810360008301526140a581614069565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614108603483613a05565b9150614113826140ac565b604082019050919050565b60006020820190508181036000830152614137816140fb565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b600061419a602d83613a05565b91506141a58261413e565b604082019050919050565b600060208201905081810360008301526141c98161418d565b9050919050565b60006141db82613add565b91506141e683613add565b92508282019050808211156141fe576141fd613f49565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f77657260008201527f207468616e203325000000000000000000000000000000000000000000000000602082015250565b6000614260602883613a05565b915061426b82614204565b604082019050919050565b6000602082019050818103600083015261428f81614253565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142f2603983613a05565b91506142fd82614296565b604082019050919050565b60006020820190508181036000830152614321816142e5565b9050919050565b7f4d757374206b656570206665657320617420343525206f72206c657373000000600082015250565b600061435e601d83613a05565b915061436982614328565b602082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006143ca601d83613a05565b91506143d582614394565b602082019050919050565b600060208201905081810360008301526143f9816143bd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3325000000000000000000000000000000000000000000000000000000000000602082015250565b600061445c602283613a05565b915061446782614400565b604082019050919050565b6000602082019050818103600083015261448b8161444f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144ee602683613a05565b91506144f982614492565b604082019050919050565b6000602082019050818103600083015261451d816144e1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614580602483613a05565b915061458b82614524565b604082019050919050565b600060208201905081810360008301526145af81614573565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614612602283613a05565b915061461d826145b6565b604082019050919050565b6000602082019050818103600083015261464181614605565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006146a4602583613a05565b91506146af82614648565b604082019050919050565b600060208201905081810360008301526146d381614697565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614736602383613a05565b9150614741826146da565b604082019050919050565b6000602082019050818103600083015261476581614729565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147c8603583613a05565b91506147d38261476c565b604082019050919050565b600060208201905081810360008301526147f7816147bb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614834601383613a05565b915061483f826147fe565b602082019050919050565b6000602082019050818103600083015261486381614827565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148c6603683613a05565b91506148d18261486a565b604082019050919050565b600060208201905081810360008301526148f5816148b9565b9050919050565b600061490782613add565b915061491283613add565b925082820390508181111561492a57614929613f49565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614966601b83613a05565b915061497182614930565b602082019050919050565b6000602082019050818103600083015261499581614959565b9050919050565b600081905092915050565b50565b60006149b760008361499c565b91506149c2826149a7565b600082019050919050565b60006149d8826149aa565b9150819050919050565b60006060820190506149f76000830186613c5d565b614a046020830185613c5d565b614a116040830184613c5d565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a75602183613a05565b9150614a8082614a19565b604082019050919050565b60006020820190508181036000830152614aa481614a68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b1881613ab1565b92915050565b600060208284031215614b3457614b33613aac565b5b6000614b4284828501614b09565b91505092915050565b6000819050919050565b6000614b70614b6b614b6684614b4b565b613be3565b613add565b9050919050565b614b8081614b55565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bbb816139be565b82525050565b6000614bcd8383614bb2565b60208301905092915050565b6000602082019050919050565b6000614bf182614b86565b614bfb8185614b91565b9350614c0683614ba2565b8060005b83811015614c37578151614c1e8882614bc1565b9750614c2983614bd9565b925050600181019050614c0a565b5085935050505092915050565b600060a082019050614c596000830188613c5d565b614c666020830187614b77565b8181036040830152614c788186614be6565b9050614c8760608301856139d0565b614c946080830184613c5d565b9695505050505050565b600060c082019050614cb360008301896139d0565b614cc06020830188613c5d565b614ccd6040830187614b77565b614cda6060830186614b77565b614ce760808301856139d0565b614cf460a0830184613c5d565b979650505050505050565b600081519050614d0e81613ae7565b92915050565b600080600060608486031215614d2d57614d2c613aac565b5b6000614d3b86828701614cff565b9350506020614d4c86828701614cff565b9250506040614d5d86828701614cff565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205195518ce58e4c410fd274350d2beb95333207786037ad5ab6b566d0a2b702fc64736f6c63430008130033

Deployed Bytecode Sourcemap

16109:11155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16397:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5139:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5965:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19705:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17002:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16178:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5424:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16874:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16911:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16837:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6124:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16277:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5335:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6442:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16235:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22901:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20095:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16702:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16535:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5528:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10345:133;;;;;;;;;;;;;:::i;:::-;;21062:119;;;;;;;;;;;;;:::i;:::-;;21187:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16363:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16602;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20347:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10165:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16734:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5235:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22295:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21769:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6650:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5651:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22703:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16804:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17072:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22123:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16427:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21424:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20586:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16571:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5818:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16466:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16670:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21327:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16636:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10481:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16769:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16505:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16397:23;;;;;;;;;;;;;:::o;5139:91::-;5193:13;5220:5;5213:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5139:91;:::o;5965:154::-;6048:4;6059:39;6068:12;:10;:12::i;:::-;6082:7;6091:6;6059:8;:39::i;:::-;6110:4;6103:11;;5965:154;;;;:::o;19705:384::-;19786:4;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19837:6:::1;19833:1;19817:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;19804:9;:39;;19796:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;19947:4;19943:1;19927:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;19914:9;:37;;19906:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;20062:5;20050:9;20034:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:33;;;;:::i;:::-;20013:18;:54;;;;20079:4;20072:11;;19705:384:::0;;;:::o;17002:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;16178:51::-;;;:::o;5424:99::-;5485:7;5506:12;;5499:19;;5424:99;:::o;16874:33::-;;;;:::o;16911:28::-;;;;:::o;16837:33::-;;;;:::o;6124:313::-;6243:4;6254:36;6264:6;6272:9;6283:6;6254:9;:36::i;:::-;6295:121;6304:6;6312:12;:10;:12::i;:::-;6326:89;6364:6;6326:89;;;;;;;;;;;;;;;;;:11;:19;6338:6;6326:19;;;;;;;;;;;;;;;:33;6346:12;:10;:12::i;:::-;6326:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6295:8;:121::i;:::-;6428:4;6421:11;;6124:313;;;;;:::o;16277:53::-;16323:6;16277:53;:::o;5335:84::-;5393:5;5412:2;5405:9;;5335:84;:::o;6442:203::-;6530:4;6541:83;6550:12;:10;:12::i;:::-;6564:7;6573:50;6612:10;6573:11;:25;6585:12;:10;:12::i;:::-;6573:25;;;;;;;;;;;;;;;:34;6599:7;6573:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6541:8;:83::i;:::-;6636:4;6629:11;;6442:203;;;;:::o;16235:38::-;;;:::o;22901:116::-;22966:4;22984:19;:28;23004:7;22984:28;;;;;;;;;;;;;;;;;;;;;;;;;22977:35;;22901:116;;;:::o;20095:246::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20206:4:::1;20201:3;20197:1;20181:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;20180:30;;;;:::i;:::-;20170:6;:40;;20162:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;20327:8;20319:4:::0;20314:3:::1;20305:6;20289:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;20288:35;;;;:::i;:::-;:48;;;;:::i;:::-;20265:20;:71;;;;20095:246:::0;:::o;16702:28::-;;;;:::o;16535:30::-;;;;;;;;;;;;;:::o;5528:118::-;5602:7;5623:9;:18;5633:7;5623:18;;;;;;;;;;;;;;;;5616:25;;5528:118;;;:::o;10345:133::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10446:1:::1;10409:40;;10430:6;;;;;;;;;;;10409:40;;;;;;;;;;;;10471:1;10454:6;;:19;;;;;;;;;;;;;;;;;;10345:133::o:0;21062:119::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21133:13:::1;:11;:13::i;:::-;21110:20;:36;;;;21163:13;:11;:13::i;:::-;21151:9;:25;;;;21062:119::o:0;21187:135::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21313:4:::1;21271:31;:39;21303:6;21271:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21187:135:::0;;:::o;16363:30::-;;;;;;;;;;;;;:::o;16602:::-;;;;:::o;20347:234::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20462:4:::1;20457:3;20453:1;20437:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;20436:30;;;;:::i;:::-;20426:6;:40;;20418:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;20567:8;20559:4:::0;20554:3:::1;20545:6;20529:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;20528:35;;;;:::i;:::-;:48;;;;:::i;:::-;20516:9;:60;;;;20347:234:::0;:::o;10165:70::-;10203:7;10224:6;;;;;;;;;;;10217:13;;10165:70;:::o;16734:31::-;;;;:::o;5235:95::-;5291:13;5318:7;5311:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5235:95;:::o;22295:227::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22396:13:::1;22388:21;;:4;:21;;::::0;22380:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22476:41;22505:4;22511:5;22476:28;:41::i;:::-;22295:227:::0;;:::o;21769:349::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21900:13:::1;21881:16;:32;;;;21937:13;21918:16;:32;;;;21969:8;21955:11;:22;;;;22036:11;;22017:16;;21998;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;21982:13;:65;;;;22077:2;22060:13;;:19;;22052:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21769:349:::0;;;:::o;6650:256::-;6743:4;6754:129;6763:12;:10;:12::i;:::-;6777:7;6786:96;6825:15;6786:96;;;;;;;;;;;;;;;;;:11;:25;6798:12;:10;:12::i;:::-;6786:25;;;;;;;;;;;;;;;:34;6812:7;6786:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6754:8;:129::i;:::-;6895:4;6888:11;;6650:256;;;;:::o;5651:160::-;5737:4;5748:42;5758:12;:10;:12::i;:::-;5772:9;5783:6;5748:9;:42::i;:::-;5802:4;5795:11;;5651:160;;;;:::o;22703:193::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22834:15:::1;;;;;;;;;;;22791:59;;22814:18;22791:59;;;;;;;;;;;;22873:18;22855:15;;:36;;;;;;;;;;;;;;;;;;22703:193:::0;:::o;16804:26::-;;;;:::o;17072:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;22123:167::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22233:8:::1;22202:19;:28;22222:7;22202:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22267:7;22251:34;;;22276:8;22251:34;;;;;;:::i;:::-;;;;;;;;22123:167:::0;;:::o;16427:35::-;;;;:::o;21424:340::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21553:13:::1;21535:15;:31;;;;21589:13;21571:15;:31;;;;21620:8;21607:10;:21;;;;21684:10;;21666:15;;21648;;:33;;;;:::i;:::-;:46;;;;:::i;:::-;21633:12;:61;;;;21723:2;21707:12;;:18;;21699:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21424:340:::0;;;:::o;20586:471::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20742:4:::1;20737:3;20733:1;20717:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;20716:30;;;;:::i;:::-;20691:21;:55;;20683:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;20849:4;20844:3;20840:1;20824:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;20823:30;;;;:::i;:::-;20809:10;:44;;20801:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;20974:8;20966:4:::0;20961:3:::1;20937:21;20921:13;:11;:13::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;20920:50;;;;:::i;:::-;:63;;;;:::i;:::-;20897:20;:86;;;;21043:8;21035:4:::0;21030:3:::1;21017:10;21001:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:32;;;;:::i;:::-;21000:39;;;;:::i;:::-;:52;;;;:::i;:::-;20988:9;:64;;;;20586:471:::0;;:::o;16571:27::-;;;;:::o;5818:142::-;5907:7;5928:11;:18;5940:5;5928:18;;;;;;;;;;;;;;;:27;5947:7;5928:27;;;;;;;;;;;;;;;;5921:34;;5818:142;;;;:::o;16466:33::-;;;;:::o;16670:25::-;;;;:::o;21327:92::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21407:7:::1;21393:11;;:21;;;;;;;;;;;;;;;;;;21327:92:::0;:::o;16636:30::-;;;;:::o;10481:223::-;10282:12;:10;:12::i;:::-;10272:22;;:6;;;;;;;;;;;:22;;;10264:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10584:1:::1;10564:22;;:8;:22;;::::0;10556:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10668:8;10639:38;;10660:6;;;;;;;;;;;10639:38;;;;;;;;;;;;10691:8;10682:6;;:17;;;;;;;;;;;;;;;;;;10481:223:::0;:::o;16769:31::-;;;;:::o;16505:24::-;;;;:::o;745:89::-;798:7;819:10;812:17;;745:89;:::o;8164:330::-;8290:1;8273:19;;:5;:19;;;8265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8365:1;8346:21;;:7;:21;;;8338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8441:6;8411:11;:18;8423:5;8411:18;;;;;;;;;;;;;;;:27;8430:7;8411:27;;;;;;;;;;;;;;;:36;;;;8473:7;8457:32;;8466:5;8457:32;;;8482:6;8457:32;;;;;;:::i;:::-;;;;;;;;8164:330;;;:::o;23022:2428::-;23143:1;23127:18;;:4;:18;;;23119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23214:1;23200:16;;:2;:16;;;23192:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23278:1;23268:6;:11;23265:68;;23287:28;23303:4;23309:2;23313:1;23287:15;:28::i;:::-;23321:7;;23265:68;23356:7;:5;:7::i;:::-;23348:15;;:4;:15;;;;:39;;;;;23380:7;:5;:7::i;:::-;23374:13;;:2;:13;;;;23348:39;:64;;;;;23410:1;23396:16;;:2;:16;;;;23348:64;:94;;;;;23435:6;23421:21;;:2;:21;;;;23348:94;:112;;;;;23452:8;;;;;;;;;;;23451:9;23348:112;23338:650;;;23493:25;:31;23519:4;23493:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;23529:31;:35;23561:2;23529:35;;;;;;;;;;;;;;;;;;;;;;;;;23528:36;23493:71;23489:493;;;23593:20;;23583:6;:30;;23575:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;23714:9;;23697:13;23707:2;23697:9;:13::i;:::-;23688:6;:22;;;;:::i;:::-;:35;;23680:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23489:493;;;23795:25;:29;23821:2;23795:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;23829:31;:37;23861:4;23829:37;;;;;;;;;;;;;;;;;;;;;;;;;23828:38;23795:71;23791:191;;;23895:20;;23885:6;:30;;23877:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;23791:191;23489:493;23338:650;23992:28;24023:24;24041:4;24023:9;:24::i;:::-;23992:55;;24052:12;24091:18;;24067:20;:42;;24052:57;;24125:7;:26;;;;;24140:11;;;;;;;;;;;24125:26;:43;;;;;24160:8;;;;;;;;;;;24159:9;24125:43;:83;;;;;24177:25;:31;24203:4;24177:31;;;;;;;;;;;;;;;;;;;;;;;;;24176:32;24125:83;:117;;;;;24217:19;:25;24237:4;24217:25;;;;;;;;;;;;;;;;;;;;;;;;;24216:26;24125:117;:149;;;;;24251:19;:23;24271:2;24251:23;;;;;;;;;;;;;;;;;;;;;;;;;24250:24;24125:149;24116:230;;;24297:4;24286:8;;:15;;;;;;;;;;;;;;;;;;24308:10;:8;:10::i;:::-;24335:5;24324:8;;:16;;;;;;;;;;;;;;;;;;24116:230;24350:12;24366:8;;;;;;;;;;;24365:9;24350:24;;24384:19;:25;24404:4;24384:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24413:19;:23;24433:2;24413:23;;;;;;;;;;;;;;;;;;;;;;;;;24384:52;24381:84;;;24454:5;24444:15;;24381:84;24469:12;24493:7;24490:918;;;24536:25;:29;24562:2;24536:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24585:1;24569:13;;:17;24536:50;24532:636;;;24601:34;24631:3;24601:25;24612:13;;24601:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;24594:41;;24690:13;;24671:16;;24664:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24642:18;;:61;;;;;;;:::i;:::-;;;;;;;;24758:13;;24739:16;;24732:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24710:18;;:61;;;;;;;:::i;:::-;;;;;;;;24816:13;;24802:11;;24795:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;24778:13;;:51;;;;;;;:::i;:::-;;;;;;;;24532:636;;;24873:25;:31;24899:4;24873:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24923:1;24908:12;;:16;24873:51;24870:298;;;24940:33;24969:3;24940:24;24951:12;;24940:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24933:40;;25027:12;;25009:15;;25002:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24980:18;;:59;;;;;;;:::i;:::-;;;;;;;;25093:12;;25075:15;;25068:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25046:18;;:59;;;;;;;:::i;:::-;;;;;;;;25149:12;;25136:10;;25129:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;25112:13;;:49;;;;;;;:::i;:::-;;;;;;;;24870:298;24532:636;25188:1;25181:4;:8;25178:90;;;25201:60;25217:4;25231;25246:13;;25239:4;:20;;;;:::i;:::-;25201:15;:60::i;:::-;25178:90;25294:1;25278:13;;:17;25275:108;;;25303:49;25319:4;16323:6;25338:13;;25303:15;:49::i;:::-;25375:1;25359:13;:17;;;;25275:108;25398:4;25388:14;;;;;:::i;:::-;;;24490:918;25412:33;25428:4;25434:2;25438:6;25412:15;:33::i;:::-;23114:2336;;;;23022:2428;;;;:::o;8924:169::-;9010:7;9037:1;9032;:6;;9040:12;9024:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9058:9;9074:1;9070;:5;;;;:::i;:::-;9058:17;;9087:1;9080:8;;;8924:169;;;;;:::o;8633:158::-;8691:7;8705:9;8721:1;8717;:5;;;;:::i;:::-;8705:17;;8740:1;8735;:6;;8727:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8785:1;8778:8;;;8633:158;;;;:::o;22527:171::-;22638:5;22604:25;:31;22630:4;22604:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22687:5;22653:40;;22681:4;22653:40;;;;;;;;;;;;22527:171;;:::o;6911:510::-;7043:1;7025:20;;:6;:20;;;7017:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7121:1;7100:23;;:9;:23;;;7092:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7168:47;7189:6;7197:9;7208:6;7168:20;:47::i;:::-;7240:71;7262:6;7240:71;;;;;;;;;;;;;;;;;:9;:17;7250:6;7240:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7220:9;:17;7230:6;7220:17;;;;;;;;;;;;;;;:91;;;;7339:32;7364:6;7339:9;:20;7349:9;7339:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7316:9;:20;7326:9;7316:20;;;;;;;;;;;;;;;:55;;;;7398:9;7381:35;;7390:6;7381:35;;;7409:6;7381:35;;;;;;:::i;:::-;;;;;;;;6911:510;;;:::o;26141:1117::-;26174:23;26200:24;26218:4;26200:9;:24::i;:::-;26174:50;;26229:25;26278:18;;26257;;:39;;;;:::i;:::-;26229:67;;26327:1;26308:15;:20;:46;;;;26353:1;26332:17;:22;26308:46;26305:60;;;26357:7;;;;26305:60;26369:23;26454:1;26434:17;26413:18;;26395:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;26369:86;;26460:26;26489:36;26509:15;26489;:19;;:36;;;;:::i;:::-;26460:65;;26530:25;26558:21;26530:49;;26584:36;26601:18;26584:16;:36::i;:::-;26626:18;26647:44;26673:17;26647:21;:25;;:44;;;;:::i;:::-;26626:65;;26696:23;26722:57;26761:17;26722:34;26737:18;;26722:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;26696:83;;26786:23;26825:15;26812:10;:28;;;;:::i;:::-;26786:54;;26868:1;26847:18;:22;;;;26895:1;26874:18;:22;;;;26906:12;26931:15;;;;;;;;;;;26923:29;;26960:15;26923:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26905:75;;;27006:1;26988:15;:19;:42;;;;;27029:1;27011:15;:19;26988:42;26985:186;;;27037:46;27050:15;27067;27037:12;:46::i;:::-;27094:71;27109:18;27129:15;27146:18;;27094:71;;;;;;;;:::i;:::-;;;;;;;;26985:186;27198:15;;;;;;;;;;;27190:29;;27227:21;27190:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27177:76;;;;;26169:1089;;;;;;;;;26141:1117;:::o;9096:204::-;9154:7;9177:1;9172;:6;9168:32;;9193:1;9186:8;;;;9168:32;9204:9;9220:1;9216;:5;;;;:::i;:::-;9204:17;;9243:1;9238;9234;:5;;;;:::i;:::-;:10;9226:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9294:1;9287:8;;;9096:204;;;;;:::o;9303:123::-;9361:7;9382:39;9386:1;9389;9382:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9375:46;;9303:123;;;;:::o;8499:104::-;;;;:::o;8794:127::-;8852:7;8873:43;8877:1;8880;8873:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8866:50;;8794:127;;;;:::o;25455:387::-;25515:21;25553:1;25539:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25515:40;;25578:4;25560;25565:1;25560:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25598:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25588:4;25593:1;25588:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25625:62;25642:4;25657:15;25675:11;25625:8;:62::i;:::-;25692:15;:66;;;25764:11;25781:1;25788:4;25806;25817:15;25692:145;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25510:332;25455:387;:::o;25847:289::-;25922:62;25939:4;25954:15;25972:11;25922:8;:62::i;:::-;25989:15;:31;;;26028:9;26052:4;26063:11;26080:1;26087;16323:6;26111:15;25989:142;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25847:289;;:::o;9429:168::-;9515:7;9541:1;9537;:5;9544:12;9529:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9562:9;9578:1;9574;:5;;;;:::i;:::-;9562:17;;9591:1;9584:8;;;9429:168;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:60::-;4496:3;4517:5;4510:12;;4468:60;;;:::o;4534:142::-;4584:9;4617:53;4635:34;4644:24;4662:5;4644:24;:::i;:::-;4635:34;:::i;:::-;4617:53;:::i;:::-;4604:66;;4534:142;;;:::o;4682:126::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4682:126;;;:::o;4814:153::-;4891:9;4924:37;4955:5;4924:37;:::i;:::-;4911:50;;4814:153;;;:::o;4973:185::-;5087:64;5145:5;5087:64;:::i;:::-;5082:3;5075:77;4973:185;;:::o;5164:276::-;5284:4;5322:2;5311:9;5307:18;5299:26;;5335:98;5430:1;5419:9;5415:17;5406:6;5335:98;:::i;:::-;5164:276;;;;:::o;5446:118::-;5533:24;5551:5;5533:24;:::i;:::-;5528:3;5521:37;5446:118;;:::o;5570:222::-;5663:4;5701:2;5690:9;5686:18;5678:26;;5714:71;5782:1;5771:9;5767:17;5758:6;5714:71;:::i;:::-;5570:222;;;;:::o;5798:619::-;5875:6;5883;5891;5940:2;5928:9;5919:7;5915:23;5911:32;5908:119;;;5946:79;;:::i;:::-;5908:119;6066:1;6091:53;6136:7;6127:6;6116:9;6112:22;6091:53;:::i;:::-;6081:63;;6037:117;6193:2;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6164:118;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;5798:619;;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:474::-;8281:6;8289;8338:2;8326:9;8317:7;8313:23;8309:32;8306:119;;;8344:79;;:::i;:::-;8306:119;8464:1;8489:53;8534:7;8525:6;8514:9;8510:22;8489:53;:::i;:::-;8479:63;;8435:117;8591:2;8617:53;8662:7;8653:6;8642:9;8638:22;8617:53;:::i;:::-;8607:63;;8562:118;8213:474;;;;;:::o;8693:::-;8761:6;8769;8818:2;8806:9;8797:7;8793:23;8789:32;8786:119;;;8824:79;;:::i;:::-;8786:119;8944:1;8969:53;9014:7;9005:6;8994:9;8990:22;8969:53;:::i;:::-;8959:63;;8915:117;9071:2;9097:53;9142:7;9133:6;9122:9;9118:22;9097:53;:::i;:::-;9087:63;;9042:118;8693:474;;;;;:::o;9173:323::-;9229:6;9278:2;9266:9;9257:7;9253:23;9249:32;9246:119;;;9284:79;;:::i;:::-;9246:119;9404:1;9429:50;9471:7;9462:6;9451:9;9447:22;9429:50;:::i;:::-;9419:60;;9375:114;9173:323;;;;:::o;9502:180::-;9550:77;9547:1;9540:88;9647:4;9644:1;9637:15;9671:4;9668:1;9661:15;9688:320;9732:6;9769:1;9763:4;9759:12;9749:22;;9816:1;9810:4;9806:12;9837:18;9827:81;;9893:4;9885:6;9881:17;9871:27;;9827:81;9955:2;9947:6;9944:14;9924:18;9921:38;9918:84;;9974:18;;:::i;:::-;9918:84;9739:269;9688:320;;;:::o;10014:182::-;10154:34;10150:1;10142:6;10138:14;10131:58;10014:182;:::o;10202:366::-;10344:3;10365:67;10429:2;10424:3;10365:67;:::i;:::-;10358:74;;10441:93;10530:3;10441:93;:::i;:::-;10559:2;10554:3;10550:12;10543:19;;10202:366;;;:::o;10574:419::-;10740:4;10778:2;10767:9;10763:18;10755:26;;10827:9;10821:4;10817:20;10813:1;10802:9;10798:17;10791:47;10855:131;10981:4;10855:131;:::i;:::-;10847:139;;10574:419;;;:::o;10999:180::-;11047:77;11044:1;11037:88;11144:4;11141:1;11134:15;11168:4;11165:1;11158:15;11185:410;11225:7;11248:20;11266:1;11248:20;:::i;:::-;11243:25;;11282:20;11300:1;11282:20;:::i;:::-;11277:25;;11337:1;11334;11330:9;11359:30;11377:11;11359:30;:::i;:::-;11348:41;;11538:1;11529:7;11525:15;11522:1;11519:22;11499:1;11492:9;11472:83;11449:139;;11568:18;;:::i;:::-;11449:139;11233:362;11185:410;;;;:::o;11601:180::-;11649:77;11646:1;11639:88;11746:4;11743:1;11736:15;11770:4;11767:1;11760:15;11787:185;11827:1;11844:20;11862:1;11844:20;:::i;:::-;11839:25;;11878:20;11896:1;11878:20;:::i;:::-;11873:25;;11917:1;11907:35;;11922:18;;:::i;:::-;11907:35;11964:1;11961;11957:9;11952:14;;11787:185;;;;:::o;11978:240::-;12118:34;12114:1;12106:6;12102:14;12095:58;12187:23;12182:2;12174:6;12170:15;12163:48;11978:240;:::o;12224:366::-;12366:3;12387:67;12451:2;12446:3;12387:67;:::i;:::-;12380:74;;12463:93;12552:3;12463:93;:::i;:::-;12581:2;12576:3;12572:12;12565:19;;12224:366;;;:::o;12596:419::-;12762:4;12800:2;12789:9;12785:18;12777:26;;12849:9;12843:4;12839:20;12835:1;12824:9;12820:17;12813:47;12877:131;13003:4;12877:131;:::i;:::-;12869:139;;12596:419;;;:::o;13021:239::-;13161:34;13157:1;13149:6;13145:14;13138:58;13230:22;13225:2;13217:6;13213:15;13206:47;13021:239;:::o;13266:366::-;13408:3;13429:67;13493:2;13488:3;13429:67;:::i;:::-;13422:74;;13505:93;13594:3;13505:93;:::i;:::-;13623:2;13618:3;13614:12;13607:19;;13266:366;;;:::o;13638:419::-;13804:4;13842:2;13831:9;13827:18;13819:26;;13891:9;13885:4;13881:20;13877:1;13866:9;13862:17;13855:47;13919:131;14045:4;13919:131;:::i;:::-;13911:139;;13638:419;;;:::o;14063:232::-;14203:34;14199:1;14191:6;14187:14;14180:58;14272:15;14267:2;14259:6;14255:15;14248:40;14063:232;:::o;14301:366::-;14443:3;14464:67;14528:2;14523:3;14464:67;:::i;:::-;14457:74;;14540:93;14629:3;14540:93;:::i;:::-;14658:2;14653:3;14649:12;14642:19;;14301:366;;;:::o;14673:419::-;14839:4;14877:2;14866:9;14862:18;14854:26;;14926:9;14920:4;14916:20;14912:1;14901:9;14897:17;14890:47;14954:131;15080:4;14954:131;:::i;:::-;14946:139;;14673:419;;;:::o;15098:191::-;15138:3;15157:20;15175:1;15157:20;:::i;:::-;15152:25;;15191:20;15209:1;15191:20;:::i;:::-;15186:25;;15234:1;15231;15227:9;15220:16;;15255:3;15252:1;15249:10;15246:36;;;15262:18;;:::i;:::-;15246:36;15098:191;;;;:::o;15295:227::-;15435:34;15431:1;15423:6;15419:14;15412:58;15504:10;15499:2;15491:6;15487:15;15480:35;15295:227;:::o;15528:366::-;15670:3;15691:67;15755:2;15750:3;15691:67;:::i;:::-;15684:74;;15767:93;15856:3;15767:93;:::i;:::-;15885:2;15880:3;15876:12;15869:19;;15528:366;;;:::o;15900:419::-;16066:4;16104:2;16093:9;16089:18;16081:26;;16153:9;16147:4;16143:20;16139:1;16128:9;16124:17;16117:47;16181:131;16307:4;16181:131;:::i;:::-;16173:139;;15900:419;;;:::o;16325:244::-;16465:34;16461:1;16453:6;16449:14;16442:58;16534:27;16529:2;16521:6;16517:15;16510:52;16325:244;:::o;16575:366::-;16717:3;16738:67;16802:2;16797:3;16738:67;:::i;:::-;16731:74;;16814:93;16903:3;16814:93;:::i;:::-;16932:2;16927:3;16923:12;16916:19;;16575:366;;;:::o;16947:419::-;17113:4;17151:2;17140:9;17136:18;17128:26;;17200:9;17194:4;17190:20;17186:1;17175:9;17171:17;17164:47;17228:131;17354:4;17228:131;:::i;:::-;17220:139;;16947:419;;;:::o;17372:179::-;17512:31;17508:1;17500:6;17496:14;17489:55;17372:179;:::o;17557:366::-;17699:3;17720:67;17784:2;17779:3;17720:67;:::i;:::-;17713:74;;17796:93;17885:3;17796:93;:::i;:::-;17914:2;17909:3;17905:12;17898:19;;17557:366;;;:::o;17929:419::-;18095:4;18133:2;18122:9;18118:18;18110:26;;18182:9;18176:4;18172:20;18168:1;18157:9;18153:17;18146:47;18210:131;18336:4;18210:131;:::i;:::-;18202:139;;17929:419;;;:::o;18354:179::-;18494:31;18490:1;18482:6;18478:14;18471:55;18354:179;:::o;18539:366::-;18681:3;18702:67;18766:2;18761:3;18702:67;:::i;:::-;18695:74;;18778:93;18867:3;18778:93;:::i;:::-;18896:2;18891:3;18887:12;18880:19;;18539:366;;;:::o;18911:419::-;19077:4;19115:2;19104:9;19100:18;19092:26;;19164:9;19158:4;19154:20;19150:1;19139:9;19135:17;19128:47;19192:131;19318:4;19192:131;:::i;:::-;19184:139;;18911:419;;;:::o;19336:221::-;19476:34;19472:1;19464:6;19460:14;19453:58;19545:4;19540:2;19532:6;19528:15;19521:29;19336:221;:::o;19563:366::-;19705:3;19726:67;19790:2;19785:3;19726:67;:::i;:::-;19719:74;;19802:93;19891:3;19802:93;:::i;:::-;19920:2;19915:3;19911:12;19904:19;;19563:366;;;:::o;19935:419::-;20101:4;20139:2;20128:9;20124:18;20116:26;;20188:9;20182:4;20178:20;20174:1;20163:9;20159:17;20152:47;20216:131;20342:4;20216:131;:::i;:::-;20208:139;;19935:419;;;:::o;20360:225::-;20500:34;20496:1;20488:6;20484:14;20477:58;20569:8;20564:2;20556:6;20552:15;20545:33;20360:225;:::o;20591:366::-;20733:3;20754:67;20818:2;20813:3;20754:67;:::i;:::-;20747:74;;20830:93;20919:3;20830:93;:::i;:::-;20948:2;20943:3;20939:12;20932:19;;20591:366;;;:::o;20963:419::-;21129:4;21167:2;21156:9;21152:18;21144:26;;21216:9;21210:4;21206:20;21202:1;21191:9;21187:17;21180:47;21244:131;21370:4;21244:131;:::i;:::-;21236:139;;20963:419;;;:::o;21388:223::-;21528:34;21524:1;21516:6;21512:14;21505:58;21597:6;21592:2;21584:6;21580:15;21573:31;21388:223;:::o;21617:366::-;21759:3;21780:67;21844:2;21839:3;21780:67;:::i;:::-;21773:74;;21856:93;21945:3;21856:93;:::i;:::-;21974:2;21969:3;21965:12;21958:19;;21617:366;;;:::o;21989:419::-;22155:4;22193:2;22182:9;22178:18;22170:26;;22242:9;22236:4;22232:20;22228:1;22217:9;22213:17;22206:47;22270:131;22396:4;22270:131;:::i;:::-;22262:139;;21989:419;;;:::o;22414:221::-;22554:34;22550:1;22542:6;22538:14;22531:58;22623:4;22618:2;22610:6;22606:15;22599:29;22414:221;:::o;22641:366::-;22783:3;22804:67;22868:2;22863:3;22804:67;:::i;:::-;22797:74;;22880:93;22969:3;22880:93;:::i;:::-;22998:2;22993:3;22989:12;22982:19;;22641:366;;;:::o;23013:419::-;23179:4;23217:2;23206:9;23202:18;23194:26;;23266:9;23260:4;23256:20;23252:1;23241:9;23237:17;23230:47;23294:131;23420:4;23294:131;:::i;:::-;23286:139;;23013:419;;;:::o;23438:224::-;23578:34;23574:1;23566:6;23562:14;23555:58;23647:7;23642:2;23634:6;23630:15;23623:32;23438:224;:::o;23668:366::-;23810:3;23831:67;23895:2;23890:3;23831:67;:::i;:::-;23824:74;;23907:93;23996:3;23907:93;:::i;:::-;24025:2;24020:3;24016:12;24009:19;;23668:366;;;:::o;24040:419::-;24206:4;24244:2;24233:9;24229:18;24221:26;;24293:9;24287:4;24283:20;24279:1;24268:9;24264:17;24257:47;24321:131;24447:4;24321:131;:::i;:::-;24313:139;;24040:419;;;:::o;24465:222::-;24605:34;24601:1;24593:6;24589:14;24582:58;24674:5;24669:2;24661:6;24657:15;24650:30;24465:222;:::o;24693:366::-;24835:3;24856:67;24920:2;24915:3;24856:67;:::i;:::-;24849:74;;24932:93;25021:3;24932:93;:::i;:::-;25050:2;25045:3;25041:12;25034:19;;24693:366;;;:::o;25065:419::-;25231:4;25269:2;25258:9;25254:18;25246:26;;25318:9;25312:4;25308:20;25304:1;25293:9;25289:17;25282:47;25346:131;25472:4;25346:131;:::i;:::-;25338:139;;25065:419;;;:::o;25490:240::-;25630:34;25626:1;25618:6;25614:14;25607:58;25699:23;25694:2;25686:6;25682:15;25675:48;25490:240;:::o;25736:366::-;25878:3;25899:67;25963:2;25958:3;25899:67;:::i;:::-;25892:74;;25975:93;26064:3;25975:93;:::i;:::-;26093:2;26088:3;26084:12;26077:19;;25736:366;;;:::o;26108:419::-;26274:4;26312:2;26301:9;26297:18;26289:26;;26361:9;26355:4;26351:20;26347:1;26336:9;26332:17;26325:47;26389:131;26515:4;26389:131;:::i;:::-;26381:139;;26108:419;;;:::o;26533:169::-;26673:21;26669:1;26661:6;26657:14;26650:45;26533:169;:::o;26708:366::-;26850:3;26871:67;26935:2;26930:3;26871:67;:::i;:::-;26864:74;;26947:93;27036:3;26947:93;:::i;:::-;27065:2;27060:3;27056:12;27049:19;;26708:366;;;:::o;27080:419::-;27246:4;27284:2;27273:9;27269:18;27261:26;;27333:9;27327:4;27323:20;27319:1;27308:9;27304:17;27297:47;27361:131;27487:4;27361:131;:::i;:::-;27353:139;;27080:419;;;:::o;27505:241::-;27645:34;27641:1;27633:6;27629:14;27622:58;27714:24;27709:2;27701:6;27697:15;27690:49;27505:241;:::o;27752:366::-;27894:3;27915:67;27979:2;27974:3;27915:67;:::i;:::-;27908:74;;27991:93;28080:3;27991:93;:::i;:::-;28109:2;28104:3;28100:12;28093:19;;27752:366;;;:::o;28124:419::-;28290:4;28328:2;28317:9;28313:18;28305:26;;28377:9;28371:4;28367:20;28363:1;28352:9;28348:17;28341:47;28405:131;28531:4;28405:131;:::i;:::-;28397:139;;28124:419;;;:::o;28549:194::-;28589:4;28609:20;28627:1;28609:20;:::i;:::-;28604:25;;28643:20;28661:1;28643:20;:::i;:::-;28638:25;;28687:1;28684;28680:9;28672:17;;28711:1;28705:4;28702:11;28699:37;;;28716:18;;:::i;:::-;28699:37;28549:194;;;;:::o;28749:177::-;28889:29;28885:1;28877:6;28873:14;28866:53;28749:177;:::o;28932:366::-;29074:3;29095:67;29159:2;29154:3;29095:67;:::i;:::-;29088:74;;29171:93;29260:3;29171:93;:::i;:::-;29289:2;29284:3;29280:12;29273:19;;28932:366;;;:::o;29304:419::-;29470:4;29508:2;29497:9;29493:18;29485:26;;29557:9;29551:4;29547:20;29543:1;29532:9;29528:17;29521:47;29585:131;29711:4;29585:131;:::i;:::-;29577:139;;29304:419;;;:::o;29729:147::-;29830:11;29867:3;29852:18;;29729:147;;;;:::o;29882:114::-;;:::o;30002:398::-;30161:3;30182:83;30263:1;30258:3;30182:83;:::i;:::-;30175:90;;30274:93;30363:3;30274:93;:::i;:::-;30392:1;30387:3;30383:11;30376:18;;30002:398;;;:::o;30406:379::-;30590:3;30612:147;30755:3;30612:147;:::i;:::-;30605:154;;30776:3;30769:10;;30406:379;;;:::o;30791:442::-;30940:4;30978:2;30967:9;30963:18;30955:26;;30991:71;31059:1;31048:9;31044:17;31035:6;30991:71;:::i;:::-;31072:72;31140:2;31129:9;31125:18;31116:6;31072:72;:::i;:::-;31154;31222:2;31211:9;31207:18;31198:6;31154:72;:::i;:::-;30791:442;;;;;;:::o;31239:220::-;31379:34;31375:1;31367:6;31363:14;31356:58;31448:3;31443:2;31435:6;31431:15;31424:28;31239:220;:::o;31465:366::-;31607:3;31628:67;31692:2;31687:3;31628:67;:::i;:::-;31621:74;;31704:93;31793:3;31704:93;:::i;:::-;31822:2;31817:3;31813:12;31806:19;;31465:366;;;:::o;31837:419::-;32003:4;32041:2;32030:9;32026:18;32018:26;;32090:9;32084:4;32080:20;32076:1;32065:9;32061:17;32054:47;32118:131;32244:4;32118:131;:::i;:::-;32110:139;;31837:419;;;:::o;32262:180::-;32310:77;32307:1;32300:88;32407:4;32404:1;32397:15;32431:4;32428:1;32421:15;32448:180;32496:77;32493:1;32486:88;32593:4;32590:1;32583:15;32617:4;32614:1;32607:15;32634:143;32691:5;32722:6;32716:13;32707:22;;32738:33;32765:5;32738:33;:::i;:::-;32634:143;;;;:::o;32783:351::-;32853:6;32902:2;32890:9;32881:7;32877:23;32873:32;32870:119;;;32908:79;;:::i;:::-;32870:119;33028:1;33053:64;33109:7;33100:6;33089:9;33085:22;33053:64;:::i;:::-;33043:74;;32999:128;32783:351;;;;:::o;33140:85::-;33185:7;33214:5;33203:16;;33140:85;;;:::o;33231:158::-;33289:9;33322:61;33340:42;33349:32;33375:5;33349:32;:::i;:::-;33340:42;:::i;:::-;33322:61;:::i;:::-;33309:74;;33231:158;;;:::o;33395:147::-;33490:45;33529:5;33490:45;:::i;:::-;33485:3;33478:58;33395:147;;:::o;33548:114::-;33615:6;33649:5;33643:12;33633:22;;33548:114;;;:::o;33668:184::-;33767:11;33801:6;33796:3;33789:19;33841:4;33836:3;33832:14;33817:29;;33668:184;;;;:::o;33858:132::-;33925:4;33948:3;33940:11;;33978:4;33973:3;33969:14;33961:22;;33858:132;;;:::o;33996:108::-;34073:24;34091:5;34073:24;:::i;:::-;34068:3;34061:37;33996:108;;:::o;34110:179::-;34179:10;34200:46;34242:3;34234:6;34200:46;:::i;:::-;34278:4;34273:3;34269:14;34255:28;;34110:179;;;;:::o;34295:113::-;34365:4;34397;34392:3;34388:14;34380:22;;34295:113;;;:::o;34444:732::-;34563:3;34592:54;34640:5;34592:54;:::i;:::-;34662:86;34741:6;34736:3;34662:86;:::i;:::-;34655:93;;34772:56;34822:5;34772:56;:::i;:::-;34851:7;34882:1;34867:284;34892:6;34889:1;34886:13;34867:284;;;34968:6;34962:13;34995:63;35054:3;35039:13;34995:63;:::i;:::-;34988:70;;35081:60;35134:6;35081:60;:::i;:::-;35071:70;;34927:224;34914:1;34911;34907:9;34902:14;;34867:284;;;34871:14;35167:3;35160:10;;34568:608;;;34444:732;;;;:::o;35182:831::-;35445:4;35483:3;35472:9;35468:19;35460:27;;35497:71;35565:1;35554:9;35550:17;35541:6;35497:71;:::i;:::-;35578:80;35654:2;35643:9;35639:18;35630:6;35578:80;:::i;:::-;35705:9;35699:4;35695:20;35690:2;35679:9;35675:18;35668:48;35733:108;35836:4;35827:6;35733:108;:::i;:::-;35725:116;;35851:72;35919:2;35908:9;35904:18;35895:6;35851:72;:::i;:::-;35933:73;36001:3;35990:9;35986:19;35977:6;35933:73;:::i;:::-;35182:831;;;;;;;;:::o;36019:807::-;36268:4;36306:3;36295:9;36291:19;36283:27;;36320:71;36388:1;36377:9;36373:17;36364:6;36320:71;:::i;:::-;36401:72;36469:2;36458:9;36454:18;36445:6;36401:72;:::i;:::-;36483:80;36559:2;36548:9;36544:18;36535:6;36483:80;:::i;:::-;36573;36649:2;36638:9;36634:18;36625:6;36573:80;:::i;:::-;36663:73;36731:3;36720:9;36716:19;36707:6;36663:73;:::i;:::-;36746;36814:3;36803:9;36799:19;36790:6;36746:73;:::i;:::-;36019:807;;;;;;;;;:::o;36832:143::-;36889:5;36920:6;36914:13;36905:22;;36936:33;36963:5;36936:33;:::i;:::-;36832:143;;;;:::o;36981:663::-;37069:6;37077;37085;37134:2;37122:9;37113:7;37109:23;37105:32;37102:119;;;37140:79;;:::i;:::-;37102:119;37260:1;37285:64;37341:7;37332:6;37321:9;37317:22;37285:64;:::i;:::-;37275:74;;37231:128;37398:2;37424:64;37480:7;37471:6;37460:9;37456:22;37424:64;:::i;:::-;37414:74;;37369:129;37537:2;37563:64;37619:7;37610:6;37599:9;37595:22;37563:64;:::i;:::-;37553:74;;37508:129;36981:663;;;;;:::o

Swarm Source

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