ERC-20
Overview
Max Total Supply
1,000,000,000 $GBST
Holders
73
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
428.632146477873911242 $GBSTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
GhostBusdy
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-23 */ /** t.me/GhostBusdyToken */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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 kLast() 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 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 IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 internal _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount,"ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount,"ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} } interface DividendPayingTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns (uint256); function withdrawnDividendOf(address _owner) external view returns (uint256); function accumulativeDividendOf(address _owner) external view returns (uint256); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns (uint256); function distributeDividends() external payable; function withdrawDividend() external; event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0),"Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { 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 removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts); function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB); function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut); function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH); 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 DividendPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 internal constant magnitude = 2**128; uint256 internal magnifiedDividendPerShare; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; uint256 public totalDividendsDistributed; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable { distributeDividends(); } function distributeDividends() public payable override { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add( msg.value ); } } function withdrawDividend() public virtual override { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal virtual returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend); (bool success, ) = user.call{value: _withdrawableDividend, gas: 3000}(""); if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view override returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns (uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns (uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } function _transfer(address from, address to, uint256 value) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub((magnifiedDividendPerShare.mul(value)).toInt256Safe()); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add((magnifiedDividendPerShare.mul(value)).toInt256Safe()); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } } contract GhostBusdy is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public DEAD = 0x000000000000000000000000000000000000dEaD; bool private swapping; bool public tradingEnabled = false; uint256 public sellAmount = 1; uint256 public buyAmount = 1; uint256 private totalSellFees; uint256 private totalBuyFees; GhostBusdyDividendTracker public dividendTracker; address payable public marketingWallet; address payable public devWallet; // Max tx, dividend threshold and tax variables uint256 public maxWallet; uint256 public maxTX; uint256 public swapTokensAtAmount; uint256 public sellRewardsFee; uint256 public sellDeadFees; uint256 public sellMarketingFees; uint256 public sellLiquidityFee; uint256 public buyDeadFees; uint256 public buyMarketingFees; uint256 public buyLiquidityFee; uint256 public buyRewardsFee; uint256 public buyDevFee; uint256 public sellDevFee; uint256 public transferFee; bool public swapAndLiquifyEnabled = true; // gas for processing auto claim dividends uint256 public gasForProcessing = 300000; // exlcude from fees and limits mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; //for allowing specific address to trade while trading has not been enabled yet mapping(address => bool) private canTransferBeforeTradingIsEnabled; // Limit variables for bot protection bool public limitsInEffect = true; //boolean used to turn limits on and off uint256 private gasPriceLimit; mapping(address => uint256) private _holderLastTransferBlock; // for 1 tx per block mapping(address => uint256) private _holderLastTransferTimestamp; // for sell cooldown timer uint256 public launchblock; uint256 public launchtimestamp; uint256 public delay; uint256 public cooldowntimer = 60; //default cooldown 60s event EnableSwapAndLiquify(bool enabled); event SetPreSaleWallet(address wallet); event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event TradingEnabled(); event UpdateFees(uint256 sellDeadFees, uint256 sellMarketingFees, uint256 sellLiquidityFee, uint256 sellRewardsFee, uint256 buyDeadFees, uint256 buyMarketingFees, uint256 buyLiquidityFee, uint256 buyRewardsFee, uint256 buyDevFee, uint256 sellDevFee); event UpdateTransferFee(uint256 transferFee); event Airdrop(address holder, uint256 amount); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event SendDividends(uint256 amount, uint256 opAmount, bool success); event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor); event UpdatePayoutToken(address token); constructor() ERC20("GhostBusdy", "$GBST") { marketingWallet = payable(0xc7448A7f4475082c77DaDbb8e5bED6B87C2d7d97); devWallet = payable(0xBc37B985e0470d080402D876c9DbE9De789d3B1c); address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; buyDeadFees = 0; sellDeadFees = 0; buyMarketingFees = 0; sellMarketingFees = 0; buyLiquidityFee = 6; sellLiquidityFee = 6; buyRewardsFee = 1; sellRewardsFee = 1; buyDevFee = 0; sellDevFee = 0; transferFee = 5; totalBuyFees = buyRewardsFee.add(buyLiquidityFee).add(buyMarketingFees).add(buyDevFee); totalSellFees = sellRewardsFee.add(sellLiquidityFee).add(sellMarketingFees).add(sellDevFee); dividendTracker = new GhostBusdyDividendTracker(payable(this), router, 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, "GhostBusdyTRACKER", "$GBSTTRACKER"); uniswapV2Router = IUniswapV2Router02(router); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); _setAutomatedMarketMakerPair(uniswapV2Pair, true); // exclude from receiving dividends dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(DEAD); dividendTracker.excludedFromDividends(address(0)); dividendTracker.excludeFromDividends(router); dividendTracker.excludeFromDividends(marketingWallet); dividendTracker.excludeFromDividends(owner()); // exclude from paying fees or having max transaction amount _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[address(dividendTracker)] = true; _isExcludedFromFees[address(marketingWallet)] = true; _isExcludedFromFees[address(devWallet)] = true; _isExcludedFromFees[msg.sender] = true; uint256 totalTokenSupply = (1_000_000_000) * (10**18); _mint(owner(), totalTokenSupply); // only time internal mint function is ever called is to create supply swapTokensAtAmount = totalTokenSupply / 2000; // 0.05%; canTransferBeforeTradingIsEnabled[owner()] = true; canTransferBeforeTradingIsEnabled[address(this)] = true; } function decimals() public view virtual override returns (uint8) { return 18; } receive() external payable {} // writeable function to enable trading, can only enable, trading can never be disabled function enableTrading(uint256 initialMaxGwei, uint256 initialMaxWallet, uint256 initialMaxTX, uint256 setDelay) external onlyOwner { initialMaxWallet = initialMaxWallet * (10**18); initialMaxTX = initialMaxTX * (10**18); require(!tradingEnabled); require(initialMaxWallet >= _totalSupply / 1000,"cannot set below 0.1%"); require(initialMaxTX >= _totalSupply / 1000,"cannot set below 0.1%"); maxWallet = initialMaxWallet; maxTX = initialMaxTX; gasPriceLimit = initialMaxGwei * 1 gwei; tradingEnabled = true; launchblock = block.number; launchtimestamp = block.timestamp; delay = setDelay; emit TradingEnabled(); } // use for pre sale wallet, adds all exclusions to it function setPresaleWallet(address wallet) external onlyOwner { canTransferBeforeTradingIsEnabled[wallet] = true; _isExcludedFromFees[wallet] = true; dividendTracker.excludeFromDividends(wallet); emit SetPreSaleWallet(wallet); } // exclude a wallet from fees function setExcludeFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } // exclude from dividends (rewards) function setExcludeDividends(address account) public onlyOwner { dividendTracker.excludeFromDividends(account); } // include in dividends function setIncludeDividends(address account) public onlyOwner { dividendTracker.includeFromDividends(account); dividendTracker.setBalance(account, balanceOf(account)); } //allow a wallet to trade before trading enabled function setCanTransferBefore(address wallet, bool enable) external onlyOwner { canTransferBeforeTradingIsEnabled[wallet] = enable; } // turn limits on and off function setLimitsInEffect(bool value) external onlyOwner { limitsInEffect = value; } // set max GWEI function setGasPriceLimit(uint256 GWEI) external onlyOwner { require(GWEI >= 50, "can never be set lower than 50"); gasPriceLimit = GWEI * 1 gwei; } // set cooldown timer, can only be between 0 and 300 seconds (5 mins max) function setcooldowntimer(uint256 value) external onlyOwner { require(value <= 300, "cooldown timer cannot exceed 5 minutes"); cooldowntimer = value; } // set max wallet, can not be lower than 0.1% of supply function setmaxWallet(uint256 value) external onlyOwner { value = value * (10**18); require(value >= _totalSupply / 1000, "max wallet cannot be set to less than 0.1%"); maxWallet = value; } // set max tx, can not be lower than 0.1% of supply function setmaxTX(uint256 value) external onlyOwner { value = value * (10**18); require(value >= _totalSupply / 1000, "max tx cannot be set to less than 0.1%"); maxTX = value; } // rewards threshold function setSwapTriggerAmount(uint256 amount) public onlyOwner { swapTokensAtAmount = amount * (10**18); } function enableSwapAndLiquify(bool enabled) public onlyOwner { require(swapAndLiquifyEnabled != enabled); swapAndLiquifyEnabled = enabled; emit EnableSwapAndLiquify(enabled); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { _setAutomatedMarketMakerPair(pair, value); } function setAllowCustomTokens(bool allow) public onlyOwner { dividendTracker.setAllowCustomTokens(allow); } function setAllowAutoReinvest(bool allow) public onlyOwner { dividendTracker.setAllowAutoReinvest(allow); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; if (value) { dividendTracker.excludeFromDividends(pair); } emit SetAutomatedMarketMakerPair(pair, value); } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue >= 200000 && newValue <= 2000000); emit GasForProcessingUpdated(newValue, gasForProcessing); gasForProcessing = newValue; } function transferAdmin(address newOwner) public onlyOwner { dividendTracker.excludeFromDividends(newOwner); _isExcludedFromFees[newOwner] = true; transferOwnership(newOwner); } function updateTransferFee(uint256 newTransferFee) public onlyOwner { require (newTransferFee <= 10, "transfer fee cannot exceed 10%"); transferFee = newTransferFee; emit UpdateTransferFee(transferFee); } function updateFees(uint256 deadBuy, uint256 deadSell, uint256 marketingBuy, uint256 marketingSell, uint256 liquidityBuy, uint256 liquiditySell, uint256 RewardsBuy, uint256 RewardsSell, uint256 devBuy, uint256 devSell) public onlyOwner { buyDeadFees = deadBuy; buyMarketingFees = marketingBuy; buyLiquidityFee = liquidityBuy; buyRewardsFee = RewardsBuy; sellDeadFees = deadSell; sellMarketingFees = marketingSell; sellLiquidityFee = liquiditySell; sellRewardsFee = RewardsSell; buyDevFee = devBuy; sellDevFee = devSell; totalSellFees = sellRewardsFee.add(sellLiquidityFee).add(sellMarketingFees).add(sellDevFee); totalBuyFees = buyRewardsFee.add(buyLiquidityFee).add(buyMarketingFees).add(buyDevFee); require(totalSellFees <= 16 && totalBuyFees <= 16, "total fees cannot exceed 15% sell or buy"); emit UpdateFees(sellDeadFees, sellMarketingFees, sellLiquidityFee, sellRewardsFee, buyDeadFees, buyMarketingFees, buyLiquidityFee, buyRewardsFee, buyDevFee, sellDevFee); } function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function withdrawableDividendOf(address account) public view returns (uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) public view returns (uint256) { return dividendTracker.balanceOf(account); } function getAccountDividendsInfo(address account) external view returns (address, int256, int256, uint256, uint256, uint256) { return dividendTracker.getAccount(account); } function getAccountDividendsInfoAtIndex(uint256 index) external view returns (address, int256, int256, uint256, uint256, uint256) { return dividendTracker.getAccountAtIndex(index); } function processDividendTracker(uint256 gas) external { (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) = dividendTracker.process(gas); emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, false, gas, tx.origin); } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function getLastProcessedIndex() external view returns (uint256) { return dividendTracker.getLastProcessedIndex(); } function getNumberOfDividendTokenHolders() external view returns (uint256) { return dividendTracker.getNumberOfTokenHolders(); } function setAutoClaim(bool value) external { dividendTracker.setAutoClaim(msg.sender, value); } function setReinvest(bool value) external { dividendTracker.setReinvest(msg.sender, value); } function setDividendsPaused(bool value) external onlyOwner { dividendTracker.setDividendsPaused(value); } function isExcludedFromAutoClaim(address account) external view returns (bool) { return dividendTracker.isExcludedFromAutoClaim(account); } function isReinvest(address account) external view returns (bool) { return dividendTracker.isReinvest(account); } function _transfer(address from, address to, uint256 amount) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); uint256 RewardsFee; uint256 deadFees; uint256 marketingFees; uint256 liquidityFee; uint256 devFees; if (!canTransferBeforeTradingIsEnabled[from]) { require(tradingEnabled, "Trading has not yet been enabled"); } if (amount == 0) { super._transfer(from, to, 0); return; } else if (!swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { bool isSelling = automatedMarketMakerPairs[to]; bool isBuying = automatedMarketMakerPairs[from]; if (!isBuying && !isSelling) { if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 tFees = amount.mul(transferFee).div(100); amount = amount.sub(tFees); super._transfer(from, address(this), tFees); super._transfer(from, to, amount); dividendTracker.setBalance(from, balanceOf(from)); dividendTracker.setBalance(to, balanceOf(to)); return; } else { super._transfer(from, to, amount); dividendTracker.setBalance(from, balanceOf(from)); dividendTracker.setBalance(to, balanceOf(to)); return; } } else if (isSelling) { RewardsFee = sellRewardsFee; deadFees = sellDeadFees; marketingFees = sellMarketingFees; liquidityFee = sellLiquidityFee; devFees = sellDevFee; if (limitsInEffect) { require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer, "cooldown period active"); require(amount <= maxTX,"above max transaction limit"); _holderLastTransferTimestamp[tx.origin] = block.timestamp; } } else if (isBuying) { RewardsFee = buyRewardsFee; deadFees = buyDeadFees; marketingFees = buyMarketingFees; liquidityFee = buyLiquidityFee; devFees = buyDevFee; if (limitsInEffect) { require(block.timestamp > launchtimestamp + delay,"you shall not pass"); require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit."); require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block"); require(amount <= maxTX,"above max transaction limit"); _holderLastTransferBlock[tx.origin] = block.number; } uint256 contractBalanceRecipient = balanceOf(to); require(contractBalanceRecipient + amount <= maxWallet,"Exceeds maximum wallet token amount." ); } uint256 totalFees = RewardsFee.add(liquidityFee + marketingFees + devFees); uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && isSelling) { swapping = true; if (swapAndLiquifyEnabled && liquidityFee > 0 && totalBuyFees > 0) { uint256 totalBuySell = buyAmount.add(sellAmount); uint256 swapAmountBought = contractTokenBalance.mul(buyAmount).div(totalBuySell); uint256 swapAmountSold = contractTokenBalance.mul(sellAmount).div(totalBuySell); uint256 swapBuyTokens = swapAmountBought.mul(liquidityFee).div(totalBuyFees); uint256 swapSellTokens = swapAmountSold.mul(liquidityFee).div(totalSellFees); uint256 swapTokens = swapSellTokens.add(swapBuyTokens); swapAndLiquify(swapTokens); } uint256 remainingBalance = balanceOf(address(this)); swapAndSendDividends(remainingBalance); buyAmount = 1; sellAmount = 1; swapping = false; } uint256 fees = amount.mul(totalFees).div(100); uint256 burntokens; if (deadFees > 0) { burntokens = amount.mul(deadFees) / 100; super._transfer(from, DEAD, burntokens); _totalSupply = _totalSupply.sub(burntokens); } amount = amount.sub(fees + burntokens); if (isSelling) { sellAmount = sellAmount.add(fees); } else { buyAmount = buyAmount.add(fees); } super._transfer(from, address(this), fees); uint256 gas = gasForProcessing; try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin); } catch {} } super._transfer(from, to, amount); dividendTracker.setBalance(from, balanceOf(from)); dividendTracker.setBalance(to, balanceOf(to)); } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function updatePayoutToken(address token) public onlyOwner { dividendTracker.updatePayoutToken(token); emit UpdatePayoutToken(token); } function getPayoutToken() public view returns (address) { return dividendTracker.getPayoutToken(); } function setMinimumTokenBalanceForAutoDividends(uint256 value) public onlyOwner { dividendTracker.setMinimumTokenBalanceForAutoDividends(value); } function setMinimumTokenBalanceForDividends(uint256 value) public onlyOwner { dividendTracker.setMinimumTokenBalanceForDividends(value); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function forceSwapAndSendDividends(uint256 tokens) public onlyOwner { tokens = tokens * (10**18); uint256 totalAmount = buyAmount.add(sellAmount); uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount); uint256 fromSell = tokens.mul(sellAmount).div(totalAmount); swapAndSendDividends(tokens); buyAmount = buyAmount.sub(fromBuy); sellAmount = sellAmount.sub(fromSell); } function swapAndSendDividends(uint256 tokens) private { if (tokens == 0) { return; } swapTokensForEth(tokens); uint256 totalAmount = buyAmount.add(sellAmount); bool success = true; bool successOp1 = true; bool successOp2 = true; uint256 dividends; uint256 dividendsFromBuy; uint256 dividendsFromSell; if (buyRewardsFee > 0) { dividendsFromBuy = address(this).balance.mul(buyAmount).div(totalAmount) .mul(buyRewardsFee).div(buyRewardsFee + buyMarketingFees + buyDevFee); } if (sellRewardsFee > 0) { dividendsFromSell = address(this).balance.mul(sellAmount).div(totalAmount) .mul(sellRewardsFee).div(sellRewardsFee + sellMarketingFees + sellDevFee); } dividends = dividendsFromBuy.add(dividendsFromSell); if (dividends > 0) { (success, ) = address(dividendTracker).call{value: dividends}(""); } uint256 _completeFees = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee); uint256 feePortions; if (_completeFees > 0) { feePortions = address(this).balance.div(_completeFees); } uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions; uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions; if (marketingPayout > 0) { (successOp1, ) = address(marketingWallet).call{value: marketingPayout}(""); } if (devPayout > 0) { (successOp2, ) = address(devWallet).call{value: devPayout}(""); } emit SendDividends(dividends, marketingPayout + devPayout, success && successOp1 && successOp2); } function airdropToWallets( address[] memory airdropWallets, uint256[] memory amount ) external onlyOwner { require(airdropWallets.length == amount.length,"Arrays must be the same length"); require(airdropWallets.length <= 200, "Wallets list length must be <= 200"); for (uint256 i = 0; i < airdropWallets.length; i++) { address wallet = airdropWallets[i]; uint256 airdropAmount = amount[i] * (10**18); super._transfer(msg.sender, wallet, airdropAmount); dividendTracker.setBalance(payable(wallet), balanceOf(wallet)); } } } contract GhostBusdyDividendTracker is DividendPayingToken, Ownable { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping(address => bool) public excludedFromDividends; mapping(address => bool) public excludedFromAutoClaim; mapping(address => bool) public autoReinvest; address public defaultToken; // BUSD bool public allowCustomTokens; bool public allowAutoReinvest; bool public dividendsPaused = false; string private trackerName; string private trackerTicker; IUniswapV2Router02 public uniswapV2Router; GhostBusdy public GhostBusdyContract; mapping(address => uint256) public lastClaimTimes; uint256 private minimumTokenBalanceForAutoDividends; uint256 private minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event DividendReinvested(address indexed acount, uint256 value, bool indexed automatic); event Claim(address indexed account, uint256 amount, bool indexed automatic); event DividendsPaused(bool paused); event SetAllowCustomTokens(bool allow); event SetAllowAutoReinvest(bool allow); constructor(address payable mainContract, address router, address token, string memory _name, string memory _ticker) DividendPayingToken(_name, _ticker) { trackerName = _name; trackerTicker = _ticker; defaultToken = token; GhostBusdyContract = GhostBusdy(mainContract); minimumTokenBalanceForAutoDividends = 10000_000000000000000000; // 10000 tokens minimumTokenBalanceForDividends = minimumTokenBalanceForAutoDividends; uniswapV2Router = IUniswapV2Router02(router); allowCustomTokens = true; allowAutoReinvest = false; } function decimals() public view virtual override returns (uint8) { return 18; } function name() public view virtual override returns (string memory) { return trackerName; } function symbol() public view virtual override returns (string memory) { return trackerTicker; } function _transfer(address, address, uint256) internal pure override { require(false, "No transfers allowed"); } function withdrawDividend() public pure override { require(false, "withdrawDividend disabled. Use the 'claim' function on the main GhostBusdy contract."); } function isExcludedFromAutoClaim(address account) external view onlyOwner returns (bool) { return excludedFromAutoClaim[account]; } function isReinvest(address account) external view onlyOwner returns (bool) { return autoReinvest[account]; } function setAllowCustomTokens(bool allow) external onlyOwner { require(allowCustomTokens != allow); allowCustomTokens = allow; emit SetAllowCustomTokens(allow); } function setAllowAutoReinvest(bool allow) external onlyOwner { require(allowAutoReinvest != allow); allowAutoReinvest = allow; emit SetAllowAutoReinvest(allow); } function excludeFromDividends(address account) external onlyOwner { //require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function includeFromDividends(address account) external onlyOwner { excludedFromDividends[account] = false; } function setAutoClaim(address account, bool value) external onlyOwner { excludedFromAutoClaim[account] = value; } function setReinvest(address account, bool value) external onlyOwner { autoReinvest[account] = value; } function setMinimumTokenBalanceForAutoDividends(uint256 value) external onlyOwner { minimumTokenBalanceForAutoDividends = value * (10**18); } function setMinimumTokenBalanceForDividends(uint256 value) external onlyOwner { minimumTokenBalanceForDividends = value * (10**18); } function setDividendsPaused(bool value) external onlyOwner { require(dividendsPaused != value); dividendsPaused = value; emit DividendsPaused(value); } function getLastProcessedIndex() external view returns (uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.keys.length; } function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = -1; if (index >= 0) { if (uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub(int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length.sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray)); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; } function getAccountAtIndex(uint256 index) public view returns (address, int256, int256, uint256, uint256, uint256) { if (index >= tokenHoldersMap.size()) { return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0); } address account = tokenHoldersMap.getKeyAtIndex(index); return getAccount(account); } function setBalance(address account, uint256 newBalance) external onlyOwner { if (excludedFromDividends[account]) { return; } if (newBalance < minimumTokenBalanceForDividends) { tokenHoldersMap.remove(account); _setBalance(account, 0); return; } _setBalance(account, newBalance); if (newBalance >= minimumTokenBalanceForAutoDividends) { tokenHoldersMap.set(account, newBalance); } else { tokenHoldersMap.remove(account); } } function process(uint256 gas) public returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.keys.length; if (numberOfTokenHolders == 0 || dividendsPaused) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= numberOfTokenHolders) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.keys[_lastProcessedIndex]; if (!excludedFromAutoClaim[account]) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { if (dividendsPaused) { return false; } bool reinvest = autoReinvest[account]; if (automatic && reinvest && !allowAutoReinvest) { return false; } uint256 amount = reinvest ? _reinvestDividendOfUser(account) : _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; if (reinvest) { emit DividendReinvested(account, amount, automatic); } else { emit Claim(account, amount, automatic); } return true; } return false; } function updateUniswapV2Router(address newAddress) public onlyOwner { uniswapV2Router = IUniswapV2Router02(newAddress); } function updatePayoutToken(address token) public onlyOwner { defaultToken = token; } function getPayoutToken() public view returns (address) { return defaultToken; } function _reinvestDividendOfUser(address account) private returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(account); if (_withdrawableDividend > 0) { bool success; withdrawnDividends[account] = withdrawnDividends[account].add(_withdrawableDividend); address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(GhostBusdyContract); uint256 prevBalance = GhostBusdyContract.balanceOf(address(this)); // make the swap try uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{value: _withdrawableDividend} (0, path, address(this), block.timestamp) { uint256 received = GhostBusdyContract.balanceOf(address(this)).sub(prevBalance); if (received > 0) { success = true; GhostBusdyContract.transfer(account, received); } else { success = false; } } catch { success = false; } if (!success) { withdrawnDividends[account] = withdrawnDividends[account].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } return 0; } function _withdrawDividendOfUser(address payable user) internal override returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); address tokenAddress = defaultToken; bool success; if (tokenAddress == address(0)) { (success, ) = user.call{value: _withdrawableDividend, gas: 3000}(""); } else { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = tokenAddress; try uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _withdrawableDividend}(0, path, user, block.timestamp) { success = true; } catch { success = false; } } if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } else { emit DividendWithdrawn(user, _withdrawableDividend); } return _withdrawableDividend; } return 0; } } library IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint256) values; mapping(address => uint256) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) internal view returns (uint256) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) internal view returns (int256) { if (!map.inserted[key]) { return -1; } return int256(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint256 index) internal view returns (address) { return map.keys[index]; } function size(Map storage map) internal view returns (uint256) { return map.keys.length; } function set(Map storage map, address key, uint256 val) internal { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) internal { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint256 index = map.indexOf[key]; uint256 lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","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":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellDeadFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellRewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDeadFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyRewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"UpdatePayoutToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"UpdateTransferFee","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"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDeadFees","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":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract GhostBusdyDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialMaxGwei","type":"uint256"},{"internalType":"uint256","name":"initialMaxWallet","type":"uint256"},{"internalType":"uint256","name":"initialMaxTX","type":"uint256"},{"internalType":"uint256","name":"setDelay","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPayoutToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromAutoClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReinvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","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":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTX","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":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDeadFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowAutoReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowCustomTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutoClaim","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":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setDividendsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setExcludeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GWEI","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setIncludeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForAutoDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setPresaleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"deadBuy","type":"uint256"},{"internalType":"uint256","name":"deadSell","type":"uint256"},{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"},{"internalType":"uint256","name":"RewardsBuy","type":"uint256"},{"internalType":"uint256","name":"RewardsSell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"updatePayoutToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransferFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260088054600161ff0160a01b03191661dead17905560016009819055600a819055601e805460ff199081168317909155620493e0601f55602380549091169091179055603c602a553480156200005957600080fd5b506040518060400160405280600a81526020016947686f7374427573647960b01b815250604051806040016040528060058152602001640911d094d560da1b8152508160039081620000ac919062000b6b565b506004620000bb828262000b6b565b5050506000620000d06200087860201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e805473c7448a7f4475082c77dadbb8e5bed6b87c2d7d976001600160a01b031991821617909155600f805473bc37b985e0470d080402d876c9dbe9de789d3b1c9216919091179055600060178190556014819055601881905560158190556006601981905560168190556001601a8190556013819055601b839055601c8390556005601d55737a250d5630b4cf539739df2c5dacb4c659f2488d92620001f1929091620001dd91839183916200087c602090811b620028af17901c565b6200087c60201b620028af1790919060201c565b600c8190555062000223601c54620001dd601554620001dd6016546013546200087c60201b620028af1790919060201c565b600b81905550308173a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486040516200024e9062000ab9565b6001600160a01b0393841681529183166020830152909116604082015260a0606082018190526011908201527023b437b9ba213ab9b23caa2920a1a5a2a960791b60c082015260e060808201819052600c908201526b1223a129aa2a2920a1a5a2a960a11b61010082015261012001604051809103906000f080158015620002da573d6000803e3d6000fd5b50600d80546001600160a01b039283166001600160a01b0319918216179091556006805492841692909116821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000c37565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f4919062000c37565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000442573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000468919062000c37565b600780546001600160a01b0319166001600160a01b0392909216918217905562000494906001620008ec565b600d5460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db090602401600060405180830381600087803b158015620004db57600080fd5b505af1158015620004f0573d6000803e3d6000fd5b5050600d5460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200053a57600080fd5b505af11580156200054f573d6000803e3d6000fd5b5050600d5460085460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200059d57600080fd5b505af1158015620005b2573d6000803e3d6000fd5b5050600d54604051634e7b827f60e01b8152600060048201526001600160a01b039091169250634e7b827f9150602401602060405180830381865afa15801562000600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000626919062000c62565b50600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156200066f57600080fd5b505af115801562000684573d6000803e3d6000fd5b5050600d54600e5460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b158015620006d257600080fd5b505af1158015620006e7573d6000803e3d6000fd5b5050600d546001600160a01b031691506331e79db09050620007116005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200075357600080fd5b505af115801562000768573d6000803e3d6000fd5b50503060009081526020805260408082208054600160ff199182168117909255600d546001600160a01b0390811685528385208054831684179055600e54811685528385208054831684179055600f5416845282842080548216831790553384529190922080549091169091179055506b033b2e3c9fd0803ce8000000905062000805620007fe6005546001600160a01b031690565b82620009b8565b620008136107d08262000c86565b6012556001602260006200082f6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260229092529020805490911660011790555062000ccb9050565b3390565b6000806200088b838562000ca9565b905083811015620008e35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b6001600160a01b0382166000908152602160205260409020805460ff191682158015919091179091556200097c57600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b1580156200096257600080fd5b505af115801562000977573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b03821662000a105760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620008da565b62000a2c816002546200087c60201b620028af1790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000a5f918390620028af6200087c821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b61305d806200524a83390190565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000af257607f821691505b60208210810362000b1357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000ab457600081815260208120601f850160051c8101602086101562000b425750805b601f850160051c820191505b8181101562000b635782815560010162000b4e565b505050505050565b81516001600160401b0381111562000b875762000b8762000ac7565b62000b9f8162000b98845462000add565b8462000b19565b602080601f83116001811462000bd7576000841562000bbe5750858301515b600019600386901b1c1916600185901b17855562000b63565b600085815260208120601f198616915b8281101562000c085788860151825594840194600190910190840162000be7565b508582101562000c275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c4a57600080fd5b81516001600160a01b0381168114620008e357600080fd5b60006020828403121562000c7557600080fd5b81518015158114620008e357600080fd5b60008262000ca457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008e657634e487b7160e01b600052601160045260246000fd5b61456f8062000cdb6000396000f3fe6080604052600436106104b95760003560e01c806377a3b6091161026b578063acb2ad6f1161014f578063e14a93d6116100c1578063f27fd25411610085578063f27fd25414610e5e578063f2fde38b14610e7e578063f5d3c79a14610e9e578063f637434214610ebe578063f8b45b0514610ed4578063fc6b151c14610eea57600080fd5b8063e14a93d614610de7578063e2f4560514610e07578063e7841ec014610e1d578063ebae7c1c14610e32578063f11a24d314610e4857600080fd5b8063ba079d4911610113578063ba079d4914610d0b578063bb8d513114610d2b578063d07a091c14610d41578063d5e3725114610d61578063d8032ed314610d81578063dd62ed3e14610da157600080fd5b8063acb2ad6f14610c38578063ad56c13c14610c4e578063b494298814610ca5578063b62496f514610cbb578063b74e3b1114610ceb57600080fd5b806395451c29116101e85780639c3b4fdc116101ac5780639c3b4fdc14610b8c5780639ec1037e14610ba2578063a0d82dc514610bc2578063a457c2d714610bd8578063a8b9d24014610bf8578063a9059cbb14610c1857600080fd5b806395451c2914610b0b57806395d89b4114610b215780639a7a23d614610b365780639c1b8af514610b565780639c3372ea14610b6c57600080fd5b8063871c128d1161022f578063871c128d14610a815780638c3c82b214610aa15780638ca2923a14610ab75780638da5cb5b14610acd5780638ea5220f14610aeb57600080fd5b806377a3b609146109eb5780637fdde05c14610a01578063837ae2d014610a215780638577a6d514610a41578063868730c714610a6157600080fd5b80634a62bb651161039d57806366236b4a1161030f578063700bb191116102d3578063700bb1911461093657806370a0823114610956578063715018a61461097657806372d8edf41461098b57806375829def146109ab57806375f0a874146109cb57600080fd5b806366236b4a146108a0578063679ca6e9146108c05780636843cd84146108e05780636a42b8f8146109005780636d48467b1461091657600080fd5b80635124f874116103615780635124f874146107ff5780635a84c5eb146108155780635c234bb6146108355780635ebf4db91461084b5780635eee4bae1461086b57806364b0f6531461088b57600080fd5b80634a62bb651461075d5780634a74bb02146107775780634ada218b146107915780634e71d92d146107b25780634fbee193146107c757600080fd5b80632307b44111610436578063313ce567116103fa578063313ce567146106ab5780633599bb17146106c757806339509351146106e75780633f407b841461070757806340ffdd801461071d57806349bd5a5e1461073d57600080fd5b80632307b4411461062157806323b872dd1461064157806325cd3598146106615780632c1f52161461067657806330bb4cff1461069657600080fd5b8063095ea7b31161047d578063095ea7b3146105865780631694505e146105b657806318160ddd146105d65780631d7b1fb4146105f55780631fa705311461060b57600080fd5b806303fd2a45146104c557806305ca5f081461050257806306fdde031461052457806308dfe8a514610546578063092316021461056657600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506008546104e5906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561050e57600080fd5b5061052261051d366004613e1c565b610f0a565b005b34801561053057600080fd5b50610539610fdb565b6040516104f99190613e35565b34801561055257600080fd5b50610522610561366004613ea6565b61106d565b34801561057257600080fd5b50610522610581366004613e1c565b6110f4565b34801561059257600080fd5b506105a66105a1366004613edf565b611183565b60405190151581526020016104f9565b3480156105c257600080fd5b506006546104e5906001600160a01b031681565b3480156105e257600080fd5b506002545b6040519081526020016104f9565b34801561060157600080fd5b506105e7602a5481565b34801561061757600080fd5b506105e7600a5481565b34801561062d57600080fd5b5061052261063c366004613fe1565b61119a565b34801561064d57600080fd5b506105a661065c3660046140a3565b61136b565b34801561066d57600080fd5b506104e56113d4565b34801561068257600080fd5b50600d546104e5906001600160a01b031681565b3480156106a257600080fd5b506105e7611447565b3480156106b757600080fd5b50604051601281526020016104f9565b3480156106d357600080fd5b506105226106e23660046140e4565b6114b5565b3480156106f357600080fd5b506105a6610702366004613edf565b611542565b34801561071357600080fd5b506105e760095481565b34801561072957600080fd5b506105226107383660046140e4565b611578565b34801561074957600080fd5b506007546104e5906001600160a01b031681565b34801561076957600080fd5b506023546105a69060ff1681565b34801561078357600080fd5b50601e546105a69060ff1681565b34801561079d57600080fd5b506008546105a690600160a81b900460ff1681565b3480156107be57600080fd5b506105226115d3565b3480156107d357600080fd5b506105a66107e2366004614101565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561080b57600080fd5b506105e760185481565b34801561082157600080fd5b50610522610830366004613e1c565b61164b565b34801561084157600080fd5b506105e760175481565b34801561085757600080fd5b50610522610866366004613e1c565b6116a6565b34801561087757600080fd5b50610522610886366004613e1c565b611701565b34801561089757600080fd5b506105e7611743565b3480156108ac57600080fd5b506105226108bb366004613e1c565b61178d565b3480156108cc57600080fd5b506105226108db3660046140e4565b61183e565b3480156108ec57600080fd5b506105e76108fb366004614101565b61187b565b34801561090c57600080fd5b506105e760295481565b34801561092257600080fd5b506105a6610931366004614101565b6118eb565b34801561094257600080fd5b50610522610951366004613e1c565b61195b565b34801561096257600080fd5b506105e7610971366004614101565b611a2d565b34801561098257600080fd5b50610522611a48565b34801561099757600080fd5b506105226109a6366004614101565b611abc565b3480156109b757600080fd5b506105226109c6366004614101565b611b18565b3480156109d757600080fd5b50600e546104e5906001600160a01b031681565b3480156109f757600080fd5b506105e7601a5481565b348015610a0d57600080fd5b50610522610a1c366004613ea6565b611bcc565b348015610a2d57600080fd5b50610522610a3c36600461411e565b611c21565b348015610a4d57600080fd5b50610522610a5c366004613e1c565b611dcb565b348015610a6d57600080fd5b50610522610a7c3660046140e4565b611e82565b348015610a8d57600080fd5b50610522610a9c366004613e1c565b611eba565b348015610aad57600080fd5b506105e760285481565b348015610ac357600080fd5b506105e760145481565b348015610ad957600080fd5b506005546001600160a01b03166104e5565b348015610af757600080fd5b50600f546104e5906001600160a01b031681565b348015610b1757600080fd5b506105e760155481565b348015610b2d57600080fd5b50610539611f36565b348015610b4257600080fd5b50610522610b51366004613ea6565b611f45565b348015610b6257600080fd5b506105e7601f5481565b348015610b7857600080fd5b50610522610b873660046140e4565b611f7d565b348015610b9857600080fd5b506105e7601b5481565b348015610bae57600080fd5b50610522610bbd366004614101565b611fd9565b348015610bce57600080fd5b506105e7601c5481565b348015610be457600080fd5b506105a6610bf3366004613edf565b6120b0565b348015610c0457600080fd5b506105e7610c13366004614101565b6120ff565b348015610c2457600080fd5b506105a6610c33366004613edf565b612132565b348015610c4457600080fd5b506105e7601d5481565b348015610c5a57600080fd5b50610c6e610c69366004614101565b61213f565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c0016104f9565b348015610cb157600080fd5b506105e760275481565b348015610cc757600080fd5b506105a6610cd6366004614101565b60216020526000908152604090205460ff1681565b348015610cf757600080fd5b50610522610d06366004613e1c565b6121cf565b348015610d1757600080fd5b506105a6610d26366004614101565b61225f565b348015610d3757600080fd5b506105e760135481565b348015610d4d57600080fd5b50610522610d5c366004614101565b612292565b348015610d6d57600080fd5b50610522610d7c3660046140e4565b612388565b348015610d8d57600080fd5b50610522610d9c366004614101565b61240a565b348015610dad57600080fd5b506105e7610dbc366004614186565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610df357600080fd5b50610522610e023660046141b4565b6124cd565b348015610e1357600080fd5b506105e760125481565b348015610e2957600080fd5b506105e761264f565b348015610e3e57600080fd5b506105e760115481565b348015610e5457600080fd5b506105e760195481565b348015610e6a57600080fd5b50610c6e610e79366004613e1c565b612699565b348015610e8a57600080fd5b50610522610e99366004614101565b6126d7565b348015610eaa57600080fd5b50610522610eb93660046140e4565b6127c2565b348015610eca57600080fd5b506105e760165481565b348015610ee057600080fd5b506105e760105481565b348015610ef657600080fd5b50610522610f05366004613e1c565b6127fa565b6005546001600160a01b03163314610f3d5760405162461bcd60e51b8152600401610f34906141e6565b60405180910390fd5b610f4f81670de0b6b3a7640000614231565b90506000610f6a600954600a546128af90919063ffffffff16565b90506000610f8d82610f87600a548661291590919063ffffffff16565b90612997565b90506000610faa83610f876009548761291590919063ffffffff16565b9050610fb5846129d9565b600a54610fc29083612cd9565b600a55600954610fd29082612cd9565b60095550505050565b606060038054610fea90614248565b80601f016020809104026020016040519081016040528092919081815260200182805461101690614248565b80156110635780601f1061103857610100808354040283529160200191611063565b820191906000526020600020905b81548152906001019060200180831161104657829003601f168201915b5050505050905090565b6005546001600160a01b031633146110975760405162461bcd60e51b8152600401610f34906141e6565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461111e5760405162461bcd60e51b8152600401610f34906141e6565b603281101561116f5760405162461bcd60e51b815260206004820152601e60248201527f63616e206e6576657220626520736574206c6f776572207468616e20353000006044820152606401610f34565b61117d81633b9aca00614231565b60245550565b6000611190338484612d1b565b5060015b92915050565b6005546001600160a01b031633146111c45760405162461bcd60e51b8152600401610f34906141e6565b80518251146112155760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f34565b60c8825111156112725760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b6064820152608401610f34565b60005b825181101561136657600083828151811061129257611292614282565b6020026020010151905060008383815181106112b0576112b0614282565b6020026020010151670de0b6b3a76400006112cb9190614231565b90506112d8338383612e40565b600d546001600160a01b031663e30443bc836112f381611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561133957600080fd5b505af115801561134d573d6000803e3d6000fd5b505050505050808061135e90614298565b915050611275565b505050565b6000611378848484612f49565b6113ca84336113c5856040518060600160405280602881526020016144ed602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190613a3c565b612d1b565b5060019392505050565b600d54604080516304b9a6b360e31b815290516000926001600160a01b0316916325cd35989160048083019260209291908290030181865afa15801561141e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144291906142b1565b905090565b600d54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611491573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144291906142ce565b6005546001600160a01b031633146114df5760405162461bcd60e51b8152600401610f34906141e6565b600d54604051633599bb1760e01b815282151560048201526001600160a01b0390911690633599bb17906024015b600060405180830381600087803b15801561152757600080fd5b505af115801561153b573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916111909185906113c590866128af565b6005546001600160a01b031633146115a25760405162461bcd60e51b8152600401610f34906141e6565b600d546040516281ffbb60e71b815282151560048201526001600160a01b03909116906340ffdd809060240161150d565b600d5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611624573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164891906142e7565b50565b6005546001600160a01b031633146116755760405162461bcd60e51b8152600401610f34906141e6565b600d54604051635a84c5eb60e01b8152600481018390526001600160a01b0390911690635a84c5eb9060240161150d565b6005546001600160a01b031633146116d05760405162461bcd60e51b8152600401610f34906141e6565b600d54604051635ebf4db960e01b8152600481018390526001600160a01b0390911690635ebf4db99060240161150d565b6005546001600160a01b0316331461172b5760405162461bcd60e51b8152600401610f34906141e6565b61173d81670de0b6b3a7640000614231565b60125550565b600d54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611491573d6000803e3d6000fd5b6005546001600160a01b031633146117b75760405162461bcd60e51b8152600401610f34906141e6565b6117c981670de0b6b3a7640000614231565b90506103e86002546117db9190614304565b8110156118395760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b6064820152608401610f34565b601155565b6005546001600160a01b031633146118685760405162461bcd60e51b8152600401610f34906141e6565b6023805460ff1916911515919091179055565b600d546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa1580156118c7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119491906142ce565b600d54604051636d48467b60e01b81526001600160a01b0383811660048301526000921690636d48467b906024015b602060405180830381865afa158015611937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119491906142e7565b600d546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af11580156119ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d29190614326565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611a725760405162461bcd60e51b8152600401610f34906141e6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611ae65760405162461bcd60e51b8152600401610f34906141e6565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db09060240161150d565b6005546001600160a01b03163314611b425760405162461bcd60e51b8152600401610f34906141e6565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b5050506001600160a01b03821660009081526020805260409020805460ff1916600117905550611648816126d7565b6005546001600160a01b03163314611bf65760405162461bcd60e51b8152600401610f34906141e6565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c4b5760405162461bcd60e51b8152600401610f34906141e6565b60178a905560188890556019869055601a8490556014899055601587905560168590556013839055601b829055601c819055611c9381611c8d8981878a6128af565b906128af565b600b81905550611cbc601b54611c8d601854611c8d601954601a546128af90919063ffffffff16565b600c55600b54601010801590611cd557506010600c5411155b611d325760405162461bcd60e51b815260206004820152602860248201527f746f74616c20666565732063616e6e6f7420657863656564203135252073656c6044820152676c206f722062757960c01b6064820152608401610f34565b601454601554601654601354601754601854601954601a54601b54601c54604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526101208201527f07cec4532bdb36ce729ae72905c09f7bfbf8682c2cc2f1999f745188d9975122906101400160405180910390a150505050505050505050565b6005546001600160a01b03163314611df55760405162461bcd60e51b8152600401610f34906141e6565b600a811115611e465760405162461bcd60e51b815260206004820152601e60248201527f7472616e73666572206665652063616e6e6f74206578636565642031302500006044820152606401610f34565b601d8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c8844720343906020015b60405180910390a150565b600d54604051638bc1d63960e01b815233600482015282151560248201526001600160a01b0390911690638bc1d6399060440161150d565b6005546001600160a01b03163314611ee45760405162461bcd60e51b8152600401610f34906141e6565b62030d408110158015611efa5750621e84808111155b611f0357600080fd5b601f5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601f55565b606060048054610fea90614248565b6005546001600160a01b03163314611f6f5760405162461bcd60e51b8152600401610f34906141e6565b611f798282613a76565b5050565b6005546001600160a01b03163314611fa75760405162461bcd60e51b8152600401610f34906141e6565b600d54604051634e19b97560e11b815282151560048201526001600160a01b0390911690639c3372ea9060240161150d565b6005546001600160a01b031633146120035760405162461bcd60e51b8152600401610f34906141e6565b600d54604051630928847160e01b81526001600160a01b03838116600483015290911690630928847190602401600060405180830381600087803b15801561204a57600080fd5b505af115801561205e573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508261207f81611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260440161150d565b600061119033846113c585604051806060016040528060258152602001614515602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190613a3c565b600d546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016118aa565b6000611190338484612f49565b600d5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283929091169063fbcbc0f1906024015b60c060405180830381865afa158015612197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bb9190614354565b949c939b5091995097509550909350915050565b6005546001600160a01b031633146121f95760405162461bcd60e51b8152600401610f34906141e6565b61012c81111561225a5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401610f34565b602a55565b600d5460405163ba079d4960e01b81526001600160a01b038381166004830152600092169063ba079d499060240161191a565b6005546001600160a01b031633146122bc5760405162461bcd60e51b8152600401610f34906141e6565b6001600160a01b0381811660008181526022602090815260408083208054600160ff1991821681179092559280529281902080549092169092179055600d54905163031e79db60e41b81526004810192909252909116906331e79db090602401600060405180830381600087803b15801561233657600080fd5b505af115801561234a573d6000803e3d6000fd5b50506040516001600160a01b03841681527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c592506020019050611e77565b6005546001600160a01b031633146123b25760405162461bcd60e51b8152600401610f34906141e6565b601e5481151560ff9091161515036123c957600080fd5b601e805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001611e77565b6005546001600160a01b031633146124345760405162461bcd60e51b8152600401610f34906141e6565b600d5460405163d8032ed360e01b81526001600160a01b0383811660048301529091169063d8032ed390602401600060405180830381600087803b15801561247b57600080fd5b505af115801561248f573d6000803e3d6000fd5b50506040516001600160a01b03841681527f7597aa09105646b4cc4486748aecd1d7c5dbcbb7bbe2863c3fc27e613b64432d92506020019050611e77565b6005546001600160a01b031633146124f75760405162461bcd60e51b8152600401610f34906141e6565b61250983670de0b6b3a7640000614231565b925061251d82670de0b6b3a7640000614231565b600854909250600160a81b900460ff161561253757600080fd5b6103e86002546125479190614304565b83101561258e5760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610f34565b6103e860025461259e9190614304565b8210156125e55760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610f34565b601083905560118290556125fd84633b9aca00614231565b6024556008805460ff60a81b1916600160a81b179055436027554260285560298190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b600d546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015611491573d6000803e3d6000fd5b600d54604051635183d6fd60e01b815260048101839052600091829182918291829182916001600160a01b0390911690635183d6fd9060240161217a565b6005546001600160a01b031633146127015760405162461bcd60e51b8152600401610f34906141e6565b6001600160a01b0381166127665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f34565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604051632c8be28160e21b815233600482015282151560248201526001600160a01b039091169063b22f8a049060440161150d565b6005546001600160a01b031633146128245760405162461bcd60e51b8152600401610f34906141e6565b61283681670de0b6b3a7640000614231565b90506103e86002546128489190614304565b8110156128aa5760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b6064820152608401610f34565b601055565b6000806128bc83856143a7565b90508381101561290e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f34565b9392505050565b60008260000361292757506000611194565b60006129338385614231565b9050826129408583614304565b1461290e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f34565b600061290e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b3f565b806000036129e45750565b6129ed81613b6d565b6000612a06600954600a546128af90919063ffffffff16565b601a54909150600190819081906000908190819015612a6757612a64601b54601854601a54612a3591906143a7565b612a3f91906143a7565b610f87601a54612a5e8b610f87600a544761291590919063ffffffff16565b90612915565b91505b60135415612ab157612aae601c54601554601354612a8591906143a7565b612a8f91906143a7565b610f87601354612a5e8b610f876009544761291590919063ffffffff16565b90505b612abb82826128af565b92508215612b1b57600d546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612b10576040519150601f19603f3d011682016040523d82523d6000602084013e612b15565b606091505b50909650505b6000612b34601b546018546128af90919063ffffffff16565b601c54601554612b43916128af565b612b4d91906143a7565b905060008115612b6457612b614783612997565b90505b600081612b7e6015546018546128af90919063ffffffff16565b612b889190614231565b9050600082612ba4601c54601b546128af90919063ffffffff16565b612bae9190614231565b90508115612c0e57600e546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612c03576040519150601f19603f3d011682016040523d82523d6000602084013e612c08565b606091505b50909950505b8015612c6c57600f546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612c61576040519150601f19603f3d011682016040523d82523d6000602084013e612c66565b606091505b50909850505b7f8e09ec88c0d24c22e3a9b8555c029afcc4a7c609daabf6d7849e814c2d14efd087612c9883856143a7565b8c8015612ca257508b5b8015612cab57508a5b60408051938452602084019290925215159082015260600160405180910390a1505050505050505050505050565b600061290e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a3c565b6001600160a01b038316612d7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f34565b6001600160a01b038216612dde5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f34565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316612e665760405162461bcd60e51b8152600401610f34906143ba565b6001600160a01b038216612e8c5760405162461bcd60e51b8152600401610f34906143ff565b612ec9816040518060600160405280602681526020016144c7602691396001600160a01b0386166000908152602081905260409020549190613a3c565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612ef890826128af565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612e33565b6001600160a01b038316612f6f5760405162461bcd60e51b8152600401610f34906143ba565b6001600160a01b038216612f955760405162461bcd60e51b8152600401610f34906143ff565b6001600160a01b038316600090815260226020526040812054819081908190819060ff1661301657600854600160a81b900460ff166130165760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401610f34565b856000036130345761302a88886000612e40565b5050505050505050565b600854600160a01b900460ff1615801561306657506001600160a01b038816600090815260208052604090205460ff16155b801561308a57506001600160a01b038716600090815260208052604090205460ff16155b15613933576001600160a01b0380881660009081526021602052604080822054928b16825290205460ff9182169116801580156130c5575081155b1561335b576001600160a01b038a16600090815260208052604090205460ff1615801561310a57506001600160a01b038916600090815260208052604090205460ff16155b1561325057600061312b6064610f87601d548c61291590919063ffffffff16565b90506131378982612cd9565b98506131448b3083612e40565b61314f8b8b8b612e40565b600d546001600160a01b031663e30443bc8c61316a81611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156131b057600080fd5b505af11580156131c4573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508b6131e581611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561322b57600080fd5b505af115801561323f573d6000803e3d6000fd5b505050505050505050505050505050565b61325b8a8a8a612e40565b600d546001600160a01b031663e30443bc8b61327681611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156132bc57600080fd5b505af11580156132d0573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508a6132f181611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561333757600080fd5b505af115801561334b573d6000803e3d6000fd5b5050505050505050505050505050565b811561345757601354601454601554601654601c54602354949b509299509097509550935060ff161561345257602a54326000908152602660205260409020546133a591906143a7565b4210156133ed5760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401610f34565b60115488111561343f5760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610f34565b3260009081526026602052604090204290555b61365b565b801561365b57601a54601754601854601954601b54602354949b509299509097509550935060ff16156135e45760295460285461349491906143a7565b42116134d75760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401610f34565b6024543a11156135295760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610f34565b3260009081526025602052604090205443900361357f5760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401610f34565b6011548811156135d15760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610f34565b3260009081526025602052604090204390555b60006135ef8a611a2d565b6010549091506135ff8a836143a7565b11156136595760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610f34565b505b600061367c8461366b88886143a7565b61367591906143a7565b89906128af565b9050600061368930611a2d565b6012549091508110801590819061369d5750845b156137b6576008805460ff60a01b1916600160a01b179055601e5460ff1680156136c75750600087115b80156136d557506000600c54115b156137875760006136f3600954600a546128af90919063ffffffff16565b9050600061371082610f87600a548761291590919063ffffffff16565b9050600061372d83610f876009548861291590919063ffffffff16565b9050600061374a600c54610f878d8661291590919063ffffffff16565b90506000613767600b54610f878e8661291590919063ffffffff16565b9050600061377582846128af565b905061378081613cc7565b5050505050505b600061379230611a2d565b905061379d816129d9565b506001600a8190556009556008805460ff60a01b191690555b60006137c76064610f878e87612915565b905060008a1561381a5760646137dd8e8d612915565b6137e79190614304565b90506138098f600860009054906101000a90046001600160a01b031683612e40565b6002546138169082612cd9565b6002555b61382e61382782846143a7565b8e90612cd9565b9c50861561384b5760095461384390836128af565b60095561385c565b600a5461385890836128af565b600a555b6138678f3084612e40565b601f54600d546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156138d4575060408051601f3d908101601f191682019092526138d191810190614326565b60015b1561392a5760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b50505050505050505b61393e888888612e40565b600d546001600160a01b031663e30443bc8961395981611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561399f57600080fd5b505af11580156139b3573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc9050886139d481611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613a1a57600080fd5b505af1158015613a2e573d6000803e3d6000fd5b505050505050505050505050565b60008184841115613a605760405162461bcd60e51b8152600401610f349190613e35565b506000613a6d8486614442565b95945050505050565b6001600160a01b0382166000908152602160205260409020805460ff19168215801591909117909155613b0357600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015613aea57600080fd5b505af1158015613afe573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60008183613b605760405162461bcd60e51b8152600401610f349190613e35565b506000613a6d8486614304565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ba257613ba2614282565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1f91906142b1565b81600181518110613c3257613c32614282565b6001600160a01b039283166020918202929092010152600654613c589130911684612d1b565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613c91908590600090869030904290600401614455565b600060405180830381600087803b158015613cab57600080fd5b505af1158015613cbf573d6000803e3d6000fd5b505050505050565b6000613cd4826002612997565b90506000613ce28383612cd9565b905047613cee83613b6d565b6000613cfa4783612cd9565b9050613d068382613d4e565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b600654613d669030906001600160a01b031684612d1b565b6006546001600160a01b031663f305d719823085600080613d8f6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613df7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061153b9190614326565b600060208284031215613e2e57600080fd5b5035919050565b600060208083528351808285015260005b81811015613e6257858101830151858201604001528201613e46565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461164857600080fd5b801515811461164857600080fd5b60008060408385031215613eb957600080fd5b8235613ec481613e83565b91506020830135613ed481613e98565b809150509250929050565b60008060408385031215613ef257600080fd5b8235613efd81613e83565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613f4a57613f4a613f0b565b604052919050565b600067ffffffffffffffff821115613f6c57613f6c613f0b565b5060051b60200190565b600082601f830112613f8757600080fd5b81356020613f9c613f9783613f52565b613f21565b82815260059290921b84018101918181019086841115613fbb57600080fd5b8286015b84811015613fd65780358352918301918301613fbf565b509695505050505050565b60008060408385031215613ff457600080fd5b823567ffffffffffffffff8082111561400c57600080fd5b818501915085601f83011261402057600080fd5b81356020614030613f9783613f52565b82815260059290921b8401810191818101908984111561404f57600080fd5b948201945b8386101561407657853561406781613e83565b82529482019490820190614054565b9650508601359250508082111561408c57600080fd5b5061409985828601613f76565b9150509250929050565b6000806000606084860312156140b857600080fd5b83356140c381613e83565b925060208401356140d381613e83565b929592945050506040919091013590565b6000602082840312156140f657600080fd5b813561290e81613e98565b60006020828403121561411357600080fd5b813561290e81613e83565b6000806000806000806000806000806101408b8d03121561413e57600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b6000806040838503121561419957600080fd5b82356141a481613e83565b91506020830135613ed481613e83565b600080600080608085870312156141ca57600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176111945761119461421b565b600181811c9082168061425c57607f821691505b60208210810361427c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016142aa576142aa61421b565b5060010190565b6000602082840312156142c357600080fd5b815161290e81613e83565b6000602082840312156142e057600080fd5b5051919050565b6000602082840312156142f957600080fd5b815161290e81613e98565b60008261432157634e487b7160e01b600052601260045260246000fd5b500490565b60008060006060848603121561433b57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561436d57600080fd5b865161437881613e83565b6020880151604089015160608a015160808b015160a0909b0151939c929b509099909850965090945092505050565b808201808211156111945761119461421b565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156111945761119461421b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156144a55784516001600160a01b031683529383019391830191600101614480565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b8c3c456c30938f1329d7e7a03c01b4cd3b9dd304e28d41d312499e76967d9264736f6c6343000811003360806040526012805460ff60b01b191690553480156200001e57600080fd5b506040516200305d3803806200305d83398101604081905262000041916200023a565b81818181600362000053838262000374565b50600462000062828262000374565b50505050506000620000796200015860201b60201c565b600980546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013620000d5838262000374565b506014620000e4828262000374565b505060128054601680546001600160a01b03199081166001600160a01b039889161790915569021e19e0c9bab240000060188190556019556015805490911695871695909517909455600160a01b929094166001600160a81b0319909316929092171760ff60a81b19169091555062000440565b3390565b6001600160a01b03811681146200017257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019d57600080fd5b81516001600160401b0380821115620001ba57620001ba62000175565b604051601f8301601f19908116603f01168101908282118183101715620001e557620001e562000175565b816040528381526020925086838588010111156200020257600080fd5b600091505b8382101562000226578582018301518183018401529082019062000207565b600093810190920192909252949350505050565b600080600080600060a086880312156200025357600080fd5b855162000260816200015c565b602087015190955062000273816200015c565b604087015190945062000286816200015c565b60608701519093506001600160401b0380821115620002a457600080fd5b620002b289838a016200018b565b93506080880151915080821115620002c957600080fd5b50620002d8888289016200018b565b9150509295509295909350565b600181811c90821680620002fa57607f821691505b6020821081036200031b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200036f57600081815260208120601f850160051c810160208610156200034a5750805b601f850160051c820191505b818110156200036b5782815560010162000356565b5050505b505050565b81516001600160401b0381111562000390576200039062000175565b620003a881620003a18454620002e5565b8462000321565b602080601f831160018114620003e05760008415620003c75750858301515b600019600386901b1c1916600185901b1785556200036b565b600085815260208120601f198616915b828110156200041157888601518255948401946001909101908401620003f0565b5085821015620004305787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612c0d80620004506000396000f3fe60806040526004361061031e5760003560e01c80636b69163b116101ab578063a457c2d7116100f7578063d8032ed311610095578063e7841ec01161006f578063e7841ec0146109ed578063f2fde38b14610a02578063fbcbc0f114610a22578063ffb2c47914610a4257600080fd5b8063d8032ed314610967578063dd62ed3e14610987578063e30443bc146109cd57600080fd5b8063aafd847a116100d1578063aafd847a146108d1578063b22f8a0414610907578063ba079d4914610927578063bc4c4b371461094757600080fd5b8063a457c2d714610871578063a8b9d24014610891578063a9059cbb146108b157600080fd5b80638bc1d6391161016457806395d89b411161013e57806395d89b41146107fa5780639c3372ea1461080f5780639eec101e1461082f578063a42340691461085057600080fd5b80638bc1d6391461079c5780638da5cb5b146107bc57806391b89fba146107da57600080fd5b80636b69163b146106cb5780636d48467b146106fb57806370a082311461071b578063715018a61461075157806374c13fda1461076657806385a6b3ae1461078657600080fd5b8063313ce5671161026a5780634e7b827f116102235780635ebf4db9116101fd5780635ebf4db91461065657806361688f8b1461067657806365b8dbc0146106965780636a474002146106b657600080fd5b80634e7b827f146105af5780635183d6fd146105df5780635a84c5eb1461063657600080fd5b8063313ce567146104f257806331e79db01461050e5780633599bb171461052e578063395093511461054e57806340ffdd801461056e578063418089041461058e57600080fd5b806318160ddd116102d757806323b872dd116102b157806323b872dd1461047e57806325cd35981461049e57806327ce0147146104bc5780633009a609146104dc57600080fd5b806318160ddd1461040c5780631d4ff89a14610421578063226cfa3d1461045157600080fd5b806303c833021461033257806306fdde031461033a5780630928847114610365578063095ea7b31461038557806309bbedde146103b55780631694505e146103d457600080fd5b3661032d5761032b610a7d565b005b600080fd5b61032b610a7d565b34801561034657600080fd5b5061034f610b10565b60405161035c9190612789565b60405180910390f35b34801561037157600080fd5b5061032b6103803660046127ef565b610ba2565b34801561039157600080fd5b506103a56103a036600461280c565b610bf6565b604051901515815260200161035c565b3480156103c157600080fd5b50600a545b60405190815260200161035c565b3480156103e057600080fd5b506015546103f4906001600160a01b031681565b6040516001600160a01b03909116815260200161035c565b34801561041857600080fd5b506002546103c6565b34801561042d57600080fd5b506103a561043c3660046127ef565b60116020526000908152604090205460ff1681565b34801561045d57600080fd5b506103c661046c3660046127ef565b60176020526000908152604090205481565b34801561048a57600080fd5b506103a5610499366004612838565b610c0d565b3480156104aa57600080fd5b506012546001600160a01b03166103f4565b3480156104c857600080fd5b506103c66104d73660046127ef565b610c76565b3480156104e857600080fd5b506103c6600e5481565b3480156104fe57600080fd5b506040516012815260200161035c565b34801561051a57600080fd5b5061032b6105293660046127ef565b610cd2565b34801561053a57600080fd5b5061032b610549366004612887565b610d6c565b34801561055a57600080fd5b506103a561056936600461280c565b610e0d565b34801561057a57600080fd5b5061032b610589366004612887565b610e43565b34801561059a57600080fd5b506012546103a590600160a81b900460ff1681565b3480156105bb57600080fd5b506103a56105ca3660046127ef565b600f6020526000908152604090205460ff1681565b3480156105eb57600080fd5b506105ff6105fa3660046128a4565b610ed9565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161035c565b34801561064257600080fd5b5061032b6106513660046128a4565b610f39565b34801561066257600080fd5b5061032b6106713660046128a4565b610f7b565b34801561068257600080fd5b506016546103f4906001600160a01b031681565b3480156106a257600080fd5b5061032b6106b13660046127ef565b610fbd565b3480156106c257600080fd5b5061032b611009565b3480156106d757600080fd5b506103a56106e63660046127ef565b60106020526000908152604090205460ff1681565b34801561070757600080fd5b506103a56107163660046127ef565b611094565b34801561072757600080fd5b506103c66107363660046127ef565b6001600160a01b031660009081526020819052604090205490565b34801561075d57600080fd5b5061032b6110e0565b34801561077257600080fd5b506012546103f4906001600160a01b031681565b34801561079257600080fd5b506103c660085481565b3480156107a857600080fd5b5061032b6107b73660046128bd565b611154565b3480156107c857600080fd5b506009546001600160a01b03166103f4565b3480156107e657600080fd5b506103c66107f53660046127ef565b6111a9565b34801561080657600080fd5b5061034f6111b4565b34801561081b57600080fd5b5061032b61082a366004612887565b6111c3565b34801561083b57600080fd5b506012546103a590600160a01b900460ff1681565b34801561085c57600080fd5b506012546103a590600160b01b900460ff1681565b34801561087d57600080fd5b506103a561088c36600461280c565b611259565b34801561089d57600080fd5b506103c66108ac3660046127ef565b6112a8565b3480156108bd57600080fd5b506103a56108cc36600461280c565b6112d4565b3480156108dd57600080fd5b506103c66108ec3660046127ef565b6001600160a01b031660009081526007602052604090205490565b34801561091357600080fd5b5061032b6109223660046128bd565b6112e1565b34801561093357600080fd5b506103a56109423660046127ef565b611336565b34801561095357600080fd5b506103a56109623660046128bd565b611382565b34801561097357600080fd5b5061032b6109823660046127ef565b611503565b34801561099357600080fd5b506103c66109a23660046128f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d957600080fd5b5061032b6109e836600461280c565b61154f565b3480156109f957600080fd5b50600e546103c6565b348015610a0e57600080fd5b5061032b610a1d3660046127ef565b6115e7565b348015610a2e57600080fd5b506105ff610a3d3660046127ef565b6116d2565b348015610a4e57600080fd5b50610a62610a5d3660046128a4565b611781565b6040805193845260208401929092529082015260600161035c565b6000610a8860025490565b11610a9257600080fd5b3415610b0e57610ac5610aa460025490565b610ab234600160801b6118a7565b610abc919061293a565b60055490611930565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610b0a9034611930565b6008555b565b606060138054610b1f9061295c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b9061295c565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b6009546001600160a01b03163314610bd55760405162461bcd60e51b8152600401610bcc90612996565b60405180910390fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000610c0333848461198f565b5060015b92915050565b6000610c1a848484611ab3565b610c6c8433610c6785604051806060016040528060288152602001612b8b602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611af7565b61198f565b5060019392505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b92610cc892610cc392610cbd91610cb891906118a7565b611b31565b90611b41565b611b7f565b610c07919061293a565b6009546001600160a01b03163314610cfc5760405162461bcd60e51b8152600401610bcc90612996565b6001600160a01b0381166000908152600f60205260408120805460ff19166001179055610d2a908290611b92565b610d35600a82611bf1565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546001600160a01b03163314610d965760405162461bcd60e51b8152600401610bcc90612996565b801515601260169054906101000a900460ff16151503610db557600080fd5b60128054821515600160b01b0260ff60b01b199091161790556040517f3da2593f2c4724acfbd754045321e852cad26f3974834b1890045530f89c21b390610e0290831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c03918590610c679086611930565b6009546001600160a01b03163314610e6d5760405162461bcd60e51b8152600401610bcc90612996565b801515601260159054906101000a900460ff16151503610e8c57600080fd5b60128054821515600160a81b0260ff60a81b199091161790556040517fc138a28750b971696f46ea59731c471ef1e08e4015404afdb139fd2e87dca1bb90610e0290831515815260200190565b600080600080600080610eeb600a5490565b8710610f0a575060009450600019935083925084915081905080610f30565b6000610f17600a89611d2c565b9050610f22816116d2565b965096509650965096509650505b91939550919395565b6009546001600160a01b03163314610f635760405162461bcd60e51b8152600401610bcc90612996565b610f7581670de0b6b3a76400006129cb565b60185550565b6009546001600160a01b03163314610fa55760405162461bcd60e51b8152600401610bcc90612996565b610fb781670de0b6b3a76400006129cb565b60195550565b6009546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610bcc90612996565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152605460248201527f77697468647261774469766964656e642064697361626c65642e20557365207460448201527f68652027636c61696d272066756e6374696f6e206f6e20746865206d61696e2060648201527323b437b9ba213ab9b23c9031b7b73a3930b1ba1760611b608482015260a401610bcc565b6009546000906001600160a01b031633146110c15760405162461bcd60e51b8152600401610bcc90612996565b506001600160a01b031660009081526010602052604090205460ff1690565b6009546001600160a01b0316331461110a5760405162461bcd60e51b8152600401610bcc90612996565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b6009546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610bcc90612996565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000610c07826112a8565b606060148054610b1f9061295c565b6009546001600160a01b031633146111ed5760405162461bcd60e51b8152600401610bcc90612996565b801515601260149054906101000a900460ff1615150361120c57600080fd5b60128054821515600160a01b0260ff60a01b199091161790556040517f8d34c313963017194ed726d050e868657d0e2d2c6748d13e358cd4b89d4ee7c890610e0290831515815260200190565b6000610c033384610c6785604051806060016040528060258152602001612bb3602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611af7565b6001600160a01b038116600090815260076020526040812054610c07906112ce84610c76565b90611d5f565b6000610c03338484611ab3565b6009546001600160a01b0316331461130b5760405162461bcd60e51b8152600401610bcc90612996565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6009546000906001600160a01b031633146113635760405162461bcd60e51b8152600401610bcc90612996565b506001600160a01b031660009081526011602052604090205460ff1690565b6009546000906001600160a01b031633146113af5760405162461bcd60e51b8152600401610bcc90612996565b601254600160b01b900460ff16156113c957506000610c07565b6001600160a01b03831660009081526011602052604090205460ff168280156113ef5750805b80156114055750601254600160a81b900460ff16155b15611414576000915050610c07565b6000816114295761142485611da1565b611432565b6114328561205a565b905080156114f8576001600160a01b038516600090815260176020526040902042905581156114a657831515856001600160a01b03167ffbd928dd3806a2bdf802f3a28a2cc55205f95dbcd2c3ed313abfca278366f80c8360405161149991815260200190565b60405180910390a36114ed565b831515856001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516114e491815260200190565b60405180910390a35b600192505050610c07565b506000949350505050565b6009546001600160a01b0316331461152d5760405162461bcd60e51b8152600401610bcc90612996565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031633146115795760405162461bcd60e51b8152600401610bcc90612996565b6001600160a01b0382166000908152600f602052604090205460ff166115b9576019548110156115bd576115ae600a83611bf1565b6115b9826000611b92565b5050565b6115c78282611b92565b60185481106115dc576115b9600a83836123cd565b6115b9600a83611bf1565b6009546001600160a01b031633146116115760405162461bcd60e51b8152600401610bcc90612996565b6001600160a01b0381166116765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bcc565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b806000808080806116e4600a87612476565b945060001993506000851261174657600e5485111561171257600e5461170b9086906124c1565b9350611746565b600e54600a5460009110611727576000611736565b600e54600a5461173691611d5f565b90506117428682611b41565b9450505b61174f866112a8565b925061175a86610c76565b6001600160a01b038716600090815260176020526040902054969895975093959294915050565b600a54600090819081908015806117a15750601254600160b01b900460ff165b156117b7575050600e54600092508291506118a0565b600e546000805a90506000805b89841080156117d257508582105b1561188f57846117e1816129e2565b9550508585106117f057600094505b6000600a6000018681548110611808576118086129fb565b60009182526020808320909101546001600160a01b0316808352601090915260409091205490915060ff1661185557611842816001611382565b156118555781611851816129e2565b9250505b8261185f816129e2565b93505060005a9050808511156118865761188361187c8683611d5f565b8790611930565b95505b93506117c49050565b600e85905590975095509193505050505b9193909250565b6000826000036118b957506000610c07565b60006118c583856129cb565b9050826118d2858361293a565b146119295760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bcc565b9392505050565b60008061193d8385612a11565b9050838110156119295760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bcc565b6001600160a01b0383166119f15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bcc565b6001600160a01b038216611a525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bcc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b8152602060048201526014602482015273139bc81d1c985b9cd9995c9cc8185b1b1bddd95960621b6044820152606401610bcc565b505050565b60008184841115611b1b5760405162461bcd60e51b8152600401610bcc9190612789565b506000611b288486612a24565b95945050505050565b60008181811215610c0757600080fd5b600080611b4e8385612a37565b905060008312158015611b615750838112155b80611b765750600083128015611b7657508381125b61192957600080fd5b600080821215611b8e57600080fd5b5090565b6001600160a01b03821660009081526020819052604090205480821115611bd1576000611bbf8383611d5f565b9050611bcb84826124fe565b50505050565b80821015611af2576000611be58284611d5f565b9050611bcb8482612562565b6001600160a01b038116600090815260038301602052604090205460ff16611c17575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff1916905560018086018352818420849055600286019092528220548454909291611c6191612a24565b90506000846000018281548110611c7a57611c7a6129fb565b60009182526020808320909101546001600160a01b03908116808452600289019092526040808420879055908716835282209190915585549091508190869085908110611cc957611cc96129fb565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558454859080611d0357611d03612a5f565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6000826000018281548110611d4357611d436129fb565b6000918252602090912001546001600160a01b03169392505050565b600061192983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611af7565b600080611dad836112a8565b90508015612051576001600160a01b038316600090815260076020526040902054611dd89082611930565b6001600160a01b03808516600090815260076020526040812092909255601254169081611e5d576040516001600160a01b03861690610bb89085906000818181858888f193505050503d8060008114611e4d576040519150601f19603f3d011682016040523d82523d6000602084013e611e52565b606091505b505080915050611fb7565b6040805160028082526060820183526000926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eeb9190612a75565b81600081518110611efe57611efe6129fb565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611f3257611f326129fb565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de95908690611f789060009086908c904290600401612ad6565b6000604051808303818588803b158015611f9157600080fd5b505af193505050508015611fa3575060015b611fb05760009150611fb5565b600191505b505b80612005576001600160a01b038516600090815260076020526040902054611fdf9084611d5f565b6001600160a01b0390951660009081526007602052604081209590955550929392505050565b846001600160a01b03167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d8460405161204091815260200190565b60405180910390a250909392505050565b50600092915050565b600080612066836112a8565b90508015612051576001600160a01b0383166000908152600760205260408120546120919083611930565b6001600160a01b03851660009081526007602052604080822092909255815160028082526060820190935290918160200160208202803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213d9190612a75565b81600081518110612150576121506129fb565b6001600160a01b039283166020918202929092010152601654825191169082906001908110612181576121816129fb565b6001600160a01b0392831660209182029290920101526016546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa1580156121db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ff9190612b0b565b60155460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de9590869061223990600090879030904290600401612ad6565b6000604051808303818588803b15801561225257600080fd5b505af193505050508015612264575060015b6122715760009250612374565b6016546040516370a0823160e01b81523060048201526000916122e49184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190612b0b565b9050801561236d5760165460405163a9059cbb60e01b81526001600160a01b03898116600483015260248201849052600196509091169063a9059cbb906044016020604051808303816000875af1158015612343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123679190612b24565b50612372565b600093505b505b826123c3576001600160a01b03861660009081526007602052604090205461239c9085611d5f565b6001600160a01b039096166000908152600760205260408120969096555093949350505050565b5091949350505050565b6001600160a01b038216600090815260038401602052604090205460ff1615612412576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff166124a15750600019610c07565b506001600160a01b03166000908152600291909101602052604090205490565b6000806124ce8385612b41565b9050600083121580156124e15750838113155b80611b765750600083128015611b76575083811361192957600080fd5b61250882826125a6565b612542612523610cb8836005546118a790919063ffffffff16565b6001600160a01b038416600090815260066020526040902054906124c1565b6001600160a01b0390921660009081526006602052604090209190915550565b61256c8282612685565b612542612587610cb8836005546118a790919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611b41565b6001600160a01b0382166125fc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bcc565b6002546126099082611930565b6002556001600160a01b03821660009081526020819052604090205461262f9082611930565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b0382166126e55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bcc565b61272281604051806060016040528060228152602001612b69602291396001600160a01b0385166000908152602081905260409020549190611af7565b6001600160a01b0383166000908152602081905260409020556002546127489082611d5f565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612679565b600060208083528351808285015260005b818110156127b65785810183015185820160400152820161279a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146127ec57600080fd5b50565b60006020828403121561280157600080fd5b8135611929816127d7565b6000806040838503121561281f57600080fd5b823561282a816127d7565b946020939093013593505050565b60008060006060848603121561284d57600080fd5b8335612858816127d7565b92506020840135612868816127d7565b929592945050506040919091013590565b80151581146127ec57600080fd5b60006020828403121561289957600080fd5b813561192981612879565b6000602082840312156128b657600080fd5b5035919050565b600080604083850312156128d057600080fd5b82356128db816127d7565b915060208301356128eb81612879565b809150509250929050565b6000806040838503121561290957600080fd5b8235612914816127d7565b915060208301356128eb816127d7565b634e487b7160e01b600052601160045260246000fd5b60008261295757634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061297057607f821691505b60208210810361299057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8082028115828204841417610c0757610c07612924565b6000600182016129f4576129f4612924565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820180821115610c0757610c07612924565b81810381811115610c0757610c07612924565b8082018281126000831280158216821582161715612a5757612a57612924565b505092915050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612a8757600080fd5b8151611929816127d7565b600081518084526020808501945080840160005b83811015612acb5781516001600160a01b031687529582019590820190600101612aa6565b509495945050505050565b848152608060208201526000612aef6080830186612a92565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215612b1d57600080fd5b5051919050565b600060208284031215612b3657600080fd5b815161192981612879565b8181036000831280158383131683831282161715612b6157612b61612924565b509291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029af7403eeb602b3a8e52faf4c926bcfb79d04cec34ff9bddc2980fd2a3ed00864736f6c63430008110033
Deployed Bytecode
0x6080604052600436106104b95760003560e01c806377a3b6091161026b578063acb2ad6f1161014f578063e14a93d6116100c1578063f27fd25411610085578063f27fd25414610e5e578063f2fde38b14610e7e578063f5d3c79a14610e9e578063f637434214610ebe578063f8b45b0514610ed4578063fc6b151c14610eea57600080fd5b8063e14a93d614610de7578063e2f4560514610e07578063e7841ec014610e1d578063ebae7c1c14610e32578063f11a24d314610e4857600080fd5b8063ba079d4911610113578063ba079d4914610d0b578063bb8d513114610d2b578063d07a091c14610d41578063d5e3725114610d61578063d8032ed314610d81578063dd62ed3e14610da157600080fd5b8063acb2ad6f14610c38578063ad56c13c14610c4e578063b494298814610ca5578063b62496f514610cbb578063b74e3b1114610ceb57600080fd5b806395451c29116101e85780639c3b4fdc116101ac5780639c3b4fdc14610b8c5780639ec1037e14610ba2578063a0d82dc514610bc2578063a457c2d714610bd8578063a8b9d24014610bf8578063a9059cbb14610c1857600080fd5b806395451c2914610b0b57806395d89b4114610b215780639a7a23d614610b365780639c1b8af514610b565780639c3372ea14610b6c57600080fd5b8063871c128d1161022f578063871c128d14610a815780638c3c82b214610aa15780638ca2923a14610ab75780638da5cb5b14610acd5780638ea5220f14610aeb57600080fd5b806377a3b609146109eb5780637fdde05c14610a01578063837ae2d014610a215780638577a6d514610a41578063868730c714610a6157600080fd5b80634a62bb651161039d57806366236b4a1161030f578063700bb191116102d3578063700bb1911461093657806370a0823114610956578063715018a61461097657806372d8edf41461098b57806375829def146109ab57806375f0a874146109cb57600080fd5b806366236b4a146108a0578063679ca6e9146108c05780636843cd84146108e05780636a42b8f8146109005780636d48467b1461091657600080fd5b80635124f874116103615780635124f874146107ff5780635a84c5eb146108155780635c234bb6146108355780635ebf4db91461084b5780635eee4bae1461086b57806364b0f6531461088b57600080fd5b80634a62bb651461075d5780634a74bb02146107775780634ada218b146107915780634e71d92d146107b25780634fbee193146107c757600080fd5b80632307b44111610436578063313ce567116103fa578063313ce567146106ab5780633599bb17146106c757806339509351146106e75780633f407b841461070757806340ffdd801461071d57806349bd5a5e1461073d57600080fd5b80632307b4411461062157806323b872dd1461064157806325cd3598146106615780632c1f52161461067657806330bb4cff1461069657600080fd5b8063095ea7b31161047d578063095ea7b3146105865780631694505e146105b657806318160ddd146105d65780631d7b1fb4146105f55780631fa705311461060b57600080fd5b806303fd2a45146104c557806305ca5f081461050257806306fdde031461052457806308dfe8a514610546578063092316021461056657600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506008546104e5906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561050e57600080fd5b5061052261051d366004613e1c565b610f0a565b005b34801561053057600080fd5b50610539610fdb565b6040516104f99190613e35565b34801561055257600080fd5b50610522610561366004613ea6565b61106d565b34801561057257600080fd5b50610522610581366004613e1c565b6110f4565b34801561059257600080fd5b506105a66105a1366004613edf565b611183565b60405190151581526020016104f9565b3480156105c257600080fd5b506006546104e5906001600160a01b031681565b3480156105e257600080fd5b506002545b6040519081526020016104f9565b34801561060157600080fd5b506105e7602a5481565b34801561061757600080fd5b506105e7600a5481565b34801561062d57600080fd5b5061052261063c366004613fe1565b61119a565b34801561064d57600080fd5b506105a661065c3660046140a3565b61136b565b34801561066d57600080fd5b506104e56113d4565b34801561068257600080fd5b50600d546104e5906001600160a01b031681565b3480156106a257600080fd5b506105e7611447565b3480156106b757600080fd5b50604051601281526020016104f9565b3480156106d357600080fd5b506105226106e23660046140e4565b6114b5565b3480156106f357600080fd5b506105a6610702366004613edf565b611542565b34801561071357600080fd5b506105e760095481565b34801561072957600080fd5b506105226107383660046140e4565b611578565b34801561074957600080fd5b506007546104e5906001600160a01b031681565b34801561076957600080fd5b506023546105a69060ff1681565b34801561078357600080fd5b50601e546105a69060ff1681565b34801561079d57600080fd5b506008546105a690600160a81b900460ff1681565b3480156107be57600080fd5b506105226115d3565b3480156107d357600080fd5b506105a66107e2366004614101565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561080b57600080fd5b506105e760185481565b34801561082157600080fd5b50610522610830366004613e1c565b61164b565b34801561084157600080fd5b506105e760175481565b34801561085757600080fd5b50610522610866366004613e1c565b6116a6565b34801561087757600080fd5b50610522610886366004613e1c565b611701565b34801561089757600080fd5b506105e7611743565b3480156108ac57600080fd5b506105226108bb366004613e1c565b61178d565b3480156108cc57600080fd5b506105226108db3660046140e4565b61183e565b3480156108ec57600080fd5b506105e76108fb366004614101565b61187b565b34801561090c57600080fd5b506105e760295481565b34801561092257600080fd5b506105a6610931366004614101565b6118eb565b34801561094257600080fd5b50610522610951366004613e1c565b61195b565b34801561096257600080fd5b506105e7610971366004614101565b611a2d565b34801561098257600080fd5b50610522611a48565b34801561099757600080fd5b506105226109a6366004614101565b611abc565b3480156109b757600080fd5b506105226109c6366004614101565b611b18565b3480156109d757600080fd5b50600e546104e5906001600160a01b031681565b3480156109f757600080fd5b506105e7601a5481565b348015610a0d57600080fd5b50610522610a1c366004613ea6565b611bcc565b348015610a2d57600080fd5b50610522610a3c36600461411e565b611c21565b348015610a4d57600080fd5b50610522610a5c366004613e1c565b611dcb565b348015610a6d57600080fd5b50610522610a7c3660046140e4565b611e82565b348015610a8d57600080fd5b50610522610a9c366004613e1c565b611eba565b348015610aad57600080fd5b506105e760285481565b348015610ac357600080fd5b506105e760145481565b348015610ad957600080fd5b506005546001600160a01b03166104e5565b348015610af757600080fd5b50600f546104e5906001600160a01b031681565b348015610b1757600080fd5b506105e760155481565b348015610b2d57600080fd5b50610539611f36565b348015610b4257600080fd5b50610522610b51366004613ea6565b611f45565b348015610b6257600080fd5b506105e7601f5481565b348015610b7857600080fd5b50610522610b873660046140e4565b611f7d565b348015610b9857600080fd5b506105e7601b5481565b348015610bae57600080fd5b50610522610bbd366004614101565b611fd9565b348015610bce57600080fd5b506105e7601c5481565b348015610be457600080fd5b506105a6610bf3366004613edf565b6120b0565b348015610c0457600080fd5b506105e7610c13366004614101565b6120ff565b348015610c2457600080fd5b506105a6610c33366004613edf565b612132565b348015610c4457600080fd5b506105e7601d5481565b348015610c5a57600080fd5b50610c6e610c69366004614101565b61213f565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c0016104f9565b348015610cb157600080fd5b506105e760275481565b348015610cc757600080fd5b506105a6610cd6366004614101565b60216020526000908152604090205460ff1681565b348015610cf757600080fd5b50610522610d06366004613e1c565b6121cf565b348015610d1757600080fd5b506105a6610d26366004614101565b61225f565b348015610d3757600080fd5b506105e760135481565b348015610d4d57600080fd5b50610522610d5c366004614101565b612292565b348015610d6d57600080fd5b50610522610d7c3660046140e4565b612388565b348015610d8d57600080fd5b50610522610d9c366004614101565b61240a565b348015610dad57600080fd5b506105e7610dbc366004614186565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610df357600080fd5b50610522610e023660046141b4565b6124cd565b348015610e1357600080fd5b506105e760125481565b348015610e2957600080fd5b506105e761264f565b348015610e3e57600080fd5b506105e760115481565b348015610e5457600080fd5b506105e760195481565b348015610e6a57600080fd5b50610c6e610e79366004613e1c565b612699565b348015610e8a57600080fd5b50610522610e99366004614101565b6126d7565b348015610eaa57600080fd5b50610522610eb93660046140e4565b6127c2565b348015610eca57600080fd5b506105e760165481565b348015610ee057600080fd5b506105e760105481565b348015610ef657600080fd5b50610522610f05366004613e1c565b6127fa565b6005546001600160a01b03163314610f3d5760405162461bcd60e51b8152600401610f34906141e6565b60405180910390fd5b610f4f81670de0b6b3a7640000614231565b90506000610f6a600954600a546128af90919063ffffffff16565b90506000610f8d82610f87600a548661291590919063ffffffff16565b90612997565b90506000610faa83610f876009548761291590919063ffffffff16565b9050610fb5846129d9565b600a54610fc29083612cd9565b600a55600954610fd29082612cd9565b60095550505050565b606060038054610fea90614248565b80601f016020809104026020016040519081016040528092919081815260200182805461101690614248565b80156110635780601f1061103857610100808354040283529160200191611063565b820191906000526020600020905b81548152906001019060200180831161104657829003601f168201915b5050505050905090565b6005546001600160a01b031633146110975760405162461bcd60e51b8152600401610f34906141e6565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461111e5760405162461bcd60e51b8152600401610f34906141e6565b603281101561116f5760405162461bcd60e51b815260206004820152601e60248201527f63616e206e6576657220626520736574206c6f776572207468616e20353000006044820152606401610f34565b61117d81633b9aca00614231565b60245550565b6000611190338484612d1b565b5060015b92915050565b6005546001600160a01b031633146111c45760405162461bcd60e51b8152600401610f34906141e6565b80518251146112155760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f34565b60c8825111156112725760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b6064820152608401610f34565b60005b825181101561136657600083828151811061129257611292614282565b6020026020010151905060008383815181106112b0576112b0614282565b6020026020010151670de0b6b3a76400006112cb9190614231565b90506112d8338383612e40565b600d546001600160a01b031663e30443bc836112f381611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561133957600080fd5b505af115801561134d573d6000803e3d6000fd5b505050505050808061135e90614298565b915050611275565b505050565b6000611378848484612f49565b6113ca84336113c5856040518060600160405280602881526020016144ed602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190613a3c565b612d1b565b5060019392505050565b600d54604080516304b9a6b360e31b815290516000926001600160a01b0316916325cd35989160048083019260209291908290030181865afa15801561141e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144291906142b1565b905090565b600d54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611491573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144291906142ce565b6005546001600160a01b031633146114df5760405162461bcd60e51b8152600401610f34906141e6565b600d54604051633599bb1760e01b815282151560048201526001600160a01b0390911690633599bb17906024015b600060405180830381600087803b15801561152757600080fd5b505af115801561153b573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916111909185906113c590866128af565b6005546001600160a01b031633146115a25760405162461bcd60e51b8152600401610f34906141e6565b600d546040516281ffbb60e71b815282151560048201526001600160a01b03909116906340ffdd809060240161150d565b600d5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611624573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164891906142e7565b50565b6005546001600160a01b031633146116755760405162461bcd60e51b8152600401610f34906141e6565b600d54604051635a84c5eb60e01b8152600481018390526001600160a01b0390911690635a84c5eb9060240161150d565b6005546001600160a01b031633146116d05760405162461bcd60e51b8152600401610f34906141e6565b600d54604051635ebf4db960e01b8152600481018390526001600160a01b0390911690635ebf4db99060240161150d565b6005546001600160a01b0316331461172b5760405162461bcd60e51b8152600401610f34906141e6565b61173d81670de0b6b3a7640000614231565b60125550565b600d54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611491573d6000803e3d6000fd5b6005546001600160a01b031633146117b75760405162461bcd60e51b8152600401610f34906141e6565b6117c981670de0b6b3a7640000614231565b90506103e86002546117db9190614304565b8110156118395760405162461bcd60e51b815260206004820152602660248201527f6d61782074782063616e6e6f742062652073657420746f206c657373207468616044820152656e20302e312560d01b6064820152608401610f34565b601155565b6005546001600160a01b031633146118685760405162461bcd60e51b8152600401610f34906141e6565b6023805460ff1916911515919091179055565b600d546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa1580156118c7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119491906142ce565b600d54604051636d48467b60e01b81526001600160a01b0383811660048301526000921690636d48467b906024015b602060405180830381865afa158015611937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119491906142e7565b600d546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af11580156119ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d29190614326565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611a725760405162461bcd60e51b8152600401610f34906141e6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611ae65760405162461bcd60e51b8152600401610f34906141e6565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db09060240161150d565b6005546001600160a01b03163314611b425760405162461bcd60e51b8152600401610f34906141e6565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015611b8957600080fd5b505af1158015611b9d573d6000803e3d6000fd5b5050506001600160a01b03821660009081526020805260409020805460ff1916600117905550611648816126d7565b6005546001600160a01b03163314611bf65760405162461bcd60e51b8152600401610f34906141e6565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c4b5760405162461bcd60e51b8152600401610f34906141e6565b60178a905560188890556019869055601a8490556014899055601587905560168590556013839055601b829055601c819055611c9381611c8d8981878a6128af565b906128af565b600b81905550611cbc601b54611c8d601854611c8d601954601a546128af90919063ffffffff16565b600c55600b54601010801590611cd557506010600c5411155b611d325760405162461bcd60e51b815260206004820152602860248201527f746f74616c20666565732063616e6e6f7420657863656564203135252073656c6044820152676c206f722062757960c01b6064820152608401610f34565b601454601554601654601354601754601854601954601a54601b54601c54604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526101208201527f07cec4532bdb36ce729ae72905c09f7bfbf8682c2cc2f1999f745188d9975122906101400160405180910390a150505050505050505050565b6005546001600160a01b03163314611df55760405162461bcd60e51b8152600401610f34906141e6565b600a811115611e465760405162461bcd60e51b815260206004820152601e60248201527f7472616e73666572206665652063616e6e6f74206578636565642031302500006044820152606401610f34565b601d8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c8844720343906020015b60405180910390a150565b600d54604051638bc1d63960e01b815233600482015282151560248201526001600160a01b0390911690638bc1d6399060440161150d565b6005546001600160a01b03163314611ee45760405162461bcd60e51b8152600401610f34906141e6565b62030d408110158015611efa5750621e84808111155b611f0357600080fd5b601f5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601f55565b606060048054610fea90614248565b6005546001600160a01b03163314611f6f5760405162461bcd60e51b8152600401610f34906141e6565b611f798282613a76565b5050565b6005546001600160a01b03163314611fa75760405162461bcd60e51b8152600401610f34906141e6565b600d54604051634e19b97560e11b815282151560048201526001600160a01b0390911690639c3372ea9060240161150d565b6005546001600160a01b031633146120035760405162461bcd60e51b8152600401610f34906141e6565b600d54604051630928847160e01b81526001600160a01b03838116600483015290911690630928847190602401600060405180830381600087803b15801561204a57600080fd5b505af115801561205e573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508261207f81611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260440161150d565b600061119033846113c585604051806060016040528060258152602001614515602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190613a3c565b600d546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016118aa565b6000611190338484612f49565b600d5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283929091169063fbcbc0f1906024015b60c060405180830381865afa158015612197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bb9190614354565b949c939b5091995097509550909350915050565b6005546001600160a01b031633146121f95760405162461bcd60e51b8152600401610f34906141e6565b61012c81111561225a5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b6064820152608401610f34565b602a55565b600d5460405163ba079d4960e01b81526001600160a01b038381166004830152600092169063ba079d499060240161191a565b6005546001600160a01b031633146122bc5760405162461bcd60e51b8152600401610f34906141e6565b6001600160a01b0381811660008181526022602090815260408083208054600160ff1991821681179092559280529281902080549092169092179055600d54905163031e79db60e41b81526004810192909252909116906331e79db090602401600060405180830381600087803b15801561233657600080fd5b505af115801561234a573d6000803e3d6000fd5b50506040516001600160a01b03841681527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c592506020019050611e77565b6005546001600160a01b031633146123b25760405162461bcd60e51b8152600401610f34906141e6565b601e5481151560ff9091161515036123c957600080fd5b601e805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001611e77565b6005546001600160a01b031633146124345760405162461bcd60e51b8152600401610f34906141e6565b600d5460405163d8032ed360e01b81526001600160a01b0383811660048301529091169063d8032ed390602401600060405180830381600087803b15801561247b57600080fd5b505af115801561248f573d6000803e3d6000fd5b50506040516001600160a01b03841681527f7597aa09105646b4cc4486748aecd1d7c5dbcbb7bbe2863c3fc27e613b64432d92506020019050611e77565b6005546001600160a01b031633146124f75760405162461bcd60e51b8152600401610f34906141e6565b61250983670de0b6b3a7640000614231565b925061251d82670de0b6b3a7640000614231565b600854909250600160a81b900460ff161561253757600080fd5b6103e86002546125479190614304565b83101561258e5760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610f34565b6103e860025461259e9190614304565b8210156125e55760405162461bcd60e51b815260206004820152601560248201527463616e6e6f74207365742062656c6f7720302e312560581b6044820152606401610f34565b601083905560118290556125fd84633b9aca00614231565b6024556008805460ff60a81b1916600160a81b179055436027554260285560298190556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150505050565b600d546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015611491573d6000803e3d6000fd5b600d54604051635183d6fd60e01b815260048101839052600091829182918291829182916001600160a01b0390911690635183d6fd9060240161217a565b6005546001600160a01b031633146127015760405162461bcd60e51b8152600401610f34906141e6565b6001600160a01b0381166127665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f34565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604051632c8be28160e21b815233600482015282151560248201526001600160a01b039091169063b22f8a049060440161150d565b6005546001600160a01b031633146128245760405162461bcd60e51b8152600401610f34906141e6565b61283681670de0b6b3a7640000614231565b90506103e86002546128489190614304565b8110156128aa5760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b6064820152608401610f34565b601055565b6000806128bc83856143a7565b90508381101561290e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f34565b9392505050565b60008260000361292757506000611194565b60006129338385614231565b9050826129408583614304565b1461290e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f34565b600061290e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b3f565b806000036129e45750565b6129ed81613b6d565b6000612a06600954600a546128af90919063ffffffff16565b601a54909150600190819081906000908190819015612a6757612a64601b54601854601a54612a3591906143a7565b612a3f91906143a7565b610f87601a54612a5e8b610f87600a544761291590919063ffffffff16565b90612915565b91505b60135415612ab157612aae601c54601554601354612a8591906143a7565b612a8f91906143a7565b610f87601354612a5e8b610f876009544761291590919063ffffffff16565b90505b612abb82826128af565b92508215612b1b57600d546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612b10576040519150601f19603f3d011682016040523d82523d6000602084013e612b15565b606091505b50909650505b6000612b34601b546018546128af90919063ffffffff16565b601c54601554612b43916128af565b612b4d91906143a7565b905060008115612b6457612b614783612997565b90505b600081612b7e6015546018546128af90919063ffffffff16565b612b889190614231565b9050600082612ba4601c54601b546128af90919063ffffffff16565b612bae9190614231565b90508115612c0e57600e546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612c03576040519150601f19603f3d011682016040523d82523d6000602084013e612c08565b606091505b50909950505b8015612c6c57600f546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612c61576040519150601f19603f3d011682016040523d82523d6000602084013e612c66565b606091505b50909850505b7f8e09ec88c0d24c22e3a9b8555c029afcc4a7c609daabf6d7849e814c2d14efd087612c9883856143a7565b8c8015612ca257508b5b8015612cab57508a5b60408051938452602084019290925215159082015260600160405180910390a1505050505050505050505050565b600061290e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a3c565b6001600160a01b038316612d7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f34565b6001600160a01b038216612dde5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f34565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316612e665760405162461bcd60e51b8152600401610f34906143ba565b6001600160a01b038216612e8c5760405162461bcd60e51b8152600401610f34906143ff565b612ec9816040518060600160405280602681526020016144c7602691396001600160a01b0386166000908152602081905260409020549190613a3c565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612ef890826128af565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612e33565b6001600160a01b038316612f6f5760405162461bcd60e51b8152600401610f34906143ba565b6001600160a01b038216612f955760405162461bcd60e51b8152600401610f34906143ff565b6001600160a01b038316600090815260226020526040812054819081908190819060ff1661301657600854600160a81b900460ff166130165760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c65646044820152606401610f34565b856000036130345761302a88886000612e40565b5050505050505050565b600854600160a01b900460ff1615801561306657506001600160a01b038816600090815260208052604090205460ff16155b801561308a57506001600160a01b038716600090815260208052604090205460ff16155b15613933576001600160a01b0380881660009081526021602052604080822054928b16825290205460ff9182169116801580156130c5575081155b1561335b576001600160a01b038a16600090815260208052604090205460ff1615801561310a57506001600160a01b038916600090815260208052604090205460ff16155b1561325057600061312b6064610f87601d548c61291590919063ffffffff16565b90506131378982612cd9565b98506131448b3083612e40565b61314f8b8b8b612e40565b600d546001600160a01b031663e30443bc8c61316a81611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156131b057600080fd5b505af11580156131c4573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508b6131e581611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561322b57600080fd5b505af115801561323f573d6000803e3d6000fd5b505050505050505050505050505050565b61325b8a8a8a612e40565b600d546001600160a01b031663e30443bc8b61327681611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156132bc57600080fd5b505af11580156132d0573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508a6132f181611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561333757600080fd5b505af115801561334b573d6000803e3d6000fd5b5050505050505050505050505050565b811561345757601354601454601554601654601c54602354949b509299509097509550935060ff161561345257602a54326000908152602660205260409020546133a591906143a7565b4210156133ed5760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b6044820152606401610f34565b60115488111561343f5760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610f34565b3260009081526026602052604090204290555b61365b565b801561365b57601a54601754601854601954601b54602354949b509299509097509550935060ff16156135e45760295460285461349491906143a7565b42116134d75760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b6044820152606401610f34565b6024543a11156135295760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610f34565b3260009081526025602052604090205443900361357f5760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b6044820152606401610f34565b6011548811156135d15760405162461bcd60e51b815260206004820152601b60248201527f61626f7665206d6178207472616e73616374696f6e206c696d697400000000006044820152606401610f34565b3260009081526025602052604090204390555b60006135ef8a611a2d565b6010549091506135ff8a836143a7565b11156136595760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610f34565b505b600061367c8461366b88886143a7565b61367591906143a7565b89906128af565b9050600061368930611a2d565b6012549091508110801590819061369d5750845b156137b6576008805460ff60a01b1916600160a01b179055601e5460ff1680156136c75750600087115b80156136d557506000600c54115b156137875760006136f3600954600a546128af90919063ffffffff16565b9050600061371082610f87600a548761291590919063ffffffff16565b9050600061372d83610f876009548861291590919063ffffffff16565b9050600061374a600c54610f878d8661291590919063ffffffff16565b90506000613767600b54610f878e8661291590919063ffffffff16565b9050600061377582846128af565b905061378081613cc7565b5050505050505b600061379230611a2d565b905061379d816129d9565b506001600a8190556009556008805460ff60a01b191690555b60006137c76064610f878e87612915565b905060008a1561381a5760646137dd8e8d612915565b6137e79190614304565b90506138098f600860009054906101000a90046001600160a01b031683612e40565b6002546138169082612cd9565b6002555b61382e61382782846143a7565b8e90612cd9565b9c50861561384b5760095461384390836128af565b60095561385c565b600a5461385890836128af565b600a555b6138678f3084612e40565b601f54600d546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156138d4575060408051601f3d908101601f191682019092526138d191810190614326565b60015b1561392a5760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b50505050505050505b61393e888888612e40565b600d546001600160a01b031663e30443bc8961395981611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561399f57600080fd5b505af11580156139b3573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc9050886139d481611a2d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613a1a57600080fd5b505af1158015613a2e573d6000803e3d6000fd5b505050505050505050505050565b60008184841115613a605760405162461bcd60e51b8152600401610f349190613e35565b506000613a6d8486614442565b95945050505050565b6001600160a01b0382166000908152602160205260409020805460ff19168215801591909117909155613b0357600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015613aea57600080fd5b505af1158015613afe573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60008183613b605760405162461bcd60e51b8152600401610f349190613e35565b506000613a6d8486614304565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ba257613ba2614282565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1f91906142b1565b81600181518110613c3257613c32614282565b6001600160a01b039283166020918202929092010152600654613c589130911684612d1b565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613c91908590600090869030904290600401614455565b600060405180830381600087803b158015613cab57600080fd5b505af1158015613cbf573d6000803e3d6000fd5b505050505050565b6000613cd4826002612997565b90506000613ce28383612cd9565b905047613cee83613b6d565b6000613cfa4783612cd9565b9050613d068382613d4e565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b600654613d669030906001600160a01b031684612d1b565b6006546001600160a01b031663f305d719823085600080613d8f6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015613df7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061153b9190614326565b600060208284031215613e2e57600080fd5b5035919050565b600060208083528351808285015260005b81811015613e6257858101830151858201604001528201613e46565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461164857600080fd5b801515811461164857600080fd5b60008060408385031215613eb957600080fd5b8235613ec481613e83565b91506020830135613ed481613e98565b809150509250929050565b60008060408385031215613ef257600080fd5b8235613efd81613e83565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613f4a57613f4a613f0b565b604052919050565b600067ffffffffffffffff821115613f6c57613f6c613f0b565b5060051b60200190565b600082601f830112613f8757600080fd5b81356020613f9c613f9783613f52565b613f21565b82815260059290921b84018101918181019086841115613fbb57600080fd5b8286015b84811015613fd65780358352918301918301613fbf565b509695505050505050565b60008060408385031215613ff457600080fd5b823567ffffffffffffffff8082111561400c57600080fd5b818501915085601f83011261402057600080fd5b81356020614030613f9783613f52565b82815260059290921b8401810191818101908984111561404f57600080fd5b948201945b8386101561407657853561406781613e83565b82529482019490820190614054565b9650508601359250508082111561408c57600080fd5b5061409985828601613f76565b9150509250929050565b6000806000606084860312156140b857600080fd5b83356140c381613e83565b925060208401356140d381613e83565b929592945050506040919091013590565b6000602082840312156140f657600080fd5b813561290e81613e98565b60006020828403121561411357600080fd5b813561290e81613e83565b6000806000806000806000806000806101408b8d03121561413e57600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b6000806040838503121561419957600080fd5b82356141a481613e83565b91506020830135613ed481613e83565b600080600080608085870312156141ca57600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176111945761119461421b565b600181811c9082168061425c57607f821691505b60208210810361427c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016142aa576142aa61421b565b5060010190565b6000602082840312156142c357600080fd5b815161290e81613e83565b6000602082840312156142e057600080fd5b5051919050565b6000602082840312156142f957600080fd5b815161290e81613e98565b60008261432157634e487b7160e01b600052601260045260246000fd5b500490565b60008060006060848603121561433b57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561436d57600080fd5b865161437881613e83565b6020880151604089015160608a015160808b015160a0909b0151939c929b509099909850965090945092505050565b808201808211156111945761119461421b565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156111945761119461421b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156144a55784516001600160a01b031683529383019391830191600101614480565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201b8c3c456c30938f1329d7e7a03c01b4cd3b9dd304e28d41d312499e76967d9264736f6c63430008110033
Deployed Bytecode Sourcemap
23375:25518:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23540:64;;;;;;;;;;-1:-1:-1;23540:64:0;;;;-1:-1:-1;;;;;23540:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;23540:64:0;;;;;;;;45961:443;;;;;;;;;;-1:-1:-1;45961:443:0;;;;;:::i;:::-;;:::i;:::-;;5024:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30786:181::-;;;;;;;;;;-1:-1:-1;30786:181:0;;;;;:::i;:::-;;:::i;31750:171::-;;;;;;;;;;-1:-1:-1;31750:171:0;;;;;:::i;:::-;;:::i;5938:169::-;;;;;;;;;;-1:-1:-1;5938:169:0;;;;;:::i;:::-;;:::i;:::-;;;2091:14:1;;2084:22;2066:41;;2054:2;2039:18;5938:169:0;1926:187:1;23455:41:0;;;;;;;;;;-1:-1:-1;23455:41:0;;;;-1:-1:-1;;;;;23455:41:0;;;5345:108;;;;;;;;;;-1:-1:-1;5433:12:0;;5345:108;;;2499:25:1;;;2487:2;2472:18;5345:108:0;2353:177:1;25427:33:0;;;;;;;;;;;;;;;;23718:28;;;;;;;;;;;;;;;;48253:637;;;;;;;;;;-1:-1:-1;48253:637:0;;;;;:::i;:::-;;:::i;6115:338::-;;;;;;;;;;-1:-1:-1;6115:338:0;;;;;:::i;:::-;;:::i;44990:114::-;;;;;;;;;;;;;:::i;23828:48::-;;;;;;;;;;-1:-1:-1;23828:48:0;;;;-1:-1:-1;;;;;23828:48:0;;;35727:141;;;;;;;;;;;;;:::i;29411:93::-;;;;;;;;;;-1:-1:-1;29411:93:0;;29494:2;5875:36:1;;5863:2;5848:18;29411:93:0;5733:184:1;37786:119:0;;;;;;;;;;-1:-1:-1;37786:119:0;;;;;:::i;:::-;;:::i;6461:218::-;;;;;;;;;;-1:-1:-1;6461:218:0;;;;;:::i;:::-;;:::i;23682:29::-;;;;;;;;;;;;;;;;33401:121;;;;;;;;;;-1:-1:-1;33401:121:0;;;;;:::i;:::-;;:::i;23505:28::-;;;;;;;;;;-1:-1:-1;23505:28:0;;;;-1:-1:-1;;;;;23505:28:0;;;25025:33;;;;;;;;;;-1:-1:-1;25025:33:0;;;;;;;;24510:40;;;;;;;;;;-1:-1:-1;24510:40:0;;;;;;;;23639:34;;;;;;;;;;-1:-1:-1;23639:34:0;;;;-1:-1:-1;;;23639:34:0;;;;;;37155:103;;;;;;;;;;;;;:::i;35876:126::-;;;;;;;;;;-1:-1:-1;35876:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;35966:28:0;35942:4;35966:28;;;:19;:28;;;;;;;;;35876:126;24302:31;;;;;;;;;;;;;;;;45112:160;;;;;;;;;;-1:-1:-1;45112:160:0;;;;;:::i;:::-;;:::i;24269:26::-;;;;;;;;;;;;;;;;45280:152;;;;;;;;;;-1:-1:-1;45280:152:0;;;;;:::i;:::-;;:::i;32780:120::-;;;;;;;;;;-1:-1:-1;32780:120:0;;;;;:::i;:::-;;:::i;37404:142::-;;;;;;;;;;;;;:::i;32537:209::-;;;;;;;;;;-1:-1:-1;32537:209:0;;;;;:::i;:::-;;:::i;31622:99::-;;;;;;;;;;-1:-1:-1;31622:99:0;;;;;:::i;:::-;;:::i;36170:139::-;;;;;;;;;;-1:-1:-1;36170:139:0;;;;;:::i;:::-;;:::i;25400:20::-;;;;;;;;;;;;;;;;37913:153;;;;;;;;;;-1:-1:-1;37913:153:0;;;;;:::i;:::-;;:::i;36876:271::-;;;;;;;;;;-1:-1:-1;36876:271:0;;;;;:::i;:::-;;:::i;5461:127::-;;;;;;;;;;-1:-1:-1;5461:127:0;;;;;:::i;:::-;;:::i;11540:148::-;;;;;;;;;;;;;:::i;31016:127::-;;;;;;;;;;-1:-1:-1;31016:127:0;;;;;:::i;:::-;;:::i;34067:208::-;;;;;;;;;;-1:-1:-1;34067:208:0;;;;;:::i;:::-;;:::i;23885:38::-;;;;;;;;;;-1:-1:-1;23885:38:0;;;;-1:-1:-1;;;;;23885:38:0;;;24377:28;;;;;;;;;;;;;;;;31436:147;;;;;;;;;;-1:-1:-1;31436:147:0;;;;;:::i;:::-;;:::i;34527:1192::-;;;;;;;;;;-1:-1:-1;34527:1192:0;;;;;:::i;:::-;;:::i;34283:236::-;;;;;;;;;;-1:-1:-1;34283:236:0;;;;;:::i;:::-;;:::i;37554:109::-;;;;;;;;;;-1:-1:-1;37554:109:0;;;;;:::i;:::-;;:::i;33818:241::-;;;;;;;;;;-1:-1:-1;33818:241:0;;;;;:::i;:::-;;:::i;25363:30::-;;;;;;;;;;;;;;;;24158:27;;;;;;;;;;;;;;;;11326:79;;;;;;;;;;-1:-1:-1;11391:6:0;;-1:-1:-1;;;;;11391:6:0;11326:79;;23930:32;;;;;;;;;;-1:-1:-1;23930:32:0;;;;-1:-1:-1;;;;;23930:32:0;;;24192;;;;;;;;;;;;;;;;5132:104;;;;;;;;;;;;;:::i;33124:140::-;;;;;;;;;;-1:-1:-1;33124:140:0;;;;;:::i;:::-;;:::i;24608:40::-;;;;;;;;;;;;;;;;33272:121;;;;;;;;;;-1:-1:-1;33272:121:0;;;;;:::i;:::-;;:::i;24412:24::-;;;;;;;;;;;;;;;;31181:193;;;;;;;;;;-1:-1:-1;31181:193:0;;;;;:::i;:::-;;:::i;24443:25::-;;;;;;;;;;;;;;;;6687:286;;;;;;;;;;-1:-1:-1;6687:286:0;;;;;:::i;:::-;;:::i;36010:152::-;;;;;;;;;;-1:-1:-1;36010:152:0;;;;;:::i;:::-;;:::i;5596:175::-;;;;;;;;;;-1:-1:-1;5596:175:0;;;;;:::i;:::-;;:::i;24475:26::-;;;;;;;;;;;;;;;;36317:264;;;;;;;;;;-1:-1:-1;36317:264:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7749:32:1;;;7731:51;;7813:2;7798:18;;7791:34;;;;7841:18;;;7834:34;;;;7899:2;7884:18;;7877:34;7942:3;7927:19;;7920:35;7769:3;7971:19;;7964:35;7718:3;7703:19;36317:264:0;7448:557:1;25330:26:0;;;;;;;;;;;;;;;;24755:57;;;;;;;;;;-1:-1:-1;24755:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32008:174;;;;;;;;;;-1:-1:-1;32008:174:0;;;;;:::i;:::-;;:::i;38074:127::-;;;;;;;;;;-1:-1:-1;38074:127:0;;;;;:::i;:::-;;:::i;24122:29::-;;;;;;;;;;;;;;;;30470:268;;;;;;;;;;-1:-1:-1;30470:268:0;;;;;:::i;:::-;;:::i;32908:208::-;;;;;;;;;;-1:-1:-1;32908:208:0;;;;;:::i;:::-;;:::i;44824:158::-;;;;;;;;;;-1:-1:-1;44824:158:0;;;;;:::i;:::-;;:::i;5779:151::-;;;;;;;;;;-1:-1:-1;5779:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5895:18:0;;;5868:7;5895:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5779:151;29642:763;;;;;;;;;;-1:-1:-1;29642:763:0;;;;;:::i;:::-;;:::i;24082:33::-;;;;;;;;;;;;;;;;37266:130;;;;;;;;;;;;;:::i;24055:20::-;;;;;;;;;;;;;;;;24340:30;;;;;;;;;;;;;;;;36589:279;;;;;;;;;;-1:-1:-1;36589:279:0;;;;;:::i;:::-;;:::i;11696:243::-;;;;;;;;;;-1:-1:-1;11696:243:0;;;;;:::i;:::-;;:::i;37671:107::-;;;;;;;;;;-1:-1:-1;37671:107:0;;;;;:::i;:::-;;:::i;24231:31::-;;;;;;;;;;;;;;;;24024:24;;;;;;;;;;;;;;;;32251:221;;;;;;;;;;-1:-1:-1;32251:221:0;;;;;:::i;:::-;;:::i;45961:443::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;;;;;;;;;46049:17:::1;:6:::0;46059::::1;46049:17;:::i;:::-;46040:26;;46077:19;46099:25;46113:10;;46099:9;;:13;;:25;;;;:::i;:::-;46077:47;;46135:15;46153:38;46179:11;46153:21;46164:9;;46153:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;46135:56;;46202:16;46221:39;46248:11;46221:22;46232:10;;46221:6;:10;;:22;;;;:::i;:39::-;46202:58;;46273:28;46294:6;46273:20;:28::i;:::-;46326:9;::::0;:22:::1;::::0;46340:7;46326:13:::1;:22::i;:::-;46314:9;:34:::0;46372:10:::1;::::0;:24:::1;::::0;46387:8;46372:14:::1;:24::i;:::-;46359:10;:37:::0;-1:-1:-1;;;;45961:443:0:o;5024:100::-;5078:13;5111:5;5104:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5024:100;:::o;30786:181::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30870:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;30870:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30925:34;;2066:41:1;;;30925:34:0::1;::::0;2039:18:1;30925:34:0::1;;;;;;;30786:181:::0;;:::o;31750:171::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;31836:2:::1;31828:4;:10;;31820:53;;;::::0;-1:-1:-1;;;31820:53:0;;10046:2:1;31820:53:0::1;::::0;::::1;10028:21:1::0;10085:2;10065:18;;;10058:30;10124:32;10104:18;;;10097:60;10174:18;;31820:53:0::1;9844:354:1::0;31820:53:0::1;31900:13;:4:::0;31907:6:::1;31900:13;:::i;:::-;31884;:29:::0;-1:-1:-1;31750:171:0:o;5938:169::-;6021:4;6038:39;206:10;6061:7;6070:6;6038:8;:39::i;:::-;-1:-1:-1;6095:4:0;5938:169;;;;;:::o;48253:637::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;48425:6:::1;:13;48400:14;:21;:38;48392:80;;;::::0;-1:-1:-1;;;48392:80:0;;10405:2:1;48392:80:0::1;::::0;::::1;10387:21:1::0;10444:2;10424:18;;;10417:30;10483:32;10463:18;;;10456:60;10533:18;;48392:80:0::1;10203:354:1::0;48392:80:0::1;48516:3;48491:14;:21;:28;;48483:75;;;::::0;-1:-1:-1;;;48483:75:0;;10764:2:1;48483:75:0::1;::::0;::::1;10746:21:1::0;10803:2;10783:18;;;10776:30;10842:34;10822:18;;;10815:62;-1:-1:-1;;;10893:18:1;;;10886:32;10935:19;;48483:75:0::1;10562:398:1::0;48483:75:0::1;48574:9;48569:314;48593:14;:21;48589:1;:25;48569:314;;;48636:14;48653;48668:1;48653:17;;;;;;;;:::i;:::-;;;;;;;48636:34;;48685:21;48709:6;48716:1;48709:9;;;;;;;;:::i;:::-;;;;;;;48722:6;48709:20;;;;:::i;:::-;48685:44;;48744:50;48760:10;48772:6;48780:13;48744:15;:50::i;:::-;48809:15;::::0;-1:-1:-1;;;;;48809:15:0::1;:26;48844:6:::0;48853:17:::1;48844:6:::0;48853:9:::1;:17::i;:::-;48809:62;::::0;-1:-1:-1;;;;;;48809:62:0::1;::::0;;;;;;-1:-1:-1;;;;;11297:32:1;;;48809:62:0::1;::::0;::::1;11279:51:1::0;11346:18;;;11339:34;11252:18;;48809:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48621:262;;48616:3;;;;;:::i;:::-;;;;48569:314;;;;48253:637:::0;;:::o;6115:338::-;6221:4;6238:36;6248:6;6256:9;6267:6;6238:9;:36::i;:::-;6285:138;6294:6;206:10;6316:106;6354:6;6316:106;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6316:19:0;;;;;;:11;:19;;;;;;;;206:10;6316:33;;;;;;;;;;:37;:106::i;:::-;6285:8;:138::i;:::-;-1:-1:-1;6441:4:0;6115:338;;;;;:::o;44990:114::-;45064:15;;:32;;;-1:-1:-1;;;45064:32:0;;;;45037:7;;-1:-1:-1;;;;;45064:15:0;;:30;;:32;;;;;;;;;;;;;;:15;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45057:39;;44990:114;:::o;35727:141::-;35817:15;;:43;;;-1:-1:-1;;;35817:43:0;;;;35790:7;;-1:-1:-1;;;;;35817:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37786:119::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;37856:15:::1;::::0;:41:::1;::::0;-1:-1:-1;;;37856:41:0;;2091:14:1;;2084:22;37856:41:0::1;::::0;::::1;2066::1::0;-1:-1:-1;;;;;37856:15:0;;::::1;::::0;:34:::1;::::0;2039:18:1;;37856:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37786:119:::0;:::o;6461:218::-;206:10;6549:4;6598:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6598:34:0;;;;;;;;;;6549:4;;6566:83;;6589:7;;6598:50;;6637:10;6598:38;:50::i;33401:121::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;33471:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;33471:43:0;;2091:14:1;;2084:22;33471:43:0::1;::::0;::::1;2066:41:1::0;-1:-1:-1;;;;;33471:15:0;;::::1;::::0;:36:::1;::::0;2039:18:1;;33471:43:0::1;1926:187:1::0;37155:103:0;37192:15;;:58;;-1:-1:-1;;;37192:58:0;;37231:10;37192:58;;;12153:51:1;37192:15:0;12220:18:1;;;12213:50;-1:-1:-1;;;;;37192:15:0;;;;:30;;12126:18:1;;37192:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37155:103::o;45112:160::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;45203:15:::1;::::0;:61:::1;::::0;-1:-1:-1;;;45203:61:0;;::::1;::::0;::::1;2499:25:1::0;;;-1:-1:-1;;;;;45203:15:0;;::::1;::::0;:54:::1;::::0;2472:18:1;;45203:61:0::1;2353:177:1::0;45280:152:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;45367:15:::1;::::0;:57:::1;::::0;-1:-1:-1;;;45367:57:0;;::::1;::::0;::::1;2499:25:1::0;;;-1:-1:-1;;;;;45367:15:0;;::::1;::::0;:50:::1;::::0;2472:18:1;;45367:57:0::1;2353:177:1::0;32780:120:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;32875:17:::1;:6:::0;32885::::1;32875:17;:::i;:::-;32854:18;:38:::0;-1:-1:-1;32780:120:0:o;37404:142::-;37497:15;;:41;;;-1:-1:-1;;;37497:41:0;;;;37470:7;;-1:-1:-1;;;;;37497:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;32537:209;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;32608:16:::1;:5:::0;32617:6:::1;32608:16;:::i;:::-;32600:24;;32667:4;32652:12;;:19;;;;:::i;:::-;32643:5;:28;;32635:79;;;::::0;-1:-1:-1;;;32635:79:0;;12948:2:1;32635:79:0::1;::::0;::::1;12930:21:1::0;12987:2;12967:18;;;12960:30;13026:34;13006:18;;;12999:62;-1:-1:-1;;;13077:18:1;;;13070:36;13123:19;;32635:79:0::1;12746:402:1::0;32635:79:0::1;32725:5;:13:::0;32537:209::o;31622:99::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;31691:14:::1;:22:::0;;-1:-1:-1;;31691:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31622:99::o;36170:139::-;36267:15;;:34;;-1:-1:-1;;;36267:34:0;;-1:-1:-1;;;;;178:32:1;;;36267:34:0;;;160:51:1;36240:7:0;;36267:15;;:25;;133:18:1;;36267:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37913:153::-;38010:15;;:48;;-1:-1:-1;;;38010:48:0;;-1:-1:-1;;;;;178:32:1;;;38010:48:0;;;160:51:1;37986:4:0;;38010:15;;:39;;133:18:1;;38010:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36876:271::-;37008:15;;:28;;-1:-1:-1;;;;;;37008:28:0;;;;;2499:25:1;;;36942:18:0;;;;;;-1:-1:-1;;;;;37008:15:0;;:23;;2472:18:1;;37008:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37052:87;;;13695:25:1;;;13751:2;13736:18;;13729:34;;;13779:18;;;13772:34;;;13837:2;13822:18;;13815:34;;;36941:95:0;;-1:-1:-1;36941:95:0;;-1:-1:-1;36941:95:0;-1:-1:-1;37129:9:0;;37117:5;;37052:87;;13682:3:1;13667:19;37052:87:0;;;;;;;36930:217;;;36876:271;:::o;5461:127::-;-1:-1:-1;;;;;5562:18:0;5535:7;5562:18;;;;;;;;;;;;5461:127::o;11540:148::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;11631:6:::1;::::0;11610:40:::1;::::0;11647:1:::1;::::0;-1:-1:-1;;;;;11631:6:0::1;::::0;11610:40:::1;::::0;11647:1;;11610:40:::1;11661:6;:19:::0;;-1:-1:-1;;;;;;11661:19:0::1;::::0;;11540:148::o;31016:127::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;31090:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;31090:45:0;;-1:-1:-1;;;;;178:32:1;;;31090:45:0::1;::::0;::::1;160:51:1::0;31090:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;31090:45:0::1;14:203:1::0;34067:208:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;34136:15:::1;::::0;:46:::1;::::0;-1:-1:-1;;;34136:46:0;;-1:-1:-1;;;;;178:32:1;;;34136:46:0::1;::::0;::::1;160:51:1::0;34136:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;34136:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;34193:29:0;::::1;;::::0;;;:19:::1;:29:::0;;;;;:36;;-1:-1:-1;;34193:36:0::1;34225:4;34193:36;::::0;;-1:-1:-1;34240:27:0::1;34213:8:::0;34240:17:::1;:27::i;31436:147::-:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31525:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;31525:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31436:147::o;34527:1192::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;34834:11:::1;:21:::0;;;34866:16:::1;:31:::0;;;34908:15:::1;:30:::0;;;34949:13:::1;:26:::0;;;34986:12:::1;:23:::0;;;35020:17:::1;:33:::0;;;35064:16:::1;:32:::0;;;35107:14:::1;:28:::0;;;35146:9:::1;:18:::0;;;35175:10:::1;:20:::0;;;35224:75:::1;35188:7:::0;35224:59:::1;35040:13:::0;35224:59;35124:11;35083:13;35224:18:::1;:36::i;:::-;:40:::0;::::1;:59::i;:75::-;35208:13;:91;;;;35327:71;35388:9;;35327:56;35366:16;;35327:34;35345:15;;35327:13;;:17;;:34;;;;:::i;:71::-;35312:12;:86:::0;35419:13:::1;::::0;35436:2:::1;-1:-1:-1::0;35419:19:0;::::1;::::0;:41:::1;;;35458:2;35442:12;;:18;;35419:41;35411:94;;;::::0;-1:-1:-1;;;35411:94:0;;14062:2:1;35411:94:0::1;::::0;::::1;14044:21:1::0;14101:2;14081:18;;;14074:30;14140:34;14120:18;;;14113:62;-1:-1:-1;;;14191:18:1;;;14184:38;14239:19;;35411:94:0::1;13860:404:1::0;35411:94:0::1;35534:12;::::0;35548:17:::1;::::0;35567:16:::1;::::0;35585:14:::1;::::0;35601:11:::1;::::0;35639:16:::1;::::0;35657:15:::1;::::0;35674:13:::1;::::0;35689:9:::1;::::0;35700:10:::1;::::0;35523:188:::1;::::0;;14668:25:1;;;14724:2;14709:18;;14702:34;;;;14752:18;;;14745:34;;;;14810:2;14795:18;;14788:34;;;;14853:3;14838:19;;14831:35;;;;14897:3;14882:19;;14875:35;14941:3;14926:19;;14919:35;14985:3;14970:19;;14963:35;15029:3;15014:19;;15007:35;15073:3;15058:19;;15051:35;35523:188:0::1;::::0;14655:3:1;14640:19;35523:188:0::1;;;;;;;34527:1192:::0;;;;;;;;;;:::o;34283:236::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;34389:2:::1;34371:14;:20;;34362:64;;;::::0;-1:-1:-1;;;34362:64:0;;15299:2:1;34362:64:0::1;::::0;::::1;15281:21:1::0;15338:2;15318:18;;;15311:30;15377:32;15357:18;;;15350:60;15427:18;;34362:64:0::1;15097:354:1::0;34362:64:0::1;34437:11;:28:::0;;;34481:30:::1;::::0;2499:25:1;;;34481:30:0::1;::::0;2487:2:1;2472:18;34481:30:0::1;;;;;;;;34283:236:::0;:::o;37554:109::-;37608:15;;:47;;-1:-1:-1;;;37608:47:0;;37637:10;37608:47;;;12153:51:1;12247:14;;12240:22;12220:18;;;12213:50;-1:-1:-1;;;;;37608:15:0;;;;:28;;12126:18:1;;37608:47:0;11969:300:1;33818:241:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;33916:6:::1;33904:8;:18;;:41;;;;;33938:7;33926:8;:19;;33904:41;33896:50;;;::::0;::::1;;33996:16;::::0;33962:51:::1;::::0;33986:8;;33962:51:::1;::::0;;;::::1;34024:16;:27:::0;33818:241::o;5132:104::-;5188:13;5221:7;5214:14;;;;;:::i;33124:140::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;33215:41:::1;33244:4;33250:5;33215:28;:41::i;:::-;33124:140:::0;;:::o;33272:121::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;33342:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;33342:43:0;;2091:14:1;;2084:22;33342:43:0::1;::::0;::::1;2066:41:1::0;-1:-1:-1;;;;;33342:15:0;;::::1;::::0;:36:::1;::::0;2039:18:1;;33342:43:0::1;1926:187:1::0;31181:193:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;31255:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;31255:45:0;;-1:-1:-1;;;;;178:32:1;;;31255:45:0::1;::::0;::::1;160:51:1::0;31255:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;31255:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31311:15:0::1;::::0;-1:-1:-1;;;;;31311:15:0::1;::::0;-1:-1:-1;31311:26:0::1;::::0;-1:-1:-1;31338:7:0;31347:18:::1;31338:7:::0;31347:9:::1;:18::i;:::-;31311:55;::::0;-1:-1:-1;;;;;;31311:55:0::1;::::0;;;;;;-1:-1:-1;;;;;11297:32:1;;;31311:55:0::1;::::0;::::1;11279:51:1::0;11346:18;;;11339:34;11252:18;;31311:55:0::1;11097:282:1::0;6687:286:0;6780:4;6797:146;206:10;6820:7;6829:113;6868:15;6829:113;;;;;;;;;;;;;;;;;206:10;6829:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6829:34:0;;;;;;;;;;;;:38;:113::i;36010:152::-;36107:15;;:47;;-1:-1:-1;;;36107:47:0;;-1:-1:-1;;;;;178:32:1;;;36107:47:0;;;160:51:1;36080:7:0;;36107:15;;:38;;133:18:1;;36107:47:0;14:203:1;5596:175:0;5682:4;5699:42;206:10;5723:9;5734:6;5699:9;:42::i;36317:264::-;36538:15;;:35;;-1:-1:-1;;;36538:35:0;;-1:-1:-1;;;;;178:32:1;;;36538:35:0;;;160:51:1;36390:7:0;;;;;;;;;;;;36538:15;;;;:26;;133:18:1;;36538:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36531:42;;;;-1:-1:-1;36531:42:0;;-1:-1:-1;36531:42:0;-1:-1:-1;36531:42:0;-1:-1:-1;36531:42:0;;-1:-1:-1;36317:264:0;-1:-1:-1;;36317:264:0:o;32008:174::-;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;32096:3:::1;32087:5;:12;;32079:63;;;::::0;-1:-1:-1;;;32079:63:0;;16788:2:1;32079:63:0::1;::::0;::::1;16770:21:1::0;16827:2;16807:18;;;16800:30;16866:34;16846:18;;;16839:62;-1:-1:-1;;;16917:18:1;;;16910:36;16963:19;;32079:63:0::1;16586:402:1::0;32079:63:0::1;32153:13;:21:::0;32008:174::o;38074:127::-;38158:15;;:35;;-1:-1:-1;;;38158:35:0;;-1:-1:-1;;;;;178:32:1;;;38158:35:0;;;160:51:1;38134:4:0;;38158:15;;:26;;133:18:1;;38158:35:0;14:203:1;30470:268:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30542:41:0;;::::1;;::::0;;;:33:::1;:41;::::0;;;;;;;:48;;30586:4:::1;-1:-1:-1::0;;30542:48:0;;::::1;::::0;::::1;::::0;;;30601:27;;;;;;;:34;;;;::::1;::::0;;::::1;::::0;;30646:15:::1;::::0;:44;;-1:-1:-1;;;30646:44:0;;::::1;::::0;::::1;160:51:1::0;;;;30646:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;30646:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30706:24:0::1;::::0;-1:-1:-1;;;;;178:32:1;;160:51;;30706:24:0::1;::::0;-1:-1:-1;148:2:1;133:18;;-1:-1:-1;30706:24:0::1;14:203:1::0;32908:208:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;32988:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;32980:41:::1;;;::::0;::::1;;33032:21;:31:::0;;-1:-1:-1;;33032:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33079:29:::1;::::0;2066:41:1;;;33079:29:0::1;::::0;2054:2:1;2039:18;33079:29:0::1;1926:187:1::0;44824:158:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;44894:15:::1;::::0;:40:::1;::::0;-1:-1:-1;;;44894:40:0;;-1:-1:-1;;;;;178:32:1;;;44894:40:0::1;::::0;::::1;160:51:1::0;44894:15:0;;::::1;::::0;:33:::1;::::0;133:18:1;;44894:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;44950:24:0::1;::::0;-1:-1:-1;;;;;178:32:1;;160:51;;44950:24:0::1;::::0;-1:-1:-1;148:2:1;133:18;;-1:-1:-1;44950:24:0::1;14:203:1::0;29642:763:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;29832:27:::1;:16:::0;29852:6:::1;29832:27;:::i;:::-;29813:46:::0;-1:-1:-1;29885:23:0::1;:12:::0;29901:6:::1;29885:23;:::i;:::-;29928:14;::::0;29870:38;;-1:-1:-1;;;;29928:14:0;::::1;;;29927:15;29919:24;;;::::0;::::1;;29997:4;29982:12;;:19;;;;:::i;:::-;29962:16;:39;;29954:72;;;::::0;-1:-1:-1;;;29954:72:0;;17195:2:1;29954:72:0::1;::::0;::::1;17177:21:1::0;17234:2;17214:18;;;17207:30;-1:-1:-1;;;17253:18:1;;;17246:51;17314:18;;29954:72:0::1;16993:345:1::0;29954:72:0::1;30076:4;30061:12;;:19;;;;:::i;:::-;30045:12;:35;;30037:68;;;::::0;-1:-1:-1;;;30037:68:0;;17195:2:1;30037:68:0::1;::::0;::::1;17177:21:1::0;17234:2;17214:18;;;17207:30;-1:-1:-1;;;17253:18:1;;;17246:51;17314:18;;30037:68:0::1;16993:345:1::0;30037:68:0::1;30116:9;:28:::0;;;30155:5:::1;:20:::0;;;30202:23:::1;:14:::0;30219:6:::1;30202:23;:::i;:::-;30186:13;:39:::0;30236:14:::1;:21:::0;;-1:-1:-1;;;;30236:21:0::1;-1:-1:-1::0;;;30236:21:0::1;::::0;;30282:12:::1;30268:11;:26:::0;30323:15:::1;30305;:33:::0;30349:5:::1;:16:::0;;;30381::::1;::::0;::::1;::::0;30236:21;;30381:16:::1;29642:763:::0;;;;:::o;37266:130::-;37349:15;;:39;;;-1:-1:-1;;;37349:39:0;;;;37322:7;;-1:-1:-1;;;;;37349:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;36589:279;36820:15;;:40;;-1:-1:-1;;;36820:40:0;;;;;2499:25:1;;;36667:7:0;;;;;;;;;;;;-1:-1:-1;;;;;36820:15:0;;;;:33;;2472:18:1;;36820:40:0;2353:177:1;11696:243:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11785:22:0;::::1;11777:72;;;::::0;-1:-1:-1;;;11777:72:0;;17545:2:1;11777:72:0::1;::::0;::::1;17527:21:1::0;17584:2;17564:18;;;17557:30;17623:34;17603:18;;;17596:62;-1:-1:-1;;;17674:18:1;;;17667:36;17720:19;;11777:72:0::1;17343:402:1::0;11777:72:0::1;11886:6;::::0;11865:38:::1;::::0;-1:-1:-1;;;;;11865:38:0;;::::1;::::0;11886:6:::1;::::0;11865:38:::1;::::0;11886:6:::1;::::0;11865:38:::1;11914:6;:17:::0;;-1:-1:-1;;;;;;11914:17:0::1;-1:-1:-1::0;;;;;11914:17:0;;;::::1;::::0;;;::::1;::::0;;11696:243::o;37671:107::-;37724:15;;:46;;-1:-1:-1;;;37724:46:0;;37752:10;37724:46;;;12153:51:1;12247:14;;12240:22;12220:18;;;12213:50;-1:-1:-1;;;;;37724:15:0;;;;:27;;12126:18:1;;37724:46:0;11969:300:1;32251:221:0;11453:6;;-1:-1:-1;;;;;11453:6:0;206:10;11453:22;11445:67;;;;-1:-1:-1;;;11445:67:0;;;;;;;:::i;:::-;32326:16:::1;:5:::0;32335:6:::1;32326:16;:::i;:::-;32318:24;;32385:4;32370:12;;:19;;;;:::i;:::-;32361:5;:28;;32353:83;;;::::0;-1:-1:-1;;;32353:83:0;;17952:2:1;32353:83:0::1;::::0;::::1;17934:21:1::0;17991:2;17971:18;;;17964:30;18030:34;18010:18;;;18003:62;-1:-1:-1;;;18081:18:1;;;18074:40;18131:19;;32353:83:0::1;17750:406:1::0;32353:83:0::1;32447:9;:17:::0;32251:221::o;9487:179::-;9545:7;;9577:5;9581:1;9577;:5;:::i;:::-;9565:17;;9606:1;9601;:6;;9593:46;;;;-1:-1:-1;;;9593:46:0;;18493:2:1;9593:46:0;;;18475:21:1;18532:2;18512:18;;;18505:30;18571:29;18551:18;;;18544:57;18618:18;;9593:46:0;18291:351:1;9593:46:0;9657:1;9487:179;-1:-1:-1;;;9487:179:0:o;10016:248::-;10074:7;10098:1;10103;10098:6;10094:47;;-1:-1:-1;10128:1:0;10121:8;;10094:47;10153:9;10165:5;10169:1;10165;:5;:::i;:::-;10153:17;-1:-1:-1;10198:1:0;10189:5;10193:1;10153:17;10189:5;:::i;:::-;:10;10181:56;;;;-1:-1:-1;;;10181:56:0;;18849:2:1;10181:56:0;;;18831:21:1;18888:2;18868:18;;;18861:30;18927:34;18907:18;;;18900:62;-1:-1:-1;;;18978:18:1;;;18971:31;19019:19;;10181:56:0;18647:397:1;10272:132:0;10330:7;10357:39;10361:1;10364;10357:39;;;;;;;;;;;;;;;;;:3;:39::i;46412:1833::-;46481:6;46491:1;46481:11;46477:50;;46412:1833;:::o;46477:50::-;46537:24;46554:6;46537:16;:24::i;:::-;46572:19;46594:25;46608:10;;46594:9;;:13;;:25;;;;:::i;:::-;46835:13;;46572:47;;-1:-1:-1;46647:4:0;;;;;;46632:12;;;;;;46835:17;46831:205;;46888:136;47014:9;;46995:16;;46979:13;;:32;;;;:::i;:::-;:44;;;;:::i;:::-;46888:86;46960:13;;46888:53;46929:11;46888:36;46914:9;;46888:21;:25;;:36;;;;:::i;:53::-;:71;;:86::i;:136::-;46869:155;;46831:205;47050:14;;:18;47046:212;;47105:141;47235:10;;47215:17;;47198:14;;:34;;;;:::i;:::-;:47;;;;:::i;:::-;47105:88;47178:14;;47105:54;47147:11;47105:37;47131:10;;47105:21;:25;;:37;;;;:::i;:141::-;47085:161;;47046:212;47280:39;:16;47301:17;47280:20;:39::i;:::-;47268:51;-1:-1:-1;47336:13:0;;47332:111;;47388:15;;47380:51;;-1:-1:-1;;;;;47388:15:0;;;;47417:9;;47380:51;;;;47417:9;47388:15;47380:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47366:65:0;;-1:-1:-1;;47332:111:0;47463:21;47536:31;47557:9;;47536:16;;:20;;:31;;;;:::i;:::-;47509:10;;47487:17;;:33;;:21;:33::i;:::-;:80;;;;:::i;:::-;47463:104;-1:-1:-1;47580:19:0;47614:17;;47610:104;;47662:40;:21;47688:13;47662:25;:40::i;:::-;47648:54;;47610:104;47724:23;47792:11;47750:39;47771:17;;47750:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;47724:79;;47814:17;47862:11;47834:25;47848:10;;47834:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;47814:59;-1:-1:-1;47890:19:0;;47886:126;;47951:15;;47943:57;;-1:-1:-1;;;;;47951:15:0;;;;47980;;47943:57;;;;47980:15;47951;47943:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47926:74:0;;-1:-1:-1;;47886:126:0;48026:13;;48022:108;;48081:9;;48073:45;;-1:-1:-1;;;;;48081:9:0;;;;48104;;48073:45;;;;48104:9;48081;48073:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48056:62:0;;-1:-1:-1;;48022:108:0;48147:90;48161:9;48172:27;48190:9;48172:15;:27;:::i;:::-;48201:7;:21;;;;;48212:10;48201:21;:35;;;;;48226:10;48201:35;48147:90;;;19455:25:1;;;19511:2;19496:18;;19489:34;;;;19566:14;19559:22;19539:18;;;19532:50;19443:2;19428:18;48147:90:0;;;;;;;46466:1779;;;;;;;;;;;46412:1833;:::o;9674:136::-;9732:7;9759:43;9763:1;9766;9759:43;;;;;;;;;;;;;;;;;:3;:43::i;8338:346::-;-1:-1:-1;;;;;8440:19:0;;8432:68;;;;-1:-1:-1;;;8432:68:0;;19795:2:1;8432:68:0;;;19777:21:1;19834:2;19814:18;;;19807:30;19873:34;19853:18;;;19846:62;-1:-1:-1;;;19924:18:1;;;19917:34;19968:19;;8432:68:0;19593:400:1;8432:68:0;-1:-1:-1;;;;;8519:21:0;;8511:68;;;;-1:-1:-1;;;8511:68:0;;20200:2:1;8511:68:0;;;20182:21:1;20239:2;20219:18;;;20212:30;20278:34;20258:18;;;20251:62;-1:-1:-1;;;20329:18:1;;;20322:32;20371:19;;8511:68:0;19998:398:1;8511:68:0;-1:-1:-1;;;;;8592:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8644:32;;2499:25:1;;;8644:32:0;;2472:18:1;8644:32:0;;;;;;;;8338:346;;;:::o;6981:538::-;-1:-1:-1;;;;;7087:20:0;;7079:70;;;;-1:-1:-1;;;7079:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7168:23:0;;7160:71;;;;-1:-1:-1;;;7160:71:0;;;;;;;:::i;:::-;7324:70;7346:6;7324:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7324:17:0;;:9;:17;;;;;;;;;;;;:70;:21;:70::i;:::-;-1:-1:-1;;;;;7304:17:0;;;:9;:17;;;;;;;;;;;:90;;;;7428:20;;;;;;;:32;;7453:6;7428:24;:32::i;:::-;-1:-1:-1;;;;;7405:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;7476:35;2499:25:1;;;7405:20:0;;7476:35;;;;;;2472:18:1;7476:35:0;2353:177:1;38209:5612:0;-1:-1:-1;;;;;38307:18:0;;38299:68;;;;-1:-1:-1;;;38299:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38386:16:0;;38378:64;;;;-1:-1:-1;;;38378:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38605:39:0;;38453:18;38605:39;;;:33;:39;;;;;;38453:18;;;;;;;;38605:39;;38600:132;;38669:14;;-1:-1:-1;;;38669:14:0;;;;38661:59;;;;-1:-1:-1;;;38661:59:0;;21413:2:1;38661:59:0;;;21395:21:1;;;21432:18;;;21425:30;21491:34;21471:18;;;21464:62;21543:18;;38661:59:0;21211:356:1;38661:59:0;38746:6;38756:1;38746:11;38742:4910;;38774:28;38790:4;38796:2;38800:1;38774:15;:28::i;:::-;38817:7;;;;;38209:5612;;;:::o;38742:4910::-;38861:8;;-1:-1:-1;;;38861:8:0;;;;38860:9;:39;;;;-1:-1:-1;;;;;;38874:25:0;;;;;;:19;:25;;;;;;;;38873:26;38860:39;:67;;;;-1:-1:-1;;;;;;38904:23:0;;;;;;:19;:23;;;;;;;;38903:24;38860:67;38856:4796;;;-1:-1:-1;;;;;38961:29:0;;;38944:14;38961:29;;;:25;:29;;;;;;;39021:31;;;;;;;;38961:29;;;;;39021:31;39073:9;;:23;;;;;39087:9;39086:10;39073:23;39069:2389;;;-1:-1:-1;;;;;39122:25:0;;;;;;:19;:25;;;;;;;;39121:26;:54;;;;-1:-1:-1;;;;;;39152:23:0;;;;;;:19;:23;;;;;;;;39151:24;39121:54;39117:759;;;39200:13;39216:32;39244:3;39216:23;39227:11;;39216:6;:10;;:23;;;;:::i;:32::-;39200:48;-1:-1:-1;39280:17:0;:6;39200:48;39280:10;:17::i;:::-;39271:26;;39320:43;39336:4;39350;39357:5;39320:15;:43::i;:::-;39386:33;39402:4;39408:2;39412:6;39386:15;:33::i;:::-;39442:15;;-1:-1:-1;;;;;39442:15:0;:26;39469:4;39475:15;39469:4;39475:9;:15::i;:::-;39442:49;;-1:-1:-1;;;;;;39442:49:0;;;;;;;-1:-1:-1;;;;;11297:32:1;;;39442:49:0;;;11279:51:1;11346:18;;;11339:34;11252:18;;39442:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39514:15:0;;-1:-1:-1;;;;;39514:15:0;;-1:-1:-1;39514:26:0;;-1:-1:-1;39541:2:0;39545:13;39541:2;39545:9;:13::i;:::-;39514:45;;-1:-1:-1;;;;;;39514:45:0;;;;;;;-1:-1:-1;;;;;11297:32:1;;;39514:45:0;;;11279:51:1;11346:18;;;11339:34;11252:18;;39514:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39582:7;;;;;;;;38209:5612;;;:::o;39117:759::-;39654:33;39670:4;39676:2;39680:6;39654:15;:33::i;:::-;39710:15;;-1:-1:-1;;;;;39710:15:0;:26;39737:4;39743:15;39737:4;39743:9;:15::i;:::-;39710:49;;-1:-1:-1;;;;;;39710:49:0;;;;;;;-1:-1:-1;;;;;11297:32:1;;;39710:49:0;;;11279:51:1;11346:18;;;11339:34;11252:18;;39710:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39782:15:0;;-1:-1:-1;;;;;39782:15:0;;-1:-1:-1;39782:26:0;;-1:-1:-1;39809:2:0;39813:13;39809:2;39813:9;:13::i;:::-;39782:45;;-1:-1:-1;;;;;;39782:45:0;;;;;;;-1:-1:-1;;;;;11297:32:1;;;39782:45:0;;;11279:51:1;11346:18;;;11339:34;11252:18;;39782:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39850:7;;;;;;;38209:5612;;;:::o;39069:2389::-;39916:9;39912:1546;;;39959:14;;40003:12;;40050:17;;40101:16;;40146:10;;40181:14;;39959;;-1:-1:-1;40003:12:0;;-1:-1:-1;40050:17:0;;-1:-1:-1;40101:16:0;-1:-1:-1;40146:10:0;-1:-1:-1;40181:14:0;;40177:344;;;40285:13;;40272:9;40243:39;;;;:28;:39;;;;;;:55;;40285:13;40243:55;:::i;:::-;40224:15;:74;;40216:134;;;;-1:-1:-1;;;40216:134:0;;21774:2:1;40216:134:0;;;21756:21:1;21813:2;21793:18;;;21786:30;-1:-1:-1;;;21832:18:1;;;21825:52;21894:18;;40216:134:0;21572:346:1;40216:134:0;40387:5;;40377:6;:15;;40369:54;;;;-1:-1:-1;;;40369:54:0;;22125:2:1;40369:54:0;;;22107:21:1;22164:2;22144:18;;;22137:30;22203:29;22183:18;;;22176:57;22250:18;;40369:54:0;21923:351:1;40369:54:0;40471:9;40442:39;;;;:28;:39;;;;;40484:15;40442:57;;40177:344;39912:1546;;;40548:8;40544:914;;;40590:13;;40633:11;;40679:16;;40729:15;;40773:9;;40807:14;;40590:13;;-1:-1:-1;40633:11:0;;-1:-1:-1;40679:16:0;;-1:-1:-1;40729:15:0;-1:-1:-1;40773:9:0;-1:-1:-1;40807:14:0;;40803:453;;;40886:5;;40868:15;;:23;;;;:::i;:::-;40850:15;:41;40842:71;;;;-1:-1:-1;;;40842:71:0;;22481:2:1;40842:71:0;;;22463:21:1;22520:2;22500:18;;;22493:30;-1:-1:-1;;;22539:18:1;;;22532:48;22597:18;;40842:71:0;22279:342:1;40842:71:0;40955:13;;40940:11;:28;;40932:64;;;;-1:-1:-1;;;40932:64:0;;22828:2:1;40932:64:0;;;22810:21:1;22867:2;22847:18;;;22840:30;22906:26;22886:18;;;22879:54;22950:18;;40932:64:0;22626:348:1;40932:64:0;41048:9;41023:35;;;;:24;:35;;;;;;41062:12;41023:51;;41015:83;;;;-1:-1:-1;;;41015:83:0;;23181:2:1;41015:83:0;;;23163:21:1;23220:2;23200:18;;;23193:30;-1:-1:-1;;;23239:18:1;;;23232:50;23299:18;;41015:83:0;22979:344:1;41015:83:0;41135:5;;41125:6;:15;;41117:54;;;;-1:-1:-1;;;41117:54:0;;22125:2:1;41117:54:0;;;22107:21:1;22164:2;22144:18;;;22137:30;22203:29;22183:18;;;22176:57;22250:18;;41117:54:0;21923:351:1;41117:54:0;41215:9;41190:35;;;;:24;:35;;;;;41228:12;41190:50;;40803:453;41284:32;41319:13;41329:2;41319:9;:13::i;:::-;41392:9;;41284:48;;-1:-1:-1;41355:33:0;41382:6;41284:48;41355:33;:::i;:::-;:46;;41347:95;;;;-1:-1:-1;;;41347:95:0;;23530:2:1;41347:95:0;;;23512:21:1;23569:2;23549:18;;;23542:30;23608:34;23588:18;;;23581:62;-1:-1:-1;;;23659:18:1;;;23652:34;23703:19;;41347:95:0;23328:400:1;41347:95:0;40558:900;40544:914;41474:17;41494:54;41540:7;41509:28;41524:13;41509:12;:28;:::i;:::-;:38;;;;:::i;:::-;41494:10;;:14;:54::i;:::-;41474:74;;41565:28;41596:24;41614:4;41596:9;:24::i;:::-;41676:18;;41565:55;;-1:-1:-1;41652:42:0;;;;;;;41715:20;;;41726:9;41715:20;41711:1014;;;41756:8;:15;;-1:-1:-1;;;;41756:15:0;-1:-1:-1;;;41756:15:0;;;41796:21;;41756:15;41796:21;:41;;;;;41836:1;41821:12;:16;41796:41;:61;;;;;41856:1;41841:12;;:16;41796:61;41792:689;;;41882:20;41905:25;41919:10;;41905:9;;:13;;:25;;;;:::i;:::-;41882:48;;41953:24;41980:53;42020:12;41980:35;42005:9;;41980:20;:24;;:35;;;;:::i;:53::-;41953:80;;42056:22;42081:54;42122:12;42081:36;42106:10;;42081:20;:24;;:36;;;;:::i;:54::-;42056:79;;42158:21;42182:52;42221:12;;42182:34;42203:12;42182:16;:20;;:34;;;;:::i;:52::-;42158:76;;42257:22;42282:51;42319:13;;42282:32;42301:12;42282:14;:18;;:32;;;;:::i;:51::-;42257:76;-1:-1:-1;42356:18:0;42377:33;42257:76;42396:13;42377:18;:33::i;:::-;42356:54;;42435:26;42450:10;42435:14;:26::i;:::-;41859:622;;;;;;41792:689;42501:24;42528;42546:4;42528:9;:24::i;:::-;42501:51;;42571:38;42592:16;42571:20;:38::i;:::-;-1:-1:-1;42640:1:0;42628:9;:13;;;42660:10;:14;42693:8;:16;;-1:-1:-1;;;;42693:16:0;;;41711:1014;42741:12;42756:30;42782:3;42756:21;:6;42767:9;42756:10;:21::i;:30::-;42741:45;-1:-1:-1;42801:18:0;42840:12;;42836:202;;42905:3;42882:20;:6;42893:8;42882:10;:20::i;:::-;:26;;;;:::i;:::-;42869:39;;42923;42939:4;42945;;;;;;;;;-1:-1:-1;;;;;42945:4:0;42951:10;42923:15;:39::i;:::-;42992:12;;:28;;43009:10;42992:16;:28::i;:::-;42977:12;:43;42836:202;43063:29;43074:17;43081:10;43074:4;:17;:::i;:::-;43063:6;;:10;:29::i;:::-;43054:38;;43113:9;43109:169;;;43156:10;;:20;;43171:4;43156:14;:20::i;:::-;43143:10;:33;43109:169;;;43243:9;;:19;;43257:4;43243:13;:19::i;:::-;43231:9;:31;43109:169;43294:42;43310:4;43324;43331;43294:15;:42::i;:::-;43367:16;;43404:15;;:28;;-1:-1:-1;;;;;;43404:28:0;;;;;2499:25:1;;;-1:-1:-1;;;;;43404:15:0;;;;:23;;2472:18:1;;43404:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;43404:28:0;;;;;;;;-1:-1:-1;;43404:28:0;;;;;;;;;;;;:::i;:::-;;;43400:241;;;43530:86;;;13695:25:1;;;13751:2;13736:18;;13729:34;;;13779:18;;;13772:34;;;13837:2;13822:18;;13815:34;;;43606:9:0;;43595:4;;43530:86;;13682:3:1;13667:19;43530:86:0;;;;;;;43433:199;;;43400:241;38929:4723;;;;;;;;38856:4796;43664:33;43680:4;43686:2;43690:6;43664:15;:33::i;:::-;43708:15;;-1:-1:-1;;;;;43708:15:0;:26;43735:4;43741:15;43735:4;43741:9;:15::i;:::-;43708:49;;-1:-1:-1;;;;;;43708:49:0;;;;;;;-1:-1:-1;;;;;11297:32:1;;;43708:49:0;;;11279:51:1;11346:18;;;11339:34;11252:18;;43708:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43768:15:0;;-1:-1:-1;;;;;43768:15:0;;-1:-1:-1;43768:26:0;;-1:-1:-1;43795:2:0;43799:13;43795:2;43799:9;:13::i;:::-;43768:45;;-1:-1:-1;;;;;;43768:45:0;;;;;;;-1:-1:-1;;;;;11297:32:1;;;43768:45:0;;;11279:51:1;11346:18;;;11339:34;11252:18;;43768:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38288:5533;;;;;38209:5612;;;:::o;9818:190::-;9904:7;9940:12;9932:6;;;;9924:29;;;;-1:-1:-1;;;9924:29:0;;;;;;;;:::i;:::-;-1:-1:-1;9964:9:0;9976:5;9980:1;9976;:5;:::i;:::-;9964:17;9818:190;-1:-1:-1;;;;;9818:190:0:o;33530:280::-;-1:-1:-1;;;;;33613:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;33613:39:0;;;;;;;;;;;;33665:80;;33691:15;;:42;;-1:-1:-1;;;33691:42:0;;-1:-1:-1;;;;;178:32:1;;;33691:42:0;;;160:51:1;33691:15:0;;;;:36;;133:18:1;;33691:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33665:80;33762:40;;;;;;-1:-1:-1;;;;;33762:40:0;;;;;;;;33530:280;;:::o;10412:276::-;10498:7;10533:12;10526:5;10518:28;;;;-1:-1:-1;;;10518:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10557:9:0;10569:5;10573:1;10569;:5;:::i;44317:499::-;44407:16;;;44421:1;44407:16;;;;;;;;44383:21;;44407:16;;;;;;;;;;-1:-1:-1;44407:16:0;44383:40;;44452:4;44434;44439:1;44434:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44434:23:0;;;:7;;;;;;;;;;:23;;;;44478:15;;:22;;;-1:-1:-1;;;44478:22:0;;;;:15;;;;;:20;;:22;;;;;44434:7;;44478:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44468:4;44473:1;44468:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44468:32:0;;;:7;;;;;;;;;:32;44543:15;;44511:62;;44528:4;;44543:15;44561:11;44511:8;:62::i;:::-;44584:15;;:224;;-1:-1:-1;;;44584:224:0;;-1:-1:-1;;;;;44584:15:0;;;;:66;;:224;;44665:11;;44584:15;;44735:4;;44762;;44782:15;;44584:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44372:444;44317:499;:::o;43829:480::-;43888:12;43903:13;:6;43914:1;43903:10;:13::i;:::-;43888:28;-1:-1:-1;43927:17:0;43947:16;:6;43888:28;43947:10;:16::i;:::-;43927:36;-1:-1:-1;43999:21:0;44031:22;44048:4;44031:16;:22::i;:::-;44134:18;44155:41;:21;44181:14;44155:25;:41::i;:::-;44134:62;;44207:35;44220:9;44231:10;44207:12;:35::i;:::-;44258:43;;;25053:25:1;;;25109:2;25094:18;;25087:34;;;25137:18;;;25130:34;;;44258:43:0;;25041:2:1;25026:18;44258:43:0;;;;;;;43877:432;;;;43829:480;:::o;45440:513::-;45620:15;;45588:62;;45605:4;;-1:-1:-1;;;;;45620:15:0;45638:11;45588:8;:62::i;:::-;45693:15;;-1:-1:-1;;;;;45693:15:0;:31;45732:9;45765:4;45785:11;45693:15;;45897:7;11391:6;;-1:-1:-1;;;;;11391:6:0;;11326:79;45897:7;45693:252;;;;;;-1:-1:-1;;;;;;45693:252:0;;;-1:-1:-1;;;;;25534:15:1;;;45693:252:0;;;25516:34:1;25566:18;;;25559:34;;;;25609:18;;;25602:34;;;;25652:18;;;25645:34;25716:15;;;25695:19;;;25688:44;45919:15:0;25748:19:1;;;25741:35;25450:19;;45693:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;222:180:1:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:548::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;691:3;876:1;871:2;862:6;851:9;847:22;843:31;836:42;946:2;939;935:7;930:2;922:6;918:15;914:29;903:9;899:45;895:54;887:62;;;;407:548;;;;:::o;960:131::-;-1:-1:-1;;;;;1035:31:1;;1025:42;;1015:70;;1081:1;1078;1071:12;1096:118;1182:5;1175:13;1168:21;1161:5;1158:32;1148:60;;1204:1;1201;1194:12;1219:382;1284:6;1292;1345:2;1333:9;1324:7;1320:23;1316:32;1313:52;;;1361:1;1358;1351:12;1313:52;1400:9;1387:23;1419:31;1444:5;1419:31;:::i;:::-;1469:5;-1:-1:-1;1526:2:1;1511:18;;1498:32;1539:30;1498:32;1539:30;:::i;:::-;1588:7;1578:17;;;1219:382;;;;;:::o;1606:315::-;1674:6;1682;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1790:9;1777:23;1809:31;1834:5;1809:31;:::i;:::-;1859:5;1911:2;1896:18;;;;1883:32;;-1:-1:-1;;;1606:315:1:o;2535:127::-;2596:10;2591:3;2587:20;2584:1;2577:31;2627:4;2624:1;2617:15;2651:4;2648:1;2641:15;2667:275;2738:2;2732:9;2803:2;2784:13;;-1:-1:-1;;2780:27:1;2768:40;;2838:18;2823:34;;2859:22;;;2820:62;2817:88;;;2885:18;;:::i;:::-;2921:2;2914:22;2667:275;;-1:-1:-1;2667:275:1:o;2947:183::-;3007:4;3040:18;3032:6;3029:30;3026:56;;;3062:18;;:::i;:::-;-1:-1:-1;3107:1:1;3103:14;3119:4;3099:25;;2947:183::o;3135:662::-;3189:5;3242:3;3235:4;3227:6;3223:17;3219:27;3209:55;;3260:1;3257;3250:12;3209:55;3296:6;3283:20;3322:4;3346:60;3362:43;3402:2;3362:43;:::i;:::-;3346:60;:::i;:::-;3440:15;;;3526:1;3522:10;;;;3510:23;;3506:32;;;3471:12;;;;3550:15;;;3547:35;;;3578:1;3575;3568:12;3547:35;3614:2;3606:6;3602:15;3626:142;3642:6;3637:3;3634:15;3626:142;;;3708:17;;3696:30;;3746:12;;;;3659;;3626:142;;;-1:-1:-1;3786:5:1;3135:662;-1:-1:-1;;;;;;3135:662:1:o;3802:1215::-;3920:6;3928;3981:2;3969:9;3960:7;3956:23;3952:32;3949:52;;;3997:1;3994;3987:12;3949:52;4037:9;4024:23;4066:18;4107:2;4099:6;4096:14;4093:34;;;4123:1;4120;4113:12;4093:34;4161:6;4150:9;4146:22;4136:32;;4206:7;4199:4;4195:2;4191:13;4187:27;4177:55;;4228:1;4225;4218:12;4177:55;4264:2;4251:16;4286:4;4310:60;4326:43;4366:2;4326:43;:::i;4310:60::-;4404:15;;;4486:1;4482:10;;;;4474:19;;4470:28;;;4435:12;;;;4510:19;;;4507:39;;;4542:1;4539;4532:12;4507:39;4566:11;;;;4586:217;4602:6;4597:3;4594:15;4586:217;;;4682:3;4669:17;4699:31;4724:5;4699:31;:::i;:::-;4743:18;;4619:12;;;;4781;;;;4586:217;;;4822:5;-1:-1:-1;;4865:18:1;;4852:32;;-1:-1:-1;;4896:16:1;;;4893:36;;;4925:1;4922;4915:12;4893:36;;4948:63;5003:7;4992:8;4981:9;4977:24;4948:63;:::i;:::-;4938:73;;;3802:1215;;;;;:::o;5022:456::-;5099:6;5107;5115;5168:2;5156:9;5147:7;5143:23;5139:32;5136:52;;;5184:1;5181;5174:12;5136:52;5223:9;5210:23;5242:31;5267:5;5242:31;:::i;:::-;5292:5;-1:-1:-1;5349:2:1;5334:18;;5321:32;5362:33;5321:32;5362:33;:::i;:::-;5022:456;;5414:7;;-1:-1:-1;;;5468:2:1;5453:18;;;;5440:32;;5022:456::o;5922:241::-;5978:6;6031:2;6019:9;6010:7;6006:23;6002:32;5999:52;;;6047:1;6044;6037:12;5999:52;6086:9;6073:23;6105:28;6127:5;6105:28;:::i;6168:247::-;6227:6;6280:2;6268:9;6259:7;6255:23;6251:32;6248:52;;;6296:1;6293;6286:12;6248:52;6335:9;6322:23;6354:31;6379:5;6354:31;:::i;6644:799::-;6784:6;6792;6800;6808;6816;6824;6832;6840;6848;6856;6909:3;6897:9;6888:7;6884:23;6880:33;6877:53;;;6926:1;6923;6916:12;6877:53;-1:-1:-1;;6949:23:1;;;7019:2;7004:18;;6991:32;;-1:-1:-1;7070:2:1;7055:18;;7042:32;;7121:2;7106:18;;7093:32;;-1:-1:-1;7172:3:1;7157:19;;7144:33;;-1:-1:-1;7224:3:1;7209:19;;7196:33;;-1:-1:-1;7276:3:1;7261:19;;7248:33;;-1:-1:-1;7328:3:1;7313:19;;7300:33;;-1:-1:-1;7380:3:1;7365:19;;7352:33;;-1:-1:-1;7432:3:1;7417:19;7404:33;;-1:-1:-1;6644:799:1;-1:-1:-1;6644:799:1:o;8010:388::-;8078:6;8086;8139:2;8127:9;8118:7;8114:23;8110:32;8107:52;;;8155:1;8152;8145:12;8107:52;8194:9;8181:23;8213:31;8238:5;8213:31;:::i;:::-;8263:5;-1:-1:-1;8320:2:1;8305:18;;8292:32;8333:33;8292:32;8333:33;:::i;8403:385::-;8489:6;8497;8505;8513;8566:3;8554:9;8545:7;8541:23;8537:33;8534:53;;;8583:1;8580;8573:12;8534:53;-1:-1:-1;;8606:23:1;;;8676:2;8661:18;;8648:32;;-1:-1:-1;8727:2:1;8712:18;;8699:32;;8778:2;8763:18;8750:32;;-1:-1:-1;8403:385:1;-1:-1:-1;8403:385:1:o;8793:356::-;8995:2;8977:21;;;9014:18;;;9007:30;9073:34;9068:2;9053:18;;9046:62;9140:2;9125:18;;8793:356::o;9154:127::-;9215:10;9210:3;9206:20;9203:1;9196:31;9246:4;9243:1;9236:15;9270:4;9267:1;9260:15;9286:168;9359:9;;;9390;;9407:15;;;9401:22;;9387:37;9377:71;;9428:18;;:::i;9459:380::-;9538:1;9534:12;;;;9581;;;9602:61;;9656:4;9648:6;9644:17;9634:27;;9602:61;9709:2;9701:6;9698:14;9678:18;9675:38;9672:161;;9755:10;9750:3;9746:20;9743:1;9736:31;9790:4;9787:1;9780:15;9818:4;9815:1;9808:15;9672:161;;9459:380;;;:::o;10965:127::-;11026:10;11021:3;11017:20;11014:1;11007:31;11057:4;11054:1;11047:15;11081:4;11078:1;11071:15;11384:135;11423:3;11444:17;;;11441:43;;11464:18;;:::i;:::-;-1:-1:-1;11511:1:1;11500:13;;11384:135::o;11524:251::-;11594:6;11647:2;11635:9;11626:7;11622:23;11618:32;11615:52;;;11663:1;11660;11653:12;11615:52;11695:9;11689:16;11714:31;11739:5;11714:31;:::i;11780:184::-;11850:6;11903:2;11891:9;11882:7;11878:23;11874:32;11871:52;;;11919:1;11916;11909:12;11871:52;-1:-1:-1;11942:16:1;;11780:184;-1:-1:-1;11780:184:1:o;12274:245::-;12341:6;12394:2;12382:9;12373:7;12369:23;12365:32;12362:52;;;12410:1;12407;12400:12;12362:52;12442:9;12436:16;12461:28;12483:5;12461:28;:::i;12524:217::-;12564:1;12590;12580:132;;12634:10;12629:3;12625:20;12622:1;12615:31;12669:4;12666:1;12659:15;12697:4;12694:1;12687:15;12580:132;-1:-1:-1;12726:9:1;;12524:217::o;13153:306::-;13241:6;13249;13257;13310:2;13298:9;13289:7;13285:23;13281:32;13278:52;;;13326:1;13323;13316:12;13278:52;13355:9;13349:16;13339:26;;13405:2;13394:9;13390:18;13384:25;13374:35;;13449:2;13438:9;13434:18;13428:25;13418:35;;13153:306;;;;;:::o;16024:557::-;16137:6;16145;16153;16161;16169;16177;16230:3;16218:9;16209:7;16205:23;16201:33;16198:53;;;16247:1;16244;16237:12;16198:53;16279:9;16273:16;16298:31;16323:5;16298:31;:::i;:::-;16393:2;16378:18;;16372:25;16437:2;16422:18;;16416:25;16481:2;16466:18;;16460:25;16525:3;16510:19;;16504:26;16570:3;16555:19;;;16549:26;16348:5;;16372:25;;-1:-1:-1;16416:25:1;;16460;;-1:-1:-1;16504:26:1;-1:-1:-1;16549:26:1;;-1:-1:-1;16024:557:1;-1:-1:-1;;;16024:557:1:o;18161:125::-;18226:9;;;18247:10;;;18244:36;;;18260:18;;:::i;20401:401::-;20603:2;20585:21;;;20642:2;20622:18;;;20615:30;20681:34;20676:2;20661:18;;20654:62;-1:-1:-1;;;20747:2:1;20732:18;;20725:35;20792:3;20777:19;;20401:401::o;20807:399::-;21009:2;20991:21;;;21048:2;21028:18;;;21021:30;21087:34;21082:2;21067:18;;21060:62;-1:-1:-1;;;21153:2:1;21138:18;;21131:33;21196:3;21181:19;;20807:399::o;23733:128::-;23800:9;;;23821:11;;;23818:37;;;23835:18;;:::i;23866:980::-;24128:4;24176:3;24165:9;24161:19;24207:6;24196:9;24189:25;24233:2;24271:6;24266:2;24255:9;24251:18;24244:34;24314:3;24309:2;24298:9;24294:18;24287:31;24338:6;24373;24367:13;24404:6;24396;24389:22;24442:3;24431:9;24427:19;24420:26;;24481:2;24473:6;24469:15;24455:29;;24502:1;24512:195;24526:6;24523:1;24520:13;24512:195;;;24591:13;;-1:-1:-1;;;;;24587:39:1;24575:52;;24682:15;;;;24647:12;;;;24623:1;24541:9;24512:195;;;-1:-1:-1;;;;;;;24763:32:1;;;;24758:2;24743:18;;24736:60;-1:-1:-1;;;24827:3:1;24812:19;24805:35;24724:3;23866:980;-1:-1:-1;;;23866:980:1:o
Swarm Source
ipfs://29af7403eeb602b3a8e52faf4c926bcfb79d04cec34ff9bddc2980fd2a3ed008
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.