ETH Price: $3,467.85 (+2.95%)

Token

Ermn Musk (ERMN)
 

Overview

Max Total Supply

1,000,000 ERMN

Holders

561

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
425.464623095588310953 ERMN

Value
$0.00
0x2327e9218a8dcae3d0dd513823b6e164cb71397f
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:
ERMN

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-24
*/

/*
https://t.me/c/1848648579/249639
*/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {_transferOwnership(_msgSender());}
    function owner() public view virtual returns (address) {return _owner;}
    modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner");  _; }
    function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0));}
    function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner);}
    function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner;  _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); }
}
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 {
    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);uint256 currentAllowance = _allowances[sender][_msgSender()];require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");unchecked {_approve(sender, _msgSender(), currentAllowance - amount);}return true;}
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);return true;}
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {uint256 currentAllowance = _allowances[_msgSender()][spender];require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");unchecked {_approve(_msgSender(), spender, currentAllowance - subtractedValue);}return true;}
    function _transfer(address sender,address recipient,uint256 amount) internal virtual {require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address");_beforeTokenTransfer(sender, recipient, amount);uint256 senderBalance = _balances[sender];require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");unchecked { _balances[sender] = senderBalance - amount;}_balances[recipient] += amount;emit Transfer(sender, recipient, amount);_afterTokenTransfer(sender, recipient, amount);}
    function _mint(address account, uint256 amount) internal virtual {require(account != address(0), "ERC20: mint to the zero address");_beforeTokenTransfer(address(0), account, amount);_totalSupply += amount;_balances[account] += amount;emit Transfer(address(0), account, amount);_afterTokenTransfer(address(0), account, amount);}
    function _burn(address account, uint256 amount) internal virtual {require(account != address(0), "ERC20: burn from the zero address");_beforeTokenTransfer(account, address(0), amount);uint256 accountBalance = _balances[account];require(accountBalance >= amount, "ERC20: burn amount exceeds balance");unchecked { _balances[account] = accountBalance - amount;}_totalSupply -= amount;emit Transfer(account, address(0), amount);_afterTokenTransfer(account, address(0), amount);}
    function _approve(address owner, address spender,uint256 amount) internal virtual {require(owner != address(0), "ERC20: approve from the zero address");require(spender != address(0), "ERC20: approve to the zero address");_allowances[owner][spender] = amount;emit Approval(owner, spender, amount);}
    function _beforeTokenTransfer(address from,address to, uint256 amount) internal virtual {}
    function _afterTokenTransfer(address from,  address to, uint256 amount) internal virtual {}
}


library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {unchecked { uint256 c = a + b;if (c < a) return (false, 0); return (true, c);}}
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {unchecked {if (b > a) return (false, 0); return (true, a - b);}}
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {unchecked { if (a == 0) return (true, 0);uint256 c = a * b;if (c / a != b) return (false, 0); return (true, c);}}
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {unchecked {if (b == 0) return (false, 0);return (true, a / b); }}
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b);}}
    function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; }
    function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b;  }
    function sub( uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {unchecked { require(b <= a, errorMessage); return a - b;  } }
    function div(uint256 a,  uint256 b,  string memory errorMessage ) internal pure returns (uint256) {unchecked {   require(b > 0, errorMessage);  return a / b; }}
    function mod(uint256 a, uint256 b,  string memory errorMessage) internal pure returns (uint256) { unchecked {  require(b > 0, errorMessage);    return a % b;  }}
}
interface IUniswapV2Factory {
    event PairCreated( address indexed token0, address indexed token1, address pair, uint256);
    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(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(address tokenA, address tokenB)external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender,uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender)external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom( address from,address to,uint256 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 (uint256);
    function permit(address owner, address spender, uint256 value, uint256 deadline,  uint8 v, bytes32 r,bytes32 s) external;
    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(address indexed sender,uint256 amount0,uint256 amount1,address indexed to);
    event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function Last() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to)external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out,uint256 amount1Out,address to,bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}
interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns ( uint256 amountA,  uint256 amountB,uint256 liquidity);
    function addLiquidityETH(address token,  uint256 amountTokenDesired,  uint256 amountTokenMin,  uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken,uint256 amountETH, uint256 liquidity);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn,uint256 amountOutMin,address[] calldata path,address to,uint256 deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin,address[] calldata path,address to,uint256 deadline) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn,uint256 amountOutMin,address[] calldata path,address to,uint256 deadline) external;
}
contract ERMN 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 devWallet;
    uint256 public maxTransactionAmount;uint256 public maxWallet;uint256 public swapTokensAtAmount;
    bool public lpBurnEnabled = true;uint256 public lpBurnFrequency = 3600 seconds;uint256 public lastLpBurnTime;uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime;uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public swapEnabled = true; bool public limitsInEffect = true;
    mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = true;
    uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee;uint256 public sellTotalFees;uint256 public sellMarketingFee;uint256 public sellLiquidityFee;
    uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity;uint256 public tokensForDev;
    /******************/
    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 devWalletUpdated(address indexed newWallet,address indexed oldWallet);
    event ManualNukeLP(); 
    event AutoNukeLP();

    constructor() ERC20("Ermn Musk", "ERMN") {
        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 = 0; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 20; uint256 _sellMarketingFee = 0;uint256 _sellLiquidityFee = 0;uint256 _sellDevFee = 80;uint256 totalSupply = 1_000_000 * 1e18;
        maxTransactionAmount = 20_000 * 1e18;  maxWallet = 20_000 * 1e18; swapTokensAtAmount = (totalSupply * 10) / 10000; 
        buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee;sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        marketingWallet = address(0x83f9A87BEe11138b3501c31461700904c6CA1bD9); // set as marketing wallet
        devWallet = address(0x83f9A87BEe11138b3501c31461700904c6CA1bD9); // set as dev wallet
        excludeFromFees(owner(), true);excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true);excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply);
    }

    receive() external payable {}
    function disableLimits() external onlyOwner returns (bool) { limitsInEffect = false;return true;}
    function disableTransferDelay() external onlyOwner returns (bool) {transferDelayEnabled = false;return true;}
    function setSwapTokensAtAmount(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 = newAmount; return true;}
    function updateTransactionLimits(uint256 newNumTx, uint256 newNumWallet) external onlyOwner { require(newNumTx >= ((totalSupply() * 1) / 1000) / 1e18,"Cannot set maxTransactionAmount lower than 0.1%");maxTransactionAmount = newNumTx * (10**18);require(newNumWallet >= ((totalSupply() * 5) / 1000) / 1e18,"Cannot set maxWallet lower than 0.5%");maxWallet = newNumWallet * (10**18);}
    function excludeFromMaxTransaction(address updAds, bool isEx)  public onlyOwner{_isExcludedMaxTransactionAmount[updAds] = isEx;}
    function setSwapback(bool enabled) external onlyOwner {swapEnabled = enabled;}
    function updateFeePercent(uint256 _buyMarketingFee,  uint256 _buyLiquidityFee, uint256 _buyDevFee,  uint256 _sellMarketingFee, uint256 _sellLiquidityFee, uint256 _sellDevFee) external onlyOwner{buyMarketingFee = _buyMarketingFee;buyLiquidityFee = _buyLiquidityFee;buyDevFee = _buyDevFee;buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;require(buyTotalFees <= 33, "Must keep fees at 33% or less"); sellMarketingFee = _sellMarketingFee;sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee;sellTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;require(buyTotalFees <= 75, "Must keep fees at 75% 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 updateDevWallet(address newWallet) external onlyOwner {emit devWalletUpdated(newWallet, devWallet);devWallet = newWallet;}
    function isExcludedFromFees(address account) public view returns (bool) {return _isExcludedFromFees[account];}
    event BoughtEarly(address indexed sniper);
    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 (limitsInEffect) {if (from != owner() && to != owner() &&to != address(0) &&to != address(0xdead) &&!swapping) {if (transferDelayEnabled) { if ( to != owner() &&to != address(uniswapV2Router) &&to != address(uniswapV2Pair)) {require(_holderLastTransferTimestamp[tx.origin] <block.number,"_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");_holderLastTransferTimestamp[tx.origin] = block.number;}} if (automatedMarketMakerPairs[from] &&!_isExcludedMaxTransactionAmount[to]) {require(amount <= maxTransactionAmount,"Buy transfer amount exceeds the maxTransactionAmount.");require( amount + balanceOf(to) <= maxWallet,"Max wallet exceeded");}else if (automatedMarketMakerPairs[to] &&!_isExcludedMaxTransactionAmount[from]) {require(amount <= maxTransactionAmount,"Sell transfer amount exceeds the maxTransactionAmount.");} else if (!_isExcludedMaxTransactionAmount[to]) {require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");}}}uint256 contractTokenBalance = balanceOf(address(this));bool canSwap = contractTokenBalance >= swapTokensAtAmount;if (canSwap &&swapEnabled &&!swapping &&!automatedMarketMakerPairs[from] &&!_isExcludedFromFees[from] &&!_isExcludedFromFees[to]) {swapping = true;swapBack();swapping = false;}if (!swapping &&automatedMarketMakerPairs[to] &&lpBurnEnabled &&block.timestamp >= lastLpBurnTime + lpBurnFrequency &&!_isExcludedFromFees[from]) {autoBurnLiquidityPairTokens();}bool takeFee = !swapping;if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {takeFee = false;}uint256 fees = 0; if (takeFee) {if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {fees = amount.mul(sellTotalFees).div(100);tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;tokensForDev += (fees * sellDevFee) / sellTotalFees;tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;}else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {fees = amount.mul(buyTotalFees).div(100);tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;tokensForDev += (fees * buyDevFee) / buyTotalFees;tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;}if (fees > 0) {super._transfer(from, address(this), fees);}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 +tokensForDev;bool success;if (contractBalance == 0 || totalTokensToSwap == 0) { return;}if (contractBalance > swapTokensAtAmount * 20) {contractBalance = swapTokensAtAmount * 20;}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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;tokensForLiquidity = 0;tokensForMarketing = 0;tokensForDev = 0;(success, ) = address(devWallet).call{value: ethForDev}("");if (liquidityTokens > 0 && ethForLiquidity > 0) {addLiquidity(liquidityTokens, ethForLiquidity);emit SwapAndLiquify(amountToSwapForETH,ethForLiquidity,tokensForLiquidity);}(success, ) = address(marketingWallet).call{value: address(this).balance}("");}
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds,uint256 _percent,bool _Enabled) external onlyOwner {require(_frequencyInSeconds >= 600,"cannot set buyback more often than every 10 minutes");require(_percent <= 1000 && _percent >= 0,"Must set auto LP burn percent between 0% and 10%");lpBurnFrequency = _frequencyInSeconds;percentForLPBurn = _percent;lpBurnEnabled = _Enabled;}
    function autoBurnLiquidityPairTokens() internal returns (bool) {lastLpBurnTime = block.timestamp;uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);if (amountToBurn > 0) {super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);}IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);pair.sync();emit AutoNukeLP();return true;}
    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency,"Must wait for cooldown to finish");require(percent <= 1000, "May not nuke more than 10% of tokens in LP");lastManualLpBurnTime = block.timestamp;uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);if (amountToBurn > 0) {super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);} IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);pair.sync(); emit ManualNukeLP();return true;}
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"devWalletUpdated","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":"buyDevFee","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":[],"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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapback","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":"tokensForDev","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"updateFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumTx","type":"uint256"},{"internalType":"uint256","name":"newNumWallet","type":"uint256"}],"name":"updateTransactionLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff021916908315150217905550610e10600c55610708600e5560196010556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055506001601360006101000a81548160ff0219169083151502179055503480156200008e57600080fd5b506040518060400160405280600981526020017f45726d6e204d75736b00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f45524d4e0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200011392919062000aee565b5080600490805190602001906200012c92919062000aee565b5050506200014f62000143620005ae60201b60201c565b620005b660201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200017b8160016200067c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000221919062000c08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000289573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002af919062000c08565b6040518363ffffffff1660e01b8152600401620002ce92919062000c4b565b6020604051808303816000875af1158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062000c08565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200035c60a05160016200067c60201b60201c565b6200037160a05160016200076660201b60201c565b600080600060149050600080600060509050600069d3c21bcecceda1000000905069043c33c193756480000060088190555069043c33c1937564800000600981905550612710600a82620003c6919062000cb1565b620003d2919062000d41565b600a8190555086601581905550856016819055508460178190555060175460165460155462000402919062000d79565b6200040e919062000d79565b6014819055508360198190555082601a8190555081601b81905550601b54601a546019546200043e919062000d79565b6200044a919062000d79565b6018819055507383f9a87bee11138b3501c31461700904c6ca1bd9600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507383f9a87bee11138b3501c31461700904c6ca1bd9600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200051c6200050e6200080760201b60201c565b60016200083160201b60201c565b6200052f3060016200083160201b60201c565b6200054461dead60016200083160201b60201c565b62000566620005586200080760201b60201c565b60016200067c60201b60201c565b620005793060016200067c60201b60201c565b6200058e61dead60016200067c60201b60201c565b620005a033826200096b60201b60201c565b505050505050505062000f98565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200068c620005ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006b26200080760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200070b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007029062000e37565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000841620005ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008676200080760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b79062000e37565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200095f919062000e76565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d59062000ee3565b60405180910390fd5b620009f26000838362000ae460201b60201c565b806002600082825462000a06919062000d79565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a5d919062000d79565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ac4919062000f16565b60405180910390a362000ae06000838362000ae960201b60201c565b5050565b505050565b505050565b82805462000afc9062000f62565b90600052602060002090601f01602090048101928262000b20576000855562000b6c565b82601f1062000b3b57805160ff191683800117855562000b6c565b8280016001018555821562000b6c579182015b8281111562000b6b57825182559160200191906001019062000b4e565b5b50905062000b7b919062000b7f565b5090565b5b8082111562000b9a57600081600090555060010162000b80565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bd08262000ba3565b9050919050565b62000be28162000bc3565b811462000bee57600080fd5b50565b60008151905062000c028162000bd7565b92915050565b60006020828403121562000c215762000c2062000b9e565b5b600062000c318482850162000bf1565b91505092915050565b62000c458162000bc3565b82525050565b600060408201905062000c62600083018562000c3a565b62000c71602083018462000c3a565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cbe8262000c78565b915062000ccb8362000c78565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d075762000d0662000c82565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d4e8262000c78565b915062000d5b8362000c78565b92508262000d6e5762000d6d62000d12565b5b828204905092915050565b600062000d868262000c78565b915062000d938362000c78565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dcb5762000dca62000c82565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e1f60208362000dd6565b915062000e2c8262000de7565b602082019050919050565b6000602082019050818103600083015262000e528162000e10565b9050919050565b60008115159050919050565b62000e708162000e59565b82525050565b600060208201905062000e8d600083018462000e65565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ecb601f8362000dd6565b915062000ed88262000e93565b602082019050919050565b6000602082019050818103600083015262000efe8162000ebc565b9050919050565b62000f108162000c78565b82525050565b600060208201905062000f2d600083018462000f05565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f7b57607f821691505b6020821081141562000f925762000f9162000f33565b5b50919050565b60805160a0516158c762001020600039600081816112b701528181611974015281816124bd01528181612574015281816125a101528181612af001528181613bf401528181613cad0152613cda015260008181610f6901528181612a9801528181613e5001528181613f3101528181613f5801528181613ff4015261401b01526158c76000f3fe6080604052600436106103855760003560e01c80638da5cb5b116101d1578063b62496f511610102578063e884f260116100a0578063f63743421161006f578063f637434214610d41578063f8b45b0514610d6c578063f928364c14610d97578063fe72b27a14610dc25761038c565b8063e884f26014610c99578063e96a65d014610cc4578063f11a24d314610ced578063f2fde38b14610d185761038c565b8063c8c8ebe4116100dc578063c8c8ebe414610bdb578063d85ba06314610c06578063dd62ed3e14610c31578063e2f4560514610c6e5761038c565b8063b62496f514610b4a578063c024666814610b87578063c876d0b914610bb05761038c565b80639fccce321161016f578063a4c82a0011610149578063a4c82a0014610a7c578063a9059cbb14610aa7578063aacebbe314610ae4578063afa4f3b214610b0d5761038c565b80639fccce32146109e9578063a0d82dc514610a14578063a457c2d714610a3f5761038c565b806395d89b41116101ab57806395d89b411461093f5780639a7a23d61461096a5780639c3b4fdc146109935780639ec22c0e146109be5761038c565b80638da5cb5b146108be5780638ea5220f146108e957806392136913146109145761038c565b80632e82f1a0116102b65780636ddd1713116102545780637571336a116102235780637571336a1461081657806375f0a8741461083f5780637bce5a041461086a5780637ebb640a146108955761038c565b80636ddd17131461076e57806370a0823114610799578063715018a6146107d6578063730c1888146107ed5761038c565b806349bd5a5e1161029057806349bd5a5e146106b05780634a62bb65146106db5780634fbee193146107065780636a486a8e146107435761038c565b80632e82f1a01461061d578063313ce5671461064857806339509351146106735761038c565b8063184c16c5116103235780631f3fed8f116102fd5780631f3fed8f1461055f57806323b872dd1461058a57806327c8f835146105c75780632c3e486c146105f25761038c565b8063184c16c5146104de578063199ffc72146105095780631a8145bb146105345761038c565b806310d5de531161035f57806310d5de53146104225780631694505e1461045f57806318160ddd1461048a5780631816467f146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc57806310a4cc66146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dff565b6040516103b39190614163565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de919061421e565b610e91565b6040516103f09190614279565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906142c0565b610eaf565b005b34801561042e57600080fd5b50610449600480360381019061044491906142ed565b610f48565b6040516104569190614279565b60405180910390f35b34801561046b57600080fd5b50610474610f67565b6040516104819190614379565b60405180910390f35b34801561049657600080fd5b5061049f610f8b565b6040516104ac91906143a3565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d791906142ed565b610f95565b005b3480156104ea57600080fd5b506104f36110d1565b60405161050091906143a3565b60405180910390f35b34801561051557600080fd5b5061051e6110d7565b60405161052b91906143a3565b60405180910390f35b34801561054057600080fd5b506105496110dd565b60405161055691906143a3565b60405180910390f35b34801561056b57600080fd5b506105746110e3565b60405161058191906143a3565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906143be565b6110e9565b6040516105be9190614279565b60405180910390f35b3480156105d357600080fd5b506105dc6111e1565b6040516105e99190614420565b60405180910390f35b3480156105fe57600080fd5b506106076111e7565b60405161061491906143a3565b60405180910390f35b34801561062957600080fd5b506106326111ed565b60405161063f9190614279565b60405180910390f35b34801561065457600080fd5b5061065d611200565b60405161066a9190614457565b60405180910390f35b34801561067f57600080fd5b5061069a6004803603810190610695919061421e565b611209565b6040516106a79190614279565b60405180910390f35b3480156106bc57600080fd5b506106c56112b5565b6040516106d29190614420565b60405180910390f35b3480156106e757600080fd5b506106f06112d9565b6040516106fd9190614279565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906142ed565b6112ec565b60405161073a9190614279565b60405180910390f35b34801561074f57600080fd5b50610758611342565b60405161076591906143a3565b60405180910390f35b34801561077a57600080fd5b50610783611348565b6040516107909190614279565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb91906142ed565b61135b565b6040516107cd91906143a3565b60405180910390f35b3480156107e257600080fd5b506107eb6113a3565b005b3480156107f957600080fd5b50610814600480360381019061080f9190614472565b61142b565b005b34801561082257600080fd5b5061083d600480360381019061083891906144c5565b61156b565b005b34801561084b57600080fd5b50610854611642565b6040516108619190614420565b60405180910390f35b34801561087657600080fd5b5061087f611668565b60405161088c91906143a3565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b79190614505565b61166e565b005b3480156108ca57600080fd5b506108d361180e565b6040516108e09190614420565b60405180910390f35b3480156108f557600080fd5b506108fe611838565b60405161090b9190614420565b60405180910390f35b34801561092057600080fd5b5061092961185e565b60405161093691906143a3565b60405180910390f35b34801561094b57600080fd5b50610954611864565b6040516109619190614163565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c91906144c5565b6118f6565b005b34801561099f57600080fd5b506109a8611a0f565b6040516109b591906143a3565b60405180910390f35b3480156109ca57600080fd5b506109d3611a15565b6040516109e091906143a3565b60405180910390f35b3480156109f557600080fd5b506109fe611a1b565b604051610a0b91906143a3565b60405180910390f35b348015610a2057600080fd5b50610a29611a21565b604051610a3691906143a3565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a61919061421e565b611a27565b604051610a739190614279565b60405180910390f35b348015610a8857600080fd5b50610a91611b12565b604051610a9e91906143a3565b60405180910390f35b348015610ab357600080fd5b50610ace6004803603810190610ac9919061421e565b611b18565b604051610adb9190614279565b60405180910390f35b348015610af057600080fd5b50610b0b6004803603810190610b0691906142ed565b611b36565b005b348015610b1957600080fd5b50610b346004803603810190610b2f9190614545565b611c72565b604051610b419190614279565b60405180910390f35b348015610b5657600080fd5b50610b716004803603810190610b6c91906142ed565b611dc7565b604051610b7e9190614279565b60405180910390f35b348015610b9357600080fd5b50610bae6004803603810190610ba991906144c5565b611de7565b005b348015610bbc57600080fd5b50610bc5611f0c565b604051610bd29190614279565b60405180910390f35b348015610be757600080fd5b50610bf0611f1f565b604051610bfd91906143a3565b60405180910390f35b348015610c1257600080fd5b50610c1b611f25565b604051610c2891906143a3565b60405180910390f35b348015610c3d57600080fd5b50610c586004803603810190610c539190614572565b611f2b565b604051610c6591906143a3565b60405180910390f35b348015610c7a57600080fd5b50610c83611fb2565b604051610c9091906143a3565b60405180910390f35b348015610ca557600080fd5b50610cae611fb8565b604051610cbb9190614279565b60405180910390f35b348015610cd057600080fd5b50610ceb6004803603810190610ce691906145b2565b612058565b005b348015610cf957600080fd5b50610d026121d8565b604051610d0f91906143a3565b60405180910390f35b348015610d2457600080fd5b50610d3f6004803603810190610d3a91906142ed565b6121de565b005b348015610d4d57600080fd5b50610d566122d6565b604051610d6391906143a3565b60405180910390f35b348015610d7857600080fd5b50610d816122dc565b604051610d8e91906143a3565b60405180910390f35b348015610da357600080fd5b50610dac6122e2565b604051610db99190614279565b60405180910390f35b348015610dce57600080fd5b50610de96004803603810190610de49190614545565b612382565b604051610df69190614279565b60405180910390f35b606060038054610e0e9061466e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3a9061466e565b8015610e875780601f10610e5c57610100808354040283529160200191610e87565b820191906000526020600020905b815481529060010190602001808311610e6a57829003601f168201915b5050505050905090565b6000610ea5610e9e61265a565b8484612662565b6001905092915050565b610eb761265a565b73ffffffffffffffffffffffffffffffffffffffff16610ed561180e565b73ffffffffffffffffffffffffffffffffffffffff1614610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f22906146ec565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f9d61265a565b73ffffffffffffffffffffffffffffffffffffffff16610fbb61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611008906146ec565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b60105481565b601d5481565b601c5481565b60006110f684848461282d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114161265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b89061477e565b60405180910390fd5b6111d5856111cd61265a565b858403612662565b60019150509392505050565b61dead81565b600c5481565b600b60009054906101000a900460ff1681565b60006012905090565b60006112ab61121661265a565b84846001600061122461265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112a691906147cd565b612662565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160019054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ab61265a565b73ffffffffffffffffffffffffffffffffffffffff166113c961180e565b73ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611416906146ec565b60405180910390fd5b61142960006134d0565b565b61143361265a565b73ffffffffffffffffffffffffffffffffffffffff1661145161180e565b73ffffffffffffffffffffffffffffffffffffffff16146114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149e906146ec565b60405180910390fd5b6102588310156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390614895565b60405180910390fd5b6103e882111580156114ff575060008210155b61153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590614927565b60405180910390fd5b82600c819055508160108190555080600b60006101000a81548160ff021916908315150217905550505050565b61157361265a565b73ffffffffffffffffffffffffffffffffffffffff1661159161180e565b73ffffffffffffffffffffffffffffffffffffffff16146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de906146ec565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61167661265a565b73ffffffffffffffffffffffffffffffffffffffff1661169461180e565b73ffffffffffffffffffffffffffffffffffffffff16146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e1906146ec565b60405180910390fd5b670de0b6b3a76400006103e86001611700610f8b565b61170a9190614947565b61171491906149d0565b61171e91906149d0565b821015611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790614a73565b60405180910390fd5b670de0b6b3a7640000826117749190614947565b600881905550670de0b6b3a76400006103e86005611790610f8b565b61179a9190614947565b6117a491906149d0565b6117ae91906149d0565b8110156117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790614b05565b60405180910390fd5b670de0b6b3a7640000816118049190614947565b6009819055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6060600480546118739061466e565b80601f016020809104026020016040519081016040528092919081815260200182805461189f9061466e565b80156118ec5780601f106118c1576101008083540402835291602001916118ec565b820191906000526020600020905b8154815290600101906020018083116118cf57829003601f168201915b5050505050905090565b6118fe61265a565b73ffffffffffffffffffffffffffffffffffffffff1661191c61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611969906146ec565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890614b97565b60405180910390fd5b611a0b8282613596565b5050565b60175481565b600f5481565b601e5481565b601b5481565b60008060016000611a3661265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90614c29565b60405180910390fd5b611b07611afe61265a565b85858403612662565b600191505092915050565b600d5481565b6000611b2c611b2561265a565b848461282d565b6001905092915050565b611b3e61265a565b73ffffffffffffffffffffffffffffffffffffffff16611b5c61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba9906146ec565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611c7c61265a565b73ffffffffffffffffffffffffffffffffffffffff16611c9a61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce7906146ec565b60405180910390fd5b620186a06001611cfe610f8b565b611d089190614947565b611d1291906149d0565b821015611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b90614cbb565b60405180910390fd5b6103e86005611d61610f8b565b611d6b9190614947565b611d7591906149d0565b821115611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90614d4d565b60405180910390fd5b81600a8190555060019050919050565b60216020528060005260406000206000915054906101000a900460ff1681565b611def61265a565b73ffffffffffffffffffffffffffffffffffffffff16611e0d61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a906146ec565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f009190614279565b60405180910390a25050565b601360009054906101000a900460ff1681565b60085481565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6000611fc261265a565b73ffffffffffffffffffffffffffffffffffffffff16611fe061180e565b73ffffffffffffffffffffffffffffffffffffffff1614612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d906146ec565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61206061265a565b73ffffffffffffffffffffffffffffffffffffffff1661207e61180e565b73ffffffffffffffffffffffffffffffffffffffff16146120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb906146ec565b60405180910390fd5b8560158190555084601681905550836017819055506017546016546015546120fc91906147cd565b61210691906147cd565b60148190555060216014541115612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614db9565b60405180910390fd5b8260198190555081601a8190555080601b8190555060175460165460155461217a91906147cd565b61218491906147cd565b601881905550604b60145411156121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790614e25565b60405180910390fd5b505050505050565b60165481565b6121e661265a565b73ffffffffffffffffffffffffffffffffffffffff1661220461180e565b73ffffffffffffffffffffffffffffffffffffffff161461225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906146ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614eb7565b60405180910390fd5b6122d3816134d0565b50565b601a5481565b60095481565b60006122ec61265a565b73ffffffffffffffffffffffffffffffffffffffff1661230a61180e565b73ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612357906146ec565b60405180910390fd5b6000601160016101000a81548160ff0219169083151502179055506001905090565b600061238c61265a565b73ffffffffffffffffffffffffffffffffffffffff166123aa61180e565b73ffffffffffffffffffffffffffffffffffffffff1614612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f7906146ec565b60405180910390fd5b600e54600f5461241091906147cd565b4211612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244890614f23565b60405180910390fd5b6103e8821115612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d90614fb5565b60405180910390fd5b42600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016124f89190614420565b602060405180830381865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125399190614fea565b90506000612564612710612556868561363790919063ffffffff16565b61364d90919063ffffffff16565b9050600081111561259d5761259c7f000000000000000000000000000000000000000000000000000000000000000061dead83613663565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561260a57600080fd5b505af115801561261e573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c990615089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127399061511b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161282091906143a3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561289d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612894906151ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561290d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129049061523f565b60405180910390fd5b60008114156129275761292283836000613663565b6134cb565b601160019054906101000a900460ff1615612ef55761294461180e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129b2575061298261180e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129eb5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a25575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a3e5750600560149054906101000a900460ff16155b15612ef457601360009054906101000a900460ff1615612c0b57612a6061180e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ae757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c0a5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc906152f7565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cae5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5557600854811115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef90615389565b60405180910390fd5b600954612d048361135b565b82612d0f91906147cd565b1115612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d47906153f5565b60405180910390fd5b612ef3565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612df85750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4757600854811115612e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3990615487565b60405180910390fd5b612ef2565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ef157600954612ea48361135b565b82612eaf91906147cd565b1115612ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee7906153f5565b60405180910390fd5b5b5b5b5b5b6000612f003061135b565b90506000600a548210159050808015612f255750601160009054906101000a900460ff165b8015612f3e5750600560149054906101000a900460ff16155b8015612f945750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fea5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130405750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613084576001600560146101000a81548160ff0219169083151502179055506130686138e4565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156130ea5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156131025750600b60009054906101000a900460ff165b801561311d5750600c54600d5461311991906147cd565b4210155b80156131735750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318257613180613bcb565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132385750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561324257600090505b600081156134bb57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132a557506000601854115b15613372576132d260646132c46018548861363790919063ffffffff16565b61364d90919063ffffffff16565b9050601854601a54826132e59190614947565b6132ef91906149d0565b601d600082825461330091906147cd565b92505081905550601854601b54826133189190614947565b61332291906149d0565b601e600082825461333391906147cd565b925050819055506018546019548261334b9190614947565b61335591906149d0565b601c600082825461336691906147cd565b92505081905550613497565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133cd57506000601454115b15613496576133fa60646133ec6014548861363790919063ffffffff16565b61364d90919063ffffffff16565b90506014546016548261340d9190614947565b61341791906149d0565b601d600082825461342891906147cd565b92505081905550601454601754826134409190614947565b61344a91906149d0565b601e600082825461345b91906147cd565b92505081905550601454601554826134739190614947565b61347d91906149d0565b601c600082825461348e91906147cd565b925050819055505b5b60008111156134ac576134ab873083613663565b5b80856134b891906154a7565b94505b6134c6878787613663565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836136459190614947565b905092915050565b6000818361365b91906149d0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ca906151ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373a9061523f565b60405180910390fd5b61374e838383613d91565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156137d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137cb9061554d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461386791906147cd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138cb91906143a3565b60405180910390a36138de848484613d96565b50505050565b60006138ef3061135b565b90506000601e54601c54601d5461390691906147cd565b61391091906147cd565b90506000808314806139225750600082145b1561392f57505050613bc9565b6014600a5461393e9190614947565b831115613957576014600a546139549190614947565b92505b6000600283601d548661396a9190614947565b61397491906149d0565b61397e91906149d0565b905060006139958286613d9b90919063ffffffff16565b905060004790506139a582613db1565b60006139ba8247613d9b90919063ffffffff16565b905060006139e5876139d7601c548561363790919063ffffffff16565b61364d90919063ffffffff16565b90506000613a1088613a02601e548661363790919063ffffffff16565b61364d90919063ffffffff16565b90506000818385613a2191906154a7565b613a2b91906154a7565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a8b9061559e565b60006040518083038185875af1925050503d8060008114613ac8576040519150601f19603f3d011682016040523d82523d6000602084013e613acd565b606091505b505080985050600087118015613ae35750600081115b15613b3057613af28782613fee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613b27939291906155b3565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b769061559e565b60006040518083038185875af1925050503d8060008114613bb3576040519150601f19603f3d011682016040523d82523d6000602084013e613bb8565b606091505b505080985050505050505050505050505b565b600042600d8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613c2f9190614420565b602060405180830381865afa158015613c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c709190614fea565b90506000613c9d612710613c8f6010548561363790919063ffffffff16565b61364d90919063ffffffff16565b90506000811115613cd657613cd57f000000000000000000000000000000000000000000000000000000000000000061dead83613663565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d4357600080fd5b505af1158015613d57573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613da991906154a7565b905092915050565b6000600267ffffffffffffffff811115613dce57613dcd6155ea565b5b604051908082528060200260200182016040528015613dfc5781602001602082028036833780820191505090505b5090503081600081518110613e1457613e13615619565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edd919061565d565b81600181518110613ef157613ef0615619565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f56307f000000000000000000000000000000000000000000000000000000000000000084612662565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb8959493929190615783565b600060405180830381600087803b158015613fd257600080fd5b505af1158015613fe6573d6000803e3d6000fd5b505050505050565b614019307f000000000000000000000000000000000000000000000000000000000000000084612662565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614080969594939291906157dd565b60606040518083038185885af115801561409e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c3919061583e565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141045780820151818401526020810190506140e9565b83811115614113576000848401525b50505050565b6000601f19601f8301169050919050565b6000614135826140ca565b61413f81856140d5565b935061414f8185602086016140e6565b61415881614119565b840191505092915050565b6000602082019050818103600083015261417d818461412a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141b58261418a565b9050919050565b6141c5816141aa565b81146141d057600080fd5b50565b6000813590506141e2816141bc565b92915050565b6000819050919050565b6141fb816141e8565b811461420657600080fd5b50565b600081359050614218816141f2565b92915050565b6000806040838503121561423557614234614185565b5b6000614243858286016141d3565b925050602061425485828601614209565b9150509250929050565b60008115159050919050565b6142738161425e565b82525050565b600060208201905061428e600083018461426a565b92915050565b61429d8161425e565b81146142a857600080fd5b50565b6000813590506142ba81614294565b92915050565b6000602082840312156142d6576142d5614185565b5b60006142e4848285016142ab565b91505092915050565b60006020828403121561430357614302614185565b5b6000614311848285016141d3565b91505092915050565b6000819050919050565b600061433f61433a6143358461418a565b61431a565b61418a565b9050919050565b600061435182614324565b9050919050565b600061436382614346565b9050919050565b61437381614358565b82525050565b600060208201905061438e600083018461436a565b92915050565b61439d816141e8565b82525050565b60006020820190506143b86000830184614394565b92915050565b6000806000606084860312156143d7576143d6614185565b5b60006143e5868287016141d3565b93505060206143f6868287016141d3565b925050604061440786828701614209565b9150509250925092565b61441a816141aa565b82525050565b60006020820190506144356000830184614411565b92915050565b600060ff82169050919050565b6144518161443b565b82525050565b600060208201905061446c6000830184614448565b92915050565b60008060006060848603121561448b5761448a614185565b5b600061449986828701614209565b93505060206144aa86828701614209565b92505060406144bb868287016142ab565b9150509250925092565b600080604083850312156144dc576144db614185565b5b60006144ea858286016141d3565b92505060206144fb858286016142ab565b9150509250929050565b6000806040838503121561451c5761451b614185565b5b600061452a85828601614209565b925050602061453b85828601614209565b9150509250929050565b60006020828403121561455b5761455a614185565b5b600061456984828501614209565b91505092915050565b6000806040838503121561458957614588614185565b5b6000614597858286016141d3565b92505060206145a8858286016141d3565b9150509250929050565b60008060008060008060c087890312156145cf576145ce614185565b5b60006145dd89828a01614209565b96505060206145ee89828a01614209565b95505060406145ff89828a01614209565b945050606061461089828a01614209565b935050608061462189828a01614209565b92505060a061463289828a01614209565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061468657607f821691505b6020821081141561469a5761469961463f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146d66020836140d5565b91506146e1826146a0565b602082019050919050565b60006020820190508181036000830152614705816146c9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006147686028836140d5565b91506147738261470c565b604082019050919050565b600060208201905081810360008301526147978161475b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147d8826141e8565b91506147e3836141e8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148185761481761479e565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061487f6033836140d5565b915061488a82614823565b604082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006149116030836140d5565b915061491c826148b5565b604082019050919050565b6000602082019050818103600083015261494081614904565b9050919050565b6000614952826141e8565b915061495d836141e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149965761499561479e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149db826141e8565b91506149e6836141e8565b9250826149f6576149f56149a1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614a5d602f836140d5565b9150614a6882614a01565b604082019050919050565b60006020820190508181036000830152614a8c81614a50565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614aef6024836140d5565b9150614afa82614a93565b604082019050919050565b60006020820190508181036000830152614b1e81614ae2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614b816039836140d5565b9150614b8c82614b25565b604082019050919050565b60006020820190508181036000830152614bb081614b74565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614c136025836140d5565b9150614c1e82614bb7565b604082019050919050565b60006020820190508181036000830152614c4281614c06565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ca56035836140d5565b9150614cb082614c49565b604082019050919050565b60006020820190508181036000830152614cd481614c98565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d376034836140d5565b9150614d4282614cdb565b604082019050919050565b60006020820190508181036000830152614d6681614d2a565b9050919050565b7f4d757374206b656570206665657320617420333325206f72206c657373000000600082015250565b6000614da3601d836140d5565b9150614dae82614d6d565b602082019050919050565b60006020820190508181036000830152614dd281614d96565b9050919050565b7f4d757374206b656570206665657320617420373525206f72206c657373000000600082015250565b6000614e0f601d836140d5565b9150614e1a82614dd9565b602082019050919050565b60006020820190508181036000830152614e3e81614e02565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ea16026836140d5565b9150614eac82614e45565b604082019050919050565b60006020820190508181036000830152614ed081614e94565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614f0d6020836140d5565b9150614f1882614ed7565b602082019050919050565b60006020820190508181036000830152614f3c81614f00565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614f9f602a836140d5565b9150614faa82614f43565b604082019050919050565b60006020820190508181036000830152614fce81614f92565b9050919050565b600081519050614fe4816141f2565b92915050565b60006020828403121561500057614fff614185565b5b600061500e84828501614fd5565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150736024836140d5565b915061507e82615017565b604082019050919050565b600060208201905081810360008301526150a281615066565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151056022836140d5565b9150615110826150a9565b604082019050919050565b60006020820190508181036000830152615134816150f8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151976025836140d5565b91506151a28261513b565b604082019050919050565b600060208201905081810360008301526151c68161518a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152296023836140d5565b9150615234826151cd565b604082019050919050565b600060208201905081810360008301526152588161521c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006152e16049836140d5565b91506152ec8261525f565b606082019050919050565b60006020820190508181036000830152615310816152d4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006153736035836140d5565b915061537e82615317565b604082019050919050565b600060208201905081810360008301526153a281615366565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006153df6013836140d5565b91506153ea826153a9565b602082019050919050565b6000602082019050818103600083015261540e816153d2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006154716036836140d5565b915061547c82615415565b604082019050919050565b600060208201905081810360008301526154a081615464565b9050919050565b60006154b2826141e8565b91506154bd836141e8565b9250828210156154d0576154cf61479e565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006155376026836140d5565b9150615542826154db565b604082019050919050565b600060208201905081810360008301526155668161552a565b9050919050565b600081905092915050565b50565b600061558860008361556d565b915061559382615578565b600082019050919050565b60006155a98261557b565b9150819050919050565b60006060820190506155c86000830186614394565b6155d56020830185614394565b6155e26040830184614394565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615657816141bc565b92915050565b60006020828403121561567357615672614185565b5b600061568184828501615648565b91505092915050565b6000819050919050565b60006156af6156aa6156a58461568a565b61431a565b6141e8565b9050919050565b6156bf81615694565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6156fa816141aa565b82525050565b600061570c83836156f1565b60208301905092915050565b6000602082019050919050565b6000615730826156c5565b61573a81856156d0565b9350615745836156e1565b8060005b8381101561577657815161575d8882615700565b975061576883615718565b925050600181019050615749565b5085935050505092915050565b600060a0820190506157986000830188614394565b6157a560208301876156b6565b81810360408301526157b78186615725565b90506157c66060830185614411565b6157d36080830184614394565b9695505050505050565b600060c0820190506157f26000830189614411565b6157ff6020830188614394565b61580c60408301876156b6565b61581960608301866156b6565b6158266080830185614411565b61583360a0830184614394565b979650505050505050565b60008060006060848603121561585757615856614185565b5b600061586586828701614fd5565b935050602061587686828701614fd5565b925050604061588786828701614fd5565b915050925092509256fea26469706673582212202fba1c095c68d577bf4f76b61218359242de1369f6cf620e5c8e5341bb4e43f164736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638da5cb5b116101d1578063b62496f511610102578063e884f260116100a0578063f63743421161006f578063f637434214610d41578063f8b45b0514610d6c578063f928364c14610d97578063fe72b27a14610dc25761038c565b8063e884f26014610c99578063e96a65d014610cc4578063f11a24d314610ced578063f2fde38b14610d185761038c565b8063c8c8ebe4116100dc578063c8c8ebe414610bdb578063d85ba06314610c06578063dd62ed3e14610c31578063e2f4560514610c6e5761038c565b8063b62496f514610b4a578063c024666814610b87578063c876d0b914610bb05761038c565b80639fccce321161016f578063a4c82a0011610149578063a4c82a0014610a7c578063a9059cbb14610aa7578063aacebbe314610ae4578063afa4f3b214610b0d5761038c565b80639fccce32146109e9578063a0d82dc514610a14578063a457c2d714610a3f5761038c565b806395d89b41116101ab57806395d89b411461093f5780639a7a23d61461096a5780639c3b4fdc146109935780639ec22c0e146109be5761038c565b80638da5cb5b146108be5780638ea5220f146108e957806392136913146109145761038c565b80632e82f1a0116102b65780636ddd1713116102545780637571336a116102235780637571336a1461081657806375f0a8741461083f5780637bce5a041461086a5780637ebb640a146108955761038c565b80636ddd17131461076e57806370a0823114610799578063715018a6146107d6578063730c1888146107ed5761038c565b806349bd5a5e1161029057806349bd5a5e146106b05780634a62bb65146106db5780634fbee193146107065780636a486a8e146107435761038c565b80632e82f1a01461061d578063313ce5671461064857806339509351146106735761038c565b8063184c16c5116103235780631f3fed8f116102fd5780631f3fed8f1461055f57806323b872dd1461058a57806327c8f835146105c75780632c3e486c146105f25761038c565b8063184c16c5146104de578063199ffc72146105095780631a8145bb146105345761038c565b806310d5de531161035f57806310d5de53146104225780631694505e1461045f57806318160ddd1461048a5780631816467f146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc57806310a4cc66146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dff565b6040516103b39190614163565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de919061421e565b610e91565b6040516103f09190614279565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906142c0565b610eaf565b005b34801561042e57600080fd5b50610449600480360381019061044491906142ed565b610f48565b6040516104569190614279565b60405180910390f35b34801561046b57600080fd5b50610474610f67565b6040516104819190614379565b60405180910390f35b34801561049657600080fd5b5061049f610f8b565b6040516104ac91906143a3565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d791906142ed565b610f95565b005b3480156104ea57600080fd5b506104f36110d1565b60405161050091906143a3565b60405180910390f35b34801561051557600080fd5b5061051e6110d7565b60405161052b91906143a3565b60405180910390f35b34801561054057600080fd5b506105496110dd565b60405161055691906143a3565b60405180910390f35b34801561056b57600080fd5b506105746110e3565b60405161058191906143a3565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906143be565b6110e9565b6040516105be9190614279565b60405180910390f35b3480156105d357600080fd5b506105dc6111e1565b6040516105e99190614420565b60405180910390f35b3480156105fe57600080fd5b506106076111e7565b60405161061491906143a3565b60405180910390f35b34801561062957600080fd5b506106326111ed565b60405161063f9190614279565b60405180910390f35b34801561065457600080fd5b5061065d611200565b60405161066a9190614457565b60405180910390f35b34801561067f57600080fd5b5061069a6004803603810190610695919061421e565b611209565b6040516106a79190614279565b60405180910390f35b3480156106bc57600080fd5b506106c56112b5565b6040516106d29190614420565b60405180910390f35b3480156106e757600080fd5b506106f06112d9565b6040516106fd9190614279565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906142ed565b6112ec565b60405161073a9190614279565b60405180910390f35b34801561074f57600080fd5b50610758611342565b60405161076591906143a3565b60405180910390f35b34801561077a57600080fd5b50610783611348565b6040516107909190614279565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb91906142ed565b61135b565b6040516107cd91906143a3565b60405180910390f35b3480156107e257600080fd5b506107eb6113a3565b005b3480156107f957600080fd5b50610814600480360381019061080f9190614472565b61142b565b005b34801561082257600080fd5b5061083d600480360381019061083891906144c5565b61156b565b005b34801561084b57600080fd5b50610854611642565b6040516108619190614420565b60405180910390f35b34801561087657600080fd5b5061087f611668565b60405161088c91906143a3565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b79190614505565b61166e565b005b3480156108ca57600080fd5b506108d361180e565b6040516108e09190614420565b60405180910390f35b3480156108f557600080fd5b506108fe611838565b60405161090b9190614420565b60405180910390f35b34801561092057600080fd5b5061092961185e565b60405161093691906143a3565b60405180910390f35b34801561094b57600080fd5b50610954611864565b6040516109619190614163565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c91906144c5565b6118f6565b005b34801561099f57600080fd5b506109a8611a0f565b6040516109b591906143a3565b60405180910390f35b3480156109ca57600080fd5b506109d3611a15565b6040516109e091906143a3565b60405180910390f35b3480156109f557600080fd5b506109fe611a1b565b604051610a0b91906143a3565b60405180910390f35b348015610a2057600080fd5b50610a29611a21565b604051610a3691906143a3565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a61919061421e565b611a27565b604051610a739190614279565b60405180910390f35b348015610a8857600080fd5b50610a91611b12565b604051610a9e91906143a3565b60405180910390f35b348015610ab357600080fd5b50610ace6004803603810190610ac9919061421e565b611b18565b604051610adb9190614279565b60405180910390f35b348015610af057600080fd5b50610b0b6004803603810190610b0691906142ed565b611b36565b005b348015610b1957600080fd5b50610b346004803603810190610b2f9190614545565b611c72565b604051610b419190614279565b60405180910390f35b348015610b5657600080fd5b50610b716004803603810190610b6c91906142ed565b611dc7565b604051610b7e9190614279565b60405180910390f35b348015610b9357600080fd5b50610bae6004803603810190610ba991906144c5565b611de7565b005b348015610bbc57600080fd5b50610bc5611f0c565b604051610bd29190614279565b60405180910390f35b348015610be757600080fd5b50610bf0611f1f565b604051610bfd91906143a3565b60405180910390f35b348015610c1257600080fd5b50610c1b611f25565b604051610c2891906143a3565b60405180910390f35b348015610c3d57600080fd5b50610c586004803603810190610c539190614572565b611f2b565b604051610c6591906143a3565b60405180910390f35b348015610c7a57600080fd5b50610c83611fb2565b604051610c9091906143a3565b60405180910390f35b348015610ca557600080fd5b50610cae611fb8565b604051610cbb9190614279565b60405180910390f35b348015610cd057600080fd5b50610ceb6004803603810190610ce691906145b2565b612058565b005b348015610cf957600080fd5b50610d026121d8565b604051610d0f91906143a3565b60405180910390f35b348015610d2457600080fd5b50610d3f6004803603810190610d3a91906142ed565b6121de565b005b348015610d4d57600080fd5b50610d566122d6565b604051610d6391906143a3565b60405180910390f35b348015610d7857600080fd5b50610d816122dc565b604051610d8e91906143a3565b60405180910390f35b348015610da357600080fd5b50610dac6122e2565b604051610db99190614279565b60405180910390f35b348015610dce57600080fd5b50610de96004803603810190610de49190614545565b612382565b604051610df69190614279565b60405180910390f35b606060038054610e0e9061466e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3a9061466e565b8015610e875780601f10610e5c57610100808354040283529160200191610e87565b820191906000526020600020905b815481529060010190602001808311610e6a57829003601f168201915b5050505050905090565b6000610ea5610e9e61265a565b8484612662565b6001905092915050565b610eb761265a565b73ffffffffffffffffffffffffffffffffffffffff16610ed561180e565b73ffffffffffffffffffffffffffffffffffffffff1614610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f22906146ec565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f9d61265a565b73ffffffffffffffffffffffffffffffffffffffff16610fbb61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611008906146ec565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b60105481565b601d5481565b601c5481565b60006110f684848461282d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114161265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b89061477e565b60405180910390fd5b6111d5856111cd61265a565b858403612662565b60019150509392505050565b61dead81565b600c5481565b600b60009054906101000a900460ff1681565b60006012905090565b60006112ab61121661265a565b84846001600061122461265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112a691906147cd565b612662565b6001905092915050565b7f000000000000000000000000fc932be359a728f0998dd6664681900a9ec7a41881565b601160019054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ab61265a565b73ffffffffffffffffffffffffffffffffffffffff166113c961180e565b73ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611416906146ec565b60405180910390fd5b61142960006134d0565b565b61143361265a565b73ffffffffffffffffffffffffffffffffffffffff1661145161180e565b73ffffffffffffffffffffffffffffffffffffffff16146114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149e906146ec565b60405180910390fd5b6102588310156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390614895565b60405180910390fd5b6103e882111580156114ff575060008210155b61153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590614927565b60405180910390fd5b82600c819055508160108190555080600b60006101000a81548160ff021916908315150217905550505050565b61157361265a565b73ffffffffffffffffffffffffffffffffffffffff1661159161180e565b73ffffffffffffffffffffffffffffffffffffffff16146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de906146ec565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61167661265a565b73ffffffffffffffffffffffffffffffffffffffff1661169461180e565b73ffffffffffffffffffffffffffffffffffffffff16146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e1906146ec565b60405180910390fd5b670de0b6b3a76400006103e86001611700610f8b565b61170a9190614947565b61171491906149d0565b61171e91906149d0565b821015611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790614a73565b60405180910390fd5b670de0b6b3a7640000826117749190614947565b600881905550670de0b6b3a76400006103e86005611790610f8b565b61179a9190614947565b6117a491906149d0565b6117ae91906149d0565b8110156117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790614b05565b60405180910390fd5b670de0b6b3a7640000816118049190614947565b6009819055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6060600480546118739061466e565b80601f016020809104026020016040519081016040528092919081815260200182805461189f9061466e565b80156118ec5780601f106118c1576101008083540402835291602001916118ec565b820191906000526020600020905b8154815290600101906020018083116118cf57829003601f168201915b5050505050905090565b6118fe61265a565b73ffffffffffffffffffffffffffffffffffffffff1661191c61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611969906146ec565b60405180910390fd5b7f000000000000000000000000fc932be359a728f0998dd6664681900a9ec7a41873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890614b97565b60405180910390fd5b611a0b8282613596565b5050565b60175481565b600f5481565b601e5481565b601b5481565b60008060016000611a3661265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90614c29565b60405180910390fd5b611b07611afe61265a565b85858403612662565b600191505092915050565b600d5481565b6000611b2c611b2561265a565b848461282d565b6001905092915050565b611b3e61265a565b73ffffffffffffffffffffffffffffffffffffffff16611b5c61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba9906146ec565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611c7c61265a565b73ffffffffffffffffffffffffffffffffffffffff16611c9a61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce7906146ec565b60405180910390fd5b620186a06001611cfe610f8b565b611d089190614947565b611d1291906149d0565b821015611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b90614cbb565b60405180910390fd5b6103e86005611d61610f8b565b611d6b9190614947565b611d7591906149d0565b821115611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90614d4d565b60405180910390fd5b81600a8190555060019050919050565b60216020528060005260406000206000915054906101000a900460ff1681565b611def61265a565b73ffffffffffffffffffffffffffffffffffffffff16611e0d61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a906146ec565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f009190614279565b60405180910390a25050565b601360009054906101000a900460ff1681565b60085481565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6000611fc261265a565b73ffffffffffffffffffffffffffffffffffffffff16611fe061180e565b73ffffffffffffffffffffffffffffffffffffffff1614612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d906146ec565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61206061265a565b73ffffffffffffffffffffffffffffffffffffffff1661207e61180e565b73ffffffffffffffffffffffffffffffffffffffff16146120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb906146ec565b60405180910390fd5b8560158190555084601681905550836017819055506017546016546015546120fc91906147cd565b61210691906147cd565b60148190555060216014541115612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614db9565b60405180910390fd5b8260198190555081601a8190555080601b8190555060175460165460155461217a91906147cd565b61218491906147cd565b601881905550604b60145411156121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790614e25565b60405180910390fd5b505050505050565b60165481565b6121e661265a565b73ffffffffffffffffffffffffffffffffffffffff1661220461180e565b73ffffffffffffffffffffffffffffffffffffffff161461225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906146ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614eb7565b60405180910390fd5b6122d3816134d0565b50565b601a5481565b60095481565b60006122ec61265a565b73ffffffffffffffffffffffffffffffffffffffff1661230a61180e565b73ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612357906146ec565b60405180910390fd5b6000601160016101000a81548160ff0219169083151502179055506001905090565b600061238c61265a565b73ffffffffffffffffffffffffffffffffffffffff166123aa61180e565b73ffffffffffffffffffffffffffffffffffffffff1614612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f7906146ec565b60405180910390fd5b600e54600f5461241091906147cd565b4211612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244890614f23565b60405180910390fd5b6103e8821115612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d90614fb5565b60405180910390fd5b42600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000fc932be359a728f0998dd6664681900a9ec7a4186040518263ffffffff1660e01b81526004016124f89190614420565b602060405180830381865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125399190614fea565b90506000612564612710612556868561363790919063ffffffff16565b61364d90919063ffffffff16565b9050600081111561259d5761259c7f000000000000000000000000fc932be359a728f0998dd6664681900a9ec7a41861dead83613663565b5b60007f000000000000000000000000fc932be359a728f0998dd6664681900a9ec7a41890508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561260a57600080fd5b505af115801561261e573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c990615089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127399061511b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161282091906143a3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561289d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612894906151ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561290d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129049061523f565b60405180910390fd5b60008114156129275761292283836000613663565b6134cb565b601160019054906101000a900460ff1615612ef55761294461180e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129b2575061298261180e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129eb5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a25575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a3e5750600560149054906101000a900460ff16155b15612ef457601360009054906101000a900460ff1615612c0b57612a6061180e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ae757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3f57507f000000000000000000000000fc932be359a728f0998dd6664681900a9ec7a41873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c0a5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc906152f7565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cae5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5557600854811115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef90615389565b60405180910390fd5b600954612d048361135b565b82612d0f91906147cd565b1115612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d47906153f5565b60405180910390fd5b612ef3565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612df85750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4757600854811115612e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3990615487565b60405180910390fd5b612ef2565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ef157600954612ea48361135b565b82612eaf91906147cd565b1115612ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee7906153f5565b60405180910390fd5b5b5b5b5b5b6000612f003061135b565b90506000600a548210159050808015612f255750601160009054906101000a900460ff165b8015612f3e5750600560149054906101000a900460ff16155b8015612f945750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fea5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130405750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613084576001600560146101000a81548160ff0219169083151502179055506130686138e4565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156130ea5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156131025750600b60009054906101000a900460ff165b801561311d5750600c54600d5461311991906147cd565b4210155b80156131735750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318257613180613bcb565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132385750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561324257600090505b600081156134bb57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132a557506000601854115b15613372576132d260646132c46018548861363790919063ffffffff16565b61364d90919063ffffffff16565b9050601854601a54826132e59190614947565b6132ef91906149d0565b601d600082825461330091906147cd565b92505081905550601854601b54826133189190614947565b61332291906149d0565b601e600082825461333391906147cd565b925050819055506018546019548261334b9190614947565b61335591906149d0565b601c600082825461336691906147cd565b92505081905550613497565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133cd57506000601454115b15613496576133fa60646133ec6014548861363790919063ffffffff16565b61364d90919063ffffffff16565b90506014546016548261340d9190614947565b61341791906149d0565b601d600082825461342891906147cd565b92505081905550601454601754826134409190614947565b61344a91906149d0565b601e600082825461345b91906147cd565b92505081905550601454601554826134739190614947565b61347d91906149d0565b601c600082825461348e91906147cd565b925050819055505b5b60008111156134ac576134ab873083613663565b5b80856134b891906154a7565b94505b6134c6878787613663565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836136459190614947565b905092915050565b6000818361365b91906149d0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ca906151ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373a9061523f565b60405180910390fd5b61374e838383613d91565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156137d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137cb9061554d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461386791906147cd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138cb91906143a3565b60405180910390a36138de848484613d96565b50505050565b60006138ef3061135b565b90506000601e54601c54601d5461390691906147cd565b61391091906147cd565b90506000808314806139225750600082145b1561392f57505050613bc9565b6014600a5461393e9190614947565b831115613957576014600a546139549190614947565b92505b6000600283601d548661396a9190614947565b61397491906149d0565b61397e91906149d0565b905060006139958286613d9b90919063ffffffff16565b905060004790506139a582613db1565b60006139ba8247613d9b90919063ffffffff16565b905060006139e5876139d7601c548561363790919063ffffffff16565b61364d90919063ffffffff16565b90506000613a1088613a02601e548661363790919063ffffffff16565b61364d90919063ffffffff16565b90506000818385613a2191906154a7565b613a2b91906154a7565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a8b9061559e565b60006040518083038185875af1925050503d8060008114613ac8576040519150601f19603f3d011682016040523d82523d6000602084013e613acd565b606091505b505080985050600087118015613ae35750600081115b15613b3057613af28782613fee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613b27939291906155b3565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b769061559e565b60006040518083038185875af1925050503d8060008114613bb3576040519150601f19603f3d011682016040523d82523d6000602084013e613bb8565b606091505b505080985050505050505050505050505b565b600042600d8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000fc932be359a728f0998dd6664681900a9ec7a4186040518263ffffffff1660e01b8152600401613c2f9190614420565b602060405180830381865afa158015613c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c709190614fea565b90506000613c9d612710613c8f6010548561363790919063ffffffff16565b61364d90919063ffffffff16565b90506000811115613cd657613cd57f000000000000000000000000fc932be359a728f0998dd6664681900a9ec7a41861dead83613663565b5b60007f000000000000000000000000fc932be359a728f0998dd6664681900a9ec7a41890508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d4357600080fd5b505af1158015613d57573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613da991906154a7565b905092915050565b6000600267ffffffffffffffff811115613dce57613dcd6155ea565b5b604051908082528060200260200182016040528015613dfc5781602001602082028036833780820191505090505b5090503081600081518110613e1457613e13615619565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edd919061565d565b81600181518110613ef157613ef0615619565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f56307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612662565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb8959493929190615783565b600060405180830381600087803b158015613fd257600080fd5b505af1158015613fe6573d6000803e3d6000fd5b505050505050565b614019307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612662565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614080969594939291906157dd565b60606040518083038185885af115801561409e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c3919061583e565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141045780820151818401526020810190506140e9565b83811115614113576000848401525b50505050565b6000601f19601f8301169050919050565b6000614135826140ca565b61413f81856140d5565b935061414f8185602086016140e6565b61415881614119565b840191505092915050565b6000602082019050818103600083015261417d818461412a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141b58261418a565b9050919050565b6141c5816141aa565b81146141d057600080fd5b50565b6000813590506141e2816141bc565b92915050565b6000819050919050565b6141fb816141e8565b811461420657600080fd5b50565b600081359050614218816141f2565b92915050565b6000806040838503121561423557614234614185565b5b6000614243858286016141d3565b925050602061425485828601614209565b9150509250929050565b60008115159050919050565b6142738161425e565b82525050565b600060208201905061428e600083018461426a565b92915050565b61429d8161425e565b81146142a857600080fd5b50565b6000813590506142ba81614294565b92915050565b6000602082840312156142d6576142d5614185565b5b60006142e4848285016142ab565b91505092915050565b60006020828403121561430357614302614185565b5b6000614311848285016141d3565b91505092915050565b6000819050919050565b600061433f61433a6143358461418a565b61431a565b61418a565b9050919050565b600061435182614324565b9050919050565b600061436382614346565b9050919050565b61437381614358565b82525050565b600060208201905061438e600083018461436a565b92915050565b61439d816141e8565b82525050565b60006020820190506143b86000830184614394565b92915050565b6000806000606084860312156143d7576143d6614185565b5b60006143e5868287016141d3565b93505060206143f6868287016141d3565b925050604061440786828701614209565b9150509250925092565b61441a816141aa565b82525050565b60006020820190506144356000830184614411565b92915050565b600060ff82169050919050565b6144518161443b565b82525050565b600060208201905061446c6000830184614448565b92915050565b60008060006060848603121561448b5761448a614185565b5b600061449986828701614209565b93505060206144aa86828701614209565b92505060406144bb868287016142ab565b9150509250925092565b600080604083850312156144dc576144db614185565b5b60006144ea858286016141d3565b92505060206144fb858286016142ab565b9150509250929050565b6000806040838503121561451c5761451b614185565b5b600061452a85828601614209565b925050602061453b85828601614209565b9150509250929050565b60006020828403121561455b5761455a614185565b5b600061456984828501614209565b91505092915050565b6000806040838503121561458957614588614185565b5b6000614597858286016141d3565b92505060206145a8858286016141d3565b9150509250929050565b60008060008060008060c087890312156145cf576145ce614185565b5b60006145dd89828a01614209565b96505060206145ee89828a01614209565b95505060406145ff89828a01614209565b945050606061461089828a01614209565b935050608061462189828a01614209565b92505060a061463289828a01614209565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061468657607f821691505b6020821081141561469a5761469961463f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146d66020836140d5565b91506146e1826146a0565b602082019050919050565b60006020820190508181036000830152614705816146c9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006147686028836140d5565b91506147738261470c565b604082019050919050565b600060208201905081810360008301526147978161475b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147d8826141e8565b91506147e3836141e8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148185761481761479e565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061487f6033836140d5565b915061488a82614823565b604082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006149116030836140d5565b915061491c826148b5565b604082019050919050565b6000602082019050818103600083015261494081614904565b9050919050565b6000614952826141e8565b915061495d836141e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149965761499561479e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149db826141e8565b91506149e6836141e8565b9250826149f6576149f56149a1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614a5d602f836140d5565b9150614a6882614a01565b604082019050919050565b60006020820190508181036000830152614a8c81614a50565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614aef6024836140d5565b9150614afa82614a93565b604082019050919050565b60006020820190508181036000830152614b1e81614ae2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614b816039836140d5565b9150614b8c82614b25565b604082019050919050565b60006020820190508181036000830152614bb081614b74565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614c136025836140d5565b9150614c1e82614bb7565b604082019050919050565b60006020820190508181036000830152614c4281614c06565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ca56035836140d5565b9150614cb082614c49565b604082019050919050565b60006020820190508181036000830152614cd481614c98565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d376034836140d5565b9150614d4282614cdb565b604082019050919050565b60006020820190508181036000830152614d6681614d2a565b9050919050565b7f4d757374206b656570206665657320617420333325206f72206c657373000000600082015250565b6000614da3601d836140d5565b9150614dae82614d6d565b602082019050919050565b60006020820190508181036000830152614dd281614d96565b9050919050565b7f4d757374206b656570206665657320617420373525206f72206c657373000000600082015250565b6000614e0f601d836140d5565b9150614e1a82614dd9565b602082019050919050565b60006020820190508181036000830152614e3e81614e02565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ea16026836140d5565b9150614eac82614e45565b604082019050919050565b60006020820190508181036000830152614ed081614e94565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614f0d6020836140d5565b9150614f1882614ed7565b602082019050919050565b60006020820190508181036000830152614f3c81614f00565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614f9f602a836140d5565b9150614faa82614f43565b604082019050919050565b60006020820190508181036000830152614fce81614f92565b9050919050565b600081519050614fe4816141f2565b92915050565b60006020828403121561500057614fff614185565b5b600061500e84828501614fd5565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150736024836140d5565b915061507e82615017565b604082019050919050565b600060208201905081810360008301526150a281615066565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151056022836140d5565b9150615110826150a9565b604082019050919050565b60006020820190508181036000830152615134816150f8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151976025836140d5565b91506151a28261513b565b604082019050919050565b600060208201905081810360008301526151c68161518a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152296023836140d5565b9150615234826151cd565b604082019050919050565b600060208201905081810360008301526152588161521c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006152e16049836140d5565b91506152ec8261525f565b606082019050919050565b60006020820190508181036000830152615310816152d4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006153736035836140d5565b915061537e82615317565b604082019050919050565b600060208201905081810360008301526153a281615366565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006153df6013836140d5565b91506153ea826153a9565b602082019050919050565b6000602082019050818103600083015261540e816153d2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006154716036836140d5565b915061547c82615415565b604082019050919050565b600060208201905081810360008301526154a081615464565b9050919050565b60006154b2826141e8565b91506154bd836141e8565b9250828210156154d0576154cf61479e565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006155376026836140d5565b9150615542826154db565b604082019050919050565b600060208201905081810360008301526155668161552a565b9050919050565b600081905092915050565b50565b600061558860008361556d565b915061559382615578565b600082019050919050565b60006155a98261557b565b9150819050919050565b60006060820190506155c86000830186614394565b6155d56020830185614394565b6155e26040830184614394565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615657816141bc565b92915050565b60006020828403121561567357615672614185565b5b600061568184828501615648565b91505092915050565b6000819050919050565b60006156af6156aa6156a58461568a565b61431a565b6141e8565b9050919050565b6156bf81615694565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6156fa816141aa565b82525050565b600061570c83836156f1565b60208301905092915050565b6000602082019050919050565b6000615730826156c5565b61573a81856156d0565b9350615745836156e1565b8060005b8381101561577657815161575d8882615700565b975061576883615718565b925050600181019050615749565b5085935050505092915050565b600060a0820190506157986000830188614394565b6157a560208301876156b6565b81810360408301526157b78186615725565b90506157c66060830185614411565b6157d36080830184614394565b9695505050505050565b600060c0820190506157f26000830189614411565b6157ff6020830188614394565b61580c60408301876156b6565b61581960608301866156b6565b6158266080830185614411565b61583360a0830184614394565b979650505050505050565b60008060006060848603121561585757615856614185565b5b600061586586828701614fd5565b935050602061587686828701614fd5565b925050604061588786828701614fd5565b915050925092509256fea26469706673582212202fba1c095c68d577bf4f76b61218359242de1369f6cf620e5c8e5341bb4e43f164736f6c634300080a0033

Deployed Bytecode Sourcemap

12201:12320:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2461:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3246:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16979:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13488:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12273:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2734:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18440:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12736:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12821:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13340:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13305;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3396:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12376:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12660:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12627:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2648:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3776:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12331:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12909:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18577:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13179:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12877:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2833:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;774:88;;;;;;;;;;;;;:::i;:::-;;23084:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16845:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12464:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13090;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16458:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;593:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12495:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13208:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2552:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17865:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13154:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12785:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13374:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13278:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3971:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12706:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2950:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18253:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16108:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13553:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17703:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13015:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12526:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13061:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3105:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12587:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15993:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17063:634;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13122:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;868:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13240:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12562:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15890:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23899:619;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2461:85;2515:13;2539:5;2532:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2461:85;:::o;3246:144::-;3329:4;3336:39;3345:12;:10;:12::i;:::-;3359:7;3368:6;3336:8;:39::i;:::-;3384:4;3377:11;;3246:144;;;;:::o;16979:78::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17048:7:::1;17034:11;;:21;;;;;;;;;;;;;;;;;;16979:78:::0;:::o;13488:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12273:51::-;;;:::o;2734:93::-;2795:7;2813:12;;2806:19;;2734:93;:::o;18440:131::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18537:9:::1;;;;;;;;;;;18509:38;;18526:9;18509:38;;;;;;;;;;;;18560:9;18548;;:21;;;;;;;;;;;;;;;;;;18440:131:::0;:::o;12736:47::-;;;;:::o;12821:36::-;;;;:::o;13340:33::-;;;;:::o;13305:::-;;;;:::o;3396:374::-;3501:4;3509:36;3519:6;3527:9;3538:6;3509:9;:36::i;:::-;3546:24;3573:11;:19;3585:6;3573:19;;;;;;;;;;;;;;;:33;3593:12;:10;:12::i;:::-;3573:33;;;;;;;;;;;;;;;;3546:60;;3635:6;3615:16;:26;;3607:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3698:57;3707:6;3715:12;:10;:12::i;:::-;3748:6;3729:16;:25;3698:8;:57::i;:::-;3764:4;3757:11;;;3396:374;;;;;:::o;12376:53::-;12422:6;12376:53;:::o;12660:45::-;;;;:::o;12627:32::-;;;;;;;;;;;;;:::o;2648:80::-;2706:5;2723:2;2716:9;;2648:80;:::o;3776:189::-;3864:4;3871:80;3880:12;:10;:12::i;:::-;3894:7;3940:10;3903:11;:25;3915:12;:10;:12::i;:::-;3903:25;;;;;;;;;;;;;;;:34;3929:7;3903:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;3871:8;:80::i;:::-;3959:4;3952:11;;3776:189;;;;:::o;12331:38::-;;;:::o;12909:33::-;;;;;;;;;;;;;:::o;18577:110::-;18643:4;18657:19;:28;18677:7;18657:28;;;;;;;;;;;;;;;;;;;;;;;;;18650:35;;18577:110;;;:::o;13179:28::-;;;;:::o;12877:30::-;;;;;;;;;;;;;:::o;2833:111::-;2907:7;2924:9;:18;2934:7;2924:18;;;;;;;;;;;;;;;;2917:25;;2833:111;;;:::o;774:88::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;830:30:::1;857:1;830:18;:30::i;:::-;774:88::o:0;23084:387::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23226:3:::1;23203:19;:26;;23195:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;23305:4;23293:8;:16;;:33;;;;;23325:1;23313:8;:13;;23293:33;23285:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;23397:19;23379:15;:37;;;;23436:8;23417:16;:27;;;;23461:8;23445:13;;:24;;;;;;;;;;;;;;;;;;23084:387:::0;;;:::o;16845:128::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16967:4:::1;16925:31;:39;16957:6;16925:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;16845:128:::0;;:::o;12464:30::-;;;;;;;;;;;;;:::o;13090:::-;;;;:::o;16458:381::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16603:4:::1;16595;16590:1;16574:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16573:26;;;;:::i;:::-;16572:35;;;;:::i;:::-;16560:8;:47;;16552:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;16694:6;16682:8;:19;;;;:::i;:::-;16659:20;:42;;;;16757:4;16749;16744:1;16728:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16727:26;;;;:::i;:::-;16726:35;;;;:::i;:::-;16710:12;:51;;16702:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;16830:6;16814:12;:23;;;;:::i;:::-;16802:9;:35;;;;16458:381:::0;;:::o;593:71::-;639:7;656:6;;;;;;;;;;;649:13;;593:71;:::o;12495:24::-;;;;;;;;;;;;;:::o;13208:31::-;;;;:::o;2552:90::-;2608:13;2632:7;2625:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2552:90;:::o;17865:216::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17961:13:::1;17953:21;;:4;:21;;;;17945:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;18038:41;18067:4;18073:5;18038:28;:41::i;:::-;17865:216:::0;;:::o;13154:24::-;;;;:::o;12785:35::-;;;;:::o;13374:27::-;;;;:::o;13278:25::-;;;;:::o;3971:341::-;4064:4;4071:24;4098:11;:25;4110:12;:10;:12::i;:::-;4098:25;;;;;;;;;;;;;;;:34;4124:7;4098:34;;;;;;;;;;;;;;;;4071:61;;4161:15;4141:16;:35;;4133:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4230:67;4239:12;:10;:12::i;:::-;4253:7;4281:15;4262:16;:34;4230:8;:67::i;:::-;4306:4;4299:11;;;3971:341;;;;:::o;12706:29::-;;;;:::o;2950:149::-;3036:4;3043:42;3053:12;:10;:12::i;:::-;3067:9;3078:6;3043:9;:42::i;:::-;3093:4;3086:11;;2950:149;;;;:::o;18253:181::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18379:15:::1;;;;;;;;;;;18336:59;;18359:18;18336:59;;;;;;;;;;;;18414:18;18396:15;;:36;;;;;;;;;;;;;;;;;;18253:181:::0;:::o;16108:344::-;16186:4;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16237:6:::1;16232:1;16216:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16215:28;;;;:::i;:::-;16202:9;:41;;16193:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;16345:4;16340:1;16324:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16323:26;;;;:::i;:::-;16310:9;:39;;16302:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;16428:9;16407:18;:30;;;;16446:4;16439:11;;16108:344:::0;;;:::o;13553:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;17703:156::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17809:8:::1;17778:19;:28;17798:7;17778:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17839:7;17823:34;;;17848:8;17823:34;;;;;;:::i;:::-;;;;;;;;17703:156:::0;;:::o;13015:39::-;;;;;;;;;;;;;:::o;12526:35::-;;;;:::o;13061:27::-;;;;:::o;3105:135::-;3194:7;3211:11;:18;3223:5;3211:18;;;;;;;;;;;;;;;:27;3230:7;3211:27;;;;;;;;;;;;;;;;3204:34;;3105:135;;;;:::o;12587:33::-;;;;:::o;15993:109::-;16053:4;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16083:5:::1;16060:20;;:28;;;;;;;;;;;;;;;;;;16096:4;16089:11;;15993:109:::0;:::o;17063:634::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17275:16:::1;17257:15;:34;;;;17310:16;17292:15;:34;;;;17339:10;17327:9;:22;;;;17401:9;;17383:15;;17365;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;17350:12;:60;;;;17435:2;17419:12;;:18;;17411:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17492:17;17473:16;:36;;;;17529:17;17510:16;:36;;;;17561:11;17548:10;:24;;;;17625:9;;17607:15;;17589;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;17573:13;:61;;;;17659:2;17643:12;;:18;;17635:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17063:634:::0;;;;;;:::o;13122:30::-;;;;:::o;868:177::-;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;968:1:::1;948:22;;:8;:22;;;;940:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1015:28;1034:8;1015:18;:28::i;:::-;868:177:::0;:::o;13240:31::-;;;;:::o;12562:24::-;;;;:::o;15890:97::-;15943:4;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15968:5:::1;15951:14;;:22;;;;;;;;;;;;;;;;;;15981:4;15974:11;;15890:97:::0;:::o;23899:619::-;23983:4;712:12;:10;:12::i;:::-;701:23;;:7;:5;:7::i;:::-;:23;;;693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24038:19:::1;;24015:20;;:42;;;;:::i;:::-;23997:15;:60;23989:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;24113:4;24102:7;:15;;24094:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24188:15;24165:20;:38;;;;24204:28;24235:4;:14;;;24250:13;24235:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24204:60;;24265:20;24288:44;24326:5;24288:33;24313:7;24288:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;24265:67;;24352:1;24337:12;:16;24333:86;;;24356:61;24372:13;24395:6;24404:12;24356:15;:61::i;:::-;24333:86;24420:19;24457:13;24420:51;;24472:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24490:14;;;;;;;;;;24512:4;24505:11;;;;;23899:619:::0;;;:::o;191:92::-;244:7;271:10;264:17;;191:92;:::o;5708:297::-;5816:1;5799:19;;:5;:19;;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5887:1;5868:21;;:7;:21;;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5959:6;5929:11;:18;5941:5;5929:18;;;;;;;;;;;;;;;:27;5948:7;5929:27;;;;;;;;;;;;;;;:36;;;;5987:7;5971:32;;5980:5;5971:32;;;5996:6;5971:32;;;;;;:::i;:::-;;;;;;;;5708:297;;;:::o;18741:2506::-;18844:1;18828:18;;:4;:18;;;;18820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18911:1;18897:16;;:2;:16;;;;18889:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18968:1;18958:6;:11;18954:56;;;18972:28;18988:4;18994:2;18998:1;18972:15;:28::i;:::-;19002:7;;18954:56;19014:14;;;;;;;;;;;19010:967;;;19043:7;:5;:7::i;:::-;19035:15;;:4;:15;;;;:32;;;;;19060:7;:5;:7::i;:::-;19054:13;;:2;:13;;;;19035:32;:51;;;;;19084:1;19070:16;;:2;:16;;;;19035:51;:75;;;;;19103:6;19089:21;;:2;:21;;;;19035:75;:87;;;;;19114:8;;;;;;;;;;;19113:9;19035:87;19031:945;;;19129:20;;;;;;;;;;;19125:309;;;19164:7;:5;:7::i;:::-;19158:13;;:2;:13;;;;:46;;;;;19188:15;19174:30;;:2;:30;;;;19158:46;:77;;;;;19221:13;19207:28;;:2;:28;;;;19158:77;19153:280;;;19287:12;19246:28;:39;19275:9;19246:39;;;;;;;;;;;;;;;;:53;19238:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;19419:12;19377:28;:39;19406:9;19377:39;;;;;;;;;;;;;;;:54;;;;19153:280;19125:309;19439:25;:31;19465:4;19439:31;;;;;;;;;;;;;;;;;;;;;;;;;:70;;;;;19474:31;:35;19506:2;19474:35;;;;;;;;;;;;;;;;;;;;;;;;;19473:36;19439:70;19435:540;;;19530:20;;19520:6;:30;;19512:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19643:9;;19626:13;19636:2;19626:9;:13::i;:::-;19617:6;:22;;;;:::i;:::-;:35;;19608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19435:540;;;19686:25;:29;19712:2;19686:29;;;;;;;;;;;;;;;;;;;;;;;;;:70;;;;;19719:31;:37;19751:4;19719:37;;;;;;;;;;;;;;;;;;;;;;;;;19718:38;19686:70;19682:293;;;19777:20;;19767:6;:30;;19759:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;19682:293;;;19868:31;:35;19900:2;19868:35;;;;;;;;;;;;;;;;;;;;;;;;;19863:112;;19940:9;;19923:13;19933:2;19923:9;:13::i;:::-;19914:6;:22;;;;:::i;:::-;:35;;19906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19863:112;19682:293;19435:540;19031:945;19010:967;19977:28;20008:24;20026:4;20008:9;:24::i;:::-;19977:55;;20033:12;20072:18;;20048:20;:42;;20033:57;;20095:7;:21;;;;;20105:11;;;;;;;;;;;20095:21;:33;;;;;20120:8;;;;;;;;;;;20119:9;20095:33;:68;;;;;20132:25;:31;20158:4;20132:31;;;;;;;;;;;;;;;;;;;;;;;;;20131:32;20095:68;:97;;;;;20167:19;:25;20187:4;20167:25;;;;;;;;;;;;;;;;;;;;;;;;;20166:26;20095:97;:124;;;;;20196:19;:23;20216:2;20196:23;;;;;;;;;;;;;;;;;;;;;;;;;20195:24;20095:124;20091:176;;;20233:4;20222:8;;:15;;;;;;;;;;;;;;;;;;20238:10;:8;:10::i;:::-;20260:5;20249:8;;:16;;;;;;;;;;;;;;;;;;20091:176;20272:8;;;;;;;;;;;20271:9;:41;;;;;20283:25;:29;20309:2;20283:29;;;;;;;;;;;;;;;;;;;;;;;;;20271:41;:57;;;;;20315:13;;;;;;;;;;;20271:57;:111;;;;;20367:15;;20350:14;;:32;;;;:::i;:::-;20331:15;:51;;20271:111;:140;;;;;20386:19;:25;20406:4;20386:25;;;;;;;;;;;;;;;;;;;;;;;;;20385:26;20271:140;20267:178;;;20414:29;:27;:29::i;:::-;;20267:178;20445:12;20461:8;;;;;;;;;;;20460:9;20445:24;;20474:19;:25;20494:4;20474:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;20503:19;:23;20523:2;20503:23;;;;;;;;;;;;;;;;;;;;;;;;;20474:52;20470:76;;;20539:5;20529:15;;20470:76;20546:12;20568:7;20564:648;;;20582:25;:29;20608:2;20582:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;20631:1;20615:13;;:17;20582:50;20578:559;;;20642:34;20672:3;20642:25;20653:13;;20642:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;20635:41;;20727:13;;20707:16;;20700:4;:23;;;;:::i;:::-;20699:41;;;;:::i;:::-;20677:18;;:63;;;;;;;:::i;:::-;;;;;;;;20779:13;;20765:10;;20758:4;:17;;;;:::i;:::-;20757:35;;;;:::i;:::-;20741:12;;:51;;;;;;;:::i;:::-;;;;;;;;20843:13;;20823:16;;20816:4;:23;;;;:::i;:::-;20815:41;;;;:::i;:::-;20793:18;;:63;;;;;;;:::i;:::-;;;;;;;;20578:559;;;20867:25;:31;20893:4;20867:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;20917:1;20902:12;;:16;20867:51;20863:274;;;20928:33;20957:3;20928:24;20939:12;;20928:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;20921:40;;21011:12;;20992:15;;20985:4;:22;;;;:::i;:::-;20984:39;;;;:::i;:::-;20962:18;;:61;;;;;;;:::i;:::-;;;;;;;;21061:12;;21048:9;;21041:4;:16;;;;:::i;:::-;21040:33;;;;:::i;:::-;21024:12;;:49;;;;;;;:::i;:::-;;;;;;;;21123:12;;21104:15;;21097:4;:22;;;;:::i;:::-;21096:39;;;;:::i;:::-;21074:18;;:61;;;;;;;:::i;:::-;;;;;;;;20863:274;20578:559;21148:1;21141:4;:8;21137:59;;;21152:42;21168:4;21182;21189;21152:15;:42::i;:::-;21137:59;21206:4;21196:14;;;;;:::i;:::-;;;20564:648;21212:33;21228:4;21234:2;21238:6;21212:15;:33::i;:::-;18819:2428;;;;18741:2506;;;;:::o;1051:160::-;1116:16;1135:6;;;;;;;;;;;1116:25;;1153:8;1144:6;;:17;;;;;;;;;;;;;;;;;;1199:8;1168:40;;1189:8;1168:40;;;;;;;;;;;;1114:97;1051:160;:::o;18087:::-;18194:5;18160:25;:31;18186:4;18160:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18239:5;18205:40;;18233:4;18205:40;;;;;;;;;;;;18087:160;;:::o;7212:84::-;7270:7;7292:1;7288;:5;;;;:::i;:::-;7281:12;;7212:84;;;;:::o;7302:::-;7360:7;7382:1;7378;:5;;;;:::i;:::-;7371:12;;7302:84;;;;:::o;4318:571::-;4430:1;4412:20;;:6;:20;;;;4404:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4505:1;4484:23;;:9;:23;;;;4476:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4548:47;4569:6;4577:9;4588:6;4548:20;:47::i;:::-;4596:21;4620:9;:17;4630:6;4620:17;;;;;;;;;;;;;;;;4596:41;;4663:6;4646:13;:23;;4638:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;4761:6;4745:13;:22;4725:9;:17;4735:6;4725:17;;;;;;;;;;;;;;;:42;;;;4793:6;4769:9;:20;4779:9;4769:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;4822:9;4805:35;;4814:6;4805:35;;;4833:6;4805:35;;;;;;:::i;:::-;;;;;;;;4841:46;4861:6;4869:9;4880:6;4841:19;:46::i;:::-;4403:486;4318:571;;;:::o;21848:1230::-;21877:23;21903:24;21921:4;21903:9;:24::i;:::-;21877:50;;21928:25;21996:12;;21976:18;;21956;;:38;;;;:::i;:::-;:52;;;;:::i;:::-;21928:80;;22009:12;22045:1;22026:15;:20;:46;;;;22071:1;22050:17;:22;22026:46;22022:62;;;22076:7;;;;;22022:62;22127:2;22106:18;;:23;;;;:::i;:::-;22088:15;:41;22084:91;;;22171:2;22150:18;;:23;;;;:::i;:::-;22132:41;;22084:91;22175:23;22260:1;22241:17;22220:18;;22202:15;:36;;;;:::i;:::-;22201:57;;;;:::i;:::-;:60;;;;:::i;:::-;22175:86;;22262:26;22291:36;22311:15;22291;:19;;:36;;;;:::i;:::-;22262:65;;22328:25;22356:21;22328:49;;22378:36;22395:18;22378:16;:36::i;:::-;22415:18;22436:44;22462:17;22436:21;:25;;:44;;;;:::i;:::-;22415:65;;22481:23;22507:57;22546:17;22507:34;22522:18;;22507:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;22481:83;;22565:17;22585:51;22618:17;22585:28;22600:12;;22585:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;22565:71;;22637:23;22694:9;22676:15;22663:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;22637:66;;22725:1;22704:18;:22;;;;22748:1;22727:18;:22;;;;22765:1;22750:12;:16;;;;22789:9;;;;;;;;;;;22781:23;;22812:9;22781:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22767:59;;;;;22849:1;22831:15;:19;:42;;;;;22872:1;22854:15;:19;22831:42;22827:172;;;22876:46;22889:15;22906;22876:12;:46::i;:::-;22928:69;22943:18;22962:15;22978:18;;22928:69;;;;;;;;:::i;:::-;;;;;;;;22827:172;23021:15;;;;;;;;;;;23013:29;;23050:21;23013:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22999:77;;;;;21876:1202;;;;;;;;;;21848:1230;:::o;23477:416::-;23534:4;23558:15;23541:14;:32;;;;23574:28;23605:4;:14;;;23620:13;23605:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23574:60;;23635:20;23658:53;23705:5;23658:42;23683:16;;23658:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;23635:76;;23731:1;23716:12;:16;23712:86;;;23735:61;23751:13;23774:6;23783:12;23735:15;:61::i;:::-;23712:86;23798:19;23835:13;23798:51;;23850:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23867:12;;;;;;;;;;23887:4;23880:11;;;;;23477:416;:::o;6011:90::-;;;;:::o;6107:91::-;;;;:::o;7123:83::-;7181:7;7203:1;7199;:5;;;;:::i;:::-;7192:12;;7123:83;;;;:::o;21253:337::-;21309:21;21347:1;21333:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21309:40;;21368:4;21350;21355:1;21350:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21384:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21374:4;21379:1;21374:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;21407:62;21424:4;21439:15;21457:11;21407:8;:62::i;:::-;21470:15;:66;;;21537:11;21549:1;21552:4;21565;21572:15;21470:118;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21308:282;21253:337;:::o;21596:246::-;21667:62;21684:4;21699:15;21717:11;21667:8;:62::i;:::-;21730:15;:31;;;21769:9;21788:4;21794:11;21806:1;21809;12422:6;21824:15;21730:110;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21596:246;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:116::-;3564:21;3579:5;3564:21;:::i;:::-;3557:5;3554:32;3544:60;;3600:1;3597;3590:12;3544:60;3494:116;:::o;3616:133::-;3659:5;3697:6;3684:20;3675:29;;3713:30;3737:5;3713:30;:::i;:::-;3616:133;;;;:::o;3755:323::-;3811:6;3860:2;3848:9;3839:7;3835:23;3831:32;3828:119;;;3866:79;;:::i;:::-;3828:119;3986:1;4011:50;4053:7;4044:6;4033:9;4029:22;4011:50;:::i;:::-;4001:60;;3957:114;3755:323;;;;:::o;4084:329::-;4143:6;4192:2;4180:9;4171:7;4167:23;4163:32;4160:119;;;4198:79;;:::i;:::-;4160:119;4318:1;4343:53;4388:7;4379:6;4368:9;4364:22;4343:53;:::i;:::-;4333:63;;4289:117;4084:329;;;;:::o;4419:60::-;4447:3;4468:5;4461:12;;4419:60;;;:::o;4485:142::-;4535:9;4568:53;4586:34;4595:24;4613:5;4595:24;:::i;:::-;4586:34;:::i;:::-;4568:53;:::i;:::-;4555:66;;4485:142;;;:::o;4633:126::-;4683:9;4716:37;4747:5;4716:37;:::i;:::-;4703:50;;4633:126;;;:::o;4765:153::-;4842:9;4875:37;4906:5;4875:37;:::i;:::-;4862:50;;4765:153;;;:::o;4924:185::-;5038:64;5096:5;5038:64;:::i;:::-;5033:3;5026:77;4924:185;;:::o;5115:276::-;5235:4;5273:2;5262:9;5258:18;5250:26;;5286:98;5381:1;5370:9;5366:17;5357:6;5286:98;:::i;:::-;5115:276;;;;:::o;5397:118::-;5484:24;5502:5;5484:24;:::i;:::-;5479:3;5472:37;5397:118;;:::o;5521:222::-;5614:4;5652:2;5641:9;5637:18;5629:26;;5665:71;5733:1;5722:9;5718:17;5709:6;5665:71;:::i;:::-;5521:222;;;;:::o;5749:619::-;5826:6;5834;5842;5891:2;5879:9;5870:7;5866:23;5862:32;5859:119;;;5897:79;;:::i;:::-;5859:119;6017:1;6042:53;6087:7;6078:6;6067:9;6063:22;6042:53;:::i;:::-;6032:63;;5988:117;6144:2;6170:53;6215:7;6206:6;6195:9;6191:22;6170:53;:::i;:::-;6160:63;;6115:118;6272:2;6298:53;6343:7;6334:6;6323:9;6319:22;6298:53;:::i;:::-;6288:63;;6243:118;5749:619;;;;;:::o;6374:118::-;6461:24;6479:5;6461:24;:::i;:::-;6456:3;6449:37;6374:118;;:::o;6498:222::-;6591:4;6629:2;6618:9;6614:18;6606:26;;6642:71;6710:1;6699:9;6695:17;6686:6;6642:71;:::i;:::-;6498:222;;;;:::o;6726:86::-;6761:7;6801:4;6794:5;6790:16;6779:27;;6726:86;;;:::o;6818:112::-;6901:22;6917:5;6901:22;:::i;:::-;6896:3;6889:35;6818:112;;:::o;6936:214::-;7025:4;7063:2;7052:9;7048:18;7040:26;;7076:67;7140:1;7129:9;7125:17;7116:6;7076:67;:::i;:::-;6936:214;;;;:::o;7156:613::-;7230:6;7238;7246;7295:2;7283:9;7274:7;7270:23;7266:32;7263:119;;;7301:79;;:::i;:::-;7263:119;7421:1;7446:53;7491:7;7482:6;7471:9;7467:22;7446:53;:::i;:::-;7436:63;;7392:117;7548:2;7574:53;7619:7;7610:6;7599:9;7595:22;7574:53;:::i;:::-;7564:63;;7519:118;7676:2;7702:50;7744:7;7735:6;7724:9;7720:22;7702:50;:::i;:::-;7692:60;;7647:115;7156:613;;;;;:::o;7775:468::-;7840:6;7848;7897:2;7885:9;7876:7;7872:23;7868:32;7865:119;;;7903:79;;:::i;:::-;7865:119;8023:1;8048:53;8093:7;8084:6;8073:9;8069:22;8048:53;:::i;:::-;8038:63;;7994:117;8150:2;8176:50;8218:7;8209:6;8198:9;8194:22;8176:50;:::i;:::-;8166:60;;8121:115;7775:468;;;;;:::o;8249:474::-;8317:6;8325;8374:2;8362:9;8353:7;8349:23;8345:32;8342:119;;;8380:79;;:::i;:::-;8342:119;8500:1;8525:53;8570:7;8561:6;8550:9;8546:22;8525:53;:::i;:::-;8515:63;;8471:117;8627:2;8653:53;8698:7;8689:6;8678:9;8674:22;8653:53;:::i;:::-;8643:63;;8598:118;8249:474;;;;;:::o;8729:329::-;8788:6;8837:2;8825:9;8816:7;8812:23;8808:32;8805:119;;;8843:79;;:::i;:::-;8805:119;8963:1;8988:53;9033:7;9024:6;9013:9;9009:22;8988:53;:::i;:::-;8978:63;;8934:117;8729:329;;;;:::o;9064:474::-;9132:6;9140;9189:2;9177:9;9168:7;9164:23;9160:32;9157:119;;;9195:79;;:::i;:::-;9157:119;9315:1;9340:53;9385:7;9376:6;9365:9;9361:22;9340:53;:::i;:::-;9330:63;;9286:117;9442:2;9468:53;9513:7;9504:6;9493:9;9489:22;9468:53;:::i;:::-;9458:63;;9413:118;9064:474;;;;;:::o;9544:1057::-;9648:6;9656;9664;9672;9680;9688;9737:3;9725:9;9716:7;9712:23;9708:33;9705:120;;;9744:79;;:::i;:::-;9705:120;9864:1;9889:53;9934:7;9925:6;9914:9;9910:22;9889:53;:::i;:::-;9879:63;;9835:117;9991:2;10017:53;10062:7;10053:6;10042:9;10038:22;10017:53;:::i;:::-;10007:63;;9962:118;10119:2;10145:53;10190:7;10181:6;10170:9;10166:22;10145:53;:::i;:::-;10135:63;;10090:118;10247:2;10273:53;10318:7;10309:6;10298:9;10294:22;10273:53;:::i;:::-;10263:63;;10218:118;10375:3;10402:53;10447:7;10438:6;10427:9;10423:22;10402:53;:::i;:::-;10392:63;;10346:119;10504:3;10531:53;10576:7;10567:6;10556:9;10552:22;10531:53;:::i;:::-;10521:63;;10475:119;9544:1057;;;;;;;;:::o;10607:180::-;10655:77;10652:1;10645:88;10752:4;10749:1;10742:15;10776:4;10773:1;10766:15;10793:320;10837:6;10874:1;10868:4;10864:12;10854:22;;10921:1;10915:4;10911:12;10942:18;10932:81;;10998:4;10990:6;10986:17;10976:27;;10932:81;11060:2;11052:6;11049:14;11029:18;11026:38;11023:84;;;11079:18;;:::i;:::-;11023:84;10844:269;10793:320;;;:::o;11119:182::-;11259:34;11255:1;11247:6;11243:14;11236:58;11119:182;:::o;11307:366::-;11449:3;11470:67;11534:2;11529:3;11470:67;:::i;:::-;11463:74;;11546:93;11635:3;11546:93;:::i;:::-;11664:2;11659:3;11655:12;11648:19;;11307:366;;;:::o;11679:419::-;11845:4;11883:2;11872:9;11868:18;11860:26;;11932:9;11926:4;11922:20;11918:1;11907:9;11903:17;11896:47;11960:131;12086:4;11960:131;:::i;:::-;11952:139;;11679:419;;;:::o;12104:227::-;12244:34;12240:1;12232:6;12228:14;12221:58;12313:10;12308:2;12300:6;12296:15;12289:35;12104:227;:::o;12337:366::-;12479:3;12500:67;12564:2;12559:3;12500:67;:::i;:::-;12493:74;;12576:93;12665:3;12576:93;:::i;:::-;12694:2;12689:3;12685:12;12678:19;;12337:366;;;:::o;12709:419::-;12875:4;12913:2;12902:9;12898:18;12890:26;;12962:9;12956:4;12952:20;12948:1;12937:9;12933:17;12926:47;12990:131;13116:4;12990:131;:::i;:::-;12982:139;;12709:419;;;:::o;13134:180::-;13182:77;13179:1;13172:88;13279:4;13276:1;13269:15;13303:4;13300:1;13293:15;13320:305;13360:3;13379:20;13397:1;13379:20;:::i;:::-;13374:25;;13413:20;13431:1;13413:20;:::i;:::-;13408:25;;13567:1;13499:66;13495:74;13492:1;13489:81;13486:107;;;13573:18;;:::i;:::-;13486:107;13617:1;13614;13610:9;13603:16;;13320:305;;;;:::o;13631:238::-;13771:34;13767:1;13759:6;13755:14;13748:58;13840:21;13835:2;13827:6;13823:15;13816:46;13631:238;:::o;13875:366::-;14017:3;14038:67;14102:2;14097:3;14038:67;:::i;:::-;14031:74;;14114:93;14203:3;14114:93;:::i;:::-;14232:2;14227:3;14223:12;14216:19;;13875:366;;;:::o;14247:419::-;14413:4;14451:2;14440:9;14436:18;14428:26;;14500:9;14494:4;14490:20;14486:1;14475:9;14471:17;14464:47;14528:131;14654:4;14528:131;:::i;:::-;14520:139;;14247:419;;;:::o;14672:235::-;14812:34;14808:1;14800:6;14796:14;14789:58;14881:18;14876:2;14868:6;14864:15;14857:43;14672:235;:::o;14913:366::-;15055:3;15076:67;15140:2;15135:3;15076:67;:::i;:::-;15069:74;;15152:93;15241:3;15152:93;:::i;:::-;15270:2;15265:3;15261:12;15254:19;;14913:366;;;:::o;15285:419::-;15451:4;15489:2;15478:9;15474:18;15466:26;;15538:9;15532:4;15528:20;15524:1;15513:9;15509:17;15502:47;15566:131;15692:4;15566:131;:::i;:::-;15558:139;;15285:419;;;:::o;15710:348::-;15750:7;15773:20;15791:1;15773:20;:::i;:::-;15768:25;;15807:20;15825:1;15807:20;:::i;:::-;15802:25;;15995:1;15927:66;15923:74;15920:1;15917:81;15912:1;15905:9;15898:17;15894:105;15891:131;;;16002:18;;:::i;:::-;15891:131;16050:1;16047;16043:9;16032:20;;15710:348;;;;:::o;16064:180::-;16112:77;16109:1;16102:88;16209:4;16206:1;16199:15;16233:4;16230:1;16223:15;16250:185;16290:1;16307:20;16325:1;16307:20;:::i;:::-;16302:25;;16341:20;16359:1;16341:20;:::i;:::-;16336:25;;16380:1;16370:35;;16385:18;;:::i;:::-;16370:35;16427:1;16424;16420:9;16415:14;;16250:185;;;;:::o;16441:234::-;16581:34;16577:1;16569:6;16565:14;16558:58;16650:17;16645:2;16637:6;16633:15;16626:42;16441:234;:::o;16681:366::-;16823:3;16844:67;16908:2;16903:3;16844:67;:::i;:::-;16837:74;;16920:93;17009:3;16920:93;:::i;:::-;17038:2;17033:3;17029:12;17022:19;;16681:366;;;:::o;17053:419::-;17219:4;17257:2;17246:9;17242:18;17234:26;;17306:9;17300:4;17296:20;17292:1;17281:9;17277:17;17270:47;17334:131;17460:4;17334:131;:::i;:::-;17326:139;;17053:419;;;:::o;17478:223::-;17618:34;17614:1;17606:6;17602:14;17595:58;17687:6;17682:2;17674:6;17670:15;17663:31;17478:223;:::o;17707:366::-;17849:3;17870:67;17934:2;17929:3;17870:67;:::i;:::-;17863:74;;17946:93;18035:3;17946:93;:::i;:::-;18064:2;18059:3;18055:12;18048:19;;17707:366;;;:::o;18079:419::-;18245:4;18283:2;18272:9;18268:18;18260:26;;18332:9;18326:4;18322:20;18318:1;18307:9;18303:17;18296:47;18360:131;18486:4;18360:131;:::i;:::-;18352:139;;18079:419;;;:::o;18504:244::-;18644:34;18640:1;18632:6;18628:14;18621:58;18713:27;18708:2;18700:6;18696:15;18689:52;18504:244;:::o;18754:366::-;18896:3;18917:67;18981:2;18976:3;18917:67;:::i;:::-;18910:74;;18993:93;19082:3;18993:93;:::i;:::-;19111:2;19106:3;19102:12;19095:19;;18754:366;;;:::o;19126:419::-;19292:4;19330:2;19319:9;19315:18;19307:26;;19379:9;19373:4;19369:20;19365:1;19354:9;19350:17;19343:47;19407:131;19533:4;19407:131;:::i;:::-;19399:139;;19126:419;;;:::o;19551:224::-;19691:34;19687:1;19679:6;19675:14;19668:58;19760:7;19755:2;19747:6;19743:15;19736:32;19551:224;:::o;19781:366::-;19923:3;19944:67;20008:2;20003:3;19944:67;:::i;:::-;19937:74;;20020:93;20109:3;20020:93;:::i;:::-;20138:2;20133:3;20129:12;20122:19;;19781:366;;;:::o;20153:419::-;20319:4;20357:2;20346:9;20342:18;20334:26;;20406:9;20400:4;20396:20;20392:1;20381:9;20377:17;20370:47;20434:131;20560:4;20434:131;:::i;:::-;20426:139;;20153:419;;;:::o;20578:240::-;20718:34;20714:1;20706:6;20702:14;20695:58;20787:23;20782:2;20774:6;20770:15;20763:48;20578:240;:::o;20824:366::-;20966:3;20987:67;21051:2;21046:3;20987:67;:::i;:::-;20980:74;;21063:93;21152:3;21063:93;:::i;:::-;21181:2;21176:3;21172:12;21165:19;;20824:366;;;:::o;21196:419::-;21362:4;21400:2;21389:9;21385:18;21377:26;;21449:9;21443:4;21439:20;21435:1;21424:9;21420:17;21413:47;21477:131;21603:4;21477:131;:::i;:::-;21469:139;;21196:419;;;:::o;21621:239::-;21761:34;21757:1;21749:6;21745:14;21738:58;21830:22;21825:2;21817:6;21813:15;21806:47;21621:239;:::o;21866:366::-;22008:3;22029:67;22093:2;22088:3;22029:67;:::i;:::-;22022:74;;22105:93;22194:3;22105:93;:::i;:::-;22223:2;22218:3;22214:12;22207:19;;21866:366;;;:::o;22238:419::-;22404:4;22442:2;22431:9;22427:18;22419:26;;22491:9;22485:4;22481:20;22477:1;22466:9;22462:17;22455:47;22519:131;22645:4;22519:131;:::i;:::-;22511:139;;22238:419;;;:::o;22663:179::-;22803:31;22799:1;22791:6;22787:14;22780:55;22663:179;:::o;22848:366::-;22990:3;23011:67;23075:2;23070:3;23011:67;:::i;:::-;23004:74;;23087:93;23176:3;23087:93;:::i;:::-;23205:2;23200:3;23196:12;23189:19;;22848:366;;;:::o;23220:419::-;23386:4;23424:2;23413:9;23409:18;23401:26;;23473:9;23467:4;23463:20;23459:1;23448:9;23444:17;23437:47;23501:131;23627:4;23501:131;:::i;:::-;23493:139;;23220:419;;;:::o;23645:179::-;23785:31;23781:1;23773:6;23769:14;23762:55;23645:179;:::o;23830:366::-;23972:3;23993:67;24057:2;24052:3;23993:67;:::i;:::-;23986:74;;24069:93;24158:3;24069:93;:::i;:::-;24187:2;24182:3;24178:12;24171:19;;23830:366;;;:::o;24202:419::-;24368:4;24406:2;24395:9;24391:18;24383:26;;24455:9;24449:4;24445:20;24441:1;24430:9;24426:17;24419:47;24483:131;24609:4;24483:131;:::i;:::-;24475:139;;24202:419;;;:::o;24627:225::-;24767:34;24763:1;24755:6;24751:14;24744:58;24836:8;24831:2;24823:6;24819:15;24812:33;24627:225;:::o;24858:366::-;25000:3;25021:67;25085:2;25080:3;25021:67;:::i;:::-;25014:74;;25097:93;25186:3;25097:93;:::i;:::-;25215:2;25210:3;25206:12;25199:19;;24858:366;;;:::o;25230:419::-;25396:4;25434:2;25423:9;25419:18;25411:26;;25483:9;25477:4;25473:20;25469:1;25458:9;25454:17;25447:47;25511:131;25637:4;25511:131;:::i;:::-;25503:139;;25230:419;;;:::o;25655:182::-;25795:34;25791:1;25783:6;25779:14;25772:58;25655:182;:::o;25843:366::-;25985:3;26006:67;26070:2;26065:3;26006:67;:::i;:::-;25999:74;;26082:93;26171:3;26082:93;:::i;:::-;26200:2;26195:3;26191:12;26184:19;;25843:366;;;:::o;26215:419::-;26381:4;26419:2;26408:9;26404:18;26396:26;;26468:9;26462:4;26458:20;26454:1;26443:9;26439:17;26432:47;26496:131;26622:4;26496:131;:::i;:::-;26488:139;;26215:419;;;:::o;26640:229::-;26780:34;26776:1;26768:6;26764:14;26757:58;26849:12;26844:2;26836:6;26832:15;26825:37;26640:229;:::o;26875:366::-;27017:3;27038:67;27102:2;27097:3;27038:67;:::i;:::-;27031:74;;27114:93;27203:3;27114:93;:::i;:::-;27232:2;27227:3;27223:12;27216:19;;26875:366;;;:::o;27247:419::-;27413:4;27451:2;27440:9;27436:18;27428:26;;27500:9;27494:4;27490:20;27486:1;27475:9;27471:17;27464:47;27528:131;27654:4;27528:131;:::i;:::-;27520:139;;27247:419;;;:::o;27672:143::-;27729:5;27760:6;27754:13;27745:22;;27776:33;27803:5;27776:33;:::i;:::-;27672:143;;;;:::o;27821:351::-;27891:6;27940:2;27928:9;27919:7;27915:23;27911:32;27908:119;;;27946:79;;:::i;:::-;27908:119;28066:1;28091:64;28147:7;28138:6;28127:9;28123:22;28091:64;:::i;:::-;28081:74;;28037:128;27821:351;;;;:::o;28178:223::-;28318:34;28314:1;28306:6;28302:14;28295:58;28387:6;28382:2;28374:6;28370:15;28363:31;28178:223;:::o;28407:366::-;28549:3;28570:67;28634:2;28629:3;28570:67;:::i;:::-;28563:74;;28646:93;28735:3;28646:93;:::i;:::-;28764:2;28759:3;28755:12;28748:19;;28407:366;;;:::o;28779:419::-;28945:4;28983:2;28972:9;28968:18;28960:26;;29032:9;29026:4;29022:20;29018:1;29007:9;29003:17;28996:47;29060:131;29186:4;29060:131;:::i;:::-;29052:139;;28779:419;;;:::o;29204:221::-;29344:34;29340:1;29332:6;29328:14;29321:58;29413:4;29408:2;29400:6;29396:15;29389:29;29204:221;:::o;29431:366::-;29573:3;29594:67;29658:2;29653:3;29594:67;:::i;:::-;29587:74;;29670:93;29759:3;29670:93;:::i;:::-;29788:2;29783:3;29779:12;29772:19;;29431:366;;;:::o;29803:419::-;29969:4;30007:2;29996:9;29992:18;29984:26;;30056:9;30050:4;30046:20;30042:1;30031:9;30027:17;30020:47;30084:131;30210:4;30084:131;:::i;:::-;30076:139;;29803:419;;;:::o;30228:224::-;30368:34;30364:1;30356:6;30352:14;30345:58;30437:7;30432:2;30424:6;30420:15;30413:32;30228:224;:::o;30458:366::-;30600:3;30621:67;30685:2;30680:3;30621:67;:::i;:::-;30614:74;;30697:93;30786:3;30697:93;:::i;:::-;30815:2;30810:3;30806:12;30799:19;;30458:366;;;:::o;30830:419::-;30996:4;31034:2;31023:9;31019:18;31011:26;;31083:9;31077:4;31073:20;31069:1;31058:9;31054:17;31047:47;31111:131;31237:4;31111:131;:::i;:::-;31103:139;;30830:419;;;:::o;31255:222::-;31395:34;31391:1;31383:6;31379:14;31372:58;31464:5;31459:2;31451:6;31447:15;31440:30;31255:222;:::o;31483:366::-;31625:3;31646:67;31710:2;31705:3;31646:67;:::i;:::-;31639:74;;31722:93;31811:3;31722:93;:::i;:::-;31840:2;31835:3;31831:12;31824:19;;31483:366;;;:::o;31855:419::-;32021:4;32059:2;32048:9;32044:18;32036:26;;32108:9;32102:4;32098:20;32094:1;32083:9;32079:17;32072:47;32136:131;32262:4;32136:131;:::i;:::-;32128:139;;31855:419;;;:::o;32280:297::-;32420:34;32416:1;32408:6;32404:14;32397:58;32489:34;32484:2;32476:6;32472:15;32465:59;32558:11;32553:2;32545:6;32541:15;32534:36;32280:297;:::o;32583:366::-;32725:3;32746:67;32810:2;32805:3;32746:67;:::i;:::-;32739:74;;32822:93;32911:3;32822:93;:::i;:::-;32940:2;32935:3;32931:12;32924:19;;32583:366;;;:::o;32955:419::-;33121:4;33159:2;33148:9;33144:18;33136:26;;33208:9;33202:4;33198:20;33194:1;33183:9;33179:17;33172:47;33236:131;33362:4;33236:131;:::i;:::-;33228:139;;32955:419;;;:::o;33380:240::-;33520:34;33516:1;33508:6;33504:14;33497:58;33589:23;33584:2;33576:6;33572:15;33565:48;33380:240;:::o;33626:366::-;33768:3;33789:67;33853:2;33848:3;33789:67;:::i;:::-;33782:74;;33865:93;33954:3;33865:93;:::i;:::-;33983:2;33978:3;33974:12;33967:19;;33626:366;;;:::o;33998:419::-;34164:4;34202:2;34191:9;34187:18;34179:26;;34251:9;34245:4;34241:20;34237:1;34226:9;34222:17;34215:47;34279:131;34405:4;34279:131;:::i;:::-;34271:139;;33998:419;;;:::o;34423:169::-;34563:21;34559:1;34551:6;34547:14;34540:45;34423:169;:::o;34598:366::-;34740:3;34761:67;34825:2;34820:3;34761:67;:::i;:::-;34754:74;;34837:93;34926:3;34837:93;:::i;:::-;34955:2;34950:3;34946:12;34939:19;;34598:366;;;:::o;34970:419::-;35136:4;35174:2;35163:9;35159:18;35151:26;;35223:9;35217:4;35213:20;35209:1;35198:9;35194:17;35187:47;35251:131;35377:4;35251:131;:::i;:::-;35243:139;;34970:419;;;:::o;35395:241::-;35535:34;35531:1;35523:6;35519:14;35512:58;35604:24;35599:2;35591:6;35587:15;35580:49;35395:241;:::o;35642:366::-;35784:3;35805:67;35869:2;35864:3;35805:67;:::i;:::-;35798:74;;35881:93;35970:3;35881:93;:::i;:::-;35999:2;35994:3;35990:12;35983:19;;35642:366;;;:::o;36014:419::-;36180:4;36218:2;36207:9;36203:18;36195:26;;36267:9;36261:4;36257:20;36253:1;36242:9;36238:17;36231:47;36295:131;36421:4;36295:131;:::i;:::-;36287:139;;36014:419;;;:::o;36439:191::-;36479:4;36499:20;36517:1;36499:20;:::i;:::-;36494:25;;36533:20;36551:1;36533:20;:::i;:::-;36528:25;;36572:1;36569;36566:8;36563:34;;;36577:18;;:::i;:::-;36563:34;36622:1;36619;36615:9;36607:17;;36439:191;;;;:::o;36636:225::-;36776:34;36772:1;36764:6;36760:14;36753:58;36845:8;36840:2;36832:6;36828:15;36821:33;36636:225;:::o;36867:366::-;37009:3;37030:67;37094:2;37089:3;37030:67;:::i;:::-;37023:74;;37106:93;37195:3;37106:93;:::i;:::-;37224:2;37219:3;37215:12;37208:19;;36867:366;;;:::o;37239:419::-;37405:4;37443:2;37432:9;37428:18;37420:26;;37492:9;37486:4;37482:20;37478:1;37467:9;37463:17;37456:47;37520:131;37646:4;37520:131;:::i;:::-;37512:139;;37239:419;;;:::o;37664:147::-;37765:11;37802:3;37787:18;;37664:147;;;;:::o;37817:114::-;;:::o;37937:398::-;38096:3;38117:83;38198:1;38193:3;38117:83;:::i;:::-;38110:90;;38209:93;38298:3;38209:93;:::i;:::-;38327:1;38322:3;38318:11;38311:18;;37937:398;;;:::o;38341:379::-;38525:3;38547:147;38690:3;38547:147;:::i;:::-;38540:154;;38711:3;38704:10;;38341:379;;;:::o;38726:442::-;38875:4;38913:2;38902:9;38898:18;38890:26;;38926:71;38994:1;38983:9;38979:17;38970:6;38926:71;:::i;:::-;39007:72;39075:2;39064:9;39060:18;39051:6;39007:72;:::i;:::-;39089;39157:2;39146:9;39142:18;39133:6;39089:72;:::i;:::-;38726:442;;;;;;:::o;39174:180::-;39222:77;39219:1;39212:88;39319:4;39316:1;39309:15;39343:4;39340:1;39333:15;39360:180;39408:77;39405:1;39398:88;39505:4;39502:1;39495:15;39529:4;39526:1;39519:15;39546:143;39603:5;39634:6;39628:13;39619:22;;39650:33;39677:5;39650:33;:::i;:::-;39546:143;;;;:::o;39695:351::-;39765:6;39814:2;39802:9;39793:7;39789:23;39785:32;39782:119;;;39820:79;;:::i;:::-;39782:119;39940:1;39965:64;40021:7;40012:6;40001:9;39997:22;39965:64;:::i;:::-;39955:74;;39911:128;39695:351;;;;:::o;40052:85::-;40097:7;40126:5;40115:16;;40052:85;;;:::o;40143:158::-;40201:9;40234:61;40252:42;40261:32;40287:5;40261:32;:::i;:::-;40252:42;:::i;:::-;40234:61;:::i;:::-;40221:74;;40143:158;;;:::o;40307:147::-;40402:45;40441:5;40402:45;:::i;:::-;40397:3;40390:58;40307:147;;:::o;40460:114::-;40527:6;40561:5;40555:12;40545:22;;40460:114;;;:::o;40580:184::-;40679:11;40713:6;40708:3;40701:19;40753:4;40748:3;40744:14;40729:29;;40580:184;;;;:::o;40770:132::-;40837:4;40860:3;40852:11;;40890:4;40885:3;40881:14;40873:22;;40770:132;;;:::o;40908:108::-;40985:24;41003:5;40985:24;:::i;:::-;40980:3;40973:37;40908:108;;:::o;41022:179::-;41091:10;41112:46;41154:3;41146:6;41112:46;:::i;:::-;41190:4;41185:3;41181:14;41167:28;;41022:179;;;;:::o;41207:113::-;41277:4;41309;41304:3;41300:14;41292:22;;41207:113;;;:::o;41356:732::-;41475:3;41504:54;41552:5;41504:54;:::i;:::-;41574:86;41653:6;41648:3;41574:86;:::i;:::-;41567:93;;41684:56;41734:5;41684:56;:::i;:::-;41763:7;41794:1;41779:284;41804:6;41801:1;41798:13;41779:284;;;41880:6;41874:13;41907:63;41966:3;41951:13;41907:63;:::i;:::-;41900:70;;41993:60;42046:6;41993:60;:::i;:::-;41983:70;;41839:224;41826:1;41823;41819:9;41814:14;;41779:284;;;41783:14;42079:3;42072:10;;41480:608;;;41356:732;;;;:::o;42094:831::-;42357:4;42395:3;42384:9;42380:19;42372:27;;42409:71;42477:1;42466:9;42462:17;42453:6;42409:71;:::i;:::-;42490:80;42566:2;42555:9;42551:18;42542:6;42490:80;:::i;:::-;42617:9;42611:4;42607:20;42602:2;42591:9;42587:18;42580:48;42645:108;42748:4;42739:6;42645:108;:::i;:::-;42637:116;;42763:72;42831:2;42820:9;42816:18;42807:6;42763:72;:::i;:::-;42845:73;42913:3;42902:9;42898:19;42889:6;42845:73;:::i;:::-;42094:831;;;;;;;;:::o;42931:807::-;43180:4;43218:3;43207:9;43203:19;43195:27;;43232:71;43300:1;43289:9;43285:17;43276:6;43232:71;:::i;:::-;43313:72;43381:2;43370:9;43366:18;43357:6;43313:72;:::i;:::-;43395:80;43471:2;43460:9;43456:18;43447:6;43395:80;:::i;:::-;43485;43561:2;43550:9;43546:18;43537:6;43485:80;:::i;:::-;43575:73;43643:3;43632:9;43628:19;43619:6;43575:73;:::i;:::-;43658;43726:3;43715:9;43711:19;43702:6;43658:73;:::i;:::-;42931:807;;;;;;;;;:::o;43744:663::-;43832:6;43840;43848;43897:2;43885:9;43876:7;43872:23;43868:32;43865:119;;;43903:79;;:::i;:::-;43865:119;44023:1;44048:64;44104:7;44095:6;44084:9;44080:22;44048:64;:::i;:::-;44038:74;;43994:128;44161:2;44187:64;44243:7;44234:6;44223:9;44219:22;44187:64;:::i;:::-;44177:74;;44132:129;44300:2;44326:64;44382:7;44373:6;44362:9;44358:22;44326:64;:::i;:::-;44316:74;;44271:129;43744:663;;;;;:::o

Swarm Source

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